netCDF文件创建模式介绍
netCDF库中通过n*_create
函数(nc_create/nf_create/nf90_create)实现NETCDF文件的创建。函数需要指定创建模式flag参数,理解不同参数设置含义对正确生成netCDF文件非常有必要。
下面以netCDF Fortran90函数接口为例介绍。
function nf90_create(path, cmode, ncid, initialsize, bufrsize, cache_size, cache_nelems, cache_preemption, comm, info)
implicit none
character (len = *), intent(in) :: path
integer, intent(in) :: cmode
integer, intent(out) :: ncid
integer, optional, intent(in) :: initialsize
integer, optional, intent(inout) :: bufrsize
integer, optional, intent(in) :: cache_size, cache_nelems
real, optional, intent(in) :: cache_preemption
integer, optional, intent(in) :: comm, info
integer :: nf90_create
其中cmode
参数即为要设置的创建模式,用于确定是否覆盖已有相同文件名的文件和是否共享访问。
cmode支持的模式(常量)包括:
- NF90_CLOBBER
- NF90_NOCLOBBER
- NF90_SHARE
- NF90_64BIT_OFFSET
- NF90_NETCDF4
- NF90_CLASSIC_MODEL
通过常量命名大致能猜出其含义。
- NF90_CLOBBER vs NF90_NOCLOBBER
在计算机领域中,"clobber" 可以指代覆盖或清除某些数据或信息。NF90_CLOBBER(库实现中定义为0)指定:如果已存在相同名称的文件,新文件覆盖旧文件,并且支持buffer和cache访问优化。但要注意的是,**创建的文件格式是Classic
格式。
而NF90_NOCLOBBER指定不覆盖相同名称旧文件,代之以返回错误码(NF90_EEXIST)。
- NF90_CLASSIC_MODEL vs NF90_64BIT_OFFSET vs NF90_NETCDF4
分别是指定创建的netCDF文件是classic、64-bit offset、netcdf-4/hdf-5格式。
- NF90_SHARE
涉及多进程并发读写netCDF文件,通常用不到。
以上模式flag支持位或运算(Fortran中可以使用加法或者ior
函数),比如
- NF90_NOCLOBBER + NF90_NETCDF4
创建netCDF4格式文件,如已存在相同名称文件,返回错误码。
- NF90_CLASSIC + NF90_NETCDF4
创建netCDF-4 classic model
格式文件,只支持classic格式功能,netCDF-4新功能(比如groups或自定义类型)不支持。
如果对netCDF格式不太了解的话,可以点击阅读下面文章。
参考资料
https://docs.unidata.ucar.edu/netcdf-fortran/current/f90_datasets.html

