私はFortranに特定のコードを持っています。コードは、ユーザーからの入力として 'pq'をとり、単一のポイントです。これを行うのではなく、ファイルpoints.txtからポイント 'pq'のセットを読み込み、ただ1つのユーザー入力ではなく、それらのポイント数で実行したいと思います。出来ますか?コードは以下の通りである:単一のポイントの代わりにポイントのリストのサブルーチンを呼び出します。
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
の代わりに上記のコードにおいてユーザからY単一点x、としてPQを読み出し、Iはfile.txtをから点の集合を読みたい、例えば50ポイントとPresとTemperatureのサブルーチンを実行します。 ファイルの各行は1つの点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行目から読み取ることができないです:ユーザーのために尋ねる最初の引数としてアスタリスク(*)でREAD
ステートメントを使用する代わりに
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'はfortran90以上のキーワードなので、あなた自身のモジュールモジュールの名前を付けたくありません。 – innoSPG
@innoSPG Dulyが指摘した。しかし、私は配列とループに精通しており、fortranのためにそれらを実装する方法が不明であったため、私はFortranを初めて使用しています。情報をありがとう。 – Aspro