Как мне поместить вывод SHAPE () в две переменные? - PullRequest
0 голосов
/ 05 февраля 2020

Как я могу поместить вывод SHAPE() в две переменные?

Рассмотрим случай, когда я генерирую массив следующим образом:

  REAL :: r(1,10)
  CALL RANDOM_NUMBER(r)

как мне поместить размеры 1 и 10 на две переменные l1 и l2?

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

Из Стандарт Фортран 2018

16.9.179 SIZE (ARRAY [, DIM, KIND]):

1. Описание: Размер массива или один экстент. 5. Значение результата: Если присутствует DIM, результат имеет значение, равное экстенту измерения DIM, равному ARRAY, за исключением того, что если ARRAY имеет предполагаемый ранг и связан с массивом предполагаемого размера и DIM присутствует со значением, равным рангу ARRAY, значение равно -1. Если DIM отсутствует и ARRAY является предполагаемым рангом, результат имеет значение, равное PRODUCT(SHAPE(ARRAY, KIND)). В противном случае результат имеет значение, равное общему количеству элементов ARRAY.

Так что я бы сделал:

l1 = size(array,dim=1)
l2 = size(array,dim=2)

Также см. Комментарий от @ jcerar

Другой способ сделать это с помощью SHAPE:

16.9.172 SHAPE (SOURCE [, KIND]):

1. Описание: Форма массива или скаляра. 5. Значение результата: У результата есть значение, чей i-й элемент равен экстенту измерения i, равному SOURCE, за исключением того, что если SOURCE имеет предполагаемый ранг и связан с массивом предполагаемого размера, последний элемент равен −1.

integer, dimension(:), allocatable :: l
l = shape(array)
0 голосов
/ 05 февраля 2020

Я нашел ответ сам после некоторого эксперимента.

Нужно определить массив

integer,dimension(0:1)::s1

и просто использовать s1=shape(r)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...