Ответ 1
Нет. И все обходные пути, которые я могу придумать, - ужасные хаки, вам лучше написать функцию, чтобы взять data
и index
в качестве аргументов и выплюнуть нужные элементы.
Однако вы могли бы использовать современные возможности Fortran для переназначения рангов массива, чтобы сделать точно противоположное, что может удовлетворить ваше желание играть быстро и свободно с рангом массива.
Учитывая объявление
double precision, dimension(1000), target :: data
вы можете определить указатель ранга-3
double precision, pointer :: index_3d(:,:,:)
а затем установите его следующим образом:
index_3d(1:10,1:10,1:10) => data
и hey presto, теперь вы можете использовать индексы ранга 3 и ранга 1 в data
, что близко к тому, что вы хотите сделать. Я еще не использовал это в гневе, но несколько простых тестов не выявили серьезных проблем.