2013-11-22 2 views
1

I 파생 형 다음 항 : 메인 코드에서포트란 (90), 서브 루틴 유도 형 정의 어레이를 사용하는 방법

TYPE CLST_MEAN 
    REAL(8), ALLOCATABLE :: OMX(:,:), OMZ(:,:) 
    REAL(8), ALLOCATABLE :: U(:,:), W(:,:) 
    REAL(8), ALLOCATABLE :: YO(:,:), ZO(:,:) 
    REAL(8), ALLOCATABLE :: XU(:,:), ZU(:,:) 
    INTEGER :: NUM 
    END TYPE Clst_Mean 

, I는

같은 서브 루틴에서 배열 및 입력을 정의 서브 루틴
TYPE(CLST_MEAN), ALLOCATABLE :: MEAN(:) 
    ALLOCATE(MEAN(NCL)) 
    DO I = 1, NCL 
     ALLOCATE(MEAN(I)%OMX(NY,NZ)) 
     ALLOCATE(MEAN(I)%OMZ(NY,NZ)) 
     ALLOCATE(MEAN(I)%YO(NY,NZ)) 
     ALLOCATE(MEAN(I)%ZO(NY,NZ)) 
     ALLOCATE(MEAN(I)%U(NX,NZ)) 
     ALLOCATE(MEAN(I)%W(NX,NZ)) 
     ALLOCATE(MEAN(I)%XU(NX,NZ)) 
     ALLOCATE(MEAN(I)%ZU(NX,NZ)) 
    END DO 
    CALL K_MEAN(MEAN,SMP) 

크기 (cl_mean) 용

SUBROUTINE K_MEAN(CL_MEAN,SMP) 
    USE DATATYPE, ONLY : CLST_MEAN, SAMPLE 
    IMPLICIT NONE 
    TYPE(CLST_MEAN), DIMENSION(:), INTENT(OUT) :: CL_MEAN 
    .... 
    write(*,*) size(cl_mean), SIZE(CL_MEAN(1)%OMX) 

출력은 정확하다. 그러나 크기 (cl_mean (1) % omx)의 출력은 1입니다. 즉, 컴파일러는 cl_mean (1) % omx가 배열이 아니라 변수라고 간주합니다.

어떻게 배열에 액세스 할 수 있습니까? 고맙습니다.

답변

0

intent(out)을 사용하면 할당 된 배열이 파생 데이터 형식에서 할당 해제됩니다. intent(inout) 사용하여 gfortran 4.7을 사용하여 문제가 해결되었습니다.

+0

대단히 감사합니다. 의도 (inout)를 사용하는 것은 저에게 효과적입니다. – user3023645

관련 문제