首页 文章

用于精度和全局变量类型的Fortran链接模块

提问于
浏览
1

我是Fortran的新手并试图了解以下是否可行 . 我构建程序的想法是在一个模块中声明精度和变量类型 . 然后使用这些变量而不再声明其他模块或主程序中的类型 .

module pre
implicit none

    INTEGER, PARAMETER      ::  sp=SELECTED_REAL_KIND(6,37)
    INTEGER, PARAMETER      ::  dp=SELECTED_REAL_KIND(15,307)
    INTEGER, PARAMETER      ::  qp=SELECTED_REAL_KIND(33,4931)

    REAL(dp), PARAMETER     ::  pi = 4.*ATAN(1.)
    REAL(dp)                ::  H                              
    REAL(dp)                ::  M 
    REAL(dp)                ::  KR 

end module pre

现在我想利用包含一个或多个函数的另一个模块中的所有变量,例如:

module hon
use pre
implicit none

contains
    function KE(H,M) result(KR)
        KR = 2*PI/H/M
    end function KE
end module hon

然后我按顺序使用gfortran:

gfortran -c mod_pre.f90
gfortran -c mod_hon.f90

由于'module pre'是'module hon'的一部分,我按顺序编译,但gfortran显示错误 .

使用上面的代码,我理解变量类型和参数应该包含在 USE 中;但是我从 gfortran 得到的消息是,当我尝试编译'module hon'时,我的变量都没有IMPLICIT类型 .

有人可以澄清问题或提出解决方案吗?我想避免让我的变量分散在多个模块中 .

谢谢!

1 回答

  • 0

    在函数语句中, result(kr) 表示函数结果的名称为 kr . 此函数结果与模块变量 kr 不同 . 特别是,此功能结果使模块变量无法访问 .

    函数结果特定于函数本身,其属性必须在函数子程序中声明 .

    类似地,函数的伪参数 HM 与模块变量不同,需要在函数子程序中声明 .

    除此之外,你可能也有类似的担忧other question .

    要清楚,不可能说“所有函数结果称为 kr ,所有虚拟参数称为 HM 具有这些特征” . 必须为每个单独的对象提供属性 .

    但是,虽然我不建议这样做,但是文字文本包含(使用预处理程序或包含文件)可以帮助您:

    function ke(H, M) result (kr)
       include 'resdummydecls'
       ...
    end function
    

    文件中有声明的位置 .

相关问题