real(kind=kind_real), pointer :: c(:,:,:)
Как вы уже написали, эта строка объявляет переменную-указатель c
, которая указывает на трехмерный массив из real
чисел вида kind_real
.Двоеточие здесь означает, что размеры для каждого измерения пока неизвестны.Предполагая, что это внутри блока type
, c
является членом типа.Обратите внимание, что в Fortran ()
используется как для индексов массива, так и для вызовов функций.
self%c => self%gfld3d(:,:,ioff+1:)
В конструкторе указателю назначается цель, который является частью трехмерного массива self%gfld3d
, который также является членом того же типа.Указатели в Fortran содержат информацию о размерах фрагмента массива, на который они указывают.В этом случае первые два двоеточия означают, что срез массива охватывает все два первых измерения целевого массива.ioff+1:
означает, что в третьем измерении цель указателя включает все значения в self%gfld3d
, начиная с заданного значения ioff+1
.Это упрощенный случай общего обозначения среза, где a(start:end:step)
представляет срез массива a
, начиная с индекса start
и заканчивая end
, с шагом step
.
flds%c(ibx,iby,2:flds%nc*flds%nl:2)
Исходя из вышеизложенного, это не вызов функции.Это выражение, которое оценивает одномерный несмежный срез массива.Начиная с цели flds%c
, по индексам ibx
и iby
в первых двух измерениях, она содержит каждое второе значение в третьем измерении, начиная с индекса 2 и заканчивая flds%nc * flds%nl
.Первые два измерения в выходном массиве не учитываются, поскольку индексы в этих измерениях являются простыми скалярами.Это выражение не может быть само по себе в утверждении, поэтому я предполагаю, что вы оставили какую-то часть строки в своем вопросе.