8 pduration, ptstep_forc, kni, &
9 kyear, kmonth, kday, ptime, &
51 USE modd_surfex_mpi, ONLY : nrank, npio, ncomm, nproc, xtime_comm_read, xtime_npio_read
53 USE modi_set_surfex_filein
55 USE modi_init_io_surf_n
57 USE modi_end_io_surf_n
58 USE modi_get_size_full_n
63 USE yomhook
,ONLY : lhook, dr_hook
64 USE parkind1
,ONLY : jprb
74 CHARACTER(LEN=6),
INTENT(IN) :: hsurf_filetype
75 INTEGER,
INTENT(OUT) :: kni
76 INTEGER,
INTENT(OUT) :: kyear, kmonth, kday
77 REAL,
INTENT(OUT) :: pduration,ptstep_forc
78 REAL,
INTENT(OUT) :: ptime
79 REAL,
DIMENSION(:),
POINTER :: plat, plon
80 REAL,
DIMENSION(:),
POINTER :: pzs
81 REAL,
DIMENSION(:),
POINTER :: pzref, puref
83 CHARACTER(LEN=100) :: yunits
85 REAL :: zfirsttimefile
86 INTEGER :: iyear, imonth, iday
87 INTEGER :: iret, inb_forc
88 INTEGER :: ini, idim_full
92 TYPE (date_time) ,
DIMENSION(1):: tz_firstdatefile
93 DOUBLE PRECISION :: xtime0
94 REAL(KIND=JPRB) :: zhook_handle
100 IF (lhook) CALL dr_hook(
'OL_READ_ATM_CONF_NETCDF',0,zhook_handle)
102 IF (nrank==npio)
THEN
116 xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
124 CALL mpi_bcast(inb_forc,kind(inb_forc)/4,mpi_integer,npio,ncomm,infompi)
125 xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
130 'OFFLIN',
'FRC_TIME_STP' ,ptstep_forc ,iret)
132 pduration = ( inb_forc - 1 ) * ptstep_forc
138 hsurf_filetype,
'FULL ',
'SURF ',
'READ ')
141 hsurf_filetype,
'DIM_FULL',idim_full,iret)
143 hsurf_filetype,
'DTCUR',ttime,iret)
145 kyear = ttime%TDATE%YEAR
146 kmonth = ttime%TDATE%MONTH
147 kday = ttime%TDATE%DAY
155 'OFFLIN ',idim_full,kni)
164 'OFFLIN',
'LAT',plat,iret)
166 'OFFLIN',
'LON',plon,iret)
168 'OFFLIN',
'ZS',pzs,iret)
170 'OFFLIN',
'ZREF',pzref,iret)
172 'OFFLIN',
'UREF',puref,iret)
176 IF (nrank == npio)
THEN
178 IF (idim_full /= ini)
THEN
179 WRITE(iluout,*)
' NUMBER OF GRID POINTS INCONSISTENCY: ',kni,
'/',ini
180 CALL
abor1_sfx(
'OL_READ_ATM_CONF_NETCDF: NUMBER OF GRID POINTS INCONSISTENCY')
183 CALL
netcdf2date((/zfirsttimefile/),yunits,tz_firstdatefile)
184 iyear = tz_firstdatefile(1)%TDATE%YEAR
185 imonth = tz_firstdatefile(1)%TDATE%MONTH
186 iday = tz_firstdatefile(1)%TDATE%DAY
187 ztime = tz_firstdatefile(1)%TIME* 3600.
189 IF ( (kyear /= iyear) .OR. (kmonth /= imonth) .OR. (kday /= iday) )
THEN
190 WRITE(iluout,*)
' DATE INCONSISTENCY: ',kyear,kmonth,kday,
'/',iyear,imonth,iday
191 CALL
abor1_sfx(
'OL_READ_ATM_CONF_NETCDF: DATE INCONSISTENCY')
194 IF ( ptime /= ztime )
THEN
195 WRITE(iluout,*)
' TIME INCONSISTENCY: ',ptime,
'/',ztime
196 CALL
abor1_sfx(
'OL_READ_ATM_CONF_NETCDF: TIME INCONSISTENCY')
201 IF (lhook) CALL dr_hook(
'OL_READ_ATM_CONF_NETCDF',1,zhook_handle)
209 USE modi_ol_find_file_read
216 CHARACTER(LEN=100),
INTENT(OUT) :: hunits
217 INTEGER,
INTENT(OUT) :: ksize
218 INTEGER,
INTENT(OUT) :: kni
219 REAL,
INTENT(OUT) :: pfirsttimefile
220 INTEGER,
INTENT(OUT) :: kresp
224 INTEGER :: ifile_id,ivar_id,indims,jret,jdim,itype
225 INTEGER,
DIMENSION(2) :: idimids,idimlen
226 INTEGER,
DIMENSION(7) :: iret
228 REAL*4,
DIMENSION(:),
ALLOCATABLE :: ztimefile4
229 REAL,
DIMENSION(:),
ALLOCATABLE :: ztimefile
230 INTEGER,
DIMENSION(:),
ALLOCATABLE :: itimefile
232 REAL(KIND=JPRB) :: zhook_handle
235 IF (lhook) CALL dr_hook(
'OL_READ_ATM_CONF_NETCDF:READ_SURF_DIM_OL',0,zhook_handle)
242 IF (ifile_id.NE.0)
THEN
246 iret(1)=nf_inq_varid(ifile_id,
'time',ivar_id)
247 iret(2)=nf_inq_varndims(ifile_id,ivar_id,indims)
248 iret(3)=nf_inq_vardimid(ifile_id,ivar_id,idimids(1:1))
249 iret(4)=nf_inq_dimlen(ifile_id,idimids(1),ksize)
250 iret(5)=nf_get_att_text(ifile_id,ivar_id,
'units',hunits)
252 iret(6)=nf_inq_vartype(ifile_id,ivar_id,itype)
256 ALLOCATE(ztimefile(ksize))
257 iret(7)=nf_get_var_double(ifile_id,ivar_id,ztimefile)
258 pfirsttimefile=ztimefile(1)
259 DEALLOCATE(ztimefile)
261 ALLOCATE(ztimefile4(ksize))
262 iret(7)=
REAL(nf_get_var_real(ifile_id,ivar_id,ztimefile4))
263 pfirsttimefile=ztimefile4(1)
264 DEALLOCATE(ztimefile4)
266 ALLOCATE(itimefile(ksize))
267 iret(7)=
REAL(nf_get_var_int(ifile_id,ivar_id,itimefile))
268 pfirsttimefile=itimefile(1)
269 DEALLOCATE(itimefile)
271 CALL
abor1_sfx(
'OL_READ_ATM_CONF_NETCDF: TYPE OF TIME VARIABLE NOT KNOWN')
277 IF (ifile_id==0.OR.iret(jret).NE.nf_noerr) kresp=1
284 IF (ifile_id.NE.0)
THEN
286 iret(1)=nf_inq_varid(ifile_id,
'LON',ivar_id)
287 iret(2)=nf_inq_varndims(ifile_id,ivar_id,indims)
288 iret(3)=nf_inq_vardimid(ifile_id,ivar_id,idimids(:))
291 iret(4)=nf_inq_dimlen(ifile_id,idimids(jdim),idimlen(jdim))
293 kni = idimlen(1) * idimlen(2)
296 IF (ifile_id==0.OR.iret(jret).NE.nf_noerr) kresp=1
301 IF (lhook) CALL dr_hook(
'OL_READ_ATM_CONF_NETCDF:READ_SURF_DIM_OL',1,zhook_handle)
subroutine init_io_surf_n(DTCO, DGU, U, HPROGRAM, HMASK, HSCHEME, HACTION)
subroutine set_surfex_filein(HPROGRAM, HMASK)
subroutine ol_find_file_read(HNAME, IFILE_ID)
subroutine abor1_sfx(YTEXT)
subroutine end_io_surf_n(HPROGRAM)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine get_size_full_n(U, HPROGRAM, KDIM_FULL, KSIZE_FULL)
subroutine ol_read_atm_conf_netcdf(YSC, HSURF_FILETYPE, PDURATION, PTSTEP_FORC, KNI, KYEAR, KMONTH, KDAY, PTIME, PLAT, PLON, PZS, PZREF, PUREF)
subroutine netcdf2date(PTIME, HUNITS, PDATETIME)
subroutine read_surf_dim_ol(HUNITS, KSIZE, KNI, PFIRSTTIMEFILE, KRESP)