LMDZ
sisvat.F
Go to the documentation of this file.
1  subroutine sisvat(SnoMod,BloMod,jjtime)
2 
3 !--------------------------------------------------------------------------+
4 ! MAR SISVAT Mon 04-Apr-2011 MAR |
5 ! SubRoutine SISVAT contains the fortran 77 code of the |
6 ! Soil/Ice Snow Vegetation Atmosphere Transfer Scheme |
7 ! |
8 !--------------------------------------------------------------------------+
9 ! PARAMETERS: klonv: Total Number of columns = |
10 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
11 ! X Number of Mosaic Cell per grid box |
12 ! |
13 ! INPUT: daHost : Date Host Model |
14 ! ^^^^^ |
15 ! |
16 ! INPUT: LSmask : 1: Land MASK |
17 ! ^^^^^ 0: Sea MASK |
18 ! ivgtSV = 0,...,12: Vegetation Type |
19 ! isotSV = 0,...,12: Soil Type |
20 ! 0: Water, Liquid (Sea, Lake) |
21 ! 12: Water, Solid (Ice) |
22 ! |
23 ! INPUT: coszSV : Cosine of the Sun Zenithal Distance [-] |
24 ! ^^^^^ sol_SV : Surface Downward Solar Radiation [W/m2] |
25 ! IRd_SV : Surface Downward Longwave Radiation [W/m2] |
26 ! drr_SV : Rain Intensity [kg/m2/s] |
27 ! dsn_SV : Snow Intensity [mm w.e./s] |
28 ! dsnbSV : Snow Intensity, Drift Fraction [-] |
29 ! dbs_SV : Drift Amount [mm w.e.] |
30 ! za__SV : Surface Boundary Layer (SBL) Height [m] |
31 ! VV__SV :(SBL Top) Wind Velocity [m/s] |
32 ! TaT_SV : SBL Top Temperature [K] |
33 ! rhT_SV : SBL Top Air Density [kg/m3] |
34 ! QaT_SV : SBL Top Specific Humidity [kg/kg] |
35 ! qsnoSV : SBL Mean Snow Content [kg/kg] |
36 ! LAI0SV : Leaf Area Index [-] |
37 ! glf0SV : Green Leaf Fraction [-] |
38 ! alb0SV : Soil Basic Albedo [-] |
39 ! slopSV : Surface Slope [-] |
40 ! dt__SV : Time Step [s] |
41 ! |
42 ! INPUT / isnoSV = total Nb of Ice/Snow Layers |
43 ! OUTPUT: ispiSV = 0,...,nsno: Uppermost Superimposed Ice Layer |
44 ! ^^^^^^ iiceSV = total Nb of Ice Layers |
45 ! istoSV = 0,...,5 : Snow History (see istdSV data) |
46 ! |
47 ! INPUT / alb_SV : Surface-Canopy Albedo [-] |
48 ! OUTPUT: emi_SV : Surface-Canopy Emissivity [-] |
49 ! ^^^^^^ IRs_SV : Soil IR Flux (negative) [W/m2] |
50 ! LMO_SV : Monin-Obukhov Scale [m] |
51 ! us__SV : Friction Velocity [m/s] |
52 ! uts_SV : Temperature Turbulent Scale [m/s] |
53 ! uqs_SV : Specific Humidity Velocity [m/s] |
54 ! uss_SV : Blowing Snow Turbulent Scale [m/s] |
55 ! usthSV : Blowing Snow Erosion Threshold [m/s] |
56 ! Z0m_SV : Momentum Roughness Length [m] |
57 ! Z0mmSV : Momentum Roughness Length (time mean) [m] |
58 ! Z0mnSV : Momentum Roughness Length (instantaneous)[m] |
59 ! Z0SaSV : Sastrugi Roughness Length [m] |
60 ! Z0e_SV : Erosion Snow Roughness Length [m] |
61 ! Z0emSV : Erosion Snow Roughness Length (time mean) [m] |
62 ! Z0enSV : Erosion Snow Roughness Length (instantaneous)[m] |
63 ! Z0roSV : Subgrid Topo Roughness Length [m] |
64 ! Z0h_SV : Heat Roughness Length [m] |
65 ! snCaSV : Canopy Snow Thickness [mm w.e.] |
66 ! rrCaSV : Canopy Water Content [kg/m2] |
67 ! psivSV : Leaf Water Potential [m] |
68 ! TvegSV : Canopy Temperature [K] |
69 ! TsisSV : Soil/Ice Temperatures (layers -nsol,-nsol+1,..,0)|
70 ! & Snow Temperatures (layers 1,2,...,nsno) [K] |
71 ! ro__SV : Soil/Snow Volumic Mass [kg/m3] |
72 ! eta_SV : Soil/Snow Water Content [m3/m3] |
73 ! G1snSV : snow dendricity/sphericity |
74 ! G2snSV : snow sphericity/grain size |
75 ! dzsnSV : Snow Layer Thickness [m] |
76 ! agsnSV : Snow Age [day] |
77 ! BufsSV : Snow Buffer Layer [kg/m2] .OR. [mm] |
78 ! BrosSV : Snow Buffer Layer Density [kg/m3] |
79 ! BG1sSV : Snow Buffer Layer Dendricity / Sphericity [-] |
80 ! BG2sSV : Snow Buffer Layer Sphericity / Size [-] [0.1 mm] |
81 ! rusnSV : Surficial Water [kg/m2] .OR. [mm] |
82 ! |
83 ! OUTPUT: no__SV : OUTPUT file Unit Number [-] |
84 ! ^^^^^^ i___SV : OUTPUT point i Coordinate [-] |
85 ! j___SV : OUTPUT point j Coordinate [-] |
86 ! n___SV : OUTPUT point n Coordinate [-] |
87 ! lwriSV : OUTPUT point vec Index [-] |
88 ! |
89 ! OUTPUT: IRu_SV : Upward IR Flux (+, upw., effective) [K] |
90 ! ^^^^^^ hSalSV : Saltating Layer Height [m] |
91 ! qSalSV : Saltating Snow Concentration [kg/kg] |
92 ! RnofSV : RunOFF Intensity [kg/m2/s] |
93 ! |
94 ! Internal Variables: |
95 ! ^^^^^^^^^^^^^^^^^^ |
96 ! NLaysv = New Snow Layer Switch [-] |
97 ! albisv : Snow/Ice/Water/Soil Integrated Albedo [-] |
98 ! SoCasv : Absorbed Solar Radiation by Canopy (Normaliz)[-] |
99 ! SoSosv : Absorbed Solar Radiation by Surfac.(Normaliz)[-] |
100 ! tau_sv : Fraction of Radiation transmitted by Canopy [-] |
101 ! TBr_sv : Brightness Temperature [K] |
102 ! IRupsv : Upward IR Flux (-, upw.) [W/m2] |
103 ! IRv_sv : Vegetation IR Flux [W/m2] |
104 ! rrMxsv : Canopy Maximum Intercepted Rain [kg/m2] |
105 ! Sigmsv : Canopy Ventilation Factor [-] |
106 ! ram_sv : Aerodynamic Resistance for Momentum [s/m] |
107 ! rah_sv : Aerodynamic Resistance for Heat [s/m] |
108 ! HSv_sv : Vegetation Sensible Heat Flux [W/m2] |
109 ! HLv_sv : Vegetation Latent Heat Flux [W/m2] |
110 ! Rootsv : Root Water Pump [kg/m2/s] |
111 ! Evp_sv : Evaporation [kg/m2] |
112 ! EvT_sv : Evapotranspiration [kg/m2] |
113 ! HSs_sv : Surface Sensible Heat Flux + => absorb.[W/m2] |
114 ! HLs_sv : Surface Latent Heat Flux + => absorb.[W/m2] |
115 ! Lx_H2O : Latent Heat of Vaporization/Sublimation [J/kg] |
116 ! Tsrfsv : Surface Temperature [K] |
117 ! LAI_sv : Leaf Area Index (snow included) [-] |
118 ! LAIesv : Leaf Area Index (effective / transpiration) [-] |
119 ! glf_sv : Green Leaf Fraction of NOT fallen Leaves [-] |
120 ! sEX_sv : Verticaly Integrated Extinction Coefficient [-] |
121 ! LSdzsv : Vertical Discretization Factor [-] |
122 ! = 1. Soil |
123 ! = 1000. Ocean |
124 ! z_snsv : Snow Pack Thickness [m] |
125 ! zzsnsv : Snow Pack Thickness [m] |
126 ! albssv : Soil Albedo [-] |
127 ! Evg_sv : Soil+Vegetation Emissivity [-] |
128 ! Eso_sv : Soil+Snow Emissivity [-] |
129 ! psi_sv : Soil Water Potential [m] |
130 ! Khydsv : Soil Hydraulic Conductivity [m/s] |
131 ! |
132 ! ETVg_d : VegetationEnergy Power Forcing [W/m2] |
133 ! ETSo_0 : Snow/Soil Energy Power, before Forcing [W/m2] |
134 ! ETSo_1 : Snow/Soil Energy Power, after Forcing [W/m2] |
135 ! ETSo_d : Snow/Soil Energy Power Forcing [W/m2] |
136 ! EqSn_0 : Snow Energy, before Phase Change [J/m2] |
137 ! EqSn_1 : Snow Energy, after Phase Change [J/m2] |
138 ! EqSn_d : Snow Energy, net Forcing [J/m2] |
139 ! Enrsvd : SVAT Energy Power Forcing [W/m2] |
140 ! Enrbal : SVAT Energy Balance [W/m2] |
141 ! Wats_0 : Soil Water, before Forcing [mm] |
142 ! Wats_1 : Soil Water, after Forcing [mm] |
143 ! Wats_d : Soil Water Forcing [mm] |
144 ! SIWm_0 : Snow initial Mass [mm w.e.] |
145 ! SIWm_1 : Snow final Mass [mm w.e.] |
146 ! SIWa_i : Snow Atmos. initial Forcing [mm w.e.] |
147 ! SIWa_f : Snow Atmos. final Forcing(noConsumed)[mm w.e.] |
148 ! SIWe_i : SnowErosion initial Forcing [mm w.e.] |
149 ! SIWe_f : SnowErosion final Forcing(noConsumed)[mm w.e.] |
150 ! SIsubl : Snow sublimed/deposed Mass [mm w.e.] |
151 ! SImelt : Snow Melted Mass [mm w.e.] |
152 ! SIrnof : Surficial Water + Run OFF Change [mm w.e.] |
153 ! SIvAcr : Sea-Ice vertical Acretion [mm w.e.] |
154 ! Watsvd : SVAT Water Forcing [mm] |
155 ! Watbal : SVAT Water Balance [W/m2] |
156 ! |
157 ! dsn_Ca,snCa_n : Snow Contribution to the Canopy[m w.e.] |
158 ! drr_Ca,rrCa_n,drip: Rain Contribution to the Canopy [kg/m2] |
159 ! vk2 : Square of Von Karman Constant [-] |
160 ! sqrCm0 : Factor of Neutral Drag Coeffic.Momentum [s/m] |
161 ! sqrCh0 : Factor of Neutral Drag Coeffic.Heat [s/m] |
162 ! EmiVeg : Vegetation Emissivity [-] |
163 ! EmiSol : Soil Emissivity [-] |
164 ! EmiSno : Snow Emissivity [-] |
165 ! EmiWat : Water Emissivity [-] |
166 ! Z0mSea : Sea Roughness Length [m] |
167 ! Z0mLnd : Land Roughness Length [m] |
168 ! sqrrZ0 : u*t/u* |
169 ! f_eff : Marticorena & B. 1995 JGR (20) |
170 ! A_Fact : Fundamental * Roughness |
171 ! Z0mBSn : BSnow Roughness Length [m] |
172 ! Z0mBS0 : Mimimum BSnow Roughness Length (blown* ) [m] |
173 ! Z0m_Sn : Snow Roughness Length (surface) [m] |
174 ! Z0m_S0 : Mimimum Snow Roughness Length [m] |
175 ! Z0m_S1 : Maximum Snow Roughness Length [m] |
176 ! Z0_GIM : Minimum GIMEX Roughness Length [m] |
177 ! Z0_ICE : Sea Ice ISW Roughness Length [m] |
178 ! |
179 ! |
180 ! Preprocessing Option: STANDARD Possibility |
181 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ |
182 ! #AE: TURBULENCE: Aerosols Erosion / Turbulent Diffusion Coeff. |
183 ! #BD: TraCer Aeolian Erosion Submodel is turned ON |
184 ! #BS: Explicit Cloud MICROPHYSICS: Blow. *(Snow) Model) |
185 ! #SN: SNOW Model may be turned ON |
186 ! #NP: SNOW Model: Snow Properties may be those of Polar Snow |
187 ! #GL: SNOW Model: ETH-Camp & Greenland 3D simulations |
188 ! #MB: SNOW Model: Erosion Efficiency (Marticorena & Berga.1995) |
189 ! #SI: SISVAT: Sea-Ice Fraction calculated from prescribed SST |
190 ! #MT: SISVAT: Monin-Obukhov Theory is linearized (Garrat schem) |
191 ! #SH: Soil /Vegetation Model: Hapex-Sahel Vegetation DATA |
192 ! #OR: SBL: Orography Roughness included from SL_z0 in MARdom |
193 ! #ZS: SBL: Mom.: Roughn.Length= F(u*) Wang MWR 129 , Sea |
194 ! #TZ: SBL: Mom.: Roughn.Length= Typical value in polar models |
195 ! #SZ: SBL: Mom.: Roughn.Length= F(u*) Andreas &al.(1995) Snow |
196 ! #ZA: SBL: Mom.: Roughn.Length= F(u*) Andreas &al.(2004), Snow |
197 ! #za: SBL: Mom.: Roughn.Length= F(u*) Andreas &al.(2004), Snow (native|
198 ! #RN: SBL: Heat: Roughn.Length= F(u*,z0) Andreas (1987) Snow |
199 ! #ZM: SBL: M/H Roughn.Length: Box Moving Average (in Time) |
200 ! |
201 ! |
202 ! Preprocessing Option: STANDARD Col de Porte |
203 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ |
204 ! #CP: Col de Porte Turbulence Parameterization |
205 ! |
206 ! |
207 ! Preprocessing Option: |
208 ! ^^^^^^^^^^^^^^^^^^^^^ |
209 ! #zs: SBL: Mom.: Roughn.Length= F(u*) Wang MWR 129 bis , Sea |
210 ! #ZN: SBL: Mom.: Roughn.Length= F(u*) Shao & Lin (1999), Snow |
211 ! #CM: SBL: Z0mL Roughn.Length= F(glf) |
212 ! #FL: SISVAT: LAI Assignation and Fallen Leaves Correction |
213 ! |
214 ! |
215 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
216 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
217 ! FILE | CONTENT |
218 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
219 ! # SISVAT_iii_jjj_n | #E0: OUTPUT on ASCII File (SISVAT Variables) |
220 ! # | Energy Budg. Verif.: Soil+(Sea-Ice)+Snow |
221 ! # |(#E0 MUST BE PREPROCESSED BEFORE #e1 & #e2 !) |
222 ! # SISVAT_iii_jjj_n | #m0: OUTPUT/Verification: H2O Conservation |
223 ! | |
224 ! # stdout | #s0: OUTPUT of Snow Buffer Layer |
225 ! | unit 6, SubRoutine SISVAT **ONLY** |
226 ! # stdout | #s2: OUTPUT of SnowFall, Snow Buffer |
227 ! | unit 6, SubRoutine SISVAT_BSn, _qSn |
228 ! # stdout | #b0: OUTPUT of Snow Erosion |
229 ! | unit 6, SubRoutine SISVAT_BSn **ONLY** |
230 ! # stdout | #sf: OUTPUT of SnowFall, Z0 and Drag Coeff. |
231 ! | unit 6, SubRoutines PHY_SISVAT, SISVAT |
232 ! # stdout | #sz: OUTPUT of Roughness Length & Drag Coeff. |
233 ! | unit 6, SubRoutine SISVAT **ONLY** |
234 ! |
235 ! SUGGESTIONS of MODIFICATIONS: see lines beginning with "C +!!!" |
236 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
237 !--------------------------------------------------------------------------+
238 
239 
240 
241 
242 
243 ! Global Variables
244 ! ================
245 
246  USE phy_sv
247 
248  USE var_sv
249  USE varlsv
250  USE vardsv
251  USE var0sv
252  USE varxsv
253  USE vardcp
254 
255  USE varysv
256 
257  IMPLICIT NONE
258 
259  logical SnoMod
260  logical BloMod
261  integer jjtime
262 
263 
264 ! Internal Variables
265 ! ==================
266 
267 ! Non Local
268 ! ---------
269 
270  real TBr_sv(klonv) ! Brightness Temperature
271  real IRdwsv(klonv) ! DOWNward IR Flux
272  real IRupsv(klonv) ! UPward IR Flux
273  real d_Bufs,Bufs_N ! Buffer Snow Layer Increment
274  real Buf_ro,Bros_N ! Buffer Snow Layer Density
275 c #NP real BufPro,VV__10 ! Buffer Snow Layer Density
276  real Buf_G1,BG1__N ! Buffer Snow Layer Dendr/Sphe[-]
277  real Buf_G2,BG2__N ! Buffer Snow Layer Spher/Size[-]
278  real Bdzssv(klonv) ! Buffer Snow Layer Thickness
279  real z_snsv(klonv) ! Snow-Ice, current Thickness
280 
281 ! Energy Budget
282 ! ~~~~~~~~~~~~~~~~~~~~~
283 ! #e1 real ETVg_d(klonv) ! VegetationPower, Forcing
284 ! #e1 real ETSo_0(klonv) ! Soil/Snow Power, before Forcing
285 ! #e1 real ETSo_1(klonv) ! Soil/Snow Power, after Forcing
286 ! #e1 real ETSo_d(klonv) ! Soil/Snow Power, Forcing
287 ! #e1 real EqSn_0(klonv) ! Snow Energy, befor Phase Change
288 ! #e1 real EqSn_1(klonv) ! Snow Energy, after Phase Change
289 ! #e1 real EqSn_d(klonv) ! Energy in Excess
290 
291 ! OUTPUT/Verification: H2O Conservation
292 ! #m0 real Wats_0(klonv) ! Soil Water, before Forcing
293 ! #m0 real Wats_1(klonv) ! Soil Water, after Forcing
294 ! #m0 real Wats_d(klonv) ! Soil Water, Forcing
295 
296 ! OUTPUT/Verification: * Mass Conservation
297 ! #m1 real SIsubl(klonv) ! Snow Sublimed/Deposed Mass
298 ! #m1 real SImelt(klonv) ! Snow Melted Mass
299 ! #m1 real SIrnof(klonv) ! Local Surficial Water + Run OFF
300 
301 ! OUTPUT/Verification: SeaIce Conservation
302 ! #m2 real SIvAcr(klonv) ! Sea-Ice Vertical Acretion
303 
304 
305 ! Local
306 ! -----
307 
308 c #MT logical Garrat ! SBL Scheme Switch
309  character* 1 SepLab ! OUTPUT ASCII File Labels
310  character* 6 FilLab !
311  character*16 FilNam !
312  common/sisvat_loc_abc/seplab,fillab !
313 
314  integer noUNIT ! OUTPUT File Unit Number
315  integer nwUNIT ! OUTPUT File Unit Number (New)
316  common/sisvat_loc_num/nwunit !
317 
318  integer iwr
319  integer ikl ,isn ,isl ,ist !
320  integer ist__s,ist__w ! Soil/Water Body Identifier
321  integer growth ! Seasonal Mask
322  integer LISmsk ! Land+Ice / Open Sea Mask
323  integer LSnMsk ! Snow-Ice / No Snow-Ice Mask
324  integer IceMsk,IcIndx(klonv) ! Ice / No Ice Mask
325  integer SnoMsk ! Snow / No Snow Mask
326 
327  real drr_Ca,rrCa_n,drip ! Rain Contribution to the Canopy
328  real dsn_Ca,snCa_n,FallOK(klonv) ! Snow Contribution to the Canopy
329  real roSMin,roSn_1,roSn_2,roSn_3 ! Fallen Snow Density (PAHAUT)
330  real Dendr1,Dendr2,Dendr3 ! Fallen Snow Dendric.(GIRAUD)
331  real Spher1,Spher2,Spher3,Spher4 ! Fallen Snow Spheric.(GIRAUD)
332  real Polair ! Polar Snow Switch
333  real PorSno,Por_BS,Salt_f,PorRef !
334 c #sw real PorVol,rWater !
335 c #sw real rusNEW,rdzNEW,etaNEW !
336  real ro_new !
337  real TaPole ! Maximum Polar Temperature
338  real T__Min ! Minimum realistic Temperature
339 
340  real EmiVeg ! Emissivity of Vegetation
341  real EmiSol ! Emissivity of Soil
342  real EmiSno ! Emissivity of Snow
343  real EmiWat ! Emissivity of a Water Area
344  real vk2 ! Square of Von Karman Constant
345  real u2star !(u*)**2
346  real fallen ! Fallen Leaves Switch
347  real Z0mSea,Z0hSea ! Sea Roughness Length
348  real Z0mLnd ! Land Roughness Length
349 c #ZN real sqrrZ0 ! u*t/u*
350  real f_eff ! Marticorena & B. 1995 JGR (20)
351  real A_Fact ! Fundamental * Roughness
352  real Z0m_nu ! Smooth R Snow Roughness Length
353  real Z0mBSn ! BSnow Roughness Length
354  real Z0mBS0 ! Mimimum BSnow Roughness Length
355  real Z0m_S0 ! Mimimum Snow Roughness Length
356  real Z0m_S1 ! Maximum Snow Roughness Length
357 c #SZ real Z0Sa_N ! Regime Snow Roughness Length
358 c #SZ real Z0SaSi ! 1.IF Rgm Snow Roughness Length
359 c #GL real Z0_GIM ! Mimimum GIMEX Roughness Length
360  real Z0_ICE ! Sea-Ice ISW Roughness Length
361  real Z0m_Sn,Z0m_90 ! Snow Surface Roughness Length
362  real SnoWat ! Snow Layer Switch
363 c #RN real rstar,alors !
364 c #RN real rstar0,rstar1,rstar2 !
365  real SameOK ! 1. => Same Type of Grains
366  real G1same ! Averaged G1, same Grains
367  real G2same ! Averaged G2, same Grains
368  real typ__1 ! 1. => Lay1 Type: Dendritic
369  real zroNEW ! dz X ro, if fresh Snow
370  real G1_NEW ! G1, if fresh Snow
371  real G2_NEW ! G2, if fresh Snow
372  real zroOLD ! dz X ro, if old Snow
373  real G1_OLD ! G1, if old Snow
374  real G2_OLD ! G2, if old Snow
375  real SizNEW ! Size, if fresh Snow
376  real SphNEW ! Spheric.,if fresh Snow
377  real SizOLD ! Size, if old Snow
378  real SphOLD ! Spheric.,if old Snow
379  real Siz_av ! Averaged Grain Size
380  real Sph_av ! Averaged Grain Spher.
381  real Den_av ! Averaged Grain Dendr.
382  real DendOK ! 1. => Average is Dendr.
383  real G1diff ! Averaged G1, diff. Grains
384  real G2diff ! Averaged G2, diff. Grains
385  real G1 ! Averaged G1
386  real G2 ! Averaged G2
387 
388 ! Energy Budget
389 ! ~~~~~~~~~~~~~~~~~~~
390 ! #e1 integer noEBal ! Energy Imbalances Counter
391 ! #e1 common/SISVAT__EBal/noEBal !
392 ! #e1 real Enrsvd(klonv) ! Soil+Vegetat Power Forcing
393 ! #e1 real EnsBal ! Soil+Snow , Power Balance
394 ! #e1 real EnvBal ! Vegetat, Power Balance
395 
396 ! OUTPUT/Verification: H2O Conservation
397 ! #m0 integer noWBal ! Water Imbalances Counter
398 ! #m0 common/SISVAT__WBal/noWBal !
399 ! #m0 real Watsv0(klonv) ! Soil+Vegetat, before Forcing
400 ! #m0 real Watsvd(klonv) ! Soil+Vegetat Water Forcing
401 ! #m0 real Watbal ! Soil+Vegetat, Water Balance
402 
403 ! OUTPUT/Verification: * Mass Conservation
404 ! #m1 integer noSBal ! Water Imbalances Counter
405 ! #m1 common/SISVAT__SBal/noSBal !
406 ! #m1 real SIWm_0(klonv),SIWm_1(klonv) ! Snow Initial/Final Mass
407 ! #m1 real SIWa_i(klonv),SIWa_f(klonv) ! Snow Initial/Final ATM Forcing
408 ! #m1 real SIWe_i(klonv),SIWe_f(klonv) ! Snow Initial/Final BLS Forcing
409 ! #m1 real SnoBal ! Snow Pack Mass Balance
410 
411 
412 ! Internal DATA
413 ! =============
414 
415 c #MT data Garrat /.true. / ! SBL Scheme Switch
416  data t__min / 200.00/ ! Minimum realistic Temperature
417  data tapole / 263.15/ ! Maximum Polar Temperature
418  data rosmin / 30. / ! Minimum Snow Density
419  data rosn_1 / 109. / ! Fall.Sno.Density, Indep. Param.
420  data rosn_2 / 6. / ! Fall.Sno.Density, Temper.Param.
421  data rosn_3 / 26. / ! Fall.Sno.Density, Wind Param.
422  data dendr1 / 17.12/ ! Fall.Sno.Dendric.,Wind 1/Param.
423  data dendr2 / 128. / ! Fall.Sno.Dendric.,Wind 2/Param.
424  data dendr3 / -20. / ! Fall.Sno.Dendric.,Indep. Param.
425  data spher1 / 7.87/ ! Fall.Sno.Spheric.,Wind 1/Param.
426  data spher2 / 38. / ! Fall.Sno.Spheric.,Wind 2/Param.
427  data spher3 / 50. / ! Fall.Sno.Spheric.,Wind 3/Param.
428  data spher4 / 90. / ! Fall.Sno.Spheric.,Indep. Param.
429  data emisol / 0.99999999/ ! 0.94Emissivity of Soil
430  data emiveg / 0.99999999/ ! 0.98Emissivity of Vegetation
431  data emiwat / 0.99999999/ ! Emissivity of a Water Area
432  data emisno / 0.99999999/ ! Emissivity of Snow
433 ! DATA Emissivities ! Pielke, 1984, pp. 383,409
434 
435  data fallen / 0. / ! Fallen Leaves Switch
436  data z0mbs0 / 0.5e-6/ ! MINimum Snow Roughness Length
437  ! for Momentum if Blowing Snow
438  ! Gall?e et al. 2001 BLM 99 (19)
439  data z0m_s0/ 0.00005/ ! MINimum Snow Roughness Length
440 c #MG data Z0m_S0/ 0.00200/ ! MINimum Snow Roughness Length
441  ! MegaDunes included
442  data z0m_s1/ 0.030 / ! MAXimum Snow Roughness Length
443  ! (Sastrugis)
444 c #GL data Z0_GIM/ 0.0013/ ! Ice Min Z0 = 0.0013 m (Broeke)
445 ! ! Old Ice Z0 = 0.0500 m (Bruce)
446 ! ! 0.0500 m (Smeets)
447 ! ! 0.1200 m (Broeke)
448  data z0_ice/ 0.0010/ ! Sea-Ice Z0 = 0.0010 m (Andreas)
449 ! ! (Ice Station Weddel -- ISW)
450  vk2 = vonkrm * vonkrm ! Square of Von Karman Constant
451 c #FL fallen = 1. ! Fallen Leaves Switch
452 
453 
454 ! BEGIN.main.
455 ! SISVAT Forcing VERIFICATION
456 ! ===========================
457 
458  IF (.not.iniout) THEN
459  iniout = .true.
460  IF (irs_sv(1).gt.-eps6)
461  . write(6,600)
462  600 format(/,'### SISVAT ERROR, Soil IR Upward not defined ###',
463  . /,'### Initialize and Store IRs_SV ###')
464  IF (irs_sv(1).gt.-eps6) THEN
465  write(*,*)'ikl',ikl,'IR',irs_sv(ikl)
466 
467  irs_sv(ikl)=-irs_sv(ikl)
468  isn= isnosv(ikl)
469  write(*,*) isnosv(ikl),tsissv(ikl,isn),dzsnsv(ikl,isn)
470  ENDIF
471 
472 ! OUTPUT
473 ! ======
474 
475  fillab ='SISVAT'
476  seplab ='_'
477  nwunit = 51
478  END IF
479 
480 c #E0 DO ikl=1,knonv
481 c #E0 IF (lwriSV(ikl).ne.0.AND.no__SV(lwriSV(ikl)).eq.0) THEN
482 c #E0 nwUNIT = nwUNIT+1
483 c #E0 no__SV(lwriSV(ikl)) = nwUNIT
484 c #E0 write(FilNam,'(a6,a1,2(i3.3,a1),i1)')
485 c #E0. FilLab,SepLab,i___SV(lwriSV(ikl)),
486 c #E0. SepLab,j___SV(lwriSV(ikl)),
487 c #E0. SepLab,n___SV(lwriSV(ikl))
488 c #E0 open(unit=nwUNIT,status='unknown',file=FilNam)
489 c #E0 rewind nwUNIT
490 c #E0 END IF
491 c #E0 END DO
492 
493 c #E0 DO ikl=1,knonv
494 c #E0 IF (lwriSV(ikl).ne.0) THEN
495 c #E0 noUNIT=no__SV(lwriSV(ikl))
496 c #E0 write(noUNIT,5000) daHost,i___SV(lwriSV(ikl)),
497 c #E0. j___SV(lwriSV(ikl)),
498 c #E0. n___SV(lwriSV(ikl)),
499 c #E0. Z0m_SV(ikl) ,
500 c #E0. albisv(ikl)
501  5000 format(
502  . /, a18,'| Grid Point ',2i4,
503  . ' (',i2,')',
504  . ' | Z0m =',f12.6,' | Albedo = ',f6.3,' |',
505  . /,' -------+',7('---------+'),2('--------+'))
506 c #E0 END IF
507 c #E0 END DO
508 
509 
510 ! "Soil" Humidity of Water Bodies
511 ! ===============================
512 
513  DO ikl=1,knonv
514  ist = isotsv(ikl) ! Soil Type
515  ist__s = min(ist, 1) ! 1 => Soil
516  ist__w = 1 - ist__s ! 1 => Water Body
517  DO isl=-nsol,0
518  eta_sv(ikl,isl) = eta_sv(ikl,isl) * ist__s ! Soil
519  . + etadsv(ist) * ist__w ! Water Body
520  END DO
521 
522 
523 ! Vertical Discretization Factor
524 ! ==============================
525 
526  lsdzsv(ikl) = ist__s ! Soil
527  . + ocndsv * ist__w ! Water Body
528  END DO
529 
530 
531 ! Vegetation Temperature Limits
532 ! =============================
533 
534  DO ikl=1,knonv
535  tvegsv(ikl) = max(tvegsv(ikl),t__min) ! T__Min = 200.K
536 
537 
538 ! LAI Assignation and Fallen Leaves Correction (#FL)
539 ! ==================================================
540 
541  lai0sv(ikl) = lai0sv(ikl)*min(1,ivgtsv(ikl)) ! NO LAI if
542 ! ! no vegetation
543  glf_sv(ikl) = glf0sv(ikl)
544 c #FL glf_sv(ikl) = 1.
545  lai_sv(ikl) = lai0sv(ikl)
546 c #FL. * glf0SV(ikl)
547  END DO
548 
549 
550 ! LAI in Presence of Snow
551 ! =======================
552 
553 ! ASSUMPTION: LAI decreases when Snow Thickness increases,
554 ! ^^^^^^^^^^ becoming 0 when Snow Thickn. = Displac.Height
555  DO ikl=1,knonv
556  lai_sv(ikl) = lai_sv(ikl)
557  . * (1.0 - zzsnsv( ikl, isnosv(ikl))
558  . /(dh_dsv(ivgtsv(ikl))+eps6) )
559  lai_sv(ikl) = max(lai_sv(ikl),zer0)
560  lai_sv(ikl) = min(lai_sv(ikl),ea_max)
561  END DO
562 
563 
564 ! Interception of Rain by the Canopy
565 ! ==================================
566 
567 ! OUTPUT/Verification: H2O Conservation: Vegetation Forcing
568 ! #m0 DO ikl=1,knonv
569 ! #m0 Watsv0(ikl) = rrCaSV(ikl) ! Canopy Water Cont.
570 ! #m0 Watsvd(ikl) = drr_SV(ikl) ! Precipitation
571 ! #m0 END DO
572 
573 
574 ! New Canopy Water Content
575 ! ------------------------
576 
577  DO ikl=1,knonv
578  rrmxsv(ikl) = 0.2*max( eps6,lai_sv(ikl)) ! Precip. Max. Intercept.
579  sigmsv(ikl) = 1.0-exp(-half*lai_sv(ikl)) ! Canopy Ventilation Coe.
580 ! ! (DR97, eqn 3.6)
581  drr_ca = drr_sv(ikl) *sigmsv(ikl) ! Intercepted Rain
582  . *dt__sv !
583  rrca_n = rrcasv(ikl) +drr_ca ! New Canopy Water Contnt
584  ! (DR97, eqn 3.28)
585  drip = rrca_n -rrmxsv(ikl) ! Water Drip
586  drip = max(zer0,drip) !
587  rrca_n = rrca_n -drip !
588  drr_sv(ikl) = drr_sv(ikl) +(rrcasv(ikl) ! Update Rain Contribut.
589  . -rrca_n ) !
590  . /dt__sv !
591  rrcasv(ikl) = rrca_n ! Upd.Canopy Water Contnt
592 
593 
594 ! Interception of Snow by the Canopy
595 ! ==================================
596 
597  dsn_ca = dsn_sv(ikl) *sigmsv(ikl) ! Intercepted Snow
598  . *dt__sv !
599  snca_n = sncasv(ikl) +dsn_ca ! New Canopy Snow Thickn.
600  drip = snca_n -rrmxsv(ikl) !
601  drip = max(zer0,drip) !
602  snca_n = snca_n -drip !
603  dsn_sv(ikl) = dsn_sv(ikl) +(sncasv(ikl) ! Update Snow Contribut.
604  . -snca_n ) !
605  . /dt__sv !
606  sncasv(ikl) = snca_n ! Upd.Canopy Snow Thickn.
607  END DO
608 
609 
610 ! Snow Fall from the Canopy
611 ! =========================
612 
613 ! ASSUMPTION: snow fall from the canopy,
614 ! ^^^^^^^^^^ when the temperature of the vegetation is positive
615 ! (.OR. when snow over the canopy is saturated with water)
616 
617  DO ikl=1,knonv
618  fallok(ikl) = max(zer0,sign(un_1,tvegsv(ikl)-tf_sno+eps6))
619  . * max(zer0,sign(un_1,sncasv(ikl) -eps6))
620  dsn_sv(ikl) = dsn_sv(ikl) +sncasv(ikl)*fallok(ikl)
621  . /dt__sv
622  sncasv(ikl) = sncasv(ikl) * (1. -fallok(ikl))
623 
624 
625 ! Blowing Particles Threshold Friction velocity
626 ! =============================================
627 
628 c #AE usthSV(ikl) = 1.0e+2
629  END DO
630 
631 
632 ! Contribution of Snow to the Surface Snow Pack
633 ! =============================================
634 
635  IF (snomod) THEN
636 
637 
638 ! OUTPUT/Verification: * Mass Conservation
639 ! #m1 DO ikl=1,knonv
640 ! #m1 SIWa_i(ikl) =(drr_SV(ikl) + dsn_SV(ikl)) *dt__SV ![mm w.e.]
641 ! #m1 SIWe_i(ikl) = dbs_SV(ikl) !
642 ! #m1 SIWm_0(ikl) = BufsSV(ikl) + HFraSV(ikl) *rhoIce !
643 ! #m1 DO isn=1,nsno !
644 ! #m1 SIWm_0(ikl) = SIWm_0(ikl) + dzsnSV(ikl,isn)*ro__SV(ikl,isn)!
645 ! #m1 END DO !
646 ! #m1 END DO !
647 
648 
649 ! Blowing Snow
650 ! ------------
651 
652 ! **********
653 c #SN IF (BloMod) call SISVAT_BSn(BloMod)
654 ! **********
655 
656 ! **********
657 ! #ve call SISVAT_wEq('_BSn ',1)
658 ! **********
659 
660 
661 ! Sea Ice
662 ! -------
663 
664 ! **********
665 c #SI call SISVAT_SIc
666 ! #m2. (SIvAcr)
667 ! **********
668 
669 ! **********
670 ! #ve call SISVAT_wEq('_SIc ',0)
671 ! **********
672 
673 
674 ! Buffer Layer
675 ! ------------
676 
677  DO ikl=1,knonv
678  bufssv(ikl) = bufssv(ikl) ! [mm w.e.]
679  d_bufs = max(dsn_sv(ikl) *dt__sv,0.) ! i.e., [kg/m2]
680  dsn_sv(ikl) = 0. !
681  bufs_n = bufssv(ikl) +d_bufs !
682 
683 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
684 ! OUTPUT for Buffer G1, G2 variables
685 ! #s0 IF (ii__SV(ikl).EQ.iwr_SV .AND. jj__SV(ikl).EQ. jwr_SV .AND.
686 ! #s0. nn__SV(ikl).EQ.nwr_SV)
687 ! #s0. write(6,6601) BufsSV(ikl) ,d_Bufs,Bufs_N
688  6601 format(/,'Buffer *: ',3e15.6)
689 
690 ! Snow Density
691 ! ^^^^^^^^^^^^
692  polair = 0.00
693 c #NP Polair = max(zer0, !
694 c #NP. sign(un_1,TaPole !
695 c #NP. -TaT_SV(ikl))) !
696  buf_ro = max( rosmin, ! Fallen Snow Density
697  . rosn_1+rosn_2* (tat_sv(ikl)-tf_sno) ! [kg/m3]
698  . +rosn_3*sqrt( vv__sv(ikl))) ! Pahaut (CEN)
699 c #NP VV__10 = VV__SV(ikl) !
700 c #NP. *log(10. /Z0m_SV(ikl)) !
701 c #NP. /log(za__SV(ikl)/Z0m_SV(ikl)) !
702 c #NP BufPro = max( rosMin, ! Fallen Snow Density
703 c #NP. 104. *sqrt( max( VV__10 - 6.0,0.0))) ! Kotlyakov (1961)
704  bros_n = (1. - polair) * buf_ro ! Temperate Snow
705 c #NP. + Polair * BufPro ! Polar Snow
706 
707 ! Instantaneous Density of deposited blown Snow (de Montmollin, 1978)
708 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
709 c #BS PorSno = 1.0d00 - BSnoRo
710 c #BS. / rhoIce
711 c #BS Salt_f = usthSV(ikl)/ max(eps6, us__SV(ikl))
712 c #BS Salt_f = min(Salt_f , un_1)
713 c #BS PorRef = PorSno / max(eps6,1.-PorSno)
714 c #BS. +log(Salt_f)
715 c #BS Por_BS = PorRef / (1.+PorRef)
716 c #BS ro_new = rhoIce * (1.-Por_BS)
717 c #BS ro_new = max(ro_new , BSnoRo)
718 c #BS Bros_N = Bros_N * (1.0-dsnbSV(ikl))
719 c #BS. + ro_new * dsnbSV(ikl)
720 
721 ! Instantaneous Density IF deposited blown Snow (Melted* from Canopy)
722 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
723  bros_n = bros_n * (1.0-fallok(ikl))!
724  . + 300. * fallok(ikl) !
725 
726 ! Time averaged Density of deposited blown Snow
727 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
728  brossv(ikl) =(bros_n * d_bufs !
729  . +brossv(ikl)* bufssv(ikl))!
730  . / max(eps6,bufs_n) !
731 
732 
733 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
734 ! OUTPUT for Buffer G1, G2 variables
735 ! #s0 IF (ii__SV(ikl).EQ.iwr_SV .AND. jj__SV(ikl).EQ. jwr_SV .AND.
736 ! #s0. nn__SV(ikl).EQ.nwr_SV)
737 ! #s0. write(6,6602) Buf_ro,Bros_N,BrosSV(ikl),dsnbSV(ikl)
738  6602 format('rho *: ',3e15.6,' dsnbSV: ',e15.6)
739 
740 ! S.Falling Snow Properties (computed as in SISVAT_zAg)
741 ! ^^^^^^^^^^^^^^^^^^^^^^^
742  buf_g1 = max(-g1_dsv, ! Temperate Snow
743  . min(dendr1*vv__sv(ikl)-dendr2, ! Dendricity
744  . dendr3 )) !
745  buf_g2 = min( spher4, ! Temperate Snow
746  . max(spher1*vv__sv(ikl)+spher2, ! Sphericity
747  . spher3 )) !
748  buf_g1 = (1. - polair) * buf_g1 ! Temperate Snow
749  . + polair * g1_dsv ! Polar Snow
750  buf_g2 = (1. - polair) * buf_g2 ! Temperate Snow
751  . + polair * adsdsv ! Polar Snow
752  g1 = buf_g1 ! NO Blown Snow
753  g2 = buf_g2 ! NO Blown Snow
754 
755 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
756 ! OUTPUT for Buffer G1, G2 variables
757 ! #s0 IF (ii__SV(ikl).EQ.iwr_SV .AND. jj__SV(ikl).EQ. jwr_SV .AND.
758 ! #s0. nn__SV(ikl).EQ.nwr_SV)
759 ! #s0. write(6,6603) BG1sSV(ikl),BG2sSV(ikl)
760  6603 format('G1,G2 *: ',3e15.6)
761 
762 ! S.1. Meme Type de Neige / same Grain Type
763 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
764 c #BS SameOK = max(zer0,
765 c #BS. sign(un_1, Buf_G1 *G1_dSV
766 c #BS. - eps_21 ))
767 c #BS G1same = ((1.0-dsnbSV(ikl))*Buf_G1+dsnbSV(ikl) *G1_dSV)
768 c #BS G2same = ((1.0-dsnbSV(ikl))*Buf_G2+dsnbSV(ikl) *ADSdSV)
769 ! Blowing Snow Properties: G1_dSV, ADSdSV
770 
771 ! S.2. Types differents / differents Types
772 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
773 c #BS typ__1 = max(zer0,sign(un_1,eps6-Buf_G1)) ! =1.=> Dendritic
774 c #BS zroNEW = typ__1 *(1.0-dsnbSV(ikl)) ! fract.Dendr.Lay.
775 c #BS. + (1.-typ__1) * dsnbSV(ikl) !
776 c #BS G1_NEW = typ__1 *Buf_G1 ! G1 of Dendr.Lay.
777 c #BS. + (1.-typ__1) *G1_dSV !
778 c #BS G2_NEW = typ__1 *Buf_G2 ! G2 of Dendr.Lay.
779 c #BS. + (1.-typ__1) *ADSdSV !
780 c #BS zroOLD = (1.-typ__1) *(1.0-dsnbSV(ikl)) ! fract.Spher.Lay.
781 c #BS. + typ__1 * dsnbSV(ikl) !
782 c #BS G1_OLD = (1.-typ__1) *Buf_G1 ! G1 of Spher.Lay.
783 c #BS. + typ__1 *G1_dSV !
784 c #BS G2_OLD = (1.-typ__1) *Buf_G2 ! G2 of Spher.Lay.
785 c #BS. + typ__1 *ADSdSV !
786 c #BS SizNEW = -G1_NEW *DDcdSV/G1_dSV ! Size Dendr.Lay.
787 c #BS. +(1.+G1_NEW /G1_dSV) !
788 c #BS. *(G2_NEW *DScdSV/G1_dSV !
789 c #BS. +(1.-G2_NEW /G1_dSV)*DFcdSV) !
790 c #BS SphNEW = G2_NEW /G1_dSV ! Spher.Dendr.Lay.
791 c #BS SizOLD = G2_OLD ! Size Spher.Lay.
792 c #BS SphOLD = G1_OLD /G1_dSV ! Spher.Spher.Lay.
793 c #BS Siz_av = (zroNEW*SizNEW+zroOLD*SizOLD) ! Averaged Size
794 c #BS Sph_av = min( zroNEW*SphNEW+zroOLD*SphOLD !
795 c #BS. , un_1) ! Averaged Sphericity
796 c #BS Den_av = min((Siz_av -( Sph_av *DScdSV !
797 c #BS. +(1.-Sph_av)*DFcdSV)) !
798 c #BS. / (DDcdSV -( Sph_av *DScdSV !
799 c #BS. +(1.-Sph_av)*DFcdSV)) !
800 c #BS. , un_1) !
801 c #BS DendOK = max(zer0, !
802 c #BS. sign(un_1, Sph_av *DScdSV ! Small Grains
803 c #BS. +(1.-Sph_av)*DFcdSV ! Faceted Grains
804 c #BS. - Siz_av )) !
805 ! REMARQUE: le type moyen (dendritique ou non) depend
806 ! ^^^^^^^^ de la comparaison avec le diametre optique
807 ! d'une neige recente de dendricite nulle
808 ! REMARK: the mean type (dendritic or not) depends
809 ! ^^^^^^ on the comparaison with the optical diameter
810 ! of a recent snow having zero dendricity
811 
812 c #BS G1diff =( -DendOK *Den_av
813 c #BS. +(1.-DendOK)*Sph_av) *G1_dSV
814 c #BS G2diff = DendOK *Sph_av *G1_dSV
815 c #BS. +(1.-DendOK)*Siz_av
816 c #BS G1 = SameOK *G1same
817 c #BS. +(1.-SameOK)*G1diff
818 c #BS G2 = SameOK *G2same
819 c #BS. +(1.-SameOK)*G2diff
820 
821  bg1__n =((1. - fallok(ikl))* g1 !
822  . + fallok(ikl) * 99.) ! Melted * from Canopy
823  . * d_bufs/max(eps6,d_bufs) !
824  bg2__n =((1. - fallok(ikl))* g2 !
825  . + fallok(ikl) * 30.) ! Melted * from Canopy
826  . * d_bufs/max(eps6,d_bufs) !
827 
828 ! S.Buffer Snow Properties (computed as in SISVAT_zAg)
829 ! ^^^^^^^^^^^^^^^^^^^^^^^
830  buf_g1 = bg1__n ! Falling Snow
831  buf_g2 = bg2__n ! Falling Snow
832 
833 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
834 ! OUTPUT for Buffer G1, G2 variables
835 ! #s0 IF (ii__SV(ikl).EQ.iwr_SV .AND. jj__SV(ikl).EQ. jwr_SV .AND.
836 ! #s0. nn__SV(ikl).EQ.nwr_SV)
837 ! #s0. write(6,6604) Buf_G1 ,Buf_G2 ,FallOK(ikl)
838 ! #s0. ,TvegSV(ikl)
839  6604 format('G1,G2 F*: ',3e15.6,' T__Veg: ',e15.6)
840 
841 ! S.1. Meme Type de Neige / same Grain Type
842 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
843  sameok = max(zer0,
844  . sign(un_1, buf_g1 *bg1ssv(ikl)
845  . - eps_21 ))
846  g1same = (d_bufs*buf_g1+bufssv(ikl)*bg1ssv(ikl))
847  . / max(eps6,bufs_n)
848  g2same = (d_bufs*buf_g2+bufssv(ikl)*bg2ssv(ikl))
849  . /max(eps6,bufs_n)
850 
851 ! S.2. Types differents / differents Types
852 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
853  typ__1 = max(zer0,sign(un_1,eps6-buf_g1)) ! =1.=> Dendritic
854  zronew =( typ__1 *d_bufs ! fract.Dendr.Lay.
855  . + (1.-typ__1) *bufssv(ikl)) !
856  . /max(eps6,bufs_n) !
857  g1_new = typ__1 *buf_g1 ! G1 of Dendr.Lay.
858  . + (1.-typ__1) *bg1ssv(ikl) !
859  g2_new = typ__1 *buf_g2 ! G2 of Dendr.Lay.
860  . + (1.-typ__1) *bg2ssv(ikl) !
861  zroold =((1.-typ__1) *d_bufs ! fract.Spher.Lay.
862  . + typ__1 *bufssv(ikl)) !
863  . /max(eps6,bufs_n) !
864  g1_old = (1.-typ__1) *buf_g1 ! G1 of Spher.Lay.
865  . + typ__1 *bg1ssv(ikl) !
866  g2_old = (1.-typ__1) *buf_g2 ! G2 of Spher.Lay.
867  . + typ__1 *bg2ssv(ikl) !
868  siznew = -g1_new *ddcdsv/g1_dsv ! Size Dendr.Lay.
869  . +(1.+g1_new /g1_dsv) !
870  . *(g2_new *dscdsv/g1_dsv !
871  . +(1.-g2_new /g1_dsv)*dfcdsv) !
872  sphnew = g2_new /g1_dsv ! Spher.Dendr.Lay.
873  sizold = g2_old ! Size Spher.Lay.
874  sphold = g1_old /g1_dsv ! Spher.Spher.Lay.
875  siz_av = ( zronew *siznew+zroold*sizold) ! Averaged Size
876  sph_av = min( zronew *sphnew+zroold*sphold !
877  . , un_1 ) ! Averaged Sphericity
878  den_av = min((siz_av - ( sph_av *dscdsv !
879  . +(1.-sph_av)*dfcdsv)) !
880  . / (ddcdsv - ( sph_av *dscdsv !
881  . +(1.-sph_av)*dfcdsv)) !
882  . , un_1 )!
883  dendok = max(zer0, !
884  . sign(un_1, sph_av *dscdsv ! Small Grains
885  . +(1.-sph_av)*dfcdsv ! Faceted Grains
886  . - siz_av )) !
887 ! REMARQUE: le type moyen (dendritique ou non) depend
888 ! ^^^^^^^^ de la comparaison avec le diametre optique
889 ! d'une neige recente de dendricite nulle
890 ! REMARK: the mean type (dendritic or not) depends
891 ! ^^^^^^ on the comparaison with the optical diameter
892 ! of a recent snow having zero dendricity
893 
894  g1diff =( -dendok *den_av
895  . +(1.-dendok)*sph_av) *g1_dsv
896  g2diff = dendok *sph_av *g1_dsv
897  . +(1.-dendok)*siz_av
898  g1 = sameok *g1same
899  . +(1.-sameok)*g1diff
900  g2 = sameok *g2same
901  . +(1.-sameok)*g2diff
902 
903  bg1ssv(ikl) = g1 !
904  . * bufs_n/max(eps6,bufs_n) !
905  bg2ssv(ikl) = g2 !
906  . * bufs_n/max(eps6,bufs_n) !
907 
908 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
909 ! OUTPUT for Buffer G1, G2 variables
910 ! #s0 IF (ii__SV(ikl).EQ.iwr_SV .AND. jj__SV(ikl).EQ. jwr_SV .AND.
911 ! #s0. nn__SV(ikl).EQ.nwr_SV)
912 ! #s0. write(6,6605) Buf_G1 ,typ__1
913 ! #s0. ,DendOK ,Den_av ,Sph_av ,Siz_av
914 ! #s0. ,G1same ,G1diff ,G1
915  6605 format('B1,Typ : ',2e15.6,11x,'OK,Den,Sph,Siz: ',4e15.6
916  . ,/,' ',30x ,11x,'sam,dif,G1 : ',3e15.6)
917 
918 ! Update of Buffer Layer Content & Decision about creating a new snow layer
919 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
920  bufssv(ikl) = bufs_n ! [mm w.e.]
921  nlaysv(ikl) = min(un_1, !
922  . max(zer0, ! Allows to create
923  . sign(un_1,bufssv(ikl) ! a new snow Layer
924  . -smndsv )) ! if Buffer > SMndSV
925  . *max(zer0, ! Except if * Erosion
926  . sign(un_1,half ! dominates
927  . -dsnbsv(ikl))) !
928  . +max(zer0, ! Allows to create
929  . sign(un_1,bufssv(ikl) ! a new snow Layer
930  . -smndsv*3.00))) ! is Buffer > SMndSV*3
931 
932  bdzssv(ikl) = 1.e-3*bufssv(ikl)*rhowat ! [mm w.e.] -> [m w.e.]
933  . /max(eps6,brossv(ikl))!& [m w.e.] -> [m]
934 
935 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
936 ! OUTPUT for Buffer G1, G2 variables
937 ! #s0 IF (ii__SV(ikl).EQ.iwr_SV .AND. jj__SV(ikl).EQ. jwr_SV .AND.
938 ! #s0. nn__SV(ikl).EQ.nwr_SV)
939 ! #s0. write(6,6606) BG1sSV(ikl),BG2sSV(ikl)
940 ! #s0. ,NLaysv(ikl),BdzsSV(ikl)
941  6606 format('G1,G2 N*: ',2e15.6,i15,e27.6)
942 
943  END DO
944 
945 
946 ! Snow Pack Discretization
947 ! ========================
948 
949 ! **********
950  call sisvat_zsn
951 ! **********
952 
953 ! **********
954 ! #ve call SISVAT_wEq('_zSn ',0)
955 ! **********
956 
957 ! OUTPUT in SISVAT for ikl = 1 (preferably for Stand Alone Version)
958 ! OUTPUT for SnowFall and Snow Buffer
959 ! #s2 IF (isnoSV(1) .GT. 0)
960 ! #s2. write(6,6004)isnoSV(1), dsn_SV(1) *dt__SV + BufsSV(1),
961 ! #s2. (dzsnSV(1,isn)*ro__SV(1,isn),isn=1,isnoSV(1))
962  6004 format(i3,' dsn+Buf=',f6.2,6x,'z dz *ro =',10f6.2,
963  . (/,35x,10f6.2))
964 
965 
966 ! Add a new Snow Layer
967 ! ====================
968 
969  DO ikl=1,knonv
970  isnosv(ikl) = isnosv(ikl) +nlaysv(ikl)
971  isn = isnosv(ikl)
972  dzsnsv(ikl,isn) = dzsnsv(ikl,isn) * (1-nlaysv(ikl))
973  . + bdzssv(ikl) * nlaysv(ikl)
974  tsissv(ikl,isn) = tsissv(ikl,isn) * (1-nlaysv(ikl))
975  . + min(tat_sv(ikl),tf_sno) *nlaysv(ikl)
976  ro__sv(ikl,isn) = ro__sv(ikl,isn) * (1-nlaysv(ikl))
977  . + brossv(ikl) * nlaysv(ikl)
978  eta_sv(ikl,isn) = eta_sv(ikl,isn) * (1-nlaysv(ikl)) ! + 0.
979  agsnsv(ikl,isn) = agsnsv(ikl,isn) * (1-nlaysv(ikl)) ! + 0.
980  g1snsv(ikl,isn) = g1snsv(ikl,isn) * (1-nlaysv(ikl))
981  . + bg1ssv(ikl) * nlaysv(ikl)
982  g2snsv(ikl,isn) = g2snsv(ikl,isn) * (1-nlaysv(ikl))
983  . + bg2ssv(ikl) * nlaysv(ikl)
984  istosv(ikl,isn) = istosv(ikl,isn) * (1-nlaysv(ikl))
985  . + max(zer0,sign(un_1,tat_sv(ikl)
986  . -tf_sno-eps_21)) * istdsv(2)
987  . * nlaysv(ikl)
988  bufssv(ikl) = bufssv(ikl) * (1-nlaysv(ikl))
989  nlaysv(ikl) = 0
990  END DO
991 
992 
993 ! Snow Pack Thickness
994 ! -------------------
995 
996  DO ikl=1,knonv
997  z_snsv(ikl) = 0.0
998  END DO
999  DO isn=1,nsno
1000  DO ikl=1,knonv
1001  z_snsv(ikl) = z_snsv(ikl) + dzsnsv(ikl,isn)
1002  zzsnsv(ikl,isn) = z_snsv(ikl)
1003  END DO
1004  END DO
1005 
1006 
1007 ! Diffusion of Surficial Water in the Snow Pack
1008 ! ---------------------------------------------
1009 
1010 c #sw DO isn=1,nsno
1011 c #sw DO ikl=1,knonv
1012 c #sw PorVol = 1. - ro__SV(ikl,isn) / rhoIce !
1013 c #sw PorVol = max(PorVol ,zer0 ) !
1014 c #sw rWater = ws0dSV * PorVol *rhoWat*dzsnSV(ikl,isn)
1015 c #sw. * max(zer0,
1016 c #sw. sign(un_1,rusnSV(ikl)/rhoWat-zzsnsv(ikl,isn)
1017 c #sw. +dzsnSV(ikl,isn)))
1018 c #sw rusNEW = max(rusnSV(ikl)-rWater,zer0 )
1019 c #sw rWater = rusnSV(ikl)-rusNEW
1020 c #sw rdzNEW = rWater
1021 c #sw. + ro__SV(ikl,isn) * dzsnSV(ikl,isn)
1022 c #sw etaNEW = rWater / max(eps6,rdzNEW)
1023 c #sw rusnSV(ikl) = rusNEW
1024 c #sw ro__SV(ikl,isn) = rdzNEW / max(eps6,dzsnSV(ikl,isn))
1025 c #sw eta_SV(ikl,isn) = eta_SV(ikl,isn) +etaNEW
1026 c #sw ENDDO
1027 c #sw ENDDO
1028 
1029  END IF
1030 
1031 ! OUTPUT in SISVAT for ikl = 1 (preferably for Stand Alone Version)
1032 ! OUTPUT for SnowFall and Snow Buffer
1033 ! #s2 IF (knonv>0) THEN
1034 ! #s2 IF (isnoSV(1) .GT. 0)
1035 ! #s2. write(6,6006)isnoSV(1), dsn_SV(1) *dt__SV + BufsSV(1),
1036 ! #s2. (dzsnSV(1,isn)*ro__SV(1,isn),isn=1,isnoSV(1))
1037 ! #s2 END IF
1038  6006 format(i3,' dsn+Buf=',f6.2,6x,'* dz *ro =',10f6.2,
1039  . (/,35x,10f6.2))
1040 
1041 
1042 ! Blowing Dust
1043 ! ============
1044 
1045 c #BD IF (BloMod) THEN
1046 
1047 ! ***************
1048 c #BD call SISVAT_BDu
1049 ! ***************
1050 
1051 c #BD END IF
1052 
1053 
1054 
1055 ! Soil Albedo: Soil Humidity Correction
1056 ! ==========================================
1057 
1058 ! REFERENCE: McCumber and Pielke (1981), Pielke (1984)
1059 ! ^^^^^^^^^
1060  DO ikl=1,knonv
1061  albssv(ikl) =
1062  . alb0sv(ikl) *(1.0-min(half,eta_sv( ikl,0)
1063  . /etadsv(isotsv(ikl))))
1064 ! REMARK: Albedo of Water Surfaces (isotSV=0):
1065 ! ^^^^^^ alb0SV := 2 X effective value, while
1066 ! eta_SV := etadSV
1067  END DO
1068 
1069 
1070 ! Snow Pack Optical Properties
1071 ! ============================
1072 
1073  IF (snomod) THEN
1074 
1075 ! ******
1076  call snoptp(jjtime)
1077 ! ******
1078 
1079  ELSE
1080  DO ikl=1,knonv
1081  sex_sv(ikl,1) = 1.0
1082  sex_sv(ikl,0) = 0.0
1083  albisv(ikl) = albssv(ikl)
1084  END DO
1085  END IF
1086 
1087 ! **********
1088 ! #ve call SISVAT_wEq('SnOptP',0)
1089 ! **********
1090 
1091 
1092 ! Solar Radiation Absorption and Effective Leaf Area Index
1093 ! ========================================================
1094 
1095 ! ******
1096  call vgoptp
1097 ! ******
1098 
1099 
1100 ! Surface-Canopy Emissivity
1101 ! =========================
1102 
1103  DO ikl=1,knonv
1104  lsnmsk = min( 1,isnosv(ikl))
1105  tau_sv(ikl)= exp( -lai_sv(ikl)) ! Veg Transmit.Frac.
1106  evg_sv(ikl)= emiveg*(1-lsnmsk)+emisno*lsnmsk ! Veg+Sno Emissivity
1107  eso_sv(ikl)= emisol*(1-lsnmsk)+emisno*lsnmsk ! Sol+Sno Emissivity
1108  emi_sv(ikl)=
1109  . (((emisol* tau_sv(ikl)
1110  . +emiveg*(1.0-tau_sv(ikl))) *lsmask(ikl))
1111  . + emiwat *(1-lsmask(ikl)))*(1-lsnmsk)
1112  . + emisno *lsnmsk
1113  END DO
1114 
1115 
1116 ! Soil/Vegetation Forcing/ Upward IR (INPUT, from previous time step)
1117 ! ===================================================================
1118 
1119  DO ikl=1,knonv
1120 ! #e1 Enrsvd(ikl) = - IRs_SV(ikl)
1121  irupsv(ikl) = irs_sv(ikl) * tau_sv(ikl) ! Upward IR
1122  END DO
1123 
1124 
1125 ! Turbulence
1126 ! ==========
1127 
1128 ! Latent Heat of Vaporization/Sublimation
1129 ! ---------------------------------------
1130 
1131  DO ikl=1,knonv
1132  snowat = min(isnosv(ikl),0)
1133  lx_h2o(ikl) =
1134  . (1.-snowat) * lhvh2o
1135  . + snowat *(lhsh2o * (1.-eta_sv(ikl,isnosv(ikl)))
1136  . +lhvh2o * eta_sv(ikl,isnosv(ikl)) )
1137  END DO
1138 
1139 
1140 ! Roughness Length for Momentum
1141 ! -----------------------------
1142 
1143 ! Land+Sea-Ice / Ice-free Sea Mask
1144 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1145  DO ikl=1,knonv
1146  icindx(ikl) = 0
1147  ENDDO
1148  DO isn=1,nsno
1149  DO ikl=1,knonv
1150  icindx(ikl) = max(icindx(ikl),
1151  . isn*max(0,
1152  . sign(1,
1153  . int(ro__sv(ikl,isn)-900.))))
1154  ENDDO
1155  ENDDO
1156 
1157  DO ikl=1,knonv
1158  lismsk = min(iicesv(ikl),1 )
1159  lismsk = max(lsmask(ikl),lismsk)
1160  icemsk = max(0,sign(1 ,icindx(ikl)-1) )
1161  snomsk = max(min(isnosv(ikl)-iicesv(ikl),1),0)
1162 
1163 ! Sea Roughness Length
1164 ! ^^^^^^^^^^^^^^^^^^^^^
1165  z0msea = 0.0002
1166  z0hsea = 0.000049
1167 
1168 c #zs Z0mSea = 0.0185*us__SV(ikl)*us__SV(ikl) ! Doyle MWR 130
1169 c #zs. *Grav_I ! p.3088 2e col
1170 
1171 c #ZS Z0mSea = 0.016 *us__SV(ikl)*us__SV(ikl) ! Wang MWR 129
1172 c #ZS. *Grav_I ! p.1377 (21)
1173 c #ZS. + 0.11 *A_MolV !
1174 c #ZS. / max(eps6 ,us__SV(ikl))!
1175 
1176 c #zs Z0mSea = 0.0185*us__SV(ikl)*us__SV(ikl) ! Wang MWR 129
1177 c #zs. *Grav_I ! p.1377 (21)
1178 c #zs. + 0.135 *A_MolV ! (adapted)
1179 c #zs. / max(eps6 ,us__SV(ikl))!
1180 
1181 c #ZS Z0hSea = max(0.000049, ! Wang MWR 129
1182 c #ZS. 0.20 *A_MolV ! p.1377 (22)
1183 c #ZS. / max(eps6 ,us__SV(ikl)))
1184 
1185 c #ZS Z0mSea = max(Z0mSea,eps6) !
1186 
1187 ! Land Roughness Length, Snow Contribution excluded
1188 ! ^^^^^^^^^^^^^^^^^^^^^^ Ice Contribution included
1189 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1190 ! If vegetation Seasonal Cycle described by LAI :
1191  growth =min(max(0,7-ivgtsv(ikl)),1)
1192  z0mlnd = z0mdsv(ivgtsv(ikl))*lai_sv(ikl)*growth
1193  . /laidsv
1194  . + z0mdsv(ivgtsv(ikl))* (1-growth)
1195 
1196 ! If vegetation Seasonal Cycle described by GLF only:
1197 c #CM Z0mLnd =
1198 c #CM. fallen * Z0mLnd
1199 c #CM. +(1.-fallen)* Z0mdSV(ivgtSV(ikl))*glf_sv(ikl)*growth
1200 c #CM. + Z0mdSV(ivgtSV(ikl))* (1-growth)
1201 
1202 ! Land Roughness Length, Influence of the Masking by Snow
1203 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1204  z0mlnd =max( z0mlnd ,
1205  . z0mdsv(0)*(1-icemsk)
1206  . +z0_ice * icemsk )
1207  z0mlnd = z0mlnd
1208  . -(zzsnsv(ikl, isnosv(ikl))
1209  . -zzsnsv(ikl,max(icindx(ikl),0)))/7.
1210  z0mlnd =max( z0mlnd , 5.e-5 ) ! Min set := Z0 on *
1211 ! Roughness disappears under Snow
1212 ! Assumption Height/Roughness Length = 7 is used
1213 
1214 ! Z0 Smooth Regime over Snow (Andreas 1995, CRREL Report 95-16, p. 8)
1215 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1216  z0m_nu = 5.e-5 ! z0s~(10-d)*exp(-vonKrm/sqrt(1.1e-03))
1217 
1218 ! Z0 Saltat.Regime over Snow (Gallee et al., 2001, BLM 99 (19) p.11)
1219 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1220  u2star = us__sv(ikl) *us__sv(ikl)
1221  z0mbsn = u2star *0.536e-3 - 61.8e-6
1222  z0mbsn = max(z0mbs0 ,z0mbsn)
1223 
1224 ! Z0 Smooth + Saltat. Regime
1225 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1226  z0ensv(ikl) = z0m_nu
1227  . + z0mbsn
1228 
1229 ! Rough Snow Surface Roughness Length (Typical Value)
1230 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1231  z0m_sn = 25.e-5 ! Andreas 1995, CRREL Report 95-16, fig.1&p.2
1232  ! z0r~(10-d)*exp(-vonKrm/sqrt(1.5e-03))-5.e-5
1233 c #TZ Z0m_Sn = 5.e-5 ! Typical Tuning in polar mesoscale models
1234 
1235 ! Rough Snow Surface Roughness Length (Variable Sastrugi Height)
1236 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1237  a_fact = 1.0000 ! Andreas et al., 2004, p.4
1238  ! ams.confex.com/ams/pdfpapers/68601.pdf
1239 
1240 c #SZ Z0Sa_N = (us__SV(ikl) -0.2)*0.0050 ! 0050=0.003/0.6
1241 c #SZ Z0SaSi = max(zer0,sign(un_1,Z0Sa_N)) ! 0100=TUNING
1242 c #SZ Z0Sa_N = max(zer0, Z0Sa_N)
1243 c #SZ Z0SaSV(ikl) =
1244 c #SZ. max(Z0SaSV(ikl) ,Z0SaSV(ikl)
1245 c #SZ. + Z0SaSi*(Z0Sa_N-Z0SaSV(ikl))*exp(-dt__SV/43200.))
1246 c #SZ. - min(dz0_SV(ikl) , Z0SaSV(ikl))
1247 
1248 c #SZ A_Fact = Z0SaSV(ikl) * 5.0/0.15 ! A=5 if h~10cm
1249 ! CAUTION: The influence of the sastrugi direction is not yet included
1250 
1251 c #SZ Z0m_Sn = Z0SaSV(ikl) !
1252 c #SZ. - Z0m_nu !
1253 
1254 ! Z0 (Shao & Lin, 1999, BLM 91 (46) p.222)
1255 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1256 ! Z0 Saltat.Regime over Snow (Shao & Lin, 1999, BLM 91 (46) p.222)
1257 c #ZN sqrrZ0 = usthSV(ikl)/max( us__SV(ikl),0.001)
1258 c #ZN sqrrZ0 = min( sqrrZ0 ,0.999)
1259 c #ZN Z0mBSn = 0.55 *0.55 *exp(-sqrrZ0 *sqrrZ0)
1260 c #ZN. *us__SV(ikl)* us__SV(ikl)*Grav_I*0.5
1261 
1262 ! Z0 Smooth + Saltat. Regime (Shao & Lin, 1999, BLM 91 (46) p.222)
1263 c #ZN Z0enSV(ikl) = (Z0m_nu ** sqrrZ0 )
1264 c #ZN. * (Z0mBSn **(1.-sqrrZ0))
1265 c #ZN Z0enSV(ikl) = max(Z0enSV(ikl), Z0m_nu)
1266 
1267 ! Z0 (Andreas etAl., 2004
1268 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^ ams.confex.com/ams/pdfpapers/68601.pdf)
1269 ! Z0 Smooth Regime over Snow (Andreas etAl., 2004
1270 c #ZA Z0m_nu = 0.135*A_MolV / max(us__SV(ikl) , eps6)
1271 
1272 ! Z0 Saltat.Regime over Snow (Andreas etAl., 2004
1273 c #ZA Z0mBSn = 0.035*u2star *Grav_I
1274 
1275 ! Z0 Smooth + Saltat. Regime (Andreas etAl., 2004
1276 c #ZA Z0enSV(ikl) = Z0m_nu
1277 c #ZA. + Z0mBSn
1278 
1279 ! Z0 Rough Regime over Snow (Andreas etAl., 2004
1280 ! (.NOT. used by Erosion) ams.confex.com/ams/pdfpapers/68601.pdf)
1281 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1282 c #ZA Z0m_90 =(10.-0.025*VVs_SV(ikl)/5.)
1283 c #ZA. *exp(-0.4/sqrt(.0020+.00001*max(0.,VVs_SV(ikl)-5.)))
1284 c #ZA Z0m_Sn = DDs_SV(ikl)* Z0m_90 / 45.
1285 c #ZA. - DDs_SV(ikl)*DDs_SV(ikl)* Z0m_90 /(90.*90.)
1286 ! #za u2star = (us__SV(ikl) -0.1800) / 0.1
1287 ! #za Z0m_Sn =A_Fact*Z0mBSn *exp(-u2star*u2star)
1288 
1289 ! Z0 Rough Regime over Snow (Andreas etAl., 2004
1290 c #ZA u2star = (us__SV(ikl) -0.1800) / 0.1
1291 c #ZA Z0m_Sn =A_Fact*Z0mBSn *exp(-u2star*u2star)
1292 
1293 ! Z0 Smooth + Saltat. Regime + Rough Regime over Snow (Andreas etAl., 2004)
1294 c #ZA Z0enSV(ikl) = Z0enSV(ikl)
1295 c #ZA. + Z0m_Sn
1296 
1297 ! Z0 over Snow (instantaneous or time average)
1298 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1299  z0e_sv(ikl) = z0ensv(ikl)
1300 c #ZM Z0e_SV(ikl) = Z0emSV(ikl)
1301 
1302 ! Momentum Roughness Length
1303 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^ ! Contribution of
1304  z0mnsv(ikl) = z0mlnd ! Vegetation Form
1305  . + (z0m_sn ! Sastrugi Form
1306  . + z0ensv(ikl)) *snomsk ! Snow Erosion
1307 
1308 ! Mom. Roughness Length, Discrimination among Ice/Land and Ice-Free Ocean
1309 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1310  z0mnsv(ikl) = z0mnsv(ikl) *lismsk ! Ice and Land
1311  . +z0msea *(1-lismsk) ! Ice-Free Ocean
1312 c #OR. +Z0roSV(ikl) ! Subgrid Topogr.
1313 
1314 ! GIS Roughness Length
1315 ! ^^^^^^^^^^^^^^^^^^^^^
1316 c #GL Z0mnSV(ikl) =
1317 c #GL. (1-LSmask(ikl)) * Z0mnSV(ikl)
1318 c #GL. + LSmask(ikl) * max(Z0mnSV(ikl),max(Z0_GIM,
1319 c #GL. Z0_GIM+
1320 c #GL. (0.0032-Z0_GIM)*(ro__SV(ikl,isnoSV(ikl))-600.) !
1321 c #GL. /(920.00 -600.))) !
1322 
1323 ! Mom. Roughness Length, Instantaneous OR Box Moving Average in Time
1324 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1325  z0m_sv(ikl) = z0mnsv(ikl) ! Z0mnSV instant.
1326 c #ZM Z0m_SV(ikl) = Z0mmSV(ikl) ! Z0mnSV Average
1327 
1328 ! Corrected Threshold Friction Velocity before Erosion ! Marticorena and
1329 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ! Bergametti 1995
1330 c #BS Z0e_SV(ikl) = min(Z0m_SV(ikl),Z0e_SV(ikl)) !
1331 c #MB f_eff= log(0.35*(0.1 /Z0e_SV(ikl))**0.8) ! JGR 100
1332 c #MB f_eff=1.-(log( Z0m_SV(ikl)/Z0e_SV(ikl) ))! (20) p. 16420
1333 c #MB. /(max( f_eff ,eps6 ))! p.16426 2nd ?
1334 c #MB f_eff= max( f_eff ,eps6 )! CONTROL
1335 ! #mB f_eff=2.0*max( f_eff ,eps6 )! TUNING
1336 c #MB f_eff= min( f_eff ,un_1 )!
1337 c #MB usthSV(ikl) = usthSV(ikl)/f_eff !
1338 
1339 
1340 ! Roughness Length for Scalars
1341 ! ----------------------------
1342 
1343  z0hnsv(ikl) = z0mnsv(ikl)/ 7.4
1344 c #SH Z0hnSV(ikl) = Z0mnSV(ikl)/100.0
1345 ! Z0h = Z0m /100.0 over the Sahel
1346 ! (Taylor & Clark, QJRMS 127,p864)
1347 
1348 c #RN rstar = Z0mnSV(ikl) * us__SV(ikl) / A_MolV
1349 c #RN rstar = max(eps6,min(rstar,R_1000))
1350 c #RN alors = log(rstar)
1351 c #RN rstar0 = 1.250e0 * max(zer0,sign(un_1,0.135e0 - rstar))
1352 c #RN. +(1. - max(zer0,sign(un_1,0.135e0 - rstar)))
1353 c #RN. *(0.149e0 * max(zer0,sign(un_1,2.500e0 - rstar))
1354 c #RN. + 0.317e0
1355 c #RN. *(1. - max(zer0,sign(un_1,2.500e0 - rstar))))
1356 c #RN rstar1 = 0. * max(zer0,sign(un_1,0.135e0 - rstar))
1357 c #RN. +(1. - max(zer0,sign(un_1,0.135e0 - rstar)))
1358 c #RN. *(-0.55e0 * max(zer0,sign(un_1,2.500e0 - rstar))
1359 c #RN. - 0.565
1360 c #RN. *(1. - max(zer0,sign(un_1,2.500e0 - rstar))))
1361 c #RN rstar2 = 0. * max(zer0,sign(un_1,0.135e0 - rstar))
1362 c #RN. +(1. - max(zer0,sign(un_1,0.135e0 - rstar)))
1363 c #RN. *(0. * max(zer0,sign(un_1,2.500e0 - rstar))
1364 c #RN. - 0.183
1365 c #RN. *(1.00 - max(zer0,sign(un_1,2.500e0 - rstar))))
1366 c #RN Z0hnSV(ikl) = max(zer0
1367 c #RN. , sign(un_1,zzsnsv(ikl,isnoSV(ikl))-eps6))
1368 c #RN. * exp(rstar0+rstar1*alors+rstar2*alors*alors)
1369 c #RN. * 0.001e0 + Z0hnSV(ikl) * ( 1. - max(zer0
1370 c #RN. , sign(un_1,zzsnsv(ikl,isnoSV(ikl))-eps6)))
1371 
1372  z0hnsv(ikl) = z0hsea *(1-lismsk) ! Ice-free Ocean
1373  . + z0hnsv(ikl) * lismsk ! Ice and Land
1374 
1375  z0h_sv(ikl) = z0hnsv(ikl)
1376 c #ZM Z0h_SV(ikl) = Z0hmSV(ikl)
1377 
1378 
1379 ! Contributions of the Roughness Lenghths to the neutral Drag Coefficient
1380 ! -----------------------------------------------------------------------
1381 
1382 c #MT Z0m_SV(ikl) = max(2.0e-6 ,Z0m_SV(ikl)) ! Min Z0_m (Garrat Scheme)
1383  sqrcm0(ikl) = log(za__sv(ikl)/z0m_sv(ikl))
1384  sqrch0(ikl) = log(za__sv(ikl)/z0h_sv(ikl))
1385 
1386 ! OUTPUT of SnowFall, Roughness Length and Drag Coefficients
1387 ! #sf IF (ikl.EQ.1) write(6,6661) dsn_SV(ikl),us__SV(ikl),Z0SaSi
1388 ! #sf. ,Z0Sa_N,Z0SaSV(ikl),Z0m_Sn,Z0m_SV(ikl)
1389  6661 format(20x,7f9.6)
1390 
1391 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
1392 ! OUTPUT of Roughness Length and Drag Coefficients
1393 ! #sz IF (ii__SV(ikl).EQ.iwr_SV .AND. jj__SV(ikl).EQ. jwr_SV .AND.
1394 ! #sz. nn__SV(ikl).EQ.nwr_SV)
1395 ! #sz. write(6,6600) za__SV(ikl) , Z0m_SV(ikl)
1396 ! #sz. ,sqrCm0(ikl) , za__SV(ikl)/Z0m_SV(ikl)
1397 ! #sz. ,Z0SaSV(ikl) , Z0h_SV(ikl)
1398 ! #sz. ,sqrCh0(ikl) , za__SV(ikl)/Z0h_SV(ikl)
1399  6600 format(/,' ** SISVAT *0 '
1400  . ,' za__SV = ',e12.4,' Z0m_SV = ',e12.4
1401  . ,' sqrCm0 = ',e12.4,' Za/Z0m = ',e12.4
1402  . ,/,' '
1403  . ,' Z0SaSV = ',e12.4,' Z0h_SV = ',e12.4
1404  . ,' sqrCh0 = ',e12.4,' Za/Z0h = ',e12.4)
1405 
1406 
1407 ! Vertical Stability Correction
1408 ! -----------------------------
1409 
1410 ! Surface/Canopy Temperature
1411 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1412  tsrfsv(ikl) = sigmsv(ikl) * tvegsv(ikl)
1413  . + (1. - sigmsv(ikl))* tsissv(ikl,isnosv(ikl))
1414  END DO
1415 
1416 ! Aerodynamic Resistance
1417 ! ^^^^^^^^^^^^^^^^^^^^^^
1418 c #CP IF (SnoMod.AND.ColPrt) THEN
1419 
1420 ! **********
1421 c #CP call ColPrt_SBL
1422 ! **********
1423 
1424 c #CP ELSE
1425 c #MT IF (Garrat) THEN
1426 
1427 ! **********
1428 c #MT call SISVAT_SBL
1429 ! **********
1430 
1431 c #MT ELSE
1432 
1433 ! **********
1434  call sisvatesbl
1435 ! **********
1436 
1437 c #MT END IF
1438 c #CP END IF
1439 
1440 
1441 ! Canopy Energy Balance
1442 ! =====================
1443 
1444 ! **********
1445  call sisvat_tvg
1446 ! #e1. (ETVg_d)
1447 ! **********
1448 
1449 
1450 ! Surface/Canopy Temperature
1451 ! ==========================
1452 
1453  DO ikl=1,knonv
1454  tsrfsv(ikl) = sigmsv(ikl) * tvegsv(ikl)
1455  . + (1. - sigmsv(ikl))* tsissv(ikl,isnosv(ikl))
1456  END DO
1457 
1458 
1459 ! Soil Energy Balance
1460 ! =====================
1461 
1462 ! **********
1463  call sisvat_tso
1464 ! #e1. (ETSo_0,ETSo_1,ETSo_d)
1465 ! **********
1466 
1467 ! **********
1468 ! #ve call SISVAT_wEq('_TSo ',0)
1469 ! **********
1470 
1471 
1472 ! Canopy Water Balance
1473 ! =====================
1474 
1475 ! Soil Water Potential
1476 ! ------------------------
1477 
1478  DO isl=-nsol,0
1479  DO ikl=1,knonv
1480  ist = isotsv(ikl) ! Soil Type
1481  psi_sv(ikl,isl) = psidsv(ist) ! DR97, Eqn.(3.34)
1482  . *(etadsv(ist) /max(eps6,eta_sv(ikl,isl))) !
1483  . **bchdsv(ist) !
1484 
1485 
1486 ! Soil Hydraulic Conductivity
1487 ! ---------------------------
1488 
1489  khydsv(ikl,isl) = s2__sv(ist) ! DR97, Eqn.(3.35)
1490  . *(eta_sv(ikl,isl)**(2.*bchdsv(ist)+3.)) !
1491  END DO
1492  END DO
1493 
1494 ! **********
1495  call sisvat_qvg
1496 ! **********
1497 
1498 
1499 ! OUTPUT/Verification: H2O Conservation: Vegetation Forcing
1500 ! #m0 DO ikl=1,knonv
1501 ! #m0 Watsvd(ikl) = (Watsvd(ikl) ! Canopy Precip. IN
1502 ! #m0. -drr_SV(ikl) ! Canopy Precip. OUT
1503 ! #m0. -Evp_sv(ikl))* dt__SV ! Canopy Water Evap.
1504 ! #m0 END DO
1505 
1506 
1507 ! Melting / Refreezing in the Snow Pack
1508 ! =====================================
1509 
1510  IF (snomod) THEN
1511 
1512 ! **********
1513  call sisvat_qsn
1514  . (
1515 ! #e1. EqSn_0,EqSn_1,EqSn_d
1516 ! #m1. ,SIsubl,SImelt,SIrnof
1517  . )
1518 ! **********
1519 
1520 ! **********
1521 ! #ve call SISVAT_wEq('_qSn ',0)
1522 ! **********
1523 
1524 ! OUTPUT in SISVAT for ikl = 1 (preferably for Stand Alone Version)
1525 ! OUTPUT for SnowFall and Snow Buffer
1526 ! #s2 IF (knonv>0) THEN
1527 ! #s2 IF (isnoSV(1) .GT. 0)
1528 ! #s2. write(6,6007)isnoSV(1), dsn_SV(1) *dt__SV + BufsSV(1),
1529 ! #s2. (dzsnSV(1,isn)*ro__SV(1,isn),isn=1,isnoSV(1))
1530 ! #s2 END IF
1531  6007 format(i3,' dsn+Buf=',f6.2,6x,'q dz *ro =',10f6.2,
1532  . (/,35x,10f6.2))
1533 
1534 
1535 ! Snow Pack Thickness
1536 ! -------------------
1537 
1538  DO ikl=1,knonv
1539  z_snsv(ikl) = 0.0
1540  END DO
1541  DO isn=1,nsno
1542  DO ikl=1,knonv
1543  z_snsv(ikl) = z_snsv(ikl) + dzsnsv(ikl,isn)
1544  zzsnsv(ikl,isn) = z_snsv(ikl)
1545  END DO
1546  END DO
1547 
1548 
1549 ! Energy in Excess is added to the first Soil Layer
1550 ! -------------------------------------------------
1551 
1552  DO ikl=1,knonv
1553  z_snsv(ikl) = max(zer0,
1554  . sign(un_1,eps6-z_snsv(ikl)))
1555  tsissv(ikl,0) = tsissv(ikl,0) + eexcsv(ikl)
1556  . /(rocssv(isotsv(ikl))
1557  . +rcwdsv*eta_sv(ikl,0))
1558  eexcsv(ikl) = 0.
1559  END DO
1560 
1561 
1562 ! OUTPUT/Verification: * Mass Conservation: Mass (below the Canopy) and Forcing
1563 ! #m1 DO ikl=1,knonv
1564 ! #m1 SIWa_f(ikl) =(drr_SV(ikl) + dsn_SV(ikl)) *dt__SV ![mm w.e.]
1565 ! #m1 SIWe_f(ikl) = dbs_SV(ikl) !
1566 ! #m1 SIWm_1(ikl) = BufsSV(ikl) + HFraSV(ikl) *rhoIce !
1567 ! #m1 DO isn=1,nsno !
1568 ! #m1 SIWm_1(ikl) = SIWm_1(ikl) + dzsnSV(ikl,isn)*ro__SV(ikl,isn)!
1569 ! #m1 END DO !
1570 ! #m1 END DO !
1571 
1572  END IF
1573 
1574 
1575 ! Soil Water Balance
1576 ! =====================
1577 
1578 ! **********
1579  call sisvat_qso
1580 ! #m0. (Wats_0,Wats_1,Wats_d)
1581 ! **********
1582 
1583 
1584 ! Surface/Canopy Fluxes
1585 ! =====================
1586 
1587  DO ikl=1,knonv
1588  irdwsv(ikl)=tau_sv(ikl) *ird_sv(ikl)*eso_sv(ikl) ! Downward IR
1589  . +(1.0-tau_sv(ikl))*ird_sv(ikl)*evg_sv(ikl) !
1590  irupsv(ikl) = irupsv(ikl) ! Upward IR
1591  . + 0.5 *irv_sv(ikl) * (1.-tau_sv(ikl))!
1592  iru_sv(ikl) = -irupsv(ikl) ! Upward IR
1593  . +ird_sv(ikl) ! (effective)
1594  . -irdwsv(ikl) ! (positive)
1595 
1596  tbr_sv(ikl) =sqrt(sqrt(iru_sv(ikl)/stefbo)) ! Brightness
1597 ! ! Temperature
1598  uts_sv(ikl) = (hsv_sv(ikl) +hss_sv(ikl)) ! u*T*
1599  . /(rht_sv(ikl) *cpdair) !
1600  uqs_sv(ikl) = (hlv_sv(ikl) +hls_sv(ikl)) ! u*q*
1601  . /(rht_sv(ikl) *lhvh2o) !
1602 
1603 ! Surface/Canopy Temperature
1604 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1605  tsrfsv(ikl) = sigmsv(ikl) * tvegsv(ikl)
1606  . + (1. - sigmsv(ikl))* tsissv(ikl,isnosv(ikl))
1607  END DO
1608 
1609 
1610 ! Snow Pack Properties (sphericity, dendricity, size)
1611 ! ===================================================
1612 
1613  IF (snomod) THEN
1614 
1615 ! **********
1616  call sisvat_gsn
1617 ! **********
1618 
1619 ! **********
1620 ! #ve call SISVAT_wEq('_GSn ',0)
1621 ! **********
1622 
1623 
1624 ! Surficial Water Freezing, including that of a Water Surface (isotSV=0)
1625 ! ======================================================================
1626 
1627 
1628  END IF
1629 
1630 
1631 ! OUTPUT
1632 ! ======
1633 
1634 c #E0 DO ikl=1,knonv
1635 c #E0 IF (lwriSV(ikl).ne.0) THEN
1636 c #E0 noUNIT = no__SV(lwriSV(ikl))
1637 c #E0 write(noUNIT,5001)
1638 c #E0. (SoSosv(ikl)+SoCasv(ikl))*sol_SV(ikl),
1639 c #E0. IRdwsv(ikl),IRu_SV(ikl),
1640 c #E0. HSv_sv(ikl)+HSs_sv(ikl),
1641 c #E0. HLv_sv(ikl)+HLs_sv(ikl), TaT_SV(ikl),
1642 c #E0. dsn_SV(ikl)*3.6e3, drr_SV(ikl)*3.6e3,
1643 c #E0. SoSosv(ikl) *sol_SV(ikl),
1644 c #E0. IRv_sv(ikl) *0.5,
1645 c #E0. HSv_sv(ikl),HLv_sv(ikl), TvegSV(ikl),
1646 c #E0. SoCasv(ikl) *sol_SV(ikl),
1647 c #E0. HSs_sv(ikl),HLs_sv(ikl), TsisSV(ikl,isnoSV(ikl))
1648  5001 format(
1649  . ' |Net Solar| IR Down | IR Up | HS/Dwn=+|',
1650  . ' HL/Dwn=+| Temper. | | Snow | Rain |',
1651  . /,' | [W/m2] | [W/m2] | [W/m2] | [W/m2] |',
1652  . ' [W/m2] | [K] | | [mm/h] | [mm/h] |',
1653  . /,' -------+',7('---------+'),2('--------+'),
1654  . /,' SISVAT |',f8.1,' |',f8.1,' |',f8.1,' |',f8.1,' |',
1655  . f8.1,' |A',f7.2,' |', 8x ,' |',2(f7.2,' |'),
1656  . /,' Canopy |',f8.1,' |', 8x ,' |',f8.1,' |',f8.1,' |',
1657  . f8.1,' |',f8.2,' |', 8x ,' |',2( 7x ,' |')
1658  . /,' Soil |',f8.1,' |', 8x ,' |', 8x ,' |',f8.1,' |',
1659  . f8.1,' |',f8.2,' |', 8x ,' |',2( 7x ,' |'))
1660 
1661 
1662 ! OUTPUT/Verification: Energy/Water Budget
1663 ! #e1 Enrsvd(ikl) = Enrsvd(ikl) ! Up Surf. IR
1664 ! #e1. + IRs_SV(ikl) ! Offset
1665 ! #e1. + ( (SoSosv(ikl) ! Net Solar
1666 ! #e1. +SoCasv(ikl)) *sol_SV(ikl) !
1667 ! #e1. + IRdwsv(ikl) ! Downward IR
1668 ! #e1. + IRupsv(ikl) ! Upward IR
1669 ! #e1. + HSv_sv(ikl)+HSs_sv(ikl) ! Sensible
1670 ! #e1. + HLv_sv(ikl)+HLs_sv(ikl)) ! Latent
1671 
1672 ! #e1 write(noUNIT,5002) Enrsvd(ikl),
1673 ! #e1. ETSo_0(ikl), ETSo_d(ikl),
1674 ! #e1. ETSo_0(ikl)+ ETSo_d(ikl), ETSo_1(ikl),
1675 ! #e1. EqSn_0(ikl) /dt__SV,
1676 ! #e1. EqSn_d(ikl) /dt__SV,
1677 ! #e1. (EqSn_1(ikl)- EqSn_0(ikl)- EqSn_d(ikl))/dt__SV,
1678 ! #e1. EqSn_1(ikl) /dt__SV
1679  5002 format(
1680  . ' -----------------+-------------------+', !
1681  . '-----------------+-+-----------------+', !
1682  . '-------------------+', !
1683  . /,' SOIL/SNOW/VEGET. | |', !
1684  . ' Power, Forcing | |', ! Enrsvd
1685  . ' |', !
1686 ! #el. /,' -----------------+-------------------+', !
1687 ! #el. '-----------------+-------------------+', !
1688 ! #el. '-------------------+', !
1689  . /,' |', 11x ,' |', !
1690  . f9.2,' [W/m2] |', 11x ,' |', ! Enrsvd
1691  . 11x ,' |', !
1692  . /,' -----------------+-------------------+', !
1693  . '-----------------+-------------------+', !
1694  . '-------------------+', !
1695  . /,' SOIL/SNOW (TSo) | Energy/dt, Time 0 |', ! ETSo_0
1696  . ' Power, Forcing | Sum Tim.0+Forc. |', ! ETSo_d/ETSo_0+d
1697  . ' Energy/dt, Time 1 |', ! ETSo_1
1698 ! #el. /,' -----------------+-------------------+', !
1699 ! #el. '-----------------+-------------------+', !
1700 ! #el. '-------------------+', !
1701  . /,' |', f11.2,' [W/m2] |', ! ETSo_0
1702  . f9.2,' [W/m2] |', f11.2,' [W/m2] |', ! ETSo_d/ETSo_0+d
1703  . f11.2,' [W/m2] |', ! ETSo_1
1704  . /,' -----------------+-------------------+', !
1705  . '-----------------+-------------------+', !
1706  . '-------------------+', !
1707  . /,' SNOW (qSn) | Energy/dt, Time 0 |', ! EqSn_0/dt
1708  . ' Power, Excess | D(Tim.1-0-Forc.)|', ! EqSn_d/dt, 1-0-d
1709  . ' Energy/dt, Time 1 |', ! EqSn_1/dt
1710 ! #el. /,' -----------------+-------------------+', !
1711 ! #el. '-----------------+-------------------+', !
1712 ! #el. '-------------------+', !
1713  . /,' |', f12.2, '[W/m2] |', ! EqSn_0/dt
1714  . f9.2,' [W/m2] |', f11.2,' [W/m2] |', ! EqSn_d/dt, 1-0-d
1715  . f12.2, '[W/m2] | ', ! EqSn_1/dt
1716  . /,' -----------------+-------------------+', !
1717  . '-----------------+-------------------+', !
1718  . '-------------------+') !
1719 
1720 ! #e1 EnsBal = ETSo_1(ikl)-(ETSo_0(ikl)+Enrsvd(ikl))
1721 ! #e1 EnvBal = Enrsvd(ikl)- ETVg_d(ikl)
1722 ! #e1 IF (abs(EnsBal).gt.5.e-1
1723 ! #e2. .OR.lwriSV(ikl).eq. 2
1724 ! #e1. ) THEN
1725 ! #e1 write(6,6001) daHost,i___SV(lwriSV(ikl)),
1726 ! #e1. j___SV(lwriSV(ikl)),
1727 ! #e1. n___SV(lwriSV(ikl)),
1728 ! #e1. ETSo_1(ikl),ETSo_0(ikl),ETSo_d(ikl),
1729 ! #e1. ETSo_1(ikl)-ETSo_0(ikl)-ETSo_d(ikl),
1730 ! #e1. Enrsvd(ikl),ETVg_d(ikl),ETSo_d(ikl),
1731 ! #e1. Enrsvd(ikl)-ETVg_d(ikl)-ETSo_d(ikl)
1732  6001 format(a18,3i4,' (EB1' ,f15.6,
1733  . ') - [(EB0 ',f15.6,')',
1734  . /,55x,'+(ATM->Snow/Soil',f15.6,')] ',
1735  . '= EBAL' ,f15.6,' [W/m2]',
1736  . /,55x,' (ATM->SISVAT' ,f18.6,
1737  . /,55x,'- Veg. ImBal.', f18.6,') ',
1738  . /,55x,'- ATM->SnoSol', f18.6,') ',
1739  . '= ????' ,f15.6,' [W/m2]')
1740 ! #e1 noEBal = noEBal + 1
1741 ! #e2 noEBal = noEBal - 1
1742 ! #e1 IF (noEBal.GE. 10) stop 'TOO MUCH ENERGY IMBALANCES'
1743 ! #e1 END IF
1744 
1745 
1746 ! OUTPUT/Verification: * Mass Conservation: Budget [mm w.e.]
1747 ! #m1 write(noUNIT,5010)
1748 ! #m1. SIWm_0(ikl), SIWa_i(ikl)-SIWa_f(ikl)
1749 ! #m1. ,SIWm_0(ikl)+ SIWa_i(ikl)-SIWa_f(ikl)
1750 ! #m1. +SIWe_i(ikl)-SIWe_f(ikl)
1751 ! #m1. +SIsubl(ikl)
1752 ! #m1. -SImelt(ikl)
1753 ! #m1. -SIrnof(ikl)
1754 ! #m2. +SIvAcr(ikl)
1755 ! #m1. ,SIWm_1(ikl), SIWe_i(ikl)-SIWe_f(ikl)
1756 ! #m1. , SIsubl(ikl)
1757 ! #m1. , -SImelt(ikl)
1758 ! #m1. , -SIrnof(ikl)
1759 ! #m2. , SIvAcr(ikl)
1760  5010 format(' SNOW | Snow, Time 0 |',
1761  . ' Snow, Forcing | Sum |',
1762  . ' Snow, Time 1 |',
1763 ! #el. /,' -----------------+-------------------+',
1764 ! #el. '-----------------+-------------------+',
1765 ! #el. '-------------------+',
1766  . /,' |', f13.3,' [mm] |',
1767  . ' A', f9.3,' [mm] |', f13.3,' [mm] |',
1768  . f13.3,' [mm] |',
1769  . /,' |', 13x ,' |',
1770  . ' E', f9.3,' [mm] |', 13x ,' |',
1771  . 13x ,' |',
1772  . /,' |', 13x ,' |',
1773  . ' S', f9.3,' [mm] |', 13x ,' |',
1774  . 13x ,' |',
1775  . /,' |', 13x ,' |',
1776  . '(M', f9.3,' [mm])| (included in A) |',
1777  . 13x ,' |',
1778  . /,' |', 13x ,' |',
1779  . ' R', f9.3,' [mm] |', 13x ,' |',
1780  . 13x ,' |',
1781 ! #m2. /,' |', 13x ,' |',
1782 ! #m2. ' O', f9.3,' [mm] |', 13x ,' |',
1783 ! #m2. 13x ,' |',
1784  . /,' -----------------+-------------------+',
1785  . '-----------------+-------------------+',
1786  . '-------------------+')
1787 ! #m1 SnoBal = SIWm_1(ikl)-(SIWm_0(ikl)
1788 ! #m1. +SIWa_i(ikl)-SIWa_f(ikl)
1789 ! #m1. +SIWe_i(ikl)-SIWe_f(ikl))
1790 ! #m1. -SIsubl(ikl)
1791 ! #m1. +SIrnof(ikl)
1792 ! #m2. -SIvAcr(ikl)
1793 ! #m1 IF (abs(SnoBal).gt.eps6) THEN
1794 ! #m1 write(6,6010) daHost,i___SV(lwriSV(ikl)),
1795 ! #m1. j___SV(lwriSV(ikl)),
1796 ! #m1. n___SV(lwriSV(ikl)),
1797 ! #m1. SIWm_1(ikl),SIWm_0(ikl),
1798 ! #m1. SIWa_i(ikl),SIWa_f(ikl),
1799 ! #m1. SIWe_i(ikl),SIWe_f(ikl),
1800 ! #m1. SIsubl(ikl),SImelt(ikl),
1801 ! #m2. SIrnof(ikl),SIvAcr(ikl),
1802 ! #m1. SnoBal
1803  6010 format(a18,3i4,' (MB1' ,f12.6,
1804  . ') - [(MB0 ',f12.6, 15x,')',
1805  . /,51x,'+(ATM Forcing',f12.6,' - ',f12.6,')',
1806  . /,51x,'+(BLS Forcing',f12.6,' - ',f12.6,')',
1807  . /,51x,'-(Depo/Sublim',f12.6, 15x,')',
1808  . /,51x,' !Melting ',f12.6,' included in A!',
1809  . /,51x,'+(Run OFF ',f12.6, 15x,')',
1810 ! #m2. /,51x,'-(Sea-Ice Acr',f12.6, 15x,')',
1811  . /,29x,'= *BAL' ,f12.6, ' [mm w.e.]')
1812 ! #m1 noSBal = noSBal + 1
1813 ! #m1 IF (noSBal.GE. 10) stop 'TOO MUCH SNOW MASS IMBALANCE'
1814 ! #m1 END IF
1815 
1816 
1817 ! OUTPUT/Verification: H2O Conservation: Water Budget
1818 ! #m0 Watsv0(ikl) = Watsv0(ikl) ! Canopy Water Cont.
1819 ! #m0. + Wats_0(ikl) ! Soil Water Cont.
1820 ! #m0 Watsvd(ikl) = Watsvd(ikl) ! Canopy Forcing
1821 ! #m0. + Wats_d(ikl) ! Soil Forcing
1822 
1823 ! #m0 write(noUNIT,5003)
1824 ! #m0. Wats_0(ikl), Wats_d(ikl),
1825 ! #m0. Wats_0(ikl)+ Wats_d(ikl), Wats_1(ikl),
1826 ! #m0. Watsv0(ikl), Watsvd(ikl),
1827 ! #m0. Watsv0(ikl)+ Watsvd(ikl), Wats_1(ikl)
1828 ! #m0. +rrCaSV(ikl)
1829  5003 format(' SOIL/SNOW (qSo) | Water, Time 0 |',
1830  . ' Water, Forcing | Sum |',
1831  . ' Water, Time 1 |',
1832 ! #el. /,' -----------------+-------------------+',
1833 ! #el. '-----------------+-------------------+',
1834 ! #el. '-------------------+',
1835  . /,' |', f13.3,' [mm] |',
1836  . f11.3,' [mm] |', f13.3,' [mm] |',
1837  . f13.3,' [mm] |',
1838  . /,' -----------------+-------------------+',
1839  . '-----------------+-------------------+',
1840  . '-------------------+',
1841  . /,' SOIL/SNOW/VEGET. | Water, Time 0 |',
1842  . ' Water, Forcing | Sum |',
1843  . ' Water, Time 1 |',
1844 ! #el. /,' -----------------+-------------------+',
1845 ! #el. '-----------------+-------------------+',
1846 ! #el. '-------------------+',
1847  . /,' |', f13.3,' [mm] |',
1848  . f11.3,' [mm] |', f13.3,' [mm] |',
1849  . f13.3,' [mm] |',
1850  . /,' -----------------+-------------------+',
1851  . '-----------------+-------------------+',
1852  . '-------------------+')
1853 
1854 ! #m0 WatBal = Wats_1(ikl)+rrCaSV(ikl)
1855 ! #m0. -(Watsv0(ikl)+Watsvd(ikl))
1856 ! #m0 IF (abs(WatBal).gt.eps6) THEN
1857 ! #m0 write(6,6002) daHost,i___SV(lwriSV(ikl)),
1858 ! #m0. j___SV(lwriSV(ikl)),
1859 ! #m0. n___SV(lwriSV(ikl)),
1860 ! #m0. Wats_1(ikl),rrCaSV(ikl),
1861 ! #m0. Watsv0(ikl),Watsvd(ikl),WatBal,
1862 ! #m0. Wats_1(ikl),
1863 ! #m0. Wats_0(ikl),Wats_d(ikl),
1864 ! #m0. Wats_1(ikl)-Wats_0(ikl)-Wats_d(ikl)
1865  6002 format(30x,' NEW Soil Water',3x,' Canopy Water',3x,
1866  . ' OLD SVAT Water',4x,' FRC SVAT Water',
1867  . /,a18,3i4,f15.6,' + ' ,f15.6,' - ' ,f15.6,
1868  . ' - ',f15.6,' ', 15x ,' ',
1869  . /,31x,'= ',f12.6,' [mm] (Water Balance)',
1870  . /,30x,' NEW Soil Water',3x,' ',3x,
1871  . ' OLD Soil Water',4x,' FRC Soil Water',
1872  . /,30x,f15.6,' ' , 15x ,' - ' ,f15.6,
1873  . ' - ',f15.6,' ', 15x ,' ',
1874  . /,31x,'= ',f12.6,' [mm] (3 terms SUM)')
1875 ! #m0 noWBal = noWBal + 1
1876 ! #m0 IF (noWBal.GE. 10) stop 'TOO MUCH WATER IMBALANCES'
1877 ! #m0 END IF
1878 
1879 
1880 ! Water/Temperature Profiles
1881 ! --------------------------
1882 
1883 c #E0 write(noUNIT,5004)
1884  5004 format(' -----+--------+--+-----+--------+----+---+',
1885  . '--------+----+---+--------+------+-+--------+--------+',
1886  . /,' n | z | dz | ro | eta |',
1887  . ' T | G1 | G2 | Extinc | | HISTORY|',
1888  . /,' | [m] | [m] | [kg/m3]| [m3/m3]|',
1889  . ' [K] | [-] | [-] | [-] | | [-] |',
1890  . /,' -----+--------+--------+--------+--------+',
1891  . '--------+--------+--------+--------+--------+--------+')
1892 c #E0 write(noUNIT,5005) rusnSV(ikl),albisv(ikl)
1893  5005 format(' | | | |W',f6.3,' |',
1894  . ' | | |A',f6.3,' | | |')
1895 c #E0 write(noUNIT,5015)
1896 c #E0. (isn,zzsnsv(ikl,isn),dzsnSV(ikl,isn),
1897 c #E0. ro__SV(ikl,isn),eta_SV(ikl,isn),
1898 c #E0. TsisSV(ikl,isn),
1899 c #E0. G1snSV(ikl,isn),G2snSV(ikl,isn),
1900 c #E0. sEX_sv(ikl,isn),istoSV(ikl,isn),
1901 c #E0. isn=isnoSV(ikl),1,-1)
1902  5015 format((i5,' |',2(f7.3,' |'), f7.1,' |',
1903  . f7.3,' |' , f7.2,' |', 2(f7.1,' |'), f7.3,' |',
1904  . 7x ,' |' , i5,' |' ))
1905 c #E0 write(noUNIT,5006)
1906  5006 format(' -----+--------+--------+--------+--------+',
1907  . '--------+--------+--------+--------+--------+--------+')
1908 c #E0 write(noUNIT,5007) TBr_sv(ikl),
1909 c #E0. TvegSV(ikl),rrCaSV(ikl)*1.e3,
1910 c #E0. EvT_sv(ikl)*86.4e3
1911  5007 format(' Brgh |',4(8x,'|'), f7.2,' | [micm] |',4(8x,'|'),
1912  . /,' VEGE |',4(8x,'|'),2(f7.2,' |'), 2(8x,'|'),
1913  . f7.3,' |', 8x,'|' )
1914 c #E0 write(noUNIT,5014)
1915  5014 format(' -----+--------+--------+--------+--------+',
1916  . '--------+--------+--------+--------+--------+--------+',
1917  . /,' n | | dz | | eta |',
1918  . ' T | | | | Root W.| W.Flow |',
1919  . /,' | | [m] | | [m3/m3]|',
1920  . ' [K] | | | | [mm/d] | [mm/h] |',
1921  . /,' -----+--------+--------+--------+--------+',
1922  . '--------+--------+--------+--------+--------+--------+')
1923 
1924 c #E0 write(noUNIT,5008)
1925 c #E0. (isl, LSdzsv(ikl)*dz_dSV( isl),
1926 c #E0. eta_SV(ikl,isl),
1927 c #E0. TsisSV(ikl,isl),
1928 c #E0. 86.4e3*Rootsv(ikl,isl),
1929 c #E0. 3.6e3*Khydsv(ikl,isl),
1930 c #E0. isl=0,-nsol,-1)
1931  5008 format((i5,' |', 7x ,' |' , f7.3,' |' , 7x ,' |',
1932  . f7.3,' |' , f7.2,' |', 2( 7x ,' |'), 7x ,' |',
1933  . f7.3,' |' , f7.2,' |'))
1934 c #E0 write(noUNIT,5006)
1935 c #E0 write(noUNIT,5009) RnofSV(ikl)* 3.6e3
1936  5009 format(' |',9(8x,'|'),f7.3,' |')
1937 c #E0 write(noUNIT,5006)
1938 c #E0 END IF
1939 c #E0 END DO
1940 
1941 ! END .main. (SISVAT)
1942  return
1943  end
1944 
1945 
1946  subroutine sisvat_bsn(BloMod)
1948 !--------------------------------------------------------------------------+
1949 ! MAR SISVAT_BSn Sat 12-Feb-2012 MAR |
1950 ! SubRoutine SISVAT_BSn treats Snow Erosion and Deposition |
1951 ! |
1952 ! |
1953 ! Preprocessing Option: STANDARD Possibility |
1954 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ |
1955 ! #BS: Explicit Cloud MICROPHYSICS: Blow. *(Snow) Model |
1956 ! #EM: Explicit Cloud MICROPHYSICS: de Montmollin Parameterizat. |
1957 ! #MA: SNOW Model: Increased polar B* Mobility (Mann et al.2000) |
1958 ! |
1959 ! |
1960 ! Preprocessing Option: |
1961 ! ^^^^^^^^^^^^^^^^^^^^^ |
1962 ! #BA: Budd et al. 1966, Ant.Res.Ser.9 u* BS Threshold |
1963 ! #BY: Budd et al. 1966, 2~m Averag Blow. *(Snow) Properties |
1964 ! #AG: Snow Aging Col de Porte (Brun et al.1991) discard BS at CdP |
1965 ! |
1966 ! |
1967 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
1968 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
1969 ! FILE | CONTENT |
1970 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
1971 ! # stdout | #s2: OUTPUT of SnowFall, Snow Buffer |
1972 ! | unit 6, SubRoutine SISVAT_BSn, _qSn |
1973 ! # stdout | #b0: OUTPUT of Snow Erosion |
1974 ! | unit 6, SubRoutine SISVAT_BSn **ONLY** |
1975 !--------------------------------------------------------------------------+
1976 
1977 
1978 
1979 
1980 
1981 ! General Variables
1982 ! =================
1983 
1984  USE phy_sv
1985 
1986  USE var_sv
1987  USE vardsv
1988  USE varxsv
1989  USE varysv
1990 
1991  IMPLICIT NONE
1992 
1993  logical BloMod
1994 
1995 
1996 ! Local Variables
1997 ! ===============
1998 
1999  logical BlowIn
2000  common/llocal_bsn/blowin
2001 
2002  real FacSBS,FacUBS !
2003  real Por_BS ! Snow Porosity
2004  real SheaBS !
2005  real rCd10n ! GM97: assumed neutral stabil.
2006  common/rlocal_bsn/facsbs,facubs, !
2007  . por_bs,sheabs,rcd10n !
2008 
2009  integer ikl ,isn ,isnMAX,is2 !
2010  integer Mobilm,Mobiln !
2011  integer Mobile(klonv) !
2012 
2013  real DendOK ! Dendricity Switch
2014  real SaltOK ! Saltation Switch
2015  real SnowOK ! Pack Top Switch
2016  real SaltM1,SaltM2,SaltMo,SaltMx ! Saltation Parameters
2017  real ShearX ! Arg. Max Shear Stress
2018  real SaltSU,Salt_U !
2019  real ArgFac,Fac_Mo !
2020  real FacRBS,FacTBS !
2021  real ArguSi !
2022  real SaltSI(klonv,nsno) ! Snow Drift Index
2023  real hdrift ! Inverse erodibl.Snow Lay.Thickn.
2024  real h_mmWE ! Eroded Snow Layer Min Thickness
2025  real tfv_vk ! * Fall Veloc. / Von Karman Cst
2026  real sdrift(klonv,nsno) !
2027  real xdrift(klonv) !
2028  real zdrift(klonv) !
2029  real tdepos(klonv) !
2030  real zdepos(klonv,nsno) !
2031  real dbsaux(klonv) ! Drift Amount (Dummy Variable)
2032  real dzweqo,dzweqn,bsno_x !
2033  real hsno_x !
2034  real PorSno,Salt_f,PorRef,ro_new !
2035  real MIN_Mo ! Minimum Mobility Fresh Fallen *
2036  real AgBlow ! Snow Mobility Time Scale
2037  real snofOK ! Threshd Snow Fall
2038 
2039  integer isagr1(klonv) ! 1st Layer History
2040  integer isagr2(klonv) ! 2nd Layer History
2041 
2042  real WEagre(klonv) ! Snow Water Equivalent Thickness
2043  real Agrege(klonv) ! 1. when Agregation constrained
2044  real dzagr1(klonv) ! 1st Layer Thickness
2045  real dzagr2(klonv) ! 2nd Layer Thickness
2046  real T_agr1(klonv) ! 1st Layer Temperature
2047  real T_agr2(klonv) ! 2nd Layer Temperature
2048  real roagr1(klonv) ! 1st Layer Density
2049  real roagr2(klonv) ! 2nd Layer Density
2050  real etagr1(klonv) ! 1st Layer Water Content
2051  real etagr2(klonv) ! 2nd Layer Water Content
2052  real G1agr1(klonv) ! 1st Layer Dendricity/Spher.
2053  real G1agr2(klonv) ! 2nd Layer Dendricity/Spher.
2054  real G2agr1(klonv) ! 1st Layer Sphericity/Size
2055  real G2agr2(klonv) ! 2nd Layer Sphericity/Size
2056  real agagr1(klonv) ! 1st Layer Age
2057  real agagr2(klonv) ! 2nd Layer Age
2058 
2059 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
2060 ! OUTPUT for Snow Erosion Variables
2061 ! #b0 real Sno0WE,Sno1WE ! Snow Mass before/after Erosion
2062 ! #b0 real SnodWE ! Snow Mass Erosion
2063 
2064 
2065 ! DATA
2066 ! ====
2067 
2068  data agblow / 1.00 / ! 1 Day (F.Domine, pers.communic.)
2069  data saltmx /-5.83e-2 / !
2070  data facrbs / 2.868 / !
2071  data factbs / 0.085 / !
2072  data hdrift / 1.00e+1 / ! Inverse erodibl.Snow Lay.Thickn.
2073  data h_mmwe / 0.01e00 / ! Eroded Snow Layer Min Thickness
2074  data tfv_vk / 5.10e-1 / ! tfv (Terminal Fall Veloc. =.216)
2075  ! /vk (Von Karman Constant =.4 )
2076  ! (Wamser & Lykosov, 1995
2077  ! Contr.Atm.Phys. 68, p.90)
2078 
2079 ! Initialization
2080 ! ==============
2081 
2082  IF (.NOT.blowin) THEN
2083  blowin = .true.
2084  facsbs = 1. / facrbs
2085  facubs = 1. / factbs
2086  por_bs = 1. - bsnoro/ rhoice
2087  sheabs = por_bs/(1.00-por_bs)
2088 ! SheaBS = Arg(sqrt(shear = max shear stress in snow)):
2089 ! shear = 3.420d00 * exp(-(Por_BS +Por_BS)
2090 ! . /(1.00 -Por_BS))
2091 ! SheaBS : see de Montmollin (1978),
2092 ! These Univ. Sci. Medic. Grenoble, Fig. 1 p. 124
2093 
2094  DO ikl=1,knonv ! Parameterization of u*th
2095  rcd10n = 1./ 26.5 ! was developed from observations made
2096  END DO ! during assumed neutral conditions
2097 
2098  write(6,5000) 1./ rcd10n
2099  5000 format(/,' Blowing Snow Model Initialization ',
2100  . /,' Vt / u*t =',f8.2,' (Neutral Assumption)',
2101  . /,' ', 8x ,' (Budd assumes 26.5)',/)
2102  END IF
2103 
2104 
2105 ! Snow Age (Influence on Snow Erosion Threshold)
2106 ! ==============================================
2107 
2108 c #BS DO isn=1,nsno
2109 c #BS DO ikl=1,knonv
2110 c #BS agsnSV(ikl,isn) = agsnSV(ikl,isn) + dt__SV/86400.
2111 c #BS END DO
2112 c #BS END DO
2113 c #BS DO ikl=1,knonv
2114 c #BS isn = max(1 , isnoSV(ikl))
2115 c #BS snofOK = max(0.,sign(1.,dsn_SV(ikl)-eps6)) ! Threshold=1.e-6
2116 c #BS agsnSV(ikl,isn) = (1.-snofOK) *agsnSV(ikl,isn)! ~0.1 mm w.e./day
2117 c #BS END DO
2118  IF (.NOT.blomod) GO TO 1000
2119 c #AG STOP '?!&~@|@[#@#] --- INCONSISTANT SNOW AGE --- EMERGENCY STOP'
2120  1000 CONTINUE
2121 
2122 
2123 ! EROSION
2124 ! =======
2125 
2126  DO isn = 1, nsno
2127  DO ikl = 1,knonv
2128 
2129 ! Below the high Snow Density Threshold (ro__SV < BSnoRo)
2130 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2131  dendok = max(zer0,sign(un_1,eps6-g1snsv(ikl,isn) )) !
2132  saltok = min(1 , max(istdsv(2)-istosv(ikl,isn),0)) !
2133  snowok = min(1 , max(isnosv(ikl) +1 -isn ,0)) ! Snow Switch
2134 
2135  g1snsv(ikl,isn) = snowok * g1snsv(ikl,isn)
2136  . + (1.- snowok)*min(g1snsv(ikl,isn),g1_dsv)
2137  g2snsv(ikl,isn) = snowok * g2snsv(ikl,isn)
2138  . + (1.- snowok)*min(g2snsv(ikl,isn),g1_dsv)
2139 
2140  saltok = saltok * snowok
2141  saltm1 = -0.750e-2 * g1snsv(ikl,isn)
2142  . -0.500e-2 * g2snsv(ikl,isn)+ 0.500e00
2143 ! SaltM1 : Guyomarc'h & Merindol, 1997, Ann. Glac.
2144 ! CAUTION: Guyomarc'h & Merindol Dendricity Sign is +
2145 ! ^^^^^^^^ MAR Dendricity Sign is -
2146  saltm2 = -0.833d-2 * g1snsv(ikl,isn)
2147  . -0.583d-2 * g2snsv(ikl,isn)+ 0.833d00
2148  saltmo = (dendok * saltm1 + (1.-dendok) * saltm2 )
2149 
2150 ! Increased Mobility of Deposed (blown) Snow (Mann et al., 2000, JGR 105,
2151 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Fig.2 p.24496 & text below)
2152  min_mo = 0.
2153 c #MA MIN_Mo = 0.6 * exp(-agsnSV(ikl,isn) /AgBlow)
2154  saltmo = max(saltmo,min_mo)
2155 
2156  saltmo = saltok * saltmo + (1.-saltok) * min(saltmo,saltmx)
2157 ! SaltMo = SaltOK * SaltMo - (1.-SaltOK) * 0.9500 ! Tuning
2158  saltmo = max(saltmo , eps6-un_1)
2159 
2160  saltsu = (1.00d0+saltmo) *facsbs
2161 
2162 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
2163 ! OUTPUT for Snow Erosion Variables
2164 ! #b0 Salt_U = -log(SaltSU) *FacUBS
2165 ! #b0 IF (ii__SV(ikl).EQ.iwr_SV.AND.jj__SV(ikl).EQ.jwr_SV .AND.
2166 ! #b0. nn__SV(ikl).EQ.nwr_SV.AND.isn .EQ.isnoSV(ikl))
2167 ! #b0. write(6,6010) isnoSV(ikl),G1snSV(ikl,isn)/G1_dSV
2168 ! #b0. ,G2snSV(ikl,isn)/G1_dSV
2169 ! #b0. ,ro__SV(ikl,isn),agsnSV(ikl,isn)
2170 ! #b0. ,SaltM1, SaltM2, SaltMo, Salt_U
2171 ! #b0. ,us__SV(ikl) / rCd10n
2172  6010 format(/,'SISVAT_BSn',6x
2173  . ,6x,i3,2x,'G1 =',f6.3,' G2 =',f7.3
2174  . , ' ro [kg/m3] =',f9.3,' Age* [Day] =',f9.3
2175  . , /,27x,'SaltM1 =',f6.3,' SaltM2 =',f7.3
2176  . , ' Mobility I.=',f9.3,' Vt [m/s] =',f9.3
2177  . , /,27x,' ', 6x ,' ', 7x
2178  . , ' ', 9x ,' Vn10 [m/s] =',f9.3)
2179 
2180 ! Above the high Snow Density Threshold (ro__SV > BSnoRo)
2181 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2182  por_bs = 1.000 - ro__sv(ikl,isn) /rhoice
2183  shearx = por_bs/max(eps6,un_1-por_bs)
2184 ! ShearX ==> Arg(sqrt(shear)) with shear = max shear stress in snow:
2185 ! shear = 3.420d00 * exp(-(Por_BS +Por_BS)
2186 ! . /max(eps6,un_1-Por_BS))
2187 ! see de Montmollin (1978),
2188 ! These Univ. Sci. Medic. Grenoble, Fig. 1 p. 124
2189 
2190 ! Influence of Density on Shear Stress if ro__SV > BSnoRo
2191 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2192  argfac = max(zer0 ,sheabs-shearx) !
2193 ! Fac_Mo = exp( ArgFac ) ! ** NOT ** tuned
2194  fac_mo = exp( argfac ) ! = 1 if ro__SV < BSnoRo
2195  ! < 1 if ro__SV > BSnoRo
2196 ! Snow Drift Index
2197 ! ~~~~~~~~~~~~~~~~
2198  saltsu = max(eps6 , saltsu)
2199  saltsu = exp(fac_mo*log(saltsu))
2200  argusi = -factbs *us__sv(ikl)/rcd10n
2201  saltsi(ikl,isn) = (saltsu-exp(argusi)) *facrbs
2202 ! SaltSI : Generalization of the Snow Drift Index of
2203 ! Guyomarc'h & Merindol (1997, Ann.Glaciol.)
2204 
2205 ! Threshold Friction Velocity
2206 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~
2207  snowok = 1 -min(1,iabs(isn-isnosv(ikl)))
2208  salt_u = -log(saltsu) *facubs
2209 ! Salt_U : Guyomarc'h & Merindol, 1997, Ann. Glac.
2210 
2211  usthsv(ikl) = snowok * (salt_u *rcd10n)
2212  . + (1.-snowok)* usthsv(ikl)
2213 
2214 c #BA usthSV(ikl) = SnowOK * (Salt_U /26.5)
2215 c #BA. + (1.-SnowOK)* usthSV(ikl)
2216 ! Us(U10) : Budd et al. 1966, Ant.Res.Ser.9
2217 ! (see Pomeroy & Gray 1995 NHRI Sci.Rep.7(30)p.62)
2218 
2219 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
2220 ! OUTPUT for Snow Erosion Variables
2221 ! #b0 IF (ii__SV(ikl).EQ.iwr_SV.AND.jj__SV(ikl).EQ.jwr_SV .AND.
2222 ! #b0. nn__SV(ikl).EQ.nwr_SV.AND.isn .EQ.isnoSV(ikl))
2223 ! #b0. write(6,6011) Fac_Mo,Por_BS,SaltSI(ikl,isn),usthSV(ikl)
2224  6011 format( 27x,'Fac_Mo =',f6.3,' Por_BS =',f7.3
2225  . , ' Drift I.=',f9.3,' ut*_0[m/s] =',f9.3)
2226  END DO
2227  END DO
2228 
2229 
2230 ! Deepest Mobile Snow Layer
2231 ! -------------------------
2232 
2233  DO ikl = 1,knonv
2234  mobile(ikl) = nsno+1
2235  END DO
2236  DO isn = nsno ,1,-1
2237  DO ikl = 1,knonv
2238  isnmax = max( 1, isnosv(ikl) )
2239  isnmax = min( isn, isnmax )
2240  mobiln = isn * max(zer0,sign(un_1,saltsi(ikl ,isnmax)))
2241  mobilm = 1 - min(1 , mobile(ikl) -1 -mobiln)
2242 ! Mobilm = 1 ONLY IF Mobiln = Mobile(ikl) -1 (0 otherwise)
2243 
2244  mobile(ikl) = mobilm * mobiln
2245  . + (1-mobilm)* mobile(ikl)
2246  END DO
2247  END DO
2248 
2249 
2250 ! Weighting the Amount of Snow to erode
2251 ! -------------------------------------
2252 
2253  DO ikl = 1,knonv
2254  zdrift(ikl) = 0.0
2255  xdrift(ikl) = 0.0
2256  dbsaux(ikl) = dbs_sv(ikl)
2257  END DO
2258 
2259  DO isn = 1, nsno
2260  DO ikl = 1,knonv
2261  zdrift(ikl) = zdrift(ikl)
2262  . + 0.50 * dzsnsv(ikl,isn) * (3.25 -saltsi(ikl,isn))
2263  sdrift(ikl,isn) = saltsi(ikl,isn)
2264  . *exp( max(ea_min, -zdrift(ikl) *hdrift ))
2265  . *min(1,max(0 , isn +1 -mobile(ikl)))
2266  . *min(1,max(0 , isnosv(ikl) -isn +1 ))
2267 ! Last 2 Lines force sdrift = 0 outside mobile Snow Layers
2268  . * max(zer0, sign(un_1, -dbs_sv(ikl)))
2269 ! Erosion is allowed only if available Blowing Snow
2270  xdrift(ikl) = sdrift(ikl,isn) +xdrift(ikl)
2271  zdrift(ikl) = zdrift(ikl)
2272  . + 0.50 * dzsnsv(ikl,isn) * (3.25 -saltsi(ikl,isn))
2273  END DO
2274  END DO
2275 
2276 ! Normalization
2277 ! ~~~~~~~~~~~~~
2278  DO isn = 1, nsno
2279  DO ikl = 1,knonv
2280  sdrift(ikl,isn) = sdrift(ikl,isn) /max(eps6,xdrift(ikl))
2281  END DO
2282  END DO
2283 
2284 
2285 ! Weighting the Amount of Snow to depose
2286 ! --------------------------------------
2287 
2288  DO ikl = 1,knonv
2289  zdrift(ikl) = 0.0
2290  tdepos(ikl) = 0.0
2291  END DO
2292 
2293  DO isn = 1, nsno
2294  DO ikl = 1,knonv
2295  zdepos(ikl,isn) = exp(-zdrift(ikl) )
2296  . *min(1,max(0 , isn +1 -mobile(ikl)))
2297  . *min(1,max(0 , isnosv(ikl ) -isn +1 ))
2298 ! Last 2 Lines force zdepos = 0 outside mobile Snow Layers
2299  tdepos(ikl) = tdepos(ikl) + zdepos(ikl,isn)
2300  zdrift(ikl) = zdrift(ikl) + dzsnsv(ikl,isn) *ro__sv(ikl,isn)
2301  . /rhowat
2302  END DO
2303  END DO
2304 
2305 ! Normalization
2306 ! ~~~~~~~~~~~~~
2307  DO isn = 1, nsno
2308  DO ikl = 1,knonv
2309  zdepos(ikl,isn) = zdepos(ikl,isn) / max(eps6,tdepos(ikl))
2310  END DO
2311  END DO
2312 
2313 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
2314 ! OUTPUT for Snow Erosion Variables
2315 ! #b0 DO ikl = 1,knonv
2316 ! #b0 IF (ii__SV(ikl).EQ.iwr_SV.AND.jj__SV(ikl).EQ.jwr_SV .AND.
2317 ! #b0. nn__SV(ikl).EQ.nwr_SV ) THEN
2318 ! #b0 Sno0WE = 0.
2319 ! #b0 DO isn=1,nsno
2320 ! #b0 Sno0WE = Sno0WE
2321 ! #b0. + dzsnSV(ikl,isn) *ro__SV(ikl,isn)
2322 ! #b0 END DO
2323 ! #b0 write(6,6005) Sno0WE ,dbs_SV(ikl)
2324  6005 format(
2325  . 18x,'MB0',6x,'Sno1WE [mm]=',f9.3,19x,'0 dbs_SV [mm]=',f9.6)
2326 ! #b0 SnodWE = dbs_SV(ikl)
2327 ! #b0 END IF
2328 ! #b0 END DO
2329 
2330 
2331 ! Weighted Erosion (Erosion amount is distributed ! dbs_SV decreases
2332 ! ----------------- over the upper Snow Pack) ! dzsnSV decreases
2333 
2334  DO isn = 1, nsno
2335  DO ikl = 1,knonv
2336  snowok = min(1,max(isnosv(ikl)+1-isn ,0)) ! Snow Switch
2337  dzweqo = dzsnsv(ikl,isn) *ro__sv(ikl,isn) ! [kg/m2, mm w.e.]
2338  bsno_x = dbsaux(ikl) *sdrift(ikl,isn)
2339  dzweqn = dzweqo +bsno_x
2340  dzweqn = max(dzweqn, h_mmwe *snowok)
2341  dbs_sv(ikl) = dbs_sv(ikl) +(dzweqo -dzweqn)
2342  dzsnsv(ikl,isn) = dzweqn
2343  . /max(eps6,ro__sv(ikl,isn))
2344  END DO
2345  END DO
2346 
2347 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
2348 ! OUTPUT for Snow Erosion Variables
2349 ! #b0 DO ikl = 1,knonv
2350 ! #b0 IF (ii__SV(ikl).EQ. 1 .AND. jj__SV(ikl) .EQ. 1) THEN
2351 ! #b0 SnodWE = SnodWE -dbs_SV(ikl)
2352 ! #b0 Sno1WE = 0.
2353 ! #b0 DO isn=1,nsno
2354 ! #b0 Sno1WE = Sno1WE
2355 ! #b0. + dzsnSV(ikl,isn)*ro__SV(ikl,isn)
2356 ! #b0 END DO
2357 ! #b0 write(6,6006)Sno1WE , dbs_SV(ikl)
2358  6006 format(
2359  . 18x,'MB1',6x,'Sno1WE [mm]=',f9.3,19x,'1 dbs_SV [mm]=',f9.6)
2360 ! #b0 write(6,6007)Sno1WE ,SnodWE ,Sno0WE,
2361 ! #b0. (Sno1WE -SnodWE -Sno0WE)
2362  6007 format(
2363  . 18x,'MB ',5x,'(After [mm]=',f6.0, ')-(Erosion[mm]=', f7.3,
2364  . ')-(Before [mm]=', f9.3,
2365  . ')= Budget [mm]=', f9.6)
2366 ! #b0 END IF
2367 ! #b0 END DO
2368 
2369 
2370 ! ACCUMULATION of BLOWN SNOW ! dsn_SV decreases
2371 ! -------------------------- ! dzsnSV increases
2372 
2373  DO ikl = 1,knonv
2374  tdepos(ikl) = dsn_sv(ikl) * dsnbsv(ikl) * dt__sv
2375  weagre(ikl) = 0.
2376 
2377 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
2378 ! OUTPUT for Snow Erosion Variables
2379 ! #b0 IF (ii__SV(ikl).EQ.iwr_SV.AND.jj__SV(ikl).EQ.jwr_SV .AND.
2380 ! #b0. nn__SV(ikl).EQ.nwr_SV.AND.0 .LT.isnoSV(ikl))
2381 ! #b0. write(6,6003) tdepos(ikl) ,Mobile(ikl)
2382  6003 format(/,41x,'tdepos [-] =',f6.3,40x,'Mobil',i3
2383  . ,/,27x,'Salt.Index sdrift'
2384  . , ' zdepos ro__snow ro_bsnow roN_snow'
2385  . , ' dz__snow dz_bsnow dzN_snow'
2386  . , ' d___snow'
2387  . ,/,27x,' [kg/m3] [kg/m3] [kg/m3]'
2388  . , ' [m] [m] [m]'
2389  . , ' [kg/m2]')
2390  END DO
2391 
2392  DO isn = nsno,1,-1
2393  DO ikl = 1,knonv
2394  weagre(ikl) = weagre(ikl) + ro__sv(ikl,isn)*dzsnsv(ikl,isn)
2395  isagr1(ikl) = istosv(ikl,isn)
2396  isagr2(ikl) = 0.
2397 
2398 ! Density of deposited blown Snow
2399 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2400  ro_new = bsnoro
2401 
2402 ! Density of deposited blown Snow (de Montmollin, 1978)
2403 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2404 c #EM PorSno = 1.0d00 - ro__SV(ikl,isn)
2405 c #EM. / rhoIce
2406 c #EM Salt_f = usthSV(ikl)/ max(eps6, us__SV(ikl))
2407 c #EM Salt_f = min(Salt_f , un_1)
2408 c #EM PorRef = PorSno / max(eps6,1.-PorSno)
2409 c #EM. +log(Salt_f)
2410 c #EM Por_BS = PorRef / (1.0d00 + PorRef)
2411 c #EM ro_new = rhoIce * (1.0d00 - Por_BS)
2412 c #EM ro_new = max(ro_new , BSnoRo)
2413 
2414  roagr1(ikl) = ro__sv(ikl,isn)
2415  roagr2(ikl) = ro_new
2416  hsno_x = tdepos(ikl)* zdepos(ikl,isn)
2417 
2418  dzagr1(ikl) = dzsnsv(ikl,isn)
2419  dzagr2(ikl) = hsno_x / ro_new
2420 ! Conversion [kg/m2, i.e., mm w.e.] -----> [mSnow]
2421 
2422  dsn_sv(ikl) = dsn_sv(ikl)- hsno_x / dt__sv
2423 
2424 ! Other Snow Properties
2425 ! ~~~~~~~~~~~~~~~~~~~~~
2426  t_agr1(ikl) = tsissv(ikl,isn)
2427  t_agr2(ikl) =min(tf_sno,tat_sv(ikl))
2428  etagr1(ikl) = eta_sv(ikl,isn)
2429  etagr2(ikl) = 0.0
2430  g1agr1(ikl) = g1snsv(ikl,isn)
2431  g1agr2(ikl) = g1_dsv
2432  g2agr1(ikl) = g2snsv(ikl,isn)
2433  g2agr2(ikl) = adsdsv
2434 c #BY G2agr2(ikl) = 0.87d0
2435 ! Budd et al. 1966, 2~m Average /Table 5 p. 97
2436 
2437  agagr1(ikl) = agsnsv(ikl,isn)
2438  agagr2(ikl) = 0.
2439  agrege(ikl) = 1.
2440  END DO
2441 
2442 ! Agregation
2443 ! ~~~~~~~~~~
2444 ! **********
2445  call sisvat_zag
2446  . (isagr1,isagr2,weagre
2447  . ,dzagr1,dzagr2,t_agr1,t_agr2
2448  . ,roagr1,roagr2,etagr1,etagr2
2449  . ,g1agr1,g1agr2,g2agr1,g2agr2
2450  . ,agagr1,agagr2,agrege
2451  . )
2452 ! **********
2453 
2454  DO ikl = 1,knonv
2455 
2456 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
2457 ! OUTPUT for Snow Erosion Variables
2458 ! #b0 IF (ii__SV(ikl).EQ.iwr_SV.AND.jj__SV(ikl).EQ.jwr_SV .AND.
2459 ! #b0. nn__SV(ikl).EQ.nwr_SV.AND.isn .LE.isnoSV(ikl))
2460 ! #b0. write(6,6004) isn ,SaltSI(ikl,isn)
2461 ! #b0. ,sdrift(ikl,isn),zdepos(ikl,isn)
2462 ! #b0. ,ro__SV(ikl,isn),roagr2(ikl),roagr1(ikl)
2463 ! #b0. ,dzsnSV(ikl,isn),dzagr2(ikl),dzagr1(ikl)
2464 ! #b0. ,dsn_SV(ikl)
2465  6004 format((27x,i3,f7.2,2f10.6,3f10.3,4f10.6))
2466 
2467  istosv(ikl,isn) = isagr1(ikl)
2468  dzsnsv(ikl,isn) = dzagr1(ikl)
2469  tsissv(ikl,isn) = t_agr1(ikl)
2470  ro__sv(ikl,isn) = roagr1(ikl)
2471  eta_sv(ikl,isn) = etagr1(ikl)
2472  g1snsv(ikl,isn) = g1agr1(ikl)
2473  g2snsv(ikl,isn) = g2agr1(ikl)
2474  agsnsv(ikl,isn) = agagr1(ikl)
2475 
2476  END DO
2477 
2478  END DO
2479 
2480 ! OUTPUT in SISVAT for ikl = 1 (preferably for Stand Alone Version)
2481 ! OUTPUT for SnowFall and Snow Buffer
2482 ! #s2 IF (isnoSV(1) .GT. 0)
2483 ! #s2. write(6,6008)isnoSV(1), dsn_SV(1) *dt__SV + BufsSV(1),
2484 ! #s2. (dzsnSV(1,isn)*ro__SV(1,isn),isn=1,isnoSV(1))
2485  6008 format(i3,' dsn+Buf=',f6.2,6x,'A dz *ro =',10f6.2,
2486  . (/,35x,10f6.2))
2487 
2488  DO ikl = 1,knonv
2489  hdrift = tdepos(ikl)/dt__sv
2490  esnbsv(ikl) = (dsnbsv(ikl)-1.00)*hdrift/max(dsn_sv(ikl),eps6)
2491  . +dsnbsv(ikl)
2492  dsnbsv(ikl) = min(un_1, max(zer0,esnbsv(ikl) ) )
2493 ! dsnbSV is now the Blown Snow fraction of precipitating snow
2494 ! will be used for characterizing the Buffer Layer
2495 ! (see update of Bros_N, G1same, G2same, zroOLD, zroNEW)
2496  END DO
2497 
2498  return
2499  END
2500 
2501 
2502  subroutine sisvat_bdu
2504 !--------------------------------------------------------------------------+
2505 ! MAR SISVAT_BDu Sat 12-Feb-2012 MAR |
2506 ! SubRoutine SISVAT_BDu treats Dust Erosion |
2507 !--------------------------------------------------------------------------+
2508 ! |
2509 ! OUTPUT: usthSV : Blowing Snow Erosion Threshold [m/s] |
2510 ! ^^^^^^ |
2511 ! |
2512 ! REFER. : Fecan, F., B. Marticorena and G. Bergametti, 1999 (Fal99) |
2513 ! ^^^^^^^^ Ann. Geophysicae 17, 149--157 |
2514 ! u* threshold: adapted from Fig. 4 p. 153 |
2515 ! Clay Content: from Tab. 2 p. 155 |
2516 ! |
2517 !--------------------------------------------------------------------------+
2518 
2519 
2520 
2521 
2522 
2523 ! General Variables
2524 ! =================
2525 
2526  USE phy_sv
2527 
2528  USE var_sv
2529  USE vardsv
2530  USE varxsv
2531 
2532  IMPLICIT NONE
2533 
2534 ! Local Variables
2535 ! =================
2536 
2537  integer ikl , isot
2538  real ustdmn(0:nsot)
2539  real claypc(0:nsot)
2540  real f__ust(0:nvgt)
2541  real etaust(0:nsot)
2542  common /sisvat_bdu_r/etaust
2543  logical logust
2544  common /sisvat_bdu_l/logust
2545  real eta_Du,usthDu
2546 
2547 
2548 ! DATA
2549 ! ====
2550 
2551  data (ustdmn(isot),
2552  . claypc(isot),
2553  . isot=0,nsot)
2554  . /10.000, 0.0000, ! 0 WATER !
2555  . 0.300, 0.0000, ! 1 SAND !
2556  . 0.300, 0.0920, ! 2 LOAMY SAND ! Fal99, Table 2
2557  . 0.300, 0.1420, ! 3 SANDY LOAM ! Fal99, Table 2
2558  . 0.300, 0.1630, ! 4 SILT LOAM ! Guess (Interpol.)
2559  . 0.300, 0.1840, ! 5 LOAM ! Fal99, Table 2
2560  . 0.300, 0.2280, ! 6 SANDY CLAY LOAM ! Guess (Interpol.)
2561  . 0.300, 0.2720, ! 7 SILTY CLAY LOAM ! Guess (Interpol.)
2562  . 0.300, 0.3160, ! 8 CLAY LOAM ! Fal99, Table 2
2563  . 0.300, 0.3750, ! 9 SANDY CLAY ! Guess (Interpol.)
2564  . 0.300, 0.4340, ! 10 SILTY CLAY ! Guess (Interpol.)
2565  . 0.300, 0.4920, ! 11 CLAY ! Fal99, Table 2
2566  . 10.000, 0.0000/ ! 12 ICE !
2567  data (f__ust(isot), isot=0,nvgt)
2568  . /1.00, ! 0 NO VEGETATION
2569  . 1.20, ! 1 CROPS LOW
2570  . 5.00, ! 2 CROPS MEDIUM
2571  . 10.00, ! 3 CROPS HIGH
2572  . 1.20, ! 4 GRASS LOW
2573  . 5.00, ! 5 GRASS MEDIUM
2574  . 10.00, ! 6 GRASS HIGH
2575  . 5.00, ! 7 BROADLEAF LOW
2576  . 10.00, ! 8 BROADLEAF MEDIUM
2577  . 12.00, ! 9 BROADLEAF HIGH
2578  . 10.00, ! 10 NEEDLELEAF LOW
2579  . 12.00, ! 11 NEEDLELEAF MEDIUM
2580  . 50.00 / ! 12 NEEDLELEAF HIGH
2581 
2582  IF (.NOT.logust) THEN
2583  DO isot=1,nsot
2584  etaust(isot) = 0.0014 * claypc(isot) * claypc(isot) ! Fal99
2585  . + 0.17 * claypc(isot) ! Eqn.(14)
2586  END DO ! p. 154
2587  logust = .true.
2588  END IF
2589 
2590 
2591 ! Soil Erodibility
2592 ! ----------------
2593 
2594  DO ikl = 1,knonv
2595  eta_du = max( eta_sv(ikl,0),etaust(isotsv(ikl))) ! Fal99
2596  eta_du = max(eps6,eta_sv(ikl,0)-eta_du ) ! Eqn.(15)
2597  usthdu = sqrt(un_1+1.21*exp(0.68* log(eta_du) )) ! p. 155
2598  . * ustdmn(isotsv(ikl)) !
2599  . * f__ust(ivgtsv(ikl)) !
2600  usthsv(ikl) =
2601  . usthsv(ikl)*(1-max(0,1-isnosv(ikl))) +
2602  . usthdu * max(0,1-isnosv(ikl))
2603  END DO
2604 
2605  return
2606  END
2607 
2608 
2609  subroutine sisvat_sic
2610 ! #m2. (SIvAcr)
2611 
2612 !--------------------------------------------------------------------------+
2613 ! MAR SISVAT_SIc Sat 12-Feb-2012 MAR |
2614 ! SubRoutine SISVAT_SIc treats Sea-Ice and Ocean Latent Heat Exchanges |
2615 !--------------------------------------------------------------------------+
2616 ! |
2617 ! INPUT: TaT_SV : SBL Top Temperature [K] |
2618 ! ^^^^^ isnoSV : total Nb of Ice/Snow Layers [-] |
2619 ! LSmask : Land-Sea Mask [-] |
2620 ! dsn_SV : Snow Intensity [mm w.e./s] |
2621 ! |
2622 ! INPUT / TsisSV : Snow/Ice/Soil-Water Temperature [K] |
2623 ! OUTPUT: eta_SV : Soil/Snow Water Content [m3/m3] |
2624 ! ^^^^^^ dzsnSV : Snow Layer Thickness [m] |
2625 ! |
2626 ! OUTPUT: HFraSV : Frazil Thickness [m] |
2627 ! ^^^^^^ |
2628 ! |
2629 ! |
2630 ! Preprocessing Option: |
2631 ! ^^^^^^^^^^^^^^^^^^^^^ |
2632 ! #IA: Sea-Ice Bottom accretion and ocean cooling |
2633 ! |
2634 !--------------------------------------------------------------------------+
2635 
2636 
2637 
2638 
2639 
2640 ! General Variables
2641 ! =================
2642 
2643  USE phy_sv
2644 
2645  USE var_sv
2646  USE vardsv
2647 
2648 
2649 ! INPUT/OUTPUT
2650 ! ------------
2651 
2652  USE varxsv
2653 
2654 
2655  IMPLICIT NONE
2656 
2657 ! OUTPUT/Verification: SeaIce Conservation
2658 ! #m2 real SIvAcr(klonv) ! Sea-Ice Vertical Acretion
2659 
2660 
2661 ! Local Variables
2662 ! ===============
2663 
2664  integer ikl ,isn
2665  real OCN_OK
2666  real SIceOK
2667  real SIcFrz
2668  real Twat_n
2669  real Crodzw,Lro__I
2670  common/sisvat_sic_r/crodzw,lro__i
2671  logical SIcINI
2672  common/sisvat_sic_l/sicini
2673 
2674  real SalIce ! Sea-Ice Salinity
2675  real SalWat ! Sea-Water Salinity
2676 
2677 
2678 ! DATA
2679 ! ====
2680 
2681  data salice /10./ ! Sea-Ice Salinity
2682  data salwat /35./ ! Sea-Water Salinity
2683 ! Typical Salinities in Terra Nova Bay
2684 ! (Bromwich and Kurtz, 1984, JGR, p.3568;
2685 ! Cavalieri and Martin, 1985, p. 248)
2686 
2687 
2688 ! Initialisation
2689 ! ==============
2690 
2691  IF (.NOT.sicini) THEN
2692  sicini = .true.
2693  crodzw = hc_wat*rhowat * dz_dsv(0) ! [J/m2/K]
2694  lro__i = lhfh2o*rhoice *(1.-1.e-3*salice ! [J/m3]
2695  . -(salice/salwat)*(1.-1.e-3*salwat) ) !
2696 
2697 ! OUTPUT/Verification: Energy/Water Budget
2698 ! #e1 Lro__I = LhfH2O*rhoIce
2699 
2700  END IF
2701 
2702 
2703 ! Snow Fall cools Sea Water
2704 ! =========================
2705 
2706  DO ikl=1,knonv
2707  ocn_ok = (1 -lsmask(ikl) ) ! Free Ocean
2708  . *max(0,1 -isnosv(ikl) ) !
2709 c #IA TsisSV(ikl,0) = TsisSV(ikl,0) ! [K]
2710 c #IA. -OCN_OK*(Cn_dSV*(Tf_Sno-TaT_SV(ikl) ) ! [J/kg]
2711 c #IA. +LhfH2O*(1. -eta_SV(ikl,0))) ! [J/kg]
2712 c #IA. * dsn_SV(ikl) *dt__SV / Crodzw ! [kg/m2]
2713 
2714 
2715 ! Sea-Ice Formation
2716 ! =================
2717 
2718 c #IA Twat_n = max(TsisSV(ikl,0 ) ,Tf_Sea) ! [K]
2719 c #IA SIcFrz = (Twat_n-TsisSV(ikl,0 ) )*Crodzw/Lro__I! [m]
2720 c #IA. * 0.75
2721 ! *** Hibler (1984), Ocean Heat Flux: 25% of cooling (ANTARCTIC Ocean)
2722 ! (Hansen and Takahashi Eds)
2723 ! Geophys. Monogr. 29, M. Ewing Vol. 5, AGU, p. 241
2724 
2725 
2726 ! Frazil Formation
2727 ! -----------------
2728 
2729 c #IA HFraSV(ikl) = SIcFrz *OCN_OK
2730 
2731 
2732 ! Growth of the Sea-Ice First Ice Floe
2733 ! ------------------------------------
2734 
2735 c #IA SIceOK = (1 -LSmask(ikl) ) ! Ice Cover.Ocean
2736 c #IA. *min( 1 ,isnoSV(ikl) ) !
2737 c #IA dzsnSV(ikl,1) = dzsnSV(ikl,1) ! Vertical Acret.
2738 c #IA. + SIcFrz *SIceOK !
2739 
2740 
2741 ! OUTPUT/Verification: SeaIce Conservation: Diagnostic of Surface Mass Balance
2742 ! #m2 SIvAcr(ikl) = rhoIce*SIcFrz *(OCN_OK+SIceOK)
2743 ! #m2. - dt__SV*dsn_SV(ikl)* OCN_OK
2744 
2745 
2746 ! Water Fluxes Update
2747 ! -------------------
2748 
2749  rnofsv(ikl) = rnofsv(ikl)
2750  . + dsn_sv(ikl) * ocn_ok
2751  dsn_sv(ikl) = dsn_sv(ikl) * (1.-ocn_ok)
2752 
2753  END DO
2754 
2755  return
2756  end
2757  subroutine sisvat_zsn
2759 !--------------------------------------------------------------------------+
2760 ! MAR SISVAT_zSn Sat 12-Feb-2012 MAR |
2761 ! SubRoutine SISVAT_zSn manages the Snow Pack vertical Discretization |
2762 ! |
2763 !--------------------------------------------------------------------------+
2764 ! |
2765 ! PARAMETERS: klonv: Total Number of columns = |
2766 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
2767 ! X Number of Mosaic Cell per grid box |
2768 ! |
2769 ! INPUT / NLaysv = New Snow Layer Switch |
2770 ! OUTPUT: isnoSV = total Nb of Ice/Snow Layers |
2771 ! ^^^^^^ ispiSV = 0,...,nsno: Uppermost Superimposed Ice Layer |
2772 ! iiceSV = total Nb of Ice Layers |
2773 ! istoSV = 0,...,5 : Snow History (see istdSV data) |
2774 ! |
2775 ! INPUT / TsisSV : Soil/Ice Temperatures (layers -nsol,-nsol+1,..,0)|
2776 ! OUTPUT: & Snow Temperatures (layers 1,2,...,nsno) [K] |
2777 ! ^^^^^^ ro__SV : Soil/Snow Volumic Mass [kg/m3] |
2778 ! eta_SV : Soil/Snow Water Content [m3/m3] |
2779 ! dzsnSV : Snow Layer Thickness [m] |
2780 ! G1snSV : Dendricity (<0) or Sphericity (>0) of Snow Layer |
2781 ! G2snSV : Sphericity (>0) or Size of Snow Layer |
2782 ! agsnSV : Snow Age [day] |
2783 ! |
2784 ! METHOD: 1) Agregate the thinest Snow Layer |
2785 ! ^^^^^^ if a new Snow Layer has been precipitated (NLaysv = 1) |
2786 ! 2) Divide a too thick Snow Layer except |
2787 ! if the maximum Number of Layer is reached |
2788 ! in this case forces NLay_s = 1 |
2789 ! 3) Agregate the thinest Snow Layer |
2790 ! in order to divide a too thick Snow Layer |
2791 ! at next Time Step when NLay_s = 1 |
2792 ! |
2793 ! |
2794 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
2795 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
2796 ! FILE | CONTENT |
2797 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
2798 ! # SISVAT_zSn.vz | #vz: OUTPUT/Verification: Snow Layers Agrega. |
2799 ! | unit 41, SubRoutine SISVAT_zSn **ONLY** |
2800 ! # SISVAT_GSn.vp | #vp: OUTPUT/Verification: Snow Properties |
2801 ! | unit 47, SubRoutines SISVAT_zSn, _GSn |
2802 ! # stdout | #s1: OUTPUT of Snow Layers Agregation |
2803 ! | unit 6, SubRoutine SISVAT_zSn, _zAg |
2804 !--------------------------------------------------------------------------+
2805  USE phy_sv
2806 
2807  USE var_sv
2808  USE vardsv
2809 
2810  USE varxsv
2811  USE varysv
2812 
2813  USE var0sv
2814 ! USE VARphy
2815 
2816  IMPLICIT NONE
2817 
2818 
2819 ! Global Variables
2820 ! ================
2821 
2822 ! include 'PHY_SV.h'
2823 !
2824 ! include 'MAR_SV.inc'
2825 ! include 'MARdSV.inc'
2826 ! include 'MAR0SV.inc'
2827 !
2828 ! include 'MARxSV.inc'
2829 !
2830 
2831 ! Internal Variables
2832 ! ==================
2833 
2834  integer ikl ,isn ,i !
2835 
2836 ! include 'MARySV.inc'
2837  integer NLay_s(klonv) ! Split Snow Layer Switch
2838  integer isagr1(klonv) ! 1st Layer History
2839  integer isagr2(klonv) ! 2nd Layer History
2840  integer LstLay ! 0 ====> isnoSV = 1
2841  integer isno_n ! Snow Normal.Profile
2842  integer iice_n ! Ice Normal.Profile
2843  integer iiceOK ! Ice Switch
2844  integer icemix ! 0 ====> Agregated Snow+Ice=Snow
2845  ! 1 Ice
2846  integer isn1 (klonv) ! 1st layer to stagger
2847  real staggr ! stagger Switch
2848 
2849  real WEagre(klonv) ! Snow Water Equivalent Thickness
2850  real dzthin(klonv) ! Thickness of the thinest layer
2851  real OKthin ! Swich ON a new thinest layer
2852  real dz_dif ! difference from ideal discret.
2853  real thickL ! Thick Layer Indicator
2854  real OK_ICE ! Swich ON uppermost Ice Layer
2855 
2856  real Agrege(klonv) ! 1. when Agregation constrained
2857  real dzepsi ! Min Single Snw Layer Thickness
2858  real dzxmin ! Min Acceptable Layer Thickness
2859  real dz_min ! Min Layer Thickness
2860  real dz_max ! Max Layer Thickness
2861  real dzagr1(klonv) ! 1st Layer Thickness
2862  real dzagr2(klonv) ! 2nd Layer Thickness
2863  real T_agr1(klonv) ! 1st Layer Temperature
2864  real T_agr2(klonv) ! 2nd Layer Temperature
2865  real roagr1(klonv) ! 1st Layer Density
2866  real roagr2(klonv) ! 2nd Layer Density
2867  real etagr1(klonv) ! 1st Layer Water Content
2868  real etagr2(klonv) ! 2nd Layer Water Content
2869  real G1agr1(klonv) ! 1st Layer Dendricity/Spher.
2870  real G1agr2(klonv) ! 2nd Layer Dendricity/Spher.
2871  real G2agr1(klonv) ! 1st Layer Sphericity/Size
2872  real G2agr2(klonv) ! 2nd Layer Sphericity/Size
2873  real agagr1(klonv) ! 1st Layer Age
2874  real agagr2(klonv) ! 2nd Layer Age
2875 
2876 ! OUTPUT/Verification: Snow Layers Agregation
2877 ! #vz logical as_opn ! IO Switch
2878 ! #vz common/SI_zSn_L/as_opn !
2879 ! #vz real dz_ref( nsno) ! Snow Reference Discretization
2880 ! #vz real dzwdif( nsno) !
2881 
2882 ! OUTPUT/Verification: Snow Layers Agregation: Properties
2883 ! #vp logical VP_opn ! IO Switch
2884 ! #vp common/SI_GSn_L/VP_opn !
2885 
2886 
2887 ! DATA
2888 ! ====
2889 
2890 ! data icemix / 0 / ! 0 ====> Agregated Snow+Ice=Snow
2891 ! data dzepsi / 0.0015/ ! Min single Layer Thickness
2892 ! data dzxmin / 0.0020/ ! Min accept.Layer Thickness
2893 ! data dz_min / 0.0050/ ! Min Local Layer Thickness
2894 ! data dz_max / 0.0300/ ! Min Gener. Layer Thickness
2895 !hjp250711
2896  data dzepsi / 0.0045/ ! Min single Layer Thickness
2897  data dzxmin / 0.0060/ ! Min accept.Layer Thickness
2898  data dz_min / 0.0150/ ! Min Local Layer Thickness
2899  data dz_max / 0.0900/ ! Min Gener. Layer Thickness
2900 ! CAUTION: dz_max > dz_min*2 is required ! Otherwise re-agregation is
2901  ! activated after splitting
2902 
2903 
2904 ! OUTPUT/Verification: Snow Layers Agregation
2905 ! #vz IF (.NOT.as_opn) THEN
2906 ! #vz as_opn=.true.
2907 ! #vz open(unit=41,status='unknown',file='SISVAT_zSn.vz')
2908 ! #vz rewind 41
2909 ! #vz END IF
2910 
2911 ! OUTPUT/Verification: Snow Layers Agregation: Properties
2912 ! #vp IF (.NOT.VP_opn) THEN
2913 ! #vp VP_opn=.true.
2914 ! #vp open(unit=47,status='unknown',file='SISVAT_GSn.vp')
2915 ! #vp rewind 47
2916 ! #vp END IF
2917 
2918 
2919 ! Constrains Agregation of too thin Layers
2920 ! =================================================
2921 
2922 ! Search the thinest non-zero Layer
2923 ! ----------------------------------
2924 
2925  DO ikl=1,klonv
2926  dzthin(ikl) = 0. ! Arbitrary unrealistic
2927  END DO ! Layer Thickness
2928  DO isn=1,nsno
2929  DO ikl=1,klonv
2930  isno_n = isnosv(ikl)-isn+1 ! Snow Normal.Profile
2931  iice_n = iicesv(ikl)-isn ! Ice Normal.Profile
2932  iiceok = min(1,max(0,iice_n +1)) ! Ice Switch
2933 
2934 ! OUTPUT/Verification: Snow Layers Agregation
2935 ! #vz dz_ref(isn) = !
2936 ! #vz. dz_min *((1-iiceOK)*isno_n*isno_n ! Theoretical Profile
2937 ! #vz. + iiceOK * 2**iice_n) !
2938 ! #vz. /max(1,isnoSV(ikl)) !
2939 
2940  dz_dif = max(zer0, ! Actual Profile
2941  . dz_min !
2942  . *((1-iiceok)*isno_n*isno_n ! Theoretical Profile
2943  . + iiceok *2. **iice_n) !
2944  . - dzsnsv(ikl, isn) ) ! Actual Profile
2945 
2946 ! OUTPUT/Verification: Snow Layers Agregation
2947 ! #vz dzwdif(isn) = dz_dif !
2948 
2949  okthin = max(zer0, !
2950  . sign(un_1, !
2951  . dz_dif-dzthin(ikl))) ! 1.=> New thinest Lay.
2952  . * max(0, ! 1 => .le. isnoSV
2953  . min(1, ! 1 => isn is in the
2954  . isnosv(ikl)-isn +1 )) ! Snow Pack
2955  . * min(un_1, !
2956 !
2957 ! 1st additional Condition to accept OKthin
2958  . max(zer0, ! combination
2959  . sign(un_1,g1snsv(ikl, isn ) ! G1 with same
2960  . *g1snsv(ikl,max(1,isn-1)))) ! sign => OK
2961 !
2962 ! 2nd additional Condition to accept OKthin
2963  . + max(zer0, ! G1>0
2964  . sign(un_1,g1snsv(ikl, isn ))) ! =>OK
2965 !
2966 ! 3rd additional Condition to accept OKthin
2967  . + max(zer0, ! dz too small
2968  . sign(un_1,dzxmin ! =>OK
2969  . -dzsnsv(ikl, isn ))))!
2970 
2971  i_thin(ikl) = (1. - okthin) * i_thin(ikl) ! Update thinest Lay.
2972  . + okthin * isn ! Index
2973  dzthin(ikl) = (1. - okthin) * dzthin(ikl) !
2974  . + okthin * dz_dif !
2975  END DO
2976  END DO
2977 
2978 ! OUTPUT/Verification: Snow Layers Agregation
2979 ! #vz write(41,4150) daHost ,n___SV( lwriSV(1))
2980 ! #vz. ,i_thin(1),dzsnSV(1,i_thin(1))
2981  4150 format(/,'-',a18,i5,' ',70('-'),
2982  . /,' Thinest ',i3,':',f9.3)
2983 
2984  DO isn=1,nsno
2985  DO ikl=1,klonv
2986  okthin = max(zer0, !
2987  . sign(un_1, !
2988  . dzxmin !
2989  . -dzsnsv(ikl,isn))) !
2990  . * max(zer0, ! ON if dz > 0
2991  . sign(un_1, !
2992  . dzsnsv(ikl,isn)-eps6)) !
2993  . *min(1,max(0, ! Multiple Snow Lay.
2994  . min(1, ! Switch = 1
2995  . isnosv(ikl) ! if isno > iice + 1
2996  . -iicesv(ikl)-1)) !
2997  !
2998  . +int(max(zer0, !
2999  . sign(un_1, !
3000  . dzepsi ! Minimum accepted for
3001  . -dzsnsv(ikl,isn)))) ! 1 Snow Layer over Ice
3002  . *int(max(zer0, ! ON if dz > 0
3003  . sign(un_1, !
3004  . dzsnsv(ikl,isn)-eps6)))!
3005  . *(1 -min(abs(isnosv(ikl) ! Switch = 1
3006  . -iicesv(ikl)-1),1)) ! if isno = iice + 1
3007  !
3008  . +max(0, ! Ice
3009  . min(1, ! Switch
3010  . iicesv(ikl)+1-isn))) !
3011  . *min(un_1, !
3012  . max(zer0, ! combination
3013  . sign(un_1,g1snsv(ikl, isn ) ! G1>0 + G1<0
3014  . *g1snsv(ikl,max(1,isn-1)))) ! NO
3015  . + max(zer0, !
3016  . sign(un_1,g1snsv(ikl, isn ))) !
3017  . + max(zer0, !
3018  . sign(un_1,dzxmin !
3019  . -dzsnsv(ikl, isn ))))!
3020  i_thin(ikl) = (1. - okthin) * i_thin(ikl) ! Update thinest Lay.
3021  . + okthin * isn ! Index
3022  END DO
3023  END DO
3024 
3025 ! OUTPUT/Verification: Snow Layers Agregation
3026 ! #vz write(41,4151) i_thin(1),dzsnSV(1,i_thin(1))
3027 ! #vz. ,isnoSV(1),dzsnSV(1,isnoSV(1))
3028  4151 format(' Thinest ',i3,':',f9.3,' Max =',i3,f12.3)
3029 
3030 ! OUTPUT/Verification: Snow Layers Agregation: Properties
3031 ! #vp write(47,470)(G1snSV(1,isn),isn=1,isnoSV(1))
3032  470 format('Before _zCr1: G1 = ',10f8.1,(/,19x,10f8.1))
3033 ! #vp write(47,472)(G2snSV(1,isn),isn=1,isnoSV(1))
3034  472 format(' G2 = ',10f8.1,(/,19x,10f8.1))
3035 
3036 
3037 ! Index of the contiguous Layer to agregate
3038 ! -----------------------------------------
3039 
3040 ! **********
3041  call sisvat_zcr
3042 ! **********
3043 
3044 
3045 ! Assign the 2 Layers to agregate
3046 ! -------------------------------
3047 
3048  DO ikl=1,klonv
3049  isn = i_thin(ikl)
3050  isagr1(ikl) = istosv(ikl,isn)
3051  isagr2(ikl) = istosv(ikl,isn+lindsv(ikl))
3052  dzagr1(ikl) = dzsnsv(ikl,isn)
3053  dzagr2(ikl) = dzsnsv(ikl,isn+lindsv(ikl))
3054  t_agr1(ikl) = tsissv(ikl,isn)
3055  t_agr2(ikl) = tsissv(ikl,isn+lindsv(ikl))
3056  roagr1(ikl) = ro__sv(ikl,isn)
3057  roagr2(ikl) = ro__sv(ikl,isn+lindsv(ikl))
3058  etagr1(ikl) = eta_sv(ikl,isn)
3059  etagr2(ikl) = eta_sv(ikl,isn+lindsv(ikl))
3060  g1agr1(ikl) = g1snsv(ikl,isn)
3061  g1agr2(ikl) = g1snsv(ikl,isn+lindsv(ikl))
3062  g2agr1(ikl) = g2snsv(ikl,isn)
3063  g2agr2(ikl) = g2snsv(ikl,isn+lindsv(ikl))
3064  agagr1(ikl) = agsnsv(ikl,isn)
3065  agagr2(ikl) = agsnsv(ikl,isn+lindsv(ikl))
3066  lstlay = min(1,max( 0,isnosv(ikl) -1)) ! 0 if single Layer
3067  isnosv(ikl) = isnosv(ikl) ! decrement isnoSV
3068  . -(1-lstlay)* max(zer0, ! if downmost Layer
3069  . sign(un_1,eps_21 ! < 1.e-21 m
3070  . -dzsnsv(ikl,1))) !
3071  isnosv(ikl) = max( 0, isnosv(ikl) ) !
3072  agrege(ikl) = max(zer0, !
3073  . sign(un_1,dz_min ! No Agregation
3074  . -dzagr1(ikl) )) ! if too thick Layer
3075  . *lstlay ! if a single Layer
3076  . * min( max(0 ,isnosv(ikl)+1 ! if Agregation
3077  . -i_thin(ikl) ! with a Layer
3078  . -lindsv(ikl) ),1) ! above the Pack
3079 
3080  weagre(ikl) = 0.
3081  END DO
3082 
3083  DO isn=1,nsno
3084  DO ikl=1,klonv
3085  weagre(ikl) = weagre(ikl) + ro__sv(ikl,isn)*dzsnsv(ikl,isn)
3086  . *min(1,max(0,i_thin(ikl)+1-isn))
3087  ENDDO
3088  ENDDO
3089 
3090 ! OUTPUT/Verification: Snow Layers Agregation
3091 ! #vz write(41,410)
3092  410 format(/,' Agregation of too THIN Layers')
3093 ! #vz write(41,411) (100.*dz_ref( isn),isn=1,nsno)
3094 ! #vz write(41,412) (100.*dzwdif( isn),isn=1,nsno)
3095 ! #vz write(41,413) (100.*dzsnSV(1,isn),isn=1,nsno)
3096 ! #vz write(41,414) ( isn ,isn=1,nsno)
3097  411 format(' dz_ref [cm]:',10f8.2 ,/,(' ',10f8.2) )
3098  412 format(' dz_dif [cm]:',10f8.2 ,/,(' ',10f8.2) )
3099  413 format(' dzsnSV [cm]:',10f8.2 ,/,(' ',10f8.2) )
3100  414 format(' ',10(i5,3x),/,(' ',10(i5,3x)))
3101 ! #vz write(41,4111) isnoSV(1 )
3102 ! #vz write(41,4112) i_thin(1 )
3103 ! #vz write(41,4113) LIndsv(1 )
3104 ! #vz write(41,4114) Agrege(1 )
3105 ! #vz write(41,4115) 1.e2*dzagr1(1 )
3106 ! #vz write(41,4116) 1.e2*dzagr2(1 )
3107  4111 format(' isnoSV :', i8 )
3108  4112 format(' i_thin :', i8 )
3109  4113 format(' LIndsv :', i8 )
3110  4114 format(' Agrege :', f8.2)
3111  4115 format(' dzagr1 :', f8.2)
3112  4116 format(' dzagr2 :', f8.2)
3113 
3114 ! OUTPUT/Verification: Snow Layers Agregation: Properties
3115 ! #vp write(47,471)(G1snSV(1,isn),isn=1,isnoSV(1))
3116  471 format('Before _zAg1: G1 = ',10f8.1,(/,19x,10f8.1))
3117 ! #vp write(47,472)(G2snSV(1,isn),isn=1,isnoSV(1))
3118 
3119 
3120 ! Agregates
3121 ! ---------
3122 
3123 ! **********
3124  call sisvat_zag
3125  . (isagr1,isagr2,weagre
3126  . ,dzagr1,dzagr2,t_agr1,t_agr2
3127  . ,roagr1,roagr2,etagr1,etagr2
3128  . ,g1agr1,g1agr2,g2agr1,g2agr2
3129  . ,agagr1,agagr2,agrege
3130  . )
3131 ! **********
3132 
3133 
3134 ! Rearranges the Layers
3135 ! ---------------------
3136 
3137 ! New (agregated) Snow layer
3138 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
3139  DO ikl=1,klonv
3140  isn = i_thin(ikl)
3141  isn = min(isn,isn+lindsv(ikl))
3142  isnosv(ikl) = isnosv(ikl) -agrege(ikl)
3143  iicesv(ikl) = iicesv(ikl)
3144  . -max(0,sign(1,iicesv(ikl) -isn +icemix))
3145  . *agrege(ikl)
3146  . *max(0,sign(1,iicesv(ikl) -1 ))
3147  istosv(ikl,isn) = (1.-agrege(ikl))*istosv(ikl,isn)
3148  . + agrege(ikl) *isagr1(ikl)
3149  dzsnsv(ikl,isn) = (1.-agrege(ikl))*dzsnsv(ikl,isn)
3150  . + agrege(ikl) *dzagr1(ikl)
3151  tsissv(ikl,isn) = (1.-agrege(ikl))*tsissv(ikl,isn)
3152  . + agrege(ikl) *t_agr1(ikl)
3153  ro__sv(ikl,isn) = (1.-agrege(ikl))*ro__sv(ikl,isn)
3154  . + agrege(ikl) *roagr1(ikl)
3155  eta_sv(ikl,isn) = (1.-agrege(ikl))*eta_sv(ikl,isn)
3156  . + agrege(ikl) *etagr1(ikl)
3157  g1snsv(ikl,isn) = (1.-agrege(ikl))*g1snsv(ikl,isn)
3158  . + agrege(ikl) *g1agr1(ikl)
3159  g2snsv(ikl,isn) = (1.-agrege(ikl))*g2snsv(ikl,isn)
3160  . + agrege(ikl) *g2agr1(ikl)
3161  agsnsv(ikl,isn) = (1.-agrege(ikl))*agsnsv(ikl,isn)
3162  . + agrege(ikl) *agagr1(ikl)
3163  END DO
3164 
3165 ! Above
3166 ! ^^^^^
3167  DO ikl=1,klonv
3168  isn1(ikl)=max(i_thin(ikl),i_thin(ikl)+lindsv(ikl))
3169  END DO
3170  DO i= 1,nsno-1
3171  DO ikl=1,klonv
3172  staggr = min(1,max(0,i +1 -isn1(ikl) ))
3173  istosv(ikl,i) = (1.-staggr )*istosv(ikl,i )
3174  . + staggr*((1.-agrege(ikl))*istosv(ikl,i )
3175  . + agrege(ikl) *istosv(ikl,i+1))
3176  dzsnsv(ikl,i) = (1.-staggr )*dzsnsv(ikl,i )
3177  . + staggr*((1.-agrege(ikl))*dzsnsv(ikl,i )
3178  . + agrege(ikl) *dzsnsv(ikl,i+1))
3179  tsissv(ikl,i) = (1.-staggr )*tsissv(ikl,i )
3180  . + staggr*((1.-agrege(ikl))*tsissv(ikl,i )
3181  . + agrege(ikl) *tsissv(ikl,i+1))
3182  ro__sv(ikl,i) = (1.-staggr )*ro__sv(ikl,i )
3183  . + staggr*((1.-agrege(ikl))*ro__sv(ikl,i )
3184  . + agrege(ikl) *ro__sv(ikl,i+1))
3185  eta_sv(ikl,i) = (1.-staggr )*eta_sv(ikl,i )
3186  . + staggr*((1.-agrege(ikl))*eta_sv(ikl,i )
3187  . + agrege(ikl) *eta_sv(ikl,i+1))
3188  g1snsv(ikl,i) = (1.-staggr )*g1snsv(ikl,i )
3189  . + staggr*((1.-agrege(ikl))*g1snsv(ikl,i )
3190  . + agrege(ikl) *g1snsv(ikl,i+1))
3191  g2snsv(ikl,i) = (1.-staggr )*g2snsv(ikl,i )
3192  . + staggr*((1.-agrege(ikl))*g2snsv(ikl,i )
3193  . + agrege(ikl) *g2snsv(ikl,i+1))
3194  agsnsv(ikl,i) = (1.-staggr )*agsnsv(ikl,i )
3195  . + staggr*((1.-agrege(ikl))*agsnsv(ikl,i )
3196  . + agrege(ikl) *agsnsv(ikl,i+1))
3197  END DO
3198  END DO
3199 
3200  DO ikl=1,klonv
3201  isn = min(isnosv(ikl) +1,nsno)
3202  istosv(ikl,isn) = (1.-agrege(ikl))*istosv(ikl,isn)
3203  dzsnsv(ikl,isn) = (1.-agrege(ikl))*dzsnsv(ikl,isn)
3204  tsissv(ikl,isn) = (1.-agrege(ikl))*tsissv(ikl,isn)
3205  ro__sv(ikl,isn) = (1.-agrege(ikl))*ro__sv(ikl,isn)
3206  eta_sv(ikl,isn) = (1.-agrege(ikl))*eta_sv(ikl,isn)
3207  g1snsv(ikl,isn) = (1.-agrege(ikl))*g1snsv(ikl,isn)
3208  g2snsv(ikl,isn) = (1.-agrege(ikl))*g2snsv(ikl,isn)
3209  agsnsv(ikl,isn) = (1.-agrege(ikl))*agsnsv(ikl,isn)
3210  END DO
3211 
3212 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
3213 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3214 ! #s1 IF (ii__SV(ikl).EQ.iwr_SV.AND.jj__SV(ikl).EQ.jwr_SV .AND.
3215 ! #s1. nn__SV(ikl).EQ.nwr_SV ) THEN
3216 ! #s1 write(6,5991) i_thin(ikl)
3217  5991 format(/,'First Agregation / Layer',i3,
3218  . /,' i',11x,'T',9x,'rho',10x,'dz',11x,'H')
3219 ! #s1 write(6,5995) (isn,TsisSV(ikl,isn),ro__SV(ikl,isn)
3220 ! #s1. ,dzsnSV(ikl,isn),istoSV(ikl,isn),
3221 ! #s1. isn=isnoSV(ikl),1,-1)
3222  5995 format(i3,3f12.3,i12)
3223 ! #s1 END IF
3224 
3225 
3226 ! Constrains Splitting of too thick Layers
3227 ! =================================================
3228 
3229 
3230 ! Search the thickest non-zero Layer
3231 ! ----------------------------------
3232 
3233  DO ikl=1,klonv
3234  dzthin(ikl) = 0. ! Arbitrary unrealistic
3235  END DO ! Layer Thickness
3236  DO isn=1,nsno
3237  DO ikl=1,klonv
3238  isno_n = isnosv(ikl)-isn+1 ! Snow Normal.Profile
3239  iice_n = iicesv(ikl)-isn ! Ice Normal.Profile
3240  iiceok = min(1,max(0,iice_n +1)) ! Ice Switch
3241  dz_dif =( dzsnsv(ikl,isn) ! Actual Profile
3242  . - dz_max *((1-iiceok)*isno_n*isno_n ! Theoretical Profile
3243  . + iiceok *2. **iice_n) ) !
3244  . /max(dzsnsv(ikl,isn),eps6) !
3245  okthin = max(zer0, !
3246  . sign(un_1, !
3247  . dz_dif-dzthin(ikl))) ! 1.=>New thickest Lay.
3248  . * max(0, ! 1 =>.le. isnoSV
3249  . min(1, !
3250  . isnosv(ikl)-isn +1 )) !
3251  i_thin(ikl) = (1. - okthin) * i_thin(ikl) ! Update thickest Lay.
3252  . + okthin * isn ! Index
3253  dzthin(ikl) = (1. - okthin) * dzthin(ikl) !
3254  . + okthin * dz_dif !
3255  END DO
3256  END DO
3257 
3258  DO ikl=1,klonv
3259  thickl = max(zer0, ! 1. => a too thick
3260  . sign(un_1,dzthin(ikl) ! Layer exists
3261  . -eps6 )) !
3262  . * max(0,1-max(0 , isnosv(ikl) ! No spliting allowed
3263  . -nsno+3 )) ! if isno > nsno - 3
3264  agrege(ikl) = thickl ! 1. => effective split
3265  . * max(0,1-max(0 , nlaysv(ikl) !
3266  . +isnosv(ikl) !
3267  . -nsno+1 )) !
3268  nlay_s(ikl) = thickl ! Agregation
3269  . * max(0,1-max(0 , nlaysv(ikl) ! to allow Splitting
3270  . +isnosv(ikl) ! at next Time Step
3271  . -nsno )) !
3272  . -agrege(ikl) !
3273  nlay_s(ikl) = max(0 , nlay_s(ikl)) ! Agregation effective
3274  END DO
3275 
3276 ! OUTPUT/Verification: Snow Layers Agregation
3277 ! #vz write(41,4152) i_thin(1),dzthin(1),ThickL
3278  4152 format(/,' Thickest',i3,':',f9.3,' Split =',f4.0)
3279 
3280 
3281 ! Rearranges the Layers
3282 ! ---------------------
3283 
3284  DO isn=nsno,2,-1
3285  DO ikl=1,klonv
3286  IF (agrege(ikl).gt.0..AND.i_thin(ikl).lt.isnosv(ikl)) THEN
3287  staggr = min(1,max(0,isn-i_thin(ikl) -1))
3288  . * min(1,max(0, isnosv(ikl)-isn+2))
3289  istosv(ikl,isn) = staggr * istosv(ikl ,isn-1)
3290  . + (1. - staggr) * istosv(ikl ,isn )
3291  dzsnsv(ikl,isn) = staggr * dzsnsv(ikl ,isn-1)
3292  . + (1. - staggr) * dzsnsv(ikl ,isn )
3293  tsissv(ikl,isn) = staggr * tsissv(ikl ,isn-1)
3294  . + (1. - staggr) * tsissv(ikl ,isn )
3295  ro__sv(ikl,isn) = staggr * ro__sv(ikl ,isn-1)
3296  . + (1. - staggr) * ro__sv(ikl ,isn )
3297  eta_sv(ikl,isn) = staggr * eta_sv(ikl ,isn-1)
3298  . + (1. - staggr) * eta_sv(ikl ,isn )
3299  g1snsv(ikl,isn) = staggr * g1snsv(ikl ,isn-1)
3300  . + (1. - staggr) * g1snsv(ikl ,isn )
3301  g2snsv(ikl,isn) = staggr * g2snsv(ikl ,isn-1)
3302  . + (1. - staggr) * g2snsv(ikl ,isn )
3303  agsnsv(ikl,isn) = staggr * agsnsv(ikl ,isn-1)
3304  . + (1. - staggr) * agsnsv(ikl ,isn )
3305  END IF
3306  END DO
3307  END DO
3308 
3309  DO ikl=1,klonv
3310  isn = i_thin(ikl)
3311  dzsnsv(ikl,isn) = 0.5*agrege(ikl) *dzsnsv(ikl,isn)
3312  . + (1.-agrege(ikl))*dzsnsv(ikl,isn)
3313 
3314  isn = min(i_thin(ikl) +1,nsno)
3315  istosv(ikl,isn) = agrege(ikl) *istosv(ikl,isn-1)
3316  . + (1.-agrege(ikl))*istosv(ikl,isn)
3317  dzsnsv(ikl,isn) = agrege(ikl) *dzsnsv(ikl,isn-1)
3318  . + (1.-agrege(ikl))*dzsnsv(ikl,isn)
3319  tsissv(ikl,isn) = agrege(ikl) *tsissv(ikl,isn-1)
3320  . + (1.-agrege(ikl))*tsissv(ikl,isn)
3321  ro__sv(ikl,isn) = agrege(ikl) *ro__sv(ikl,isn-1)
3322  . + (1.-agrege(ikl))*ro__sv(ikl,isn)
3323  eta_sv(ikl,isn) = agrege(ikl) *eta_sv(ikl,isn-1)
3324  . + (1.-agrege(ikl))*eta_sv(ikl,isn)
3325  g1snsv(ikl,isn) = agrege(ikl) *g1snsv(ikl,isn-1)
3326  . + (1.-agrege(ikl))*g1snsv(ikl,isn)
3327  g2snsv(ikl,isn) = agrege(ikl) *g2snsv(ikl,isn-1)
3328  . + (1.-agrege(ikl))*g2snsv(ikl,isn)
3329  agsnsv(ikl,isn) = agrege(ikl) *agsnsv(ikl,isn-1)
3330  . + (1.-agrege(ikl))*agsnsv(ikl,isn)
3331  isnosv(ikl) = agrege(ikl) +isnosv(ikl)
3332  iicesv(ikl) = iicesv(ikl)
3333  . + agrege(ikl) *max(0,sign(1,iicesv(ikl)
3334  . -isn +icemix))
3335  . *max(0,sign(1,iicesv(ikl)
3336  . -1 ))
3337  END DO
3338 
3339 
3340 ! Constrains Agregation in case of too much Layers
3341 ! =================================================
3342 
3343 ! Search the thinest non-zero Layer
3344 ! -----------------------------------
3345 
3346 ! OUTPUT/Verification: Snow Thinest Layer
3347 ! #sd write( 6,*) ' '
3348 ! #sd write( 6,*) 'Agregation 2'
3349 ! #sd write( 6,6000) NLaysv(1)
3350  6000 format(i3,6x,
3351  . 'dzsnSV dz_min dz_dif ',
3352  . 'OKthin dzthin i_thin')
3353 
3354  DO ikl=1,klonv
3355  dzthin(ikl) = 0. ! Arbitrary unrealistic
3356  END DO ! Layer Thickness
3357  DO isn=1,nsno
3358  DO ikl=1,klonv
3359  isno_n = isnosv(ikl)-isn+1 ! Snow Normal.Profile
3360  iice_n = iicesv(ikl)-isn ! Ice Normal.Profile
3361  iiceok = min(1,max(0,iice_n +1)) ! Ice Switch
3362 
3363 ! OUTPUT/Verification: Snow Layers Agregation
3364 ! #vz dz_ref(isn) = !
3365 ! #vz. dz_min *((1-iiceOK)*isno_n*isno_n ! Theoretical Profile
3366 ! #vz. + iiceOK * 2**iice_n) !
3367 ! #vz. /max(1,isnoSV(ikl)) !
3368 
3369  dz_dif = dz_min ! Actual Profile
3370  . - dzsnsv(ikl ,isn) !
3371  . /max(eps6,((1-iiceok)*isno_n*isno_n ! Theoretical Profile
3372  . + iiceok *2. **iice_n)) !
3373 
3374 ! OUTPUT/Verification: Snow Layers Agregation
3375 ! #vz dzwdif(isn) = dz_dif !
3376 
3377  okthin = max(zer0, !
3378  . sign(un_1, !
3379  . dz_dif - dzthin(ikl)))! 1.=> New thinest Lay.
3380  . * max(0, ! 1 => .le. isnoSV
3381  . min(1, !
3382  . isnosv(ikl)-isn +1 )) !
3383  i_thin(ikl) = (1. - okthin) * i_thin(ikl) ! Update thinest Lay.
3384  . + okthin * isn ! Index
3385  dzthin(ikl) = (1. - okthin) * dzthin(ikl) !
3386  . + okthin * dz_dif !
3387 
3388 ! OUTPUT/Verification: Snow Thinest Layer
3389 ! #sd IF(isn.LE.isnoSV(1).AND.ikl.EQ.1)
3390 ! #sd. write( 6,6001) isn,dzsnSV(ikl,isn),dz_min*isno_n*isno_n,dz_dif
3391 ! #sd. ,OKthin,dzthin(ikl), i_thin(ikl)
3392  6001 format(i3,5f12.6,i9)
3393 
3394  END DO
3395  END DO
3396 
3397 ! OUTPUT/Verification: Snow Thinest Layer
3398 ! #sd write( 6,*) ' '
3399 
3400 ! OUTPUT/Verification: Snow Layers Agregation
3401 ! #vz write(41,4153) i_thin(1),dzsnSV(1,i_thin(1))
3402  4153 format(/,' Thinest ',i3,':',f9.3)
3403 ! #vz write(41,4151) i_thin(1),dzsnSV(1,i_thin(1))
3404 ! #vz. ,isnoSV(1),dzsnSV(1,isnoSV(1))
3405 
3406 ! OUTPUT/Verification: Snow Layers Agregation: Properties
3407 ! #vp write(47,473)(G1snSV(1,isn),isn=1,isnoSV(1))
3408  473 format('Before _zCr2: G1 = ',10f8.1,(/,19x,10f8.1))
3409 ! #vp write(47,472)(G2snSV(1,isn),isn=1,isnoSV(1))
3410 
3411 
3412 ! Index of the contiguous Layer to agregate
3413 ! -----------------------------------------
3414 
3415 ! **********
3416  call sisvat_zcr
3417 ! **********
3418 
3419 
3420 ! Assign the 2 Layers to agregate
3421 ! -------------------------------
3422 
3423  DO ikl=1,klonv
3424  isn = i_thin(ikl)
3425  isagr1(ikl) = istosv(ikl,isn)
3426  isagr2(ikl) = istosv(ikl,isn+lindsv(ikl))
3427  dzagr1(ikl) = dzsnsv(ikl,isn)
3428  dzagr2(ikl) = dzsnsv(ikl,isn+lindsv(ikl))
3429  t_agr1(ikl) = tsissv(ikl,isn)
3430  t_agr2(ikl) = tsissv(ikl,isn+lindsv(ikl))
3431  roagr1(ikl) = ro__sv(ikl,isn)
3432  roagr2(ikl) = ro__sv(ikl,isn+lindsv(ikl))
3433  etagr1(ikl) = eta_sv(ikl,isn)
3434  etagr2(ikl) = eta_sv(ikl,isn+lindsv(ikl))
3435  g1agr1(ikl) = g1snsv(ikl,isn)
3436  g1agr2(ikl) = g1snsv(ikl,isn+lindsv(ikl))
3437  g2agr1(ikl) = g2snsv(ikl,isn)
3438  g2agr2(ikl) = g2snsv(ikl,isn+lindsv(ikl))
3439  agagr1(ikl) = agsnsv(ikl,isn)
3440  agagr2(ikl) = agsnsv(ikl,isn+lindsv(ikl))
3441  lstlay = min(1,max( 0, isnosv(ikl)-1 ))
3442  agrege(ikl) = min(1,
3443  . max(0,
3444  . nlaysv(ikl) +isnosv(ikl)-nsno
3445  . +nlay_s(ikl) )
3446  . *lstlay )
3447  isnosv(ikl) = isnosv(ikl)
3448  . -(1-lstlay)*max(zer0,
3449  . sign(un_1, eps_21
3450  . -dzsnsv(ikl,1) ))
3451  isnosv(ikl) =max( 0, isnosv(ikl) )
3452 
3453  weagre(ikl) = 0.
3454  END DO
3455 
3456  DO isn=1,nsno
3457  DO ikl=1,klonv
3458  weagre(ikl) = weagre(ikl) + ro__sv(ikl,isn)*dzsnsv(ikl,isn)
3459  . *min(1,max(0,i_thin(ikl)+1-isn))
3460  ENDDO
3461  ENDDO
3462 
3463 ! OUTPUT/Verification: Snow Layers Agregation
3464 ! #vz write(41,4120)
3465  4120 format(' Agregation of too MUCH Layers')
3466 ! #vz write(41,411) (100.*dz_ref( isn),isn=1,nsno)
3467 ! #vz write(41,412) (100.*dzwdif( isn),isn=1,nsno)
3468 ! #vz write(41,413) (100.*dzsnSV(1,isn),isn=1,nsno)
3469 ! #vz write(41,414) ( isn ,isn=1,nsno)
3470 ! #vz write(41,4111) isnoSV(1 )
3471 ! #vz write(41,4112) i_thin(1 )
3472 ! #vz write(41,4113) LIndsv(1 )
3473 ! #vz write(41,4114) Agrege(1 )
3474 
3475 ! OUTPUT/Verification: Snow Layers Agregation: Properties
3476 ! #vp write(47,474)(G1snSV(1,isn),isn=1,isnoSV(1))
3477  474 format('Before _zAg2: G1 = ',10f8.1,(/,19x,10f8.1))
3478 ! #vp write(47,472)(G2snSV(1,isn),isn=1,isnoSV(1))
3479 
3480 
3481 ! Agregates
3482 ! ---------
3483 
3484 ! **********
3485  call sisvat_zag
3486  . (isagr1,isagr2,weagre
3487  . ,dzagr1,dzagr2,t_agr1,t_agr2
3488  . ,roagr1,roagr2,etagr1,etagr2
3489  . ,g1agr1,g1agr2,g2agr1,g2agr2
3490  . ,agagr1,agagr2,agrege
3491  . )
3492 ! **********
3493 
3494 
3495 ! Rearranges the Layers
3496 ! ---------------------
3497 
3498 ! New (agregated) Snow layer
3499 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
3500  DO ikl=1,klonv
3501  isn = i_thin(ikl)
3502  isn = min(isn,isn+lindsv(ikl))
3503  isnosv(ikl) = isnosv(ikl) -agrege(ikl)
3504  iicesv(ikl) = iicesv(ikl)
3505  . -max(0,sign(1,iicesv(ikl) -isn +icemix))
3506  . *agrege(ikl)
3507  . *max(0,sign(1,iicesv(ikl) -1 ))
3508  istosv(ikl,isn) = (1.-agrege(ikl))*istosv(ikl,isn)
3509  . + agrege(ikl) *isagr1(ikl)
3510  dzsnsv(ikl,isn) = (1.-agrege(ikl))*dzsnsv(ikl,isn)
3511  . + agrege(ikl) *dzagr1(ikl)
3512  tsissv(ikl,isn) = (1.-agrege(ikl))*tsissv(ikl,isn)
3513  . + agrege(ikl) *t_agr1(ikl)
3514  ro__sv(ikl,isn) = (1.-agrege(ikl))*ro__sv(ikl,isn)
3515  . + agrege(ikl) *roagr1(ikl)
3516  eta_sv(ikl,isn) = (1.-agrege(ikl))*eta_sv(ikl,isn)
3517  . + agrege(ikl) *etagr1(ikl)
3518  g1snsv(ikl,isn) = (1.-agrege(ikl))*g1snsv(ikl,isn)
3519  . + agrege(ikl) *g1agr1(ikl)
3520  g2snsv(ikl,isn) = (1.-agrege(ikl))*g2snsv(ikl,isn)
3521  . + agrege(ikl) *g2agr1(ikl)
3522  agsnsv(ikl,isn) = (1.-agrege(ikl))*agsnsv(ikl,isn)
3523  . + agrege(ikl) *agagr1(ikl)
3524  END DO
3525 
3526 ! Above
3527 ! ^^^^^
3528  DO ikl=1,klonv
3529  isn1(ikl)=max(i_thin(ikl),i_thin(ikl)+lindsv(ikl))
3530  END DO
3531  DO i= 1,nsno-1
3532  DO ikl=1,klonv
3533  staggr = min(1,max(0,i +1 -isn1(ikl) ))
3534  istosv(ikl,i) = (1.-staggr )*istosv(ikl,i )
3535  . + staggr*((1.-agrege(ikl))*istosv(ikl,i )
3536  . + agrege(ikl) *istosv(ikl,i+1))
3537  dzsnsv(ikl,i) = (1.-staggr )*dzsnsv(ikl,i )
3538  . + staggr*((1.-agrege(ikl))*dzsnsv(ikl,i )
3539  . + agrege(ikl) *dzsnsv(ikl,i+1))
3540  tsissv(ikl,i) = (1.-staggr )*tsissv(ikl,i )
3541  . + staggr*((1.-agrege(ikl))*tsissv(ikl,i )
3542  . + agrege(ikl) *tsissv(ikl,i+1))
3543  ro__sv(ikl,i) = (1.-staggr )*ro__sv(ikl,i )
3544  . + staggr*((1.-agrege(ikl))*ro__sv(ikl,i )
3545  . + agrege(ikl) *ro__sv(ikl,i+1))
3546  eta_sv(ikl,i) = (1.-staggr )*eta_sv(ikl,i )
3547  . + staggr*((1.-agrege(ikl))*eta_sv(ikl,i )
3548  . + agrege(ikl) *eta_sv(ikl,i+1))
3549  g1snsv(ikl,i) = (1.-staggr )*g1snsv(ikl,i )
3550  . + staggr*((1.-agrege(ikl))*g1snsv(ikl,i )
3551  . + agrege(ikl) *g1snsv(ikl,i+1))
3552  g2snsv(ikl,i) = (1.-staggr )*g2snsv(ikl,i )
3553  . + staggr*((1.-agrege(ikl))*g2snsv(ikl,i )
3554  . + agrege(ikl) *g2snsv(ikl,i+1))
3555  agsnsv(ikl,i) = (1.-staggr )*agsnsv(ikl,i )
3556  . + staggr*((1.-agrege(ikl))*agsnsv(ikl,i )
3557  . + agrege(ikl) *agsnsv(ikl,i+1))
3558  END DO
3559  END DO
3560 
3561  DO ikl=1,klonv
3562  isn = min(isnosv(ikl) +1,nsno)
3563  istosv(ikl,isn) = (1.-agrege(ikl))*istosv(ikl,isn)
3564  dzsnsv(ikl,isn) = (1.-agrege(ikl))*dzsnsv(ikl,isn)
3565  tsissv(ikl,isn) = (1.-agrege(ikl))*tsissv(ikl,isn)
3566  ro__sv(ikl,isn) = (1.-agrege(ikl))*ro__sv(ikl,isn)
3567  eta_sv(ikl,isn) = (1.-agrege(ikl))*eta_sv(ikl,isn)
3568  g1snsv(ikl,isn) = (1.-agrege(ikl))*g1snsv(ikl,isn)
3569  g2snsv(ikl,isn) = (1.-agrege(ikl))*g2snsv(ikl,isn)
3570  agsnsv(ikl,isn) = (1.-agrege(ikl))*agsnsv(ikl,isn)
3571  END DO
3572 
3573 ! OUTPUT/Verification: Snow Layers Agregation: Properties
3574 ! #vp write(47,475)(G1snSV(1,isn),isn=1,isnoSV(1))
3575  475 format('At End _zSn : G1 = ',10f8.1,(/,19x,10f8.1))
3576 ! #vp write(47,472)(G2snSV(1,isn),isn=1,isnoSV(1))
3577 
3578 
3579 ! Search new Ice/Snow Interface
3580 ! =============================
3581 
3582 c #II DO ikl=1,klonv
3583 c #II iiceSV(ikl) = 0
3584 c #II END DO
3585 
3586 c #II DO isn=1,nsno
3587 c #II DO ikl=1,klonv
3588 c #II OK_ICE = max(zer0,sign(un_1,ro__SV(ikl,isn)-850.))
3589 c #II. * max(zer0,sign(un_1,dzsnSV(ikl,isn)-eps6))
3590 c #II iiceSV(ikl) = (1.-OK_ICE) *iiceSV(ikl)
3591 c #II. + OK_ICE *isn
3592 c #II END DO
3593 c #II END DO
3594 
3595  return
3596  end
3597 
3598 
3599 
3600  subroutine sisvat_zcr
3601 C +
3602 C +------------------------------------------------------------------------+
3603 C | MAR SISVAT_zCr 12-12-2002 MAR |
3604 C | SubRoutine SISVAT_zCr determines criteria for Layers Agregation |
3605 C | |
3606 C +------------------------------------------------------------------------+
3607 C | |
3608 C | PARAMETERS: klonv: Total Number of columns = |
3609 C | ^^^^^^^^^^ = Total Number of continental grid boxes |
3610 C | X Number of Mosaic Cell per grid box |
3611 C | |
3612 C | INPUT / isnoSV = total Nb of Ice/Snow Layers |
3613 C | OUTPUT: iiceSV = total Nb of Ice Layers |
3614 C | ^^^^^^ ispiSV = 0,...,nsno: Uppermost Superimposed Ice Layer |
3615 C | istoSV = 0,...,5 : Snow History (see istdSV data) |
3616 C | |
3617 C | INPUT / ro__SV : Soil/Snow Volumic Mass [kg/m3] |
3618 C | OUTPUT: & Snow Temperatures (layers 1,2,...,nsno) [K] |
3619 C | ^^^^^^ G1snSV : Dendricity (<0) or Sphericity (>0) of Snow Layer |
3620 C | G2snSV : Sphericity (>0) or Size of Snow Layer |
3621 C | agsnSV : Snow Age [day] |
3622 C | |
3623 C | OUTPUT: LIndsv : Relative Index of a contiguous Layer to agregate |
3624 C | ^^^^^^ |
3625 C +------------------------------------------------------------------------+
3626 C +
3627 C +
3628  USE var_sv
3629  USE vardsv
3630 
3631  USE varysv
3632  USE varxsv
3633 
3634  USE var0sv
3635  USE varphy
3636 
3637  IMPLICIT NONE
3638 C +
3639 C +
3640 C +--Global Variables
3641 C + ================
3642 C +
3643 c include "LMDZphy.inc"
3644 c include "LMDZ_SV.inc"
3645 c include "LMDZdSV.inc"
3646 c include "LMDZ0SV.inc"
3647 C +
3648 c include "LMDZxSV.inc"
3649 c include "LMDZySV.inc"
3650 C +
3651 C +
3652 C +--Internal Variables
3653 C + ==================
3654 C +
3655  integer ikl ,isn ,is0 ,is1
3656  integer isno_1 ! Switch: ! Snow Layer over Ice
3657  real*8 Dtyp_0,Dtyp_1 ! Snow Grains Difference Measure
3658  real*8 DenSph ! 1. when contiguous spheric
3659 C + ! and dendritic Grains
3660  real*8 DendOK ! 1. when dendritic Grains
3661  real*8 dTypMx ! Grain Type Differ.
3662  real*8 dTypSp ! Sphericity Weight
3663  real*8 dTypRo ! Density Weight
3664  real*8 dTypDi ! Grain Diam.Weight
3665  real*8 dTypHi ! History Weight
3666 
3667 
3668 C +--DATA
3669 C + ====
3670 
3671  data dtypmx / 200.0 / ! Grain Type Weight
3672  data dtypsp / 0.5 / ! Sphericity Weight
3673  data dtypro / 0.5 / ! Density Weight
3674  data dtypdi / 10.0 / ! Grain Diam.Weight
3675  data dtyphi / 100.0 / ! History Weight
3676 
3677 
3678 C +--Agregation Criteria
3679 C + ===================
3680 C +
3681  DO ikl=1,knonv
3682  i_thin(ikl) = min(i_thin(ikl),isnosv(ikl))
3683  isn = max(1 ,i_thin(ikl))
3684 C +
3685 C +
3686 C +--Comparison with the downward Layer
3687 C + ----------------------------------
3688 C +
3689  is0 = max(1, i_thin(ikl)-1 ) ! Downward Layer Index
3690  densph = max(zero, ! isn/is1
3691  . sign(unun, ! Dendricity/Sphericity
3692  . epsi-g1snsv(ikl,isn) ! Switch
3693  . *g1snsv(ikl,is0))) !
3694  dendok = max(zero, ! Dendricity Switch
3695  . sign(unun, !
3696  . epsi-g1snsv(ikl,isn))) !
3697 C +
3698  dtyp_0 =
3699  . densph * dtypmx
3700  . +(1.-densph)
3701  . * dendok *((abs(g1snsv(ikl,isn) ! Dendricity
3702  . -g1snsv(ikl,is0)) ! Contribution
3703  . +abs(g2snsv(ikl,isn) ! Sphericity
3704  . -g2snsv(ikl,is0))) *dtypsp ! Contribution
3705  . +abs(ro__sv(ikl,isn) ! Density
3706  . -ro__sv(ikl,is0)) *dtypro) ! Contribution
3707  . +(1.-densph) !
3708  . *(1.-dendok)*((abs(g1snsv(ikl,isn) ! Sphericity
3709  . -g1snsv(ikl,is0)) ! Contribution
3710  . +abs(g2snsv(ikl,isn) ! Size
3711  . -g2snsv(ikl,is0))) *dtypdi ! Contribution
3712  . +abs(ro__sv(ikl,isn) ! Density
3713  . -ro__sv(ikl,is0)) *dtypro) ! Contribution
3714  dtyp_0 = !
3715  . min(dtypmx, !
3716  . dtyp_0 !
3717  . +abs(istosv(ikl,isn) ! History
3718  . -istosv(ikl,is0)) *dtyphi) ! Contribution
3719  . + (1 -abs(isn-is0)) * 1.e+6 !"Same Layer"Score
3720  . + max(0,1-abs(iicesv(ikl) !"Ice /Snow
3721  . -is0)) * 1.e+6 ! Interface" Score
3722 C +
3723 C +
3724 C +--Comparison with the upward Layer
3725 C + ----------------------------------
3726 C +
3727  is1 = min( i_thin(ikl)+1, ! Upward Layer Index
3728  . max(1, isnosv(ikl) )) !
3729  densph = max(zero, ! isn/is1
3730  . sign(unun, ! Dendricity/Sphericity
3731  . epsi-g1snsv(ikl,isn) ! Switch
3732  . *g1snsv(ikl,is1))) !
3733  dendok = max(zero, ! Dendricity Switch
3734  . sign(unun, !
3735  . epsi-g1snsv(ikl,isn))) !
3736 C +
3737  dtyp_1 =
3738  . densph * dtypmx
3739  . +(1.-densph)
3740  . * dendok *((abs(g1snsv(ikl,isn) ! Dendricity
3741  . -g1snsv(ikl,is1)) ! Contribution
3742  . +abs(g2snsv(ikl,isn) ! Sphericity
3743  . -g2snsv(ikl,is1))) *dtypsp ! Contribution
3744  . +abs(ro__sv(ikl,isn) ! Density
3745  . -ro__sv(ikl,is1)) *dtypro) ! Contribution
3746  . +(1.-densph) !
3747  . *(1.-dendok)*((abs(g1snsv(ikl,isn) ! Sphericity
3748  . -g1snsv(ikl,is1)) ! Contribution
3749  . +abs(g2snsv(ikl,isn) ! Size
3750  . -g2snsv(ikl,is1))) *dtypdi ! Contribution
3751  . +abs(ro__sv(ikl,isn) ! Density
3752  . -ro__sv(ikl,is1)) *dtypro) ! Contribution
3753  dtyp_1 = !
3754  . min(dtypmx, !
3755  . dtyp_1 !
3756  . +abs(istosv(ikl,isn) ! History
3757  . -istosv(ikl,is1)) *dtyphi) ! Contribution
3758  . + (1 -abs(isn-is1)) * 1.e+6 !"Same Layer"Score
3759  . + max(0,1-abs(iicesv(ikl) !"Ice /Snow
3760  . -isn)) * 1.e+6 ! Interface" Score
3761 C +
3762 C +
3763 C +--Index of the Layer to agregate
3764 C + ==============================
3765 C +
3766  lindsv(ikl) = sign(unun,dtyp_0
3767  . -dtyp_1)
3768  isno_1 = (1 -min(abs(isnosv(ikl) ! Switch = 1
3769  . -iicesv(ikl)-1),1)) ! if isno = iice +1
3770  . * (1 -min(abs(isnosv(ikl) ! Switch = 1
3771  . -i_thin(ikl) ),1)) ! if isno = i_ithin
3772  lindsv(ikl) = (1 -isno_1) *lindsv(ikl) ! Contiguous Layer is
3773  . -isno_1 ! downward for top L.
3774  i_thin(ikl) = max(1, i_thin(ikl) )
3775  END DO
3776 C +
3777  return
3778  end
3779 
3780 
3781  subroutine sisvat_zag
3782  . (isagra,isagrb,weagra
3783  . ,dzagra,dzagrb,t_agra,t_agrb
3784  . ,roagra,roagrb,etagra,etagrb
3785  . ,g1agra,g1agrb,g2agra,g2agrb
3786  . ,agagra,agagrb,agreg1
3787  . )
3789 C +------------------------------------------------------------------------+
3790 C | MAR SURFACE 17-06-2004 MAR |
3791 C | SubRoutine SISVAT_zAg aggregates two contiguous snow layers |
3792 C | |
3793 C +------------------------------------------------------------------------+
3794 C | |
3795 C | PARAMETERS: klonv: Total Number of columns = |
3796 C | ^^^^^^^^^^ = Total Number of continental grid boxes |
3797 C | X Number of Mosaic Cell per grid box |
3798 C | |
3799 C | INPUT: isagrb : 2nd Layer History |
3800 C | ^^^^^ |
3801 C | |
3802 C | INPUT: dzagrb : 2nd Layer Thickness |
3803 C | ^^^^^ T_agrb : 2nd Layer Temperature |
3804 C | roagrb : 2nd Layer Density |
3805 C | etagrb : 2nd Layer Water Content |
3806 C | G1agrb : 2nd Layer Dendricity/Spher. |
3807 C | G2agrb : 2nd Layer Sphericity/Size |
3808 C | agagrb : 2nd Age |
3809 C | Agreg1 : 1. when Agregation constrained |
3810 C | |
3811 C | INPUT / isagra : 1st Layer History |
3812 C | OUTPUT: |
3813 C | ^^^^^^ |
3814 C | |
3815 C | INPUT / dzagra : 1st Layer Thickness |
3816 C | OUTPUT: T_agra : 1st Layer Temperature |
3817 C | ^^^^^^ roagra : 1st Layer Density |
3818 C | etagra : 1st Layer Water Content |
3819 C | G1agra : 1st Layer Dendricity/Spher. |
3820 C | G2agra : 1st Layer Sphericity/Size |
3821 C | agagra : 1st Age |
3822 C | |
3823 C +------------------------------------------------------------------------+
3824 
3825  USE var_sv
3826  USE vardsv
3827  USE varxsv
3828  USE var0sv
3829  USE varphy
3830 
3831  IMPLICIT NONE
3832 
3833 
3834 C +--Global Variables
3835 C + ================
3836 
3837 c include "LMDZphy.inc"
3838 c include "LMDZ_SV.inc"
3839 c include "LMDZdSV.inc"
3840 c include "LMDZ0SV.inc"
3841 c include "LMDZxSV.inc"
3842 
3843 
3844 C +--INPUT
3845 C + -----
3846 
3847  integer isagrb(klonv) ! 2nd Layer History
3848  real*8 dzagrb(klonv) ! 2nd Layer Thickness
3849  real*8 T_agrb(klonv) ! 2nd Layer Temperature
3850  real*8 roagrb(klonv) ! 2nd Layer Density
3851  real*8 etagrb(klonv) ! 2nd Layer Water Content
3852  real*8 G1agrb(klonv) ! 2nd Layer Dendricity/Spher.
3853  real*8 G2agrb(klonv) ! 2nd Layer Sphericity/Size
3854  real*8 agagrb(klonv) ! 2nd Layer Age
3855 
3856 
3857 C +--INPUT/OUTPUT
3858 C + ------------
3859 
3860  integer isagra(klonv) ! 1st Layer History
3861  real*8 WEagra(klonv) ! 1st Layer Height [mm w.e.]
3862  real*8 Agreg1(klonv) ! 1. ===> Agregates
3863  real*8 dzagra(klonv) ! 1st Layer Thickness
3864  real*8 T_agra(klonv) ! 1st Layer Temperature
3865  real*8 roagra(klonv) ! 1st Layer Density
3866  real*8 etagra(klonv) ! 1st Layer Water Content
3867  real*8 G1agra(klonv) ! 1st Layer Dendricity/Spher.
3868  real*8 G2agra(klonv) ! 1st Layer Sphericity/Size
3869  real*8 agagra(klonv) ! 1st Layer Age
3870 
3871 
3872 C +--Internal Variables
3873 C + ==================
3874 
3875  integer ikl
3876  integer nh ! Averaged Snow History
3877  integer nh__OK ! 1=>Conserve Snow History
3878  real*8 rh !
3879  real*8 dz ! Thickness
3880  real*8 dzro_1 ! Thickness X Density, Lay.1
3881  real*8 dzro_2 ! Thickness X Density, Lay.2
3882  real*8 dzro ! Thickness X Density, Aver.
3883  real*8 ro ! Averaged Density
3884  real*8 wn ! Averaged Water Content
3885  real*8 tn ! Averaged Temperature
3886  real*8 ag ! Averaged Snow Age
3887  real*8 SameOK ! 1. => Same Type of Grains
3888  real*8 G1same ! Averaged G1, same Grains
3889  real*8 G2same ! Averaged G2, same Grains
3890  real*8 typ__1 ! 1. => Lay1 Type: Dendritic
3891  real*8 zroNEW ! dz X ro, if fresh Snow
3892  real*8 G1_NEW ! G1, if fresh Snow
3893  real*8 G2_NEW ! G2, if fresh Snow
3894  real*8 zroOLD ! dz X ro, if old Snow
3895  real*8 G1_OLD ! G1, if old Snow
3896  real*8 G2_OLD ! G2, if old Snow
3897  real*8 SizNEW ! Size, if fresh Snow
3898  real*8 SphNEW ! Spheric.,if fresh Snow
3899  real*8 SizOLD ! Size, if old Snow
3900  real*8 SphOLD ! Spheric.,if old Snow
3901  real*8 Siz_av ! Averaged Grain Size
3902  real*8 Sph_av ! Averaged Grain Spher.
3903  real*8 Den_av ! Averaged Grain Dendr.
3904  real*8 DendOK ! 1. => Average is Dendr.
3905  real*8 G1diff ! Averaged G1, diff. Grains
3906  real*8 G2diff ! Averaged G2, diff. Grains
3907  real*8 G1 ! Averaged G1
3908  real*8 G2 ! Averaged G2
3909 
3910 C +--OUTPUT of Snow Agregat.Statistics (see assignation in PHY_SISVAT)
3911 C + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3912 c #EV integer iEVwri,jEVwri,nEVwri,kEVwri,lEVwri
3913 c #EV common /SISVAT_EV/ iEVwri,jEVwri,nEVwri,kEVwri,lEVwri
3914 
3915 
3916 C +--Mean Properties
3917 C + =================
3918 
3919 C +-- 1 Densite, Contenu en Eau, Temperature /
3920 C + Density, Water Content, Temperature
3921 C + ------------------------------------
3922 
3923  DO ikl = 1,knonv
3924  dz = dzagra(ikl) + dzagrb(ikl)
3925  dzro_1 = roagra(ikl) * dzagra(ikl)
3926  dzro_2 = roagrb(ikl) * dzagrb(ikl)
3927  dzro = dzro_1 + dzro_2
3928  ro = dzro
3929  . /max(epsi,dz)
3930  wn = (dzro_1*etagra(ikl) + dzro_2*etagrb(ikl))
3931  . /max(epsi,dzro)
3932  tn = (dzro_1*t_agra(ikl) + dzro_2*t_agrb(ikl))
3933  . /max(epsi,dzro)
3934  ag = (dzro_1*agagra(ikl) + dzro_2*agagrb(ikl))
3935  . /max(epsi,dzro)
3936 
3937  rh = max(zero,sign(unun,zwecsv(ikl)-weagra(ikl)))
3938  nh__ok = rh
3939  nh = nh__ok * max(isagra(ikl),isagrb(ikl))
3940  . + (1-nh__ok)* min(isagra(ikl),isagrb(ikl))
3941 
3942 C +--OUTPUT of Snow Agregation Statistics
3943 C + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3944 c #EV IF (ikl .EQ. kEVwri .AND. lEVwri .EQ. 3) THEN
3945 c #EV write(6,5995) zWEcSV(ikl),WEagra(ikl)
3946 c #EV. ,isagra(ikl),isagrb(ikl)
3947 c #EV. ,nh__OK ,nh
3948  5995 format(' WE2,WEa =',2f9.1,' nha,b =',2i2,' nh__OK,nh =',2i2)
3949 c #EV END IF
3950 
3951 
3952 C +-- 2 Nouveaux Types de Grains / new Grain Types
3953 C + -------------------------------------------
3954 
3955 C +-- 2.1. Meme Type de Neige / same Grain Type
3956 C + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3957  sameok = max(zero,
3958  . sign(unun, g1agra(ikl) *g1agrb(ikl) - eps_21))
3959  g1same = (dzro_1*g1agra(ikl) + dzro_2*g1agrb(ikl))
3960  . /max(epsi,dzro)
3961  g2same = (dzro_1*g2agra(ikl) + dzro_2*g2agrb(ikl))
3962  . /max(epsi,dzro)
3963 
3964 C +-- 2.2. Types differents / differents Types
3965 C + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3966  typ__1 = max(zero,sign(unun,epsi-g1agra(ikl))) ! =1.=> Dendritic
3967  zronew = typ__1 *dzro_1 ! ro of Dendr.Lay.
3968  . + (1.-typ__1) *dzro_2 !
3969  g1_new = typ__1 *g1agra(ikl) ! G1 of Dendr.Lay.
3970  . + (1.-typ__1) *g1agrb(ikl) !
3971  g2_new = typ__1 *g2agra(ikl) ! G2 of Dendr.Lay.
3972  . + (1.-typ__1) *g2agrb(ikl) !
3973  zroold = (1.-typ__1) *dzro_1 ! ro of Spher.Lay.
3974  . + typ__1 *dzro_2 !
3975  g1_old = (1.-typ__1) *g1agra(ikl) ! G1 of Spher.Lay.
3976  . + typ__1 *g1agrb(ikl) !
3977  g2_old = (1.-typ__1) *g2agra(ikl) ! G2 of Spher.Lay.
3978  . + typ__1 *g2agrb(ikl) !
3979  siznew = -g1_new *ddcdsv/g1_dsv ! Size Dendr.Lay.
3980  . +(1.+g1_new /g1_dsv) !
3981  . *(g2_new *dscdsv/g1_dsv !
3982  . +(1.-g2_new /g1_dsv)*dfcdsv) !
3983  sphnew = g2_new /g1_dsv ! Spher.Dendr.Lay.
3984  sizold = g2_old ! Size Spher.Lay.
3985  sphold = g1_old /g1_dsv ! Spher.Spher.Lay.
3986  siz_av = (zronew*siznew+zroold*sizold) ! Averaged Size
3987  . /max(epsi,dzro) !
3988  sph_av = (zronew*sphnew+zroold*sphold) ! Averaged Sphericity
3989  . /max(epsi,dzro) !
3990  den_av = (siz_av -( sph_av *dscdsv !
3991  . +(1.-sph_av)*dfcdsv)) !
3992  . / (ddcdsv -( sph_av *dscdsv !
3993  . +(1.-sph_av)*dfcdsv)) !
3994  dendok = max(zero, !
3995  . sign(unun, sph_av *dscdsv ! Small Grains Contr.
3996  . +(1.-sph_av)*dfcdsv ! Faceted Grains Contr.
3997  . - siz_av ))!
3998 C +... REMARQUE: le type moyen (dendritique ou non) depend
3999 C + ^^^^^^^^ de la comparaison avec le diametre optique
4000 C + d'une neige recente de dendricite nulle
4001 C +... REMARK: the mean type (dendritic or not) depends
4002 C + ^^^^^^ on the comparaison with the optical diameter
4003 C + of a recent snow having zero dendricity
4004 
4005  g1diff =( -dendok *den_av
4006  . +(1.-dendok)*sph_av) *g1_dsv
4007  g2diff = dendok *sph_av *g1_dsv
4008  . +(1.-dendok)*siz_av
4009  g1 = sameok *g1same
4010  . +(1.-sameok)*g1diff
4011  g2 = sameok *g2same
4012  . +(1.-sameok)*g2diff
4013 
4014 
4015 C +--Assignation to new Properties
4016 C + =============================
4017 
4018  isagra(ikl) = agreg1(ikl) *nh +(1.-agreg1(ikl)) *isagra(ikl)
4019  dzagra(ikl) = agreg1(ikl) *dz +(1.-agreg1(ikl)) *dzagra(ikl)
4020  t_agra(ikl) = agreg1(ikl) *tn +(1.-agreg1(ikl)) *t_agra(ikl)
4021  roagra(ikl) = agreg1(ikl) *ro +(1.-agreg1(ikl)) *roagra(ikl)
4022  etagra(ikl) = agreg1(ikl) *wn +(1.-agreg1(ikl)) *etagra(ikl)
4023  g1agra(ikl) = agreg1(ikl) *g1 +(1.-agreg1(ikl)) *g1agra(ikl)
4024  g2agra(ikl) = agreg1(ikl) *g2 +(1.-agreg1(ikl)) *g2agra(ikl)
4025  agagra(ikl) = agreg1(ikl) *ag +(1.-agreg1(ikl)) *agagra(ikl)
4026 
4027  END DO
4028 
4029  return
4030  end
4031 
4032 
4033 
4034  subroutine snoptp(jjtime)
4036 !--------------------------------------------------------------------------+
4037 ! MAR/SISVAT SnOptP Sat 12-Feb-2012 MAR |
4038 ! SubRoutine SnOptP computes the Snow Pack optical Properties |
4039 !--------------------------------------------------------------------------+
4040 ! |
4041 ! PARAMETERS: klonv: Total Number of columns = |
4042 ! ^^^^^^^^^^ = Total Number of continental Grid Boxes |
4043 ! X Number of Mosaic Cell per Grid Box |
4044 ! |
4045 ! INPUT: isnoSV = total Nb of Ice/Snow Layers |
4046 ! ^^^^^ ispiSV = 0,...,nsno: Uppermost Superimposed Ice Layer |
4047 ! |
4048 ! ivgtSV = 0,...,12: Vegetation Type |
4049 ! 0: Water, Solid or Liquid |
4050 ! |
4051 ! INPUT: G1snSV : Dendricity (<0) or Sphericity (>0) of Snow Layer |
4052 ! ^^^^^ G2snSV : Sphericity (>0) or Size of Snow Layer |
4053 ! agsnSV : Snow Age [day] |
4054 ! ro__SV : Snow/Soil Volumic Mass [kg/m3] |
4055 ! eta_SV : Water Content [m3/m3] |
4056 ! rusnSV : Surficial Water Thickness [kg/m2] .OR. [mm] |
4057 ! SWS_SV : Surficial Water Status |
4058 ! dzsnSV : Snow Layer Thickness [m] |
4059 ! |
4060 ! albssv : Soil Albedo [-] |
4061 ! zzsnsv : Snow Pack Thickness [m] |
4062 ! |
4063 ! OUTPUT: albisv : Snow/Ice/Water/Soil Integrated Albedo [-] |
4064 ! ^^^^^^ sEX_sv : Verticaly Integrated Extinction Coefficient |
4065 ! |
4066 ! Internal Variables: |
4067 ! ^^^^^^^^^^^^^^^^^^ |
4068 ! SnOpSV : Snow Grain optical Size [m] |
4069 ! EX1_sv : Integrated Snow Extinction (0.3--0.8micr.m) |
4070 ! EX2_sv : Integrated Snow Extinction (0.8--1.5micr.m) |
4071 ! EX3_sv : Integrated Snow Extinction (1.5--2.8micr.m) |
4072 ! |
4073 ! METHODE: Calcul de la taille optique des grains ? partir de |
4074 ! ^^^^^^^ -leur type decrit par les deux variables descriptives |
4075 ! continues sur la plage -99/+99 passees en appel. |
4076 ! -la taille optique (1/10mm) des etoiles, |
4077 ! des grains fins et |
4078 ! des jeunes faces planes |
4079 ! |
4080 ! METHOD: Computation of the optical diameter of the grains |
4081 ! ^^^^^^ described with the CROCUS formalism G1snSV / G2snSV |
4082 ! |
4083 ! REFERENCE: Brun et al. 1989, J. Glaciol 35 pp. 333--342 |
4084 ! ^^^^^^^^^ Brun et al. 1992, J. Glaciol 38 pp. 13-- 22 |
4085 ! Eric Martin Sept.1996 |
4086 ! |
4087 ! CAUTION: Vegetation is not taken into account in albedo computations |
4088 ! ^^^^^^^ Suggestion: 1) Reduce the displacement height and/or LAI |
4089 ! (when snow) for radiative transfert through vegetation |
4090 ! 2) Adapt leaf optical parameters |
4091 ! |
4092 ! |
4093 ! Preprocessing Option: STANDARD Possibility |
4094 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ |
4095 ! #CZ: Albedo Correction (Zenith Angle) (Warren, 1982) |
4096 ! #cz: Albedo Correction (Zenith Angle) (Segal etAl., 1991) (obsolete) |
4097 ! |
4098 ! |
4099 ! Preprocessing Option: STANDARD Col de Porte |
4100 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ |
4101 ! #cp: Col de Porte Integrated Snow/Ice Albedo |
4102 ! #AG: Snow Aging Col de Porte (Brun et al.1991) |
4103 ! |
4104 ! |
4105 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
4106 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
4107 ! FILE | CONTENT |
4108 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
4109 ! # SnOptP____.va | #va: OUTPUT/Verification: Albedo Parameteriz. |
4110 ! | unit 46, SubRoutine SnOptP **ONLY** |
4111 !--------------------------------------------------------------------------+
4112 
4113 
4114 
4115 
4116 
4117 ! Global Variables
4118 ! ================
4119 
4120  USE phy_sv
4121 
4122  USE var_sv
4123  USE vardsv
4124  USE vardcp
4125 
4126  USE varxsv
4127  USE varysv
4128 
4129  IMPLICIT NONE
4130 
4131 ! Internal Variables
4132 ! ==================
4133 
4134  real coalb1(klonv) ! weighted Coalbedo, Vis.
4135  real coalb2(klonv) ! weighted Coalbedo, nIR 1
4136  real coalb3(klonv) ! weighted Coalbedo, nIR 2
4137  real coalbm ! weighted Coalbedo, mean
4138  real sExt_1(klonv) ! Extinction Coeff., Vis.
4139  real sExt_2(klonv) ! Extinction Coeff., nIR 1
4140  real sExt_3(klonv) ! Extinction Coeff., nIR 2
4141  real SnOpSV(klonv, nsno) ! Snow Grain optical Size
4142 c #AG real agesno
4143 
4144  integer isn ,ikl ,isn1 ,jjtime
4145  real sbeta1,sbeta2,sbeta3,sbeta4,sbeta5
4146  real AgeMax,AlbMin,HSnoSV,HIceSV,doptmx,SignG1,Sph_OK
4147  real dalbed,dalbeS,dalbeW
4148 c #CZ real bsegal,czemax,csegal
4149  real RoFrez,DiffRo,SignRo,SnowOK,OpSqrt
4150  real albSn1,albIc1,a_SnI1,a_SII1!,alb1sv(klonv)
4151  real albSn2,albIc2,a_SnI2,a_SII2!,alb2sv(klonv)
4152  real albSn3,albIc3,a_SnI3,a_SII3!,alb3sv(klonv)
4153  real albSno,albIce,albSnI,albSII,albWIc,albmax
4154  real doptic,Snow_H,SIce_H,SnownH,SIcenH
4155  real exarg1,exarg2,exarg3,sign_0,sExt_0
4156  real albedo_old
4157  real ro_ave,dz_ave
4158 
4159 ! OUTPUT/Verification: Albedo Parameteriz.
4160 ! #va logical aw_opn ! IO Switch
4161 ! #va common/SnOptP_L/aw_opn !
4162 
4163 
4164 ! Local DATA
4165 ! ============
4166 
4167 ! For the computation of the solar irradiance extinction in snow
4168 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4169  data sbeta1/0.0192/,sbeta2/0.4000/,sbeta3/0.1098/
4170  data sbeta4/1.0000/
4171  data sbeta5/2.00e1/
4172 
4173 ! Snow Age Maximum (Taiga, e.g. Col de Porte)
4174 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4175  data agemax /60.0/
4176 ! AgeMax: Snow Age Maximum [day]
4177 
4178  data albmin /0.94/
4179 ! AlbMin: Albedo Minimum / visible (0.3--0.8 micrometers)
4180 
4181  data hsnosv /0.01/
4182 ! HSnoSV: Snow Thickness through witch
4183 ! Albedo is interpolated to Ice Albedo
4184  data hicesv /0.10/
4185 ! HIceSV: Snow/Ice Thickness through witch
4186 ! Albedo is interpolated to Soil Albedo
4187  data doptmx /2.3e-3/
4188 ! doptmx: Maximum optical Diameter (pi * R**2) [m]
4189 !
4190 c #CZ data czeMAX /0.173648178/ ! 80.deg (Segal et al., 1991 JAS)
4191 c #CZ data bsegal /4.00 / !
4192  data albmax /0.99 / ! Albedo max
4193 
4194 
4195 ! Snow Grain optical Size
4196 ! =======================
4197 
4198  DO isn=1,nsno
4199  DO ikl=1,knonv
4200 
4201  g2snsv(ikl,isn) = max(eps6,g2snsv(ikl,isn))
4202 ! Avoid non physical Values
4203 
4204  signg1 = sign(un_1,g1snsv(ikl,isn))
4205  sph_ok = max(zer0,signg1)
4206 
4207  snopsv(ikl,isn) = 1.e-4 *
4208 ! SI: (from 1/10 mm to m)
4209 
4210 
4211 ! Contribution of Non Dendritic Snow
4212 ! ----------------------------------
4213 
4214  . ( sph_ok *( g2snsv(ikl,isn)*g1snsv(ikl,isn)/g1_dsv
4215  . +max(half*g2snsv(ikl,isn),dfcdsv)
4216  . *(1.00-g1snsv(ikl,isn) /g1_dsv))
4217 
4218 
4219 ! Contribution of Dendritic Snow
4220 ! ----------------------------------
4221 
4222  . +(1.-sph_ok)*( -g1snsv(ikl,isn)*ddcdsv /g1_dsv
4223  . +(1.00+g1snsv(ikl,isn) /g1_dsv)
4224  . * (g2snsv(ikl,isn)*dscdsv /g1_dsv
4225  . +(1.00-g2snsv(ikl,isn) /g1_dsv)
4226  . *dfcdsv )))
4227  snopsv(ikl,isn) = max(zer0,snopsv(ikl,isn))
4228  END DO
4229  END DO
4230 
4231 
4232 ! Snow/Ice Albedo
4233 ! ===============
4234 
4235 ! Snow Age (Influence on Albedo)
4236 ! ------------------------------
4237 
4238 c #AG IF (iabs(mod(jjtime,86400)).lt.dt__SV) THEN
4239 c #AG DO isn=1,nsno
4240 c #AG DO ikl=1,knonv
4241 c #AG agsnSV(ikl,isn) = agsnSV(ikl,isn) + 1.
4242 c #AG. + max(zer0,DH_dSV(ivgtSV(ikl))-DH_dSV(4)) ! High Vegetation
4243 ! ! Impurities
4244 ! CAUTION: crude parameterization
4245 ! ^^^^^^^
4246 c #AG END DO
4247 c #AG END DO
4248 c #AG END IF
4249 
4250 
4251 ! Uppermost effective Snow Layer
4252 ! ------------------------------
4253 
4254  DO ikl=1,knonv
4255 
4256  isn = max(1,isnosv(ikl))
4257 
4258  signro = sign(un_1, rocdsv - ro__sv(ikl,isn))
4259  snowok = max(zer0,signro) ! Ice Density Threshold
4260 
4261  opsqrt = sqrt(snopsv(ikl,isn))
4262 
4263  albsn1 = 0.96-1.580*opsqrt
4264  albsn1 = max(albsn1,albmin)
4265 
4266  albsn1 = max(albsn1,zer0)
4267  albsn1 = min(albsn1,un_1)
4268 
4269  albsn2 = 0.95-15.40*opsqrt
4270  albsn2 = max(albsn2,zer0)
4271  albsn2 = min(albsn2,un_1)
4272 
4273  doptic = min(snopsv(ikl,isn),doptmx)
4274  albsn3 = 346.3*doptic -32.31*opsqrt +0.88
4275  albsn3 = max(albsn3,zer0)
4276  albsn3 = min(albsn3,un_1)
4277 
4278  albsno = so1dsv*albsn1
4279  . + so2dsv*albsn2
4280  . + so3dsv*albsn3
4281 
4282  snowok = snowok*max(zer0,sign(un_1,albsno-ai3dsv))
4283  ! Minimum snow albedo is aI3dSV
4284 
4285  albsn1 = snowok*albsn1+(1.0-snowok)*max(albsno,ai3dsv)
4286  albsn2 = snowok*albsn2+(1.0-snowok)*max(albsno,ai3dsv)
4287  albsn3 = snowok*albsn3+(1.0-snowok)*max(albsno,ai3dsv)
4288 
4289 
4290 ! Snow/Ice Pack Thickness
4291 ! -----------------------
4292 
4293  isn = max(min(isnosv(ikl) ,ispisv(ikl)),0)
4294  snow_h = zzsnsv(ikl,isnosv(ikl))-zzsnsv(ikl,isn)
4295  sice_h = zzsnsv(ikl,isnosv(ikl))
4296  snownh = snow_h / hsnosv
4297  snownh = min(un_1, snownh)
4298  sicenh = sice_h / (hicesv
4299  . + max(zer0,z0mdsv(ivgtsv(ikl))
4300  . - z0mdsv(4) ))
4301  sicenh = min(un_1, sicenh)
4302 
4303 ! The value of SnownH is set to 1 in case of ice lenses above
4304 ! 1m of dry snow (ro<700kg/m3) for using CROCUS albedo
4305 
4306  ro_ave = 0.
4307  dz_ave = 0.
4308  snowok = 1.
4309  do isn = isnosv(ikl),1,-1
4310  ro_ave = ro_ave + ro__sv(ikl,isn) * dzsnsv(ikl,isn) * snowok
4311  dz_ave = dz_ave + dzsnsv(ikl,isn) * snowok
4312  snowok = max(zer0,sign(un_1,1.-dz_ave))
4313  enddo
4314 
4315  ro_ave = ro_ave / max(dz_ave,eps6)
4316  snowok = max(zer0,sign(un_1,700.-ro_ave))
4317 
4318  snownh = snowok + snownh * (1. - snowok)
4319 
4320 
4321 ! Integrated Snow/Ice Albedo: Case of Water on Bare Ice
4322 ! -----------------------------------------------------
4323 
4324  isn = max(min(isnosv(ikl) ,ispisv(ikl)),0)
4325 
4326  albwic = ai1dsv-(ai1dsv-ai2dsv)
4327  . * exp(-rusnsv(ikl) !
4328  . * (1. -sws_sv(ikl) ! 0 <=> freezing
4329  . * (1 -min(1,iabs(isn-isnosv(ikl))))) ! 1 <=> isn=isnoSV
4330  . /ru_dsv) !
4331 
4332  signro = sign(un_1,rhoice-1.-ro__sv(ikl,isn)) ! RoSN<920kg/m3
4333  snowok = max(zer0,signro)
4334 
4335  albwic = (1. - snowok) * albwic + snowok
4336  . * (ai2dsv + (ai3dsv -ai2dsv)
4337  . * (ro__sv(ikl,isn)-rhoice)/(rocdsv-rhoice))
4338 
4339 ! rocdSV < ro < rhoIce | aI2dSV< al >aI3dSV (fct of density))
4340 ! ro > rhoIce | aI1dSV< al >aI2dSV (fct of superficial water content)s
4341 
4342 
4343 ! Integrated Snow/Ice Albedo
4344 ! -------------------------------
4345 
4346  a_sii1 = albwic +(albsn1-albwic) *snownh
4347  a_sii1 = min(a_sii1 ,albsn1)
4348 
4349  a_sii2 = albwic +(albsn2-albwic) *snownh
4350  a_sii2 = min(a_sii2 ,albsn2)
4351 
4352  a_sii3 = albwic +(albsn3-albwic) *snownh
4353  a_sii3 = min(a_sii3 ,albsn3)
4354 
4355 c #AG agesno = min(agsnSV(ikl,isn) ,AgeMax)
4356 c #AG a_SII1 = a_SII1 -0.175*agesno/AgeMax
4357 ! Impurities: Col de Porte Parameter.
4358 
4359 
4360 ! Zenith Angle Correction (Segal et al., 1991, JAS 48, p.1025)
4361 ! ----------------------- (Wiscombe & Warren, dec1980, JAS , p.2723)
4362 ! (Warren, 1982, RG , p. 81)
4363 ! --------------------------------------------
4364 
4365 
4366  dalbed = 0.0
4367 c #CZ csegal = max(czemax ,coszSV(ikl))
4368 c #cz dalbeS = ((bsegal+1.00)/(1.00+2.0*bsegal*csegal)
4369 c #cz. - 1.00 )*0.32
4370 c #cz. / bsegal
4371 c #cz dalbeS = max(dalbeS,zer0)
4372 c #cz dalbed = dalbeS * min(1,isnoSV(ikl))
4373 
4374 c #CZ dalbeW =(0.64 - csegal )*0.0625 ! Warren 1982, RevGeo, fig.12b
4375  ! 0.0625 = 5% * 1/0.8, p.81
4376  ! 0.64 = cos(50)
4377 c #CZ dalbed = dalbeW * min(1,isnoSV(ikl))
4378 
4379 ! Col de Porte Integrated Snow/Ice Albedo
4380 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4381 c #cp IF (ColPrt.AND.TotSol.gt.0.) THEN
4382 c #cp albSII = (((Dr_1SN*a_SII1+Dr_2SN*a_SII2+Dr_3SN*a_SII3)
4383 c #cp. +dalbed )
4384 c #cp. *DirSol
4385 c #cp. +(Df_1SN*a_SII1+Df_2SN*a_SII2+Df_3SN*a_SII3)
4386 c #cp. *DifSol*(1. -cld_SV(ikl))
4387 c #cp. +(Dfc1SN*a_SII1+Dfc2SN*a_SII2+Dfc3SN*a_SII3)
4388 c #cp. *DifSol* cld_SV(ikl) )
4389 c #cp. / TotSol
4390 
4391 ! Elsewhere Integrated Snow/Ice Albedo
4392 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4393 c #cp ELSE
4394  albsii = so1dsv*a_sii1
4395  . + so2dsv*a_sii2
4396  . + so3dsv*a_sii3
4397 c #cp END IF
4398 
4399 
4400 ! Integrated Snow/Ice/Soil Albedo
4401 ! -------------------------------
4402 
4403  alb1sv(ikl) = albssv(ikl) +(a_sii1-albssv(ikl))*sicenh
4404  alb1sv(ikl) = min(alb1sv(ikl) ,a_sii1)
4405 
4406  alb2sv(ikl) = albssv(ikl) +(a_sii2-albssv(ikl))*sicenh
4407  alb2sv(ikl) = min(alb2sv(ikl) ,a_sii2)
4408 
4409  alb3sv(ikl) = albssv(ikl) +(a_sii3-albssv(ikl))*sicenh
4410  alb3sv(ikl) = min(alb3sv(ikl) ,a_sii3)
4411 
4412  albisv(ikl) = albssv(ikl) +(albsii-albssv(ikl))*sicenh
4413  albisv(ikl) = min(albisv(ikl) ,albsii)
4414 
4415 
4416 ! Integrated Snow/Ice/Soil Albedo: Clouds Correction! Greuell & all., 1994
4417 ! --------------------------------------------------! Glob.&t Planet.Change
4418  ! (9):91-114
4419 c #cp IF (.NOT.ColPrt) THEN
4420  alb1sv(ikl) = alb1sv(ikl) + 0.05 *(cld_sv(ikl)-0.5)*sicenh
4421 c #CZ. + dalbed * (1.-cld_SV(ikl))
4422  alb2sv(ikl) = alb2sv(ikl) + 0.05 *(cld_sv(ikl)-0.5)*sicenh
4423 c #CZ. + dalbed * (1.-cld_SV(ikl))
4424  alb3sv(ikl) = alb3sv(ikl) + 0.05 *(cld_sv(ikl)-0.5)*sicenh
4425 c #CZ. + dalbed * (1.-cld_SV(ikl))
4426  albisv(ikl) = albisv(ikl) + 0.05 *(cld_sv(ikl)-0.5)*sicenh
4427 c #CZ. + dalbed * (1.-cld_SV(ikl))
4428 c #cp END IF
4429 
4430 
4431 ! Integrated Snow/Ice/Soil Albedo: Minimum snow albedo = 40%
4432 ! ----------------------------------------------------------
4433 
4434  albedo_old = albisv(ikl)
4435 
4436  albisv(ikl) = max(albisv(ikl),0.400 * sicenh
4437  . + albssv(ikl) *(1.0 - sicenh))
4438  alb1sv(ikl) = alb1sv(ikl) - 1.0/3.0 ! 33 %
4439  . * (albedo_old-albisv(ikl)) / so1dsv
4440  alb2sv(ikl) = alb2sv(ikl) - 1.0/3.0 ! 33 %
4441  . * (albedo_old-albisv(ikl)) / so2dsv
4442  alb3sv(ikl) = alb3sv(ikl) - 1.0/3.0 ! 33 %
4443  . * (albedo_old-albisv(ikl)) / so3dsv
4444 
4445 
4446 ! Integrated Snow/Ice/Soil Albedo: Maximum albedo = 99%
4447 ! -----------------------------------------------------
4448 
4449  albedo_old = albisv(ikl)
4450  albisv(ikl) = min(albisv(ikl),0.99)
4451  alb1sv(ikl) = alb1sv(ikl) - 1.0/3.0 ! 33 %
4452  . * (albedo_old-albisv(ikl)) / so1dsv
4453  alb2sv(ikl) = alb2sv(ikl) - 1.0/3.0 ! 33 %
4454  . * (albedo_old-albisv(ikl)) / so2dsv
4455  alb3sv(ikl) = alb3sv(ikl) - 1.0/3.0 ! 33 %
4456  . * (albedo_old-albisv(ikl)) / so3dsv
4457 
4458  alb1sv(ikl) = min(max(zer0,alb1sv(ikl)),albmax)
4459  alb2sv(ikl) = min(max(zer0,alb2sv(ikl)),albmax)
4460  alb3sv(ikl) = min(max(zer0,alb3sv(ikl)),albmax)
4461 
4462  END DO
4463 
4464 
4465 ! Extinction Coefficient: Exponential Factor
4466 ! ==========================================
4467 
4468  DO ikl=1,knonv
4469  sext_1(ikl) = 1.
4470  sext_2(ikl) = 1.
4471  sext_3(ikl) = 1.
4472  sex_sv(ikl,nsno+1) = 1.
4473 
4474  coalb1(ikl) = (1. -alb1sv(ikl))*so1dsv
4475  coalb2(ikl) = (1. -alb2sv(ikl))*so2dsv
4476  coalb3(ikl) = (1. -alb3sv(ikl))*so3dsv
4477  coalbm = coalb1(ikl) +coalb2(ikl) +coalb3(ikl)
4478  coalb1(ikl) = coalb1(ikl) /coalbm
4479  coalb2(ikl) = coalb2(ikl) /coalbm
4480  coalb3(ikl) = coalb3(ikl) /coalbm
4481  END DO
4482 
4483  DO isn=nsno,1,-1
4484  DO ikl=1,knonv
4485 
4486  signro = sign(un_1, rocdsv - ro__sv(ikl,isn))
4487  snowok = max(zer0,signro) ! Ice Density Threshold
4488 
4489  rofrez = 1.e-3 * ro__sv(ikl,isn) * (1.0-eta_sv(ikl,isn))
4490 
4491  opsqrt = sqrt(max(eps6,snopsv(ikl,isn)))
4492  exarg1 = snowok *1.e2 *max(sbeta1*rofrez/opsqrt,sbeta2)
4493  . +(1.0-snowok) *sbeta5
4494  exarg2 = snowok *1.e2 *max(sbeta3*rofrez/opsqrt,sbeta4)
4495  . +(1.0-snowok) *sbeta5
4496  exarg3 = snowok *1.e2 *sbeta5
4497  . +(1.0-snowok) *sbeta5
4498 
4499 ! Col de Porte Snow Extinction Coefficient
4500 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4501 c #cp IF (ColPrt.AND.TotSol.gt.0.) THEN
4502 c #cp exarg1 = exarg1*(Dr_1SN*DirSol
4503 c #cp. +Df_1SN*DifSol*(1.-cld_SV(ikl))
4504 c #cp. +Dfc1SN*DifSol* cld_SV(ikl) )
4505 c #cp. /(Dr_1SN*TotSol)
4506 c #cp exarg2 = exarg2*(Dr_2SN*DirSol
4507 c #cp. +Df_2SN*DifSol*(1.-cld_SV(ikl))
4508 c #cp. +Dfc2SN*DifSol* cld_SV(ikl) )
4509 c #cp. /(Dr_2SN*TotSol)
4510 c #cp exarg3 = exarg3*(Dr_3SN*DirSol
4511 c #cp. +Df_3SN*DifSol*(1.-cld_SV(ikl))
4512 c #cp. +Dfc3SN*DifSol* cld_SV(ikl) )
4513 c #cp. /(Dr_3SN*TotSol)
4514 c #cp END IF
4515 
4516 
4517 ! Integrated Extinction of Solar Irradiance (Normalized Value)
4518 ! ============================================================
4519 
4520  sext_1(ikl) = sext_1(ikl)
4521  . * exp(min(0.0,-exarg1 *dzsnsv(ikl,isn)))
4522  sign_0 = sign(un_1,epsn -sext_1(ikl))
4523  sext_0 = max(zer0,sign_0)*sext_1(ikl)
4524  sext_1(ikl) = sext_1(ikl) -sext_0
4525 
4526  sext_2(ikl) = sext_2(ikl)
4527  . * exp(min(0.0,-exarg2 *dzsnsv(ikl,isn)))
4528  sign_0 = sign(un_1,epsn -sext_2(ikl))
4529  sext_0 = max(zer0,sign_0)*sext_2(ikl)
4530  sext_2(ikl) = sext_2(ikl) -sext_0
4531 
4532  sext_3(ikl) = sext_3(ikl)
4533  . * exp(min(0.0,-exarg3 *dzsnsv(ikl,isn)))
4534  sign_0 = sign(un_1,epsn -sext_3(ikl))
4535  sext_0 = max(zer0,sign_0)*sext_3(ikl)
4536  sext_3(ikl) = sext_3(ikl) -sext_0
4537 
4538  sex_sv(ikl,isn) = coalb1(ikl) * sext_1(ikl)
4539  . + coalb2(ikl) * sext_2(ikl)
4540  . + coalb3(ikl) * sext_3(ikl)
4541  END DO
4542  END DO
4543 
4544  DO isn=0,-nsol,-1
4545  DO ikl=1,knonv
4546  sex_sv(ikl,isn) = 0.0
4547  END DO
4548  END DO
4549 
4550 
4551 ! Albedo: IO
4552 ! ==========
4553 
4554 ! #va IF (.NOT.aw_opn) THEN
4555 ! #va aw_opn = .true.
4556 ! #va open(unit=46,status='unknown',file='SnOptP____.va')
4557 ! #va rewind( 46)
4558 ! #va END IF
4559 
4560 ! #va ikl=1
4561 ! #va write(46,460)daHost
4562  460 format('---------------------------------+----+',
4563  . '-------+-------+-------+-------+-------+-------+',
4564  . '-------+-------+-------+',
4565  . /,'Snow/Ice Pack ',a18,' | |',
4566  . ' z [m] |0.3/0.8|0.8/1.5|1.5/2.8| Full |Opt[mm]|',
4567  . ' G1 | G2 | ro |',
4568  . /,'---------------------------------+----+',
4569  . '-------+-------+-------+-------+-------+-------+',
4570  . '-------+-------+-------+')
4571 ! ______________________________________________________________
4572 ! #va write(46,461) SIce_H,
4573 ! #va. alb1sv(ikl),alb2sv(ikl),alb3sv(ikl),
4574 ! #va. albisv(ikl)
4575  461 format('Integrated Snow/Ice/Soil Albedo |',
4576  . 3x,' |', f6.3,' |' ,4(f6.3,' |'), 6x ,' |',
4577  . 3( 6x ,' |'))
4578 ! ______________________________________________________________
4579 ! #va write(46,462)ispiSV(ikl),a_SII1,a_SII2,a_SII3,albSII
4580  462 format('Integrated Snow/Ice Albedo |',
4581  . i3,' |', 6x ,' |' ,4(f6.3,' |'), 6x ,' |',
4582  . 3( 6x ,' |'))
4583 ! ______________________________________________________________
4584 ! #va write(46,463) rusnSV(ikl), albWIc,
4585 ! #va. SWS_SV(ikl)
4586  463 format('Integrated Water/Bare Ice Albedo |',
4587  . 3x,' |', f6.3,'w|' ,3( 6x, ' |'),
4588  . f6.3,' |' ,f6.3,' |',
4589  . 3( 6x ,' |'))
4590 ! ______________________________________________________________
4591 ! #va write(46,465)isn1 ,zzsnsv(ikl,isn1),
4592 ! #va. albIc1,albIc2,albIc3,albIce,
4593 ! #va. 1.e3*SnOpSV(ikl,max(1,isnoSV(ikl)-1)),
4594 ! #va. G1snSV(ikl,max(1,isnoSV(ikl)-1)),
4595 ! #va. G2snSV(ikl,max(1,isnoSV(ikl)-1)),
4596 ! #va. ro__SV(ikl,max(1,isnoSV(ikl)-1))
4597 ! #va. *(1. - eta_SV(ikl,max(1,isnoSV(ikl)-1)))
4598  465 format('Surficial Ice Lense |',
4599  . i3,' |', (f6.3,'i|'),4(f6.3,' |'),f6.3,' |',
4600  . 3(f6.1,' |'))
4601 ! ______________________________________________________________
4602 ! #va write(46,466)isnoSV(ikl),zzsnsv(ikl,isnoSV(ikl)),
4603 ! #va. albSn1,albSn2,albSn3,albSno,
4604 ! #va. 1.e3*SnOpSV(ikl,isnoSV(ikl)),
4605 ! #va. G1snSV(ikl,isnoSV(ikl)),
4606 ! #va. G2snSV(ikl,isnoSV(ikl)),
4607 ! #va. ro__SV(ikl,isnoSV(ikl))
4608 ! #va. *(1. - eta_SV(ikl,isnoSV(ikl)))
4609  466 format('Uppermost Effective Snow Layer |',
4610  . i3,' |', (f6.3,'*|'),4(f6.3,' |'),f6.3,' |',
4611  . 3(f6.1,' |'))
4612 
4613  return
4614  end
4615 
4616 
4617  subroutine vgoptp
4619 !--------------------------------------------------------------------------+
4620 ! MAR/SISVAT VgOptP Sat 12-Feb-2012 MAR |
4621 ! SubRoutine VgOptP computes the Canopy optical Properties |
4622 !--------------------------------------------------------------------------+
4623 ! |
4624 ! PARAMETERS: klonv: Total Number of columns = |
4625 ! ^^^^^^^^^^ = Total Number of continental Grid Boxes |
4626 ! X Number of Mosaic Cell per Grid Box |
4627 ! |
4628 ! INPUT: ivgtSV = 0,...,12: Vegetation Type |
4629 ! ^^^^^ 0: Water, Solid or Liquid |
4630 ! |
4631 ! INPUT: coszSV : Cosine of the Sun Zenithal Distance [-] |
4632 ! ^^^^^ sol_SV : Surface Downward Solar Radiation [W/m2] |
4633 ! snCaSV : Canopy Snow Thickness [mm w.e.] |
4634 ! |
4635 ! LAI_sv : Leaf Area Index (snow included) [-] |
4636 ! glf_sv : Green Leaf Fraction of NOT fallen Leaves [-] |
4637 ! albisv : Snow/Ice/Water/Soil Integrated Albedo [-] |
4638 ! |
4639 ! OUTPUT: alb_SV : Surface-Canopy Albedo [-] |
4640 ! ^^^^^^ SoCasv : Absorbed Solar Radiation by Canopy (Normaliz)[-] |
4641 ! SoSosv : Absorbed Solar Radiation by Surfac (Normaliz)[-] |
4642 ! LAIesv : Effective Leaf Area Index for Transpiration [-] |
4643 ! |
4644 ! Internal Variables: Normalized Values: |
4645 ! ^^^^^^^^^^^^^^^^^^ |
4646 ! u0_Vis : Upward Visible Radiation at Top Canopy [-] |
4647 ! absg_V : Absorbed Visible Radiation by the Ground [-] |
4648 ! absv_V : Absorbed Visible Radiation by the Canopy [-] |
4649 ! u0_nIR : Upward Near IR Radiation at Top Canopy [-] |
4650 ! absgnI : Absorbed Near IR Radiation by the Ground [-] |
4651 ! absv_V : Absorbed Near IR Radiation by the Canopy [-] |
4652 ! |
4653 ! REFERENCE: De Ridder, 1997, unpublished thesis, chapter 2 (DR97,2) |
4654 ! ^^^^^^^^^ |
4655 ! |
4656 ! ASSUMPTIONS: Leaf Inclination Index chi_l (eqn2.49 DR97) set to zero |
4657 ! ^^^^^^^^^^^ for all vegetation types |
4658 ! Radiation Fluxes are normalized |
4659 ! with respect to incoming solar radiation (=I0+D0) |
4660 ! |
4661 !--------------------------------------------------------------------------+
4662 
4663 
4664 
4665 
4666 
4667 ! Global Variables
4668 ! ================
4669 
4670  USE phy_sv
4671 
4672  USE var_sv
4673 
4674  USE varxsv
4675  USE varysv
4676 
4677 
4678  IMPLICIT NONE
4679 
4680 ! Internal Variables
4681 ! ==================
4682 
4683  integer ikl ,kri
4684 
4685  real exdRad,k_drad,k___sv(klonv)
4686  real e_prad,e1pRad
4687  real zv_fac,zv1fac,deadLF
4688  real T_Rad0,A_Rad0,A0__sv(klonv)
4689  real r0_Rad,t0_Rad,nu_Rad
4690  real Tr_Rad,Re_Rad,r__Rad,t__Rad,t1_Rad
4691  real arggam, gamma,gamasv(klonv),gammaL
4692  real denSig,Sig__c,Sigcsv(klonv)
4693  real DDifH1,DDifC1,C1__sv(klonv)
4694  real DDifH2,DDifC2,C2__sv(klonv)
4695  real denS_s,denS_a,den_c1,DDif_L
4696  real u0_Vis,absg_V,absv_V
4697  real u0_nIR,absgnI,absvnI
4698  real argexg,argexk,criLAI(klonv)
4699  real residu,d_DDif,dDDifs,dDDifa
4700 
4701 
4702 ! Internal DATA
4703 ! =============
4704 
4705  integer nvgt
4706  parameter(nvgt=12)
4707  real reVisL(0:nvgt) ! Reflectivity / Visible / Live Leaves
4708  real renIRL(0:nvgt) ! Reflectivity / Near IR / Live Leaves
4709  real trVisL(0:nvgt) ! Transmitivity / Visible / Live Leaves
4710  real trnIRL(0:nvgt) ! Transmitivity / Near IR / Live Leaves
4711  real reVisD(0:nvgt) ! Reflectivity / Visible / Dead Leaves
4712  real renIRD(0:nvgt) ! Reflectivity / Near IR / Dead Leaves
4713  real trVisD(0:nvgt) ! Transmitivity / Visible / Dead Leaves
4714  real trnIRD(0:nvgt) ! Transmitivity / Near IR / Dead Leaves
4715 
4716  real reVisS ! Reflectivity / Visible / Canopy Snow
4717  real renIRS ! Reflectivity / Near IR / Canopy Snow
4718  real trVisS ! Transmitivity / Visible / Canopy Snow
4719  real trnIRS ! Transmitivity / Near IR / Canopy Snow
4720 
4721  real snCaMx ! Canopy Snow Thickness for having Snow
4722  ! Snow Reflectivity and Transmitivity
4723  real CriStR ! Critical Radiation Stomatal Resistance
4724 
4725  integer ivg
4726 
4727  DATA (revisl(ivg),renirl(ivg),trvisl(ivg),trnirl(ivg),
4728  . revisd(ivg),renird(ivg),trvisd(ivg),trnird(ivg),ivg=0,nvgt)
4729 
4730 ! reVisL renIRL trVisL trnIRL reVisD renIRD trVisD trnIRD IGBP CLASSES
4731 ! ------ ------ ------ ------ ------ ------ ------ ------+ ----------------
4732  ./0.11, 0.58, 0.07, 0.25, 0.36, 0.58, 0.22, 0.38,! 0 NO VEGETATION
4733  . 0.11, 0.58, 0.07, 0.25, 0.36, 0.58, 0.22, 0.38,! 1 CROPS LOW
4734  . 0.11, 0.58, 0.07, 0.25, 0.36, 0.58, 0.22, 0.38,! 2 CROPS MEDIUM
4735  . 0.11, 0.58, 0.07, 0.25, 0.36, 0.58, 0.22, 0.38,! 3 CROPS HIGH
4736  . 0.11, 0.58, 0.07, 0.25, 0.36, 0.58, 0.22, 0.38,! 4 GRASS LOW
4737  . 0.11, 0.58, 0.07, 0.25, 0.36, 0.58, 0.22, 0.38,! 5 GRASS MEDIUM
4738  . 0.11, 0.58, 0.07, 0.25, 0.36, 0.58, 0.22, 0.38,! 6 GRASS HIGH
4739  . 0.10, 0.45, 0.05, 0.25, 0.16, 0.39, 0.01, 0.01,! 7 BROADL LOW
4740  . 0.10, 0.45, 0.05, 0.25, 0.16, 0.39, 0.01, 0.01,! 8 BROADL MEDIUM
4741  . 0.10, 0.45, 0.05, 0.25, 0.16, 0.39, 0.01, 0.01,! 9 BROADL HIGH
4742  . 0.07, 0.35, 0.05, 0.10, 0.10, 0.39, 0.01, 0.01,! 10 NEEDLE LOW
4743  . 0.07, 0.35, 0.05, 0.10, 0.10, 0.39, 0.01, 0.01,! 11 NEEDLE MEDIUM
4744  . 0.07, 0.35, 0.05, 0.10, 0.10, 0.39, 0.01, 0.01/! 12 NEEDLE HIGH
4745 
4746  DATA
4747  .reviss,renirs,trviss,trnirs
4748 ! ------ ------ ------ ------+
4749  ./0.85, 0.85, 0.00, 0.00/!
4750 ! REMARK: Possible Refinement by taking actual Surface Snow Reflectivities
4751 ! ^^^^^^
4752 
4753  DATA sncamx /0.5/
4754 
4755  DATA cristr /25./
4756 
4757 
4758 ! General Parameters, Solar Radiation Absorption
4759 ! ==============================================
4760 
4761  DO ikl=1,knonv
4762 
4763  k_drad = 0.5 /max(coszsv(ikl),eps6) ! absorbed irradiance fraction
4764  e_prad = 2.5 * coszsv(ikl) ! exponential argument,
4765  ! V/nIR radiation partitioning,
4766  ! DR97, 2, eqn (2.53) & (2.54)
4767  exdrad = exp(-k_drad*lai_sv(ikl))! exponential, Irradi. Absorpt.
4768  e1prad = 1.-exp(-e_prad) ! exponential, V/nIR Rad. Part.
4769 
4770  ivg = ivgtsv(ikl) ! Vegetation Type
4771  zv_fac = min( sncasv(ikl)/sncamx ! Contribution of Snow to Leaf
4772  . , un_1) ! Reflectivity and Transmissiv.
4773  zv1fac = 1. - zv_fac !
4774  deadlf = 1. - glf_sv(ikl) ! Dead Leaf Fraction
4775 
4776 
4777 ! Visible Part of the Solar Radiation Spectrum (V, 0.4--0.7mi.m)
4778 ! ================================================================
4779 
4780  a_rad0 = 0.25 + 0.697 * e1prad ! Absorbed Vis. Radiation
4781  t_rad0 = 1. - a_rad0 ! Transmitted Vis Radiation
4782 
4783 ! Reflectivity, Transmissivity
4784 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4785  re_rad = glf_sv(ikl) *revisl(ivg)
4786  . + deadlf *revisd(ivg)
4787  tr_rad = glf_sv(ikl) *trvisl(ivg)
4788  . + deadlf *trvisd(ivg)
4789 
4790 ! Adaptation to Snow
4791 ! ^^^^^^^^^^^^^^^^^^
4792  re_rad = zv1fac *re_rad + zv_fac *reviss
4793  tr_rad = zv1fac *tr_rad + zv_fac *trviss
4794 
4795 ! Scattering /DR97, 2, eqn (2.26) and (2.27) ! Diffuse Radiation:
4796 ! ^^^^^^^^^^ ! ^^^^^^^^^^^^^^^^^^
4797  r__rad = (2. *re_rad + tr_rad) / 3. ! Upw. Scatter.Fract.
4798  t__rad = ( re_rad + 2. *tr_rad) / 3. ! Downw.Scatter.Fract.
4799 
4800  t1_rad = 1. -t__rad !
4801  arggam = t1_rad*t1_rad-r__rad*r__rad !
4802  arggam = max(arggam,zer0) !
4803  gamma = sqrt(arggam) ! eqn (2.39)
4804  gammal = min( gamma*lai_sv(ikl),40.0) !
4805  ddifh1 = exp( gammal ) ! Downw.Diffus.Solut.1
4806  ddifh2 = exp(-gammal ) ! Downw.Diffus.Solut.2
4807 ! REMARK: These 2 contributions are zero in case of 0 Reflectivity
4808 ! ^^^^^^
4809 
4810 ! Scattering /DR97, 2, eqn (2.19) and (2.20) ! Direct Radiation:
4811 ! ^^^^^^^^^^ ! ^^^^^^^^^^^^^^^^^^
4812  r0_rad = 0.5 *((re_rad+tr_rad) *k_drad ! Upw. Scatter.Fract.
4813  . +(re_rad-tr_rad) / 3.) !
4814  t0_rad = 0.5 *((re_rad+tr_rad) *k_drad ! Downw.Scatter.Fract.
4815  . -(re_rad-tr_rad) / 3.) !
4816 
4817  nu_rad = t1_rad-r__rad*albisv(ikl) ! nu coeff., eqn 2.43
4818  den_c1 = gamma*(ddifh1+ddifh2) ! eqn (2.43) Denomin.
4819  . +nu_rad*(ddifh1-ddifh2) !(Constant for DDifH1)
4820 
4821  densig = gamma*gamma - k_drad*k_drad ! eqn (2.40) Denomin.
4822  dens_s = sign(un_1,densig) !
4823  dens_a = abs( densig) !
4824  densig = max(eps6,dens_a) * dens_s !
4825  sig__c = (r__rad* r0_rad ! sigma_c, eqn (2.40)
4826  . +t0_rad*(k_drad+t1_rad)) / densig !
4827 
4828  ddifc1 = ((gamma-nu_rad)*(t_rad0-sig__c*a_rad0)*ddifh2
4829  . +((k_drad-nu_rad)* sig__c
4830  . +t0_rad+r__rad * albisv(ikl)) *a_rad0 *exdrad)
4831  . /max(den_c1,eps6)
4832  ddifc2 = t_rad0 - ddifc1-sig__c*a_rad0
4833 
4834 ! Visible Diffuse Fluxes
4835 ! ^^^^^^^^^^^^^^^^^^^^^^
4836  ddif_l = ddifc1*ddifh1 + ddifc2*ddifh2 ! DOWNward,
4837  . + sig__c*a_rad0 *exdrad ! Canopy Basis
4838  u0_vis = ((gamma+t1_rad)*ddifc1 ! UPward
4839  . -(gamma-t1_rad)*ddifc2 ! Canopy Top
4840  . -((k_drad-t1_rad)*sig__c !
4841  . +t0_rad )*a_rad0) !
4842  . / max(r__rad,eps6) !
4843  u0_vis = min(0.99,max(eps6,u0_vis)) ! ERROR
4844  absg_v = (1.-albisv(ikl))*(a_rad0*exdrad ! Ground Absorption
4845  . +ddif_l ) !
4846  absv_v = (1.-u0_vis )- absg_v ! Veget. Absorption
4847 
4848 ! Parameters for Computing Effective LAI for Transpiration
4849 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4850  gamasv(ikl) = gamma
4851  c1__sv(ikl) = ddifc1
4852  c2__sv(ikl) = ddifc2
4853  sigcsv(ikl) = sig__c
4854  k___sv(ikl) = k_drad
4855  a0__sv(ikl) = a_rad0
4856 
4857 
4858 ! Near-IR Part of the Solar Radiation Spectrum (nIR, 0.7--2.8mi.m)
4859 ! ================================================================
4860 
4861  a_rad0 = 0.80 + 0.185 * e1prad ! Absorbed nIR. Radiation
4862  t_rad0 = 1. - a_rad0 ! Transmitted nIR Radiation
4863 
4864 ! Reflectivity, Transmissivity
4865 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4866  re_rad = glf_sv(ikl) *renirl(ivg)
4867  . + deadlf *renird(ivg)
4868  tr_rad = glf_sv(ikl) *trnirl(ivg)
4869  . + deadlf *trnird(ivg)
4870 
4871 ! Adaptation to Snow
4872 ! ^^^^^^^^^^^^^^^^^^
4873  re_rad = zv1fac *re_rad + zv_fac *renirs
4874  tr_rad = zv1fac *tr_rad + zv_fac *trnirs
4875 
4876 ! Scattering /DR97, 2, eqn (2.26) and (2.27) ! Diffuse Radiation:
4877 ! ^^^^^^^^^^ ! ^^^^^^^^^^^^^^^^^^
4878  r__rad = (2. *re_rad + tr_rad) / 3. ! Upw. Scatter.Fract.
4879  t__rad = ( re_rad + 2. *tr_rad) / 3. ! Downw.Scatter.Fract.
4880 
4881  t1_rad = 1. -t__rad !
4882  arggam = t1_rad*t1_rad-r__rad*r__rad !
4883  arggam = max(arggam,zer0) !
4884  gamma = sqrt(arggam) ! eqn (2.39)
4885  ddifh1 = exp( gamma*lai_sv(ikl)) ! Downw.Diffus.Solut.1
4886  ddifh2 = exp(-gamma*lai_sv(ikl)) ! Downw.Diffus.Solut.2
4887 ! REMARK: These 2 contributions are zero in case of 0 Reflectivity
4888 ! ^^^^^^
4889 
4890 ! Scattering /DR97, 2, eqn (2.19) and (2.20) ! Direct Radiation:
4891 ! ^^^^^^^^^^ ! ^^^^^^^^^^^^^^^^^^
4892  r0_rad = 0.5 *((re_rad+tr_rad) *k_drad ! Upw. Scatter.Fract.
4893  . +(re_rad-tr_rad) / 3.) !
4894  t0_rad = 0.5 *((re_rad+tr_rad) *k_drad ! Downw.Scatter.Fract.
4895  . -(re_rad-tr_rad) / 3.) !
4896 
4897  nu_rad = t1_rad-r__rad*albisv(ikl) ! nu coeff., eqn 2.43
4898  den_c1 = gamma*(ddifh1+ddifh2) ! eqn (2.43) Denomin.
4899  . +nu_rad*(ddifh1-ddifh2) !(Constant for DDifH1)
4900 
4901  densig = gamma*gamma - k_drad*k_drad ! eqn (2.40) Denomin.
4902  dens_s = sign(un_1,densig) !
4903  dens_a = abs( densig) !
4904  densig = max(eps6,dens_a) * dens_s !
4905  sig__c = (r__rad* r0_rad ! sigma_c, eqn (2.40)
4906  . +t0_rad*(k_drad+t1_rad)) / densig !
4907 
4908  ddifc1 = ((gamma-nu_rad)*(t_rad0-sig__c*a_rad0)*ddifh2
4909  . +((k_drad-nu_rad)* sig__c
4910  . +t0_rad+r__rad * albisv(ikl)) *a_rad0 *exdrad)
4911  . /max(den_c1,eps6)
4912  ddifc2 = t_rad0 - ddifc1-sig__c*a_rad0
4913 
4914 ! Near IR Diffuse Fluxes
4915 ! ^^^^^^^^^^^^^^^^^^^^^^
4916  ddif_l = ddifc1*ddifh1 + ddifc2*ddifh2 ! DOWNward,
4917  . + sig__c*a_rad0 *exdrad ! Canopy Basis
4918  u0_nir = ((gamma+t1_rad)*ddifc1 ! UPward
4919  . -(gamma-t1_rad)*ddifc2 ! Canopy Top
4920  . -((k_drad-t1_rad)*sig__c !
4921  . +t0_rad )*a_rad0) !
4922  . / max(r__rad,eps6) !
4923  u0_nir = min(0.99,max(eps6,u0_nir)) ! ERROR
4924  absgni = (1.-albisv(ikl))*(a_rad0*exdrad ! Ground Absorption
4925  . +ddif_l ) !
4926  absvni = (1.-u0_nir )- absgni ! Veget. Absorption
4927 
4928 
4929 ! Surface-Canopy Albedo and Normalized Solar Radiation Absorption
4930 ! ===============================================================
4931 
4932  alb_sv(ikl) = (u0_vis+u0_nir)*0.5d0
4933  socasv(ikl) = (absv_v+absvni)*0.5d0
4934  sososv(ikl) = (absg_v+absgni)*0.5d0
4935 
4936  END DO
4937 
4938 
4939 ! Effective LAI for Transpiration
4940 ! ===============================
4941 
4942  DO ikl=1,knonv
4943  crilai(ikl) = 2. ! LAI for which D0_Vis > 20W/m2
4944  ! DR97, 2, eqn (2.57)
4945  END DO
4946 
4947  DO kri=1,10
4948  DO ikl=1,knonv
4949 
4950  argexg = min(crilai(ikl)*gamasv(ikl), ea_max)
4951  argexk = min(crilai(ikl)*k___sv(ikl), ea_max)
4952  residu = c1__sv(ikl) *exp( argexg)
4953  . +c2__sv(ikl) *exp(-argexg)
4954  . +a0__sv(ikl)*gamasv(ikl)*exp(-argexk)
4955  . -cristr /max(sol_sv(ikl), eps6)
4956 
4957  d_ddif = c1__sv(ikl)*gamasv(ikl)*exp( argexg)
4958  . -c2__sv(ikl)*gamasv(ikl)*exp(-argexg)
4959  . -a0__sv(ikl)*k___sv(ikl)*exp(-argexk)
4960  dddifs = sign(un_1,d_ddif)
4961  dddifa = abs( d_ddif)
4962  d_ddif = max(eps6,dddifa) * dddifs
4963 
4964  crilai(ikl) = crilai(ikl)-residu/d_ddif
4965  crilai(ikl) = max(crilai(ikl),zer0 )
4966  crilai(ikl) = min(crilai(ikl),lai_sv(ikl))
4967 
4968  END DO
4969  END DO
4970 
4971  DO ikl=1,knonv
4972  laiesv(ikl) = crilai(ikl) +(exp(-k___sv(ikl)*crilai(ikl))
4973  . -exp(-k___sv(ikl)*lai_sv(ikl)))
4974  . / k___sv(ikl)
4975  END DO
4976 
4977  return
4978  end
4979 
4980 
4981  subroutine colprt_sbl
4983 !--------------------------------------------------------------------------+
4984 ! MAR ColPrt_SBL Sat 12-Feb-2012 MAR |
4985 ! SubRoutine ColPrt_SBL generates Surface Boundary Layers Properties |
4986 !--------------------------------------------------------------------------+
4987 ! |
4988 ! PARAMETERS: klonv: Total Number of columns |
4989 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
4990 ! X Number of Mosaic Cell per grid box |
4991 ! |
4992 ! INPUT: za__SV : Surface Boundary Layer (SBL) Height [m] |
4993 ! ^^^^^ VV__SV :(SBL Top) Wind Velocity [m/s] |
4994 ! TaT_SV : SBL Top Temperature [K] |
4995 ! rhT_SV : SBL Top Air Density [kg/m3] |
4996 ! uqs_SV : Specific Humidity Turbulent Flux [m/s] |
4997 ! Tsrfsv : Surface Temperature [K] |
4998 ! |
4999 ! INPUT / LMO_SV : Monin-Obukhov Scale [m] |
5000 ! OUTPUT: us__SV : Friction Velocity [m/s] |
5001 ! ^^^^^^ uts_SV : Temperature Turbulent Flux [K.m/s] |
5002 ! |
5003 ! OUTPUT: ram_sv : Aerodynamic Resistance for Momentum [s/m] |
5004 ! ^^^^^^ rah_sv : Aerodynamic Resistance for Heat [s/m] |
5005 ! |
5006 !--------------------------------------------------------------------------+
5007 
5008 
5009 
5010 
5011 
5012 ! Global Variables
5013 ! ================
5014 
5015  USE phy_sv
5016 
5017  USE var_sv
5018  USE vardsv
5019 
5020  USE varxsv
5021  USE varysv
5022 
5023  IMPLICIT NONE
5024 
5025 
5026 ! Internal Variables
5027 ! ==================
5028 
5029  integer ikl ,ist ,ist__s ,ist__w
5030  real d_TaTs ,CD_m
5031  real uustar ,thstar ,qqstar ,ssstar
5032  real thstarv,thstars,thstara
5033  real zeta ,zeta_S ,zeta_A
5034  real fCdCdP ,Cd_min ,cCdUns
5035  real RapCm0
5036 
5037 
5038 ! Internal DATA
5039 ! =============
5040 
5041  data fcdcdp/ 3.09/ ! Drag Coefficient Factor, Col de Porte
5042  data cd_min/ 1.05/ ! Drag Coefficient Minimum Col de Porte
5043  data ccduns/-5.00/ ! Drag Coefficient Correction for Unstability
5044 
5045 
5046 ! Aerodynamic Resistances
5047 ! =======================
5048 
5049  DO ikl=1,knonv
5050 
5051 ! Surface Type
5052 ! ~~~~~~~~~~~~
5053  ist = isotsv(ikl) ! Soil Type
5054  ist__s = min(ist, 1) ! 1 => Soil
5055  ist__w = 1 - ist__s ! 1 => Water Body
5056 
5057 ! Drag and Aerodynamic Resistance
5058 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5059  d_tats = tat_sv(ikl)-tsrfsv(ikl)
5060  rapcm0 = log(za__sv(ikl)/z0mdsv(4 ))
5061  . / log(za__sv(ikl)/z0mdsv(ivgtsv(ikl)))
5062  rapcm0 = rapcm0 *rapcm0 ! Neutral Drag Coefficient
5063  ! Vegetation Correction
5064  cd_m = max(cd_min*rapcm0, ! Actual Drag Coefficient
5065  . fcdcdp*rapcm0*vv__sv(ikl) ) ! for Momentum
5066  . *(1.+max(min(d_tats,zer0),ccduns) ! Unstability Correction
5067  . /ccduns )
5068  . * 1.5
5069  ram_sv(ikl) = rht_sv(ikl) *cpdair/cd_m
5070  rah_sv(ikl) = ram_sv(ikl)
5071 
5072 
5073 ! Turbulent Scales
5074 ! ================
5075 
5076 ! Friction Velocity u*
5077 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5078  uustar = vv__sv(ikl) / ram_sv(ikl)
5079  us__sv(ikl) = sqrt(uustar)
5080 
5081 ! Real Temperature Turbulent Scale theta*
5082 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5083  uts_sv(ikl) = - d_tats / rah_sv(ikl)
5084  thstar = uts_sv(ikl) / us__sv(ikl)
5085 
5086 ! Specific Humidity Turbulent Scale qq*
5087 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5088  qqstar = uqs_sv(ikl) / us__sv(ikl)
5089 
5090 ! Virtual Temperature Turbulent Scale thetav*
5091 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5092  thstarv = thstar + tat_sv(ikl) *(0.608*qqstar)
5093  thstars = sign(un_1,thstarv)
5094  thstara = abs( thstarv)
5095  thstarv = max(eps6,thstara) *thstars
5096 
5097 ! Monin Obukhov Scale Height
5098 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~
5099  lmo_sv(ikl) = tat_sv(ikl) * uustar
5100  . /(vonkrm * grav_f * thstarv)
5101  zeta = za__sv(ikl) / lmo_sv(ikl)
5102  zeta_s = sign(un_1 ,zeta)
5103  zeta_a = abs( zeta)
5104  zeta = zeta_s * max(eps6 ,zeta_a)
5105  lmo_sv(ikl) = za__sv(ikl) / zeta
5106 
5107  END DO
5108 
5109  return
5110  end
5111 
5112  subroutine sisvatesbl
5114 !--------------------------------------------------------------------------+
5115 ! MAR SISVATeSBL Tue 12-Apr-2011 MAR |
5116 ! SubRoutine SISVATeSBL generates Surface Boundary Layers Properties |
5117 !--------------------------------------------------------------------------+
5118 ! |
5119 ! PARAMETERS: klonv: Total Number of columns |
5120 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
5121 ! X Number of Mosaic Cell per grid box |
5122 ! |
5123 ! INPUT: za__SV : Surface Boundary Layer (SBL) Height [m] |
5124 ! ^^^^^ VV__SV :(SBL Top) Wind Velocity [m/s] |
5125 ! TaT_SV : SBL Top Temperature [K] |
5126 ! ExnrSV : Exner Potential [-] |
5127 ! qsnoSV : SBL Mean Snow Content [kg/kg] |
5128 ! uqs_SV : Specific Humidity Turbulent Flux [m/s] |
5129 ! usthSV : Blowing Snow Erosion Threshold [m/s] |
5130 ! Z0m_SV : Momentum Roughness Length [m] |
5131 ! Z0h_SV : Heat Roughness Length [m] |
5132 ! Tsrfsv : Surface Temperature [K] |
5133 ! sqrCm0 : Contribution of Z0m to Neutral Drag Coefficient |
5134 ! sqrCh0 : Contribution of Z0h to Neutral Drag Coefficient |
5135 ! |
5136 ! INPUT / LMO_SV : Monin-Obukhov Scale [m] |
5137 ! OUTPUT: us__SV : Friction Velocity [m/s] |
5138 ! ^^^^^^ uts_SV : Temperature Turbulent Flux [K.m/s] |
5139 ! uss_SV : Blowing Snow Turbulent Flux [m/s] |
5140 ! |
5141 ! OUTPUT: hSalSV : Saltating Layer Height [m] |
5142 ! ^^^^^^ qSalSV : Saltating Snow Concentration [kg/kg] |
5143 ! ram_sv : Aerodynamic Resistance for Momentum [s/m] |
5144 ! rah_sv : Aerodynamic Resistance for Heat [s/m] |
5145 ! |
5146 ! |
5147 ! Preprocessing Option: STANDARD Possibility |
5148 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ |
5149 ! #AE: TURBULENCE: Aerosols Erosion / Turbulent Diffusion Coeff. |
5150 ! |
5151 ! #AW TURBULENCE: Wind Time Mean (BOX Moving Average) |
5152 ! #AH TURBULENCE: Ta-T Time Mean (BOX Moving Average) |
5153 ! |
5154 ! |
5155 ! Preprocessing Option: OBSOLETE |
5156 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ |
5157 ! #AM TURBULENCE: u* Time Mean (BOX Moving Average) |
5158 ! #AT TURBULENCE: u*T* Time Mean (BOX Moving Average) |
5159 ! #AS TURBULENCE: u*s* Time Mean (BOX Moving Average) |
5160 ! |
5161 ! #ZX TURBULENCE: Strong Stability Limit (King et al. 1996) |
5162 ! #zx TURBULENCE: Strong Stability Limit (Mahalov et al. 2004) |
5163 ! #IX TURBULENCE: recurrence |
5164 ! |
5165 ! |
5166 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
5167 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
5168 ! FILE | CONTENT |
5169 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
5170 ! # stdout | #ss: OUTPUT of Blowing Snow Variables |
5171 ! | unit 6, SubRoutine SISVATeSBL **ONLY** |
5172 !--------------------------------------------------------------------------+
5173 
5174 
5175 
5176 
5177 
5178 ! Global Variables
5179 ! ================
5180 
5181  USE phy_sv
5182 
5183  USE var_sv
5184  USE vardsv
5185 
5186  USE varxsv
5187  USE varysv
5188  USE vartsv
5189 
5190  IMPLICIT NONE
5191 
5192 ! V, dT(a-s) Time Moving Averages
5193 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5194 cc #AA integer ntaver,nt !
5195 cc #AA parameter (ntaver= 4)! ntaver defined in MAR_SL.inc
5196 c #AW real V__mem(klonv,ntaver) ! only
5197 c #AW real VVmmem(klonv) !
5198 c #AW common/SVeSBLmem/V__mem,VVmmem !
5199 c #AH real T__mem(klonv,ntaver) !
5200 c #AH real dTmmem(klonv) !
5201 c #AH common/STeSBLmem/T__mem,dTmmem !
5202 
5203 ! u*, u*T*, u*s* Time Moving Averages
5204 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5205 c #AM real u__mem(klonv,ntaver)
5206 c #AT real uT_mem(klonv,ntaver)
5207 c #AS real us_mem(klonv,ntaver)
5208 c #AM common/S_eSBLmem/u__mem
5209 c #AT. ,uT_mem
5210 c #AS. ,us_mem
5211 
5212 
5213 ! Internal Variables
5214 ! ==================
5215 
5216  integer ikl ,icount
5217 c #AE integer nit ,iit
5218  real VVaSBL(klonv),VVa_OK ! effective SBL wind speed
5219  real dTa_Ts(klonv) ! effective SBL Temperature diff.
5220  real Theta0 ! Potential Reference Temperature
5221  real LMOmom(klonv) ! Monin-Obukhov Scale Momentum
5222  real LMOsgn ! Monin-Obukhov Scale Sign
5223  real LMOabs ! Monin-Obukhov Scale Abs.Value
5224  real uustar,thstar,qqstar,ssstar,thstarv,thstars,thstara
5225  real zetam ,zetah ,zeta_S,zeta_A,zeta0m ,zeta0h
5226  real psim_s,xpsimi,psim_i,psim_z
5227  real psis_s,psis_z,psis_0
5228  real psih_s,xpsihi,psih_i,psih_z
5229  real psim_0,psih_0
5230  real CDm(klonv) ! Drag Coefficient, Momentum
5231  real CDs(klonv),rCDs(klonv) ! Drag Coefficient, Blown **
5232  real CDh(klonv) ! Drag Coefficient, Scalar
5233  real dustar,u0star,uTstar,usstar
5234  real sss__F,sss__N,usuth0
5235 c #AE real dusuth,signus
5236 c #AE real sss__K,sss__G
5237 c #AE real us_127,us_227,us_327,us_427,us_527
5238  real zetMAX
5239  real coef_m,coef_h,stab_s
5240 c #AE real SblPom
5241  real Richar(klonv) ! Richardson Number
5242  real fac_Ri,vuzvun,Kz_vun
5243 
5244 ! OUTPUT of Snow Erosion Turbulence
5245 ! #b1 real W_pLMO ! Pseudo Obukhov Length (WRITE)
5246 ! #b1 real W_psim ! Pseudo psim(z) (WRITE)
5247 
5248 ! OUTPUT of Snow Erosion Turbulence (2)
5249 ! #b2 real W_NUs1 ! Contrib to U* numerat.1(WRITE)
5250 ! #b2 real W_NUs2 ! Contrib to U* numerat.2(WRITE)
5251 ! #b2 real W_NUs3 ! Contrib to U* numerat.3(WRITE)
5252 ! #b2 real W_DUs1 ! Contrib to U* denomin.1(WRITE)
5253 ! #b2 real W_DUs2 ! Contrib to U* denomin.2(WRITE)
5254 
5255 
5256 ! Internal DATA
5257 ! =============
5258 
5259  data theta0/288.0/ ! Potential Reference Temperature
5260 c #ZX data zetMAX/ 1.e6/ ! Strong Stability Limit
5261 c #zx
5262 c2306-280611 data zetMAX/ 1.e1/ ! Strong Stability Lim
5263 c2806-290611 data zetMAX/ 1.e0/ ! Strong Stability Limit
5264  !(Mahalov et al. 2004, GRL 31 2004GL021055)
5265 chj290911 data zetMAX/ 4.28/ ! Strong Stability Limit
5266 c !(King et al. 1996, JGR 101(7) p.19121)
5267  data zetmax/ 0.0428/ ! Strong Stability Limit
5268  data coef_m/20. / ! Stabil.Funct.for Moment.: unstab.coef.
5269  data coef_h/15. / ! Stabil.Funct.for Heat: unstab.coef.
5270 c #AE data SblPom/ 1.27/ ! Lower Boundary Height Parameter
5271  ! for Suspension
5272  ! Pommeroy, Gray and Landine 1993,
5273  ! J. Hydrology, 144(8) p.169
5274 c #AE data nit / 5 / ! us(is0,uth) recursivity: Nb Iterations
5275 
5276 
5277 ! Effective SBL variables
5278 ! =======================
5279 
5280  DO ikl=1,knonv
5281  vvasbl(ikl) = vv__sv(ikl)
5282 c #AW !hj060511
5283  vvasbl(ikl) = vvmmem(ikl)
5284  dta_ts(ikl) = tat_sv(ikl)-tsrfsv(ikl)
5285 c #AH!hj060511
5286  dta_ts(ikl) = dtmmem(ikl)
5287  ENDDO
5288 
5289 
5290 ! Convergence Criterion
5291 ! =====================
5292 
5293  icount = 0
5294 
5295  1 CONTINUE
5296  icount = icount + 1
5297  dustar = 0.
5298 
5299  DO ikl=1,knonv
5300 
5301  u0star = us__sv(ikl)
5302 
5303 ! u*, u*T*, u*s* Time Moving Averages
5304 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5305 c #AM u0star = 0.0
5306 c #AT uTstar = 0.0
5307 c #AS usstar = 0.0
5308 c #AM DO nt=1,ntaver
5309 c #AM u0star = u0star + u__mem(ikl,nt)
5310 c #AT uTstar = uTstar + uT_mem(ikl,nt)
5311 c #AS usstar = usstar + us_mem(ikl,nt)
5312 c #AM ENDDO
5313 c #AM u0star = u0star / ntaver
5314 c #AM us__SV(ikl) = u0star
5315 c #AT uts_SV(ikl) = uTstar / ntaver
5316 c #AS uss_SV(ikl) = usstar / ntaver
5317 
5318 
5319 ! Turbulent Scales from previous Time Step
5320 ! ----------------------------------------
5321 
5322  u0star = max(eps6,u0star) ! Friction Velocity u*
5323  uustar = u0star * u0star ! Friction Velocity^2 uu*
5324  thstar = uts_sv(ikl) / u0star ! Temperature theta*
5325  qqstar = uqs_sv(ikl) / u0star ! Specific Humidity qq*
5326  ssstar = uss_sv(ikl) / u0star ! Blown Snow ss*
5327 
5328 
5329 ! Monin-Obukhov Stability Parameter for Momentum
5330 ! ----------------------------------------------
5331 
5332 ! Pseudo Virtual Temperature Turbulent Scale thetav*
5333 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5334  thstarv = thstar + theta0 *(0.608*qqstar)
5335  . /(1.+0.608*qat_sv(ikl)-qsnosv(ikl))
5336  thstars = sign(un_1,thstarv)
5337  thstara = abs( thstarv)
5338  thstarv = max(eps6,thstara)*thstars
5339 
5340 ! Pseudo Obukhov Length Scale (Gall?e et al., 2001 BLM 99, (A2) p.17)
5341 ! Full Obukhov Length Scale (when Blowing * is ##NOT## switched ON)
5342 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5343  lmo_sv(ikl) = theta0 * max(eps6,uustar)
5344  . /(vonkrm * grav_f *thstarv)
5345 
5346 ! OUTPUT of Snow Erosion Turbulence
5347 ! #b1 W_pLMO = LMO_SV(ikl)
5348 
5349  zetah = za__sv(ikl) / lmo_sv(ikl)
5350  zetam = min(zetmax,zetah)! Strong Stability Limit
5351  !(Mahalov et al. 2004
5352  ! GRL 31 2004GL021055)
5353  lmomom(ikl) = za__sv(ikl) /(max(eps6,abs(zetam))
5354  . *sign(un_1, zetam ))
5355  zeta0m = z0m_sv(ikl) / lmomom(ikl)
5356  zeta0h = z0h_sv(ikl) / lmo_sv(ikl)
5357 
5358 ! Momentum Pseudo Stability Function (Gall?e et al. 2001, BLM 99, (11) p. 7)
5359 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5360  stab_s = max(zer0,sign(un_1,zetam))
5361 
5362  psim_s = -a_stab *zetam
5363  xpsimi = sqrt(sqrt(un_1-coef_m*min(zer0,zetam)))
5364  psim_i = 2. *log(half*(un_1+xpsimi))
5365  . +log(half*(un_1+xpsimi*xpsimi))
5366  . -2.*atan(xpsimi) +half*pinmbr
5367  psim_z = stab_s*psim_s+(1.-stab_s)*psim_i
5368 
5369 ! OUTPUT of Snow Erosion Turbulence
5370 ! #b1 W_psim = psim_z
5371 
5372  psim_s = -a_stab *zeta0m
5373  xpsimi = sqrt(sqrt(un_1-coef_m*min(zer0,zeta0m)))
5374  psim_i = 2. *log(half*(un_1+xpsimi))
5375  . +log(half*(un_1+xpsimi*xpsimi))
5376  . -2.*atan(xpsimi) +half*pinmbr
5377  psim_0 = stab_s*psim_s+(1.-stab_s)*psim_i
5378 
5379 ! Virtual Temperature Turbulent Scale thetav* (ss* impact included )
5380 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ needed for new ss*)
5381 c #AE thstarv = thstar + Theta0 *(0.608*qqstar
5382 c #AE. -ssstar
5383 c #AE. )
5384 c #AE. /(1.+0.608*QaT_SV(ikl)-qsnoSV(ikl))
5385 c #AE thstars = sign(un_1,thstarv)
5386 c #AE thstara = abs( thstarv)
5387 c #AE thstarv = max(eps6,thstara) *thstars
5388 
5389 ! Full Obukhov Length Scale (Gall?e et al. 2001, BLM 99, (A1) p.16)
5390 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5391 c #AE LMO_SV(ikl) = Theta0 * us__SV(ikl)* us__SV(ikl)
5392 c #AE. /(vonKrm * Grav_F * thstarv)
5393 
5394 c #AE zetah = za__SV(ikl) / LMO_SV(ikl)
5395 c #AE zetam = min(zetMAX,zetah)! Strong Stability Limit
5396  !(Mahalov et al. 2004
5397  ! GRL 31 2004GL021055)
5398 c #AE LMOmom(ikl) = za__SV(ikl) /(max(eps6,abs(zetam))
5399 c #AE. *sign(un_1, zetam ))
5400 c #AE zeta0m = Z0m_SV(ikl) / LMOmom(ikl)
5401 
5402 ! Snow Erosion Stability Function (Gall?e et al. 2001, BLM 99, (11) p. 7)
5403 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5404 c #AE stab_s = max(zer0,sign(un_1,zetam))
5405 
5406 c #AE psis_s = -AsStab *zetam
5407 c #AE xpsimi = sqrt(sqrt(un_1-coef_m*min(zer0,zetam)))
5408 c #AE psim_i = 2. *log(half*(un_1+xpsimi))
5409 c #AE. +log(half*(un_1+xpsimi*xpsimi))
5410 c #AE. -2.*atan(xpsimi) +half*piNmbr
5411 c #AE psis_z = stab_s*psis_s+(1.-stab_s)*psim_i
5412 
5413 c #AE psis_s = -AsStab *zeta0m
5414 c #AE xpsimi = sqrt(sqrt(un_1-coef_m*min(zer0,zeta0m)))
5415 c #AE psim_i = 2. *log(half*(un_1+xpsimi))
5416 c #AE. +log(half*(un_1+xpsimi*xpsimi))
5417 c #AE. -2.*atan(xpsimi) +half*piNmbr
5418 c #AE psis_0 = stab_s*psis_s+(1.-stab_s)*psim_i
5419 
5420 ! Square Roots of the Drag Coefficient for Snow Erosion Turbulent Flux
5421 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5422 c #AE rCDmSV(ikl) = vonKrm/(sqrCm0(ikl)-psim_z+psim_0)
5423 
5424 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
5425 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5426 ! #ss IF (ii__SV(ikl).EQ.iwr_SV.AND.jj__SV(ikl).EQ.jwr_SV .AND.
5427 ! #ss. nn__SV(ikl).EQ.nwr_SV )
5428 ! #ss. write(6,6600) Z0m_SV(ikl) , psim_z
5429 ! #ss. ,LMO_SV(ikl) , uustar
5430 ! #ss. ,sqrCm0(ikl) , psim_0
5431 ! #ss. ,LMOmom(ikl) , thstarv
5432  6600 format(/,' ** SISVATeSBL *0 '
5433  . ,' Z0m_SV = ',e12.4,' psim_z = ',e12.4
5434  . ,' LMO_SV = ',e12.4,' uustar = ',e12.4
5435  . ,/,' '
5436  . ,' sqrCm0 = ',e12.4,' psim_0 = ',e12.4
5437  . ,' LMOmom = ',e12.4,' thstarv = ',e12.4)
5438 
5439 
5440 ! Momentum Turbulent Scale u*
5441 ! ---------------------------------------
5442 
5443 ! Momentum Turbulent Scale u* in case of NO Blow. Snow
5444 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5445  vva_ok = max(0.000001, vvasbl(ikl))
5446  sss__n = vonkrm * vva_ok
5447  sss__f = (sqrcm0(ikl) - psim_z + psim_0)
5448  usuth0 = sss__n /sss__f ! u* if NO Blow. Snow
5449 
5450 ! Momentum Turbulent Scale u* in case of Blow. Snow
5451 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5452 c #AE sss__G = 0.27417 * Grav_F
5453 
5454 ! ______________ _____
5455 ! Newton-Raphson (! Iteration, BEGIN)
5456 ! ~~~~~~~~~~~~~~ ~~~~~
5457 c #AE DO iit=1,nit
5458 c #AE sss__K = Grav_F * r_Stab * A_Stab *za__SV(ikl)
5459 c #AE. *rCDmSV(ikl)*rCDmSV(ikl)
5460 c #AE. /(1.+0.608*QaT_SV(ikl)-qsnoSV(ikl))
5461 c #AE us_127 = exp( SblPom *log(us__SV(ikl)))
5462 c #AE us_227 = us_127 * us__SV(ikl)
5463 c #AE us_327 = us_227 * us__SV(ikl)
5464 c #AE us_427 = us_327 * us__SV(ikl)
5465 c #AE us_527 = us_427 * us__SV(ikl)
5466 
5467 c #AE us__SV(ikl) = us__SV(ikl)
5468 c #AE. - ( us_527 *sss__F /sss__N
5469 c #AE. - us_427
5470 c #AE. - us_227 *qsnoSV(ikl)*sss__K
5471 c #AE. + (us__SV(ikl)*us__SV(ikl)-usthSV(ikl)*usthSV(ikl))/sss__G)
5472 c #AE. /( us_427*5.27*sss__F /sss__N
5473 c #AE. - us_327*4.27
5474 c #AE. - us_127*2.27*qsnoSV(ikl)*sss__K
5475 c #AE. + us__SV(ikl)*2.0 /sss__G)
5476 
5477 c #AE us__SV(ikl)= min(us__SV(ikl),usuth0)
5478 c #AE us__SV(ikl)= max(us__SV(ikl),eps6 )
5479 c #AE rCDmSV(ikl)= us__SV(ikl)/VVa_OK
5480 ! #aE sss__F = vonKrm /rCDmSV(ikl)
5481 c #AE ENDDO
5482 ! ______________ ___
5483 ! Newton-Raphson (! Iteration, END )
5484 ! ~~~~~~~~~~~~~~ ~~~
5485 
5486 c #AE us_127 = exp( SblPom *log(us__SV(ikl)))
5487 c #AE us_227 = us_127 * us__SV(ikl)
5488 
5489 ! Momentum Turbulent Scale u*: 0-Limit in case of no Blow. Snow
5490 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5491 c #AE dusuth = us__SV(ikl) - usthSV(ikl) ! u* - uth*
5492 c #AE signus = max(sign(un_1,dusuth),zer0) ! 1 <=> u* - uth* > 0
5493  us__sv(ikl) = !
5494 c #AE. us__SV(ikl) *signus + ! u* (_BS)
5495  . usuth0 ! u* (nBS)
5496 c #AE. *(1.-signus) !
5497 
5498 
5499 ! Blowing Snow Turbulent Scale ss*
5500 ! ---------------------------------------
5501 
5502 c #AE hSalSV(ikl) = 8.436e-2 *exp(SblPom *log(us__SV(ikl)))
5503 c #AE qSalSV(ikl) = (us__SV(ikl) * us__SV(ikl)
5504 c #AE. -usthSV(ikl) * usthSV(ikl))*signus
5505 c #AE. / (sss__G * us_227 )
5506 
5507 c #ae qSalSV(ikl) = (us__SV(ikl) * us__SV(ikl)
5508 c #ae. -usthSV(ikl) * usthSV(ikl))
5509 c #ae. *signus * us__SV(ikl) *3.25
5510 c #ae. /(hSalSV(ikl) * Grav_F )
5511 
5512 c #AE ssstar = rCDmSV(ikl) *(qsnoSV(ikl) -qSalSV(ikl))
5513 c #AE. * r_Stab
5514 
5515 c #AE uss_SV(ikl) = min(zer0 , us__SV(ikl) *ssstar)
5516 c #BS uss_SV(ikl) = max(-0.002 , uss_SV(ikl) )
5517 
5518 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
5519 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5520 ! #ss IF (ii__SV(ikl).EQ.iwr_SV.AND.jj__SV(ikl).EQ.jwr_SV .AND.
5521 ! #ss. nn__SV(ikl).EQ.nwr_SV ) THEN
5522 ! #ss write(6,6000) daHost , icount ,
5523 ! #ss. us__SV(ikl),1.e3*hSalSV(ikl),
5524 ! #ss. 1.e3*Z0m_SV(ikl),
5525 ! #ss. 1.e3*qsnoSV(ikl),1.e3*qSalSV(ikl)
5526 ! #ss. ,usthSV(ikl), us__SV(ikl)-usthSV(ikl),
5527 ! #ss. 1.e3*ssstar ,1.e3*us__SV(ikl)*ssstar
5528  6000 format(a18,i3,6x,'u* [m/s] =',f6.3,' hSalt[mm]=' ,e9.3,
5529  . ' Z0m [mm] =',f9.3,' q [g/kg] =',f9.3,
5530  . /,91x, ' qSa [g/kg] =',f9.3,
5531  . /,27x, 'ut*[m/s]=' ,e9.3,' u*-ut* =' ,e9.3,
5532  . ' s* [g/kg] =',f9.3,' us* [mm/s] =',f9.3)
5533 ! #ss END IF
5534 
5535 
5536 ! Virtual Temperature Turbulent Scale thetav* (ss* impact included)
5537 ! --------------------------------------------------------------------
5538 
5539 c #AE thstarv = thstar + Theta0 *(0.608*qqstar
5540 c #AE. -ssstar
5541 c #AE. )
5542 c #AE. /(1.+0.608*QaT_SV(ikl)-qsnoSV(ikl))
5543 c #AE thstars = sign(un_1,thstarv)
5544 c #AE thstara = abs( thstarv)
5545 c #AE thstarv = max(eps6,thstara) *thstars
5546 
5547 
5548 ! Full Obukhov Length Scale (Gall?e et al., 2001, BLM 99, (A1) p.16)
5549 ! --------------------------------------------------------------------
5550 
5551 c #AE LMO_SV(ikl) = Theta0 * us__SV(ikl)* us__SV(ikl)
5552 c #AE. /(vonKrm * Grav_F * thstarv)
5553 
5554 c #AE zetah = za__SV(ikl) / LMO_SV(ikl)
5555 c #AE zetam = min(zetMAX,zetah)! Strong Stability Limit
5556  !(Mahalov et al. 2004
5557  ! GRL 31 2004GL021055)
5558 c #AE LMOmom(ikl) = za__SV(ikl) /(max(eps6,abs(zetam))
5559 c #AE. *sign(un_1, zetam ))
5560 c #AE zeta0m = Z0m_SV(ikl) / LMOmom(ikl)
5561 c #AE zeta0h = Z0h_SV(ikl) / LMO_SV(ikl)
5562 
5563 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
5564 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5565 ! #ss IF (ii__SV(ikl).EQ.iwr_SV.AND.jj__SV(ikl).EQ.jwr_SV .AND.
5566 ! #ss. nn__SV(ikl).EQ.nwr_SV ) THEN
5567 ! #ss write(6,6001) LMO_SV(ikl) , zetah
5568  6001 format(18x,9x,'LMO [m]=',f9.1,' zetah[-] =',f9.3)
5569 ! #ss END IF
5570 
5571 
5572 ! Turbulent Scales
5573 ! ----------------
5574 
5575 ! Momentum Stability Function (Gall?e et al., 2001, BLM 99, (11) p. 7)
5576 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5577  stab_s = max(zer0,sign(un_1,zetam))
5578 
5579  psim_s = -a_stab *zetam
5580  xpsimi = sqrt(sqrt(un_1-coef_m*min(zer0,zetam)))
5581  psim_i = 2. *log(half*(un_1+xpsimi))
5582  . +log(half*(un_1+xpsimi*xpsimi))
5583  . -2.*atan(xpsimi) +half*pinmbr
5584  psim_z = stab_s*psim_s+(1.-stab_s)*psim_i
5585 
5586  psim_s = -a_stab *zeta0m
5587  xpsimi = sqrt(sqrt(un_1-coef_m*min(zer0,zeta0m)))
5588  psim_i = 2. *log(half*(un_1+xpsimi))
5589  . +log(half*(un_1+xpsimi*xpsimi))
5590  . -2.*atan(xpsimi) +half*pinmbr
5591  psim_0 = stab_s*psim_s+(1.-stab_s)*psim_i
5592 
5593 ! Heat Stability Function (Gall?e et al., 2001, BLM 99, (11) p. 7)
5594 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5595  stab_s = max(zer0,sign(un_1,zetah))
5596 
5597  psih_s = -ahstab *zetah
5598  xpsihi = sqrt(sqrt(un_1-coef_h*min(zer0,zetah)))
5599  psih_i = 2. *log(half*(un_1+xpsihi))
5600  psih_z = stab_s*psih_s+(1.-stab_s)*psih_i
5601 
5602  psih_s = -ahstab *zeta0h
5603  xpsihi = sqrt(sqrt(un_1-coef_h*min(zer0,zeta0h)))
5604  psih_i = 2. *log(half*(un_1+xpsihi))
5605  psih_0 = stab_s*psih_s+(1.-stab_s)*psih_i
5606 
5607 ! Square Roots of the Drag Coefficients
5608 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5609  rcdhsv(ikl) = vonkrm*(exnrsv(ikl)/p0_kap)
5610  . /(sqrch0(ikl)-psih_z+psih_0)
5611  rcdmsv(ikl) = vonkrm/(sqrcm0(ikl)-psim_z+psim_0)
5612 
5613 ! Drag Coefficients
5614 ! ~~~~~~~~~~~~~~~~~
5615  cdh(ikl) = rcdmsv(ikl) * rcdhsv(ikl)
5616  cdm(ikl) = rcdmsv(ikl) * rcdmsv(ikl)
5617 
5618 ! Real Temperature Turbulent Scale theta*
5619 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5620  thstar = rcdhsv(ikl) * dta_ts(ikl)
5621  . *(p0_kap /exnrsv(ikl))
5622  uts_sv(ikl) = us__sv(ikl) * thstar
5623 
5624 
5625 ! Convergence Criterion
5626 ! =====================
5627 
5628  dustar = max(dustar,abs(us__sv(ikl)-u0star))
5629 
5630 ! u*, u*T*, u*s* Time Moving Averages
5631 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5632 c #AM DO nt= 1,ntaver-1
5633 c #AM u__mem(ikl,nt ) = u__mem(ikl,nt+1)
5634 c #AT uT_mem(ikl,nt ) = uT_mem(ikl,nt+1)
5635 c #AS us_mem(ikl,nt ) = us_mem(ikl,nt+1)
5636 c #AM ENDDO
5637 c #AM u__mem(ikl,ntaver) = us__SV(ikl)
5638 c #AT uT_mem(ikl,ntaver) = uts_SV(ikl)
5639 c #AS us_mem(ikl,ntaver) = uss_SV(ikl)
5640 
5641 ! OUTPUT of Snow Erosion Turbulence
5642 ! #b1 IF (icount .EQ.1 ) THEN
5643 ! #b1 write(6,6004)
5644  6004 format(122('-'))
5645 ! #b1 IF (mod(VVaSBL(ikl),4.).LT.0.1) THEN
5646 ! #b1 write(6,6003)
5647  6003 format(' V Ta-Ts Z0 It'
5648  . ,' du* u* sss__F CD Qss Qs* '
5649  . ,' PseudOL Full-OL zetam zetah psim_z psih_z')
5650 ! #b1 write(6,6004)
5651 ! #b1 END IF
5652 ! #b1 END IF
5653 ! #b1 write(6,6002) VVaSBL(ikl),dTa_Ts(ikl),Z0m_SV(ikl),icount
5654 ! #b1. ,dustar ,us__SV(ikl),sss__F
5655 ! #b1. , CDm(ikl),qSalSV(ikl),ssstar
5656 ! #b1. ,W_pLMO ,LMO_SV(ikl)
5657 ! #b1. ,zetam ,zetah ,W_psim ,psih_z
5658  6002 format(2f6.1,f8.4,i3,f9.6,f6.3,f9.3,3f9.6,2f8.2,2f8.4,2f8.2)
5659 
5660 ! OUTPUT of Snow Erosion Turbulence (2): u*_AE
5661 ! #b2 IF (icount .EQ.1 ) THEN
5662 ! #b2 write(6,6014)
5663  6014 format(100('-'))
5664 ! #b2 IF (mod(VVaSBL(ikl),4.).LT.0.1) THEN
5665 ! #b2 write(6,6013)
5666  6013 format(' V Ta-Ts Z0 It'
5667  . ,' du* u* sss__F W_NUs1 W_NUs2 W_NUs3 '
5668  . ,' W_DUs1 W_DUs2 ')
5669 ! #b2 write(6,6014)
5670 ! #b2 END IF
5671 ! #b2 END IF
5672 ! #b2 write(6,6012) VVaSBL(ikl),dTa_Ts(ikl),Z0m_SV(ikl),icount
5673 ! #b2. ,dustar ,us__SV(ikl),sss__F
5674 ! #b2. ,W_NUs1 ,W_NUs2 ,W_NUs3
5675 ! #b2. ,W_DUs1 ,W_DUs2
5676  6012 format(2f6.1,f8.4,i3,f9.6,f6.3,f9.3,3f9.3,2f12.3)
5677 
5678  END DO
5679 c #IX IF ( icount.lt. 3) GO TO 1
5680 ! hjp if parallel mode, use IF ( icount.lt. 3)
5681 ! IF (dustar.gt.0.0001.AND.icount.lt. 6) GO TO 1
5682 
5683 
5684 c #AM DO ikl=1,knonv
5685 c #AM u0star = 0.0
5686 c #AT uTstar = 0.0
5687 c #AS usstar = 0.0
5688 c #AM DO nt=1,ntaver
5689 c #AM u0star = u0star + u__mem(ikl,nt)
5690 c #AT uTstar = uTstar + uT_mem(ikl,nt)
5691 c #AS usstar = usstar + us_mem(ikl,nt)
5692 c #AM ENDDO
5693 c #AM us__SV(ikl) = u0star / ntaver
5694 c #AT uts_SV(ikl) = uTstar / ntaver
5695 c #AS uss_SV(ikl) = usstar / ntaver
5696 c #AM END DO
5697 
5698 
5699 ! Aerodynamic Resistances
5700 ! -----------------------
5701 
5702  DO ikl=1,knonv
5703  ram_sv(ikl) = 1./(cdm(ikl)*max(vvasbl(ikl),eps6))
5704  rah_sv(ikl) = 1./(cdh(ikl)*max(vvasbl(ikl),eps6))
5705  END DO
5706 
5707 
5708  return
5709  end
5710 
5711 
5712 
5713 
5714  subroutine sisvat_sbl
5716 !--------------------------------------------------------------------------+
5717 ! MAR SISVAT_SBL Sat 12-Feb-2012 MAR |
5718 ! SubRoutine SISVAT_SBL generates Surface Boundary Layers Properties |
5719 !--------------------------------------------------------------------------+
5720 ! |
5721 ! PARAMETERS: klonv: Total Number of columns |
5722 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
5723 ! X Number of Mosaic Cell per grid box |
5724 ! |
5725 ! INPUT: za__SV : Surface Boundary Layer (SBL) Height [m] |
5726 ! ^^^^^ VV__SV :(SBL Top) Wind Velocity [m/s] |
5727 ! TaT_SV : SBL Top Temperature [K] |
5728 ! ExnrSV : Exner Potential [-] |
5729 ! uqs_SV : Specific Humidity Turbulent Flux [m/s] |
5730 ! Z0m_SV : Momentum Roughness Length [m] |
5731 ! Z0h_SV : Heat Roughness Length [m] |
5732 ! Tsrfsv : Surface Temperature [K] |
5733 ! sqrCm0 : Contribution of Z0m to Neutral Drag Coefficient |
5734 ! sqrCh0 : Contribution of Z0h to Neutral Drag Coefficient |
5735 ! |
5736 ! INPUT / LMO_SV : Monin-Obukhov Scale [m] |
5737 ! OUTPUT: us__SV : Friction Velocity [m/s] |
5738 ! ^^^^^^ uts_SV : Temperature Turbulent Flux [K.m/s] |
5739 ! |
5740 ! OUTPUT: Fh__sv : Stability Function [-] |
5741 ! ^^^^^^ dFh_sv : Stability Function (Derivative) [-] |
5742 ! ram_sv : Aerodynamic Resistance for Momentum [s/m] |
5743 ! rah_sv : Aerodynamic Resistance for Heat [s/m] |
5744 ! |
5745 ! WARNING: SISVAT_SBL blows up for too small z0m values & large z_SBL |
5746 ! ^^^^^^^ (z0m = 1.8e-6 m for z_SBL = 20 m) |
5747 ! |
5748 ! |
5749 ! |
5750 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
5751 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
5752 ! FILE | CONTENT |
5753 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
5754 ! # stdout | #sb: OUTPUT/Verification: SISVAT_SBL |
5755 ! | unit 6, SubRoutine SISVAT_SBL **ONLY** |
5756 !--------------------------------------------------------------------------+
5757 
5758 
5759 
5760 
5761 
5762 ! Global Variables
5763 ! ================
5764 
5765  USE phy_sv
5766 
5767  USE var_sv
5768  USE vardsv
5769 
5770  USE varxsv
5771  USE varysv
5772 
5773  IMPLICIT NONE
5774 
5775 ! Internal Variables
5776 ! ==================
5777 
5778  integer ikl ,ist ,ist__s ,ist__w
5779  real CD_m_0 ,CD_h_0 ,ram0 ,rah0 ,rahMIN
5780  real d_TaTs ,RiB__D ,RiBulk
5781  real bmstab ,Am1_FU ,Am2_FU ,Fm_Uns
5782  real bhstab ,Ah1_FU ,Ah2_FU ,Fh_Uns,dFh_Un
5783  real Aux_FS ,FStabl ,dFSdRi ,Stabil,Fm_loc
5784  real uustar ,thstar ,qqstar ,ssstar
5785  real thstarv,thstars,thstara
5786  real zeta ,zeta_S ,zeta_A
5787  real zetMAX
5788 
5789 
5790 ! Internal DATA
5791 ! =============
5792 
5793  data zetmax/ 4.28/ ! Strong Stability Limit
5794 ! !(King et al. 1996, JGR 101(7) p.19121)
5795 
5796 ! Aerodynamic Resistances
5797 ! =======================
5798 
5799  DO ikl=1,knonv
5800 
5801 ! Surface Type
5802 ! ~~~~~~~~~~~~
5803  ist = isotsv(ikl) ! Soil Type
5804  ist__s = min(ist, 1) ! 1 => Soil
5805  ist__w = 1 - ist__s ! 1 => Water Body
5806 
5807 ! Neutral Parameters
5808 ! ~~~~~~~~~~~~~~~~~~
5809  cd_m_0 = 0.16/ (sqrcm0(ikl)*sqrcm0(ikl)) ! Neutral Drag Coeff.Mom.
5810  cd_h_0 = 0.16/ (sqrcm0(ikl)*sqrch0(ikl)) ! Neutral Drag Coeff.Heat
5811  ram0 = 1.0 / (cd_m_0 *vv__sv(ikl)) ! Neutral Aero Resis.Mom.
5812  rah0 = 1.0 / (cd_h_0 *vv__sv(ikl)) ! Neutral Aero Resis.Heat
5813 
5814 ! Bulk Richardson Number
5815 ! ~~~~~~~~~~~~~~~~~~~~~~
5816  rib__d = vv__sv(ikl) *vv__sv(ikl)
5817  . *tat_sv(ikl)
5818  d_tats = (tat_sv(ikl)- tsrfsv(ikl))
5819  . *p0_kap / exnrsv(ikl)
5820  ribulk = grav_f *za__sv(ikl)* d_tats
5821  . / rib__d
5822 
5823 ! OUTPUT/Verification: SISVAT_SBL
5824 ! #sb IF (ii__SV(ikl).EQ.iwr_SV .AND. jj__SV(ikl).EQ. jwr_SV .AND.
5825 ! #sb. nn__SV(ikl).GE.nwr_SV)
5826 ! #sb. write(6,6600) Tsrfsv(ikl),TaT_SV(ikl),VV__SV(ikl)
5827 ! #sb. , d_TaTs ,RiBulk
5828  6600 format(/,'Tem(s,a), Wind , d_TaTs, RiBulk = ',5e15.6)
5829 
5830 ! Unstable Case
5831 ! ~~~~~~~~~~~~~
5832  bmstab = ist__s * (13.7 -0.34 /sqrt(cd_m_0))! Momentum
5833  . + ist__w * 4.9 !
5834  bmstab = 10. * bmstab * cd_m_0 !
5835  . *sqrt(za__sv(ikl)/ z0m_sv(ikl)) !
5836  am1_fu = bmstab * sqrt(abs(ribulk)) !
5837  am2_fu = am1_fu +1.0 +10.*abs(ribulk) !
5838  fm_uns = (am1_fu +1.0)/ am2_fu !
5839 
5840 ! OUTPUT/Verification: SISVAT_SBL
5841 ! #sb IF (ii__SV(ikl).EQ.iwr_SV .AND. jj__SV(ikl).EQ. jwr_SV .AND.
5842 ! #sb. nn__SV(ikl).GE.nwr_SV)
5843 ! #sb. write(6,6601) CD_m_0 ,Z0m_SV(ikl),bmstab
5844 ! #sb. , ist__s ,ist__w
5845  6601 format(/,'CD_m_0 , Z0m_SV, bmstab, ist/sw = ',3e15.6,2i15)
5846 
5847  bhstab = ist__s * ( 6.3 -0.18 /sqrt(cd_h_0))! Heat
5848  . + ist__w * 2.6 !
5849  bhstab = 10. * bhstab * cd_h_0 !
5850  . *sqrt(za__sv(ikl)/ z0h_sv(ikl)) !
5851  ah1_fu = bhstab * sqrt(abs(ribulk)) !
5852  ah2_fu = ah1_fu +1.0 +10.*abs(ribulk) !
5853  fh_uns = (ah1_fu +1.0)/ ah2_fu !
5854  dfh_un =((ah1_fu +2.0)/(ah2_fu*ah2_fu)) * 5. !
5855 
5856 ! Stable Case
5857 ! ~~~~~~~~~~~~~
5858  aux_fs = 1.0 + 5.* ribulk
5859  fstabl = aux_fs*aux_fs
5860  dfsdri = aux_fs *10.
5861 
5862 ! Effective Stability Functions and Derivatives
5863 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5864  stabil = sign(un_1,d_tats)
5865  fm_loc = fstabl * max(zer0,stabil)
5866  . - fm_uns * min(zer0,stabil)
5867  fh__sv(ikl) = fstabl * max(zer0,stabil)
5868  . - fh_uns * min(zer0,stabil)
5869  dfh_sv(ikl) = dfsdri * max(zer0,stabil)
5870  . - dfh_un * min(zer0,stabil)
5871 
5872 ! OUTPUT/Verification: SISVAT_SBL
5873 ! #sb IF (ii__SV(ikl).EQ.iwr_SV .AND. jj__SV(ikl).EQ. jwr_SV .AND.
5874 ! #sb. nn__SV(ikl).GE.nwr_SV)
5875 ! #sb. write(6,6602) FStabl ,Stabil
5876 ! #sb. ,Fm_Uns ,Fm_loc
5877  6602 format(/,'FStabl , Stabil, Fm_Uns, Fm_loc = ',4e15.6)
5878 
5879 ! Aerodynamic Resistances
5880 ! ~~~~~~~~~~~~~~~~~~~~~~~
5881  ram_sv(ikl) = ram0 * fm_loc
5882  rah_sv(ikl) = rah0 * fh__sv(ikl)
5883  rahmin = max(rah_sv(ikl), abs(d_tats)*60./za__sv(ikl))
5884  ! 60 for 30dgC within 1/2 hour
5885  dfh_sv(ikl) = rah0 * dfh_sv(ikl)
5886  . * rahmin / rah_sv(ikl)
5887  rah_sv(ikl) = rahmin
5888 
5889 
5890 ! Square Root Contributions to the Drag Coefficients
5891 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5892  rcdmsv(ikl) = sqrt(ram_sv(ikl) *vv__sv(ikl))
5893  rcdmsv(ikl) = 1. / max(eps6,rcdmsv(ikl))
5894  rcdhsv(ikl) = rah_sv(ikl) *vv__sv(ikl)
5895  . *rcdmsv(ikl)
5896  rcdhsv(ikl) = (1. / max(eps6,rcdhsv(ikl)))
5897  . * ( exnrsv(ikl) /p0_kap )
5898 
5899 ! OUTPUT/Verification: SISVAT_SBL
5900 ! #sb IF (ii__SV(ikl).EQ.iwr_SV .AND. jj__SV(ikl).EQ. jwr_SV .AND.
5901 ! #sb. nn__SV(ikl).GE.nwr_SV)
5902 ! #sb. write(6,6603) ram_sv(ikl),rah_sv(ikl)
5903 ! #sb. ,rCDmSV(ikl),rCDhSV(ikl)
5904  6603 format(/,'AeR(m,h), rCD(m,h) = ',4e15.6)
5905 
5906 
5907 ! Turbulent Scales
5908 ! ================
5909 
5910 ! Friction Velocity u*
5911 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5912  uustar = vv__sv(ikl) / ram_sv(ikl)
5913  us__sv(ikl) = sqrt(uustar)
5914 
5915 ! Real Temperature Turbulent Scale theta*
5916 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5917  uts_sv(ikl) = d_tats / rah_sv(ikl)
5918  thstar = uts_sv(ikl) / us__sv(ikl)
5919 
5920 ! Specific Humidity Turbulent Scale qq*
5921 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5922  qqstar = uqs_sv(ikl) / us__sv(ikl)
5923 
5924 ! Virtual Temperature Turbulent Scale thetav*
5925 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5926  thstarv = thstar + tat_sv(ikl) *(0.608*qqstar
5927  . )
5928  thstars = sign(un_1,thstarv)
5929  thstara = abs( thstarv)
5930  thstarv = max(eps6,thstara) *thstars
5931 
5932 ! Monin Obukhov Scale Height
5933 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~
5934  lmo_sv(ikl) = tat_sv(ikl) * uustar
5935  . /(vonkrm * grav_f * thstarv)
5936  zeta = za__sv(ikl) / lmo_sv(ikl)
5937  zeta = min(zetmax,zeta) ! Strong Stability Limit
5938 ! ! King et al. 1996
5939 ! ! JGR 101(7) p.19121
5940  zeta_s = sign(un_1 ,zeta)
5941  zeta_a = abs( zeta)
5942  zeta = zeta_s * max(eps6 ,zeta_a)
5943  lmo_sv(ikl) = za__sv(ikl) / zeta
5944 
5945 ! OUTPUT/Verification: SISVAT_SBL
5946 ! #sb IF (ii__SV(ikl).EQ.iwr_SV .AND. jj__SV(ikl).EQ. jwr_SV .AND.
5947 ! #sb. nn__SV(ikl).GE.nwr_SV)
5948 ! #sb. write(6,6604) us__SV(ikl),uts_SV(ikl)
5949 ! #sb. ,LMO_SV(ikl),zeta
5950  6604 format(/,'***(m,h), LMO , zeta = ',4e15.6)
5951 
5952  END DO
5953 
5954  return
5955  end
5956 
5957 
5958  subroutine sisvat_tvg
5959 ! #e1. (ETVg_d)
5960 
5961 !--------------------------------------------------------------------------+
5962 ! MAR SISVAT_TVg Sat 12-Feb-2012 MAR |
5963 ! SubRoutine SISVAT_TVg computes the Canopy Energy Balance |
5964 !--------------------------------------------------------------------------+
5965 ! |
5966 ! PARAMETERS: klonv: Total Number of columns = |
5967 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
5968 ! X Number of Mosaic Cell per grid box |
5969 ! |
5970 ! INPUT: ivgtSV = 0,...,12: Vegetation Type |
5971 ! ^^^^^ 0: Water, Solid or Liquid |
5972 ! isnoSV = total Nb of Ice/Snow Layers |
5973 ! |
5974 ! INPUT: sol_SV : Downward Solar Radiation [W/m2] |
5975 ! ^^^^^ IRd_SV : Surface Downward Longwave Radiation [W/m2] |
5976 ! TaT_SV : SBL Top Temperature [K] |
5977 ! rhT_SV : SBL Top Air Density [kg/m3] |
5978 ! QaT_SV : SBL Top Specific Humidity [kg/kg] |
5979 ! psivSV : Leaf Water Potential [m] |
5980 ! IRs_SV : Soil IR Flux (previous time step) [W/m2] |
5981 ! dt__SV : Time Step [s] |
5982 ! |
5983 ! SoCasv : Absorbed Solar Radiation by Canopy (Normaliz)[-] |
5984 ! tau_sv : Fraction of Radiation transmitted by Canopy [-] |
5985 ! Evg_sv : Soil+Vegetation Emissivity [-] |
5986 ! Eso_sv : Soil+Snow Emissivity [-] |
5987 ! rah_sv : Aerodynamic Resistance for Heat [s/m] |
5988 ! Sigmsv : Canopy Ventilation Factor [-] |
5989 ! LAI_sv : Leaf Area Index [-] |
5990 ! LAIesv : Leaf Area Index (effective / transpiration) [-] |
5991 ! glf_sv : Green Leaf Fraction of NOT fallen Leaves [-] |
5992 ! rrMxsv : Canopy Maximum Intercepted Rain [kg/m2] |
5993 ! |
5994 ! INPUT / TvegSV : Canopy Temperature [K] |
5995 ! OUTPUT: rrCaSV : Canopy Water Content [kg/m2] |
5996 ! ^^^^^^ |
5997 ! |
5998 ! OUTPUT: IRv_sv : Vegetation IR Flux [W/m2] |
5999 ! ^^^^^^ HSv_sv : Sensible Heat Flux [W/m2] |
6000 ! HLv_sv : Latent Heat Flux [W/m2] |
6001 ! Evp_sv : Evaporation [kg/m2] |
6002 ! EvT_sv : Evapotranspiration [kg/m2] |
6003 ! ETVg_d : Vegetation Energy Power Forcing [W/m2] |
6004 ! |
6005 ! Internal Variables: |
6006 ! ^^^^^^^^^^^^^^^^^^ |
6007 ! |
6008 ! METHOD: The Newton-Raphson Scheme is preferable |
6009 ! ^^^^^^ when computing over a long time step the heat content |
6010 ! of a medium having a very small or zero heat capacity. |
6011 ! This is to handle strong non linearities arising |
6012 ! in conjunction with rapid temperature variations. |
6013 ! |
6014 ! REFERENCE: DR97: Koen de Ridder thesis, UCL, 1997 |
6015 ! ^^^^^^^^^ |
6016 ! |
6017 ! Preprocessing Option: |
6018 ! ^^^^^^^^^^^^^^^^^^^^^ |
6019 ! #NN: Newton-Raphson Increment not added in last Iteration |
6020 ! #NC: OUTPUT Preparation for Stand Alone NetCDF File |
6021 ! |
6022 !--------------------------------------------------------------------------+
6023 
6024 
6025 
6026 
6027 
6028 ! Global Variables
6029 ! ================
6030 
6031  USE phy_sv
6032 
6033  USE var_sv
6034  USE vardsv
6035 
6036  USE varxsv
6037  USE varysv
6038 
6039 
6040  IMPLICIT NONE
6041 
6042 ! OUTPUT
6043 ! ------
6044 
6045 ! OUTPUT/Verification: Energy/Water Budget
6046 ! #e1 real ETVg_d(klonv) ! VegetationPower, Forcing
6047 
6048 ! OUTPUT for Stand Alone NetCDF File
6049 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6050 c #NC real SOsoKL(klonv) ! Absorbed Solar Radiation
6051 c #NC real IRsoKL(klonv) ! Absorbed IR Radiation
6052 c #NC real HSsoKL(klonv) ! Absorbed Sensible Heat Flux
6053 c #NC real HLsoKL(klonv) ! Absorbed Latent Heat Flux
6054 c #NC real HLs_KL(klonv) ! Evaporation
6055 c #NC real HLv_KL(klonv) ! Transpiration
6056 c #NC common/DumpNC/SOsoKL,IRsoKL
6057 c #NC. ,HSsoKL,HLsoKL
6058 c #NC. ,HLs_KL,HLv_KL
6059 
6060 
6061 ! Internal Variables
6062 ! ==================
6063 
6064  integer ikl ! Grid Point Index
6065  integer nitmax,nit ! Iterations Counter
6066  real d_Tveg ! Canopy Temperat. Increment
6067  real dTvMAX ! Canopy Temperat. Increment MAX
6068  real dHvdTv ! Derivativ.of Canopy Energ.Budg.
6069  real Hv_Tv0 ! Imbalance of Canopy Energ.Budg.
6070  real Hv_MAX ! MAX Imbal.of Canopy Energ.Budg.
6071  real Hv_MIN ! MIN Imbal.of Canopy Energ.Budg.
6072  real Hswich ! Newton-Raphson Switch
6073  real Tveg_0(klonv) ! Canopy Temperature, Previous t
6074  real tau_Ca ! Canopy IR Radiation Absorption
6075  real IR_net ! InfraRed NET(t)
6076  real dIRdTv(klonv) ! InfraRed NET(t), Derivative(t)
6077  real dHSdTv(klonv) ! Sensible Heat FL. Derivative(t)
6078  real dHLdTv(klonv) ! Latent Heat FL. Derivative(t)
6079  real EvFrac ! Condensat./Transpirat. Switch
6080  real SnoMsk ! Canopy Snow Switch
6081  real den_qs,arg_qs,qsatvg ! Canopy Saturat. Spec. Humidity
6082  real dqs_dT ! d(qsatvg)/dTv
6083  real FacEvp,FacEvT,Fac_Ev ! Evapo(transpi)ration Factor
6084  real dEvpdT(klonv),dEvTdT(klonv) ! Evapo(transpi)ration Derivative
6085  real F_Stom ! Funct. (Leaf Water Potential)
6086  real R0Stom ! Minimum Stomatal Resistance
6087  real R_Stom ! Stomatal Resistance
6088  real LAI_OK ! 1. ==> Leaves exist
6089  real rrCaOK,snCaOK,dEvpOK ! Positive Definiteness Correct.
6090 
6091 
6092 ! Internal DATA
6093 ! =============
6094 
6095  data nitmax / 5 / ! Maximum Iterations Number
6096  data dtvmax / 5. / ! Canopy Temperat. Increment MAX
6097  data hv_min / 0.1 / ! MIN Imbal. of Surf.Energy Budg.
6098  data snomsk / 0.0 / ! Canopy Snow Switch (Default)
6099 
6100 
6101 ! Newton-Raphson Scheme
6102 ! =====================
6103 
6104  nit = 0
6105  101 CONTINUE
6106  nit = nit + 1
6107  hv_max = 0.
6108 
6109 
6110 ! Temperature of the Previous Time Step
6111 ! -------------------------------------
6112 
6113  DO ikl=1,knonv
6114  tveg_0(ikl) = tvegsv(ikl)
6115 
6116 
6117 ! IR Radiation Absorption
6118 ! --------------------------
6119 
6120  tau_ca = 1. - tau_sv(ikl) ! Canopy Absorption
6121  irv_sv(ikl) = -2.0 *evg_sv(ikl) *stefbo !
6122  . *tvegsv(ikl) *tvegsv(ikl) ! Downward IR (OUT)
6123  . *tvegsv(ikl) *tvegsv(ikl) ! + Upward IR (OUT)
6124  dirdtv(ikl) =
6125  . -evg_sv(ikl)* !
6126  . 8.*stefbo*tvegsv(ikl) *tvegsv(ikl) ! Downward IR (OUT)
6127  . *tvegsv(ikl) ! + Upward IR (OUT)
6128  ir_net = tau_ca !
6129  . *(evg_sv(ikl)* ird_sv(ikl) ! Downward IR (IN)
6130  . - irs_sv(ikl) ! Upward IR (IN)
6131  . + irv_sv(ikl)) ! IR (OUT)
6132 
6133 
6134 ! Sensible Heat Flux
6135 ! ------------------
6136 
6137  dhsdtv(ikl) = rht_sv(ikl)* sigmsv(ikl) *cpdair ! Derivative, t(n)
6138  . / rah_sv(ikl) !
6139  hsv_sv(ikl) = dhsdtv(ikl) ! Value, t(n)
6140  . *(tat_sv(ikl)-tvegsv(ikl)) !
6141 
6142 
6143 ! Latent Heat Flux
6144 ! ------------------
6145 
6146 ! Canopy Saturation Specific Humidity
6147 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6148  den_qs = tvegsv(ikl)- 35.8
6149  arg_qs = 17.27 *(tvegsv(ikl)-273.16)/den_qs
6150  qsatvg = .0038 * exp(arg_qs)
6151  dqs_dt = qsatvg* 4099.2 /(den_qs *den_qs)
6152 
6153 ! Canopy Stomatal Resistance
6154 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
6155  r0stom = min( stodsv(ivgtsv(ikl))
6156  . /max(eps6,glf_sv( ikl)),stxdsv) ! Min Stomatal R.
6157  f_stom = pscdsv / max(pscdsv-psivsv(ikl) ,eps6) ! F(Leaf Wat.Pot.)
6158  ! DR97, eqn. 3.22
6159  r_stom =(r0stom / max(laiesv(ikl), r0stom/stxdsv)) ! Can.Stomatal R.
6160  . * f_stom ! DR97, eqn. 3.21
6161 
6162 ! Evaporation / Evapotranspiration
6163 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6164  snomsk = max(zer0, sign(un_1,sncasv(ikl)-eps_21)) !
6165  evfrac = max(zer0, sign(un_1,qat_sv(ikl)-qsatvg)) ! Condensation/
6166  evfrac = evfrac ! Transpiration
6167  . + (1.-evfrac)*((1-snomsk)* rrcasv(ikl) ! Switch
6168  . /rrmxsv(ikl) !
6169  . + snomsk *min(un_1,sncasv(ikl) !
6170  . /rrmxsv(ikl)))!
6171  fac_ev = rht_sv(ikl) *sigmsv(ikl) ! Idem, Factor
6172  facevp = fac_ev *evfrac / rah_sv(ikl) !
6173  evp_sv(ikl) = facevp*(qsatvg - qat_sv(ikl)) ! Evaporation
6174  devpdt(ikl) = facevp* dqs_dt ! Evp Derivative
6175  facevt = fac_ev * (1.-evfrac) /(rah_sv(ikl) !
6176  . +r_stom *sigmsv(ikl)) !
6177  evt_sv(ikl) = facevt*(qsatvg - qat_sv(ikl)) ! EvapoTranspir.
6178  devtdt(ikl) = facevt* dqs_dt ! EvT Derivative
6179  hlv_sv(ikl) =-lhvh2o*(evp_sv(ikl)+ evt_sv(ikl)) ! Latent Heat
6180  . -lhfh2o* evp_sv(ikl)* snomsk !(Subli.Contrib.)
6181  dhldtv(ikl) = lhvh2o*(devpdt(ikl)+ devtdt(ikl)) !
6182  . +lhfh2o* devpdt(ikl)* snomsk !
6183 
6184 
6185 ! Imbalance of the Canopy Energy Budget
6186 ! ---------------------------------------
6187 
6188  lai_ok = max(zer0, ! NO Budget if
6189  . sign(un_1, lai_sv(ikl)-eps_21)) ! no Leaves
6190  hv_tv0 = ( socasv(ikl) *sol_sv(ikl) ! Absorbed Solar
6191  . + ir_net ! NET IR
6192  . + hsv_sv(ikl) ! Sensible Heat
6193  . + hlv_sv(ikl) ! Latent Heat
6194  . ) *lai_ok !
6195 
6196 ! OUTPUT/Verification: Energy/Water Budget
6197 ! #e1 ETVg_d(ikl) = Hv_Tv0 ! Veg.Energ.Bal.
6198 
6199  hswich = 1.00
6200 c #NN Hswich = max(zer0, ! Newton-Raphson
6201 c #NN. sign(un_1, abs(Hv_Tv0 ) ! Switch
6202 c #NN. -Hv_MIN )) !
6203 
6204 
6205 ! Derivative of the Canopy Energy Budget
6206 ! ---------------------------------------
6207 
6208  dhvdtv = dirdtv(ikl) * max(eps_21,tau_ca)
6209  . - dhsdtv(ikl)
6210  . - dhldtv(ikl)
6211 
6212 
6213 ! Update Canopy and Surface/Canopy Temperatures
6214 ! ---------------------------------------------
6215 
6216  d_tveg = hv_tv0 / dhvdtv !
6217  d_tveg = sign(un_1,d_tveg) ! Increment
6218  . *min( abs(d_tveg) ,dtvmax) ! Limitor
6219  tvegsv(ikl) = tvegsv(ikl) - hswich *d_tveg ! Newton-Raphson
6220  hv_max = max(hv_max,abs(hv_tv0 )) !
6221 
6222 
6223 ! Update Vegetation Fluxes
6224 ! ------------------------
6225 
6226 c #NN IRv_sv(ikl) = IRv_sv(ikl)-dIRdTv(ikl) *d_Tveg ! Emitted IR
6227 c #NN HSv_sv(ikl) = HSv_sv(ikl)+dHSdTv(ikl) *d_Tveg ! Sensible Heat
6228 c #NN Evp_sv(ikl) = Evp_sv(ikl)-dEvpdT(ikl) *d_Tveg ! Evapotranspir.
6229 c #NN EvT_sv(ikl) = EvT_sv(ikl)-dEvTdT(ikl) *d_Tveg ! Evapotranspir.
6230 c #NN HLv_sv(ikl) = HLv_sv(ikl)+dHLdTv(ikl) *d_Tveg ! Latent Heat
6231 
6232  irv_sv(ikl) = irv_sv(ikl) *lai_ok
6233  hsv_sv(ikl) = hsv_sv(ikl) *lai_ok
6234  evp_sv(ikl) = evp_sv(ikl) *lai_ok
6235  evt_sv(ikl) = evt_sv(ikl) *lai_ok
6236  hlv_sv(ikl) = hlv_sv(ikl) *lai_ok
6237  END DO
6238 
6239 c #IX IF ( nit.lt.nitmax) GO TO 101
6240 c hj150311 for parallel IF (Hv_MAX.gt.Hv_MIN.and.nit.lt.nitmax) GO TO 101
6241  IF ( nit.lt.nitmax) GO TO 101
6242  DO ikl=1,knonv
6243  irv_sv(ikl) = irv_sv(ikl) ! Emitted IR
6244  . +dirdtv(ikl) *(tvegsv(ikl)-tveg_0(ikl)) !
6245  hsv_sv(ikl) = hsv_sv(ikl) ! Sensible Heat
6246  . -dhsdtv(ikl) *(tvegsv(ikl)-tveg_0(ikl)) !
6247  evp_sv(ikl) = evp_sv(ikl) ! Evaporation
6248  . +devpdt(ikl) *(tvegsv(ikl)-tveg_0(ikl)) !
6249  evt_sv(ikl) = evt_sv(ikl) ! Transpiration
6250  . +devtdt(ikl) *(tvegsv(ikl)-tveg_0(ikl)) !
6251  hlv_sv(ikl) = hlv_sv(ikl) ! Latent Heat
6252  . -dhldtv(ikl) *(tvegsv(ikl)-tveg_0(ikl)) !
6253 
6254 ! OUTPUT for Stand Alone NetCDF File
6255 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6256 c #NC HLv_KL(ikl) = HLv_sv(ikl)
6257 
6258 
6259 ! Update Canopy Water Content
6260 ! ---------------------------
6261 
6262  rrcasv(ikl) = rrcasv(ikl)-(1.-snomsk)*evp_sv(ikl)*dt__sv
6263  sncasv(ikl) = sncasv(ikl)- snomsk *evp_sv(ikl)*dt__sv
6264 
6265 ! Correction for Positive Definiteness (see WKarea/EvpVeg/EvpVeg.f)
6266 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6267  rrcaok = max(rrcasv(ikl), 0.)
6268  sncaok = max(sncasv(ikl), 0.)
6269  devpok = (rrcaok-rrcasv(ikl)
6270  . +sncaok-sncasv(ikl))/dt__sv
6271 
6272  evp_sv(ikl) = evp_sv(ikl) - devpok ! Evaporation
6273  hlv_sv(ikl) = hlv_sv(ikl) ! Latent Heat
6274  . +(1.-snomsk)* lhvh2o * devpok !
6275  . + snomsk *(lhvh2o+lhfh2o) * devpok !
6276 
6277  rrcasv(ikl) = rrcaok
6278  sncasv(ikl) = sncaok
6279 
6280  END DO
6281 
6282 
6283  return
6284  end
6285 
6286 
6287  subroutine sisvat_tso
6288 ! #e1. (ETSo_0,ETSo_1,ETSo_d)
6289 
6290 !--------------------------------------------------------------------------+
6291 ! MAR SISVAT_TSo Sat 12-Feb-2012 MAR |
6292 ! SubRoutine SISVAT_TSo computes the Soil/Snow Energy Balance |
6293 !--------------------------------------------------------------------------+
6294 ! |
6295 ! PARAMETERS: klonv: Total Number of columns = |
6296 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
6297 ! X Number of Mosaic Cell per grid box |
6298 ! |
6299 ! INPUT: isotSV = 0,...,11: Soil Type |
6300 ! ^^^^^ 0: Water, Solid or Liquid |
6301 ! isnoSV = total Nb of Ice/Snow Layers |
6302 ! dQa_SV = Limitation of Water Vapor Turbulent Flux |
6303 ! |
6304 ! INPUT: sol_SV : Downward Solar Radiation [W/m2] |
6305 ! ^^^^^ IRd_SV : Surface Downward Longwave Radiation [W/m2] |
6306 ! za__SV : SBL Top Height [m] |
6307 ! VV__SV : SBL Top Wind Speed [m/s] |
6308 ! TaT_SV : SBL Top Temperature [K] |
6309 ! rhT_SV : SBL Top Air Density [kg/m3] |
6310 ! QaT_SV : SBL Top Specific Humidity [kg/kg] |
6311 ! LSdzsv : Vertical Discretization Factor [-] |
6312 ! = 1. Soil |
6313 ! = 1000. Ocean |
6314 ! dzsnSV : Snow Layer Thickness [m] |
6315 ! ro__SV : Snow/Soil Volumic Mass [kg/m3] |
6316 ! eta_SV : Soil Water Content [m3/m3] |
6317 ! dt__SV : Time Step [s] |
6318 ! |
6319 ! SoSosv : Absorbed Solar Radiation by Surfac.(Normaliz)[-] |
6320 ! IRv_sv : Vegetation IR Radiation [W/m2] |
6321 ! tau_sv : Fraction of Radiation transmitted by Canopy [-] |
6322 ! Evg_sv : Soil+Vegetation Emissivity [-] |
6323 ! Eso_sv : Soil+Snow Emissivity [-] |
6324 ! rah_sv : Aerodynamic Resistance for Heat [s/m] |
6325 ! Lx_H2O : Latent Heat of Vaporization/Sublimation [J/kg] |
6326 ! Sigmsv : Canopy Ventilation Factor [-] |
6327 ! sEX_sv : Verticaly Integrated Extinction Coefficient [-] |
6328 ! |
6329 ! INPUT / TsisSV : Soil/Ice Temperatures (layers -nsol,-nsol+1,..,0)|
6330 ! OUTPUT: & Snow Temperatures (layers 1,2,...,nsno) [K] |
6331 ! ^^^^^^ |
6332 ! |
6333 ! OUTPUT: IRs_SV : Soil IR Radiation [W/m2] |
6334 ! ^^^^^^ HSs_sv : Sensible Heat Flux [W/m2] |
6335 ! HLs_sv : Latent Heat Flux [W/m2] |
6336 ! ETSo_0 : Snow/Soil Energy Power, before Forcing [W/m2] |
6337 ! ETSo_1 : Snow/Soil Energy Power, after Forcing [W/m2] |
6338 ! ETSo_d : Snow/Soil Energy Power Forcing [W/m2] |
6339 ! |
6340 ! METHOD: NO Skin Surface Temperature |
6341 ! ^^^^^^ Semi-Implicit Crank Nicholson Scheme |
6342 ! |
6343 ! REFERENCE: DR97: Koen de Ridder thesis, UCL, 1997 |
6344 ! ^^^^^^^^^ |
6345 ! |
6346 ! Preprocessing Option: |
6347 ! ^^^^^^^^^^^^^^^^^^^^^ |
6348 ! #VX: TURBULENCE: u*q* limited to SBL Saturat.Specif.Humid. |
6349 ! #RC: TURBULENCE: Richardson Number: T Derivative is used |
6350 ! #DL: TURBULENCE: Latent Heat Flux: T Derivative is used |
6351 ! #NC: OUTPUT Preparation for Stand Alone NetCDF File |
6352 ! |
6353 ! |
6354 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
6355 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
6356 ! FILE | CONTENT |
6357 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
6358 ! # SISVAT_iii_jjj_n | #e1: OUTPUT/Verification: Energy Conservation |
6359 ! | |
6360 !--------------------------------------------------------------------------+
6361 
6362 
6363 
6364 
6365 
6366 ! Global Variables
6367 ! ================
6368 
6369  USE phy_sv
6370 
6371  USE var_sv
6372  USE vardsv
6373  USE var0sv
6374 
6375  USE varxsv
6376  USE varysv
6377 !hj220711
6378  USE vartsv
6379 
6380  IMPLICIT NONE
6381 
6382 ! OUTPUT/Verification: Energy/Water Budget
6383 ! #e1 real ETSo_0(klonv) ! Soil/Snow Power, before Forcing
6384 ! #e1 real ETSo_1(klonv) ! Soil/Snow Power, after Forcing
6385 ! #e1 real ETSo_d(klonv) ! Soil/Snow Power, Forcing
6386 
6387 
6388 ! Internal Variables
6389 ! ==================
6390 
6391  integer ikl ,isl ,jsl ,ist !
6392  integer ist__s,ist__w ! Soil/Water Body Identifier
6393  integer islsgn ! Soil/Snow Surfac.Identifier
6394  real eps__3 ! Arbitrary Low Number
6395  real etaMid,psiMid ! Layer Interface's Humidity
6396  real mu_eta ! Soil thermal Conductivity
6397  real mu_exp ! arg Soil thermal Conductivity
6398  real mu_min ! Min Soil thermal Conductivity
6399  real mu_max ! Max Soil thermal Conductivity
6400  real mu_sno(klonv),mu_aux ! Snow thermal Conductivity
6401  real mu__dz(klonv,-nsol:nsno+1) ! mu_(eta,sno) / dz
6402  real dtC_sv(klonv,-nsol:nsno) ! dt / C
6403  real IRs__D(klonv) ! UpwardIR Previous Iter.Contr.
6404  real dIRsdT(klonv) ! UpwardIR T Derivat.
6405  real f_HSHL(klonv) ! Factor common to HS and HL
6406  real dRidTs(klonv) ! d(Rib)/d(Ts)
6407  real HS___D(klonv) ! Sensible Heat Flux Atm.Contr.
6408  real f___HL(klonv) !
6409  real HL___D(klonv) ! Latent Heat Flux Atm.Contr.
6410  REAL TSurf0(klonv),dTSurf ! Previous Surface Temperature
6411  real qsatsg(klonv),den_qs,arg_qs ! Soil Saturat. Spec. Humidity
6412  real dqs_dT(klonv) ! d(qsatsg)/dTv
6413  real Psi( klonv) ! 1st Soil Layer Water Potential
6414  real RHuSol(klonv) ! Soil Surface Relative Humidity
6415  real etaSol ! Soil Surface Humidity
6416  real d__eta ! Soil Surface Humidity Increm.
6417  real Elem_A,Elem_C ! Diagonal Coefficients
6418  real Diag_A(klonv,-nsol:nsno) ! A Diagonal
6419  real Diag_B(klonv,-nsol:nsno) ! B Diagonal
6420  real Diag_C(klonv,-nsol:nsno) ! C Diagonal
6421  real Term_D(klonv,-nsol:nsno) ! Independant Term
6422  real Aux__P(klonv,-nsol:nsno) ! P Auxiliary Variable
6423  real Aux__Q(klonv,-nsol:nsno) ! Q Auxiliary Variable
6424  real Ts_Min,Ts_Max ! Temperature Limits
6425 
6426 ! OUTPUT/Verification: Energy/Water Budget
6427 ! #e1 real Exist0 ! Existing Layer Switch
6428 
6429  integer nt_srf,it_srf,itEuBk ! HL: Surface Scheme
6430  parameter(nt_srf=10) !
6431  real agpsrf,xgpsrf,dt_srf,dt_ver !
6432  real etaBAK(klonv) !
6433  real etaNEW(klonv) !
6434  real etEuBk(klonv) !
6435  real fac_dt(klonv),faceta(klonv) !
6436  real PsiArg(klonv),SHuSol(klonv) !
6437 
6438 ! OUTPUT for Stand Alone NetCDF File
6439 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6440 c #NC real SOsoKL(klonv) ! Absorbed Solar Radiation
6441 c #NC real IRsoKL(klonv) ! Absorbed IR Radiation
6442 c #NC real HSsoKL(klonv) ! Absorbed Sensible Heat Flux
6443 c #NC real HLsoKL(klonv) ! Absorbed Latent Heat Flux
6444 c #NC real HLs_KL(klonv) ! Evaporation
6445 c #NC real HLv_KL(klonv) ! Transpiration
6446 c #NC common/DumpNC/SOsoKL,IRsoKL
6447 c #NC. ,HSsoKL,HLsoKL
6448 c #NC. ,HLs_KL,HLv_KL
6449 
6450 
6451 ! Internal DATA
6452 ! =============
6453 
6454  data eps__3 / 1.e-3 / ! Arbitrary Low Number
6455  data mu_exp / -0.4343 / ! Soil Thermal Conductivity
6456  data mu_min / 0.172 / ! Min Soil Thermal Conductivity
6457  data mu_max / 2.000 / ! Max Soil Thermal Conductivity
6458  data ts_min / 175. / ! Temperature Minimum
6459  data ts_max / 300. / ! Temperature Acceptable Maximum
6460  ! including Snow Melt Energy
6461 
6462 
6463 ! Heat Conduction Coefficient (zero in the Layers over the highest one)
6464 ! ===========================
6465 ! ---------------- isl eta_SV, rho C (isl)
6466 !
6467 ! Soil ++++++++++++++++ etaMid, mu (isl)
6468 ! ----
6469 ! ---------------- isl-1 eta_SV, rho C (isl-1)
6470  isl=-nsol
6471  DO ikl=1,knonv
6472  mu__dz(ikl,isl) = 0.
6473 
6474  dtc_sv(ikl,isl) = dtz_sv(isl) ! dt / (dz X rho C)
6475  . /((rocssv(isotsv(ikl)) ! [s / (m.J/m3/K)]
6476  . +rcwdsv*eta_sv(ikl,isl)) !
6477  . *lsdzsv(ikl) ) !
6478  END DO
6479  DO isl=-nsol+1,0
6480  DO ikl=1,knonv
6481  ist = isotsv(ikl) ! Soil Type
6482  ist__s = min(ist, 1) ! 1 => Soil
6483  ist__w = 1 - ist__s ! 1 => Water Body
6484 
6485  etamid = 0.5*(dz_dsv(isl-1)*eta_sv(ikl,isl-1) ! eta at layers
6486  . +dz_dsv(isl) *eta_sv(ikl,isl) ) ! interface
6487  . /dzmisv(isl) ! LSdzsv implicit !
6488  etamid = max(etamid,eps6)
6489  psimid = psidsv(ist)
6490  . *(etadsv(ist)/etamid)**bchdsv(ist)
6491  mu_eta = 3.82 *(psimid)**mu_exp ! Soil Thermal
6492  mu_eta = min(max(mu_eta, mu_min), mu_max) ! Conductivity
6493  ! DR97 eq.3.31
6494  mu_eta = ist__s *mu_eta +ist__w * vk_dsv ! Water Bodies
6495  ! Correction
6496  mu__dz(ikl,isl) = mu_eta/(dzmisv(isl) !
6497  . *lsdzsv(ikl)) !
6498 
6499  dtc_sv(ikl,isl) = dtz_sv(isl) ! dt / (dz X rho C)
6500  . /((rocssv(isotsv(ikl)) !
6501  . +rcwdsv*eta_sv(ikl,isl)) !
6502  . *lsdzsv(ikl) ) !
6503  END DO
6504  END DO
6505 
6506 
6507 ! Soil/Snow Interface
6508 ! -------------------
6509 
6510 ! Soil Contribution
6511 ! ^^^^^^^^^^^^^^^^^
6512  isl=1
6513  DO ikl=1,knonv
6514  ist = isotsv(ikl) ! Soil Type
6515  ist__s = min(ist, 1) ! 1 => Soil
6516  ist__w = 1 - ist__s ! 1 => Water Body
6517  psimid = psidsv(ist) ! Snow => Saturation
6518  mu_eta = 3.82 *(psimid)**mu_exp ! Soil Thermal
6519  mu_eta = min(max(mu_eta, mu_min), mu_max) ! Conductivity
6520  ! DR97 eq.3.31
6521  mu_eta = ist__s *mu_eta +ist__w * vk_dsv ! Water Bodies
6522 
6523 ! Snow Contribution
6524 ! ^^^^^^^^^^^^^^^^^
6525  mu_sno(ikl) = cdidsv !
6526  . *(ro__sv(ikl,isl) /rhowat) ** 1.88 !
6527  mu_sno(ikl) = max(eps6,mu_sno(ikl)) !
6528 ! mu_sno : Snow Heat Conductivity Coefficient [Wm/K]
6529 ! (Yen 1981, CRREL Rep., 81-10)
6530 
6531 ! Combined Heat Conductivity
6532 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
6533  mu__dz(ikl,isl) = 2./(dzsnsv(ikl,isl ) ! Combined Heat
6534  . /mu_sno(ikl) ! Conductivity
6535  . +lsdzsv(ikl) !
6536  . *dz_dsv( isl-1)/mu_eta) ! Coefficient
6537 
6538 ! Inverted Heat Capacity
6539 ! ^^^^^^^^^^^^^^^^^^^^^^
6540  dtc_sv(ikl,isl) = dt__sv/max(eps6, ! dt / (dz X rho C)
6541  . dzsnsv(ikl,isl) * ro__sv(ikl,isl) *cn_dsv) !
6542  END DO
6543 
6544 
6545 ! Snow
6546 ! ----
6547 
6548  DO isl=1,nsno
6549  DO ikl=1,knonv
6550  ro__sv(ikl,isl) = !
6551  . ro__sv(ikl ,isl) !
6552  . * max(0,min(isnosv(ikl)-isl+1,1)) !
6553  END DO
6554  END DO
6555 
6556  DO isl=1,nsno
6557  DO ikl=1,knonv
6558 
6559 ! Combined Heat Conductivity
6560 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
6561  mu_aux = cdidsv !
6562  . *(ro__sv(ikl,isl) /rhowat) ** 1.88 !
6563  mu__dz(ikl,isl) = !
6564  . 2. *mu_aux*mu_sno(ikl) ! Combined Heat
6565  . /max(eps6,dzsnsv(ikl,isl )*mu_sno(ikl) ! Conductivity
6566  . +dzsnsv(ikl,isl-1)*mu_aux ) ! For upper Layer
6567  mu_sno(ikl) = mu_aux !
6568 
6569 ! Inverted Heat Capacity
6570 ! ^^^^^^^^^^^^^^^^^^^^^^
6571  dtc_sv(ikl,isl) = dt__sv/max(eps__3, ! dt / (dz X rho C)
6572  . dzsnsv(ikl,isl) * ro__sv(ikl,isl) *cn_dsv) !
6573  END DO
6574  END DO
6575 
6576 
6577 ! Uppermost Effective Layer: NO conduction
6578 ! ----------------------------------------
6579 
6580  DO ikl=1,knonv
6581  mu__dz(ikl,isnosv(ikl)+1) = 0.0
6582  END DO
6583 
6584 
6585 ! OUTPUT/Verification: Energy/Water Budget: Energy Budget (IN)
6586 ! #e1 DO ikl=1,knonv
6587 ! #e1 ETSo_0(ikl) = 0.
6588 ! #e1 END DO
6589 ! #e1 DO isl= -nsol,nsno
6590 ! #e1 DO ikl=1,knonv
6591 ! #e1 Exist0 = isl - isnoSV(ikl)
6592 ! #e1 Exist0 = 1. - max(zer0,min(un_1,Exist0))
6593 ! #e1 ETSo_0(ikl) = ETSo_0(ikl)
6594 ! #e1. +(TsisSV(ikl,isl)-Tf_Sno)*Exist0
6595 ! #e1. /dtC_sv(ikl,isl)
6596 ! #e1 END DO
6597 ! #e1 END DO
6598 
6599 
6600 ! Tridiagonal Elimination: Set Up
6601 ! ===============================
6602 
6603 ! Soil/Snow Interior
6604 ! ^^^^^^^^^^^^^^^^^^
6605  DO isl= -nsol+1,nsno-1
6606  DO ikl=1,knonv
6607  elem_a = dtc_sv(ikl,isl) *mu__dz(ikl,isl)
6608  elem_c = dtc_sv(ikl,isl) *mu__dz(ikl,isl+1)
6609  diag_a(ikl,isl) = -elem_a *implic
6610  diag_c(ikl,isl) = -elem_c *implic
6611  diag_b(ikl,isl) = 1.0d+0 -diag_a(ikl,isl)-diag_c(ikl,isl)
6612  term_d(ikl,isl) = explic *(elem_a *tsissv(ikl,isl-1)
6613  . +elem_c *tsissv(ikl,isl+1))
6614  . +(1.0d+0 -explic *(elem_a+elem_c))*tsissv(ikl,isl)
6615  . + dtc_sv(ikl,isl) * sol_sv(ikl) *sososv(ikl)
6616  . *(sex_sv(ikl,isl+1)
6617  . -sex_sv(ikl,isl ))
6618  END DO
6619  END DO
6620 
6621 ! Soil lowest Layer
6622 ! ^^^^^^^^^^^^^^^^^^
6623  isl= -nsol
6624  DO ikl=1,knonv
6625  elem_a = 0.
6626  elem_c = dtc_sv(ikl,isl) *mu__dz(ikl,isl+1)
6627  diag_a(ikl,isl) = 0.
6628  diag_c(ikl,isl) = -elem_c *implic
6629  diag_b(ikl,isl) = 1.0d+0 -diag_a(ikl,isl)-diag_c(ikl,isl)
6630  term_d(ikl,isl) = explic * elem_c *tsissv(ikl,isl+1)
6631  . +(1.0d+0 -explic * elem_c) *tsissv(ikl,isl)
6632  . + dtc_sv(ikl,isl) * sol_sv(ikl) *sososv(ikl)
6633  . *(sex_sv(ikl,isl+1)
6634  . -sex_sv(ikl,isl ))
6635  END DO
6636 
6637 ! Snow highest Layer (dummy!)
6638 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^
6639  isl= nsno
6640  DO ikl=1,knonv
6641  elem_a = dtc_sv(ikl,isl) *mu__dz(ikl,isl)
6642  elem_c = 0.
6643  diag_a(ikl,isl) = -elem_a *implic
6644  diag_c(ikl,isl) = 0.
6645  diag_b(ikl,isl) = 1.0d+0 -diag_a(ikl,isl)
6646  term_d(ikl,isl) = explic * elem_a *tsissv(ikl,isl-1)
6647  . +(1.0d+0 -explic * elem_a) *tsissv(ikl,isl)
6648  . + dtc_sv(ikl,isl) * (sol_sv(ikl) *sososv(ikl)
6649  . *(sex_sv(ikl,isl+1)
6650  . -sex_sv(ikl,isl )))
6651  END DO
6652 
6653 ! Surface: UPwardIR Heat Flux
6654 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^
6655  DO ikl=1,knonv
6656  isl = isnosv(ikl)
6657  dirsdt(ikl) = eso_sv(ikl)* stefbo * 4. ! - d(IR)/d(T)
6658  . * tsissv(ikl,isl) !
6659  . * tsissv(ikl,isl) !
6660  . * tsissv(ikl,isl) !
6661  irs__d(ikl) = dirsdt(ikl)* tsissv(ikl,isl) * 0.75 !
6662 
6663 ! Surface: Richardson Number: T Derivative
6664 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6665 c #RC dRidTs(ikl) =-Grav_F * za__SV(ikl)
6666 c #RC. *(1.-Sigmsv(ikl))
6667 c #RC. /(TaT_SV(ikl) * VV__SV(ikl)
6668 c #RC. * VV__SV(ikl))
6669 
6670 ! Surface: Turbulent Heat Flux: Factors
6671 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6672  f_hshl(ikl) = rht_sv(ikl) *(1.-sigmsv(ikl)) !#common factor
6673  . / rah_sv(ikl) ! to HS, HL
6674  f___hl(ikl) = f_hshl(ikl) * lx_h2o(ikl)
6675 
6676 ! Surface: Sensible Heat Flux: T Derivative
6677 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6678  dsdtsv(ikl) = f_hshl(ikl) * cpdair !#- d(HS)/d(T)
6679 c #RC. *(1.0 -(TsisSV(ikl,isl) -TaT_SV(ikl)) !#Richardson
6680 c #RC. * dRidTs(ikl)*dFh_sv(ikl)/rah_sv(ikl)) ! Nb. Correct.
6681  hs___d(ikl) = dsdtsv(ikl) * tat_sv(ikl) !
6682 
6683 ! Surface: Latent Heat Flux: Saturation Specific Humidity
6684 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6685  den_qs = tsissv(ikl,isl)- 35.8 !
6686  arg_qs = 17.27 *(tsissv(ikl,isl)-273.16) !
6687  . / den_qs !
6688  qsatsg(ikl) = .0038 * exp(arg_qs) !
6689  dqs_dt(ikl) = qsatsg(ikl)* 4099.2 /(den_qs *den_qs)!
6690  fac_dt(ikl) = f_hshl(ikl)/(rhowat * dz_dsv(0)) !
6691  END DO
6692 
6693 ! Surface: Latent Heat Flux: Surface Relative Humidity
6694 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6695  xgpsrf = 1.05 !
6696  agpsrf = dt__sv*( 1.0-xgpsrf ) !
6697  . /( 1.0-xgpsrf**nt_srf) !
6698  dt_srf = agpsrf !
6699  dt_ver = 0. !
6700  DO ikl=1,knonv
6701  isl = isnosv(ikl) !
6702  etabak(ikl) = max(eps6,eta_sv(ikl ,isl)) !
6703  etanew(ikl) = etabak(ikl) !
6704  eteubk(ikl) = etanew(ikl) !
6705  END DO !
6706  DO it_srf=1,nt_srf !
6707  dt_ver = dt_ver +dt_srf !
6708  DO ikl=1,knonv !
6709  faceta(ikl) = fac_dt(ikl)*dt_srf !
6710 c #VX faceta(ikl) = faceta(ikl) !
6711 c #VX. /(1.+faceta(ikl)*dQa_SV(ikl)) ! Limitation
6712  ! by Atm.Conten
6713 ! . *max(0,sign(1.,qsatsg(ikl)-QaT_SV(ikl)))) ! NO Limitation
6714  ! of Downw.Flux
6715  END DO !
6716  DO iteubk=1,2 !
6717  DO ikl=1,knonv
6718  ist = max(0,isotsv(ikl)-100*isnosv(ikl)) ! 0 if H2O
6719  !
6720  psi(ikl) = !
6721  . psidsv(ist) ! DR97, Eqn 3.34
6722  . *(etadsv(ist) !
6723  . /max(eteubk(ikl),eps6)) !
6724  . **bchdsv(ist) !
6725  psiarg(ikl) = 7.2e-5*psi(ikl) !
6726  rhusol(ikl) = exp(-min(ea_max,psiarg(ikl))) !
6727  shusol(ikl) = qsatsg(ikl) *rhusol(ikl) ! DR97, Eqn 3.15
6728  eteubk(ikl) = !
6729  . (etanew(ikl) + faceta(ikl)*(qat_sv(ikl) !
6730  . -shusol(ikl) !
6731  . *(1. -bchdsv(ist) !
6732  . *psiarg(ikl)) )) !
6733  . /(1. + faceta(ikl)* shusol(ikl) !
6734  . *bchdsv(ist) !
6735  . *psiarg(ikl) !
6736  . /etanew(ikl)) !
6737  eteubk(ikl) = eteubk(ikl) -rootsv(ikl,0) !
6738  . /(rhowat*dz_dsv(0)) !
6739  END DO !
6740  END DO !
6741  DO ikl=1,knonv !
6742  etanew(ikl) = max(eteubk(ikl),eps6) !
6743  END DO !
6744  dt_srf = dt_srf * xgpsrf !
6745  END DO !
6746 
6747 ! Surface: Latent Heat Flux: Soil/Water Surface Contributions
6748 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6749  DO ikl=1,knonv !
6750  isl = isnosv(ikl) !
6751  ist = max(0,isotsv(ikl)-100*isnosv(ikl)) ! 0 if H2O
6752  ist__s= min(1,ist) ! 1 if no H2O
6753  ist__w= 1-ist__s ! 1 if H2O
6754  d__eta = eta_sv(ikl,isl)-etanew(ikl) !
6755  hl___d(ikl)=( ist__s *rhowat *dz_dsv(0) ! Soil Contrib.
6756  . *(etanew(ikl) -etabak(ikl)) / dt__sv !
6757  . +ist__w *f_hshl(ikl) ! H2O Contrib.
6758  . *(qat_sv(ikl) -qsatsg(ikl)) ) !
6759  . * lx_h2o(ikl) ! common factor
6760 
6761 c #DL RHuSol(ikl) =(QaT_SV(ikl) !
6762 c #DL. -HL___D(ikl) / f___HL(ikl)) !
6763 c #DL. / qsatsg(ikl) !
6764 
6765 ! Surface: Latent Heat Flux: T Derivative
6766 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6767  dldtsv(ikl) = 0.
6768 c #DL dLdTSV(ikl) = f___HL(ikl) * RHuSol(ikl) *dqs_dT(ikl) ! - d(HL)/d(T)
6769 c #DL HL___D(ikl) = HL___D(ikl) !
6770 c #DL. +dLdTSV(ikl) * TsisSV(ikl,isl) !
6771  END DO !
6772 
6773 ! Surface: Tridiagonal Matrix Set Up
6774 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6775  DO ikl=1,knonv
6776  isl = isnosv(ikl)
6777  tsurf0(ikl) = tsissv(ikl,isl)
6778  elem_a = dtc_sv(ikl,isl)*mu__dz(ikl,isl)
6779  elem_c = 0.
6780  diag_a(ikl,isl) = -elem_a *implic
6781  diag_c(ikl,isl) = 0.
6782  diag_b(ikl,isl) = 1.0d+0 -diag_a(ikl,isl)
6783  diag_b(ikl,isl) = diag_b(ikl,isl)
6784  . + dtc_sv(ikl,isl) * (dirsdt(ikl) ! Upw. Sol IR
6785  . +dsdtsv(ikl) ! HS/Surf.Contr.
6786  . +dldtsv(ikl)) ! HL/Surf.Contr.
6787  term_d(ikl,isl) = explic *elem_a *tsissv(ikl,isl-1)
6788  . +(1.0d+0 -explic *elem_a)*tsissv(ikl,isl)
6789  term_d(ikl,isl) = term_d(ikl,isl)
6790  . + dtc_sv(ikl,isl) * (sol_sv(ikl) *sososv(ikl) ! Absorbed
6791  . *(sex_sv(ikl,isl+1) ! Solar
6792  . -sex_sv(ikl,isl ))!
6793  . + tau_sv(ikl) *ird_sv(ikl)*eso_sv(ikl) ! Down Atm IR
6794  . -(1.0-tau_sv(ikl)) *0.5*irv_sv(ikl) ! Down Veg IR
6795  . +irs__d(ikl) ! Upw. Sol IR
6796  . +hs___d(ikl) ! HS/Atmo.Contr.
6797  . +hl___d(ikl) )! HL/Atmo.Contr.
6798  END DO
6799 
6800 
6801 ! Tridiagonal Elimination
6802 ! =======================
6803 
6804 ! Forward Sweep
6805 ! ^^^^^^^^^^^^^^
6806  DO ikl= 1,knonv
6807  aux__p(ikl,-nsol) = diag_b(ikl,-nsol)
6808  aux__q(ikl,-nsol) =-diag_c(ikl,-nsol)/aux__p(ikl,-nsol)
6809  END DO
6810 
6811  DO isl=-nsol+1,nsno
6812  DO ikl= 1,knonv
6813  aux__p(ikl,isl) = diag_a(ikl,isl) *aux__q(ikl,isl-1)
6814  . +diag_b(ikl,isl)
6815  aux__q(ikl,isl) =-diag_c(ikl,isl) /aux__p(ikl,isl)
6816  END DO
6817  END DO
6818 
6819  DO ikl= 1,knonv
6820  tsissv(ikl,-nsol) = term_d(ikl,-nsol)/aux__p(ikl,-nsol)
6821  END DO
6822 
6823  DO isl=-nsol+1,nsno
6824  DO ikl= 1,knonv
6825  tsissv(ikl,isl) =(term_d(ikl,isl)
6826  . -diag_a(ikl,isl) *tsissv(ikl,isl-1))
6827  . /aux__p(ikl,isl)
6828  END DO
6829  END DO
6830 
6831 ! Backward Sweep
6832 ! ^^^^^^^^^^^^^^
6833  DO isl=nsno-1,-nsol,-1
6834  DO ikl= 1,knonv
6835  tsissv(ikl,isl) = aux__q(ikl,isl) *tsissv(ikl,isl+1)
6836  . +tsissv(ikl,isl)
6837  END DO
6838  END DO
6839 
6840 ! Temperature Limits (avoids problems in case of no Snow Layers)
6841 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6842  DO ikl= 1,knonv
6843  isl = isnosv(ikl)
6844  dtsurf = tsissv(ikl,isl) - tsurf0(ikl)
6845  tsissv(ikl,isl) = tsurf0(ikl) + sign(1.,dtsurf) ! 180.0 dgC/hr
6846  . * min(abs(dtsurf),5.e-2*dt__sv) ! =0.05 dgC/s
6847  IF (abs(dtsurf) > 5.e-2*dt__sv) THEN
6848  write(*,*) 'abrupt',ikl,'dTs ',dtsurf,tsissv(ikl,isl)
6849  ENDIF
6850  END DO
6851 
6852  DO ikl= 1,knonv
6853  DO isl=isnosv(ikl),1 ,-1
6854 
6855  IF (ts_min > tsissv(ikl,isl)) THEN
6856  write(*,*) 'cold', ikl, 'couche',isl, tsissv(ikl,isl)
6857  ENDIF
6858  IF (ts_max < tsissv(ikl,isl)) THEN
6859  write(*,*) 'hot ', ikl, 'couche',isl, tsissv(ikl,isl)
6860  ENDIF
6861  tsissv(ikl,isl) = max(ts_min, tsissv(ikl,isl))
6862  tsissv(ikl,isl) = min(ts_max, tsissv(ikl,isl))
6863  END DO
6864  END DO
6865 
6866 
6867 ! Update Surface Fluxes
6868 ! ========================
6869 
6870  DO ikl= 1,knonv
6871  isl = isnosv(ikl)
6872  irs_sv(ikl) = irs__d(ikl) !
6873  . - dirsdt(ikl) * tsissv(ikl,isl) !
6874  hss_sv(ikl) = hs___d(ikl) ! Sensible Heat
6875  . - dsdtsv(ikl) * tsissv(ikl,isl) ! Downward > 0
6876  hls_sv(ikl) = hl___d(ikl) ! Latent Heat
6877  . - dldtsv(ikl) * tsissv(ikl,isl) ! Downward > 0
6878 !hj220711
6879  tsfnsv(ikl) = tsissv(ikl,isl)
6880 
6881 ! OUTPUT for Stand Alone NetCDF File
6882 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6883 c #NC SOsoKL(ikl) = sol_SV(ikl) * SoSosv(ikl) ! Absorbed Sol.
6884 c #NC IRsoKL(ikl) = IRs_SV(ikl) ! Up Surf. IR
6885 c #NC. + tau_sv(ikl) *IRd_SV(ikl)*Eso_sv(ikl)! Down Atm IR
6886 c #NC. -(1.0-tau_sv(ikl)) *0.5*IRv_sv(ikl) ! Down Veg IR
6887 c #NC HSsoKL(ikl) = HSs_sv(ikl) ! HS
6888 c #NC HLsoKL(ikl) = HLs_sv(ikl) ! HL
6889 c #NC HLs_KL(ikl) = HLs_sv(ikl) / LhvH2O ! mm w.e./sec
6890  END DO
6891 
6892 
6893 ! OUTPUT/Verification: Energy/Water Budget: Energy Budget (OUT)
6894 ! #e1 DO ikl=1,knonv
6895 ! #e1 ETSo_d(ikl) =
6896 ! #e1. ( SoSosv(ikl) *sol_SV(ikl) ! Net Solar
6897 ! #e1. + IRs_SV(ikl) ! Up Surf. IR
6898 ! #e1. + tau_sv(ikl) *IRd_SV(ikl)*Eso_sv(ikl) ! Down Atm IR
6899 ! #e1. -(1.0-tau_sv(ikl)) *0.5*IRv_sv(ikl) ! Down Veg IR
6900 ! #e1. +HSs_sv(ikl) ! Sensible
6901 ! #e1. +HLs_sv(ikl) )! Latent
6902 ! #e1 ETSo_1(ikl) = 0.
6903 ! #e1 END DO
6904 ! #e1 DO isl= -nsol,nsno
6905 ! #e1 DO ikl=1,knonv
6906 ! #e1 Exist0 = isl - isnoSV(ikl)
6907 ! #e1 Exist0 = 1. - max(zer0,min(un_1,Exist0))
6908 ! #e1 ETSo_1(ikl) = ETSo_1(ikl)
6909 ! #e1. +(TsisSV(ikl,isl)-Tf_Sno)*Exist0
6910 ! #e1. /dtC_sv(ikl,isl)
6911 ! #e1 END DO
6912 ! #e1 END DO
6913 
6914 
6915  return
6916  end
6917  subroutine sisvat_ts2
6918 c #ES. (ETSo_0,ETSo_1,ETSo_d)
6919 
6920 C +------------------------------------------------------------------------+
6921 C | MAR SISVAT_TS2 Mon 16-08-2009 MAR |
6922 C | SubRoutine SISVAT_TS2 computes the Soil/Snow temperature and fluxes |
6923 C | using the same method as in LMDZ for consistency. |
6924 C | The corresponding LMDZ routines are soil (soil.F90) and calcul_fluxs |
6925 C | (calcul_fluxs_mod.F90). |
6926 C +------------------------------------------------------------------------+
6927 C | |
6928 C | |
6929 C | PARAMETERS: klonv: Total Number of columns = |
6930 C | ^^^^^^^^^^ = Total Number of grid boxes of surface type |
6931 C | (land ice for now) |
6932 C | |
6933 C | INPUT: isnoSV = total Nb of Ice/Snow Layers |
6934 C | ^^^^^ sol_SV : Downward Solar Radiation [W/m2] |
6935 C | IRd_SV : Surface Downward Longwave Radiation [W/m2] |
6936 C | VV__SV : SBL Top Wind Speed [m/s] |
6937 C | TaT_SV : SBL Top Temperature [K] |
6938 C | QaT_SV : SBL Top Specific Humidity [kg/kg] |
6939 C | dzsnSV : Snow Layer Thickness [m] |
6940 C | dt__SV : Time Step [s] |
6941 C | |
6942 C | SoSosv : Absorbed Solar Radiation by Surfac.(Normaliz)[-] |
6943 C | ? IRv_sv : Vegetation IR Radiation [W/m2] |
6944 C | ? tau_sv : Fraction of Radiation transmitted by Canopy [-] |
6945 C | Eso_sv : Soil+Snow Emissivity [-] |
6946 C | ? rah_sv : Aerodynamic Resistance for Heat [s/m] |
6947 C | |
6948 C | dz1_SV : "inverse" layer thickness (centered) [1/m] |
6949 C | dz2_SV : layer thickness (layer above (?)) [m] |
6950 C | AcoHSV : coefficient for Enthalpy evolution, from atm. |
6951 C | AcoHSV : coefficient for Enthalpy evolution, from atm. |
6952 C | AcoQSV : coefficient for Humidity evolution, from atm. |
6953 C | BcoQSV : coefficient for Humidity evolution, from atm. |
6954 C | ps__SV : surface pressure [Pa] |
6955 C | p1l_SV : 1st atmospheric layer pressure [Pa] |
6956 C | cdH_SV : drag coeff Energy (?) |
6957 C | rsolSV : Radiation balance surface [W/m2] |
6958 C | lambSV : Coefficient for soil layer geometry [-] |
6959 C | |
6960 C | INPUT / TsisSV : Soil/Ice Temperatures (layers -nsol,-nsol+1,..,0)|
6961 C | OUTPUT: & Snow Temperatures (layers 1,2,...,nsno) [K] |
6962 C | ^^^^^^ rsolSV : Radiation balance surface [W/m2] |
6963 C | |
6964 C | OUTPUT: IRs_SV : Soil IR Radiation [W/m2] |
6965 C | ^^^^^^ HSs_sv : Sensible Heat Flux [W/m2] |
6966 C | HLs_sv : Latent Heat Flux [W/m2] |
6967 C | TsfnSV : new surface temperature [K] |
6968 C | Evp_sv : Evaporation [kg/m2] |
6969 C | dSdTSV : Sensible Heat Flux temp. derivative [W/m2/K] |
6970 C | dLdTSV : Latent Heat Flux temp. derivative [W/m2/K] |
6971 C | |
6972 C | ? ETSo_0 : Snow/Soil Energy Power, before Forcing [W/m2] |
6973 C | ? ETSo_1 : Snow/Soil Energy Power, after Forcing [W/m2] |
6974 C | ? ETSo_d : Snow/Soil Energy Power Forcing [W/m2] |
6975 C | |
6976 C |________________________________________________________________________|
6977 
6978  USE var_sv
6979  USE vardsv
6980 
6981  USE varysv
6982  USE vartsv
6983  USE varxsv
6984  USE varphy
6985  USE yomcst_sisvat
6986  USE indice_sol_mod
6987 
6988 
6989  IMPLICIT NONE
6990 
6991 
6992 C +--Global Variables
6993 C + ================
6994 
6995  include "YOETHF.h"
6996  include "FCTTRE.h"
6997 ! INCLUDE "indicesol.h"
6998  include "comsoil.h"
6999 ! include "LMDZphy.inc"
7000 
7001 C +--OUTPUT for Stand Alone NetCDF File
7002 C + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7003 c #NC real*8 SOsoKL(klonv) ! Absorbed Solar Radiation
7004 c #NC real*8 IRsoKL(klonv) ! Absorbed IR Radiation
7005 c #NC real*8 HSsoKL(klonv) ! Absorbed Sensible Heat Flux
7006 c #NC real*8 HLsoKL(klonv) ! Absorbed Latent Heat Flux
7007 c #NC real*8 HLs_KL(klonv) ! Evaporation
7008 c #NC real*8 HLv_KL(klonv) ! Transpiration
7009 c #NC common/DumpNC/SOsoKL,IRsoKL
7010 c #NC . ,HSsoKL,HLsoKL
7011 c #NC . ,HLs_KL,HLv_KL
7012 
7013 C +--Internal Variables
7014 C + ==================
7015 
7016  integer ig,jk,isl
7017  real mu
7018  real Tsrf(klonv) ! surface temperature as extrapolated from soil
7019  real mug(klonv) !hj coef top layers
7020  real ztherm_i(klonv),zdz2(klonv,-nsol:nsno),z1s
7021  real pfluxgrd(klonv), pcapcal(klonv), cal(klonv)
7022  real beta(klonv), dif_grnd(klonv)
7023  real C_coef(klonv,-nsol:nsno),D_coef(klonv,-nsol:nsno)
7024 
7025  REAL, DIMENSION(klonv) :: zx_mh, zx_nh, zx_oh
7026  REAL, DIMENSION(klonv) :: zx_mq, zx_nq, zx_oq
7027  REAL, DIMENSION(klonv) :: zx_pkh, zx_dq_s_dt, zx_qsat, zx_coef
7028  REAL, DIMENSION(klonv) :: zx_sl, zx_k1
7029  REAL, DIMENSION(klonv) :: d_ts
7030  REAL :: zdelta, zcvm5, zx_qs, zcor, zx_dq_s_dh
7031  REAL :: qsat_new, q1_new
7032 C REAL, PARAMETER :: t_grnd = 271.35, t_coup = 273.15
7033 C REAL, PARAMETER :: max_eau_sol = 150.0
7034  REAL, DIMENSION(klonv) :: IRs__D, dIRsdT
7035 
7036 
7037  REAL t_grnd ! not used
7038  parameter(t_grnd = 271.35) !
7039  REAL t_coup ! distinguish evap/sublimation
7040  parameter(t_coup = 273.15) !
7041  REAL max_eau_sol
7042  parameter(max_eau_sol = 150.0)
7043 
7044 
7045 ! write(*,*)'T check'
7046 !
7047 ! DO ig = 1,knonv
7048 ! DO jk = 1,isnoSV(ig) !nsno
7049 ! IF (TsisSV(ig,jk) <= 1.) THEN !hj check
7050 ! TsisSV(ig,jk) = TsisSV(ig,isnoSV(ig))
7051 ! ENDIF
7052 !
7053 ! IF (TsisSV(ig,jk) <= 1.) THEN !hj check
7054 ! TsisSV(ig,jk) = 273.15
7055 ! ENDIF
7056 ! END DO
7057 ! END DO
7058 
7059 C!=======================================================================
7060 C! I. First part: corresponds to soil.F90 in LMDZ
7061 C!=======================================================================
7062 
7063  DO ig = 1,knonv
7064  DO jk =1,isnosv(ig)
7065  dz2_sv(ig,jk)=dzsnsv(ig,jk)
7066 C! use arithmetic center between layers to derive dz1 for snow layers for simplicity:
7067  dz1_sv(ig,jk)=2./(dzsnsv(ig,jk)+dzsnsv(ig,jk-1))
7068  ENDDO
7069  ENDDO
7070 
7071  DO ig = 1,knonv
7072  ztherm_i(ig) = inertie_ice
7073  IF (isnosv(ig) > 0) ztherm_i(ig) = inertie_sno
7074  ENDDO
7075 
7076 C!-----------------------------------------------------------------------
7077 C! 1)
7078 C! Calculation of Cgrf and Dgrd coefficients using soil temperature from
7079 C! previous time step.
7080 C!
7081 C! These variables are recalculated on the local compressed grid instead
7082 C! of saved in restart file.
7083 C!-----------------------------------------------------------------------
7084  DO ig=1,knonv
7085  DO jk=-nsol,nsno
7086  zdz2(ig,jk)=dz2_sv(ig,jk)/dt__sv !ptimestep
7087  ENDDO
7088  ENDDO
7089 
7090  DO ig=1,knonv
7091  z1s = zdz2(ig,-nsol)+dz1_sv(ig,-nsol+1)
7092  c_coef(ig,-nsol+1)=zdz2(ig,-nsol)*tsissv(ig,-nsol)/z1s
7093  d_coef(ig,-nsol+1)=dz1_sv(ig,-nsol+1)/z1s
7094  ENDDO
7095 
7096  DO ig=1,knonv
7097  DO jk=-nsol+1,isnosv(ig)-1,1
7098  z1s = 1./(zdz2(ig,jk)+dz1_sv(ig,jk+1)+dz1_sv(ig,jk) &
7099  & *(1.-d_coef(ig,jk)))
7100  c_coef(ig,jk+1)= &
7101  & (tsissv(ig,jk)*zdz2(ig,jk) &
7102  & +dz1_sv(ig,jk)*c_coef(ig,jk)) * z1s
7103  d_coef(ig,jk+1)=dz1_sv(ig,jk+1)*z1s
7104  ENDDO
7105  ENDDO
7106 
7107 C!-----------------------------------------------------------------------
7108 C! 2)
7109 C! Computation of the soil temperatures using the Cgrd and Dgrd
7110 C! coefficient computed above
7111 C!
7112 C!-----------------------------------------------------------------------
7113 C! Extrapolate surface Temperature !hj check
7114  mu=1./((2.**1.5-1.)/(2.**(0.5)-1.)-1.)
7115 
7116 ! IF (knonv>0) THEN
7117 ! DO ig=1,8
7118 ! write(*,*)ig,'sisvat: Tsis ',TsisSV(ig,isnoSV(ig))
7119 ! write(*,*)'max-1 ',TsisSV(ig,isnoSV(ig)-1)
7120 ! write(*,*)'max-2 ',TsisSV(ig,isnoSV(ig)-2)
7121 ! write(*,*)'0 ',TsisSV(ig,0)
7122 !! write(*,*)min(max(isnoSV(ig),0),1),max(1-isnoSV(ig),0)
7123 ! ENDDO
7124 ! END IF
7125 
7126  DO ig=1,knonv
7127  IF (isnosv(ig).GT.0) THEN
7128  IF (isnosv(ig).GT.1) THEN
7129  mug(ig)=1./(1.+dzsnsv(ig,isnosv(ig)-1)/dzsnsv(ig,isnosv(ig))) !mu
7130  ELSE
7131  mug(ig) = 1./(1.+dzsnsv(ig,isnosv(ig)-1)/dz_dsv(0)) !mu
7132  ENDIF
7133  ELSE
7134  mug(ig) = lambsv
7135  ENDIF
7136 
7137  IF (mug(ig) .LE. 0.05) THEN
7138  write(*,*)'Attention mu low', mug(ig)
7139  ENDIF
7140  IF (mug(ig) .GE. 0.98) THEN
7141  write(*,*)'Attention mu high', mug(ig)
7142  ENDIF
7143 
7144  tsrf(ig)=(1.5*tsissv(ig,isnosv(ig))-0.5*tsissv(ig,isnosv(ig)-1))&
7145  & *min(max(isnosv(ig),0),1)+ &
7146  & ((mug(ig)+1)*tsissv(ig,0)-mug(ig)*tsissv(ig,-1)) &
7147  & *max(1-isnosv(ig),0)
7148  ENDDO
7149 
7150 
7151 
7152 C! Surface temperature
7153  DO ig=1,knonv
7154  tsissv(ig,isnosv(ig))=(mug(ig)*c_coef(ig,isnosv(ig))+tsf_sv(ig))/ &
7155  & (mug(ig)*(1.-d_coef(ig,isnosv(ig)))+1.)
7156  ENDDO
7157 
7158 C! Other temperatures
7159  DO ig=1,knonv
7160  DO jk=isnosv(ig),-nsol+1,-1
7161  tsissv(ig,jk-1)=c_coef(ig,jk)+d_coef(ig,jk) &
7162  & *tsissv(ig,jk)
7163  ENDDO
7164  ENDDO
7165 C write(*,*)ig,'Tsis',TsisSV(ig,0)
7166 
7167 C IF (indice == is_sic) THEN
7168 C DO ig = 1,knonv
7169 C TsisSV(ig,-nsol) = RTT - 1.8
7170 C END DO
7171 C ENDIF
7172 
7173 CC !hj new 11 03 2010
7174  DO ig=1,knonv
7175  isl = isnosv(ig)
7176 C dIRsdT(ig) = Eso_sv(ig)* stefan * 4. & ! - d(IR)/d(T)
7177 C & * Tsf_SV(ig) & !T TsisSV(ig,isl) !
7178 C & * Tsf_SV(ig) & !TsisSV(ig,isl) !
7179 C & * Tsf_SV(ig) !TsisSV(ig,isl) !
7180 C IRs__D(ig) = dIRsdT(ig)* Tsf_SV(ig) * 0.75 !TsisSV(ig,isl) * 0.75 !:
7181  dirsdt(ig) = eso_sv(ig)* stefan * 4. & ! - d(IR)/d(T)
7182  & * tsissv(ig,isl) & !
7183  & * tsissv(ig,isl) & !
7184  & * tsissv(ig,isl) & !
7185  irs__d(ig) = dirsdt(ig)* tsissv(ig,isl) * 0.75 !:
7186  END DO
7187  !hj
7188 C!-----------------------------------------------------------------------
7189 C! 3)
7190 C! Calculate the Cgrd and Dgrd coefficient corresponding to actual soil
7191 C! temperature
7192 C!-----------------------------------------------------------------------
7193  DO ig=1,knonv
7194  z1s = zdz2(ig,-nsol)+dz1_sv(ig,-nsol+1)
7195  c_coef(ig,-nsol+1) = zdz2(ig,-nsol)*tsissv(ig,-nsol)/z1s
7196  d_coef(ig,-nsol+1) = dz1_sv(ig,-nsol+1)/z1s
7197  ENDDO
7198 
7199  DO ig=1,knonv
7200  DO jk=-nsol+1,isnosv(ig)-1,1
7201  z1s = 1./(zdz2(ig,jk)+dz1_sv(ig,jk+1)+dz1_sv(ig,jk) &
7202  & *(1.-d_coef(ig,jk)))
7203  c_coef(ig,jk+1) = (tsissv(ig,jk)*zdz2(ig,jk)+ &
7204  & dz1_sv(ig,jk)*c_coef(ig,jk)) * z1s
7205  d_coef(ig,jk+1) = dz1_sv(ig,jk+1)*z1s
7206  ENDDO
7207  ENDDO
7208 
7209 C!-----------------------------------------------------------------------
7210 C! 4)
7211 C! Computation of the surface diffusive flux from ground and
7212 C! calorific capacity of the ground
7213 C!-----------------------------------------------------------------------
7214  DO ig=1,knonv
7215 C! (pfluxgrd)
7216  pfluxgrd(ig) = ztherm_i(ig)*dz1_sv(ig,isnosv(ig))* &
7217  & (c_coef(ig,isnosv(ig))+(d_coef(ig,isnosv(ig))-1.) &
7218  & *tsissv(ig,isnosv(ig)))
7219 C! (pcapcal)
7220  pcapcal(ig) = ztherm_i(ig)* &
7221  & (dz2_sv(ig,isnosv(ig))+dt__sv*(1.-d_coef(ig,isnosv(ig))) &
7222  & *dz1_sv(ig,isnosv(ig)))
7223  z1s = mug(ig)*(1.-d_coef(ig,isnosv(ig)))+1.
7224  pcapcal(ig) = pcapcal(ig)/z1s
7225  pfluxgrd(ig) = ( pfluxgrd(ig) &
7226  & + pcapcal(ig) * (tsissv(ig,isnosv(ig)) * z1s &
7227  & - mug(ig)* c_coef(ig,isnosv(ig)) &
7228  & - tsf_sv(ig)) /dt__sv )
7229  ENDDO
7230 
7231 
7232  cal(1:knonv) = rcpd / pcapcal(1:knonv)
7233  rsolsv(1:knonv) = rsolsv(1:knonv) + pfluxgrd(1:knonv)
7234 C!=======================================================================
7235 C! II. Second part: corresponds to calcul_fluxs_mod.F90 in LMDZ
7236 C!=======================================================================
7237 
7238  evp_sv = 0.
7239 c #NC HSsoKL=0.
7240 c #NC HLsoKL=0.
7241  dsdtsv = 0.
7242  dldtsv = 0.
7243 
7244  beta(:) = 1.0
7245  dif_grnd(:) = 0.0
7246 
7247 C! zx_qs = qsat en kg/kg
7248 C!**********************************************************************x***************
7249 ! write(*,*)'RCPD',RCPD,'RLVTT',RLVTT,'RD',RD,'RVTMP2',RVTMP2
7250  DO ig = 1,knonv
7251  IF (ps__sv(ig).LT.1.) THEN
7252 ! write(*,*)'ig',ig,'ps',ps__SV(ig)
7253  ps__sv(ig)=max(ps__sv(ig),1.e-8)
7254  ENDIF
7255  IF (p1l_sv(ig).LT.1.) THEN
7256 ! write(*,*)'ig',ig,'p1l',p1l_SV(ig)
7257  p1l_sv(ig)=max(p1l_sv(ig),1.e-8)
7258  ENDIF
7259  IF (tat_sv(ig).LT.180.) THEN
7260 ! write(*,*)'ig',ig,'TaT',TaT_SV(ig)
7261  tat_sv(ig)=max(tat_sv(ig),180.)
7262  ENDIF
7263  IF (qat_sv(ig).LT.1.e-8) THEN
7264 ! write(*,*)'ig',ig,'QaT',QaT_SV(ig)
7265  qat_sv(ig)=max(qat_sv(ig),1.e-8)
7266  ENDIF
7267  IF (tsf_sv(ig).LT.100.) THEN
7268 ! write(*,*)'ig',ig,'Tsf',Tsf_SV(ig)
7269  tsf_sv(ig)=max(tsf_sv(ig),180.)
7270  ENDIF
7271  IF (tsf_sv(ig).GT.500.) THEN
7272 ! write(*,*)'ig',ig,'Tsf',Tsf_SV(ig)
7273  tsf_sv(ig)=min(tsf_sv(ig),400.)
7274  ENDIF
7275 ! IF (Tsrf(ig).LT.1.) THEN
7276 !! write(*,*)'ig',ig,'Tsrf',Tsrf(ig)
7277 ! Tsrf(ig)=max(Tsrf(ig),TaT_SV(ig)-20.)
7278 ! ENDIF
7279  IF (cdh_sv(ig).LT.1.e-10) THEN
7280 ! IF (ig.le.3) write(*,*)'ig',ig,'cdH',cdH_SV(ig)
7281  cdh_sv(ig)=.5
7282  ENDIF
7283  ENDDO
7284 ! DO ig=1,3
7285 ! write(*,*)'isnoSV',isnoSV(ig),'TsisSV',TsisSV(ig,isnoSV(ig))
7286 ! ENDDO
7287 
7288  !write(*,*)'retv',retv,'thermcep',thermcep,'r2es',r2es
7289  !IF (r2es.LT.1.e-8) THEN
7290  ! r2es=1.e-8
7291  !ENDIF
7292  !IF (retv.LT.1.e-8) THEN
7293  ! retv=1.e-8
7294  !ENDIF
7295 
7296  DO ig = 1,knonv
7297  zx_pkh(ig) = 1. ! (ps__SV(ig)/ps__SV(ig))**RKAPPA
7298  IF (thermcep) THEN
7299  zdelta=max(0.,sign(1.,rtt-tsf_sv(ig)))
7300  zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta
7301  zcvm5 = zcvm5 / rcpd / (1.0+rvtmp2*qat_sv(ig))
7302  zx_qs= r2es * foeew(tsf_sv(ig),zdelta)/ps__sv(ig)
7303  zx_qs=min(0.5,zx_qs)
7304  !write(*,*)'zcor',retv*zx_qs
7305  zcor=1./(1.-retv*zx_qs)
7306  zx_qs=zx_qs*zcor
7307  zx_dq_s_dh = foede(tsf_sv(ig),zdelta,zcvm5,zx_qs,zcor) &
7308  & /rlvtt / zx_pkh(ig)
7309  ELSE
7310  IF (tsf_sv(ig).LT.t_coup) THEN
7311  zx_qs = qsats(tsf_sv(ig)) / ps__sv(ig)
7312  zx_dq_s_dh = dqsats(tsf_sv(ig),zx_qs)/rlvtt &
7313  & / zx_pkh(ig)
7314  ELSE
7315  zx_qs = qsatl(tsf_sv(ig)) / ps__sv(ig)
7316  zx_dq_s_dh = dqsatl(tsf_sv(ig),zx_qs)/rlvtt &
7317  & / zx_pkh(ig)
7318  ENDIF
7319  ENDIF
7320  zx_dq_s_dt(ig) = rcpd * zx_pkh(ig) * zx_dq_s_dh
7321  zx_qsat(ig) = zx_qs
7322 C zx_coef(ig) = cdH_SV(ig) * &
7323 C & (1.0+SQRT(u1lay(ig)**2+v1lay(ig)**2)) * &
7324 C & p1l_SV(ig)/(RD*t1lay(ig))
7325  zx_coef(ig) = cdh_sv(ig) * &
7326  & (1.0+vv__sv(ig)) * &
7327  & p1l_sv(ig)/(rd*tat_sv(ig))
7328 
7329  ENDDO
7330 
7331 
7332 C! === Calcul de la temperature de surface ===
7333 C! zx_sl = chaleur latente d'evaporation ou de sublimation
7334 C!****************************************************************************************
7335 
7336  DO ig = 1,knonv
7337  zx_sl(ig) = rlvtt
7338  IF (tsf_sv(ig) .LT. rtt) zx_sl(ig) = rlstt
7339  zx_k1(ig) = zx_coef(ig)
7340  ENDDO
7341 
7342 
7343  DO ig = 1,knonv
7344 C! Q
7345  zx_oq(ig) = 1. - (beta(ig) * zx_k1(ig) * bcoqsv(ig) * dt__sv)
7346  zx_mq(ig) = beta(ig) * zx_k1(ig) * &
7347  & (acoqsv(ig) - zx_qsat(ig) + &
7348  & zx_dq_s_dt(ig) * tsf_sv(ig)) &
7349  & / zx_oq(ig)
7350  zx_nq(ig) = beta(ig) * zx_k1(ig) * (-1. * zx_dq_s_dt(ig)) &
7351  & / zx_oq(ig)
7352 
7353 C! H
7354  zx_oh(ig) = 1. - (zx_k1(ig) * bcohsv(ig) * dt__sv)
7355  zx_mh(ig) = zx_k1(ig) * acohsv(ig) / zx_oh(ig)
7356  zx_nh(ig) = - (zx_k1(ig) * rcpd * zx_pkh(ig))/ zx_oh(ig)
7357 
7358 C! surface temperature
7359  tsfnsv(ig) = (tsf_sv(ig) + cal(ig)/rcpd * zx_pkh(ig) * dt__sv * &
7360  & (rsolsv(ig) + zx_mh(ig) + zx_sl(ig) * zx_mq(ig)) &
7361  & + dif_grnd(ig) * t_grnd * dt__sv)/ &
7362  & ( 1. - dt__sv * cal(ig)/(rcpd * zx_pkh(ig)) * &
7363  & (zx_nh(ig) + zx_sl(ig) * zx_nq(ig)) &
7364  & + dt__sv * dif_grnd(ig))
7365 
7366 !hj rajoute 22 11 2010 tuning...
7367  tsfnsv(ig) = min(rtt+0.02,tsfnsv(ig))
7368 
7369  d_ts(ig) = tsfnsv(ig) - tsf_sv(ig)
7370 
7371 
7372 C!== flux_q est le flux de vapeur d'eau: kg/(m**2 s) positive vers bas
7373 C!== flux_t est le flux de cpt (energie sensible): j/(m**2 s)
7374  evp_sv(ig) = - zx_mq(ig) - zx_nq(ig) * tsfnsv(ig)
7375  hls_sv(ig) = - evp_sv(ig) * zx_sl(ig)
7376  hss_sv(ig) = zx_mh(ig) + zx_nh(ig) * tsfnsv(ig)
7377 
7378 C! Derives des flux dF/dTs (W m-2 K-1):
7379  dsdtsv(ig) = zx_nh(ig)
7380  dldtsv(ig) = zx_sl(ig) * zx_nq(ig)
7381 
7382 
7383 !hj new 11 03 2010
7384  isl = isnosv(ig)
7385 ! TsisSV(ig,isl) = TsfnSV(ig)
7386  irs_sv(ig) = irs__d(ig) &!
7387  & - dirsdt(ig) * tsfnsv(ig) !TsisSV(ig,isl)? !
7388 
7389 ! hj
7390 c #NC SOsoKL(ig) = sol_SV(ig) * SoSosv(ig) ! Absorbed Sol.
7391 c #NC IRsoKL(ig) = IRs_SV(ig) & !Up Surf. IR
7392 c #NC& + tau_sv(ig) *IRd_SV(ig)*Eso_sv(ig) & !Down Atm IR
7393 c #NC& -(1.0-tau_sv(ig)) *0.5*IRv_sv(ig) ! Down Veg IR
7394 c #NC HLsoKL(ig) = HLs_sv(ig)
7395 c #NC HSsoKL(ig) = HSs_sv(ig)
7396 c #NC HLs_KL(ig) = Evp_sv(ig)
7397 
7398 C! Nouvelle valeure de l'humidite au dessus du sol
7399  qsat_new=zx_qsat(ig) + zx_dq_s_dt(ig) * d_ts(ig)
7400  q1_new = acoqsv(ig) - bcoqsv(ig)* evp_sv(ig)*dt__sv
7401  qat_sv(ig)=q1_new*(1.-beta(ig)) + beta(ig)*qsat_new
7402 
7403  ENDDO
7404 ! DO ig=1,3
7405 ! write(*,*)' lat HF',HLs_sv(ig),'sens HF',HSs_sv(ig)
7406 ! write(*,*)' dlHF/dT',dLdTSV(ig),'dsHF/dT',dSdTSV(ig)
7407 ! END DO
7408 ! write(*,*)'RCPD',RCPD,'dt',dt__SV,'t_grnd',t_grnd
7409  DO ig = 1,1
7410 ! write(*,*)ig,'Tsfn: ',TsfnSV(ig),'Tsrf',Tsrf(ig)
7411 ! write(*,*)' cal',cal(ig),'radsol',rsolSV(ig)
7412 ! write(*,*)' mh',zx_mh(ig),'sl', zx_sl(ig),'pkh',zx_pkh(ig)
7413 ! write(*,*)' mq',zx_mq(ig),'difgrnd',dif_grnd(ig)
7414 ! write(*,*)' nh',zx_nh(ig),'sl', zx_sl(ig),'nq',zx_nq(ig)
7415 ! write(*,*)'term1:',cal(ig)/RCPD*zx_pkh(ig)*dt__SV
7416 ! write(*,*)'*',(rsolSV(ig) + zx_mh(ig) + zx_sl(ig) * zx_mq(ig))
7417 ! write(*,*)'+',dif_grnd(ig) * t_grnd * dt__SV,' / '
7418 ! write(*,*)'(1-',dt__SV * cal(ig)/(RCPD * zx_pkh(ig)),'*'
7419 ! write(*,*)'*',(zx_nh(ig) + zx_sl(ig) * zx_nq(ig))
7420 ! write(*,*)'+',dt__SV * dif_grnd(ig),')'
7421  ENDDO
7422 
7423  end ! subroutine SISVAT_TS2
7424 
7425 
7426  subroutine sisvat_qvg
7428 !--------------------------------------------------------------------------+
7429 ! MAR SISVAT_qVg Sat 12-Feb-2012 MAR |
7430 ! SubRoutine SISVAT_qVg computes the Canopy Water Balance |
7431 ! including Root Extraction |
7432 !--------------------------------------------------------------------------+
7433 ! |
7434 ! PARAMETERS: klonv: Total Number of columns = |
7435 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
7436 ! X Number of Mosaic Cell per grid box |
7437 ! |
7438 ! INPUT: ivgtSV = 0,...,12: Vegetation Type |
7439 ! ^^^^^ 0: Water, Solid or Liquid |
7440 ! |
7441 ! INPUT: rhT_SV : SBL Top Air Density [kg/m3] |
7442 ! ^^^^^ QaT_SV : SBL Top Specific Humidity [kg/kg] |
7443 ! |
7444 ! TvegSV : Canopy Temperature [K] |
7445 ! rrCaSV : Canopy Water Content [kg/m2] |
7446 ! rrMxsv : Canopy Maximum Intercepted Rain [kg/m2] |
7447 ! rah_sv : Aerodynamic Resistance for Heat [s/m] |
7448 ! EvT_sv : EvapoTranspiration [kg/m2] |
7449 ! Sigmsv : Canopy Ventilation Factor [-] |
7450 ! glf_sv : Green Leaf Fraction of NOT fallen Leaves [-] |
7451 ! LAIesv : Leaf Area Index (effective / transpiration) [-] |
7452 ! psi_sv : Soil Water Potential [m] |
7453 ! Khydsv : Soil Hydraulic Conductivity [m/s] |
7454 ! |
7455 ! INPUT / psivSV : Leaf Water Potential [m] |
7456 ! OUTPUT: |
7457 ! ^^^^^^ |
7458 ! |
7459 ! OUTPUT: Rootsv : Root Water Pump [kg/m2/s] |
7460 ! ^^^^^^ |
7461 ! |
7462 ! REMARK: Water Extraction by roots calibrated by Evapotranspiration |
7463 ! ^^^^^^ (computed in the Canopy Energy Balance) |
7464 ! |
7465 ! REFERENCE: DR97: Koen de Ridder thesis, UCL, 1997 |
7466 ! ^^^^^^^^^ |
7467 ! |
7468 ! Preprocessing Option: |
7469 ! ^^^^^^^^^^^^^^^^^^^^^ |
7470 ! #KW: Root Water Flow slowed down by Soil Hydraulic Conductivity |
7471 ! |
7472 !--------------------------------------------------------------------------+
7473 
7474 
7475 
7476 
7477 
7478 ! Global Variables
7479 ! ================
7480 
7481  USE phy_sv
7482 
7483  USE var_sv
7484  USE vardsv
7485  USE var0sv
7486 
7487  USE varxsv
7488  USE varysv
7489 
7490 
7491  IMPLICIT NONE
7492 
7493 ! Internal Variables
7494 ! ==================
7495 
7496  integer ikl ,isl ! Grid Point, Layer Indices
7497  integer nitmax,nit ! Iterations Counter
7498  real PlantW(klonv) ! Plant Water
7499  real dPdPsi(klonv) ! Plant Water psi Derivative
7500  real psidif ! Soil-Canopy Water Pot. Differ.
7501  real Root_W ! Root Water Flow
7502  real RootOK ! Roots take Water in Soil Layer
7503  real d_psiv ! Canopy Water Increment
7504  real dpvMAX ! Canopy Water Increment MAX
7505  real BWater ! Imbalance of Canopy Water Budg.
7506  real BW_MAX ! MAX Imbal.of Canopy Water Budg.
7507  real BW_MIN ! MIN Imbal.of Canopy Water Budg.
7508  real dBwdpv ! Derivativ.of Canopy Water Budg.
7509  real Bswich ! Newton-Raphson Switch
7510  real psiv_0(klonv) ! Canopy Temperature, Previous t
7511  real EvFrac ! Condensat./Transpiration Switch
7512  real den_qs,arg_qs,qsatvg ! Canopy Saturat. Spec. Humidity
7513  real EvTran ! EvapoTranspiration
7514  real dEdpsi ! Evapotranspiration Derivative
7515  real Fac_Ev,FacEvT ! Evapotranspiration Factors
7516  real denomE ! Evapotranspiration Denominator
7517  real F_Stom ! Funct. (Leaf Water Potential)
7518  real dFdpsi ! Derivative of F_Stom
7519  real denomF ! Denominator of F_Stom
7520  real F___OK ! (psi>psi_c) => F_Stom swich ON
7521  real R0Stom ! Minimum Stomatal Resistance
7522  real R_Stom ! Stomatal Resistance
7523  real dRdpsi ! Derivat.Stomatal Resistance
7524  real numerR ! Numerat.Stomatal Resistance
7525 
7526 
7527 ! Internal DATA
7528 ! =============
7529 
7530  data nitmax / 5 / ! Maximum Iterations Number
7531  data dpvmax / 20. / ! Canopy Water Increment MAX
7532  data bw_min / 4.e-8 / ! MIN Imbal. of Surf.Energy Budg.
7533 
7534 
7535 ! Newton-Raphson Scheme
7536 ! =====================
7537 
7538  nit = 0
7539  101 CONTINUE
7540  nit = nit + 1
7541  bw_max = 0.
7542 
7543 
7544 ! W.Potential of the Previous Time Step
7545 ! -------------------------------------
7546 
7547  DO ikl=1,knonv
7548  psiv_0(ikl) = psivsv(ikl)
7549 
7550 
7551 ! Extraction of Soil Water through the Plant Roots
7552 ! ------------------------------------------------
7553 
7554  plantw(ikl) = 0. ! Plant Water
7555  dpdpsi(ikl) = 0. ! Idem, Derivat.
7556  END DO
7557  DO isl=-nsol,0
7558  DO ikl=1,knonv
7559  psidif = psivsv(ikl)-(dh_dsv(ivgtsv(ikl)) ! Soil-Canopy Water
7560  . +psi_sv( ikl ,isl)) ! Potential Diff.
7561  root_w = rhowat * rf__sv(ivgtsv(ikl),isl) ! If > 0, Contrib.
7562  . /max(eps_21,pr_dsv(ivgtsv(ikl)) ! to Root Water
7563 c #KW. +Khydsv(ikl ,isl )*1.e-4 ! (DR97, eqn.3.20)
7564  . ) !
7565 ! Pas de prise en compte de la resistance sol/racine dans proto-svat
7566 ! (DR97, eqn.3.20)
7567  rootok = max(zer0, sign(un_1,psidif))
7568  rootsv(ikl,isl) = root_w*max(zer0,psidif) ! Root Water
7569  plantw(ikl) = plantw(ikl) + rootsv(ikl ,isl) ! Plant Water
7570  dpdpsi(ikl) = dpdpsi(ikl) + rootok*root_w ! idem, Derivat.
7571  END DO
7572  END DO
7573 
7574 
7575 ! Latent Heat Flux
7576 ! ------------------
7577 
7578 ! Canopy Saturation Specific Humidity
7579 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7580  DO ikl=1,knonv
7581  den_qs = tvegsv(ikl)- 35.8
7582  arg_qs = 17.27 *(tvegsv(ikl)-273.16)/den_qs
7583  qsatvg = .0038 * exp(arg_qs)
7584 
7585 ! Canopy Stomatal Resistance
7586 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
7587  r0stom = min( stodsv(ivgtsv(ikl))
7588  . /max(eps6,glf_sv( ikl)),stxdsv) ! Min Stomatal R.
7589  denomf = pscdsv-psivsv(ikl)
7590  f___ok = max(zer0,sign(un_1,denomf))
7591  denomf = max(eps6, denomf) !
7592  f_stom = pscdsv / denomf ! F(Leaf Wat.Pot.)
7593  dfdpsi = -f_stom / denomf !
7594  ! DR97, eqn. 3.22
7595  numerr = r0stom / max(laiesv(ikl), r0stom/stxdsv) !
7596  r_stom = numerr * f_stom ! Can.Stomatal R.
7597  ! DR97, eqn. 3.21
7598  drdpsi = r_stom * dfdpsi !
7599 
7600 ! Evaporation / Evapotranspiration
7601 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7602  evfrac = max(zer0, sign(un_1,qat_sv(ikl)-qsatvg)) ! Condensation/
7603  evfrac = evfrac ! Transpiration
7604  . + (1.-evfrac) *rrcasv(ikl)/ rrmxsv(ikl) ! Switch
7605  fac_ev = rht_sv(ikl) *sigmsv(ikl) ! idem, Factor
7606  denome = rah_sv(ikl) +r_stom * sigmsv(ikl)
7607  facevt = fac_ev * (1.-evfrac) / denome !
7608  evtran = facevt *(qsatvg - qat_sv(ikl)) ! EvapoTranspir.
7609  dedpsi =(evtran / denome) * drdpsi ! EvT Derivative
7610 
7611 
7612 ! Imbalance of the Canopy Water Budget
7613 ! ---------------------------------------
7614 
7615  bwater =( plantw(ikl) ! Available Water
7616  . - evtran )* f___ok ! Transpired Water
7617 
7618  bswich = max(zer0, ! Newton-Raphson
7619  . sign(un_1, abs(bwater) ! Switch
7620  . -bw_min)) !
7621 
7622 
7623 ! Derivative of the Canopy Water Budget
7624 ! ---------------------------------------
7625 
7626  dbwdpv = dpdpsi(ikl)
7627  . - dedpsi
7628  dbwdpv = sign( un_1, dbwdpv) !
7629  . * max(eps_21,abs(dbwdpv)) !
7630 
7631 
7632 ! Update Canopy and Surface/Canopy Temperatures
7633 ! ---------------------------------------------
7634 
7635  d_psiv = bwater / dbwdpv !
7636  d_psiv = sign(un_1,d_psiv) ! Increment
7637  . *min( abs(d_psiv) ,dpvmax) ! Limitor
7638  psivsv(ikl) = psivsv(ikl) - bswich *d_psiv ! Newton-Raphson
7639  bw_max = max(bw_max,abs(bwater))
7640  END DO
7641 
7642 
7643 ! Update Root Water Fluxes | := Evapotranspiration
7644 ! ------------------------------------------------
7645 
7646  DO isl=-nsol,0
7647  DO ikl=1,knonv
7648  rootsv(ikl,isl) = rootsv(ikl,isl)*evt_sv(ikl) ! Root Water
7649  . /max(eps_21,plantw(ikl)) !
7650  END DO
7651  END DO
7652 
7653 c hj150311 for parallel IF (BW_MAX.gt.BW_MIN.and.nit.lt.nitmax) GO TO 101
7654  IF ( nit.lt.nitmax) GO TO 101
7655  return
7656  end
7657 
7658 
7659  subroutine sisvat_qsn
7660  . (
7661 ! #e1. EqSn_0,EqSn_1,EqSn_d
7662 ! #m1. ,SIsubl,SImelt,SIrnof
7663  . )
7664 
7665 !--------------------------------------------------------------------------+
7666 ! MAR SISVAT_qSn Sat 12-Feb-2012 MAR |
7667 ! SubRoutine SISVAT_qSn updates the Snow Water Content |
7668 !--------------------------------------------------------------------------+
7669 ! |
7670 ! PARAMETERS: klonv: Total Number of columns = |
7671 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
7672 ! X Number of Mosaic Cell per grid box |
7673 ! |
7674 ! INPUT: isnoSV = total Nb of Ice/Snow Layers |
7675 ! ^^^^^ |
7676 ! |
7677 ! INPUT: TaT_SV : SBL Top Temperature [K] |
7678 ! ^^^^^ dt__SV : Time Step [s] |
7679 ! |
7680 ! INPUT / drr_SV : Rain Intensity [kg/m2/s] |
7681 ! OUTPUT: dzsnSV : Snow Layer Thickness [m] |
7682 ! ^^^^^^ eta_SV : Snow Water Content [m3/m3] |
7683 ! ro__SV : Snow/Soil Volumic Mass [kg/m3] |
7684 ! TsisSV : Soil/Ice Temperatures (layers -nsol,-nsol+1,..,0)|
7685 ! & Snow Temperatures (layers 1,2,...,nsno) [K] |
7686 ! |
7687 ! OUTPUT: SWS_SV : Surficial Water Status |
7688 ! ^^^^^^ |
7689 ! EExcsv : Snow Energy in Excess, initial Forcing [J/m2] |
7690 ! EqSn_d : Snow Energy in Excess, remaining [J/m2] |
7691 ! EqSn_0 : Snow Energy, before Phase Change [J/m2] |
7692 ! EqSn_1 : Snow Energy, after Phase Change [J/m2] |
7693 ! SIsubl : Snow sublimed/deposed Mass [mm w.e.] |
7694 ! SImelt : Snow Melted Mass [mm w.e.] |
7695 ! SIrnof : Surficial Water + Run OFF Change [mm w.e.] |
7696 ! |
7697 ! |
7698 ! Preprocessing Option: STANDARD Possibility |
7699 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ |
7700 ! #IB: OUTPUT: Ice-Sheet Surface Mass Balance (on NetCDF File ) |
7701 ! |
7702 ! |
7703 ! Preprocessing Option: (PLEASE VERIFY before USE) |
7704 ! ^^^^^^^^^^^^^^^^^^^^^ |
7705 ! #SU: SLUSH : Alternative Parameterization |
7706 ! |
7707 ! |
7708 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
7709 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
7710 ! FILE | CONTENT |
7711 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
7712 ! # SISVAT_iii_jjj_n | #E0: OUTPUT on ASCII File (SISVAT Variables) |
7713 ! # |(#E0 MUST BE PREPROCESSED BEFORE #e1 & #e2 !) |
7714 ! # SISVAT_iii_jjj_n | #e1: OUTPUT/Verification: Energy Conservation |
7715 ! # SISVAT_iii_jjj_n | #m1: OUTPUT/Verification: * Mass Conservation |
7716 ! | |
7717 ! # SISVAT_qSn.vm | #vm: OUTPUT/Verification: Energy/Water Budget |
7718 ! | unit 43, SubRoutine SISVAT_qSn **ONLY** |
7719 ! # SISVAT_qSn.vu | #vu: OUTPUT/Verification: Slush Parameteriz. |
7720 ! | unit 44, SubRoutine SISVAT_qSn **ONLY** |
7721 ! | |
7722 ! # stdout | #s2: OUTPUT of SnowFall, Snow Buffer |
7723 ! | unit 6, SubRoutine SISVAT_BSn, _qSn |
7724 !--------------------------------------------------------------------------+
7725 
7726 
7727 
7728 
7729 
7730 ! Global Variables
7731 ! ================
7732 
7733  USE phy_sv
7734 
7735  USE var_sv
7736  USE vardsv
7737  USE var0sv
7738 
7739  USE varxsv
7740 
7741 
7742 ! OUTPUT
7743 ! ------
7744 
7745  USE varysv
7746 
7747  IMPLICIT NONE
7748 
7749 ! OUTPUT/Verification: Energy/Water Budget
7750 ! #e1 real EqSn_d(klonv) ! Energy in Excess, initial
7751 ! #e1 real EqSn_0(klonv) ! Snow Energy, befor Phase Change
7752 ! #vm real EqSn01(klonv) ! Snow Energy, after Phase Change
7753 ! #vm real EqSn02(klonv) ! Snow Energy, after Phase Change
7754  ! .AND. Last Melting
7755 ! #e1 real EqSn_1(klonv) ! Snow Energy, after Phase Change
7756  ! .AND. Mass Redistr.
7757 ! OUTPUT/Verification: * Mass Conservation
7758 ! #m1 real SIsubl(klonv) ! Snow Deposed Mass
7759 ! #m1 real SImelt(klonv) ! Snow Melted Mass
7760 ! #m1 real SIrnof(klonv) ! Local Surficial Water + Run OFF
7761 
7762 
7763 ! Internal Variables
7764 ! ==================
7765 
7766  integer ikl ,isn !
7767  integer nh ! Non erodible Snow: up.lay.Index
7768  integer LayrOK ! 1 (0) if In(Above) Snow Pack
7769  integer k_face ! 1 (0) if Crystal(no) faceted
7770  integer LastOK ! 1 ==> 1! Snow Layer
7771  integer NOLayr ! 1 Layer Update
7772  integer noSnow(klonv) ! Nb of Layers Updater
7773  integer kSlush ! Slush Switch
7774  real dTSnow ! Temperature [C]
7775  real EExdum(klonv) ! Energy in Excess when no Snow
7776  real OKmelt ! 1 (0) if (no) Melting
7777  real EnMelt ! Energy in excess, for Melting
7778  real SnHLat ! Energy consumed in Melting
7779  real AdEnrg,B_Enrg ! Additional Energy from Vapor
7780  real dzVap0,dzVap1 ! Vaporized Thickness [m]
7781  real dzMelt(klonv) ! Melted Thickness [m]
7782  real rosDry ! Snow volumic Mass if no Water in
7783  real PorVol ! Pore volume
7784  real PClose ! Pore Hole Close OFF Switch
7785  real SGDiam ! Snow Grain Diameter
7786  real SGDmax ! Max. Snow Grain Diameter
7787  real rWater ! Retained Water [kg/m2]
7788  real drrNEW ! New available Water [kg/m2]
7789  real rdzNEW ! Snow Mass [kg/m2]
7790  real rdzsno ! Snow Mass [kg/m2]
7791  real EnFrez ! Energy Release in Freezing
7792  real WaFrez ! Water consumed in Melting
7793  real RapdOK ! 1. ==> Snow melts rapidly
7794  real ThinOK ! 1. ==> Snow Layer is thin
7795  real dzepsi ! Minim. Snow Layer Thickness (!)
7796  real dz_Min ! Minim. Snow Layer Thickness
7797  real z_Melt ! Last (thin) Layer Melting
7798  real rusnew ! Surficial Water Thickness [mm]
7799  real zWater ! Max Slush Water Thickness [mm]
7800  real zSlush ! Slush Water Thickness [mm]
7801  real ro_new ! New Snow/ice Density [kg/m3]
7802  real zc,zt ! Non erod.Snow Thickness[mm w.e.]
7803 
7804 ! OUTPUT of SISVAT Trace Statistics (see assignation in PHY_SISVAT)
7805 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7806  integer isnnew,isinew,isnUpD,isnitr
7807 
7808 ! OUTPUT/Verification: Energy/Water Budget
7809 ! #vm real WqSn_0(klonv) ! Snow Water+Forcing Initial
7810 ! #vm real WqSn_1(klonv) ! Snow Water+Forcing, Final
7811 ! #vm logical emopen ! IO Switch
7812 ! #vm common/Se_qSn_L/emopen !
7813 ! #vm integer no_err !
7814 ! #vm common/Se_qSn_I/no_err !
7815 ! #vm real hourer,timeer !
7816 ! #vm common/Se_qSn_R/timeer !
7817 
7818 ! OUTPUT/Verification: Slush Parameterization
7819 ! #vu logical su_opn ! IO Switch
7820 ! #vu common/SI_qSn_L/su_opn !
7821 
7822 
7823 ! DATA
7824 ! ====
7825 !hj1907 data dzepsi/0.005/ !hj180711 ! Minim. Snow Layer Thickness (!)
7826 !hjp230611
7827  data dzepsi/0.0001/ ! Minim. Snow Layer Thickness (!)
7828 !hjp290611 data dzepsi/0.0003/ ! Minim. Snow Layer Thickness (!)
7829 
7830 !hjp230611
7831  data dz_min/1.e-4/ ! Minim. Snow Layer Thickness
7832 ! data dz_Min/0.005/ ! Minim. Snow Layer Thickness
7833 c ... Warning: Too high for Col de Porte: precludes 1st snow (layer) apparition
7834 !hj1907 data dz_Min/0.005/ !hj180711 ! Minim. Snow Layer Thickness
7835 
7836 
7837  data sgdmax/0.003/ ! Maxim. Snow Grain Diameter [m]
7838  ! (Rowe et al. 1995, JGR p.16268)
7839 
7840 
7841 ! OUTPUT/Verification: Energy/Water Budget: Energy Budget (IN)
7842 ! #e1 DO ikl=1,knonv
7843 ! #e1 EqSn_0(ikl) = 0.
7844 ! #e1 END DO
7845 ! #e1 DO isn=nsno,1,-1
7846 ! #e1 DO ikl=1,knonv
7847 ! #e1 EqSn_0(ikl) = EqSn_0(ikl) + ro__SV(ikl,isn) *dzsnSV(ikl,isn)
7848 ! #e1. *(Cn_dSV *(TsisSV(ikl,isn) -Tf_Sno )
7849 ! #e1. -LhfH2O *(1. -eta_SV(ikl,isn)))
7850 ! #e1 END DO
7851 ! #e1 END DO
7852 
7853 
7854 ! OUTPUT/Verification: Energy/Water Budget: Water Budget (IN)
7855 ! #vm DO ikl=1,knonv
7856 ! #vm WqSn_0(ikl) = drr_SV(ikl) * dt__SV
7857 ! #vm. +rusnSV(ikl)
7858 ! #vm END DO
7859 ! #vm DO isn=nsno,1,-1
7860 ! #vm DO ikl=1,knonv
7861 ! #vm WqSn_0(ikl) = WqSn_0(ikl) + ro__SV(ikl,isn) *dzsnSV(ikl,isn)
7862 ! #vm END DO
7863 ! #vm END DO
7864 
7865 
7866 ! OUTPUT/Verification: * Mass Conservation
7867 ! #m1 DO ikl=1,knonv
7868 ! #m1 SImelt(ikl) = 0.
7869 ! #m1 SIrnof(ikl) = rusnSV(ikl) + RnofSV(ikl) * dt__SV
7870 ! #m1 END DO
7871 
7872 
7873 ! Initialization
7874 ! ==============
7875 
7876  DO ikl=1,knonv
7877  nosnow(ikl) = 0 ! Nb of Layers Updater
7878  ispisv(ikl) = 0 ! Pore Hole Close OFF Index
7879  ! (assumed to be the Top of
7880  ! the surimposed Ice Layer)
7881 c #IB wem_SV(ikl) = 0.
7882 c #IB wer_SV(ikl) = 0.
7883  END DO
7884 
7885 
7886 ! Melting/Freezing Energy
7887 ! =======================
7888 
7889 ! REMARK: Snow liquid Water Temperature assumed = Tf_Sno
7890 ! ^^^^^^
7891  DO ikl=1,knonv
7892  eexdum(ikl) = drr_sv(ikl) * hc_wat *(tat_sv(ikl)-tf_sno)
7893  . * dt__sv
7894  eexcsv(ikl) = eexdum(ikl) * min(1,isnosv(ikl)) ! Snow exists
7895  eexdum(ikl) = eexdum(ikl) - eexcsv(ikl) !
7896 
7897 ! OUTPUT/Verification: Energy/Water Budget
7898 ! #e1 EqSn_d(ikl) = EExcsv(ikl) !
7899 
7900  END DO
7901 
7902 
7903 ! Surficial Water Status
7904 ! ----------------------
7905 
7906  DO ikl=1,knonv
7907  sws_sv(ikl) = max(zer0,sign(un_1,tf_sno
7908  . -tsissv(ikl,isnosv(ikl))))
7909  END DO
7910 
7911  DO isn=nsno,1,-1
7912  DO ikl=1,knonv
7913 
7914 ! Energy, store Previous Content
7915 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7916  dtsnow = tsissv(ikl,isn) - tf_sno
7917  eexcsv(ikl) = eexcsv(ikl)
7918  . + ro__sv(ikl,isn) * cn_dsv * dtsnow
7919  . * dzsnsv(ikl,isn)
7920  tsissv(ikl,isn) = tf_sno
7921 
7922 ! Water, store Previous Content
7923 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7924  drr_sv(ikl) = drr_sv(ikl)
7925  . + ro__sv(ikl,isn) * eta_sv(ikl,isn)
7926  . * dzsnsv(ikl,isn)
7927  . / dt__sv
7928  ro__sv(ikl,isn) =
7929  . ro__sv(ikl,isn) *(1. - eta_sv(ikl,isn))
7930  eta_sv(ikl,isn) = 0.
7931 
7932 
7933 ! Melting if EExcsv > 0
7934 ! ======================
7935 
7936  enmelt = max(zer0, eexcsv(ikl) )
7937 
7938 ! Energy Consumption
7939 ! ^^^^^^^^^^^^^^^^^^
7940  snhlat = ro__sv(ikl,isn) * lhfh2o
7941  dzmelt(ikl) = enmelt / max(snhlat, eps6 )
7942  nosnow(ikl) = nosnow(ikl)
7943  . + max(zer0 ,sign(un_1,dzmelt(ikl) !
7944  . -dzsnsv(ikl ,isn))) ! 1 if full Melt
7945  . *min(1 , max(0 ,1+isnosv(ikl)-isn)) ! 1 in the Pack
7946  dzmelt(ikl) =
7947  . min(dzsnsv(ikl, isn),dzmelt(ikl))
7948  dzsnsv(ikl,isn) =
7949  . dzsnsv(ikl,isn) -dzmelt(ikl)
7950  eexcsv(ikl) = eexcsv(ikl) -dzmelt(ikl)*snhlat
7951 c #IB wem_SV(ikl) = wem_SV(ikl) -dzMelt(ikl)*ro__SV(ikl,isn)
7952 
7953 ! Water Production
7954 ! ^^^^^^^^^^^^^^^^^
7955  drr_sv(ikl) = drr_sv(ikl)
7956  . + ro__sv(ikl,isn) * dzmelt(ikl)/dt__sv
7957 
7958 ! OUTPUT/Verification: * Mass Conservation
7959 ! #m1 SImelt(ikl) = SImelt(ikl)
7960 ! #m1. + ro__SV(ikl,isn) * dzMelt(ikl)
7961 
7962  okmelt =max(zer0,sign(un_1,drr_sv(ikl)-eps6))
7963 
7964 ! Snow History
7965 ! ^^^^^^^^^^^^
7966  k_face = min( istosv(ikl,isn),istdsv(1)) ! = 1 if
7967  . *max(0,2-istosv(ikl,isn) ) ! faceted
7968  istosv(ikl,isn) = !
7969  . (1.-okmelt) * istosv(ikl,isn) !
7970  . + okmelt *((1-k_face) * istdsv(2) !
7971  . + k_face * istdsv(3) ) !
7972 
7973 
7974 ! Freezing if EExcsv < 0
7975 ! ======================
7976 
7977  rdzsno = ro__sv(ikl,isn) * dzsnsv(ikl ,isn)
7978  layrok = min( 1, max(0 , isnosv(ikl)-isn+1))
7979  enfrez = min(zer0, eexcsv(ikl))
7980  wafrez = -( enfrez * layrok / lhfh2o)
7981  drrnew = max(zer0,drr_sv(ikl) - wafrez / dt__sv)
7982  wafrez = ( drr_sv(ikl) - drrnew)* dt__sv
7983  drr_sv(ikl) = drrnew
7984  eexcsv(ikl) = eexcsv(ikl) + wafrez * lhfh2o
7985  enfrez = min(zer0,eexcsv(ikl)) * layrok
7986  rdznew = wafrez + rdzsno
7987  ro__sv(ikl,isn) = rdznew /max(eps6, dzsnsv(ikl,isn))
7988  tsissv(ikl,isn) = tf_sno
7989  . + enfrez /(cn_dsv *max(eps6, rdznew) )
7990  eexcsv(ikl) = eexcsv(ikl) - enfrez
7991 c #IB wer_SV(ikl) = WaFrez
7992 c #IB. + wer_SV(ikl)
7993 
7994 
7995 ! Snow Water Content
7996 ! ==================
7997 
7998 ! Pore Volume [-]
7999 ! ^^^^^^^^^^^^^^^^^
8000  rosdry =(1. - eta_sv(ikl,isn))* ro__sv(ikl,isn) !
8001  porvol = 1. - rosdry / rhoice !
8002  porvol = max(porvol , zer0 ) !
8003 
8004 ! Water Retention
8005 ! ^^^^^^^^^^^^^^^^
8006  rwater = ws0dsv * porvol * rhowat * dzsnsv(ikl,isn)
8007  drrnew = max(zer0,drr_sv(ikl) - rwater /dt__sv)
8008  rwater = ( drr_sv(ikl) - drrnew)*dt__sv
8009  drr_sv(ikl) = drrnew
8010  rdznew = rwater
8011  . + rosdry * dzsnsv(ikl,isn)
8012  eta_sv(ikl,isn) = rwater / max(eps6,rdznew)
8013  ro__sv(ikl,isn) = rdznew / max(eps6,dzsnsv(ikl,isn))
8014 
8015 ! Pore Hole Close OFF
8016 ! ^^^^^^^^^^^^^^^^^^^
8017  pclose = max(zer0,
8018  . sign(un_1,ro__sv(ikl,isn)
8019  . -rocdsv ))
8020  ispisv(ikl) = ispisv(ikl) *(1.-pclose)
8021  . + max(ispisv(ikl),isn) * pclose
8022  pclose = max(0 , ! Water under SuPer.Ice
8023  . min(1 ,ispisv(ikl) ! contributes to
8024  . -isn )) ! Surficial Water
8025  rusnsv(ikl) = rusnsv(ikl)
8026  . + drr_sv(ikl) *dt__sv * pclose
8027  drr_sv(ikl) = drr_sv(ikl) *(1.-pclose)
8028 
8029  END DO
8030  END DO
8031 
8032 
8033 ! Remove Zero-Thickness Layers
8034 ! ============================
8035 
8036  1000 CONTINUE
8037  ! isnitr = 0
8038  DO ikl=1,knonv
8039  isnupd = 0
8040  isinew = 0
8041  DO isn=1,nsno-1
8042  isnnew =(un_1-max(zer0 ,sign(un_1,dzsnsv(ikl,isn)-dzepsi)))
8043  . * max(0 , min(1 ,isnosv(ikl) +1 -isn ))
8044  isnupd = max(isnupd, isnnew)
8045 ! isnitr = max(isnitr, isnnew)
8046  isinew = isn*isnupd *max(0, 1-isinew) ! LowerMost 0-Layer
8047  . +isinew ! Index
8048  dzsnsv(ikl,isn) = dzsnsv(ikl,isn+isnnew)
8049  ro__sv(ikl,isn) = ro__sv(ikl,isn+isnnew)
8050  tsissv(ikl,isn) = tsissv(ikl,isn+isnnew)
8051  eta_sv(ikl,isn) = eta_sv(ikl,isn+isnnew)
8052  g1snsv(ikl,isn) = g1snsv(ikl,isn+isnnew)
8053  g2snsv(ikl,isn) = g2snsv(ikl,isn+isnnew)
8054  dzsnsv(ikl,isn+isnnew) =(1-isnnew)*dzsnsv(ikl,isn+isnnew)
8055  ro__sv(ikl,isn+isnnew) =(1-isnnew)*ro__sv(ikl,isn+isnnew)
8056  eta_sv(ikl,isn+isnnew) =(1-isnnew)*eta_sv(ikl,isn+isnnew)
8057  g1snsv(ikl,isn+isnnew) =(1-isnnew)*g1snsv(ikl,isn+isnnew)
8058  g2snsv(ikl,isn+isnnew) =(1-isnnew)*g2snsv(ikl,isn+isnnew)
8059  END DO
8060  isnosv(ikl) = isnosv(ikl)-isnupd ! Nb of Snow Layer
8061  ispisv(ikl) = ispisv(ikl) ! Nb of SuperI Layer
8062  . -isnupd *max(0,min(ispisv(ikl)-isinew,1)) ! Update if I=0
8063 
8064  END DO
8065 ! IF (isnitr.GT.0) GO TO 1000
8066 
8067 
8068 ! New upper Limit of the non erodible Snow (istoSV .GT. 1)
8069 ! ========================================
8070 
8071  DO ikl=1,knonv
8072  nh = 0
8073  DO isn= nsno,1,-1
8074  nh = nh + isn* min(istosv(ikl,isn)-1,1)*max(0,1-nh)
8075  ENDDO
8076  zc = 0.
8077  zt = 0.
8078  DO isn=1,nsno
8079  zc = zc + dzsnsv(ikl,isn) *ro__sv(ikl,isn)
8080  . * max(0,min(1,nh+1-isn))
8081  zt = zt + dzsnsv(ikl,isn) *ro__sv(ikl,isn)
8082  END DO
8083  zwe_sv(ikl) = zt
8084  zwecsv(ikl) = min(zwecsv(ikl),zt)
8085  zwecsv(ikl) = max(zwecsv(ikl),zc)
8086  END DO
8087 
8088 
8089 ! OUTPUT/Verification: Energy/Water Budget: Energy Budget (OUT)
8090 ! #vm DO ikl=1,knonv
8091 ! #vm EqSn01(ikl) =-EqSn_0(ikl)
8092 ! #vm. -EExcsv(ikl)
8093 ! #vm END DO
8094 ! #vm DO isn=nsno,1,-1
8095 ! #vm DO ikl=1,knonv
8096 ! #vm EqSn01(ikl) = EqSn01(ikl) + ro__SV(ikl,isn) *dzsnSV(ikl,isn)
8097 ! #vm. *(Cn_dSV *(TsisSV(ikl,isn) -Tf_Sno )
8098 ! #vm. -LhfH2O *(1. -eta_SV(ikl,isn)))
8099 ! #vm END DO
8100 ! #vm END DO
8101 
8102 
8103 ! "Negative Heat" from supercooled rain
8104 ! ------------------------------------
8105 
8106  DO ikl=1,knonv
8107  eexcsv(ikl) = eexcsv(ikl) + eexdum(ikl)
8108 
8109 
8110 ! Surficial Water Run OFF
8111 ! -----------------------
8112 
8113  rusnew = rusnsv(ikl) * swf_sv(ikl)
8114  rnofsv(ikl) = rnofsv(ikl)
8115  . +(rusnsv(ikl) - rusnew ) / dt__sv
8116  rusnsv(ikl) = rusnew
8117  END DO
8118 
8119 
8120 ! Percolation down the Continental Ice Pack
8121 ! -----------------------------------------
8122 
8123  DO ikl=1,knonv
8124  drr_sv(ikl) = drr_sv(ikl) + rusnsv(ikl)
8125  . * (1-min(1,ispisv(ikl)))/ dt__sv
8126  rusnsv(ikl) = rusnsv(ikl)
8127  . * min(1,ispisv(ikl))
8128  END DO
8129 
8130 
8131 ! Slush Formation (CAUTION: ADD RunOff Possibility before Activation)
8132 ! --------------- ^^^^^^^ ^^^
8133 
8134 ! OUTPUT/Verification: Slush Parameterization
8135 ! #vu IF (.NOT.su_opn) THEN
8136 ! #vu su_opn=.true.
8137 ! #vu open(unit=44,status='unknown',file='SISVAT_qSn.vu')
8138 ! #vu rewind 44
8139 ! #vu END IF
8140 ! #vu write(44,440) daHost
8141  440 format('iSupI i dz ro eta',
8142  . ' PorVol zSlush ro_n eta_n',2x,a18)
8143 
8144 c #SU DO isn=1,nsno
8145 c #SU DO ikl=1,knonv
8146 c #SU kSlush = min(1,max(0,isn+1-ispiSV(ikl))) ! Slush Switch
8147 
8148 ! Available Additional Pore Volume [-]
8149 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8150 c #SU PorVol = 1. - ro__SV(ikl,isn) ! [--]
8151 c #SU. *(1. - eta_SV(ikl,isn))/ rhoIce !
8152 c #SU. - eta_SV(ikl,isn) !
8153 c #SU. *ro__SV(ikl,isn) / rhoWat !
8154 c #SU PorVol = max(PorVol , zer0 ) !
8155 c #SU zWater = dzsnSV(ikl,isn) * PorVol * 1000. ! [mm] OR [kg/m2]
8156 c #SU. * (1. -SWS_SV(ikl) ! 0 <=> freezing
8157 c #SU. *(1 -min(1,iabs(isn-isnoSV(ikl))))) ! 1 <=> isn=isnoSV
8158 c #SU zSlush = min(rusnSV(ikl) , zWater) ! [mm] OR [kg/m2]
8159 c #SU rusnSV(ikl) = rusnSV(ikl) - zSlush ! [mm] OR [kg/m2]
8160 c #SU ro_new =(dzsnSV(ikl,isn) * ro__SV(ikl,isn) !
8161 c #SU. +zSlush )!
8162 c #SU. / max(dzsnSV(ikl,isn) , eps6 )!
8163 
8164 ! OUTPUT/Verification: Slush Parameterization
8165 ! #vu rusnew = eta_SV(ikl,isn) !
8166 
8167 c #SU eta_SV(ikl,isn) =(ro_new - ro__SV(ikl,isn) !
8168 c #SU. *(1. - eta_SV(ikl,isn))) !
8169 c #SU. / max (ro_new , eps6 ) !
8170 
8171 ! OUTPUT/Verification: Slush Parameterization
8172 ! #vu IF (isn.le.isnoSV(ikl)) !
8173 ! #vu. write(44,441) ispiSV(ikl),isn,dzsnSV(ikl,isn) !
8174 ! #vu. ,ro__SV(ikl,isn),rusnew !
8175 ! #vu. ,PorVol ,zSlush !
8176 ! #vu. ,ro_new ,eta_SV(ikl,isn) !
8177  441 format(2i5,f9.3,f9.1,f9.6,f9.3,f9.6,f9.1,f9.6) !
8178 
8179 c #SU ro__SV(ikl,isn) = ro_new !
8180 c #SU END DO
8181 c #SU END DO
8182 
8183 
8184 ! Impact of the Sublimation/Deposition on the Surface Mass Balance
8185 ! ================================================================
8186 
8187  DO ikl=1,knonv
8188  isn = isnosv(ikl)
8189  dzvap0 = dt__sv
8190  . * hls_sv(ikl) * min(isn , 1 )
8191  . /(lx_h2o(ikl) * max(ro__sv(ikl,isn) , eps6))
8192  nolayr=min(zer0,sign(un_1,dzsnsv(ikl,isn) + dzvap0))
8193  dzvap1=min(zer0, dzsnsv(ikl,isn) + dzvap0)
8194 
8195 
8196 ! Additional Energy (CAUTION: Verification is not performed)
8197 ! -----------------
8198 
8199 ! OUTPUT/Verification: Energy Consrv. (HLS)
8200 ! #e4 AdEnrg = dzVap0 * ro__SV(ikl,isnoSV(ikl)) ! Water Vapor
8201 ! #e4. *hC_Wat *(TsisSV(ikl,isnoSV(ikl)) -Tf_Sno) ! Sensible Heat
8202 
8203 ! OUTPUT/Verification: Energy Consrv. (HL)
8204 ! #e3 B_Enrg =(Cn_dSV *(TsisSV(ikl,isn) -Tf_Sno )
8205 ! #e3. -LhfH2O *(1. -eta_SV(ikl,isn)))
8206 ! #e3. /(1. + dzVap0 /max(eps6,dzsnSV(ikl,isn)))
8207 ! #e3 eta_SV(ikl,isn) =
8208 ! #e3. max(zer0,un_1 +(B_Enrg
8209 ! #e3. -(TsisSV(ikl,isn) -Tf_Sno)*Cn_dSV)
8210 ! #e3. /LhfH2O )
8211 ! #e3 TsisSV(ikl,isn) = ( B_Enrg
8212 ! #e3. +(1. -eta_SV(ikl,isn))
8213 ! #e3. *LhfH2O )
8214 ! #e3. / Cn_dSV
8215 ! #e3. + Tf_Sno
8216 
8217 ! OUTPUT/Verification: Energy Conservation
8218 ! #e1 STOP "PLEASE add Energy (#e3) from deposition/sublimation"
8219 
8220 
8221 ! Update of the upper Snow layer Thickness
8222 ! ----------------------------------------
8223 
8224  dzsnsv(ikl,isn) =
8225  . max(zer0, dzsnsv(ikl,isnosv(ikl)) + dzvap0)
8226  isnosv(ikl) = isnosv(ikl) + nolayr
8227  isn = isnosv(ikl)
8228  dzsnsv(ikl,isn) = dzsnsv(ikl,isn) + dzvap1
8229 c #IB wes_SV(ikl) = ro__SV(ikl,isn) * dzVap0
8230  END DO
8231 
8232 
8233 ! OUTPUT/Verification: Energy/Water Budget: Energy Budget (OUT)
8234 ! #vm DO ikl=1,knonv
8235 ! #vm EqSn02(ikl) =-EqSn_0(ikl)
8236 ! #vm. -EExcsv(ikl)
8237 ! #vm END DO
8238 ! #vm DO isn=nsno,1,-1
8239 ! #vm DO ikl=1,knonv
8240 ! #vm EqSn02(ikl) = EqSn01(ikl) + ro__SV(ikl,isn) *dzsnSV(ikl,isn)
8241 ! #vm. *(Cn_dSV *(TsisSV(ikl,isn) -Tf_Sno )
8242 ! #vm. -LhfH2O *(1. -eta_SV(ikl,isn)))
8243 ! #vm END DO
8244 ! #vm END DO
8245 
8246 
8247 ! OUTPUT/Verification: * Mass Conservation
8248 ! #m1 DO ikl=1,knonv
8249 ! #m1 SIsubl(ikl) = dt__SV*HLs_sv(ikl)*min(isnoSV(ikl),1)
8250 ! #m1. /Lx_H2O(ikl)
8251 ! #m1 SIrnof(ikl) = rusnSV(ikl) + RnofSV(ikl) * dt__SV
8252 ! #m1. - SIrnof(ikl)
8253 ! #m1 END DO
8254 
8255 
8256 ! Anticipated Disappearance of a rapidly Melting too thin Last Snow Layer
8257 ! =======================================================================
8258 
8259  DO ikl=1,knonv
8260  lastok = min(1 , max(0 ,iicesv(ikl)-isnosv(ikl)+2)
8261  . *min(1 ,isnosv(ikl)-iicesv(ikl))
8262  . +min(1 ,isnosv(ikl)) )
8263  rapdok = max(zer0,sign(un_1,dzmelt(ikl)-eps6 ))
8264  thinok = max(zer0,sign(un_1,dz_min -dzsnsv(ikl,1)))
8265  z_melt = lastok *rapdok*thinok
8266  nosnow(ikl) = nosnow(ikl) + z_melt
8267  z_melt = z_melt *dzsnsv(ikl,1)
8268  dzsnsv(ikl,1) = dzsnsv(ikl,1) - z_melt
8269  eexcsv(ikl) = eexcsv(ikl) - z_melt *ro__sv(ikl,1)
8270  . *(1. -eta_sv(ikl,1))*lhfh2o
8271 
8272 ! Water Production
8273 ! ^^^^^^^^^^^^^^^^^
8274  drr_sv(ikl) = drr_sv(ikl)
8275  . + ro__sv(ikl,1) * z_melt /dt__sv
8276  END DO
8277 
8278 
8279 ! Update Nb of Layers
8280 ! ===================
8281 
8282 ! OUTPUT in SISVAT for ikl = 1 (preferably for Stand Alone Version)
8283 ! OUTPUT for SnowFall and Snow Buffer
8284 ! #s2 IF (isnoSV(1) .GT. 0)
8285 ! #s2. write(6,6005)noSnow(1)
8286  6005 format(i3,' (noSnow) ')
8287 
8288  DO ikl=1,knonv
8289  isnosv(ikl) = isnosv(ikl)
8290  . * min(1,iabs(isnosv(ikl)-nosnow(ikl)))
8291  END DO
8292 
8293 
8294 ! OUTPUT/Verification: Energy Conservation: Energy Budget (OUT)
8295 ! #e1 DO ikl=1,knonv
8296 ! #e1 EqSn_1(ikl) = 0.
8297 ! #e1 END DO
8298 ! #e1 DO isn=nsno,1,-1
8299 ! #e1 DO ikl=1,knonv
8300 ! #e1 EqSn_1(ikl) = EqSn_1(ikl) + ro__SV(ikl,isn) *dzsnSV(ikl,isn)
8301 ! #e1. *(Cn_dSV *(TsisSV(ikl,isn) -Tf_Sno )
8302 ! #e1. -LhfH2O *(1. -eta_SV(ikl,isn)))
8303 ! #e1 END DO
8304 ! #e1 END DO
8305 
8306 
8307 ! OUTPUT/Verification: Energy/Water Budget: Water Budget (OUT)
8308 ! #vm DO ikl=1,knonv
8309 ! #vm WqSn_0(ikl) = WqSn_0(ikl)
8310 ! #vm. + HLs_sv(ikl) * dt__SV
8311 ! #vm. *min(isnoSV(ikl),1) / Lx_H2O(ikl)
8312 ! #vm WqSn_1(ikl) = drr_SV(ikl) * dt__SV
8313 ! #vm. + rusnSV(ikl)
8314 ! #vm. + RnofSV(ikl) * dt__SV
8315 ! #vm END DO
8316 ! #vm DO isn=nsno,1,-1
8317 ! #vm DO ikl=1,knonv
8318 ! #vm WqSn_1(ikl) = WqSn_1(ikl)
8319 ! #vm. + ro__SV(ikl,isn)* dzsnSV(ikl,isn)
8320 ! #vm END DO
8321 ! #vm END DO
8322 
8323 
8324 ! OUTPUT/Verification: Energy/Water Budget
8325 ! #vm IF (.NOT.emopen) THEN
8326 ! #vm emopen = .true.
8327 ! #vm open(unit=43,status='unknown',file='SISVAT_qSn.vm')
8328 ! #vm rewind 43
8329 ! #vm write(43,43)
8330  43 format('SubRoutine SISVAT_qSn: Local Energy and Water Budgets',
8331  . /,'=====================================================')
8332 ! #vm END IF
8333 ! #vm DO ikl=1,knonv
8334 ! #vm IF (EqSn01(ikl).gt.1.e-3) write(43,431) dahost,EqSn01(ikl)
8335  431 format(' WARNING (1) in _qSn,', a18,
8336  . ': Energy Unbalance in Phase Change = ',e15.6)
8337 ! #vm END DO
8338 ! #vm DO ikl=1,knonv
8339 ! #vm IF (EqSn02(ikl).gt.1.e-3) write(43,432) dahost,EqSn01(ikl)
8340  432 format(' WARNING (2) in _qSn,', a18,
8341  . ': Energy Unbalance in Phase Change = ',e15.6)
8342 ! #vm END DO
8343 ! #vm timeer=timeer + dt__SV
8344 ! #vm hourer=3600.0
8345 ! #vm IF (mod(no_err,11).eq.0) THEN
8346 ! #vm no_err= 1
8347 ! #vm write(43,435)timeer/hourer
8348  435 format(11('-'),'----------+-',3('-'),'----------+-',
8349  . 3('-'),'----------+-',3('-'),'----------+-',
8350  . '----------------+----------------+',
8351  . /,f8.2,3x,'EqSn_0(1) | ',3x,'EqSn_d(1) | ',
8352  . 3x,'EqSn_1(1) | ',3x,'EExcsv(1) | ',
8353  . 'E_0+E_d-E_1-EE | Water Budget |',
8354  . /,11('-'),'----------+-',3('-'),'----------+-',
8355  . 3('-'),'----------+-',3('-'),'----------+-',
8356  . '----------------+----------------+')
8357 ! #vm END IF
8358 ! #vm IF (abs(EqSn_0(1)+EqSn_d(1)-EqSn_1(1)-EExcsv(1)).gt.eps6.OR.
8359 ! #vm. abs(WqSn_1(1)-WqSn_0(1)) .gt.eps6 ) THEN
8360 ! #vm no_err=no_err+1
8361 ! #vm write(43,436) EqSn_0(1),EqSn_d(1)
8362 ! #vm. ,EqSn_1(1),EExcsv(1)
8363 ! #vm. ,EqSn_0(1)+EqSn_d(1)-EqSn_1(1)-EExcsv(1)
8364 ! #vm. ,WqSn_1(1)-WqSn_0(1)
8365  436 format(8x,f12.0,' + ',f12.0,' - ',f12.0,' - ',f12.3,' = ',f12.3,
8366  . ' | ',f15.9)
8367 ! #vm END IF
8368 
8369 ! OUTPUT/Verification: Energy Conservation
8370 ! #e1 DO ikl=1,knonv
8371 ! #e1 EqSn_d(ikl) = EqSn_d(ikl) - EExcsv(ikl)
8372 ! #e1 END DO
8373 
8374  return
8375  end
8376 
8377 
8378  subroutine sisvat_gsn
8380 !--------------------------------------------------------------------------+
8381 ! MAR SISVAT_GSn Sat 12-Feb-2012 MAR |
8382 ! SubRoutine SISVAT_GSn simulates SNOW Metamorphism |
8383 !--------------------------------------------------------------------------+
8384 ! |
8385 ! PARAMETERS: klonv: Total Number of columns = |
8386 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
8387 ! X Number of Mosaic Cell per grid box |
8388 ! |
8389 ! INPUT / isnoSV = total Nb of Ice/Snow Layers |
8390 ! OUTPUT: iiceSV = total Nb of Ice Layers |
8391 ! ^^^^^^ istoSV = 0,...,5 : Snow History (see istdSV data) |
8392 ! |
8393 ! INPUT: TsisSV : Soil/Ice Temperatures (layers -nsol,-nsol+1,..,0)|
8394 ! ^^^^^ & Snow Temperatures (layers 1,2,...,nsno) [K] |
8395 ! ro__SV : Soil/Snow Volumic Mass [kg/m3] |
8396 ! eta_SV : Soil/Snow Water Content [m3/m3] |
8397 ! slopSV : Surface Slope [-] |
8398 ! dzsnSV : Snow Layer Thickness [m] |
8399 ! dt__SV : Time Step [s] |
8400 ! |
8401 ! INPUT / G1snSV : Dendricity (<0) or Sphericity (>0) of Snow Layer |
8402 ! OUTPUT: G2snSV : Sphericity (>0) or Size of Snow Layer |
8403 ! ^^^^^^ |
8404 ! |
8405 ! Formalisme adopte pour la Representation des Grains: |
8406 ! Formalism for the Representation of Grains: |
8407 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
8408 ! |
8409 ! 1 - -1 Neige Fraiche |
8410 ! / \ | ------------- |
8411 ! / \ | Dendricite decrite par Dendricite |
8412 ! / \ | Dendricity et Sphericite |
8413 ! / \ | |
8414 ! 2---------3 - 0 described by Dendricity |
8415 ! and Sphericity |
8416 ! |---------| |
8417 ! 0 1 |
8418 ! Sphericite |
8419 ! Sphericity |
8420 ! |
8421 ! 4---------5 - |
8422 ! | | | |
8423 ! | | | Diametre (1/10eme de mm) (ou Taille) |
8424 ! | | | Diameter (1/10th of mm) (or Size ) |
8425 ! | | | |
8426 ! | | | Neige non dendritique |
8427 ! 6---------7 - --------------------- |
8428 ! decrite par Sphericite |
8429 ! et Taille |
8430 ! described by Sphericity |
8431 ! and Size |
8432 ! |
8433 ! Les Variables du Modele: |
8434 ! Model Variables: |
8435 ! ^^^^^^^^^^^^^^^^^^^^^^^^ |
8436 ! Cas Dendritique Cas non Dendritique |
8437 ! |
8438 ! G1snSV : Dendricite G1snSV : Sphericite |
8439 ! G2snSV : Sphericite G2snSV : Taille (1/10e mm) |
8440 ! Size |
8441 ! |
8442 ! Cas Dendritique/ Dendritic Case |
8443 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
8444 ! Dendricite(Dendricity) G1snSV |
8445 ! varie de -G1_dSV (-99 par defaut / etoile) a 0 |
8446 ! division par -G1_dSV pour obtenir des valeurs entre 1 et 0 |
8447 ! varies from -G1_dSV (default -99 / fresh snow) to 0 |
8448 ! division by -G1_dSV to obtain values between 1 and 0 |
8449 ! |
8450 ! Sphericite(Sphericity) G2snSV |
8451 ! varie de 0 (cas completement anguleux) |
8452 ! a G1_dSV (99 par defaut, cas spherique) |
8453 ! division par G1_dSV pour obtenir des valeurs entre 0 et 1 |
8454 ! varies from 0 (full faceted) to G1_dSV |
8455 ! |
8456 ! Cas non Dendritique / non Dendritic Case |
8457 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
8458 ! Sphericite(Sphericity) G1snSV |
8459 ! varie de 0 (cas completement anguleux) |
8460 ! a G1_dSV (99 par defaut, cas spherique) |
8461 ! division par G1_dSV pour obtenir des valeurs entre 0 et 1 |
8462 ! varies from 0 (full faceted) to G1_dSV |
8463 ! |
8464 ! Taille (Size) G2snSV |
8465 ! superieure a ADSdSV (.4 mm) et ne fait que croitre |
8466 ! greater than ADSdSV (.4 mm) always increases |
8467 ! |
8468 ! Exemples: Points caracteristiques des Figures ci-dessus |
8469 ! ^^^^^^^^^ |
8470 ! |
8471 ! G1snSV G2snSV dendricite sphericite taille |
8472 ! dendricity sphericity size |
8473 ! ------------------------------------------------------------------ |
8474 ! [1/10 mm] |
8475 ! 1 -G1_dSV sph3SN 1 0.5 |
8476 ! 2 0 0 0 0 |
8477 ! 3 0 G1_dSV 0 1 |
8478 ! 4 0 ADSdSV 0 4. |
8479 ! 5 G1_dSV ADSdSV-vsphe1 1 3. |
8480 ! 6 0 -- 0 -- |
8481 ! 7 G1_dSV -- 1 -- |
8482 ! |
8483 ! par defaut: G1_dSV=99. |
8484 ! sph3SN=50. |
8485 ! ADSdSV= 4. |
8486 ! vsphe1=1. |
8487 ! |
8488 ! Methode: |
8489 ! ^^^^^^^^ |
8490 ! 1. Evolution Types de Grains selon Lois de Brun et al. (1992): |
8491 ! Grain metamorphism according to Brun et al. (1992): |
8492 ! Plusieurs Cas sont a distiguer / the different Cases are: |
8493 ! 1.1 Metamorphose Neige humide / wet Snow |
8494 ! 1.2 Metamorphose Neige seche / dry Snow |
8495 ! 1.2.1 Gradient faible / low Temperature Gradient |
8496 ! 1.2.2 Gradient moyen / moderate Temperature Gradient |
8497 ! 1.2.3 Gradient fort / high Temperature Gradient |
8498 ! Dans chaque Cas on separe Neige Dendritique et non Dendritique |
8499 ! le Passage Dendritique -> non Dendritique |
8500 ! se fait lorsque G1snSV devient > 0 |
8501 ! the Case of Dentritic or non Dendritic Snow is treated separately |
8502 ! the Limit Dentritic -> non Dendritic is reached when G1snSV > 0 |
8503 ! |
8504 ! 2. Tassement: Loi de Viscosite adaptee selon le Type de Grains |
8505 ! Snow Settling: Viscosity depends on the Grain Type |
8506 ! |
8507 ! 3. Update Variables historiques (cas non dendritique seulement) |
8508 ! nhSNow defaut |
8509 ! 0 Cas normal |
8510 ! istdSV(1) 1 Grains anguleux / faceted cristal |
8511 ! istdSV(2) 2 Grains ayant ete en presence d eau liquide |
8512 ! mais n'ayant pas eu de caractere anguleux / |
8513 ! liquid water and no faceted cristals before |
8514 ! istdSV(3) 3 Grains ayant ete en presence d eau liquide |
8515 ! ayant eu auparavant un caractere anguleux / |
8516 ! liquid water and faceted cristals before |
8517 ! |
8518 ! REFER. : Brun et al. 1989, J. Glaciol 35 pp. 333--342 |
8519 ! ^^^^^^^^ Brun et al. 1992, J. Glaciol 38 pp. 13-- 22 |
8520 ! (CROCUS Model, adapted to MAR at CEN by H.Gallee) |
8521 ! |
8522 ! REFER. : Marbouty, D. 1980, J. Glaciol 26 pp. xxx--xxx |
8523 ! ^^^^^^^^ (CROCUS Model, adapted to MAR at CEN by H.Gallee) |
8524 ! (for angular shapes) |
8525 ! |
8526 ! |
8527 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
8528 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
8529 ! FILE | CONTENT |
8530 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
8531 ! # SISVAT_GSn.vp | #vp: OUTPUT/Verification: Snow Properties |
8532 ! | unit 47, SubRoutines SISVAT_zSn, _GSn |
8533 ! # stdout | #wp: OUTPUT/Verification: Snow Properties |
8534 ! | unit 6, SubRoutine SISVAT_GSn |
8535 ! |
8536 !--------------------------------------------------------------------------+
8537 
8538 
8539 
8540 
8541 
8542 ! Global Variables
8543 ! ================
8544 
8545  USE phy_sv
8546 
8547  USE var_sv
8548  USE vardsv
8549  USE var0sv
8550 
8551 
8552 ! INPUT/OUTPUT
8553 ! ------------
8554 
8555  USE varxsv
8556 
8557  IMPLICIT NONE
8558 
8559 ! OUTPUT
8560 ! ------
8561 
8562  integer k
8563 
8564 
8565 ! Local Variables
8566 ! ================
8567 
8568  logical vector !
8569  integer ikl !
8570  integer isn ,isnp !
8571  integer istoOK !
8572  real G1_bak,G2_bak ! Old Values of G1, G2
8573  real ro_dry(klonv, nsno) ! Dry Density [g/cm3]
8574  real etaSno(klonv, nsno) ! Liquid Water Content [g/cm2]
8575  real SnMass(klonv) ! Snow Mass [kg/m2]
8576  real dTsndz ! Temperature Gradient
8577  real sWater ! Water Content [%]
8578  real exp1Wa !
8579  real dDENDR ! Dendricity Increment
8580  real DENDRn ! Normalized Dendricity
8581  real SPHERn ! Normalized Sphericity
8582  real Wet_OK ! Wet Metamorphism Switch
8583  real OK__DE !
8584  real OK__wd ! New G*, from wet Dendritic
8585  real G1__wd ! New G1, from wet Dendritic
8586  real G2__wd ! New G2, from wet Dendritic
8587  real OKlowT !
8588  real facVap !
8589  real OK_ldd !
8590  real G1_ldd !
8591  real G2_ldd !
8592  real DiamGx !
8593  real DiamOK !
8594  real No_Big !
8595  real dSPHER !
8596  real SPHER0 !
8597  real SPHbig !
8598  real G1_lds !
8599  real OK_mdT !
8600  real OKmidT !
8601  real OKhigT !
8602  real OK_mdd !
8603  real G1_mdd !
8604  real G2_mdd !
8605  real G1_mds !
8606  real OK_hdd !
8607  real G1_hdd !
8608  real G2_hdd !
8609  real OK_hds !
8610  real G1_hds !
8611  real T1__OK,T2__OK !
8612  real T3_xOK,T3__OK,T3_nOK !
8613  real ro1_OK,ro2_OK !
8614  real dT1_OK,dT2_OK,dT3xOK,dT3_OK !
8615  real dT4xOK,dT4_OK,dT4nOK,AngSno !
8616  real G2_hds,SphrOK,HISupd !
8617  real H1a_OK,H1b_OK,H1__OK !
8618  real H23aOK,H23bOK,H23_OK !
8619  real H2__OK,H3__OK !
8620  real H45_OK,H4__OK,H5__OK !
8621  real ViscSn,OK_Liq,OK_Ang,OKxLiq !
8622  real dSnMas,dzsnew,rosnew,rosmax !
8623 
8624  real epsi5 ! Alpha ev67 single precision
8625  real vdiam1 ! Small Grains Min.Diam.[.0001m]
8626  real vdiam2 ! Spher.Variat.Max Diam. [mm]
8627  real vdiam3 ! Min.Diam.|Limit Spher. [mm]
8628  real vdiam4 ! Min.Diam.|Viscosity Change
8629  real vsphe1 ! Max Sphericity
8630  real vsphe2 ! Low T Metamorphism Coeff.
8631  real vsphe3 ! Max.Sphericity (history=1)
8632  real vsphe4 ! Min.Sphericity=>history=1
8633  real vtang1,vtang2,vtang3,vtang4 ! Temperature Contribution
8634  real vtang5,vtang6,vtang7,vtang8 !
8635  real vtang9,vtanga,vtangb,vtangc !
8636  real vrang1,vrang2 ! Density Contribution
8637  real vgang1,vgang2,vgang3,vgang4 ! Grad(T) Contribution
8638  real vgang5,vgang6,vgang7,vgang8 !
8639  real vgang9,vganga,vgangb,vgangc !
8640  real vgran6 ! Max.Sphericity for Settling
8641  real vtelv1 ! Threshold | history = 2, 3
8642  real vvap1 ! Vapor Pressure Coefficient
8643  real vvap2 ! Vapor Pressure Exponent
8644  real vgrat1 ! Boundary weak/mid grad(T)
8645  real vgrat2 ! Boundary mid/strong grad(T)
8646  real vfi ! PHI, strong grad(T)
8647  real vvisc1,vvisc2,vvisc3,vvisc4 ! Viscosity Coefficients
8648  real vvisc5,vvisc6,vvisc7 ! id., wet Snow
8649  real rovisc ! Wet Snow Density Influence
8650  real vdz3 ! Maximum Layer Densification
8651  real OK__ws ! New G2
8652  real G1__ws ! New G1, from wet Spheric
8653  real G2__ws ! New G2, from wet Spheric
8654  real husi_0,husi_1,husi_2,husi_3 ! Constants for New G2
8655  real vtail1,vtail2 ! Constants for New G2
8656  real frac_j ! Time Step [Day]
8657 
8658  real vdent1 ! Wet Snow Metamorphism
8659  integer nvdent1 ! (Coefficients for
8660  integer nvdent2 ! Dendricity)
8661 
8662 ! OUTPUT/Verification: Snow Layers Agregation: Properties
8663 ! #vp real G_curr(18),Gcases(18)
8664 ! #vp common /GSnLOC/ Gcases
8665 
8666 ! OUTPUT/Verification: Snow Properties
8667 ! #wp real D__MAX
8668 ! #wp common /GSnMAX/ D__MAX
8669 
8670 
8671 ! DATA
8672 ! ====
8673 
8674  data vector/.true./ ! Vectorization Switch
8675  data vdent1/ 2.e8/ ! Wet Snow Metamorphism
8676  data nvdent1/ 3 / ! (Coefficients for
8677  data nvdent2/16 / ! Dendricity)
8678 
8679  data husi_0 /20. / ! 10 * 2
8680  data husi_1 / 0.23873 / ! (3/4) /pi
8681  data husi_2 / 4.18880 / ! (4/3) *pi
8682  data husi_3 / 0.33333 / ! 1/3
8683  data vtail1 / 1.28e-08/ ! Wet Metamorphism
8684  data vtail2 / 4.22e-10/ ! (NON Dendritic / Spheric)
8685 
8686  data epsi5 / 1.0e-5 / !
8687 
8688  data vdiam1 / 4.0 / ! Small Grains Min.Diameter
8689 
8690  data vdiam2 / 0.5 / ! Spher.Variat.Max Diam.[mm]
8691  data vdiam3 / 3.0 / ! Min.Diam.|Limit Spher.[mm]
8692  data vdiam4 / 2.0 / ! Min.Diam.|Viscosity Change
8693 
8694  data vsphe1 / 1.0 / ! Max Sphericity
8695  data vsphe2 / 1.0e9 / ! Low T Metamorphism Coeff.
8696  data vsphe3 / 0.5 / ! Max.Sphericity (history=1)
8697  data vsphe4 / 0.1 / ! Min.Sphericity=>history=1
8698 
8699  data vgran6 / 51. / ! Max.Sphericity for Settling
8700  data vtelv1 / 5.e-1 / ! Threshold | history = 2, 3
8701 
8702  data vvap1 /-6.e3 / ! Vapor Pressure Coefficient
8703  data vvap2 / 0.4 / ! Vapor Pressure Exponent
8704 
8705  data vgrat1 /0.05 / ! Boundary weak/mid grad(T)
8706  data vgrat2 /0.15 / ! Boundary mid/strong grad(T)
8707  data vfi /0.09 / ! PHI, strong grad(T)
8708 
8709  data vvisc1 / 0.70 / ! Viscosity Coefficients
8710  data vvisc2 / 1.11e5 / !
8711  data vvisc3 /23.00 / !
8712  data vvisc4 / 0.10 / !
8713  data vvisc5 / 1.00 / ! id., wet Snow
8714  data vvisc6 / 2.00 / !
8715  data vvisc7 /10.00 / !
8716  data rovisc / 0.25 / ! Wet Snow Density Influence
8717  data vdz3 / 0.30 / ! Maximum Layer Densification
8718 
8719 
8720 ! DATA (Coefficient Fonction fort Gradient Marbouty)
8721 ! --------------------------------------------------
8722 
8723  data vtang1 /40.0/ ! Temperature Contribution
8724  data vtang2 / 6.0/ !
8725  data vtang3 /22.0/ !
8726  data vtang4 / 0.7/ !
8727  data vtang5 / 0.3/ !
8728  data vtang6 / 6.0/ !
8729  data vtang7 / 1.0/ !
8730  data vtang8 / 0.8/ !
8731  data vtang9 /16.0/ !
8732  data vtanga / 0.2/ !
8733  data vtangb / 0.2/ !
8734  data vtangc /18.0/ !
8735 
8736  data vrang1 / 0.40/ ! Density Contribution
8737  data vrang2 / 0.15/ !
8738 
8739  data vgang1 / 0.70/ ! Grad(T) Contribution
8740  data vgang2 / 0.25/ !
8741  data vgang3 / 0.40/ !
8742  data vgang4 / 0.50/ !
8743  data vgang5 / 0.10/ !
8744  data vgang6 / 0.15/ !
8745  data vgang7 / 0.10/ !
8746  data vgang8 / 0.55/ !
8747  data vgang9 / 0.65/ !
8748  data vganga / 0.20/ !
8749  data vgangb / 0.85/ !
8750  data vgangc / 0.15/ !
8751 
8752 ! OUTPUT/Verification: Snow Properties
8753 ! #wp data D__MAX / 4.00/ !
8754 
8755 
8756 ! 1. Metamorphoses dans les Strates
8757 ! Metamorphism
8758 ! ==============================
8759 
8760  frac_j = dt__sv / 86400. ! Time Step [Day]
8761 
8762 
8763 ! 1.1 Initialisation: teneur en eau liquide et gradient de temperature
8764 ! ------------------ liquid water content and temperature gradient
8765 
8766  DO isn=1,nsno
8767  DO ikl=1,knonv
8768  ro_dry(ikl,isn) = 1.e-3 *ro__sv(ikl,isn) ! Dry Density
8769  . *(1. -eta_sv(ikl,isn)) ! [g/cm3]
8770  etasno(ikl,isn) = 1.e-1 *dzsnsv(ikl,isn) ! Liquid Water
8771  . * ro__sv(ikl,isn) ! Content [g/cm2]
8772  . * eta_sv(ikl,isn) !
8773  END DO
8774  END DO
8775 
8776  DO isn=1,nsno
8777  DO ikl=1,knonv
8778 
8779  isnp = min(isn+1,isnosv(ikl))
8780 
8781  dtsndz = abs( (tsissv(ikl,isnp)-tsissv(ikl,isn-1)) *2.e-2
8782  . /max(((dzsnsv(ikl,isnp)+dzsnsv(ikl,isn) )
8783  . *( isnp - isn)
8784  . +(dzsnsv(ikl,isn )+dzsnsv(ikl,isn-1))),eps6))
8785 ! Factor 1.d-2 for Conversion K/m --> K/cm
8786 
8787 
8788 ! 1.2 Metamorphose humide
8789 ! Wet Snow Metamorphism
8790 ! ---------------------
8791 
8792  wet_ok = max(zer0,sign(un_1,eta_sv(ikl,isn)-eps6))
8793 
8794 
8795 ! Vitesse de diminution de la dendricite
8796 ! Rate of the dendricity decrease
8797 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8798  swater=1.d-1*ro__sv(ikl,isn)*eta_sv(ikl,isn)
8799  . /max(eps6,ro_dry(ikl,isn))
8800 ! . sWater:Water Content [%]
8801 ! 1.d-1= 1.d2(1->%) * 1.d-3(ro__SV*eta_SV:kg/m3->g/cm3)
8802 
8803  exp1wa= swater**nvdent1
8804  ddendr=max(exp1wa/nvdent2,vdent1*exp(vvap1/tf_sno))
8805 
8806 ! 1.2.1 Cas dendritique/dendritic Case
8807 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8808  ok__wd=max(zer0, !
8809  . sign(un_1,-g1snsv(ikl,isn) !
8810  . -eps6 )) !
8811 
8812  dendrn=-g1snsv(ikl,isn)/g1_dsv ! Normalized Dendricity (+)
8813  sphern= g2snsv(ikl,isn)/g1_dsv ! Normalized Sphericity
8814  dendrn= dendrn -ddendr *frac_j ! New Dendricity (+)
8815  sphern= sphern +ddendr *frac_j ! New Sphericity
8816 
8817  ok__de=max(zer0, ! IF 1.,
8818  . sign(un_1, dendrn ! NO change
8819  . -eps6 )) ! Dendr. -> Spheric
8820 
8821  g1__wd=ok__de * ( -dendrn*g1_dsv) ! Dendritic
8822  . +(1.-ok__de)* min(g1_dsv,sphern*g1_dsv) ! Dendr. -> Spheric
8823  g2__wd=ok__de * min(g1_dsv,sphern*g1_dsv) ! Spheric
8824  . +(1.-ok__de)*(adsdsv-min(sphern,vsphe1)) ! Spher. -> Size
8825 
8826 ! 1.2.2 Cas non dendritique non completement spherique
8827 ! Evolution de la Sphericite seulement.
8828 ! Non dendritic and not completely spheric Case
8829 ! Evolution of Sphericity only (not size)
8830 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8831  ok__ws=max(zer0, !
8832  . sign(un_1, g1_dsv !
8833  . -epsi5 !
8834  . -g1snsv(ikl,isn))) !
8835 
8836  sphern= g1snsv(ikl,isn)/g1_dsv
8837  sphern= sphern +ddendr *frac_j
8838  g1__ws= min(g1_dsv,sphern*g1_dsv)
8839 
8840 ! 1.2.3 Cas non dendritique et spherique / non dendritic and spheric
8841 ! Evolution de la Taille seulement / Evolution of Size only
8842 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8843  g2__ws = husi_0
8844  . *( husi_1
8845  . *(husi_2 *( g2snsv(ikl,isn)/husi_0)**3
8846  . +(vtail1 +vtail2 *exp1wa )*dt__sv))
8847  . ** husi_3
8848 
8849 
8850 ! 1.3 Metamorposes seches / Dry Metamorphism
8851 ! --------------------------------------
8852 
8853 
8854 ! 1.3.1 Calcul Metamorphose faible/low Gradient (0.00-0.05 deg/cm)
8855 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8856  oklowt=max(zer0, !
8857  . sign(un_1, vgrat1 !
8858  . -dtsndz )) !
8859 
8860  facvap=exp(vvap1/tsissv(ikl,isn))
8861 
8862 ! 1.3.1.1 Cas dendritique / dendritic Case
8863 
8864  ok_ldd=max(zer0, !
8865  . sign(un_1,-g1snsv(ikl,isn) !
8866  . -eps6 )) !
8867 
8868  dendrn=-g1snsv(ikl,isn) /g1_dsv
8869  sphern= g2snsv(ikl,isn) /g1_dsv
8870  dendrn= dendrn-vdent1*facvap*frac_j
8871  sphern= sphern+vsphe2*facvap*frac_j
8872 
8873  ok__de=max(zer0, ! IF 1.,
8874  . sign(un_1, dendrn ! NO change
8875  . -eps6 )) ! Dendr. -> Spheric
8876 
8877  g1_ldd= ok__de * ( -dendrn*g1_dsv) ! Dendritic
8878  . +(1.-ok__de)* min(g1_dsv,sphern*g1_dsv) ! Dendr. -> Spheric
8879  g2_ldd= ok__de * min(g1_dsv,sphern*g1_dsv) ! Spheric
8880  . +(1.-ok__de)*(adsdsv-min(sphern,vsphe1)) ! Spher. -> Size
8881 
8882 ! 1.3.1.2 Cas non dendritique / non dendritic Case
8883 
8884  sphern=g1snsv(ikl,isn)/g1_dsv
8885  diamgx=g2snsv(ikl,isn)*0.1
8886 
8887  istook=min( abs(istosv(ikl,isn)-
8888  . istdsv(1) ),1) ! zero if istoSV = 1
8889  diamok=max(zer0, sign(un_1,vdiam2-diamgx))
8890  no_big= istook+diamok
8891  no_big=min(no_big,un_1)
8892 
8893  dspher= vsphe2*facvap*frac_j !
8894  spher0= sphern+dspher ! small grains
8895  sphbig= sphern+dspher ! big grains
8896  . *exp(min(zer0,vdiam3-g2snsv(ikl,isn))) ! (history = 2 or 3)
8897  sphbig= min(vsphe3,sphbig) ! limited sphericity
8898  sphern= no_big * spher0
8899  . + (1.-no_big)* sphbig
8900 
8901  g1_lds= min(g1_dsv,sphern*g1_dsv)
8902 
8903 ! 1.3.2 Calcul Metamorphose Gradient Moyen/Moderate (0.05-0.15)
8904 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8905  ok_mdt=max(zer0, !
8906  . sign(un_1, vgrat2 !
8907  . -dtsndz)) !
8908  okmidt= ok_mdt *(1.-oklowt) !
8909  okhigt= (1. -ok_mdt) *(1.-oklowt) !
8910 
8911  facvap=vdent1*exp(vvap1/tsissv(ikl,isn))
8912  . * (1.e2 *dtsndz)**vvap2
8913 
8914 ! 1.3.2.1 cas dendritique / dendritic case.
8915 
8916  ok_mdd=max(zer0, !
8917  . sign(un_1,-g1snsv(ikl,isn) !
8918  . -eps6 )) !
8919 
8920  dendrn=-g1snsv(ikl,isn)/g1_dsv
8921  sphern= g2snsv(ikl,isn)/g1_dsv
8922  dendrn= dendrn - facvap*frac_j
8923  sphern= sphern - facvap*frac_j
8924 
8925  ok__de=max(zer0, ! IF 1.,
8926  . sign(un_1, dendrn ! NO change
8927  . -eps6 )) ! Dendr. -> Spheric
8928 
8929  g1_mdd= ok__de * ( -dendrn*g1_dsv) ! Dendritic
8930  . +(1.-ok__de)* max(zer0 ,sphern*g1_dsv) ! Dendr. -> Spheric
8931  g2_mdd= ok__de * max(zer0 ,sphern*g1_dsv) ! Spheric
8932  . +(1.-ok__de)*(adsdsv-max(sphern,zer0 )) ! Spher. -> Size
8933 
8934 ! 1.3.2.2 Cas non dendritique / non dendritic Case
8935 
8936  sphern=g1snsv(ikl,isn)/g1_dsv
8937  sphern= sphern-facvap*frac_j
8938  g1_mds=max(zer0,sphern*g1_dsv)
8939 
8940 ! 1.3.3 Calcul Metamorphose fort / high Gradient
8941 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8942  facvap=vdent1*exp(vvap1/tsissv(ikl,isn))
8943  . * (1.e2 *dtsndz)**vvap2
8944 
8945 ! 1.3.3.1 Cas dendritique / dendritic Case
8946 
8947  ok_hdd=max(zer0, !
8948  . sign(un_1,-g1snsv(ikl,isn) !
8949  . -eps6 )) !
8950 
8951  dendrn=-g1snsv(ikl,isn)/g1_dsv !
8952  sphern= g2snsv(ikl,isn)/g1_dsv !
8953  dendrn= dendrn - facvap*frac_j !
8954  sphern= sphern - facvap*frac_j ! Non dendritic
8955  ! and angular
8956  ok__de=max(zer0, ! IF 1.,
8957  . sign(un_1, dendrn ! NO change
8958  . -eps6 )) ! Dendr. -> Spheric
8959 
8960  g1_hdd= ok__de * ( -dendrn*g1_dsv) ! Dendritic
8961  . +(1.-ok__de)* max(zer0 ,sphern*g1_dsv) ! Dendr. -> Spheric
8962  g2_hdd= ok__de * max(zer0 ,sphern*g1_dsv) ! Spheric
8963  . +(1.-ok__de)*(adsdsv-max(sphern,zer0 )) ! Spher. -> Size
8964 
8965 ! 1.3.3.2 Cas non dendritique non completement anguleux.
8966 ! non dendritic and spericity gt. 0
8967 
8968  ok_hds=max(zer0, !
8969  . sign(un_1, g1snsv(ikl,isn) !
8970  . -eps6 )) !
8971 
8972  sphern= g1snsv(ikl,isn)/g1_dsv
8973  sphern= sphern - facvap*frac_j
8974  g1_hds= max(zer0,sphern*g1_dsv)
8975 
8976 ! 1.3.3.3 Cas non dendritique et anguleux
8977 ! dendritic and spericity = 0.
8978 
8979  t1__ok = max(zer0,sign(un_1,tsissv(ikl,isn)-tf_sno+vtang1))
8980  t2__ok = max(zer0,sign(un_1,tsissv(ikl,isn)-tf_sno+vtang2))
8981  t3_xok = max(zer0,sign(un_1,tsissv(ikl,isn)-tf_sno+vtang3))
8982  t3__ok = t3_xok * (1. - t2__ok)
8983  t3_nok = (1. - t3_xok) * (1. - t2__ok)
8984  ro1_ok = max(zer0,sign(un_1,vrang1-ro_dry(ikl,isn)))
8985  ro2_ok = max(zer0,sign(un_1,ro_dry(ikl,isn)-vrang2))
8986  dt1_ok = max(zer0,sign(un_1,vgang1-dtsndz ))
8987  dt2_ok = max(zer0,sign(un_1,vgang2-dtsndz ))
8988  dt3xok = max(zer0,sign(un_1,vgang3-dtsndz ))
8989  dt3_ok = dt3xok * (1. - dt2_ok)
8990  dt4xok = max(zer0,sign(un_1,vgang4-dtsndz ))
8991  dt4_ok = dt4xok * (1. - dt3_ok)
8992  . * (1. - dt2_ok)
8993  dt4nok = (1. - dt4xok) * (1. - dt3_ok)
8994  . * (1. - dt2_ok)
8995 
8996 ! Influence de la Temperature /Temperature Influence
8997 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8998  angsno =
8999  . t1__ok ! 11
9000  . *(t2__ok*(vtang4+vtang5*(tf_sno -tsissv(ikl,isn)) ! 12
9001  . /vtang6) !
9002  . +t3__ok*(vtang7-vtang8*(tf_sno-vtang2-tsissv(ikl,isn)) ! 13
9003  . /vtang9) !
9004  . +t3_nok*(vtanga-vtangb*(tf_sno-vtang3-tsissv(ikl,isn)) ! 14
9005  . /vtangc)) !
9006 
9007 ! Influence de la Masse Volumique /Density Influence
9008 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9009  . * ro1_ok
9010  . *( ro2_ok*(1. - (ro_dry(ikl,isn)-vrang2) !
9011  . /(vrang1-vrang2)) !
9012  . +1.-ro2_ok ) !
9013 
9014 ! Influence du Gradient de Temperature /Temperature Gradient Influence
9015 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9016  . *( dt1_ok*(dt2_ok*vgang5*(dtsndz-vgang6) ! 15
9017  . /(vgang2-vgang6) !
9018  . +dt3_ok*vgang7 ! 16
9019  . +dt4_ok*vgang9 ! 17
9020  . +dt4nok*vgangb ) ! 18
9021  . +1.-dt1_ok ) !
9022  . + ro1_ok
9023  . * dt1_ok*(dt3_ok*vgang8*(dtsndz-vgang2)
9024  . /(vgang3-vgang2)
9025  . +dt4_ok*vganga*(dtsndz-vgang3)
9026  . /(vgang4-vgang3)
9027  . +dt4nok*vgangc*(dtsndz-vgang4)
9028  . /(vgang1-vgang4))
9029 
9030  g2_hds = g2snsv(ikl,isn) + 1.d2 *angsno*vfi *frac_j
9031 
9032 
9033 ! New Properties
9034 ! --------------
9035 
9036  g1_bak = g1snsv(ikl,isn)
9037  g2_bak = g2snsv(ikl,isn)
9038 
9039  g1snsv(ikl,isn) = wet_ok * ( ok__wd *g1__wd ! 1
9040  . +(1.-ok__wd)* ok__ws *g1__ws ! 2
9041  . +(1.-ok__wd)*(1.-ok__ws)*g1_bak) ! 3
9042  . +(1. - wet_ok) !
9043  . *( oklowt *( ok_ldd *g1_ldd ! 4
9044  . +(1.-ok_ldd) *g1_lds) ! 5
9045  . + okmidt *( ok_mdd *g1_mdd ! 6
9046  . +(1.-ok_mdd) *g1_mds) ! 7
9047  . + okhigt *( ok_hdd *g1_hdd ! 8
9048  . +(1.-ok_hdd)* ok_hds *g1_hds ! 9
9049  . +(1.-ok_hdd)*(1.-ok_hds)*g1_bak)) ! 10
9050 
9051  g2snsv(ikl,isn) = wet_ok * ( ok__wd *g2__wd ! 1
9052  . +(1.-ok__wd)* ok__ws *g2_bak ! 2
9053  . +(1.-ok__wd)*(1.-ok__ws)*g2__ws) ! 3
9054  . +(1. - wet_ok) !
9055  . *( oklowt *( ok_ldd *g2_ldd ! 4
9056  . +(1.-ok_ldd) *g2_bak) ! 5
9057  . + okmidt *( ok_mdd *g2_mdd ! 6
9058  . +(1.-ok_mdd) *g2_bak) ! 7
9059  . + okhigt *( ok_hdd *g2_hdd ! 8
9060  . +(1.-ok_hdd)* ok_hds *g2_bak ! 9
9061  . +(1.-ok_hdd)*(1.-ok_hds)*g2_hds)) ! 10
9062 
9063 ! OUTPUT/Verification: Snow Layers Agregation: Properties
9064 ! #vp G_curr( 1) = Wet_OK * OK__wd
9065 ! #vp G_curr( 2) = Wet_OK *(1.-OK__wd)* OK__ws
9066 ! #vp G_curr( 3) = Wet_OK *(1.-OK__wd)*(1.-OK__ws)
9067 ! #vp G_curr( 4) = (1.-Wet_OK)* OKlowT * OK_ldd
9068 ! #vp G_curr( 5) = (1.-Wet_OK)* OKlowT *(1.-OK_ldd)
9069 ! #vp G_curr( 6) = (1.-Wet_OK)* OKmidT * OK_mdd
9070 ! #vp G_curr( 7) = (1.-Wet_OK)* OKmidT *(1.-OK_mdd)
9071 ! #vp G_curr( 8) = (1.-Wet_OK)* OKhigT * OK_hdd
9072 ! #vp G_curr( 9) = (1.-Wet_OK)* OKhigT *(1.-OK_hdd)* OK_hds
9073 ! #vp G_curr(10) = (1.-Wet_OK)* OKhigT *(1.-OK_hdd)*(1.-OK_hds)
9074 ! #vp G_curr(11) = T1__OK * G_curr(10)
9075 ! #vp G_curr(12) = T2__OK * G_curr(10)
9076 ! #vp G_curr(13) = T3__OK * G_curr(10)
9077 ! #vp G_curr(14) = T3_nOK * G_curr(10)
9078 ! #vp G_curr(15) = ro1_OK* dT1_OK * dT2_OK * G_curr(10)
9079 ! #vp G_curr(16) = ro1_OK* dT1_OK * dT3_OK * G_curr(10)
9080 ! #vp G_curr(17) = ro1_OK* dT1_OK * dT4_OK * G_curr(10)
9081 ! #vp G_curr(18) = ro1_OK* dT1_OK * dT4nOK * G_curr(10)
9082 
9083 ! #vp Gcases( 1) = max(Gcases( 1),G_curr( 1))
9084 ! #vp Gcases( 2) = max(Gcases( 2),G_curr( 2))
9085 ! #vp Gcases( 3) = max(Gcases( 3),G_curr( 3))
9086 ! #vp Gcases( 4) = max(Gcases( 4),G_curr( 4))
9087 ! #vp Gcases( 5) = max(Gcases( 5),G_curr( 5))
9088 ! #vp Gcases( 6) = max(Gcases( 6),G_curr( 6))
9089 ! #vp Gcases( 7) = max(Gcases( 7),G_curr( 7))
9090 ! #vp Gcases( 8) = max(Gcases( 8),G_curr( 8))
9091 ! #vp Gcases( 9) = max(Gcases( 9),G_curr( 9))
9092 ! #vp Gcases(10) = max(Gcases(10),G_curr(10))
9093 ! #vp Gcases(11) = max(Gcases(11),G_curr(11))
9094 ! #vp Gcases(12) = max(Gcases(12),G_curr(12))
9095 ! #vp Gcases(13) = max(Gcases(13),G_curr(13))
9096 ! #vp Gcases(14) = max(Gcases(14),G_curr(14))
9097 ! #vp Gcases(15) = max(Gcases(15),G_curr(15))
9098 ! #vp Gcases(16) = max(Gcases(16),G_curr(16))
9099 ! #vp Gcases(17) = max(Gcases(17),G_curr(17))
9100 ! #vp Gcases(18) = max(Gcases(18),G_curr(18))
9101 
9102 ! #vp IF (isn .le. isnoSV(ikl))
9103 ! #vp. write(47,471)isn ,isnoSV(ikl) ,
9104 ! #vp. TsisSV(ikl,isn),ro__SV(ikl,isn),eta_SV(ikl,isn),
9105 ! #vp. G1_bak ,G2_bak ,istoSV(ikl,isn),
9106 ! #vp. dTsndz,
9107 ! #vp. ( k ,k=1,18),
9108 ! #vp. (G_curr(k),k=1,18),
9109 ! #vp. (Gcases(k),k=1,18),
9110 ! #vp. Wet_OK,OK__wd,G1__wd,G2__wd,
9111 ! #vp. 1.-OK__wd,OK__ws,G1__ws,1.-OK__ws,G2__ws,
9112 ! #vp. 1.-Wet_OK,OKlowT,OK_ldd,G1_ldd, G2_ldd,
9113 ! #vp. 1.-OK_ldd,G1_lds,
9114 ! #vp. OKmidT,OK_mdd,G1_mdd, G1_mdd,
9115 ! #vp. 1.-OK_mdd,G1_mds,
9116 ! #vp. OKhigT,OK_hdd,G1_hdd, G2_hdd,
9117 ! #vp. 1.-OK_hdd,OK_hds, G1_hds,
9118 ! #vp. 1.-OK_hds,G2_hds,
9119 ! #vp. G1snSV(ikl,isn),
9120 ! #vp. G2snSV(ikl,isn)
9121  471 format(
9122  . /,' isn = ',i4,6x,'(MAX.:',i4,')',
9123  . /,' T = ',f8.3,
9124  . /,' ro = ',f8.3,
9125  . /,' eta = ',f8.3,
9126  . /,' G1 = ',f8.3,
9127  . /,' G2 = ',f8.3,
9128  . /,' Histor. = ',i4 ,
9129  . /,' Grad(T) = ',f8.3,' ' ,18i3 ,
9130  ./, ' Current Case: ',18f3.0,
9131  ./, ' Cases performed: ',18f3.0,
9132  ./,' ------------------------------------------------------------',
9133  . '-----------+------------------+------------------+',
9134  ./,' Status ',
9135  . ' | G1 | G2 |',
9136  ./,' ------------------------------------------------------------',
9137  . '-----------+------------------+------------------+',
9138  ./,' Wet_OK: ',f8.3,' OK__wd: ',f8.3,' ',
9139  . ' | G1__wd: ',f8.3,' | G2__wd: ',f8.5,' |',
9140  ./,' 1.-OK__wd: ',f8.3,' OK__ws',
9141  . ': ',f8.3,' | G1__ws: ',f8.3,' | |',
9142  ./,' 1.-OK__ws',
9143  . ': ',f8.3,' | | G2__ws: ',f8.5,' |',
9144  ./,' 1.-Wet_OK: ',f8.3,' OKlowT: ',f8.3,' OK_ldd: ',f8.3,' ',
9145  . ' | G1_ldd: ',f8.3,' | G2_ldd: ',f8.5,' |',
9146  ./,' 1.-OK_ldd: ',f8.3,' ',
9147  . ' | G1_lds: ',f8.3,' | |',
9148  ./,' OKmidT: ',f8.3,' OK_mdd: ',f8.3,' ',
9149  . ' | G1_mdd: ',f8.3,' | G2_mdd: ',f8.5,' |',
9150  ./,' 1.-OK_mdd: ',f8.3,' ',
9151  . ' | G1_mds: ',f8.3,' | |',
9152  ./,' OKhigT: ',f8.3,' OK_hdd: ',f8.3,' ',
9153  . ' | G1_hdd: ',f8.3,' | G2_hdd: ',f8.5,' |',
9154  ./,' 1.-OK_hdd: ',f8.3,' OK_hds',
9155  . ': ',f8.3,' | G1_hds: ',f8.3,' | |',
9156  ./,' 1.-OK_hds',
9157  . ': ',f8.3,' | | G2_hds: ',f8.5,' |',
9158  ./,' ------------------------------------------------------------',
9159  . '-----------+------------------+------------------+',
9160  ./,' ',
9161  . ' | ',f8.3,' | ',f8.5,' |',
9162  ./,' ------------------------------------------------------------',
9163  . '-----------+------------------+------------------+')
9164  END DO
9165  END DO
9166 
9167 
9168 ! 2. Mise a Jour Variables Historiques (Cas non dendritique)
9169 ! Update of the historical Variables
9170 ! =======================================================
9171 
9172  IF (vector) THEN
9173  DO isn=1,nsno
9174  DO ikl=1,knonv
9175 
9176  sphrok = max(zer0,sign(un_1, g1snsv(ikl,isn)))
9177  h1a_ok = max(zer0,sign(un_1,vsphe4-g1snsv(ikl,isn)))
9178  h1b_ok = 1 - min(1 , istosv(ikl,isn))
9179  h1__ok = h1a_ok*h1b_ok
9180  h23aok = max(zer0,sign(un_1,vsphe4-g1_dsv
9181  . +g1snsv(ikl,isn)))
9182  h23bok = max(zer0,sign(un_1,etasno(ikl,isn)
9183  . /max(eps6,dzsnsv(ikl,isn))
9184  . -vtelv1 ))
9185  h23_ok = h23aok*h23bok
9186  h2__ok = 1 - min(1 , istosv(ikl,isn))
9187  h3__ok = 1 - min(1 , abs(istosv(ikl,isn)-istdsv(1)))
9188  h45_ok = max(zer0,sign(un_1,tf_sno-tsissv(ikl,isn)+eps6))
9189  h4__ok = 1 - min(1 , abs(istosv(ikl,isn)-istdsv(2)))
9190  h5__ok = 1 - min(1 , abs(istosv(ikl,isn)-istdsv(3)))
9191 
9192  hisupd =
9193  . sphrok*(h1__ok *istdsv(1)
9194  . +(1.-h1__ok)* h23_ok *(h2__ok*istdsv(2)
9195  . +h3__ok*istdsv(3))
9196  . +(1.-h1__ok)*(1.-h23_ok) *h45_ok*(h4__ok*istdsv(4)
9197  . +h5__ok*istdsv(5)))
9198  istosv(ikl,isn) = hisupd +
9199  . (1.-min(un_1,hisupd)) *istosv(ikl,isn)
9200  END DO
9201  END DO
9202  ELSE
9203 
9204 
9205 ! 2. Mise a Jour Variables Historiques (Cas non dendritique)
9206 ! Update of the historical Variables
9207 ! =======================================================
9208 
9209  DO ikl=1,knonv
9210  DO isn=iicesv(ikl),isnosv(ikl)
9211  IF (g1snsv(ikl,isn).ge.0.) THEN
9212  IF(g1snsv(ikl,isn).lt.vsphe4.and.istosv(ikl,isn).eq.0) THEN
9213  istosv(ikl,isn)=istdsv(1)
9214  ELSEIF(g1_dsv-g1snsv(ikl,isn) .lt.vsphe4.and.
9215  . etasno(ikl,isn)/dzsnsv(ikl,isn).gt.vtelv1) THEN
9216  IF (istosv(ikl,isn).eq.0)
9217  . istosv(ikl,isn)= istdsv(2)
9218  IF (istosv(ikl,isn).eq.istdsv(1))
9219  . istosv(ikl,isn)= istdsv(3)
9220  ELSEIF(tsissv(ikl,isn).lt.tf_sno) THEN
9221  IF (istosv(ikl,isn).eq.istdsv(2))
9222  . istosv(ikl,isn)= istdsv(4)
9223  IF (istosv(ikl,isn).eq.istdsv(3))
9224  . istosv(ikl,isn)= istdsv(5)
9225  END IF
9226  END IF
9227  END DO
9228  END DO
9229  END IF
9230 
9231 
9232 ! 3. Tassement mecanique /mechanical Settlement
9233 ! ==========================================
9234 
9235  DO ikl=1,knonv
9236  snmass(ikl) = 0.
9237  END DO
9238  DO isn=nsno,1,-1
9239  DO ikl=1,knonv
9240  dsnmas = 100.*dzsnsv(ikl,isn)*ro_dry(ikl,isn)
9241  snmass(ikl)= snmass(ikl)+0.5*dsnmas
9242  viscsn = vvisc1 *vvisc2
9243  . *exp(vvisc3 *ro_dry(ikl,isn)
9244  . +vvisc4*abs(tf_sno-tsissv(ikl,isn)))
9245  . *ro_dry(ikl,isn)/rovisc
9246 
9247 ! Changement de Viscosite si Teneur en Eau liquide
9248 ! Change of the Viscosity if liquid Water Content
9249 ! ------------------------------------------------
9250 
9251  ok_liq = max(zer0,sign(un_1,etasno(ikl,isn)-eps6))
9252  ok_ang = max(zer0,sign(un_1,vgran6-g1snsv(ikl,isn)))
9253  . *(1-min(1 , abs(istosv(ikl,isn)-istdsv(1))))
9254 
9255 ! OUTPUT/Verification: Snow Properties
9256 ! #wp IF (G1snSV(ikl,isn).gt.0..AND.G1snSV(ikl,isn).lt.vsphe4
9257 ! #wp. .AND.istoSV(ikl,isn).eq. 0)
9258 ! #wp. THEN
9259 ! #wp write(6,*) ikl,isn,' G1,G2,hist,OK_Ang ',
9260 ! #wp. G1snSV(ikl,isn), G2snSV(ikl,isn),istoSV(ikl,isn),OK_Ang
9261 ! #wp stop "Grains anguleux mal d?finis"
9262 ! #wp END IF
9263 
9264  okxliq = max(zer0,sign(un_1,vtelv1-etasno(ikl,isn)
9265  . /max(eps6,dzsnsv(ikl,isn))))
9266  . * max(0 ,sign(1 ,istosv(ikl,isn)
9267  . -istdsv(1) ))
9268  viscsn =
9269  . viscsn*( ok_liq/(vvisc5+vvisc6*etasno(ikl,isn)
9270  . /max(eps6,dzsnsv(ikl,isn)))
9271  . +(1.-ok_liq) )
9272  . *( ok_ang*exp(min(adsdsv,g2snsv(ikl,isn)-vdiam4))
9273  . +(1.-ok_ang) )
9274  . *( okxliq* vvisc7
9275  . +(1.-okxliq) )
9276 
9277 
9278 ! Calcul nouvelle Epaisseur / new Thickness
9279 ! -----------------------------------------
9280 
9281  dzsnew =
9282  . dzsnsv(ikl,isn)
9283  . *max(vdz3,
9284  . (un_1-dt__sv*max(snmass(ikl)*cos(slopsv(ikl)),un_1)
9285  . /max(viscsn ,eps6)))
9286  rosnew = ro__sv(ikl,isn) *dzsnsv(ikl,isn)
9287  . /max(eps6,dzsnew)
9288  rosmax = 1.d0 /( (1.d0 -eta_sv(ikl,isn)) /rhoice
9289  . + eta_sv(ikl,isn) /rhowat)
9290  rosnew = min(rosnew ,rosmax)
9291  dzsnsv(ikl,isn)= dzsnsv(ikl,isn) *ro__sv(ikl,isn)
9292  . /max(eps6,rosnew)
9293  ro__sv(ikl,isn)= rosnew
9294  ro_dry(ikl,isn)= ro__sv(ikl,isn)*(1.-eta_sv(ikl,isn))*1.e-3
9295 ! ro_dry: Dry Density (g/cm3)
9296 
9297  snmass(ikl) = snmass(ikl)+dsnmas*0.5
9298  END DO
9299  END DO
9300 
9301 
9302 ! OUTPUT/Verification: Snow Properties
9303 ! #wp DO ikl = 1,knonv
9304 ! #wp DO isn = 1,isnoSV(ikl)
9305 ! #wp IF (G1snSV(ikl,isn).gt.0. .AND. G2snSV(ikl,isn).gt.D__MAX) THEN
9306 ! #wp write(6,6600) G1snSV(ikl,isn),G2snSV(ikl,isn),ikl,isn
9307  6600 format(/,'WARNING in _GSn: G1,G2 =',2f9.3,' (ikl,isn) =',2i4)
9308 ! #wp D__MAX = G2snSV(ikl,isn)
9309 ! #wp END IF
9310 ! #wp IF ( G2snSV(ikl,isn).lt.0. ) THEN
9311 ! #wp write(6,6601) G1snSV(ikl,isn),G2snSV(ikl,isn),ikl,isn
9312  6601 format(/,'ERROR 1 in _GSn: G1,G2 =',2f9.3,' (ikl,isn) =',2i4)
9313 ! #wp STOP
9314 ! #wp END IF
9315 ! #wp IF (G1snSV(ikl,isn).gt.G1_dSV+eps6 ) THEN
9316 ! #wp write(6,6602) G1snSV(ikl,isn),G2snSV(ikl,isn),ikl,isn
9317  6602 format(/,'ERROR 2 in _GSn: G1,G2 =',2f9.3,' (ikl,isn) =',2i4)
9318 ! #wp STOP
9319 ! #wp END IF
9320 ! #wp IF (G1snSV(ikl,isn).lt.0. .AND.
9321 ! #wp. G2snSV(ikl,isn).gt.G1_dSV+eps6 ) THEN
9322 ! #wp write(6,6603) G1snSV(ikl,isn),G2snSV(ikl,isn),ikl,isn
9323  6603 format(/,'ERROR 3 in _GSn: G1,G2 =',2f9.3,' (ikl,isn) =',2i4)
9324 ! #wp STOP
9325 ! #wp END IF
9326 ! #wp END DO
9327 ! #wp END DO
9328 
9329  return
9330  end
9331 
9332 
9333  subroutine sisvat_qso
9334 ! #m0. (Wats_0,Wats_1,Wats_d)
9335 
9336 !--------------------------------------------------------------------------+
9337 ! MAR SISVAT_qSo Sat 12-Feb-2012 MAR |
9338 ! SubRoutine SISVAT_qSo computes the Soil Water Balance |
9339 !--------------------------------------------------------------------------+
9340 ! |
9341 ! PARAMETERS: klonv: Total Number of columns = |
9342 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
9343 ! X Number of Mosaic Cell per grid box |
9344 ! |
9345 ! INPUT: isnoSV = total Nb of Ice/Snow Layers |
9346 ! ^^^^^ isotSV = 0,...,11: Soil Type |
9347 ! 0: Water, Solid or Liquid |
9348 ! |
9349 ! INPUT: rhT_SV : SBL Top Air Density [kg/m3] |
9350 ! ^^^^^ drr_SV : Rain Intensity [kg/m2/s] |
9351 ! LSdzsv : Vertical Discretization Factor [-] |
9352 ! = 1. Soil |
9353 ! = 1000. Ocean |
9354 ! dt__SV : Time Step [s] |
9355 ! |
9356 ! Lx_H2O : Latent Heat of Vaporization/Sublimation [J/kg] |
9357 ! HLs_sv : Latent Heat Flux [W/m2] |
9358 ! Rootsv : Root Water Pump [kg/m2/s] |
9359 ! |
9360 ! INPUT / eta_SV : Water Content [m3/m3] |
9361 ! OUTPUT: Khydsv : Soil Hydraulic Conductivity [m/s] |
9362 ! ^^^^^^ |
9363 ! |
9364 ! OUTPUT: RnofSV : RunOFF Intensity [kg/m2/s] |
9365 ! ^^^^^^ Wats_0 : Soil Water, before Forcing [mm] |
9366 ! Wats_1 : Soil Water, after Forcing [mm] |
9367 ! Wats_d : Soil Water Forcing [mm] |
9368 ! |
9369 ! Internal Variables: |
9370 ! ^^^^^^^^^^^^^^^^^^ |
9371 ! z_Bump : (Partly)Bumpy Layers Height [m] |
9372 ! z0Bump : Bumpy Layers Height [m] |
9373 ! dzBump : Lowest Bumpy Layer: [m] |
9374 ! etBump : Bumps Layer Averaged Humidity [m3/m3] |
9375 ! etaMid : Layer Interface's Humidity [m3/m3] |
9376 ! eta__f : Layer Humidity (Water Front)[m3/m3] |
9377 ! Dhyd_f : Soil Hydraulic Diffusivity (Water Front) [m2/s] |
9378 ! Dhydif : Soil Hydraulic Diffusivity [m2/s] |
9379 ! WgFlow : Water gravitational Flux [kg/m2/s] |
9380 ! Wg_MAX : Water MAXIMUM gravitational Flux [kg/m2/s] |
9381 ! SatRat : Water Saturation Flux [kg/m2/s] |
9382 ! WExces : Water Saturation Excess Flux [kg/m2/s] |
9383 ! Dhydtz : Dhydif * dt / dz [m] |
9384 ! FreeDr : Free Drainage Fraction [-] |
9385 ! Elem_A : A Diagonal Coefficient |
9386 ! Elem_C : C Diagonal Coefficient |
9387 ! Diag_A : A Diagonal |
9388 ! Diag_B : B Diagonal |
9389 ! Diag_C : C Diagonal |
9390 ! Term_D : Independant Term |
9391 ! Aux__P : P Auxiliary Variable |
9392 ! Aux__Q : Q Auxiliary Variable |
9393 ! |
9394 ! TUNING PARAMETER: |
9395 ! ^^^^^^^^^^^^^^^^ |
9396 ! z0soil : Soil Surface averaged Bumps Height [m] |
9397 ! |
9398 ! METHOD: NO Skin Surface Humidity |
9399 ! ^^^^^^ Semi-Implicit Crank Nicholson Scheme |
9400 ! (Partial) free Drainage, Water Bodies excepted (Lakes, Sea) |
9401 ! |
9402 ! |
9403 ! Preprocessing Option: |
9404 ! ^^^^^^^^^^^^^^^^^^^^^ |
9405 ! #GF: Saturation Front |
9406 ! #GH: Saturation Front allows Horton Runoff |
9407 ! #GA: Soil Humidity Geometric Average |
9408 ! #BP: Parameterization of Terrain Bumps |
9409 ! |
9410 ! |
9411 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
9412 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
9413 ! FILE | CONTENT |
9414 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
9415 ! # SISVAT_iii_jjj_n | #m0: OUTPUT/Verification: H2O Conservation |
9416 ! # SISVAT_iii_jjj_n | #m1: OUTPUT/Verification: * Mass Conservation |
9417 ! # stdout | #mw: OUTPUT/Verification: H2O Conservation |
9418 ! | unit 6, SubRoutine SISVAT_qSo **ONLY** |
9419 ! # SISVAT_qSo.vw | #vw: OUTPUT/Verif+Detail: H2O Conservation |
9420 ! | unit 42, SubRoutine SISVAT_qSo **ONLY** |
9421 ! # stdout | #sg: OUTPUT/Verification: Gravitational Front |
9422 ! | unit 6, SubRoutine SISVAT_qSo **ONLY** |
9423 ! |
9424 ! REMARQUE: Inclure possibilite de creer mare sur bedrock impermeable |
9425 ! ^^^^^^^^ |
9426 !--------------------------------------------------------------------------+
9427 
9428 
9429 
9430 
9431 
9432 ! Global Variables
9433 ! ================
9434 
9435  USE phy_sv
9436 
9437  USE var_sv
9438  USE vardsv
9439  USE var0sv
9440 
9441  USE varxsv
9442  USE varysv
9443 
9444 
9445  IMPLICIT NONE
9446 
9447 ! OUTPUT
9448 ! ------
9449 
9450 ! OUTPUT/Verification: H2O Conservation
9451 ! #m0 real Wats_0(klonv) ! Soil Water, before forcing
9452 ! #m0 real Wats_1(klonv) ! Soil Water, after forcing
9453 ! #m0 real Wats_d(klonv) ! Soil Water forcing
9454 
9455 
9456 ! Internal Variables
9457 ! ==================
9458 
9459  integer isl ,jsl ,ist ,ikl !
9460  integer ikm ,ikp ,ik0 ,ik1 !
9461  integer ist__s,ist__w ! Soil/Water Body Identifier
9462 c #BP real z0soil ! Soil Surface Bumps Height [m]
9463 c #BP real z_Bump !(Partly)Bumpy Layers Height [m]
9464 c #BP real z0Bump ! Bumpy Layers Height [m]
9465 c #BP real dzBump ! Lowest Bumpy Layer:
9466 
9467 c #BP real etBump(klonv) ! Bumps Layer Averaged Humidity
9468  real etaMid ! Layer Interface's Humidity
9469  real Dhydif ! Hydraulic Diffusivity [m2/s]
9470  real eta__f ! Water Front Soil Water Content
9471  real Khyd_f ! Water Front Hydraulic Conduct.
9472  real Khydav ! Hydraulic Conductivity [m/s]
9473  real WgFlow ! Water gravitat. Flux [kg/m2/s]
9474  real Wg_MAX ! Water MAX.grav. Flux [kg/m2/s]
9475  real SatRat ! Saturation Flux [kg/m2/s]
9476  real WExces ! Saturat. Excess Flux [kg/m2/s]
9477  real SoRnOF(klonv) ! Soil Run OFF
9478  real Dhydtz(klonv,-nsol:0) ! Dhydif * dt / dz [m]
9479  real Elem_A,Elem_B,Elem_C ! Diagonal Coefficients
9480  real Diag_A(klonv,-nsol:0) ! A Diagonal
9481  real Diag_B(klonv,-nsol:0) ! B Diagonal
9482  real Diag_C(klonv,-nsol:0) ! C Diagonal
9483  real Term_D(klonv,-nsol:0) ! Independant Term
9484  real Aux__P(klonv,-nsol:0) ! P Auxiliary Variable
9485  real Aux__Q(klonv,-nsol:0) ! Q Auxiliary Variable
9486  real etaaux(klonv,-nsol:-nsol+1) ! Soil Water Content [m3/m3]
9487  real FreeDr ! Free Drainage Fraction (actual)
9488  real FreeD0 ! Free Drainage Fraction (1=Full)
9489 
9490 ! OUTPUT/Verification: H2O Conservation
9491 ! #mw logical mwopen ! IO Switch
9492 ! #mw common/Sm_qSo_L/mwopen !
9493 ! #mw real hourwr,timewr !
9494 ! #mw common/Sm_qSo_R/timewr !
9495 ! #mw real Evapor(klonv) !
9496 
9497 
9498 ! Internal DATA
9499 ! =============
9500 
9501 c #BP data z0soil/0.020/ ! Soil Surface Bumps Height [m]
9502  data freed0/1.000/ ! Free Drainage Fraction (1=Full)
9503 
9504 
9505 ! OUTPUT/Verification: H2O Conservation: Water Budget (IN)
9506 ! #m0 DO ikl=1,knonv
9507 ! #m0 Wats_0(ikl) = 0. ! OLD RunOFF Contrib.
9508 ! #m0 Wats_d(ikl) = drr_SV(ikl) ! Water Surface Forc.
9509 ! #m0 END DO
9510 
9511 ! #m0 isl= -nsol
9512 ! #m0 DO ikl=1,knonv
9513 ! #m0 Wats_0(ikl) = Wats_0(ikl)
9514 ! #m0. + rhoWat *( eta_SV(ikl,isl) *dz78SV(isl)
9515 ! #m0. + eta_SV(ikl,isl+1) *dz_8SV(isl) ) * LSdzsv(ikl)
9516 ! #m0 END DO
9517 
9518 ! #m0 DO isl= -nsol+1,-1
9519 ! #m0 DO ikl=1,knonv
9520 ! #m0 Wats_0(ikl) = Wats_0(ikl)
9521 ! #m0. + rhoWat *( eta_SV(ikl,isl) *dz34SV(isl)
9522 ! #m0. +(eta_SV(ikl,isl-1)
9523 ! #m0. +eta_SV(ikl,isl+1))*dz_8SV(isl) ) * LSdzsv(ikl)
9524 ! #m0 END DO
9525 ! #m0 END DO
9526 
9527 ! #m0 isl= 0
9528 ! #m0 DO ikl=1,knonv
9529 ! #m0 Wats_0(ikl) = Wats_0(ikl)
9530 ! #m0. + rhoWat *( eta_SV(ikl,isl) *dz78SV(isl)
9531 ! #m0. + eta_SV(ikl,isl-1) *dz_8SV(isl) ) * LSdzsv(ikl)
9532 ! #m0 END DO
9533 
9534 
9535 ! Gravitational Flow
9536 ! ==================
9537 
9538 ! . METHOD: Surface Water Flux saturates successively the soil layers
9539 ! ^^^^^^ from up to below, but is limited by infiltration capacity.
9540 ! Hydraulic Conductivity again contributes after this step,
9541 ! not redundantly because of a constant (saturated) profile.
9542 
9543 ! Flux Limitor
9544 ! ^^^^^^^^^^^^^
9545  isl=0
9546  DO ikl=1,knonv
9547  ist = isotsv(ikl) ! Soil Type
9548  ist__s = min(ist, 1) ! 1 => Soil
9549  ist__w = 1 - ist__s ! 1 => Water Body
9550  dhydif = s1__sv(ist)
9551  . *max(eps6,eta_sv(ikl,isl)) ! Hydraulic Diffusivity
9552  . **(bchdsv(ist)+2.) ! DR97, Eqn.(3.36)
9553  dhydif = ist__s * dhydif !
9554  . + ist__w * vk_dsv ! Water Bodies
9555 
9556  khydav = ist__s * ks_dsv(ist) ! DR97 Assumption
9557  . + ist__w * vk_dsv ! Water Bodies
9558 
9559  wg_max = rhowat *dhydif ! MAXimum Infiltration
9560  . *(etadsv(ist)-eta_sv(ikl,isl)) ! Rate
9561  . /(dzavsv(isl)*lsdzsv(ikl) ) !
9562  . + rhowat *khydav !
9563 
9564 ! Surface Horton RunOFF
9565 ! ^^^^^^^^^^^^^^^^^^^^^
9566  sornof(ikl) =
9567  . max(zer0,drr_sv(ikl)-wg_max)
9568  drr_sv(ikl) = drr_sv(ikl)-sornof(ikl)
9569  END DO
9570 
9571 c #GF DO isl=0,-nsol,-1
9572 c #GF DO ikl=1,knonv
9573 c #GF ist = isotSV(ikl) ! Soil Type
9574 c #GF ist__s = min(ist, 1) ! 1 => Soil
9575 c #GF ist__w = 1 - ist__s ! 1 => Water Body
9576 
9577 ! Water Diffusion
9578 ! ^^^^^^^^^^^^^^^
9579 c #GF Dhydif = s1__SV(ist)
9580 c #GF. *max(eps6,eta_SV(ikl,isl)) ! Hydraulic Diffusivity
9581 c #GF. **(bCHdSV(ist)+2.) ! DR97, Eqn.(3.36)
9582 c #GF Dhydif = ist__s * Dhydif !
9583 c #GF. + ist__w * vK_dSV ! Water Bodies
9584 
9585 ! Water Conduction (without Horton Runoff)
9586 ! ^^^^^^^^^^^^^^^^
9587 c #GF Khyd_f = Ks_dSV(ist)
9588 ! Uses saturated K ==> Horton Runoff ~0 !
9589 
9590 ! Water Conduction (with Horton Runoff)
9591 ! ^^^^^^^^^^^^^^^^
9592 c #GH ik0 = nkhy *eta_SV(ikl,isl)
9593 c #GH. /etadSV(ist)
9594 c #GH eta__f = 1.
9595 c #GH. -aKdtSV(ist,ik0)/(2. *dzAvSV(isl)
9596 c #GH. *LSdzsv(ikl))
9597 c #GH eta__f = max(eps_21,eta__f)
9598 c #GH eta__f = min(etadSV(ist),
9599 c #GH. eta_SV(ikl,isl) +
9600 c #GH. (aKdtSV(ist,ik0) *eta_SV(ikl,isl)
9601 c #GH. +bKdtSV(ist,ik0)) /(dzAvSV(isl)
9602 c #GH. *LSdzsv(ikl))
9603 c #GH. / eta__f )
9604 
9605 c #GH eta__f = .5*(eta_SV(ikl,isl)
9606 c #GH. +eta__f)
9607 ! eta__f = eta_SV(ikl,isl) ! Another Possibility
9608 
9609 c #GH ik0 = nkhy *eta__f
9610 c #GH. /etadSV(ist)
9611 c #GH Khyd_f =
9612 c #GH. (aKdtSV(ist,ik0) *eta__f
9613 c #GH. +bKdtSV(ist,ik0)) /dt__SV
9614 
9615 c #GF Khydav = ist__s * Khyd_f ! DR97 Assumption
9616 c #GF. + ist__w * vK_dSV ! Water Bodies
9617 
9618 ! Gravitational Flow
9619 ! ^^^^^^^^^^^^^^^^^^
9620 c #GF Wg_MAX = ! MAXimum Infiltration
9621 c #GF. rhoWat *Dhydif ! Rate
9622 c #GF. *(etadSV(ist)-eta_SV(ikl,isl)) !
9623 c #GF. /(dzAvSV(isl)*LSdzsv(ikl) ) !
9624 c #GF. + rhoWat *Khydav !
9625 
9626 ! OUTPUT/Verification: Gravitational Front
9627 ! #sg write(6,6001) isl,drr_SV(ikl)*3.6e3,Wg_MAX *3.6e3
9628  6001 format(i3,' vRain ,Wg_MAX ',2e12.3,' mm/hr')
9629 
9630 c #GF WgFlow = min(Wg_MAX,drr_SV(ikl)) ! Infiltration Rate
9631 c #GF WExces = max(zer0 ,drr_SV(ikl)-WgFlow) ! Water Excess => RunOff
9632 
9633 ! OUTPUT/Verification: Gravitational Front
9634 ! #sg write(6,6002) WgFlow *3.6e3,WExces *3.6e3
9635  6002 format(3x,' WgFlow,WExces ',2e12.3,' mm/hr')
9636 
9637 c #GF SoRnOF(ikl) = SoRnOF(ikl)+WExces !
9638 c #GF drr_SV(ikl) = WgFlow !
9639 
9640 ! OUTPUT/Verification: Gravitational Front
9641 ! #sg write(6,6003) SoRnOF(ikl)*3.6e3,drr_SV(ikl)*3.6e3
9642  6003 format(3x,' SoRnOF,drr_SV ',2e12.3,' mm/hr')
9643 
9644 c #GF SatRat =(etadSV(ist)-eta_SV(ikl,isl)) ! Saturation Rate
9645 c #GF. *rhoWat *dzAvSV(isl) !
9646 c #GF. *LSdzsv(ikl)/dt__SV !
9647 c #GF SatRat = min(SatRat,drr_SV(ikl)) !
9648 c #GF drr_SV(ikl) = drr_SV(ikl)-SatRat ! Water Flux for Below
9649 
9650 ! OUTPUT/Verification: Gravitational Front
9651 ! #sg write(6,6004) SatRat *3.6e3,drr_SV(ikl)*3.6e3
9652  6004 format(3x,' SatRat,drr_SV ',2e12.3,' mm/hr')
9653 ! #sg write(6,6005) eta_SV(ikl,isl)*1.e3
9654 
9655 c #GF eta_SV(ikl,isl) = eta_SV(ikl,isl) ! Saturation
9656 c #GF. +SatRat*dt__SV !
9657 c #GF. /(rhoWat*dzAvSV(isl) !
9658 c #GF. *LSdzsv(ikl)) !
9659 
9660 ! OUTPUT/Verification: Gravitational Front
9661 ! #sg write(6,6005) eta_SV(ikl,isl)*1.e3
9662 
9663  6005 format(3x,' eta_SV, ',e12.3,' g/kg')
9664 c #GF END DO
9665 c #GF END DO
9666 c #GF DO ikl=1,knonv
9667 c #GF SoRnOF(ikl) = SoRnOF(ikl) ! RunOFF Intensity
9668 c #GF. + drr_SV(ikl) ! [kg/m2/s]
9669 ! Inclure la possibilite de creer une mare sur un bedrock impermeable
9670 c #GF drr_SV(ikl) = 0.
9671 c #GF END DO
9672 
9673 
9674 ! Temperature Correction due to a changed Soil Energy Content
9675 ! ===========================================================
9676 
9677 ! REMARQUE: Mettre en oeuvre le couplage humidite-energie
9678 ! ^^^^^^^^
9679 
9680 
9681 ! Full Resolution of the Richard's Equation
9682 ! =========================================
9683 
9684 ! METHOD: Water content evolution results from water fluxes
9685 ! ^^^^^^ at the layer boundaries
9686 ! Conductivity is approximated by a piecewise linear profile.
9687 ! Semi-Implicit Crank-Nicholson scheme is used.
9688 ! (Bruen, 1997, Sensitivity of hydrological processes
9689 ! at the land-atmosphere interface.
9690 ! Proc. Royal Irish Academy, IGBP symposium
9691 ! on global change and the Irish Environment.
9692 ! Publ.: Maynooth)
9693 
9694 ! - - - - - - - - isl+1/2 - - ^
9695 ! |
9696 ! eta_SV(isl) --------------- isl ----- +--dz_dSV(isl) ^
9697 ! | |
9698 ! Dhydtz(isl) etaMid - - - - - - - - isl-1/2 - - v dzmiSV(isl)--+
9699 ! |
9700 ! eta_SV(isl-1) --------------- isl-1 ----- v
9701 
9702 ! Transfert Coefficients
9703 ! ----------------------------
9704 
9705  DO isl=-nsol+1,0
9706  DO ikl=1,knonv
9707  ist = isotsv(ikl) ! Soil Type
9708  ist__s = min(ist, 1) ! 1 => Soil
9709  ist__w = 1 - ist__s ! 1 => Water Body
9710  etamid = (dz_dsv(isl) *eta_sv(ikl,isl-1) ! eta at layers
9711  . +dz_dsv(isl-1)*eta_sv(ikl,isl) ) ! interface
9712  . /(2.0* dzmisv(isl)) ! LSdzsv implicit !
9713 c #GA etaMid = sqrt(dz_dSV(isl) *eta_SV(ikl,isl-1) ! Idem, geometric
9714 c #GA. *dz_dSV(isl-1)*eta_SV(ikl,isl) ) ! average
9715 c #GA. /(2.0* dzmiSV(isl)) ! (Vauclin&al.1979)
9716  dhydif = s1__sv(ist) ! Hydraul.Diffusi.
9717  . *(etamid **( bchdsv(ist)+2.)) ! DR97, Eqn.(3.36)
9718  dhydtz(ikl,isl) = dhydif*dt__sv !
9719  . /(dzmisv(isl) !
9720  . *lsdzsv(ikl)) !
9721  dhydtz(ikl,isl) = dhydtz(ikl,isl) * ist__s ! Soil
9722  . +0.5*dzmisv(isl)*lsdzsv(ikl) * ist__w ! Water bodies
9723 
9724  END DO
9725  END DO
9726  isl=-nsol
9727  DO ikl=1,knonv
9728  dhydtz(ikl,isl) = 0.0 !
9729  END DO
9730 
9731 
9732 ! Tridiagonal Elimination: Set Up
9733 ! -------------------------------
9734 
9735 ! Soil/Snow Interior
9736 ! ^^^^^^^^^^^^^^^^^^
9737  DO isl=-nsol,-nsol+1
9738  DO ikl=1,knonv
9739  etaaux(ikl,isl) = eta_sv(ikl,isl)
9740  END DO
9741  END DO
9742 
9743  DO isl=-nsol+1,-1
9744  DO ikl=1,knonv
9745  ist = isotsv(ikl)
9746  ikm = nkhy * eta_sv(ikl,isl-1) / etadsv(ist)
9747  ik0 = nkhy * eta_sv(ikl,isl) / etadsv(ist)
9748  ikp = nkhy * eta_sv(ikl,isl+1) / etadsv(ist)
9749  elem_a = dhydtz(ikl,isl)
9750  . - akdtsv(ist,ikm)* dziisv(isl) *lsdzsv(ikl)
9751  elem_b = - (dhydtz(ikl,isl)
9752  . +dhydtz(ikl,isl+1)
9753  . -akdtsv(ist,ik0)*(dziisv(isl+1)
9754  . -dzi_sv(isl) )*lsdzsv(ikl))
9755  elem_c = dhydtz(ikl,isl+1)
9756  . + akdtsv(ist,ikp)* dzi_sv(isl+1)*lsdzsv(ikl)
9757  diag_a(ikl,isl) = dz_8sv(isl) *lsdzsv(ikl)
9758  . -implic * elem_a
9759  diag_b(ikl,isl) = dz34sv(isl) *lsdzsv(ikl)
9760  . -implic * elem_b
9761  diag_c(ikl,isl) = dz_8sv(isl) *lsdzsv(ikl)
9762  . -implic * elem_c
9763 
9764  term_d(ikl,isl) = (dz_8sv(isl) *lsdzsv(ikl)
9765  . +explic *elem_a )*eta_sv(ikl,isl-1)
9766  . + (dz34sv(isl) *lsdzsv(ikl)
9767  . +explic *elem_b )*eta_sv(ikl,isl)
9768  . + (dz_8sv(isl) *lsdzsv(ikl)
9769  . +explic *elem_c )*eta_sv(ikl,isl+1)
9770  . + (bkdtsv(ist,ikp)* dzi_sv(isl+1)
9771  . +bkdtsv(ist,ik0)*(dziisv(isl+1)
9772  . -dzi_sv(isl) )
9773  . -bkdtsv(ist,ikm)* dziisv(isl) )
9774  . * lsdzsv(ikl)
9775  . - dt__sv * rootsv(ikl,isl)/rhowat
9776  END DO
9777  END DO
9778 
9779  isl=-nsol
9780  DO ikl=1,knonv
9781  ist = isotsv(ikl)
9782  freedr = iwafsv(ikl) * min(ist,1)
9783 ! FreeDr = FreeD0 * min(ist,1) ! Free Drainage
9784  ik0 = nkhy * eta_sv(ikl,isl ) / etadsv(ist)
9785  ikp = nkhy * eta_sv(ikl,isl+1) / etadsv(ist)
9786  elem_a = 0.
9787  elem_b = - (dhydtz(ikl,isl+1)
9788  . -akdtsv(ist,ik0)*(dziisv(isl+1)*lsdzsv(ikl)
9789  . -freedr ))
9790  elem_c = dhydtz(ikl,isl+1)
9791  . + akdtsv(ist,ikp)* dzi_sv(isl+1)*lsdzsv(ikl)
9792  diag_a(ikl,isl) = 0.
9793  diag_b(ikl,isl) = dz78sv(isl) *lsdzsv(ikl)
9794  . -implic *elem_b
9795  diag_c(ikl,isl) = dz_8sv(isl) *lsdzsv(ikl)
9796  . -implic *elem_c
9797 
9798  term_d(ikl,isl) = (dz78sv(isl) *lsdzsv(ikl)
9799  . +explic *elem_b )*eta_sv(ikl,isl)
9800  . + (dz_8sv(isl) *lsdzsv(ikl)
9801  . +explic *elem_c )*eta_sv(ikl,isl+1)
9802  . + (bkdtsv(ist,ikp)* dzi_sv(isl+1)*lsdzsv(ikl)
9803  . +bkdtsv(ist,ik0)*(dziisv(isl+1)*lsdzsv(ikl)
9804  . -freedr ))
9805  . - dt__sv * rootsv(ikl,isl)/rhowat
9806  END DO
9807 
9808  isl=0
9809  DO ikl=1,knonv
9810  ist = isotsv(ikl)
9811  ikm = nkhy * eta_sv(ikl,isl-1) / etadsv(ist)
9812  ik0 = nkhy * eta_sv(ikl,isl) / etadsv(ist)
9813  elem_a = dhydtz(ikl,isl)
9814  . - akdtsv(ist,ikm)* dziisv(isl)*lsdzsv(ikl)
9815  elem_b = - (dhydtz(ikl,isl)
9816  . +akdtsv(ist,ik0)* dzi_sv(isl)*lsdzsv(ikl))
9817  elem_c = 0.
9818  diag_a(ikl,isl) = dz_8sv(isl) *lsdzsv(ikl)
9819  . - implic *elem_a
9820  diag_b(ikl,isl) = dz78sv(isl) *lsdzsv(ikl)
9821  . - implic *elem_b
9822  diag_c(ikl,isl) = 0.
9823 
9824  term_d(ikl,isl) = (dz_8sv(isl) *lsdzsv(ikl)
9825  . +explic *elem_a )*eta_sv(ikl,isl-1)
9826  . + (dz78sv(isl) *lsdzsv(ikl)
9827  . +explic *elem_b )*eta_sv(ikl,isl)
9828  . - (bkdtsv(ist,ik0)* dzi_sv(isl)
9829  . +bkdtsv(ist,ikm)* dziisv(isl))*lsdzsv(ikl)
9830  . + dt__sv *(hls_sv(ikl) * (1-min(1,isnosv(ikl)))
9831  . / lx_h2o(ikl)
9832  . +drr_sv(ikl)
9833  . -rootsv(ikl,isl) )/rhowat
9834  END DO
9835 
9836 
9837 ! Tridiagonal Elimination
9838 ! =======================
9839 
9840 ! Forward Sweep
9841 ! ^^^^^^^^^^^^^^
9842  DO ikl= 1,knonv
9843  aux__p(ikl,-nsol) = diag_b(ikl,-nsol)
9844  aux__q(ikl,-nsol) =-diag_c(ikl,-nsol)/aux__p(ikl,-nsol)
9845  END DO
9846 
9847  DO isl=-nsol+1,0
9848  DO ikl= 1,knonv
9849  aux__p(ikl,isl) = diag_a(ikl,isl) *aux__q(ikl,isl-1)
9850  . +diag_b(ikl,isl)
9851  aux__q(ikl,isl) =-diag_c(ikl,isl) /aux__p(ikl,isl)
9852  END DO
9853  END DO
9854 
9855  DO ikl= 1,knonv
9856  eta_sv(ikl,-nsol) = term_d(ikl,-nsol)/aux__p(ikl,-nsol)
9857  END DO
9858 
9859  DO isl=-nsol+1,0
9860  DO ikl= 1,knonv
9861  eta_sv(ikl,isl) =(term_d(ikl,isl)
9862  . -diag_a(ikl,isl) *eta_sv(ikl,isl-1))
9863  . /aux__p(ikl,isl)
9864  END DO
9865  END DO
9866 
9867 ! Backward Sweep
9868 ! ^^^^^^^^^^^^^^
9869  DO isl=-1,-nsol,-1
9870  DO ikl= 1,knonv
9871  eta_sv(ikl,isl) = aux__q(ikl,isl) *eta_sv(ikl,isl+1)
9872  . +eta_sv(ikl,isl)
9873  END DO
9874  END DO
9875 
9876 
9877 ! Horton RunOFF Intensity
9878 ! =======================
9879 
9880  DO isl=0,-nsol,-1
9881  DO ikl=1,knonv
9882  ist = isotsv(ikl) ! Soil Type
9883  satrat = (eta_sv(ikl,isl)-etadsv(ist)) ! OverSaturation Rate
9884  . *rhowat *dzavsv(isl) !
9885  . *lsdzsv(ikl) !
9886  . /dt__sv !
9887  sornof(ikl) = sornof(ikl) !
9888  . + max(zer0,satrat) !
9889  eta_sv(ikl,isl) = max(eps6 !
9890  . ,eta_sv(ikl,isl)) !
9891  eta_sv(ikl,isl) = min(eta_sv(ikl,isl) !
9892  . ,etadsv(ist) ) !
9893  END DO
9894  END DO
9895 
9896 ! OUTPUT/Verification: Soil Vertic.Discret.
9897 ! #so write(6,6010)
9898 
9899  6010 format(/,1x)
9900  DO isl= 0,-nsol,-1
9901  DO ikl= 1,knonv
9902  ist = isotsv(ikl)
9903  ikp = nkhy * eta_sv(ikl,isl) /etadsv(ist)
9904  khydsv(ikl,isl) =(akdtsv(ist,ikp) *eta_sv(ikl,isl)
9905  . +bkdtsv(ist,ikp)) *2.0/dt__sv
9906 ! OUTPUT/Verification: Soil Vertic.Discret.
9907 ! #so write(6,6011) ikl,isl,eta_SV(ikl,isl)*1.e3,
9908 ! #so. ikp, aKdtSV(ist,ikp),bKdtSV(ist,ikp),
9909 ! #so. Khydsv(ikl,isl)
9910  6011 format(2i3,f8.1,i3,3e12.3)
9911 
9912  END DO
9913  END DO
9914 
9915 
9916 ! Additional RunOFF Intensity
9917 ! ===========================
9918 
9919  DO ikl=1,knonv
9920  ist = isotsv(ikl)
9921  ik0 = nkhy * etaaux(ikl,-nsol ) /etadsv(ist)
9922  freedr = iwafsv(ikl) * min(ist,1)
9923 ! FreeDr = FreeD0 * min(ist,1) ! Free Drainage
9924  sornof(ikl) = sornof(ikl)
9925  . + (akdtsv(ist,ik0)*(etaaux(ikl,-nsol)*explic
9926  . +eta_sv(ikl,-nsol)*implic)
9927  . + bkdtsv(ist,ik0) )
9928  . * freedr *rhowat /dt__sv
9929 
9930 ! Full Run OFF: Update
9931 ! ~~~~~~~~~~~~~~~~~~~~
9932  rnofsv(ikl) = rnofsv(ikl) + sornof(ikl)
9933  END DO
9934 
9935 
9936 ! Temperature Correction due to a changed Soil Energy Content
9937 ! ===========================================================
9938 
9939 ! REMARQUE: Mettre en oeuvre le couplage humidite-energie
9940 ! ^^^^^^^^
9941 
9942 
9943 ! Bumps/Asperites Treatment
9944 ! =========================
9945 
9946 ! Average over Bump Depth (z0soil)
9947 ! --------------------------------
9948 
9949 c #BP z_Bump = 0.
9950 c #BP DO ikl=1,knonv
9951 c #BP etBump(ikl) = 0.
9952 c #BP END DO
9953 
9954 c #BP DO isl=0,-nsol,-1
9955 c #BP z0Bump = z_Bump
9956 c #BP z_Bump = z_Bump + dzAvSV(isl)
9957 c #BP IF (z_Bump.lt.z0soil) THEN
9958 c #BP DO ikl=1,knonv
9959 c #BP etBump(ikl) = etBump(ikl) + dzAvSV(isl) *eta_SV(ikl,isl)
9960 c #BP END DO
9961 c #BP END IF
9962 c #BP IF (z_Bump.gt.z0soil.AND.z0Bump.lt.z0soil) THEN
9963 c #BP DO ikl=1,knonv
9964 c #BP etBump(ikl) = etBump(ikl) + (z0soil-z0Bump)*eta_SV(ikl,isl)
9965 c #BP etBump(ikl) = etBump(ikl) / z0soil
9966 c #BP END DO
9967 c #BP END IF
9968 c #BP END DO
9969 
9970 
9971 ! Correction
9972 ! ----------
9973 
9974 c #BP z_Bump = 0.
9975 c #BP DO isl=0,-nsol,-1
9976 c #BP z0Bump = z_Bump
9977 c #BP z_Bump = z_Bump +dzAvSV(isl)
9978 c #BP IF (z_Bump.lt.z0soil) THEN
9979 c #BP DO ikl=1,knonv
9980 c #BP eta_SV(ikl,isl) = etBump(ikl)
9981 c #BP END DO
9982 c #BP END IF
9983 c #BP IF (z_Bump.gt.z0soil.AND.z0Bump.lt.z0soil) THEN
9984 c #BP dzBump = z_Bump - z0soil
9985 c #BP DO ikl=1,knonv
9986 c #BP eta_SV(ikl,isl) =(etBump(ikl) *(dzAvSV(isl)-dzBump)
9987 c #BP. + eta_SV(ikl,isl)* dzBump)
9988 c #BP. / dzAvSV(isl)
9989 c #BP END DO
9990 c #BP END IF
9991 c #BP END DO
9992 
9993 
9994 ! Positive Definite
9995 ! =================
9996 
9997 c #BP DO isl= 0,-nsol,-1
9998 c #BP DO ikl= 1,knonv
9999 c #BP eta_SV(ikl,isl) = max(eps6,eta_SV(ikl,isl))
10000 c #BP END DO
10001 c #BP END DO
10002 
10003 
10004 ! OUTPUT/Verification: H2O Conservation: Water Budget (OUT)
10005 ! #m0 DO ikl=1,knonv
10006 ! #m0 Wats_d(ikl) = Wats_d(ikl) !
10007 ! #m0. + drr_SV(ikl) *0.00 ! Precipitation is
10008 ! \______________ already included
10009 ! #m0. + HLs_sv(ikl)
10010 ! #m0. *(1-min(isnoSV(ikl),1)) /Lx_H2O(ikl) ! Evaporation
10011 ! #m0. - SoRnOF(ikl) ! Soil RunOFF Contrib.
10012 ! #m0 Wats_1(ikl) = 0. !
10013 
10014 ! OUTPUT/Verification: H2O Conservation
10015 ! #mw Evapor(ikl) = HLs_sv(ikl) *dt__SV !
10016 ! #mw. *(1-min(isnoSV(ikl),1)) /Lx_H2O(ikl) !
10017 
10018 ! #m0 END DO
10019 
10020 ! #m0 DO isl= -nsol,0
10021 ! #m0 DO ikl=1,knonv
10022 ! #m0 Wats_d(ikl) = Wats_d(ikl) !
10023 ! #m0. - Rootsv(ikl,isl) ! Root Extract.
10024 ! #m0 END DO
10025 ! #m0 END DO
10026 ! #m0 DO ikl=1,knonv
10027 ! #m0 Wats_d(ikl) = Wats_d(ikl) *dt__SV !
10028 ! #m0 END DO
10029 
10030 ! #m0 isl= -nsol
10031 ! #m0 DO ikl=1,knonv
10032 ! #m0 Wats_1(ikl) = Wats_1(ikl)
10033 ! #m0. + rhoWat *( eta_SV(ikl,isl) *dz78SV(isl)
10034 ! #m0. + eta_SV(ikl,isl+1) *dz_8SV(isl) ) *LSdzsv(ikl)
10035 ! #m0 END DO
10036 
10037 ! #m0 DO isl= -nsol+1,-1
10038 ! #m0 DO ikl=1,knonv
10039 ! #m0 Wats_1(ikl) = Wats_1(ikl)
10040 ! #m0. + rhoWat *( eta_SV(ikl,isl) *dz34SV(isl)
10041 ! #m0. +(eta_SV(ikl,isl-1)
10042 ! #m0. +eta_SV(ikl,isl+1))*dz_8SV(isl) ) *LSdzsv(ikl)
10043 ! #m0 END DO
10044 ! #m0 END DO
10045 
10046 ! #m0 isl= 0
10047 ! #m0 DO ikl=1,knonv
10048 ! #m0 Wats_1(ikl) = Wats_1(ikl)
10049 ! #m0. + rhoWat *( eta_SV(ikl,isl) *dz78SV(isl)
10050 ! #m0. + eta_SV(ikl,isl-1) *dz_8SV(isl) ) *LSdzsv(ikl)
10051 ! #m0 END DO
10052 
10053 
10054 ! OUTPUT/Verification: H2O Conservation
10055 ! #mw IF (.NOT.mwopen) THEN
10056 ! #mw mwopen = .true.
10057 ! #mw open(unit=42,status='unknown',file='SISVAT_qSo.vw')
10058 ! #mw rewind 42
10059 ! #mw write(42,42)
10060  42 format('SubRoutine SISVAT_qSo: Local Water Budget',
10061  . /,'=========================================')
10062 ! #mw END IF
10063 ! #mw timewr=timewr + dt__SV
10064 ! #mw hourwr=3600.0
10065 ! #mw IF (mod(timewr,hourwr).lt.eps6)
10066 ! #mw. write(42,420)timewr/hourwr
10067  420 format(11('-'),'----------+--------------+-',
10068  . 3('-'),'----------+--------------+-',
10069  . '----------------+----------------+',
10070  . /,f8.2,3x,'Wats_0(1) | Wats_d(1) | ',
10071  . 3x,'Wats_1(1) | W_0+W_d-W_1 | ',
10072  . ' Soil Run OFF | Soil Evapor. |',
10073  . /,11('-'),'----------+--------------+-',
10074  . 3('-'),'----------+--------------+-',
10075  . '----------------+----------------+')
10076 ! #mw write(42,421) Wats_0(1),Wats_d(1)
10077 ! #mw. ,Wats_1(1)
10078 ! #mw. ,Wats_0(1)+Wats_d(1)-Wats_1(1)
10079 ! #mw. ,SoRnOF(1),Evapor(1)
10080  421 format(8x,f12.6,' + ',f12.6,' - ',f12.6,' = ',f12.6,' | ',f12.6,
10081  . ' ',f15.6)
10082 
10083  return
10084  end
10085 
10086 
10087  subroutine sisvat_weq( labWEq ,istart)
10089 !--------------------------------------------------------------------------+
10090 ! MAR SISVAT_wEq Sat 12-Feb-2012 MAR |
10091 ! SubRoutine SISVAT_wEq computes the Snow/Ice Water Equivalent |
10092 ! |
10093 ! |
10094 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
10095 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
10096 ! FILE | CONTENT |
10097 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
10098 ! # SISVAT_wEq.ve | #ve: OUTPUT/Verification: Snow/Ice Water Eqv. |
10099 ! | unit 45, SubRoutine SISVAT_wEq **ONLY** |
10100 !--------------------------------------------------------------------------+
10101 
10102 
10103 
10104 
10105 
10106 ! Global Variables
10107 ! ================
10108 
10109  USE var_sv
10110  USE varxsv
10111 
10112  IMPLICIT NONE
10113 
10114  character*6 labWEq
10115  integer istart
10116 
10117  logical logWEq
10118  common/sisvat_weq_l/logweq
10119 
10120 
10121 ! Local Variables
10122 ! ================
10123 
10124  integer ikl ,isn
10125  real SnoWEQ,IceWEQ
10126 
10127 
10128 ! Switch Initialization
10129 ! =====================
10130 
10131  IF (.NOT.logweq) THEN
10132  logweq = .true.
10133  open(unit=45,status='unknown',file='SISVAT_wEq.ve')
10134  rewind 45
10135  END IF
10136 
10137 
10138 ! Snow Water Equivalent
10139 ! =====================
10140 
10141  ikl = 1
10142  IF (isnosv(ikl).gt.iicesv(ikl)) THEN
10143 
10144  snoweq = 0.
10145  DO isn = iicesv(ikl)+1 ,isnosv(ikl)
10146  snoweq = snoweq + ro__sv(ikl,isn) * dzsnsv(ikl,isn)
10147  END DO
10148 
10149  END IF
10150 
10151 
10152 ! Ice Water Equivalent
10153 ! =====================
10154 
10155  IF (iicesv(1).gt.0) THEN
10156 
10157  iceweq = 0.
10158  DO isn = 1 ,iicesv(ikl)
10159  iceweq = iceweq + ro__sv(ikl,isn) * dzsnsv(ikl,isn)
10160  END DO
10161 
10162  END IF
10163 
10164 
10165 ! OUTPUT
10166 ! ======
10167 
10168  IF (istart.eq.1) THEN
10169  write(45,45)dahost,i___sv(lwrisv(1)),j___sv(lwrisv(1)),
10170  . n___sv(lwrisv(1))
10171  45 format(a18,10('-'),'Pt.',3i4,60('-'))
10172  END IF
10173 
10174  write(45,450) labweq,iceweq,iicesv(ikl),snoweq
10175  . ,iceweq+snoweq,isnosv(ikl)
10176  . ,drr_sv(ikl)*dt__sv
10177  . ,dsn_sv(ikl)*dt__sv
10178  . ,bufssv(ikl)
10179  450 format(a6,3x,' I+S =',f11.4,'(',i2,') +',f11.4,' =',
10180  . f11.4,'(',i2,')',
10181  . ' drr =', f7.4,
10182  . ' dsn =', f7.4,
10183  . ' Buf =', f7.4)
10184 
10185  return
10186  end
real, dimension(:), allocatable, save fh__sv
Definition: VARySV.F90:67
real, save lambsv
Definition: VARtSV.F90:32
real, parameter ai2dsv
Definition: VARdSV.F90:32
real, dimension(0:nsot, 0:nkhy) akdtsv
Definition: VAR0SV.F90:28
real, dimension(:), allocatable, save brossv
Definition: VARxSV.F90:35
real, parameter ddcdsv
Definition: VARdSV.F90:23
real, dimension(:), allocatable, save sqrcm0
Definition: VARySV.F90:57
Definition: VARlSV.F90:1
real, dimension(:), allocatable, save lx_h2o
Definition: VARySV.F90:61
real, parameter dfcdsv
Definition: VARdSV.F90:23
real explic
Definition: VAR0SV.F90:13
real ea_max
Definition: PHY_SV.F90:14
real, parameter lhfh2o
Definition: PHY_SV.F90:44
real, dimension(:), allocatable, save bcohsv
Definition: VARtSV.F90:20
real, dimension(:), allocatable, save tau_sv
Definition: VARySV.F90:37
real, dimension(:), allocatable, save vvmmem
Definition: VARtSV.F90:38
real, dimension(:), allocatable, save tvegsv
Definition: VARxSV.F90:157
real, dimension(:), allocatable, save dsdtsv
Definition: VARxSV.F90:60
real, dimension(0:nvgt), parameter pr_dsv
Definition: VARdSV.F90:61
real, dimension(:,:), allocatable, save dz1_sv
Definition: VARtSV.F90:12
real, dimension(:), allocatable, save irv_sv
Definition: VARySV.F90:31
Definition: VARtSV.F90:1
subroutine sisvat_weq(labWEq, istart)
Definition: sisvat.F:10088
real, dimension(0:nsot) rocssv
Definition: VAR0SV.F90:24
Definition: VARxSV.F90:1
real, dimension(:), allocatable, save rrmxsv
Definition: VARySV.F90:39
Definition: VARySV.F90:1
real, dimension(:), allocatable, save socasv
Definition: VARySV.F90:27
real, parameter ai1dsv
Definition: VARdSV.F90:32
real, dimension(:), allocatable, save ps__sv
Definition: VARtSV.F90:24
real, dimension(:), allocatable, save p1l_sv
Definition: VARtSV.F90:26
Definition: VARdSV.F90:1
real, parameter g1_dsv
Definition: VARdSV.F90:22
real, dimension(:,:), allocatable, save sex_sv
Definition: VARySV.F90:79
real, dimension(-nsol:0) dzavsv
Definition: VAR0SV.F90:21
real, dimension(-nsol:0) dz_8sv
Definition: VAR0SV.F90:20
integer, dimension(:), allocatable, save lindsv
Definition: VARySV.F90:13
real, dimension(:), allocatable, save exnrsv
Definition: VARxSV.F90:58
real, dimension(:), allocatable, save bufssv
Definition: VARxSV.F90:174
integer, dimension(:,:), allocatable, save istosv
Definition: VARxSV.F90:101
Definition: PHY_SV.F90:1
real, dimension(:), allocatable, save sol_sv
Definition: VARxSV.F90:20
subroutine sisvat_ts2
Definition: sisvat.F:6918
real, dimension(:,:), allocatable, save agsnsv
Definition: VARxSV.F90:172
real, dimension(:,:), allocatable, save dzsnsv
Definition: VARxSV.F90:170
real, dimension(:,:), allocatable, save rootsv
Definition: VARySV.F90:87
real, dimension(:), allocatable, save rsolsv
Definition: VARtSV.F90:30
real, dimension(:), allocatable, save alb_sv
Definition: VARxSV.F90:104
real, parameter cdidsv
Definition: VARdSV.F90:43
real, parameter rhowat
Definition: PHY_SV.F90:55
real, dimension(:), allocatable, save lai0sv
Definition: VARxSV.F90:73
real, dimension(:), allocatable, save evp_sv
Definition: VARySV.F90:71
!$Id!common comsoil inertie_sno
Definition: comsoil.h:5
integer, dimension(:), allocatable, save isnosv
Definition: VARxSV.F90:95
real, parameter ws0dsv
Definition: VARdSV.F90:36
integer, dimension(:), allocatable, save isotsv
Definition: VARxSV.F90:11
real, dimension(:), allocatable, save dsnbsv
Definition: VARxSV.F90:29
real, dimension(:), allocatable, save bcoqsv
Definition: VARtSV.F90:22
real, parameter p0_kap
Definition: PHY_SV.F90:41
real, dimension(:), allocatable, save sncasv
Definition: VARxSV.F90:151
real, dimension(:), allocatable, save sws_sv
Definition: VARxSV.F90:180
real, dimension(:), allocatable, save eexcsv
Definition: VARySV.F90:89
real, parameter tf_sno
Definition: PHY_SV.F90:63
subroutine vgoptp
Definition: sisvat.F:4618
integer, dimension(:), allocatable, save iicesv
Definition: VARxSV.F90:99
real, dimension(:,:), allocatable, save g1snsv
Definition: VARxSV.F90:166
real, dimension(:), allocatable, save evt_sv
Definition: VARySV.F90:73
real, dimension(:), allocatable, save dfh_sv
Definition: VARySV.F90:69
real, dimension(-nsol:0) dzmisv
Definition: VAR0SV.F90:14
real, dimension(:,:), allocatable, save tsissv
Definition: VARxSV.F90:160
real, dimension(:), allocatable, save uts_sv
Definition: VARxSV.F90:114
real, dimension(:), allocatable, save tat_sv
Definition: VARxSV.F90:56
real, dimension(:), allocatable, save acoqsv
Definition: VARtSV.F90:22
real, dimension(:), allocatable, save tsrfsv
Definition: VARySV.F90:77
real, dimension(:), allocatable, save iru_sv
Definition: VARxSV.F90:218
real, dimension(:,:), allocatable, save dz2_sv
Definition: VARtSV.F90:14
real, dimension(-nsol:0) dzi_sv
Definition: VAR0SV.F90:15
integer, dimension(1:5), parameter istdsv
Definition: VARdSV.F90:18
subroutine sisvat_qvg
Definition: sisvat.F:7427
real, dimension(:), allocatable, save zwe_sv
Definition: VARxSV.F90:185
real, parameter lhvh2o
Definition: PHY_SV.F90:44
integer, dimension(nb_wri), save lwrisv
Definition: VARxSV.F90:208
real, dimension(:), allocatable, save zwecsv
Definition: VARxSV.F90:187
Definition: VAR_SV.F90:1
real, parameter dscdsv
Definition: VARdSV.F90:23
real, dimension(:), allocatable, save psivsv
Definition: VARxSV.F90:155
real, dimension(:), allocatable, save cld_sv
Definition: VARxSV.F90:44
real, parameter rtt
real, dimension(0:nsot, 0:nkhy) bkdtsv
Definition: VAR0SV.F90:29
subroutine sisvat_tvg
Definition: sisvat.F:5959
subroutine sisvat_sic
Definition: sisvat.F:2610
real, parameter so2dsv
Definition: VARdSV.F90:26
character(len=18), save dahost
Definition: VARxSV.F90:88
logical iniout
Definition: VARlSV.F90:9
real, parameter ru_dsv
Definition: VARdSV.F90:38
real, dimension(:), allocatable, save hlv_sv
Definition: VARySV.F90:51
Definition: VARphy.F90:1
real, dimension(:), allocatable, save lsdzsv
Definition: VARySV.F90:75
real, parameter bsnoro
Definition: PHY_SV.F90:59
Definition: VAR0SV.F90:1
real, dimension(:), allocatable, save alb0sv
Definition: VARxSV.F90:78
real, dimension(:), allocatable, save rusnsv
Definition: VARxSV.F90:176
real, dimension(:), allocatable, save lai_sv
Definition: VARySV.F90:43
real, dimension(:), allocatable, save acohsv
Definition: VARtSV.F90:20
real, dimension(:), allocatable, save glf0sv
Definition: VARxSV.F90:75
real, dimension(:), allocatable, save bg2ssv
Definition: VARxSV.F90:39
real, dimension(:), allocatable, save z0ensv
Definition: VARxSV.F90:142
real, dimension(-nsol:0) dziisv
Definition: VAR0SV.F90:16
subroutine sisvat(SnoMod, BloMod, jjtime)
Definition: sisvat.F:2
subroutine sisvatesbl
Definition: sisvat.F:5113
integer, dimension(nb_wri), save j___sv
Definition: VARxSV.F90:204
real, parameter rcwdsv
Definition: VARdSV.F90:91
real, dimension(:), allocatable, save usthsv
Definition: VARxSV.F90:122
real, parameter rhoice
Definition: PHY_SV.F90:59
real, dimension(:), allocatable, save z0h_sv
Definition: VARxSV.F90:144
real, parameter cn_dsv
Definition: VARdSV.F90:20
integer, dimension(:), allocatable, save iwafsv
Definition: VARxSV.F90:13
real, parameter zer0
Definition: PHY_SV.F90:12
subroutine sisvat_zcr
Definition: sisvat.F:3601
real, parameter eps6
Definition: PHY_SV.F90:12
integer, dimension(:), allocatable, save ivgtsv
Definition: VARxSV.F90:15
integer, dimension(:), allocatable, save i_thin
Definition: VARySV.F90:11
real, parameter rcpd
real, dimension(0:nvgt,-nsol:0) rf__sv
Definition: VAR0SV.F90:23
real, dimension(:), allocatable, save rah_sv
Definition: VARySV.F90:65
real, dimension(-nsol:0) dz78sv
Definition: VAR0SV.F90:18
real, dimension(0:nsot), parameter ks_dsv
Definition: VARdSV.F90:106
integer, parameter nsno
Definition: VAR_SV.F90:11
integer, dimension(nb_wri), save i___sv
Definition: VARxSV.F90:202
real, parameter ahstab
Definition: PHY_SV.F90:32
real, dimension(:), allocatable, save hss_sv
Definition: VARySV.F90:53
real, dimension(:), allocatable, save za__sv
Definition: VARxSV.F90:46
real, parameter vonkrm
Definition: PHY_SV.F90:32
real, dimension(:), allocatable, save vv__sv
Definition: VARxSV.F90:48
real, dimension(:), allocatable, save sososv
Definition: VARySV.F90:29
real, dimension(:), allocatable, save tsf_sv
Definition: VARtSV.F90:16
real, parameter eps_21
Definition: VARdSV.F90:12
integer, dimension(:), allocatable, save ispisv
Definition: VARxSV.F90:97
real, dimension(:), allocatable, save z0hnsv
Definition: VARxSV.F90:148
real, dimension(:), allocatable, save sqrch0
Definition: VARySV.F90:59
real, dimension(:), allocatable, save qsnosv
Definition: VARxSV.F90:70
real, dimension(:), allocatable, save rht_sv
Definition: VARxSV.F90:64
integer, dimension(nb_wri), save n___sv
Definition: VARxSV.F90:206
real, dimension(:), allocatable, save dtmmem
Definition: VARtSV.F90:42
subroutine sisvat_bdu
Definition: sisvat.F:2503
real, dimension(:,:), allocatable, save psi_sv
Definition: VARySV.F90:83
real, dimension(:), allocatable, save laiesv
Definition: VARySV.F90:41
real, dimension(0:nvgt), parameter stodsv
Definition: VARdSV.F90:57
real, dimension(0:nsot) s2__sv
Definition: VAR0SV.F90:27
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
integer, save knonv
Definition: VAR_SV.F90:15
real, parameter a_stab
Definition: PHY_SV.F90:32
real ocndsv
Definition: VAR0SV.F90:22
real, dimension(:), allocatable, save rnofsv
Definition: VARxSV.F90:224
integer, parameter nsol
Definition: VAR_SV.F90:10
real, parameter rlvtt
real, parameter ai3dsv
Definition: VARdSV.F90:32
subroutine sisvat_bsn(BloMod)
Definition: sisvat.F:1947
real, dimension(:), allocatable, save rcdmsv
Definition: VARxSV.F90:124
real, dimension(:), allocatable, save hsv_sv
Definition: VARySV.F90:49
integer, save klonv
Definition: VAR_SV.F90:13
integer, parameter nvgt
Definition: VARdSV.F90:48
!$Header!c c INCLUDE fxyprim h c c c Fonctions in line c c REAL fyprim REAL rj c c il faut la calculer avant d appeler ces fonctions c c c Fonctions a changer selon x(x) et y(y) choisis.c-----------------------------------------------------------------c c.....ici
real, dimension(:), allocatable, save ird_sv
Definition: VARxSV.F90:22
real, dimension(0:nsot), parameter etadsv
Definition: VARdSV.F90:98
real, dimension(-nsol:0) dz34sv
Definition: VAR0SV.F90:19
real, dimension(:), allocatable, save dbs_sv
Definition: VARxSV.F90:33
real, parameter smndsv
Definition: VARdSV.F90:21
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
real, parameter hc_wat
Definition: PHY_SV.F90:55
real, parameter vk_dsv
Definition: VARdSV.F90:134
real, dimension(0:nsot), parameter psidsv
Definition: VARdSV.F90:102
real, parameter zero
Definition: VARphy.F90:12
real, dimension(:), allocatable, save drr_sv
Definition: VARxSV.F90:25
subroutine sisvat_zsn
Definition: sisvat.F:2758
real, dimension(:,:), allocatable, save ro__sv
Definition: VARxSV.F90:162
real, dimension(:), allocatable, save irs_sv
Definition: VARxSV.F90:108
real, dimension(:), allocatable, save lmo_sv
Definition: VARxSV.F90:110
subroutine snoptp(jjtime)
Definition: sisvat.F:4035
real, dimension(:), allocatable, save cdh_sv
Definition: VARtSV.F90:28
real, dimension(:), allocatable, save z0m_sv
Definition: VARxSV.F90:128
real, dimension(:), allocatable, save alb2sv
Definition: VARySV.F90:20
real, dimension(0:nvgt), parameter dh_dsv
Definition: VARdSV.F90:49
real, dimension(:), allocatable, save dsn_sv
Definition: VARxSV.F90:27
real, parameter rd
subroutine sisvat_qso
Definition: sisvat.F:9334
real, dimension(:), allocatable, save glf_sv
Definition: VARySV.F90:45
real, dimension(:), allocatable, save sigmsv
Definition: VARySV.F90:47
real, dimension(-nsol:0) dtz_sv
Definition: VAR0SV.F90:17
integer, dimension(:), allocatable, save lsmask
Definition: VARxSV.F90:9
real, dimension(0:nsot) s1__sv
Definition: VAR0SV.F90:26
subroutine sisvat_sbl
Definition: sisvat.F:5715
real, dimension(:), allocatable, save albisv
Definition: VARySV.F90:15
real, parameter unun
Definition: VARphy.F90:12
real, dimension(:), allocatable, save uqs_sv
Definition: VARxSV.F90:118
real, dimension(:), allocatable, save evg_sv
Definition: VARySV.F90:33
real, dimension(:), allocatable, save us__sv
Definition: VARxSV.F90:112
real, dimension(:), allocatable, save uss_sv
Definition: VARxSV.F90:120
real, parameter grav_f
Definition: PHY_SV.F90:28
real, dimension(:), allocatable, save slopsv
Definition: VARxSV.F90:80
real, dimension(:), allocatable, save rcdhsv
Definition: VARxSV.F90:126
real, dimension(:), allocatable, save eso_sv
Definition: VARySV.F90:35
real, parameter half
Definition: PHY_SV.F90:12
real, parameter pscdsv
Definition: VARdSV.F90:83
real ea_min
Definition: PHY_SV.F90:14
real, dimension(0:nsot), parameter bchdsv
Definition: VARdSV.F90:111
real, parameter laidsv
Definition: VARdSV.F90:85
real, parameter cpdair
Definition: PHY_SV.F90:41
real, parameter rocdsv
Definition: VARdSV.F90:37
real, parameter pinmbr
Definition: PHY_SV.F90:24
real, parameter lhsh2o
Definition: PHY_SV.F90:44
real, dimension(-nsol:0) dz_dsv
Definition: VARdSV.F90:92
real, dimension(:,:), allocatable, save khydsv
Definition: VARySV.F90:85
real, dimension(:,:), allocatable, save eta_sv
Definition: VARxSV.F90:164
real, parameter so3dsv
Definition: VARdSV.F90:26
integer, parameter nsot
Definition: VARdSV.F90:97
subroutine colprt_sbl
Definition: sisvat.F:4982
real, parameter stefbo
Definition: PHY_SV.F90:41
real, dimension(:), allocatable, save z0mnsv
Definition: VARxSV.F90:132
Definition: VARdCP.F90:1
real, dimension(:), allocatable, save qat_sv
Definition: VARxSV.F90:66
subroutine sisvat_gsn
Definition: sisvat.F:8379
real, dimension(:,:), allocatable, save zzsnsv
Definition: VARySV.F90:81
real, save dt__sv
Definition: VARxSV.F90:86
real, dimension(:), allocatable, save tsfnsv
Definition: VARtSV.F90:18
real, dimension(:), allocatable, save rrcasv
Definition: VARxSV.F90:153
real, dimension(:), allocatable, save alb1sv
Definition: VARySV.F90:18
integer, parameter nkhy
Definition: VAR0SV.F90:12
real, dimension(:), allocatable, save emi_sv
Definition: VARxSV.F90:106
real, parameter stxdsv
Definition: VARdSV.F90:84
subroutine sisvat_zag(isagra, isagrb, WEagra, dzagra, dzagrb, T_agra, T_agrb, roagra, roagrb, etagra, etagrb, G1agra, G1agrb, G2agra, G2agrb, agagra, agagrb, Agreg1)
Definition: sisvat.F:3788
real, dimension(:), allocatable, save alb3sv
Definition: VARySV.F90:22
real implic
Definition: VAR0SV.F90:13
real, dimension(:), allocatable, save coszsv
Definition: VARxSV.F90:18
subroutine sisvat_qsn(
Definition: sisvat.F:7661
!$Id!Thermodynamical constants for t0 real clmci real epsi
Definition: cvthermo.h:6
real, dimension(:), allocatable, save albssv
Definition: VARySV.F90:25
real, parameter retv
!$Header!integer nvarmx s s unit
Definition: gradsdef.h:20
real, parameter un_1
Definition: PHY_SV.F90:12
real, parameter so1dsv
Definition: VARdSV.F90:26
real, parameter stefan
Definition: VARphy.F90:53
real, dimension(:), allocatable, save hls_sv
Definition: VARySV.F90:55
real, parameter rlstt
real, dimension(:), allocatable, save ram_sv
Definition: VARySV.F90:63
real, dimension(:), allocatable, save dldtsv
Definition: VARxSV.F90:62
real, dimension(:), allocatable, save swf_sv
Definition: VARxSV.F90:178
real, dimension(:,:), allocatable, save g2snsv
Definition: VARxSV.F90:168
real, dimension(:), allocatable, save z0e_sv
Definition: VARxSV.F90:138
real, dimension(:), allocatable, save esnbsv
Definition: VARxSV.F90:31
real, dimension(0:nvgt), parameter z0mdsv
Definition: VARdSV.F90:53
real, dimension(:), allocatable, save bg1ssv
Definition: VARxSV.F90:37
real, parameter epsn
Definition: PHY_SV.F90:12
integer, dimension(:), allocatable, save nlaysv
Definition: VARySV.F90:9
subroutine sisvat_tso
Definition: sisvat.F:6288
real, parameter adsdsv
Definition: VARdSV.F90:25