【发布时间】:2023-03-27 10:14:02
【问题描述】:
我想从输入文件中读取坐标。示例输入文件如下所示:
1 0.1542 0.2541 1.2451 N
12 4.5123 2.0014 2.0154 O
43 8.2145 0.2978 4.2165 H
etc... 这个文件的大小是可变的。第一列是分配给原子的数字,以下列是它的 x、y、z 坐标,最后一列是原子的元素符号。
我尝试了一些类似的方法:
integer, allocatable :: atnum(:)
double precision, allocatable :: coord(:,:)
character(len=2), allocatable :: element(:)
open(unit=20, file='input', status='old',action='read')
read(20,*,end=200) atnum, coord(:,1:3), element
200 close(20)
这会引发错误:
Fortran runtime error: Bad integer for item 2 in list input
我假设程序将第一个条目读入atnum(1),但随后尝试继续将第一行的第二个条目读入atnum(2)。如何让它正确读取输入?
我还认为告诉程序将中间三列读入coord(:,1:3) 可能有问题。它很可能会将前三个条目读入coord(1,1), coord(2,1), coord(3,1),然后遇到行尾的字符并再次变得混乱。我如何告诉它修复该行的第一个下标,并读入另一个维度?还是我必须交换索引,例如coord(1:3,:)?这行得通吗?
编辑:以上已由 tpg2114 回答,但我仍有问题。在我知道要读取多少组坐标之前,我无法分配数组,但我只知道在到达文件末尾之前有多少原子。如果我不分配atnum, coord and element,程序编译得很好,但是当我尝试运行它时会返回一个分段错误。如何在不预先分配动态数组的情况下将其读入?
听起来类似于这个问题:Variable size arrays in Fortran without Allocate()
提前致谢。
【问题讨论】:
标签: fortran