使用跨模块依赖关系编译Fortran代码

时间:2019-06-15 15:49:22

标签: fortran

我在某些模块依赖项方面遇到问题。 基本上,我有三个文件:

datatypes_module.F90functions_module.F90main.F90

datatypes_module.F90包含我的数据类型。

functions_module.F90包含一些使用datatypes_module.F90文件的数据类型的函数。

main.F90包含同时使用数据类型和函数的主程序。

在我的脑海中,我需要首先编译数据类型以生成* .mod文件。

我正在使用:

    gfortran -c datatypes_module.F90

它生成datatypes_module.mod文件。

现在,当我尝试使用以下命令编译功能模块时:

    gfortran -c functions_module.F90

我得到一个错误:

    Error: Symbol ‘f64’ at (1) has no IMPLICIT type

我不理解此错误,因为* .mod文件与functions_module.F90文件位于同一目录中。

如何使用这种架构来编译代码?

谢谢

datatypes_module.F90

module datatypes_module

    ! Default FORTRAN intrinsic variables.
    use, intrinsic :: iso_fortran_env

    ! Quarter precision integer variable.
    integer, parameter :: i_08 = int8 

    ! Half precision integer variable.
    integer, parameter :: i_16 = int16

    ! Single precision integer variable.
    ! Equivalent to integer(4)
    integer, parameter :: i_32 = int32

    ! Double precision integer variable.
    ! Equivalent to integer(8)
    integer, parameter :: i_64 = int64

    ! Single precision floating point.
    ! Equivalent to real(4)
    integer, parameter :: f_32 = real32

    ! Double precision floating point.
    ! Equivalent to real(8)
    integer, parameter :: f_64 = real64

    ! Extended precision floating point.
    ! Equivalent to real(16)
    integer, parameter :: f_128 = real128

end module datatypes_module

functions_module.F90:

module functions_module

    use datatypes_module
    implicit none

    contains

        real(f_64) function sum_numbers(a,b)

            implicit none

            real(kind=f_64) :: a
            real(kind=f_64) :: b

            sum_numbers = a + b

        end function sum_numbers 

        real(f_64) function mul_numbers(a,b)

            implicit none

            real(kind=f_64) :: a
            real(kind=f_64) :: b

            mul_numbers = a + b

        end function  mul_numbers

end module functions_module

main.F90

program main

    use datatypes_module
    use functions_module, only : mul_numbers 

    implicit none

    integer(kind=i_08) :: a = 10
    integer(kind=i_16) :: b = 10
    integer(kind=i_32) :: c = 10
    integer(kind=i_64) :: d = 10

    real(kind=f_32) :: e  = 10.0d0
    real(kind=f_64) :: f  = 10.0d0
    real(kind=f_128) :: g = 10.0d0

    real(kind=8) :: h = 10.0d0

    write(*,*) a 
    write(*,*) b 
    write(*,*) c 
    write(*,*) d 
    write(*,*) e
    write(*,*) f
    write(*,*) h
    write(*,*) g

    write(*,*) mul_numbers(f,f)

end program main

++编辑#01 ++ 根据用户的评论,我设法编译了上面的代码。最后,在函数定义中,不能使用kind语句。

0 个答案:

没有答案