我编写了以下块来从外部数据文件中读取:
open(unit=338,file='bounnodes.dat',form='formatted')
DO I=1,NQBOUN
DO J=1,NUMBOUNNODES(I)
read(338,2001) NODEBOUN(i,j)
write(6,*) 'BOUNDARY NODES', NODEBOUN(i,j)
ENDDO
ENDDO
2001
FORMAT(32I5)
Run Code Online (Sandbox Code Playgroud)
据我所知,这应该读取一个2 x 32阵列bounnodes.dat.但是,我end-of-file在读取过程中遇到错误并打印出第一列.
我尝试使用相同的代码读取32 x 2数组,它读取第一列的32个元素,但输出0s下一列.
你能解释一下发生了什么吗?我的格式错了吗?
Fortran中的每个读取语句都会进入下一个记录.这意味着普通文本文件中的新行.试试这个:
DO I=1,NQBOUN
DO J=1,NUMBOUNNODES(I)
read(338,2001,advance='no') NODEBOUN(i,j)
write(*,*) 'BOUNDARY NODES', NODEBOUN(i,j)
ENDDO
read(338,*)
ENDDO
Run Code Online (Sandbox Code Playgroud)
其中NQBOUN是行数,NUMBOUNNODES(I)是行中的列数.(我总是有问题,32x2对2x32是多少)
你可以使用暗示的做法让它更短
DO I=1,NQBOUN
read(338,2001) ( NODEBOUN(i,j) , j=1,NUMBOUNNODES(I) )
write(*,*) ( 'BOUNDARY NODES', NODEBOUN(i,j) , j=1,NUMBOUNNODES(I) )
ENDDO
Run Code Online (Sandbox Code Playgroud)
甚至
DO I=1,NQBOUN
read(338,2001) NODEBOUN(i,:)
write(*,*) 'BOUNDARY NODES', NODEBOUN(i,1:NUMBOUNNODES(I))
ENDDO
Run Code Online (Sandbox Code Playgroud)
所有这些都使用Fortran 90功能.
| 归档时间: |
|
| 查看次数: |
7543 次 |
| 最近记录: |