数据传输元素在gfortran中不能包含ALLOCATABLE组件

时间:2018-04-15 16:07:51

标签: fortran gfortran

我正在编译Fortran中的代码。如果我使用最新版本的英特尔Fortran,它会编译。但是,我需要使用xs编译相同的代码(我有odds)。

代码的这两行

gfortran

我收到错误`

gcc version 6.3.0 (GCC)

如何修改代码,保留编译器read(F%Unit) FileSettings%TCosmoTheoryParams Write(F%Unit) CosmoSettings%TCosmoTheoryParams

'make'编译中的完整编译器错误

Error: Data transfer element at (1) cannot have ALLOCATABLE components unless it is processed by a defined input/output procedure`

以及这些代码来自的代码片段:

gcc

mpif90 -cpp -O3 -ffast-math -ffree-line-length-none -fopenmp -fmax-errors=4 -march=native -DMPI -DEFTCOSMOMC -I../EFTCAMB/ReleaseEFTMPI -JReleaseEFTMPI -IReleaseEFTMPI/ -c CosmoTheory.f90 -o ReleaseEFTMPI/CosmoTheory.o CosmoTheory.f90:253:52: read(F%Unit) FileSettings%TCosmoTheoryParams 1 Error: Data transfer element at (1) cannot have ALLOCATABLE components unless it is processed by a defined input/output procedure CosmoTheory.f90:183:54: Write(F%Unit) CosmoSettings%TCosmoTheoryParams 1 Error: Data transfer element at (1) cannot have ALLOCATABLE components unless it is processed by a defined input/output procedure 的定义:

subroutine TCosmoTheoryPredictions_ReadTheory(this, F, first)
    Class(TCosmoTheoryPredictions) this
    class(TFileStream) :: F
    logical, intent(in) :: first
    type(TCosmoTheorySettings), save :: FileSettings
    !JD 02/14 new variables for handling new pk arrays
    integer :: num_k, num_z
    real(mcp), allocatable :: temp(:,:)
    real(mcp), allocatable :: k(:), z(:)
    real(mcp), allocatable :: cl(:)
    real(mcp), allocatable :: valArray(:)
    integer i,j

    if (first) then
        read(F%Unit) FileSettings%TCosmoTheoryParams
        if (FileSettings%use_LSS) call F%ReadSizedArray(FileSettings%power_redshifts)
        if (FileSettings%use_CMB) call F%ReadSizedArray(FileSettings%cl_lmax)
        call F%ReadSizedArray(FileSettings%ArraySizes) !not used
    end if



subroutine TCosmoTheoryPredictions_WriteTheory(this, F, first)
    Class(TCosmoTheoryPredictions) this
    class(TFileStream) :: F
    logical, intent(in) :: first
    integer ArraySizes(1)
    real(mcp) :: valArray(6)
    integer i,j

    if (first .and. new_chains) then
        Write(F%Unit) CosmoSettings%TCosmoTheoryParams
        if (CosmoSettings%use_LSS) call F%WriteSizedArray(CosmoSettings%power_redshifts)
        if (CosmoSettings%use_CMB) call F%WriteSizedArray(CosmoSettings%cl_lmax)
        ArraySizes(1)=size(valArray)
        call F%WriteSizedArray(ArraySizes)
    end if

类型TCosmoTheorySettings仅包含普通的非可分配和非指针数据组件,而不包含任何过程

0 个答案:

没有答案