0

我想定义一个块数组,每个块将包含一个不同大小的节点数组。所以我写了一个如下的程序,但它不起作用。我想知道我怎么能在 FORTRAN 中做到这一点?还有其他更好的方法吗?基本的困难是使它们可分配!

program Mesh
    implicit none
    integer::i

    type node
      double precision::x,y
    end type node

    type block
        integer::NX,NY
        integer::ENB,WNB,SNB,NNB      
        integer::BlockType            
        type(node),dimension(:,:),allocatable::nodes
    end type block

    type(block),dimension(:),allocatable::blocks !Error:Syntax Error in Data Declaration

    allocate(blocks(1:9)) ! here using 9 just to simplify it,error: allocate-object is not               a nonprocedure pointer or allocatable object

    do i=1,sizeof(blocks)
        blocks(i)%NX=i*2  !Here I want to read in some value, but just use i*2 to simplify
        blocks(i)%NY=i*2  !Here I want to read in some value, but just use i*2 to simplify
        allocate(blocks(i)%nodes(0:NX,0:NY)) !error: not allocatable object either
    end do

end program
4

1 回答 1

1

正如高性能标记所指出的,修复编译器建议的语法将处理大多数其他错误消息。您的编译器可能会出错的另一个地方是这一行:

allocate(blocks(i)%nodes(0:NX,0:NY))

whereNXNY在块之外不知道type。请将此行更改为:

allocate(blocks(i)%nodes(0:blocks(i)%NX,0:blocks(i)%NY))

另外,我相信您打算使用:

do i=1,size(blocks)

代替:

do i=1,sizeof(blocks)

sizeof是一个以字节为单位返回对象大小的非标准函数。size是一个标准内在函数,它返回数组中元素的数量。在这种情况下使用sizeof可能会导致循环后期出现分段错误或未定义的行为。

于 2013-01-01T17:30:48.833 回答