关于循环输出文件,和循环改变初值的提问
主程序如下: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个文件。。?这个循环输出的指令要怎么写?
文件名可以用字符串表示。
字符串可以由整数或浮点数转换。
这都不是问题。
问题是,我看不懂你的循环规则。
z0 在 -25200到-24800,400个数值之间变化。
而 x0 从 -2520到-2500,直到 -2500到-2480。只有20个变化。
楚香饭 发表于 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 对啊。那当 z0 变化到 -24800 时,x0 应该循环从 -2120 到 -2100 啊。
怎么可能还从 -2500到-2480 ? 楚香饭 发表于 2015-4-14 21:30
对啊。那当 z0 变化到 -24800 时,x0 应该循环从 -2120 到 -2100 啊。
怎么可能还从 -2500到-2480 ? ...
哦,那估计是我X0的后面范围写错了。。。应该是x0从-2120到-2100.。。。。。规则应该是我之前写的那种。 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 楚香饭 发表于 2015-4-14 21:39
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
我给代码都是自己亲自验证过的,可以编译链接的。
如果你提示有错误,请给出英文的,原版的错误提示,而不 ...
我手打敲错了,不好意思啦。。。添麻烦啦。问题基本解决了,谢谢您~~ 写入16000个文件可不是好主意,为啥不是一个文件一次性写入16000个计算结果?
页:
[1]
2