!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读取反演数据
最新推荐文章于 2024-10-22 12:33:33 发布