Fortran编译错误两个主要程序

时间:2016-02-09 08:16:59

标签: fortran fortran90 gfortran

我一直试图为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)

1 个答案:

答案 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不会影响它。

前一个应该使它工作,但最好不要使用外部函数和外部子程序。在非常简单的程序中,您可以通过将函数置于关键字containsend 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