Fortran 将模块拆分为多个文件

Fortran split module into multiple files

我有这样的东西:

Module ModA
    contains
    subroutine FooA()
       ....
    end subroutine
    subroutine FooB()
       ....
    end subroutine
end mofule ModA

我可以将这两个子例程拆分到一个单独的文件中,并且仍然属于同一个模块吗?

是的。你有两个选择。

第一种是在模块子程序部分简单地包含带有子程序源的文件。

! Module.f90
MODULE ModA
CONTAINS
  INCLUDE 'FooA.f90'
  INCLUDE 'FooB.f90'
END MODULE ModA

! FooA.f90
SUBROUTINE FooA()
!...
END SUBROUTINE FooA

! FooB.f90
SUBROUTINE FooB()
!...
END SUBROUTINE FooB

第二个选项是将每个子例程移动到它自己的子模块中。

MODULE ModA
  INTERFACE
    MODULE SUBROUTINE FooA()
    END MODULE SUBROUTINE FooA
    MODULE SUBROUTINE FooB()
    END MODULE SUBROUTINE FooB()
  END INTERFACE
END MODULE ModA

! FooA.f90 (or whatever name you prefer)
SUBMODULE (ModA) FooA_submodule
CONTAINS
  MODULE PROCEDURE FooA
  !...
  END PROCEDURE FooA
END SUBMODULE FooA_submodule

! FooB.f90 (or whatever name you prefer).
SUBMODULE (ModA) FooB_submodule
CONTAINS
  MODULE PROCEDURE FooB
  !...
  END MODULE PROCEDURE FooB
END SUBMODULE FooB_submodule

但是对于此选项,您需要使用支持 Fortran 2008 子模块功能的 Fortran 编译器。