som*_*one 2 fortran matrix intel-fortran
我想逐行将一个包含大量数据的矩阵写入文件.例如,我有一个矩阵100*100,我想在文件中以100*100的形式.但是,它不起作用.以下是我的代码和一些描述.N和M是几百个左右的整数.RECL是预期的长度我设置文件,但在这里似乎这个命令不起作用.当N设置为99且M设置为200时,输出为198行.Vec是双精度复数矩阵.我怎么能输出Vec的值保持其原始格式N*M?我的编译命令是"ifort -o out test.f90".
open(unit=2, file='graph1.txt', ACTION="write", STATUS="replace",RECL=40*M+10)
do i=1,N
do j=1,M
write(2, '(F)', advance='no') real(Vec(i,j))
end do
write(2, *) ''
end do
Run Code Online (Sandbox Code Playgroud)
按照@george的建议,我编写了一个这样的程序:
program test
implicit none
integer i,j
open(unit=2, file='graph1.txt', ACTION="write", STATUS="replace")
do i=1,500
write(2, '(1600F14.7)')( 0.00001 ,j=1,499)
end do
close(2)
end
Run Code Online (Sandbox Code Playgroud)
有了这段代码,问题就解决了!也许我上次没有正确编译.
扩展我的评论,你还应该使用一个隐式循环..这个:
open(unit=2, file='graph1.txt', ACTION="write", STATUS="replace")
do i=1,N
write(2, '(1000F14.7)')( real(Vec(i,j)) ,j=1,M)
end do
Run Code Online (Sandbox Code Playgroud)
或者对于足够现代的编译器(我不确定新的......)
write(2, '(*(F14.7))')( real(Vec(i,j)) ,j=1,M)
Run Code Online (Sandbox Code Playgroud)
注意,已经指出,2008标准中(F14.7)的*unlimited-format-item 需要括号.
也可以拉其他评论,你也可以这样做:
write(2, '(*(F14.7))')real(Vec(i,:M))
Run Code Online (Sandbox Code Playgroud)