Module 将一组.f源文件组成一个模块
我下载了一些Fortran源代码,其中包含大约50个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'
.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)可能不会自动将对源的更改视为需要重建模块。这是一个小问题,但需要注意,特别是如果您计划对源进行操作。