7 HPROGRAM,HSCHEME,HSUBROUTINE,HFILENAME,HFIELD,PFIELD)
41 USE modi_pt_by_pt_treatment
57 TYPE(
sso_t),
INTENT(INOUT) :: USS
59 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
60 CHARACTER(LEN=6),
INTENT(IN) :: HSCHEME
61 CHARACTER(LEN=6),
INTENT(IN) :: HSUBROUTINE
62 CHARACTER(LEN=28),
INTENT(IN) :: HFILENAME
63 CHARACTER(LEN=20),
INTENT(IN) :: HFIELD
64 REAL,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: PFIELD
66 REAL,
DIMENSION(:),
POINTER :: ZLAT,ZLON
67 REAL,
DIMENSION(:),
POINTER :: ZLAT2D,ZLON2D
68 REAL,
DIMENSION(:),
POINTER,
SAVE :: ZFIELD
70 REAL,
DIMENSION(:),
ALLOCATABLE :: ZFIELD0
78 INTEGER::INFIELD,INLAT,INLON
82 REAL(KIND=JPRB) :: ZHOOK_HANDLE
84 IF (
lhook)
CALL dr_hook(
'READ_PGD_NETCDF',0,zhook_handle)
88 SELECT CASE (
trim(hfield))
91 CALL abor1_sfx(
'READ_PGD_NETCDF: '//
trim(hfield)//
" initialization not implemented !")
102 ierror=nf90_open(hfilename,nf90_nowrite,id_file)
110 ierror=nf90_close(id_file)
112 IF (
PRESENT(pfield))
THEN 114 ALLOCATE(zfield0(u%NDIM_FULL))
121 zfield0(jpoint)=zfield(jpoint)
132 ALLOCATE(zlat2d(infield))
133 ALLOCATE(zlon2d(infield))
135 IF (inlat*inlon==infield)
THEN 136 CALL abor1_sfx(
'READ_PGD_NETCDF: 1D LAT and LON not implemented')
137 ELSEIF ((inlat==infield) .AND. (infield==inlon))
THEN 141 CALL abor1_sfx(
'READ_PGD_NETCDF: problem with dimensions lengths between LAT LON and FIELD')
149 iluout, (/ zlat2d(jpoint)/) , (/zlon2d(jpoint)/) , (/ zfield(jpoint)/) , &
164 IF (
lhook)
CALL dr_hook(
'READ_PGD_NETCDF',1,zhook_handle)
178 INTEGER,
INTENT(IN)::ID_FILE
179 CHARACTER(LEN=20),
INTENT(IN) :: HFIELD
180 REAL,
DIMENSION(:),
POINTER::PFIELD
184 INTEGER,
DIMENSION(:),
ALLOCATABLE::IVARDIMSID
185 INTEGER::ILENDIM1,ILENDIM2
186 INTEGER,
INTENT(OUT)::ILENDIM
191 ierror=nf90_inq_varid(id_file,
trim(hfield),id_var)
195 ierror=nf90_inquire_variable(id_file,id_var,ndims=invardims)
196 if (ierror/=nf90_noerr)
CALL handle_err_cdf(ierror,
"can't get variable dimensions number")
199 ALLOCATE(ivardimsid(invardims))
201 ierror=nf90_inquire_variable(id_file,id_var,dimids=ivardimsid)
202 if (ierror/=nf90_noerr)
CALL handle_err_cdf(ierror,
"can't get variable dimensions ids")
205 SELECT CASE (invardims)
208 ierror=nf90_inquire_dimension(id_file,ivardimsid(1),len=ilendim)
209 if (ierror/=nf90_noerr)
CALL handle_err_cdf(ierror,
"can't get variable dimensions lengths")
212 ierror=nf90_inquire_dimension(id_file,ivardimsid(1),len=ilendim1)
213 if (ierror/=nf90_noerr)
CALL handle_err_cdf(ierror,
"can't get variable dimensions lengths")
214 ierror=nf90_inquire_dimension(id_file,ivardimsid(2),len=ilendim2)
215 if (ierror/=nf90_noerr)
CALL handle_err_cdf(ierror,
"can't get variable dimensions lengths")
217 ilendim=ilendim1*ilendim2
220 CALL abor1_sfx(
'READ_PGD_NETCDF: incorrect number of dimensions for variable '//
trim(hfield))
224 DEALLOCATE(ivardimsid)
229 ALLOCATE(pfield(ilendim))
231 ierror=nf90_inquire_variable(id_file,id_var,xtype=itype)
232 IF (itype/=nf90_double)
THEN 233 CALL abor1_sfx(
'READ_PGD_NETCDF: incorrect type for variable '//
trim(hfield))
237 ierror=nf90_get_var(id_file,id_var,pfield)
static const char * trim(const char *name, int *n)
subroutine read_pgd_netcdf(UG, U, USS, HPROGRAM, HSCHEME, HSUBROUTINE, HFILENAME, HFIELD, PFIELD)
subroutine handle_err_cdf(status, line)
subroutine abor1_sfx(YTEXT)
subroutine pt_by_pt_treatment(UG, U, USS, KLUOUT, PLAT, PLON, PVALUE, HSUBROUTINE
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine read_field_netcdf(ID_FILE, HFIELD, PFIELD, ILENDIM)