我最近将我的f90编辑器更改为适用于Mac OS X的CodeBlocks,当我尝试打开位于项目文件夹中的文件来读取数据时,代码运行时屏幕上会显示下一条错误消息:
Fortran运行时错误:列表输入中项目0的错误整数
我使用针对fortran和Visual Studio的intel编译器介绍了我在Windows 7中编写的相同代码。
代码本身是:
subroutine read_input_data
use input_data
implicit none
integer i,j
open(UNIT=5, FILE='lifting_line_input_data.txt', STATUS='old', FORM='formatted', ACCESS='sequential')
read(5,*) C
read(5,*) U
read(5,*) alpha
read(5,*) rho
read(5,*) wake_length
read(5,*) wake_eps
read(5,*) n_chord
read(5,*) n_twist
if (n_chord .GE. n_twist ) then
i = n_chord
else
i = n_twist
end if
allocate(chord_twist(5,i))
do j = 1, i
read(5,*) chord_twist(:,j)
end do
close(5)
end subroutine read_input_data
你能帮我解决这个问题吗?非常感谢你。
PD。数据文件是从保存为由表格分隔的.txt
的Excel表格中获取的
! LIFTING-LINE WING
! Number of panels
6
! Free stream speed [m/s]
50
! Angle of attack [rad]
0.15
! Air density [kg/m^3]
1.225
! Wake length [m]
100
! Convergence parameter
0.01
! Number of data points given for the chord distribution
2
! Number of data points given for the twist distribution
2
! Y coord [m] ! X_LE [m] ! X_TE [m] ! Y coord [m] ! Twist [rad]
0 0 2 0 0
10 0 0.5 10 0.052359878
PD2。我已经更改了.txt文件的格式,使其等于我在Visual Studio中使用的输入文件。现在文件是:
6 ! Number of panels
50 ! Free stream speed [m/s]
0.15 ! Angle of attack [rad]
1.225 ! Air density [kg/m^3]
100 ! Wake length [m]
0.01 ! Convergence parameter
2 ! Number of data points given for the chord distribution
2 ! Number of data points given for the twist distribution
0 0 2 0 0 ! Y coord [m] ! X_LE [m] ! X_TE [m] ! Y coord [m] !Twist [rad]
10 0 0.5 10 0.052359878
现在终端发出的错误是找不到该文件。由于我是CodeBlocks的初学者,我将逐步解释我所做的事情,因为我找不到我错的地方而且我开始变得绝望:
当我运行代码时,会出现找不到文件的错误消息。 代码是:
!************************************************
subroutine read_input_data
use input_data
implicit none
integer i,j
open(UNIT=10, FILE='lifting_line_wing_input.txt', STATUS='old', ACCESS='sequential')
read(10,*) C
read(10,*) U
read(10,*) alpha
read(10,*) rho
read(10,*) wake_length
read(10,*) wake_eps
read(10,*) n_chord
read(10,*) n_twist
if (n_chord .GE. n_twist ) then
i = n_chord
else
i = n_twist
end if
allocate(chord_twist(5,i))
do j = 1, i
read(10,*) chord_twist(:,j)
end do
close(10)
end subroutine read_input_data
!************************************************
非常感谢你的时间和帮助
答案 0 :(得分:1)
这看起来像你的旧系统在列表导向的输入上做了一些非标准的感叹号。
尝试重新格式化输入数据,例如
6 / number of panels
(斜杠将终止READ)。
答案 1 :(得分:0)
我不相信任何fortran编译器都会自动处理这些注释。 如果您想按原样读取此文件,一种方法是使每个读取句柄出错,例如
integer ios
ios = 1
do while(ios.ne.0)
read(unit,*,iostat=ios)c
end do
ios=1
do while(ios.ne.0)
read(unit,*,iostat=ios)u
end do
等。 如果它是一次性的你可以只编辑文件并删除所有评论。