SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
isba_budget.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 isba_budget (DGEI, &
7  hisba, hsnow_isba, oglacier, ptstep, &
8  pwg, pwgi, pwr, psnowswe, pdg, pdzg, &
9  pwg_ini, pwgi_ini, pwr_ini, pswe_ini, &
10  prain, psnow, pevap, pdrain, prunoff, &
11  piflood, ppflood, ple_flood, plei_flood,&
12  piceflux, pirrig_flux, psndrift, &
13  plvtt, plstt, &
14  pdwg, pdwgi, pdwr, pdswe, pwatbud )
15 ! ###############################################################################
16 !
17 !!**** *ISBA_BUDGET * - water and energy budget for ISBA
18 !!
19 !! PURPOSE
20 !! -------
21 !
22 !!** METHOD
23 !! ------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !!
29 !! AUTHOR
30 !! ------
31 !! B. Decharme
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 07/2012
36 !!
37 !! B. Decharme 01/16 : Bug with flood budget
38 !!------------------------------------------------------------------
39 !
40 !
42 !
43 USE modd_surf_par, ONLY : xundef
44 USE modd_csts, ONLY : xrholw
45 !
46 !
47 USE yomhook ,ONLY : lhook, dr_hook
48 USE parkind1 ,ONLY : jprb
49 !
50 IMPLICIT NONE
51 !
52 !* 0.1 declarations of arguments
53 !
54 !
55 TYPE(diag_evap_isba_t), INTENT(INOUT) :: dgei
56 !
57  CHARACTER(LEN=*), INTENT(IN) :: hisba ! type of ISBA version:
58 ! ! '2-L' (default)
59 ! ! '3-L'
60 ! ! 'DIF'
61  CHARACTER(LEN=*), INTENT(IN) :: hsnow_isba ! 'DEF' = Default F-R snow scheme
62 ! ! (Douville et al. 1995)
63 ! ! '3-L' = 3-L snow scheme (option)
64 ! ! (Boone and Etchevers 2000)
65 ! ! 'CRO' = Crocus snow scheme
66 LOGICAL, INTENT(IN) :: oglacier ! True = glacier over permanent snow and ice
67  ! False = No specific treatment
68 REAL, INTENT(IN) :: ptstep ! timestep of the integration (s)
69 !
70 REAL, DIMENSION(:,:), INTENT(IN) :: pwg ! liquid water content by layer (m3/m3)
71 REAL, DIMENSION(:,:), INTENT(IN) :: pwgi ! ice content by layer (m3/m3)
72 REAL, DIMENSION(:), INTENT(IN) :: pwr ! liquid water on veg canopy (kg m-2)
73 REAL, DIMENSION(:,:), INTENT(IN) :: psnowswe ! snow water equivalent by layer (kg m-2)
74 REAL, DIMENSION(:,:), INTENT(IN) :: pdg ! soil layer depth (m)
75 REAL, DIMENSION(:,:), INTENT(IN) :: pdzg ! soil layer thickness (m)
76 !
77 REAL, DIMENSION(:), INTENT(IN) :: pwg_ini ! total wg at t-1 (kg m-2)
78 REAL, DIMENSION(:), INTENT(IN) :: pwgi_ini ! total wgi at t-1 (kg m-2)
79 REAL, DIMENSION(:), INTENT(IN) :: pwr_ini ! total wr at t-1 (kg m-2)
80 REAL, DIMENSION(:), INTENT(IN) :: pswe_ini ! total swe at t-1 (kg m-2)
81 !
82 REAL, DIMENSION(:), INTENT(IN) :: prain ! Rain rate (kg/m2/s)
83 REAL, DIMENSION(:), INTENT(IN) :: psnow ! Snow rate (kg/m2/s)
84 REAL, DIMENSION(:), INTENT(IN) :: pevap ! total evaporative flux (kg/m2/s)
85 REAL, DIMENSION(:), INTENT(IN) :: pdrain ! drainage (kg/m2/s)
86 REAL, DIMENSION(:), INTENT(IN) :: prunoff ! surface runoff (kg/m2/s)
87 REAL, DIMENSION(:), INTENT(IN) :: piflood ! Floodplain infiltration (kg/m2/s)
88 REAL, DIMENSION(:), INTENT(IN) :: ppflood ! Floodplain direct precip runoff(kg/m2/s)
89 REAL, DIMENSION(:), INTENT(IN) :: ple_flood ! Floodplain latent heat (W/m2)
90 REAL, DIMENSION(:), INTENT(IN) :: plei_flood! Floodplain sublimation heat (W/m2)
91 REAL, DIMENSION(:), INTENT(IN) :: piceflux ! Ice flux from Snow reservoir (kg/m2/s)
92 REAL ,DIMENSION(:), INTENT(IN) :: pirrig_flux! additional water flux from irrigation (kg/m2/s)
93 REAL ,DIMENSION(:), INTENT(IN) :: psndrift ! blowing snow sublimation (kg/m2/s)
94 REAL, DIMENSION(:), INTENT(IN) :: plvtt, plstt
95 !
96 REAL, DIMENSION(:), INTENT(OUT) :: pdwg
97 REAL, DIMENSION(:), INTENT(OUT) :: pdwgi
98 REAL, DIMENSION(:), INTENT(OUT) :: pdwr
99 REAL, DIMENSION(:), INTENT(OUT) :: pdswe
100 REAL, DIMENSION(:), INTENT(OUT) :: pwatbud ! ISBA water budget (kg/m2/s)
101 !
102 !* 0.2 declarations of local variables
103 !
104 REAL, DIMENSION(SIZE(PWR)) :: zinput
105 REAL, DIMENSION(SIZE(PWR)) :: zoutput
106 REAL, DIMENSION(SIZE(PWR)) :: ztendency
107 REAL, DIMENSION(SIZE(PWR)) :: ziceflux
108 REAL, DIMENSION(SIZE(PWR)) :: zswe_t
109 REAL, DIMENSION(SIZE(PWR)) :: zwg_t
110 REAL, DIMENSION(SIZE(PWR)) :: zwgi_t
111 REAL, DIMENSION(SIZE(PWR)) :: zsndrift
112 REAL, DIMENSION(SIZE(PWR)) :: zeflood
113 !
114 INTEGER :: ini, inl, inls
115 INTEGER :: ji, jl
116 REAL(KIND=JPRB) :: zhook_handle
117 !
118 !-------------------------------------------------------------------------------------
119 !
120 IF (lhook) CALL dr_hook('ISBA_BUDGET',0,zhook_handle)
121 !
122 !* 1.0 Init
123 ! -----------
124 !
125 ini =SIZE(pwg,1)
126 inl =SIZE(pwg,2)
127 inls=SIZE(psnowswe,2)
128 !
129 pdwg(:) = xundef
130 pdwgi(:) = xundef
131 pdwr(:) = xundef
132 pdswe(:) = xundef
133 !
134 IF (hsnow_isba=='3-L'.OR.hsnow_isba=='CRO') THEN
135  zsndrift(:)=psndrift(:)
136 ELSE
137  zsndrift(:)=0.0
138 ENDIF
139 !
140 !* 2.0 Comptut isba water budget in kg/m2/s
141 ! -------------------------------------------
142 !
143 IF(dgei%LWATER_BUDGET)THEN
144 !
145 ! total swe at t in kg/m2
146  zswe_t(:)=0.0
147  DO jl=1,inls
148  DO ji=1,ini
149  zswe_t(ji)=zswe_t(ji)+psnowswe(ji,jl)
150  ENDDO
151  ENDDO
152 !
153 ! total wg and wgi at t in kg/m2
154  zwg_t(:)= 0.0
155  zwgi_t(:)= 0.0
156  IF(hisba=='DIF')THEN
157  DO jl=1,inl
158  DO ji=1,ini
159  IF(pwg(ji,jl)/=xundef)THEN
160  zwg_t(ji)=zwg_t(ji)+pwg(ji,jl)*pdzg(ji,jl)*xrholw
161  zwgi_t(ji)=zwgi_t(ji)+pwgi(ji,jl)*pdzg(ji,jl)*xrholw
162  ENDIF
163  ENDDO
164  ENDDO
165  ELSE
166  zwg_t(:)=pwg(:,2)*pdg(:,2)*xrholw
167  zwgi_t(:)=pwgi(:,2)*pdg(:,2)*xrholw
168  IF(hisba=='3-L')THEN
169  zwg_t(:)=zwg_t(:)+pwg(:,3)*(pdg(:,3)-pdg(:,2))*xrholw
170  ENDIF
171  ENDIF
172 !
173 ! Comptut reservoir time tendencies in kg/m2/s
174  pdwg(:) = (zwg_t(:)-pwg_ini(:))/ptstep
175  pdwgi(:) = (zwgi_t(:)-pwgi_ini(:))/ptstep
176  pdwr(:) = (pwr(:)-pwr_ini(:))/ptstep
177  pdswe(:) = (zswe_t(:)-pswe_ini(:))/ptstep
178 !
179 ! ice calving flux if used
180  IF(oglacier)THEN
181  ziceflux(:)=piceflux(:)
182  ELSE
183  ziceflux(:)=0.0
184  ENDIF
185 !
186 ! Floodplains evaporation (kg/m2/s)
187  zeflood(:)=ple_flood(:)/plvtt(:)+plei_flood(:)/plstt(:)
188 !
189 ! total input water in the system at t
190  zinput(:)=prain(:)+psnow(:)+piflood(:)+pirrig_flux(:)
191 !
192 ! total output water in the system at t
193  zoutput(:) = pevap(:)+pdrain(:)+prunoff(:) &
194  + ppflood(:)+ziceflux(:)+zsndrift(:) &
195  - zeflood(:)
196 !
197 ! total reservoir time tendencies at "t - (t-1)"
198  ztendency(:) = pdwg(:)+pdwgi(:)+pdwr(:)+pdswe(:)
199 !
200 ! isba water budget (dw/dt=in-out) in kg/m2/s
201  pwatbud(:)=ztendency(:)-(zinput(:)-zoutput(:))
202 !
203 ENDIF
204 !
205 !* 3.0 Comptut isba energy budget in W/m2
206 ! -----------------------------------------
207 !
208 ! not yet implemented
209 !
210 IF (lhook) CALL dr_hook('ISBA_BUDGET',1,zhook_handle)
211 !-------------------------------------------------------------------------------------
212 !
213 END SUBROUTINE isba_budget
subroutine isba_budget(DGEI, HISBA, HSNOW_ISBA, OGLACIER, PTSTEP, PWG, PWGI, PWR, PSNOWSWE, PDG, PDZG, PWG_INI, PWGI_INI, PWR_INI, PSWE_INI, PRAIN, PSNOW, PEVAP, PDRAIN, PRUNOFF, PIFLOOD, PPFLOOD, PLE_FLOOD, PLEI_FLOOD, PICEFLUX, PIRRIG_FLUX, PSNDRIFT, PLVTT, PLSTT, PDWG, PDWGI, PDWR, PDSWE, PWATBUD)
Definition: isba_budget.F90:6