fortran如何写nc文件

库的安装和环境配置

Liting Mai (麦李婷)

假设Data(:,:), 第一维名称'nCells'=34, 第二维名称'nf'=7;

Data有两个Attributes: 'long_name'为'Brightness Temperature', 'units'为'degreeK'

program nc_write
	use netcdf

	implicit none
	integer :: ierr, fidA, dataid, dimids(2)
	integer, parameter :: nCells = 34, nf = 7
	real, dimension(nCells, nf) :: data
	character(len=*), parameter :: filename = 'output.nc'
	character(len=*), parameter :: varname = 'Brightness_Temperature'

	data = 0.0  ! 示例初始化

	! 创建NetCDF文件
	call nf90_create(filename, nf90_clobber, fidA)
	call nf90_def_dim(fidA, 'nCells', nCells, dimids(1))
	call nf90_def_dim(fidA, 'nf', nf, dimids(2))
	call nf90_def_var(fidA, varname, nf90_float, dimids, dataid)
	call nf90_put_att(fidA, dataid, 'long_name', 'Brightness Temperature')
	call nf90_put_att(fidA, dataid, 'units', 'degreeK')
	call nf90_enddef(fidA)

	! 写入数据
	call nf90_put_var(fidA, dataid, data)

	! 关闭NetCDF文件
	call nf90_close(fidA)

end program nc_write
								

若多线程并行,在线程0上将Data写入nc文件:

program mpi_nc_write
	use mpi
	use netcdf

	implicit none

	integer :: myid, ierr, fidA, dataid, dimids(2)
	integer, parameter :: nCells = 34, nf = 7
	real, dimension(nCells, nf) :: data
	integer, dimension(MPI_STATUS_SIZE) :: status
	character(len=*), parameter :: filename = 'output.nc'
	character(len=*), parameter :: varname = 'Brightness_Temperature'

	! 初始化MPI环境
	call MPI_INIT(ierr)
	call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierr)

	! 所有进程初始化数据
	data = 0.0  ! 示例初始化,可以根据需要更改

	! 仅进程0写入NetCDF文件
	if (myid == 0) then
		! 创建NetCDF文件
		call nf90_create(filename, nf90_clobber, fidA)
		call nf90_def_dim(fidA, 'nCells', nCells, dimids(1))
		call nf90_def_dim(fidA, 'nf', nf, dimids(2))
		call nf90_def_var(fidA, varname, nf90_float, dimids, dataid)
		call nf90_put_att(fidA, dataid, 'long_name', 'Brightness Temperature')
		call nf90_put_att(fidA, dataid, 'units', 'degreeK')
		call nf90_enddef(fidA)

		! 写入数据
		call nf90_put_var(fidA, dataid, data)

		! 关闭NetCDF文件
		call nf90_close(fidA)
	endif

	! 结束MPI环境
	call MPI_FINALIZE(ierr)
end program mpi_nc_write