用一堆.f源文件制作一个模块

时间:2017-09-26 15:47:40

标签: module fortran gfortran

我下载了一些Fortran源代码,其中包含大约50个.f个文件。每个.f文件包含一个子例程或函数。我想方便地将所有这些内容填充到Fortran模块.mod文件中。有没有办法用gfortran做这个(除了在模块定义中刻苦写出每个sub / func原型)?

3 个答案:

答案 0 :(得分:1)

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

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爱好者在这个建议中畏缩,请注意我并不是说这是一个很好的方法,只是为了节省你一点时间。 / p> 祝你好运。

答案 1 :(得分:0)

我制作了这个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

答案 2 :(得分:-1)

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