相关疑难解决方法(0)

如何将可分配数组传递给Fortran中的子例程

以下代码返回分段错误,因为我尝试传递的可分配数组未被正确识别(大小返回1,应该是3).在这个页面(http://www.eng-tips.com/viewthread.cfm?qid=170599)中,一个类似的例子似乎表明它应该在F95中正常工作; 我的代码文件有.F90扩展名,但我尝试将其更改为F95,我正在使用gfortran进行编译.

我的猜测是问题应该是我将可分配数组传递给子程序的方式; 我究竟做错了什么?

!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
 PROGRAM test
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
 IMPLICIT NONE
 DOUBLE PRECISION,ALLOCATABLE :: Array(:,:)
 INTEGER                      :: iii,jjj

 ALLOCATE(Array(3,3))
 DO iii=1,3
 DO jjj=1,3
    Array(iii,jjj)=iii+jjj
    PRINT*,Array(iii,jjj)
 ENDDO
 ENDDO
 CALL Subtest(Array)

 END PROGRAM
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
 SUBROUTINE Subtest(Array)
 DOUBLE PRECISION,ALLOCATABLE,INTENT(IN) :: Array(:,:)
 INTEGER                                 :: iii,jjj

 PRINT*,SIZE(Array,1),SIZE(Array,2)
 DO iii=1,SIZE(Array,1)
 DO jjj=1,SIZE(Array,2)
    PRINT*,Array(iii,jjj)
 ENDDO
 ENDDO

 END SUBROUTINE
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
Run Code Online (Sandbox Code Playgroud)

arrays fortran gfortran fortran90

17
推荐指数
2
解决办法
4万
查看次数

如何在Fortran中即时增加数组大小?

我的程序正在运行,虽然3D阵列,标签"群",它发现,然后做一些检查,看看是否有临近簇具有比目前更高的集群的标签.还有第二个数组保存了"正确的"群集标签.如果它发现正确标记了第n个相邻簇,则将该元素分配给0,否则将其分配给正确的标签(例如,如果第n个站点具有标签2,并且邻居标记为3,则第3个元素为labelArray设置为2).老实说,我有充分的理由这样做!

我想要的只是能够分配动态的第n个元素labelArray.我已经看过可分配的数组并将事物声明为,labelArray(*)但我并不是真的理解这些,尽管在网上搜索和StackOverflow.

因此,任何帮助这样做都会很棒.

arrays fortran dynamic-arrays fortran90

10
推荐指数
2
解决办法
2万
查看次数

添加值时Fortran阵列会自动增长

有没有现成的方法来模拟Fortran中不断增长的数组?就像C++中的vector一样.当我在互联网上没有找到关于这个主题的任何内容时,我感到非常惊讶.

作为一个动机示例,假设我计算一些递归关系,我想存储我得到的所有中间数.我的停止标准是相邻结果之间的差异,所以我事先不知道应该为此分配多少内存.

fortran vector dynamic-allocation

2
推荐指数
1
解决办法
687
查看次数