69217717 发表于 2008-4-26 11:04

求助fortran 在linux下编译

$ make FC=f77
f77   -c -o femxr.o femxr.f
femxr.f: In program `femxr':
femxr.f:54:
         common/real8/a(maxa), ae(maxe)
                      ^
Array `a' at (^) is too large to handle
femxr.f: Outside of any program unit:
In file included from femxr.f:85:
In file included from femxr.f:295:
femxr.f:54: error: size of variable 'real8_' is too large
make: *** Error 1

这是我进行编译时发生的问题,由于计算的需要,我想要把a数组定义的大点(a数组定义最大
a(260000000))),但编译时就出现上述问题,这要怎么解决啊,请大家给点意见,谢谢~

心灯 发表于 2008-4-26 13:20

回复 楼主 的帖子

超出了内存允许的最大数组范围吧? 一般不需要那么大数组的,建议定义个比较小的数组。

lq12131010 发表于 2008-4-26 15:12

可以申请 动态数组
我很讨厌 发言还有字节限制.

心灯 发表于 2008-4-26 17:09

回复 3楼 的帖子

动态数组也可,不过若是单纯采用动态数组也是有内存限制的,和这个一样。还是应该用比较小的数组,根据需要也可以动态调整数组的大小。
发言有字节限制是论坛限制的哪些“好,顶”之类无聊灌水而不得已采取的措施,还请体谅一下管理员的做法。

69217717 发表于 2008-4-26 20:30

我用的就是动态数组,是因为我用来存储总刚、总质量矩阵的,存储方式是一维变带宽存储,对于为什么要需要这么大的数组,是因为我需要划分的单元比较多,从而满足我所需的计算精度。所以不知道还有什么方法可以解决这个问题?

lq12131010 发表于 2008-4-26 20:52

优化 单元
改变存的方式
改变算法

69217717 发表于 2008-4-29 08:43

谢谢,我试着改改看。

69217717 发表于 2008-5-4 16:33

以前我的存储方式是一维变带宽存储,现在为了减小存储空间,想用非零存储。到合成总刚部分已经完成非零存储,现在最主要的问题是线型方程组的求解。查了相关资料,看到petsc有这样的功能,所以我想把这部分移植到自己的程序,但遇到了问难,petsc中的变量定义和fortran中的不同,如下:

                        Mat            C;    矩阵定义
                        PetscInt       N = 0;整型定义
                        Vec            u,b,x;    向量定义

大家有没用过pestc的,这个问题怎么解决啊?

lq12131010 发表于 2008-5-5 12:56

没有 用过...
我解方程都自己做程序用迭代的方法
这样就仍然可以用稀疏阵的性质 又不用耗费内存.
具体方法用好多种 可以和我讨论..我更倾向于 ICCG.
页: [1]
查看完整版本: 求助fortran 在linux下编译