24小时热门版块排行榜    

查看: 3964  |  回复: 59
本帖产生 3 个 程序强帖 ,点击这里进行查看

Gina88

木虫 (正式写手)

引用回帖:
Originally posted by snoopyzhao at 2011-05-05 15:44:09:
我给出的程序中结果是一致的啊,呵呵……

那个地方,原先是 F18.16,我后来改为 F18.15。

刚才的那个我设置成f19.16了。
但是现在我按照你的f18.15
输出的POSCAR中的第一行数值是:
castep
12.782529349912260
  1.0000000000000000   -0.0000000000000022    0.0000000000000001
  0.0000000000000000    1.0584755668949720    0.0000000000000001
  0.0000000000000000    0.0000000000000000    0.7823177812667133
  4  3  2  1
Selective dynamic
Direct
0.0555000007152556  0.1666999995708470  0.5000000000000000  T T T
0.2221666673819220  0.0666999995708464  0.5000000000000000  T T T
0.1110555562708110  0.0666999995708466  0.5000000000000000  T T T
0.1110555562708110  0.0666999995708466  0.5000000000000000  T T T
0.2777222229374780  0.1666999995708470  0.5000000000000000  T T T
0.3888333340485890  0.1666999995708470  0.5000000000000000  T T T
0.5555000007152559  0.0666999995708465  0.5000000000000000  T T T
0.4443888896041450  0.0666999995708466  0.5000000000000000  T T T
0.6110555562708110  0.1666999995708470  0.5000000000000000  T T T
0.6110555562708110  0.1666999995708470  0.5000000000000000  T T T

这个会不会是read那里精度不够啊?
21楼2011-05-05 16:22:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)


余泽成(金币+1): 谢谢参与应助! 2011-05-19 19:20:45
引用回帖:
Originally posted by Gina88 at 2011-05-05 16:22:02:
刚才的那个我设置成f19.16了。
但是现在我按照你的f18.15
输出的POSCAR中的第一行数值是:
castep
12.782529349912260
  1.0000000000000000   -0.0000000000000022    0.0000000000000001
  0.0000000 ...

双精度的话,能够精确表示的也就是小数点后 15 位吧,呵呵……

所以,不是小数点后数越多越好……
22楼2011-05-05 20:20:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Gina88

木虫 (正式写手)

引用回帖:
Originally posted by snoopyzhao at 2011-05-05 20:20:57:
双精度的话,能够精确表示的也就是小数点后 15 位吧,呵呵……

所以,不是小数点后数越多越好……

还想问您两个问题:
第一是:
如果一行有几个整数,但是整数的个数我预先不知道,这种情况下可不可以定义一个大的一维数组去读这行整数值?
第二是:
如下面的数据:第一行以下一共有33个实数,我可不可以用一个一维(33个元素)的数组去读它?(这33个数换行了)
augmentation occupancies  26  33
-0.3020203E-02 -0.3630216E-02  0.1322052E-22 -0.2276385E-24 -0.3631489E-03
-0.2377830E-24  0.8411942E-25 -0.6534484E-04  0.3774742E-02  0.1211868E-23
  0.8196879E-24  0.4815977E-06  0.4575581E-24  0.0000000E+00  0.1202539E-03
-0.7358878E-01 -0.3733756E-25 -0.7586368E-24  0.2978979E-01 -0.2504865E-24
  0.5120104E-01 -0.5159168E-02 -0.3582313E-24 -0.1759637E-24  0.2707249E-02
  0.1711978E-24  0.4539353E-02  0.2080057E-03 -0.2071017E-25  0.2595011E-25
  0.8042437E-04 -0.1039480E-25  0.1027306E-03
23楼2011-05-07 11:10:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★
Gina88(金币+2): 2011-05-07 15:03:23
余泽成(金币+2): 谢谢参与应助! 2011-05-19 19:20:57
引用回帖:
Originally posted by Gina88 at 2011-05-07 11:10:21:
还想问您两个问题:
第一是:
如果一行有几个整数,但是整数的个数我预先不知道,这种情况下可不可以定义一个大的一维数组去读这行整数值?
第二是:
如下面的数据:第一行以下一共有33个实数,我可不可以 ...

第一个问题的答案是肯定的。

