我在fortran中有一段代码。代码将'pq'作为用户的输入,并且是单点。我不想这样做,我想从文件points.txt中读取一组点“pq”,并运行它来获取这些点数,而不是只有一个用户输入。可能吗?代码如下:调用一个子程序而不是一个点的列表
program prop
use module
implicit none
character(len=80) :: ErrorMsg
character(2) :: xy
real(8) :: Conc(20) = 0.d0
character(len=20) :: fn, fl
real(8) :: Mmolar, Tcritical, Pcritical, Tmininimum, Tmaximum, x, y
call Init_module()
write(*,*) 'Insert the gas name:'
read(*,*) fn
write(*,*) 'Insert the gas library:'
read(*,*) fl
write(*,*) 'Insert the copule pq:'
read(*,*) pq
write(*,*) 'Insert the value of ', pq(1:1)
read(*,*) x
write(*,*) 'Insert the value of ', pq(2:2)
read(*,*) y
write(*,*) 'Pres = ', Pres(pq, x, y, ErrorMsg)
write(*,*) 'Temp = ', Temperature(pq, x, y, ErrorMsg)
call ReleaseObjects()
end program prop
相反读取PQ作为一个单一的点x的,Y从上述代码的用户,我想读取一组从file.txt的点,例如50个点和然后运行子程序Pres和Temperature。 文件的每一行都包含一个点x,y,并且每行中的x和y由几个空格字符分隔。 file.txt的的前几行是:
Ts
500
0.04781564 159.81587875
0.20396084 165.46398084
0.08159885 166.81382894
0.03879184 164.17497877
0.12585959 165.37000305
0.09895530 165.95997769
0.10389518 170.74235496
必须注意的是,长度和浮点数的符号可以改变。 file.txt最初是通过python编写的,格式为x,y为'%-12.8f %-12.8f\n'%
。我有以下的代码,试图读取该文件,但我无法从起第3行改为:
real, allocatable :: x(:),y(:)
integer :: np
open(12,file=trim('file.txt'),status='old', &
access='sequential', form='formatted', action='read')
read(12,*)pq
write(*,*)'pq:', pq
read(12,*)np
write(*,*)'number of points:',np
allocate (x(np))
allocate (y(np))
do i=1,np
read(12,*)x(i),y(i)
write(*,*)x(i),y(i)
enddo
你可能知道他们在现代编程语言中称为循环和数组。那些是你那种东西的朋友。但同时'module'是fortran 90及以上的关键字,所以你不想命名你自己的modulemodule。 – innoSPG
@innoSPG正式注意。但是我熟悉数组和循环,只是不确定如何为fortran实现它们,我是fortran的新手。谢谢(你的)信息。 – Aspro