24小时热门版块排行榜    

查看: 1244  |  回复: 4
当前主题已经存档。
【有奖交流】积极回复本帖子,参与交流,就有机会分得作者 sandf 的 2 个金币 ,回帖就立即获得 2 个金币,每人有 1 次机会

sandf

木虫 (正式写手)

[交流] 【求助】fortran 二维数组片段的赋值

在程序可执行段,我想把下面的赋值代码(为使代码简洁)
NGTO = 1
GTOPARA(1:5, NGTO) = (/AtomPARA(1:3,1), 3.4252509D0, 0.15432897D0/)
NGTO = NGTO + 1
GTOPARA(1:5, NGTO) = (/AtomPARA(1:3, 1), 0.6239137D0, 0.53532814D0/)
NGTO = NGTO + 1
GTOPARA(1:5, NGTO) = (/AtomPARA(1:3, 1), 0.1688554D0, 0.44463454D0/)
简化如下
NGTO = 1
GTOPARA(1:5, NGTO:NGTO + 2) = (/AtomPARA(1:3,1), 3.4252509D0, 0.15432897D0, AtomPARA(1:3, 1), 0.6239137D0, 0.53532814D0,  AtomPARA(1:3, 1), 0.1688554D0, 0.44463454D0/)
结果编译错误:
GTOPARA(1:5, NGTO:NGTO + 2) = (/AtomPARA(1:3, I), 3.4252509D0
                  1
Error: Incompatible ranks 2 and 1 in assignment at (1)
注:编译器为:gcc4.5gfortran(20090421)
请问有没有解决办法。

[ Last edited by jjdg on 2010-3-9 at 23:46 ]
回复此楼
努力呀努力,不要成为奴隶。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hakekill

木虫 (小有名气)

★ ★
sandf(金币+2):谢谢参与
senlia(金币+1):感谢应助 2010-03-10 12:40
sandf(金币+4):非常感谢 2010-03-10 13:17
这个错误是说将一维数组赋给二维,我想了一个变通的方法,通过引入一个数组来完成,代码在下面,希望能对你有所帮助
program main
real :: const( 3, 5 )
real :: atompara( 3, 2)
integer :: r, c
data((const(r, c), c = 4, 5), r = 1, 3)/3.42, 0.15, 0.62, 0.53, 0.16, 0.44/

do r = 1, 3
  do c = 1, 2
    atompara(r, c) = r + c
  end do
end do

do r = 1, 3
  const( r, 1 : 3 ) = atompara( 1 : 3, 1)
end do

print "(5(f6.2,1x))", ((const(r,c),c=1,5),r=1,3)
end program
2楼2010-03-10 12:33:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ftp0000

木虫 (小有名气)

★ ★
sandf(金币+2):谢谢参与
余泽成(金币+1):谢谢应助! 2010-03-11 19:31
经过我的运行,发现下面这样是可以的:

NGTO = 1
DATA GTOPARA(1:5, NGTO:NGTO + 2)   /AtomPARA(1:3,1), 3.4252509D0, 0.15432897D0, AtomPARA(1:3, 1), 0.6239137D0, 0.53532814D0,  AtomPARA(1:3, 1), 0.1688554D0, 0.44463454D0/

这样就直接可以赋值了
3楼2010-03-11 12:37:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sandf

木虫 (正式写手)

jjdg:感谢交流 2010-03-11 23:16
引用回帖:
Originally posted by ftp0000 at 2010-03-11 12:37:46:
经过我的运行,发现下面这样是可以的:

NGTO = 1
DATA GTOPARA(1:5, NGTO:NGTO + 2)   /AtomPARA(1:3,1), 3.4252509D0, 0.15432897D0, AtomPARA(1:3, 1), 0.6239137D0, 0.53532814D0,  AtomPARA(1:3, 1), 0.1 ...

你是放在程序运行段吧,看来是编译器中Fortran版本的支持问题了。我用的是gfortran
提示:
DATA GTOPARA(1:5, NGTO:NGTO + 2)/AtomPARA(1:3,1), 3.4252509D0
                      1
Error: Cannot change attributes of USE-associated symbol gtopara at (1)
请问你是用的什么编译器的?

[ Last edited by sandf on 2010-3-12 at 07:54 ]
努力呀努力,不要成为奴隶。
4楼2010-03-11 21:25:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hakekill

木虫 (小有名气)


余泽成(金币+1):谢谢参与讨论! 2010-03-12 14:28
我觉得把DATA放到程序运行段的写法不可取。由于这种用法不属于fortran语言的标准,只是单一编译器提供的功能。这样会使得程序的移植性大大降低。
5楼2010-03-12 08:35:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 sandf 的主题更新
提示: 如果您在30分钟内回复过其他散金贴,则可能无法领取此贴金币
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见