Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Module 将一组.f源文件组成一个模块_Module_Fortran_Gfortran - Fatal编程技术网

Module 将一组.f源文件组成一个模块

Module 将一组.f源文件组成一个模块,module,fortran,gfortran,Module,Fortran,Gfortran,我下载了一些Fortran源代码,其中包含大约50个.f文件。每个.f文件包含一个子例程或函数。我想方便地将所有这些都塞进Fortran模块.mod文件中。gfortran有没有办法做到这一点(除了在模块定义中费力地写出每个子/func原型之外)?这更多的是一个格式化的注释,而不是答案,但您可以尝试编写类似这样的源文件 module this_will_end_in_tears contains include 'subroutine1.f' include 'subroutine2.f'

我下载了一些Fortran源代码,其中包含大约50个
.f
文件。每个
.f
文件包含一个子例程或函数。我想方便地将所有这些都塞进Fortran模块
.mod
文件中。gfortran有没有办法做到这一点(除了在模块定义中费力地写出每个子/func原型之外)?

这更多的是一个格式化的注释,而不是答案,但您可以尝试编写类似这样的源文件

module this_will_end_in_tears

contains

include 'subroutine1.f'
include 'subroutine2.f'
include 'subroutine2.f'
...

end module this_will_end_in_tears
如果正如我所怀疑的那样,
.f
文件包含固定格式的源代码,那么最好确保模块也是固定格式的

正如您可能已经猜到的那样,我希望这不会在您第一次尝试它时编译,但它可能(只是可能)为您节省一点时间,就像您所说的那样,通过精心编写每个子/函数

哦,为了避免任何Fortran爱好者对这个建议感到畏缩,请注意,我并不是说这是一个好的继续进行的方式,只是为了节省一点时间


祝你好运

这更像是一个格式化的注释,而不是一个答案,但您可以尝试编写类似这样的源文件

module this_will_end_in_tears

contains

include 'subroutine1.f'
include 'subroutine2.f'
include 'subroutine2.f'
...

end module this_will_end_in_tears
如果正如我所怀疑的那样,
.f
文件包含固定格式的源代码,那么最好确保模块也是固定格式的

正如您可能已经猜到的那样,我希望这不会在您第一次尝试它时编译,但它可能(只是可能)为您节省一点时间,就像您所说的那样,通过精心编写每个子/函数

哦,为了避免任何Fortran爱好者对这个建议感到畏缩,请注意,我并不是说这是一个好的继续进行的方式,只是为了节省一点时间


祝你好运

我制作了这个bash脚本,它接受两个参数“模块名”和“文件扩展名”,然后构建一个模块文件。它目前是为固定格式制作的。所有源文件必须与脚本位于同一目录中。当然,您可以将其修改为更灵活

name=$1
ext=$2
modsrc=$name.$ext
echo -e "      MODULE $name\n" > $modsrc
echo -e "          implicit none\n" >> $modsrc
echo -e "          contains\n" >> $modsrc
for i in *.f;
do
   if [ "$i" != "$modsrc" ]; then
       echo -e "         include '$i'\n" >> $modsrc
   fi
done
echo -e "       END MODULE $name\n" >> $modsrc

我制作了这个bash脚本,它接受两个参数“模块名”和“文件扩展名”,然后构建一个模块文件。它目前是为固定格式制作的。所有源文件必须与脚本位于同一目录中。当然,您可以将其修改为更灵活

name=$1
ext=$2
modsrc=$name.$ext
echo -e "      MODULE $name\n" > $modsrc
echo -e "          implicit none\n" >> $modsrc
echo -e "          contains\n" >> $modsrc
for i in *.f;
do
   if [ "$i" != "$modsrc" ]; then
       echo -e "         include '$i'\n" >> $modsrc
   fi
done
echo -e "       END MODULE $name\n" >> $modsrc

我通常通过将.f90代码编译为-fixed来解决问题。然后通常添加INTENT和隐式NONE。几乎总是我有D-线进行调试,这似乎对我来说是最简单的-固定形式。后来添加了对齐pragmas和OpenMP reduce子句以及相关的向量内容。

我通常通过将.f90代码编译为-fixed来解决问题。然后通常添加INTENT和隐式NONE。几乎总是我有D-线进行调试,这似乎对我来说是最简单的-固定形式。稍后添加对齐pragmas和OpenMP reduce子句以及相关的向量内容。

在执行此操作时,您必须注意各种刺激。我回忆起尝试此操作时涉及
外部
的问题。有用信息请访问:
cat*.f>module.f
,添加
模块
结束模块
包含
,尝试编译???。盈利或修复错误。在这样做时,你必须注意各种各样的兴奋。我回忆起尝试此操作时涉及
外部
的问题。有用信息请访问:
cat*.f>module.f
,添加
模块
结束模块
包含
,尝试编译???。获利或修复错误。如图所示,
contains
..
include
与在
contains
stmt之后将子例程复制/粘贴到模块中有什么区别?除了所有源代码都在同一个文件中之外。@MattP没有区别不幸的是,在我的例子中,
.f
文件是固定格式的。也许有一个脚本或工具可以将源代码从较旧的fortran更新到较新的fortran?您可以使模块固定格式。(这并不排除对
使用
s模块的代码使用自由格式,只要您将源代码保存在单独的文件中。@MattP
包含
方法的一个缺点是生成软件(make)可能不会自动将源代码的更改视为需要重建模块。这是一个小问题,但需要注意,特别是如果您计划对源代码进行操作。如图所示,
包含
包含
,与在
包含stmt?除了所有源代码都在同一个文件中之外。@MattP没有区别不幸的是,在我的例子中,
.f
文件是固定格式的。也许有一个脚本或工具可以将源代码从旧的fortran更新到新的fortran?您可以使模块固定格式。(这并不排除对
使用
s模块的代码使用自由格式,只要您将源代码保存在单独的文件中。@MattP
包含
方法的一个缺点是生成软件(make)可能不会自动将对源的更改视为需要重建模块。这是一个小问题,但需要注意,特别是如果您计划对源进行操作。