SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
diag_cpl_esm_isba.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE diag_cpl_esm_isba (I, &
7  ptstep,pcpl_drain,pcpl_runoff,pcpl_eflood, &
8  pcpl_pflood,pcpl_iflood,pcpl_iceflux )
9 ! #####################################################################
10 !
11 !!**** *DIAG_CPL_ESM_ISBA*
12 !!
13 !! PURPOSE
14 !! -------
15 !
16 !
17 !!** METHOD
18 !! ------
19 !
20 !! EXTERNAL
21 !! --------
22 !!
23 !! none
24 !!
25 !! IMPLICIT ARGUMENTS
26 !! ------------------
27 !!
28 !!
29 !! REFERENCE
30 !! ---------
31 !!
32 !!
33 !! AUTHOR
34 !! ------
35 !!
36 !! B. Decharme * Meteo-France *
37 !!
38 !! MODIFICATIONS
39 !! -------------
40 !!
41 !! B. Decharme 01/16 : Bug with flood budget and add cpl keys
42 !-------------------------------------------------------------------------------
43 !
44 !* 0. DECLARATIONS
45 ! ------------
46 !
47 USE modd_isba_n, ONLY : isba_t
48 !
49 USE modn_sfx_oasis, ONLY : xtstep_cpl_land
50 !
51 USE modd_sfx_oasis, ONLY : lcpl_flood, lcpl_gw
52 !
53 USE yomhook ,ONLY : lhook, dr_hook
54 USE parkind1 ,ONLY : jprb
55 !
56 IMPLICIT NONE
57 !
58 !* 0.1 declarations of arguments
59 !
60 !
61 TYPE(isba_t), INTENT(INOUT) :: i
62 !
63 REAL, INTENT(IN) :: ptstep
64 REAL, DIMENSION(:,:), INTENT(IN) :: pcpl_drain
65 REAL, DIMENSION(:,:), INTENT(IN) :: pcpl_runoff
66 REAL, DIMENSION(:,:), INTENT(IN) :: pcpl_eflood
67 REAL, DIMENSION(:,:), INTENT(IN) :: pcpl_pflood
68 REAL, DIMENSION(:,:), INTENT(IN) :: pcpl_iflood
69 REAL, DIMENSION(:,:), INTENT(IN) :: pcpl_iceflux
70 !
71 !* 0.2 declarations of local variables
72 !
73 REAL, DIMENSION(SIZE(PCPL_DRAIN,1),SIZE(PCPL_DRAIN,2)) :: zcpl_drain
74 REAL, DIMENSION(SIZE(PCPL_DRAIN,1),SIZE(PCPL_DRAIN,2)) :: zcpl_recharge
75 !
76 REAL, DIMENSION(SIZE(I%XPATCH,1)) :: zsumpatch
77 REAL, DIMENSION(SIZE(I%XPATCH,1)) :: zbudget
78 !
79 INTEGER :: ini,inp
80 INTEGER :: ji, jpatch ! tile loop counter
81 !
82 REAL(KIND=JPRB) :: zhook_handle
83 !
84 !-------------------------------------------------------------------------------
85 !
86 IF (lhook) CALL dr_hook('DIAG_CPL_ESM_ISBA',0,zhook_handle)
87 !
88 !* Initialization
89 ! --------------
90 !
91 ini=SIZE(i%XPATCH,1)
92 inp=SIZE(i%XPATCH,2)
93 !
94 zsumpatch(:) = 0.0
95 DO jpatch=1,inp
96  DO ji=1,ini
97  zsumpatch(ji) = zsumpatch(ji) + i%XPATCH(ji,jpatch)
98  ENDDO
99 ENDDO
100 !
101 zcpl_recharge(:,:) = 0.0
102 !
103 IF(i%CISBA/='DIF')THEN
104 ! prevent small negatives values with ISBA-FR
105  zcpl_drain(:,:)=max(0.0,pcpl_drain(:,:))
106 ELSE
107  zcpl_drain(:,:)=pcpl_drain(:,:)
108 ENDIF
109 !
110 !* groundwater case
111 ! ----------------
112 !
113 IF(lcpl_gw.AND.i%LWTD)THEN
114  DO jpatch=1,inp
115  DO ji=1,ini
116  IF(i%XGW(ji)>0.0.AND.zsumpatch(ji)>0.0)THEN
117  zcpl_recharge(ji,jpatch) = pcpl_drain(ji,jpatch)
118  zcpl_drain(ji,jpatch) = 0.0
119  ENDIF
120  ENDDO
121  ENDDO
122 ENDIF
123 !
124 !* update ISBA - RRM coupling variable (kg/m2)
125 ! -------------------------------------------
126 !
127 !kg/m²
128 DO jpatch=1,inp
129  DO ji=1,ini
130 !
131  IF(zsumpatch(ji)>0.0)THEN
132  i%XCPL_DRAIN (ji) = i%XCPL_DRAIN (ji) + ptstep * zcpl_drain(ji,jpatch) * i%XPATCH(ji,jpatch)/zsumpatch(ji)
133  i%XCPL_RUNOFF(ji) = i%XCPL_RUNOFF(ji) + ptstep * pcpl_runoff(ji,jpatch) * i%XPATCH(ji,jpatch)/zsumpatch(ji)
134  ENDIF
135 !
136  IF(i%LGLACIER.AND.zsumpatch(ji)>0.0)THEN
137  i%XCPL_ICEFLUX(ji) = i%XCPL_ICEFLUX(ji) + ptstep * pcpl_iceflux(ji,jpatch) * i%XPATCH(ji,jpatch)/zsumpatch(ji)
138  ENDIF
139 !
140  IF(lcpl_gw.AND.i%LWTD.AND.zsumpatch(ji)>0.0)THEN
141  i%XCPL_RECHARGE(ji) = i%XCPL_RECHARGE(ji) + ptstep * zcpl_recharge(ji,jpatch) * i%XPATCH(ji,jpatch)/zsumpatch(ji)
142  ENDIF
143 !
144  IF(lcpl_flood.AND.i%LFLOOD.AND.zsumpatch(ji)>0.0)THEN
145  i%XCPL_EFLOOD (ji) = i%XCPL_EFLOOD (ji) + ptstep * pcpl_eflood(ji,jpatch)*i%XPATCH(ji,jpatch)/zsumpatch(ji)
146  i%XCPL_PFLOOD (ji) = i%XCPL_PFLOOD (ji) + ptstep * pcpl_pflood(ji,jpatch)*i%XPATCH(ji,jpatch)/zsumpatch(ji)
147  i%XCPL_IFLOOD (ji) = i%XCPL_IFLOOD (ji) + ptstep * pcpl_iflood(ji,jpatch)*i%XPATCH(ji,jpatch)/zsumpatch(ji)
148  ENDIF
149 !
150  ENDDO
151 ENDDO
152 !
153 !* update ISBA Floodplains variable for mass conservation (kg/m2)
154 ! --------------------------------------------------------------
155 !
156 IF(lcpl_flood.AND.i%LFLOOD)THEN
157  zbudget(:)=(i%XPIFLOOD(:)*xtstep_cpl_land)+i%XCPL_PFLOOD(:)-i%XCPL_IFLOOD(:)-i%XCPL_EFLOOD(:)
158  WHERE(zbudget(:)<=0.0)
159  i%XPIFLOOD(:)=0.0
160  i%XFFLOOD (:)=0.0
161  ENDWHERE
162 ENDIF
163 !
164 IF (lhook) CALL dr_hook('DIAG_CPL_ESM_ISBA',1,zhook_handle)
165 !
166 END SUBROUTINE diag_cpl_esm_isba
subroutine diag_cpl_esm_isba(I, PTSTEP, PCPL_DRAIN, PCPL_RUNOFF, PCPL_EFLOOD, PCPL_PFLOOD, PCPL_IFLOOD, PCPL_ICEFLUX)