Fortran Coder
标题: 在循环语句中分别计算上千次,需要将数据输出到文本文... [打印本页]
作者: 周先生 时间: 2019-11-9 13:48
标题: 在循环语句中分别计算上千次,需要将数据输出到文本文...
请问大神们,怎样把计算数据直接输出到文本或指定文件。
作者: li913 时间: 2019-11-9 15:43
看书,文件操作部分。
[Fortran] 纯文本查看 复制代码
program test
open(10,file='out.txt')
do i=1,n
write(10,*) i
end do
close(10)
end program
作者: 周先生 时间: 2019-11-9 17:02
前辈你好,如果将你所回答的输出为文件的代码正确加入具体程序在怎么加,下面是我具体程序;如能帮助,大恩大德,没齿难忘。
[Fortran] 纯文本查看 复制代码
IMPLICIT NONE
REAL*8 N1,N2,MU1,MU2,EPS1,EPS2
REAL*8 ETA1,ETA2,C11,C12,C21,C22
REAL*8 LAM,D,PI,C,OME
REAL*8 K1,K2
REAL*8 R,T,A
COMPLEX*16 i,B11,B12,B21,B22,T11,T12,T21,T22
PARAMETER(PI=3.14159D0)
PARAMETER(C=3.99792D8)
N1=1.00D0
N2=1.50D0
MU1=1.00D0
MU2=1.00D0
i=(0,1)
EPS1=(N1)**2
EPS2=(N2)**2
ETA1=DSQRT(EPS1/MU1)*N1
ETA2=DSQRT(EPS2/MU2)*N2
C11=(ETA1+ETA2)/(2*ETA1)
C12=(ETA1-ETA2)/(2*ETA1)
C21=(ETA1-ETA2)/(2*ETA1)
C22=(ETA1+ETA2)/(2*ETA1)
LAM=3.00D-7
DO LAM = 3.00D-7,12.00D-7,0.01D-7
D=2.00D-7
OME=2*PI*C/LAM
K1=(OME*N1)/C
K2=(OME*N2)/C
B11=CDEXP(i*K1*D)*DEXP(-K2*D)
B12=(0,0)
B21=(0,0)
B22=CDEXP(-i*K1*D)*DEXP(K2*D)
T11=C11*B11+C12*B21
T12=C11*B12+C12*B22
T21=C21*B11+C22*B21
T22=C21*B12+C22*B22
R=(CDABS(-T12/T22))**2
T=(CDABS(T11-(T12*T21)/T22))**2
A=1-R-T
WRITE(*,100)R,T,A
100 FORMAT(1X,F8.3,2X,F8.3,2X,F8.3)
END DO
WRITE(*,*)'FINISH'
END
作者: 周先生 时间: 2019-11-9 17:03
我是FORTRAN77,书上的我看了试不成功。
作者: fcode 时间: 2019-11-10 10:35
注意 !/////======= 注释的行
[Fortran] 纯文本查看 复制代码
IMPLICIT NONE
REAL*8 N1,N2,MU1,MU2,EPS1,EPS2
REAL*8 ETA1,ETA2,C11,C12,C21,C22
REAL*8 LAM,D,PI,C,OME
REAL*8 K1,K2
REAL*8 R,T,A
COMPLEX*16 i,B11,B12,B21,B22,T11,T12,T21,T22
PARAMETER(PI=3.14159D0)
PARAMETER(C=3.99792D8)
N1=1.00D0
N2=1.50D0
MU1=1.00D0
MU2=1.00D0
i=(0,1)
EPS1=(N1)**2
EPS2=(N2)**2
ETA1=DSQRT(EPS1/MU1)*N1
ETA2=DSQRT(EPS2/MU2)*N2
C11=(ETA1+ETA2)/(2*ETA1)
C12=(ETA1-ETA2)/(2*ETA1)
C21=(ETA1-ETA2)/(2*ETA1)
C22=(ETA1+ETA2)/(2*ETA1)
LAM=3.00D-7
open(12,file='out.txt')!/////=======
DO LAM = 3.00D-7,12.00D-7,0.01D-7
D=2.00D-7
OME=2*PI*C/LAM
K1=(OME*N1)/C
K2=(OME*N2)/C
B11=CDEXP(i*K1*D)*DEXP(-K2*D)
B12=(0,0)
B21=(0,0)
B22=CDEXP(-i*K1*D)*DEXP(K2*D)
T11=C11*B11+C12*B21
T12=C11*B12+C12*B22
T21=C21*B11+C22*B21
T22=C21*B12+C22*B22
R=(CDABS(-T12/T22))**2
T=(CDABS(T11-(T12*T21)/T22))**2
A=1-R-T
WRITE(12,100)R,T,A !/////=======
100 FORMAT(1X,F8.3,2X,F8.3,2X,F8.3)
END DO
close(12) !/////=======
WRITE(*,*)'FINISH'
END
作者: 周先生 时间: 2019-11-10 12:54
感谢前辈。我改试了,加了一行在屏幕输出,发现屏幕输出结果与输出文本中的数据不一致(一共输出三列数据,第一列R一样,到第二三列的T,A不一样)这是什么原因,怎么修改?
作者: fcode 时间: 2019-11-10 13:06
给出你修改后的代码
作者: 周先生 时间: 2019-11-10 15:40
就加了一行屏幕输出,屏幕输出和文本居然不一样
[Fortran] 纯文本查看 复制代码
IMPLICIT NONE
REAL*8 N1,N2,MU1,MU2,EPS1,EPS2
REAL*8 ETA1,ETA2,C11,C12,C21,C22
REAL*8 LAM,D,PI,C,OME
REAL*8 K1,K2
REAL*8 R,T,A
COMPLEX*16 i,B11,B12,B21,B22,T11,T12,T21,T22
PARAMETER(PI=3.14159D0)
PARAMETER(C=3.99792D8)
N1=1.00D0
N2=1.50D0
MU1=1.00D0
MU2=1.00D0
i=(0,1)
EPS1=(N1)**2
EPS2=(N2)**2
ETA1=DSQRT(EPS1/MU1)*N1
ETA2=DSQRT(EPS2/MU2)*N2
C11=(ETA1+ETA2)/(2*ETA1)
C12=(ETA1-ETA2)/(2*ETA1)
C21=(ETA1-ETA2)/(2*ETA1)
C22=(ETA1+ETA2)/(2*ETA1)
LAM=3.00D-7
OPEN(12,FILE='out.txt')
DO LAM = 3.00D-7,12.00D-7,0.01D-7
D=2.00D-7
OME=2*PI*C/LAM
K1=(OME*N1)/C
K2=(OME*N2)/C
B11=CDEXP(i*K1*D)*DEXP(-K2*D)
B12=(0,0)
B21=(0,0)
B22=CDEXP(-i*K1*D)*DEXP(K2*D)
T11=C11*B11+C12*B21
T12=C11*B12+C12*B22
T21=C21*B11+C22*B21
T22=C21*B12+C22*B22
R=(CDABS(-T12/T22))**2
T=(CDABS(T11-(T12*T21)/T22))**2
A=1-R-T
WRITE(*,100)R,T,A
WRITE(12,100)R,T,A
100 FORMAT(1X,F8.3,2X,F8.3,2X,F8.3)
END DO
CLOSE(12)
WRITE(*,*)'FINISH'
END
作者: fcode 时间: 2019-11-10 17:15
我试了一下,是一样的。
如果你的不一样,可否告知你的屏幕输出和文件输出分别是什么?
(以最后十行为例)
在我这里,最后十行内容为:
0.148 0.081 0.771
0.148 0.081 0.771
0.148 0.081 0.771
0.148 0.081 0.771
0.148 0.082 0.771
0.148 0.082 0.770
0.148 0.082 0.770
0.148 0.082 0.770
0.148 0.082 0.770
0.148 0.083 0.769
作者: 周先生 时间: 2019-11-10 17:56
后面部分的确是相同的,但是开始部分不一样
屏幕上是
0.148 0.029 0.823
文本是
0.148 0.000 0.852
作者: 周先生 时间: 2019-11-10 18:43
我在输出中加了一列用来标记行数,发现本应输出300到1200的900行数据,但是屏幕上输出的结果只有900到1200的300给数据,文本中的确是从300到1200的900行数据,但仍然不知道什么原因导致的
作者: fcode 时间: 2019-11-11 22:08
windows的屏幕输出有缓存大小,满了之后,前面的就看不到了。
所以大量的输出,要用文件,而不能用(windows上的)屏幕输出。
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) |
Powered by Discuz! X3.2 |