У меня есть определенный фрагмент кода в fortran. Код принимает «pq» как вход пользователя и является единственной точкой. Вместо этого я хочу прочитать набор точек «pq» из файла point.txt и запустить его для такого количества точек вместо одного входа пользователя. Является ли это возможным? Код выглядит следующим образом:Вызвать подпрограмму для списка точек вместо одной точки
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
Вместо чтения рд в качестве единственной точки х, у от пользователя в приведенном выше коде, я хочу прочитать множество точек из 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 и выше, поэтому вы не хотите называть свой собственный модульный модуль. – innoSPG
@innoSPG должным образом. Однако я знаком с массивами и циклами, был просто неуверен, как реализовать их для fortran, я новичок в fortran. Спасибо за информацию. – Aspro