如何定义数组数组?

时间:2016-11-08 16:12:11

标签: arrays fortran

我正在尝试定义一个1维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

1 个答案:

答案 0 :(得分:1)

正如我之前在评论中提到的,在您尝试分配成员之前,您不会分配phi0。避免这种情况的代码的修改版本如下:

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

注意我也修改了INITIAL定义,与@PVitt的注释一致,尽管我的编译器并没有抱怨原始形式。

我还应该注意,虽然我们分配了零数组,但我们实际上并没有将它们设置为任何东西,所以当你打印数组时得到的结果没有明确定义,可能不可重复并且可能也依赖于你的编译器。