7 PDURATION, PTSTEP_FORC, KNI, KYEAR, KMONTH, KDAY, PTIME, &
8 PLAT, PLON, PZS, PZREF, PUREF,KTIMESTARTINDEX )
51 USE modi_set_surfex_filein
53 USE modi_init_io_surf_n
55 USE modi_end_io_surf_n
56 USE modi_get_size_full_n
75 CHARACTER(LEN=*),
INTENT(IN) :: HGRID
76 CHARACTER(LEN=6),
INTENT(IN) :: HSURF_FILETYPE
77 LOGICAL,
INTENT(IN) :: ODELAYEDSTART_NC
78 INTEGER,
DIMENSION(4),
INTENT(IN) :: KDATESTOP
79 INTEGER,
INTENT(OUT) :: KNI
80 INTEGER,
INTENT(OUT) :: KYEAR, KMONTH, KDAY
81 REAL,
INTENT(OUT) :: PDURATION,PTSTEP_FORC
82 REAL,
INTENT(OUT) :: PTIME
83 REAL,
DIMENSION(:),
POINTER :: PLAT, PLON
84 REAL,
DIMENSION(:),
POINTER :: PZS
85 REAL,
DIMENSION(:),
POINTER :: PZREF, PUREF
86 INTEGER,
INTENT(OUT) :: KTIMESTARTINDEX
88 CHARACTER(LEN=100) :: YUNITS
89 REAL,
DIMENSION(:),
POINTER :: ZTIMEFILE
90 REAL,
DIMENSION(:),
ALLOCATABLE :: ZLAT1D, ZLON1D
92 REAL :: ZFIRSTTIMEFILE
93 INTEGER :: IYEAR, IMONTH, IDAY
94 INTEGER :: IRET, INB_FORC
95 INTEGER :: INI, IDIM_FULL
100 type(
date_time),
DIMENSION(1) :: tz_firstdatefile
101 type(
date_time),
DIMENSION(:),
ALLOCATABLE :: tz_datefile
102 INTEGER :: JPOINT, INLAT1D, INLON1D
104 DOUBLE PRECISION :: XTIME0
105 REAL(KIND=JPRB) :: ZHOOK_HANDLE
111 IF (
lhook)
CALL dr_hook(
'OL_READ_ATM_CONF_NETCDF',0,zhook_handle)
125 glonlat1d, inlon1d, inlat1d, ztimefile)
136 CALL mpi_bcast(inb_forc,kind(inb_forc)/4,mpi_integer,
npio,
ncomm,infompi)
137 CALL mpi_bcast(glonlat1d,1,mpi_logical,
npio,
ncomm,infompi)
138 CALL mpi_bcast(inlon1d,kind(inlon1d)/4,mpi_integer,
npio,
ncomm,infompi)
139 CALL mpi_bcast(inlat1d,kind(inlat1d)/4,mpi_integer,
npio,
ncomm,infompi)
145 'OFFLIN',
'FRC_TIME_STP' ,ptstep_forc ,iret)
147 pduration = ( inb_forc - 1 ) * ptstep_forc
152 CALL init_io_surf_n(dtco, u, hsurf_filetype,
'FULL ',
'SURF ',
'READ ')
154 CALL read_surf(hsurf_filetype,
'DIM_FULL',idim_full,iret)
155 CALL read_surf(hsurf_filetype,
'DTCUR',ttime,iret)
157 kyear = ttime%TDATE%YEAR
158 kmonth = ttime%TDATE%MONTH
159 kday = ttime%TDATE%DAY
175 ALLOCATE(zlat1d(inlat1d))
176 ALLOCATE(zlon1d(inlon1d))
181 zlat1d=plat(1:inlat1d)
182 zlon1d=plon(1:inlon1d)
189 CALL read_surf(
'OFFLIN',
'ZREF',pzref,iret)
190 CALL read_surf(
'OFFLIN',
'UREF',puref,iret)
197 IF ( inlat1d*inlon1d==idim_full )
THEN 198 DO jpoint = 1,idim_full
199 plat(jpoint) = zlat1d((jpoint-1)/inlon1d+1)
200 plon(jpoint) = zlon1d(mod(jpoint-1,inlon1d)+1)
205 WRITE(iluout,*)
' NUMBER OF GRID POINTS INCONSISTENCY: ',idim_full,
'/',inlat1d*inlon1d
206 CALL abor1_sfx(
'OL_READ_ATM_CONF_NETCDF: NUMBER OF GRID POINTS INCONSISTENCY')
214 IF (idim_full /= ini)
THEN 215 WRITE(iluout,*)
' NUMBER OF GRID POINTS INCONSISTENCY: ',idim_full,
'/',ini
216 CALL abor1_sfx(
'OL_READ_ATM_CONF_NETCDF: NUMBER OF GRID POINTS INCONSISTENCY')
219 IF ( odelayedstart_nc .OR. kdatestop(1)/=0 )
THEN 222 ALLOCATE(tz_datefile(inb_forc))
226 DEALLOCATE(ztimefile)
228 IF ( odelayedstart_nc )
THEN 233 DO jindex = 1,inb_forc
234 iyear = tz_datefile(jindex)%TDATE%YEAR
235 imonth = tz_datefile(jindex)%TDATE%MONTH
236 iday = tz_datefile(jindex)%TDATE%DAY
237 ztime = tz_datefile(jindex)%TIME* 3600.
239 IF ( kyear==iyear .AND. kmonth==imonth .AND. kday==iday .AND. ptime==ztime )
THEN 240 ktimestartindex = jindex
241 inb_forc = inb_forc-ktimestartindex+1
242 pduration = ( inb_forc - 1 ) * ptstep_forc
249 IF ( ktimestartindex==-1 )
THEN 250 WRITE(iluout,*)
'IN THE FORCING FILE, WE CAN NOT FIND THIS INITIAL DATE :',kyear,kmonth,kday,ptime
251 CALL abor1_sfx(
'OL_READ_ATM_CONF_NETCDF: DATE INCONSISTENCY')
258 CALL netcdf2date((/zfirsttimefile/),yunits,tz_firstdatefile)
259 iyear = tz_firstdatefile(1)%TDATE%YEAR
260 imonth = tz_firstdatefile(1)%TDATE%MONTH
261 iday = tz_firstdatefile(1)%TDATE%DAY
262 ztime = tz_firstdatefile(1)%TIME* 3600.
264 IF ( (kyear /= iyear) .OR. (kmonth /= imonth) .OR. (kday /= iday) )
THEN 265 WRITE(iluout,*)
' DATE INCONSISTENCY: ',kyear,kmonth,kday,
'/',iyear,imonth,iday
266 CALL abor1_sfx(
'OL_READ_ATM_CONF_NETCDF: DATE INCONSISTENCY')
269 IF ( ptime /= ztime )
THEN 270 WRITE(iluout,*)
' TIME INCONSISTENCY: ',ptime,
'/',ztime
271 CALL abor1_sfx(
'OL_READ_ATM_CONF_NETCDF: TIME INCONSISTENCY')
278 IF ( kdatestop(1)/=0 )
THEN 280 DO jindex = ktimestartindex,inb_forc+ktimestartindex-1
281 iyear = tz_datefile(jindex)%TDATE%YEAR
282 imonth = tz_datefile(jindex)%TDATE%MONTH
283 iday = tz_datefile(jindex)%TDATE%DAY
284 ztime = tz_datefile(jindex)%TIME* 3600.
285 IF ( kdatestop(1)==iyear .AND. kdatestop(2)==imonth .AND. kdatestop(3)==iday &
286 .AND. kdatestop(4)==int(ztime) )
THEN 287 inb_forc = jindex-ktimestartindex+1
288 pduration = ( inb_forc - 1 ) * ptstep_forc
295 IF ( odelayedstart_nc .OR. kdatestop(1)/=0 )
THEN 296 DEALLOCATE(tz_datefile)
304 CALL mpi_bcast(ktimestartindex,kind(ktimestartindex)/4,mpi_integer,
npio,
ncomm,infompi)
305 CALL mpi_bcast(pduration,kind(pduration)/4,mpi_real,
npio,
ncomm,infompi)
310 IF (
lhook)
CALL dr_hook(
'OL_READ_ATM_CONF_NETCDF',1,zhook_handle)
316 OLONLAT1D,KNLON1D,KNLAT1D,PTIMEFILE)
319 USE modi_ol_find_file_read
327 CHARACTER(LEN=100),
INTENT(OUT) :: HUNITS
328 INTEGER,
INTENT(OUT) :: KSIZE
329 INTEGER,
INTENT(OUT) :: KNI
330 REAL,
INTENT(OUT) :: PFIRSTTIMEFILE
331 INTEGER,
INTENT(OUT) :: KRESP
332 LOGICAL,
INTENT(OUT) :: OLONLAT1D
333 INTEGER,
INTENT(OUT) :: KNLON1D,KNLAT1D
334 REAL,
DIMENSION(:),
POINTER,
INTENT(OUT) :: PTIMEFILE
338 INTEGER :: IFILE_ID,IVAR_ID,INDIMS,JRET,JDIM,ITYPE
339 INTEGER,
DIMENSION(2) :: IDIMIDS,IDIMLEN
340 CHARACTER(20),
DIMENSION(2) :: YDIMNAMES
341 INTEGER,
DIMENSION(8) :: IRET
343 REAL*4,
DIMENSION(:),
ALLOCATABLE :: ZTIMEFILE4
344 REAL,
DIMENSION(:),
ALLOCATABLE :: ZTIMEFILE
345 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITIMEFILE
347 REAL(KIND=JPRB) :: ZHOOK_HANDLE
350 IF (
lhook)
CALL dr_hook(
'OL_READ_ATM_CONF_NETCDF:READ_SURF_DIM_OL',0,zhook_handle)
357 IF (ifile_id.NE.0)
THEN 361 iret(1)=nf90_inq_varid(ifile_id,
'time',ivar_id)
362 iret(2)=nf90_inquire_variable(ifile_id,ivar_id,ndims=indims)
363 iret(3)=nf90_inquire_variable(ifile_id,ivar_id,dimids=idimids(1:1))
364 iret(4)=nf90_inquire_dimension(ifile_id,idimids(1),len=ksize)
365 iret(5)=nf90_get_att(ifile_id,ivar_id,
'units',hunits)
367 iret(6)=nf90_inquire_variable(ifile_id,ivar_id,xtype=itype)
369 ALLOCATE(ptimefile(ksize))
373 ALLOCATE(ztimefile(ksize))
374 iret(7)=nf90_get_var(ifile_id,ivar_id,ztimefile)
375 pfirsttimefile=ztimefile(1)
376 ptimefile(:)=ztimefile(:)
377 DEALLOCATE(ztimefile)
379 ALLOCATE(ztimefile4(ksize))
380 iret(7)=
REAL(nf90_get_var(ifile_id,ivar_id,ztimefile4))
381 pfirsttimefile=ztimefile4(1)
382 ptimefile(:)=ztimefile4(:)
383 DEALLOCATE(ztimefile4)
385 ALLOCATE(itimefile(ksize))
386 iret(7)=
REAL(nf90_get_var(ifile_id,ivar_id,itimefile))
387 pfirsttimefile=itimefile(1)
388 ptimefile(:)=itimefile(:)
389 DEALLOCATE(itimefile)
391 CALL abor1_sfx(
'OL_READ_ATM_CONF_NETCDF: TYPE OF TIME VARIABLE NOT KNOWN')
397 IF (ifile_id==0.OR.iret(jret).NE.nf90_noerr) kresp=1
408 IF (ifile_id.NE.0)
THEN 410 iret(1)=nf90_inq_varid(ifile_id,
'LON',ivar_id)
411 iret(2)=nf90_inquire_variable(ifile_id,ivar_id,ndims=indims)
412 iret(3)=nf90_inquire_variable(ifile_id,ivar_id,dimids=idimids(:))
415 iret(4)=nf90_inquire_dimension(ifile_id,idimids(jdim),
name=ydimnames(jdim),len=idimlen(jdim))
418 IF ( hgrid.EQ.
'LONLAT REG' .AND. indims==1 )
THEN 419 IF (trim(ydimnames(1))/=
"Number_of_points")
THEN 426 iret(5) = nf90_inq_varid(ifile_id,
'LAT',ivar_id)
427 iret(6) = nf90_inquire_variable(ifile_id,ivar_id,ndims=indims)
428 IF ( indims==1 )
THEN 429 iret(7) = nf90_inquire_variable(ifile_id,ivar_id,dimids=idimids(2:2))
430 iret(8) = nf90_inquire_dimension(ifile_id,idimids(2),len=idimlen(2))
438 kni = idimlen(1) * idimlen(2)
441 IF (ifile_id==0.OR.iret(jret).NE.nf90_noerr) kresp=1
446 IF (
lhook)
CALL dr_hook(
'OL_READ_ATM_CONF_NETCDF:READ_SURF_DIM_OL',1,zhook_handle)
subroutine netcdf2date(PTIME, HUNITS, PDATETIME)
subroutine set_surfex_filein(HPROGRAM, HMASK)
subroutine read_surf_dim_ol(HUNITS, KSIZE, KNI, PFIRSTTIMEFILE, KRESP, OLONLAT1D, KNLON1D, KNLAT1D, PTIMEFILE)
quick &counting sorts only inumt inumt name
subroutine get_size_full_n(HPROGRAM, KDIM_FULL, KSIZE_FULL_IN, KSIZE
subroutine ol_find_file_read(HNAME, IFILE_ID)
subroutine abor1_sfx(YTEXT)
subroutine end_io_surf_n(HPROGRAM)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine init_io_surf_n(DTCO, U, HPROGRAM, HMASK, HSCHEME, HACTION
subroutine ol_read_atm_conf_netcdf(DTCO, U, HGRID, HSURF_FILETYPE, ODELAYEDSTART_NC, KDATESTOP, PDURATION, PTSTEP_FORC, KNI, KYEAR, KMONTH, KDAY, PTIME, PLAT, PLON, PZS, PZREF, PUREF, KTIMESTARTINDEX)