SURFEX v8.1
General documentation of Surfex
init_trip.F90
Go to the documentation of this file.
1 !####################################################################################
2 SUBROUTINE init_trip (TPDG, TP, TPG, &
3  KYEAR,KMONTH,KDAY,PTIME,KLON,KLAT,&
4  PTSTEP_RUN,PTSTEP_DIAG,ORESTART,OXIOS)
5 !####################################################################################
6 !
7 !!**** *INIT_TRIP*
8 !!
9 !! PURPOSE
10 !! -------
11 !
12 ! Initialize TRIP variables and parameters.
13 !
14 !!** METHOD
15 !! ------
16 !
17 ! Direct calculation
18 !
19 !! EXTERNAL
20 !! --------
21 !
22 ! None
23 !!
24 !! IMPLICIT ARGUMENTS
25 !! ------------------
26 !!
27 !!
28 !! REFERENCE
29 !! ---------
30 !!
31 !! AUTHOR
32 !! ------
33 !! B. Decharme
34 !!
35 !! MODIFICATIONS
36 !! -------------
37 !! Original 01/02/05
38 !! For surfex 21/05/08
39 !-------------------------------------------------------------------------------
40 !
41 !* 0. DECLARATIONS
42 ! ------------
43 !
44 USE modd_trip_diag, ONLY : trip_diag_t
45 USE modd_trip, ONLY : trip_t
46 USE modd_trip_grid, ONLY : trip_grid_t
47 !
48 USE modn_trip, ONLY : cgroundw, cvit, lflood, &
49  xcvel, xratmed, xtstep, &
51 !
52 USE modd_trip_par
53 USE modd_trip_listing, ONLY : nlisting
54 !
58 USE mode_rw_trip
59 !
60 USE modi_abort_trip
61 USE modi_trip_hs_vel
62 USE modi_init_trip_diag
63 USE modi_init_restart_trip
64 USE modi_get_lonlat_trip
65 USE modi_init_trip_cpl_esm
66 USE modi_alloc_trip_diag
67 !
68 USE yomhook ,ONLY : lhook, dr_hook
69 USE parkind1 ,ONLY : jprb
70 !
71 IMPLICIT NONE
72 !
73 !-------------------------------------------------------------------------------
74 !
75 !* 0.1 declarations of arguments
76 !
77 !
78 TYPE(trip_diag_t), INTENT(INOUT) :: TPDG
79 TYPE(trip_t), INTENT(INOUT) :: TP
80 TYPE(trip_grid_t), INTENT(INOUT) :: TPG
81 !
82 INTEGER, INTENT(OUT) :: KYEAR !date UTC
83 INTEGER, INTENT(OUT) :: KMONTH !date UTC
84 INTEGER, INTENT(OUT) :: KDAY !date UTC
85 REAL, INTENT(OUT) :: PTIME !date UTC
86 !
87 INTEGER, INTENT(OUT) :: KLON ! number of points in longitude
88 INTEGER, INTENT(OUT) :: KLAT ! number of points in latitude
89 !
90 REAL, INTENT(IN) :: PTSTEP_RUN
91 REAL, INTENT(IN) :: PTSTEP_DIAG
92 !
93 LOGICAL, INTENT(IN) :: ORESTART
94 LOGICAL, INTENT(IN) :: OXIOS
95 !
96 !-------------------------------------------------------------------------------
97 !
98 !* 0.2 declarations of local variables
99 !
100  CHARACTER(LEN=13), PARAMETER :: YFILE_PARAM ='TRIP_PARAM.nc'
101  CHARACTER(LEN=12), PARAMETER :: YFILE_INIT ='TRIP_PREP.nc'
102  CHARACTER(LEN=15), PARAMETER :: YFILE_RESTART='TRIP_RESTART.nc'
103  CHARACTER(LEN=19), PARAMETER :: YDIAG ='TRIP_DIAG.nc'
104  CHARACTER(LEN=18), PARAMETER :: YRUN ='TRIP_DIAG_RUN.nc'
105 !
106  CHARACTER(LEN=6) :: YTIME
107  CHARACTER(LEN=50) :: YFILE
108  CHARACTER(LEN=20) :: YVAR
109 !
110 REAL,DIMENSION(4) :: ZDATE
111 !
112 REAL,DIMENSION(:,:,:),ALLOCATABLE :: ZREAD3D
113 !
114 REAL,DIMENSION(:,:),ALLOCATABLE :: ZREAD
115 REAL,DIMENSION(:,:),ALLOCATABLE :: ZHSTREAM
116 REAL,DIMENSION(:,:),ALLOCATABLE :: ZVEL
117 REAL,DIMENSION(:,:),ALLOCATABLE :: ZWORK
118 REAL,DIMENSION(:,:),ALLOCATABLE :: ZGW_STO
119 REAL,DIMENSION(:,:),ALLOCATABLE :: ZWTD
120 !
121 REAL, DIMENSION(:),ALLOCATABLE :: ZLON
122 REAL, DIMENSION(:),ALLOCATABLE :: ZLAT
123 !
124 REAL :: ZLONMIN ! minimum longitude (degrees)
125 REAL :: ZLONMAX ! maximum longitude (degrees)
126 REAL :: ZLATMIN ! minimum latitude (degrees)
127 REAL :: ZLATMAX ! maximum latitude (degrees)
128 REAL :: ZGRID_RES ! 1° or 0.5° resolution
129 !
130 INTEGER :: IWORK, IFLOOD, INI, JLON, JLAT
131 !
132 REAL(KIND=JPRB) :: ZHOOK_HANDLE
133 !
134 !-------------------------------------------------------------------------------
135 ! * Output attribut for netcdf diag file
136 !-------------------------------------------------------------------------------
137 !
138  CHARACTER(LEN=50) :: YTITLE, YUNITTIME
139 ! YTITLE = Title of each output file
140 ! YUNITTIME = Time unit in each output file if present
141 !
142 !-------------------------------------------------------------------------------
143 ! * Initilyse TRIP
144 !-------------------------------------------------------------------------------
145 !
146 IF (lhook) CALL dr_hook('INIT_TRIP',0,zhook_handle)
147 !
148 WRITE(nlisting,*)''
149 WRITE(nlisting,*)''
150 WRITE(nlisting,*)'!'
151 WRITE(nlisting,*)'! TRIP RUN !!!!!!!!!!!!!'
152 WRITE(nlisting,*)'!'
153 !
154 WRITE(nlisting,*)''
155 WRITE(nlisting,*)' INITIALYSE TRIP '
156 WRITE(nlisting,*)''
157 !
158 !-------------------------------------------------------------------------------
159 ! * Read date
160 !-------------------------------------------------------------------------------
161 !
162 yvar='date'
163  CALL read_trip(nlisting,yfile_init,yvar,zdate)
164 !
165 kyear = int(zdate(1))
166 kmonth = int(zdate(2))
167 kday = int(zdate(3))
168 ptime = zdate(4)
169 !
170 !-------------------------------------------------------------------------------
171 !
172 ! * Get TRIP grid configuration
173 !
174  CALL get_trip_grid(tpg%XTRIP_GRID,zlonmin,zlonmax,zlatmin,zlatmax,zgrid_res,klon,klat)
175 !
176 ALLOCATE(zlon(klon))
177 ALLOCATE(zlat(klat))
178 zlon(:)=xundef
179 zlat(:)=xundef
180 !
181  CALL get_lonlat_trip(tpg, &
182  klon,klat,zlon,zlat)
183 !
184 !-------------------------------------------------------------------------------
185 ! * Check options
186 !-------------------------------------------------------------------------------
187 !
188 IF(cvit == 'VAR')THEN
189  IF(xcvel/=0.5)THEN
190  xcvel=0.5
191  WRITE(nlisting,*)'!!! ATTENTION : You use the velocity scheme and XCVEL is not 0.5 m/s !!!'
192  WRITE(nlisting,*)'!!! ATTENTION : XCVEL put at 0.5 m/s !!!'
193  ENDIF
194 ELSE
195  IF(xcvel<0.1)THEN
196  WRITE(nlisting,*)'!!! ATTENTION : XCVEL < 0.1 m/s !!! Not good !!!'
197  CALL abort_trip('INIT_TRIP: ATTENTION : XCVEL < 0.1 m/s !!! Not good !!!')
198  ENDIF
199 ENDIF
200 !
201 IF(cgroundw=='DIF')THEN
202  IF(cvit /= 'VAR')THEN
203  WRITE(nlisting,*)'! You cannot use the groundwater scheme without the variable velocity scheme !!!'
204  CALL abort_trip('INIT_TRIP: You cannot use the groundwater scheme without the variable velocity scheme !!!')
205  ENDIF
206  IF(zgrid_res>0.5)THEN
207  WRITE(nlisting,*)'! You cannot use the groundwater scheme with another resolution than 0.5 or 1/12 !!!'
208  CALL abort_trip('INIT_TRIP: You cannot use the groundwater scheme with another resolution than 0.5 or 1/12 !!!')
209  ENDIF
210 ENDIF
211 !
212 IF(lflood)THEN
213  IF(cgroundw=='DEF')THEN
214  WRITE(nlisting,*)'! ATTENTION : You use the flooding scheme without groundwater scheme !!!'
215  ENDIF
216  IF(cvit /= 'VAR')THEN
217  WRITE(nlisting,*)'! You cannot use the flooding scheme without the variable velocity scheme !!!'
218  CALL abort_trip('INIT_TRIP: You cannot use the flooding scheme without the variable velocity scheme !!!')
219  ENDIF
220  IF(xtstep>3600.)THEN
221  WRITE(nlisting,*)'!'
222  WRITE(nlisting,*)'! For flooding, the TRIP time step is too big !!!'
223  WRITE(nlisting,*)'! XTSTEP must be equal or inferior to 3600s !!!'
224  WRITE(nlisting,*)'!'
225  CALL abort_trip('INIT_TRIP: For flooding, the TRIP time step is too big !!!')
226  ENDIF
227 ENDIF
228 !
229 IF(mod(ptstep_run,xtstep)*mod(xtstep,ptstep_run)/=0.)THEN
230  WRITE(nlisting,*)'! XTSTEP_RUN and XTSTEP are not good !!!'
231  WRITE(nlisting,*)'! XTSTEP_RUN =', ptstep_run
232  WRITE(nlisting,*)'! XTSTEP =', xtstep
233  CALL abort_trip('INIT_TRIP: PTSTEP_RUN and XTSTEP are not good !!!')
234 ENDIF
235 !
236 IF(mod(ptstep_diag,xtstep)*mod(xtstep,ptstep_diag)/=0.)THEN
237  WRITE(nlisting,*)'! PTSTEP_DIAG and XTSTEP are not good !!!'
238  WRITE(nlisting,*)'! XTSTEP_DIAG =', ptstep_diag
239  WRITE(nlisting,*)'! XTSTEP =', xtstep
240  CALL abort_trip('INIT_TRIP: PTSTEP_DIAG and XTSTEP are not good !!!')
241 ENDIF
242 !
243 WRITE(nlisting,*)'! ',zgrid_res,'° TRIP run !!!'
244 !
245 IF(zgrid_res<0.5.AND.xratmed==1.4)THEN
246  WRITE(nlisting,*)'! meandering ratio is 1.4 at 0.5° or 1° resolution !!!'
247  WRITE(nlisting,*)'! for other resolution change XRATMED in namelist !!!'
248  CALL abort_trip('INIT_TRIP: meandering ratio is 1.4 at 0.5° or 1° resolution !!!')
249 ENDIF
250 !
251 IF(lgwsubf.AND.xgwsubd>30.)THEN
252  WRITE(nlisting,*)'!! XGWSUBD too large (must be <=30), check your namelist !!!'
253  CALL abort_trip('INIT_TRIP: XGWSUBD too large (must be <=30), check your namelist !!!')
254 ENDIF
255 !
256 !-------------------------------------------------------------------------------
257 ! * Allocate trip grid arguments
258 !-------------------------------------------------------------------------------
259 !
260 ALLOCATE(tpg%XAREA (klon,klat))
261 ALLOCATE(tpg%XLEN (klon,klat))
262 ALLOCATE(tpg%NGRCN (klon,klat))
263 ALLOCATE(tpg%NSEQ (klon,klat))
264 ALLOCATE(tpg%NNEXTX (klon,klat))
265 ALLOCATE(tpg%NNEXTY (klon,klat))
266 ALLOCATE(tpg%NBASID (klon,klat))
267 !
268 ALLOCATE(tpg%GMASK (klon,klat))
269 ALLOCATE(tpg%GMASK_VEL(klon,klat))
270 ALLOCATE(tpg%GMASK_FLD(klon,klat))
271 ALLOCATE(tpg%GMASK_GW (klon,klat))
272 ALLOCATE(tpg%GMASK_GRE(klon,klat))
273 ALLOCATE(tpg%GMASK_ANT(klon,klat))
274 !
275 tpg%GMASK (:,:) = .false.
276 tpg%GMASK_VEL(:,:) = .false.
277 tpg%GMASK_FLD(:,:) = .false.
278 tpg%GMASK_GW (:,:) = .false.
279 tpg%GMASK_GRE(:,:) = .false.
280 tpg%GMASK_ANT(:,:) = .false.
281 !
282 !-------------------------------------------------------------------------------
283 ! * Allocate trip arguments
284 !-------------------------------------------------------------------------------
285 !
286 ALLOCATE(tp%XSURF_STO(klon,klat))
287 !
288 IF(cgroundw/='DEF')THEN
289  ALLOCATE(tp%XTAUG(klon,klat))
290 ELSE
291  ALLOCATE(tp%XTAUG(0,0))
292 ENDIF
293 !
294 IF(cgroundw=='CST')THEN
295  ALLOCATE(tp%XGROUND_STO(klon,klat))
296 ELSE
297  ALLOCATE(tp%XGROUND_STO(0,0))
298 ENDIF
299 !
300 IF(cgroundw=='DIF')THEN
301  ALLOCATE(tp%XHGROUND (klon,klat))
302  ALLOCATE(tp%XWEFF (klon,klat))
303  ALLOCATE(tp%XTRANS (klon,klat))
304  ALLOCATE(tp%XNUM_AQUI(klon,klat))
305  ALLOCATE(tp%XTOPO_RIV(klon,klat))
306 ELSE
307  ALLOCATE(tp%XHGROUND (0,0))
308  ALLOCATE(tp%XWEFF (0,0))
309  ALLOCATE(tp%XTRANS (0,0))
310  ALLOCATE(tp%XNUM_AQUI(0,0))
311  ALLOCATE(tp%XTOPO_RIV(0,0))
312 ENDIF
313 !
314 IF(lflood.OR.cgroundw=='DIF')THEN
315  ALLOCATE(tp%XHC_BED(klon,klat))
316 ELSE
317  ALLOCATE(tp%XHC_BED(0,0))
318 ENDIF
319 !
320 IF(lflood)THEN
321  ALLOCATE(tp%XN_FLOOD (klon,klat))
322  ALLOCATE(tp%XFLOOD_STO(klon,klat))
323  ALLOCATE(tp%XWFLOOD (klon,klat))
324  ALLOCATE(tp%XFLOOD_LEN(klon,klat))
325  ALLOCATE(tp%XHFLOOD (klon,klat))
326  ALLOCATE(tp%XFFLOOD (klon,klat))
327 ELSE
328  ALLOCATE(tp%XN_FLOOD (0,0))
329  ALLOCATE(tp%XFLOOD_STO(0,0))
330  ALLOCATE(tp%XWFLOOD (0,0))
331  ALLOCATE(tp%XFLOOD_LEN(0,0))
332  ALLOCATE(tp%XHFLOOD (0,0))
333  ALLOCATE(tp%XFFLOOD (0,0))
334 ENDIF
335 !
336 IF(cvit=='VAR')THEN
337  ALLOCATE(tp%XSLOPEBED(klon,klat))
338  ALLOCATE(tp%XWIDTH (klon,klat))
339  ALLOCATE(tp%XN (klon,klat))
340 ELSE
341  ALLOCATE(tp%XSLOPEBED(0,0))
342  ALLOCATE(tp%XWIDTH (0,0))
343  ALLOCATE(tp%XN (0,0))
344 ENDIF
345 !
346 !-------------------------------------------------------------------------------
347 ! * Compute and Read TRIP parameter
348 !-------------------------------------------------------------------------------
349 !
350 ALLOCATE(zread(klon,klat))
351 !
352 ! * Flow direction
353 !
354 yvar ='FLOWDIR'
355  CALL read_trip(nlisting,yfile_param,yvar,zread)
356 WHERE(zread==xundef)zread=0.0
357 tpg%NGRCN(:,:)=int(zread(:,:))
358 WHERE(tpg%NGRCN(:,:)>0)tpg%GMASK(:,:)=.true.
359 !
360 ! * Rriver sequence
361 !
362 yvar ='RIVSEQ'
363  CALL read_trip(nlisting,yfile_param,yvar,zread)
364 WHERE(zread==xundef)zread=0.0
365 tpg%NSEQ(:,:)=int(zread(:,:))
366 !
367 ! * Maximum river sequence value
368 !
369 tpg%NSEQMAX = maxval(tpg%NSEQ(:,:))
370 !
371 ! * Basin number id
372 !
373 yvar ='NUM_BAS'
374  CALL read_trip(nlisting,yfile_param,yvar,zread)
375 WHERE(zread==xundef)zread=0.0
376 tpg%NBASID(:,:)=int(zread(:,:))
377 !
378 tpg%NBASMIN = minval(tpg%NBASID(:,:),tpg%NBASID(:,:)>0)
379 tpg%NBASMAX = maxval(tpg%NBASID(:,:),tpg%NBASID(:,:)>0)
380 !
381 ! * Set down stream
382 !
383  CALL setnext(klon,klat,tpg%NGRCN,tpg%NNEXTX,tpg%NNEXTY)
384 !
385 ! * Set area size
386 !
387 yvar ='CELL_AREA'
388  CALL read_trip(nlisting,yfile_param,yvar,tpg%XAREA)
389 WHERE(.NOT.tpg%GMASK(:,:))tpg%XAREA(:,:)=xundef
390 !
391 ! * Distance between grids with the meandering ratio
392 !
393 yvar ='RIVLEN'
394  CALL read_trip(nlisting,yfile_param,yvar,tpg%XLEN)
395 WHERE(.NOT.tpg%GMASK(:,:))tpg%XLEN(:,:)=xundef
396 !
397 ! * Land mask for Greenland and Antarctica
398 !
399 yvar ='GREEN_ANT'
400  CALL read_trip(nlisting,yfile_param,yvar,zread)
401 DO jlat=1,klat
402  DO jlon=1,klon
403  IF(zread(jlon,jlat)==2.0)THEN
404  tpg%GMASK_ANT(jlon,jlat)=.true.
405  ELSEIF(zread(jlon,jlat)==1.0)THEN
406  tpg%GMASK_GRE(jlon,jlat)=.true.
407  ENDIF
408  ENDDO
409 ENDDO
410 !
411 DEALLOCATE(zread)
412 DEALLOCATE(zlon)
413 DEALLOCATE(zlat)
414 !
415 ! * Variable velocity schemes variables
416 !
417 IF(cvit == 'VAR')THEN
418 !
419  yvar ='N_RIV'
420  CALL read_trip(nlisting,yfile_param,yvar,tp%XN)
421 !
422  yvar ='WIDTHRIV'
423  CALL read_trip(nlisting,yfile_param,yvar,tp%XWIDTH)
424 !
425  yvar ='SLOPERIV'
426  CALL read_trip(nlisting,yfile_param,yvar,tp%XSLOPEBED)
427 !
428  tpg%GMASK_VEL(:,:)=tpg%GMASK(:,:)
429  WHERE(tpg%NSEQ(:,:)==0.OR.tp%XWIDTH(:,:)>=xundef-1.0)
430  tp%XSLOPEBED(:,:)= 0.0
431  tp%XWIDTH (:,:)= 0.0
432  tp%XN (:,:)= 0.0
433  tpg%GMASK_VEL(:,:)=.false.
434  ENDWHERE
435 !
436 ENDIF
437 !
438 ! * Groundwater parameters
439 !
440 IF(cgroundw/='DEF')THEN
441 !
442 ! * Calculate the groundwater transfert time
443 !
444  yvar ='TAUG'
445  CALL read_trip(nlisting,yfile_param,yvar,tp%XTAUG)
446 !
447  WHERE(tpg%NSEQ(:,:)==0)
448  tp%XTAUG(:,:)=xundef
449  ENDWHERE
450 !
451  tpg%GMASK_GW(:,:)=tpg%GMASK(:,:)
452 !
453  WHERE(tp%XTAUG(:,:)/=xundef)
454  tp%XTAUG(:,:)=tp%XTAUG(:,:)*xday
455  tpg%GMASK_GW(:,:)=.true.
456  ELSEWHERE
457  tpg%GMASK_GW(:,:)=.false.
458  ENDWHERE
459 !
460 ENDIF
461 !
462 IF(cgroundw == 'DIF')THEN
463 !
464 ! * Diffusive groundwater scheme variables
465 !
466 !
467  yvar = 'NUM_AQUI'
468  CALL read_trip(nlisting,yfile_param,yvar,tp%XNUM_AQUI)
469 !
470  WHERE(tp%XNUM_AQUI(:,:)==xundef)
471  tpg%GMASK_GW(:,:)=.false.
472  ENDWHERE
473 !
474  yvar = 'WEFF'
475  CALL read_trip(nlisting,yfile_param,yvar,tp%XWEFF)
476 !
477  yvar = 'TRANS'
478  CALL read_trip(nlisting,yfile_param,yvar,tp%XTRANS)
479 !
480  yvar = 'TOPO_RIV'
481  CALL read_trip(nlisting,yfile_param,yvar,tp%XTOPO_RIV)
482 !
483  ALLOCATE(tp%XTABGW_F (klon,klat,ndimtab))
484  ALLOCATE(tp%XTABGW_H (klon,klat,ndimtab))
485 !
486  yvar ='TABGW_F'
487  CALL read_trip(nlisting,yfile_param,yvar,tp%XTABGW_F)
488 !
489  yvar ='TABGW_H'
490  CALL read_trip(nlisting,yfile_param,yvar,tp%XTABGW_H)
491 !
492 ELSE
493 !
494  ALLOCATE(tp%XTABGW_F (0,0,0))
495  ALLOCATE(tp%XTABGW_H (0,0,0))
496 !
497 ENDIF
498 !
499 IF (lflood.OR.cgroundw == 'DIF') THEN
500 !
501  yvar ='RIVDEPTH'
502  CALL read_trip(nlisting,yfile_param,yvar,tp%XHC_BED)
503 !
504 ENDIF
505 !
506 ! * Calculate floodplains parameters
507 !
508 IF(lflood)THEN
509 !
510  yvar ='NFLOOD'
511  CALL read_trip(nlisting,yfile_param,yvar,tp%XN_FLOOD)
512 !
513  tpg%GMASK_FLD(:,:)=tpg%GMASK_VEL(:,:)
514  WHERE(tp%XN_FLOOD(:,:)==xundef)
515  tpg%GMASK_FLD(:,:)=.false.
516  ENDWHERE
517 !
518  ALLOCATE(zread3d(klon,klat,ndimtab))
519 !
520  ALLOCATE(tp%XTAB_F (klon,klat,ndimtab+1))
521  ALLOCATE(tp%XTAB_H (klon,klat,ndimtab+1))
522  ALLOCATE(tp%XTAB_VF(klon,klat,ndimtab+1))
523 !
524  tp%XTAB_F (:,:,:)=xundef
525  tp%XTAB_H (:,:,:)=xundef
526  tp%XTAB_VF(:,:,:)=xundef
527 !
528  WHERE(tpg%GMASK_FLD(:,:))
529  tp%XTAB_F (:,:,1)=0.0
530  tp%XTAB_H (:,:,1)=0.0
531  tp%XTAB_VF(:,:,1)=0.0
532  ENDWHERE
533 !
534  yvar ='TABF'
535  CALL read_trip(nlisting,yfile_param,yvar,zread3d)
536  tp%XTAB_F(:,:,2:ndimtab+1)=zread3d(:,:,:)
537 !
538  yvar ='TABH'
539  CALL read_trip(nlisting,yfile_param,yvar,zread3d)
540  tp%XTAB_H(:,:,2:ndimtab+1)=zread3d(:,:,:)
541 !
542  yvar ='TABVF'
543  CALL read_trip(nlisting,yfile_param,yvar,zread3d)
544  tp%XTAB_VF(:,:,2:ndimtab+1)=zread3d(:,:,:)
545 !
546  DEALLOCATE(zread3d)
547 !
548 ELSE
549 !
550  ALLOCATE(tp%XTAB_F (0,0,0))
551  ALLOCATE(tp%XTAB_H (0,0,0))
552  ALLOCATE(tp%XTAB_VF(0,0,0))
553 !
554 ENDIF
555 !
556 !-------------------------------------------------------------------------------
557 ! * Read initial and historical variables
558 !-------------------------------------------------------------------------------
559 !
560 yvar ='SURF_STO'
561  CALL read_trip(nlisting,yfile_init,yvar,tp%XSURF_STO)
562 !
563 IF(cgroundw=='CST')THEN
564 !
565  yvar ='GROUND_STO'
566  CALL read_trip(nlisting,yfile_init,yvar,tp%XGROUND_STO)
567 !
568 ELSEIF(cgroundw=='DIF')THEN
569 !
570  yvar ='HGROUND'
571  CALL read_trip(nlisting,yfile_init,yvar,tp%XHGROUND)
572 !
573 ENDIF
574 !
575 IF(lflood)THEN
576 !
577  yvar ='FLOOD_STO'
578  CALL read_trip(nlisting,yfile_init,yvar,tp%XFLOOD_STO)
579 !
580  yvar ='FFLOOD'
581  CALL read_trip(nlisting,yfile_init,yvar,tp%XFFLOOD)
582 !
583  yvar ='HFLOOD'
584  CALL read_trip(nlisting,yfile_init,yvar,tp%XHFLOOD)
585 !
586 ENDIF
587 !
588 !-------------------------------------------------------------------------------
589 ! * Initial Conditions
590 !-------------------------------------------------------------------------------
591 !
592 ALLOCATE(zgw_sto(klon,klat))
593 ALLOCATE(zwtd(klon,klat))
594 ALLOCATE(zhstream(klon,klat))
595 ALLOCATE(zvel(klon,klat))
596 zwtd(:,:) = 0.0
597 zgw_sto(:,:) = 0.0
598 zhstream(:,:) = 0.0
599 zvel(:,:) = 0.0
600 !
601 IF(cvit == 'VAR')THEN
602 !
603  CALL trip_hs_vel(xtstep,tpg%GMASK_VEL, &
604  tpg%XLEN,tp%XWIDTH,tp%XSLOPEBED, &
605  tp%XN,tp%XSURF_STO,zhstream,zvel )
606 !
607 ENDIF
608 !
609 IF(cgroundw=='DIF')THEN
610  WHERE(tpg%GMASK_GW(:,:))
611  zgw_sto(:,:)=(xgwdzmax+tp%XHGROUND(:,:)-tp%XTOPO_RIV(:,:))*tp%XWEFF(:,:)*xrholw
612  zwtd(:,:)=tp%XHGROUND(:,:)-tp%XTOPO_RIV(:,:)
613  ENDWHERE
614 ENDIF
615 !
616 ! * Fraction, width, water depth of floodplains
617 !
618 iwork=0
619 !
620 IF(lflood)THEN
621 !
622  WHERE(tpg%GMASK(:,:).AND.tpg%GMASK_FLD(:,:))
623  tp%XFLOOD_LEN(:,:) = xratmed*sqrt(tp%XFFLOOD(:,:)*tpg%XAREA(:,:))
624  tp%XFLOOD_LEN(:,:) = min(tpg%XLEN(:,:),tp%XFLOOD_LEN(:,:))
625 
626  ELSEWHERE
627  tp%XFLOOD_LEN(:,:) = 0.0
628  tp%XWFLOOD (:,:) = 0.0
629  tp%XFFLOOD (:,:) = 0.0
630  tp%XHFLOOD (:,:) = 0.0
631  tp%XFLOOD_STO(:,:) = 0.0
632  ENDWHERE
633 !
634 !
635  WHERE(tp%XFFLOOD(:,:)>0.0.AND.tpg%GMASK_FLD(:,:))
636  tp%XWFLOOD(:,:) = tpg%XAREA(:,:) * tp%XFFLOOD(:,:) / tp%XFLOOD_LEN(:,:)
637  ELSEWHERE
638  tp%XWFLOOD(:,:) = 0.0
639  ENDWHERE
640 !
641  ini =count(tpg%GMASK)
642  iwork =count(tpg%GMASK_FLD)
643  iflood=count(tp%XFFLOOD>0.0)
644 !
645 ENDIF
646 !
647 !-------------------------------------------------------------------------------
648 ! * Initialize coupling variables
649 !-------------------------------------------------------------------------------
650 !
651  CALL init_trip_cpl_esm(tp, tpg, &
652  klon,klat)
653 !
654 !-------------------------------------------------------------------------------
655 !
656 WRITE(nlisting,*)'Coupling_time_step : ',ptstep_run
657 WRITE(nlisting,*)'Output_time_step : ',ptstep_diag
658 WRITE(nlisting,*)'TRIP_time_step : ',xtstep
659 WRITE(nlisting,*)''
660 WRITE(nlisting,*)'Sequence max : ',tpg%NSEQMAX
661 WRITE(nlisting,*)''
662 WRITE(nlisting,*)'MEANDERING RATIO FIXED TO ',xratmed
663 WRITE(nlisting,*)'CELL LENGTH MIN, MAX (km): ',minval(tpg%XLEN/1.e3, tpg%GMASK), &
664  maxval(tpg%XLEN/1.e3, tpg%GMASK)
665 
666 WRITE(nlisting,*)'CELL AREA MIN, MAX (km²): ',minval(tpg%XAREA/1.e6,tpg%GMASK), &
667  maxval(tpg%XAREA/1.e6,tpg%GMASK)
668 WRITE(nlisting,*)''
669 IF(cgroundw=='CST')THEN
670  WRITE(nlisting,*)''
671  WRITE(nlisting,*)'Ground transf. time MIN, MAX : ',minval(tp%XTAUG/xday,tpg%GMASK_GW), &
672  maxval(tp%XTAUG/xday,tpg%GMASK_GW)
673 ELSEIF(cgroundw=='DIF')THEN
674  WRITE(nlisting,*)''
675  WRITE(nlisting,*)'Ground transf. time MIN, MAX : ',minval(tp%XTAUG/xday,tpg%GMASK_GW), &
676  maxval(tp%XTAUG/xday,tpg%GMASK_GW)
677  WRITE(nlisting,*)'Effective porosity MIN, MAX : ',minval(tp%XWEFF, tpg%GMASK_GW), &
678  maxval(tp%XWEFF, tpg%GMASK_GW)
679  WRITE(nlisting,*)'Transmissivity MIN, MAX : ',minval(tp%XTRANS, tpg%GMASK_GW), &
680  maxval(tp%XTRANS, tpg%GMASK_GW)
681 ENDIF
682 IF(cvit == 'VAR')THEN
683  WRITE(nlisting,*)'WIDTH_RIVER MIN, MAX : ',minval(tp%XWIDTH, tpg%GMASK_VEL), &
684  maxval(tp%XWIDTH, tpg%GMASK_VEL)
685  WRITE(nlisting,*)'N MANNING COEF MIN, MAX : ',minval(tp%XN, tpg%GMASK_VEL), &
686  maxval(tp%XN, tpg%GMASK_VEL)
687  WRITE(nlisting,*)'RIVER SLOPE MIN, MAX : ',minval(tp%XSLOPEBED,tpg%GMASK_VEL), &
688  maxval(tp%XSLOPEBED,tpg%GMASK_VEL)
689  WRITE(nlisting,*)''
690  WRITE(nlisting,*)'Initial river height : ',minval(zhstream, tpg%GMASK_VEL), &
691  maxval(zhstream, tpg%GMASK_VEL)
692 ENDIF
693 WRITE(nlisting,*)''
694 WRITE(nlisting,*)'Initial river storage : ',minval(tp%XSURF_STO/tpg%XAREA, tpg%GMASK), &
695  maxval(tp%XSURF_STO/tpg%XAREA, tpg%GMASK)
696 IF(cgroundw=='CST')THEN
697  WRITE(nlisting,*)''
698  WRITE(nlisting,*)'Initial ground storage : ',minval(tp%XGROUND_STO/tpg%XAREA,tpg%GMASK_GW), &
699  maxval(tp%XGROUND_STO/tpg%XAREA,tpg%GMASK_GW)
700 ELSEIF(cgroundw=='DIF')THEN
701  WRITE(nlisting,*)''
702  WRITE(nlisting,*)'Initial gw elevation : ',minval(tp%XHGROUND,tpg%GMASK_GW), &
703  maxval(tp%XHGROUND,tpg%GMASK_GW)
704  WRITE(nlisting,*)'Initial water table depth : ',minval(zwtd, tpg%GMASK_GW), &
705  maxval(zwtd, tpg%GMASK_GW)
706  WRITE(nlisting,*)'Initial gw storage : ',minval(zgw_sto,tpg%GMASK_GW), &
707  maxval(zgw_sto,tpg%GMASK_GW)
708 ENDIF
709 WRITE(nlisting,*)''
710 
711 IF(lflood)THEN
712  WRITE(nlisting,*)'N FLOOD FIXED TO ',minval(tp%XN_FLOOD,tpg%GMASK_FLD)
713  WRITE(nlisting,*)'RIVER DEPTH MIN, MAX : ',minval(tp%XHC_BED, tpg%GMASK_FLD), &
714  maxval(tp%XHC_BED, tpg%GMASK_FLD)
715  WRITE(nlisting,*)''
716  WRITE(nlisting,*)'Number of potential flood cell : ',iwork,'on',ini
717  WRITE(nlisting,*)' % ',100.0*(float(iwork)/float(ini))
718  WRITE(nlisting,*)'Number of actual flood cell : ',iflood,'on',iwork
719  WRITE(nlisting,*)' % ',100.0*(float(iflood)/float(iwork))
720  WRITE(nlisting,*)'% of flooded area in the domain :',100.0*sum(tp%XFFLOOD*tpg%XAREA)/sum(tpg%XAREA)
721  WRITE(nlisting,*)''
722  WRITE(nlisting,*)'Initial flood depth (m) : ',minval(tp%XHFLOOD, tpg%GMASK_FLD), &
723  maxval(tp%XHFLOOD, tpg%GMASK_FLD)
724  WRITE(nlisting,*)'Initial flood fraction : ',minval(tp%XFFLOOD, tpg%GMASK_FLD), &
725  maxval(tp%XFFLOOD, tpg%GMASK_FLD)
726  WRITE(nlisting,*)'Initial flood volume m3/1E9 : ',minval(tp%XFLOOD_STO/(xrholw*1.e9),tpg%GMASK_FLD), &
727  maxval(tp%XFLOOD_STO/(xrholw*1.e9),tpg%GMASK_FLD)
728  WRITE(nlisting,*)'Initial flood length (km): ',minval(tp%XFLOOD_LEN/1.e3, tpg%GMASK_FLD), &
729  maxval(tp%XFLOOD_LEN/1.e3, tpg%GMASK_FLD)
730  WRITE(nlisting,*)'Initial flood WIDTH (km) : ',minval(tp%XWFLOOD/1.e3, tpg%GMASK_FLD), &
731  maxval(tp%XWFLOOD/1.e3, tpg%GMASK_FLD)
732  WRITE(nlisting,*)''
733 ENDIF
734 !
735 DEALLOCATE(zvel)
736 DEALLOCATE(zhstream)
737 DEALLOCATE(zgw_sto)
738 DEALLOCATE(zwtd)
739 !
740 !-------------------------------------------------------------------------------
741 ! * Alloc diag diag
742 !-------------------------------------------------------------------------------
743 !
744  CALL alloc_trip_diag (tpdg,klon,klat)
745 !
746 !-------------------------------------------------------------------------------
747 ! * Create high diag files
748 !-------------------------------------------------------------------------------
749 !
750 IF(.NOT.oxios)THEN
751  !
752  yfile = ydiag
753  ytitle = 'TRIP high frequency outputs'
754  CALL output_date(yunittime,xtime_diag)
755  !
756  CALL init_trip_diag(tpdg, tpg, &
757  nlisting,yfile,klon,klat,ytitle,yunittime,.true.)
758  !
759  !-------------------------------------------------------------------------------
760  ! * Create run mean diag file
761  !-------------------------------------------------------------------------------
762  !
763  yfile = yrun
764  ytitle = 'TRIP run mean outputs'
765  WRITE(ytime,'(i4.4,i2.2)') kyear, kmonth
766  yunittime = 'months since '//ytime(1:4)//'-'//ytime(5:len_trim(ytime))//'-15'
767  CALL init_trip_diag(tpdg, tpg, &
768  nlisting,yfile,klon,klat,ytitle,yunittime,.true.)
769 !
770 ENDIF
771 !
772 !-------------------------------------------------------------------------------
773 ! * Create restart file
774 !-------------------------------------------------------------------------------
775 !
776 IF(orestart)THEN
777  ytitle ='TRIP restart variables'
778  yunittime='-'
779  CALL init_restart_trip(tpg, &
780  nlisting,yfile_restart,klon,klat,ytitle,yunittime,.false.)
781 ENDIF
782 !
783 IF (lhook) CALL dr_hook('INIT_TRIP',1,zhook_handle)
784 !
785 !-------------------------------------------------------------------------------
786 ! * CONTAINS
787 !-------------------------------------------------------------------------------
788 !
789  CONTAINS
790 !
791 SUBROUTINE output_date(HTIMEUNIT,PTIME_DIAG)
792 !
793 IMPLICIT NONE
794 !
795  CHARACTER(LEN=*), INTENT(OUT) :: HTIMEUNIT
796 REAL, INTENT(OUT) :: PTIME_DIAG
797 !
798 INTEGER, DIMENSION(3) :: ITIME, IDATE
799 INTEGER :: INDAYS
800 INTEGER :: ISEC
801 !
802 REAL(KIND=JPRB) :: ZHOOK_HANDLE
803 !
804 IF (lhook) CALL dr_hook('INIT_TRIP:OUTPUT_DATE',0,zhook_handle)
805 !
806 IF (ptstep_diag == floor(ptstep_diag/86400.)*86400) THEN
807  htimeunit ='days since '
808  ptime_diag=86400.
809 ELSEIF (ptstep_diag == floor(ptstep_diag/3600.)*3600) THEN
810  htimeunit ='hours since '
811  ptime_diag=3600.
812 ELSEIF (ptstep_diag == floor(ptstep_diag/60.)*60) THEN
813  htimeunit ='minutes since '
814  ptime_diag=60.
815 ELSE
816  htimeunit ='seconds since '
817  ptime_diag=1.
818 ENDIF
819 !
820 idate(1) = kyear
821 idate(2) = kmonth
822 idate(3) = kday
823 !
824 isec=ptime
825 itime(1)=floor(isec/3600.)
826 itime(2)=floor((isec-itime(1)*3600)/60.)
827 itime(3)=isec-itime(1)*3600-itime(2)*60
828 !
829  CALL write_time(idate(1),1,"-",htimeunit)
830  CALL write_time(idate(2),0,"-",htimeunit)
831  CALL write_time(idate(3),0,"",htimeunit)
832  CALL write_time(itime(1),1,":",htimeunit)
833  CALL write_time(itime(2),0,":",htimeunit)
834  CALL write_time(itime(3),0,"",htimeunit)
835 !
836 IF (lhook) CALL dr_hook('INIT_TRIP:OUTPUT_DATE',1,zhook_handle)
837 !
838 END SUBROUTINE output_date
839 !
840 SUBROUTINE write_time(ITIME,ISPACE,HSEP,HTDATE)
841 !
842 INTEGER, INTENT(IN) :: ITIME
843 INTEGER, INTENT(IN) :: ISPACE
844  CHARACTER(LEN=*), INTENT(IN) :: HSEP
845  CHARACTER(LEN=*), INTENT(INOUT) :: HTDATE
846  CHARACTER(LEN=10) :: YPAS
847 REAL(KIND=JPRB) :: ZHOOK_HANDLE
848 !
849 IF (lhook) CALL dr_hook('INIT_TRIP:WRITE_TIME',0,zhook_handle)
850 IF (itime.LT.10) THEN
851  WRITE(ypas,'(i1)') itime
852  IF (ispace==1) THEN
853  htdate=trim(htdate)//" 0"//trim(ypas)//hsep
854  ELSE
855  htdate=trim(htdate)//"0"//trim(ypas)//hsep
856  ENDIF
857 ELSE
858  IF (itime.LT.100) THEN
859  WRITE(ypas,'(i2)') itime
860  ELSE
861  WRITE(ypas,'(i4)') itime
862  ENDIF
863  IF (ispace==1) THEN
864  htdate=trim(htdate)//" "//trim(ypas)//hsep
865  ELSE
866  htdate=trim(htdate)//trim(ypas)//hsep
867  ENDIF
868 ENDIF
869 IF (lhook) CALL dr_hook('INIT_TRIP:WRITE_TIME',1,zhook_handle)
870 !
871 END SUBROUTINE write_time
872 !
873 !-------------------------------------------------------------------------------
874 ! * END
875 !-------------------------------------------------------------------------------
876 END SUBROUTINE init_trip
877 
878 
879 
880 
881 
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
logical lflood
Definition: modn_trip.F90:62
subroutine init_trip_diag(TPDG, TPG, KLISTING, HFILE, KLON, KLAT, HTITLE, HTIMEU
subroutine init_trip_cpl_esm(TP, TPG, KLON, KLAT)
subroutine write_time(ITIME, ISPACE, HSEP, HTDATE)
Definition: get_date_ol.F90:86
real, save xday
subroutine setnext(KLON, KLAT, KGRCN, KNEXTX, KNEXTY, GMLON, GMLAT)
real xcvel
Definition: modn_trip.F90:45
subroutine trip_hs_vel(PTSTEP, OMASK_VEL, PLEN, PWIDTH, PSLOPEBED, PN, PSURF_STO, PHS, PVEL)
Definition: trip_hs_vel.F90:3
subroutine init_restart_trip(TPG, KLISTING, HFILE, KLON, KLAT, HTITLE, HTI
subroutine get_trip_grid(PTRIP_GRID, PLONMIN, PLONMAX, PLATMIN, PLATMAX, PRES, KLON, KLAT, PLON, PLAT)
real, save xrholw
real xtstep
Definition: modn_trip.F90:67
subroutine output_date(HTIMEUNIT, PTIME_DIAG)
Definition: init_trip.F90:792
integer, parameter jprb
Definition: parkind1.F90:32
subroutine init_trip(TPDG, TP, TPG, KYEAR, KMONTH, KDAY, PTIME, KLON, KLAT, PTSTEP_RUN, PTSTEP_DIAG, ORESTART, OXIOS)
Definition: init_trip.F90:5
real, save xgwdzmax
real xgwsubd
Definition: modn_trip.F90:57
character(len=3) cvit
Definition: modn_trip.F90:41
real, save xtime_diag
logical lgwsubf
Definition: modn_trip.F90:54
character(len=3) cgroundw
Definition: modn_trip.F90:49
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
logical lhook
Definition: yomhook.F90:15
subroutine alloc_trip_diag(TPDG, KLON, KLAT)
integer, save ndimtab
subroutine abort_trip(YTEXT)
Definition: abort_trip.F90:3
real xratmed
Definition: modn_trip.F90:66
subroutine get_lonlat_trip(TPG, KLON, KLAT, PLON, PLAT)
real, save xundef
static int count
Definition: memory_hook.c:21