如何在Fortran模块中设置mpreal参数

时间:2015-06-05 20:04:42

标签: module fortran

我真的希望能够在Fortran模块中定义一些参数,以便主程序及其所有子程序都可以访问它们。

问题在于,即使我尝试在程序体中声明它们,例如:

type (mp_real), parameter :: p1   = 1.98342E+5 !(or say 1.1d0)

我收到以下错误:

  

错误:无法在(1)将REAL(4)转换为TYPE(mp_real)

基本上我在程序体中设置参数的值没有问题,但如果我尝试在变量声明区域内进行,gfortran就不高兴了。这阻止我在模块中定义它们。 有没有办法用mpreal设置模块内的参数值,或者我应该重写整个程序?

1 个答案:

答案 0 :(得分:1)

我最好的猜测是您正在使用mpfun库,它定义了mp_real类型的确切使用方式。

然后,它们重载赋值运算符以便能够转换类型。此编译器在编译时不可用,这会导致您获得错误。

以下是一个例子来说明这一点:

module test_mod

  type my_type
    integer :: val
  end type

  interface assignment (=)
    module procedure my_assign
  end interface

contains

  subroutine my_assign( t, v )
    type(my_type),intent(out) :: t
    integer, intent(in)       :: v
  end subroutine
end module

program test
  use test_mod

  type(my_type),parameter :: t = 1
end program

据我所知,不可能以您建议的方式使用派生类型。但是,您可以将p1存储为实数,并使用初始化子例程...