SURFEX v8.1
General documentation of Surfex
trip_diag.F90
Go to the documentation of this file.
1 SUBROUTINE trip_diag(TPDG, TP, TPG, &
2  PTSTEP,PSOUT,PSIN,PVEL,PHS,PGOUT,PGNEG, &
3  PWTD,PFWTD,PQGCELL,PHGHS, &
4  PQFR,PQRF,PVFIN,PVFOUT,PHSF,PSRC_FLOOD, &
5  PDRAIN,PRUNOFF,PDISCHARGE )
6 ! #####################################################
7 !
8 !!**** *TRIP_DIAG*
9 !!
10 !! PURPOSE
11 !! -------
12 !
13 ! TRIP diag compuation
14 !
15 !!
16 !! AUTHOR
17 !! ------
18 !! B. Decharme
19 !!
20 !! MODIFICATIONS
21 !! -------------
22 !! Original 12/12/13
23 !! 09/16 B. Decharme limit wtd to -1000m
24 !-------------------------------------------------------------------------------
25 !
26 !* 0. DECLARATIONS
27 ! ------------
28 !
29 !
30 USE modd_trip_diag, ONLY : trip_diag_t
31 USE modd_trip, ONLY : trip_t
32 USE modd_trip_grid, ONLY : trip_grid_t
33 !
34 USE modn_trip_run, ONLY : ldiag_misc
35 USE modd_trip_oasis, ONLY : lcpl_land
36 !
37 USE modn_trip, ONLY : cgroundw, cvit, lflood
38 !
39 USE modd_trip_par, ONLY : xrholw, xgwdzmax
40 !
41 !
42 USE yomhook ,ONLY : lhook, dr_hook
43 USE parkind1 ,ONLY : jprb
44 !
45 IMPLICIT NONE
46 !
47 !* 0.1 declarations of arguments
48 !
49 !
50 TYPE(trip_diag_t), INTENT(INOUT) :: TPDG
51 TYPE(trip_t), INTENT(INOUT) :: TP
52 TYPE(trip_grid_t), INTENT(INOUT) :: TPG
53 !
54 REAL, INTENT(IN) :: PTSTEP !Time step [s]
55 !
56 REAL, DIMENSION(:,:), INTENT(IN) :: PSOUT !streamflow [kg/s]
57 REAL, DIMENSION(:,:), INTENT(IN) :: PSIN !grid-cell input streamflow [kg/s]
58 REAL, DIMENSION(:,:), INTENT(IN) :: PVEL !river velocity [m/s]
59 REAL, DIMENSION(:,:), INTENT(IN) :: PHS !River heigh [m]
60 REAL, DIMENSION(:,:), INTENT(IN) :: PGOUT !Groundwater outflow [kg/s]
61 REAL, DIMENSION(:,:), INTENT(IN) :: PGNEG !Groundwater intflow (neg) [kg/s]
62 REAL, DIMENSION(:,:), INTENT(IN) :: PWTD !Water table depth for coupling[m]
63 REAL, DIMENSION(:,:), INTENT(IN) :: PFWTD !Fraction of water table to rise
64 REAL, DIMENSION(:,:), INTENT(IN) :: PQGCELL !lateral groundwater exchanges [kg/s]
65 REAL, DIMENSION(:,:), INTENT(IN) :: PHGHS !groundwater minus river heigh [m]
66 REAL, DIMENSION(:,:), INTENT(IN) :: PQFR !floodplains to river exchange [kg/s]
67 REAL, DIMENSION(:,:), INTENT(IN) :: PQRF !river to floodplains exchange [kg/s]
68 REAL, DIMENSION(:,:), INTENT(IN) :: PVFIN !QRF velocity [m/s]
69 REAL, DIMENSION(:,:), INTENT(IN) :: PVFOUT !QFR velocity [m/s]
70 REAL, DIMENSION(:,:), INTENT(IN) :: PHSF !river minus flodd heigh [m]
71 REAL, DIMENSION(:,:), INTENT(IN) :: PSRC_FLOOD !P-E-I flood source term [kg/s]
72 REAL, DIMENSION(:,:), INTENT(IN) :: PDRAIN !Input drainage or recharge [kg/s]
73 REAL, DIMENSION(:,:), INTENT(IN) :: PRUNOFF !Input surface runoff [kg/s]
74 !
75 REAL, DIMENSION(:,:), INTENT(OUT) :: PDISCHARGE !Cumulated river discharges [kg]
76 !
77 !* 0.2 declarations of local variables
78 !
79 REAL, DIMENSION(SIZE(PSOUT,1),SIZE(PSOUT,2)) :: ZGROUND_STO
80 !
81 REAL(KIND=JPRB) :: ZHOOK_HANDLE
82 !
83 !-------------------------------------------------------------------------------
84 !
85 IF (lhook) CALL dr_hook('TRIP_DIAG',0,zhook_handle)
86 !
87 ! * Actualisation of river discharge diags
88 !
89 pdischarge(:,:) = pdischarge(:,:) + psout(:,:) * ptstep ![kg]
90 tpdg%TDIAG%XQDIS(:,:) = tpdg%TDIAG%XQDIS(:,:) + psout(:,:) * ptstep / xrholw ![m3]
91 !
92 ! * Actualisation of input total flux in the river
93 !
94 IF(ldiag_misc)THEN
95  tpdg%TDIAG%XQIN(:,:) = tpdg%TDIAG%XQIN (:,:) + psin(:,:) * ptstep / xrholw
96 ENDIF
97 !
98 ! * Actualisation of input surface runoff and drainage (or recharge)
99 !
100 IF(lcpl_land.AND.ldiag_misc)THEN
101  tpdg%TDIAG%XRUNOFF(:,:) = tpdg%TDIAG%XRUNOFF(:,:) + prunoff(:,:) * ptstep / tpg%XAREA(:,:)
102  tpdg%TDIAG%XDRAIN (:,:) = tpdg%TDIAG%XDRAIN (:,:) + pdrain(:,:) * ptstep / tpg%XAREA(:,:)
103 ENDIF
104 !
105 ! * Actualisation of stream reservoir
106 !
107 tpdg%TDIAG%XSURF_STO(:,:) = tpdg%TDIAG%XSURF_STO(:,:) + tp%XSURF_STO(:,:) * ptstep / tpg%XAREA(:,:)
108 !
109 ! * Actualisation of variable velocity diagnostic variables
110 !
111 IF(cvit=='VAR')THEN
112  tpdg%TDIAG%XVEL(:,:) = tpdg%TDIAG%XVEL(:,:) + pvel(:,:) * ptstep
113  tpdg%TDIAG%XHS (:,:) = tpdg%TDIAG%XHS (:,:) + phs(:,:) * ptstep
114 ENDIF
115 !
116 ! * Actualisation of groundwater diagnostic variables
117 !
118 IF(cgroundw/='DEF')THEN
119  tpdg%TDIAG%XQGF(:,:) = tpdg%TDIAG%XQGF(:,:) + (pgout(:,:)+pgneg(:,:)) * ptstep / xrholw
120 ENDIF
121 !
122 IF(cgroundw=='CST')THEN
123 !
124  tpdg%TDIAG%XGROUND_STO(:,:) = tpdg%TDIAG%XGROUND_STO(:,:) + tp%XGROUND_STO(:,:) * ptstep / tpg%XAREA(:,:)
125 !
126 ELSEIF(cgroundw=='DIF')THEN
127 !
128  zground_sto(:,:) = (xgwdzmax+pwtd(:,:)) * tp%XWEFF(:,:) * xrholw
129 !
130  tpdg%TDIAG%XGROUND_STO(:,:) = tpdg%TDIAG%XGROUND_STO(:,:) + zground_sto(:,:) * ptstep
131  tpdg%TDIAG%XHGROUND (:,:) = tpdg%TDIAG%XHGROUND (:,:) + tp%XHGROUND (:,:) * ptstep
132  tpdg%TDIAG%XWTD (:,:) = tpdg%TDIAG%XWTD (:,:) + pwtd(:,:) * ptstep
133  tpdg%TDIAG%XFWTD (:,:) = tpdg%TDIAG%XFWTD (:,:) + pfwtd(:,:) * ptstep
134  IF(ldiag_misc)THEN
135  tpdg%TDIAG%XQGCELL (:,:) = tpdg%TDIAG%XQGCELL (:,:) + pqgcell(:,:) * ptstep / xrholw
136  tpdg%TDIAG%XHGHS (:,:) = tpdg%TDIAG%XHGHS (:,:) + phghs(:,:) * ptstep
137  ENDIF
138 !
139 ENDIF
140 !
141 ! * Actualisation of flooding scheme diagnostic variables
142 !
143 IF(lflood)THEN
144  tpdg%TDIAG%XFLOOD_STO(:,:) = tpdg%TDIAG%XFLOOD_STO(:,:) + tp%XFLOOD_STO(:,:) * ptstep / tpg%XAREA(:,:)
145  tpdg%TDIAG%XFF (:,:) = tpdg%TDIAG%XFF (:,:) + tp%XFFLOOD (:,:) * ptstep
146  tpdg%TDIAG%XHF (:,:) = tpdg%TDIAG%XHF (:,:) + tp%XHFLOOD (:,:) * ptstep
147  IF(ldiag_misc)THEN
148  tpdg%TDIAG%XQFR (:,:) = tpdg%TDIAG%XQFR (:,:) + pqfr(:,:) * ptstep / xrholw
149  tpdg%TDIAG%XQRF (:,:) = tpdg%TDIAG%XQRF (:,:) + pqrf(:,:) * ptstep / xrholw
150  tpdg%TDIAG%XVFIN (:,:) = tpdg%TDIAG%XVFIN (:,:) + pvfin(:,:) * ptstep
151  tpdg%TDIAG%XVFOUT (:,:) = tpdg%TDIAG%XVFOUT (:,:) + pvfout(:,:) * ptstep
152  tpdg%TDIAG%XWF (:,:) = tpdg%TDIAG%XWF (:,:) + tp%XWFLOOD (:,:) * ptstep
153  tpdg%TDIAG%XLF (:,:) = tpdg%TDIAG%XLF (:,:) + tp%XFLOOD_LEN (:,:) * ptstep
154  tpdg%TDIAG%XHSF (:,:) = tpdg%TDIAG%XHSF (:,:) + phsf(:,:) * ptstep
155  tpdg%TDIAG%XSOURCE(:,:) = tpdg%TDIAG%XSOURCE(:,:) + psrc_flood(:,:) * ptstep / tpg%XAREA(:,:)
156  ENDIF
157 ENDIF
158 !
159 IF (lhook) CALL dr_hook('TRIP_DIAG',1,zhook_handle)
160 !
161 !-------------------------------------------------------------------------------
162 END SUBROUTINE trip_diag
logical lflood
Definition: modn_trip.F90:62
real, save xrholw
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
real, save xgwdzmax
character(len=3) cvit
Definition: modn_trip.F90:41
character(len=3) cgroundw
Definition: modn_trip.F90:49
logical lhook
Definition: yomhook.F90:15
logical ldiag_misc