官方提供的CGNS库是github上的源码,需要用户自行编译。本人菜鸟一枚,最近需要为在Windows系统下使用Fortran代码调用CGNS库,从各种网站上找方法,最后终于基本搞定了。
首先说一下我的电脑是win10 的系统,安装的是Visual Studio 2022 和Intel oneAPI 2023,二者可以在各自的官网上获取,安装方式网上有很多,有需要的大家可以自行下载安装。
链接如下
1.安装文件准备
安装前先下载好所需的软件和源代码
a. Hdf5(HDF5-1.12.1-win64.zip)安装包
b. CMake(cmake-3.27.6-windows-x86_64.zip)安装包
c. CGNS(CGNS-4.3.0.zip)源代码
d. Tecplot 2023 R1
有需要的可以从下面分享中下载
链接:https://pan.baidu.com/s/1aSwXHp_cpHfBGfnXma8YGg
提取码:1r7k
2.cgns动态链接库编译
2.1 安装hdf5
a. 解压HDF5-1.12.1-win64.zip后,运行HDF5-1.12.1-win64.msi;
b. 在系统环境变量中添加HDF5安装目录下的bin文件,我的是C:\Program Files\HDF_Group\HDF5\1.10.9\bin(安装过程中有选项可以直接在安装过程中自动添加) (Path中编辑新建),如图1。

2.2 安装CMake
a. 我下载了cmake-3.27.6-windows-x86_64.zip,解压缩后不用安装,在bin文件夹中双击cmake-gui.exe直接运行

2.3 编译CGNS
a. 解压CGNS-4.3.0.zip后可以看到一堆源码,在包含src和CMakeLists.txt的目录下创建build文件夹

b. 打开cmake-gui,
在where is the source code选包含src和CMakeLists.txt的目录,我的是 C:\Users\Li Dongdong\Desktop\CGNS\cgnsfortran\Software for CGNS library compilation\CGNS-4.3.0\CGNS-4.3.0,
在where to build the binaries选刚创建的build文件夹:
C:\Users\Li Dongdong\Desktop\CGNS\cgnsfortran\Software for CGNS library compilation\CGNS-4.3.0\CGNS-4.3.0\build
c. 单击Configure,选择VS 17 2022编译器,x64,如图4所示。

d. 上一步点击Finish后,等待一会会cmake界面中间会出现红色填充的内容,在其中勾选CGNS_BUILD_SHARED CGNS_ENABLE_64BIT、CGNS_ENABLE_FORTRAN、CGNS_ENABLE_HDF5、CGNS_USE_SHARED,,注意一下CMAKE_INSTALL_PREFIX对应的Value,这里是最终编译出的cgns的位置,如图5所示。

e. 依次单击Configure, Generate,没有意外的话会看到下面的界面,Configure done和Generate done。这时会看到创建的build文件夹下出现了很多内容。

f. 以管理员身份运行VS2022,打开built文件夹下的cgns.sln(点击右侧打开项目或解决方案),此时如果直接重新生成解决方案会提示有错误,如图7所示,看到网上有文章给出了原因和解决方案。C++和Fortran混编时,VS2010以上版本需要手动加载Fortran编译器的链接。除了cgns_f2c是纯Fortran没有这个问题(在下图中的显示是cgna_f2c(ifort)),其他项目如cgns_shared, cgns_statis等只要编译出错就是需要添加Fortran编译器的链接。添加位置:项目->属性->VC++目录,包含目录中加Fortran编译器安装目录的include,库目录中加Fortran编译器安装目录的lib\intel64_win,如图8所示。(例如单击cgns_shared,右键然后找到最下面的属性,添加如图所示的Fortran编译器安装目录,OneAPI的默认安装路径可以参考我的目录,如图8和9所示)。



g. cgns_shared添加了Fortran编译器安装位置后应该即可编译成功,右键INSTALL->仅用于项目->进重新生成,成功后会在cmake_install_prefix指定的目录(我们在上面默认的是C:\Program Files\cgns)下出现bin、include、lib三个文件夹,如图10-13所示。




j.在环境变量中加入CGNS的安装目录的bin(C:\Program Files\cgns\bin)
3. cgns动态链接库的使用
a.打开VS 2022创建一个新的Fortran项目,然后从cgns源码(C:\Users\Li Dongdong\Desktop\CGNS\cgnsfortran\Software for CGNS library compilation\CGNS-4.3.0\CGNS-4.3.0\src\Test_UserGuideCode\Fortran_code)里复制一个代码到创建的项目里。这里我们以write_grid_unst.F90为例(我这里直接复制了里面的代码,粘贴到新建的一个源项目里),如图14所示。

b. cgns库的链接。在项目->属性->Fortran->General->Additional Include Directories中加入CGNS安装目录的include(C:\Program Files\cgns\include),在项目->属性->Linker->General->Additional Library Directories中加入CGNS安装目录的Lib(C:\Program Files\cgns\lib),在项目->属性->Linker->Input->Additional Dependencies中加入cgnsdll.lib,在项目->属性->Fortran->Preprocessor->Preprocess Source File改为Yes (/fpp),具体如图11-14所示。
c. 代码的编译运行和网格文件检验:此时一切顺利的话,这段代码可以正常编译和运行了,运行结束后程序目录下会出现一个grid.cgns的网格文件,采用tecplot打开后可以看到图15所示的网格。这里有一个小插曲,当我采用tecplot2017打开时提示有如图16的错误,换了tecplot2023后正常打开。


参考文献
这里主要参考了下面两篇文章的内容,尤其第二位大佬的分享内容,按照里面的内容很快搞定。
1 CGNS快速入门到实战(一):CGNS静态链接库编译_cgns编译_ahang_99的博客-CSDN博客
2 VS 2019+IVF2020 Fortran使用CGNS库_ivf2020安装包_圆滚滚啃橙狮的博客-CSDN博客