Мне нужно прочитать много данных из файла в программе Fortran. Размер данных является переменным, поэтому я хотел бы динамически распределять массивы. Моя идея - сделать подпрограмму, которая читает все данные и выделяет память. Упрощенная версия программы:Выделение массивов в подпрограмме Fortran
program main
implicit none
real*8, dimension(:,:), allocatable :: v
integer*4 n
!This subroutine will read all the data and allocate the memory
call Memory(v,n)
!From here the program will have other subroutines to make calculations
end
subroutine Memory(v,n)
implicit none
real*8, dimension(:,:), allocatable :: v
integer*4 n,i
n=5
allocate(v(n,2))
do i=1,n
v(i,1)=1.0
v(i,2)=2.0
enddo
return
end subroutine Memory
Эта программа дает мне следующую ошибку:
Error: Dummy argument 'v' of procedure 'memory' at (1) has an attribute that requieres an explicit interface for this procedure
Является ли это правильный способ структурирования такого рода программы? Если да, то как я могу решить эту ошибку?
Спасибо.
Спасибо! В моей реальной программе у меня есть несколько файлов, я попробую использовать модуль. – Msegade
И если я могу сделать другое предложение - попробуйте «разучить» использование нестандартного реального синтаксиса * 8 и целого * 4, он ограничивает гибкость. Популярным методом является определение модуля KINDS, который использует SELECTED_INT_KIND и SELECTED_REAL_KIND для объявления серии констант PARAMETER для видов, которые вы будете использовать, таких как SP и DP, а затем используйте REAL (DP) для своих объявлений. Я согласен с Марком в том, что модули - ваш лучший выбор здесь. –