7 hprogram,hscheme,hsubroutine,hfilename,hfield,pfield)
40 USE modi_pt_by_pt_treatment
43 USE yomhook
,ONLY : lhook, dr_hook
44 USE parkind1
,ONLY : jprb
56 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
57 CHARACTER(LEN=6),
INTENT(IN) :: hscheme
58 CHARACTER(LEN=6),
INTENT(IN) :: hsubroutine
59 CHARACTER(LEN=28),
INTENT(IN) :: hfilename
60 CHARACTER(LEN=20),
INTENT(IN) :: hfield
61 REAL,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: pfield
63 REAL,
DIMENSION(:),
POINTER :: zlat,zlon
64 REAL,
DIMENSION(:),
POINTER :: zlat2d,zlon2d
65 REAL,
DIMENSION(:),
POINTER,
SAVE :: zfield
73 INTEGER::infield,inlat,inlon
77 REAL(KIND=JPRB) :: zhook_handle
79 IF (lhook) CALL dr_hook(
'READ_PGD_NETCDF',0,zhook_handle)
83 SELECT CASE (trim(hfield))
86 CALL
abor1_sfx(
'READ_PGD_NETCDF: '//trim(hfield)//
" initialization not implemented !")
97 ierror=nf_open(hfilename,nf_nowrite,id_file)
105 ierror=nf_close(id_file)
107 IF (present(pfield))
THEN
114 pfield(jpoint)=zfield(jpoint)
121 ALLOCATE(zlat2d(infield))
122 ALLOCATE(zlon2d(infield))
124 IF (inlat*inlon==infield)
THEN
125 CALL
abor1_sfx(
'READ_PGD_NETCDF: 1D LAT and LON not implemented')
126 ELSEIF ((inlat==infield) .AND. (infield==inlon))
THEN
130 CALL
abor1_sfx(
'READ_PGD_NETCDF: problem with dimensions lengths between LAT LON and FIELD')
138 iluout, (/ zlat2d(jpoint)/) , (/zlon2d(jpoint)/) , (/ zfield(jpoint)/) , &
153 IF (lhook) CALL dr_hook(
'READ_PGD_NETCDF',1,zhook_handle)
166 INTEGER,
INTENT(IN)::id_file
167 CHARACTER(LEN=20),
INTENT(IN) :: hfield
168 REAL,
DIMENSION(:),
POINTER::pfield
172 INTEGER,
DIMENSION(:),
ALLOCATABLE::ivardimsid
173 INTEGER::ilendim1,ilendim2
174 INTEGER,
INTENT(OUT)::ilendim
179 ierror=nf_inq_varid(id_file,trim(hfield),id_var)
183 ierror=nf_inq_varndims(id_file,id_var,invardims)
184 if (ierror/=nf_noerr) CALL
handle_err_cdf(ierror,
"can't get variable dimensions number")
187 ALLOCATE(ivardimsid(invardims))
189 ierror=nf_inq_vardimid(id_file,id_var,ivardimsid)
190 if (ierror/=nf_noerr) CALL
handle_err_cdf(ierror,
"can't get variable dimensions ids")
193 SELECT CASE (invardims)
196 ierror=nf_inq_dimlen(id_file,ivardimsid(1),ilendim)
197 if (ierror/=nf_noerr) CALL
handle_err_cdf(ierror,
"can't get variable dimensions lengths")
200 ierror=nf_inq_dimlen(id_file,ivardimsid(1),ilendim1)
201 if (ierror/=nf_noerr) CALL
handle_err_cdf(ierror,
"can't get variable dimensions lengths")
202 ierror=nf_inq_dimlen(id_file,ivardimsid(2),ilendim2)
203 if (ierror/=nf_noerr) CALL
handle_err_cdf(ierror,
"can't get variable dimensions lengths")
205 ilendim=ilendim1*ilendim2
208 CALL
abor1_sfx(
'READ_PGD_NETCDF: incorrect number of dimensions for variable '//trim(hfield))
212 DEALLOCATE(ivardimsid)
217 ALLOCATE(pfield(ilendim))
219 ierror=nf_inq_vartype(id_file,id_var,itype)
220 IF (itype/=nf_double)
THEN
221 CALL
abor1_sfx(
'READ_PGD_NETCDF: incorrect type for variable '//trim(hfield))
225 ierror=nf_get_var_double(id_file,id_var,pfield)
subroutine pt_by_pt_treatment(USS, KLUOUT, PLAT, PLON, PVALUE, HSUBROUTINE, KNBLINES, PNODATA)
subroutine handle_err_cdf(status, line)
subroutine abor1_sfx(YTEXT)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine read_field_netcdf(ID_FILE, HFIELD, PFIELD, ILENDIM)
subroutine read_pgd_netcdf(USS, HPROGRAM, HSCHEME, HSUBROUTINE, HFILENAME, HFIELD, PFIELD)