!read my inversion file and to come in CMAQ compute!
program main
USE netcdf
implicit none
integer:: status, fidA, south_north, west_east, ISOP, XLAT, XLONG
integer:: nx, ny, nt
real , dimension(:,:) , allocatable :: t2m
real , dimension(:,:) , allocatable :: lat, lon
CHARACTER(LEN=100) :: file_in
file_in = 'E1.nc'
!----------------------------------------------------------------
! 打开文件 :
status = NF90_OPEN(TRIM(file_in),0,fidA)
call erreur(status,.TRUE.,"read_A")
!- read ID of dimensions of interest and save them in-----------------
! 获取维度变量ID
status = NF90_INQ_DIMID(fidA,"west_east",XLAT)
call erreur(status,.TRUE.,"inq_west_east")
status = NF90_INQ_DIMID(fidA,"south_north",XLONG)
call erreur(status,.TRUE.,"inq_south_north")
! 获取维度的值:
status = NF90_INQUIRE_DIMENSION(fidA,XLAT,len=nx)
call erreur(status,.TRUE.,"inq_dim_XLAT")
status = NF90_INQUIRE_DIMENSION(fidA,XLONG,len=ny)
call erreur(status,.TRUE.,"inq_dim_XLONG")
print*,nx,ny
!- Allocation of arrays :
ALLOCATE( t2m(nx, ny) )
ALLOCATE( lat(nx, ny) )
ALLOCATE( lon(nx, ny) )
!- 获取变量ID :
status = NF90_INQ_VARID(fidA,"ISOP",ISOP)
call erreur(status,.TRUE.,"inq_ISOP")
status = NF90_INQ_VARID(fidA,"XLAT",XLAT)
call erreur(status,.TRUE.,"inq_XLAT")
status = NF90_INQ_VARID(fidA,"XLONG",XLONG)
call erreur(status,.TRUE.,"inq_XLONG")
!- 获取变量值 :
status = NF90_GET_VAR(fidA,ISOP,t2m)
call erreur(status,.TRUE.,"getvar_ISOP")
status = NF90_GET_VAR(fidA,XLAT,lat)
call erreur(status,.TRUE.,"getvar_XLAT")
status = NF90_GET_VAR(fidA,XLONG,lon)
call erreur(status,.TRUE.,"getvar_XLONG")
!- close netcdf file :
status = NF90_CLOSE(fidA)
call erreur(status,.TRUE.,"close_A")
print*,t2m(1:10,1)
print*,lat(1:10,1)
print*,lon(1:10,1)
end
SUBROUTINE erreur(iret, lstop, chaine)
! used to provide clear error messages :
USE netcdf
INTEGER, INTENT(in) :: iret
LOGICAL, INTENT(in) :: lstop
CHARACTER(LEN=*), INTENT(in) :: chaine
!
CHARACTER(LEN=80) :: message
!
IF ( iret .NE. 0 ) THEN
WRITE(*,*) 'ROUTINE: ', TRIM(chaine)
WRITE(*,*) 'ERROR: ', iret
message=NF90_STRERROR(iret)
WRITE(*,*) 'WHICH MEANS:',TRIM(message)
IF ( lstop ) STOP
ENDIF
!
END SUBROUTINE erreur
Fortran读取反演数据
该程序主要功能是读取名为E1.nc的NetCDF文件,提取其中的ISOP,XLAT,XLONG等变量数据。首先打开文件,然后查询并获取维度south_north和west_east的ID及其长度,接着分配内存给数据数组并读取变量值。最后,关闭文件并打印部分数据。
摘要由CSDN通过智能技术生成