Fortran Coder

标题: 关于循环输出文件,和循环改变初值的提问 [打印本页]

作者: yifanxing1992    时间: 2015-4-14 20:13
标题: 关于循环输出文件,和循环改变初值的提问
主程序如下:
[Fortran] 纯文本查看 复制代码
program main   
use m_rk_ods   
implicit real*8(a-z)   
integer::N   
real*8::px0,py0,pz0,x0,yy0,z0   
real*8:: y(6),y0(6)
open (unit=11,file='dat1.txt')   
open (unit=12,file='dat2.txt')   
N=6   
px0=5.   
py0=0.   
pz0=50.   
x0=-2500.   
yy0=0.   
z0=-25000.   
t0=0.   
tt=100000.   
y0=(/px0,py0,pz0,x0,yy0,z0/)   
call solve(fun1,t0,tt,y0,N)
end

各位大神们,作为初学fortran循环这部分确实很难做,尤其是循环输出到文件。
对我来讲第一个技术难点:我希望达到的目标是这样的,就是初值条件z0从-25200到-24800以步长为0.5变化,而z0=-25200时,x0从-2520到-2500,而z0+1的时候,x0从-2519到-2499以此类推,当z0循环到-24800时,x0的循环从-2500到-2480.这个样子。然后求助这个循环需要怎么做??一共做800*20=16000次计算。
第二个比较重要的问题是,我希望每一个初值的结果对应输出到一个文件,一共输出16000个文件。。?这个循环输出的指令要怎么写?




作者: 楚香饭    时间: 2015-4-14 21:05
文件名可以用字符串表示。
字符串可以由整数或浮点数转换。
这都不是问题。

问题是,我看不懂你的循环规则。
z0 在 -25200到-24800,400个数值之间变化。
而 x0 从 -2520到-2500,直到 -2500到-2480。只有20个变化。

作者: yifanxing1992    时间: 2015-4-14 21:22
楚香饭 发表于 2015-4-14 21:05
文件名可以用字符串表示。
字符串可以由整数或浮点数转换。
这都不是问题。

循环规则是,z0做外层循环,z0循环范围从-25200到-24800,这个范围内每次变化增加1,即z0从-25200,-25199,-25198……这样子。
然后z0=-25200时,内层循环由x0完成,x0从-2520到-2500,然后z0+1变成-25199,内层循环x0从-2519到-2499.。。
然后z0再加1,变成-25198,这是x0循环从-2518到-2498
作者: 楚香饭    时间: 2015-4-14 21:30
对啊。那当 z0 变化到 -24800 时,x0 应该循环从 -2120 到 -2100 啊。
怎么可能还从 -2500到-2480 ?
作者: yifanxing1992    时间: 2015-4-14 21:31
楚香饭 发表于 2015-4-14 21:30
对啊。那当 z0 变化到 -24800 时,x0 应该循环从 -2120 到 -2100 啊。
怎么可能还从 -2500到-2480 ? ...

哦,那估计是我X0的后面范围写错了。。。应该是x0从-2120到-2100.。。。。。规则应该是我之前写的那种。
作者: 楚香饭    时间: 2015-4-14 21:39
[Fortran] 纯文本查看 复制代码
Program www_fcode_cn
  Implicit None
  character(len=10) :: c1 , c2
  integer z0 , x0 , k
  k = -2520
  Do z0 = -25200 , -24800
    write( c1 , '(g0)' ) z0
    Do x0 = k , k + 20
      !//计算代码
      write( c2 , '(g0)' ) x0
      Open( 12 , File = trim(adjustl(c1))//"-"//trim(adjustl(c2))//".txt")
      !// 输出代码
      Close( 12 )
    End Do
    k = k + 1
  End Do
End Program www_fcode_cn

作者: yifanxing1992    时间: 2015-4-14 21:53
楚香饭 发表于 2015-4-14 21:39
[mw_shl_code=fortran,true]Program www_fcode_cn
  Implicit None
  character(len=10) :: c1 , c2

Open( 12 , File = trim(adjustl(c1))//"-"//trim(adjustl(c2))//".txt")
这句编译的时候提示trim函数没有值~~
作者: 楚香饭    时间: 2015-4-14 21:56
我给代码都是自己亲自验证过的,可以编译链接的。

如果你提示有错误,请给出英文的,原版的错误提示,而不是自己翻译的。
作者: yifanxing1992    时间: 2015-4-14 21:59
楚香饭 发表于 2015-4-14 21:56
我给代码都是自己亲自验证过的,可以编译链接的。

如果你提示有错误,请给出英文的,原版的错误提示,而不 ...

我手打敲错了,不好意思啦。。。添麻烦啦。问题基本解决了,谢谢您~~
作者: pasuka    时间: 2015-4-15 08:24
写入16000个文件可不是好主意,为啥不是一个文件一次性写入16000个计算结果?
作者: yifanxing1992    时间: 2015-4-17 23:19
pasuka 发表于 2015-4-15 08:24
写入16000个文件可不是好主意,为啥不是一个文件一次性写入16000个计算结果? ...

因为16000个文件里面,每个文件还有50000个计算结果
作者: pasuka    时间: 2015-4-19 21:21
数据量大的话,倒是挺有必要上HDF这类存储格式,或者是Matlab的mat格式




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2