Это необычная идиома для получения подпрограммы для работы с (прямоугольником в N-измерениях) исходного массива.
Все параметры в Fortran (по крайней мере, до Fortran 90) передаются по ссылке, поэтому фактический аргумент массива разрешается как место в памяти. Выберите местоположение внутри пространства, выделенного для всего массива, и подпрограмма обрабатывает только часть массива.
Самая большая проблема: Вы должны знать, как массив размещается в памяти и как работает схема индексации массивов Фортрана. Fortran использует упорядочение основного массива столбцов, которое противоположно c. Рассмотрим массив размером 5x5 (и индексируйте в обоих направлениях от 0, чтобы упростить сравнение с c). В обоих языках 0,0 является первым элементом в памяти. В c следующим элементом в памяти является [0][1]
, но в Фортране это (1,0)
. Это влияет на то, какие индексы вы отбрасываете при выборе подпространства: если исходный массив A (i, j, k, l), а подпрограмма работает в трехмерном подпространстве (как в вашем примере), в c она работает на Aprime[i=constant][j][k][l]
, но в Фортране работает на Aprime(i,j,k,l=constant)
.
Другой риск заключается в обертывании. Размеры (под) массива в подпрограмме должны совпадать с размерами в вызывающей подпрограмме, иначе произойдут странные, странные вещи (подумайте об этом). Так что, если A объявлен с размером (0: 4,0: 5,0: 6,0: 7), и мы вызываем с элементом A(0,1,0,1)
, подпрограмма получения может свободно запускать индекс каждого измерения там, где ему нравится , но должны сделать размеры (4,5,6)
или иначе; но это означает, что последний элемент в направлении j фактически оборачивается! Что нужно сделать, это , а не использовать последний элемент. Убедиться в том, что это произойдет, - дело программистов, и это неприятно. Береги себя. Много забот.