가능한 한 적은 수정으로 예전 코드를 가진 새로운 Fortran 90 모듈을 어떻게 인터페이스합니까? 아이디어는 서브 루틴에서 새 코드에 "모듈"을 사용하고 가능한 한 거의 수정하지 않고 (즉, 공통 블록을 그대로 둡니다) 이전 코드를 그대로 두는 것입니다.공통 블록과 모듈간에 데이터를 공유하는 방법은 무엇입니까?
간단한 프로그램을 고려 :
내가 달성하고자하는 것을 보여주기 위해, 여기에 간단한 프로그램입니다module Bmod
real*8 x
end module Bmod
program main
use Bmod
common /a/ x ! old code
do i=1, 5
x=3.14159 ! do something with x in fortran77
call B() ! new f90 code
enddo
end program main
! new features added here
subroutine new_code()
use Bmod
write(*,*) 'x in B=', x
end subroutine new_code
을하지만 컴파일하는 동안 오류가 발생합니다 :
error #6401: The attributes of this name conflict with those made accessible by a USE statement. [X]
common /a/ x
간단한에게 해결책은 어디서나 일반적인 것을 타야한다는 것입니다. 하지만 그것은 오래된 코드를 수정하므로 내 경우에는 허용되지 않습니다. 게다가 오래된 코드는 구식으로 쓰여진 몇 개의 공통 블록에 퍼져있는 수천 개의 변수로 구성됩니다.
@khakishoiab 편집시주의하십시오. 수정 사항이 승인되어서는 안됩니다. Fortran 90은 FORTRAN90이 아닌이 방법으로 작성됩니다. 문장에 두 번째 동사를 추가했습니다. 동사 * 인터페이스 *는 괜찮 았습니다. 거기에 * 사용 *을 추가 할 수는 없으며 * 인터페이스 * 만 삭제하고 대신 * 사용 *을 추가 할 수 있습니다. 또한 하단 (단점)에서 두 문장 사이의 누락 된 부분을 놓쳤습니다. –
Nice review @VladimirF – khakishoiab
'real * 8 '은 Fortran이 유효하지 않으며 ISO Fortran/FORTRAN 표준에 포함되지 않았습니다. – jlokimlin