SURFEX v8.1
General documentation of Surfex
trip_interface.F90
Go to the documentation of this file.
1 !#################################################################
2 SUBROUTINE trip_interface (TPDG, TP, TPG, &
3  KLISTING,KLON,KLAT,PTIME,PTIMEC, &
4  OPRINT,KNB_TSTEP_RUN,KNB_TSTEP_DIAG,&
5  PTSTEP_RUN,PTSTEP_DIAG,PRUNOFF, &
6  PDRAIN,PCALVING,PSRC_FLOOD,OXIOS )
7 !#################################################################
8 !
9 !!**** *TRIP*
10 !!
11 !! PURPOSE
12 !! -------
13 !
14 ! Driver for the TRIP river routing.
15 ! Here, we call the physical and the diag routines
16 !
17 !!
18 !! REFERENCE
19 !! ---------
20 !!
21 !! AUTHOR
22 !! ------
23 !! B. Decharme
24 !!
25 !! MODIFICATIONS
26 !! -------------
27 !! Original 01/02/05
28 !! Modif. 28/05/08
29 !! B. Decharme 10/2016 bug surface/groundwater coupling
30 !! S.Sénési 08/11/16 : interface to XIOS
31 !-------------------------------------------------------------------------------
32 !
33 !* 0. DECLARATIONS
34 ! ------------
35 !
36 !
37 !
38 USE modd_trip_diag, ONLY : trip_diag_t
39 USE modd_trip, ONLY : trip_t
40 USE modd_trip_grid, ONLY : trip_grid_t
41 !
43 !
44 USE modn_trip, ONLY : cgroundw, lflood, xtstep
45 !
46 USE modd_trip_par, ONLY : xrholw, xundef
47 !
48 USE yomhook ,ONLY : lhook, dr_hook
49 USE parkind1 ,ONLY : jprb
50 !
51 USE modi_trip_hs_vel
52 USE modi_trip
53 USE modi_trip_diag_init
54 USE modi_trip_diag
55 USE modi_trip_diag_write
56 USE modi_trip_diag_cpl_esm
57 !
58 USE modi_gwf
59 USE modi_gwf_cpl_update
60 !
61 USE modi_abort_trip
62 !
63 USE modi_gwf
64 !
65 IMPLICIT NONE
66 !
67 !* 0.1 declarations of arguments
68 !
69 !
70 !
71 TYPE(trip_diag_t), INTENT(INOUT) :: TPDG
72 TYPE(trip_t), INTENT(INOUT) :: TP
73 TYPE(trip_grid_t), INTENT(INOUT) :: TPG
74 !
75 INTEGER, INTENT(IN) :: KLISTING !Output file id
76 INTEGER, INTENT(IN) :: KLON !Number of longitude
77 INTEGER, INTENT(IN) :: KLAT !Number of latittude
78 REAL, INTENT(INOUT) :: PTIME !Current time (s)
79 REAL, INTENT(INOUT) :: PTIMEC !Cumulated time (s)
80 LOGICAL, INTENT(IN) :: OPRINT !print option [-]
81 INTEGER, INTENT(IN) :: KNB_TSTEP_RUN !TSTEP_RUN counter [-]
82 REAL, INTENT(IN) :: PTSTEP_RUN !Run timestep [s]
83 REAL, INTENT(IN) :: PTSTEP_DIAG !Diag timestep [s]
84 INTEGER, INTENT(INOUT) :: KNB_TSTEP_DIAG !DIAG call counter [-]
85 LOGICAL, INTENT(IN) :: OXIOS !Do we use XIOS
86 !
87 REAL, DIMENSION(:,:), INTENT(IN) :: PRUNOFF !Input surface runoff [kg/s]
88 REAL, DIMENSION(:,:), INTENT(IN) :: PDRAIN !Input free drainage [kg/s]
89 REAL, DIMENSION(:,:), INTENT(IN) :: PCALVING !Input claving flux from glacier [kg/s]
90 REAL, DIMENSION(:,:), INTENT(IN) :: PSRC_FLOOD! Input P-E-I flood source term [kg/s]
91 !
92 !* 0.2 declarations of local variables
93 !
94 REAL, DIMENSION(KLON,KLAT) :: ZRUNOFF !Input surface runoff [kg/s]
95 REAL, DIMENSION(KLON,KLAT) :: ZDRAIN !Input drainage + recharge [kg/s]
96 REAL, DIMENSION(KLON,KLAT) :: ZSRC_FLOOD !Input P-E-I flood source term [kg/s]
97 !
98 REAL, DIMENSION(KLON,KLAT) :: ZSOUT !streamflow [kg/s]
99 REAL, DIMENSION(KLON,KLAT) :: ZSIN !grid-cell input streamflow [kg/s]
100 REAL, DIMENSION(KLON,KLAT) :: ZVEL !river velocity [m/s]
101 REAL, DIMENSION(KLON,KLAT) :: ZHS !River heigh [m]
102 REAL, DIMENSION(KLON,KLAT) :: ZGOUT !Groundwater outflow [kg/s]
103 REAL, DIMENSION(KLON,KLAT) :: ZGNEG !Groundwater intflow (neg) [kg/s]
104 REAL, DIMENSION(KLON,KLAT) :: ZWTD !Water table depth for coupling[m]
105 REAL, DIMENSION(KLON,KLAT) :: ZFWTD !fraction of water table to rise
106 REAL, DIMENSION(KLON,KLAT) :: ZQGCELL !lateral groundwater exchanges [kg/s]
107 REAL, DIMENSION(KLON,KLAT) :: ZHGHS !groundwater minus river heigh [m]
108 REAL, DIMENSION(KLON,KLAT) :: ZQFR !floodplains to river exchange [kg/s]
109 REAL, DIMENSION(KLON,KLAT) :: ZQRF !river to floodplains exchange [kg/s]
110 REAL, DIMENSION(KLON,KLAT) :: ZVFIN !QRF velocity [m/s]
111 REAL, DIMENSION(KLON,KLAT) :: ZVFOUT !QFR velocity [m/s]
112 REAL, DIMENSION(KLON,KLAT) :: ZHSF !river minus flodd heigh [m]
113 REAL, DIMENSION(KLON,KLAT) :: ZDISCHARGE !river discharges [kg]
114 REAL, DIMENSION(KLON,KLAT) :: ZHG_OLD !Water table depth at t-1 [m]
115 !
116 REAL :: ZGSTO_ALL !Global groundwater storage at t [kg]
117 REAL :: ZGSTO2_ALL !Global groundwater storage at t-1 [kg]
118 REAL :: ZGIN_ALL !Global gw recharge + lateral input [kg/m2/s]
119 REAL :: ZGOUT_ALL !Global gw outflow [kg/m2/s]
120 !
121 LOGICAL :: GWRDIAG
122 !
123 INTEGER :: JTSTEP, ITSTEP
124 !
125 REAL(KIND=JPRB) :: ZHOOK_HANDLE
126 !
127 !-------------------------------------------------------------------------------
128 !
129 IF (lhook) CALL dr_hook('TRIP_INTERFACE',0,zhook_handle)
130 !
131 !-------------------------------------------------------------------------------
132 !
133 !* 0. Initialize local variables:
134 ! ---------------------------
135 !
136 zsout(:,:) = 0.0
137 zsin(:,:) = 0.0
138 zvel(:,:) = 0.0
139 zhs(:,:) = 0.0
140 zgout(:,:) = 0.0
141 zgneg(:,:) = 0.0
142 zwtd(:,:) = 0.0
143 zfwtd(:,:) = 0.0
144 zqgcell(:,:) = 0.0
145 zhghs(:,:) = 0.0
146 zqfr(:,:) = 0.0
147 zqrf(:,:) = 0.0
148 zvfin(:,:) = 0.0
149 zvfout(:,:) = 0.0
150 zhsf(:,:) = 0.0
151 zdischarge(:,:) = 0.0
152 zhg_old(:,:) = 0.0
153 !
154 !-------------------------------------------------------------------------------
155 !
156 zgsto_all = 0.0
157 zgsto2_all = 0.0
158 zgin_all = 0.0
159 zgout_all = 0.0
160 !
161 !-------------------------------------------------------------------------------
162 !
163 !Surface runoff treatment
164 !
165 zrunoff(:,:) = prunoff(:,:)
166 !
167 !Drainage and Calving treatment
168 !calving over greenland and antarctica directly to ocean
169 !
170 WHERE(tpg%GMASK(:,:).AND..NOT.tpg%GMASK_GRE(:,:).AND..NOT.tpg%GMASK_ANT(:,:))
171  zdrain(:,:) = pdrain(:,:)+pcalving(:,:)
172 ELSEWHERE
173  zdrain(:,:) = pdrain(:,:)
174 ENDWHERE
175 !
176 ! Flood treatment
177 !
178 IF(lflood)THEN
179  zsrc_flood(:,:) = psrc_flood(:,:)
180  WHERE(tp%XFFLOOD(:,:)==1.0.AND.zsrc_flood(:,:)>0.0)
181  zrunoff(:,:) = zrunoff(:,:) + psrc_flood(:,:)
182  zsrc_flood(:,:) = 0.0
183  ENDWHERE
184 ELSE
185  zsrc_flood(:,:) = 0.0
186 ENDIF
187 !
188 !-------------------------------------------------------------------------------
189 !
190 !* 1. Initialize local diag :
191 ! -----------------------
192 !
193  CALL trip_diag_init(zsout,zsin,zvel,zhs,zgout,zgneg,zhg_old, &
194  zwtd,zfwtd,zqgcell,zhghs, &
195  zqfr,zqrf,zvfin,zvfout,zhsf,zdischarge, &
196  zgsto_all,zgsto2_all,zgin_all,zgout_all )
197 !
198 !-------------------------------------------------------------------------------
199 !
200 !* 2. Initialize river height and velocity :
201 ! --------------------------------------
202 !
203  CALL trip_hs_vel(xtstep,tpg%GMASK_VEL,tpg%XLEN,tp%XWIDTH, &
204  tp%XSLOPEBED,tp%XN,tp%XSURF_STO,zhs,zvel )
205 !
206 !-------------------------------------------------------------------------------
207 !
208 !* 3. Call Groundwater dynamic :
209 ! --------------------------
210 !
211 IF(cgroundw=='DIF')THEN
212 !
213 ! * Groundwater actualization
214 !
215  CALL gwf(tpg, &
216  klon,klat,oprint,ptstep_run,xtstep, &
217  tpg%GMASK_GW,tp%XNUM_AQUI,zdrain, &
218  tpg%XLEN,tp%XWIDTH,tp%XHC_BED, &
219  tp%XTOPO_RIV,tp%XTAUG,tpg%XAREA, &
220  tp%XTRANS,tp%XWEFF,tp%XTABGW_F, &
221  tp%XTABGW_H,zhs,tp%XHGROUND,zhg_old, &
222  psurf_sto=tp%XSURF_STO,pqgcell=zqgcell, &
223  pwtd=zwtd,pfwtd=zfwtd,phghs=zhghs, &
224  pgout=zgout,pgneg=zgneg, &
225  pgsto_all=zgsto_all, &
226  pgsto2_all=zgsto2_all, &
227  pgin_all=zgin_all,pgout_all=zgout_all )
228 !
229 ! * Velocity actualization
230 !
231  CALL trip_hs_vel(xtstep,tpg%GMASK_VEL, &
232  tpg%XLEN,tp%XWIDTH, &
233  tp%XSLOPEBED,tp%XN, &
234  tp%XSURF_STO,zhs,zvel )
235 !
236 ENDIF
237 !
238 !-------------------------------------------------------------------------------
239 !
240 !* 4. Call Trip river routines and actualisation of diagnostic :
241 ! ----------------------------------------------------------
242 !
243 itstep = int(ptstep_run/xtstep)
244 !
245 DO jtstep=1,itstep !TRIP time step loop
246 !
247  CALL trip(klisting,cgroundw,lflood,oprint,xtstep, &
248  tpg%NGRCN,tpg%NSEQ,tpg%NNEXTX,tpg%NNEXTY, &
249  tpg%NSEQMAX,tpg%XAREA,tpg%XLEN, &
250  tpg%GMASK_GW,tpg%GMASK_VEL,tpg%GMASK_FLD, &
251  tp%XTAUG,tp%XFLOOD_LEN,tp%XSLOPEBED, &
252  tp%XWIDTH,tp%XN,tp%XN_FLOOD,tp%XHC_BED, &
253  tp%XWFLOOD,tp%XTAB_F,tp%XTAB_H, &
254  tp%XTAB_VF,zdrain,zrunoff,zsrc_flood,zhs,zvel,&
255  tp%XGROUND_STO,tp%XSURF_STO,tp%XFLOOD_STO, &
256  zsout,zgout,tp%XHFLOOD,tp%XFFLOOD, &
257  zqfr,zqrf,zvfin,zvfout,zhsf,zsin,knb_tstep_run, &
258  jtstep,itstep,zgsto_all,zgsto2_all,zgin_all,zgout_all,&
259  tp%XHGROUND,tp%XWEFF)
260 !
261 ! * Actualisation of diagnostic
262 !
263  IF(cgroundw=='DIF')THEN
264  CALL gwf_cpl_update(tp%XTABGW_H,tp%XTABGW_F,tpg%GMASK_GW,&
265  tp%XTOPO_RIV,tp%XHC_BED,tp%XHGROUND, &
266  zhg_old,zwtd,zfwtd )
267  ENDIF
268 !
269  CALL trip_diag(tpdg, tp, tpg, &
270  xtstep,zsout,zsin,zvel,zhs,zgout,zgneg, &
271  zwtd,zfwtd,zqgcell,zhghs, &
272  zqfr,zqrf,zvfin,zvfout,zhsf,zsrc_flood, &
273  zdrain,zrunoff,zdischarge )
274 !
275 ! * Velocity actualization
276 !
277  CALL trip_hs_vel(xtstep,tpg%GMASK_VEL, &
278  tpg%XLEN,tp%XWIDTH, &
279  tp%XSLOPEBED,tp%XN, &
280  tp%XSURF_STO,zhs,zvel )
281 !
282 ! * Time actualization
283 !
284  ptime = ptime + xtstep
285  ptimec = ptimec + xtstep
286 !
287 ! * Write diagnostic
288 !
289  gwrdiag = (lwr_diag.AND.mod(ptimec,ptstep_diag) == 0.)
290 !
291  IF (gwrdiag) THEN
292  knb_tstep_diag = knb_tstep_diag + 1
293  CALL trip_diag_write(tpdg, tpg, &
294  klisting,klon,klat,knb_tstep_diag,ptstep_diag,oxios)
295  ENDIF
296 !
297 ! * end
298 !
299  IF(oprint)WRITE(klisting,*)' '
300 !
301 ENDDO ! * End TRIP time step loop
302 !
303 !
304 !-------------------------------------------------------------------------------
305 !
306 !* 5. Actualisation of coupling diagnostic:
307 ! --------------------------------------
308 !
309  CALL trip_diag_cpl_esm(tp, tpg, &
310  ptstep_run,zdischarge,pcalving,zwtd,zfwtd)
311 !
312 IF (lhook) CALL dr_hook('TRIP_INTERFACE',1,zhook_handle)
313 !
314 !-------------------------------------------------------------------------------
315 !-------------------------------------------------------------------------------
316 !
317 END SUBROUTINE trip_interface
logical lflood
Definition: modn_trip.F90:62
subroutine trip_diag_init(PSOUT, PSIN, PVEL, PHS, PGOUT, PGNEG, PHG_OLD, PWTD, PFWTD, PQGCELL, PHGHS, PQFR, PQRF, PVFIN, PVFOUT, PHSF, PDISCHARGE, PGSTO_ALL, PGSTO2_ALL, PGIN_ALL, PGOUT_ALL)
subroutine trip_hs_vel(PTSTEP, OMASK_VEL, PLEN, PWIDTH, PSLOPEBED, PN, PSURF_STO, PHS, PVEL)
Definition: trip_hs_vel.F90:3
subroutine gwf_cpl_update(PTABGW_H, PTABGW_F, OMASK_GW, PTOPO_RIV, PHC_BED, PHGROUND, PHG_OLD, PWTD, PFWTD)
subroutine trip_diag_cpl_esm(TP, TPG, PTSTEP_RUN, PDISCHARGE, PCALVING, PWTD, PFWTD)
real, save xrholw
real xtstep
Definition: modn_trip.F90:67
subroutine gwf(TPG,
Definition: gwf.F90:3
integer, parameter jprb
Definition: parkind1.F90:32
subroutine trip_diag(TPDG, TP, TPG, PTSTEP, PSOUT, PSIN, PVEL, PHS, PGOUT, PGNEG, PWTD, PFWTD, PQGCELL, PHGHS, PQFR, PQRF, PVFIN, PVFOUT, PHSF, PSRC_FLOOD, PDRAIN, PRUNOFF, PDISCHARGE)
Definition: trip_diag.F90:6
character(len=3) cgroundw
Definition: modn_trip.F90:49
logical lhook
Definition: yomhook.F90:15
logical ldiag_misc
subroutine trip_diag_write(TPDG, TPG, KLISTING, KLON, KLAT, KDIAG, PTSTEP_DIAG, O
subroutine trip(KLISTING, HGROUNDW, OFLOOD, OPRINT, PTSTEP,
Definition: trip.F90:3
subroutine trip_interface(TPDG, TP, TPG, KLISTING, KLON, KLAT, PTIME, PTIMEC, OPRINT, KNB_TSTEP_RUN, KNB_TSTEP_DIAG, PTSTEP_RUN, PTSTEP_DIAG, PRUNOFF, PDRAIN, PCALVING, PSRC_FLOOD, OXIOS)
real, save xundef