Я использую API в Fortran, который предоставляет рутину для записи данных. Скажем, его имя api_write_data
. Эта процедура ожидает массив как аргумент, который может быть размером 1, 2 или 3.Pass 1D массив в 3D-массив
Я хочу написать подпрограмму, которая работает как оболочка для этой процедуры API. Но поэтому мне необходимо написать рутину, которая может обрабатывать массивы 1D, 2D или 3D и может корректно передавать их в процедуру API. Как я могу это сделать? Могу я вообще это сделать?
Мой подход был что-то вроде этого, но это не работает:
subroutine write_data(array)
implicit none
integer, dimension(:,:,:), intent(in):: array
call api_write_data(array)
end subroutine write_data
Однако, когда я называю эту процедуру с например массива 1D, я получаю известную ошибку:
Error: Rank mismatch in argument 'array' at (1) (rank-3 and rank-1)
Есть ли способ сделать такие вещи в Фортране? Для меня необходимо передать массив как 1D, 2D или 3D массив в процедуру write_data
. Тем не менее, я мог бы передать массив как массив 1D в api_write_data
.
Вы хоть представляете, как я мог это сделать?
без ограничения на fortran 90, была бы еще одна возможность? Возможно, с новыми языковыми функциями, которые также могут быть скомпилированы ifort и gfort для файлов .f90 – Skyy2010