포트란 프로그램의 파일에서 많은 양의 데이터를 읽어야합니다. 데이터의 크기는 가변적이므로 배열을 동적으로 할당하고 싶습니다. 내 생각은 모든 데이터를 읽고 메모리를 할당하는 서브 루틴을 만드는 것이다. 프로그램의 단순화 된 버전은 다음과 같습니다포트란 서브 루틴에서 배열 할당
Error: Dummy argument 'v' of procedure 'memory' at (1) has an attribute that requieres an explicit interface for this procedure
이 구조의 올바른 방법으로 프로그램의 종류 :
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
이 프로그램은 나에게 다음과 같은 오류를 준다? 그렇다면 어떻게 해결할 수 있습니까?
감사합니다.
감사합니다. 실제 프로그램에 여러 개의 파일이 있으므로 모듈 접근 방식을 시도 할 것입니다. – Msegade
그리고 또 다른 제안을 할 수 있습니다 - 비표준 실제 * 8 및 정수 * 4 구문의 사용을 "해제"하려고하면 유연성이 제한됩니다. 널리 사용되는 방법은 SELECTED_INT_KIND 및 SELECTED_REAL_KIND를 사용하여 SP 및 DP와 같이 사용할 매개 변수에 대한 일련의 PARAMETER 상수를 선언 한 다음, REAL (DP)을 선언에 사용하는 모듈 KINDS를 정의하는 것입니다. Mark는 모듈이 가장 좋은 방법이라고 여기는 것에 동의합니다. –