Компилировать код Fortran с зависимостями между модулями - PullRequest
0 голосов
/ 15 июня 2019

У меня проблемы с зависимостями некоторых модулей.В основном у меня есть три файла:

datatypes_module.F90, functions_module.F90 и main.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

++ EDIT # 01 ++ На основании комментариев пользователей, я управляюскомпилировать код выше.В конце концов, в определениях функций нельзя использовать оператор kind.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...