2014-06-22 2 views
2

나에게 전달 된 일부 포트란 코드를 이해하려고합니다. 이것은 서브 루틴의 인수리스트입니다 :매개 변수 목록 : 이름 뒤에 오는 괄호의 의미

INTEGER, INTENT(IN) :: NKT 
REAL, INTENT(IN) :: NW2(NKT), VAR, SUE 
REAL, INTENT(INOUT) :: MYSPC(NKT,NKT) 

나는 NKT, VAR 및 SUE의 선언을 이해합니다. 그러나 NW2 (NKT), MYSPC (NKT, NKT)에서 "(NKT)"와 "(NKT, NKT)"의 의미는 무엇입니까? NKT는 배열 NW2 및 MYSPC의 크기를 지정합니까? 또는 서브 루틴이 전달 된 값을 NW2의 NKT 위치에 저장한다고 말하고 있습니까?

변수 뒤에()를 사용하면 정말 혼란 스럽습니다. Nyhoff의 "FORTRAN 90 소개"책에서는 다루지 않습니다. 어떤 도움을 주시면 감사하겠습니다.

이 예에서는

+4

아마도 책을 신중하게 읽지 않을 것입니다. –

+0

나는'fortran' 질문이 어떻게 생겼는지 보려고이 질문을 클릭했습니다 ... : D – Andrew

+1

당신이 우연히 발견 한 이유는 아마도 배열 선언의 스타일뿐만 아니라 배열을 전달하는 방법 일 것입니다 절차에. 귀하의 예제에서,'NW2'와'MYSPC'는 * 자동 * 배열이며,'NKT' 인수로부터 자동으로 크기를 얻습니다. Fortran 90 이후 버전에서는,'NW2 (:)'와'MYSPC (:, :)'와 같은 * assumed-shape * 배열을 사용하여 실제로 이것을 볼 수 있습니다. 배열은 명시 적으로 요구하지 않고 전달 된 실제 인수의 모양을 가정합니다 여기에서 한 것처럼 크기를 전달하십시오. – sigma

답변

5

(코드 Wavewatch의 변형 세그먼트 http://polar.ncep.noaa.gov/waves/wavewatch/이다), NW2 (NKT)는 NKT 요소 MYSPC (NKT, NKT)는 NKTxNKT 차원 배열로 배열된다. Fortran 서적에서이 문제를 다루지 않는다면 실제로 더 좋은 책을 얻으십시오. 이전 프로그래밍 경험이 있다면 Metcalf, Reid 및 Cohen이 "Modern Fortran Explained"를 권합니다.

3

이전 스타일의 배열 선언입니다. 귀하의 책은 :: 전에 dimension()의 새로운 스타일을 강조했을 것입니다. 어떤 사람들은 예제의 두 번째 줄에서와 같이 배열과 스칼라를 같은 선언에 혼합 할 수 있다는 점을이 스타일의 장점이라고 생각할 수도 있습니다. 나는 새로운 스타일을 선호한다. 아마도 당신이 당신의 책이 화해하도록 돕는다

+3

더 좋을지 모르지만 너무 지나치게 길다. –

+0

당신은 옳습니다. 차원이 적용되었지만 이전 스타일은 (내 책에서) 보이지 않습니다. 두 가지 스타일을 연결해 주셔서 감사합니다! – trailm

1

REAL, INTENT(IN) :: NW2(NKT) 
REAL, INTENT(INOUT) :: MYSPC(NKT,NKT) 

다음은 배열을 선언 할 때 똑같은 말을 두 가지 방법이 있습니다

REAL, INTENT(IN), DIMENSION(NKT) :: NW2 
REAL, INTENT(INOUT), DIMENSION(NKT,NKT) :: MYSPC 

에 해당하는 것을 고려한다.

관련 문제