[완료]포트란 서브루틴에 관한 질문2입니다.
다음과 같은 서브루틴을 사용 했는데요
Subroutine potential(A,B,C,D,n,ef,dgi,bi,lam,ga)
dimension A(3000),B(3000),C(3000),D(3000),ef(3000),dgi(3000)
Do 970 i=1,n
A(i)=-bi*lam*ef(i)
B(i)=-(2**(3.d0/2.d0))*bi*ga*lam*dgi(i)
C(i)=-bi*lam*(ef(i)-2*ga*dgi(i))
D(i)=-(2**(3.d0/2.d0))*bi*ga*lam*dgi(i)
970 continue
return
end
이런 오류가 생겼습니다.
무엇이 문제인가요?
gfm_dd.f: In subroutine `potential':
gfm_dd.f:93: warning:
call potential(Va,Vb,Vc,Vd,nx,f,g,b,lambda,gamm)
1
gfm_dd.f:155: (continued):
Subroutine potential(A,B,C,D,n,ef,dgi,bi,lam,ga)
2
Argument #1 (named `a') of `potential' is one precision at (2) but is some other
precision at (1) [info -f g77 M GLOBALS]
gfm_dd.f:93: warning:
call potential(Va,Vb,Vc,Vd,nx,f,g,b,lambda,gamm)
1
gfm_dd.f:155: (continued):
Subroutine potential(A,B,C,D,n,ef,dgi,bi,lam,ga)
2
Argument #2 (named `b') of `potential' is one precision at (2) but is some other
precision at (1) [info -f g77 M GLOBALS]
gfm_dd.f:93: warning:
call potential(Va,Vb,Vc,Vd,nx,f,g,b,lambda,gamm)
1
gfm_dd.f:155: (continued):
Subroutine potential(A,B,C,D,n,ef,dgi,bi,lam,ga)
2
Argument #3 (named `c') of `potential' is one precision at (2) but is some other
precision at (1) [info -f g77 M GLOBALS]
gfm_dd.f:93: warning:
call potential(Va,Vb,Vc,Vd,nx,f,g,b,lambda,gamm)
1
gfm_dd.f:155: (continued):
Subroutine potential(A,B,C,D,n,ef,dgi,bi,lam,ga)
2
Argument #4 (named `d') of `potential' is one precision at (2) but is some other
precision at (1) [info -f g77 M GLOBALS]
gfm_dd.f:93: warning:
call potential(Va,Vb,Vc,Vd,nx,f,g,b,lambda,gamm)
1
gfm_dd.f:155: (continued):
Subroutine potential(A,B,C,D,n,ef,dgi,bi,lam,ga)
2
Argument #6 (named `ef') of `potential' is one precision at (2) but is some othe
r precision at (1) [info -f g77 M GLOBALS]
gfm_dd.f:93: warning:
call potential(Va,Vb,Vc,Vd,nx,f,g,b,lambda,gamm)
1
gfm_dd.f:155: (continued):
Subroutine potential(A,B,C,D,n,ef,dgi,bi,lam,ga)
2
Argument #7 (named `dgi') of `potential' is one precision at (2) but is some oth er precision at (1) [info -f g77 M GLOBALS]
gfm_dd.f:93: warning:
call potential(Va,Vb,Vc,Vd,nx,f,g,b,lambda,gamm)
1
gfm_dd.f:155: (continued):
Subroutine potential(A,B,C,D,n,ef,dgi,bi,lam,ga)
2
Argument #8 (named `bi') of `potential' is one precision at (2) but is some othe r precision at (1) [info -f g77 M GLOBALS]
gfm_dd.f:93: warning:
call potential(Va,Vb,Vc,Vd,nx,f,g,b,lambda,gamm)
1
gfm_dd.f:155: (continued):
Subroutine potential(A,B,C,D,n,ef,dgi,bi,lam,ga)
2
Argument #10 (named `ga') of `potential' is one precision at (2) but is some oth er precision at (1) [info -f g77 M GLOBALS]
저의 우문에 교수님들의 현답 기다리겠습니다. 매번 감사합니다.
Subroutine
Subroutine potential(A,B,C,D,n,ef,dgi,bi,lam,ga)
dimension A(3000),B(3000),C(3000),D(3000),ef(3000),dgi(3000)
Do 970 i=1,n
A(i)=-bi*lam*ef(i)
B(i)=-(2**(3.d0/2.d0))*bi*ga*lam*dgi(i) <- double precision?
C(i)=-bi*lam*(ef(i)-2*ga*dgi(i))
D(i)=-(2**(3.d0/2.d0))*bi*ga*lam*dgi(i) <- double precision?
970 continue
return
end
루프문에 맞춰서 보면 아래와 같이 선언하는게 좋겠지요.
real A(3000),C(3000),ef(3000),dgi(3000)
double precision B(3000),D(3000)
여기서 ef 와 dgi 는 메인프로그램에서 어떤식으로 정의되었는지 모르므로 그냥 real로 선언했습니다.
가능하면 서브루틴 내에서 입출력 변수들을 정의해 놓는게 나중을 위해서도 좋습니다.
double precision을 굳이 2의 지수승에 왜 사용했는지 의문이 생기는군요.
덧붙여서 사족을 달자면, 저는 dimension을 가급적이면 안사용합니다.
그럼 조금이나마 도움이 되었는지 모르겠네요. ^^
감사합니다.
감사합니다. 큰 도움 되었습니다. 아프로도 잘 부탁드립니다.
댓글 달기