2016-09-02 3 views
0

함수 또는 서브 루틴으로 전달되는 배열의 순위 및/또는 크기를 알고있는 경우 가정 형 배열 또는 가정용 배열을 사용해야하는 이유가 있습니까? 예를 들어, 나는 그렇게하지 (나중에 포트란 90 이상)배열 순위/크기를 사용할 수있는 경우 가정 크기 배열을 사용해야하는 이유가 있습니까?

function f(a,m,n) 
    real,dimension(m,n),intent(inout) :: a 
    ! ... 
end function 

어떤 이유가 함께

function f(a,m,n) 
    real,dimension(*),intent(inout) :: a 
    ! ... 
end function 

을 대체 할 수 있다면?

function f(a,m,n) 
    real,dimension(m,n),intent(inout) :: a 
    ! ... 
end function 

a 가정 된 모양의 배열을하지 않는 코멘트, 답변 많이하지 ...

+0

귀하의 코드 예제를 참조 OP의 질문에 대답합니다. 제목과 텍스트는 가정 된 모양을 언급합니다. 추측 된 모양과 가정 된 크기는 함축적으로 의미가 다르다. 명백한 모양과 가정 된 모양을 비교하는 것에 정말로 관심이 있습니까? – francescalus

+0

지적 해 주셔서 고맙습니다. 사실상 가정 된 크기를 명시 적 모양과 비교하는 데 관심이 있습니다 (위의 두 번째 예가 의미하는 바라면). 제목을 업데이트합니다. –

답변

5

너무 오래, 그것은 명시 적 모양 (m,n)있다. 요즘 내가 쓰고있다

function f(a) 
    real,dimension(:,:),intent(inout) :: a 
    ! ... 
end function 

이 버전에서 a는 확실히 가정이다. 드물게 드물게 배열의 크기 나 모양이 프로 시저 내부에 필요합니다. shape(a) 등으로 작성합니다.

마지막으로,이있는 것으로 크기 배열 인수 Assumed size arrays: Colon vs. asterisk - DIMENSION(:) arr vs. arr(*)

+0

함수 f2, f3 및 f4를 만들기 시작하면 M과 N의 크기 만 다르므로 @High Performance Mark 예제 # 2로 향합니다. 언급 된 SHAPE 및 UBOUND 및 LBOUND는 유용하게 사용됩니다. – Holmz

+0

혼란을 가져 주어서 죄송합니다. 나는 크기를 가정 할 때 가상의 모양을 썼습니다. –