官方提供的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。
![](https://img-blog.csdnimg.cn/42adfc747ea0455bbb8a1d96e40d05c2.png)
2.2 安装CMake
a. 我下载了cmake-3.27.6-windows-x86_64.zip,解压缩后不用安装,在bin文件夹中双击cmake-gui.exe直接运行
![](https://img-blog.csdnimg.cn/6648eddbdde543e09c452ef3a71c483a.png)
2.3 编译CGNS
a. 解压CGNS-4.3.0.zip后可以看到一堆源码,在包含src和CMakeLists.txt的目录下创建build文件夹
![](https://img-blog.csdnimg.cn/679f8af3e27445b8a6452a9bdebdaaee.png)
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所示。
![](https://img-blog.csdnimg.cn/48e292f358504d3f8f2bb5332b49fb17.png)
d. 上一步点击Finish后,等待一会会cmake界面中间会出现红色填充的内容,在其中勾选CGNS_BUILD_SHARED CGNS_ENABLE_64BIT、CGNS_ENABLE_FORTRAN、CGNS_ENABLE_HDF5、CGNS_USE_SHARED,,注意一下CMAKE_INSTALL_PREFIX对应的Value,这里是最终编译出的cgns的位置,如图5所示。
![](https://img-blog.csdnimg.cn/8ec0b2384f8749dfafc5c61d6f6be46e.png)
e. 依次单击Configure, Generate,没有意外的话会看到下面的界面,Configure done和Generate done。这时会看到创建的build文件夹下出现了很多内容。
![](https://img-blog.csdnimg.cn/be50169cbc874b5795e4372419b64099.png)
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所示)。
![](https://img-blog.csdnimg.cn/433cb63332a74188a9dc6147a69695ac.png)
![](https://img-blog.csdnimg.cn/7bf0d04c926c46b9b1636954f9278e1f.png)
![](https://img-blog.csdnimg.cn/64c6e7a5fe24408d97311531ee430b45.png)
g. cgns_shared添加了Fortran编译器安装位置后应该即可编译成功,右键INSTALL->仅用于项目->进重新生成,成功后会在cmake_install_prefix指定的目录(我们在上面默认的是C:\Program Files\cgns)下出现bin、include、lib三个文件夹,如图10-13所示。
![](https://img-blog.csdnimg.cn/34e9a5c7e7c340cd9023fc8c067717d5.png)
![](https://img-blog.csdnimg.cn/eb8d6e83674b45e4ad4b3507b5d08fcd.png)
![](https://img-blog.csdnimg.cn/c27e5f24a73a4c2da7071fcd6dac4bf5.png)
![](https://img-blog.csdnimg.cn/b5a47a11edc54f9fb3c1ed2557ccf905.png)
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所示。
![](https://img-blog.csdnimg.cn/19bef6dbdf3b4fdb817c114e8e880d19.png)
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后正常打开。
![](https://img-blog.csdnimg.cn/eb5f32f9451a49f09816b3b66e59f2a6.png)
![](https://img-blog.csdnimg.cn/00d2ebf57f664e09bbea1664accfff56.png)
参考文献
这里主要参考了下面两篇文章的内容,尤其第二位大佬的分享内容,按照里面的内容很快搞定。
1 CGNS快速入门到实战(一):CGNS静态链接库编译_cgns编译_ahang_99的博客-CSDN博客
2 VS 2019+IVF2020 Fortran使用CGNS库_ivf2020安装包_圆滚滚啃橙狮的博客-CSDN博客