我不熟悉fortran。我试图用fortran95编写CGNS格式的流解决方案。我编写了fortran代码,并为python创建了一个fortran代码库。我想使用这个库将*.npy
格式的网格和流数据写入*.cgns
格式。我的fortran代码片段如下
subroutine un_2d_tr(filename, zoneName)
implicit none
include 'cgnslib_f.h'
character(*) fileName, zoneName
integer :: ier, cellDim, physDim, nelem_start, nelem_end, nbdyelem
integer :: iFile, iB, iCoordX, iCoordY, iSection, iFlow, iu, iv
integer, dimension(1,3) :: isize
character(len=32) :: basename, solname
! --------------------------------------------------------------------
! open CGNS file to write OR edit and create/read base
basename = 'Base'
! In 2D unstr.
cellDim=2
physDim=2
call cg_open_f(fileName,cg_mode_write,iFile,ier)
call check_cg_error_f(ier)
! write base
call cg_base_write_f(iFile,basename,cellDim,physDim, iB,ier)
call check_cg_error_f(ier)
...
我继续编写脚本,把网格和流速写到cgns文件中。使用cg_open_f()
写入新文件时不会出错(错误状态ier为0)。但是,当我试图在打开的文件中使用cg_write_f()
或cg_base_write_f()
(用于编写基本流)编写内容时,我得到了以下错误
如果需要,我可以发布完整的fortran子例程。有人对如何纠正这个错误有什么建议吗?。这会是我的linux发行版的问题吗?如果有帮助的话,我使用的是ubuntu17.10。我已经包括了下面的check_cg_error_f()
。在
subroutine check_cg_error_f(ier)
implicit none
include 'cgnslib_f.h'
integer ier
if (ier .ne. CG_OK) then
call cg_error_exit_f
endif
end
我用来构建cgns库的cmake文件如下
BUILD_CGNSTOOLS OFF
CGNS_BUILD_SHARED ON
CGNS_USE_SHARED ON
CMAKE_BUILD_TYPE Release
CMAKE_INSTALL_PREFIX /home/adhitya/.local/cgns/3.1.4
ENABLE_64BIT ON
ENABLE_FORTRAN ON
ENABLE_HDF5 ON
ENABLE_SCOPING OFF
ENABLE_TESTS OFF
FORTRAN_NAMING LOWERCASE_
HDF5_INCLUDE_PATH /home/adhitya/.local/hdf5/1.8.16/include
HDF5_LIBRARY /home/adhitya/.local/hdf5/1.8.16/lib/libhdf5.so
HDF5_NEED_MPI OFF
HDF5_NEED_SZIP ON
HDF5_NEED_ZLIB ON
SZIP_LIBRARY /home/adhitya/.local/szip/lib/libsz.so
ZLIB_LIBRARY /home/adhitya/.local/zlib/lib/libz.so
cmake build for version 3.3.1版
CGNS_BUILD_CGNSTOOLS OFF
CGNS_BUILD_SHARED ON
CGNS_BUILD_TESTING OFF
CGNS_ENABLE_64BIT ON
CGNS_ENABLE_BASE_SCOPE OFF
CGNS_ENABLE_FORTRAN ON
CGNS_ENABLE_HDF5 ON
CGNS_ENABLE_MEM_DEBUG OFF
CGNS_ENABLE_SCOPING OFF
CGNS_ENABLE_TESTS OFF
CGNS_USE_SHARED ON
CMAKE_BUILD_TYPE Release
CMAKE_INSTALL_PREFIX /home/adhitya/.local/cgns/3.3.1
HDF5_C_LIBRARY_dl /usr/lib/x86_64-linux-gnu/libdl.so
HDF5_C_LIBRARY_hdf5 /home/adhitya/.local/hdf5/lib/libhdf5.so
HDF5_C_LIBRARY_m /usr/lib/x86_64-linux-gnu/libm.so
HDF5_C_LIBRARY_sz /usr/lib/x86_64-linux-gnu/libsz.so
HDF5_C_LIBRARY_z /usr/lib/x86_64-linux-gnu/libz.so
HDF5_DIR HDF5_DIR-NOTFOUND
HDF5_NEED_MPI OFF
HDF5_NEED_SZIP ON
HDF5_NEED_ZLIB ON
SZIP_LIBRARY /home/adhitya/.local/szip/lib/libsz.so
ZLIB_LIBRARY /usr/lib/x86_64-linux-gnu/libz.so
我不熟悉cgn,但作为第一个检查,我建议在执行cg_open_f()之后验证是否为iFile变量分配了一个合理的值。 再想想,你是不是想在一个已经存在的文件上写东西?在
我不完全知道你的错误是什么。但是我怀疑这是某种类型的不匹配。我强烈推荐}。2018年了!让编译器告诉您调用例程是否正确。在
use cgns
,而不是{CGNS测试程序
Fortran语言
C
^{pr2}$然后要编译它,(请注意,您可能需要添加-I和-L标志来告诉编译器}在哪里):
cgns.mod
和{或者
运行测试并查看输出文件:
你能编译并运行这个简单的测试程序吗?在
建立CGN
我只是抓取了源代码并在另一个集群上安装了它。请注意,我使用的是英特尔编译器套件,而不是GCC。在
后跟通常的
make install
,然后在已安装的include目录中查找:如果没有看到您的构建日志,我敢说删除您的安装并重新开始。而且
3.1.4
不是最新的稳定版本。抓起3.3.1怎么样。在相关问题 更多 >
编程相关推荐