第二个问题的答案也是肯定的。如下的程序就可以
CODE:
program test
   integer :: i
   real, dimension(33) :: a
   
   read(*,*)
   read(*,*) (a(i), i=1,33)
   
   write(*,*) (a(i), i=1,33)

end program test

24楼2011-05-07 11:50:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Gina88

木虫 (正式写手)

引用回帖:
Originally posted by snoopyzhao at 2011-05-07 11:50:02:
第一个问题的答案是肯定的。

第二个问题的答案也是肯定的。如下的程序就可以

[code]
program test
   integer :: i
   real, dimension(33) :: a
   
   read(*,*)
   read(*,*) (a(i), i=1,33)
...

那要是像下面的三维数组呢,下面一共有32*32*140个数呢,x先变化,再变化y,最后变化z。
一共32*32*140个数,按照上面的顺序依次从左往右从上往下排列,每行只有5个数值。
这样的应该怎么读呢,读了之后写入另一个文件的时候又该怎么写呢?
非常感谢!

32   32  140
0.87008910787E+03 0.84330634591E+03 0.76736842863E+03 0.65447134096E+03 0.52179095372E+03
0.38768721003E+03 0.26791557459E+03 0.17279838744E+03 0.10603801694E+03 0.65352786321E+02
0.44467480588E+02 0.35501078224E+02 0.31018616664E+02 0.27893788146E+02 0.25979187801E+02
0.25000646451E+02 0.24706493899E+02 0.25000646451E+02 0.25979187801E+02 0.27893788146E+02
0.31018616664E+02 0.35501078224E+02 0.44467480588E+02 0.65352786321E+02 0.10603801694E+03
25楼2011-05-07 15:10:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★
微尘、梦想(金币+2): 2011-05-09 18:05:56
引用回帖:
Originally posted by Gina88 at 2011-05-07 15:10:56:
那要是像下面的三维数组呢,下面一共有32*32*140个数呢,x先变化,再变化y,最后变化z。
一共32*32*140个数,按照上面的顺序依次从左往右从上往下排列,每行只有5个数值。
这样的应该怎么读呢,读了之后写入 ...

跟上面的写法有什么区别吗?
CODE:
program test
implicit none
integer :: i, j, k
real, dimension(32,32,14) :: a

open(unit=11,file='input.dat')
read(*,*) (((a(i,j,k),k=1,14),j=1,32),i=1,32)
close(11)
open(unit=12, file='new_matrix.dat')
write(12,*) (((a(i,j,k),k=1,14),j=1,32),i=1,32)
close(12)
end program test

26楼2011-05-07 15:20:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Gina88

木虫 (正式写手)

引用回帖:
Originally posted by snoopyzhao at 2011-05-07 15:20:48:
跟上面的写法有什么区别吗?

[code]
program test
implicit none
integer :: i, j, k
real, dimension(32,32,14) :: a

open(unit=11,file='input.dat')
read(*,*) (((a(i,j,k),k=1,14),j=1,32),i=1 ...

那我写的数据还想排成5列啊,怎么办呢?
现在没金币谢您了,不过我向版主请求了。非常感谢您!
27楼2011-05-07 17:40:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★
微尘、梦想(金币+2): 2011-05-09 18:06:04
引用回帖:
Originally posted by Gina88 at 2011-05-07 17:40:28:
那我写的数据还想排成5列啊,怎么办呢?
现在没金币谢您了,不过我向版主请求了。非常感谢您!

这只是一个格式的问题,改 write 那行,以下只是一个示例,更多的格式需要你自己去调整:
CODE:
write(12, '(5f18.15)') (((a(i,j,k),k=1,14),j=1,32),i=1,32)

28楼2011-05-07 17:50:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Gina88

木虫 (正式写手)

内容已删除
29楼2011-05-08 17:04:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

引用回帖:
Originally posted by Gina88 at 2011-05-08 17:04:26:
难得碰到一个像您这么懂的人,非常感谢了!
如下面的CHGCAR文件,第六行和第七行中现在元素的个数都是2个。
可是对于不同的系统这两行的元素的个数是不同的。有可能是一个元素,也有可能是2个元素,也有可能 ...

能不能给一个没有表情符号的源码……
30楼2011-05-08 17:11:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 Gina88 的主题更新
信息提示
请填处理意见