Как я могу поместить вывод SHAPE() в две переменные?
SHAPE()
Рассмотрим случай, когда я генерирую массив следующим образом:
REAL :: r(1,10) CALL RANDOM_NUMBER(r)
как мне поместить размеры 1 и 10 на две переменные l1 и l2?
1
10
l1
l2
Из Стандарт Фортран 2018
16.9.179 SIZE (ARRAY [, DIM, KIND]): 1. Описание: Размер массива или один экстент. 5. Значение результата: Если присутствует DIM, результат имеет значение, равное экстенту измерения DIM, равному ARRAY, за исключением того, что если ARRAY имеет предполагаемый ранг и связан с массивом предполагаемого размера и DIM присутствует со значением, равным рангу ARRAY, значение равно -1. Если DIM отсутствует и ARRAY является предполагаемым рангом, результат имеет значение, равное PRODUCT(SHAPE(ARRAY, KIND)). В противном случае результат имеет значение, равное общему количеству элементов ARRAY.
16.9.179 SIZE (ARRAY [, DIM, KIND]):
SIZE (ARRAY [, DIM, KIND])
1. Описание: Размер массива или один экстент. 5. Значение результата: Если присутствует DIM, результат имеет значение, равное экстенту измерения DIM, равному ARRAY, за исключением того, что если ARRAY имеет предполагаемый ранг и связан с массивом предполагаемого размера и DIM присутствует со значением, равным рангу ARRAY, значение равно -1. Если DIM отсутствует и ARRAY является предполагаемым рангом, результат имеет значение, равное PRODUCT(SHAPE(ARRAY, KIND)). В противном случае результат имеет значение, равное общему количеству элементов ARRAY.
DIM
ARRAY
PRODUCT(SHAPE(ARRAY, KIND))
Так что я бы сделал:
l1 = size(array,dim=1) l2 = size(array,dim=2)
Также см. Комментарий от @ jcerar
Другой способ сделать это с помощью SHAPE:
SHAPE
16.9.172 SHAPE (SOURCE [, KIND]): 1. Описание: Форма массива или скаляра. 5. Значение результата: У результата есть значение, чей i-й элемент равен экстенту измерения i, равному SOURCE, за исключением того, что если SOURCE имеет предполагаемый ранг и связан с массивом предполагаемого размера, последний элемент равен −1.
16.9.172 SHAPE (SOURCE [, KIND]):
SHAPE (SOURCE [, KIND])
1. Описание: Форма массива или скаляра. 5. Значение результата: У результата есть значение, чей i-й элемент равен экстенту измерения i, равному SOURCE, за исключением того, что если SOURCE имеет предполагаемый ранг и связан с массивом предполагаемого размера, последний элемент равен −1.
i
SOURCE
−1
integer, dimension(:), allocatable :: l l = shape(array)
Я нашел ответ сам после некоторого эксперимента.
Нужно определить массив
integer,dimension(0:1)::s1
и просто использовать s1=shape(r)
s1=shape(r)