netCDF的教程例子,用Fortran95把数据写到文件中
编译:gfortran ****.f90 -I/usr/local/include -L/usr/local/lib -lnetcdff -o test1
运行:./test1
源代码:
program simple_xy_wr
use netcdf
implicit none
! 定义数据文件的名称
character (len = *), parameter :: FILE_NAME = "simple_xy.nc"
! 写一个12*6的二维数据
integer, parameter :: NDIMS = 2
integer, parameter :: NX = 6, NY = 12
! 当创建netCDF文件的时候,变量和维数都有一个对应的ID
integer :: ncid, varid, dimids(NDIMS)
integer :: x_dimid, y_dimid
! 要保存到文件的数据数组
integer, dimension(:,:), allocatable :: data_out
! 为数据数组分配内存
allocate(data_out(NY, NX))
! 随意往数据数组里写一些数据
integer :: x, y
do x = 1, NX
do y = 1, NY
data_out(y, x) = (x - 1) * NY + (y - 1)
end do
end do
! 创建netCDF文件,返回文件对应的ID,如果存在则覆盖,check子程序用来检验执行是否成功
call check( nf90_create(FILE_NAME, NF90_CLOBBER, ncid) )
! 定义维数,返回一个对应的ID
call check( nf90_def_dim(ncid, "x", NX, x_dimid) )
call check( nf90_def_dim(ncid, "y", NY, y_dimid) )
! 把上面得到的ID写到一个存放ID的数组里,注意,在fortran中,数组是以列为主存放数据的
dimids = (/ y_dimid, x_dimid /)
! 定义变量,返回一个对应的ID
call check( nf90_def_var(ncid, "data", NF90_INT, dimids, varid) )
! 定义完成,关闭定义模式
call check( nf90_enddef(ncid) )
! 写入数据
call check( nf90_put_var(ncid, varid, data_out) )
! 关闭文件
call check( nf90_close(ncid) )
!提示写文件成功
print *, "*** SUCCESS writing example file simple_xy.nc! "
contains
subroutine check(status)
integer, intent ( in) :: status
if(status /= nf90_noerr) then
print *, trim(nf90_strerror(status))
stop 2
end if
end subroutine check
end program simple_xy_wr