我正在尝试定义一个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
答案 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的注释一致,尽管我的编译器并没有抱怨原始形式。
我还应该注意,虽然我们分配了零数组,但我们实际上并没有将它们设置为任何东西,所以当你打印数组时得到的结果没有明确定义,可能不可重复并且可能也依赖于你的编译器。