我一直试图为fortran编写这个程序,使用Van der Waals方程计算气体压力,每次我废弃整个代码并重新开始,因为我所做的一切都回来了即使我尝试使用其他问题的答案,也会出错。我是fortran的新手,我知道我的语法可能已经全部结束了,如果有人可以请告诉我哪里出错我会非常感激。
!Named program EquationOfState
program EquationOfState
implicit none
real :: pressure
write(*,*) 'pressure of Ideal Gas = '
write(*,*) 'pressure calculated with Van der Waals equation = '
end program EquationOfState
!Prompt user to input values for density == d, and temperature == t
write(*,*) "Enter density of gas"
read(*,*) d
write(*,*) "Enter temperature conditions"
read(*,*) t
write(*,*) "The pressure of the gas is", pressure
function pressure(d, t)
real(kind=4) :: pressure_IdealGas
real, intent(in) :: d, t
real, parameter :: R = 286.9_4
pressure = d * R * t
end function pressure
出现此错误
program EquationOfState
1
HWL_4.f90:14.36:
write(*,*) "Enter density of gas"
2
Error: Two main PROGRAMs at (1) and (2)
答案 0 :(得分:3)
你的台词:
!Prompt user to input values for density == d, and temperature == t
write(*,*) "Enter density of gas"
read(*,*) d
write(*,*) "Enter temperature conditions"
read(*,*) t
write(*,*) "The pressure of the gas is", pressure
不属于任何程序或功能。您至少应该在这些行后面移动end program
语句。
执行此操作后,您将意识到无法通过主程序调用函数,因为变量pressure
会影响外部函数pressure()
。你必须重命名其中一个。
此外,您的函数格式错误,名为pressure
,但您在其中声明了名为pressure_IdealGas
的内容。
所以你可能想要:
function pressure_IdealGas(d, t)
implicit none
real :: pressure_IdealGas
real, intent(in) :: d, t
real, parameter :: R = 286.9_4
pressure_IdealGas = d * R * t
end function pressure_IdealGas
在主程序中你想调用这个函数:
pressure = pressure_IdealGas(d, t)
write(*,*) "The pressure of the gas is", pressure
注意函数中的implicit none
。在那里使用它很重要,因为函数是外部的,程序中的implicit none
不会影响它。
前一个应该使它工作,但最好不要使用外部函数和外部子程序。在非常简单的程序中,您可以通过将函数置于关键字contains
和end program
之间来使函数成为内部函数,但在严格的程序中,您希望将函数放入模块中:
module gas_functions
implicit none
contains
function pressure_IdealGas(d, t)
real :: pressure_IdealGas
real, intent(in) :: d, t
real, parameter :: R = 286.9_4
pressure_IdealGas = d * R * t
end function pressure_IdealGas
end module
program EquationOfState
use gas functions
implicit none
...
请注意,每个程序一个implicit none
就足够了。
阅读Correct use of modules, subroutines and functions in fortran了解更多信息。
最后,函数声明中没有real(kind=4)
的理由。为了兼容性,如果您在任何地方只使用real
,请坚持使用它。由于其他原因,硬编码的数字4
不是一个好主意,请参阅Fortran 90 kind parameter