【问题标题】:Fortran 90, how to use array defined in derived type in a subroutineFortran 90,如何在子例程中使用派生类型中定义的数组
【发布时间】:2013-11-22 23:28:14
【问题描述】:

我定义了一个派生类型如下:

  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

在主代码中,我定义了一个数组,并将其输入到子程序中

   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)

在子程序中,

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)

size(cl_mean) 的输出是正确的。但是 size(cl_mean(1)%omx) 的输出是 1。这意味着编译器认为 cl_mean(1)%omx 是一个变量而不是一个数组。

如何访问数组?谢谢。

【问题讨论】:

    标签: fortran90 subroutine derived-types


    【解决方案1】:

    我认为使用intent(out) 会导致派生数据类型中的可分配数组被释放。使用 intent(inout) 为我解决了使用 gfortran 4.7 的问题。

    【讨论】:

      猜你喜欢
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多