n_
netCDF库中通过n*_create
函数(nc_create/nf_create/nf90_create)实现NETCDF文件的创建。函数需要指定创建模式flag参数,理解不同参数设置含义对正确生成netCDF文件非常有必要。
下面以netCDF Fortran90函数接口为例介绍。
1 2 3 4 5 6 7 8 9 10 11 | 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


MetMan's Blog
https://blog.metman.top/index.php/archives/193/(转载时请注明本文出处及文章链接)
《署名-非商业性使用-相同方式共享 4.0 国际 》许可协议授权