SWAT模型源代码编译-ifort

  1. Fortran小白,对于Fortran也不是太懂,经过一段时间摸索,记录一下经验。本文最后主要是基于地理所朱良军老师在GitHub上修改后的代码编译成功。

  2. Fortran编译为可执行程序目前常见的主要为:GFortran和infort,其中GFortran开源、免费,优化不如Intel;ifort,即Intel Fortran编译器(现在最新的又推出了IFX),Intel编译器之前是收费的,现在免费了,对于CPU的优化较好,编译后的程序运行速度相比GFortran会有很大优势。由于GFortran未能测试成功,本文以ifort为例。

  3. SWAT源代码较多,300多个.f文件,某些模块可能存在bug,自己编译非常困难,经常几天的摸索,最终使用地理所朱良军老师配置好的工程文件进行编译,该文件夹中的源代码修复了某些模块存在的bug,如:use para这个问题。该文件在GitHub上可公开下载:GitHub - crazyzlj/SWAT: An unofficial SWAT (Soil & Water Assessment Tool) code collection from official historical releases and the scientific community.,里面的SWAT模型源代码会随着官方的源代码慢慢更新各个版本,可点击master选择某个版本下载,此处以SWAT_rev689为例。需要注意的是朱老师网站上给出的几种方式,使用命令行的方式是针对GFortran的编译方式,需要单独指定GFortran编译器:cmake .. -DCMAKE_Fortran_COMPILER=C:/MinGW64/bin/gfortran.exe,不过我自己一直没有测试成功,不知道原因,放弃

  4. 使用ifort编译SWAT模型源代码,需要安装Visual Studio和Intel oneAPI,并且有安装顺序要求,我在服务器上安装的是:Visual Studio 2022——>Intel oneAPI Base Toolkit(2024.0)——>Intel® HPC Toolkit(2024.0)。安装完了后需要检查VS中是否集成了Fortran环境。

  5. 现阶段多使用CMake辅助编译的方式,自行安装,并添加环境变量,本文版本:3.28.0。注意朱老师文件中包含2个CMakeLists.txt文件,一个在外部,一个在src文件夹,比较复杂,以下修改均指外部。

  6. 下载朱老师GitHub上的源码文件后,解压到某个目录,因为朱老师为了适用于各种情况,在CMake命令中写的非常的灵活,为了方便自己的使用,选择修改和补充某些部分:

    1. cmake文件夹中的CRTLinkage.cmake需要修改,去除多核编译(P26~39),因为VS不同版本的差异,多核编译设置在不同版本之间存在差异,这也是我一直没有成功,最后联系朱老师才调试出的原因;如果对CMake命令比较熟的,可以自行修改,使用多核编译可以加快编译速度

      1. 版本原因,界面不同。朱老师界面如下(可能是VS2019):

      2. 我的VS 2022界面:

    2. 在CMakeLists.txt文件首行添加一句:cmake_minimum_required(VERSION 3.28.0)

    3. 如果编译成功后无法在迁移到其他系统运行,显示错误为由于找不到libifcoremd.dll,无法继续执行代码问题(https://www.naive514.top/2022/03/14/332/)。

      1. 出现原因:使用动态库编译而不是编译进可执行文件中,导致需要目标系统安装相关DLL。

      2. 解决方案:在CMakeLists.txt文件中添加:add_compile_options(/libs:static /threads)。

    4. 还是因为VS版本原因,朱老师代码无法生成x64版本,因而我自己直接修改命令,只生成x64,不考虑x86版本,在CMakeLists.txt文件中将P71~77修改为:SET(CMAKE_BUILD_BIT "x64")。

  7. 上面几步完成后,即可进行编译,参照朱老师GitHub网站上Wiki的“2.1. Using Visual Studio and Intel Parallel Studio XE under Windows”,过程如下:

    1. 解压下载的SWAT-master.zip,新建一个编译的文件夹为:SWAT_ifort。

    2. 打开命令行/或者在开始菜单找到Intel oneAPI 2024,打开Intel oneAPI command prompt for Intel 64 for Visual Studio 2022,切换到SWAT_ifort目录:cd /d D:\Maohuihui\2_SWAT_Compile\SWAT_ifort。

    3. 在命令行执行命令:cmake -G "Visual Studio 17 2022" -A x64 D:\Maohuihui\2_SWAT_Compile\SWAT-master,后面为解压目录,运行成功后的界面如下:

    4. 双击打开SWAT2012Rev689.sln,右击解决方案,选择:Build Solution。如果显示“0 errors”代表生成成功。

    5. 右击CMakePredefinedTargets下面的INSTALL工程文件,选择:Build。

    6. 然后在工具栏上将“Debug”切换为“Release”,完成后应同样显示“0 errors”。此时,SWAT_ifort里面的bin文件夹中同时生成了Debug和Release版本,编译完成。

    7. 补充更新:朱老师提到cmake后也可以直接使用命令行进行,需提前将devenv.exe所在文件夹目录添加到环境变量(如:D:\Program Files\Visual Studio 2022\Common7\IDE):devenv SWAT2012Rev689.sln /Build Release

  8. 注:自行编译后的版本经测试速度还是不如官方版本,可能官方有一些特殊的优化过程。

  • 30
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值