2016-11-08 1 views
0

각 요소가 치수 (taille, taille)의 행렬 인 phi0(ngrains)의 배열을 정의하려고합니다. 예를 들어 phi0(1)을 찾을 때 예를 들어 taille*taille 요소의 행렬과 phi0(2) .... phi0(ngrains)의 경우를 표시해야합니다. .배열 배열을 정의하는 방법은 무엇입니까?

어떻게 Fortran에서 수행 할 수 있습니까?

이것은 내가 지금까지 시도한 것입니다 :하지만 난 점점 오류 메시지

PROGRAM DERIVED_TYP 

    INTEGER :: i,ngrains,nmax=4 

    TYPE INITIAL   
     REAL, DIMENSION(:,:), ALLOCATABLE :: zeros(:,:) 
    END TYPE INITIAL 

    TYPE (INITIAL), dimension(:), allocatable :: phi0 


    ALLOCATE (phi0(1)%zeros(nmax,nmax)) 
    ALLOCATE (phi0(2)%zeros(nmax,nmax)) 

    print*,phi0(1)%zeros 

    !phi0(2)=INITIAL(0.) 


END PROGRAM DERIVED_TYP 
+0

어떤 오류 메시지가 나타 납니까? 나는 의심 스럽다. 그들은 제로 (zeros)의 정의와 관련이있다. '진짜, 할당 가능 :: 제로 (:, :)'를 대신 사용해 보았습니까? – PVitt

+0

당신은 아직'phi0' 컨테이너 배열을 할당하지 않았으므로'ALLOCATE (phi0 (1) % 0 (nmax, nmax))'를 할 때 할당되지 않은 배열 요소에 접근하고 있습니다. 'ngrains = 2;를 추가하십시오. 이 줄 앞에 (phi0 (ngrains))'를 할당하십시오. –

+0

검색을 시도 했습니까? 이것은 bean이 중복되기 전에, –

답변

1

앞에서 코멘트에 언급 한 바와 같이 당신이 회원의 할당하기 전에, 당신이 phi0를 할당하지 않습니다를 유지한다. 내 컴파일러는 원래 불평하지 않았지만 내가 @PVitt에 의해 주석의 라인을 따라,뿐만 아니라 INITIAL 정의를 수정 한

PROGRAM DERIVED_TYP 

    INTEGER :: i 
    INTEGER, parameter :: ngrains=2 ,nmax=4 

    TYPE INITIAL   
     REAL, DIMENSION(:,:), ALLOCATABLE :: zeros 
    END TYPE INITIAL 

    TYPE (INITIAL), dimension(:), allocatable :: phi0 

    !First allocate ngrains elements in our container array 
    ALLOCATE (phi0(ngrains)) 
    !Now allocate our nmax by nmax zeros array in each of our 
    !container elements. 
    do i=1,ngrains 
     ALLOCATE (phi0(i)%zeros(nmax,nmax)) 
    end do 

    print*,phi0(1)%zeros 

END PROGRAM DERIVED_TYP 

참고 : 무언가 같이이 문제를 방지 코드의 수정 된 버전입니다 형태.

우리는 0을 할당하는 동안 실제로 아무것도 설정하지 않으므로 배열을 인쇄 할 때 얻는 결과는 잘 정의되지 않았고 반복적이지 않을 수 있으며 또한 컴파일러.

+0

좋아 보인다. 그러나 ngrains가 매개 변수 인 한, 할당을 피하기 위해'phi0'을'type (initial) :: phi0 (ngrains) '으로 정의 할 수 있습니다. – PVitt

+1

실제로 그렇게 할 수 있습니다. 나는 원래의 이슈/수정 (희망을 갖고)을보다 투명하게 만들기 위해 여기서는 그렇게하지 않았다. –

+0

확실한 것은 기록만을위한 것입니다. – PVitt

관련 문제