LMDZ
SISVAT.f90
Go to the documentation of this file.
1  subroutine sisvat_ini
2 
3 !--------------------------------------------------------------------------+
4 ! |
5 ! MAR SISVAT_ini Wed 26-Jun-2013 MAR |
6 ! SubRoutine SISVAT_ini generates non time dependant SISVAT parameters |
7 ! |
8 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
9 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
10 ! |
11 !--------------------------------------------------------------------------+
12 ! |
13 ! PARAMETERS: kcolv: Total Number of columns = |
14 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
15 ! X Number of Mosaic Cell per grid box |
16 ! |
17 ! INPUT: dt__SV : Time Step [s] |
18 ! ^^^^^ dz_dSV : Layer Thickness [m] |
19 ! |
20 ! OUTPUT: RF__SV : Root Fraction in Layer isl [-] |
21 ! ^^^^^^ rocsSV : Soil Contrib. to (ro c)_s exclud.Water [J/kg/K] |
22 ! etamSV : Soil Minimum Humidity [m3/m3] |
23 ! (based on a prescribed Soil Relative Humidity) |
24 ! s1__SV : Factor of eta**( b+2) in Hydraul.Diffusiv. |
25 ! s2__SV : Factor of eta**( b+2) in Hydraul.Conduct. |
26 ! aKdtSV : KHyd: Piecewise Linear Profile: a * dt [m] |
27 ! bKdtSV : KHyd: Piecewise Linear Profile: b * dt [m/s] |
28 ! dzsnSV(0): Soil first Layer Thickness [m] |
29 ! dzmiSV : Distance between two contiguous levels [m] |
30 ! dz78SV : 7/8 (Layer Thickness) [m] |
31 ! dz34SV : 3/4 (Layer Thickness) [m] |
32 ! dz_8SV : 1/8 (Layer Thickness) [m] |
33 ! dzAvSV : 1/8 dz_(i-1) + 3/4 dz_(i) + 1/8 dz_(i+1) [m] |
34 ! dtz_SV : dt/dz [s/m] |
35 ! OcndSV : Swab Ocean / Soil Ratio [-] |
36 ! Implic : Implicit Parameter (0.5: Crank-Nicholson) |
37 ! Explic : Explicit Parameter = 1.0 - Implic |
38 ! |
39 ! |
40 ! Preprocessing Option: STANDARD Possibility |
41 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ |
42 ! #SH: Soil /Vegetation Model: Hapex-Sahel Vegetation DATA |
43 ! |
44 ! |
45 ! Preprocessing Option: |
46 ! ^^^^^^^^^^^^^^^^^^^^^ |
47 ! #ER: Richards Equation is not smoothed |
48 ! #kd: Soil: De Ridder Discretization is forced |
49 ! |
50 !--------------------------------------------------------------------------+
51 
52 
53 ! Global Variables
54 ! =================
55 
56  use mod_real
57  use mod_phy____dat
58  use mod_phy____grd
59  use mod_sisvat_grd
60  use mod_sisvat_ctr
61 
62 
63 
64 ! General Variables
65 ! =================
66 
67  use mod_sisvat_dat
68  use mod_sisvat_dzs
69  use mod_sisvat_kkl
70 
71 
72  IMPLICIT NONE
73 
74 
75 
76 ! Internal Variables
77 ! ==================
78 
79  integer :: ivt ,ist ,ikl,ikv ,isl ,isn ,ikh
80  integer :: misl_2,nisl_2
81  real(kind=real8) :: zDepth
82  real(kind=real8) :: d__eta,eta__1,eta__2,Khyd_1,Khyd_2
83  real(kind=real8) :: RHsMin=0.001 ! Min.Soil Relative Humidity
84  real(kind=real8) :: PsiMax ! Max.Soil Water Potential
85  real(kind=real8) :: a_Khyd,b_Khyd ! Piecewis.Water Conductivity
86 
87 ! OUTPUT/Verification: Soil Vertic.Discret.
88 ! #kw real(kind=real8) :: Khyd_x,Khyd_y
89 
90 
91 
92 ! Non Time Dependant SISVAT parameters
93 ! ====================================
94 
95 ! Decay of Angle(Wind,Sastrugi) Influence on z0 (Andreas, 1995, CCREL report 95-16)
96 ! ---------------------------------------------
97 
98 ! #Za Adz0dt = exp(-dt__SV/43200.)
99 
100 
101 ! Soil Discretization
102 ! -------------------
103 
104 ! Numerical Scheme Parameters
105 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^
106  implic = 0.75 ! 0.5 <==> Crank-Nicholson
107  explic = 1.00 - implic !
108 
109 ! Soil/Snow Layers Indices
110 ! ^^^^^^^^^^^^^^^^^^^^^^^^
111  DO isl=-nsoil,0
112  islpsv(isl) = isl+1
113  islpsv(isl) = min( islpsv(isl),0)
114  islmsv(isl) = isl-1
115  islmsv(isl) = max(-nsoil,islmsv(isl))
116  END DO
117 
118  DO isn=1,nsnow
119  isnpsv(isn) = isn+1
120  isnpsv(isn) = min( isnpsv(isn),nsnow)
121  END DO
122 
123 ! Soil Layers Thicknesses: De Ridder discretization
124 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
125 ! #kd IF (nsoil.gt.4) THEN
126 ! #kd DO isl=-5,-nsoil,-1
127 ! #kd dz_dSV(isl)= 1.
128 ! #kd END DO
129 ! #kd END IF
130 
131 ! Soil Layers Thicknesses: standard discretization
132 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
133  IF (nsoil.ne.4) THEN
134  DO isl= 0,-nsoil,-1
135  misl_2 = -mod(isl,2)
136  nisl_2 = -isl/2
137  dz_dsv(isl)=(((1-misl_2) * 0.001 &
138  & + misl_2 * 0.003) * 10**(nisl_2)) * 4.
139 ! dz_dSV(0) = Hapex-Sahel Calibration: 4 mm
140 
141  END DO
142 ! tun dz_dSV(0) = 0.001
143 ! tun dz_dSV(-1) = dz_dSV(-1) - dz_dSV(0) + 0.004
144  END IF
145 
146  zz_dsv = 0.
147  DO isl=-nsoil,0
148  dzmisv(isl) = 0.500*(dz_dsv(isl) +dz_dsv(islmsv(isl)))
149  dziisv(isl) = 0.500* dz_dsv(isl) /dzmisv(isl)
150  dzi_sv(isl) = 0.500* dz_dsv(islmsv(isl))/dzmisv(isl)
151  dtz_sv(isl) = dt__sv /dz_dsv(isl)
152  dz78sv(isl) = 0.875* dz_dsv(isl)
153  dz34sv(isl) = 0.750* dz_dsv(isl)
154  dz_8sv(isl) = 0.125* dz_dsv(isl)
155  dzavsv(isl) = 0.125* dz_dsv(islmsv(isl)) &
156  & + 0.750* dz_dsv(isl) &
157  & + 0.125* dz_dsv(islpsv(isl))
158 
159 ! Richards Equation is not smoothed
160 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
161 ! #ER dz78SV(isl) = dz_dSV(isl)
162 ! #ER dz34SV(isl) = dz_dSV(isl)
163 ! #ER dz_8SV(isl) = 0.
164 ! #ER dzAvSV(isl) = dz_dSV(isl)
165 
166  zz_dsv = zz_dsv+dz_dsv(isl)
167  END DO
168 
169  DO ikl=1,kcolp
170  DO ikv=1,mwp
171  dzsnsv(ikl,ikv,0) = dz_dsv(0)
172  END DO
173  END DO
174 
175 ! Conversion to a 50 m Swab Ocean Discretization
176 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
177  ocndsv = 0.
178  DO isl=-nsoil,0
179  ocndsv = ocndsv +dz_dsv(isl)
180  END DO
181  ocndsv = 50. /ocndsv
182 
183 
184 ! Secondary Vegetation Parameters
185 ! -------------------------------
186 
187 ! Minimum Stomatal Resistance (Hapex Sahel Data)
188 ! (Taylor et al. 1997, J.Hydrol 188-189, p.1047)
189 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
190  DO ivg=1,3 !
191  stodsv(ivg) = 210. ! Millet
192  END DO !
193  stodsv( 4) = 120. ! Sparse Tiger Bush
194  DO ivg=5,6 !
195  stodsv(ivg) = 80. ! Dense Tiger Bush
196  END DO !
197  stodsv( 7) = 80. ! Low Trees (Fallow)
198  stodsv( 10) = 80. !
199 
200 ! Minimum Stomatal Resistance (Tropical Forest)
201 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
202  stodsv( 8) = 60. ! Medium Trees
203  stodsv( 11) = 60. !
204  stodsv( 9) = 40. ! High Trees
205  stodsv( 12) = 40. !
206 
207 ! Root Fraction
208 ! ^^^^^^^^^^^^^
209 ! * GENERAL REFERENCE
210 ! Jackson et al., 1996: A global analysis of root distributions for
211 ! terrestrial biomes. In Oecologia, 108, 389-411.
212 
213 ! * ROOT PROFILE
214 ! The cumulative root fraction Y is given by
215 ! Y = 1 - beta**d with d the depth (in cm),
216 ! beta a coefficient (vegetation dependent).
217 
218 ! * BETA VALUES (for 11 world biomes)
219 ! 1 boreal forest 0.943
220 ! 2 crops 0.961
221 ! 3 desert 0.975
222 ! 4 sclerophyllous shrubs 0.964
223 ! 5 temperate coniferous forest 0.976
224 ! 6 temperate deciduous forest 0.966
225 ! 7 temperate grassland 0.943
226 ! 8 tropical deciduous forest 0.961
227 ! 9 tropical evergreen forest 0.962
228 ! 10 tropical grassland savanna 0.972
229 ! 11 tundra 0.914
230 
231 ! * ADVISED BETA VALUES FOR MAR
232 ! (see 'block data SISVAT_dat', variable rbtdSV)
233 !
234 ! SVAT veg. type default West Africa
235 ! 0 barren soil 0.000 0.000
236 ! 1 crops low 0.961 (2) 0.961 (2)
237 ! 2 crops medium 0.961 (2) 0.961 (2)
238 ! 3 crops high 0.961 (2) 0.961 (2)
239 ! 4 grass low 0.943 (7) 0.943 (7)
240 ! 5 grass medium 0.943 (7) 0.964 (4)
241 ! 6 grass high 0.943 (7) 0.972 (10)
242 ! 7 broadleaf low 0.966 (6) 0.968 (4,10)
243 ! 8 broadleaf medium 0.966 (6) 0.962 (8,9)
244 ! 9 broadleaf high 0.966 (6) 0.962 (8,9)
245 ! 10 needleleaf low 0.976 (5) 0.971 (5,6)
246 ! 11 needleleaf medium 0.976 (5) 0.976 (5)
247 ! 12 needleleaf high 0.976 (5) 0.976 (5)
248 
249 ! Numbers between brackets refer to Jackson's biomes. For more details
250 ! about some choices, see the correspondance between the IGBP and SVAT
251 ! vegetation classes (i.e. in NESTOR).
252 
253 ! * WARNING
254 ! Most of the roots are located in the first 2 m of soil. The root
255 ! fraction per layer depends on the definition of the soil layer
256 ! thickness. It will get wrong if a thick layer is defined around 2 m
257 ! deep.
258 
259  write(*,'(/a)') 'ROOT PROFILES (Jackson, 1996) :'
260 
261  DO ivt = 0, nvgt
262  zdepth = 0.
263  DO isl = 0, -nsoil, -1
264  IF (ivt .ne. 0) THEN
265  rf__sv(ivt,isl) = rbtdsv(ivt)**zdepth * &
266  & (1. - rbtdsv(ivt)**(dz_dsv(isl)*100) )
267  zdepth = zdepth + dz_dsv(isl)*100 !in cm
268  ELSE
269  rf__sv(ivt,isl) = 0.
270  END IF
271  END DO
272  write(*,'(a,i2,a,i3,a,99f10.5:)') &
273  & ' RF__SV(', ivt, ',',-nsoil, ':0) =', rf__sv(ivt,:)
274  END DO
275  write(6,6600)
276  6600 format( &
277  & ' NOTE: If root fraction is not close to 0 around 2 m deep,', &
278  &/,' Then you should redefine the soil layer thicknesses.', &
279  &/,' See the code for more details.')
280 
281 
282 ! Secondary Soil Parameters
283 ! -------------------------------
284 
285  DO ist=0,nsot
286  rocssv(ist)=(1.0-etadsv(ist))*1.2e+6 ! Soil Contrib. to (ro c)_s
287  s1__sv(ist)= bchdsv(ist) &! Factor of (eta)**(b+2)
288  & *psidsv(ist) *ks_dsv(ist) &! in DR97, Eqn.(3.36)
289  & /(etadsv(ist)**( bchdsv(ist)+3.)) !
290  s2__sv(ist)= ks_dsv(ist) &! Factor of (eta)**(2b+3)
291  & /(etadsv(ist)**(2.*bchdsv(ist)+3.)) ! in DR97, Eqn.(3.35)
292 
293 ! Soil Minimum Humidity (from a prescribed minimum relative Humidity)
294 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
295  psimax = -(log(rhsmin))/7.2e-5 ! DR97, Eqn 3.15 Inversion
296  etamsv(ist) = etadsv(ist) &!
297  & *(psimax/psidsv(ist))**(-min(10.,1./bchdsv(ist)))
298  END DO
299  etamsv(12) = 0.
300 
301 ! Piecewise Hydraulic Conductivity Profiles
302 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
303  DO ist=0,nsot
304 
305 ! OUTPUT/Verification: Soil Vertic.Discret.
306 ! #kw write(6,6000)
307  6000 format(' Type | etaSat | No | eta__1 | eta__2 |', &
308  & ' Khyd_1 | Khyd_x | Khyd_2 | Khyd_y |', &
309  & /,' -----+-----------+----+-----------+-----------+', &
310  & '-----------+-----------+-----------+-----------+')
311 
312  d__eta = etadsv(ist)/nkhy
313  eta__1 = 0.
314  eta__2 = d__eta
315  DO ikh=0,nkhy
316  khyd_1 = s2__sv(ist) &! DR97, Eqn.(3.35)
317  & *(eta__1 **(2. *bchdsv(ist)+3.)) !
318  khyd_2 = s2__sv(ist) &!
319  & *(eta__2 **(2. *bchdsv(ist)+3.)) !
320 
321  a_khyd = (khyd_2-khyd_1)/d__eta !
322  b_khyd = khyd_1-a_khyd *eta__1 !
323 
324  akdtsv(ist,ikh) = a_khyd * dt__sv !
325  bkdtsv(ist,ikh) = b_khyd * dt__sv !
326 
327 ! OUTPUT/Verification: Soil Vertic.Discret.
328 ! #kw Khyd_x = a_Khyd*eta__1 +b_Khyd !
329 ! #kw Khyd_y = a_Khyd*eta__2 +b_Khyd !
330 ! #kw write(6,6001) ist,etadSV(ist),ikh,eta__1, &!
331 ! #kw& eta__2,Khyd_1,Khyd_x,Khyd_2,Khyd_y !
332  6001 format(i5,' |',e10.2,' |',i3,' |', &!
333  & 6(e10.2,' |'))
334 
335  eta__1 = eta__1 + d__eta
336  eta__2 = eta__2 + d__eta
337  END DO
338  END DO
339 
340 
341  return
342  end subroutine sisvat_ini
343 
344 
345 
346  subroutine sisvat(jjtime,kcolw)
347 
348 !--------------------------------------------------------------------------+
349 ! MAR SISVAT Sat 29-Jun-2013 MAR |
350 ! SubRoutine SISVAT contains the fortran 77 code of the |
351 ! Soil/Ice Snow Vegetation Atmosphere Transfer Scheme |
352 ! |
353 ! version 3.p.4.1 created by H. Gallee, Thu 14-Feb-2013 |
354 ! Last Modification by H. Gallee, Sat 29-Jun-2013 |
355 ! |
356 !--------------------------------------------------------------------------+
357 ! PARAMETERS: kcolv: Total Number of columns = |
358 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
359 ! X Number of Mosaic Cell per grid box |
360 ! |
361 ! INPUT: daHost : Date Host Model |
362 ! ^^^^^ |
363 ! |
364 ! INPUT: LSmask : 1: Land MASK |
365 ! ^^^^^ 0: Sea MASK |
366 ! ivgtSV = 0,...,12: Vegetation Type |
367 ! isotSV = 0,...,12: Soil Type |
368 ! 0: Water, Liquid (Sea, Lake) |
369 ! 12: Water, Solid (Ice) |
370 ! |
371 ! INPUT: coszSV : Cosine of the Sun Zenithal Distance [-] |
372 ! ^^^^^ sol_SV : Surface Downward Solar Radiation [W/m2] |
373 ! IRd_SV : Surface Downward Longwave Radiation [W/m2] |
374 ! drr_SV : Rain Intensity [kg/m2/s] |
375 ! dsn_SV : Snow Intensity [mm w.e./s] |
376 ! dsnbSV : Snow Intensity, Drift Fraction [-] |
377 ! dbs_SV : Drift Amount [mm w.e.] |
378 ! za__SV : Surface Boundary Layer (SBL) Height [m] |
379 ! VV__SV :(SBL Top) Wind Velocity [m/s] |
380 ! TaT_SV : SBL Top Temperature [K] |
381 ! rhT_SV : SBL Top Air Density [kg/m3] |
382 ! QaT_SV : SBL Top Specific Humidity [kg/kg] |
383 ! qsnoSV : SBL Mean Snow Content [kg/kg] |
384 ! LAI0SV : Leaf Area Index [-] |
385 ! glf0SV : Green Leaf Fraction [-] |
386 ! alb0SV : Soil Basic Albedo [-] |
387 ! dt__SV : Time Step [s] |
388 ! |
389 ! INPUT / isnoSV = total Nb of Ice/Snow Layers |
390 ! OUTPUT: ispiSV = 0,...,nsno: Uppermost Superimposed Ice Layer |
391 ! ^^^^^^ iiceSV = total Nb of Ice Layers |
392 ! istoSV = 0,...,5 : Snow History (see istdSV data) |
393 ! |
394 ! INPUT / alb_SV : Surface-Canopy Albedo [-] |
395 ! OUTPUT: emi_SV : Surface-Canopy Emissivity [-] |
396 ! ^^^^^^ IRs_SV : Soil IR Flux (negative) [W/m2] |
397 ! LMO_SV : Monin-Obukhov Scale [m] |
398 ! us__SV : Friction Velocity [m/s] |
399 ! uts_SV : Temperature Turbulent Scale [m/s] |
400 ! uqs_SV : Specific Humidity Velocity [m/s] |
401 ! uss_SV : Blowing Snow Turbulent Scale [m/s] |
402 ! usthSV : Blowing Snow Erosion Threshold [m/s] |
403 ! Z0m_SV : Momentum Roughness Length [m] |
404 ! Z0mmSV : Momentum Roughness Length (time mean) [m] |
405 ! Z0mnSV : Momentum Roughness Length (instantaneous)[m] |
406 ! Z0SaSV : Sastrugi Roughness Length [m] |
407 ! Z0e_SV : Erosion Snow Roughness Length [m] |
408 ! Z0emSV : Erosion Snow Roughness Length (time mean) [m] |
409 ! Z0enSV : Erosion Snow Roughness Length (instantaneous)[m] |
410 ! Z0roSV : Subgrid Topo Roughness Length [m] |
411 ! Z0h_SV : Heat Roughness Length [m] |
412 ! snCaSV : Canopy Snow Thickness [mm w.e.] |
413 ! rrCaSV : Canopy Water Content [kg/m2] |
414 ! psivSV : Leaf Water Potential [m] |
415 ! TvegSV : Canopy Temperature [K] |
416 ! TsisSV : Soil/Ice Temperatures (layers -nsoil ,...,0) |
417 ! & Snow Temperatures (layers 1,2,..,nsnow) [K] |
418 ! ro__SV : Soil/Snow Volumic Mass [kg/m3] |
419 ! eta_SV : Soil/Snow Water Content [m3/m3] |
420 ! G1snSV : snow dendricity/sphericity |
421 ! G2snSV : snow sphericity/grain size |
422 ! dzsnSV : Snow Layer Thickness [m] |
423 ! agsnSV : Snow Age [day] |
424 ! BufsSV : Snow Buffer Layer [kg/m2] .OR. [mm] |
425 ! BrosSV : Snow Buffer Layer Density [kg/m3] |
426 ! BG1sSV : Snow Buffer Layer Dendricity / Sphericity [-] |
427 ! BG2sSV : Snow Buffer Layer Sphericity / Size [-] [0.1 mm] |
428 ! rusnSV : Surficial Water [kg/m2] .OR. [mm] |
429 ! |
430 ! OUTPUT: no__SV : OUTPUT file Unit Number [-] |
431 ! ^^^^^^ i___SV : OUTPUT point i Coordinate [-] |
432 ! j___SV : OUTPUT point j Coordinate [-] |
433 ! n___SV : OUTPUT point n Coordinate [-] |
434 ! lwriSV : OUTPUT point vec Index [-] |
435 ! |
436 ! OUTPUT: IRu_SV : Upward IR Flux (+, upw., effective) [K] |
437 ! ^^^^^^ hSalSV : Saltating Layer Height [m] |
438 ! qSalSV : Saltating Snow Concentration [kg/kg] |
439 ! RnofSV : RunOFF Intensity [kg/m2/s] |
440 ! |
441 ! Internal Variables: |
442 ! ^^^^^^^^^^^^^^^^^^ |
443 ! NLaysv = New Snow Layer Switch [-] |
444 ! albisv : Snow/Ice/Water/Soil Integrated Albedo [-] |
445 ! SoCasv : Absorbed Solar Radiation by Canopy (Normaliz)[-] |
446 ! SoSosv : Absorbed Solar Radiation by Surfac.(Normaliz)[-] |
447 ! tau_sv : Fraction of Radiation transmitted by Canopy [-] |
448 ! TBr_sv : Brightness Temperature [K] |
449 ! IRupsv : Upward IR Flux (-, upw.) [W/m2] |
450 ! IRv_sv : Vegetation IR Flux [W/m2] |
451 ! rrMxsv : Canopy Maximum Intercepted Rain [kg/m2] |
452 ! Sigmsv : Canopy Ventilation Factor [-] |
453 ! ram_sv : Aerodynamic Resistance for Momentum [s/m] |
454 ! rah_sv : Aerodynamic Resistance for Heat [s/m] |
455 ! HSv_sv : Vegetation Sensible Heat Flux [W/m2] |
456 ! HLv_sv : Vegetation Latent Heat Flux [W/m2] |
457 ! Rootsv : Root Water Pump [kg/m2/s] |
458 ! Evp_sv : Evaporation [kg/m2] |
459 ! EvT_sv : Evapotranspiration [kg/m2] |
460 ! HSs_sv : Surface Sensible Heat Flux + => absorb.[W/m2] |
461 ! HLs_sv : Surface Latent Heat Flux + => absorb.[W/m2] |
462 ! Lx_H2O : Latent Heat of Vaporization/Sublimation [J/kg] |
463 ! Tsrfsv : Surface Temperature [K] |
464 ! LAI_sv : Leaf Area Index (snow included) [-] |
465 ! LAIesv : Leaf Area Index (effective / transpiration) [-] |
466 ! glf_sv : Green Leaf Fraction of NOT fallen Leaves [-] |
467 ! sEX_sv : Verticaly Integrated Extinction Coefficient [-] |
468 ! LSdzsv : Vertical Discretization Factor [-] |
469 ! = 1. Soil |
470 ! = 1000. Ocean |
471 ! z_snsv : Snow Pack Thickness [m] |
472 ! zzsnsv : Snow Pack Thickness [m] |
473 ! albssv : Soil Albedo [-] |
474 ! Evg_sv : Soil+Vegetation Emissivity [-] |
475 ! Eso_sv : Soil+Snow Emissivity [-] |
476 ! psi_sv : Soil Water Potential [m] |
477 ! Khydsv : Soil Hydraulic Conductivity [m/s] |
478 ! |
479 ! ETVg_d : VegetationEnergy Power Forcing [W/m2] |
480 ! ETSo_0 : Snow/Soil Energy Power, before Forcing [W/m2] |
481 ! ETSo_1 : Snow/Soil Energy Power, after Forcing [W/m2] |
482 ! ETSo_d : Snow/Soil Energy Power Forcing [W/m2] |
483 ! EqSn_0 : Snow Energy, before Phase Change [J/m2] |
484 ! EqSn_1 : Snow Energy, after Phase Change [J/m2] |
485 ! EqSn_d : Snow Energy, net Forcing [J/m2] |
486 ! Enrsvd : SVAT Energy Power Forcing [W/m2] |
487 ! Enrbal : SVAT Energy Balance [W/m2] |
488 ! Wats_0 : Soil Water, before Forcing [mm] |
489 ! Wats_1 : Soil Water, after Forcing [mm] |
490 ! Wats_d : Soil Water Forcing [mm] |
491 ! SIWm_0 : Snow initial Mass [mm w.e.] |
492 ! SIWm_1 : Snow final Mass [mm w.e.] |
493 ! SIWa_i : Snow Atmos. initial Forcing [mm w.e.] |
494 ! SIWa_f : Snow Atmos. final Forcing(noConsumed)[mm w.e.] |
495 ! SIWe_i : SnowErosion initial Forcing [mm w.e.] |
496 ! SIWe_f : SnowErosion final Forcing(noConsumed)[mm w.e.] |
497 ! SIsubl : Snow sublimed/deposed Mass [mm w.e.] |
498 ! SImelt : Snow Melted Mass [mm w.e.] |
499 ! SIrnof : Surficial Water + Run OFF Change [mm w.e.] |
500 ! SIvAcr : Sea-Ice vertical Acretion [mm w.e.] |
501 ! Watsvd : SVAT Water Forcing [mm] |
502 ! Watbal : SVAT Water Balance [W/m2] |
503 ! |
504 ! dsn_Ca,snCa_n : Snow Contribution to the Canopy[m w.e.] |
505 ! drr_Ca,rrCa_n,drip: Rain Contribution to the Canopy [kg/m2] |
506 ! vk2 : Square of Von Karman Constant [-] |
507 ! sqrCm0 : Factor of Neutral Drag Coeffic.Momentum [s/m] |
508 ! sqrCh0 : Factor of Neutral Drag Coeffic.Heat [s/m] |
509 ! EmiVeg : Vegetation Emissivity [-] |
510 ! EmiSol : Soil Emissivity [-] |
511 ! EmiSno : Snow Emissivity [-] |
512 ! EmiWat : Water Emissivity [-] |
513 ! Z0mSea : Sea Roughness Length [m] |
514 ! Z0mLnd : Land Roughness Length [m] |
515 ! sqrrZ0 : u*t/u* |
516 ! f_eff : Marticorena & B. 1995 JGR (20) |
517 ! A_Fact : Fundamental * Roughness |
518 ! Z0mBSn : BSnow Roughness Length [m] |
519 ! Z0mBS0 : Mimimum BSnow Roughness Length (blown* ) [m] |
520 ! Z0m_Sn : Snow Roughness Length (surface) [m] |
521 ! Z0m_S0 : Mimimum Snow Roughness Length [m] |
522 ! Z0m_S1 : Maximum Snow Roughness Length [m] |
523 ! Z0_GIM : Minimum GIMEX Roughness Length [m] |
524 ! Z0_ICE : Sea Ice ISW Roughness Length [m] |
525 ! |
526 ! |
527 ! Preprocessing Option: STANDARD Possibility |
528 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ |
529 ! #AE: TURBULENCE: Aerosols Erosion / Turbulent Diffusion Coeff. |
530 ! #BD: TraCer Aeolian Erosion Submodel is turned ON |
531 ! #BS: Explicit Cloud MICROPHYSICS: Blow. *(Snow) Model) |
532 ! #SN: SNOW Model may be turned ON |
533 ! #NP: SNOW Model: Snow Properties may be those of Polar Snow |
534 ! #ZG: SNOW Model: ETH-Camp & Greenland 3D simulations |
535 ! #MB: SNOW Model: Erosion Efficiency (Marticorena & Berga.1995) |
536 ! #SI: SISVAT: Sea-Ice Fraction calculated from prescribed SST |
537 ! #MT: SISVAT: Monin-Obukhov Theory is linearized (Garrat schem) |
538 ! #SH: Soil /Vegetation Model: Hapex-Sahel Vegetation DATA |
539 ! #ZO: SBL: Orography Roughness included from SL_z0 in MARdom |
540 ! #ZW: SBL: Mom.: Roughn.Length= F(u*) Wang MWR 129 , Sea |
541 ! #ZT: SBL: Mom.: Roughn.Length= Typical value in polar models |
542 ! #ZS: SBL: Mom.: Roughn.Length= F(u*) Andreas (1995) Snow |
543 ! #Za: SBL: Mom.: Roughn.Length= F(u*) Andreas &al.(2004), Snow (modif.|
544 ! #ZA: SBL: Mom.: Roughn.Length= F(u*) Andreas &al.(2004), Snow (native|
545 ! #RS: SBL: Heat: Roughn.Length= F(u*,z0) Andreas (1987) Snow, Ice |
546 ! #ZM: SBL: M/H Roughn.Length: Box Moving Average (in Time) |
547 ! |
548 ! |
549 ! Preprocessing Option: STANDARD Col de Porte |
550 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ |
551 ! #CP: Col de Porte Turbulence Parameterization |
552 ! |
553 ! |
554 ! Preprocessing Option: |
555 ! ^^^^^^^^^^^^^^^^^^^^^ |
556 ! #Zw: SBL: Mom.: Roughn.Length= F(u*) Wang MWR 129 bis , Sea |
557 ! #ZN: SBL: Mom.: Roughn.Length= F(u*) Shao & Lin (1999), Snow |
558 ! #ZL: SBL: Z0mL Roughn.Length= F(glf) |
559 ! #FL: SISVAT: LAI Assignation and Fallen Leaves Correction |
560 ! |
561 ! |
562 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
563 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
564 ! FILE | CONTENT |
565 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
566 ! # SISVAT_iii_jjj_n | #e0: OUTPUT on ASCII File (SISVAT Variables) |
567 ! # | Energy Budg. Verif.: Soil+(Sea-Ice)+Snow |
568 ! # |(#e0 MUST BE PREPROCESSED BEFORE #e1 & #e2 !) |
569 ! # SISVAT_iii_jjj_n | #m0: OUTPUT/Verification: H2O Conservation |
570 ! | |
571 ! # stdout | #s0: OUTPUT of Snow Buffer Layer |
572 ! | unit 6, SubRoutine SISVAT **ONLY** |
573 ! # stdout | #s2: OUTPUT of SnowFall, Snow Buffer |
574 ! | unit 6, SubRoutine SISVAT_BSn, _qSn |
575 ! # stdout | #b0: OUTPUT of Snow Erosion Statistics |
576 ! | unit 6, SubRoutine SISVAT_BSn **ONLY** |
577 ! # stdout | #sf: OUTPUT of SnowFall, Z0 and Drag Coeff. |
578 ! | unit 6, SubRoutines PHY_SISVAT, SISVAT |
579 ! # stdout | #sz: OUTPUT of Roughness Length & Drag Coeff. |
580 ! | unit 6, SubRoutine SISVAT **ONLY** |
581 ! |
582 ! SUGGESTIONS of MODIFICATIONS: see lines beginning with "C +!!!" |
583 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
584 !--------------------------------------------------------------------------+
585 
586 
587 ! Global Variables
588 ! =================
589 
590  use mod_real
591  use mod_phy____dat
592  use mod_phy____grd
593  use mod_sisvat_grd
594 
595 
596 
597 ! General Variables
598 ! =================
599 
600  use mod_sisvat_ctr
601  use mod_sisvat_cdp
602  use mod_sisvat_dat
603  use mod_sisvat_dzs
604  use mod_sisvat_kkl
605  use mod_sisvat_log
606  use mod_sisvat_loc
607  use mod_sisvat_aux
608 ! #BS use Mod_SISVAT_BSn
609 
610  use mod_sisvatlmmm
611 
612 
613 
614  IMPLICIT NONE
615 
616 
617 
618  integer :: jjtime
619  integer :: kcolw
620 
621 
622 
623 ! Internal Variables
624 ! ==================
625 
626 ! Non Local
627 ! ---------
628 
629  real(kind=real8) d_Bufs,Bufs_N ! Buffer Snow Layer Increment
630  real(kind=real8) Buf_ro,Bros_N ! Buffer Snow Layer Density
631 ! #NP real(kind=real8) BufPro ! Buffer Snow Layer Density
632  real(kind=real8) Buf_G1,BG1__N ! Buffer Snow Layer Dendr/Sphe[-]
633  real(kind=real8) Buf_G2,BG2__N ! Buffer Snow Layer Spher/Size[-]
634 
635 ! Energy Budget
636 ! ~~~~~~~~~~~~~~~~~~~~~
637 ! #e1 real(kind=real8), dimension(kcolw)::ETSo_0 ! Soil/Snow Power, before Forcing
638 ! #e1 real(kind=real8), dimension(kcolw)::ETSo_1 ! Soil/Snow Power, after Forcing
639 ! #e1 real(kind=real8), dimension(kcolw)::ETSo_d ! Soil/Snow Power, Forcing
640 
641 
642 ! Local
643 ! -----
644 
645 ! #e0 character(len=16) :: FilNam !
646 ! #e0 integer :: noUNIT ! OUTPUT File Unit Number
647 
648  integer :: ikl ,ikv !
649  integer :: isn ,isl !
650  integer :: ist ,n !
651  integer :: ist__s,ist__w ! Soil/Water Body Identifier
652  integer :: growth ! Seasonal Mask
653  integer :: LISmsk ! Land+Ice / Open Sea Mask
654  integer :: LSnMsk ! Snow-Ice / No Snow-Ice Mask
655  integer :: IceMsk ! Ice Mask
656  integer :: SnoMsk ! Snow / No Snow Mask
657 
658  real(kind=real8) :: drip ! Rain Contribution to the Canopy
659  real(kind=real8) :: drr_Ca,rrCa_n ! Rain Contribution to the Canopy
660  real(kind=real8) :: dsn_Ca,snCa_n ! Snow Contribution to the Canopy
661  real(kind=real8) :: roSMin = 30. ! Minimum Snow Density
662  real(kind=real8) :: roSn_1 = 109. ! Fallen Snow Density, Indep. Param. (PAHAUT)
663  real(kind=real8) :: roSn_2 = 6. ! Fallen Snow Density, Temper.Param. (PAHAUT)
664  real(kind=real8) :: roSn_3 = 26. ! Fallen Snow Density, Wind Param. (PAHAUT)
665  real(kind=real8) :: Dendr1 = 17.12 ! Fallen Snow Dendric. Wind 1/Param. (GIRAUD)
666  real(kind=real8) :: Dendr2 = 128. ! Fallen Snow Dendric. Wind 2/Param. (GIRAUD)
667  real(kind=real8) :: Dendr3 = -20. ! Fallen Snow Dendric. Indep. Param. (GIRAUD)
668 
669  real(kind=real8) :: Spher1 = 7.87 ! Fallen Snow Spheric.,Wind 1/Param.
670  real(kind=real8) :: Spher2 = 38. ! Fallen Snow Spheric.,Wind 2/Param.
671  real(kind=real8) :: Spher3 = 50. ! Fallen Snow Spheric.,Wind 3/Param.
672  real(kind=real8) :: Spher4 = 90. ! Fallen Snow Spheric.,Indep. Param. (GIRAUD)
673  real(kind=real8) :: Polair ! Polar Snow Switch
674 ! #BS real(kind=real8) :: PorSno !
675  real(kind=real8) :: Salt_f,PorRef !
676 
677 ! For Diffusion of Surficial Water in the Snow Pack
678 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
679 ! #DW real(kind=real8) :: PorVol,rWater ! Pore Volume, retained Water
680 ! #DW real(kind=real8) :: rusNEW,rdzNEW,etaNEW
681 
682 ! #BS real(kind=real8) :: ro_new !
683 ! #NP real(kind=real8) :: TaPole = 263.15 ! Maximum Polar Temperature
684  real(kind=real8) :: T__Min = 200.00 ! Minimum realistic Temperature
685 
686 ! DATA Emissivities ! Pielke, 1984, pp. 383,409
687 ! ^^^^^^^^^^^^^^^^^^^^^^
688  real(kind=real8) :: EmiVeg = 0.98 ! Emissivity of Vegetation
689  real(kind=real8) :: EmiSol = 0.94 ! Emissivity of Soil
690  real(kind=real8) :: EmiSno = 0.99 ! Emissivity of Snow
691  real(kind=real8) :: EmiWat = 0.99 ! Emissivity of a Water Area
692 
693  real(kind=real8) :: epsLMO = 1.e-18 ! minimum absolute value of LMo
694  real(kind=real8) :: vk2 ! Square of Von Karman Constant
695  real(kind=real8) :: u2star !(u*)**2
696 ! #ZL real(kind=real8) :: fallen = 0.00 ! Fallen Leaves Switch
697  real(kind=real8) :: Z0mSea,Z0hSea ! Sea Roughness Length
698  real(kind=real8) :: Z0mLnd ! Land Roughness Length
699 ! #ZN real(kind=real8) :: sqrrZ0 ! u*t/u*
700 ! #MB real(kind=real8) :: f_eff ! Marticorena & B. 1995 JGR (20)
701  real(kind=real8) :: A_Fact ! Fundamental * Roughness
702 
703  real(kind=real8) :: Z0m_nu ! Smooth R Snow Roughness Length
704  real(kind=real8) :: Z0mBSn ! BSnow Roughness Length
705  real(kind=real8) :: Z0mBS0 = 0.5e-6 ! MINimum BSnow Roughness Length, Momentum
706  ! Gallee et al. 2001 BLM 99 (19)
707 ! real(kind=real8) :: Z0m_S0 = 0.00005! MINimum Snow Roughness Length
708 ! real(kind=real8) :: Z0m_S1 = 0.030 ! MAXimum Snow Roughness Length, Sastrugis
709 ! #ZS real(kind=real8) :: Z0Sa_N ! Regime Snow Roughness Length
710 ! #ZS real(kind=real8) :: Z0SaSi ! 1.IF Rgm Snow Roughness Length
711 ! #ZG real(kind=real8) :: Z0_GIM = 0.0013 ! Mimimum GIMEX Roughness Length Ice Min Z0 = 0.0013 m (Broeke)
712  ! Old Ice Z0 = 0.0500 m (Bruce)
713  ! 0.0500 m (Smeets)
714  ! 0.1200 m (Broeke)
715  real(kind=real8) :: Z0_ICE = 0.0010 ! Sea-Ice ISW Roughness Length (Andreas)
716  real(kind=real8) :: Z0m_Sn ! Snow Surface Roughness Length
717 ! #Za real(kind=real8) :: Z0m_90 ! Snow Surface Roughness Length
718  real(kind=real8) :: SnoWat ! Snow Layer Switch
719 ! #RS real(kind=real8) :: rstar,alors !
720 ! #RS real(kind=real8) :: rstar0,rstar1 !
721 ! #RS real(kind=real8) :: rstar2 !
722  real(kind=real8) :: SameOK ! 1. => Same Type of Grains
723  real(kind=real8) :: G1same ! Averaged G1, same Grains
724  real(kind=real8) :: G2same ! Averaged G2, same Grains
725  real(kind=real8) :: typ__1 ! 1. => Lay1 Type: Dendritic
726  real(kind=real8) :: zroNEW ! dz X ro, if fresh Snow
727  real(kind=real8) :: G1_NEW ! G1, if fresh Snow
728  real(kind=real8) :: G2_NEW ! G2, if fresh Snow
729  real(kind=real8) :: zroOLD ! dz X ro, if old Snow
730  real(kind=real8) :: G1_OLD ! G1, if old Snow
731  real(kind=real8) :: G2_OLD ! G2, if old Snow
732  real(kind=real8) :: SizNEW ! Size, if fresh Snow
733  real(kind=real8) :: SphNEW ! Spheric.,if fresh Snow
734  real(kind=real8) :: SizOLD ! Size, if old Snow
735  real(kind=real8) :: SphOLD ! Spheric.,if old Snow
736  real(kind=real8) :: Siz_av ! Averaged Grain Size
737  real(kind=real8) :: Sph_av ! Averaged Grain Spher.
738  real(kind=real8) :: Den_av ! Averaged Grain Dendr.
739  real(kind=real8) :: DendOK ! 1. => Average is Dendr.
740  real(kind=real8) :: G1diff ! Averaged G1, diff. Grains
741  real(kind=real8) :: G2diff ! Averaged G2, diff. Grains
742  real(kind=real8) :: G1 ! Averaged G1
743  real(kind=real8) :: G2 ! Averaged G2
744 
745 ! Energy and Mass Budget
746 ! ~~~~~~~~~~~~~~~~~~~~~~
747 ! #e1 real(kind=real8) :: EnsBal ! Soil+Snow , Power Balance
748 ! #e1 real(kind=real8) :: EnvBal ! Vegetat, Power Balance
749 
750  ! H2O Conservation
751 ! #m0 real(kind=real8) Watbal ! Soil+Vegetat, Water Balance
752 
753  ! * Mass Conservation
754 ! #m1 real(kind=real8) :: SnoBal ! Snow Pack Mass Balance
755 
756 
757 
758 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
759 ! !
760 ! ALLOCATION !
761 ! ========== !
762 
763  IF (it_run.EQ.1 .OR. flagdalloc) THEN !
764 
765  allocate ( tbr_sv(kcolp,mwp) ) ! Brightness Temperature
766  allocate ( irdwsv(kcolp,mwp) ) ! DOWNward IR Flux
767  allocate ( irupsv(kcolp,mwp) ) ! UPward IR Flux
768  allocate ( bdzssv(kcolp,mwp) ) ! Buffer Snow Layer Thickness
769  allocate ( z_snsv(kcolp,mwp) ) ! Snow-Ice, current Thickness
770 
771 ! Energy Budget
772 ! ~~~~~~~~~~~~~~~~~~~~~
773 ! #e1 allocate ( ETVg_d(kcolp,mwp) ) ! VegetationPower, Forcing
774 ! #e1 allocate ( EqSn_0(kcolp,mwp) ) ! Snow Energy, befor Phase Change
775 ! #e1 allocate ( EqSn_1(kcolp,mwp) ) ! Snow Energy, after Phase Change
776 ! #e1 allocate ( EqSn_d(kcolp,mwp) ) ! Energy in Excess
777 
778 ! OUTPUT/Verification: H2O Conservation
779 ! #m0 allocate ( Wats_0(kcolp,mwp) ) ! Soil Water, before Forcing
780 ! #m0 allocate ( Wats_1(kcolp,mwp) ) ! Soil Water, after Forcing
781 ! #m0 allocate ( Wats_d(kcolp,mwp) ) ! Soil Water, Forcing
782 
783 ! OUTPUT/Verification: * Mass Conservation
784 ! #m1 allocate ( SIsubl(kcolp,mwp) ) ! Snow Sublimed/Deposed Mass
785 ! #m1 allocate ( SImelt(kcolp,mwp) ) ! Snow Melted Mass
786 ! #m1 allocate ( SIrnof(kcolp,mwp) ) ! Local Surficial Water + Run OFF
787 
788 ! OUTPUT/Verification: SeaIce Conservation
789 ! #m2 allocate ( SIvAcr(kcolp,mwp) ) ! Sea-Ice Vertical Acretion
790 
791 ! Energy and Mass Budget
792 ! ~~~~~~~~~~~~~~~~~~~~~~
793 ! #e1 allocate ( Enrsvd(kcolp,mwp) ) ! Soil+Vegetat Power Forcing
794 
795  ! H2O Conservation
796 ! #m0 allocate ( Watsv0(kcolp,mwp) ) ! Soil+Vegetat, before Forcing
797 ! #m0 allocate ( Watsvd(kcolp,mwp) ) ! Soil+Vegetat Water Forcing
798 
799  ! * Mass Conservation
800 ! #m1 allocate ( SIWm_0(kcolp,mwp) ) ! Snow Initial Mass
801 ! #m1 allocate ( SIWm_1(kcolp,mwp) ) ! Snow Final Mass
802 ! #m1 allocate ( SIWa_i(kcolp,mwp) ) ! Snow Initial ATM Forcing
803 ! #m1 allocate ( SIWa_f(kcolp,mwp) ) ! Snow Final ATM Forcing
804 ! #m1 allocate ( SIWe_i(kcolp,mwp) ) ! Snow Initial BLS Forcing
805 ! #m1 allocate ( SIWe_f(kcolp,mwp) ) ! Snow Final BLS Forcing
806 
807 
808  allocate ( icindx(kcolp,mwp) ) ! No Ice Mask
809 
810  allocate ( fallok(kcolp,mwp) ) ! Snow Contribution to the Canopy
811 
812  END IF !
813 ! !
814 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
815 
816 
817 
818 ! Internal DATA
819 ! =============
820 
821  vk2 = vonkrm * vonkrm ! Square of Von Karman Constant
822 ! #FL fallen = 1. ! Fallen Leaves Switch
823 
824 ! #ZD Z0m_S0 = 0.00200 ! MINimum Snow Roughness Length
825  ! MegaDunes included
826 
827 
828 ! BEGIN.main.
829 ! ===========
830 
831  IF (.not.iniout) THEN
832  iniout = .true.
833 
834 ! Snow Pack Thickness
835 ! -------------------
836 
837  DO ikl=1,kcolp
838  DO ikv=1,mwp
839  z_snsv(ikl,ikv) = 0.0
840  END DO
841  END DO
842  DO isn=1,nsnow
843  DO ikl=1,kcolp
844  DO ikv=1,mwp
845  z_snsv(ikl,ikv) = z_snsv(ikl,ikv) + dzsnsv(ikl,ikv,isn)
846  zzsnsv(ikl,ikv,isn) = z_snsv(ikl,ikv)
847  END DO
848  END DO
849  END DO
850 
851 
852 ! SISVAT Forcing VERIFICATION
853 ! ---------------------------
854 
855  IF (irs_sv(1,1).gt.-eps6) &
856  & write(6,600)
857  600 format(/,'### SISVAT ERROR, Soil IR Upward not defined ###', &
858  & /,'### Initialize and Store IRs_SV ###')
859 
860 
861 ! OUTPUT
862 ! ------
863 
864  fillab ='SISVAT'
865  seplab ='_'
866  nwunit = 51
867  END IF
868 
869 ! #e0 DO ikl=1,kcolp
870 ! #e0 DO ikv=1,mwp
871 ! #e0 IF (lwriSV(ikl,ikv).ne.0.AND.no__SV(lwriSV(ikl,ikv)).eq.0)THEN
872 ! #e0 nwUNIT = nwUNIT+1
873 ! #e0 no__SV(lwriSV(ikl,ikv)) = nwUNIT
874 ! #e0 write(FilNam,'(a6,a1,2(i3.3,a1),i1)') &
875 ! #e0& FilLab,SepLab,i___SV(lwriSV(ikl,ikv)), &
876 ! #e0& SepLab,j___SV(lwriSV(ikl,ikv)), &
877 ! #e0& SepLab,n___SV(lwriSV(ikl,ikv))
878 ! #e0 open(unit=nwUNIT,status='unknown',file=FilNam)
879 ! #e0 rewind nwUNIT
880 ! #e0 END IF
881 ! #e0 END DO
882 ! #e0 END DO
883 
884 ! #e0 DO ikl=1,kcolp
885 ! #e0 DO ikv=1,mwp
886 ! #e0 IF (lwriSV(ikl,ikv).ne.0) THEN
887 ! #e0 noUNIT=no__SV(lwriSV(ikl,ikv))
888 ! #e0 write(noUNIT,5000) daHost,i___SV(lwriSV(ikl,ikv)), &
889 ! #e0& j___SV(lwriSV(ikl,ikv)), &
890 ! #e0& n___SV(lwriSV(ikl,ikv)), &
891 ! #e0& Z0m_SV(ikl,ikv) , &
892 ! #e0& albisv(ikl,ikv)
893  5000 format( &
894  & /, a18,'| Grid Point ',2i4, &
895  & ' (',i2,')', &
896  & ' | Z0m =',f12.6,' | Albedo = ',f6.3,' |', &
897  & /,' -------+',7('---------+'),2('--------+'))
898 ! #e0 END IF
899 ! #e0 END DO
900 ! #e0 END DO
901 
902 
903 ! "Soil" Humidity of Water Bodies
904 ! ===============================
905 
906  DO ikl=1,kcolp
907  DO ikv=1,mwp
908  ist = isotsv(ikl,ikv) ! Soil Type
909  ist__s = min(ist, 1) ! 1 => Soil
910  ist__w = 1 - ist__s ! 1 => Water Body
911  DO isl=-nsoil,0
912  eta_sv(ikl,ikv,isl) = eta_sv(ikl,ikv,isl) * ist__s &! Soil
913  & + etadsv(ist) * ist__w ! Water Body
914  END DO
915 
916 
917 ! Vertical Discretization Factor
918 ! ==============================
919 
920  lsdzsv(ikl,ikv) = ist__s &! Soil
921  & + ocndsv * ist__w ! Water Body
922  END DO
923  END DO
924 
925 
926 ! Vegetation Temperature Limits
927 ! =============================
928 
929  DO ikl=1,kcolp
930  DO ikv=1,mwp
931  tvegsv(ikl,ikv) = max(tvegsv(ikl,ikv),t__min) ! T__Min = 200.K
932 
933 
934 ! LAI Assignation and Fallen Leaves Correction (#FL)! Dead Leaves fall
935 ! ==================================================! => LAI = Green Leaves only
936  ! => GLF = 1
937 
938  lai0sv(ikl,ikv) = lai0sv(ikl,ikv)*min(1,ivgtsv(ikl,ikv)) ! NO LAI if
939 ! ! no vegetation
940  glf_sv(ikl,ikv) = glf0sv(ikl,ikv)
941 ! #FL glf_sv(ikl,ikv) = 1. ! #FL
942  lai_sv(ikl,ikv) = lai0sv(ikl,ikv) & !
943 ! #FL& * glf0SV(ikl,ikv) & ! #FL
944  & + 0.
945  END DO
946  END DO
947 
948 
949 ! LAI in Presence of Snow
950 ! =======================
951 
952 ! ASSUMPTION: LAI decreases when Snow Thickness increases,
953 ! ^^^^^^^^^^ becoming 0 when Snow Thickn. = Displac.Height
954  DO ikl=1,kcolp
955  DO ikv=1,mwp
956  lai_sv(ikl,ikv) = lai_sv(ikl,ikv) &
957  & * (1.0 - zzsnsv( ikl,ikv, isnosv(ikl,ikv)) &
958  & /(dh_dsv(ivgtsv(ikl,ikv))+eps6) )
959  lai_sv(ikl,ikv) = max(lai_sv(ikl,ikv),zer0)
960  lai_sv(ikl,ikv) = min(lai_sv(ikl,ikv),ea_max)
961  END DO
962  END DO
963 
964 
965 ! Interception of Rain by the Canopy
966 ! ==================================
967 
968 ! OUTPUT/Verification: H2O Conservation: Vegetation Forcing
969 ! #m0 DO ikl=1,kcolp
970 ! #m0 DO ikv=1,mwp
971 ! #m0 Watsv0(ikl,ikv) = rrCaSV(ikl,ikv) ! Canopy Water Cont.
972 ! #m0 Watsvd(ikl,ikv) = drr_SV(ikl,ikv) ! Precipitation
973 ! #m0 END DO
974 ! #m0 END DO
975 
976 
977 ! New Canopy Water Content
978 ! ------------------------
979 
980  DO ikl=1,kcolp
981  DO ikv=1,mwp
982  rrmxsv(ikl,ikv) = 0.2*max( eps6,lai_sv(ikl,ikv) ) ! Precip. Max. Intercept.
983  sigmsv(ikl,ikv) = 1.0-exp(-min(half*lai_sv(ikl,ikv),ea_max)) ! Canopy Ventilation Coe.
984 ! ! (DR97, eqn 3.6)
985  drr_ca = drr_sv(ikl,ikv) *sigmsv(ikl,ikv) &! Intercepted Rain
986  & *dt__sv !
987  rrca_n = rrcasv(ikl,ikv) +drr_ca ! New Canopy Water Contnt
988  ! (DR97, eqn 3.28)
989  drip = rrca_n -rrmxsv(ikl,ikv) ! Water Drip
990  drip = max(zer0,drip) !
991  rrca_n = rrca_n -drip !
992  IF (rrca_n.LT.1.e-30) rrca_n = 0. !
993  drr_sv(ikl,ikv) = drr_sv(ikl,ikv) +(rrcasv(ikl,ikv) &! Update Rain Contribut.
994  & -rrca_n ) &!
995  & /dt__sv !
996  rrcasv(ikl,ikv) = rrca_n ! Upd.Canopy Water Contnt
997 
998 
999 ! Interception of Snow by the Canopy
1000 ! ==================================
1001 
1002  dsn_ca = dsn_sv(ikl,ikv) *sigmsv(ikl,ikv) &! Intercepted Snow
1003  & *dt__sv !
1004  snca_n = sncasv(ikl,ikv) +dsn_ca ! New Canopy Snow Thickn.
1005  drip = snca_n -rrmxsv(ikl,ikv) !
1006  drip = max(zer0,drip) !
1007  snca_n = snca_n -drip !
1008  dsn_sv(ikl,ikv) = dsn_sv(ikl,ikv) +(sncasv(ikl,ikv) &! Update Snow Contribut.
1009  & -snca_n )&!
1010  & /dt__sv !
1011  sncasv(ikl,ikv) = snca_n ! Upd.Canopy Snow Thickn.
1012  END DO
1013  END DO
1014 
1015 
1016 ! Snow Fall from the Canopy
1017 ! =========================
1018 
1019 ! ASSUMPTION: snow fall from the canopy,
1020 ! ^^^^^^^^^^ when the temperature of the vegetation is positive
1021 ! (.OR. when snow over the canopy is saturated with water)
1022 
1023  DO ikl=1,kcolp
1024  DO ikv=1,mwp
1025  fallok(ikl,ikv) = max(zer0,sign(un_1,tvegsv(ikl,ikv)-tf_sno+eps6)) &
1026  & * max(zer0,sign(un_1,sncasv(ikl,ikv) -eps6))
1027  dsn_sv(ikl,ikv) = dsn_sv(ikl,ikv) +sncasv(ikl,ikv)*fallok(ikl,ikv) &
1028  & /dt__sv
1029  sncasv(ikl,ikv) = sncasv(ikl,ikv) * (1. -fallok(ikl,ikv))
1030 
1031 
1032 ! Blowing Particles Threshold Friction velocity
1033 ! =============================================
1034 
1035 ! #AE usthSV(ikl,ikv) = 1.0e+2
1036  END DO
1037  END DO
1038 
1039 
1040 ! Contribution of Snow to the Surface Snow Pack
1041 ! =============================================
1042 
1043  IF (snomod) THEN
1044 
1045 
1046 ! OUTPUT/Verification: * Mass Conservation
1047 ! #m1 DO ikl=1,kcolp
1048 ! #m1 DO ikv=1,mwp
1049 ! #m1 SIWa_i(ikl,ikv) =(drr_SV(ikl,ikv) + dsn_SV(ikl,ikv)) *dt__SV ![mm w.e.]
1050 ! #m1 SIWe_i(ikl,ikv) = dbs_SV(ikl,ikv) !
1051 ! #m1 SIWm_0(ikl,ikv) = BufsSV(ikl,ikv) + HFraSV(ikl,ikv) *rhoIce !
1052 ! #m1 DO isn=1,nsnow !
1053 ! #m1 SIWm_0(ikl,ikv) = SIWm_0(ikl,ikv) + dzsnSV(ikl,ikv,isn)*ro__SV(ikl,ikv,isn)!
1054 ! #m1 END DO !
1055 ! #m1 END DO
1056 ! #m1 END DO !
1057 
1058 
1059 ! Blowing Snow
1060 ! ------------
1061 
1062 ! **********
1063  IF (blomod) call sisvat_bsn
1064 ! **********
1065 
1066 ! **********
1067 ! #ve call SISVAT_wEq('_BSn ',1)
1068 ! **********
1069 
1070 
1071 ! Sea Ice
1072 ! -------
1073 
1074 ! **********
1075 ! #SI call SISVAT_SIc( &
1076 ! #m2& SIvAcr &
1077 ! #SI& )
1078 ! **********
1079 
1080 ! **********
1081 ! #ve call SISVAT_wEq('_SIc ',0)
1082 ! **********
1083 
1084 
1085 ! Buffer Layer
1086 ! ------------
1087 
1088  DO ikl=1,kcolp
1089  DO ikv=1,mwp
1090  bufssv(ikl,ikv) = bufssv(ikl,ikv) ! [mm w.e.]
1091  d_bufs = max(dsn_sv(ikl,ikv) *dt__sv,0.) ! i.e., [kg/m2]
1092  dsn_sv(ikl,ikv) = 0. !
1093  bufs_n = bufssv(ikl,ikv) +d_bufs !
1094 
1095 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
1096 ! OUTPUT for Buffer G1, G2 variables
1097 ! #s0 IF (ii__AP(ikl).EQ.iwr_SV .AND. jj__AP(ikl).EQ.jwr_SV .AND.&
1098 ! #s0& ikv .EQ.nwr_SV) &
1099 ! #s0& write(6,6601) BufsSV(ikl,ikv) ,d_Bufs,Bufs_N
1100  6601 format(/,'Buffer *: ',3e15.6)
1101 
1102 ! Snow Density
1103 ! ^^^^^^^^^^^^
1104  polair = 0.00 !
1105 ! #NP Polair = max(zer0, &!
1106 ! #NP& sign(un_1,TaPole &!
1107 ! #NP& -TaT_SV(ikl,ikv))) !
1108  buf_ro = max( rosmin, &! Fallen Snow Density
1109  & rosn_1+rosn_2* (tat_sv(ikl,ikv)-tf_sno)&! [kg/m3]
1110  & +rosn_3*sqrt( vv10sv(ikl,ikv))) ! Pahaut (CEN)
1111 ! #NP BufPro = max( rosMin, &! Fallen Snow Density
1112 ! #NP& 104. *sqrt( max( VV10SV(ikl,ikv)-6.0,0.0))) ! Kotlyakov (1961)
1113  bros_n = (1. - polair) * buf_ro &! Temperate Snow
1114 ! #NP& + Polair * BufPro &! Polar Snow
1115  & + 0. !
1116 
1117 ! Instantaneous Density of deposited blown Snow (de Montmollin, 1978)
1118 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1119 ! #BS PorSno = 1.0d00 - BSnoRo &
1120 ! #BS& / rhoIce
1121 ! #BS Salt_f = usthSV(ikl,ikv)/ max(eps6, us__SV(ikl,ikv))
1122 ! #BS Salt_f = min(Salt_f , un_1)
1123 ! #BS PorRef = PorSno / max(eps6,1.-PorSno) &
1124 ! #BS& +log(Salt_f)
1125 ! #BS Por_BS = PorRef / (1.+PorRef)
1126 ! #BS ro_new = rhoIce * (1.-Por_BS)
1127 ! #BS ro_new = max(ro_new , BSnoRo)
1128 ! #BS Bros_N = Bros_N * (1.0-dsnbSV(ikl,ikv)) &
1129 ! #BS& + ro_new * dsnbSV(ikl,ikv)
1130 
1131 ! Instantaneous Density IF deposited blown Snow (Melted* from Canopy)
1132 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1133  bros_n = bros_n * (1.0-fallok(ikl,ikv)) &!
1134  & + 300. * fallok(ikl,ikv) !
1135 
1136 ! Time averaged Density of deposited blown Snow
1137 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1138  brossv(ikl,ikv) =(bros_n * d_bufs &!
1139  & +brossv(ikl,ikv)* bufssv(ikl,ikv)) &!
1140  & / max(eps6,bufs_n) !
1141 
1142 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
1143 ! OUTPUT for Buffer G1, G2 variables
1144 ! #s0 IF (ii__AP(ikl).EQ.iwr_SV .AND. jj__AP(ikl).EQ.jwr_SV .AND. &
1145 ! #s0& ikv .EQ.nwr_SV) &
1146 ! #s0& write(6,6602) Buf_ro,Bros_N,BrosSV(ikl,ikv),dsnbSV(ikl,ikv)
1147  6602 format('rho *: ',3e15.6,' dsnbSV: ',e15.6)
1148 
1149 ! S.Falling Snow Properties (computed as in SISVAT_zAg)
1150 ! ^^^^^^^^^^^^^^^^^^^^^^^
1151  buf_g1 = max(-g1_dsv, &! Temperate Snow
1152  & min(dendr1*vv__sv(ikl,ikv)-dendr2, &! Dendricity
1153  & dendr3 )) !
1154  buf_g2 = min( spher4, &! Temperate Snow
1155  & max(spher1*vv__sv(ikl,ikv)+spher2, &! Sphericity
1156  & spher3 )) !
1157  buf_g1 = (1. - polair) * buf_g1 &! Temperate Snow
1158  & + polair * g1_dsv ! Polar Snow
1159  buf_g2 = (1. - polair) * buf_g2 &! Temperate Snow
1160  & + polair * adsdsv ! Polar Snow
1161  g1 = buf_g1 ! NO Blown Snow
1162  g2 = buf_g2 ! NO Blown Snow
1163 
1164 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
1165 ! OUTPUT for Buffer G1, G2 variables
1166 ! #s0 IF (ii__AP(ikl).EQ.iwr_SV .AND. jj__AP(ikl).EQ.jwr_SV .AND. &
1167 ! #s0& ikv .EQ.nwr_SV) &
1168 ! #s0& write(6,6603) BG1sSV(ikl,ikv),BG2sSV(ikl,ikv)
1169  6603 format('G1,G2 *: ',3e15.6)
1170 
1171 ! S.1. Meme Type de Neige / same Grain Type
1172 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1173 ! #BS SameOK = max(zer0, &
1174 ! #BS& sign(un_1, Buf_G1 *G1_dSV &
1175 ! #BS& - eps_21 ))
1176 ! #BS G1same = ((1.0-dsnbSV(ikl,ikv))*Buf_G1+dsnbSV(ikl,ikv) *G1_dSV)
1177 ! #BS G2same = ((1.0-dsnbSV(ikl,ikv))*Buf_G2+dsnbSV(ikl,ikv) *ADSdSV)
1178 ! Blowing Snow Properties: G1_dSV, ADSdSV
1179 
1180 ! S.2. Types differents / differents Types
1181 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1182 ! #BS typ__1 = max(zer0,sign(un_1,eps6-Buf_G1)) ! =1.=> Dendritic
1183 ! #BS zroNEW = typ__1 *(1.0-dsnbSV(ikl,ikv)) &! fract.Dendr.Lay.
1184 ! #BS& + (1.-typ__1) * dsnbSV(ikl,ikv) !
1185 ! #BS G1_NEW = typ__1 *Buf_G1 &! G1 of Dendr.Lay.
1186 ! #BS& + (1.-typ__1) *G1_dSV !
1187 ! #BS G2_NEW = typ__1 *Buf_G2 &! G2 of Dendr.Lay.
1188 ! #BS& + (1.-typ__1) *ADSdSV !
1189 ! #BS zroOLD = (1.-typ__1) *(1.0-dsnbSV(ikl,ikv)) &! fract.Spher.Lay.
1190 ! #BS& + typ__1 * dsnbSV(ikl,ikv) !
1191 ! #BS G1_OLD = (1.-typ__1) *Buf_G1 &! G1 of Spher.Lay.
1192 ! #BS& + typ__1 *G1_dSV !
1193 ! #BS G2_OLD = (1.-typ__1) *Buf_G2 &! G2 of Spher.Lay.
1194 ! #BS& + typ__1 *ADSdSV !
1195 ! #BS SizNEW = -G1_NEW *DDcdSV/G1_dSV &! Size Dendr.Lay.
1196 ! #BS& +(1.+G1_NEW /G1_dSV) &!
1197 ! #BS& *(G2_NEW *DScdSV/G1_dSV &!
1198 ! #BS& +(1.-G2_NEW /G1_dSV)*DFcdSV) !
1199 ! #BS SphNEW = G2_NEW /G1_dSV ! Spher.Dendr.Lay.
1200 ! #BS SizOLD = G2_OLD ! Size Spher.Lay.
1201 ! #BS SphOLD = G1_OLD /G1_dSV ! Spher.Spher.Lay.
1202 ! #BS Siz_av = (zroNEW*SizNEW+zroOLD*SizOLD) ! Averaged Size
1203 ! #BS Sph_av = min( zroNEW*SphNEW+zroOLD*SphOLD &!
1204 ! #BS& , un_1) ! Averaged Sphericity
1205 ! #BS Den_av = min((Siz_av -( Sph_av *DScdSV &!
1206 ! #BS& +(1.-Sph_av)*DFcdSV)) &!
1207 ! #BS& / (DDcdSV -( Sph_av *DScdSV &!
1208 ! #BS& +(1.-Sph_av)*DFcdSV)) &!
1209 ! #BS& , un_1) !
1210 ! #BS DendOK = max(zer0, !
1211 ! #BS& sign(un_1, Sph_av *DScdSV &! Small Grains
1212 ! #BS& +(1.-Sph_av)*DFcdSV &! Faceted Grains
1213 ! #BS& - Siz_av )) !
1214 ! REMARQUE: le type moyen (dendritique ou non) depend
1215 ! ^^^^^^^^ de la comparaison avec le diametre optique
1216 ! d'une neige recente de dendricite nulle
1217 ! REMARK: the mean type (dendritic or not) depends
1218 ! ^^^^^^ on the comparaison with the optical diameter
1219 ! of a recent snow having zero dendricity
1220 
1221 ! #BS G1diff =( -DendOK *Den_av &!
1222 ! #BS& +(1.-DendOK)*Sph_av) *G1_dSV !
1223 ! #BS G2diff = DendOK *Sph_av *G1_dSV &!
1224 ! #BS& +(1.-DendOK)*Siz_av !
1225 ! #BS G1 = SameOK *G1same &!
1226 ! #BS& +(1.-SameOK)*G1diff !
1227 ! #BS G2 = SameOK *G2same &!
1228 ! #BS& +(1.-SameOK)*G2diff !
1229 
1230  bg1__n =((1. - fallok(ikl,ikv))* g1 &!
1231  & + fallok(ikl,ikv) * 99.) &! Melted * from Canopy
1232  & * d_bufs/max(eps6,d_bufs) !
1233  bg2__n =((1. - fallok(ikl,ikv))* g2 &!
1234  & + fallok(ikl,ikv) * 30.) &! Melted * from Canopy
1235  & * d_bufs/max(eps6,d_bufs) !
1236 
1237 ! S.Buffer Snow Properties (computed as in SISVAT_zAg)
1238 ! ^^^^^^^^^^^^^^^^^^^^^^^
1239  buf_g1 = bg1__n ! Falling Snow
1240  buf_g2 = bg2__n ! Falling Snow
1241 
1242 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
1243 ! OUTPUT for Buffer G1, G2 variables
1244 ! #s0 IF (ii__AP(ikl).EQ.iwr_SV .AND. jj__AP(ikl).EQ.jwr_SV .AND. &
1245 ! #s0& ikv .EQ.nwr_SV) &
1246 ! #s0& write(6,6604) Buf_G1 ,Buf_G2 ,FallOK(ikl,ikv) &
1247 ! #s0& ,TvegSV(ikl,ikv)
1248  6604 format('G1,G2 F*: ',3e15.6,' T__Veg: ',e15.6)
1249 
1250 ! S.1. Meme Type de Neige / same Grain Type
1251 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1252  sameok = max(zer0, &
1253  & sign(un_1, buf_g1 *bg1ssv(ikl,ikv) &
1254  & - eps_21 ))
1255  g1same = (d_bufs*buf_g1+bufssv(ikl,ikv)*bg1ssv(ikl,ikv)) &
1256  & /max(eps6,bufs_n)
1257  g2same = (d_bufs*buf_g2+bufssv(ikl,ikv)*bg2ssv(ikl,ikv)) &
1258  & /max(eps6,bufs_n)
1259 
1260 ! S.2. Types differents / differents Types
1261 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1262  typ__1 = max(zer0,sign(un_1,eps6-buf_g1)) ! =1.=> Dendritic
1263  zronew =( typ__1 *d_bufs &! fract.Dendr.Lay.
1264  & + (1.-typ__1) *bufssv(ikl,ikv)) &!
1265  & /max(eps6,bufs_n) !
1266  g1_new = typ__1 *buf_g1 &! G1 of Dendr.Lay.
1267  & + (1.-typ__1) *bg1ssv(ikl,ikv) !
1268  g2_new = typ__1 *buf_g2 &! G2 of Dendr.Lay.
1269  & + (1.-typ__1) *bg2ssv(ikl,ikv) !
1270  zroold =((1.-typ__1) *d_bufs &! fract.Spher.Lay.
1271  & + typ__1 *bufssv(ikl,ikv)) &!
1272  & /max(eps6,bufs_n) !
1273  g1_old = (1.-typ__1) *buf_g1 &! G1 of Spher.Lay.
1274  & + typ__1 *bg1ssv(ikl,ikv) !
1275  g2_old = (1.-typ__1) *buf_g2 &! G2 of Spher.Lay.
1276  & + typ__1 *bg2ssv(ikl,ikv) !
1277  siznew = -g1_new *ddcdsv/g1_dsv &! Size Dendr.Lay.
1278  & +(1.+g1_new /g1_dsv) &!
1279  & *(g2_new *dscdsv/g1_dsv &!
1280  & +(1.-g2_new /g1_dsv)*dfcdsv) !
1281  sphnew = g2_new /g1_dsv ! Spher.Dendr.Lay.
1282  sizold = g2_old ! Size Spher.Lay.
1283  sphold = g1_old /g1_dsv ! Spher.Spher.Lay.
1284  siz_av = ( zronew *siznew+zroold*sizold) ! Averaged Size
1285  sph_av = min( zronew *sphnew+zroold*sphold &!
1286  & , un_1 ) ! Averaged Sphericity
1287  den_av = min((siz_av - ( sph_av *dscdsv &!
1288  & +(1.-sph_av)*dfcdsv))&!
1289  & / (ddcdsv - ( sph_av *dscdsv &!
1290  & +(1.-sph_av)*dfcdsv))&!
1291  & , un_1 )!
1292  dendok = max(zer0, &!
1293  & sign(un_1, sph_av *dscdsv &! Small Grains
1294  & +(1.-sph_av)*dfcdsv &! Faceted Grains
1295  & - siz_av )) !
1296 ! REMARQUE: le type moyen (dendritique ou non) depend
1297 ! ^^^^^^^^ de la comparaison avec le diametre optique
1298 ! d'une neige recente de dendricite nulle
1299 ! REMARK: the mean type (dendritic or not) depends
1300 ! ^^^^^^ on the comparaison with the optical diameter
1301 ! of a recent snow having zero dendricity
1302 
1303  g1diff =( -dendok *den_av &
1304  & +(1.-dendok)*sph_av) *g1_dsv
1305  g2diff = dendok *sph_av *g1_dsv &
1306  & +(1.-dendok)*siz_av
1307  g1 = sameok *g1same &
1308  & +(1.-sameok)*g1diff
1309  g2 = sameok *g2same &
1310  & +(1.-sameok)*g2diff
1311 
1312  bg1ssv(ikl,ikv) = g1 &!
1313  & * bufs_n/max(eps6,bufs_n) !
1314  bg2ssv(ikl,ikv) = g2 &!
1315  & * bufs_n/max(eps6,bufs_n) !
1316 
1317 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
1318 ! OUTPUT for Buffer G1, G2 variables
1319 ! #s0 IF (ii__AP(ikl).EQ.iwr_SV .AND. jj__AP(ikl).EQ.jwr_SV .AND. &
1320 ! #s0& ikv .EQ.nwr_SV) &
1321 ! #s0& write(6,6605) Buf_G1 ,typ__1 &
1322 ! #s0& ,DendOK ,Den_av ,Sph_av ,Siz_av &
1323 ! #s0& ,G1same ,G1diff ,G1
1324  6605 format('B1,Typ : ',2e15.6,11x,'OK,Den,Sph,Siz: ',4e15.6 &
1325  & ,/,' ',30x ,11x,'sam,dif,G1 : ',3e15.6)
1326 
1327 ! Update of Buffer Layer Content & Decision about creating a new snow layer
1328 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1329  bufssv(ikl,ikv) = bufs_n ! [mm w.e.]
1330  nlaysv(ikl,ikv) = min(un_1, &!
1331  & max(zer0, &! Allows to create
1332  & sign(un_1,bufssv(ikl,ikv)&! a new snow Layer
1333  & -smndsv )) &! if Buffer > SMndSV
1334  & *max(zer0, &! Except if * Erosion
1335  & sign(un_1,half &! dominates
1336  & -dsnbsv(ikl,ikv))) &!
1337  & +max(zer0, &! Allows to create
1338  & sign(un_1,bufssv(ikl,ikv)&! a new snow Layer
1339  & -smndsv*3.00))) ! is Buffer > SMndSV*3
1340 
1341  bdzssv(ikl,ikv) = 1.e-3*bufssv(ikl,ikv)*rhowat &! [mm w.e.] -> [m w.e.]
1342  & /max(eps6,brossv(ikl,ikv))!& [m w.e.] -> [m]
1343 
1344 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
1345 ! OUTPUT for Buffer G1, G2 variables
1346 ! #s0 IF (ii__AP(ikl).EQ.iwr_SV .AND. jj__AP(ikl).EQ.jwr_SV .AND. &
1347 ! #s0& ikv .EQ.nwr_SV) &
1348 ! #s0& write(6,6606) BG1sSV(ikl,ikv),BG2sSV(ikl,ikv) &
1349 ! #s0& ,NLaysv(ikl,ikv),BdzsSV(ikl,ikv)
1350  6606 format('G1,G2 N*: ',2e15.6,i15,e27.6)
1351 
1352  END DO
1353  END DO
1354 
1355 
1356 ! Snow Pack Discretization
1357 ! ========================
1358 
1359 ! **********
1360  call sisvat_zsn
1361 ! **********
1362 
1363 ! **********
1364 ! #ve call SISVAT_wEq('_zSn ',0)
1365 ! **********
1366 
1367 ! OUTPUT in SISVAT for ikl = 1 (preferably for Stand Alone Version)
1368 ! OUTPUT for SnowFall and Snow Buffer
1369 ! #s2 IF (isnoSV(1,1) .GT. 0) &
1370 ! #s2& write(6,6004)isnoSV(1,1), dsn_SV(1) *dt__SV + BufsSV(1), &
1371 ! #s2& (dzsnSV(1,isn)*ro__SV(1,isn),isn=1,isnoSV(1,1))
1372  6004 format(i3,' dsn+Buf=',f6.2,6x,'z dz *ro =',10f6.2, &
1373  & (/,35x,10f6.2))
1374 
1375 
1376 ! Add a new Snow Layer
1377 ! ====================
1378 
1379  DO ikl=1,kcolp
1380  DO ikv=1,mwp
1381  isnosv(ikl,ikv) = isnosv(ikl,ikv) +nlaysv(ikl,ikv)
1382  isn = isnosv(ikl,ikv)
1383  dzsnsv(ikl,ikv,isn) = dzsnsv(ikl,ikv,isn) * float(1-nlaysv(ikl,ikv)) &
1384  & + bdzssv(ikl,ikv) * float( nlaysv(ikl,ikv))
1385  tsissv(ikl,ikv,isn) = tsissv(ikl,ikv,isn) * float(1-nlaysv(ikl,ikv)) &
1386  & + min(tat_sv(ikl,ikv),tf_sno)*float(nlaysv(ikl,ikv))
1387  ro__sv(ikl,ikv,isn) = ro__sv(ikl,ikv,isn) * float(1-nlaysv(ikl,ikv)) &
1388  & + brossv(ikl,ikv) * float( nlaysv(ikl,ikv))
1389  eta_sv(ikl,ikv,isn) = eta_sv(ikl,ikv,isn) * float(1-nlaysv(ikl,ikv))! + 0.
1390  agsnsv(ikl,ikv,isn) = agsnsv(ikl,ikv,isn) * float(1-nlaysv(ikl,ikv))! + 0.
1391  g1snsv(ikl,ikv,isn) = g1snsv(ikl,ikv,isn) * float(1-nlaysv(ikl,ikv)) &
1392  & + bg1ssv(ikl,ikv) * float( nlaysv(ikl,ikv))
1393  g2snsv(ikl,ikv,isn) = g2snsv(ikl,ikv,isn) * float(1-nlaysv(ikl,ikv)) &
1394  & + bg2ssv(ikl,ikv) * nlaysv(ikl,ikv)
1395  istosv(ikl,ikv,isn) = istosv(ikl,ikv,isn) * (1-nlaysv(ikl,ikv)) &
1396  & + max(zer0,sign(un_1,tat_sv(ikl,ikv) &
1397  & -tf_sno-eps_21)) * istdsv(2) &
1398  & * nlaysv(ikl,ikv)
1399  bufssv(ikl,ikv) = bufssv(ikl,ikv) * float(1-nlaysv(ikl,ikv))
1400  nlaysv(ikl,ikv) = 0
1401  END DO
1402  END DO
1403 
1404 
1405 ! Snow Pack Thickness
1406 ! -------------------
1407 
1408  DO ikl=1,kcolp
1409  DO ikv=1,mwp
1410  z_snsv(ikl,ikv) = 0.0
1411  END DO
1412  END DO
1413  DO isn=1,nsnow
1414  DO ikl=1,kcolp
1415  DO ikv=1,mwp
1416  z_snsv(ikl,ikv) = z_snsv(ikl,ikv) + dzsnsv(ikl,ikv,isn)
1417  zzsnsv(ikl,ikv,isn) = z_snsv(ikl,ikv)
1418  END DO
1419  END DO
1420  END DO
1421 
1422 
1423 ! Diffusion of Surficial Water in the Snow Pack
1424 ! ---------------------------------------------
1425 
1426 ! #DW DO isn=1,nsnow
1427 ! #DW DO ikl=1,kcolp
1428 ! #DW DO ikv=1,mwp
1429 ! #DW PorVol = 1. - ro__SV(ikl,ikv,isn) / rhoIce !
1430 ! #DW PorVol = max(PorVol ,zer0 ) !
1431 ! #DW rWater = ws0dSV * PorVol *rhoWat*dzsnSV(ikl,ikv,isn) &
1432 ! #DW& * max(zer0, &
1433 ! #DW& sign(un_1,rusnSV(ikl,ikv)/rhoWat-zzsnsv(ikl,ikv,isn) &
1434 ! #DW& +dzsnSV(ikl,ikv,isn)))
1435 ! #DW rusNEW = max(rusnSV(ikl,ikv)-rWater,zer0 )
1436 ! #DW rWater = rusnSV(ikl,ikv)-rusNEW
1437 ! #DW rdzNEW = rWater &
1438 ! #DW& + ro__SV(ikl,ikv,isn) * dzsnSV(ikl,ikv,isn)
1439 ! #DW etaNEW = rWater / max(eps6,rdzNEW)
1440 ! #DW rusnSV(ikl,ikv) = rusNEW
1441 ! #DW ro__SV(ikl,ikv,isn) = rdzNEW / max(eps6,dzsnSV(ikl,ikv,isn))
1442 ! #DW eta_SV(ikl,ikv,isn) = eta_SV(ikl,ikv,isn) +etaNEW
1443 ! #DW END DO
1444 ! #DW END DO
1445 ! #DW END DO
1446 
1447  END IF
1448 
1449 ! OUTPUT in SISVAT for ikl = 1 (preferably for Stand Alone Version)
1450 ! OUTPUT for SnowFall and Snow Buffer
1451 ! #s2 IF (isnoSV(1,1) .GT. 0) &
1452 ! #s2& write(6,6006)isnoSV(1,1), dsn_SV(1) *dt__SV + BufsSV(1), &
1453 ! #s2& (dzsnSV(1,isn)*ro__SV(1,isn),isn=1,isnoSV(1,1))
1454  6006 format(i3,' dsn+Buf=',f6.2,6x,'* dz *ro =',10f6.2, &
1455  & (/,35x,10f6.2))
1456 
1457 
1458 ! Blowing Dust
1459 ! ============
1460 
1461 ! #BD IF (BloMod) THEN
1462 
1463 ! ***************
1464 ! #BD call SISVAT_BDu
1465 ! ***************
1466 
1467 ! #BD END IF
1468 
1469 
1470 
1471 ! Soil Albedo: Soil Humidity Correction
1472 ! ==========================================
1473 
1474 ! REFERENCE: McCumber and Pielke (1981), Pielke (1984)
1475 ! ^^^^^^^^^
1476  DO ikl=1,kcolp
1477  DO ikv=1,mwp
1478  albssv(ikl,ikv) = &
1479  & alb0sv(ikl,ikv) *(1.0-min(half,eta_sv( ikl,ikv,0) &
1480  & /etadsv(isotsv(ikl,ikv))))
1481 ! REMARK: Albedo of Water Surfaces (isotSV=0):
1482 ! ^^^^^^ alb0SV := 2 X effective value, while
1483 ! eta_SV := etadSV
1484  END DO
1485  END DO
1486 
1487 
1488 ! Snow Pack Optical Properties
1489 ! ============================
1490 
1491  IF (snomod) THEN
1492 
1493 ! ******
1494  call snoptp( &
1495 ! #AG& jjtime &
1496  & )
1497 ! ******
1498 
1499  ELSE
1500  DO ikl=1,kcolp
1501  DO ikv=1,mwp
1502  sex_sv(ikl,ikv,1) = 1.0
1503  sex_sv(ikl,ikv,0) = 0.0
1504  albisv(ikl,ikv) = albssv(ikl,ikv)
1505  END DO
1506  END DO
1507  END IF
1508 
1509 ! **********
1510 ! #ve call SISVAT_wEq('SnOptP',0)
1511 ! **********
1512 
1513 
1514 ! Solar Radiation Absorption and Effective Leaf Area Index
1515 ! ========================================================
1516 
1517 ! ******
1518  call vgoptp
1519 ! ******
1520 
1521 
1522 ! Surface-Canopy Emissivity
1523 ! =========================
1524 
1525  DO ikl=1,kcolp
1526  DO ikv=1,mwp
1527  lsnmsk = min( 1,isnosv(ikl,ikv))
1528  tau_sv(ikl,ikv)= exp( -lai_sv(ikl,ikv)) ! Veg Transmit.Frac.
1529  evg_sv(ikl,ikv)= emiveg*(1-lsnmsk)+emisno*lsnmsk ! Veg+Sno Emissivity
1530  eso_sv(ikl,ikv)= emisol*(1-lsnmsk)+emisno*lsnmsk ! Sol+Sno Emissivity
1531  emi_sv(ikl,ikv)= &
1532  & (((emisol* tau_sv(ikl,ikv) &
1533  & +emiveg*(1.0-tau_sv(ikl,ikv))) *lsmask(ikl,ikv)) &
1534  & + emiwat *(1-lsmask(ikl,ikv)))*(1-lsnmsk)&
1535  & + emisno *lsnmsk
1536  END DO
1537  END DO
1538 
1539 
1540 ! Soil/Vegetation Forcing/ Upward IR (INPUT, from previous time step)
1541 ! ===================================================================
1542 
1543  DO ikl=1,kcolp
1544  DO ikv=1,mwp
1545 ! #e1 Enrsvd(ikl,ikv) = - IRs_SV(ikl,ikv)
1546  irupsv(ikl,ikv) = irs_sv(ikl,ikv) * tau_sv(ikl,ikv) ! Upward IR
1547  END DO
1548  END DO
1549 
1550 
1551 ! Turbulence
1552 ! ==========
1553 
1554 ! Latent Heat of Vaporization/Sublimation
1555 ! ---------------------------------------
1556 
1557  DO ikl=1,kcolp
1558  DO ikv=1,mwp
1559  snowat = min(isnosv(ikl,ikv),0)
1560  lx_h2o(ikl,ikv) = &
1561  & (1.-snowat) * lhvh2o &
1562  & + snowat *(lhsh2o * (1.-eta_sv(ikl,ikv,isnosv(ikl,ikv))) &
1563  & +lhvh2o * eta_sv(ikl,ikv,isnosv(ikl,ikv)) )
1564  END DO
1565  END DO
1566 
1567 
1568 ! Roughness Length for Momentum
1569 ! -----------------------------
1570 
1571 ! Land+Sea-Ice / Ice-free Sea Mask
1572 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1573  DO ikl=1,kcolp
1574  DO ikv=1,mwp
1575  icindx(ikl,ikv) = 0
1576  END DO
1577  END DO
1578  DO isn=1,nsnow
1579  DO ikl=1,kcolp
1580  DO ikv=1,mwp
1581  icindx(ikl,ikv) = max(icindx(ikl,ikv), &
1582  & isn*max(0, &
1583  & sign(1, &
1584  & int(ro__sv(ikl,ikv,isn)-900.))))
1585  END DO
1586  END DO
1587  END DO
1588 
1589  DO ikl=1,kcolp
1590  DO ikv=1,mwp
1591  lismsk = min(iicesv(ikl,ikv) ,1 )
1592  lismsk = max(lsmask(ikl,ikv),lismsk)
1593  icemsk = max(0,sign(1 ,icindx(ikl,ikv)-1) )
1594  snomsk = max(min(isnosv(ikl,ikv)-iicesv(ikl,ikv),1),0)
1595 
1596 ! Sea Roughness Length
1597 ! ^^^^^^^^^^^^^^^^^^^^^
1598  z0msea = 0.0002
1599  z0hsea = 0.000049
1600 
1601 ! #Zw Z0mSea = 0.0185*us__SV(ikl,ikv)*us__SV(ikl,ikv) ! Doyle MWR 130
1602 ! #Zw& *Grav_I &! p.3088 2e col
1603 
1604 ! #ZW Z0mSea = 0.016 *us__SV(ikl,ikv)*us__SV(ikl,ikv) &! Wang MWR 129
1605 ! #ZW& *Grav_I &! p.1377 (21)
1606 ! #ZW& + 0.11 *A_MolV &!
1607 ! #ZW& / max(eps6 ,us__SV(ikl,ikv)) !
1608 
1609 ! #Zw Z0mSea = 0.0185*us__SV(ikl,ikv)*us__SV(ikl,ikv) &! Wang MWR 129
1610 ! #Zw& *Grav_I &! p.1377 (21)
1611 ! #Zw& + 0.135 *A_MolV &! (adapted)
1612 ! #Zw& / max(eps6 ,us__SV(ikl,ikv)) !
1613 
1614 ! #ZW Z0hSea = max(0.000049, &! Wang MWR 129
1615 ! #ZW& 0.20 *A_MolV &! p.1377 (22)
1616 ! #ZW& / max(eps6 ,us__SV(ikl,ikv)))
1617 
1618 ! #ZW Z0mSea = max(Z0mSea,eps6) !
1619 
1620 ! Land Roughness Length, Snow Contribution excluded
1621 ! ^^^^^^^^^^^^^^^^^^^^^^ Ice Contribution included
1622 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1623 ! If vegetation Seasonal Cycle described by LAI :
1624  growth =min(max(0,7-ivgtsv(ikl,ikv)),1)
1625  z0mlnd = z0mdsv(ivgtsv(ikl,ikv))*lai_sv(ikl,ikv)*growth &
1626  & /laidsv &
1627  & + z0mdsv(ivgtsv(ikl,ikv))* (1-growth)
1628 
1629 ! If vegetation Seasonal Cycle described by GLF only:
1630 ! #ZL Z0mLnd = &
1631 ! #ZL& fallen * Z0mLnd &
1632 ! #ZL& +(1.-fallen)* Z0mdSV(ivgtSV(ikl,ikv))*glf_sv(ikl,ikv)*growth &
1633 ! #ZL& + Z0mdSV(ivgtSV(ikl,ikv))* (1-growth)
1634 
1635 ! Land Roughness Length, Influence of the Masking by Snow
1636 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1637  z0mlnd =max( z0mlnd , &
1638  & z0mdsv(0)*(1-icemsk) &
1639  & +z0_ice * icemsk )
1640  z0mlnd = z0mlnd &
1641  & -(zzsnsv(ikl,ikv, isnosv(ikl,ikv)) &
1642  & -zzsnsv(ikl,ikv,max(icindx(ikl,ikv),0)))/7.
1643  z0mlnd =max( z0mlnd , 5.e-5 ) ! Min set := Z0 on *
1644 ! Roughness disappears under Snow
1645 ! Assumption Height/Roughness Length = 7 is used
1646 
1647 ! Z0 Smooth Regime over Snow (Andreas 1995, CRREL Report 95-16, p. 8)
1648 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1649  z0m_nu = 5.e-5 ! z0s~(10-d)*exp(-vonKrm/sqrt(1.1e-03))
1650 
1651 ! Z0 Saltat.Regime over Snow (Gallee et al., 2001, BLM 99 (19) p.11)
1652 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1653  u2star = us__sv(ikl,ikv) *us__sv(ikl,ikv)
1654  z0mbsn = u2star *0.536e-3 - 61.8e-6
1655  z0mbsn = max(z0mbs0 ,z0mbsn)
1656 
1657 ! Z0 Smooth + Saltat. Regime
1658 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1659  z0ensv(ikl,ikv) = z0m_nu &
1660  & + z0mbsn
1661 
1662 ! Rough Snow Surface Roughness Length (Typical Value)
1663 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1664  z0m_sn = 0.250e-3 ! Andreas 1995, CRREL Report 95-16, fig.1&p.2
1665  ! z0r~(10-d)*exp(-vonKrm/sqrt(1.5e-03))-5.e-5
1666  z0m_sn = 2.000e-3 ! Calibration of MAR
1667 ! #ZT Z0m_Sn = 1.000e-3 ! Exemple Tuning in RACMO
1668 ! #ZT Z0m_Sn = 0.500e-3 ! Exemple Tuning in MAR
1669 
1670 ! Rough Snow Surface Roughness Length (Variable Sastrugi Height)
1671 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1672  a_fact = 1.0000 ! Andreas et al., 2004, p.4
1673  ! ams.confex.com/ams/pdfpapers/68601.pdf
1674 
1675 ! ! 0050=.003/.6
1676 ! #ZS Z0Sa_N = (us__SV(ikl,ikv) -0.2)*0.0050 &! 0053=TUNING
1677 ! #ZS& * max(zer0,sign(un_1,Tf_Sno-eps9 &!
1678 ! #ZS& -TsisSV(ikl,ikv , isnoSV(ikl,ikv))))
1679 !!#ZS Z0SaSi = max(zer0,sign(un_1,Z0Sa_N )) ! 1 if erosion
1680 ! #ZS Z0SaSi = max(zer0,sign(un_1,zer0 -eps9 -uss_SV(ikl,ikv))) !
1681 ! #ZS Z0Sa_N = max(zer0, Z0Sa_N)
1682 ! #ZS Z0SaSV(ikl,ikv) = &!
1683 ! #ZS& max(Z0SaSV(ikl,ikv) ,Z0SaSV(ikl,ikv) &!
1684 ! #ZS& + Z0SaSi*(Z0Sa_N-Z0SaSV(ikl,ikv))*exp(-dt__SV/43200.)) &!
1685 ! #ZS& - min(dz0_SV(ikl,ikv) , Z0SaSV(ikl,ikv)) !
1686 
1687 ! #ZS A_Fact = Z0SaSV(ikl,ikv) * 5.0/0.15 ! A=5 if h~10cm
1688 ! CAUTION: The influence of the sastrugi direction is not yet included
1689 
1690 ! #ZS Z0m_Sn = Z0SaSV(ikl,ikv) &!
1691 ! #ZS& - Z0m_nu !
1692 
1693 ! Z0 (Shao & Lin, 1999, BLM 91 (46) p.222)
1694 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1695 ! Z0 Saltat.Regime over Snow (Shao & Lin, 1999, BLM 91 (46) p.222)
1696 ! #ZN sqrrZ0 = usthSV(ikl,ikv)/max( us__SV(ikl,ikv),0.001)
1697 ! #ZN sqrrZ0 = min( sqrrZ0 ,0.999)
1698 ! #ZN Z0mBSn = 0.55 *0.55 *exp(-sqrrZ0 *sqrrZ0) &!
1699 ! #ZN& *us__SV(ikl,ikv)* us__SV(ikl,ikv)*Grav_I*0.5 !
1700 
1701 ! Z0 Smooth + Saltat. Regime (Shao & Lin, 1999, BLM 91 (46) p.222)
1702 ! #ZN Z0enSV(ikl,ikv) = (Z0m_nu ** sqrrZ0 ) &!
1703 ! #ZN& * (Z0mBSn **(1.-sqrrZ0))
1704 ! #ZN Z0enSV(ikl,ikv) = max(Z0enSV(ikl,ikv), Z0m_nu)
1705 
1706 ! Z0 (Andreas etAl., 2004
1707 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^ ams.confex.com/ams/pdfpapers/68601.pdf)
1708 ! Z0 Smooth Regime over Snow (Andreas etAl., 2004
1709 ! #Za Z0m_nu = 0.135*A_MolV / max(us__SV(ikl,ikv) , eps6)
1710 
1711 ! Z0 Saltat.Regime over Snow (Andreas etAl., 2004
1712 ! #Za Z0mBSn = 0.035*u2star *Grav_I
1713 
1714 ! Z0 Smooth + Saltat. Regime (Andreas etAl., 2004
1715 ! #Za Z0enSV(ikl,ikv) = Z0m_nu &!
1716 ! #Za& + Z0mBSn !
1717 
1718 ! Z0 Rough Regime over Snow (Andreas etAl., 2004
1719 ! (.NOT. used by Erosion) ams.confex.com/ams/pdfpapers/68601.pdf)
1720 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1721 ! #Za Z0m_90 =(10.-0.025*VVs_SV(ikl,ikv)/5.) &!
1722 ! #Za& *exp(-0.4/sqrt(.00275+.00001*max(0.,VVs_SV(ikl,ikv)-5.))) !
1723 ! #Za Z0m_Sn = DDs_SV(ikl,ikv)* Z0m_90 / 45. &!
1724 ! #Za& - DDs_SV(ikl,ikv)*DDs_SV(ikl,ikv)* Z0m_90 /(90.*90.) !
1725 
1726 ! #ZA u2star = (us__SV(ikl,ikv) -0.1800) / 0.1
1727 ! #ZA Z0m_Sn =A_Fact*Z0mBSn *exp(-u2star*u2star)
1728 
1729 ! Z0 Rough Regime over Snow (Andreas etAl., 2004
1730 ! #Za u2star = (us__SV(ikl,ikv) -0.1800) / 0.1
1731 ! #Za Z0m_Sn =A_Fact*Z0mBSn *exp(-u2star*u2star)
1732 
1733 ! Z0 Smooth + Saltat. Regime + Rough Regime over Snow (Andreas etAl., 2004)
1734 ! #Za Z0enSV(ikl,ikv) = Z0enSV(ikl,ikv) &!
1735 ! #Za& + Z0m_Sn !
1736 
1737 ! Z0 over Snow (instantaneous or time average)
1738 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1739  z0e_sv(ikl,ikv) = z0ensv(ikl,ikv)
1740 ! #ZM Z0e_SV(ikl,ikv) = Z0emSV(ikl,ikv)
1741 
1742 ! Momentum Roughness Length
1743 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^ ! Contribution of
1744  z0mnsv(ikl,ikv) = z0mlnd &! Vegetation Form
1745  & + (z0m_sn &! Sastrugi Form
1746  & + z0ensv(ikl,ikv)) *snomsk ! Snow Erosion
1747 
1748 ! Mom. Roughness Length, Discrimination among Ice/Land and Ice-Free Ocean
1749 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1750  z0mnsv(ikl,ikv) = z0mnsv(ikl,ikv) *lismsk &! Ice and Land
1751  & +z0msea *(1-lismsk) &! Ice-Free Ocean
1752 ! #ZO& +Z0roSV(ikl,ikv) &! Subgrid Topogr.
1753  & +0.
1754 
1755 ! GIS Roughness Length
1756 ! ^^^^^^^^^^^^^^^^^^^^^
1757 ! #ZG Z0mnSV(ikl,ikv) = &!
1758 ! #ZG& (1-LSmask(ikl,ikv)) * Z0mnSV(ikl,ikv) &!
1759 ! #ZG& + LSmask(ikl,ikv) * max(Z0mnSV(ikl,ikv),max(Z0_GIM, &!
1760 ! #ZG& Z0_GIM+ &!
1761 ! #ZG& (0.0032-Z0_GIM)*(ro__SV(ikl,ikv,isnoSV(ikl,ikv))-600.) &!
1762 ! #ZG& /(920.00 -600.))) !
1763 
1764 ! Mom. Roughness Length, Instantaneous OR Box Moving Average in Time
1765 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1766  z0m_sv(ikl,ikv) = z0mnsv(ikl,ikv) ! Z0mnSV instant.
1767 ! #ZM Z0m_SV(ikl,ikv) = Z0mmSV(ikl,ikv) ! Z0mnSV Average
1768 
1769 ! Corrected Threshold Friction Velocity before Erosion ! Marticorena and
1770 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ! Bergametti 1995
1771 ! #BS Z0e_SV(ikl,ikv) = min(Z0m_SV(ikl,ikv),Z0e_SV(ikl,ikv)) !
1772 ! #MB f_eff= log(0.35*(0.1 /Z0e_SV(ikl,ikv))**0.8) ! JGR 100
1773 ! #MB f_eff=1.-(log( Z0m_SV(ikl,ikv)/Z0e_SV(ikl,ikv) )) &! (20) p. 16420
1774 ! #MB& /(max( f_eff ,eps6 )) ! p.16426 2nd ?
1775 ! #MB f_eff= max( f_eff ,eps6 ) ! CONTROL
1776 ! #Mb f_eff=2.0*max( f_eff ,eps6 ) ! TUNING
1777 ! #MB f_eff= min( f_eff ,un_1 ) !
1778 ! #MB usthSV(ikl,ikv) = usthSV(ikl,ikv)/f_eff !
1779 
1780 
1781 ! Roughness Length for Scalars
1782 ! ----------------------------
1783 
1784  z0hnsv(ikl,ikv) = z0mnsv(ikl,ikv)/ 7.4
1785 
1786 ! Roughness Length for Scalars: Modification from Hapex-Sahel data
1787 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1788  z0hnsv(ikl,ikv) = z0mnsv(ikl,ikv)/100.0
1789 ! Z0h = Z0m /100.0 over the Sahel
1790 ! (Taylor & Clark, QJRMS 127,p864)
1791 
1792 ! Roughness Length for Scalars: Modification for Snow & Ice (Andrea, 1987)
1793 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1794 ! #RS rstar = Z0mnSV(ikl,ikv) * us__SV(ikl,ikv) / A_MolV
1795 ! #RS rstar = max(eps6,min(rstar,R_1000))
1796 ! #RS alors = log(rstar)
1797 ! #RS rstar0 = 1.250e0 * max(zer0,sign(un_1,0.135e0 - rstar)) &
1798 ! #RS& +(1. - max(zer0,sign(un_1,0.135e0 - rstar))) &
1799 ! #RS& *(0.149e0 * max(zer0,sign(un_1,2.500e0 - rstar)) &
1800 ! #RS& + 0.317e0 &
1801 ! #RS& *(1. - max(zer0,sign(un_1,2.500e0 - rstar))))
1802 ! #RS rstar1 = 0. * max(zer0,sign(un_1,0.135e0 - rstar)) &
1803 ! #RS& +(1. - max(zer0,sign(un_1,0.135e0 - rstar))) &
1804 ! #RS& *(-0.55e0 * max(zer0,sign(un_1,2.500e0 - rstar)) &
1805 ! #RS& - 0.565 &
1806 ! #RS& *(1. - max(zer0,sign(un_1,2.500e0 - rstar))))
1807 ! #RS rstar2 = 0. * max(zer0,sign(un_1,0.135e0 - rstar)) &
1808 ! #RS& +(1. - max(zer0,sign(un_1,0.135e0 - rstar))) &
1809 ! #RS& *(0. * max(zer0,sign(un_1,2.500e0 - rstar)) &
1810 ! #RS& - 0.183 &
1811 ! #RS& *(1.00 - max(zer0,sign(un_1,2.500e0 - rstar))))
1812 ! #RS Z0hnSV(ikl,ikv) = max(zer0 &
1813 ! #RS& , sign(un_1,zzsnsv(ikl,ikv,isnoSV(ikl,ikv))-eps6)) &
1814 ! #RS& * exp(rstar0+rstar1*alors+rstar2*alors*alors) &
1815 ! #RS& * 0.001e0 + Z0hnSV(ikl,ikv) * ( 1. - max(zer0 &
1816 ! #RS& , sign(un_1,zzsnsv(ikl,ikv,isnoSV(ikl,ikv))-eps6)))
1817 
1818  z0hnsv(ikl,ikv) = z0hsea *(1-lismsk)&! Ice-free Ocean
1819  & + z0hnsv(ikl,ikv) * lismsk ! Ice and Land
1820 
1821  z0h_sv(ikl,ikv) = z0hnsv(ikl,ikv)
1822 ! #ZM Z0h_SV(ikl,ikv) = Z0hmSV(ikl,ikv)
1823 
1824 
1825 ! Contributions of the Roughness Lenghths to the neutral Drag Coefficient
1826 ! -----------------------------------------------------------------------
1827 
1828  IF (garrat) &
1829  & z0m_sv(ikl,ikv) = max(2.0e-6 ,z0m_sv(ikl,ikv)) ! Min Z0_m (Garrat Scheme)
1830  z0m_sv(ikl,ikv) = min(z0m_sv(ikl,ikv),za__sv(ikl,ikv)*0.3333)
1831  sqrcm0(ikl,ikv) = log(za__sv(ikl,ikv)/z0m_sv(ikl,ikv))
1832 ! Martin control
1833 ! PRINT*,'za__SV(:,:)=',za__SV(:,:)
1834 ! PRINT*,'Z0h_SV=',Z0h_SV
1835 ! Martin control
1836  sqrch0(ikl,ikv) = log(za__sv(ikl,ikv)/z0h_sv(ikl,ikv))
1837 
1838 ! OUTPUT of SnowFall, Roughness Length and Drag Coefficients
1839 ! #sf IF (ikl,ikv.EQ.1) write(6,6661) dsn_SV(ikl,ikv),us__SV(ikl,ikv),Z0SaSi&
1840 ! #sf& ,Z0Sa_N,Z0SaSV(ikl,ikv),Z0m_Sn,Z0m_SV(ikl,ikv)
1841  6661 format(20x,7f9.6)
1842 
1843 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
1844 ! OUTPUT of Roughness Length and Drag Coefficients
1845 ! #sz IF (ii__AP(ikl).EQ.iwr_SV .AND. jj__AP(ikl).EQ. jwr_SV .AND. &
1846 ! #sz& ikv .EQ.nwr_SV) &
1847 ! #sz& write(6,6600) za__SV(ikl,ikv) , Z0m_SV(ikl,ikv) &
1848 ! #sz& ,sqrCm0(ikl,ikv) , za__SV(ikl,ikv)/Z0m_SV(ikl,ikv) &
1849 ! #sz& ,Z0SaSV(ikl,ikv) , Z0h_SV(ikl,ikv) &
1850 ! #sz& ,sqrCh0(ikl,ikv) , za__SV(ikl,ikv)/Z0h_SV(ikl,ikv)
1851  6600 format(/,' ** SISVAT *0 ' &
1852  & ,' za__SV = ',e12.4,' Z0m_SV = ',e12.4 &
1853  & ,' sqrCm0 = ',e12.4,' Za/Z0m = ',e12.4 &
1854  & ,/,' ' &
1855  & ,' Z0SaSV = ',e12.4,' Z0h_SV = ',e12.4 &
1856  & ,' sqrCh0 = ',e12.4,' Za/Z0h = ',e12.4)
1857 
1858 
1859 ! Vertical Stability Correction
1860 ! -----------------------------
1861 
1862 ! Surface/Canopy Temperature
1863 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
1864  tsrfsv(ikl,ikv) = sigmsv(ikl,ikv) * tvegsv(ikl,ikv) &
1865  & + (1. - sigmsv(ikl,ikv))* tsissv(ikl,ikv,isnosv(ikl,ikv))
1866  END DO
1867  END DO
1868 
1869 ! Aerodynamic Resistance
1870 ! ^^^^^^^^^^^^^^^^^^^^^^
1871  IF (snomod.AND.colprt) THEN
1872 
1873 ! **********
1874  call colprt_sbl
1875 ! **********
1876 
1877  ELSE
1878  IF (garrat) THEN
1879 
1880 ! **********
1881  call sisvat_sbl
1882 ! **********
1883 
1884  ELSE
1885 
1886 ! **********
1887  call sisvatesbl
1888 ! **********
1889 
1890  END IF
1891 
1892  DO ikl=1,kcolp
1893  DO ikv=1,mwp
1894  IF (lmo_sv(ikl,ikv) .GT. 0.) lmo_sv(ikl,ikv) = max( epslmo,lmo_sv(ikl,ikv))
1895  IF (lmo_sv(ikl,ikv) .LT. 0.) lmo_sv(ikl,ikv) = min(-epslmo,lmo_sv(ikl,ikv))
1896  END DO
1897  END DO
1898  END IF
1899 
1900 
1901 ! Canopy Energy Balance
1902 ! =====================
1903 
1904 ! **********
1905  call sisvat_tvg( &
1906 ! #e1& ETVg_d &
1907  & )
1908 ! **********
1909 
1910 
1911 ! Surface/Canopy Temperature
1912 ! ==========================
1913 
1914  DO ikl=1,kcolp
1915  DO ikv=1,mwp
1916  tsrfsv(ikl,ikv) = sigmsv(ikl,ikv) * tvegsv(ikl,ikv) &
1917  & + (1. - sigmsv(ikl,ikv))* tsissv(ikl,ikv,isnosv(ikl,ikv))
1918  END DO
1919  END DO
1920 
1921 
1922 ! Soil Energy Balance
1923 ! =====================
1924 
1925 
1926 ! **********
1927  call sisvat_tso( &
1928 ! #e1& ETSo_0 ,ETSo_1 ,ETSo_d ,kcolw &
1929  & )
1930 ! **********
1931 
1932 ! **********
1933 ! #ve call SISVAT_wEq('_TSo ',0)
1934 ! **********
1935 
1936 
1937 
1938 
1939 ! Canopy Water Balance
1940 ! =====================
1941 
1942 ! Soil Water Potential
1943 ! ------------------------
1944 
1945  DO isl=-nsoil,0
1946  DO ikl=1,kcolp
1947  DO ikv=1,mwp
1948  ist = isotsv(ikl,ikv) ! Soil Type
1949  psi_sv(ikl,ikv,isl) = psidsv(ist) &! DR97, Eqn.(3.34)
1950  & *(etadsv(ist) /max(eps6,eta_sv(ikl,ikv,isl))) &!
1951  & **bchdsv(ist) !
1952 
1953 
1954 ! Soil Hydraulic Conductivity
1955 ! ---------------------------
1956 
1957  khydsv(ikl,ikv,isl) = s2__sv(ist) &! DR97, Eqn.(3.35)
1958  & *(eta_sv(ikl,ikv,isl)**(2.*bchdsv(ist)+3.))!
1959  END DO
1960  END DO
1961  END DO
1962 
1963 ! **********
1964  call sisvat_qvg
1965 ! **********
1966 
1967 
1968 ! OUTPUT/Verification: H2O Conservation: Vegetation Forcing
1969 ! #m0 DO ikl=1,kcolp
1970 ! #m0 DO ikv=1,mwp
1971 ! #m0 Watsvd(ikl,ikv) = (Watsvd(ikl,ikv) &! Canopy Precip. IN
1972 ! #m0& -drr_SV(ikl,ikv) &! Canopy Precip. OUT
1973 ! #m0& -Evp_sv(ikl,ikv))* dt__SV ! Canopy Water Evap.
1974 ! #m0 END DO
1975 ! #m0 END DO
1976 
1977 
1978 ! Melting / Refreezing in the Snow Pack
1979 ! =====================================
1980 
1981  IF (snomod) THEN
1982 
1983 ! **********
1984  call sisvat_qsn( &
1985 ! #e1& EqSn_0,EqSn_1,EqSn_d &
1986 ! #m1& ,SIsubl,SImelt,SIrnof &
1987  & )
1988 ! **********
1989 
1990 ! **********
1991 ! #ve call SISVAT_wEq('_qSn ',0)
1992 ! **********
1993 
1994 ! OUTPUT in SISVAT for ikl = 1 (preferably for Stand Alone Version)
1995 ! OUTPUT for SnowFall and Snow Buffer
1996 ! #s2 IF (isnoSV(1,1) .GT. 0) &
1997 ! #s2& write(6,6007)isnoSV(1,1), dsn_SV(1) *dt__SV + BufsSV(1,1), &
1998 ! #s2& (dzsnSV(1,isn)*ro__SV(1,isn),isn=1,isnoSV(1,1))
1999  6007 format(i3,' dsn+Buf=',f6.2,6x,'q dz *ro =',10f6.2, &
2000  & (/,35x,10f6.2))
2001 
2002 
2003 ! Snow Pack Thickness
2004 ! -------------------
2005 
2006  DO ikl=1,kcolp
2007  DO ikv=1,mwp
2008  z_snsv(ikl,ikv) = 0.0
2009  END DO
2010  END DO
2011  DO isn=1,nsnow
2012  DO ikl=1,kcolp
2013  DO ikv=1,mwp
2014  z_snsv(ikl,ikv) = z_snsv(ikl,ikv) + dzsnsv(ikl,ikv,isn)
2015  zzsnsv(ikl,ikv,isn) = z_snsv(ikl,ikv)
2016  END DO
2017  END DO
2018  END DO
2019 
2020 
2021 ! Energy in Excess is added to the first Soil Layer
2022 ! -------------------------------------------------
2023 
2024  DO ikl=1,kcolp
2025  DO ikv=1,mwp
2026  z_snsv(ikl,ikv) = max(zer0, &
2027  & sign(un_1,eps6-z_snsv(ikl,ikv)))
2028  tsissv(ikl,ikv,0) = tsissv(ikl,ikv,0) + eexcsv(ikl,ikv) &
2029  & /(rocssv(isotsv(ikl,ikv)) &
2030  & +rcwdsv*eta_sv(ikl,ikv,0))
2031  eexcsv(ikl,ikv) = 0.
2032  END DO
2033  END DO
2034 
2035 
2036 ! OUTPUT/Verification: * Mass Conservation: Mass (below the Canopy) and Forcing
2037 ! #m1 DO ikl=1,kcolp
2038 ! #m1 DO ikv=1,mwp
2039 ! #m1 SIWa_f(ikl,ikv) =(drr_SV(ikl,ikv) + dsn_SV(ikl,ikv)) *dt__SV ![mm w.e.]
2040 ! #m1 SIWe_f(ikl,ikv) = dbs_SV(ikl,ikv) !
2041 ! #m1 SIWm_1(ikl,ikv) = BufsSV(ikl,ikv) + HFraSV(ikl,ikv) *rhoIce !
2042 ! #m1 DO isn=1,nsnow !
2043 ! #m1 SIWm_1(ikl,ikv) = SIWm_1(ikl,ikv) + dzsnSV(ikl,ikv,isn)*ro__SV(ikl,ikv,isn)!
2044 ! #m1 END DO !
2045 ! #m1 END DO
2046 ! #m1 END DO !
2047 
2048  END IF
2049 
2050 
2051 ! Soil Water Balance
2052 ! =====================
2053 
2054 ! **********
2055  call sisvat_qso( &
2056 ! #m0& (Wats_0,Wats_1,Wats_d &
2057  & )
2058 ! **********
2059 
2060 
2061 ! Surface/Canopy Fluxes
2062 ! =====================
2063 
2064  DO ikl=1,kcolp
2065  DO ikv=1,mwp
2066  irdwsv(ikl,ikv)=tau_sv(ikl,ikv) *ird_sv(ikl,ikv)*eso_sv(ikl,ikv) &! Downward IR
2067  & +(1.0-tau_sv(ikl,ikv))*ird_sv(ikl,ikv)*evg_sv(ikl,ikv) !
2068  irupsv(ikl,ikv) = irupsv(ikl,ikv) &! Upward IR
2069  & + 0.5 *irv_sv(ikl,ikv) * (1.-tau_sv(ikl,ikv)) !
2070  iru_sv(ikl,ikv) = -irupsv(ikl,ikv) &! Upward IR
2071  & +ird_sv(ikl,ikv) &! (effective)
2072  & -irdwsv(ikl,ikv) ! (positive)
2073  tbr_sv(ikl,ikv) =sqrt(sqrt(iru_sv(ikl,ikv)/stefbo)) ! Brightness
2074 ! ! Temperature
2075  uts_sv(ikl,ikv) = (hsv_sv(ikl,ikv) +hss_sv(ikl,ikv)) &! u*T*
2076  & /(rht_sv(ikl,ikv) *cpdair) !
2077  uqs_sv(ikl,ikv) = (hlv_sv(ikl,ikv) +hls_sv(ikl,ikv)) &! u*q*
2078  & /(rht_sv(ikl,ikv) *lhvh2o) !
2079 
2080 ! Surface/Canopy Temperature
2081 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
2082  tsrfsv(ikl,ikv) = sigmsv(ikl,ikv) * tvegsv(ikl,ikv) &
2083  & + (1. - sigmsv(ikl,ikv))* tsissv(ikl,ikv,isnosv(ikl,ikv))
2084  END DO
2085  END DO
2086 
2087 
2088 ! Snow Pack Properties (sphericity, dendricity, size)
2089 ! ===================================================
2090 
2091  IF (snomod) THEN
2092 
2093 ! **********
2094  call sisvat_gsn
2095 ! **********
2096 
2097 ! **********
2098 ! #ve call SISVAT_wEq('_GSn ',0)
2099 ! **********
2100 
2101 
2102 ! Surficial Water Freezing, including that of a Water Surface (isotSV=0)
2103 ! ======================================================================
2104 
2105 
2106  END IF
2107 
2108 
2109 ! OUTPUT
2110 ! ======
2111 
2112  IF (kcolv.LE.mwp) THEN
2113  ikl=1
2114  write(4,4) day_tu,labmon(mon_tu),yeartu,hourtu,minutu &
2115  & ,(ivgtsv(ikl,ikv),dh_dsv(ivgtsv(ikl,ikv)) &
2116  & ,1.e3*z0m_sv(ikl,ikv),ikv,ikv=1,mwp)
2117  4 format(i3,a3,i5,i3,'h',i3,' Vegetation: ',9(i6,2f8.3,i3))
2118  END IF
2119 
2120 ! #e0 DO ikl=1,kcolp
2121 ! #e0 DO ikv=1,mwp
2122 ! #e0 IF (lwriSV(ikl,ikv).ne.0) THEN
2123 ! #e0 noUNIT = no__SV(lwriSV(ikl,ikv))
2124 ! #e0 write(noUNIT,5001) &
2125 ! #e0& (SoSosv(ikl,ikv)+SoCasv(ikl,ikv))*sol_SV(ikl,ikv), &
2126 ! #e0& IRdwsv(ikl,ikv),IRu_SV(ikl,ikv), &
2127 ! #e0& HSv_sv(ikl,ikv)+HSs_sv(ikl,ikv), &
2128 ! #e0& HLv_sv(ikl,ikv)+HLs_sv(ikl,ikv), TaT_SV(ikl,ikv), &
2129 ! #e0& dsn_SV(ikl,ikv)*3.6e3, drr_SV(ikl,ikv)*3.6e3, &
2130 ! #e0& SoSosv(ikl,ikv) *sol_SV(ikl,ikv), &
2131 ! #e0& IRv_sv(ikl,ikv) *0.5, &
2132 ! #e0& HSv_sv(ikl,ikv),HLv_sv(ikl,ikv), TvegSV(ikl,ikv), &
2133 ! #e0& SoCasv(ikl,ikv) *sol_SV(ikl,ikv), &
2134 ! #e0& HSs_sv(ikl,ikv),HLs_sv(ikl,ikv), TsisSV(ikl,ikv,isnoSV(ikl,ikv))
2135  5001 format( &
2136  & ' |Net Solar| IR Down | IR Up | HS/Dwn=+|', &
2137  & ' HL/Dwn=+| Temper. | | Snow | Rain |', &
2138  & /,' | [W/m2] | [W/m2] | [W/m2] | [W/m2] |', &
2139  & ' [W/m2] | [K] | | [mm/h] | [mm/h] |', &
2140  & /,' -------+',7('---------+'),2('--------+'), &
2141  & /,' SISVAT |',f8.1,' |',f8.1,' |',f8.1,' |',f8.1,' |', &
2142  & f8.1,' |A',f7.2,' |', 8x ,' |',2(f7.2,' |'), &
2143  & /,' Canopy |',f8.1,' |', 8x ,' |',f8.1,' |',f8.1,' |', &
2144  & f8.1,' |',f8.2,' |', 8x ,' |',2( 7x ,' |') &
2145  & /,' Soil |',f8.1,' |', 8x ,' |', 8x ,' |',f8.1,' |', &
2146  & f8.1,' |',f8.2,' |', 8x ,' |',2( 7x ,' |'))
2147 
2148 
2149 ! OUTPUT/Verification: Energy/Water Budget
2150 ! #e1 Enrsvd(ikl,ikv) = Enrsvd(ikl,ikv) &! Up Surf. IR
2151 ! #e1& + IRs_SV(ikl,ikv) &! Offset
2152 ! #e1& + ( (SoSosv(ikl,ikv) &! Net Solar
2153 ! #e1& +SoCasv(ikl,ikv)) *sol_SV(ikl,ikv) &!
2154 ! #e1& + IRdwsv(ikl,ikv) &! Downward IR
2155 ! #e1& + IRupsv(ikl,ikv) &! Upward IR
2156 ! #e1& + HSv_sv(ikl,ikv)+HSs_sv(ikl,ikv) &! Sensible
2157 ! #e1& + HLv_sv(ikl,ikv)+HLs_sv(ikl,ikv)) ! Latent
2158 
2159 ! #e1 write(noUNIT,5002) Enrsvd(ikl,ikv), &
2160 ! #e1& ETSo_0(ikl,ikv), ETSo_d(ikl,ikv), &
2161 ! #e1& ETSo_0(ikl,ikv)+ ETSo_d(ikl,ikv), ETSo_1(ikl,ikv), &
2162 ! #e1& EqSn_0(ikl,ikv) /dt__SV, &
2163 ! #e1& EqSn_d(ikl,ikv) /dt__SV, &
2164 ! #e1& (EqSn_1(ikl,ikv)- EqSn_0(ikl,ikv)- EqSn_d(ikl,ikv))/dt__SV, &
2165 ! #e1& EqSn_1(ikl,ikv) /dt__SV
2166  5002 format( &!
2167  & ' -----------------+-------------------+', &!
2168  & '-----------------+-+-----------------+', &!
2169  & '-------------------+', &!
2170  & /,' SOIL/SNOW/VEGET. | |', &!
2171  & ' Power, Forcing | |', &! Enrsvd
2172  & ' |', &!
2173 ! #el& /,' -----------------+-------------------+', &!
2174 ! #el& '-----------------+-------------------+', &!
2175 ! #el& '-------------------+', &!
2176  & /,' |', 11x ,' |', &!
2177  & f9.2,' [W/m2] |', 11x ,' |', &! Enrsvd
2178  & 11x ,' |', &!
2179  & /,' -----------------+-------------------+', &!
2180  & '-----------------+-------------------+', &!
2181  & '-------------------+', &!
2182  & /,' SOIL/SNOW (TSo) | Energy/dt, Time 0 |', &! ETSo_0
2183  & ' Power, Forcing | Sum Tim.0+Forc. |', &! ETSo_d/ETSo_0+d
2184  & ' Energy/dt, Time 1 |', &! ETSo_1
2185 ! #el& /,' -----------------+-------------------+', &!
2186 ! #el& '-----------------+-------------------+', &!
2187 ! #el& '-------------------+', &!
2188  & /,' |', f11.2,' [W/m2] |', &! ETSo_0
2189  & f9.2,' [W/m2] |', f11.2,' [W/m2] |', &! ETSo_d/ETSo_0+d
2190  & f11.2,' [W/m2] |', &! ETSo_1
2191  & /,' -----------------+-------------------+', &!
2192  & '-----------------+-------------------+', &!
2193  & '-------------------+', &!
2194  & /,' SNOW (qSn) | Energy/dt, Time 0 |', &! EqSn_0/dt
2195  & ' Power, Excess | D(Tim.1-0-Forc.)|', &! EqSn_d/dt, 1-0-d
2196  & ' Energy/dt, Time 1 |', &! EqSn_1/dt
2197 ! #el& /,' -----------------+-------------------+', &!
2198 ! #el& '-----------------+-------------------+', &!
2199 ! #el& '-------------------+', &!
2200  & /,' |', f12.2, '[W/m2] |', &! EqSn_0/dt
2201  & f9.2,' [W/m2] |', f11.2,' [W/m2] |', &! EqSn_d/dt, 1-0-d
2202  & f12.2, '[W/m2] | ', &! EqSn_1/dt
2203  & /,' -----------------+-------------------+', &!
2204  & '-----------------+-------------------+', &!
2205  & '-------------------+') !
2206 
2207 ! #e1 EnsBal = ETSo_1(ikl,ikv)-(ETSo_0(ikl,ikv)+Enrsvd(ikl,ikv))
2208 ! #e1 EnvBal = Enrsvd(ikl,ikv)- ETVg_d(ikl,ikv)
2209 ! #e1 IF (abs(EnsBal).gt.5.e-1 &
2210 ! #e2& .OR.lwriSV(ikl,ikv).eq. 2 &
2211 ! #e1& ) THEN
2212 ! #e1 write(6,6001) daHost,i___SV(lwriSV(ikl,ikv)), &
2213 ! #e1& j___SV(lwriSV(ikl,ikv)), &
2214 ! #e1& n___SV(lwriSV(ikl,ikv)), &
2215 ! #e1& ETSo_1(ikl,ikv),ETSo_0(ikl,ikv),ETSo_d(ikl,ikv),&
2216 ! #e1& ETSo_1(ikl,ikv)-ETSo_0(ikl,ikv)-ETSo_d(ikl,ikv),&
2217 ! #e1& Enrsvd(ikl,ikv),ETVg_d(ikl,ikv),ETSo_d(ikl,ikv),&
2218 ! #e1& Enrsvd(ikl,ikv)-ETVg_d(ikl,ikv)-ETSo_d(ikl,ikv)
2219  6001 format(a18,3i4,' (EB1' ,f15.6, &
2220  & ') - [(EB0 ',f15.6,')', &
2221  & /,55x,'+(ATM->Snow/Soil',f15.6,')] ', &
2222  & '= EBAL' ,f15.6,' [W/m2]', &
2223  & /,55x,' (ATM->SISVAT' ,f18.6, &
2224  & /,55x,'- Veg. ImBal.', f18.6,') ', &
2225  & /,55x,'- ATM->SnoSol', f18.6,') ', &
2226  & '= ????' ,f15.6,' [W/m2]')
2227 ! #e1 noEBal = noEBal + 1
2228 ! #e2 noEBal = noEBal - 1
2229 ! #e1 IF (noEBal.GE. 10) stop 'TOO MUCH ENERGY IMBALANCES'
2230 ! #e1 END IF
2231 
2232 
2233 ! OUTPUT/Verification: * Mass Conservation: Budget [mm w.e.]
2234 ! #m1 write(noUNIT,5010) &
2235 ! #m1& SIWm_0(ikl,ikv), SIWa_i(ikl,ikv)-SIWa_f(ikl,ikv) &
2236 ! #m1& ,SIWm_0(ikl,ikv)+ SIWa_i(ikl,ikv)-SIWa_f(ikl,ikv) &
2237 ! #m1& +SIWe_i(ikl,ikv)-SIWe_f(ikl,ikv) &
2238 ! #m1& +SIsubl(ikl,ikv) &
2239 ! #m1& -SImelt(ikl,ikv) &
2240 ! #m1& -SIrnof(ikl,ikv) &
2241 ! #m2& +SIvAcr(ikl,ikv) &
2242 ! #m1& ,SIWm_1(ikl,ikv), SIWe_i(ikl,ikv)-SIWe_f(ikl,ikv) &
2243 ! #m1& , SIsubl(ikl,ikv) &
2244 ! #m1& , -SImelt(ikl,ikv) &
2245 ! #m1& , -SIrnof(ikl,ikv) &
2246 ! #m2& , SIvAcr(ikl,ikv)
2247  5010 format(' SNOW | Snow, Time 0 |', &
2248  & ' Snow, Forcing | Sum |', &
2249  & ' Snow, Time 1 |', &
2250 ! #el& /,' -----------------+-------------------+', &
2251 ! #el& '-----------------+-------------------+', &
2252 ! #el& '-------------------+', &
2253  & /,' |', f13.3,' [mm] |', &
2254  & ' A', f9.3,' [mm] |', f13.3,' [mm] |', &
2255  & f13.3,' [mm] |', &
2256  & /,' |', 13x ,' |', &
2257  & ' E', f9.3,' [mm] |', 13x ,' |', &
2258  & 13x ,' |', &
2259  & /,' |', 13x ,' |', &
2260  & ' S', f9.3,' [mm] |', 13x ,' |', &
2261  & 13x ,' |', &
2262  & /,' |', 13x ,' |', &
2263  & '(M', f9.3,' [mm])| (included in A) |', &
2264  & 13x ,' |', &
2265  & /,' |', 13x ,' |', &
2266  & ' R', f9.3,' [mm] |', 13x ,' |', &
2267  & 13x ,' |', &
2268 ! #m2& /,' |', 13x ,' |', &
2269 ! #m2& ' O', f9.3,' [mm] |', 13x ,' |', &
2270 ! #m2& 13x ,' |', &
2271  & /,' -----------------+-------------------+', &
2272  & '-----------------+-------------------+', &
2273  & '-------------------+')
2274 ! #m1 SnoBal = SIWm_1(ikl,ikv)-(SIWm_0(ikl,ikv) &
2275 ! #m1& +SIWa_i(ikl,ikv)-SIWa_f(ikl,ikv) &
2276 ! #m1& +SIWe_i(ikl,ikv)-SIWe_f(ikl,ikv)) &
2277 ! #m1& -SIsubl(ikl,ikv) &
2278 ! #m1& +SIrnof(ikl,ikv) &
2279 ! #m2& -SIvAcr(ikl,ikv)
2280 ! #m1 IF (abs(SnoBal).gt.eps6) THEN
2281 ! #m1 write(6,6010) daHost,i___SV(lwriSV(ikl,ikv)), &
2282 ! #m1& j___SV(lwriSV(ikl,ikv)), &
2283 ! #m1& n___SV(lwriSV(ikl,ikv)), &
2284 ! #m1& SIWm_1(ikl,ikv),SIWm_0(ikl,ikv), &
2285 ! #m1& SIWa_i(ikl,ikv),SIWa_f(ikl,ikv), &
2286 ! #m1& SIWe_i(ikl,ikv),SIWe_f(ikl,ikv), &
2287 ! #m1& SIsubl(ikl,ikv),SImelt(ikl,ikv), &
2288 ! #m2& SIrnof(ikl,ikv),SIvAcr(ikl,ikv), &
2289 ! #m1& SnoBal
2290  6010 format(a18,3i4,' (MB1' ,f12.6, &
2291  & ') - [(MB0 ',f12.6, 15x,')', &
2292  & /,51x,'+(ATM Forcing',f12.6,' - ',f12.6,')', &
2293  & /,51x,'+(BLS Forcing',f12.6,' - ',f12.6,')', &
2294  & /,51x,'-(Depo/Sublim',f12.6, 15x,')', &
2295  & /,51x,' !Melting ',f12.6,' included in A!', &
2296  & /,51x,'+(Run OFF ',f12.6, 15x,')', &
2297 ! #m2& /,51x,'-(Sea-Ice Acr',f12.6, 15x,')', &
2298  & /,29x,'= *BAL' ,f12.6, ' [mm w.e.]')
2299 ! #m1 noSBal = noSBal + 1
2300 ! #m1 IF (noSBal.GE. 10) stop 'TOO MUCH SNOW MASS IMBALANCE'
2301 ! #m1 END IF
2302 
2303 
2304 ! OUTPUT/Verification: H2O Conservation: Water Budget
2305 ! #m0 Watsv0(ikl,ikv) = Watsv0(ikl,ikv) &! Canopy Water Cont.
2306 ! #m0& + Wats_0(ikl,ikv) ! Soil Water Cont.
2307 ! #m0 Watsvd(ikl,ikv) = Watsvd(ikl,ikv) &! Canopy Forcing
2308 ! #m0& + Wats_d(ikl,ikv) ! Soil Forcing
2309 
2310 ! #m0 write(noUNIT,5003) &
2311 ! #m0& Wats_0(ikl,ikv), Wats_d(ikl,ikv), &
2312 ! #m0& Wats_0(ikl,ikv)+ Wats_d(ikl,ikv), Wats_1(ikl,ikv), &
2313 ! #m0& Watsv0(ikl,ikv), Watsvd(ikl,ikv), &
2314 ! #m0& Watsv0(ikl,ikv)+ Watsvd(ikl,ikv), Wats_1(ikl,ikv) &
2315 ! #m0& +rrCaSV(ikl,ikv)
2316  5003 format(' SOIL/SNOW (qSo) | Water, Time 0 |', &
2317  & ' Water, Forcing | Sum |', &
2318  & ' Water, Time 1 |', &
2319 ! #el& /,' -----------------+-------------------+', &
2320 ! #el& '-----------------+-------------------+', &
2321 ! #el& '-------------------+', &
2322  & /,' |', f13.3,' [mm] |', &
2323  & f11.3,' [mm] |', f13.3,' [mm] |', &
2324  & f13.3,' [mm] |', &
2325  & /,' -----------------+-------------------+', &
2326  & '-----------------+-------------------+', &
2327  & '-------------------+', &
2328  & /,' SOIL/SNOW/VEGET. | Water, Time 0 |', &
2329  & ' Water, Forcing | Sum |', &
2330  & ' Water, Time 1 |', &
2331 ! #el& /,' -----------------+-------------------+', &
2332 ! #el& '-----------------+-------------------+', &
2333 ! #el& '-------------------+', &
2334  & /,' |', f13.3,' [mm] |', &
2335  & f11.3,' [mm] |', f13.3,' [mm] |', &
2336  & f13.3,' [mm] |', &
2337  & /,' -----------------+-------------------+', &
2338  & '-----------------+-------------------+', &
2339  & '-------------------+')
2340 
2341 ! #m0 WatBal = Wats_1(ikl,ikv)+rrCaSV(ikl,ikv) &
2342 ! #m0& -(Watsv0(ikl,ikv)+Watsvd(ikl,ikv))
2343 ! #m0 IF (abs(WatBal).gt.eps6) THEN
2344 ! #m0 write(6,6002) daHost,i___SV(lwriSV(ikl,ikv)), &
2345 ! #m0& j___SV(lwriSV(ikl,ikv)), &
2346 ! #m0& n___SV(lwriSV(ikl,ikv)), &
2347 ! #m0& Wats_1(ikl,ikv),rrCaSV(ikl,ikv), &
2348 ! #m0& Watsv0(ikl,ikv),Watsvd(ikl,ikv),WatBal, &
2349 ! #m0& Wats_1(ikl,ikv), &
2350 ! #m0& Wats_0(ikl,ikv),Wats_d(ikl,ikv), &
2351 ! #m0& Wats_1(ikl,ikv)-Wats_0(ikl,ikv)-Wats_d(ikl,ikv)
2352  6002 format(30x,' NEW Soil Water',3x,' Canopy Water',3x, &
2353  & ' OLD SVAT Water',4x,' FRC SVAT Water', &
2354  & /,a18,3i4,f15.6,' + ' ,f15.6,' - ' ,f15.6, &
2355  & ' - ',f15.6,' ', 15x ,' ', &
2356  & /,31x,'= ',f12.6,' [mm] (Water Balance)', &
2357  & /,30x,' NEW Soil Water',3x,' ',3x, &
2358  & ' OLD Soil Water',4x,' FRC Soil Water', &
2359  & /,30x,f15.6,' ' , 15x ,' - ' ,f15.6, &
2360  & ' - ',f15.6,' ', 15x ,' ', &
2361  & /,31x,'= ',f12.6,' [mm] (3 terms SUM)')
2362 ! #m0 noWBal = noWBal + 1
2363 ! #m0 IF (noWBal.GE. 10) stop 'TOO MUCH WATER IMBALANCES'
2364 ! #m0 END IF
2365 
2366 
2367 ! Water/Temperature Profiles
2368 ! --------------------------
2369 
2370 ! #e0 write(noUNIT,5004)
2371  5004 format(' -----+--------+--+-----+--------+----+---+', &
2372  & '--------+----+---+--------+------+-+--------+--------+', &
2373  & /,' n | z | dz | ro | eta |', &
2374  & ' T | G1 | G2 | Extinc | | HISTORY|', &
2375  & /,' | [m] | [m] | [kg/m3]| [m3/m3]|', &
2376  & ' [K] | [-] | [-] | [-] | | [-] |', &
2377  & /,' -----+--------+--------+--------+--------+', &
2378  & '--------+--------+--------+--------+--------+--------+')
2379 ! #e0 write(noUNIT,5005) rusnSV(ikl,ikv),albisv(ikl,ikv)
2380  5005 format(' | | | |W',f6.3,' |', &
2381  & ' | | |A',f6.3,' | | |')
2382 ! #e0 write(noUNIT,5015) &
2383 ! #e0& (isn,zzsnsv(ikl,ikv,isn),dzsnSV(ikl,ikv,isn), &
2384 ! #e0& ro__SV(ikl,ikv,isn),eta_SV(ikl,ikv,isn), &
2385 ! #e0& TsisSV(ikl,ikv,isn), &
2386 ! #e0& G1snSV(ikl,ikv,isn),G2snSV(ikl,ikv,isn), &
2387 ! #e0& sEX_sv(ikl,ikv,isn),istoSV(ikl,ikv,isn), &
2388 ! #e0& isn=isnoSV(ikl,ikv),1,-1)
2389  5015 format((i5,' |',2(f7.3,' |'), f7.1,' |', &
2390  & f7.3,' |' , f7.2,' |', 2(f7.1,' |'), f7.3,' |', &
2391  & 7x ,' |' , i5,' |' ))
2392 ! #e0 write(noUNIT,5006)
2393  5006 format(' -----+--------+--------+--------+--------+', &
2394  & '--------+--------+--------+--------+--------+--------+')
2395 ! #e0 write(noUNIT,5007) TBr_sv(ikl,ikv),
2396 ! #e0& TvegSV(ikl,ikv),rrCaSV(ikl,ikv)*1.e3,
2397 ! #e0& EvT_sv(ikl,ikv)*86.4e3
2398  5007 format(' Brgh |',4(8x,'|'), f7.2,' | [micm] |',4(8x,'|'), &
2399  & /,' VEGE |',4(8x,'|'),2(f7.2,' |'), 2(8x,'|'), &
2400  & f7.3,' |', 8x,'|' )
2401 ! #e0 write(noUNIT,5014)
2402  5014 format(' -----+--------+--------+--------+--------+', &
2403  & '--------+--------+--------+--------+--------+--------+', &
2404  & /,' n | | dz | | eta |', &
2405  & ' T | | | | Root W.| W.Flow |', &
2406  & /,' | | [m] | | [m3/m3]|', &
2407  & ' [K] | | | | [mm/d] | [mm/h] |', &
2408  & /,' -----+--------+--------+--------+--------+', &
2409  & '--------+--------+--------+--------+--------+--------+')
2410 
2411 ! #e0 write(noUNIT,5008) &
2412 ! #e0& (isl, LSdzsv(ikl,ikv)*dz_dSV( isl), &
2413 ! #e0& eta_SV(ikl,ikv,isl), &
2414 ! #e0& TsisSV(ikl,ikv,isl), &
2415 ! #e0& 86.4e3*Rootsv(ikl,ikv,isl), &
2416 ! #e0& 3.6e3*Khydsv(ikl,ikv,isl), &
2417 ! #e0& isl=0,-nsoil,-1)
2418  5008 format((i5,' |', 7x ,' |' , f7.3,' |' , 7x ,' |', &
2419  & f7.3,' |' , f7.2,' |', 2( 7x ,' |'), 7x ,' |', &
2420  & f7.3,' |' , f7.2,' |'))
2421 ! #e0 write(noUNIT,5006)
2422 ! #e0 write(noUNIT,5009) RnofSV(ikl,ikv)* 3.6e3
2423  5009 format(' |',9(8x,'|'),f7.3,' |')
2424 ! #e0 write(noUNIT,5006)
2425 ! #e0 END IF
2426 ! #e0 END DO
2427 ! #e0 END DO
2428 
2429 
2430 
2431 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2432 ! !
2433 ! DE-ALLOCATION !
2434 ! ============= !
2435 
2436  IF (flagdalloc) THEN !
2437 
2438  deallocate ( tbr_sv ) ! Brightness Temperature
2439  deallocate ( irdwsv ) ! DOWNward IR Flux
2440  deallocate ( irupsv ) ! UPward IR Flux
2441  deallocate ( bdzssv ) ! Buffer Snow Layer Thickness
2442  deallocate ( z_snsv ) ! Snow-Ice, current Thickness
2443 
2444 ! Energy Budget
2445 ! ~~~~~~~~~~~~~~~~~~~~~
2446 ! #e1 deallocate ( ETVg_d ) ! VegetationPower, Forcing
2447 ! #e1 deallocate ( ETSo_1 ) ! Soil/Snow Power, after Forcing
2448 ! #e1 deallocate ( EqSn_0 ) ! Snow Energy, befor Phase Change
2449 ! #e1 deallocate ( EqSn_1 ) ! Snow Energy, after Phase Change
2450 ! #e1 deallocate ( EqSn_d ) ! Energy in Excess
2451 
2452 ! OUTPUT/Verification: H2O Conservation
2453 ! #m0 deallocate ( Wats_0 ) ! Soil Water, before Forcing
2454 ! #m0 deallocate ( Wats_1 ) ! Soil Water, after Forcing
2455 ! #m0 deallocate ( Wats_d ) ! Soil Water, Forcing
2456 
2457 ! OUTPUT/Verification: * Mass Conservation
2458 ! #m1 deallocate ( SIsubl ) ! Snow Sublimed/Deposed Mass
2459 ! #m1 deallocate ( SImelt ) ! Snow Melted Mass
2460 ! #m1 deallocate ( SIrnof ) ! Local Surficial Water + Run OFF
2461 
2462 ! OUTPUT/Verification: SeaIce Conservation
2463 ! #m2 deallocate ( SIvAcr ) ! Sea-Ice Vertical Acretion
2464 
2465 ! Energy and Mass Budget
2466 ! ~~~~~~~~~~~~~~~~~~~~~~
2467 ! #e1 deallocate ( Enrsvd ) ! Soil+Vegetat Power Forcing
2468 
2469  ! H2O Conservation
2470 ! #m0 deallocate ( Watsv0 ) ! Soil+Vegetat, before Forcing
2471 ! #m0 deallocate ( Watsvd ) ! Soil+Vegetat Water Forcing
2472 
2473  ! * Mass Conservation
2474 ! #m1 deallocate ( SIWm_0 ,SIWm_1 ) ! Snow Initial/Final Mass
2475 ! #m1 deallocate ( SIWa_i ,SIWa_f ) ! Snow Initial/Final ATM Forcing
2476 ! #m1 deallocate ( SIWe_i ,SIWe_f ) ! Snow Initial/Final BLS Forcing
2477 
2478 
2479  deallocate ( icindx ) ! No Ice Mask
2480 
2481  deallocate ( fallok ) ! Snow Contribution to the Canopy
2482 
2483  END IF !
2484 ! !
2485 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2486 
2487 
2488 ! END .main. (SISVAT)
2489 
2490 
2491  return
2492  end subroutine sisvat
2493 
2494 
2495 
2496  subroutine sisvat_bsn
2498 !--------------------------------------------------------------------------+
2499 ! MAR SISVAT_BSn Wed 26-Jun-2013 MAR |
2500 ! SubRoutine SISVAT_BSn treats Snow Erosion and Deposition |
2501 ! |
2502 ! version 3.p.4.1 created by H. Gallee, Thu 14-Feb-2013 |
2503 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
2504 ! |
2505 !--------------------------------------------------------------------------+
2506 ! |
2507 ! Preprocessing Option: STANDARD Possibility |
2508 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ |
2509 ! #BS: Explicit Cloud MICROPHYSICS: Blow. *(Snow) Model |
2510 ! #BM: Explicit Cloud MICROPHYSICS: de Montmollin Parameterizat. |
2511 ! #MA: SNOW Model: Increased polar B* Mobility (Mann et al.2000) |
2512 ! |
2513 ! |
2514 ! Preprocessing Option: |
2515 ! ^^^^^^^^^^^^^^^^^^^^^ |
2516 ! #BA: Budd et al. 1966, Ant.Res.Ser.9 u* BS Threshold |
2517 ! #BY: Budd et al. 1966, 2~m Averag Blow. *(Snow) Properties |
2518 ! #AG: Snow Aging Col de Porte (Brun et al.1991) discard BS at CdP |
2519 ! |
2520 ! |
2521 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
2522 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
2523 ! FILE | CONTENT |
2524 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
2525 ! # stdout | #s2: OUTPUT of SnowFall, Snow Buffer |
2526 ! | unit 6, SubRoutine SISVAT_BSn, _qSn |
2527 ! # stdout | #b0: OUTPUT of Snow Erosion Statistics |
2528 ! | unit 6, SubRoutine SISVAT_BSn **ONLY** |
2529 !--------------------------------------------------------------------------+
2530 
2531 
2532 ! Global Variables
2533 ! =================
2534 
2535  use mod_real
2536  use mod_phy____dat
2537  use mod_phy____grd
2538  use mod_sisvat_grd
2539 
2540 
2541 
2542 ! General Variables
2543 ! =================
2544 
2545  use mod_sisvat_ctr
2546  use mod_sisvat_dat
2547  use mod_sisvat_kkl
2548  use mod_sisvat_loc
2549  use mod_sisvat_bsn
2550  use mod_sisvatlbsn
2551 
2552 
2553 
2554  IMPLICIT NONE
2555 
2556 
2557 
2558 ! Local Variables
2559 ! ===============
2560 
2561  integer :: ikl,ikv ,isn ,isnMAX !
2562  integer :: Mobilm,Mobiln !
2563 
2564  real(kind=real8) :: DendOK ! Dendricity Switch
2565  real(kind=real8) :: SaltOK ! Saltation Switch
2566  real(kind=real8) :: MeltOK ! Saltation Switch (Melting Snow)
2567  real(kind=real8) :: SnowOK ! Pack Top Switch
2568  real(kind=real8) :: SaltM1,SaltM2,SaltMo ! Saltation Parameters
2569  real(kind=real8) :: SaltMx = -5.83e-2 !
2570  real(kind=real8) :: ShearX ! Arg. Max Shear Stress
2571  real(kind=real8) :: SaltSU,Salt_U !
2572  real(kind=real8) :: ArgFac,Fac_Mo !
2573  real(kind=real8) :: FacRBS = 2.868 !
2574  real(kind=real8) :: FacTBS = 0.085 !
2575  real(kind=real8) :: ArguSi !
2576  real(kind=real8) :: hdrift = 1.00e+1 ! Inverse erodibl.Snow Lay.Thickn.
2577  real(kind=real8) :: h_mmWE = 0.01e00 ! Eroded Snow Layer Min Thickness
2578 ! real(kind=real8) :: tfv_vk = 5.10e-1 ! * Fall Veloc. / Von Karman Cst
2579  ! tfv (Terminal Fall Veloc. =.216)
2580  ! /vk (Von Karman Constant =.4 )
2581  ! (Wamser & Lykosov, 1995
2582  ! Contr.Atm.Phys. 68, p.90)
2583  real(kind=real8) :: dzweqo,dzweqn,bsno_x !
2584  real(kind=real8) :: hsno_x !
2585  real(kind=real8) :: ro_new !
2586 ! #BM real(kind=real8) :: PorSno,PorRef !
2587 ! #BS real(kind=real8) :: Salt_f !
2588  real(kind=real8) :: MIN_Mo ! Minimum Mobility Fresh Fallen *
2589 ! #MA real(kind=real8) :: AgBlow = 1.00 ! Snow Mobility Time Scale
2590  ! 1 Day (F.Domine, pers.communic.)
2591 ! #BS real(kind=real8) :: snofOK ! Threshd Snow Fall
2592 
2593 
2594 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
2595 ! OUTPUT for Snow Erosion Variables
2596 ! #b0 real(kind=real8) :: Sno0WE,Sno1WE ! Snow Mass before/after Erosion
2597 ! #b0 real(kind=real8) :: SnodWE ! Snow Mass Erosion
2598 
2599 
2600 
2601 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2602 ! !
2603 ! ALLOCATION !
2604 ! ========== !
2605 
2606  IF (it_run.EQ.1 .OR. flagdalloc) THEN !
2607 
2608  allocate ( mobile(kcolp,mwp) ) !
2609  allocate ( saltsi(kcolp,mwp,nsnow) ) ! Snow Drift Index
2610  allocate ( sdrift(kcolp,mwp,nsnow) ) !
2611  allocate ( xdrift(kcolp,mwp) ) !
2612  allocate ( zdrift(kcolp,mwp) ) !
2613  allocate ( tdepos(kcolp,mwp) ) !
2614  allocate ( zdepos(kcolp,mwp,nsnow) ) !
2615  allocate ( dbsaux(kcolp,mwp) ) ! Drift Amount (Dummy Variable)
2616  allocate ( isagr1(kcolp,mwp) ) ! 1st Layer History
2617  allocate ( isagr2(kcolp,mwp) ) ! 2nd Layer History
2618 
2619  allocate ( weagre(kcolp,mwp) ) ! Snow Water Equivalent Thickness
2620  allocate ( agrege(kcolp,mwp) ) ! 1. when Agregation constrained
2621  allocate ( dzagr1(kcolp,mwp) ) ! 1st Layer Thickness
2622  allocate ( dzagr2(kcolp,mwp) ) ! 2nd Layer Thickness
2623  allocate ( t_agr1(kcolp,mwp) ) ! 1st Layer Temperature
2624  allocate ( t_agr2(kcolp,mwp) ) ! 2nd Layer Temperature
2625  allocate ( roagr1(kcolp,mwp) ) ! 1st Layer Density
2626  allocate ( roagr2(kcolp,mwp) ) ! 2nd Layer Density
2627  allocate ( etagr1(kcolp,mwp) ) ! 1st Layer Water Content
2628  allocate ( etagr2(kcolp,mwp) ) ! 2nd Layer Water Content
2629  allocate ( g1agr1(kcolp,mwp) ) ! 1st Layer Dendricity/Spher.
2630  allocate ( g1agr2(kcolp,mwp) ) ! 2nd Layer Dendricity/Spher.
2631  allocate ( g2agr1(kcolp,mwp) ) ! 1st Layer Sphericity/Size
2632  allocate ( g2agr2(kcolp,mwp) ) ! 2nd Layer Sphericity/Size
2633  allocate ( agagr1(kcolp,mwp) ) ! 1st Layer Age
2634  allocate ( agagr2(kcolp,mwp) ) ! 2nd Layer Age
2635 
2636  END IF !
2637 ! !
2638 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2639 
2640 
2641 
2642 ! DATA
2643 ! ====
2644 
2645 ! Initialization
2646 ! ==============
2647 
2648  IF (.NOT.blowin) THEN
2649  blowin = .true.
2650  facsbs = 1. / facrbs
2651  facubs = 1. / factbs
2652  por_bs = 1. - bsnoro/ rhoice
2653  sheabs = por_bs/(1.00-por_bs)
2654 ! SheaBS = Arg(sqrt(shear = max shear stress in snow)):
2655 ! shear = 3.420d00 * exp(-(Por_BS +Por_BS) &
2656 ! & /(1.00 -Por_BS))
2657 ! SheaBS : see de Montmollin (1978),
2658 ! These Univ. Sci. Medic. Grenoble, Fig. 1 p. 124
2659 
2660  DO ikl=1,kcolp ! Parameterization of u*th
2661  DO ikv=1,mwp
2662  rcd10n = 1./ 26.5 ! was developed from observations made
2663  END DO
2664  END DO ! during assumed neutral conditions
2665 
2666  write(6,5000) 1./ rcd10n
2667  5000 format(/,' Blowing Snow Model Initialization ', &
2668  & /,' Vt / u*t =',f8.2,' (Neutral Assumption)', &
2669  & /,' ', 8x ,' (Budd assumes 26.5)',/)
2670  END IF
2671 
2672 
2673 ! Snow Age (Influence on Snow Erosion Threshold)
2674 ! ==============================================
2675 
2676 ! #BS DO isn=1,nsnow
2677 ! #BS DO ikl=1,kcolp
2678 ! #BS DO ikv=1,mwp
2679 ! #BS agsnSV(ikl,ikv,isn) = agsnSV(ikl,ikv,isn) + dt__SV/86400.
2680 ! #BS END DO
2681 ! #BS END DO
2682 ! #BS END DO
2683 ! #BS DO ikl=1,kcolp
2684 ! #BS DO ikv=1,mwp
2685 ! #BS isn = max(1 , isnoSV(ikl,ikv))
2686 ! #BS snofOK = max(0.,sign(1.,dsn_SV(ikl,ikv)-eps6)) ! Threshold=1.e-6
2687 ! #BS agsnSV(ikl,ikv,isn) = (1.-snofOK) *agsnSV(ikl,ikv,isn)! ~0.1 mm w.e./day
2688 ! #BS END DO
2689 ! #BS END DO
2690  IF (.NOT.blomod) GO TO 1000
2691 ! #AG STOP '?!&~@|@[#@#] --- INCONSISTANT SNOW AGE --- EMERGENCY STOP'
2692  1000 CONTINUE
2693 
2694 
2695 ! EROSION
2696 ! =======
2697 
2698  DO isn = 1,nsnow
2699  DO ikl = 1,kcolp
2700  DO ikv=1,mwp
2701 
2702 ! Below the high Snow Density Threshold (ro__SV < BSnoRo)
2703 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2704  dendok = max(zer0,sign(un_1,eps6-g1snsv(ikl,ikv,isn) )) !
2705  saltok = min(1 , max(istdsv(2)-istosv(ikl,ikv,isn),0)) !
2706  meltok = (un_1 &!
2707  & -max(zer0,sign(un_1,tf_sno-eps6 &!
2708  & -tsissv(ikl,ikv,isn) )))&! Melting Snow
2709  & * min(un_1,dendok &!
2710  & +(1.-dendok) &!
2711  & *sign(un_1, g2snsv(ikl,ikv,isn)-1.0))! 1.0 for 1mm
2712  snowok = min(1 , max(isnosv(ikl,ikv) +1 -isn ,0)) ! Snow Switch
2713 
2714  g1snsv(ikl,ikv,isn) = snowok * g1snsv(ikl,ikv,isn) &
2715  & + (1.- snowok)*min(g1snsv(ikl,ikv,isn),g1_dsv)
2716  g2snsv(ikl,ikv,isn) = snowok * g2snsv(ikl,ikv,isn) &
2717  & + (1.- snowok)*min(g2snsv(ikl,ikv,isn),g1_dsv)
2718 
2719  saltok = min(un_1 , saltok + meltok) * snowok
2720  saltm1 = -0.750e-2 * g1snsv(ikl,ikv,isn) &
2721  & -0.500e-2 * g2snsv(ikl,ikv,isn)+ 0.500e00
2722 ! SaltM1 : Guyomarc'h & Merindol, 1997, Ann. Glac.
2723 ! CAUTION: Guyomarc'h & Merindol Dendricity Sign is +
2724 ! ^^^^^^^^ MAR Dendricity Sign is -
2725  saltm2 = -0.833d-2 * g1snsv(ikl,ikv,isn) &
2726  & -0.583d-2 * g2snsv(ikl,ikv,isn)+ 0.833d00
2727  saltmo = (dendok * saltm1 + (1.-dendok) * saltm2 )
2728 
2729 ! Increased Mobility of Deposed (blown) Snow (Mann et al., 2000, JGR 105,
2730 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Fig.2 p.24496 & text below)
2731  min_mo = 0.
2732 ! #MA MIN_Mo = 0.6 * exp(-agsnSV(ikl,ikv,isn) /AgBlow)
2733  saltmo = max(saltmo,min_mo)
2734 
2735  saltmo = saltok * saltmo + (1.-saltok) * min(saltmo,saltmx)
2736 ! SaltMo = SaltOK * SaltMo - (1.-SaltOK) * 0.9500 ! Tuning
2737  saltmo = max(saltmo , eps6-un_1)
2738 
2739  saltsu = (1.00d0+saltmo) *facsbs
2740 
2741 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
2742 ! OUTPUT for Snow Erosion Variables
2743 ! #b0 Salt_U = -log(SaltSU) *FacUBS
2744 ! #b0 IF (ii__AP(ikl).EQ.iwr_SV.AND.jj__AP(ikl).EQ.jwr_SV .AND. &
2745 ! #b0& ikv .EQ.nwr_SV.AND.isn .EQ.isnoSV(ikl,ikv)) &
2746 ! #b0& write(6,6010) isnoSV(ikl,ikv),G1snSV(ikl,ikv,isn)/G1_dSV &
2747 ! #b0& ,G2snSV(ikl,ikv,isn)/G1_dSV &
2748 ! #b0& ,ro__SV(ikl,ikv,isn),agsnSV(ikl,ikv,isn) &
2749 ! #b0& ,SaltM1, SaltM2, SaltMo, Salt_U &
2750 ! #b0& ,us__SV(ikl,ikv) / rCd10n
2751  6010 format(/,'SISVAT_BSn',6x &
2752  & ,6x,i3,2x,'G1 =',f6.3,' G2 =',f7.3 &
2753  & , ' ro [kg/m3] =',f9.3,' Age* [Day] =',f9.3 &
2754  & , /,27x,'SaltM1 =',f6.3,' SaltM2 =',f7.3 &
2755  & , ' Mobility I.=',f9.3,' Vt [m/s] =',f9.3 &
2756  & , /,27x,' ', 6x ,' ', 7x &
2757  & , ' ', 9x ,' Vn10 [m/s] =',f9.3)
2758 
2759 ! Above the high Snow Density Threshold (ro__SV > BSnoRo)
2760 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2761  por_bs = 1.000 - ro__sv(ikl,ikv,isn) /rhoice
2762  shearx = por_bs/max(eps6,un_1-por_bs)
2763 ! ShearX ==> Arg(sqrt(shear)) with shear = max shear stress in snow:
2764 ! shear = 3.420d00 * exp(-(Por_BS +Por_BS) &
2765 ! & /max(eps6,un_1-Por_BS))
2766 ! see de Montmollin (1978),
2767 ! These Univ. Sci. Medic. Grenoble, Fig. 1 p. 124
2768 
2769 ! Influence of Density on Shear Stress if ro__SV > BSnoRo
2770 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2771  argfac = max(zer0 ,sheabs-shearx) !
2772 ! Fac_Mo = exp( ArgFac ) ! ** NOT ** tuned
2773  fac_mo = exp( argfac ) ! = 1 if ro__SV < BSnoRo
2774  ! < 1 if ro__SV > BSnoRo
2775 ! Snow Drift Index
2776 ! ~~~~~~~~~~~~~~~~
2777  saltsu = max(eps6 , saltsu)
2778  saltsu = exp(fac_mo*log(saltsu))
2779  argusi = -factbs *us__sv(ikl,ikv)/rcd10n
2780  saltsi(ikl,ikv,isn) = (saltsu-exp(argusi)) *facrbs
2781 ! SaltSI : Generalization of the Snow Drift Index of
2782 ! Guyomarc'h & Merindol (1997, Ann.Glaciol.)
2783 
2784 ! Threshold Friction Velocity
2785 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~
2786  snowok = 1 -min(1,iabs(isn-isnosv(ikl,ikv)))
2787  salt_u = -log(saltsu) *facubs
2788 ! Salt_U : Guyomarc'h & Merindol, 1997, Ann. Glac.
2789 
2790  usthsv(ikl,ikv) = snowok * (salt_u *rcd10n) &
2791  & + (1.-snowok)* usthsv(ikl,ikv)
2792 
2793 ! Threshold Friction Velocity (Budd et al., 1966)
2794 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~
2795 ! #BA usthSV(ikl,ikv) = SnowOK * (Salt_U /26.5) &
2796 ! #BA& + (1.-SnowOK)* usthSV(ikl,ikv)
2797 ! Us(U10) : Budd et al. 1966, Ant.Res.Ser.9
2798 ! (see Pomeroy & Gray 1995 NHRI Sci.Rep.7(30)p.62)
2799 
2800 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
2801 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2802 ! OUTPUT for Snow Erosion Variables
2803 ! #b0 IF (ii__AP(ikl).EQ.iwr_SV.AND.jj__AP(ikl).EQ.jwr_SV .AND. &
2804 ! #b0& ikv .EQ.nwr_SV.AND.isn .EQ.isnoSV(ikl,ikv)) &
2805 ! #b0& write(6,6011) Fac_Mo,Por_BS,SaltSI(ikl,ikv,isn),usthSV(ikl,ikv)
2806  6011 format( 27x,'Fac_Mo =',f6.3,' Por_BS =',f7.3 &
2807  & , ' Drift I.=',f9.3,' ut*_0[m/s] =',f9.3)
2808  END DO
2809  END DO
2810  END DO
2811 
2812 
2813 ! Deepest Mobile Snow Layer
2814 ! -------------------------
2815 
2816  DO ikl = 1,kcolp
2817  DO ikv=1,mwp
2818  mobile(ikl,ikv) = nsnow+1
2819  END DO
2820  END DO
2821  DO isn = nsnow,1,-1
2822  DO ikl = 1,kcolp
2823  DO ikv=1,mwp
2824  isnmax = max( 1, isnosv(ikl,ikv) )
2825  isnmax = min( isn, isnmax )
2826  mobiln = isn * max(zer0,sign(un_1,saltsi(ikl,ikv,isnmax)))
2827  mobilm = 1 - min(1 , mobile(ikl,ikv) -1 -mobiln)
2828 ! Mobilm = 1 ONLY IF Mobiln = Mobile(ikl) -1 (0 otherwise)
2829 
2830  mobile(ikl,ikv) = mobilm * mobiln &
2831  & + (1-mobilm)* mobile(ikl,ikv)
2832  END DO
2833  END DO
2834  END DO
2835 
2836 
2837 ! Weighting the Amount of Snow to erode
2838 ! -------------------------------------
2839 
2840  DO ikl = 1,kcolp
2841  DO ikv=1,mwp
2842  zdrift(ikl,ikv) = 0.0
2843  xdrift(ikl,ikv) = 0.0
2844  dbsaux(ikl,ikv) = dbs_sv(ikl,ikv)
2845  END DO
2846  END DO
2847 
2848  DO isn = 1,nsnow
2849  DO ikl = 1,kcolp
2850  DO ikv=1,mwp
2851  zdrift(ikl,ikv) = zdrift(ikl,ikv) &
2852  & + 0.50 * dzsnsv(ikl,ikv,isn) * (3.25 -saltsi(ikl,ikv,isn))
2853  sdrift(ikl,ikv,isn) = saltsi(ikl,ikv,isn) &
2854  & *exp( max(ea_min, -zdrift(ikl,ikv) *hdrift )) &
2855  & *min(1,max(0 , isn +1 -mobile(ikl,ikv))) &
2856  & *min(1,max(0 , isnosv(ikl,ikv) -isn +1 )) &
2857 ! Last 2 Lines force sdrift = 0 outside mobile Snow Layers
2858  & * max(zer0, sign(un_1, -dbs_sv(ikl,ikv)))
2859 ! Erosion is allowed only if available Blowing Snow
2860  xdrift(ikl,ikv) = sdrift(ikl,ikv,isn) +xdrift(ikl,ikv)
2861  zdrift(ikl,ikv) = zdrift(ikl,ikv) &
2862  & + 0.50 * dzsnsv(ikl,ikv,isn) * (3.25 -saltsi(ikl,ikv,isn))
2863  END DO
2864  END DO
2865  END DO
2866 
2867 ! Normalization
2868 ! ~~~~~~~~~~~~~
2869  DO isn = 1,nsnow
2870  DO ikl = 1,kcolp
2871  DO ikv=1,mwp
2872  sdrift(ikl,ikv,isn) = sdrift(ikl,ikv,isn) /max(eps6,xdrift(ikl,ikv))
2873  END DO
2874  END DO
2875  END DO
2876 
2877 
2878 ! Weighting the Amount of Snow to depose
2879 ! --------------------------------------
2880 
2881  DO ikl = 1,kcolp
2882  DO ikv=1,mwp
2883  zdrift(ikl,ikv) = 0.0
2884  tdepos(ikl,ikv) = 0.0
2885  END DO
2886  END DO
2887 
2888  DO isn = 1,nsnow
2889  DO ikl = 1,kcolp
2890  DO ikv=1,mwp
2891  zdepos(ikl,ikv,isn) = exp(-zdrift(ikl,ikv) ) &
2892  & *min(1,max(0 , isn +1 -mobile(ikl,ikv))) &
2893  & *min(1,max(0 , isnosv(ikl,ikv ) -isn +1 ))
2894 ! Last 2 Lines force zdepos = 0 outside mobile Snow Layers
2895  tdepos(ikl,ikv) = tdepos(ikl,ikv) + zdepos(ikl,ikv,isn)
2896  zdrift(ikl,ikv) = zdrift(ikl,ikv) + dzsnsv(ikl,ikv,isn) *ro__sv(ikl,ikv,isn)&
2897  & /rhowat
2898  END DO
2899  END DO
2900  END DO
2901 
2902 ! Normalization
2903 ! ~~~~~~~~~~~~~
2904  DO isn = 1,nsnow
2905  DO ikl = 1,kcolp
2906  DO ikv=1,mwp
2907  zdepos(ikl,ikv,isn) = zdepos(ikl,ikv,isn) / max(eps6,tdepos(ikl,ikv))
2908  END DO
2909  END DO
2910  END DO
2911 
2912 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
2913 ! OUTPUT for Snow Erosion Variables
2914 ! #b0 DO ikl = 1,kcolp
2915 ! #b0 DO ikv=1,mwp
2916 ! #b0 IF (ii__AP(ikl).EQ.iwr_SV.AND.jj__AP(ikl).EQ.jwr_SV .AND. &
2917 ! #b0& ikv .EQ.nwr_SV ) THEN
2918 ! #b0 Sno0WE = 0.
2919 ! #b0 DO isn=1,nsnow
2920 ! #b0 Sno0WE = Sno0WE &
2921 ! #b0& + dzsnSV(ikl,ikv,isn) *ro__SV(ikl,ikv,isn)
2922 ! #b0 END DO
2923 ! #b0 write(6,6005) Sno0WE ,dbs_SV(ikl,ikv)
2924  6005 format( &
2925  & 18x,'MB0',6x,'Sno1WE [mm]=',f9.3,19x,'0 dbs_SV [mm]=',f9.6)
2926 ! #b0 SnodWE = dbs_SV(ikl,ikv)
2927 ! #b0 END IF
2928 ! #b0 END DO
2929 ! #b0 END DO
2930 
2931 
2932 ! Weighted Erosion (Erosion amount is distributed ! dbs_SV decreases
2933 ! ----------------- over the upper Snow Pack) ! dzsnSV decreases
2934 
2935  DO isn = 1,nsnow
2936  DO ikl = 1,kcolp
2937  DO ikv=1,mwp
2938  snowok = min(1,max(isnosv(ikl,ikv)+1-isn ,0)) ! Snow Switch
2939  dzweqo = dzsnsv(ikl,ikv,isn) *ro__sv(ikl,ikv,isn) ! [kg/m2, mm w.e.]
2940  bsno_x = dbsaux(ikl,ikv) *sdrift(ikl,ikv,isn)
2941  dzweqn = dzweqo +bsno_x
2942  dzweqn = max(dzweqn, h_mmwe *snowok)
2943  dbs_sv(ikl,ikv) = dbs_sv(ikl,ikv) +(dzweqo -dzweqn)
2944  dzsnsv(ikl,ikv,isn) = dzweqn &
2945  & /max(eps6,ro__sv(ikl,ikv,isn))
2946  END DO
2947  END DO
2948  END DO
2949 
2950 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
2951 ! OUTPUT for Snow Erosion Variables
2952 ! #b0 DO ikl = 1,kcolp
2953 ! #b0 DO ikv=1,mwp
2954 ! #b0 IF (ii__AP(ikl) .EQ. 1 .AND. jj__AP(ikl) .EQ. 1) THEN
2955 ! #b0 SnodWE = SnodWE -dbs_SV(ikl,ikv)
2956 ! #b0 Sno1WE = 0.
2957 ! #b0 DO isn=1,nsnow
2958 ! #b0 Sno1WE = Sno1WE &
2959 ! #b0& + dzsnSV(ikl,ikv,isn)*ro__SV(ikl,ikv,isn)
2960 ! #b0 END DO
2961 ! #b0 write(6,6006)Sno1WE , dbs_SV(ikl,ikv)
2962  6006 format( &
2963  & 18x,'MB1',6x,'Sno1WE [mm]=',f9.3,19x,'1 dbs_SV [mm]=',f9.6)
2964 ! #b0 write(6,6007)Sno1WE ,SnodWE ,Sno0WE, &
2965 ! #b0& (Sno1WE -SnodWE -Sno0WE)
2966  6007 format( &
2967  & 18x,'MB ',5x,'(After [mm]=',f6.0, ')-(Erosion[mm]=', f7.3, &
2968  & ')-(Before [mm]=', f9.3, &
2969  & ')= Budget [mm]=', f9.6)
2970 ! #b0 END IF
2971 ! #b0 END DO
2972 ! #b0 END DO
2973 
2974 
2975 ! ACCUMULATION of BLOWN SNOW ! dsn_SV decreases
2976 ! -------------------------- ! dzsnSV increases
2977 
2978  DO ikl = 1,kcolp
2979  DO ikv=1,mwp
2980  tdepos(ikl,ikv) = dsn_sv(ikl,ikv) * dsnbsv(ikl,ikv) * dt__sv
2981  weagre(ikl,ikv) = 0.
2982 
2983 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
2984 ! OUTPUT for Snow Erosion Variables
2985 ! #b0 IF (ii__AP(ikl).EQ.iwr_SV.AND.jj__AP(ikl).EQ.jwr_SV .AND. &
2986 ! #b0& ikv .EQ.nwr_SV.AND.0 .LT.isnoSV(ikl,ikv)) &
2987 ! #b0& write(6,6003) tdepos(ikl,ikv) ,Mobile(ikl,ikv)
2988  6003 format(/,41x,'tdepos [-] =',f6.3,40x,'Mobil',i3 &
2989  & ,/,27x,'Salt.Index sdrift' &
2990  & , ' zdepos ro__snow ro_bsnow roN_snow' &
2991  & , ' dz__snow dz_bsnow dzN_snow' &
2992  & , ' d___snow' &
2993  & ,/,27x,' [kg/m3] [kg/m3] [kg/m3]' &
2994  & , ' [m] [m] [m]' &
2995  & , ' [kg/m2]')
2996  END DO
2997  END DO
2998 
2999  DO isn = nsnow,1,-1
3000  DO ikl = 1,kcolp
3001  DO ikv=1,mwp
3002  weagre(ikl,ikv) = weagre(ikl,ikv) + ro__sv(ikl,ikv,isn)*dzsnsv(ikl,ikv,isn)
3003  isagr1(ikl,ikv) = istosv(ikl,ikv,isn)
3004  isagr2(ikl,ikv) = 0.
3005 
3006 ! Density of deposited blown Snow
3007 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3008  ro_new = bsnoro
3009 
3010 ! Density of deposited blown Snow (de Montmollin, 1978)
3011 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3012 ! #BM PorSno = 1.0d00 - ro__SV(ikl,ikv,isn) &
3013 ! #BM& / rhoIce
3014 ! #BM Salt_f = usthSV(ikl,ikv)/ max(eps6, us__SV(ikl,ikv))
3015 ! #BM Salt_f = min(Salt_f , un_1)
3016 ! #BM PorRef = PorSno / max(eps6,1.-PorSno) &
3017 ! #BM& +log(Salt_f)
3018 ! #BM Por_BS = PorRef / (1.0d00 + PorRef)
3019 ! #BM ro_new = rhoIce * (1.0d00 - Por_BS)
3020 ! #BM ro_new = max(ro_new , BSnoRo)
3021 
3022  roagr1(ikl,ikv) = ro__sv(ikl,ikv,isn)
3023  roagr2(ikl,ikv) = ro_new
3024  hsno_x = tdepos(ikl,ikv)* zdepos(ikl,ikv,isn)
3025 
3026  dzagr1(ikl,ikv) = dzsnsv(ikl,ikv,isn)
3027  dzagr2(ikl,ikv) = hsno_x / ro_new
3028 ! Conversion [kg/m2, i.e., mm w.e.] -----> [mSnow]
3029 
3030  dsn_sv(ikl,ikv) = dsn_sv(ikl,ikv)- hsno_x / dt__sv
3031 
3032 ! Other Snow Properties
3033 ! ~~~~~~~~~~~~~~~~~~~~~
3034  t_agr1(ikl,ikv) = tsissv(ikl,ikv,isn)
3035  t_agr2(ikl,ikv) =min(tf_sno,tat_sv(ikl,ikv))
3036  etagr1(ikl,ikv) = eta_sv(ikl,ikv,isn)
3037  etagr2(ikl,ikv) = 0.0
3038  g1agr1(ikl,ikv) = g1snsv(ikl,ikv,isn)
3039  g1agr2(ikl,ikv) = g1_dsv
3040  g2agr1(ikl,ikv) = g2snsv(ikl,ikv,isn)
3041  g2agr2(ikl,ikv) = adsdsv
3042 ! #BY G2agr2(ikl,ikv) = 0.87d0
3043 ! Budd et al. 1966, 2~m Average /Table 5 p. 97
3044 
3045  agagr1(ikl,ikv) = agsnsv(ikl,ikv,isn)
3046  agagr2(ikl,ikv) = 0.
3047  agrege(ikl,ikv) = 1.
3048  END DO
3049  END DO
3050 
3051 ! Agregation
3052 ! ~~~~~~~~~~
3053  DO ikl=1,kcolp
3054  DO ikv=1,mwp
3055 
3056 ! **********
3057  call sisvat_zag &
3058  & (ikl,ikv,isagr1(ikl,ikv),isagr2(ikl,ikv),weagre(ikl,ikv)&
3059  & ,dzagr1(ikl,ikv),dzagr2(ikl,ikv),t_agr1(ikl,ikv),t_agr2(ikl,ikv)&
3060  & ,roagr1(ikl,ikv),roagr2(ikl,ikv),etagr1(ikl,ikv),etagr2(ikl,ikv)&
3061  & ,g1agr1(ikl,ikv),g1agr2(ikl,ikv),g2agr1(ikl,ikv),g2agr2(ikl,ikv)&
3062  & ,agagr1(ikl,ikv),agagr2(ikl,ikv),agrege(ikl,ikv)&
3063  & )
3064 ! **********
3065 
3066  END DO
3067  END DO
3068 
3069 
3070  DO ikl = 1,kcolp
3071  DO ikv=1,mwp
3072 
3073 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
3074 ! OUTPUT for Snow Erosion Variables
3075 ! #b0 IF (ii__AP(ikl).EQ.iwr_SV.AND.jj__AP(ikl).EQ.jwr_SV .AND. &
3076 ! #b0& ikv .EQ.nwr_SV.AND.isn .LE.isnoSV(ikl,ikv)) &
3077 ! #b0& write(6,6004) isn ,SaltSI(ikl,ikv,isn) &
3078 ! #b0& ,sdrift(ikl,ikv,isn),zdepos(ikl,ikv,isn) &
3079 ! #b0& ,ro__SV(ikl,ikv,isn),roagr2(ikl,ikv),roagr1(ikl,ikv) &
3080 ! #b0& ,dzsnSV(ikl,ikv,isn),dzagr2(ikl,ikv),dzagr1(ikl,ikv) &
3081 ! #b0& ,dsn_SV(ikl,ikv)
3082  6004 format((27x,i3,f7.2,2f10.6,3f10.3,4f10.6))
3083 
3084  istosv(ikl,ikv,isn) = isagr1(ikl,ikv)
3085  dzsnsv(ikl,ikv,isn) = dzagr1(ikl,ikv)
3086  tsissv(ikl,ikv,isn) = t_agr1(ikl,ikv)
3087  ro__sv(ikl,ikv,isn) = roagr1(ikl,ikv)
3088  eta_sv(ikl,ikv,isn) = etagr1(ikl,ikv)
3089  g1snsv(ikl,ikv,isn) = g1agr1(ikl,ikv)
3090  g2snsv(ikl,ikv,isn) = g2agr1(ikl,ikv)
3091  agsnsv(ikl,ikv,isn) = agagr1(ikl,ikv)
3092 
3093  END DO
3094  END DO
3095 
3096  END DO
3097 
3098 ! OUTPUT in SISVAT for ikl = 1 (preferably for Stand Alone Version)
3099 ! OUTPUT for SnowFall and Snow Buffer
3100 ! #s2 IF (isnoSV(1,1) .GT. 0) &
3101 ! #s2& write(6,6008)isnoSV(1,1), dsn_SV(1) *dt__SV + BufsSV(1,1), &
3102 ! #s2& (dzsnSV(1,isn)*ro__SV(1,isn),isn=1,isnoSV(1,1))
3103  6008 format(i3,' dsn+Buf=',f6.2,6x,'A dz *ro =',10f6.2, &
3104  & (/,35x,10f6.2))
3105 
3106  DO ikl = 1,kcolp
3107  DO ikv=1,mwp
3108  hdrift = tdepos(ikl,ikv)/dt__sv
3109  esnbsv(ikl,ikv) = (dsnbsv(ikl,ikv)-1.00)*hdrift/max(dsn_sv(ikl,ikv),eps6) &
3110  & +dsnbsv(ikl,ikv)
3111  dsnbsv(ikl,ikv) = min(un_1, max(zer0,esnbsv(ikl,ikv) ) )
3112 ! dsnbSV is now the Blown Snow fraction of precipitating snow
3113 ! will be used for characterizing the Buffer Layer
3114 ! (see update of Bros_N, G1same, G2same, zroOLD, zroNEW)
3115  END DO
3116  END DO
3117 
3118 
3119 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3120 ! !
3121 ! DE-ALLOCATION !
3122 ! ============= !
3123 
3124  IF (flagdalloc) THEN !
3125 
3126  deallocate ( saltsi ) ! Snow Drift Index
3127  deallocate ( sdrift ) !
3128  deallocate ( xdrift ) !
3129  deallocate ( zdrift ) !
3130  deallocate ( tdepos ) !
3131  deallocate ( zdepos ) !
3132  deallocate ( dbsaux ) ! Drift Amount (Dummy Variable)
3133  deallocate ( isagr1 ) ! 1st Layer History
3134  deallocate ( isagr2 ) ! 2nd Layer History
3135 
3136  deallocate ( weagre ) ! Snow Water Equivalent Thickness
3137  deallocate ( agrege ) ! 1. when Agregation constrained
3138  deallocate ( dzagr1 ) ! 1st Layer Thickness
3139  deallocate ( dzagr2 ) ! 2nd Layer Thickness
3140  deallocate ( t_agr1 ) ! 1st Layer Temperature
3141  deallocate ( t_agr2 ) ! 2nd Layer Temperature
3142  deallocate ( roagr1 ) ! 1st Layer Density
3143  deallocate ( roagr2 ) ! 2nd Layer Density
3144  deallocate ( etagr1 ) ! 1st Layer Water Content
3145  deallocate ( etagr2 ) ! 2nd Layer Water Content
3146  deallocate ( g1agr1 ) ! 1st Layer Dendricity/Spher.
3147  deallocate ( g1agr2 ) ! 2nd Layer Dendricity/Spher.
3148  deallocate ( g2agr1 ) ! 1st Layer Sphericity/Size
3149  deallocate ( g2agr2 ) ! 2nd Layer Sphericity/Size
3150  deallocate ( agagr1 ) ! 1st Layer Age
3151  deallocate ( agagr2 ) ! 2nd Layer Age
3152 
3153  END IF !
3154 ! !
3155 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3156 
3157 
3158  return
3159  end subroutine sisvat_bsn
3160 
3161 
3162 
3163  subroutine sisvat_bdu
3165 !--------------------------------------------------------------------------+
3166 ! MAR SISVAT_BDu Wed 26-Jun-2013 MAR |
3167 ! SubRoutine SISVAT_BDu treats Dust Erosion |
3168 ! |
3169 ! version 3.p.4.1 created by H. Gallee, Thu 14-Feb-2013 |
3170 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
3171 ! |
3172 !--------------------------------------------------------------------------+
3173 ! |
3174 ! OUTPUT: usthSV : Blowing Snow Erosion Threshold [m/s] |
3175 ! ^^^^^^ |
3176 ! |
3177 ! REFER. : Fecan, F., B. Marticorena and G. Bergametti, 1999 (Fal99) |
3178 ! ^^^^^^^^ Ann. Geophysicae 17, 149--157 |
3179 ! u* threshold: adapted from Fig. 4 p. 153 |
3180 ! Clay Content: from Tab. 2 p. 155 |
3181 ! |
3182 !--------------------------------------------------------------------------+
3183 
3184 
3185 
3186 ! Global Variables
3187 ! =================
3188 
3189  use mod_real
3190  use mod_phy____dat
3191  use mod_phy____grd
3192  use mod_sisvat_grd
3193 
3194 
3195 
3196 ! General Variables
3197 ! =================
3198 
3199  use mod_sisvat_dat
3200  use mod_sisvat_kkl
3201  use mod_sisvat_bdu
3202 
3203 
3204 
3205  IMPLICIT NONE
3206 
3207 
3208 
3209 ! Local Variables
3210 ! =================
3211 
3212  integer :: ikl,ikv , isot
3213 
3214  real(kind=real8) :: eta_Du,usthDu
3215 
3216 
3217 ! Initialisation
3218 ! ==============
3219 
3220  IF (.NOT.logust) THEN
3221  DO isot=1,nsot
3222  etaust(isot) = 0.0014 * claypc(isot) * claypc(isot) &! Fal99
3223  & + 0.17 * claypc(isot) ! Eqn.(14)
3224  END DO ! p. 154
3225  logust = .true.
3226  END IF
3227 
3228 
3229 ! Soil Erodibility
3230 ! ----------------
3231 
3232  DO ikl = 1,kcolp
3233  DO ikv = 1,mwp
3234  eta_du = max( eta_sv(ikl,ikv,0),etaust(isotsv(ikl,ikv))) ! Fal99
3235  eta_du = max(eps6,eta_sv(ikl,ikv,0)-eta_du ) ! Eqn.(15)
3236  usthdu = sqrt(un_1+1.21*exp(0.68* log(eta_du) )) &! p. 155
3237  & * ustdmn(isotsv(ikl,ikv)) &!
3238  & * f__ust(ivgtsv(ikl,ikv)) !
3239  usthsv(ikl,ikv) = &
3240  & usthsv(ikl,ikv)*(1-max(0,1-isnosv(ikl,ikv))) + &
3241  & usthdu * max(0,1-isnosv(ikl,ikv))
3242  END DO
3243  END DO
3244 
3245 
3246  return
3247  end subroutine sisvat_bdu
3248 
3249 
3250 
3251  subroutine sisvat_sic( &
3252 ! #m2& SIvAcr &
3253  & )
3255 !--------------------------------------------------------------------------+
3256 ! MAR SISVAT_SIc Wed 26-Jun-2013 MAR |
3257 ! SubRoutine SISVAT_SIc treats Sea-Ice and Ocean Latent Heat Exchanges |
3258 ! |
3259 ! version 3.p.4.1 created by H. Gallee, Thu 14-Feb-2013 |
3260 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
3261 ! |
3262 !--------------------------------------------------------------------------+
3263 ! |
3264 ! INPUT: TaT_SV : SBL Top Temperature [K] |
3265 ! ^^^^^ isnoSV : total Nb of Ice/Snow Layers [-] |
3266 ! LSmask : Land-Sea Mask [-] |
3267 ! dsn_SV : Snow Intensity [mm w.e./s] |
3268 ! |
3269 ! INPUT / TsisSV : Snow/Ice/Soil-Water Temperature [K] |
3270 ! OUTPUT: eta_SV : Soil/Snow Water Content [m3/m3] |
3271 ! ^^^^^^ dzsnSV : Snow Layer Thickness [m] |
3272 ! |
3273 ! OUTPUT: HFraSV : Frazil Thickness [m] |
3274 ! ^^^^^^ |
3275 ! |
3276 ! |
3277 ! Preprocessing Option: |
3278 ! ^^^^^^^^^^^^^^^^^^^^^ |
3279 ! #SJ: Sea-Ice Bottom accretion and ocean cooling due to SnowFall |
3280 ! |
3281 !--------------------------------------------------------------------------+
3282 
3283 
3284 ! Global Variables
3285 ! =================
3286 
3287  use mod_real
3288  use mod_phy____dat
3289  use mod_phy____grd
3290  use mod_sisvat_grd
3291 
3292 
3293 
3294 ! General Variables
3295 ! =================
3296 
3297  use mod_sisvat_ctr
3298  use mod_sisvat_dat
3299  use mod_sisvat_kkl
3300  use mod_sisvat_sic
3301 ! #m2 use Mod_SISVATLSIc
3302 
3303 
3304 
3305  IMPLICIT NONE
3306 
3307 
3308 
3309 ! Local Variables
3310 ! ===============
3311 
3312  integer :: ikl ,ikv ,n
3313  real(kind=real8) :: OCN_OK
3314 ! #SJ real(kind=real8) :: SIceOK
3315 ! #SJ real(kind=real8) :: SIcFrz
3316 ! #SJ real(kind=real8) :: Twat_n
3317 
3318  real(kind=real8) :: SalIce = 10. ! Sea-Ice Salinity
3319  real(kind=real8) :: SalWat = 35. ! Sea-Water Salinity
3320  ! Typical Salinities in Terra Nova Bay
3321  ! (Bromwich and Kurtz, 1984, JGR, p.3568;
3322  ! Cavalieri and Martin, 1985, p. 248)
3323 
3324 
3325 
3326 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3327 ! !
3328 ! ALLOCATION !
3329 ! ========== !
3330 
3331 ! #m2 IF (it_RUN.EQ.1 .OR. FlagDALLOC) THEN !
3332 
3333 ! #m2 allocate ( SIvAcr(kcolp,mwp) )
3334 
3335 ! #m2 END IF
3336 ! !
3337 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3338 
3339 
3340 
3341 ! Initialisation
3342 ! ==============
3343 
3344  IF (.NOT.sicini) THEN
3345  sicini = .true.
3346  crodzw = hc_wat*rhowat * dz_dsv(0) ! [J/m2/K]
3347  lro__i = lhfh2o*rhoice *(1.-1.e-3*salice &! [J/m3]
3348  & -(salice/salwat)*(1.-1.e-3*salwat) ) !
3349 
3350 ! OUTPUT/Verification: Energy/Water Budget
3351 ! #e1 Lro__I = LhfH2O*rhoIce
3352 
3353  END IF
3354 
3355 
3356 ! Snow Fall cools Sea Water
3357 ! =========================
3358 
3359  DO ikl=1,kcolp
3360  DO ikv=1,mwp
3361  ocn_ok = (1 -lsmask(ikl,ikv) ) &! Free Ocean
3362  & *max(0,1 -isnosv(ikl,ikv) ) !
3363 ! #SJ TsisSV(ikl,ikv,0) = TsisSV(ikl,ikv,0) &! [K]
3364 ! #SJ& -OCN_OK*(Cn_dSV*(Tf_Sno-TaT_SV(ikl,ikv) ) &! [J/kg]
3365 ! #SJ& +LhfH2O*(1. -eta_SV(ikl,ikv,0))) &! [J/kg]
3366 ! #SJ& * dsn_SV(ikl,ikv) *dt__SV / Crodzw ! [kg/m2]
3367 
3368 
3369 ! Sea-Ice Formation
3370 ! =================
3371 
3372 ! #SJ Twat_n = max(TsisSV(ikl,ikv,0 ) ,Tf_Sea) ! [K]
3373 ! #SJ SIcFrz = (Twat_n-TsisSV(ikl,ikv,0 ) )*Crodzw/Lro__I &! [m]
3374 ! #SJ& * 0.75
3375 ! *** Hibler (1984), Ocean Heat Flux: 25% of cooling (ANTARCTIC Ocean)
3376 ! (Hansen and Takahashi Eds)
3377 ! Geophys. Monogr. 29, M. Ewing Vol. 5, AGU, p. 241
3378 
3379 
3380 ! Frazil Formation
3381 ! -----------------
3382 
3383 ! #SJ HFraSV(ikl,ikv) = SIcFrz *OCN_OK
3384 
3385 
3386 ! Growth of the Sea-Ice First Ice Floe
3387 ! ------------------------------------
3388 
3389 ! #SJ SIceOK = (1 -LSmask(ikl,ikvp,n) ) &! Ice Cover.Ocean
3390 ! #SJ& *min( 1 ,isnoSV(ikl,ikv) ) !
3391 ! #SJ dzsnSV(ikl,ikv,1) = dzsnSV(ikl,ikv,1) &! Vertical Acret.
3392 ! #SJ& + SIcFrz *SIceOK !
3393 
3394 
3395 ! OUTPUT/Verification: SeaIce Conservation: Diagnostic of Surface Mass Balance
3396 ! #m2 SIvAcr(ikl,ikv) = rhoIce*SIcFrz *(OCN_OK+SIceOK) &
3397 ! #m2& - dt__SV*dsn_SV(ikl,ikv)* OCN_OK
3398 
3399 
3400 ! Water Fluxes Update
3401 ! -------------------
3402 
3403  rnofsv(ikl,ikv) = rnofsv(ikl,ikv) &
3404  & + dsn_sv(ikl,ikv) * ocn_ok
3405  dsn_sv(ikl,ikv) = dsn_sv(ikl,ikv) * (1.-ocn_ok)
3406 
3407  END DO
3408  END DO
3409 
3410 
3411 
3412 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3413 ! !
3414 ! DE-ALLOCATION !
3415 ! ============= !
3416 
3417 ! #m2 IF (FlagDALLOC) THEN !
3418 
3419 ! #m2 deallocate ( SIvAcr )
3420 
3421 ! #m2 END IF !
3422 ! !
3423 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3424 
3425 
3426  return
3427  end subroutine sisvat_sic
3428 
3429 
3430 
3431  subroutine sisvat_zsn
3433 !--------------------------------------------------------------------------+
3434 ! MAR SISVAT_zSn Wed 26-Jun-2013 MAR |
3435 ! SubRoutine SISVAT_zSn manages the Snow Pack vertical Discretization |
3436 ! |
3437 ! version 3.p.4.1 created by H. Gallee, Mon 4-Feb-2013 |
3438 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
3439 ! |
3440 !--------------------------------------------------------------------------+
3441 ! |
3442 ! PARAMETERS: kcolv: Total Number of columns = |
3443 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
3444 ! X Number of Mosaic Cell per grid box |
3445 ! |
3446 ! INPUT / NLaysv = New Snow Layer Switch |
3447 ! OUTPUT: isnoSV = total Nb of Ice/Snow Layers |
3448 ! ^^^^^^ ispiSV = 0,...,nsno: Uppermost Superimposed Ice Layer |
3449 ! iiceSV = total Nb of Ice Layers |
3450 ! istoSV = 0,...,5 : Snow History (see istdSV data) |
3451 ! |
3452 ! INPUT / TsisSV : Soil/Ice Temperatures (layers -nsoil,-nsoil+1, 0)|
3453 ! OUTPUT: & Snow Temperatures (layers 1,2,...,nsno) [K] |
3454 ! ^^^^^^ ro__SV : Soil/Snow Volumic Mass [kg/m3] |
3455 ! eta_SV : Soil/Snow Water Content [m3/m3] |
3456 ! dzsnSV : Snow Layer Thickness [m] |
3457 ! G1snSV : Dendricity (<0) or Sphericity (>0) of Snow Layer |
3458 ! G2snSV : Sphericity (>0) or Size of Snow Layer |
3459 ! agsnSV : Snow Age [day] |
3460 ! |
3461 ! METHOD: 1) Agregate the thinest Snow Layer |
3462 ! ^^^^^^ if a new Snow Layer has been precipitated (NLaysv = 1) |
3463 ! 2) Divide a too thick Snow Layer except |
3464 ! if the maximum Number of Layer is reached |
3465 ! in this case forces NLay_s = 1 |
3466 ! 3) Agregate the thinest Snow Layer |
3467 ! in order to divide a too thick Snow Layer |
3468 ! at next Time Step when NLay_s = 1 |
3469 ! |
3470 ! |
3471 ! Preprocessing Option: #SX: Search Ice/Snow Interface in Snow Model |
3472 ! ^^^^^^^^^^^^^^^^^^^^^ |
3473 ! |
3474 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
3475 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
3476 ! FILE | CONTENT |
3477 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
3478 ! # SISVAT_zSn.vz | #vz: OUTPUT/Verification: Snow Layers Agrega. |
3479 ! | unit 41, SubRoutine SISVAT_zSn **ONLY** |
3480 ! # SISVAT_GSn.vp | #vp: OUTPUT/Verification: Snow Properties |
3481 ! | unit 47, SubRoutines SISVAT_zSn, _GSn |
3482 ! # stdout | #s1: OUTPUT of Snow Layers Agregation |
3483 ! | unit 6, SubRoutine SISVAT_zSn, _zAg |
3484 !--------------------------------------------------------------------------+
3485 
3486 
3487 ! Global Variables
3488 ! =================
3489 
3490  use mod_real
3491  use mod_phy____dat
3492  use mod_phy____grd
3493  use mod_sisvat_grd
3494 
3495 
3496 
3497 ! General Variables
3498 ! =================
3499 
3500  use mod_sisvat_dat
3501  use mod_sisvat_dzs
3502  use mod_sisvat_kkl
3503  use mod_sisvat_loc
3504  use mod_sisvat_zsn
3505  use mod_sisvatlzsn
3506 
3507 
3508 
3509  IMPLICIT NONE
3510 
3511 
3512 
3513 ! Internal Variables
3514 ! ==================
3515 
3516  integer :: ikl,ikv ,isn ,i !
3517 
3518  integer :: LstLay ! 0 ====> isnoSV = 1
3519  integer :: isno_n ! Snow Normal.Profile
3520  integer :: iice_n ! Ice Normal.Profile
3521  integer :: iiceOK ! Ice Switch
3522  integer :: icemix = 0 ! 0 ====> Agregated Snow+Ice=Snow
3523  ! 1 Ice
3524  real(kind=real8) :: staggr ! stagger Switch
3525 
3526  real(kind=real8) :: OKthin ! Swich ON a new thinest layer
3527  real(kind=real8) :: dz_dif ! difference from ideal discret.
3528  real(kind=real8) :: thickL ! Thick Layer Indicator
3529 ! #SX real(kind=real8) :: OK_ICE ! Swich ON uppermost Ice Layer
3530 
3531  real(kind=real8) :: dzepsi = 0.0015 ! Min Single Snw Layer Thickness
3532  real(kind=real8) :: dzxmin = 0.0020 ! Min Acceptable Layer Thickness
3533  real(kind=real8) :: dz_min = 0.0050 ! Min Local Layer Thickness
3534  real(kind=real8) :: dz_max = 0.0300 ! Min Gener. Layer Thickness
3535 ! CAUTION: dz_max > dz_min*2 is required ! Otherwise re-agregation is
3536  ! activated after splitting
3537 
3538 
3539 
3540 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3541 ! !
3542 ! ALLOCATION !
3543 ! ========== !
3544 
3545  IF (it_run.EQ.1 .OR. flagdalloc) THEN !
3546 
3547  allocate ( nlay_s(kcolp,mwp) ) ! Split Snow Layer Switch
3548  allocate ( isagr1(kcolp,mwp) ) ! 1st Layer History
3549  allocate ( isagr2(kcolp,mwp) ) ! 2nd Layer History
3550  allocate ( isn1(kcolp,mwp) ) ! 1st layer to stagger
3551  allocate ( weagre(kcolp,mwp) ) ! Snow Water Equivalent Thickness
3552  allocate ( dzthin(kcolp,mwp) ) ! Thickness of the thinest layer
3553  allocate ( agrege(kcolp,mwp) ) ! 1. when Agregation constrained
3554  allocate ( dzagr1(kcolp,mwp) ) ! 1st Layer Thickness
3555  allocate ( dzagr2(kcolp,mwp) ) ! 2nd Layer Thickness
3556  allocate ( t_agr1(kcolp,mwp) ) ! 1st Layer Temperature
3557  allocate ( t_agr2(kcolp,mwp) ) ! 2nd Layer Temperature
3558  allocate ( roagr1(kcolp,mwp) ) ! 1st Layer Density
3559  allocate ( roagr2(kcolp,mwp) ) ! 2nd Layer Density
3560  allocate ( etagr1(kcolp,mwp) ) ! 1st Layer Water Content
3561  allocate ( etagr2(kcolp,mwp) ) ! 2nd Layer Water Content
3562  allocate ( g1agr1(kcolp,mwp) ) ! 1st Layer Dendricity/Spher.
3563  allocate ( g1agr2(kcolp,mwp) ) ! 2nd Layer Dendricity/Spher.
3564  allocate ( g2agr1(kcolp,mwp) ) ! 1st Layer Sphericity/Size
3565  allocate ( g2agr2(kcolp,mwp) ) ! 2nd Layer Sphericity/Size
3566  allocate ( agagr1(kcolp,mwp) ) ! 1st Layer Age
3567  allocate ( agagr2(kcolp,mwp) ) ! 2nd Layer Age
3568 
3569 ! #vz allocate ( dz_ref(nsnow) ) ! Snow Reference Discretization
3570 ! #vz allocate ( dzwdif(nsnow) ) !
3571 
3572  END IF !
3573 ! !
3574 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3575 
3576 
3577 
3578 ! OUTPUT/Verification: Snow Layers Agregation
3579 ! #vz IF (.NOT.as_opn) THEN
3580 ! #vz as_opn=.true.
3581 ! #vz open(unit=41,status='unknown',file='SISVAT_zSn.vz')
3582 ! #vz rewind 41
3583 ! #vz END IF
3584 
3585 ! OUTPUT/Verification: Snow Layers Agregation: Properties
3586 ! #vp IF (.NOT.VP_opn) THEN
3587 ! #vp VP_opn=.true.
3588 ! #vp open(unit=47,status='unknown',file='SISVAT_GSn.vp')
3589 ! #vp rewind 47
3590 ! #vp END IF
3591 
3592 
3593 ! Constrains Agregation of too thin Layers
3594 ! =================================================
3595 
3596 ! Search the thinest non-zero Layer
3597 ! ----------------------------------
3598 
3599  DO ikl=1,kcolp
3600  DO ikv=1,mwp
3601  dzthin(ikl,ikv) = 0. ! Arbitrary unrealistic
3602  END DO
3603  END DO ! Layer Thickness
3604  DO isn=1,nsnow
3605  DO ikl=1,kcolp
3606  DO ikv=1,mwp
3607  isno_n = isnosv(ikl,ikv)-isn+1 ! Snow Normal.Profile
3608  iice_n = iicesv(ikl,ikv)-isn ! Ice Normal.Profile
3609  iiceok = min(1,max(0,iice_n +1)) ! Ice Switch
3610 
3611 ! OUTPUT/Verification: Snow Layers Agregation
3612 ! #vz dz_ref(isn) = &!
3613 ! #vz& dz_min *((1-iiceOK)*isno_n*isno_n &! Theoretical Profile
3614 ! #vz& + iiceOK * 2**iice_n) &!
3615 ! #vz& /max(1,isnoSV(ikl,ikv)) !
3616 
3617  dz_dif = max(zer0, &! Actual Profile
3618  & dz_min &!
3619  & *((1-iiceok)*isno_n*isno_n &! Theoretical Profile
3620  & + iiceok *2. **iice_n) &!
3621  & - dzsnsv(ikl,ikv, isn) ) ! Actual Profile
3622 
3623 ! OUTPUT/Verification: Snow Layers Agregation
3624 ! #vz dzwdif(isn) = dz_dif !
3625 
3626  okthin = max(zer0, &!
3627  & sign(un_1, &!
3628  & dz_dif-dzthin(ikl,ikv))) &! 1.=> New thinest Lay.
3629  & * max(0, &! 1 => .le. isnoSV
3630  & min(1, &! 1 => isn is in the
3631  & isnosv(ikl,ikv)-isn +1 )) &! Snow Pack
3632  & * min(un_1, & !
3633 !
3634 ! 1st additional Condition to accept OKthin
3635  & max(zer0, &! combination
3636  & sign(un_1,g1snsv(ikl,ikv, isn ) &! G1 with same
3637  & *g1snsv(ikl,ikv,max(1,isn-1))))&! sign => OK
3638 !
3639 ! 2nd additional Condition to accept OKthin
3640  & + max(zer0, &! G1>0
3641  & sign(un_1,g1snsv(ikl,ikv, isn )))&! =>OK
3642 !
3643 ! 3rd additional Condition to accept OKthin
3644  & + max(zer0, &! dz too small
3645  & sign(un_1,dzxmin &! =>OK
3646  & -dzsnsv(ikl,ikv, isn ))))!
3647 
3648  i_thin(ikl,ikv) = (1. - okthin) * i_thin(ikl,ikv)&! Update thinest Lay.
3649  & + okthin * isn ! Index
3650  dzthin(ikl,ikv) = (1. - okthin) * dzthin(ikl,ikv)&!
3651  & + okthin * dz_dif !
3652  END DO
3653  END DO
3654  END DO
3655 
3656 ! OUTPUT/Verification: Snow Layers Agregation
3657 ! #vz write(41,4150) daHost ,n___SV( lwriSV(1,1)) &
3658 ! #vz& ,i_thin(1,1),dzsnSV(1,i_thin(1,1))
3659  4150 format(/,'-',a18,i5,' ',70('-'), &
3660  & /,' Thinest ',i3,':',f9.3)
3661 
3662  DO isn=1,nsnow
3663  DO ikl=1,kcolp
3664  DO ikv=1,mwp
3665  okthin = max(zer0, &!
3666  & sign(un_1, &!
3667  & dz_min &!
3668  & -dzsnsv(ikl,ikv,isn))) &!
3669  & * max(zer0, &! ON if dz > 0
3670  & sign(un_1, &!
3671  & dzsnsv(ikl,ikv,isn)-eps6)) &!
3672  & *min(1,max(0, &! Multiple Snow Lay.
3673  & min(1, &! Switch = 1
3674  & isnosv(ikl,ikv) &! if isno > iice + 1
3675  & -iicesv(ikl,ikv)-1)) &!
3676  !
3677  & +int(max(zer0, &!
3678  & sign(un_1, &!
3679  & dzepsi &! Minimum accepted for
3680  & -dzsnsv(ikl,ikv,isn)))) &! 1 Snow Layer over Ice
3681  & *int(max(zer0, &! ON if dz > 0
3682  & sign(un_1, &!
3683  & dzsnsv(ikl,ikv,isn)-eps6)))&!
3684  & *(1 -min(abs(isnosv(ikl,ikv) &! Switch = 1
3685  & -iicesv(ikl,ikv)-1),1)) &! if isno = iice + 1
3686  !
3687  & +max(0, &! Ice
3688  & min(1, &! Switch
3689  & iicesv(ikl,ikv)+1-isn))) &!
3690  & *min(un_1, &!
3691  & max(zer0, &! combination
3692  & sign(un_1,g1snsv(ikl,ikv, isn )&! G1>0 + G1<0
3693  & *g1snsv(ikl,ikv,max(1,isn-1)))) &! NO
3694  & + max(zer0, &!
3695  & sign(un_1,g1snsv(ikl,ikv, isn ))) &!
3696  & + max(zer0, &!
3697  & sign(un_1,dzxmin &!
3698  & -dzsnsv(ikl,ikv, isn )))) !
3699  i_thin(ikl,ikv) = (1. - okthin) * i_thin(ikl,ikv) &! Update thinest Lay.
3700  & + okthin * isn ! Index
3701  END DO
3702  END DO
3703  END DO
3704 
3705 ! OUTPUT/Verification: Snow Layers Agregation
3706 ! #vz write(41,4151) i_thin(1,1),dzsnSV(1,i_thin(1,1)) &
3707 ! #vz& ,isnoSV(1,1),dzsnSV(1,isnoSV(1,1))
3708  4151 format(' Thinest ',i3,':',f9.3,' Max =',i3,f12.3)
3709 
3710 ! OUTPUT/Verification: Snow Layers Agregation: Properties
3711 ! #vp write(47,470)(G1snSV(1,isn),isn=1,isnoSV(1,1))
3712  470 format('Before _zCr1: G1 = ',10f8.1,(/,19x,10f8.1))
3713 ! #vp write(47,472)(G2snSV(1,isn),isn=1,isnoSV(1,1))
3714  472 format(' G2 = ',10f8.1,(/,19x,10f8.1))
3715 
3716 
3717 ! Index of the contiguous Layer to agregate
3718 ! -----------------------------------------
3719 
3720 ! **********
3721  call sisvat_zcr
3722 ! **********
3723 
3724 
3725 ! Assign the 2 Layers to agregate
3726 ! -------------------------------
3727 
3728  DO ikl=1,kcolp
3729  DO ikv=1,mwp
3730  isn = i_thin(ikl,ikv)
3731  isagr1(ikl,ikv) = istosv(ikl,ikv,isn)
3732  isagr2(ikl,ikv) = istosv(ikl,ikv,isn+lindsv(ikl,ikv))
3733  dzagr1(ikl,ikv) = dzsnsv(ikl,ikv,isn)
3734  dzagr2(ikl,ikv) = dzsnsv(ikl,ikv,isn+lindsv(ikl,ikv))
3735  t_agr1(ikl,ikv) = tsissv(ikl,ikv,isn)
3736  t_agr2(ikl,ikv) = tsissv(ikl,ikv,isn+lindsv(ikl,ikv))
3737  roagr1(ikl,ikv) = ro__sv(ikl,ikv,isn)
3738  roagr2(ikl,ikv) = ro__sv(ikl,ikv,isn+lindsv(ikl,ikv))
3739  etagr1(ikl,ikv) = eta_sv(ikl,ikv,isn)
3740  etagr2(ikl,ikv) = eta_sv(ikl,ikv,isn+lindsv(ikl,ikv))
3741  g1agr1(ikl,ikv) = g1snsv(ikl,ikv,isn)
3742  g1agr2(ikl,ikv) = g1snsv(ikl,ikv,isn+lindsv(ikl,ikv))
3743  g2agr1(ikl,ikv) = g2snsv(ikl,ikv,isn)
3744  g2agr2(ikl,ikv) = g2snsv(ikl,ikv,isn+lindsv(ikl,ikv))
3745  agagr1(ikl,ikv) = agsnsv(ikl,ikv,isn)
3746  agagr2(ikl,ikv) = agsnsv(ikl,ikv,isn+lindsv(ikl,ikv))
3747  lstlay = min(1,max( 0,isnosv(ikl,ikv) -1)) ! 0 if single Layer
3748  isnosv(ikl,ikv) = isnosv(ikl,ikv) &! decrement isnoSV
3749  & -(1-lstlay)* max(zer0, &! if downmost Layer
3750  & sign(un_1,eps_21 &! < 1.e-21 m
3751  & -dzsnsv(ikl,ikv,1))) !
3752  isnosv(ikl,ikv) = max( 0, isnosv(ikl,ikv) ) !
3753  agrege(ikl,ikv) = max(zer0, &!
3754  & sign(un_1,dz_min &! No Agregation
3755  & -dzagr1(ikl,ikv) )) &! if too thick Layer
3756  & *lstlay &! if a single Layer
3757  & * min( max(0 ,isnosv(ikl,ikv)+1&! if Agregation
3758  & -i_thin(ikl,ikv) &! with a Layer
3759  & -lindsv(ikl,ikv) ),1) ! above the Pack
3760 
3761  weagre(ikl,ikv) = 0.
3762  END DO
3763  END DO
3764 
3765  DO isn=1,nsnow
3766  DO ikl=1,kcolp
3767  DO ikv=1,mwp
3768  weagre(ikl,ikv) = weagre(ikl,ikv) + ro__sv(ikl,ikv,isn)*dzsnsv(ikl,ikv,isn) &
3769  & *min(1,max(0,i_thin(ikl,ikv)+1-isn))
3770  END DO
3771  END DO
3772  END DO
3773 
3774 ! OUTPUT/Verification: Snow Layers Agregation
3775 ! #vz write(41,410)
3776  410 format(/,' Agregation of too THIN Layers')
3777 ! #vz write(41,411) (100.*dz_ref( isn),isn=1,nsnow)
3778 ! #vz write(41,412) (100.*dzwdif( isn),isn=1,nsnow)
3779 ! #vz write(41,413) (100.*dzsnSV(1,isn),isn=1,nsnow)
3780 ! #vz write(41,414) ( isn ,isn=1,nsnow)
3781  411 format(' dz_ref [cm]:',10f8.2 ,/,(' ',10f8.2) )
3782  412 format(' dz_dif [cm]:',10f8.2 ,/,(' ',10f8.2) )
3783  413 format(' dzsnSV [cm]:',10f8.2 ,/,(' ',10f8.2) )
3784  414 format(' ',10(i5,3x),/,(' ',10(i5,3x)))
3785 ! #vz write(41,4111) isnoSV(1 )
3786 ! #vz write(41,4112) i_thin(1 )
3787 ! #vz write(41,4113) LIndsv(1 )
3788 ! #vz write(41,4114) Agrege(1 )
3789 ! #vz write(41,4115) 1.e2*dzagr1(1 )
3790 ! #vz write(41,4116) 1.e2*dzagr2(1 )
3791  4111 format(' isnoSV :', i8 )
3792  4112 format(' i_thin :', i8 )
3793  4113 format(' LIndsv :', i8 )
3794  4114 format(' Agrege :', f8.2)
3795  4115 format(' dzagr1 :', f8.2)
3796  4116 format(' dzagr2 :', f8.2)
3797 
3798 ! OUTPUT/Verification: Snow Layers Agregation: Properties
3799 ! #vp write(47,471)(G1snSV(1,isn),isn=1,isnoSV(1,1))
3800  471 format('Before _zAg1: G1 = ',10f8.1,(/,19x,10f8.1))
3801 ! #vp write(47,472)(G2snSV(1,isn),isn=1,isnoSV(1,1))
3802 
3803 
3804 ! Agregates
3805 ! ---------
3806 
3807  DO ikl=1,kcolp
3808  DO ikv=1,mwp
3809 
3810 ! **********
3811  call sisvat_zag &
3812  & (ikl,ikv,isagr1(ikl,ikv),isagr2(ikl,ikv),weagre(ikl,ikv)&
3813  & ,dzagr1(ikl,ikv),dzagr2(ikl,ikv),t_agr1(ikl,ikv),t_agr2(ikl,ikv)&
3814  & ,roagr1(ikl,ikv),roagr2(ikl,ikv),etagr1(ikl,ikv),etagr2(ikl,ikv)&
3815  & ,g1agr1(ikl,ikv),g1agr2(ikl,ikv),g2agr1(ikl,ikv),g2agr2(ikl,ikv)&
3816  & ,agagr1(ikl,ikv),agagr2(ikl,ikv),agrege(ikl,ikv)&
3817  & )
3818 ! **********
3819 
3820  END DO
3821  END DO
3822 
3823 
3824 ! Rearranges the Layers
3825 ! ---------------------
3826 
3827 ! New (agregated) Snow layer
3828 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
3829  DO ikl=1,kcolp
3830  DO ikv=1,mwp
3831  isn = i_thin(ikl,ikv)
3832  isn = min(isn,isn+lindsv(ikl,ikv))
3833  isnosv(ikl,ikv) = isnosv(ikl,ikv) -agrege(ikl,ikv)
3834  iicesv(ikl,ikv) = iicesv(ikl,ikv) &
3835  & -max(0,sign(1,iicesv(ikl,ikv) -isn +icemix)) &
3836  & *agrege(ikl,ikv) &
3837  & *max(0,sign(1,iicesv(ikl,ikv) -1 ))
3838  istosv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*istosv(ikl,ikv,isn) &
3839  & + agrege(ikl,ikv) *isagr1(ikl,ikv)
3840  dzsnsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*dzsnsv(ikl,ikv,isn) &
3841  & + agrege(ikl,ikv) *dzagr1(ikl,ikv)
3842  tsissv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*tsissv(ikl,ikv,isn) &
3843  & + agrege(ikl,ikv) *t_agr1(ikl,ikv)
3844  ro__sv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*ro__sv(ikl,ikv,isn) &
3845  & + agrege(ikl,ikv) *roagr1(ikl,ikv)
3846  eta_sv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*eta_sv(ikl,ikv,isn) &
3847  & + agrege(ikl,ikv) *etagr1(ikl,ikv)
3848  g1snsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*g1snsv(ikl,ikv,isn) &
3849  & + agrege(ikl,ikv) *g1agr1(ikl,ikv)
3850  g2snsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*g2snsv(ikl,ikv,isn) &
3851  & + agrege(ikl,ikv) *g2agr1(ikl,ikv)
3852  agsnsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*agsnsv(ikl,ikv,isn) &
3853  & + agrege(ikl,ikv) *agagr1(ikl,ikv)
3854  END DO
3855  END DO
3856 
3857 ! Above
3858 ! ^^^^^
3859  DO ikl=1,kcolp
3860  DO ikv=1,mwp
3861  isn1(ikl,ikv)=max(i_thin(ikl,ikv),i_thin(ikl,ikv)+lindsv(ikl,ikv))
3862  END DO
3863  END DO
3864  DO i= 1,nsnow-1
3865  DO ikl=1,kcolp
3866  DO ikv=1,mwp
3867  staggr = min(1,max(0,i +1 -isn1(ikl,ikv) ))
3868  istosv(ikl,ikv,i) = (1.-staggr )*istosv(ikl,ikv,i ) &
3869  & + staggr*((1.-agrege(ikl,ikv))*istosv(ikl,ikv,i ) &
3870  & + agrege(ikl,ikv) *istosv(ikl,ikv,i+1))
3871  dzsnsv(ikl,ikv,i) = (1.-staggr )*dzsnsv(ikl,ikv,i ) &
3872  & + staggr*((1.-agrege(ikl,ikv))*dzsnsv(ikl,ikv,i ) &
3873  & + agrege(ikl,ikv) *dzsnsv(ikl,ikv,i+1))
3874  tsissv(ikl,ikv,i) = (1.-staggr )*tsissv(ikl,ikv,i ) &
3875  & + staggr*((1.-agrege(ikl,ikv))*tsissv(ikl,ikv,i ) &
3876  & + agrege(ikl,ikv) *tsissv(ikl,ikv,i+1))
3877  ro__sv(ikl,ikv,i) = (1.-staggr )*ro__sv(ikl,ikv,i ) &
3878  & + staggr*((1.-agrege(ikl,ikv))*ro__sv(ikl,ikv,i ) &
3879  & + agrege(ikl,ikv) *ro__sv(ikl,ikv,i+1))
3880  eta_sv(ikl,ikv,i) = (1.-staggr )*eta_sv(ikl,ikv,i ) &
3881  & + staggr*((1.-agrege(ikl,ikv))*eta_sv(ikl,ikv,i ) &
3882  & + agrege(ikl,ikv) *eta_sv(ikl,ikv,i+1))
3883  g1snsv(ikl,ikv,i) = (1.-staggr )*g1snsv(ikl,ikv,i ) &
3884  & + staggr*((1.-agrege(ikl,ikv))*g1snsv(ikl,ikv,i ) &
3885  & + agrege(ikl,ikv) *g1snsv(ikl,ikv,i+1))
3886  g2snsv(ikl,ikv,i) = (1.-staggr )*g2snsv(ikl,ikv,i ) &
3887  & + staggr*((1.-agrege(ikl,ikv))*g2snsv(ikl,ikv,i ) &
3888  & + agrege(ikl,ikv) *g2snsv(ikl,ikv,i+1))
3889  agsnsv(ikl,ikv,i) = (1.-staggr )*agsnsv(ikl,ikv,i ) &
3890  & + staggr*((1.-agrege(ikl,ikv))*agsnsv(ikl,ikv,i ) &
3891  & + agrege(ikl,ikv) *agsnsv(ikl,ikv,i+1))
3892  END DO
3893  END DO
3894  END DO
3895 
3896  DO ikl=1,kcolp
3897  DO ikv=1,mwp
3898  isn = min(isnosv(ikl,ikv) +1,nsnow)
3899  istosv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*istosv(ikl,ikv,isn)
3900  dzsnsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*dzsnsv(ikl,ikv,isn)
3901  tsissv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*tsissv(ikl,ikv,isn)
3902  ro__sv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*ro__sv(ikl,ikv,isn)
3903  eta_sv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*eta_sv(ikl,ikv,isn)
3904  g1snsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*g1snsv(ikl,ikv,isn)
3905  g2snsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*g2snsv(ikl,ikv,isn)
3906  agsnsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*agsnsv(ikl,ikv,isn)
3907  END DO
3908  END DO
3909 
3910 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
3911 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3912 ! #s1 IF (ii__AP(ikl).EQ.iwr_SV.AND.jj__AP(ikl).EQ.jwr_SV .AND. &
3913 ! #s1& ikv .EQ.nwr_SV ) THEN
3914 ! #s1 write(6,5991) i_thin(ikl,ikv)
3915  5991 format(/,'First Agregation / Layer',i3, &
3916  & /,' i',11x,'T',9x,'rho',10x,'dz',11x,'H')
3917 ! #s1 write(6,5995) (isn,TsisSV(ikl,ikv,isn),ro__SV(ikl,ikv,isn) &
3918 ! #s1& ,dzsnSV(ikl,ikv,isn),istoSV(ikl,ikv,isn), &
3919 ! #s1& isn=isnoSV(ikl,ikv),1,-1)
3920  5995 format(i3,3f12.3,i12)
3921 ! #s1 END IF
3922 
3923 
3924 ! Constrains Splitting of too thick Layers
3925 ! =================================================
3926 
3927 
3928 ! Search the thickest non-zero Layer
3929 ! ----------------------------------
3930 
3931  DO ikl=1,kcolp
3932  DO ikv=1,mwp
3933  dzthin(ikl,ikv) = 0. ! Arbitrary unrealistic
3934  END DO
3935  END DO ! Layer Thickness
3936  DO isn=1,nsnow
3937  DO ikl=1,kcolp
3938  DO ikv=1,mwp
3939  isno_n = isnosv(ikl,ikv)-isn+1 ! Snow Normal.Profile
3940  iice_n = iicesv(ikl,ikv)-isn ! Ice Normal.Profile
3941  iiceok = min(1,max(0,iice_n +1)) ! Ice Switch
3942  dz_dif =( dzsnsv(ikl,ikv,isn) &! Actual Profile
3943  & - dz_max *((1-iiceok)*isno_n*isno_n &! Theoretical Profile
3944  & + iiceok *2. **iice_n) ) &!
3945  & /max(dzsnsv(ikl,ikv,isn),eps6) !
3946  okthin = max(zer0, &!
3947  & sign(un_1, &!
3948  & dz_dif-dzthin(ikl,ikv))) &! 1.=>New thickest Lay.
3949  & * max(0, &! 1 =>.le. isnoSV
3950  & min(1, &!
3951  & isnosv(ikl,ikv)-isn +1 )) !
3952  i_thin(ikl,ikv) = (1. - okthin) * i_thin(ikl,ikv)&! Update thickest Lay.
3953  & + okthin * isn ! Index
3954  dzthin(ikl,ikv) = (1. - okthin) * dzthin(ikl,ikv)&!
3955  & + okthin * dz_dif !
3956  END DO
3957  END DO
3958  END DO
3959 
3960  DO ikl=1,kcolp
3961  DO ikv=1,mwp
3962  thickl = max(zer0, &! 1. => a too thick
3963  & sign(un_1,dzthin(ikl,ikv) &! Layer exists
3964  & -eps6 )) &!
3965  & * max(0,1-max(0 , isnosv(ikl,ikv) &! No spliting allowed
3966  & -nsnow+3 )) ! if isno > nsnow - 3
3967  agrege(ikl,ikv) = thickl &! 1. => effective split
3968  & * max(0,1-max(0 , nlaysv(ikl,ikv) &!
3969  & +isnosv(ikl,ikv) &!
3970  & -nsnow+1 )) !
3971  nlay_s(ikl,ikv) = thickl &! Agregation
3972  & * max(0,1-max(0 , nlaysv(ikl,ikv) &! to allow Splitting
3973  & +isnosv(ikl,ikv) &! at next Time Step
3974  & -nsnow )) &!
3975  & -agrege(ikl,ikv) !
3976  nlay_s(ikl,ikv) = max(0 , nlay_s(ikl,ikv)) ! Agregation effective
3977  END DO
3978  END DO
3979 
3980 ! OUTPUT/Verification: Snow Layers Agregation
3981 ! #vz write(41,4152) i_thin(1,1),dzthin(1,1),ThickL
3982  4152 format(/,' Thickest',i3,':',f9.3,' Split =',f4.0)
3983 
3984 
3985 ! Rearranges the Layers
3986 ! ---------------------
3987 
3988  DO isn=nsnow,2,-1
3989  DO ikl=1,kcolp
3990  DO ikv=1,mwp
3991  IF (agrege(ikl,ikv).gt.0..AND.i_thin(ikl,ikv).lt.isnosv(ikl,ikv)) THEN
3992  staggr = min(1,max(0,isn-i_thin(ikl,ikv) -1)) &
3993  & * min(1,max(0, isnosv(ikl,ikv)-isn+2))
3994  istosv(ikl,ikv,isn) = staggr * istosv(ikl,ikv ,isn-1)&
3995  & + (1. - staggr) * istosv(ikl,ikv ,isn )
3996  dzsnsv(ikl,ikv,isn) = staggr * dzsnsv(ikl,ikv ,isn-1)&
3997  & + (1. - staggr) * dzsnsv(ikl,ikv ,isn )
3998  tsissv(ikl,ikv,isn) = staggr * tsissv(ikl,ikv ,isn-1)&
3999  & + (1. - staggr) * tsissv(ikl,ikv ,isn )
4000  ro__sv(ikl,ikv,isn) = staggr * ro__sv(ikl,ikv ,isn-1)&
4001  & + (1. - staggr) * ro__sv(ikl,ikv ,isn )
4002  eta_sv(ikl,ikv,isn) = staggr * eta_sv(ikl,ikv ,isn-1)&
4003  & + (1. - staggr) * eta_sv(ikl,ikv ,isn )
4004  g1snsv(ikl,ikv,isn) = staggr * g1snsv(ikl,ikv ,isn-1)&
4005  & + (1. - staggr) * g1snsv(ikl,ikv ,isn )
4006  g2snsv(ikl,ikv,isn) = staggr * g2snsv(ikl,ikv ,isn-1)&
4007  & + (1. - staggr) * g2snsv(ikl,ikv ,isn )
4008  agsnsv(ikl,ikv,isn) = staggr * agsnsv(ikl,ikv ,isn-1)&
4009  & + (1. - staggr) * agsnsv(ikl,ikv ,isn )
4010  END IF
4011  END DO
4012  END DO
4013  END DO
4014 
4015  DO ikl=1,kcolp
4016  DO ikv=1,mwp
4017  isn = i_thin(ikl,ikv)
4018  dzsnsv(ikl,ikv,isn) = 0.5*agrege(ikl,ikv) *dzsnsv(ikl,ikv,isn) &
4019  & + (1.-agrege(ikl,ikv))*dzsnsv(ikl,ikv,isn)
4020 
4021  isn = min(i_thin(ikl,ikv) +1,nsnow)
4022  istosv(ikl,ikv,isn) = agrege(ikl,ikv) *istosv(ikl,ikv,isn-1) &
4023  & + (1.-agrege(ikl,ikv))*istosv(ikl,ikv,isn)
4024  dzsnsv(ikl,ikv,isn) = agrege(ikl,ikv) *dzsnsv(ikl,ikv,isn-1) &
4025  & + (1.-agrege(ikl,ikv))*dzsnsv(ikl,ikv,isn)
4026  tsissv(ikl,ikv,isn) = agrege(ikl,ikv) *tsissv(ikl,ikv,isn-1) &
4027  & + (1.-agrege(ikl,ikv))*tsissv(ikl,ikv,isn)
4028  ro__sv(ikl,ikv,isn) = agrege(ikl,ikv) *ro__sv(ikl,ikv,isn-1) &
4029  & + (1.-agrege(ikl,ikv))*ro__sv(ikl,ikv,isn)
4030  eta_sv(ikl,ikv,isn) = agrege(ikl,ikv) *eta_sv(ikl,ikv,isn-1) &
4031  & + (1.-agrege(ikl,ikv))*eta_sv(ikl,ikv,isn)
4032  g1snsv(ikl,ikv,isn) = agrege(ikl,ikv) *g1snsv(ikl,ikv,isn-1) &
4033  & + (1.-agrege(ikl,ikv))*g1snsv(ikl,ikv,isn)
4034  g2snsv(ikl,ikv,isn) = agrege(ikl,ikv) *g2snsv(ikl,ikv,isn-1) &
4035  & + (1.-agrege(ikl,ikv))*g2snsv(ikl,ikv,isn)
4036  agsnsv(ikl,ikv,isn) = agrege(ikl,ikv) *agsnsv(ikl,ikv,isn-1) &
4037  & + (1.-agrege(ikl,ikv))*agsnsv(ikl,ikv,isn)
4038  isnosv(ikl,ikv) = agrege(ikl,ikv) +isnosv(ikl,ikv)
4039  iicesv(ikl,ikv) = iicesv(ikl,ikv) &
4040  & + agrege(ikl,ikv) *max(0,sign(1,iicesv(ikl,ikv) &
4041  & -isn +icemix))&
4042  & *max(0,sign(1,iicesv(ikl,ikv) &
4043  & -1 ))
4044  END DO
4045  END DO
4046 
4047 
4048 ! Constrains Agregation in case of too much Layers
4049 ! =================================================
4050 
4051 ! Search the thinest non-zero Layer
4052 ! -----------------------------------
4053 
4054 ! OUTPUT/Verification: Snow Thinest Layer
4055 ! #sd write( 6,*) ' '
4056 ! #sd write( 6,*) 'Agregation 2'
4057 ! #sd write( 6,6000) NLaysv(1)
4058  6000 format(i3,6x, &
4059  & 'dzsnSV dz_min dz_dif ', &
4060  & 'OKthin dzthin i_thin')
4061 
4062  DO ikl=1,kcolp
4063  DO ikv=1,mwp
4064  dzthin(ikl,ikv) = 0. ! Arbitrary unrealistic
4065  END DO
4066  END DO ! Layer Thickness
4067  DO isn=1,nsnow
4068  DO ikl=1,kcolp
4069  DO ikv=1,mwp
4070  isno_n = isnosv(ikl,ikv)-isn+1 ! Snow Normal.Profile
4071  iice_n = iicesv(ikl,ikv)-isn ! Ice Normal.Profile
4072  iiceok = min(1,max(0,iice_n +1)) ! Ice Switch
4073 
4074 ! OUTPUT/Verification: Snow Layers Agregation
4075 ! #vz dz_ref(isn) = &!
4076 ! #vz& dz_min *((1-iiceOK)*isno_n*isno_n &! Theoretical Profile
4077 ! #vz& + iiceOK * 2**iice_n) &!
4078 ! #vz& /max(1,isnoSV(ikl,ikv)) !
4079 
4080  dz_dif = dz_min &! Actual Profile
4081  & - dzsnsv(ikl,ikv ,isn) &!
4082  & /max(eps6,((1-iiceok)*isno_n*isno_n &! Theoretical Profile
4083  & + iiceok *2. **iice_n)) !
4084 
4085 ! OUTPUT/Verification: Snow Layers Agregation
4086 ! #vz dzwdif(isn) = dz_dif !
4087 
4088  okthin = max(zer0, &!
4089  & sign(un_1, &!
4090  & dz_dif - dzthin(ikl,ikv)))&! 1.=> New thinest Lay.
4091  & * max(0, &! 1 => .le. isnoSV
4092  & min(1, &!
4093  & isnosv(ikl,ikv)-isn +1 )) !
4094  i_thin(ikl,ikv) = (1. - okthin) * i_thin(ikl,ikv) &! Update thinest Lay.
4095  & + okthin * isn ! Index
4096  dzthin(ikl,ikv) = (1. - okthin) * dzthin(ikl,ikv) &!
4097  & + okthin * dz_dif !
4098 
4099 ! OUTPUT/Verification: Snow Thinest Layer
4100 ! #sd IF(isn.LE.isnoSV(1,1).AND.ikl.EQ.1.AND.ikv.EQ.1) &
4101 ! #sd& write( 6,6001) isn,dzsnSV(ikl,ikv,isn),dz_min*isno_n*isno_n,dz_dif &
4102 ! #sd& ,OKthin,dzthin(ikl,ikv), i_thin(ikl,ikv)
4103  6001 format(i3,5f12.6,i9)
4104 
4105  END DO
4106  END DO
4107  END DO
4108 
4109 ! OUTPUT/Verification: Snow Thinest Layer
4110 ! #sd write( 6,*) ' '
4111 
4112 ! OUTPUT/Verification: Snow Layers Agregation
4113 ! #vz write(41,4153) i_thin(1,1),dzsnSV(1,i_thin(1,1))
4114  4153 format(/,' Thinest ',i3,':',f9.3)
4115 ! #vz write(41,4151) i_thin(1,1),dzsnSV(1,i_thin(1,1)) &
4116 ! #vz& ,isnoSV(1,1),dzsnSV(1,isnoSV(1,1))
4117 
4118 ! OUTPUT/Verification: Snow Layers Agregation: Properties
4119 ! #vp write(47,473)(G1snSV(1,isn),isn=1,isnoSV(1,1))
4120  473 format('Before _zCr2: G1 = ',10f8.1,(/,19x,10f8.1))
4121 ! #vp write(47,472)(G2snSV(1,isn),isn=1,isnoSV(1,1))
4122 
4123 
4124 ! Index of the contiguous Layer to agregate
4125 ! -----------------------------------------
4126 
4127 ! **********
4128  call sisvat_zcr
4129 ! **********
4130 
4131 
4132 ! Assign the 2 Layers to agregate
4133 ! -------------------------------
4134 
4135  DO ikl=1,kcolp
4136  DO ikv=1,mwp
4137  isn = i_thin(ikl,ikv)
4138  isagr1(ikl,ikv) = istosv(ikl,ikv,isn)
4139  isagr2(ikl,ikv) = istosv(ikl,ikv,isn+lindsv(ikl,ikv))
4140  dzagr1(ikl,ikv) = dzsnsv(ikl,ikv,isn)
4141  dzagr2(ikl,ikv) = dzsnsv(ikl,ikv,isn+lindsv(ikl,ikv))
4142  t_agr1(ikl,ikv) = tsissv(ikl,ikv,isn)
4143  t_agr2(ikl,ikv) = tsissv(ikl,ikv,isn+lindsv(ikl,ikv))
4144  roagr1(ikl,ikv) = ro__sv(ikl,ikv,isn)
4145  roagr2(ikl,ikv) = ro__sv(ikl,ikv,isn+lindsv(ikl,ikv))
4146  etagr1(ikl,ikv) = eta_sv(ikl,ikv,isn)
4147  etagr2(ikl,ikv) = eta_sv(ikl,ikv,isn+lindsv(ikl,ikv))
4148  g1agr1(ikl,ikv) = g1snsv(ikl,ikv,isn)
4149  g1agr2(ikl,ikv) = g1snsv(ikl,ikv,isn+lindsv(ikl,ikv))
4150  g2agr1(ikl,ikv) = g2snsv(ikl,ikv,isn)
4151  g2agr2(ikl,ikv) = g2snsv(ikl,ikv,isn+lindsv(ikl,ikv))
4152  agagr1(ikl,ikv) = agsnsv(ikl,ikv,isn)
4153  agagr2(ikl,ikv) = agsnsv(ikl,ikv,isn+lindsv(ikl,ikv))
4154  lstlay = min(1,max( 0, isnosv(ikl,ikv)-1 ))
4155  agrege(ikl,ikv) = min(1, &
4156  & max(0, &
4157  & nlaysv(ikl,ikv) +isnosv(ikl,ikv)-nsnow &
4158  & +nlay_s(ikl,ikv) ) &
4159  & *lstlay )
4160  isnosv(ikl,ikv) = isnosv(ikl,ikv) &
4161  & -(1-lstlay)*max(zer0, &
4162  & sign(un_1, eps_21 &
4163  & -dzsnsv(ikl,ikv,1) ))
4164  isnosv(ikl,ikv) =max( 0, isnosv(ikl,ikv) )
4165 
4166  weagre(ikl,ikv) = 0.
4167  END DO
4168  END DO
4169 
4170  DO isn=1,nsnow
4171  DO ikl=1,kcolp
4172  DO ikv=1,mwp
4173  weagre(ikl,ikv) = weagre(ikl,ikv) + ro__sv(ikl,ikv,isn)*dzsnsv(ikl,ikv,isn) &
4174  & *min(1,max(0,i_thin(ikl,ikv)+1-isn))
4175  END DO
4176  END DO
4177  END DO
4178 
4179 ! OUTPUT/Verification: Snow Layers Agregation
4180 ! #vz write(41,4120)
4181  4120 format(' Agregation of too MUCH Layers')
4182 ! #vz write(41,411) (100.*dz_ref( isn),isn=1,nsnow)
4183 ! #vz write(41,412) (100.*dzwdif( isn),isn=1,nsnow)
4184 ! #vz write(41,413) (100.*dzsnSV(1,isn),isn=1,nsnow)
4185 ! #vz write(41,414) ( isn ,isn=1,nsnow)
4186 ! #vz write(41,4111) isnoSV(1 )
4187 ! #vz write(41,4112) i_thin(1 )
4188 ! #vz write(41,4113) LIndsv(1 )
4189 ! #vz write(41,4114) Agrege(1 )
4190 
4191 ! OUTPUT/Verification: Snow Layers Agregation: Properties
4192 ! #vp write(47,474)(G1snSV(1,isn),isn=1,isnoSV(1,1))
4193  474 format('Before _zAg2: G1 = ',10f8.1,(/,19x,10f8.1))
4194 ! #vp write(47,472)(G2snSV(1,isn),isn=1,isnoSV(1,1))
4195 
4196 
4197 ! Agregates
4198 ! ---------
4199 
4200  DO ikl=1,kcolp
4201  DO ikv=1,mwp
4202 
4203 ! **********
4204  call sisvat_zag &
4205  & (ikl,ikv,isagr1(ikl,ikv),isagr2(ikl,ikv),weagre(ikl,ikv)&
4206  & ,dzagr1(ikl,ikv),dzagr2(ikl,ikv),t_agr1(ikl,ikv),t_agr2(ikl,ikv)&
4207  & ,roagr1(ikl,ikv),roagr2(ikl,ikv),etagr1(ikl,ikv),etagr2(ikl,ikv)&
4208  & ,g1agr1(ikl,ikv),g1agr2(ikl,ikv),g2agr1(ikl,ikv),g2agr2(ikl,ikv)&
4209  & ,agagr1(ikl,ikv),agagr2(ikl,ikv),agrege(ikl,ikv)&
4210  & )
4211 ! **********
4212 
4213  END DO
4214  END DO
4215 
4216 
4217 ! Rearranges the Layers
4218 ! ---------------------
4219 
4220 ! New (agregated) Snow layer
4221 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
4222  DO ikl=1,kcolp
4223  DO ikv=1,mwp
4224  isn = i_thin(ikl,ikv)
4225  isn = min(isn,isn+lindsv(ikl,ikv))
4226  isnosv(ikl,ikv) = isnosv(ikl,ikv) -agrege(ikl,ikv)
4227  iicesv(ikl,ikv) = iicesv(ikl,ikv) &
4228  & -max(0,sign(1,iicesv(ikl,ikv) -isn +icemix)) &
4229  & *agrege(ikl,ikv) &
4230  & *max(0,sign(1,iicesv(ikl,ikv) -1 ))
4231  istosv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*istosv(ikl,ikv,isn) &
4232  & + agrege(ikl,ikv) *isagr1(ikl,ikv)
4233  dzsnsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*dzsnsv(ikl,ikv,isn) &
4234  & + agrege(ikl,ikv) *dzagr1(ikl,ikv)
4235  tsissv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*tsissv(ikl,ikv,isn) &
4236  & + agrege(ikl,ikv) *t_agr1(ikl,ikv)
4237  ro__sv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*ro__sv(ikl,ikv,isn) &
4238  & + agrege(ikl,ikv) *roagr1(ikl,ikv)
4239  eta_sv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*eta_sv(ikl,ikv,isn) &
4240  & + agrege(ikl,ikv) *etagr1(ikl,ikv)
4241  g1snsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*g1snsv(ikl,ikv,isn) &
4242  & + agrege(ikl,ikv) *g1agr1(ikl,ikv)
4243  g2snsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*g2snsv(ikl,ikv,isn) &
4244  & + agrege(ikl,ikv) *g2agr1(ikl,ikv)
4245  agsnsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*agsnsv(ikl,ikv,isn) &
4246  & + agrege(ikl,ikv) *agagr1(ikl,ikv)
4247  END DO
4248  END DO
4249 
4250 ! Above
4251 ! ^^^^^
4252  DO ikl=1,kcolp
4253  DO ikv=1,mwp
4254  isn1(ikl,ikv)=max(i_thin(ikl,ikv),i_thin(ikl,ikv)+lindsv(ikl,ikv))
4255  END DO
4256  END DO
4257  DO i= 1,nsnow-1
4258  DO ikl=1,kcolp
4259  DO ikv=1,mwp
4260  staggr = min(1,max(0,i +1 -isn1(ikl,ikv) ))
4261  istosv(ikl,ikv,i) = (1.-staggr )*istosv(ikl,ikv,i ) &
4262  & + staggr*((1.-agrege(ikl,ikv))*istosv(ikl,ikv,i ) &
4263  & + agrege(ikl,ikv) *istosv(ikl,ikv,i+1))
4264  dzsnsv(ikl,ikv,i) = (1.-staggr )*dzsnsv(ikl,ikv,i ) &
4265  & + staggr*((1.-agrege(ikl,ikv))*dzsnsv(ikl,ikv,i ) &
4266  & + agrege(ikl,ikv) *dzsnsv(ikl,ikv,i+1))
4267  tsissv(ikl,ikv,i) = (1.-staggr )*tsissv(ikl,ikv,i ) &
4268  & + staggr*((1.-agrege(ikl,ikv))*tsissv(ikl,ikv,i ) &
4269  & + agrege(ikl,ikv) *tsissv(ikl,ikv,i+1))
4270  ro__sv(ikl,ikv,i) = (1.-staggr )*ro__sv(ikl,ikv,i ) &
4271  & + staggr*((1.-agrege(ikl,ikv))*ro__sv(ikl,ikv,i ) &
4272  & + agrege(ikl,ikv) *ro__sv(ikl,ikv,i+1))
4273  eta_sv(ikl,ikv,i) = (1.-staggr )*eta_sv(ikl,ikv,i ) &
4274  & + staggr*((1.-agrege(ikl,ikv))*eta_sv(ikl,ikv,i ) &
4275  & + agrege(ikl,ikv) *eta_sv(ikl,ikv,i+1))
4276  g1snsv(ikl,ikv,i) = (1.-staggr )*g1snsv(ikl,ikv,i ) &
4277  & + staggr*((1.-agrege(ikl,ikv))*g1snsv(ikl,ikv,i ) &
4278  & + agrege(ikl,ikv) *g1snsv(ikl,ikv,i+1))
4279  g2snsv(ikl,ikv,i) = (1.-staggr )*g2snsv(ikl,ikv,i ) &
4280  & + staggr*((1.-agrege(ikl,ikv))*g2snsv(ikl,ikv,i ) &
4281  & + agrege(ikl,ikv) *g2snsv(ikl,ikv,i+1))
4282  agsnsv(ikl,ikv,i) = (1.-staggr )*agsnsv(ikl,ikv,i ) &
4283  & + staggr*((1.-agrege(ikl,ikv))*agsnsv(ikl,ikv,i ) &
4284  & + agrege(ikl,ikv) *agsnsv(ikl,ikv,i+1))
4285  END DO
4286  END DO
4287  END DO
4288 
4289  DO ikl=1,kcolp
4290  DO ikv=1,mwp
4291  isn = min(isnosv(ikl,ikv) +1,nsnow)
4292  istosv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*istosv(ikl,ikv,isn)
4293  dzsnsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*dzsnsv(ikl,ikv,isn)
4294  tsissv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*tsissv(ikl,ikv,isn)
4295  ro__sv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*ro__sv(ikl,ikv,isn)
4296  eta_sv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*eta_sv(ikl,ikv,isn)
4297  g1snsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*g1snsv(ikl,ikv,isn)
4298  g2snsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*g2snsv(ikl,ikv,isn)
4299  agsnsv(ikl,ikv,isn) = (1.-agrege(ikl,ikv))*agsnsv(ikl,ikv,isn)
4300  END DO
4301  END DO
4302 
4303 ! OUTPUT/Verification: Snow Layers Agregation: Properties
4304 ! #vp write(47,475)(G1snSV(1,isn),isn=1,isnoSV(1,1))
4305  475 format('At End _zSn : G1 = ',10f8.1,(/,19x,10f8.1))
4306 ! #vp write(47,472)(G2snSV(1,isn),isn=1,isnoSV(1,1))
4307 
4308 
4309 ! Search new Ice/Snow Interface
4310 ! =============================
4311 
4312 ! #SX DO ikl=1,kcolp
4313 ! #SX DO ikv=1,mwp
4314 ! #SX iiceSV(ikl,ikv) = 0
4315 ! #SX END DO
4316 ! #SX END DO
4317 
4318 ! #SX DO isn=1,nsnow
4319 ! #SX DO ikl=1,kcolp
4320 ! #SX DO ikv=1,mwp
4321 ! #SX OK_ICE = max(zer0,sign(un_1,ro__SV(ikl,ikv,isn)-850.)) &
4322 ! #SX& * max(zer0,sign(un_1,dzsnSV(ikl,ikv,isn)-eps6))
4323 ! #SX iiceSV(ikl,ikv) = (1.-OK_ICE) *iiceSV(ikl,ikv) &
4324 ! #SX& + OK_ICE *isn
4325 ! #SX END DO
4326 ! #SX END DO
4327 ! #SX END DO
4328 
4329 
4330 
4331 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4332 ! !
4333 ! DE-ALLOCATION !
4334 ! ============= !
4335 
4336  IF (flagdalloc) THEN !
4337 
4338  deallocate ( nlay_s ) ! Split Snow Layer Switch
4339  deallocate ( isagr1 ) ! 1st Layer History
4340  deallocate ( isagr2 ) ! 2nd Layer History
4341  deallocate ( isn1 ) ! 1st layer to stagger
4342  deallocate ( weagre ) ! Snow Water Equivalent Thickness
4343  deallocate ( dzthin ) ! Thickness of the thinest layer
4344  deallocate ( agrege ) ! 1. when Agregation constrained
4345  deallocate ( dzagr1 ) ! 1st Layer Thickness
4346  deallocate ( dzagr2 ) ! 2nd Layer Thickness
4347  deallocate ( t_agr1 ) ! 1st Layer Temperature
4348  deallocate ( t_agr2 ) ! 2nd Layer Temperature
4349  deallocate ( roagr1 ) ! 1st Layer Density
4350  deallocate ( roagr2 ) ! 2nd Layer Density
4351  deallocate ( etagr1 ) ! 1st Layer Water Content
4352  deallocate ( etagr2 ) ! 2nd Layer Water Content
4353  deallocate ( g1agr1 ) ! 1st Layer Dendricity/Spher.
4354  deallocate ( g1agr2 ) ! 2nd Layer Dendricity/Spher.
4355  deallocate ( g2agr1 ) ! 1st Layer Sphericity/Size
4356  deallocate ( g2agr2 ) ! 2nd Layer Sphericity/Size
4357  deallocate ( agagr1 ) ! 1st Layer Age
4358  deallocate ( agagr2 ) ! 2nd Layer Age
4359 
4360 ! #vz deallocate ( dz_ref ) ! Snow Reference Discretization
4361 ! #vz deallocate ( dzwdif ) !
4362 
4363  END IF !
4364 ! !
4365 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4366 
4367 
4368  return
4369  end subroutine sisvat_zsn
4370 
4371 
4372 
4373  subroutine sisvat_zcr
4375 !--------------------------------------------------------------------------+
4376 ! MAR SISVAT_zCr Wed 26-Jun-2013 MAR |
4377 ! SubRoutine SISVAT_zCr determines criteria for Layers Agregation |
4378 ! |
4379 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
4380 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
4381 ! |
4382 !--------------------------------------------------------------------------+
4383 ! |
4384 ! PARAMETERS: kcolv: Total Number of columns = |
4385 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
4386 ! X Number of Mosaic Cell per grid box |
4387 ! |
4388 ! INPUT / isnoSV = total Nb of Ice/Snow Layers |
4389 ! OUTPUT: iiceSV = total Nb of Ice Layers |
4390 ! ^^^^^^ ispiSV = 0,..,nsnow: Uppermost Superimposed Ice Layer |
4391 ! istoSV = 0,..,5 : Snow History (see istdSV data) |
4392 ! |
4393 ! INPUT / ro__SV : Soil/Snow Volumic Mass [kg/m3] |
4394 ! OUTPUT: & Snow Temperatures (layers 1,2,..,nsnow) [K] |
4395 ! ^^^^^^ G1snSV : Dendricity (<0) or Sphericity (>0) of Snow Layer |
4396 ! G2snSV : Sphericity (>0) or Size of Snow Layer |
4397 ! agsnSV : Snow Age [day] |
4398 ! |
4399 ! OUTPUT: LIndsv : Relative Index of a contiguous Layer to agregate |
4400 ! ^^^^^^ |
4401 !--------------------------------------------------------------------------+
4402 
4403 
4404 ! Global Variables
4405 ! =================
4406 
4407  use mod_real
4408  use mod_phy____dat
4409  use mod_phy____grd
4410  use mod_sisvat_grd
4411 
4412 
4413 
4414 ! General Variables
4415 ! =================
4416 
4417  use mod_sisvat_dat
4418  use mod_sisvat_dzs
4419  use mod_sisvat_kkl
4420  use mod_sisvat_loc
4421 
4422 
4423 
4424  IMPLICIT NONE
4425 
4426 
4427 
4428 ! Internal Variables
4429 ! ==================
4430 
4431  integer :: ikl,ikv ,isn ,is0 ,is1
4432  integer :: isno_1 ! Switch: ! Snow Layer over Ice
4433  real(kind=real8) :: Dtyp_0,Dtyp_1 ! Snow Grains Difference Measure
4434  real(kind=real8) :: DenSph ! 1. when contiguous spheric
4435 ! ! and dendritic Grains
4436  real(kind=real8) :: DendOK ! 1. when dendritic Grains
4437  real(kind=real8) :: dTypMx = 200.0 ! Grain Type Differ.
4438  real(kind=real8) :: dTypSp = 0.5 ! Sphericity Weight
4439  real(kind=real8) :: dTypRo = 0.5 ! Density Weight
4440  real(kind=real8) :: dTypDi = 10.0 ! Grain Diam.Weight
4441  real(kind=real8) :: dTypHi = 100.0 ! History Weight
4442 
4443 
4444 ! Agregation Criteria
4445 ! ===================
4446 
4447  DO ikl=1,kcolp
4448  DO ikv=1,mwp
4449  i_thin(ikl,ikv) = min(i_thin(ikl,ikv),isnosv(ikl,ikv))
4450  isn = max(1 ,i_thin(ikl,ikv))
4451 
4452 
4453 ! Comparison with the downward Layer
4454 ! ----------------------------------
4455 
4456  is0 = max(1, i_thin(ikl,ikv)-1 ) ! Downward Layer Index
4457  densph = max(zer0, &! isn/is1
4458  & sign(un_1, &! Dendricity/Sphericity
4459  & eps6-g1snsv(ikl,ikv,isn) &! Switch
4460  & *g1snsv(ikl,ikv,is0))) !
4461  dendok = max(zer0, &! Dendricity Switch
4462  & sign(un_1, &!
4463  & eps6-g1snsv(ikl,ikv,isn))) !
4464 
4465  dtyp_0 = &!
4466  & densph * dtypmx &!
4467  & +(1.-densph) &!
4468  & * dendok *((abs(g1snsv(ikl,ikv,isn) &! Dendricity
4469  & -g1snsv(ikl,ikv,is0)) &! Contribution
4470  & +abs(g2snsv(ikl,ikv,isn) &! Sphericity
4471  & -g2snsv(ikl,ikv,is0))) *dtypsp &! Contribution
4472  & +abs(ro__sv(ikl,ikv,isn) &! Density
4473  & -ro__sv(ikl,ikv,is0)) *dtypro)&! Contribution
4474  & +(1.-densph) &!
4475  & *(1.-dendok)*((abs(g1snsv(ikl,ikv,isn) &! Sphericity
4476  & -g1snsv(ikl,ikv,is0)) &! Contribution
4477  & +abs(g2snsv(ikl,ikv,isn) &! Size
4478  & -g2snsv(ikl,ikv,is0))) *dtypdi &! Contribution
4479  & +abs(ro__sv(ikl,ikv,isn) &! Density
4480  & -ro__sv(ikl,ikv,is0)) *dtypro) ! Contribution
4481  dtyp_0 = &!
4482  & min(dtypmx, &!
4483  & dtyp_0 &!
4484  & +abs(istosv(ikl,ikv,isn) &! History
4485  & -istosv(ikl,ikv,is0)) *dtyphi)&! Contribution
4486  & + (1 -abs(isn-is0)) * 1.e+6 &!"Same Layer"Score
4487  & + max(0,1-abs(iicesv(ikl,ikv) &!"Ice /Snow
4488  & -is0)) * 1.e+6 ! Interface" Score
4489 
4490 
4491 ! Comparison with the upward Layer
4492 ! ----------------------------------
4493 
4494  is1 = min( i_thin(ikl,ikv)+1, &! Upward Layer Index
4495  & max(1, isnosv(ikl,ikv) )) !
4496  densph = max(zer0, &! isn/is1
4497  & sign(un_1, &! Dendricity/Sphericity
4498  & eps6-g1snsv(ikl,ikv,isn) &! Switch
4499  & *g1snsv(ikl,ikv,is1))) !
4500  dendok = max(zer0, &! Dendricity Switch
4501  & sign(un_1, &!
4502  & eps6-g1snsv(ikl,ikv,isn))) !
4503 
4504  dtyp_1 = &!
4505  & densph * dtypmx &!
4506  & +(1.-densph) &!
4507  & * dendok *((abs(g1snsv(ikl,ikv,isn) &! Dendricity
4508  & -g1snsv(ikl,ikv,is1)) &! Contribution
4509  & +abs(g2snsv(ikl,ikv,isn) &! Sphericity
4510  & -g2snsv(ikl,ikv,is1))) *dtypsp &! Contribution
4511  & +abs(ro__sv(ikl,ikv,isn) &! Density
4512  & -ro__sv(ikl,ikv,is1)) *dtypro)&! Contribution
4513  & +(1.-densph) &!
4514  & *(1.-dendok)*((abs(g1snsv(ikl,ikv,isn) &! Sphericity
4515  & -g1snsv(ikl,ikv,is1)) &! Contribution
4516  & +abs(g2snsv(ikl,ikv,isn) &! Size
4517  & -g2snsv(ikl,ikv,is1))) *dtypdi &! Contribution
4518  & +abs(ro__sv(ikl,ikv,isn) &! Density
4519  & -ro__sv(ikl,ikv,is1)) *dtypro) ! Contribution
4520  dtyp_1 = &!
4521  & min(dtypmx, &!
4522  & dtyp_1 &!
4523  & +abs(istosv(ikl,ikv,isn) &! History
4524  & -istosv(ikl,ikv,is1)) *dtyphi)&! Contribution
4525  & + (1 -abs(isn-is1)) * 1.e+6 &!"Same Layer"Score
4526  & + max(0,1-abs(iicesv(ikl,ikv) &!"Ice /Snow
4527  & -isn)) * 1.e+6 ! Interface" Score
4528 
4529 
4530 ! Index of the Layer to agregate
4531 ! ==============================
4532 
4533  lindsv(ikl,ikv) = sign(un_1,dtyp_0 &!
4534  & -dtyp_1) !
4535  isno_1 = (1 -min(abs(isnosv(ikl,ikv) &! Switch = 1
4536  & -iicesv(ikl,ikv)-1),1))&! if isno = iice +1
4537  & * (1 -min(abs(isnosv(ikl,ikv) &! Switch = 1
4538  & -i_thin(ikl,ikv) ),1)) ! if isno = i_ithin
4539  lindsv(ikl,ikv) = (1 -isno_1) *lindsv(ikl,ikv) &! Contiguous Layer is
4540  & -isno_1 ! downward for top L.
4541  i_thin(ikl,ikv) = max(1, i_thin(ikl,ikv) ) !
4542  END DO
4543  END DO
4544 
4545 
4546  return
4547  end subroutine sisvat_zcr
4548 
4549 
4550 
4551  subroutine sisvat_zag &!
4552  & (ikl,ikv,isagra,isagrb,weagra &!
4553  & ,dzagra,dzagrb,t_agra,t_agrb &!
4554  & ,roagra,roagrb,etagra,etagrb &!
4555  & ,g1agra,g1agrb,g2agra,g2agrb &!
4556  & ,agagra,agagrb,agreg1 &!
4557  & )
4559 !--------------------------------------------------------------------------+
4560 ! MAR SURFACE Wed 26-Jun-2013 MAR |
4561 ! SubRoutine SISVAT_zAg aggregates two contiguous snow layers |
4562 ! |
4563 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
4564 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
4565 ! |
4566 !--------------------------------------------------------------------------+
4567 ! |
4568 ! PARAMETERS: kcolv: Total Number of columns = |
4569 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
4570 ! X Number of Mosaic Cell per grid box |
4571 ! |
4572 ! INPUT: isagrb : 2nd Layer History |
4573 ! ^^^^^ |
4574 ! |
4575 ! INPUT: dzagrb : 2nd Layer Thickness |
4576 ! ^^^^^ T_agrb : 2nd Layer Temperature |
4577 ! roagrb : 2nd Layer Density |
4578 ! etagrb : 2nd Layer Water Content |
4579 ! G1agrb : 2nd Layer Dendricity/Spher. |
4580 ! G2agrb : 2nd Layer Sphericity/Size |
4581 ! agagrb : 2nd Age |
4582 ! Agreg1 : 1. when Agregation constrained |
4583 ! |
4584 ! INPUT / isagra : 1st Layer History |
4585 ! OUTPUT: |
4586 ! ^^^^^^ |
4587 ! |
4588 ! INPUT / dzagra : 1st Layer Thickness |
4589 ! OUTPUT: T_agra : 1st Layer Temperature |
4590 ! ^^^^^^ roagra : 1st Layer Density |
4591 ! etagra : 1st Layer Water Content |
4592 ! G1agra : 1st Layer Dendricity/Spher. |
4593 ! G2agra : 1st Layer Sphericity/Size |
4594 ! agagra : 1st Age |
4595 ! |
4596 ! |
4597 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
4598 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
4599 ! FILE | CONTENT |
4600 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
4601 ! # stdout | #s1: OUTPUT of Snow Layers Agregation |
4602 ! | unit 6, SubRoutine SISVAT_zSn, _zAg |
4603 !--------------------------------------------------------------------------+
4604 
4605 
4606 ! Global Variables
4607 ! =================
4608 
4609  use mod_real
4610  use mod_phy____dat
4611 
4612 
4613 
4614 ! General Variables
4615 ! =================
4616 
4617  use mod_sisvat_dat
4618  use mod_sisvat_dzs
4619  use mod_sisvat_kkl
4620 
4621 
4622  IMPLICIT NONE
4623 
4624 
4625 
4626 ! Transferred Variables
4627 ! =====================
4628 
4629 
4630 ! INPUT
4631 ! -----
4632 
4633  integer :: ikl,ikv ! Column Index
4634 
4635  integer :: isagrb ! 2nd Layer History
4636  real(kind=real8) :: dzagrb ! 2nd Layer Thickness
4637  real(kind=real8) :: T_agrb ! 2nd Layer Temperature
4638  real(kind=real8) :: roagrb ! 2nd Layer Density
4639  real(kind=real8) :: etagrb ! 2nd Layer Water Content
4640  real(kind=real8) :: G1agrb ! 2nd Layer Dendricity/Spher.
4641  real(kind=real8) :: G2agrb ! 2nd Layer Sphericity/Size
4642  real(kind=real8) :: agagrb ! 2nd Layer Age
4643 
4644 
4645 ! INPUT/OUTPUT
4646 ! ------------
4647 
4648  integer :: isagra ! 1st Layer History
4649  real(kind=real8) :: WEagra ! 1st Layer Height [mm w.e.]
4650  real(kind=real8) :: Agreg1 ! 1. ===> Agregates
4651  real(kind=real8) :: dzagra ! 1st Layer Thickness
4652  real(kind=real8) :: T_agra ! 1st Layer Temperature
4653  real(kind=real8) :: roagra ! 1st Layer Density
4654  real(kind=real8) :: etagra ! 1st Layer Water Content
4655  real(kind=real8) :: G1agra ! 1st Layer Dendricity/Spher.
4656  real(kind=real8) :: G2agra ! 1st Layer Sphericity/Size
4657  real(kind=real8) :: agagra ! 1st Layer Age
4658 
4659 
4660 
4661 ! Internal Variables
4662 ! ==================
4663 
4664  integer :: nh ! Averaged Snow History
4665  integer :: nh__OK ! 1=>Conserve Snow History
4666  real(kind=real8) :: rh !
4667  real(kind=real8) :: dz ! Thickness
4668  real(kind=real8) :: dzro_1 ! Thickness X Density, Lay.1
4669  real(kind=real8) :: dzro_2 ! Thickness X Density, Lay.2
4670  real(kind=real8) :: dzro ! Thickness X Density, Aver.
4671  real(kind=real8) :: ro ! Averaged Density
4672  real(kind=real8) :: wn ! Averaged Water Content
4673  real(kind=real8) :: tn ! Averaged Temperature
4674  real(kind=real8) :: ag ! Averaged Snow Age
4675  real(kind=real8) :: SameOK ! 1. => Same Type of Grains
4676  real(kind=real8) :: G1same ! Averaged G1, same Grains
4677  real(kind=real8) :: G2same ! Averaged G2, same Grains
4678  real(kind=real8) :: typ__1 ! 1. => Lay1 Type: Dendritic
4679  real(kind=real8) :: zroNEW ! dz X ro, if fresh Snow
4680  real(kind=real8) :: G1_NEW ! G1, if fresh Snow
4681  real(kind=real8) :: G2_NEW ! G2, if fresh Snow
4682  real(kind=real8) :: zroOLD ! dz X ro, if old Snow
4683  real(kind=real8) :: G1_OLD ! G1, if old Snow
4684  real(kind=real8) :: G2_OLD ! G2, if old Snow
4685  real(kind=real8) :: SizNEW ! Size, if fresh Snow
4686  real(kind=real8) :: SphNEW ! Spheric.,if fresh Snow
4687  real(kind=real8) :: SizOLD ! Size, if old Snow
4688  real(kind=real8) :: SphOLD ! Spheric.,if old Snow
4689  real(kind=real8) :: Siz_av ! Averaged Grain Size
4690  real(kind=real8) :: Sph_av ! Averaged Grain Spher.
4691  real(kind=real8) :: Den_av ! Averaged Grain Dendr.
4692  real(kind=real8) :: DendOK ! 1. => Average is Dendr.
4693  real(kind=real8) :: G1diff ! Averaged G1, diff. Grains
4694  real(kind=real8) :: G2diff ! Averaged G2, diff. Grains
4695  real(kind=real8) :: G1 ! Averaged G1
4696  real(kind=real8) :: G2 ! Averaged G2
4697 
4698 
4699 
4700 ! Mean Properties
4701 ! =================
4702 
4703 ! 1 Densite, Contenu en Eau, Temperature /
4704 ! Density, Water Content, Temperature
4705 ! ------------------------------------
4706 
4707  dz = dzagra + dzagrb
4708  dzro_1 = roagra * dzagra
4709  dzro_2 = roagrb * dzagrb
4710  dzro = dzro_1 + dzro_2
4711  ro = dzro &
4712  & /max(eps6,dz)
4713  wn = (dzro_1*etagra + dzro_2*etagrb ) &
4714  & /max(eps6,dzro)
4715  tn = (dzro_1*t_agra + dzro_2*t_agrb ) &
4716  & /max(eps6,dzro)
4717  ag = (dzro_1*agagra + dzro_2*agagrb ) &
4718  & /max(eps6,dzro)
4719 
4720  rh = max(zer0,sign(un_1,zwecsv(ikl,ikv) &
4721  & -0.5*weagra ))
4722 
4723  nh__ok = rh
4724  nh = max(isagra ,isagrb ) &
4725 ! #HB& * nh__OK &
4726 ! #HB& + (1-nh__OK)* min(isagra ,isagrb ) &
4727  & + 0.
4728 
4729 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
4730 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4731 ! #s1 IF (ii__AP(ikl).EQ.iwr_SV.AND.jj__AP(ikl).EQ.jwr_SV .AND. &
4732 ! #s1& ikv .EQ.nwr_SV ) THEN
4733 ! #s1 write(6,5995) zWEcSV(ikl,ikv),WEagra &
4734 ! #s1& ,isagra ,isagrb &
4735 ! #s1& ,nh__OK ,nh
4736  5995 format(' WE2,WEa =',2f9.1,' nha,b =',2i2,' nh__OK,nh =',2i2)
4737 ! #s1 END IF
4738 
4739 
4740 ! 2 Nouveaux Types de Grains / new Grain Types
4741 ! -------------------------------------------
4742 
4743 ! 2.1. Meme Type de Neige / same Grain Type
4744 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4745  sameok = max(zer0, &
4746  & sign(un_1, g1agra *g1agrb - eps_21))
4747  g1same = (dzro_1*g1agra + dzro_2*g1agrb ) &
4748  & /max(eps6,dzro)
4749  g2same = (dzro_1*g2agra + dzro_2*g2agrb ) &
4750  & /max(eps6,dzro)
4751 
4752 ! 2.2. Types differents / differents Types
4753 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4754  typ__1 = max(zer0,sign(un_1,eps6-g1agra )) ! =1.=> Dendritic
4755  zronew = typ__1 *dzro_1 &! ro of Dendr.Lay.
4756  & + (1.-typ__1) *dzro_2 !
4757  g1_new = typ__1 *g1agra &! G1 of Dendr.Lay.
4758  & + (1.-typ__1) *g1agrb !
4759  g2_new = typ__1 *g2agra &! G2 of Dendr.Lay.
4760  & + (1.-typ__1) *g2agrb !
4761  zroold = (1.-typ__1) *dzro_1 &! ro of Spher.Lay.
4762  & + typ__1 *dzro_2 !
4763  g1_old = (1.-typ__1) *g1agra &! G1 of Spher.Lay.
4764  & + typ__1 *g1agrb !
4765  g2_old = (1.-typ__1) *g2agra &! G2 of Spher.Lay.
4766  & + typ__1 *g2agrb !
4767  siznew = -g1_new *ddcdsv/g1_dsv &! Size Dendr.Lay.
4768  & +(1.+g1_new /g1_dsv) &!
4769  & *(g2_new *dscdsv/g1_dsv &!
4770  & +(1.-g2_new /g1_dsv)*dfcdsv) !
4771  sphnew = g2_new /g1_dsv ! Spher.Dendr.Lay.
4772  sizold = g2_old ! Size Spher.Lay.
4773  sphold = g1_old /g1_dsv ! Spher.Spher.Lay.
4774  siz_av = (zronew*siznew+zroold*sizold) &! Averaged Size
4775  & /max(eps6,dzro) !
4776  sph_av = (zronew*sphnew+zroold*sphold) &! Averaged Sphericity
4777  & /max(eps6,dzro) !
4778  den_av = (siz_av -( sph_av *dscdsv &!
4779  & +(1.-sph_av)*dfcdsv)) &!
4780  & / (ddcdsv -( sph_av *dscdsv &!
4781  & +(1.-sph_av)*dfcdsv)) !
4782  dendok = max(zer0, &!
4783  & sign(un_1, sph_av *dscdsv &! Small Grains Contr.
4784  & +(1.-sph_av)*dfcdsv &! Faceted Grains Contr.
4785  & - siz_av ))!
4786 ! REMARQUE: le type moyen (dendritique ou non) depend
4787 ! ^^^^^^^^ de la comparaison avec le diametre optique
4788 ! d'une neige recente de dendricite nulle
4789 ! REMARK: the mean type (dendritic or not) depends
4790 ! ^^^^^^ on the comparaison with the optical diameter
4791 ! of a recent snow having zero dendricity
4792 
4793  g1diff =( -dendok *den_av &
4794  & +(1.-dendok)*sph_av) *g1_dsv
4795  g2diff = dendok *sph_av *g1_dsv &
4796  & +(1.-dendok)*siz_av
4797  g1 = sameok *g1same &
4798  & +(1.-sameok)*g1diff
4799  g2 = sameok *g2same &
4800  & +(1.-sameok)*g2diff
4801 
4802 
4803 ! Assignation to new Properties
4804 ! =============================
4805 
4806  isagra = agreg1 *nh +(1.-agreg1 ) *isagra
4807  dzagra = agreg1 *dz +(1.-agreg1 ) *dzagra
4808  t_agra = agreg1 *tn +(1.-agreg1 ) *t_agra
4809  roagra = agreg1 *ro +(1.-agreg1 ) *roagra
4810  etagra = agreg1 *wn +(1.-agreg1 ) *etagra
4811  g1agra = agreg1 *g1 +(1.-agreg1 ) *g1agra
4812  g2agra = agreg1 *g2 +(1.-agreg1 ) *g2agra
4813  agagra = agreg1 *ag +(1.-agreg1 ) *agagra
4814 
4815 
4816  return
4817  end subroutine sisvat_zag
4818 
4819 
4820 
4821  subroutine snoptp( &
4822 ! #AG& jjtime &
4823  & )
4825 !--------------------------------------------------------------------------+
4826 ! MAR/SISVAT SnOptP Wed 26-Jun-2013 MAR |
4827 ! SubRoutine SnOptP computes the Snow Pack optical Properties |
4828 ! |
4829 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
4830 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
4831 ! |
4832 !--------------------------------------------------------------------------+
4833 ! |
4834 ! PARAMETERS: kcolv: Total Number of columns = |
4835 ! ^^^^^^^^^^ = Total Number of continental Grid Boxes |
4836 ! X Number of Mosaic Cell per Grid Box |
4837 ! |
4838 ! INPUT: isnoSV = total Nb of Ice/Snow Layers |
4839 ! ^^^^^ ispiSV = 0,...,nsno: Uppermost Superimposed Ice Layer |
4840 ! |
4841 ! ivgtSV = 0,...,12: Vegetation Type |
4842 ! 0: Water, Solid or Liquid |
4843 ! |
4844 ! INPUT: G1snSV : Dendricity (<0) or Sphericity (>0) of Snow Layer |
4845 ! ^^^^^ G2snSV : Sphericity (>0) or Size of Snow Layer |
4846 ! agsnSV : Snow Age [day] |
4847 ! ro__SV : Snow/Soil Volumic Mass [kg/m3] |
4848 ! eta_SV : Water Content [m3/m3] |
4849 ! rusnSV : Surficial Water Thickness [kg/m2] .OR. [mm] |
4850 ! SWS_SV : Surficial Water Status |
4851 ! dzsnSV : Snow Layer Thickness [m] |
4852 ! |
4853 ! albssv : Soil Albedo [-] |
4854 ! zzsnsv : Snow Pack Thickness [m] |
4855 ! |
4856 ! OUTPUT: albisv : Snow/Ice/Water/Soil Integrated Albedo [-] |
4857 ! ^^^^^^ sEX_sv : Verticaly Integrated Extinction Coefficient |
4858 ! |
4859 ! Internal Variables: |
4860 ! ^^^^^^^^^^^^^^^^^^ |
4861 ! SnOpSV : Snow Grain optical Size [m] |
4862 ! EX1_sv : Integrated Snow Extinction (0.3--0.8micr.m) |
4863 ! EX2_sv : Integrated Snow Extinction (0.8--1.5micr.m) |
4864 ! EX3_sv : Integrated Snow Extinction (1.5--2.8micr.m) |
4865 ! |
4866 ! METHODE: Calcul de la taille optique des grains ? partir de |
4867 ! ^^^^^^^ -leur type decrit par les deux variables descriptives |
4868 ! continues sur la plage -99/+99 passees en appel. |
4869 ! -la taille optique (1/10mm) des etoiles, |
4870 ! des grains fins et |
4871 ! des jeunes faces planes |
4872 ! |
4873 ! METHOD: Computation of the optical diameter of the grains |
4874 ! ^^^^^^ described with the CROCUS formalism G1snSV / G2snSV |
4875 ! |
4876 ! REFERENCE: Brun et al. 1989, J. Glaciol 35 pp. 333--342 |
4877 ! ^^^^^^^^^ Brun et al. 1992, J. Glaciol 38 pp. 13-- 22 |
4878 ! Eric Martin Sept.1996 |
4879 ! |
4880 ! CAUTION: Vegetation is not taken into account in albedo computations |
4881 ! ^^^^^^^ Suggestion: 1) Reduce the displacement height and/or LAI |
4882 ! (when snow) for radiative transfert through vegetation |
4883 ! 2) Adapt leaf optical parameters |
4884 ! |
4885 ! |
4886 ! Preprocessing Option: STANDARD Possibility |
4887 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ |
4888 ! #CZ: Albedo Correction (Zenith Angle) (Warren, 1982) |
4889 ! #cz: Albedo Correction (Zenith Angle) (Segal etAl., 1991) (obsolete) |
4890 ! |
4891 ! |
4892 ! Preprocessing Option: STANDARD Col de Porte |
4893 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ |
4894 ! #cp: Col de Porte Integrated Snow/Ice Albedo |
4895 ! #AG: Snow Aging Col de Porte (Brun et al.1991) |
4896 ! |
4897 ! |
4898 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
4899 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
4900 ! FILE | CONTENT |
4901 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
4902 ! # SnOptP____.va | #va: OUTPUT/Verification: Albedo Parameteriz. |
4903 ! | unit 46, SubRoutine SnOptP **ONLY** |
4904 !--------------------------------------------------------------------------+
4905 
4906 
4907 ! Global Variables
4908 ! =================
4909 
4910  use mod_real
4911  use mod_phy____dat
4912  use mod_phy____grd
4913  use mod_sisvat_grd
4914 
4915 
4916 
4917 ! General Variables
4918 ! =================
4919 
4920  use mod_sisvat_ctr
4921  use mod_sisvat_cdp
4922  use mod_sisvat_dat
4923  use mod_sisvat_kkl
4924  use mod_sisvat_loc
4925 ! #va use Mod_SISVAT_SnOptP
4926  use mod_sisvatlsno
4927 
4928 
4929 
4930  IMPLICIT NONE
4931 
4932 
4933 
4934 ! Internal Variables
4935 ! ==================
4936 
4937  real(kind=real8) :: coalbm ! weighted Coalbedo, mean
4938 ! #AG real(kind=real8) :: agesno
4939 
4940 ! #AG integer :: jjtime !
4941  integer :: isn ,ikl,ikv !
4942 ! #va integer :: isn1 !
4943 
4944 ! For the computation of the solar irradiance extinction in snow
4945 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4946  real(kind=real8) :: sbeta1 = 0.0192
4947  real(kind=real8) :: sbeta2 = 0.4000
4948  real(kind=real8) :: sbeta3 = 0.1098
4949  real(kind=real8) :: sbeta4 = 1.0000
4950  real(kind=real8) :: sbeta5 = 2.00e1
4951 
4952 ! Snow Age Maximum (Taiga, e.g. Col de Porte)
4953 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4954 ! #AG real(kind=real8) :: AgeMax = 60.0 ! [day]
4955 
4956  real(kind=real8) :: AlbMin = 0.94 ! Albedo Minimum / visible (0.3--0.8 micrometers)
4957  real(kind=real8) :: AlbMax = 0.99 ! Albedo Maximum
4958  real(kind=real8) :: HSnoSV = 0.01 ! Snow Thickness over witch interpolate Albedo to Ice Albedo
4959  real(kind=real8) :: HIceSV = 0.10 ! Snow Thickness over witch interpolate Albedo to Soil Albedo
4960 
4961  real(kind=real8) :: doptmx = 2.3e-3 ! [m] Maximum optical Diameter (pi * R**2)
4962 
4963  real(kind=real8) :: SignG1,Sph_OK
4964  real(kind=real8) :: dalbed !
4965 ! #cz real(kind=real8) :: dalbeS !
4966 ! #CZ real(kind=real8) :: dalbeW !
4967 
4968 ! #CZ real(kind=real8) :: bsegal = 4.00
4969 ! #CZ real(kind=real8) :: czeMAX = 0.173648178 ! 80.deg (Segal et al., 1991 JAS)
4970 ! #CZ real(kind=real8) :: CZ_eff
4971 
4972  real(kind=real8) :: RoFrez,SignRo,SnowOK,OpSqrt
4973  real(kind=real8) :: albSn1,a_SII1
4974  real(kind=real8) :: albSn2,a_SII2
4975  real(kind=real8) :: albSn3,a_SII3
4976  real(kind=real8) :: albSno
4977 ! #va real(kind=real8) :: albIce,albIc1,albIc2,albIc3
4978  real(kind=real8) :: albSII,albWIc
4979  real(kind=real8) :: doptic,Snow_H,SIce_H,SnownH,SIcenH
4980  real(kind=real8) :: exarg1,exarg2,exarg3,sign_0,sExt_0
4981  real(kind=real8) :: albedo_old
4982  real(kind=real8) :: ro_ave,dz_ave
4983 
4984 
4985 
4986 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4987 ! !
4988 ! ALLOCATION !
4989 ! ========== !
4990 
4991  IF (it_run.EQ.1 .OR. flagdalloc) THEN !
4992 
4993  allocate ( coalb1(kcolp,mwp) ) ! weighted Coalbedo, Vis.
4994  allocate ( coalb2(kcolp,mwp) ) ! weighted Coalbedo, nIR 1
4995  allocate ( coalb3(kcolp,mwp) ) ! weighted Coalbedo, nIR 2
4996  allocate ( sext_1(kcolp,mwp) ) ! Extinction Coeff., Vis.
4997  allocate ( sext_2(kcolp,mwp) ) ! Extinction Coeff., nIR 1
4998  allocate ( sext_3(kcolp,mwp) ) ! Extinction Coeff., nIR 2
4999  allocate ( snopsv(kcolp,mwp,nsnow) ) ! Snow Grain optical Size
5000 
5001  allocate ( alb1sv(kcolp,mwp) ) !
5002  allocate ( alb2sv(kcolp,mwp) ) !
5003  allocate ( alb3sv(kcolp,mwp) ) !
5004 
5005  END IF
5006 ! !
5007 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5008 
5009 
5010 
5011 ! Snow Grain optical Size
5012 ! =======================
5013 
5014  DO isn=1,nsnow
5015  DO ikl=1,kcolp
5016  DO ikv=1,mwp
5017 
5018  g2snsv(ikl,ikv,isn) = max(eps6,g2snsv(ikl,ikv,isn))
5019 ! Avoid non physical Values
5020 
5021  signg1 = sign(un_1,g1snsv(ikl,ikv,isn))
5022  sph_ok = max(zer0,signg1)
5023 
5024  snopsv(ikl,ikv,isn) = 1.e-4 * &
5025 ! SI: (from 1/10 mm to m)
5026 
5027 
5028 ! Contribution of Non Dendritic Snow
5029 ! ----------------------------------
5030 
5031  & ( sph_ok *( g2snsv(ikl,ikv,isn)*g1snsv(ikl,ikv,isn)/g1_dsv &
5032  & +max(half*g2snsv(ikl,ikv,isn),dfcdsv) &
5033  & *(1.00-g1snsv(ikl,ikv,isn) /g1_dsv)) &
5034 
5035 
5036 ! Contribution of Dendritic Snow
5037 ! ----------------------------------
5038 
5039  & +(1.-sph_ok)*( -g1snsv(ikl,ikv,isn)*ddcdsv /g1_dsv &
5040  & +(1.00+g1snsv(ikl,ikv,isn) /g1_dsv) &
5041  & * (g2snsv(ikl,ikv,isn)*dscdsv /g1_dsv &
5042  & +(1.00-g2snsv(ikl,ikv,isn) /g1_dsv) &
5043  & *dfcdsv )))
5044  snopsv(ikl,ikv,isn) = max(zer0,snopsv(ikl,ikv,isn))
5045  END DO
5046  END DO
5047  END DO
5048 
5049 
5050 ! Snow/Ice Albedo
5051 ! ===============
5052 
5053 ! Snow Age (Influence on Albedo)
5054 ! ------------------------------
5055 
5056 ! #AG IF (iabs(mod(jjtime,86400)).lt.dt__SV) THEN
5057 ! #AG DO isn=1,nsnow
5058 ! #AG DO ikl=1,kcolp
5059 ! #AG DO ikv=1,mwp
5060 ! #AG agsnSV(ikl,ikv,isn) = agsnSV(ikl,ikv,isn) + 1. &
5061 ! #AG& + max(zer0,DH_dSV(ivgtSV(ikl,ikv))-DH_dSV(4)) ! High Vegetation
5062 ! ! Impurities
5063 ! CAUTION: crude parameterization
5064 ! ^^^^^^^
5065 ! #AG END DO
5066 ! #AG END DO
5067 ! #AG END DO
5068 ! #AG END IF
5069 
5070 
5071 ! Uppermost effective Snow Layer
5072 ! ------------------------------
5073 
5074  DO ikl=1,kcolp
5075  DO ikv=1,mwp
5076 
5077  isn = max(1,isnosv(ikl,ikv))
5078 
5079  signro = sign(un_1, rocdsv - ro__sv(ikl,ikv,isn))
5080  snowok = max(zer0,signro) ! Ice Density Threshold
5081 
5082  opsqrt = sqrt(snopsv(ikl,ikv,isn))
5083 
5084  albsn1 = 0.96-1.580*opsqrt
5085  albsn1 = max(albsn1,albmin)
5086 
5087  albsn1 = max(albsn1,zer0)
5088  albsn1 = min(albsn1,un_1)
5089 
5090  albsn2 = 0.95-15.40*opsqrt
5091  albsn2 = max(albsn2,zer0)
5092  albsn2 = min(albsn2,un_1)
5093 
5094  doptic = min(snopsv(ikl,ikv,isn),doptmx)
5095  albsn3 = 346.3*doptic -32.31*opsqrt +0.88
5096  albsn3 = max(albsn3,zer0)
5097  albsn3 = min(albsn3,un_1)
5098 
5099  albsno = so1dsv*albsn1 &
5100  & + so2dsv*albsn2 &
5101  & + so3dsv*albsn3
5102 
5103  snowok = snowok*max(zer0,sign(un_1,albsno-ai3dsv))
5104  ! Minimum snow albedo is aI3dSV
5105 
5106  albsn1 = snowok*albsn1+(1.0-snowok)*max(albsno,ai3dsv)
5107  albsn2 = snowok*albsn2+(1.0-snowok)*max(albsno,ai3dsv)
5108  albsn3 = snowok*albsn3+(1.0-snowok)*max(albsno,ai3dsv)
5109 
5110 
5111 ! Snow/Ice Pack Thickness
5112 ! -----------------------
5113 
5114  isn = max(min(isnosv(ikl,ikv) ,ispisv(ikl,ikv)),0)
5115  snow_h = zzsnsv(ikl,ikv,isnosv(ikl,ikv))-zzsnsv(ikl,ikv,isn)
5116  sice_h = zzsnsv(ikl,ikv,isnosv(ikl,ikv))
5117  snownh = snow_h / hsnosv
5118  snownh = min(un_1, snownh)
5119  sicenh = sice_h / (hicesv &
5120  & + max(zer0,z0mdsv(ivgtsv(ikl,ikv)) &
5121  & - z0mdsv(4) ))
5122  sicenh = min(un_1, sicenh)
5123 
5124 ! The value of SnownH is set to 1 in case of ice lenses above
5125 ! 1m of dry snow (ro<700kg/m3) for using CROCUS albedo
5126 
5127  ro_ave = 0.
5128  dz_ave = 0.
5129  snowok = 1.
5130  DO isn = isnosv(ikl,ikv),1,-1
5131  ro_ave = ro_ave + ro__sv(ikl,ikv,isn) * dzsnsv(ikl,ikv,isn) * snowok
5132  dz_ave = dz_ave + dzsnsv(ikl,ikv,isn) * snowok
5133  snowok = max(zer0,sign(un_1,1.-dz_ave))
5134  END DO
5135 
5136  ro_ave = ro_ave / max(dz_ave,eps6)
5137  snowok = max(zer0,sign(un_1,700.-ro_ave))
5138 
5139  snownh = snowok + snownh * (1. - snowok)
5140 
5141 
5142 ! Integrated Snow/Ice Albedo: Case of Water on Bare Ice
5143 ! -----------------------------------------------------
5144 
5145  isn = max(min(isnosv(ikl,ikv) ,ispisv(ikl,ikv)),0)
5146 
5147  albwic = ai1dsv-(ai1dsv-ai2dsv) &!
5148  & * exp(-rusnsv(ikl,ikv) &!
5149  & * (1. -sws_sv(ikl,ikv) &! 0 <=> freezing
5150  & * (1 -min(1,iabs(isn-isnosv(ikl,ikv))))) &! 1 <=> isn=isnoSV
5151  & /ru_dsv) !
5152 
5153  signro = sign(un_1,rhoice-1.-ro__sv(ikl,ikv,isn))! RoSN<920kg/m3
5154  snowok = max(zer0,signro)
5155 
5156  albwic = (1. - snowok) * albwic + snowok &!
5157  & * (ai2dsv + (ai3dsv -ai2dsv) &!
5158  & * (ro__sv(ikl,ikv,isn)-rhoice)/(rocdsv-rhoice))
5159 
5160 ! rocdSV < ro < rhoIce | aI2dSV< al >aI3dSV (fct of density))
5161 ! ro > rhoIce | aI1dSV< al >aI2dSV (fct of superficial water content)s
5162 
5163 
5164 ! Integrated Snow/Ice Albedo
5165 ! -------------------------------
5166 
5167  a_sii1 = albwic +(albsn1-albwic) *snownh
5168  a_sii1 = min(a_sii1 ,albsn1)
5169 
5170  a_sii2 = albwic +(albsn2-albwic) *snownh
5171  a_sii2 = min(a_sii2 ,albsn2)
5172 
5173  a_sii3 = albwic +(albsn3-albwic) *snownh
5174  a_sii3 = min(a_sii3 ,albsn3)
5175 
5176 ! #AG agesno = min(agsnSV(ikl,ikv,isn) ,AgeMax)
5177 ! #AG a_SII1 = a_SII1 -0.175*agesno/AgeMax
5178 ! Impurities: Col de Porte Parameter.
5179 
5180 
5181 ! Zenith Angle Correction (Segal et al., 1991, JAS 48, p.1025)
5182 ! ----------------------- (Wiscombe & Warren, dec1980, JAS , p.2723)
5183 ! (Warren, 1982, RG , p. 81)
5184 ! --------------------------------------------
5185 
5186 
5187  dalbed = 0.0
5188 ! #CZ CZ_eff = max(czemax ,coszSV(ikl,ikv))
5189 ! #cz dalbeS = ((bsegal+1.00)/(1.00+2.0*bsegal*CZ_eff) &
5190 ! #cz& - 1.00 )*0.32 &
5191 ! #cz& / bsegal
5192 ! #cz dalbeS = max(dalbeS,zer0)
5193 ! #cz dalbed = dalbeS * min(1,isnoSV(ikl,ikv))
5194 
5195 ! #CZ dalbeW =(0.64 - CZ_eff )*0.0625 ! Warren 1982, RevGeo, fig.12b
5196  ! 0.0625 = 5% * 1/0.8, p.81
5197  ! 0.64 = cos(50)
5198 ! #CZ dalbed = dalbeW * min(1,isnoSV(ikl,ikv))
5199 
5200 ! Col de Porte Integrated Snow/Ice Albedo
5201 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5202  IF (colprt.AND.totsol.gt.0.) THEN
5203  albsii = (((dr_1sn*a_sii1+dr_2sn*a_sii2+dr_3sn*a_sii3) &
5204  & +dalbed ) &
5205  & *dirsol &
5206  & +(df_1sn*a_sii1+df_2sn*a_sii2+df_3sn*a_sii3) &
5207  & *difsol*(1. -cld_sv(ikl,ikv)) &
5208  & +(dfc1sn*a_sii1+dfc2sn*a_sii2+dfc3sn*a_sii3) &
5209  & *difsol* cld_sv(ikl,ikv) ) &
5210  & / totsol
5211 
5212 ! Elsewhere Integrated Snow/Ice Albedo
5213 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5214  ELSE
5215  albsii = so1dsv*a_sii1 &
5216  & + so2dsv*a_sii2 &
5217  & + so3dsv*a_sii3
5218  END IF
5219 
5220 
5221 ! Integrated Snow/Ice/Soil Albedo
5222 ! -------------------------------
5223 
5224  alb1sv(ikl,ikv) = albssv(ikl,ikv) +(a_sii1-albssv(ikl,ikv))*sicenh
5225  alb1sv(ikl,ikv) = min(alb1sv(ikl,ikv) ,a_sii1)
5226 
5227  alb2sv(ikl,ikv) = albssv(ikl,ikv) +(a_sii2-albssv(ikl,ikv))*sicenh
5228  alb2sv(ikl,ikv) = min(alb2sv(ikl,ikv) ,a_sii2)
5229 
5230  alb3sv(ikl,ikv) = albssv(ikl,ikv) +(a_sii3-albssv(ikl,ikv))*sicenh
5231  alb3sv(ikl,ikv) = min(alb3sv(ikl,ikv) ,a_sii3)
5232 
5233  albisv(ikl,ikv) = albssv(ikl,ikv) +(albsii-albssv(ikl,ikv))*sicenh
5234  albisv(ikl,ikv) = min(albisv(ikl,ikv) ,albsii)
5235 
5236 
5237 ! Integrated Snow/Ice/Soil Albedo: Clouds Correction! Greuell & all., 1994
5238 ! --------------------------------------------------! Glob.&t Planet.Change
5239  ! (9):91-114
5240  IF (.NOT.colprt) THEN
5241  alb1sv(ikl,ikv) = alb1sv(ikl,ikv) + 0.05 *(cld_sv(ikl,ikv)-0.5)*sicenh &
5242 ! #CZ& + dalbed * (1.-cld_SV(ikl,ikv)) &
5243  & + 0.
5244  alb2sv(ikl,ikv) = alb2sv(ikl,ikv) + 0.05 *(cld_sv(ikl,ikv)-0.5)*sicenh &
5245 ! #CZ& + dalbed * (1.-cld_SV(ikl,ikv)) &
5246  & + 0.
5247  alb3sv(ikl,ikv) = alb3sv(ikl,ikv) + 0.05 *(cld_sv(ikl,ikv)-0.5)*sicenh &
5248 ! #CZ& + dalbed * (1.-cld_SV(ikl,ikv)) &
5249  & + 0.
5250  albisv(ikl,ikv) = albisv(ikl,ikv) + 0.05 *(cld_sv(ikl,ikv)-0.5)*sicenh &
5251 ! #CZ& + dalbed * (1.-cld_SV(ikl,ikv)) &
5252  & + 0.
5253  END IF
5254 
5255 
5256 ! Integrated Snow/Ice/Soil Albedo: Minimum snow albedo = 40%
5257 ! ----------------------------------------------------------
5258 
5259  albedo_old = albisv(ikl,ikv)
5260 
5261  albisv(ikl,ikv) = max(albisv(ikl,ikv),0.400 * sicenh &
5262  & + albssv(ikl,ikv) *(1.0 - sicenh))
5263  alb1sv(ikl,ikv) = alb1sv(ikl,ikv) - 1.0/3.0 &! 33 %
5264  & * (albedo_old-albisv(ikl,ikv)) / so1dsv
5265  alb2sv(ikl,ikv) = alb2sv(ikl,ikv) - 1.0/3.0 &! 33 %
5266  & * (albedo_old-albisv(ikl,ikv)) / so2dsv
5267  alb3sv(ikl,ikv) = alb3sv(ikl,ikv) - 1.0/3.0 &! 33 %
5268  & * (albedo_old-albisv(ikl,ikv)) / so3dsv
5269 
5270 
5271 ! Integrated Snow/Ice/Soil Albedo: Maximum albedo = 99%
5272 ! -----------------------------------------------------
5273 
5274  albedo_old = albisv(ikl,ikv)
5275  albisv(ikl,ikv) = min(albisv(ikl,ikv),0.99)
5276  alb1sv(ikl,ikv) = alb1sv(ikl,ikv) - 1.0/3.0 &! 33 %
5277  & * (albedo_old-albisv(ikl,ikv)) / so1dsv
5278  alb2sv(ikl,ikv) = alb2sv(ikl,ikv) - 1.0/3.0 &! 33 %
5279  & * (albedo_old-albisv(ikl,ikv)) / so2dsv
5280  alb3sv(ikl,ikv) = alb3sv(ikl,ikv) - 1.0/3.0 &! 33 %
5281  & * (albedo_old-albisv(ikl,ikv)) / so3dsv
5282 
5283  alb1sv(ikl,ikv) = min(max(zer0,alb1sv(ikl,ikv)),albmax)
5284  alb2sv(ikl,ikv) = min(max(zer0,alb2sv(ikl,ikv)),albmax)
5285  alb3sv(ikl,ikv) = min(max(zer0,alb3sv(ikl,ikv)),albmax)
5286 
5287  END DO
5288  END DO
5289 
5290 
5291 ! Extinction Coefficient: Exponential Factor
5292 ! ==========================================
5293 
5294  DO ikl=1,kcolp
5295  DO ikv=1,mwp
5296  sext_1(ikl,ikv) = 1.
5297  sext_2(ikl,ikv) = 1.
5298  sext_3(ikl,ikv) = 1.
5299  sex_sv(ikl,ikv,nsnow+1) = 1.
5300 
5301  coalb1(ikl,ikv) = (1. -alb1sv(ikl,ikv))*so1dsv
5302  coalb2(ikl,ikv) = (1. -alb2sv(ikl,ikv))*so2dsv
5303  coalb3(ikl,ikv) = (1. -alb3sv(ikl,ikv))*so3dsv
5304  coalbm = coalb1(ikl,ikv) +coalb2(ikl,ikv) +coalb3(ikl,ikv)
5305  coalb1(ikl,ikv) = coalb1(ikl,ikv) /coalbm
5306  coalb2(ikl,ikv) = coalb2(ikl,ikv) /coalbm
5307  coalb3(ikl,ikv) = coalb3(ikl,ikv) /coalbm
5308  END DO
5309  END DO
5310 
5311  DO isn= nsnow,1,-1
5312  DO ikl=1,kcolp
5313  DO ikv=1,mwp
5314 
5315  signro = sign(un_1, rocdsv - ro__sv(ikl,ikv,isn))
5316  snowok = max(zer0,signro) ! Ice Density Threshold
5317 
5318  rofrez = 1.e-3 * ro__sv(ikl,ikv,isn) * (1.0-eta_sv(ikl,ikv,isn))
5319 
5320  opsqrt = sqrt(max(eps6,snopsv(ikl,ikv,isn)))
5321  exarg1 = snowok *1.e2 *max(sbeta1*rofrez/opsqrt,sbeta2)&
5322  & +(1.0-snowok) *sbeta5
5323  exarg2 = snowok *1.e2 *max(sbeta3*rofrez/opsqrt,sbeta4)&
5324  & +(1.0-snowok) *sbeta5
5325  exarg3 = snowok *1.e2 *sbeta5 &
5326  & +(1.0-snowok) *sbeta5
5327 
5328 ! Col de Porte Snow Extinction Coefficient
5329 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5330  IF (colprt.AND.totsol.gt.0.) THEN
5331  exarg1 = exarg1*(dr_1sn*dirsol &
5332  & +df_1sn*difsol*(1.-cld_sv(ikl,ikv)) &
5333  & +dfc1sn*difsol* cld_sv(ikl,ikv) ) &
5334  & /(dr_1sn*totsol)
5335  exarg2 = exarg2*(dr_2sn*dirsol &
5336  & +df_2sn*difsol*(1.-cld_sv(ikl,ikv)) &
5337  & +dfc2sn*difsol* cld_sv(ikl,ikv) ) &
5338  & /(dr_2sn*totsol)
5339  exarg3 = exarg3*(dr_3sn*dirsol &
5340  & +df_3sn*difsol*(1.-cld_sv(ikl,ikv)) &
5341  & +dfc3sn*difsol* cld_sv(ikl,ikv) ) &
5342  & /(dr_3sn*totsol)
5343  END IF
5344 
5345 
5346 ! Integrated Extinction of Solar Irradiance (Normalized Value)
5347 ! ============================================================
5348 
5349  sext_1(ikl,ikv) = sext_1(ikl,ikv) &
5350  & * exp(min(0.0,-exarg1 *dzsnsv(ikl,ikv,isn)))
5351  sign_0 = sign(un_1,epsn -sext_1(ikl,ikv))
5352  sext_0 = max(zer0,sign_0)*sext_1(ikl,ikv)
5353  sext_1(ikl,ikv) = sext_1(ikl,ikv) -sext_0
5354 
5355  sext_2(ikl,ikv) = sext_2(ikl,ikv) &
5356  & * exp(min(0.0,-exarg2 *dzsnsv(ikl,ikv,isn)))
5357  sign_0 = sign(un_1,epsn -sext_2(ikl,ikv))
5358  sext_0 = max(zer0,sign_0)*sext_2(ikl,ikv)
5359  sext_2(ikl,ikv) = sext_2(ikl,ikv) -sext_0
5360 
5361  sext_3(ikl,ikv) = sext_3(ikl,ikv) &
5362  & * exp(min(0.0,-exarg3 *dzsnsv(ikl,ikv,isn)))
5363  sign_0 = sign(un_1,epsn -sext_3(ikl,ikv))
5364  sext_0 = max(zer0,sign_0)*sext_3(ikl,ikv)
5365  sext_3(ikl,ikv) = sext_3(ikl,ikv) -sext_0
5366 
5367  sex_sv(ikl,ikv,isn) = coalb1(ikl,ikv) * sext_1(ikl,ikv) &
5368  & + coalb2(ikl,ikv) * sext_2(ikl,ikv) &
5369  & + coalb3(ikl,ikv) * sext_3(ikl,ikv)
5370  END DO
5371  END DO
5372  END DO
5373 
5374  DO isn=0,-nsoil,-1
5375  DO ikl=1,kcolp
5376  DO ikv=1,mwp
5377  sex_sv(ikl,ikv,isn) = 0.0
5378  END DO
5379  END DO
5380  END DO
5381 
5382 
5383 ! Albedo: IO
5384 ! ==========
5385 
5386 ! #va IF (.NOT.aw_opn) THEN
5387 ! #va aw_opn = .true.
5388 ! #va open(unit=46,status='unknown',file='SnOptP____.va')
5389 ! #va rewind( 46)
5390 ! #va END IF
5391 
5392 ! #va ikl,ikv=1
5393 ! #va write(46,460)daHost
5394 ! #va 460 format('---------------------------------+----+', &
5395 ! #va& '-------+-------+-------+-------+-------+-------+', &
5396 ! #va& '-------+-------+-------+', &
5397 ! #va& /,'Snow/Ice Pack ',a18,' | |', &
5398 ! #va& ' z [m] |0.3/0.8|0.8/1.5|1.5/2.8| Full |Opt[mm]|', &
5399 ! #va& ' G1 | G2 | ro |', &
5400 ! #va& /,'---------------------------------+----+', &
5401 ! #va& '-------+-------+-------+-------+-------+-------+', &
5402 ! #va& '-------+-------+-------+')
5403 ! ______________________________________________________________
5404 ! #va write(46,461) SIce_H, &
5405 ! #va& alb1sv(ikl,ikv),alb2sv(ikl,ikv),alb3sv(ikl,ikv),&
5406 ! #va& albisv(ikl,ikv)
5407 ! #va 461 format('Integrated Snow/Ice/Soil Albedo |', &
5408 ! #va& 3x,' |', f6.3,' |' ,4(f6.3,' |'), 6x ,' |', &
5409 ! #va& 3( 6x ,' |'))
5410 ! ______________________________________________________________
5411 ! #va write(46,462)ispiSV(ikl,ikv),a_SII1,a_SII2,a_SII3,albSII
5412 ! #va 462 format('Integrated Snow/Ice Albedo |', &
5413 ! #va& i3,' |', 6x ,' |' ,4(f6.3,' |'), 6x ,' |', &
5414 ! #va& 3( 6x ,' |'))
5415 ! ______________________________________________________________
5416 ! #va write(46,463) rusnSV(ikl,ikv), albWIc, &
5417 ! #va& SWS_SV(ikl,ikv)
5418 ! #va 463 format('Integrated Water/Bare Ice Albedo |', &
5419 ! #va& 3x,' |', f6.3,'w|' ,3( 6x, ' |'), &
5420 ! #va& f6.3,' |' ,f6.3,' |', &
5421 ! #va& 3( 6x ,' |'))
5422 ! ______________________________________________________________
5423 ! #va write(46,465)isn1 ,zzsnsv(ikl,ikv,isn1), &
5424 ! #va& albIc1,albIc2,albIc3,albIce, &
5425 ! #va& 1.e3*SnOpSV(ikl,ikv,max(1,isnoSV(ikl,ikv)-1)), &
5426 ! #va& G1snSV(ikl,ikv,max(1,isnoSV(ikl,ikv)-1)), &
5427 ! #va& G2snSV(ikl,ikv,max(1,isnoSV(ikl,ikv)-1)), &
5428 ! #va& ro__SV(ikl,ikv,max(1,isnoSV(ikl,ikv)-1))&
5429 ! #va& *(1. - eta_SV(ikl,ikv,max(1,isnoSV(ikl,ikv)-1)))
5430 ! #va 465 format('Surficial Ice Lense |', &
5431 ! #va& i3,' |', (f6.3,'i|'),4(f6.3,' |'),f6.3,' |', &
5432 ! #va& 3(f6.1,' |'))
5433 ! ______________________________________________________________
5434 ! #va write(46,466)isnoSV(ikl,ikv),zzsnsv(ikl,ikv,isnoSV(ikl,ikv)),&
5435 ! #va& albSn1,albSn2,albSn3,albSno, &
5436 ! #va& 1.e3*SnOpSV(ikl,ikv,isnoSV(ikl,ikv)), &
5437 ! #va& G1snSV(ikl,ikv,isnoSV(ikl,ikv)), &
5438 ! #va& G2snSV(ikl,ikv,isnoSV(ikl,ikv)), &
5439 ! #va& ro__SV(ikl,ikv,isnoSV(ikl,ikv)) &
5440 ! #va& *(1. - eta_SV(ikl,ikv,isnoSV(ikl,ikv)))
5441 ! #va 466 format('Uppermost Effective Snow Layer |', &
5442 ! #va& i3,' |', (f6.3,'*|'),4(f6.3,' |'),f6.3,' |', &
5443 ! #va& 3(f6.1,' |'))
5444 
5445 
5446 
5447 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5448 ! !
5449 ! DE-ALLOCATION !
5450 ! ============= !
5451 
5452  IF (flagdalloc) THEN !
5453 
5454  deallocate ( coalb1 ) ! weighted Coalbedo, Vis.
5455  deallocate ( coalb2 ) ! weighted Coalbedo, nIR 1
5456  deallocate ( coalb3 ) ! weighted Coalbedo, nIR 2
5457  deallocate ( sext_1 ) ! Extinction Coeff., Vis.
5458  deallocate ( sext_2 ) ! Extinction Coeff., nIR 1
5459  deallocate ( sext_3 ) ! Extinction Coeff., nIR 2
5460  deallocate ( snopsv ) ! Snow Grain optical Size
5461 
5462  deallocate ( alb1sv ) !
5463  deallocate ( alb2sv ) !
5464  deallocate ( alb3sv ) !
5465 
5466  END IF !
5467 ! !
5468 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5469 
5470 
5471  return
5472  end subroutine snoptp
5473 
5474 
5475 
5476  subroutine vgoptp
5478 !--------------------------------------------------------------------------+
5479 ! MAR/SISVAT VgOptP Wed 26-Jun-2013 MAR |
5480 ! SubRoutine VgOptP computes the Canopy optical Properties |
5481 ! |
5482 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
5483 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
5484 ! |
5485 !--------------------------------------------------------------------------+
5486 ! |
5487 ! PARAMETERS: kcolv: Total Number of columns = |
5488 ! ^^^^^^^^^^ = Total Number of continental Grid Boxes |
5489 ! X Number of Mosaic Cell per Grid Box |
5490 ! |
5491 ! INPUT: ivgtSV = 0,...,12: Vegetation Type |
5492 ! ^^^^^ 0: Water, Solid or Liquid |
5493 ! |
5494 ! INPUT: coszSV : Cosine of the Sun Zenithal Distance [-] |
5495 ! ^^^^^ sol_SV : Surface Downward Solar Radiation [W/m2] |
5496 ! snCaSV : Canopy Snow Thickness [mm w.e.] |
5497 ! |
5498 ! LAI_sv : Leaf Area Index (snow included) [-] |
5499 ! glf_sv : Green Leaf Fraction of NOT fallen Leaves [-] |
5500 ! albisv : Snow/Ice/Water/Soil Integrated Albedo [-] |
5501 ! |
5502 ! OUTPUT: alb_SV : Surface-Canopy Albedo [-] |
5503 ! ^^^^^^ SoCasv : Absorbed Solar Radiation by Canopy (Normaliz)[-] |
5504 ! SoSosv : Absorbed Solar Radiation by Surfac (Normaliz)[-] |
5505 ! LAIesv : Effective Leaf Area Index for Transpiration [-] |
5506 ! |
5507 ! Internal Variables: Normalized Values: |
5508 ! ^^^^^^^^^^^^^^^^^^ |
5509 ! u0_Vis : Upward Visible Radiation at Top Canopy [-] |
5510 ! absg_V : Absorbed Visible Radiation by the Ground [-] |
5511 ! absv_V : Absorbed Visible Radiation by the Canopy [-] |
5512 ! u0_nIR : Upward Near IR Radiation at Top Canopy [-] |
5513 ! absgnI : Absorbed Near IR Radiation by the Ground [-] |
5514 ! absv_V : Absorbed Near IR Radiation by the Canopy [-] |
5515 ! |
5516 ! REFERENCE: De Ridder, 1997, unpublished thesis, chapter 2 (DR97,2) |
5517 ! ^^^^^^^^^ |
5518 ! |
5519 ! ASSUMPTIONS: Leaf Inclination Index chi_l (eqn2.49 DR97) set to zero |
5520 ! ^^^^^^^^^^^ for all vegetation types |
5521 ! Radiation Fluxes are normalized |
5522 ! with respect to incoming solar radiation (=I0+D0) |
5523 ! |
5524 !--------------------------------------------------------------------------+
5525 
5526 
5527 ! Global Variables
5528 ! =================
5529 
5530  use mod_real
5531  use mod_phy____dat
5532  use mod_phy____grd
5533  use mod_sisvat_grd
5534 
5535 
5536 
5537 ! General Variables
5538 ! =================
5539 
5540  use mod_sisvat_trv
5541  use mod_sisvat_kkl
5542  use mod_sisvat_loc
5543 
5544 
5545 
5546 ! Internal Variables
5547 ! ==================
5548 
5549  use mod_sisvatlvgo
5550 
5551 
5552  IMPLICIT NONE
5553 
5554 
5555  integer :: ikl,ikv ,kri
5556 
5557  real(kind=real8) :: exdRad,k_drad
5558  real(kind=real8) :: e_prad,e1pRad
5559  real(kind=real8) :: zv_fac,zv1fac,deadLF
5560  real(kind=real8) :: T_Rad0,A_Rad0
5561  real(kind=real8) :: r0_Rad,t0_Rad,nu_Rad
5562  real(kind=real8) :: Tr_Rad,Re_Rad,r__Rad,t__Rad,t1_Rad
5563  real(kind=real8) :: arggam, gamma
5564  real(kind=real8) :: gammaL
5565  real(kind=real8) :: denSig,Sig__c
5566  real(kind=real8) :: DDifH1,DDifC1
5567  real(kind=real8) :: DDifH2,DDifC2
5568  real(kind=real8) :: denS_s,denS_a,den_c1,DDif_L
5569  real(kind=real8) :: u0_Vis,absg_V,absv_V
5570  real(kind=real8) :: u0_nIR,absgnI,absvnI
5571  real(kind=real8) :: argexg,argexk
5572  real(kind=real8) :: residu,d_DDif,dDDifs,dDDifa
5573 
5574 
5575 
5576 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5577 ! !
5578 ! ALLOCATION !
5579 ! ========== !
5580 
5581  IF (it_run.EQ.1 .OR. flagdalloc) THEN !
5582 
5583  allocate ( k___sv(kcolp,mwp) )
5584  allocate ( a0__sv(kcolp,mwp) )
5585  allocate ( gamasv(kcolp,mwp) )
5586  allocate ( sigcsv(kcolp,mwp) )
5587  allocate ( c1__sv(kcolp,mwp) )
5588  allocate ( c2__sv(kcolp,mwp) )
5589  allocate ( crilai(kcolp,mwp) )
5590 
5591  END IF !
5592 ! !
5593 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5594 
5595 
5596 
5597 ! General Parameters, Solar Radiation Absorption
5598 ! ==============================================
5599 
5600  DO ikl=1,kcolp
5601  DO ikv=1,mwp
5602 
5603  k_drad = 0.5 /max(coszsv(ikl,ikv),eps6) ! absorbed irradiance fraction
5604  e_prad = 2.5 * coszsv(ikl,ikv) ! exponential argument,
5605  ! V/nIR radiation partitioning,
5606  ! DR97, 2, eqn (2.53) & (2.54)
5607  exdrad = exp(-min(k_drad*lai_sv(ikl,ikv),ea_max)) ! exponential, Irradi. Absorpt.
5608  e1prad = 1.-exp(- e_prad ) ! exponential, V/nIR Rad. Part.
5609 
5610  ivg = ivgtsv(ikl,ikv) ! Vegetation Type
5611  zv_fac = min( sncasv(ikl,ikv)/sncamx &! Contribution of Snow to Leaf
5612  & , un_1) ! Reflectivity and Transmissiv.
5613  zv1fac = 1. - zv_fac !
5614  deadlf = 1. - glf_sv(ikl,ikv) ! Dead Leaf Fraction
5615 
5616 
5617 ! Visible Part of the Solar Radiation Spectrum (V, 0.4--0.7mi.m)
5618 ! ================================================================
5619 
5620  a_rad0 = 0.25 + 0.697 * e1prad ! Absorbed Vis. Radiation
5621  t_rad0 = 1. - a_rad0 ! Transmitted Vis Radiation
5622 
5623 ! Reflectivity, Transmissivity
5624 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5625  re_rad = glf_sv(ikl,ikv) *revisl(ivg) &
5626  & + deadlf *revisd(ivg)
5627  tr_rad = glf_sv(ikl,ikv) *trvisl(ivg) &
5628  & + deadlf *trvisd(ivg)
5629 
5630 ! Adaptation to Snow
5631 ! ^^^^^^^^^^^^^^^^^^
5632  re_rad = zv1fac *re_rad + zv_fac *reviss
5633  tr_rad = zv1fac *tr_rad + zv_fac *trviss
5634 
5635 ! Scattering /DR97, 2, eqn (2.26) and (2.27) ! Diffuse Radiation:
5636 ! ^^^^^^^^^^ ! ^^^^^^^^^^^^^^^^^^
5637  r__rad = (2. *re_rad + tr_rad) / 3. ! Upw. Scatter.Fract.
5638  t__rad = ( re_rad + 2. *tr_rad) / 3. ! Downw.Scatter.Fract.
5639 
5640  t1_rad = 1. -t__rad !
5641  arggam = t1_rad*t1_rad-r__rad*r__rad !
5642  arggam = max(arggam,zer0) !
5643  gamma = sqrt(arggam) ! eqn (2.39)
5644  gammal = min( gamma*lai_sv(ikl,ikv),40.0) !
5645  ddifh1 = exp( gammal ) ! Downw.Diffus.Solut.1
5646  ddifh2 = exp(-gammal ) ! Downw.Diffus.Solut.2
5647 ! REMARK: These 2 contributions are zero in case of 0 Reflectivity
5648 ! ^^^^^^
5649 
5650 ! Scattering /DR97, 2, eqn (2.19) and (2.20) ! Direct Radiation:
5651 ! ^^^^^^^^^^ ! ^^^^^^^^^^^^^^^^^^
5652  r0_rad = 0.5 *((re_rad+tr_rad) *k_drad &! Upw. Scatter.Fract.
5653  & +(re_rad-tr_rad) / 3.) !
5654  t0_rad = 0.5 *((re_rad+tr_rad) *k_drad &! Downw.Scatter.Fract.
5655  & -(re_rad-tr_rad) / 3.) !
5656 
5657  nu_rad = t1_rad-r__rad*albisv(ikl,ikv) ! nu coeff., eqn 2.43
5658  den_c1 = gamma*(ddifh1+ddifh2) &! eqn (2.43) Denomin.
5659  & +nu_rad*(ddifh1-ddifh2) !(Constant for DDifH1)
5660 
5661  densig = gamma*gamma - k_drad*k_drad ! eqn (2.40) Denomin.
5662  dens_s = sign(un_1,densig) !
5663  dens_a = abs( densig) !
5664  densig = max(eps6,dens_a) * dens_s !
5665  sig__c = (r__rad* r0_rad &! sigma_c, eqn (2.40)
5666  & +t0_rad*(k_drad+t1_rad)) / densig !
5667 
5668  ddifc1 = ((gamma-nu_rad)*(t_rad0-sig__c*a_rad0)*ddifh2 &
5669  & +((k_drad-nu_rad)* sig__c &
5670  & +t0_rad+r__rad * albisv(ikl,ikv)) *a_rad0 *exdrad)&
5671  & /max(den_c1,eps6)
5672  ddifc2 = t_rad0 - ddifc1-sig__c*a_rad0
5673 
5674 ! Visible Diffuse Fluxes
5675 ! ^^^^^^^^^^^^^^^^^^^^^^
5676  ddif_l = ddifc1*ddifh1 + ddifc2*ddifh2 &! DOWNward,
5677  & + sig__c*a_rad0 *exdrad ! Canopy Basis
5678  u0_vis = ((gamma+t1_rad)*ddifc1 &! UPward
5679  & -(gamma-t1_rad)*ddifc2 &! Canopy Top
5680  & -((k_drad-t1_rad)*sig__c &!
5681  & +t0_rad )*a_rad0) &!
5682  & / max(r__rad,eps6) !
5683  u0_vis = min(0.99,max(eps6,u0_vis)) ! ERROR
5684  absg_v = (1.-albisv(ikl,ikv))*(a_rad0*exdrad &! Ground Absorption
5685  & +ddif_l ) !
5686  absv_v = (1.-u0_vis )- absg_v ! Veget. Absorption
5687 
5688 ! Parameters for Computing Effective LAI for Transpiration
5689 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5690  gamasv(ikl,ikv) = gamma
5691  c1__sv(ikl,ikv) = ddifc1
5692  c2__sv(ikl,ikv) = ddifc2
5693  sigcsv(ikl,ikv) = sig__c
5694  k___sv(ikl,ikv) = k_drad
5695  a0__sv(ikl,ikv) = a_rad0
5696 
5697 
5698 ! Near-IR Part of the Solar Radiation Spectrum (nIR, 0.7--2.8mi.m)
5699 ! ================================================================
5700 
5701  a_rad0 = 0.80 + 0.185 * e1prad ! Absorbed nIR. Radiation
5702  t_rad0 = 1. - a_rad0 ! Transmitted nIR Radiation
5703 
5704 ! Reflectivity, Transmissivity
5705 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5706  re_rad = glf_sv(ikl,ikv) *renirl(ivg) &
5707  & + deadlf *renird(ivg)
5708  tr_rad = glf_sv(ikl,ikv) *trnirl(ivg) &
5709  & + deadlf *trnird(ivg)
5710 
5711 ! Adaptation to Snow
5712 ! ^^^^^^^^^^^^^^^^^^
5713  re_rad = zv1fac *re_rad + zv_fac *renirs
5714  tr_rad = zv1fac *tr_rad + zv_fac *trnirs
5715 
5716 ! Scattering /DR97, 2, eqn (2.26) and (2.27) ! Diffuse Radiation:
5717 ! ^^^^^^^^^^ ! ^^^^^^^^^^^^^^^^^^
5718  r__rad = (2. *re_rad + tr_rad) / 3. ! Upw. Scatter.Fract.
5719  t__rad = ( re_rad + 2. *tr_rad) / 3. ! Downw.Scatter.Fract.
5720 
5721  t1_rad = 1. -t__rad !
5722  arggam = t1_rad*t1_rad-r__rad*r__rad !
5723  arggam = max(arggam,zer0) !
5724  gamma = sqrt(arggam) ! eqn (2.39)
5725  ddifh1 = exp( gamma*lai_sv(ikl,ikv)) ! Downw.Diffus.Solut.1
5726  ddifh2 = exp(-gamma*lai_sv(ikl,ikv)) ! Downw.Diffus.Solut.2
5727 ! REMARK: These 2 contributions are zero in case of 0 Reflectivity
5728 ! ^^^^^^
5729 
5730 ! Scattering /DR97, 2, eqn (2.19) and (2.20) ! Direct Radiation:
5731 ! ^^^^^^^^^^ ! ^^^^^^^^^^^^^^^^^^
5732  r0_rad = 0.5 *((re_rad+tr_rad) *k_drad &! Upw. Scatter.Fract.
5733  & +(re_rad-tr_rad) / 3.) !
5734  t0_rad = 0.5 *((re_rad+tr_rad) *k_drad &! Downw.Scatter.Fract.
5735  & -(re_rad-tr_rad) / 3.) !
5736 
5737  nu_rad = t1_rad-r__rad*albisv(ikl,ikv) ! nu coeff., eqn 2.43
5738  den_c1 = gamma*(ddifh1+ddifh2) &! eqn (2.43) Denomin.
5739  & +nu_rad*(ddifh1-ddifh2) !(Constant for DDifH1)
5740 
5741  densig = gamma*gamma - k_drad*k_drad ! eqn (2.40) Denomin.
5742  dens_s = sign(un_1,densig) !
5743  dens_a = abs( densig) !
5744  densig = max(eps6,dens_a) * dens_s !
5745  sig__c = (r__rad* r0_rad &! sigma_c, eqn (2.40)
5746  & +t0_rad*(k_drad+t1_rad)) / densig !
5747 
5748  ddifc1 = ((gamma-nu_rad)*(t_rad0-sig__c*a_rad0)*ddifh2 &
5749  & +((k_drad-nu_rad)* sig__c &
5750  & +t0_rad+r__rad * albisv(ikl,ikv)) *a_rad0 *exdrad)&
5751  & /max(den_c1,eps6)
5752  ddifc2 = t_rad0 - ddifc1-sig__c*a_rad0
5753 
5754 ! Near IR Diffuse Fluxes
5755 ! ^^^^^^^^^^^^^^^^^^^^^^
5756  ddif_l = ddifc1*ddifh1 + ddifc2*ddifh2 &! DOWNward,
5757  & + sig__c*a_rad0 *exdrad ! Canopy Basis
5758  u0_nir = ((gamma+t1_rad)*ddifc1 &! UPward
5759  & -(gamma-t1_rad)*ddifc2 &! Canopy Top
5760  & -((k_drad-t1_rad)*sig__c &!
5761  & +t0_rad )*a_rad0) &!
5762  & / max(r__rad,eps6) !
5763  u0_nir = min(0.99,max(eps6,u0_nir)) ! ERROR
5764  absgni = (1.-albisv(ikl,ikv))*(a_rad0*exdrad &! Ground Absorption
5765  & +ddif_l ) !
5766  absvni = (1.-u0_nir )- absgni ! Veget. Absorption
5767 
5768 
5769 ! Surface-Canopy Albedo and Normalized Solar Radiation Absorption
5770 ! ===============================================================
5771 
5772  alb_sv(ikl,ikv) = (u0_vis+u0_nir)*0.5d0
5773  socasv(ikl,ikv) = (absv_v+absvni)*0.5d0
5774  sososv(ikl,ikv) = (absg_v+absgni)*0.5d0
5775 
5776  END DO
5777  END DO
5778 
5779 
5780 ! Effective LAI for Transpiration
5781 ! ===============================
5782 
5783  DO ikl=1,kcolp
5784  DO ikv=1,mwp
5785  crilai(ikl,ikv) = 2. ! LAI for which D0_Vis > 20W/m2
5786  ! DR97, 2, eqn (2.57)
5787  END DO
5788  END DO
5789 
5790  DO kri=1,10
5791  DO ikl=1,kcolp
5792  DO ikv=1,mwp
5793 
5794  argexg = min(crilai(ikl,ikv)*gamasv(ikl,ikv), ea_max)
5795  argexk = min(crilai(ikl,ikv)*k___sv(ikl,ikv), ea_max)
5796  residu = c1__sv(ikl,ikv) *exp( argexg) &
5797  & +c2__sv(ikl,ikv) *exp(-argexg) &
5798  & +a0__sv(ikl,ikv)*gamasv(ikl,ikv)*exp(-argexk) &
5799  & -cristr /max(sol_sv(ikl,ikv), eps6)
5800 
5801  d_ddif = c1__sv(ikl,ikv)*gamasv(ikl,ikv)*exp( argexg) &
5802  & -c2__sv(ikl,ikv)*gamasv(ikl,ikv)*exp(-argexg) &
5803  & -a0__sv(ikl,ikv)*k___sv(ikl,ikv)*exp(-argexk)
5804  dddifs = sign(un_1,d_ddif)
5805  dddifa = abs( d_ddif)
5806  d_ddif = max(eps6,dddifa) * dddifs
5807 
5808  crilai(ikl,ikv) = crilai(ikl,ikv)-residu/d_ddif
5809  crilai(ikl,ikv) = max(crilai(ikl,ikv),zer0 )
5810  crilai(ikl,ikv) = min(crilai(ikl,ikv),lai_sv(ikl,ikv))
5811 
5812  END DO
5813  END DO
5814  END DO
5815 
5816  DO ikl=1,kcolp
5817  DO ikv=1,mwp
5818  laiesv(ikl,ikv) = crilai(ikl,ikv) +(exp(-min(k___sv(ikl,ikv)*crilai(ikl,ikv),ea_max)) &
5819  & -exp(-min(k___sv(ikl,ikv)*lai_sv(ikl,ikv),ea_max)))&
5820  & / k___sv(ikl,ikv)
5821  END DO
5822  END DO
5823 
5824 
5825 
5826 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5827 ! !
5828 ! DE-ALLOCATION !
5829 ! ============= !
5830 
5831  IF (flagdalloc) THEN !
5832 
5833  deallocate ( k___sv )
5834  deallocate ( a0__sv )
5835  deallocate ( gamasv )
5836  deallocate ( sigcsv )
5837  deallocate ( c1__sv )
5838  deallocate ( c2__sv )
5839  deallocate ( crilai )
5840 
5841  END IF !
5842 ! !
5843 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5844 
5845 
5846  return
5847  end subroutine vgoptp
5848 
5849 
5850 
5851  subroutine colprt_sbl
5853 !--------------------------------------------------------------------------+
5854 ! MAR ColPrt_SBL Wed 26-Jun-2013 MAR |
5855 ! SubRoutine ColPrt_SBL generates Surface Boundary Layers Properties |
5856 ! |
5857 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
5858 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
5859 ! |
5860 !--------------------------------------------------------------------------+
5861 ! |
5862 ! PARAMETERS: kcolv: Total Number of columns |
5863 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
5864 ! X Number of Mosaic Cell per grid box |
5865 ! |
5866 ! INPUT: za__SV : Surface Boundary Layer (SBL) Height [m] |
5867 ! ^^^^^ VV__SV :(SBL Top) Wind Velocity [m/s] |
5868 ! TaT_SV : SBL Top Temperature [K] |
5869 ! rhT_SV : SBL Top Air Density [kg/m3] |
5870 ! uqs_SV : Specific Humidity Turbulent Flux [m/s] |
5871 ! Tsrfsv : Surface Temperature [K] |
5872 ! |
5873 ! INPUT / LMO_SV : Monin-Obukhov Scale [m] |
5874 ! OUTPUT: us__SV : Friction Velocity [m/s] |
5875 ! ^^^^^^ uts_SV : Temperature Turbulent Flux [K.m/s] |
5876 ! |
5877 ! OUTPUT: ram_sv : Aerodynamic Resistance for Momentum [s/m] |
5878 ! ^^^^^^ rah_sv : Aerodynamic Resistance for Heat [s/m] |
5879 ! |
5880 !--------------------------------------------------------------------------+
5881 
5882 
5883 ! Global Variables
5884 ! =================
5885 
5886  use mod_real
5887  use mod_phy____dat
5888  use mod_phy____grd
5889  use mod_sisvat_grd
5890 
5891 
5892 
5893 ! General Variables
5894 ! =================
5895 
5896  use mod_sisvat_dat
5897  use mod_sisvat_kkl
5898  use mod_sisvat_loc
5899 
5900 
5901 
5902  IMPLICIT NONE
5903 
5904 
5905 
5906 ! Internal Variables
5907 ! ==================
5908 
5909  integer :: ikl,ikv ,ist ,ist__s ,ist__w
5910  real(kind=real8) :: d_TaTs ,CD_m
5911  real(kind=real8) :: uustar ,thstar ,qqstar
5912  real(kind=real8) :: thstarv,thstars,thstara
5913  real(kind=real8) :: zeta ,zeta_S ,zeta_A
5914  real(kind=real8) :: fCdCdP = 3.09 ! Drag Coefficient Factor, Col de Porte
5915  real(kind=real8) :: Cd_min = 1.05 ! Drag Coefficient Minimum Col de Porte
5916  real(kind=real8) :: cCdUns = -5.00 ! Drag Coefficient Correction for Unstability
5917  real(kind=real8) :: RapCm0
5918 
5919 
5920 ! Aerodynamic Resistances
5921 ! =======================
5922 
5923  DO ikl=1,kcolp
5924  DO ikv=1,mwp
5925 
5926 ! Surface Type
5927 ! ~~~~~~~~~~~~
5928  ist = isotsv(ikl,ikv) ! Soil Type
5929  ist__s = min(ist, 1) ! 1 => Soil
5930  ist__w = 1 - ist__s ! 1 => Water Body
5931 
5932 ! Drag and Aerodynamic Resistance
5933 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5934  d_tats = tat_sv(ikl,ikv)-tsrfsv(ikl,ikv)
5935  rapcm0 = log(za__sv(ikl,ikv)/z0mdsv(4 )) &
5936  & / log(za__sv(ikl,ikv)/z0mdsv(ivgtsv(ikl,ikv)))
5937  rapcm0 = rapcm0 *rapcm0 ! Neutral Drag Coefficient
5938  ! Vegetation Correction
5939  cd_m = max(cd_min*rapcm0, &! Actual Drag Coefficient
5940  & fcdcdp*rapcm0*vv__sv(ikl,ikv) ) &! for Momentum
5941  & *(1.+max(min(d_tats,zer0),ccduns) &! Unstability Correction
5942  & /ccduns ) &!
5943  & * 1.5 !
5944  ram_sv(ikl,ikv) = rht_sv(ikl,ikv) *cpdair/cd_m !
5945  rah_sv(ikl,ikv) = ram_sv(ikl,ikv) !
5946 
5947 
5948 ! Turbulent Scales
5949 ! ================
5950 
5951 ! Friction Velocity u*
5952 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5953  uustar = vv__sv(ikl,ikv) / ram_sv(ikl,ikv)
5954  us__sv(ikl,ikv) = sqrt(uustar)
5955 
5956 ! Real Temperature Turbulent Scale theta*
5957 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5958  uts_sv(ikl,ikv) = - d_tats / rah_sv(ikl,ikv)
5959  thstar = uts_sv(ikl,ikv) / us__sv(ikl,ikv)
5960 
5961 ! Specific Humidity Turbulent Scale qq*
5962 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5963  qqstar = uqs_sv(ikl,ikv) / us__sv(ikl,ikv)
5964 
5965 ! Virtual Temperature Turbulent Scale thetav*
5966 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5967  thstarv = thstar + tat_sv(ikl,ikv) *(0.608*qqstar)
5968  thstars = sign(un_1,thstarv)
5969  thstara = abs( thstarv)
5970  thstarv = max(eps6,thstara) *thstars
5971 
5972 ! Monin Obukhov Scale Height
5973 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~
5974  lmo_sv(ikl,ikv) = tat_sv(ikl,ikv) * uustar &
5975  & /(vonkrm * grav_f * thstarv)
5976  zeta = za__sv(ikl,ikv) / lmo_sv(ikl,ikv)
5977  zeta_s = sign(un_1 ,zeta)
5978  zeta_a = abs( zeta)
5979  zeta = zeta_s * max(eps6 ,zeta_a)
5980  lmo_sv(ikl,ikv) = za__sv(ikl,ikv) / zeta
5981 
5982  END DO
5983  END DO
5984 
5985 
5986  return
5987  end subroutine colprt_sbl
5988 
5989 
5990 
5991  subroutine sisvatesbl
5993 !--------------------------------------------------------------------------+
5994 ! MAR SISVATeSBL Wed 26-Jun-2013 MAR |
5995 ! SubRoutine SISVATeSBL generates Surface Boundary Layers Properties |
5996 ! |
5997 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
5998 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
5999 ! |
6000 !--------------------------------------------------------------------------+
6001 ! |
6002 ! PARAMETERS: kcolv: Total Number of columns |
6003 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
6004 ! X Number of Mosaic Cell per grid box |
6005 ! |
6006 ! INPUT: za__SV : Surface Boundary Layer (SBL) Height [m] |
6007 ! ^^^^^ VV__SV :(SBL Top) Wind Velocity [m/s] |
6008 ! TaT_SV : SBL Top Temperature [K] |
6009 ! qsnoSV : SBL Mean Snow Content [kg/kg] |
6010 ! uqs_SV : Specific Humidity Turbulent Flux [m/s] |
6011 ! usthSV : Blowing Snow Erosion Threshold [m/s] |
6012 ! Z0m_SV : Momentum Roughness Length [m] |
6013 ! Z0h_SV : Heat Roughness Length [m] |
6014 ! Tsrfsv : Surface Temperature [K] |
6015 ! sqrCm0 : Contribution of Z0m to Neutral Drag Coefficient |
6016 ! sqrCh0 : Contribution of Z0h to Neutral Drag Coefficient |
6017 ! |
6018 ! INPUT / LMO_SV : Monin-Obukhov Scale [m] |
6019 ! OUTPUT: us__SV : Friction Velocity [m/s] |
6020 ! ^^^^^^ uts_SV : Temperature Turbulent Flux [K.m/s] |
6021 ! uss_SV : Blowing Snow Turbulent Flux [m/s] |
6022 ! |
6023 ! OUTPUT: hSalSV : Saltating Layer Height [m] |
6024 ! ^^^^^^ qSalSV : Saltating Snow Concentration [kg/kg] |
6025 ! ram_sv : Aerodynamic Resistance for Momentum [s/m] |
6026 ! rah_sv : Aerodynamic Resistance for Heat [s/m] |
6027 ! |
6028 ! |
6029 ! Preprocessing Option: STANDARD |
6030 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ |
6031 ! #AE: TURBULENCE: Aerosols Erosion / Turbulent Diffusion Coeff. |
6032 ! |
6033 ! #AW TURBULENCE: Wind Time Mean (BOX Moving Average) |
6034 ! #AH TURBULENCE: Ta-T Time Mean (BOX Moving Average) |
6035 ! |
6036 ! |
6037 ! Preprocessing Option: |
6038 ! ^^^^^^^^^^^^^^^^^^^^^ |
6039 ! #ZX TURBULENCE: Strong Stability Limit (King et al. 1996) |
6040 ! #zx TURBULENCE: Strong Stability Limit (Mahalov et al. 2004) |
6041 ! #AX TURBULENCE: recurrence |
6042 ! |
6043 ! |
6044 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
6045 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
6046 ! FILE | CONTENT |
6047 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
6048 ! # stdout | #ss: OUTPUT of Blowing Snow Variables |
6049 ! | unit 6, SubRoutine SISVATeSBL **ONLY** |
6050 !--------------------------------------------------------------------------+
6051 
6052 
6053 ! Global Variables
6054 ! =================
6055 
6056  use mod_real
6057  use mod_phy____dat
6058  use mod_phy____grd
6059  use mod_sisvat_grd
6060 
6061 
6062 
6063 ! General Variables
6064 ! =================
6065 
6066  use mod_sisvat_dat
6067  use mod_sisvat_kkl
6068  use mod_sisvat_loc
6069  use mod_sisvat_ctr
6070 ! #AW use Mod_SISVAT_xAW
6071 ! #AH use Mod_SISVAT_xAH
6072  use mod_sisvatlsbl
6073 
6074 
6075  IMPLICIT NONE
6076 
6077 
6078 ! Internal Variables
6079 ! ==================
6080 
6081 ! V, dT(a-s) Time Moving Averages
6082 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6083  integer :: ikl,ikv ,icount
6084 ! #AE integer :: nit = 5 ! us(is0,uth) recursivity: Nb Iterations
6085 ! #AE integer :: iit
6086 
6087  real(kind=real8) :: VVa_OK ! effective SBL wind speed
6088  real(kind=real8) :: Theta0 = 288.0 ! Potential Reference Temperature
6089 
6090 ! real(kind=real8) :: LMOsgn ! Monin-Obukhov Scale Sign
6091 ! real(kind=real8) :: LMOabs ! Monin-Obukhov Scale Abs.Value
6092 
6093  real(kind=real8) :: uustar,thstar !
6094  real(kind=real8) :: qqstar,ssstar !
6095  real(kind=real8) :: thstarv,thstars !
6096  real(kind=real8) :: thstara !
6097  real(kind=real8) :: zetam ,zetah !
6098  real(kind=real8) :: zeta0m,zeta0h !
6099  real(kind=real8) :: psim_s,xpsimi !
6100  real(kind=real8) :: psim_i,psim_z !
6101 ! #AE real(kind=real8) :: psis_s,psis_z !
6102 ! #AE real(kind=real8) :: psis_0 !
6103  real(kind=real8) :: psih_s,xpsihi !
6104  real(kind=real8) :: psih_i,psih_z !
6105  real(kind=real8) :: psim_0,psih_0 !
6106  real(kind=real8) :: dustar,u0star !
6107 
6108  real(kind=real8) :: sss__F,sss__N !
6109  real(kind=real8) :: usuth0 !
6110 ! #AE real(kind=real8) :: dusuth,signus !
6111 ! #AE real(kind=real8) :: sss__K,sss__G !
6112 ! #AE real(kind=real8) :: us_127,us_227 !
6113 ! #AE real(kind=real8) :: us_327,us_427 !
6114 ! #AE real(kind=real8) :: us_527 !
6115 
6116  real(kind=real8) :: stab_s !
6117  real(kind=real8) :: zetMAX = 1.e6 ! Strong Stability Limit
6118  real(kind=real8) :: coef_m = 20. ! Stabil.Funct.for Moment.: unstab.coef.
6119  real(kind=real8) :: coef_h = 15. ! Stabil.Funct.for Heat: unstab.coef.
6120 ! #AE real(kind=real8) :: SblPom = 1.27 ! Lower Boundary Height Parameter for Suspension
6121  ! Pommeroy, Gray and Landine 1993, J. Hydrology, 144(8) p.169
6122 ! real(kind=real8) :: fac_Ri !
6123 ! real(kind=real8) :: Kz_vun !
6124 
6125 ! OUTPUT of Snow Erosion Turbulence
6126 ! #b1 real(kind=real8) :: W_pLMO ! Pseudo Obukhov Length (WRITE)
6127 ! #b1 real(kind=real8) :: W_psim ! Pseudo psim(z) (WRITE)
6128 
6129 ! OUTPUT of Snow Erosion Turbulence (2)
6130 ! #b2 real(kind=real8) :: W_NUs1 ! Contrib to U* numerat.1(WRITE)
6131 ! #b2 real(kind=real8) :: W_NUs2 ! Contrib to U* numerat.2(WRITE)
6132 ! #b2 real(kind=real8) :: W_NUs3 ! Contrib to U* numerat.3(WRITE)
6133 ! #b2 real(kind=real8) :: W_DUs1 ! Contrib to U* denomin.1(WRITE)
6134 ! #b2 real(kind=real8) :: W_DUs2 ! Contrib to U* denomin.2(WRITE)
6135 
6136 
6137 
6138 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6139 ! !
6140 ! ALLOCATION !
6141 ! ========== !
6142 
6143  IF (it_run.EQ.1 .OR. flagdalloc) THEN !
6144 
6145  allocate ( vvasbl(kcolp,mwp) ) ! effective SBL wind speed
6146  allocate ( dta_ts(kcolp,mwp) ) ! effective SBL Temperature diff.
6147  allocate ( lmomom(kcolp,mwp) ) ! Monin-Obukhov Scale Momentum
6148  allocate ( cdm(kcolp,mwp) ) ! Drag Coefficient, Momentum
6149  allocate ( cds(kcolp,mwp) ) ! Drag Coefficient, Blown **
6150  allocate (rcds(kcolp,mwp) ) ! Drag Coefficient, Blown **
6151  allocate ( cdh(kcolp,mwp) ) ! Drag Coefficient, Scalar
6152  allocate ( richar(kcolp,mwp) ) ! Richardson Number
6153 
6154  END IF !
6155 ! !
6156 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6157 
6158 
6159 
6160 ! Internal DATA
6161 ! =============
6162 
6163 ! #zx zetMAX = 1.e0 ! Strong Stability Limit
6164  !(Mahalov et al. 2004, GRL 31 2004GL021055)
6165 ! #ZX zetMAX = 4.28 ! Strong Stability Limit
6166  !(King et al. 1996, JGR 101(7) p.19121)
6167 
6168 
6169 ! Effective SBL variables
6170 ! =======================
6171 
6172  DO ikl=1,kcolp
6173  DO ikv=1,mwp
6174  vvasbl(ikl,ikv) = vv__sv(ikl,ikv)
6175 ! #AW VVaSBL(ikl,ikv) = VVmmem(ikl,ikv)
6176  dta_ts(ikl,ikv) = tat_sv(ikl,ikv)-tsrfsv(ikl,ikv)
6177 ! #AH dTa_Ts(ikl,ikv) = dTmmem(ikl,ikv)
6178  END DO
6179  END DO
6180 
6181 
6182 ! Convergence Criterion
6183 ! =====================
6184 
6185  icount = 0
6186 
6187 ! #AX 1 CONTINUE
6188  icount = icount + 1
6189  dustar = 0.
6190 
6191  DO ikl=1,kcolp
6192  DO ikv=1,mwp
6193 
6194  u0star = us__sv(ikl,ikv)
6195 
6196 
6197 ! Turbulent Scales from previous Time Step
6198 ! ----------------------------------------
6199 
6200  u0star = max(eps6,u0star) ! Friction Velocity u*
6201  uustar = u0star * u0star ! Friction Velocity^2 uu*
6202  thstar = uts_sv(ikl,ikv) / u0star ! Temperature theta*
6203  qqstar = uqs_sv(ikl,ikv) / u0star ! Specific Humidity qq*
6204  ssstar = uss_sv(ikl,ikv) / u0star ! Blown Snow ss*
6205 
6206 
6207 ! Monin-Obukhov Stability Parameter for Momentum
6208 ! ----------------------------------------------
6209 
6210 ! Pseudo Virtual Temperature Turbulent Scale thetav*
6211 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6212  thstarv = thstar + theta0 *(0.608*qqstar) &
6213  & /(1.+0.608*qat_sv(ikl,ikv)-qsnosv(ikl,ikv))
6214  thstars = sign(un_1,thstarv)
6215  thstara = abs( thstarv)
6216  thstarv = max(eps6,thstara)*thstars
6217 
6218 ! Pseudo Obukhov Length Scale (Gall?e et al., 2001 BLM 99, (A2) p.17)
6219 ! Full Obukhov Length Scale (when Blowing * is ##NOT## switched ON)
6220 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6221  lmo_sv(ikl,ikv) = theta0 * max(eps6,uustar) &
6222  & /(vonkrm * grav_f *thstarv)
6223 
6224 ! OUTPUT of Snow Erosion Turbulence
6225 ! #b1 W_pLMO = LMO_SV(ikl,ikv)
6226 
6227  zetah = za__sv(ikl,ikv) / lmo_sv(ikl,ikv)
6228  zetam = min(zetmax,zetah)! Strong Stability Limit
6229  !(Mahalov et al. 2004
6230  ! GRL 31 2004GL021055)
6231  lmomom(ikl,ikv) = za__sv(ikl,ikv) /(max(eps6,abs(zetam)) &
6232  & *sign(un_1, zetam ))
6233  zeta0m = z0m_sv(ikl,ikv) / lmomom(ikl,ikv)
6234  zeta0h = z0h_sv(ikl,ikv) / lmo_sv(ikl,ikv)
6235 
6236 ! Momentum Pseudo Stability Function (Gall?e et al. 2001, BLM 99, (11) p. 7)
6237 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6238  stab_s = max(zer0,sign(un_1,zetam))
6239 
6240  psim_s = -a_stab *zetam
6241  xpsimi = sqrt(sqrt(un_1-coef_m*min(zer0,zetam)))
6242  psim_i = 2. *log(half*(un_1+xpsimi)) &
6243  & +log(half*(un_1+xpsimi*xpsimi)) &
6244  & -2.*atan(xpsimi) +half*pinmbr
6245  psim_z = stab_s*psim_s+(1.-stab_s)*psim_i
6246 
6247 ! OUTPUT of Snow Erosion Turbulence
6248 ! #b1 W_psim = psim_z
6249 
6250  psim_s = -a_stab *zeta0m
6251  xpsimi = sqrt(sqrt(un_1-coef_m*min(zer0,zeta0m)))
6252  psim_i = 2. *log(half*(un_1+xpsimi)) &
6253  & +log(half*(un_1+xpsimi*xpsimi)) &
6254  & -2.*atan(xpsimi) +half*pinmbr
6255  psim_0 = stab_s*psim_s+(1.-stab_s)*psim_i
6256 
6257 ! Virtual Temperature Turbulent Scale thetav* (ss* impact included )
6258 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ needed for new ss*)
6259 ! #AE thstarv = thstar + Theta0 *(0.608*qqstar &
6260 ! #AE& -ssstar &
6261 ! #AE& ) &
6262 ! #AE& /(1.+0.608*QaT_SV(ikl,ikv)-qsnoSV(ikl,ikv))
6263 ! #AE thstars = sign(un_1,thstarv)
6264 ! #AE thstara = abs( thstarv)
6265 ! #AE thstarv = max(eps6,thstara) *thstars
6266 
6267 ! Full Obukhov Length Scale (Gall?e et al. 2001, BLM 99, (A1) p.16)
6268 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6269 ! #AE LMO_SV(ikl,ikv) = Theta0 * us__SV(ikl,ikv)* us__SV(ikl,ikv) &
6270 ! #AE& /(vonKrm * Grav_F * thstarv)
6271 
6272 ! #AE zetah = za__SV(ikl,ikv) / LMO_SV(ikl,ikv)
6273 ! #AE zetam = min(zetMAX,zetah)! Strong Stability Limit
6274  !(Mahalov et al. 2004
6275  ! GRL 31 2004GL021055)
6276 ! #AE LMOmom(ikl,ikv) = za__SV(ikl,ikv) /(max(eps6,abs(zetam)) &
6277 ! #AE& *sign(un_1, zetam ))
6278 ! #AE zeta0m = Z0m_SV(ikl,ikv) / LMOmom(ikl,ikv)
6279 
6280 ! Snow Erosion Stability Function (Gall?e et al. 2001, BLM 99, (11) p. 7)
6281 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6282 ! #AE stab_s = max(zer0,sign(un_1,zetam))
6283 
6284 ! #AE psis_s = -AsStab *zetam
6285 ! #AE xpsimi = sqrt(sqrt(un_1-coef_m*min(zer0,zetam)))
6286 ! #AE psim_i = 2. *log(half*(un_1+xpsimi)) &
6287 ! #AE& +log(half*(un_1+xpsimi*xpsimi)) &
6288 ! #AE& -2.*atan(xpsimi) +half*piNmbr
6289 ! #AE psis_z = stab_s*psis_s+(1.-stab_s)*psim_i
6290 
6291 ! #AE psis_s = -AsStab *zeta0m
6292 ! #AE xpsimi = sqrt(sqrt(un_1-coef_m*min(zer0,zeta0m)))
6293 ! #AE psim_i = 2. *log(half*(un_1+xpsimi)) &
6294 ! #AE& +log(half*(un_1+xpsimi*xpsimi)) &
6295 ! #AE& -2.*atan(xpsimi) +half*piNmbr
6296 ! #AE psis_0 = stab_s*psis_s+(1.-stab_s)*psim_i
6297 
6298 ! Square Roots of the Drag Coefficient for Snow Erosion Turbulent Flux
6299 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6300 ! #AE rCDmSV(ikl,ikv) = vonKrm/(sqrCm0(ikl,ikv)-psim_z+psim_0)
6301 
6302 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
6303 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6304 ! Martin control : on remplace les "! #ss" par rien au début de la ligne
6305  IF (ii__ap(ikl).EQ.iwr_sv.AND.jj__ap(ikl).EQ.jwr_sv .AND. &
6306  & ikv .EQ.nwr_sv ) &
6307  & write(6,6600) z0m_sv(ikl,ikv) , psim_z &
6308  & ,lmo_sv(ikl,ikv) , uustar &
6309  & ,sqrcm0(ikl,ikv) , psim_0 &
6310  & ,lmomom(ikl,ikv) , thstarv
6311  6600 format(/,' ** SISVATeSBL *0 ' &
6312  & ,' Z0m_SV = ',e12.4,' psim_z = ',e12.4 &
6313  & ,' LMO_SV = ',e12.4,' uustar = ',e12.4 &
6314  & ,/,' ' &
6315  & ,' sqrCm0 = ',e12.4,' psim_0 = ',e12.4 &
6316  & ,' LMOmom = ',e12.4,' thstarv = ',e12.4)
6317 ! Martin control : on remplace les "! #ss" par rien au début de la ligne
6318 
6319 
6320 ! Momentum Turbulent Scale u*
6321 ! ---------------------------------------
6322 
6323 ! Momentum Turbulent Scale u* in case of NO Blow. Snow
6324 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6325  vva_ok = max(0.000001, vvasbl(ikl,ikv))
6326  sss__n = vonkrm * vva_ok
6327  sss__f = (sqrcm0(ikl,ikv) - psim_z + psim_0)
6328  usuth0 = sss__n /sss__f ! u* if NO Blow. Snow
6329 
6330 ! Momentum Turbulent Scale u* in case of Blow. Snow
6331 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6332 ! #AE sss__G = 0.27417 * Grav_F
6333 
6334 ! ______________ _____
6335 ! Newton-Raphson (! Iteration, BEGIN)
6336 ! ~~~~~~~~~~~~~~ ~~~~~
6337 ! #AE DO iit=1,nit
6338 ! #AE sss__K = Grav_F * r_Stab * A_Stab *za__SV(ikl,ikv)&
6339 ! #AE& *rCDmSV(ikl,ikv)*rCDmSV(ikl,ikv)&
6340 ! #AE& /(1.+0.608*QaT_SV(ikl,ikv)-qsnoSV(ikl,ikv))
6341 ! #AE us_127 = exp( SblPom *log(us__SV(ikl,ikv)))
6342 ! #AE us_227 = us_127 * us__SV(ikl,ikv)
6343 ! #AE us_327 = us_227 * us__SV(ikl,ikv)
6344 ! #AE us_427 = us_327 * us__SV(ikl,ikv)
6345 ! #AE us_527 = us_427 * us__SV(ikl,ikv)
6346 
6347 ! #AE us__SV(ikl,ikv) = us__SV(ikl,ikv) &
6348 ! #AE& - ( us_527 *sss__F /sss__N &
6349 ! #AE& - us_427 &
6350 ! #AE& - us_227 *qsnoSV(ikl,ikv)*sss__K &
6351 ! #AE& + (us__SV(ikl,ikv)*us__SV(ikl,ikv)-usthSV(ikl,ikv)*usthSV(ikl,ikv))/sss__G)&
6352 ! #AE& /( us_427*5.27*sss__F /sss__N &
6353 ! #AE& - us_327*4.27 &
6354 ! #AE& - us_127*2.27*qsnoSV(ikl,ikv)*sss__K &
6355 ! #AE& + us__SV(ikl,ikv)*2.0 /sss__G)
6356 
6357 ! #AE us__SV(ikl,ikv)= min(us__SV(ikl,ikv),usuth0)
6358 ! #AE us__SV(ikl,ikv)= max(us__SV(ikl,ikv),eps6 )
6359 ! #AE rCDmSV(ikl,ikv)= us__SV(ikl,ikv)/VVa_OK
6360 ! #Ae sss__F = vonKrm /rCDmSV(ikl,ikv)
6361 ! #AE END DO
6362 ! ______________ ___
6363 ! Newton-Raphson (! Iteration, END )
6364 ! ~~~~~~~~~~~~~~ ~~~
6365 
6366 ! #AE us_127 = exp( SblPom *log(us__SV(ikl,ikv)))
6367 ! #AE us_227 = us_127 * us__SV(ikl,ikv)
6368 
6369 ! Momentum Turbulent Scale u*: 0-Limit in case of no Blow. Snow
6370 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6371 ! #AE dusuth = us__SV(ikl,ikv) - usthSV(ikl,ikv) ! u* - uth*
6372 ! #AE signus = max(sign(un_1,dusuth),zer0) ! 1 <=> u* - uth* > 0
6373  us__sv(ikl,ikv) = &!
6374 ! #AE& us__SV(ikl,ikv) *signus + &! u* (_BS)
6375  & usuth0 &! u* (nBS)
6376 ! #AE& *(1.-signus) &!
6377  & + 0.
6378 
6379 
6380 ! Blowing Snow Turbulent Scale ss*
6381 ! ---------------------------------------
6382 
6383 ! Blowing Snow Surface Boundary Condition
6384 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6385 ! #AE hSalSV(ikl,ikv) = 8.436e-2 *exp(SblPom *log(us__SV(ikl,ikv)))
6386 ! #AE qSalSV(ikl,ikv) = (us__SV(ikl,ikv) * us__SV(ikl,ikv) &
6387 ! #AE& -usthSV(ikl,ikv) * usthSV(ikl,ikv))*signus &
6388 ! #AE& / (sss__G * us_227 )
6389 
6390 ! Blowing Snow Surface Boundary Condition (modification, .NOT. tested)
6391 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6392 ! #ae qSalSV(ikl,ikv) = (us__SV(ikl,ikv) * us__SV(ikl,ikv) &
6393 ! #ae& -usthSV(ikl,ikv) * usthSV(ikl,ikv)) &
6394 ! #ae& *signus * us__SV(ikl,ikv) *3.25 &
6395 ! #ae& /(hSalSV(ikl,ikv) * Grav_F )
6396 
6397 ! #AE ssstar = rCDmSV(ikl,ikv) *(qsnoSV(ikl,ikv) -qSalSV(ikl,ikv)) &
6398 ! #AE& * r_Stab
6399 
6400 ! #AE uss_SV(ikl,ikv) = min(zer0 , us__SV(ikl,ikv) *ssstar)
6401 
6402 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
6403 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6404 ! #ss IF (ii__AP(ikl).EQ.iwr_SV.AND.jj__AP(ikl).EQ.jwr_SV .AND. &
6405 ! #ss& ikv .EQ.nwr_SV ) THEN
6406 ! #ss write(6,6000) daHost , icount , &
6407 ! #ss& us__SV(ikl,ikv),1.e3*hSalSV(ikl,ikv), &
6408 ! #ss& 1.e3*Z0m_SV(ikl,ikv), &
6409 ! #ss& 1.e3*qsnoSV(ikl,ikv),1.e3*qSalSV(ikl,ikv) &
6410 ! #ss& ,usthSV(ikl,ikv), us__SV(ikl,ikv)-usthSV(ikl,ikv), &
6411 ! #ss& 1.e3*ssstar ,1.e3*us__SV(ikl,ikv)*ssstar
6412 ! #ss 6000 format(a18,i3,6x,'u* [m/s] =',f6.3,' hSalt[mm]=' ,e9.3,&
6413 ! #ss& ' Z0m [mm] =',f9.3,' q [g/kg] =',f9.3, &
6414 ! #ss& /,91x, ' qSa [g/kg] =',f9.3, &
6415 ! #ss& /,27x, 'ut*[m/s]=' ,e9.3,' u*-ut* =' ,e9.3, &
6416 ! #ss& ' s* [g/kg] =',f9.3,' us* [mm/s] =',f9.3)
6417 ! #ss END IF
6418 
6419 
6420 ! Virtual Temperature Turbulent Scale thetav* (ss* impact included)
6421 ! --------------------------------------------------------------------
6422 
6423 ! #AE thstarv = thstar + Theta0 *(0.608*qqstar &
6424 ! #AE& -ssstar &
6425 ! #AE& ) &
6426 ! #AE& /(1.+0.608*QaT_SV(ikl,ikv)-qsnoSV(ikl,ikv))
6427 ! #AE thstars = sign(un_1,thstarv)
6428 ! #AE thstara = abs( thstarv)
6429 ! #AE thstarv = max(eps6,thstara) *thstars
6430 
6431 
6432 ! Full Obukhov Length Scale (Gall?e et al., 2001, BLM 99, (A1) p.16)
6433 ! --------------------------------------------------------------------
6434 
6435 ! #AE LMO_SV(ikl,ikv) = Theta0 * us__SV(ikl,ikv)* us__SV(ikl,ikv) &
6436 ! #AE& /(vonKrm * Grav_F * thstarv)
6437 
6438 ! #AE zetah = za__SV(ikl,ikv) / LMO_SV(ikl,ikv)
6439 ! #AE zetam = min(zetMAX,zetah)! Strong Stability Limit
6440  !(Mahalov et al. 2004
6441  ! GRL 31 2004GL021055)
6442 ! #AE LMOmom(ikl,ikv) = za__SV(ikl,ikv) /(max(eps6,abs(zetam)) &
6443 ! #AE& *sign(un_1, zetam ))
6444 ! #AE zeta0m = Z0m_SV(ikl,ikv) / LMOmom(ikl,ikv)
6445 ! #AE zeta0h = Z0h_SV(ikl,ikv) / LMO_SV(ikl,ikv)
6446 
6447 ! OUTPUT in SISVAT at specified i,j,k,n (see assignation in PHY_SISVAT)
6448 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6449 ! #ss IF (ii__AP(ikl).EQ.iwr_SV.AND.jj__AP(ikl).EQ.jwr_SV .AND. &
6450 ! #ss& ikv .EQ.nwr_SV ) THEN
6451 ! #ss write(6,6001) LMO_SV(ikl,ikv) , zetah
6452 ! #ss 6001 format(18x,9x,'LMO [m]=',f9.1,' zetah[-] =',f9.3)
6453 ! #ss END IF
6454 
6455 
6456 ! Turbulent Scales
6457 ! ----------------
6458 
6459 ! Momentum Stability Function (Gall?e et al., 2001, BLM 99, (11) p. 7)
6460 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6461  stab_s = max(zer0,sign(un_1,zetam))
6462 
6463  psim_s = -a_stab *zetam
6464  xpsimi = sqrt(sqrt(un_1-coef_m*min(zer0,zetam)))
6465  psim_i = 2. *log(half*(un_1+xpsimi)) &
6466  & +log(half*(un_1+xpsimi*xpsimi)) &
6467  & -2.*atan(xpsimi) +half*pinmbr
6468  psim_z = stab_s*psim_s+(1.-stab_s)*psim_i
6469 
6470  psim_s = -a_stab *zeta0m
6471  xpsimi = sqrt(sqrt(un_1-coef_m*min(zer0,zeta0m)))
6472  psim_i = 2. *log(half*(un_1+xpsimi)) &
6473  & +log(half*(un_1+xpsimi*xpsimi)) &
6474  & -2.*atan(xpsimi) +half*pinmbr
6475  psim_0 = stab_s*psim_s+(1.-stab_s)*psim_i
6476 
6477 ! Heat Stability Function (Gallee et al., 2001, BLM 99, (11) p. 7)
6478 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6479  stab_s = max(zer0,sign(un_1,zetah))
6480 
6481  psih_s = -ahstab *zetah
6482  xpsihi = sqrt(sqrt(un_1-coef_h*min(zer0,zetah)))
6483  psih_i = 2. *log(half*(un_1+xpsihi))
6484  psih_z = stab_s*psih_s+(1.-stab_s)*psih_i
6485 
6486  psih_s = -ahstab *zeta0h
6487  xpsihi = sqrt(sqrt(un_1-coef_h*min(zer0,zeta0h)))
6488  psih_i = 2. *log(half*(un_1+xpsihi))
6489  psih_0 = stab_s*psih_s+(1.-stab_s)*psih_i
6490 
6491 ! Square Roots of the Drag Coefficients
6492 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6493  rcdhsv(ikl,ikv) = vonkrm/(sqrch0(ikl,ikv)-psih_z+psih_0)
6494  rcdmsv(ikl,ikv) = vonkrm/(sqrcm0(ikl,ikv)-psim_z+psim_0)
6495 
6496 ! Drag Coefficients
6497 ! ~~~~~~~~~~~~~~~~~
6498  cdh(ikl,ikv) = rcdmsv(ikl,ikv) * rcdhsv(ikl,ikv)
6499  cdm(ikl,ikv) = rcdmsv(ikl,ikv) * rcdmsv(ikl,ikv)
6500 
6501 ! Real Temperature Turbulent Scale theta*
6502 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6503  thstar = rcdhsv(ikl,ikv) * dta_ts(ikl,ikv)
6504  uts_sv(ikl,ikv) = us__sv(ikl,ikv) * thstar
6505 
6506 
6507 ! Convergence Criterion
6508 ! =====================
6509 
6510  dustar = max(dustar,abs(us__sv(ikl,ikv)-u0star))
6511 
6512 ! OUTPUT of Snow Erosion Turbulence
6513 ! #b1 IF (icount .EQ.1 ) THEN
6514 ! #b1 write(6,6004)
6515 ! #b1 6004 format(122('-'))
6516 ! #b1 IF (mod(VVaSBL(ikl,ikv),4.).LT.0.1) THEN
6517 ! #b1 write(6,6003)
6518 ! #b1 6003 format(' V Ta-Ts Z0 It' &
6519 ! #b1& ,' du* u* sss__F CD Qss Qs* ' &
6520 ! #b1& ,' PseudOL Full-OL zetam zetah psim_z psih_z')
6521 ! #b1 write(6,6004)
6522 ! #b1 END IF
6523 ! #b1 END IF
6524 ! #b1 write(6,6002) VVaSBL(ikl,ikv),dTa_Ts(ikl,ikv),Z0m_SV(ikl,ikv),icount &
6525 ! #b1& ,dustar ,us__SV(ikl,ikv),sss__F &
6526 ! #b1& , CDm(ikl,ikv),qSalSV(ikl,ikv),ssstar &
6527 ! #b1& ,W_pLMO ,LMO_SV(ikl,ikv) &
6528 ! #b1& ,zetam ,zetah ,W_psim ,psih_z
6529 ! #b1 6002 format(2f6.1,f8.4,i3,f9.6,f6.3,f9.3,3f9.6,2f8.2,2f8.4,2f8.2)
6530 
6531 ! OUTPUT of Snow Erosion Turbulence (2): u*_AE
6532 ! #b2 IF (icount .EQ.1 ) THEN
6533 ! #b2 write(6,6014)
6534 ! #b2 6014 format(100('-'))
6535 ! #b2 IF (mod(VVaSBL(ikl,ikv),4.).LT.0.1) THEN
6536 ! #b2 write(6,6013)
6537 ! #b2 6013 format(' V Ta-Ts Z0 It' &
6538 ! #b2& ,' du* u* sss__F W_NUs1 W_NUs2 W_NUs3 ' &
6539 ! #b2& ,' W_DUs1 W_DUs2 ')
6540 ! #b2 write(6,6014)
6541 ! #b2 END IF
6542 ! #b2 END IF
6543 ! #b2 write(6,6012) VVaSBL(ikl,ikv),dTa_Ts(ikl,ikv),Z0m_SV(ikl,ikv),icount &
6544 ! #b2& ,dustar ,us__SV(ikl,ikv),sss__F &
6545 ! #b2& ,W_NUs1 ,W_NUs2 ,W_NUs3 &
6546 ! #b2& ,W_DUs1 ,W_DUs2
6547 ! #b2 6012 format(2f6.1,f8.4,i3,f9.6,f6.3,f9.3,3f9.3,2f12.3)
6548 
6549  END DO
6550  END DO
6551 
6552 ! #AX IF ( icount.lt. 3) GO TO 1
6553 ! IF (dustar.gt.0.0001.AND.icount.lt. 6) GO TO 1
6554 
6555 
6556 ! Aerodynamic Resistances
6557 ! -----------------------
6558 
6559  DO ikl=1,kcolp
6560  DO ikv=1,mwp
6561  ram_sv(ikl,ikv) = 1./(cdm(ikl,ikv)*max(vvasbl(ikl,ikv),eps6))
6562  rah_sv(ikl,ikv) = 1./(cdh(ikl,ikv)*max(vvasbl(ikl,ikv),eps6))
6563  END DO
6564  END DO
6565 
6566 
6567 
6568 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6569 ! !
6570 ! DE-ALLOCATION !
6571 ! ============= !
6572 
6573  IF (flagdalloc) THEN !
6574 
6575  deallocate ( vvasbl ) ! effective SBL wind speed
6576  deallocate ( dta_ts ) ! effective SBL Temperature diff.
6577  deallocate ( lmomom ) ! Monin-Obukhov Scale Momentum
6578  deallocate ( cdm ) ! Drag Coefficient, Momentum
6579  deallocate ( cds ) ! Drag Coefficient, Blown **
6580  deallocate (rcds ) ! Drag Coefficient, Blown **
6581  deallocate ( cdh ) ! Drag Coefficient, Scalar
6582  deallocate ( richar ) ! Richardson Number
6583 
6584  END IF !
6585 ! !
6586 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6587 
6588 
6589  return
6590  end subroutine sisvatesbl
6591 
6592 
6593 
6594  subroutine sisvat_sbl
6596 !--------------------------------------------------------------------------+
6597 ! MAR SISVAT_SBL Wed 26-Jun-2013 MAR |
6598 ! SubRoutine SISVAT_SBL generates Surface Boundary Layers Properties |
6599 ! |
6600 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
6601 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
6602 ! |
6603 !--------------------------------------------------------------------------+
6604 ! |
6605 ! PARAMETERS: kcolv: Total Number of columns |
6606 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
6607 ! X Number of Mosaic Cell per grid box |
6608 ! |
6609 ! INPUT: za__SV : Surface Boundary Layer (SBL) Height [m] |
6610 ! ^^^^^ VV__SV :(SBL Top) Wind Velocity [m/s] |
6611 ! TaT_SV : SBL Top Temperature [K] |
6612 ! uqs_SV : Specific Humidity Turbulent Flux [m/s] |
6613 ! Z0m_SV : Momentum Roughness Length [m] |
6614 ! Z0h_SV : Heat Roughness Length [m] |
6615 ! Tsrfsv : Surface Temperature [K] |
6616 ! sqrCm0 : Contribution of Z0m to Neutral Drag Coefficient |
6617 ! sqrCh0 : Contribution of Z0h to Neutral Drag Coefficient |
6618 ! |
6619 ! INPUT / LMO_SV : Monin-Obukhov Scale [m] |
6620 ! OUTPUT: us__SV : Friction Velocity [m/s] |
6621 ! ^^^^^^ uts_SV : Temperature Turbulent Flux [K.m/s] |
6622 ! |
6623 ! OUTPUT: Fh__sv : Stability Function [-] |
6624 ! ^^^^^^ dFh_sv : Stability Function (Derivative) [-] |
6625 ! ram_sv : Aerodynamic Resistance for Momentum [s/m] |
6626 ! rah_sv : Aerodynamic Resistance for Heat [s/m] |
6627 ! |
6628 ! WARNING: SISVAT_SBL blows up for too small z0m values & large z_SBL |
6629 ! ^^^^^^^ (z0m = 1.8e-6 m for z_SBL = 20 m) |
6630 ! |
6631 ! |
6632 ! |
6633 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
6634 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
6635 ! FILE | CONTENT |
6636 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
6637 ! # stdout | #sb: OUTPUT/Verification: SISVAT_SBL |
6638 ! | unit 6, SubRoutine SISVAT_SBL **ONLY** |
6639 !--------------------------------------------------------------------------+
6640 
6641 
6642 ! Global Variables
6643 ! =================
6644 
6645  use mod_real
6646  use mod_phy____dat
6647  use mod_phy____grd
6648  use mod_sisvat_grd
6649 
6650 
6651 
6652 ! General Variables
6653 ! =================
6654 
6655  use mod_sisvat_dat
6656  use mod_sisvat_kkl
6657  use mod_sisvat_loc
6658 
6659 
6660  IMPLICIT NONE
6661 
6662 
6663 
6664 ! Internal Variables
6665 ! ==================
6666 
6667  integer :: ikl,ikv ,ist ,ist__s ,ist__w
6668  real(kind=real8) :: CD_m_0 ,CD_h_0 ,ram0 ,rah0 ,rahMIN
6669  real(kind=real8) :: d_TaTs ,RiB__D ,RiBulk
6670  real(kind=real8) :: bmstab ,Am1_FU ,Am2_FU ,Fm_Uns
6671  real(kind=real8) :: bhstab ,Ah1_FU ,Ah2_FU ,Fh_Uns,dFh_Un
6672  real(kind=real8) :: Aux_FS ,FStabl ,dFSdRi ,Stabil,Fm_loc
6673  real(kind=real8) :: uustar ,thstar ,qqstar
6674  real(kind=real8) :: thstarv,thstars,thstara
6675  real(kind=real8) :: zeta ,zeta_S ,zeta_A
6676 
6677  real(kind=real8) :: zetMAX = 4.28 ! Strong Stability Limit
6678 ! !(King et al. 1996, JGR 101(7) p.19121)
6679 
6680 
6681 ! Aerodynamic Resistances
6682 ! =======================
6683 
6684  DO ikl=1,kcolp
6685  DO ikv=1,mwp
6686 
6687 ! Surface Type
6688 ! ~~~~~~~~~~~~
6689  ist = isotsv(ikl,ikv) ! Soil Type
6690  ist__s = min(ist, 1) ! 1 => Soil
6691  ist__w = 1 - ist__s ! 1 => Water Body
6692 
6693 ! Neutral Parameters
6694 ! ~~~~~~~~~~~~~~~~~~
6695  cd_m_0 = 0.16/ (sqrcm0(ikl,ikv)*sqrcm0(ikl,ikv)) ! Neutral Drag Coeff.Mom.
6696  cd_h_0 = 0.16/ (sqrcm0(ikl,ikv)*sqrch0(ikl,ikv)) ! Neutral Drag Coeff.Heat
6697  ram0 = 1.0 / (cd_m_0 *vv__sv(ikl,ikv)) ! Neutral Aero Resis.Mom.
6698  rah0 = 1.0 / (cd_h_0 *vv__sv(ikl,ikv)) ! Neutral Aero Resis.Heat
6699 
6700 ! Bulk Richardson Number
6701 ! ~~~~~~~~~~~~~~~~~~~~~~
6702  rib__d = vv__sv(ikl,ikv) *vv__sv(ikl,ikv) &
6703  & *tat_sv(ikl,ikv)
6704  d_tats = (tat_sv(ikl,ikv)- tsrfsv(ikl,ikv))
6705  ribulk = grav_f *za__sv(ikl,ikv)* d_tats &
6706  & / rib__d
6707 
6708 ! OUTPUT/Verification: SISVAT_SBL
6709 ! #sb IF (ii__AP(ikl).EQ.iwr_SV .AND. jj__AP(ikl).EQ.jwr_SV .AND.&
6710 ! #sb& ikv .GE.nwr_SV) &
6711 ! #sb& write(6,6600) Tsrfsv(ikl,ikv),TaT_SV(ikl,ikv),VV__SV(ikl,ikv) &
6712 ! #sb& , d_TaTs ,RiBulk
6713 ! #sb 6600 format(/,'Tem(s,a), Wind , d_TaTs, RiBulk = ',5e15.6)
6714 
6715 ! Unstable Case
6716 ! ~~~~~~~~~~~~~
6717  bmstab = ist__s * (13.7 -0.34 /sqrt(cd_m_0)) &! Momentum
6718  & + ist__w * 4.9 !
6719  bmstab = 10. * bmstab * cd_m_0 &!
6720  & *sqrt(za__sv(ikl,ikv)/ z0m_sv(ikl,ikv))!
6721  am1_fu = bmstab * sqrt(abs(ribulk)) !
6722  am2_fu = am1_fu +1.0 +10.*abs(ribulk) !
6723  fm_uns = (am1_fu +1.0)/ am2_fu !
6724 
6725 ! OUTPUT/Verification: SISVAT_SBL
6726 ! #sb IF (ii__AP(ikl).EQ.iwr_SV .AND. jj__AP(ikl).EQ.jwr_SV .AND.&
6727 ! #sb& ikv .GE.nwr_SV) &
6728 ! #sb& write(6,6601) CD_m_0 ,Z0m_SV(ikl,ikv),bmstab &
6729 ! #sb& , ist__s ,ist__w
6730 ! #sb 6601 format(/,'CD_m_0 , Z0m_SV, bmstab, ist/sw = ',3e15.6,2i15)
6731 
6732  bhstab = ist__s * ( 6.3 -0.18 /sqrt(cd_h_0)) &! Heat
6733  & + ist__w * 2.6 !
6734  bhstab = 10. * bhstab * cd_h_0 &!
6735  & *sqrt(za__sv(ikl,ikv)/ z0h_sv(ikl,ikv))!
6736  ah1_fu = bhstab * sqrt(abs(ribulk)) !
6737  ah2_fu = ah1_fu +1.0 +10.*abs(ribulk) !
6738  fh_uns = (ah1_fu +1.0)/ ah2_fu !
6739  dfh_un =((ah1_fu +2.0)/(ah2_fu*ah2_fu)) * 5. !
6740 
6741 ! Stable Case
6742 ! ~~~~~~~~~~~~~
6743  aux_fs = 1.0 + 5.* ribulk
6744  fstabl = aux_fs*aux_fs
6745  dfsdri = aux_fs *10.
6746 
6747 ! Effective Stability Functions and Derivatives
6748 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6749  stabil = sign(un_1,d_tats)
6750  fm_loc = fstabl * max(zer0,stabil) &
6751  & - fm_uns * min(zer0,stabil)
6752  fh__sv(ikl,ikv) = fstabl * max(zer0,stabil) &
6753  & - fh_uns * min(zer0,stabil)
6754  dfh_sv(ikl,ikv) = dfsdri * max(zer0,stabil) &
6755  & - dfh_un * min(zer0,stabil)
6756 
6757 ! OUTPUT/Verification: SISVAT_SBL
6758 ! #sb IF (ii__AP(ikl).EQ.iwr_SV .AND. jj__AP(ikl).EQ.jwr_SV .AND.&
6759 ! #sb& ikv .GE.nwr_SV) &
6760 ! #sb& write(6,6602) FStabl ,Stabil &
6761 ! #sb& ,Fm_Uns ,Fm_loc
6762 ! #sb 6602 format(/,'FStabl , Stabil, Fm_Uns, Fm_loc = ',4e15.6)
6763 
6764 ! Aerodynamic Resistances
6765 ! ~~~~~~~~~~~~~~~~~~~~~~~
6766  ram_sv(ikl,ikv) = ram0 * fm_loc
6767  rah_sv(ikl,ikv) = rah0 * fh__sv(ikl,ikv)
6768  rahmin = max(rah_sv(ikl,ikv), abs(d_tats)*60./za__sv(ikl,ikv))
6769  ! 60 for 30dgC within 1/2 hour
6770  dfh_sv(ikl,ikv) = rah0 * dfh_sv(ikl,ikv) &
6771  & * rahmin / rah_sv(ikl,ikv)
6772  rah_sv(ikl,ikv) = rahmin
6773 
6774 
6775 ! Square Root Contributions to the Drag Coefficients
6776 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6777  rcdmsv(ikl,ikv) = sqrt(ram_sv(ikl,ikv) *vv__sv(ikl,ikv))
6778  rcdmsv(ikl,ikv) = 1. / max(eps6,rcdmsv(ikl,ikv))
6779  rcdhsv(ikl,ikv) = rah_sv(ikl,ikv) *vv__sv(ikl,ikv) &
6780  & *rcdmsv(ikl,ikv)
6781  rcdhsv(ikl,ikv) = (1. / max(eps6,rcdhsv(ikl,ikv)))
6782 
6783 ! OUTPUT/Verification: SISVAT_SBL
6784 ! #sb IF (ii__AP(ikl).EQ.iwr_SV .AND. jj__AP(ikl).EQ.jwr_SV .AND.&
6785 ! #sb& ikv .GE.nwr_SV) &
6786 ! #sb& write(6,6603) ram_sv(ikl,ikv),rah_sv(ikl,ikv) &
6787 ! #sb& ,rCDmSV(ikl,ikv),rCDhSV(ikl,ikv)
6788 ! #sb 6603 format(/,'AeR(m,h), rCD(m,h) = ',4e15.6)
6789 
6790 
6791 ! Turbulent Scales
6792 ! ================
6793 
6794 ! Friction Velocity u*
6795 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6796  uustar = vv__sv(ikl,ikv) / ram_sv(ikl,ikv)
6797  us__sv(ikl,ikv) = sqrt(uustar)
6798 
6799 ! Real Temperature Turbulent Scale theta*
6800 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6801  uts_sv(ikl,ikv) = d_tats / rah_sv(ikl,ikv)
6802  thstar = uts_sv(ikl,ikv) / us__sv(ikl,ikv)
6803 
6804 ! Specific Humidity Turbulent Scale qq*
6805 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6806  qqstar = uqs_sv(ikl,ikv) / us__sv(ikl,ikv)
6807 
6808 ! Virtual Temperature Turbulent Scale thetav*
6809 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6810  thstarv = thstar + tat_sv(ikl,ikv) *(0.608*qqstar &
6811  & )
6812  thstars = sign(un_1,thstarv)
6813  thstara = abs( thstarv)
6814  thstarv = max(eps6,thstara) *thstars
6815 
6816 ! Monin Obukhov Scale Height
6817 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~
6818  lmo_sv(ikl,ikv) = tat_sv(ikl,ikv) * uustar &
6819  & /(vonkrm * grav_f * thstarv)
6820  zeta = za__sv(ikl,ikv) / lmo_sv(ikl,ikv)
6821  zeta = min(zetmax,zeta) ! Strong Stability Limit
6822 ! ! King et al. 1996
6823 ! ! JGR 101(7) p.19121
6824  zeta_s = sign(un_1 ,zeta)
6825  zeta_a = abs( zeta)
6826  zeta = zeta_s * max(eps6 ,zeta_a)
6827  lmo_sv(ikl,ikv) = za__sv(ikl,ikv) / zeta
6828 
6829 ! OUTPUT/Verification: SISVAT_SBL
6830 ! #sb IF (ii__AP(ikl).EQ.iwr_SV .AND. jj__AP(ikl).EQ.jwr_SV .AND.&
6831 ! #sb& ikv .GE.nwr_SV) &
6832 ! #sb& write(6,6604) us__SV(ikl,ikv),uts_SV(ikl,ikv) &
6833 ! #sb& ,LMO_SV(ikl,ikv),zeta
6834 ! #sb 6604 format(/,'***(m,h), LMO , zeta = ',4e15.6)
6835 
6836  END DO
6837  END DO
6838 
6839 
6840  return
6841  end subroutine sisvat_sbl
6842 
6843 
6844 
6845  subroutine sisvat_tvg( &
6846 ! #e1& (ETVg_d &
6847  & )
6849 !--------------------------------------------------------------------------+
6850 ! MAR SISVAT_TVg Wed 26-Jun-2013 MAR |
6851 ! SubRoutine SISVAT_TVg computes the Canopy Energy Balance |
6852 ! |
6853 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
6854 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
6855 ! |
6856 !--------------------------------------------------------------------------+
6857 ! |
6858 ! PARAMETERS: kcolv: Total Number of columns = |
6859 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
6860 ! X Number of Mosaic Cell per grid box |
6861 ! |
6862 ! INPUT: ivgtSV = 0,...,12: Vegetation Type |
6863 ! ^^^^^ 0: Water, Solid or Liquid |
6864 ! isnoSV = total Nb of Ice/Snow Layers |
6865 ! |
6866 ! INPUT: sol_SV : Downward Solar Radiation [W/m2] |
6867 ! ^^^^^ IRd_SV : Surface Downward Longwave Radiation [W/m2] |
6868 ! TaT_SV : SBL Top Temperature [K] |
6869 ! rhT_SV : SBL Top Air Density [kg/m3] |
6870 ! QaT_SV : SBL Top Specific Humidity [kg/kg] |
6871 ! psivSV : Leaf Water Potential [m] |
6872 ! IRs_SV : Soil IR Flux (previous time step) [W/m2] |
6873 ! dt__SV : Time Step [s] |
6874 ! |
6875 ! SoCasv : Absorbed Solar Radiation by Canopy (Normaliz)[-] |
6876 ! tau_sv : Fraction of Radiation transmitted by Canopy [-] |
6877 ! Evg_sv : Soil+Vegetation Emissivity [-] |
6878 ! Eso_sv : Soil+Snow Emissivity [-] |
6879 ! rah_sv : Aerodynamic Resistance for Heat [s/m] |
6880 ! Sigmsv : Canopy Ventilation Factor [-] |
6881 ! LAI_sv : Leaf Area Index [-] |
6882 ! LAIesv : Leaf Area Index (effective / transpiration) [-] |
6883 ! glf_sv : Green Leaf Fraction of NOT fallen Leaves [-] |
6884 ! rrMxsv : Canopy Maximum Intercepted Rain [kg/m2] |
6885 ! |
6886 ! INPUT / TvegSV : Canopy Temperature [K] |
6887 ! OUTPUT: rrCaSV : Canopy Water Content [kg/m2] |
6888 ! ^^^^^^ |
6889 ! |
6890 ! OUTPUT: IRv_sv : Vegetation IR Flux [W/m2] |
6891 ! ^^^^^^ HSv_sv : Sensible Heat Flux [W/m2] |
6892 ! HLv_sv : Latent Heat Flux [W/m2] |
6893 ! Evp_sv : Evaporation [kg/m2] |
6894 ! EvT_sv : Evapotranspiration [kg/m2] |
6895 ! ETVg_d : Vegetation Energy Power Forcing [W/m2] |
6896 ! |
6897 ! Internal Variables: |
6898 ! ^^^^^^^^^^^^^^^^^^ |
6899 ! |
6900 ! METHOD: The Newton-Raphson Scheme is preferable |
6901 ! ^^^^^^ when computing over a long time step the heat content |
6902 ! of a medium having a very small or zero heat capacity. |
6903 ! This is to handle strong non linearities arising |
6904 ! in conjunction with rapid temperature variations. |
6905 ! |
6906 ! REFERENCE: DR97: Koen de Ridder thesis, UCL, 1997 |
6907 ! ^^^^^^^^^ |
6908 ! |
6909 ! Preprocessing Option: |
6910 ! ^^^^^^^^^^^^^^^^^^^^^ |
6911 ! #NN: Newton-Raphson Increment not added in last Iteration |
6912 ! #nc: OUTPUT Preparation for Stand Alone NetCDF File |
6913 ! |
6914 !--------------------------------------------------------------------------+
6915 
6916 
6917 ! Global Variables
6918 ! =================
6919 
6920  use mod_real
6921  use mod_phy____dat
6922  use mod_phy____grd
6923  use mod_sisvat_grd
6924 
6925 
6926 
6927 ! General Variables
6928 ! =================
6929 
6930  use mod_sisvat_ctr
6931  use mod_sisvat_dat
6932  use mod_sisvat_kkl
6933  use mod_sisvat_loc
6934  use mod_sisvat_flx
6935 
6936 
6937 
6938 ! Internal Variables
6939 ! ==================
6940 
6941  use mod_sisvatltvg
6942 
6943 
6944  IMPLICIT NONE
6945 
6946 
6947 ! OUTPUT
6948 ! ------
6949 
6950 
6951  integer :: ikl,ikv ! Grid Point Index
6952  integer :: nitmax = 5 ! Maximum Iterations Number
6953  integer :: nit ! Iterations Counter
6954  real(kind=real8) :: d_Tveg ! Canopy Temperat. Increment
6955  real(kind=real8) :: dTvMAX = 5. ! Canopy Temperat. Increment MAX
6956  real(kind=real8) :: dHvdTv ! Derivativ.of Canopy Energ.Budg.
6957  real(kind=real8) :: Hv_Tv0 ! Imbalance of Canopy Energ.Budg.
6958  real(kind=real8) :: Hv_MAX ! MAX Imbal.of Canopy Energ.Budg.
6959  real(kind=real8) :: Hv_MIN = 0.1 ! MIN Imbal.of Canopy Energ.Budg.
6960  real(kind=real8) :: Hswich ! Newton-Raphson Switch
6961  real(kind=real8) :: tau_Ca ! Canopy IR Radiation Absorption
6962  real(kind=real8) :: IR_net ! InfraRed NET(t)
6963  real(kind=real8) :: EvFrac ! Condensat./Transpirat. Switch
6964  real(kind=real8) :: SnoMsk = 0.0 ! Canopy Snow Switch
6965  real(kind=real8) :: den_qs,arg_qs !
6966 ! real(kind=real8) :: esat_i ! Saturation Vapor Pressure [hPa]
6967  real(kind=real8) :: qsatvg ! Canopy Saturat. Spec. Humidity
6968  real(kind=real8) :: dqs_dT ! d(qsatvg)/dTv
6969  real(kind=real8) :: FacEvp,FacEvT !
6970  real(kind=real8) :: Fac_Ev ! Evapo(transpi)ration Factor
6971  real(kind=real8) :: F_Stom ! Funct. (Leaf Water Potential)
6972  real(kind=real8) :: R0Stom ! Minimum Stomatal Resistance
6973  real(kind=real8) :: R_Stom ! Stomatal Resistance
6974  real(kind=real8) :: LAI_OK ! 1. ==> Leaves exist
6975  real(kind=real8) :: rrCaOK,snCaOK !
6976  real(kind=real8) :: dEvpOK ! Positive Definiteness Correct.
6977 
6978 
6979 
6980 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6981 ! !
6982 ! ALLOCATION !
6983 ! ========== !
6984 
6985  IF (it_run.EQ.1 .OR. flagdalloc) THEN !
6986 
6987 ! #e1 allocate ( ETVg_d(kcolp,mwp) ) ! VegetationPower, Forcing
6988  allocate ( tveg_0(kcolp,mwp) ) ! Canopy Temperature, Previous t
6989  allocate ( dirdtv(kcolp,mwp) ) ! InfraRed NET(t), Derivative(t)
6990  allocate ( dhsdtv(kcolp,mwp) ) ! Sensible Heat FL. Derivative(t)
6991  allocate ( dhldtv(kcolp,mwp) ) ! Latent Heat FL. Derivative(t)
6992  allocate ( devpdt(kcolp,mwp) ) ! Evapo(transpi)ration Derivative
6993  allocate ( devtdt(kcolp,mwp) ) ! Evapo(transpi)ration Derivative
6994 
6995  END IF !
6996 ! !
6997 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6998 
6999 
7000 
7001 ! Newton-Raphson Scheme
7002 ! =====================
7003 
7004  nit = 0
7005  101 CONTINUE
7006  nit = nit + 1
7007  hv_max = 0.
7008 
7009 
7010 ! Temperature of the Previous Time Step
7011 ! -------------------------------------
7012 
7013  DO ikl=1,kcolp
7014  DO ikv=1,mwp
7015  tveg_0(ikl,ikv) = tvegsv(ikl,ikv)
7016 
7017 
7018 ! IR Radiation Absorption
7019 ! --------------------------
7020 
7021  tau_ca = 1. - tau_sv(ikl,ikv) ! Canopy Absorption
7022  irv_sv(ikl,ikv) = -2.0 *evg_sv(ikl,ikv) *stefbo &!
7023  & *tvegsv(ikl,ikv) *tvegsv(ikl,ikv) &! Downward IR (OUT)
7024  & *tvegsv(ikl,ikv) *tvegsv(ikl,ikv) ! + Upward IR (OUT)
7025  dirdtv(ikl,ikv) = &!
7026  & -evg_sv(ikl,ikv)* &!
7027  & 8.*stefbo*tvegsv(ikl,ikv) *tvegsv(ikl,ikv) &! Downward IR (OUT)
7028  & *tvegsv(ikl,ikv) ! + Upward IR (OUT)
7029  ir_net = tau_ca &!
7030  & *(evg_sv(ikl,ikv)* ird_sv(ikl,ikv) &! Downward IR (IN)
7031  & - irs_sv(ikl,ikv) &! Upward IR (IN)
7032  & + irv_sv(ikl,ikv)) ! IR (OUT)
7033 
7034 
7035 ! Sensible Heat Flux
7036 ! ------------------
7037 
7038  dhsdtv(ikl,ikv) = rht_sv(ikl,ikv)* sigmsv(ikl,ikv) *cpdair &! Derivative, t(n)
7039  & / rah_sv(ikl,ikv) !
7040  hsv_sv(ikl,ikv) = dhsdtv(ikl,ikv) &! Value, t(n)
7041  & *(tat_sv(ikl,ikv)-tvegsv(ikl,ikv)) !
7042 
7043 
7044 ! Latent Heat Flux
7045 ! ------------------
7046 
7047 ! Canopy Saturation Specific Humidity
7048 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7049 ! IF (DeRidder) THEN !
7050  den_qs = tvegsv(ikl,ikv) - 35.8 !
7051  arg_qs = 17.27 *(tvegsv(ikl,ikv) -273.16) &!
7052  & / den_qs !
7053  qsatvg = .0038 * exp(arg_qs) *0.875 ! 0.875 = Tuning Hapex-Sahel
7054  dqs_dt = qsatvg * 4099.2 /(den_qs *den_qs)!
7055 ! ELSE IF (Dudhia_MAR) THEN !
7056 ! esat_i = 6.107 &!
7057 ! & *exp(ExpIsv*(un_1/WatIsv -un_1/TvegSV(ikl) )) !
7058 ! qsatvg = 0.622 * esat_i &!
7059 ! & / (10.*pkPaSV(ikl) - 0.378*esat_i) !
7060 ! dqs_dT = qsatvg &!
7061 ! & *(1.0+0.6077*qsatvg ) &!
7062 ! & * ExpIsv/(TvegSV(ikl) *TvegSV(ikl) ) !
7063 ! END IF
7064 
7065 ! Canopy Stomatal Resistance
7066 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
7067  r0stom = min( stodsv(ivgtsv(ikl,ikv)) &!
7068  & /max(eps6,glf_sv( ikl,ikv)),stxdsv) ! Min Stomatal R.
7069  f_stom = pscdsv / max(pscdsv-psivsv(ikl,ikv) ,eps6)! F(Leaf Wat.Pot.)
7070  ! DR97, eqn. 3.22
7071  r_stom =(r0stom / max(laiesv(ikl,ikv), r0stom/stxdsv))&! Can.Stomatal R.
7072  & * f_stom ! DR97, eqn. 3.21
7073 
7074 ! Evaporation / Evapotranspiration
7075 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7076  snomsk = max(zer0, sign(un_1,sncasv(ikl,ikv)-eps_21)) !
7077  evfrac = max(zer0, sign(un_1,qat_sv(ikl,ikv)-qsatvg)) ! Condensation/
7078  evfrac = evfrac &! Transpiration
7079  & + (1.-evfrac)*((1-snomsk)* rrcasv(ikl,ikv) &! Switch
7080  & /rrmxsv(ikl,ikv) &!
7081  & + snomsk *min(un_1,sncasv(ikl,ikv) &!
7082  & /rrmxsv(ikl,ikv)))!
7083  fac_ev = rht_sv(ikl,ikv) *sigmsv(ikl,ikv) ! Idem, Factor
7084  facevp = fac_ev *evfrac / rah_sv(ikl,ikv) !
7085  evp_sv(ikl,ikv) = facevp*(qsatvg - qat_sv(ikl,ikv))! Evaporation
7086  devpdt(ikl,ikv) = facevp* dqs_dt ! Evp Derivative
7087  facevt = fac_ev * (1.-evfrac) /(rah_sv(ikl,ikv)&!
7088  & +r_stom *sigmsv(ikl,ikv))!
7089  evt_sv(ikl,ikv) = facevt*(qsatvg - qat_sv(ikl,ikv))! EvapoTranspir.
7090  devtdt(ikl,ikv) = facevt* dqs_dt ! EvT Derivative
7091  hlv_sv(ikl,ikv) =-lhvh2o*(evp_sv(ikl,ikv)+ evt_sv(ikl,ikv)) &! Latent Heat
7092  & -lhfh2o* evp_sv(ikl,ikv)* snomsk !(Subli.Contrib.)
7093  dhldtv(ikl,ikv) = lhvh2o*(devpdt(ikl,ikv)+ devtdt(ikl,ikv)) &!
7094  & +lhfh2o* devpdt(ikl,ikv)* snomsk !
7095 
7096 
7097 ! Imbalance of the Canopy Energy Budget
7098 ! ---------------------------------------
7099 
7100  lai_ok = max(zer0, &! NO Budget if
7101  & sign(un_1, lai_sv(ikl,ikv)-eps_21)) ! no Leaves
7102  hv_tv0 = ( socasv(ikl,ikv) *sol_sv(ikl,ikv) &! Absorbed Solar
7103  & + ir_net &! NET IR
7104  & + hsv_sv(ikl,ikv) &! Sensible Heat
7105  & + hlv_sv(ikl,ikv) &! Latent Heat
7106  & ) *lai_ok !
7107 
7108 ! OUTPUT/Verification: Energy/Water Budget
7109 ! #e1 ETVg_d(ikl,ikv) = Hv_Tv0 ! Veg.Energ.Bal.
7110 
7111  hswich = 1.00
7112 ! #NN Hswich = max(zer0, &! Newton-Raphson
7113 ! #NN& sign(un_1, abs(Hv_Tv0 ) &! Switch
7114 ! #NN& -Hv_MIN )) !
7115 
7116 
7117 ! Derivative of the Canopy Energy Budget
7118 ! ---------------------------------------
7119 
7120  dhvdtv = dirdtv(ikl,ikv) * max(eps_21,tau_ca) &
7121  & - dhsdtv(ikl,ikv) &
7122  & - dhldtv(ikl,ikv)
7123 
7124 
7125 ! Update Canopy and Surface/Canopy Temperatures
7126 ! ---------------------------------------------
7127 
7128  d_tveg = hv_tv0 / dhvdtv !
7129  d_tveg = sign(un_1,d_tveg) &! Increment
7130  & *min( abs(d_tveg) ,dtvmax) ! Limitor
7131  tvegsv(ikl,ikv) = tvegsv(ikl,ikv) - hswich *d_tveg ! Newton-Raphson
7132  hv_max = max(hv_max,abs(hv_tv0 )) !
7133 
7134 
7135 ! Update Vegetation Fluxes
7136 ! ------------------------
7137 
7138 ! #NN IRv_sv(ikl,ikv) = IRv_sv(ikl,ikv)-dIRdTv(ikl,ikv) *d_Tveg ! Emitted IR
7139 ! #NN HSv_sv(ikl,ikv) = HSv_sv(ikl,ikv)+dHSdTv(ikl,ikv) *d_Tveg ! Sensible Heat
7140 ! #NN Evp_sv(ikl,ikv) = Evp_sv(ikl,ikv)-dEvpdT(ikl,ikv) *d_Tveg ! Evapotranspir.
7141 ! #NN EvT_sv(ikl,ikv) = EvT_sv(ikl,ikv)-dEvTdT(ikl,ikv) *d_Tveg ! Evapotranspir.
7142 ! #NN HLv_sv(ikl,ikv) = HLv_sv(ikl,ikv)+dHLdTv(ikl,ikv) *d_Tveg ! Latent Heat
7143 
7144  irv_sv(ikl,ikv) = irv_sv(ikl,ikv) *lai_ok
7145  hsv_sv(ikl,ikv) = hsv_sv(ikl,ikv) *lai_ok
7146  evp_sv(ikl,ikv) = evp_sv(ikl,ikv) *lai_ok
7147  evt_sv(ikl,ikv) = evt_sv(ikl,ikv) *lai_ok
7148  hlv_sv(ikl,ikv) = hlv_sv(ikl,ikv) *lai_ok
7149  END DO
7150  END DO
7151 
7152 ! #AX IF ( nit.lt.nitmax) GO TO 101
7153  IF (hv_max.gt.hv_min.and.nit.lt.nitmax) GO TO 101
7154 
7155  DO ikl=1,kcolp
7156  DO ikv=1,mwp
7157  irv_sv(ikl,ikv) = irv_sv(ikl,ikv) &! Emitted IR
7158  & +dirdtv(ikl,ikv) *(tvegsv(ikl,ikv)-tveg_0(ikl,ikv))!
7159  hsv_sv(ikl,ikv) = hsv_sv(ikl,ikv) &! Sensible Heat
7160  & -dhsdtv(ikl,ikv) *(tvegsv(ikl,ikv)-tveg_0(ikl,ikv))!
7161  evp_sv(ikl,ikv) = evp_sv(ikl,ikv) &! Evaporation
7162  & +devpdt(ikl,ikv) *(tvegsv(ikl,ikv)-tveg_0(ikl,ikv))!
7163  evt_sv(ikl,ikv) = evt_sv(ikl,ikv) &! Transpiration
7164  & +devtdt(ikl,ikv) *(tvegsv(ikl,ikv)-tveg_0(ikl,ikv))!
7165  hlv_sv(ikl,ikv) = hlv_sv(ikl,ikv) &! Latent Heat
7166  & -dhldtv(ikl,ikv) *(tvegsv(ikl,ikv)-tveg_0(ikl,ikv))!
7167 
7168 ! OUTPUT for Stand Alone NetCDF File
7169 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7170  hlv_kl(ikl,ikv) = hlv_sv(ikl,ikv)
7171 
7172 
7173 ! Update Canopy Water Content
7174 ! ---------------------------
7175 
7176  rrcasv(ikl,ikv) = rrcasv(ikl,ikv)-(1.-snomsk)*evp_sv(ikl,ikv)*dt__sv
7177  sncasv(ikl,ikv) = sncasv(ikl,ikv)- snomsk *evp_sv(ikl,ikv)*dt__sv
7178 
7179 ! Correction for Positive Definiteness (see WKarea/EvpVeg/EvpVeg.f)
7180 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7181  rrcaok = max(rrcasv(ikl,ikv), 0.)
7182  sncaok = max(sncasv(ikl,ikv), 0.)
7183  devpok = (rrcaok-rrcasv(ikl,ikv) &
7184  & +sncaok-sncasv(ikl,ikv))/dt__sv
7185 
7186  evp_sv(ikl,ikv) = evp_sv(ikl,ikv) - devpok ! Evaporation
7187  hlv_sv(ikl,ikv) = hlv_sv(ikl,ikv) &! Latent Heat
7188  & +(1.-snomsk)* lhvh2o * devpok &!
7189  & + snomsk *(lhvh2o+lhfh2o) * devpok !
7190 
7191  rrcasv(ikl,ikv) = rrcaok
7192  sncasv(ikl,ikv) = sncaok
7193 
7194  END DO
7195  END DO
7196 
7197 
7198 
7199 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7200 ! !
7201 ! DE-ALLOCATION !
7202 ! ============= !
7203 
7204  IF (flagdalloc) THEN !
7205 
7206 ! #e1 deallocate ( ETVg_d ) ! VegetationPower, Forcing
7207  deallocate ( tveg_0 ) ! Canopy Temperature, Previous t
7208  deallocate ( dirdtv ) ! InfraRed NET(t), Derivative(t)
7209  deallocate ( dhsdtv ) ! Sensible Heat FL. Derivative(t)
7210  deallocate ( dhldtv ) ! Latent Heat FL. Derivative(t)
7211  deallocate ( devpdt ) ! Evapo(transpi)ration Derivative
7212  deallocate ( devtdt ) ! Evapo(transpi)ration Derivative
7213 
7214  END IF !
7215 ! !
7216 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7217 
7218 
7219  return
7220  end subroutine sisvat_tvg
7221 
7222 
7223 
7224  subroutine sisvat_tso( &
7225 ! #e1& ,ETSo_0,ETSo_1,ETSo_d,kcolw &
7226  & )
7228 !--------------------------------------------------------------------------+
7229 ! MAR SISVAT_TSo Wed 26-Jun-2013 MAR |
7230 ! SubRoutine SISVAT_TSo computes the Soil/Snow Energy Balance |
7231 ! |
7232 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
7233 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
7234 ! |
7235 !--------------------------------------------------------------------------+
7236 ! |
7237 ! PARAMETERS: kcolv: Total Number of columns = |
7238 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
7239 ! X Number of Mosaic Cell per grid box |
7240 ! |
7241 ! INPUT: isotSV = 0,...,11: Soil Type |
7242 ! ^^^^^ 0: Water, Solid or Liquid |
7243 ! isnoSV = total Nb of Ice/Snow Layers |
7244 ! dQa_SV = Limitation of Water Vapor Turbulent Flux |
7245 ! |
7246 ! INPUT: sol_SV : Downward Solar Radiation [W/m2] |
7247 ! ^^^^^ IRd_SV : Surface Downward Longwave Radiation [W/m2] |
7248 ! za__SV : SBL Top Height [m] |
7249 ! VV__SV : SBL Top Wind Speed [m/s] |
7250 ! TaT_SV : SBL Top Temperature [K] |
7251 ! ExnrSV : Exner Potential [-] |
7252 ! rhT_SV : SBL Top Air Density [kg/m3] |
7253 ! QaT_SV : SBL Top Specific Humidity [kg/kg] |
7254 ! LSdzsv : Vertical Discretization Factor [-] |
7255 ! = 1. Soil |
7256 ! = 1000. Ocean |
7257 ! dzsnSV : Snow Layer Thickness [m] |
7258 ! ro__SV : Snow/Soil Volumic Mass [kg/m3] |
7259 ! eta_SV : Soil Water Content [m3/m3] |
7260 ! dt__SV : Time Step [s] |
7261 ! |
7262 ! SoSosv : Absorbed Solar Radiation by Surfac.(Normaliz)[-] |
7263 ! IRv_sv : Vegetation IR Radiation [W/m2] |
7264 ! tau_sv : Fraction of Radiation transmitted by Canopy [-] |
7265 ! Evg_sv : Soil+Vegetation Emissivity [-] |
7266 ! Eso_sv : Soil+Snow Emissivity [-] |
7267 ! rah_sv : Aerodynamic Resistance for Heat [s/m] |
7268 ! Lx_H2O : Latent Heat of Vaporization/Sublimation [J/kg] |
7269 ! Sigmsv : Canopy Ventilation Factor [-] |
7270 ! sEX_sv : Verticaly Integrated Extinction Coefficient [-] |
7271 ! |
7272 ! INPUT / TsisSV : Soil/Ice Temperatures (layers -nsoil,-nsoil+1 ,0)|
7273 ! OUTPUT: & Snow Temperatures (layers 1,2,...,nsno) [K] |
7274 ! ^^^^^^ |
7275 ! |
7276 ! OUTPUT: IRs_SV : Soil IR Radiation [W/m2] |
7277 ! ^^^^^^ HSs_sv : Sensible Heat Flux [W/m2] |
7278 ! HLs_sv : Latent Heat Flux [W/m2] |
7279 ! ETSo_0 : Snow/Soil Energy Power, before Forcing [W/m2] |
7280 ! ETSo_1 : Snow/Soil Energy Power, after Forcing [W/m2] |
7281 ! ETSo_d : Snow/Soil Energy Power Forcing [W/m2] |
7282 ! |
7283 ! METHOD: NO Skin Surface Temperature |
7284 ! ^^^^^^ Semi-Implicit Crank Nicholson Scheme |
7285 ! |
7286 ! REFERENCE: DR97: Koen de Ridder thesis, UCL, 1997 |
7287 ! ^^^^^^^^^ |
7288 ! |
7289 ! Preprocessing Option: |
7290 ! ^^^^^^^^^^^^^^^^^^^^^ |
7291 ! #WL: TURBULENCE: u*q* limited to SBL Saturat.Specif.Humid. |
7292 ! #TR: TURBULENCE: Richardson Number: T Derivative is used |
7293 ! #TL: TURBULENCE: Latent Heat Flux: T Derivative is used |
7294 ! #nc: OUTPUT Preparation for Stand Alone NetCDF File |
7295 ! |
7296 ! |
7297 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
7298 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
7299 ! FILE | CONTENT |
7300 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
7301 ! # SISVAT_iii_jjj_n | #e1: OUTPUT/Verification: Energy Conservation |
7302 ! | |
7303 !--------------------------------------------------------------------------+
7304 
7305 
7306 ! Global Variables
7307 ! =================
7308 
7309  use mod_real
7310  use mod_phy____dat
7311  use mod_phy____grd
7312  use mod_sisvat_grd
7313 
7314 
7315 
7316 ! General Variables
7317 ! =================
7318 
7319  use mod_sisvat_ctr
7320  use mod_sisvat_dat
7321  use mod_sisvat_dzs
7322  use mod_sisvat_kkl
7323  use mod_sisvat_loc
7324  use mod_sisvat_flx
7325 
7326 
7327 
7328 ! Internal Variables
7329 ! ==================
7330 
7331  use mod_sisvatltso
7332 
7333 
7334  IMPLICIT NONE
7335 
7336 
7337  real(kind=real8) :: deltak
7338  real(kind=real8) :: Exp_SA, Imp_SA
7339  real(kind=real8) :: ExpTOP, ImpTOP
7340  real(kind=real8) :: ExpHSL, ImpHSL
7341  real(kind=real8) :: epsi15= 1.0e-15
7342  integer :: is1 , is2
7343 
7344 
7345 ! OUTPUT/Verification: Energy/Water Budget
7346 ! #e1 real(kind=real8), dimension(kcolw):: ETSo_0 ! Soil/Snow Power, before Forcing
7347 ! #e1 real(kind=real8), dimension(kcolw):: ETSo_1 ! Soil/Snow Power, after Forcing
7348 ! #e1 real(kind=real8), dimension(kcolw):: ETSo_d ! Soil/Snow Power, Forcing
7349 
7350  integer :: ikl,ikv ,isl!
7351  integer :: jsl ,isn !
7352  integer :: isHigh ! Order of the tridiagonal Matrix
7353  integer :: ist__s,ist__w,ist ! Soil/Water Body Identifier
7354  integer :: islsgn ! Soil/Snow Surfac.Identifier
7355 
7356  real(kind=real8) :: eps__3= 1.e-3 ! Arbitrary Low Number
7357  real(kind=real8) :: etaMid,psiMid ! Layer Interface's Humidity
7358  real(kind=real8) :: mu_eta ! Soil thermal Conductivity
7359  real(kind=real8) :: mu_exp=-0.4343! arg Soil thermal Conductivity
7360  real(kind=real8) :: mu_min= 0.172 ! Min Soil thermal Conductivity
7361  real(kind=real8) :: mu_max= 2.000 ! Max Soil thermal Conductivity
7362  real(kind=real8) :: mu_aux ! Snow thermal Conductivity
7363  real(kind=real8) :: dTSurf ! Previous Surface Temperature
7364  real(kind=real8) :: den_qs,arg_qs ! Soil Saturat. Spec. Humidity
7365  real(kind=real8) :: esat_i ! Saturation Vapor Pressure [hPa]
7366  real(kind=real8) :: etaSol ! Soil Surface Humidity
7367  real(kind=real8) :: d__eta ! Soil Surface Humidity Increm.
7368  real(kind=real8) :: Elem_A !
7369  real(kind=real8) :: ElemaA,ElemsA ! Diagonal Coefficients
7370  real(kind=real8) :: Elem_C !
7371  real(kind=real8) :: ElemaC,ElemsC ! Diagonal Coefficients
7372  real(kind=real8) :: Ts_Min = 175. ! Snow MIN Temperature
7373  real(kind=real8) :: Ts_Max = 300. ! Snow MIN Temperature Acceptable
7374  ! both including Snow Melt Energy
7375 
7376 ! OUTPUT/Verification: Energy/Water Budget
7377 ! #e1 real(kind=real8) :: Exist0 ! Existing Layer Switch
7378 
7379  integer,parameter :: nt_srf=10 !
7380  integer :: it_srf,itEuBk ! HL: Surface Scheme
7381  real(kind=real8) :: agpsrf,xgpsrf !
7382  real(kind=real8) :: dt_srf,dt_ver !
7383 
7384 
7385 
7386 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7387 ! !
7388 ! ALLOCATION !
7389 ! ========== !
7390 
7391  IF (it_run.EQ.1 .OR. flagdalloc) THEN !
7392 
7393  allocate ( tsisva(kcolp,mwp,-nsoil:nsnow+mzp) ) !
7394  allocate ( fsisva(kcolp,mwp) ) !
7395  allocate ( dza__1(kcolp,mwp) ) !
7396  allocate ( mu_sno(kcolp,mwp) ) ! Snow thermal Conductivity
7397  allocate ( mu__dz(kcolp,mwp,-nsoil:nsnow+1) ) ! mu_(eta,sno) / dz
7398  allocate ( dtc_sv(kcolp,mwp,-nsoil:nsnow) ) ! dt / C
7399  allocate ( irs__d(kcolp,mwp) ) ! UpwardIR Previous Iter.Contr.
7400  allocate ( dirsdt(kcolp,mwp) ) ! UpwardIR T Derivat.
7401  allocate ( f_hshl(kcolp,mwp) ) ! Factor common to HS and HL
7402  allocate ( dridts(kcolp,mwp) ) ! d(Rib)/d(Ts)
7403  allocate ( hs___d(kcolp,mwp) ) ! Sensible Heat Flux Atm.Contr.
7404  allocate ( f___hl(kcolp,mwp) ) !
7405  allocate ( hl___d(kcolp,mwp) ) ! Latent Heat Flux Atm.Contr.
7406  allocate ( tsurf0(kcolp,mwp) ) ! Previous Surface Temperature
7407  allocate ( qsatsg(kcolp,mwp) ) ! Soil Saturat. Spec. Humidity
7408  allocate ( dqs_dt(kcolp,mwp) ) ! d(qsatsg)/dTv
7409  allocate ( psi( kcolp,mwp) ) ! 1st Soil Layer Water Potential
7410  allocate ( rhusol(kcolp,mwp) ) ! Soil Surface Relative Humidity
7411  allocate ( rhu_av(kcolp,mwp) ) ! Soil Surface Relative Humidity
7412  allocate ( diag_a(kcolp,mwp,-nsoil:nsnow+mzp) ) ! A Diagonal
7413  allocate ( diag_b(kcolp,mwp,-nsoil:nsnow+mzp) ) ! B Diagonal
7414  allocate ( diag_c(kcolp,mwp,-nsoil:nsnow+mzp) ) ! C Diagonal
7415  allocate ( term_d(kcolp,mwp,-nsoil:nsnow+mzp) ) ! Independant Term
7416  allocate ( aux__p(kcolp,mwp,-nsoil:nsnow+mzp) ) ! P Auxiliary Variable
7417  allocate ( aux__q(kcolp,mwp,-nsoil:nsnow+mzp) ) ! Q Auxiliary Variable
7418  allocate ( etabak(kcolp,mwp) ) !
7419  allocate ( etanew(kcolp,mwp) ) !
7420  allocate ( eteubk(kcolp,mwp) ) !
7421  allocate ( fac_dt(kcolp,mwp) ) !
7422  allocate ( faceta(kcolp,mwp) ) !
7423  allocate ( psiarg(kcolp,mwp) ) !
7424  allocate ( shusol(kcolp,mwp) ) !
7425 
7426  END IF !
7427 ! !
7428 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7429 
7430 
7431 
7432 ! Implicitness of the numerical Scheme at Surface - Atmosphere Interface
7433 ! ======================================================================
7434 
7435 ! vvvvvvvv
7436  IF (svakzt) THEN
7437  IF(mzp.LT.2) svaubc = .true.
7438  exp_sa = explic
7439  imp_sa = implic
7440  ELSE
7441  exp_sa = 1.00
7442  imp_sa = 0.00
7443  END IF
7444  exphsl = 0.00
7445  imphsl = 1.00
7446 
7447 
7448 
7449 
7450 ! Heat Conduction Coefficient (zero in the Layers over the highest one)
7451 ! ===========================
7452 ! ---------------- isl eta_SV, rho C (isl)
7453 !
7454 ! Soil ++++++++++++++++ etaMid, mu (isl)
7455 ! ----
7456 ! ---------------- isl-1 eta_SV, rho C (isl-1)
7457 
7458  DO ikl=1,kcolp
7459  DO ikv=1,mwp
7460 ! __________
7461  isl=-nsoil
7462 
7463  mu__dz(ikl,ikv,isl) = 0.
7464 
7465  dtc_sv(ikl,ikv,isl) = dtz_sv(isl) &! dt / (dz X rho C)
7466  & /((rocssv(isotsv(ikl,ikv)) &! [s / (m.J/m3/K)]
7467  & +rcwdsv*eta_sv(ikl,ikv,isl)) &!
7468  & *lsdzsv(ikl,ikv) ) !
7469 ! #kv END DO
7470 ! #kv END DO
7471 ! ______________
7472  DO isl=-nsoil+1,0
7473 ! #kv DO ikl=1,kcolp
7474 ! #kv DO ikv=1,mwp
7475  ist = isotsv(ikl,ikv) ! Soil Type
7476  ist__s = min(ist, 1) ! 1 => Soil
7477  ist__w = 1 - ist__s ! 1 => Water Body
7478 
7479  etamid = 0.5*(dz_dsv(isl-1)*eta_sv(ikl,ikv,isl-1) &! eta at layers
7480  & +dz_dsv(isl) *eta_sv(ikl,ikv,isl) ) &! interface
7481  & /dzmisv(isl) ! LSdzsv implicit !
7482  etamid = max(etamid,eps6)
7483  psimid = psidsv(ist) &!
7484  & *(etadsv(ist)/etamid)**bchdsv(ist) !
7485  mu_eta = 3.82 *(psimid)**mu_exp ! Soil Thermal
7486  mu_eta = min(max(mu_eta, mu_min), mu_max) ! Conductivity
7487  ! DR97 eq.3.31
7488  mu_eta = ist__s *mu_eta +ist__w * vk_dsv ! Water Bodies
7489  ! Correction
7490  mu__dz(ikl,ikv,isl) = mu_eta/(dzmisv(isl) &!
7491  & *lsdzsv(ikl,ikv)) !
7492 
7493  dtc_sv(ikl,ikv,isl) = dtz_sv(isl) &! dt / (dz X rho C)
7494  & /((rocssv(isotsv(ikl,ikv)) &!
7495  & +rcwdsv*eta_sv(ikl,ikv,isl)) &!
7496  & *lsdzsv(ikl,ikv) ) !
7497 ! #kv END DO
7498 ! #kv END DO
7499  END DO
7500 
7501 
7502 ! Soil/Snow Interface
7503 ! -------------------
7504 
7505 ! Soil Contribution
7506 ! ^^^^^^^^^^^^^^^^^
7507 ! _____
7508  isl=1
7509 ! #kv DO ikl=1,kcolp
7510 ! #kv DO ikv=1,mwp
7511  ist = isotsv(ikl,ikv) ! Soil Type
7512  ist__s = min(ist, 1) ! 1 => Soil
7513  ist__w = 1 - ist__s ! 1 => Water Body
7514  psimid = psidsv(ist) ! Snow => Saturation
7515  mu_eta = 3.82 *(psimid)**mu_exp ! Soil Thermal
7516  mu_eta = min(max(mu_eta, mu_min), mu_max) ! Conductivity
7517  ! DR97 eq.3.31
7518  mu_eta = ist__s *mu_eta +ist__w * vk_dsv ! Water Bodies
7519 
7520 ! Snow Contribution
7521 ! ^^^^^^^^^^^^^^^^^
7522  mu_sno(ikl,ikv) = cdidsv &!
7523  & *(ro__sv(ikl,ikv,isl) /rhowat) ** 1.88 !
7524  mu_sno(ikl,ikv) = max(eps6,mu_sno(ikl,ikv))!
7525 ! mu_sno : Snow Heat Conductivity Coefficient [Wm/K]
7526 ! (Yen 1981, CRREL Rep., 81-10)
7527 
7528 ! Combined Heat Conductivity
7529 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
7530  mu__dz(ikl,ikv,isl) = 2./(dzsnsv(ikl,ikv,isl )&! Combined Heat
7531  & /mu_sno(ikl,ikv) &! Conductivity
7532  & +lsdzsv(ikl,ikv) &!
7533  & *dz_dsv( isl-1)/mu_eta) ! Coefficient
7534 
7535 ! Inverted Heat Capacity
7536 ! ^^^^^^^^^^^^^^^^^^^^^^
7537  dtc_sv(ikl,ikv,isl) = dt__sv/max(eps6, &! dt / (dz X rho C)
7538  & dzsnsv(ikl,ikv,isl) * ro__sv(ikl,ikv,isl) *cn_dsv) !
7539 
7540 
7541 ! Snow
7542 ! ----
7543 
7544 ! _____________________
7545  DO isl=1,isnosv(ikl,ikv)
7546  ro__sv(ikl,ikv,isl) = &!
7547  & ro__sv(ikl,ikv ,isl) &!
7548  & * max(0,min(isnosv(ikl,ikv)-isl+1,1)) !
7549  END DO
7550 
7551 ! _____________________
7552  DO isl=1,isnosv(ikl,ikv)
7553 
7554 ! Combined Heat Conductivity
7555 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
7556  mu_aux = cdidsv &!
7557  & *(ro__sv(ikl,ikv,isl) /rhowat) ** 1.88 !
7558  mu__dz(ikl,ikv,isl) = &!
7559  & 2. *mu_aux*mu_sno(ikl,ikv)&! Combined Heat
7560  & /max(eps6,dzsnsv(ikl,ikv,isl )*mu_sno(ikl,ikv) &! Conductivity
7561  & +dzsnsv(ikl,ikv,isl-1)*mu_aux ) ! For upper Layer
7562  mu_sno(ikl,ikv) = mu_aux !
7563 
7564 ! Inverted Heat Capacity
7565 ! ^^^^^^^^^^^^^^^^^^^^^^
7566  dtc_sv(ikl,ikv,isl) = dt__sv/max(eps__3, &! dt / (dz X rho C)
7567  & dzsnsv(ikl,ikv,isl) * ro__sv(ikl,ikv,isl) *cn_dsv) !
7568  END DO
7569 ! #kv END DO
7570 ! #kv END DO
7571 
7572 
7573 ! Uppermost Effective Layer: NO conduction
7574 ! ----------------------------------------
7575 
7576 ! #kv DO ikl=1,kcolp
7577 ! #kv DO ikv=1,mwp
7578  mu__dz(ikl,ikv,isnosv(ikl,ikv)+1) = 0.0
7579 
7580 
7581 
7582 ! Soil - Ice - Snow - Vegetation - Atmosphere Variable
7583 ! ====================================================
7584 
7585  dza__1(ikl,ikv) =(zza_sv(ikl,ikv,min(mzp,2)) + zza_sv(ikl,ikv,1)) * 0.5
7586 
7587 ! vvvvvvvv
7588 ! IF (SVaKzT) THEN
7589  fsisva(ikl,ikv) = p0_kap * roa_sv(ikl,ikv,1) * dza__1(ikl,ikv) &
7590  & * dtc_sv(ikl,ikv,isnosv( ikl,ikv))* cpdair / dt__sv
7591 ! END IF
7592 
7593 ! Soil/Snow Interior
7594 ! ^^^^^^^^^^^^^^^^^^
7595 ! __________
7596  DO isl=-nsoil ,isnosv(ikl,ikv)
7597  tsisva(ikl,ikv,isl) = tsissv(ikl,ikv,isl) &
7598  & * p0_kap / exnrsv(ikl,ikv)
7599  END DO
7600 ! #kv END DO
7601 ! #kv END DO
7602 
7603 ! Atmosphere
7604 ! ^^^^^^^^^^
7605 ! vvvvvvvv
7606 ! IF (SVaKzT) THEN
7607 ! _________
7608  DO isl=1,mzp
7609 ! #kv DO ikl=1,kcolp
7610 ! #kv DO ikv=1,mwp
7611  isn=isnosv(ikl,ikv)+isl
7612  tsisva(ikl,ikv,isn) = pktasv(ikl,ikv,isl) * fsisva(ikl,ikv)
7613 ! #kv END DO
7614 ! #kv END DO
7615  END DO
7616 
7617 ! END IF
7618 
7619 
7620 ! OUTPUT/Verification: Energy/Water Budget: Energy Budget (IN)
7621 ! #e1 DO ikl=1,kcolp
7622 ! #e1 DO ikv=1,mwp
7623 ! #e1 ETSo_0(ikl,ikv) = 0.
7624 ! #e1 END DO
7625 ! #e1 END DO
7626 ! #e1 DO ikl=1,kcolp
7627 ! #e1 DO ikv=1,mwp
7628 ! #e1 DO isl= -nsoil,isnoSV(ikl,ikv)
7629 ! #e1 Exist0 = isl - isnoSV(ikl,ikv)
7630 ! #e1 Exist0 = 1. - max(zer0,min(un_1,Exist0))
7631 ! #e1 ETSo_0(ikl,ikv) = ETSo_0(ikl,ikv) &
7632 ! #e1& +(TsisSV(ikl,ikv,isl)-Tf_Sno)*Exist0 &
7633 ! #e1& /dtC_sv(ikl,ikv,isl)
7634 ! #e1 END DO
7635 ! #e1 END DO
7636 ! #e1 END DO
7637 
7638 
7639 ! Tridiagonal Elimination: Set Up
7640 ! ===============================
7641 
7642 ! #kv DO ikl=1,kcolp
7643 ! #kv DO ikv=1,mwp
7644 ! _______________________________
7645  DO isl= -nsoil+1,isnosv(ikl,ikv)-1
7646  elem_a = dtc_sv(ikl,ikv,isl) *mu__dz(ikl,ikv,isl)
7647  elem_c = dtc_sv(ikl,ikv,isl) *mu__dz(ikl,ikv,isl+1)
7648  diag_a(ikl,ikv,isl) = -elem_a *implic
7649  diag_c(ikl,ikv,isl) = -elem_c *implic
7650  diag_b(ikl,ikv,isl) = 1.0d+0 -diag_a(ikl,ikv,isl)-diag_c(ikl,ikv,isl)
7651  term_d(ikl,ikv,isl) = explic *(elem_a *tsisva(ikl,ikv,isl-1) &
7652  & +elem_c *tsisva(ikl,ikv,isl+1)) &
7653  & +(1.0d+0 -explic *(elem_a+elem_c))*tsisva(ikl,ikv,isl)&
7654  & + dtc_sv(ikl,ikv,isl) * sol_sv(ikl,ikv) *sososv(ikl,ikv)&
7655  & *(sex_sv(ikl,ikv,isl+1) &
7656  & -sex_sv(ikl,ikv,isl )) &
7657  & *p0_kap / exnrsv(ikl,ikv)
7658  END DO
7659 
7660 ! #kv END DO
7661 ! #kv END DO
7662 
7663 ! Soil lowest Layer
7664 ! ^^^^^^^^^^^^^^^^^^
7665 ! ___________
7666  isl= -nsoil
7667 ! #kv DO ikl=1,kcolp
7668 ! #kv DO ikv=1,mwp
7669  elem_a = 0.
7670  elem_c = dtc_sv(ikl,ikv,isl) *mu__dz(ikl,ikv,isl+1)
7671  diag_a(ikl,ikv,isl) = 0.
7672  diag_c(ikl,ikv,isl) = -elem_c *implic
7673  diag_b(ikl,ikv,isl) = 1.0d+0 -diag_a(ikl,ikv,isl)-diag_c(ikl,ikv,isl)
7674  term_d(ikl,ikv,isl) = explic * elem_c *tsisva(ikl,ikv,isl+1) &
7675  & +(1.0d+0 -explic * elem_c) *tsisva(ikl,ikv,isl) ! & !
7676 ! & + dtC_sv(ikl,isl) * sol_SV(ikl) *SoSosv(ikl) & ! .NOT. needed
7677 ! & *(sEX_sv(ikl,isl+1) & ! since sEX_sv = 0.
7678 ! & -sEX_sv(ikl,isl )) & !
7679 ! & *p0_kap / ExnrSV(ikl)
7680 ! #kv END DO
7681 ! #kv END DO
7682 
7683 ! Surface: UPwardIR Heat Flux
7684 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^
7685 ! #kv DO ikl=1,kcolp
7686 ! #kv DO ikv=1,mwp
7687 ! _________________________
7688  isl = isnosv(ikl,ikv)
7689  dirsdt(ikl,ikv) = eso_sv(ikl,ikv)* stefbo * 4. &! - d(IR)/d(T)
7690  & * tsissv(ikl,ikv,isl) &!
7691  & * tsissv(ikl,ikv,isl) &!
7692  & * tsissv(ikl,ikv,isl) !
7693  irs__d(ikl,ikv) = dirsdt(ikl,ikv)* tsissv(ikl,ikv,isl) * 0.75!
7694 
7695 ! Surface: Richardson Number: T Derivative
7696 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7697 ! #TR dRidTs(ikl,ikv) =-Grav_F * za__SV(ikl,ikv) &!
7698 ! #TR& *(1.-Sigmsv(ikl,ikv)) &!
7699 ! #TR& /(TaT_SV(ikl,ikv) * VV__SV(ikl,ikv) &!
7700 ! #TR& * VV__SV(ikl,ikv)) !
7701 
7702 ! Surface: Turbulent Heat Flux: Factors
7703 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7704  f_hshl(ikl,ikv) = rht_sv(ikl,ikv) *(1.-sigmsv(ikl,ikv)) &!#common factor
7705  & / rah_sv(ikl,ikv) ! to HS, HL
7706  f___hl(ikl,ikv) = f_hshl(ikl,ikv) * lx_h2o(ikl,ikv)
7707 
7708 ! Surface: Sensible Heat Flux: T Derivative
7709 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7710  dsdtsv(ikl,ikv) = f_hshl(ikl,ikv) * cpdair &!#- d(HS)/d(T)
7711 ! #TR& *(1.0 -(TsisSV(ikl,ikv,isl) -TaT_SV(ikl,ikv)) &!#Richardson
7712 ! #TR& * dRidTs(ikl,ikv)*dFh_sv(ikl,ikv)/rah_sv(ikl,ikv)) &! Nb. Correct.
7713  & + 0.
7714  hs___d(ikl,ikv) = dsdtsv(ikl,ikv) * tat_sv(ikl,ikv) !
7715 
7716 ! Surface: Latent Heat Flux: Saturation Specific Humidity
7717 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7718 ! IF (DeRidder) THEN !
7719  den_qs = tsissv(ikl,ikv,isl)- 35.8 !
7720  arg_qs = 17.27 *(tsissv(ikl,ikv,isl)-273.16) &!
7721  & / den_qs !
7722  qsatsg(ikl,ikv) = .0038 * exp(arg_qs) *0.875 ! 0.875 = Tuning Hapex-Sahel
7723  dqs_dt(ikl,ikv) = qsatsg(ikl,ikv)* 4099.2 /(den_qs *den_qs)!
7724 ! ELSE IF (Dudhia_MAR) THEN !
7725 ! esat_i = 6.107 &!
7726 ! & *exp(ExpIsv*(un_1/WatIsv -un_1/TsisSV(ikl,isl))) !
7727 ! qsatsg(ikl) = 0.622 * esat_i &!
7728 ! & / (10.*pkPaSV(ikl) - 0.378*esat_i) !
7729 ! dqs_dT(ikl) = qsatsg(ikl) &!
7730 ! & *(1.0+0.6077*qsatsg(ikl)) &!
7731 ! & * ExpIsv/(TsisSV(ikl,isl)*TsisSV(ikl,isl)) !
7732 ! END IF
7733 
7734  fac_dt(ikl,ikv) = f_hshl(ikl,ikv)/(rhowat * dz_dsv(0)) !
7735 ! #kv END DO
7736 ! #kv END DO
7737 
7738 ! Surface: Latent Heat Flux: Surface Relative Humidity
7739 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7740  xgpsrf = 1.05 !
7741  agpsrf = dt__sv*( 1.0-xgpsrf ) &!
7742  & /( 1.0-xgpsrf**nt_srf) !
7743  dt_srf = agpsrf !
7744  dt_ver = 0. !
7745 ! #kv DO ikl=1,kcolp
7746 ! #kv DO ikv=1,mwp
7747  isl = isnosv(ikl,ikv) !
7748  etabak(ikl,ikv) = max(eps6,eta_sv(ikl,ikv ,isl))!
7749  etanew(ikl,ikv) = etabak(ikl,ikv) !
7750  eteubk(ikl,ikv) = etanew(ikl,ikv) !
7751  rhu_av(ikl,ikv) = 0.00 !
7752  shumsv(ikl,ikv) = 0.00 !
7753 ! #kv END DO
7754 ! #kv END DO
7755 ! _______________
7756  DO it_srf=1,nt_srf !
7757  dt_ver = dt_ver +dt_srf !
7758 ! #kv DO ikl=1,kcolp
7759 ! #kv DO ikv=1,mwp
7760  faceta(ikl,ikv) = fac_dt(ikl,ikv)*dt_srf !
7761 ! #WL faceta(ikl,ikv) = faceta(ikl,ikv) &!
7762 ! #WL& /(1.+faceta(ikl,ikv)*dQa_SV(ikl,ikv)) ! Limitation
7763 ! CAUTION: Please VERIFY dQa_SV Set-Up ! by Atm.Conten
7764 ! & *max(0,sign(1.,qsatsg(ikl)-QaT_SV(ikl)))) ! NO Limitation
7765 ! #kv END DO
7766 ! #kv END DO ! of Downw.Flux
7767  DO iteubk=1,2 !
7768 ! #kv DO ikl=1,kcolp
7769 ! #kv DO ikv=1,mwp
7770  ist = max(0,isotsv(ikl,ikv)-100*isnosv(ikl,ikv)) ! 0 if H2O
7771  !
7772  psi(ikl,ikv) = &!
7773  & psidsv(ist) &! DR97, Eqn 3.34
7774  & *(etadsv(ist) &!
7775  & /max(eteubk(ikl,ikv),eps6)) &!
7776  & **bchdsv(ist) !
7777  psiarg(ikl,ikv) = 7.2e-5*psi(ikl,ikv) !
7778  rhusol(ikl,ikv) = exp(-min(ea_max,psiarg(ikl,ikv)))!
7779  shusol(ikl,ikv) = qsatsg(ikl,ikv) *rhusol(ikl,ikv) ! DR97, Eqn 3.15
7780  eteubk(ikl,ikv) = &!
7781  & (etanew(ikl,ikv) + faceta(ikl,ikv)*(qat_sv(ikl,ikv) &!
7782  & -shusol(ikl,ikv) &!
7783  & *(1. -bchdsv(ist) &!
7784  & *psiarg(ikl,ikv)) ))&!
7785  & /(1. + faceta(ikl,ikv)* shusol(ikl,ikv) &!
7786  & *bchdsv(ist) &!
7787  & *psiarg(ikl,ikv) &!
7788  & /etanew(ikl,ikv)) !
7789  eteubk(ikl,ikv) = eteubk(ikl,ikv) -rootsv(ikl,ikv,0)&!
7790  & * dt_srf /(rhowat*dz_dsv(0)) !
7791 ! #kv END DO
7792 ! #kv END DO
7793  END DO !
7794 ! #kv DO ikl=1,kcolp
7795 ! #kv DO ikv=1,mwp
7796  rhu_av(ikl,ikv) = rhu_av(ikl,ikv)+rhusol(ikl,ikv)*dt_srf!
7797  shumsv(ikl,ikv) = shumsv(ikl,ikv)+shusol(ikl,ikv)*dt_srf!
7798  etanew(ikl,ikv) = max(eteubk(ikl,ikv),eps6) !
7799 ! #kv END DO
7800 ! #kv END DO
7801  dt_srf = xgpsrf *dt_srf!
7802  END DO !
7803 
7804 
7805 ! #kv DO ikl=1,kcolp
7806 ! #kv DO ikv=1,mwp
7807  rhu_av(ikl,ikv) = rhu_av(ikl,ikv) /dt_ver!
7808 ! tune RHu_av(ikl) = 0.80*RHu_av(ikl) /dt_ver!
7809 
7810 ! Surface Type : liquid or solid Water (i.e., H2O) .OR. SOIL
7811 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7812  isl = isnosv(ikl,ikv) !
7813  ist = max(0,isotsv(ikl,ikv)-100*isnosv(ikl,ikv)) ! 0 if H2O
7814  ist__s= min(1,ist) ! 1 if no H2O
7815  ist__w= 1-ist__s ! 1 if H2O
7816 
7817 ! Surface Specific Humidity :
7818 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7819  shumsv(ikl,ikv)= ist__s *shumsv(ikl,ikv) /dt_ver &! no H2O
7820  & +ist__w *qsatsg(ikl,ikv) ! H2O
7821 
7822 ! Surface: Latent Heat Flux: Soil/Water Surface Contributions
7823 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7824  d__eta = eta_sv(ikl,ikv,isl)-etanew(ikl,ikv) !
7825  hl___d(ikl,ikv)=( ist__s *rhowat *dz_dsv(0) &! Soil Contrib.
7826  & *(etanew(ikl,ikv) -etabak(ikl,ikv)) / dt__sv &!
7827  & +ist__w *f_hshl(ikl,ikv) &! H2O Contrib.
7828  & *(qat_sv(ikl,ikv) -qsatsg(ikl,ikv)) )&!
7829  & * lx_h2o(ikl,ikv) ! common factor
7830 
7831 ! Surface: Latent Heat Flux: T Derivative
7832 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7833  dldtsv(ikl,ikv) = 0.
7834 ! #TL dLdTSV(ikl,ikv) = f___HL(ikl,ikv) * dqs_dT(ikl,ikv) &!
7835 ! #TL& * RHu_av(ikl,ikv) ! - d(HL)/d(T)
7836 
7837 ! #TL HL___D(ikl,ikv) = HL___D(ikl,ikv) &!
7838 ! #TL& +dLdTSV(ikl,ikv) * TsisSV(ikl,ikv,isl)!
7839 ! #kv END DO
7840 ! #kv END DO
7841 
7842 ! Surface: Tridiagonal Matrix Set Up
7843 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7844 ! #kv DO ikl=1,kcolp
7845 ! #kv DO ikv=1,mwp
7846 ! ______________________________
7847  isl = isnosv(ikl,ikv)
7848 
7849  tsurf0(ikl,ikv) = tsissv(ikl,ikv,isl) ! Diagnostic
7850  elem_a = dtc_sv(ikl,ikv,isl)*mu__dz(ikl,ikv,isl) !
7851  elem_c = dsdtsv(ikl,ikv) ! HS/Surf.Contr.
7852  elemsc = elem_c * dtc_sv(ikl,ikv,isl) !
7853  elemac = elem_c *(dt__sv/cpdair) &!
7854  & /(roa_sv(ikl,ikv,1 )*dza__1(ikl,ikv))!
7855  diag_a(ikl,ikv,isl) = -elem_a *implic !
7856  diag_c(ikl,ikv,isl) = -elemac *imp_sa !
7857  diag_b(ikl,ikv,isl) = 1.0d+0 -diag_a(ikl,ikv,isl) &!
7858  & + elemsc *imphsl &!
7859  & + dtc_sv(ikl,ikv,isl) * (dirsdt(ikl,ikv) &! Upw. Sol IR
7860  & +dldtsv(ikl,ikv)) ! HL/Surf.Contr.
7861  term_d(ikl,ikv,isl) = explic *elem_a *tsisva(ikl,ikv,isl-1) &!
7862  & +(1.0d+0 -explic *elem_a &!
7863  & -exphsl *elemsc)*tsisva(ikl,ikv,isl)&!
7864  & +exp_sa *elemac *tsisva(ikl,ikv,isl+1) ! !T
7865  term_d(ikl,ikv,isl) = term_d(ikl,ikv,isl) &! !T
7866  & + dtc_sv(ikl,ikv,isl) * (sol_sv(ikl,ikv) *sososv(ikl,ikv)&! Absorbed
7867  & *(sex_sv(ikl,ikv,isl+1) &! Solar
7868  & -sex_sv(ikl,ikv,isl )) &!
7869  & + tau_sv(ikl,ikv) *ird_sv(ikl,ikv) *eso_sv(ikl,ikv) &! Down Atm IR
7870  & -(1.0-tau_sv(ikl,ikv)) *0.5*irv_sv(ikl,ikv) &! Down Veg IR
7871  & +irs__d(ikl,ikv) &! Upw. Sol IR
7872  & +hl___d(ikl,ikv) &! HL/Atmo.Contr.
7873  & ) * p0_kap / exnrsv(ikl,ikv) !
7874 
7875 ! SBL: Tridiagonal Matrix Set Up
7876 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7877 ! vvvvvvvv
7878  IF (svakzt) THEN
7879  kz__sv(ikl,ikv, 1) = 0.
7880  IF(svaubc) THEN
7881  kz__sv(ikl,ikv,mzp) = 0.
7882  exptop = explic
7883  imptop = implic
7884  ELSE
7885  exptop = 1.0000
7886  imptop = 0.0000
7887  END IF
7888 
7889  isl=1
7890  jsl=isnosv(ikl,ikv)
7891  isn=isnosv(ikl,ikv) +isl
7892  is1= min(isl+1,mzp)
7893  is2= min(isn+1,mzp+nsnow)
7894  elem_a = dsdtsv(ikl,ikv) &!
7895  & +dldtsv(ikl,ikv) &!
7896  & +0.0d+0
7897  elemaa = elem_a *(dt__sv/cpdair) &!
7898  & /(roa_sv(ikl,ikv,1 )*dza__1(ikl,ikv))!
7899  elemsa = elem_a * dtc_sv(ikl,ikv,jsl)
7900  diag_a(ikl,ikv,isn) = -elemsa *imp_sa !
7901  deltak= dt__sv &!
7902  & /(roa_sv(ikl,ikv,1 )*dza__1(ikl,ikv))!
7903  elem_c=deltak &!
7904  & *0.5*(roa_sv(ikl,ikv,is1 )+roa_sv(ikl,ikv,isl))&!
7905  & * kz__sv(ikl,ikv,is1 ) &!
7906  & /max(epsi15,zza_sv(ikl,ikv,is1 )-zza_sv(ikl,ikv,isl)) !
7907  diag_c(ikl,ikv,isn) = -elem_c *implic !
7908  diag_b(ikl,ikv,isn) = 1.0d+0 -diag_c(ikl,ikv,isn) &!
7909  & +elemaa *implic !
7910  term_d(ikl,ikv,isn) = elemsa *exp_sa *tsisva(ikl,ikv,isn-1) &!
7911  & +(1.0d+0 -elemaa *explic &!
7912  & -elem_c *explic)*tsisva(ikl,ikv,isn)&!
7913  & +elem_c *explic *tsisva(ikl,ikv,is2) !
7914 
7915 ! Atmosphere: Tridiagonal Matrix Set Up
7916 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7917  IF(mzp.GE.4) THEN
7918  is1=2
7919  is2=mzp-2
7920 ! ___________
7921  DO isl=is1,is2
7922  isn=isnosv(ikl,ikv)+isl !
7923  elem_a=elem_c !
7924  deltak=0.5* dt__sv /(roa_sv(ikl,ikv,isl) &!
7925  & *(zza_sv(ikl,ikv,isl+1)-zza_sv(ikl,ikv,isl-1))) !
7926  elem_c=deltak &!
7927  & *0.5*(roa_sv(ikl,ikv,isl+1)+roa_sv(ikl,ikv,isl))&!
7928  & * kz__sv(ikl,ikv,isl+1) &!
7929  & /(zza_sv(ikl,ikv,isl+1)-zza_sv(ikl,ikv,isl)) !
7930  diag_a(ikl,ikv,isn) = -implic *elem_a !
7931  diag_c(ikl,ikv,isn) = -implic *elem_c !
7932  diag_b(ikl,ikv,isn) = 1.0d+0 -diag_a(ikl,ikv,isn) &!
7933  & -diag_c(ikl,ikv,isn) !
7934  term_d(ikl,ikv,isn) = explic *elem_a *tsisva(ikl,ikv,isn-1) &!
7935  & +(1.0d+0 -explic *elem_a &!
7936  & -explic *elem_c)*tsisva(ikl,ikv,isn)&!
7937  & +explic *elem_c *tsisva(ikl,ikv,isn+1) !
7938  END DO
7939 
7940  ENDIF
7941 
7942 ! Atmosphere: Tridiagonal Matrix Set Up
7943 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7944  IF(mzp .GE.2) THEN
7945  is1=max(1,mzp-1)
7946 ! _______
7947  isl=is1
7948  isn=isnosv(ikl,ikv)+isl !
7949  elem_a=elem_c !
7950  deltak=0.5* dt__sv /(roa_sv(ikl,ikv,isl) &!
7951  & *(zza_sv(ikl,ikv,isl+1)-zza_sv(ikl,ikv,isl-1))) !
7952  elem_c=deltak &!
7953  & *0.5*(roa_sv(ikl,ikv,isl+1)+roa_sv(ikl,ikv,isl))&!
7954  & * kz__sv(ikl,ikv,isl+1) &!
7955  & /(zza_sv(ikl,ikv,isl+1)-zza_sv(ikl,ikv,isl)) !
7956  diag_a(ikl,ikv,isn) = -implic *elem_a !
7957  diag_c(ikl,ikv,isn) = -imptop *elem_c !
7958  diag_b(ikl,ikv,isn) = 1.0d+0 -diag_a(ikl,ikv,isn) &!
7959  & +implic *elem_c !
7960  term_d(ikl,ikv,isn) = explic *elem_a *tsisva(ikl,ikv,isn-1) &!
7961  & +(1.0d+0 -explic *elem_a &!
7962  & -explic *elem_c)*tsisva(ikl,ikv,isn)&!
7963  & +exptop *elem_c *tsisva(ikl,ikv,isn+1) !
7964  END IF
7965 
7966 
7967  ishigh = isnosv(ikl,ikv)+max(1,mzp-1)
7968  ELSE
7969  ishigh = isnosv(ikl,ikv)
7970  END IF
7971 ! #kv END DO
7972 ! #kv END DO
7973 
7974 
7975 
7976 ! Tridiagonal Elimination
7977 ! =======================
7978 
7979 ! Forward Sweep
7980 ! ^^^^^^^^^^^^^^
7981 ! #kv DO ikl= 1,kcolp
7982 ! #kv DO ikv=1,mwp
7983  aux__p(ikl,ikv,-nsoil) = diag_b(ikl,ikv,-nsoil)
7984  aux__q(ikl,ikv,-nsoil) =-diag_c(ikl,ikv,-nsoil)/aux__p(ikl,ikv,-nsoil)
7985 ! #kv END DO
7986 ! #kv END DO
7987 
7988 ! ___________________
7989  DO isl=-nsoil+1,ishigh
7990 ! #kv DO ikl= 1,kcolp
7991 ! #kv DO ikv=1,mwp
7992  aux__p(ikl,ikv,isl) = diag_a(ikl,ikv,isl) *aux__q(ikl,ikv,isl-1) &
7993  & +diag_b(ikl,ikv,isl)
7994  aux__q(ikl,ikv,isl) =-diag_c(ikl,ikv,isl) /aux__p(ikl,ikv,isl)
7995 ! #kv END DO
7996 ! #kv END DO
7997  END DO
7998 
7999 ! #kv DO ikl= 1,kcolp
8000 ! #kv DO ikv=1,mwp
8001  tsisva(ikl,ikv,-nsoil) = term_d(ikl,ikv,-nsoil)/aux__p(ikl,ikv,-nsoil)
8002 ! #kv END DO
8003 ! #kv END DO
8004 
8005 ! ___________________
8006  DO isl=-nsoil+1,ishigh
8007 ! #kv DO ikl= 1,kcolp
8008 ! #kv DO ikv=1,mwp
8009  tsisva(ikl,ikv,isl) =(term_d(ikl,ikv,isl) &
8010  & -diag_a(ikl,ikv,isl) *tsisva(ikl,ikv,isl-1)) &
8011  & /aux__p(ikl,ikv,isl)
8012 ! #kv END DO
8013 ! #kv END DO
8014  END DO
8015 
8016 ! Backward Sweep
8017 ! ^^^^^^^^^^^^^^
8018 ! ______________________
8019  DO isl=ishigh-1,-nsoil,-1
8020 ! #kv DO ikl=1,kcolp
8021 ! #kv DO ikv=1,mwp
8022  tsisva(ikl,ikv,isl) = aux__q(ikl,ikv,isl) *tsisva(ikl,ikv,isl+1) &
8023  & +tsisva(ikl,ikv,isl)
8024 ! #kv END DO
8025 ! #kv END DO
8026  END DO
8027 
8028 ! Go Back to Temperatures
8029 ! ^^^^^^^^^^^^^^^^^^^^^^^
8030 ! #kv DO ikl=1,kcolp
8031 ! #kv DO ikv=1,mwp
8032  DO isl=-nsoil , isnosv(ikl,ikv)
8033  tsissv(ikl,ikv,isl) = tsisva(ikl,ikv,isl) &
8034  & /(p0_kap / exnrsv(ikl,ikv))
8035  END DO
8036 
8037 ! vvvvvvvv
8038  IF (svakzt) THEN
8039 ! _________
8040  DO isl=1,mzp
8041  isn=isnosv(ikl,ikv)+isl
8042  pktasv(ikl,ikv,isl) = tsisva(ikl,ikv,isn) / fsisva(ikl,ikv)
8043  END DO
8044 
8045  IF (svaubc) THEN
8046  is1 = max( 1,mzp-1)
8047  pktasv(ikl,ikv,mzp) = pktasv(ikl,ikv,is1)
8048 ! ELSE
8049 ! pktaSV(ikl,mzp) is implicitely .NOT. modified
8050  END IF
8051 
8052  END IF
8053 
8054 ! Temperature Limits (avoids problems in case of no Snow Layers)
8055 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8056 ! _______________________________
8057  isl = isnosv(ikl,ikv)
8058 
8059  dtsurf = tsissv(ikl,ikv,isl) - tsurf0(ikl,ikv)
8060  tsissv(ikl,ikv,isl) = tsurf0(ikl,ikv) + sign(un_1,dtsurf) &! 180.0 dgC/hr
8061  & * min(abs(dtsurf),5.e-2*dt__sv) ! =0.05 dgC/s
8062 ! #kv END DO
8063 ! #kv END DO
8064 
8065 ! ___________________
8066  DO isl=nsnow,1 ,-1
8067 ! #kv DO ikl= 1,kcolp
8068 ! #kv DO ikv=1,mwp
8069  tsissv(ikl,ikv,isl) = max(ts_min, tsissv(ikl,ikv,isl))
8070  tsissv(ikl,ikv,isl) = min(ts_max, tsissv(ikl,ikv,isl))
8071 ! #kv END DO
8072 ! #kv END DO
8073  END DO
8074 
8075 
8076 ! Update Surface Fluxes
8077 ! ========================
8078 
8079 ! #kv DO ikl= 1,kcolp
8080 ! #kv DO ikv=1,mwp
8081 ! _________________________
8082  isl = isnosv(ikl,ikv)
8083 
8084  irs_sv(ikl,ikv) = irs__d(ikl,ikv) &!
8085  & - dirsdt(ikl,ikv) * tsissv(ikl,ikv,isl) !
8086  hss_sv(ikl,ikv) = hs___d(ikl,ikv) &! Sensible Heat
8087  & - dsdtsv(ikl,ikv) * tsissv(ikl,ikv,isl) ! Downward > 0
8088  hls_sv(ikl,ikv) = hl___d(ikl,ikv) &! Latent Heat
8089  & - dldtsv(ikl,ikv) * tsissv(ikl,ikv,isl) ! Downward > 0
8090 
8091 ! OUTPUT for Stand Alone NetCDF File
8092 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8093  sosokl(ikl,ikv) = sol_sv(ikl,ikv) * sososv(ikl,ikv) ! Absorbed Sol.
8094  irsokl(ikl,ikv) = irs_sv(ikl,ikv) &! Up Surf. IR
8095  & + tau_sv(ikl,ikv) *ird_sv(ikl,ikv)*eso_sv(ikl,ikv) &! Down Atm IR
8096  & -(1.0-tau_sv(ikl,ikv)) *0.5*irv_sv(ikl,ikv) ! Down Veg IR
8097  hssokl(ikl,ikv) = hss_sv(ikl,ikv) ! HS
8098  hlsokl(ikl,ikv) = hls_sv(ikl,ikv) ! HL
8099  hls_kl(ikl,ikv) = hls_sv(ikl,ikv) / lhvh2o ! mm w.e./sec
8100  END DO
8101  END DO
8102 
8103 
8104 ! OUTPUT/Verification: Energy/Water Budget: Energy Budget (OUT)
8105 ! #e1 DO ikl=1,kcolp
8106 ! #e1 DO ikv=1,mwp
8107 ! #e1 ETSo_d(ikl,ikv) = &!
8108 ! #e1& ( SoSosv(ikl,ikv) *sol_SV(ikl,ikv) &! Net Solar
8109 ! #e1& + IRs_SV(ikl,ikv) &! Up Surf. IR
8110 ! #e1& + tau_sv(ikl,ikv) *IRd_SV(ikl,ikv)*Eso_sv(ikl,ikv)&! Down Atm IR
8111 ! #e1& -(1.0-tau_sv(ikl,ikv)) *0.5*IRv_sv(ikl,ikv) &! Down Veg IR
8112 ! #e1& +HSs_sv(ikl,ikv) &! Sensible
8113 ! #e1& +HLs_sv(ikl,ikv) )! Latent
8114 ! #e1 ETSo_1(ikl,ikv) = 0.
8115 ! #e1 END DO
8116 ! #e1 END DO
8117 ! _________________
8118 ! #e1 DO isl= -nsoil,nsnow
8119 ! #e1 DO ikl=1,kcolp
8120 ! #e1 DO ikv=1,mwp
8121 ! #e1 Exist0 = isl - isnoSV(ikl,ikv)
8122 ! #e1 Exist0 = 1. - max(zer0,min(un_1,Exist0))
8123 ! #e1 ETSo_1(ikl,ikv) = ETSo_1(ikl,ikv) &!
8124 ! #e1& +(TsisSV(ikl,ikv,isl)-Tf_Sno)*Exist0 &!
8125 ! #e1& /dtC_sv(ikl,ikv,isl)
8126 ! #e1 END DO
8127 ! #e1 END DO
8128 ! #e1 END DO
8129 
8130 
8131 
8132 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8133 ! !
8134 ! DE-ALLOCATION !
8135 ! ============= !
8136 
8137  IF (flagdalloc) THEN !
8138 
8139  deallocate ( tsisva ) !
8140  deallocate ( fsisva ) !
8141  deallocate ( dza__1 ) !
8142  deallocate ( mu_sno ) ! Snow thermal Conductivity
8143  deallocate ( mu__dz ) ! mu_(eta,sno) / dz
8144  deallocate ( dtc_sv ) ! dt / C
8145  deallocate ( irs__d ) ! UpwardIR Previous Iter.Contr.
8146  deallocate ( dirsdt ) ! UpwardIR T Derivat.
8147  deallocate ( f_hshl ) ! Factor common to HS and HL
8148  deallocate ( dridts ) ! d(Rib)/d(Ts)
8149  deallocate ( hs___d ) ! Sensible Heat Flux Atm.Contr.
8150  deallocate ( f___hl ) !
8151  deallocate ( hl___d ) ! Latent Heat Flux Atm.Contr.
8152  deallocate ( tsurf0 ) ! Previous Surface Temperature
8153  deallocate ( qsatsg ) ! Soil Saturat. Spec. Humidity
8154  deallocate ( dqs_dt ) ! d(qsatsg)/dTv
8155  deallocate ( psi ) ! 1st Soil Layer Water Potential
8156  deallocate ( rhusol ) ! Soil Surface Relative Humidity
8157  deallocate ( rhu_av ) ! Soil Surface Relative Humidity
8158  deallocate ( diag_a ) ! A Diagonal
8159  deallocate ( diag_b ) ! B Diagonal
8160  deallocate ( diag_c ) ! C Diagonal
8161  deallocate ( term_d ) ! Independant Term
8162  deallocate ( aux__p ) ! P Auxiliary Variable
8163  deallocate ( aux__q ) ! Q Auxiliary Variable
8164  deallocate ( etabak ) !
8165  deallocate ( etanew ) !
8166  deallocate ( eteubk ) !
8167  deallocate ( fac_dt ) !
8168  deallocate ( faceta ) !
8169  deallocate ( psiarg ) !
8170  deallocate ( shusol ) !
8171 
8172  END IF !
8173 ! !
8174 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8175 
8176 
8177  return
8178  end subroutine sisvat_tso
8179 
8180 
8181 
8182  subroutine sisvat_qvg
8184 !--------------------------------------------------------------------------+
8185 ! MAR SISVAT_qVg Wed 26-Jun-2013 MAR |
8186 ! SubRoutine SISVAT_qVg computes the Canopy Water Balance |
8187 ! including Root Extraction |
8188 ! |
8189 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
8190 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
8191 ! |
8192 !--------------------------------------------------------------------------+
8193 ! |
8194 ! PARAMETERS: kcolv: Total Number of columns = |
8195 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
8196 ! X Number of Mosaic Cell per grid box |
8197 ! |
8198 ! INPUT: ivgtSV = 0,...,12: Vegetation Type |
8199 ! ^^^^^ 0: Water, Solid or Liquid |
8200 ! |
8201 ! INPUT: rhT_SV : SBL Top Air Density [kg/m3] |
8202 ! ^^^^^ QaT_SV : SBL Top Specific Humidity [kg/kg] |
8203 ! |
8204 ! TvegSV : Canopy Temperature [K] |
8205 ! rrCaSV : Canopy Water Content [kg/m2] |
8206 ! rrMxsv : Canopy Maximum Intercepted Rain [kg/m2] |
8207 ! rah_sv : Aerodynamic Resistance for Heat [s/m] |
8208 ! EvT_sv : EvapoTranspiration [kg/m2] |
8209 ! Sigmsv : Canopy Ventilation Factor [-] |
8210 ! glf_sv : Green Leaf Fraction of NOT fallen Leaves [-] |
8211 ! LAIesv : Leaf Area Index (effective / transpiration) [-] |
8212 ! psi_sv : Soil Water Potential [m] |
8213 ! Khydsv : Soil Hydraulic Conductivity [m/s] |
8214 ! |
8215 ! INPUT / psivSV : Leaf Water Potential [m] |
8216 ! OUTPUT: |
8217 ! ^^^^^^ |
8218 ! |
8219 ! OUTPUT: Rootsv : Root Water Pump [kg/m2/s] |
8220 ! ^^^^^^ |
8221 ! |
8222 ! REMARK: Water Extraction by roots calibrated by Evapotranspiration |
8223 ! ^^^^^^ (computed in the Canopy Energy Balance) |
8224 ! |
8225 ! REFERENCE: DR97: Koen de Ridder thesis, UCL, 1997 |
8226 ! ^^^^^^^^^ |
8227 ! |
8228 ! Preprocessing Option: |
8229 ! ^^^^^^^^^^^^^^^^^^^^^ |
8230 ! #RW: Root Water Flow slowed down by Soil Hydraulic Conductivity |
8231 ! |
8232 !--------------------------------------------------------------------------+
8233 
8234 
8235 ! Global Variables
8236 ! =================
8237 
8238  use mod_real
8239  use mod_phy____dat
8240  use mod_phy____grd
8241  use mod_sisvat_grd
8242 
8243 
8244 
8245 ! General Variables
8246 ! =================
8247 
8248  use mod_sisvat_dat
8249  use mod_sisvat_dzs
8250  use mod_sisvat_kkl
8251  use mod_sisvat_loc
8252 
8253 
8254 
8255 ! Internal Variables
8256 ! ==================
8257 
8258  use mod_sisvatlqvg
8259 
8260 
8261  IMPLICIT NONE
8262 
8263  integer :: ikl,ikv ,isl ! Grid Point, Layer Indices
8264  integer :: nitmax = 5 ! Maximum Iterations Number
8265  integer :: nit ! Iterations Counter
8266  real(kind=real8) :: psidif ! Soil-Canopy Water Pot. Differ.
8267  real(kind=real8) :: Root_W ! Root Water Flow
8268  real(kind=real8) :: RootOK ! Roots take Water in Soil Layer
8269  real(kind=real8) :: d_psiv ! Canopy Water Increment
8270  real(kind=real8) :: dpvMAX = 20. ! Canopy Water Increment MAX
8271  real(kind=real8) :: BWater ! Imbalance of Canopy Water Budg.
8272  real(kind=real8) :: BW_MAX ! MAX Imbal.of Canopy Water Budg.
8273  real(kind=real8) :: BW_MIN = 4.e-8 ! MIN Imbal.of Canopy Water Budg.
8274  real(kind=real8) :: dBwdpv ! Derivativ.of Canopy Water Budg.
8275  real(kind=real8) :: Bswich ! Newton-Raphson Switch
8276  real(kind=real8) :: EvFrac ! Condensat./Transpiration Switch
8277  real(kind=real8) :: den_qs,arg_qs !
8278 ! real(kind=real8) :: esat_i ! Saturation Vapor Pressure [hPa]
8279  real(kind=real8) :: qsatvg ! Canopy Saturat. Spec. Humidity
8280  real(kind=real8) :: EvTran ! EvapoTranspiration
8281  real(kind=real8) :: dEdpsi ! Evapotranspiration Derivative
8282  real(kind=real8) :: Fac_Ev,FacEvT ! Evapotranspiration Factors
8283  real(kind=real8) :: denomE ! Evapotranspiration Denominator
8284  real(kind=real8) :: F_Stom ! Funct. (Leaf Water Potential)
8285  real(kind=real8) :: dFdpsi ! Derivative of F_Stom
8286  real(kind=real8) :: denomF ! Denominator of F_Stom
8287  real(kind=real8) :: F___OK ! (psi>psi_c) => F_Stom swich ON
8288  real(kind=real8) :: R0Stom ! Minimum Stomatal Resistance
8289  real(kind=real8) :: R_Stom ! Stomatal Resistance
8290  real(kind=real8) :: dRdpsi ! Derivat.Stomatal Resistance
8291  real(kind=real8) :: numerR ! Numerat.Stomatal Resistance
8292 
8293 
8294 
8295 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8296 ! !
8297 ! ALLOCATION !
8298 ! ========== !
8299 
8300  IF (it_run.EQ.1 .OR. flagdalloc) THEN !
8301 
8302  allocate ( plantw(kcolp,mwp) ) ! Plant Water
8303  allocate ( dpdpsi(kcolp,mwp) ) ! Plant Water psi Derivative
8304  allocate ( psiv_0(kcolp,mwp) ) ! Canopy Temperature, Previous t
8305 
8306  END IF !
8307 ! !
8308 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8309 
8310 
8311 
8312 ! Newton-Raphson Scheme
8313 ! =====================
8314 
8315  nit = 0
8316  101 CONTINUE
8317  nit = nit + 1
8318  bw_max = 0.
8319 
8320 
8321 ! W.Potential of the Previous Time Step
8322 ! -------------------------------------
8323 
8324  DO ikl=1,kcolp
8325  DO ikv=1,mwp
8326  psiv_0(ikl,ikv) = psivsv(ikl,ikv)
8327 
8328 
8329 ! Extraction of Soil Water through the Plant Roots
8330 ! ------------------------------------------------
8331 
8332  plantw(ikl,ikv) = 0. ! Plant Water
8333  dpdpsi(ikl,ikv) = 0. ! Idem, Derivat.
8334  END DO
8335  END DO
8336  DO isl= -nsoil,0
8337  DO ikl=1,kcolp
8338  DO ikv=1,mwp
8339  psidif = psivsv(ikl,ikv)-(dh_dsv(ivgtsv(ikl,ikv))&! Soil-Canopy Water
8340  & +psi_sv( ikl,ikv ,isl))! Potential Diff.
8341  root_w = rhowat * rf__sv(ivgtsv(ikl,ikv),isl)&! If > 0, Contrib.
8342  & /max(eps_21,pr_dsv(ivgtsv(ikl,ikv)) &! to Root Water
8343 ! #RW& +Khydsv(ikl,ikv ,isl )*1.e-4 &! (DR97, eqn.3.20)
8344  & ) !
8345 ! Pas de prise en compte de la resistance sol/racine dans proto-svat
8346 ! (DR97, eqn.3.20)
8347  rootok = max(zer0, sign(un_1,psidif))
8348  rootsv(ikl,ikv,isl) = root_w*max(zer0,psidif) ! Root Water
8349  plantw(ikl,ikv) = plantw(ikl,ikv) + rootsv(ikl,ikv ,isl) ! Plant Water
8350  dpdpsi(ikl,ikv) = dpdpsi(ikl,ikv) + rootok*root_w ! idem, Derivat.
8351  END DO
8352  END DO
8353  END DO
8354 
8355 
8356 ! Latent Heat Flux
8357 ! ------------------
8358 
8359 ! Canopy Saturation Specific Humidity
8360 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8361  DO ikl=1,kcolp
8362  DO ikv=1,mwp
8363 ! IF (DeRidder) THEN !
8364  den_qs = tvegsv(ikl,ikv) - 35.8 !
8365  arg_qs = 17.27 *(tvegsv(ikl,ikv) -273.16) &!
8366  & / den_qs !
8367  qsatvg = .0038 * exp(arg_qs) *0.875 ! 0.875 = Tuning Hapex-Sahel
8368 ! dqs_dT = qsatvg * 4099.2 /(den_qs *den_qs)!
8369 ! ELSE IF (Dudhia_MAR) THEN !
8370 ! esat_i = 6.107 &!
8371 ! & *exp(ExpIsv*(un_1/WatIsv -un_1/TvegSV(ikl) )) !
8372 ! qsatvg = 0.622 * esat_i &!
8373 ! & / (10.*pkPaSV(ikl) - 0.378*esat_i) !
8374 ! dqs_dT = qsatvg &!
8375 ! & *(1.0+0.6077*qsatvg ) &!
8376 ! & * ExpIsv/(TvegSV(ikl) *TvegSV(ikl) ) !
8377 ! END IF
8378 
8379 
8380 ! Canopy Stomatal Resistance
8381 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^
8382  r0stom = min( stodsv(ivgtsv(ikl,ikv)) &!
8383  & /max(eps6,glf_sv( ikl,ikv)),stxdsv) ! Min Stomatal R.
8384  denomf = pscdsv-psivsv(ikl,ikv)
8385  f___ok = max(zer0,sign(un_1,denomf))
8386  denomf = max(eps6, denomf) !
8387  f_stom = pscdsv / denomf ! F(Leaf Wat.Pot.)
8388  dfdpsi = -f_stom / denomf !
8389  ! DR97, eqn. 3.22
8390  numerr = r0stom / max(laiesv(ikl,ikv), r0stom/stxdsv) !
8391  r_stom = numerr * f_stom ! Can.Stomatal R.
8392  ! DR97, eqn. 3.21
8393  drdpsi = r_stom * dfdpsi !
8394 
8395 ! Evaporation / Evapotranspiration
8396 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8397  evfrac = max(zer0, sign(un_1,qat_sv(ikl,ikv)-qsatvg)) ! Condensation/
8398  evfrac = evfrac &! Transpiration
8399  & + (1.-evfrac) *rrcasv(ikl,ikv)/ rrmxsv(ikl,ikv) ! Switch
8400  fac_ev = rht_sv(ikl,ikv) *sigmsv(ikl,ikv) ! idem, Factor
8401  denome = rah_sv(ikl,ikv) +r_stom * sigmsv(ikl,ikv)
8402  facevt = fac_ev * (1.-evfrac) / denome !
8403  evtran = facevt *(qsatvg - qat_sv(ikl,ikv))! EvapoTranspir.
8404  dedpsi =(evtran / denome) * drdpsi ! EvT Derivative
8405 
8406 
8407 ! Imbalance of the Canopy Water Budget
8408 ! ---------------------------------------
8409 
8410  bwater =( plantw(ikl,ikv) &! Available Water
8411  & - evtran )* f___ok ! Transpired Water
8412 
8413  bswich = max(zer0, &! Newton-Raphson
8414  & sign(un_1, abs(bwater) &! Switch
8415  & -bw_min)) !
8416 
8417 
8418 ! Derivative of the Canopy Water Budget
8419 ! ---------------------------------------
8420 
8421  dbwdpv = dpdpsi(ikl,ikv) &!
8422  & - dedpsi
8423  dbwdpv = sign( un_1, dbwdpv) &!
8424  & * max(eps_21,abs(dbwdpv)) !
8425 
8426 
8427 ! Update Canopy and Surface/Canopy Temperatures
8428 ! ---------------------------------------------
8429 
8430  d_psiv = bwater / dbwdpv !
8431  d_psiv = sign(un_1,d_psiv) &! Increment
8432  & *min( abs(d_psiv) ,dpvmax) ! Limitor
8433  psivsv(ikl,ikv) = psivsv(ikl,ikv) - bswich *d_psiv ! Newton-Raphson
8434  bw_max = max(bw_max,abs(bwater))
8435  END DO
8436  END DO
8437 
8438 
8439 ! Update Root Water Fluxes | := Evapotranspiration
8440 ! ------------------------------------------------
8441 
8442  DO isl= -nsoil,0
8443  DO ikl=1,kcolp
8444  DO ikv=1,mwp
8445  rootsv(ikl,ikv,isl) = rootsv(ikl,ikv,isl)*evt_sv(ikl,ikv) &! Root Water
8446  & /max(eps_21,plantw(ikl,ikv)) !
8447  END DO
8448  END DO
8449  END DO
8450 
8451  IF (bw_max.gt.bw_min.and.nit.lt.nitmax) GO TO 101
8452 
8453 
8454 
8455 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8456 ! !
8457 ! DE-ALLOCATION !
8458 ! ============= !
8459 
8460  IF (flagdalloc) THEN !
8461 
8462  deallocate ( plantw ) ! Plant Water
8463  deallocate ( dpdpsi ) ! Plant Water psi Derivative
8464  deallocate ( psiv_0 ) ! Canopy Temperature, Previous t
8465 
8466  END IF !
8467 ! !
8468 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8469 
8470 
8471  return
8472  end subroutine sisvat_qvg
8473 
8474 
8475 
8476  subroutine sisvat_qsn &
8477  & ( &
8478 ! #e1& EqSn_0,EqSn_1,EqSn_d &
8479 ! #m1& ,SIsubl,SImelt,SIrnof &
8480  & )
8481 
8482 !--------------------------------------------------------------------------+
8483 ! MAR SISVAT_qSn Wed 26-Jun-2013 MAR |
8484 ! SubRoutine SISVAT_qSn updates the Snow Water Content |
8485 ! |
8486 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
8487 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
8488 ! |
8489 !--------------------------------------------------------------------------+
8490 ! |
8491 ! PARAMETERS: kcolv: Total Number of columns = |
8492 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
8493 ! X Number of Mosaic Cell per grid box |
8494 ! |
8495 ! INPUT: isnoSV = total Nb of Ice/Snow Layers |
8496 ! ^^^^^ |
8497 ! |
8498 ! INPUT: TaT_SV : SBL Top Temperature [K] |
8499 ! ^^^^^ dt__SV : Time Step [s] |
8500 ! |
8501 ! INPUT / drr_SV : Rain Intensity [kg/m2/s] |
8502 ! OUTPUT: dzsnSV : Snow Layer Thickness [m] |
8503 ! ^^^^^^ eta_SV : Snow Water Content [m3/m3] |
8504 ! ro__SV : Snow/Soil Volumic Mass [kg/m3] |
8505 ! TsisSV : Soil/Ice Temperatures (layers -nsoil,-nsoil+1, 0)|
8506 ! & Snow Temperatures (layers 1,2,..,nsnow) [K] |
8507 ! |
8508 ! OUTPUT: SWS_SV : Surficial Water Status |
8509 ! ^^^^^^ |
8510 ! EExcsv : Snow Energy in Excess, initial Forcing [J/m2] |
8511 ! EqSn_d : Snow Energy in Excess, remaining [J/m2] |
8512 ! EqSn_0 : Snow Energy, before Phase Change [J/m2] |
8513 ! EqSn_1 : Snow Energy, after Phase Change [J/m2] |
8514 ! SIsubl : Snow sublimed/deposed Mass [mm w.e.] |
8515 ! SImelt : Snow Melted Mass [mm w.e.] |
8516 ! SIrnof : Surficial Water + Run OFF Change [mm w.e.] |
8517 ! |
8518 ! |
8519 ! Preprocessing Option: STANDARD Possibility |
8520 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ |
8521 ! #IB: OUTPUT: Ice-Sheet Surface Mass Balance (on NetCDF File ) |
8522 ! |
8523 ! |
8524 ! Preprocessing Option: (PLEASE VERIFY before USE) |
8525 ! ^^^^^^^^^^^^^^^^^^^^^ |
8526 ! #SU: SLUSH : Alternative Parameterization |
8527 ! |
8528 ! |
8529 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
8530 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
8531 ! FILE | CONTENT |
8532 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
8533 ! # SISVAT_iii_jjj_n | #e0: OUTPUT on ASCII File (SISVAT Variables) |
8534 ! # |(#e0 MUST BE PREPROCESSED BEFORE #e1 & #e2 !) |
8535 ! # SISVAT_iii_jjj_n | #e1: OUTPUT/Verification: Energy Conservation |
8536 ! # SISVAT_iii_jjj_n | #m1: OUTPUT/Verification: * Mass Conservation |
8537 ! | |
8538 ! # SISVAT_qSn.vm | #e5: OUTPUT/Verification: Energy/Water Budget |
8539 ! | unit 43, SubRoutine SISVAT_qSn **ONLY** |
8540 ! # SISVAT_qSn.vu | #vu: OUTPUT/Verification: Slush Parameteriz. |
8541 ! | unit 44, SubRoutine SISVAT_qSn **ONLY** |
8542 ! | |
8543 ! # stdout | #s2: OUTPUT of SnowFall, Snow Buffer |
8544 ! | unit 6, SubRoutine SISVAT_BSn, _qSn |
8545 !--------------------------------------------------------------------------+
8546 
8547 
8548 ! Global Variables
8549 ! =================
8550 
8551  use mod_real
8552  use mod_phy____dat
8553  use mod_phy____grd
8554  use mod_sisvat_grd
8555 
8556 
8557 
8558 ! General Variables
8559 ! =================
8560 
8561  use mod_sisvat_ctr
8562  use mod_sisvat_dat
8563  use mod_sisvat_dzs
8564  use mod_sisvat_kkl
8565  use mod_sisvat_loc
8566  use mod_sisvat_qsn
8567 
8568 
8569 
8570 ! Internal Variables
8571 ! ==================
8572 
8573  use mod_sisvatlqsn
8574 
8575 
8576  IMPLICIT NONE
8577 
8578 
8579  integer :: ikl,ikv ,isn !
8580  integer :: nh ! Non erodible Snow: up.lay.Index
8581  integer :: LayrOK ! 1 (0) if In(Above) Snow Pack
8582  integer :: k_face ! 1 (0) if Crystal(no) faceted
8583  integer :: LastOK ! 1 ==> 1! Snow Layer
8584  integer :: NOLayr ! 1 Layer Update
8585 ! #SU integer :: kSlush ! Slush Switch
8586  real(kind=real8) :: dTSnow ! Temperature [C]
8587  real(kind=real8) :: OKmelt ! 1 (0) if (no) Melting
8588  real(kind=real8) :: EnMelt ! Energy in excess, for Melting
8589  real(kind=real8) :: SnHLat ! Energy consumed in Melting
8590 ! #e4 real(kind=real8) :: AdEnrg ! Additional Energy from Vapor
8591 ! #e3 real(kind=real8) :: B_Enrg ! Additional Energy from Vapor
8592  real(kind=real8) :: dzVap0,dzVap1 ! Vaporized Thickness [m]
8593  real(kind=real8) :: rosDry ! Snow volumic Mass if no Water in
8594  real(kind=real8) :: PorVol ! Pore volume
8595  real(kind=real8) :: PClose ! Pore Hole Close OFF Switch
8596 ! real(kind=real8) :: SGDiam ! Snow Grain Diameter
8597 ! real(kind=real8) :: SGDmax = 0.003 ! Max. Snow Grain Diameter [m]
8598  ! (Rowe et al. 1995, JGR p.16268)
8599  real(kind=real8) :: rWater ! Retained Water [kg/m2]
8600  real(kind=real8) :: drrNEW ! New available Water [kg/m2]
8601  real(kind=real8) :: rdzNEW ! Snow Mass [kg/m2]
8602  real(kind=real8) :: rdzsno ! Snow Mass [kg/m2]
8603  real(kind=real8) :: EnFrez ! Energy Release in Freezing
8604  real(kind=real8) :: WaFrez ! Water consumed in Melting
8605  real(kind=real8) :: RapdOK ! 1. ==> Snow melts rapidly
8606  real(kind=real8) :: ThinOK ! 1. ==> Snow Layer is thin
8607  real(kind=real8) :: dzepsi = 0.0001 ! Minim. Snow Layer Thickness (!)
8608  real(kind=real8) :: dz_Min = 1.e-3 ! Minim. Snow Layer Thickness
8609 ! dz_Min = 0.005 !
8610 ! ... Warning: Too high for Col de Porte: precludes 1st snow (layer) apparition
8611 
8612  real(kind=real8) :: z_Melt ! Last (thin) Layer Melting
8613  real(kind=real8) :: rusnew ! Surficial Water Thickness [mm]
8614 ! #SU real(kind=real8) :: zWater ! Max Slush Water Thickness [mm]
8615 ! #SU real(kind=real8) :: zSlush ! Slush Water Thickness [mm]
8616 ! #SU real(kind=real8) :: ro_new ! New Snow/ice Density [kg/m3]
8617  real(kind=real8) :: zc,zt ! Non erod.Snow Thickness[mm w.e.]
8618 
8619 
8620 ! OUTPUT of SISVAT Trace Statistics (see assignation in PHY_SISVAT)
8621 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8622  integer :: isnnew,isinew,isnUpD,isnitr
8623 
8624 
8625 ! #e5 real(kind=real8) :: hourer !
8626 
8627 
8628 
8629 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8630 ! !
8631 ! ALLOCATION !
8632 ! ========== !
8633 
8634  IF (it_run.EQ.1 .OR. flagdalloc) THEN !
8635 
8636 ! OUTPUT/Verification: Energy/Water Budget
8637 ! #e1 allocate ( EqSn_d(kcolp,mwp) ) ! Energy in Excess, initial
8638 ! #e1 allocate ( EqSn_0(kcolp,mwp) ) ! Snow Energy, befor Phase Change
8639 ! #e5 allocate ( EqSn01(kcolp,mwp) ) ! Snow Energy, after Phase Change
8640 ! #e5 allocate ( EqSn02(kcolp,mwp) ) ! Snow Energy, after Phase Change
8641  ! .AND. Last Melting
8642 ! #e1 allocate ( EqSn_1(kcolp,mwp) ) ! Snow Energy, after Phase Change
8643  ! .AND. Mass Redistr.
8644 ! OUTPUT/Verification: * Mass Conservation
8645 ! #m1 allocate ( SIsubl(kcolp,mwp) ) ! Snow Deposed Mass
8646 ! #m1 allocate ( SImelt(kcolp,mwp) ) ! Snow Melted Mass
8647 ! #m1 allocate ( SIrnof(kcolp,mwp) ) ! Local Surficial Water + Run OFF
8648 
8649  allocate ( nosnow(kcolp,mwp) ) ! Nb of Layers Updater
8650  allocate ( eexdum(kcolp,mwp) ) ! Energy in Excess when no Snow
8651  allocate ( dzmelt(kcolp,mwp) ) ! Melted Thickness [m]
8652 
8653 ! OUTPUT/Verification: Energy/Water Budget
8654 ! #e5 allocate ( WqSn_0(kcolp,mwp) ) ! Snow Water+Forcing Initial
8655 ! #e5 allocate ( WqSn_1(kcolp,mwp) ) ! Snow Water+Forcing, Final
8656 
8657  END IF !
8658 ! !
8659 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8660 
8661 
8662 
8663 ! OUTPUT/Verification: Energy/Water Budget: Energy Budget (IN)
8664 ! #e1 DO ikl=1,kcolp
8665 ! #e1 DO ikv=1,mwp
8666 ! #e1 EqSn_0(ikl,ikv) = 0.
8667 ! #e1 END DO
8668 ! #e1 END DO
8669 ! #e1 DO isn=nsnow,1,-1
8670 ! #e1 DO ikl=1,kcolp
8671 ! #e1 DO ikv=1,mwp
8672 ! #e1 EqSn_0(ikl,ikv) = EqSn_0(ikl,ikv) + ro__SV(ikl,ikv,isn) *dzsnSV(ikl,ikv,isn) &
8673 ! #e1& *(Cn_dSV *(TsisSV(ikl,ikv,isn) -Tf_Sno )&
8674 ! #e1& -LhfH2O *(1. -eta_SV(ikl,ikv,isn)))
8675 ! #e1 END DO
8676 ! #e1 END DO
8677 ! #e1 END DO
8678 
8679 
8680 ! OUTPUT/Verification: Energy/Water Budget: Water Budget (IN)
8681 ! #e5 DO ikl=1,kcolp
8682 ! #e5 DO ikv=1,mwp
8683 ! #e5 WqSn_0(ikl,ikv) = drr_SV(ikl,ikv) * dt__SV &
8684 ! #e5& +rusnSV(ikl,ikv)
8685 ! #e5 END DO
8686 ! #e5 END DO
8687 ! #e5 DO isn=nsnow,1,-1
8688 ! #e5 DO ikl=1,kcolp
8689 ! #e5 DO ikv=1,mwp
8690 ! #e5 WqSn_0(ikl,ikv) = WqSn_0(ikl,ikv) + ro__SV(ikl,ikv,isn) *dzsnSV(ikl,ikv,isn)
8691 ! #e5 END DO
8692 ! #e5 END DO
8693 ! #e5 END DO
8694 
8695 
8696 ! OUTPUT/Verification: * Mass Conservation
8697 ! #m1 DO ikl=1,kcolp
8698 ! #m1 DO ikv=1,mwp
8699 ! #m1 SImelt(ikl,ikv) = 0.
8700 ! #m1 SIrnof(ikl,ikv) = rusnSV(ikl,ikv) + RnofSV(ikl,ikv) * dt__SV
8701 ! #m1 END DO
8702 ! #m1 END DO
8703 
8704 
8705 ! Initialization
8706 ! ==============
8707 
8708  DO ikl=1,kcolp
8709  DO ikv=1,mwp
8710  nosnow(ikl,ikv) = 0 ! Nb of Layers Updater
8711  ispisv(ikl,ikv) = 0 ! Pore Hole Close OFF Index
8712  ! (assumed to be the Top of
8713  ! the surimposed Ice Layer)
8714 ! #IB dwemSV(ikl,ikv) = 0.
8715 ! #IB dwerSV(ikl,ikv) = 0.
8716  END DO
8717  END DO
8718 
8719 
8720 ! Melting/Freezing Energy
8721 ! =======================
8722 
8723 ! REMARK: Snow liquid Water Temperature assumed = Tf_Sno
8724 ! ^^^^^^
8725  DO ikl=1,kcolp
8726  DO ikv=1,mwp
8727  eexdum(ikl,ikv) = drr_sv(ikl,ikv) * hc_wat *(tat_sv(ikl,ikv)-tf_sno) &
8728  & * dt__sv
8729  eexcsv(ikl,ikv) = eexdum(ikl,ikv) * min(1,isnosv(ikl,ikv)) ! Snow exists
8730  eexdum(ikl,ikv) = eexdum(ikl,ikv) - eexcsv(ikl,ikv) !
8731 
8732 ! OUTPUT/Verification: Energy/Water Budget
8733 ! #e1 EqSn_d(ikl,ikv) = EExcsv(ikl,ikv) !
8734 
8735  END DO
8736  END DO
8737 
8738 
8739 ! Surficial Water Status
8740 ! ----------------------
8741 
8742  DO ikl=1,kcolp
8743  DO ikv=1,mwp
8744  sws_sv(ikl,ikv) = max(zer0,sign(un_1,tf_sno &
8745  & -tsissv(ikl,ikv,isnosv(ikl,ikv))))
8746  END DO
8747  END DO
8748 
8749  DO isn=nsnow,1,-1
8750  DO ikl=1,kcolp
8751  DO ikv=1,mwp
8752 
8753 ! Energy, store Previous Content
8754 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8755  dtsnow = tsissv(ikl,ikv,isn) - tf_sno
8756  eexcsv(ikl,ikv) = eexcsv(ikl,ikv) &
8757  & + ro__sv(ikl,ikv,isn) * cn_dsv * dtsnow &
8758  & * dzsnsv(ikl,ikv,isn)
8759  tsissv(ikl,ikv,isn) = tf_sno
8760 
8761 ! Water, store Previous Content
8762 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8763  drr_sv(ikl,ikv) = drr_sv(ikl,ikv) &
8764  & + ro__sv(ikl,ikv,isn) * eta_sv(ikl,ikv,isn) &
8765  & * dzsnsv(ikl,ikv,isn) &
8766  & / dt__sv
8767  ro__sv(ikl,ikv,isn) = &
8768  & ro__sv(ikl,ikv,isn) *(1. - eta_sv(ikl,ikv,isn))
8769  eta_sv(ikl,ikv,isn) = 0.
8770 
8771 
8772 ! Melting if EExcsv > 0
8773 ! ======================
8774 
8775  enmelt = max(zer0, eexcsv(ikl,ikv) )
8776 
8777 ! Energy Consumption
8778 ! ^^^^^^^^^^^^^^^^^^
8779  snhlat = ro__sv(ikl,ikv,isn) * lhfh2o !
8780  dzmelt(ikl,ikv) = enmelt / max(snhlat, eps6 ) !
8781  nosnow(ikl,ikv) = nosnow(ikl,ikv) &!
8782  & +int(max(zer0 ,sign(un_1,dzmelt(ikl,ikv) &!
8783  & -dzsnsv(ikl,ikv ,isn)))) &! 1 if full Melt
8784  & *min(1 , max(0 ,1+isnosv(ikl,ikv)-isn)) ! 1 in the Pack
8785  dzmelt(ikl,ikv) = &!
8786  & min(dzsnsv(ikl,ikv, isn),dzmelt(ikl,ikv)) !
8787  dzsnsv(ikl,ikv,isn) = &!
8788  & dzsnsv(ikl,ikv,isn) -dzmelt(ikl,ikv) !
8789  eexcsv(ikl,ikv) = eexcsv(ikl,ikv) -dzmelt(ikl,ikv)*snhlat !
8790 ! #IB dwemSV(ikl,ikv) = dwemSV(ikl,ikv) -dzMelt(ikl,ikv)*ro__SV(ikl,ikv,isn)
8791 
8792 ! Water Production
8793 ! ^^^^^^^^^^^^^^^^^
8794  drr_sv(ikl,ikv) = drr_sv(ikl,ikv) &
8795  & + ro__sv(ikl,ikv,isn) * dzmelt(ikl,ikv)/dt__sv
8796 
8797 ! OUTPUT/Verification: * Mass Conservation
8798 ! #m1 SImelt(ikl,ikv) = SImelt(ikl,ikv) &
8799 ! #m1& + ro__SV(ikl,ikv,isn) * dzMelt(ikl,ikv)
8800 
8801  okmelt =max(zer0,sign(un_1,drr_sv(ikl,ikv)-eps6))
8802 
8803 ! Snow History
8804 ! ^^^^^^^^^^^^
8805  k_face = min( istosv(ikl,ikv,isn),istdsv(1)) &! = 1 if
8806  & *max(0,2-istosv(ikl,ikv,isn) ) ! faceted
8807  istosv(ikl,ikv,isn) = &!
8808  & int(1.-okmelt) * istosv(ikl,ikv,isn) &!
8809  & +int(okmelt) *((1-k_face) * istdsv(2) &!
8810  & + k_face * istdsv(3) ) !
8811 
8812 
8813 ! Freezing if EExcsv < 0
8814 ! ======================
8815 
8816  rdzsno = ro__sv(ikl,ikv,isn) * dzsnsv(ikl,ikv ,isn)
8817  layrok = min( 1, max(0 , isnosv(ikl,ikv)-isn+1))
8818  enfrez = min(zer0, eexcsv(ikl,ikv))
8819  wafrez = -( enfrez * layrok / lhfh2o)
8820  drrnew = max(zer0,drr_sv(ikl,ikv) - wafrez / dt__sv)
8821  wafrez = ( drr_sv(ikl,ikv) - drrnew)* dt__sv
8822  drr_sv(ikl,ikv) = drrnew
8823  eexcsv(ikl,ikv) = eexcsv(ikl,ikv) + wafrez * lhfh2o
8824  enfrez = min(zer0,eexcsv(ikl,ikv)) * layrok
8825  rdznew = wafrez + rdzsno
8826  ro__sv(ikl,ikv,isn) = rdznew /max(eps6, dzsnsv(ikl,ikv,isn))
8827  tsissv(ikl,ikv,isn) = tf_sno &
8828  & + enfrez /(cn_dsv *max(eps6, rdznew) )
8829  eexcsv(ikl,ikv) = eexcsv(ikl,ikv) - enfrez
8830 ! #IB dwerSV(ikl,ikv) = WaFrez &
8831 ! #IB& + dwerSV(ikl,ikv)
8832 
8833 
8834 ! Snow Water Content
8835 ! ==================
8836 
8837 ! Pore Volume [-]
8838 ! ^^^^^^^^^^^^^^^^^
8839  rosdry =(1. - eta_sv(ikl,ikv,isn))* ro__sv(ikl,ikv,isn) !
8840  porvol = 1. - rosdry / rhoice !
8841  porvol = max(porvol , zer0 ) !
8842 
8843 ! Water Retention
8844 ! ^^^^^^^^^^^^^^^^
8845  rwater = ws0dsv * porvol * rhowat * dzsnsv(ikl,ikv,isn)
8846  drrnew = max(zer0,drr_sv(ikl,ikv) - rwater /dt__sv)
8847  rwater = ( drr_sv(ikl,ikv) - drrnew)*dt__sv
8848  drr_sv(ikl,ikv) = drrnew
8849  rdznew = rwater &
8850  & + rosdry * dzsnsv(ikl,ikv,isn)
8851  eta_sv(ikl,ikv,isn) = rwater / max(eps6,rdznew)
8852  ro__sv(ikl,ikv,isn) = rdznew / max(eps6,dzsnsv(ikl,ikv,isn))
8853 
8854 ! Pore Hole Close OFF
8855 ! ^^^^^^^^^^^^^^^^^^^
8856  pclose = max(zer0, &
8857  & sign(un_1,ro__sv(ikl,ikv,isn) &
8858  & -rocdsv ))
8859  ispisv(ikl,ikv) = ispisv(ikl,ikv) * int(1.-pclose) &
8860  & + max(ispisv(ikl,ikv),isn) *int(pclose)
8861  pclose = max(0 , &! Water under SuPer.Ice
8862  & min(1 ,ispisv(ikl,ikv) &! contributes to
8863  & -isn )) ! Surficial Water
8864  rusnsv(ikl,ikv) = rusnsv(ikl,ikv) &
8865  & + drr_sv(ikl,ikv) *dt__sv * pclose
8866  drr_sv(ikl,ikv) = drr_sv(ikl,ikv) *(1.-pclose)
8867 
8868  END DO
8869  END DO
8870  END DO
8871 
8872 
8873 ! Remove Zero-Thickness Layers
8874 ! ============================
8875 
8876  1000 CONTINUE
8877  isnitr = 0
8878  DO ikl=1,kcolp
8879  DO ikv=1,mwp
8880  isnupd = 0
8881  isinew = 0
8882  DO isn=1,nsnow-1
8883  isnnew = &
8884  & int(un_1-max(zer0 ,sign(un_1,dzsnsv(ikl,ikv,isn)-dzepsi)))&
8885  & * max(0 , min(1 ,isnosv(ikl,ikv) +1 -isn ))
8886  isnupd = max(isnupd, isnnew)
8887  isnitr = max(isnitr, isnnew)
8888  isinew = isn*isnupd *max(0, 1-isinew) &! LowerMost 0-Layer
8889  & +isinew ! Index
8890  dzsnsv(ikl,ikv,isn) = dzsnsv(ikl,ikv,isn+isnnew)
8891  ro__sv(ikl,ikv,isn) = ro__sv(ikl,ikv,isn+isnnew)
8892  tsissv(ikl,ikv,isn) = tsissv(ikl,ikv,isn+isnnew)
8893  eta_sv(ikl,ikv,isn) = eta_sv(ikl,ikv,isn+isnnew)
8894  g1snsv(ikl,ikv,isn) = g1snsv(ikl,ikv,isn+isnnew)
8895  g2snsv(ikl,ikv,isn) = g2snsv(ikl,ikv,isn+isnnew)
8896  dzsnsv(ikl,ikv,isn+isnnew) =(1-isnnew)*dzsnsv(ikl,ikv,isn+isnnew)
8897  ro__sv(ikl,ikv,isn+isnnew) =(1-isnnew)*ro__sv(ikl,ikv,isn+isnnew)
8898  eta_sv(ikl,ikv,isn+isnnew) =(1-isnnew)*eta_sv(ikl,ikv,isn+isnnew)
8899  g1snsv(ikl,ikv,isn+isnnew) =(1-isnnew)*g1snsv(ikl,ikv,isn+isnnew)
8900  g2snsv(ikl,ikv,isn+isnnew) =(1-isnnew)*g2snsv(ikl,ikv,isn+isnnew)
8901  END DO
8902  isnosv(ikl,ikv) = isnosv(ikl,ikv)-isnupd ! Nb of Snow Layer
8903  ispisv(ikl,ikv) = ispisv(ikl,ikv) &! Nb of SuperI Layer
8904  & -isnupd *max(0,min(ispisv(ikl,ikv)-isinew,1)) ! Update if I=0
8905 
8906  END DO
8907  END DO
8908  IF (isnitr.GT.0) GO TO 1000
8909 
8910 
8911 ! New upper Limit of the non erodible Snow (istoSV .GT. 1)
8912 ! ========================================
8913 
8914  DO ikl=1,kcolp
8915  DO ikv=1,mwp
8916  nh = 0
8917  DO isn= nsnow,1,-1
8918  nh = nh + isn* min(istosv(ikl,ikv,isn)-1,1)*max(0,1-nh)
8919  END DO
8920  zc = 0.
8921  zt = 0.
8922  DO isn=1,nsnow
8923  zc = zc + dzsnsv(ikl,ikv,isn) *ro__sv(ikl,ikv,isn) &
8924  & * max(0,min(1,nh+1-isn))
8925  zt = zt + dzsnsv(ikl,ikv,isn) *ro__sv(ikl,ikv,isn)
8926  END DO
8927  zwe_sv(ikl,ikv) = zt
8928  zwecsv(ikl,ikv) = min(zwecsv(ikl,ikv),zt)
8929  zwecsv(ikl,ikv) = max(zwecsv(ikl,ikv),zc)
8930  END DO
8931  END DO
8932 
8933 
8934 ! OUTPUT/Verification: Energy/Water Budget: Energy Budget (OUT)
8935 ! #e5 DO ikl=1,kcolp
8936 ! #e5 DO ikv=1,mwp
8937 ! #e5 EqSn01(ikl,ikv) =-EqSn_0(ikl,ikv) &
8938 ! #e5& -EExcsv(ikl,ikv)
8939 ! #e5 END DO
8940 ! #e5 END DO
8941 ! #e5 DO isn=nsnow,1,-1
8942 ! #e5 DO ikl=1,kcolp
8943 ! #e5 DO ikv=1,mwp
8944 ! #e5 EqSn01(ikl,ikv) = EqSn01(ikl,ikv) + ro__SV(ikl,ikv,isn) *dzsnSV(ikl,ikv,isn) &
8945 ! #e5& *(Cn_dSV *(TsisSV(ikl,ikv,isn) -Tf_Sno )&
8946 ! #e5& -LhfH2O *(1. -eta_SV(ikl,ikv,isn)))
8947 ! #e5 END DO
8948 ! #e5 END DO
8949 ! #e5 END DO
8950 
8951 
8952 ! "Negative Heat" from supercooled rain
8953 ! ------------------------------------
8954 
8955  DO ikl=1,kcolp
8956  DO ikv=1,mwp
8957  eexcsv(ikl,ikv) = eexcsv(ikl,ikv) + eexdum(ikl,ikv)
8958 
8959 
8960 ! Surficial Water Run OFF
8961 ! -----------------------
8962 
8963  rusnew = rusnsv(ikl,ikv) * swf_sv(ikl,ikv)
8964  rnofsv(ikl,ikv) = rnofsv(ikl,ikv) &
8965  & +(rusnsv(ikl,ikv) - rusnew ) / dt__sv
8966  rusnsv(ikl,ikv) = rusnew
8967  END DO
8968  END DO
8969 
8970 
8971 ! Percolation down the Continental Ice Pack
8972 ! -----------------------------------------
8973 
8974  DO ikl=1,kcolp
8975  DO ikv=1,mwp
8976  drr_sv(ikl,ikv) = drr_sv(ikl,ikv) + rusnsv(ikl,ikv) &
8977  & * (1-min(1,ispisv(ikl,ikv)))/ dt__sv
8978  rusnsv(ikl,ikv) = rusnsv(ikl,ikv) &
8979  & * min(1,ispisv(ikl,ikv))
8980  END DO
8981  END DO
8982 
8983 
8984 ! Slush Formation (CAUTION: ADD RunOff Possibility before Activation)
8985 ! --------------- ^^^^^^^ ^^^
8986 
8987 ! OUTPUT/Verification: Slush Parameterization
8988 ! #vu IF (.NOT.su_opn) THEN
8989 ! #vu su_opn=.true.
8990 ! #vu open(unit=44,status='unknown',file='SISVAT_qSn.vu')
8991 ! #vu rewind 44
8992 ! #vu END IF
8993 ! #vu write(44,440) daHost
8994 ! #vu 440 format('iSupI i dz ro eta', &
8995 ! #vu& ' PorVol zSlush ro_n eta_n',2x,a18)
8996 
8997 ! #SU DO isn=1,nsnow
8998 ! #SU DO ikl=1,kcolp
8999 ! #SU DO ikv=1,mwp
9000 ! #SU kSlush = min(1,max(0,isn+1-ispiSV(ikl,ikv))) ! Slush Switch
9001 
9002 ! Available Additional Pore Volume [-]
9003 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9004 ! #SU PorVol = 1. - ro__SV(ikl,ikv,isn) &! [--]
9005 ! #SU& *(1. - eta_SV(ikl,ikv,isn))/ rhoIce &!
9006 ! #SU& - eta_SV(ikl,ikv,isn) &!
9007 ! #SU& *ro__SV(ikl,ikv,isn) / rhoWat !
9008 ! #SU PorVol = max(PorVol , zer0 ) !
9009 ! #SU zWater = dzsnSV(ikl,ikv,isn) * PorVol * 1000. &! [mm] OR [kg/m2]
9010 ! #SU& * (1. -SWS_SV(ikl,ikv) &! 0 <=> freezing
9011 ! #SU& *(1 -min(1,iabs(isn-isnoSV(ikl,ikv))))) ! 1 <=> isn=isnoSV
9012 ! #SU zSlush = min(rusnSV(ikl,ikv) , zWater) ! [mm] OR [kg/m2]
9013 ! #SU rusnSV(ikl,ikv) = rusnSV(ikl,ikv) - zSlush ! [mm] OR [kg/m2]
9014 ! #SU ro_new =(dzsnSV(ikl,ikv,isn) * ro__SV(ikl,ikv,isn) &!
9015 ! #SU& +zSlush ) &!
9016 ! #SU& / max(dzsnSV(ikl,ikv,isn) , eps6 ) !
9017 
9018 ! OUTPUT/Verification: Slush Parameterization
9019 ! #vu rusnew = eta_SV(ikl,ikv,isn) !
9020 
9021 ! #SU eta_SV(ikl,ikv,isn) =(ro_new - ro__SV(ikl,ikv,isn) &!
9022 ! #SU& *(1. - eta_SV(ikl,ikv,isn))) &!
9023 ! #SU& / max (ro_new , eps6 ) !
9024 
9025 ! OUTPUT/Verification: Slush Parameterization
9026 ! #vu IF (isn.le.isnoSV(ikl,ikv)) &!
9027 ! #vu& write(44,441) ispiSV(ikl,ikv),isn,dzsnSV(ikl,ikv,isn)&!
9028 ! #vu& ,ro__SV(ikl,ikv,isn),rusnew &!
9029 ! #vu& ,PorVol ,zSlush &!
9030 ! #vu& ,ro_new ,eta_SV(ikl,ikv,isn) !
9031 ! #vu 441 format(2i5,f9.3,f9.1,f9.6,f9.3,f9.6,f9.1,f9.6) !
9032 
9033 ! #SU ro__SV(ikl,ikv,isn) = ro_new !
9034 ! #SU END DO
9035 ! #SU END DO
9036 ! #SU END DO
9037 
9038 
9039 ! Impact of the Sublimation/Deposition on the Surface Mass Balance
9040 ! ================================================================
9041 
9042  DO ikl=1,kcolp
9043  DO ikv=1,mwp
9044  isn = isnosv(ikl,ikv)
9045  dzvap0 = dt__sv &
9046  & * hls_sv(ikl,ikv) * min(isn , 1 ) &
9047  & /(lx_h2o(ikl,ikv) * max(ro__sv(ikl,ikv,isn) , eps6))
9048  nolayr=int(min(zer0,sign(un_1,dzsnsv(ikl,ikv,isn) + dzvap0)))
9049  dzvap1= min(zer0, dzsnsv(ikl,ikv,isn) + dzvap0)
9050 
9051 
9052 ! Additional Energy (CAUTION: Verification is not performed)
9053 ! -----------------
9054 
9055 ! OUTPUT/Verification: Energy Consrv. (HLS)
9056 ! #e4 AdEnrg = dzVap0 * ro__SV(ikl,ikv,isnoSV(ikl,ikv)) &! Water Vapor
9057 ! #e4& *hC_Wat *(TsisSV(ikl,ikv,isnoSV(ikl,ikv)) -Tf_Sno) ! Sensible Heat
9058 
9059 ! OUTPUT/Verification: Energy Consrv. (HL)
9060 ! #e3 B_Enrg =(Cn_dSV *(TsisSV(ikl,ikv,isn) -Tf_Sno ) &
9061 ! #e3& -LhfH2O *(1. -eta_SV(ikl,ikv,isn)))&
9062 ! #e3& /(1. + dzVap0 /max(eps6,dzsnSV(ikl,ikv,isn)))
9063 ! #e3 eta_SV(ikl,ikv,isn) = &
9064 ! #e3& max(zer0,un_1 +(B_Enrg &
9065 ! #e3& -(TsisSV(ikl,ikv,isn) -Tf_Sno)*Cn_dSV) &
9066 ! #e3& /LhfH2O )
9067 ! #e3 TsisSV(ikl,ikv,isn) = ( B_Enrg &
9068 ! #e3& +(1. -eta_SV(ikl,ikv,isn)) &
9069 ! #e3& *LhfH2O ) &
9070 ! #e3& / Cn_dSV &
9071 ! #e3& + Tf_Sno
9072 
9073 ! OUTPUT/Verification: Energy Conservation
9074 ! #e1 STOP "PLEASE add Energy (#e3) from deposition/sublimation"
9075 
9076 
9077 ! Update of the upper Snow layer Thickness
9078 ! ----------------------------------------
9079 
9080  dzsnsv(ikl,ikv,isn) = &
9081  & max(zer0, dzsnsv(ikl,ikv,isnosv(ikl,ikv)) + dzvap0)
9082  isnosv(ikl,ikv) = isnosv(ikl,ikv) + nolayr
9083  isn = isnosv(ikl,ikv)
9084  dzsnsv(ikl,ikv,isn) = dzsnsv(ikl,ikv,isn) + dzvap1
9085 ! #IB dwesSV(ikl,ikv) = ro__SV(ikl,ikv,isn) * dzVap0
9086  END DO
9087  END DO
9088 
9089 
9090 ! OUTPUT/Verification: Energy/Water Budget: Energy Budget (OUT)
9091 ! #e5 DO ikl=1,kcolp
9092 ! #e5 DO ikv=1,mwp
9093 ! #e5 EqSn02(ikl,ikv) =-EqSn_0(ikl,ikv) &
9094 ! #e5& -EExcsv(ikl,ikv)
9095 ! #e5 END DO
9096 ! #e5 END DO
9097 ! #e5 DO isn=nsnow,1,-1
9098 ! #e5 DO ikl=1,kcolp
9099 ! #e5 DO ikv=1,mwp
9100 ! #e5 EqSn02(ikl,ikv) = EqSn01(ikl,ikv) + ro__SV(ikl,ikv,isn) *dzsnSV(ikl,ikv,isn) &
9101 ! #e5& *(Cn_dSV *(TsisSV(ikl,ikv,isn) -Tf_Sno )&
9102 ! #e5& -LhfH2O *(1. -eta_SV(ikl,ikv,isn)))
9103 ! #e5 END DO
9104 ! #e5 END DO
9105 ! #e5 END DO
9106 
9107 
9108 ! OUTPUT/Verification: * Mass Conservation
9109 ! #m1 DO ikl=1,kcolp
9110 ! #m1 DO ikv=1,mwp
9111 ! #m1 SIsubl(ikl,ikv) = dt__SV*HLs_sv(ikl,ikv)*min(isnoSV(ikl,ikv),1) &
9112 ! #m1& /Lx_H2O(ikl,ikv)
9113 ! #m1 SIrnof(ikl,ikv) = rusnSV(ikl,ikv) + RnofSV(ikl,ikv) * dt__SV &
9114 ! #m1& - SIrnof(ikl,ikv)
9115 ! #m1 END DO
9116 ! #m1 END DO
9117 
9118 
9119 ! Anticipated Disappearance of a rapidly Melting too thin Last Snow Layer
9120 ! =======================================================================
9121 
9122  DO ikl=1,kcolp
9123  DO ikv=1,mwp
9124  lastok = min(1 , max(0 ,iicesv(ikl,ikv)-isnosv(ikl,ikv)+2) &
9125  & *min(1 ,isnosv(ikl,ikv)-iicesv(ikl,ikv)) &
9126  & +min(1 ,isnosv(ikl,ikv)) )
9127  rapdok = max(zer0,sign(un_1,dzmelt(ikl,ikv)-eps6 ))
9128  thinok = max(zer0,sign(un_1,dz_min -dzsnsv(ikl,ikv,1)))
9129  z_melt = lastok *rapdok*thinok
9130  nosnow(ikl,ikv) = nosnow(ikl,ikv)+int(z_melt)
9131  z_melt = z_melt *dzsnsv(ikl,ikv,1)
9132  dzsnsv(ikl,ikv,1) = dzsnsv(ikl,ikv,1) - z_melt
9133  eexcsv(ikl,ikv) = eexcsv(ikl,ikv) - z_melt *ro__sv(ikl,ikv,1) &
9134  & *(1. -eta_sv(ikl,ikv,1))*lhfh2o
9135 
9136 ! Water Production
9137 ! ^^^^^^^^^^^^^^^^^
9138  drr_sv(ikl,ikv) = drr_sv(ikl,ikv) &
9139  & + ro__sv(ikl,ikv,1) * z_melt /dt__sv
9140  END DO
9141  END DO
9142 
9143 
9144 ! Update Nb of Layers
9145 ! ===================
9146 
9147 ! OUTPUT in SISVAT for ikl = 1 (preferably for Stand Alone Version)
9148 ! OUTPUT for SnowFall and Snow Buffer
9149 ! #s2 IF (isnoSV(1,1) .GT. 0) &
9150 ! #s2& write(6,6005)noSnow(1,1)
9151 ! #s2 6005 format(i3,' (noSnow) ')
9152 
9153  DO ikl=1,kcolp
9154  DO ikv=1,mwp
9155  isnosv(ikl,ikv) = isnosv(ikl,ikv) &
9156  & * min(1,iabs(isnosv(ikl,ikv)-nosnow(ikl,ikv)))
9157  END DO
9158  END DO
9159 
9160 
9161 ! OUTPUT/Verification: Energy Conservation: Energy Budget (OUT)
9162 ! #e1 DO ikl=1,kcolp
9163 ! #e1 DO ikv=1,mwp
9164 ! #e1 EqSn_1(ikl,ikv) = 0.
9165 ! #e1 END DO
9166 ! #e1 END DO
9167 ! #e1 DO isn=nsnow,1,-1
9168 ! #e1 DO ikl=1,kcolp
9169 ! #e1 DO ikv=1,mwp
9170 ! #e1 EqSn_1(ikl,ikv) = EqSn_1(ikl,ikv) + ro__SV(ikl,ikv,isn) *dzsnSV(ikl,ikv,isn) &
9171 ! #e1& *(Cn_dSV *(TsisSV(ikl,ikv,isn) -Tf_Sno )&
9172 ! #e1& -LhfH2O *(1. -eta_SV(ikl,ikv,isn)))
9173 ! #e1 END DO
9174 ! #e1 END DO
9175 ! #e1 END DO
9176 
9177 
9178 ! OUTPUT/Verification: Energy/Water Budget: Water Budget (OUT)
9179 ! #e5 DO ikl=1,kcolp
9180 ! #e5 DO ikv=1,mwp
9181 ! #e5 WqSn_0(ikl,ikv) = WqSn_0(ikl,ikv) &
9182 ! #e5& + HLs_sv(ikl,ikv) * dt__SV &
9183 ! #e5& *min(isnoSV(ikl,ikv),1) / Lx_H2O(ikl,ikv)
9184 ! #e5 WqSn_1(ikl,ikv) = drr_SV(ikl,ikv) * dt__SV &
9185 ! #e5& + rusnSV(ikl,ikv) &
9186 ! #e5& + RnofSV(ikl,ikv) * dt__SV
9187 ! #e5 END DO
9188 ! #e5 END DO
9189 ! #e5 DO isn=nsnow,1,-1
9190 ! #e5 DO ikl=1,kcolp
9191 ! #e5 DO ikv=1,mwp
9192 ! #e5 WqSn_1(ikl,ikv) = WqSn_1(ikl,ikv) &
9193 ! #e5& + ro__SV(ikl,ikv,isn)* dzsnSV(ikl,ikv,isn)
9194 ! #e5 END DO
9195 ! #e5 END DO
9196 ! #e5 END DO
9197 
9198 
9199 ! OUTPUT/Verification: Energy/Water Budget
9200 ! #e5 IF (.NOT.emopen) THEN
9201 ! #e5 emopen = .true.
9202 ! #e5 open(unit=43,status='unknown',file='SISVAT_qSn.vm')
9203 ! #e5 rewind 43
9204 ! #e5 write(43,43)
9205 ! #e5 43 format('SubRoutine SISVAT_qSn: Local Energy and Water Budgets',&
9206 ! #e5& /,'=====================================================')
9207 ! #e5 END IF
9208 ! #e5 DO ikl=1,kcolp
9209 ! #e5 DO ikv=1,mwp
9210 ! #e5 IF (EqSn01(ikl,ikv).gt.1.e-3) write(43,431) dahost,EqSn01(ikl,ikv)
9211 ! #e5 431 format(' WARNING (1) in _qSn,', a18, &
9212 ! #e5& ': Energy Unbalance in Phase Change = ',e15.6)
9213 ! #e5 END DO
9214 ! #e5 END DO
9215 ! #e5 DO ikl=1,kcolp
9216 ! #e5 DO ikv=1,mwp
9217 ! #e5 IF (EqSn02(ikl,ikv).gt.1.e-3) write(43,432) dahost,EqSn01(ikl,ikv)
9218 ! #e5 432 format(' WARNING (2) in _qSn,', a18, &
9219 ! #e5& ': Energy Unbalance in Phase Change = ',e15.6)
9220 ! #e5 END DO
9221 ! #e5 END DO
9222 ! #e5 timeer=timeer + dt__SV
9223 ! #e5 hourer=3600.0
9224 ! #e5 IF (mod(no_err,11).eq.0) THEN
9225 ! #e5 no_err= 1
9226 ! #e5 write(43,435)timeer/hourer
9227 ! #e5 435 format(11('-'),'----------+-',3('-'),'----------+-', &
9228 ! #e5& 3('-'),'----------+-',3('-'),'----------+-', &
9229 ! #e5& '----------------+----------------+', &
9230 ! #e5& /,f8.2,3x,'EqSn_0(1) | ',3x,'EqSn_d(1) | ', &
9231 ! #e5& 3x,'EqSn_1(1) | ',3x,'EExcsv(1) | ', &
9232 ! #e5& 'E_0+E_d-E_1-EE | Water Budget |', &
9233 ! #e5& /,11('-'),'----------+-',3('-'),'----------+-', &
9234 ! #e5& 3('-'),'----------+-',3('-'),'----------+-', &
9235 ! #e5& '----------------+----------------+')
9236 ! #e5 END IF
9237 ! #e5 IF (abs(EqSn_0(1)+EqSn_d(1)-EqSn_1(1)-EExcsv(1)).gt.eps6.OR. &
9238 ! #e5& abs(WqSn_1(1)-WqSn_0(1)) .gt.eps6 ) THEN
9239 ! #e5 no_err=no_err+1
9240 ! #e5 write(43,436) EqSn_0(1),EqSn_d(1) &
9241 ! #e5& ,EqSn_1(1),EExcsv(1) &
9242 ! #e5& ,EqSn_0(1)+EqSn_d(1)-EqSn_1(1)-EExcsv(1) &
9243 ! #e5& ,WqSn_1(1)-WqSn_0(1)
9244 ! #e5 436 format(8x,f12.0,' + ',f12.0,' - ',f12.0,' - ',f12.3,' = ' &
9245 ! #e5& ,f12.3,' | ',f15.9)
9246 ! #e5 END IF
9247 
9248 ! OUTPUT/Verification: Energy Conservation
9249 ! #e1 DO ikl=1,kcolp
9250 ! #e1 DO ikv=1,mwp
9251 ! #e1 EqSn_d(ikl,ikv) = EqSn_d(ikl,ikv) - EExcsv(ikl,ikv)
9252 ! #e1 END DO
9253 ! #e1 END DO
9254 
9255 
9256 
9257 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9258 ! !
9259 ! DE-ALLOCATION !
9260 ! ============= !
9261 
9262  IF (flagdalloc) THEN !
9263 
9264 ! OUTPUT/Verification: Energy/Water Budget
9265 ! #e1 deallocate ( EqSn_d ) ! Energy in Excess, initial
9266 ! #e1 deallocate ( EqSn_0 ) ! Snow Energy, befor Phase Change
9267 ! #e5 deallocate ( EqSn01 ) ! Snow Energy, after Phase Change
9268 ! #e5 deallocate ( EqSn02 ) ! Snow Energy, after Phase Change
9269  ! .AND. Last Melting
9270 ! #e1 deallocate ( EqSn_1 ) ! Snow Energy, after Phase Change
9271  ! .AND. Mass Redistr.
9272 ! OUTPUT/Verification: * Mass Conservation
9273 ! #m1 deallocate ( SIsubl ) ! Snow Deposed Mass
9274 ! #m1 deallocate ( SImelt ) ! Snow Melted Mass
9275 ! #m1 deallocate ( SIrnof ) ! Local Surficial Water + Run OFF
9276 
9277  deallocate ( nosnow ) ! Nb of Layers Updater
9278  deallocate ( eexdum ) ! Energy in Excess when no Snow
9279  deallocate ( dzmelt ) ! Melted Thickness [m]
9280 
9281 ! OUTPUT/Verification: Energy/Water Budget
9282 ! #e5 deallocate ( WqSn_0 ) ! Snow Water+Forcing Initial
9283 ! #e5 deallocate ( WqSn_1 ) ! Snow Water+Forcing, Final
9284 
9285  END IF !
9286 ! !
9287 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9288 
9289 
9290  return
9291  end subroutine sisvat_qsn
9292 
9293 
9294 
9295  subroutine sisvat_gsn
9297 !--------------------------------------------------------------------------+
9298 ! MAR SISVAT_GSn Wed 26-Jun-2013 MAR |
9299 ! SubRoutine SISVAT_GSn simulates SNOW Metamorphism |
9300 ! |
9301 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
9302 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
9303 ! |
9304 !--------------------------------------------------------------------------+
9305 ! |
9306 ! PARAMETERS: kcolv: Total Number of columns = |
9307 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
9308 ! X Number of Mosaic Cell per grid box |
9309 ! |
9310 ! INPUT / isnoSV = total Nb of Ice/Snow Layers |
9311 ! OUTPUT: iiceSV = total Nb of Ice Layers |
9312 ! ^^^^^^ istoSV = 0,...,5 : Snow History (see istdSV data) |
9313 ! |
9314 ! INPUT: TsisSV : Soil/Ice Temperatures (layers -nsoil,-nsoil+1, 0)|
9315 ! ^^^^^ & Snow Temperatures (layers 1,2,...,nsno) [K] |
9316 ! ro__SV : Soil/Snow Volumic Mass [kg/m3] |
9317 ! eta_SV : Soil/Snow Water Content [m3/m3] |
9318 ! slorSV : Surface Slope [radian] |
9319 ! dzsnSV : Snow Layer Thickness [m] |
9320 ! dt__SV : Time Step [s] |
9321 ! |
9322 ! INPUT / G1snSV : Dendricity (<0) or Sphericity (>0) of Snow Layer |
9323 ! OUTPUT: G2snSV : Sphericity (>0) or Size of Snow Layer |
9324 ! ^^^^^^ |
9325 ! |
9326 ! Formalisme adopte pour la Representation des Grains: |
9327 ! Formalism for the Representation of Grains: |
9328 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
9329 ! |
9330 ! 1 - -1 Neige Fraiche |
9331 ! / \ | ------------- |
9332 ! / \ | Dendricite decrite par Dendricite |
9333 ! / \ | Dendricity et Sphericite |
9334 ! / \ | |
9335 ! 2---------3 - 0 described by Dendricity |
9336 ! and Sphericity |
9337 ! |---------| |
9338 ! 0 1 |
9339 ! Sphericite |
9340 ! Sphericity |
9341 ! |
9342 ! 4---------5 - |
9343 ! | | | |
9344 ! | | | Diametre (1/10eme de mm) (ou Taille) |
9345 ! | | | Diameter (1/10th of mm) (or Size ) |
9346 ! | | | |
9347 ! | | | Neige non dendritique |
9348 ! 6---------7 - --------------------- |
9349 ! decrite par Sphericite |
9350 ! et Taille |
9351 ! described by Sphericity |
9352 ! and Size |
9353 ! |
9354 ! Les Variables du Modele: |
9355 ! Model Variables: |
9356 ! ^^^^^^^^^^^^^^^^^^^^^^^^ |
9357 ! Cas Dendritique Cas non Dendritique |
9358 ! |
9359 ! G1snSV : Dendricite G1snSV : Sphericite |
9360 ! G2snSV : Sphericite G2snSV : Taille (1/10e mm) |
9361 ! Size |
9362 ! |
9363 ! Cas Dendritique/ Dendritic Case |
9364 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
9365 ! Dendricite(Dendricity) G1snSV |
9366 ! varie de -G1_dSV (-99 par defaut / etoile) a 0 |
9367 ! division par -G1_dSV pour obtenir des valeurs entre 1 et 0 |
9368 ! varies from -G1_dSV (default -99 / fresh snow) to 0 |
9369 ! division by -G1_dSV to obtain values between 1 and 0 |
9370 ! |
9371 ! Sphericite(Sphericity) G2snSV |
9372 ! varie de 0 (cas completement anguleux) |
9373 ! a G1_dSV (99 par defaut, cas spherique) |
9374 ! division par G1_dSV pour obtenir des valeurs entre 0 et 1 |
9375 ! varies from 0 (full faceted) to G1_dSV |
9376 ! |
9377 ! Cas non Dendritique / non Dendritic Case |
9378 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
9379 ! Sphericite(Sphericity) G1snSV |
9380 ! varie de 0 (cas completement anguleux) |
9381 ! a G1_dSV (99 par defaut, cas spherique) |
9382 ! division par G1_dSV pour obtenir des valeurs entre 0 et 1 |
9383 ! varies from 0 (full faceted) to G1_dSV |
9384 ! |
9385 ! Taille (Size) G2snSV |
9386 ! superieure a ADSdSV (.4 mm) et ne fait que croitre |
9387 ! greater than ADSdSV (.4 mm) always increases |
9388 ! |
9389 ! Exemples: Points caracteristiques des Figures ci-dessus |
9390 ! ^^^^^^^^^ |
9391 ! |
9392 ! G1snSV G2snSV dendricite sphericite taille |
9393 ! dendricity sphericity size |
9394 ! ------------------------------------------------------------------ |
9395 ! [1/10 mm] |
9396 ! 1 -G1_dSV sph3SN 1 0.5 |
9397 ! 2 0 0 0 0 |
9398 ! 3 0 G1_dSV 0 1 |
9399 ! 4 0 ADSdSV 0 4. |
9400 ! 5 G1_dSV ADSdSV-vsphe1 1 3. |
9401 ! 6 0 -- 0 -- |
9402 ! 7 G1_dSV -- 1 -- |
9403 ! |
9404 ! par defaut: G1_dSV=99. |
9405 ! sph3SN=50. |
9406 ! ADSdSV= 4. |
9407 ! vsphe1=1. |
9408 ! |
9409 ! Methode: |
9410 ! ^^^^^^^^ |
9411 ! 1. Evolution Types de Grains selon Lois de Brun et al. (1992): |
9412 ! Grain metamorphism according to Brun et al. (1992): |
9413 ! Plusieurs Cas sont a distiguer / the different Cases are: |
9414 ! 1.1 Metamorphose Neige humide / wet Snow |
9415 ! 1.2 Metamorphose Neige seche / dry Snow |
9416 ! 1.2.1 Gradient faible / low Temperature Gradient |
9417 ! 1.2.2 Gradient moyen / moderate Temperature Gradient |
9418 ! 1.2.3 Gradient fort / high Temperature Gradient |
9419 ! Dans chaque Cas on separe Neige Dendritique et non Dendritique |
9420 ! le Passage Dendritique -> non Dendritique |
9421 ! se fait lorsque G1snSV devient > 0 |
9422 ! the Case of Dentritic or non Dendritic Snow is treated separately |
9423 ! the Limit Dentritic -> non Dendritic is reached when G1snSV > 0 |
9424 ! |
9425 ! 2. Tassement: Loi de Viscosite adaptee selon le Type de Grains |
9426 ! Snow Settling: Viscosity depends on the Grain Type |
9427 ! |
9428 ! 3. Update Variables historiques (cas non dendritique seulement) |
9429 ! nhSNow defaut |
9430 ! 0 Cas normal |
9431 ! istdSV(1) 1 Grains anguleux / faceted cristal |
9432 ! istdSV(2) 2 Grains ayant ete en presence d eau liquide |
9433 ! mais n'ayant pas eu de caractere anguleux / |
9434 ! liquid water and no faceted cristals before |
9435 ! istdSV(3) 3 Grains ayant ete en presence d eau liquide |
9436 ! ayant eu auparavant un caractere anguleux / |
9437 ! liquid water and faceted cristals before |
9438 ! |
9439 ! REFER. : Brun et al. 1989, J. Glaciol 35 pp. 333--342 |
9440 ! ^^^^^^^^ Brun et al. 1992, J. Glaciol 38 pp. 13-- 22 |
9441 ! (CROCUS Model, adapted to MAR at CEN by H.Gallee) |
9442 ! |
9443 ! REFER. : Marbouty, D. 1980, J. Glaciol 26 pp. xxx--xxx |
9444 ! ^^^^^^^^ (CROCUS Model, adapted to MAR at CEN by H.Gallee) |
9445 ! (for angular shapes) |
9446 ! |
9447 ! |
9448 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
9449 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
9450 ! FILE | CONTENT |
9451 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
9452 ! # SISVAT_GSn.vp | #vp: OUTPUT/Verification: Snow Properties |
9453 ! | unit 47, SubRoutines SISVAT_zSn, _GSn |
9454 ! # stdout | #vs: OUTPUT/Verification: Snow Properties |
9455 ! | unit 6, SubRoutine SISVAT_GSn |
9456 ! |
9457 !--------------------------------------------------------------------------+
9458 
9459 
9460 ! Global Variables
9461 ! =================
9462 
9463  use mod_real
9464  use mod_phy____dat
9465  use mod_phy____grd
9466  use mod_sisvat_grd
9467 
9468 
9469 
9470 ! General Variables
9471 ! =================
9472 
9473  use mod_sisvat_ctr
9474  use mod_sisvat_dat
9475  use mod_sisvat_dzs
9476  use mod_sisvat_kkl
9477  use mod_sisvat_gsn
9478 
9479 
9480 
9481 ! Local Variables
9482 ! ================
9483 
9484  use mod_sisvatlgsn
9485 
9486 
9487  IMPLICIT NONE
9488 
9489 
9490 ! OUTPUT
9491 ! ------
9492 
9493 ! #vp integer :: k
9494 
9495  logical :: vector = .true. ! Vectorization Switch
9496  integer :: ikl,ikv !
9497  integer :: isn ,isnp !
9498  integer :: istoOK !
9499  real(kind=real8) :: G1_bak,G2_bak ! Old Values of G1, G2
9500  real(kind=real8) :: dTsndz ! Temperature Gradient
9501  real(kind=real8) :: sWater ! Water Content [%]
9502  real(kind=real8) :: exp1Wa !
9503  real(kind=real8) :: dDENDR ! Dendricity Increment
9504  real(kind=real8) :: DENDRn ! Normalized Dendricity
9505  real(kind=real8) :: SPHERn ! Normalized Sphericity
9506  real(kind=real8) :: Wet_OK ! Wet Metamorphism Switch
9507  real(kind=real8) :: OK__DE !
9508  real(kind=real8) :: OK__wd ! New G*, from wet Dendritic
9509  real(kind=real8) :: G1__wd ! New G1, from wet Dendritic
9510  real(kind=real8) :: G2__wd ! New G2, from wet Dendritic
9511  real(kind=real8) :: OKlowT !
9512  real(kind=real8) :: facVap !
9513  real(kind=real8) :: OK_ldd !
9514  real(kind=real8) :: G1_ldd !
9515  real(kind=real8) :: G2_ldd !
9516  real(kind=real8) :: DiamGx !
9517  real(kind=real8) :: DiamOK !
9518  real(kind=real8) :: No_Big !
9519  real(kind=real8) :: dSPHER !
9520  real(kind=real8) :: SPHER0 !
9521  real(kind=real8) :: SPHbig !
9522  real(kind=real8) :: G1_lds !
9523  real(kind=real8) :: OK_mdT !
9524  real(kind=real8) :: OKmidT !
9525  real(kind=real8) :: OKhigT !
9526  real(kind=real8) :: OK_mdd !
9527  real(kind=real8) :: G1_mdd !
9528  real(kind=real8) :: G2_mdd !
9529  real(kind=real8) :: G1_mds !
9530  real(kind=real8) :: OK_hdd !
9531  real(kind=real8) :: G1_hdd !
9532  real(kind=real8) :: G2_hdd !
9533  real(kind=real8) :: OK_hds !
9534  real(kind=real8) :: G1_hds !
9535  real(kind=real8) :: T1__OK,T2__OK !
9536  real(kind=real8) :: T3_xOK,T3__OK,T3_nOK !
9537  real(kind=real8) :: ro1_OK,ro2_OK !
9538  real(kind=real8) :: dT1_OK,dT2_OK,dT3xOK,dT3_OK !
9539  real(kind=real8) :: dT4xOK,dT4_OK,dT4nOK,AngSno !
9540  real(kind=real8) :: G2_hds,SphrOK,HISupd !
9541  real(kind=real8) :: H1a_OK,H1b_OK,H1__OK !
9542  real(kind=real8) :: H23aOK,H23bOK,H23_OK !
9543  real(kind=real8) :: H2__OK,H3__OK !
9544  real(kind=real8) :: H45_OK,H4__OK,H5__OK !
9545  real(kind=real8) :: ViscSn,OK_Liq,OK_Ang,OKxLiq !
9546  real(kind=real8) :: dSnMas,dzsnew,rosnew,rosmax !
9547 
9548  real(kind=real8) :: epsi5 = 1.0e-5 ! Alpha ev67 single precision
9549  real(kind=real8) :: epsi15 = 1.0e-15 ! Minimal 'dry' Sphericity
9550 ! real(kind=real8) :: vdiam1 = 4.0 ! Small Grains Min.Diam.[.0001m]
9551  real(kind=real8) :: vdiam2 = 0.5 ! Spher.Variat.Max Diam. [mm]
9552  real(kind=real8) :: vdiam3 = 3.0 ! Min.Diam.|Limit Spher. [mm]
9553  real(kind=real8) :: vdiam4 = 2.0 ! Min.Diam.|Viscosity Change
9554  real(kind=real8) :: vsphe1 = 1.0 ! Max Sphericity
9555  real(kind=real8) :: vsphe2 = 1.0e9 ! Low T Metamorphism Coeff.
9556  real(kind=real8) :: vsphe3 = 0.5 ! Max.Sphericity (history=1)
9557  real(kind=real8) :: vsphe4 = 0.1 ! Min.Sphericity=>history=1
9558 
9559 ! DATA (Coefficient Fonction fort Gradient Marbouty)
9560 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9561  real(kind=real8) :: vtang1 = 40.0 ! Temperature Contribution v
9562  real(kind=real8) :: vtang2 = 6.0 !
9563  real(kind=real8) :: vtang3 = 22.0 !
9564  real(kind=real8) :: vtang4 = 0.7 !
9565  real(kind=real8) :: vtang5 = 0.3 !
9566  real(kind=real8) :: vtang6 = 6.0 !
9567  real(kind=real8) :: vtang7 = 1.0 !
9568  real(kind=real8) :: vtang8 = 0.8 !
9569  real(kind=real8) :: vtang9 = 16.0 !
9570  real(kind=real8) :: vtanga = 0.2 !
9571  real(kind=real8) :: vtangb = 0.2 !
9572  real(kind=real8) :: vtangc = 18.0 ! Temperature Contribution ^
9573 
9574  real(kind=real8) :: vrang1 = 0.40 ! Density Contribution v
9575  real(kind=real8) :: vrang2 = 0.15 ! Density Contribution ^
9576 
9577  real(kind=real8) :: vgang1 = 0.70 ! Grad(T) Contribution v
9578  real(kind=real8) :: vgang2 = 0.25 !
9579  real(kind=real8) :: vgang3 = 0.40 !
9580  real(kind=real8) :: vgang4 = 0.50 !
9581  real(kind=real8) :: vgang5 = 0.10 !
9582  real(kind=real8) :: vgang6 = 0.15 !
9583  real(kind=real8) :: vgang7 = 0.10 !
9584  real(kind=real8) :: vgang8 = 0.55 !
9585  real(kind=real8) :: vgang9 = 0.65 !
9586  real(kind=real8) :: vganga = 0.20 !
9587  real(kind=real8) :: vgangb = 0.85 !
9588  real(kind=real8) :: vgangc = 0.15 ! Grad(T) Contribution ^
9589 
9590  real(kind=real8) :: vgran6 = 51. ! Max.Sphericity for Settling
9591  real(kind=real8) :: vtelv1 = 5.e-1 ! Threshold | history = 2, 3
9592  real(kind=real8) :: vvap1 = -6.e3 ! Vapor Pressure Coefficient
9593  real(kind=real8) :: vvap2 = 0.4 ! Vapor Pressure Exponent
9594  real(kind=real8) :: vgrat1 = 0.05 ! Boundary weak/mid grad(T)
9595  real(kind=real8) :: vgrat2 = 0.15 ! Boundary mid/strong grad(T)
9596  real(kind=real8) :: vfi = 0.09 ! PHI, strong grad(T)
9597 
9598  real(kind=real8) :: vvisc1 = 0.70 ! Viscosity Coefficients
9599  real(kind=real8) :: vvisc2 = 1.11e5 !
9600  real(kind=real8) :: vvisc3 = 23.00 !
9601  real(kind=real8) :: vvisc4 = 0.10 ! Viscosity Coefficients
9602  real(kind=real8) :: vvisc5 = 1.00 ! Viscosity Coefficients, wet Snow
9603  real(kind=real8) :: vvisc6 = 2.00 ! Viscosity Coefficients, wet Snow
9604  real(kind=real8) :: vvisc7 = 10.00 ! Viscosity Coefficients, wet Snow
9605  real(kind=real8) :: rovisc = 0.25 ! Wet Snow Density Influence
9606  real(kind=real8) :: vdz3 = 0.30 ! Maximum Layer Densification
9607 
9608  real(kind=real8) :: OK__ws ! New G2
9609  real(kind=real8) :: G1__ws ! New G1, from wet Spheric
9610  real(kind=real8) :: G2__ws ! New G2, from wet Spheric
9611  real(kind=real8) :: husi_0 = 20. ! Constant for New G2: 10 * 2
9612  real(kind=real8) :: husi_1 = 0.23873 ! Constant for New G2: (3/4) /pi
9613  real(kind=real8) :: husi_2 = 4.18880 ! Constant for New G2: (4/3) *pi
9614  real(kind=real8) :: husi_3 = 0.33333 ! Constant for New G2: 1/3
9615  real(kind=real8) :: vtail1 = 1.28e-08 ! Constant for New G2: Wet Metamorphism
9616  real(kind=real8) :: vtail2 = 4.22e-10 ! Constant for New G2: (NON Dendritic / Spheric)
9617  real(kind=real8) :: frac_j ! Time Step [Day]
9618 
9619  real(kind=real8) :: vdent1 = 2.e8 ! Wet Snow Metamorphism
9620  integer :: nvdent1 = 3 ! (Coefficients for
9621  integer :: nvdent2 = 16 ! Dendricity)
9622 
9623 
9624 
9625 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9626 ! !
9627 ! ALLOCATION !
9628 ! ========== !
9629 
9630  IF (it_run.EQ.1 .OR. flagdalloc) THEN !
9631 
9632  allocate ( ro_dry(kcolp,mwp,nsnow) ) ! Dry Density [g/cm3]
9633  allocate ( etasno(kcolp,mwp,nsnow) ) ! Liquid Water Content [g/cm2]
9634  allocate ( snmass(kcolp,mwp) ) ! Snow Mass [kg/m2]
9635 
9636  END IF !
9637 ! !
9638 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9639 
9640 
9641 
9642 ! 1. Metamorphoses dans les Strates
9643 ! Metamorphism
9644 ! ==============================
9645 
9646  frac_j = dt__sv / 86400. ! Time Step [Day]
9647 
9648 
9649 ! 1.1 Initialisation: teneur en eau liquide et gradient de temperature
9650 ! ------------------ liquid water content and temperature gradient
9651 
9652  DO isn=1,nsnow
9653  DO ikl=1,kcolp
9654  DO ikv=1,mwp
9655  ro_dry(ikl,ikv,isn) = 1.e-3 *ro__sv(ikl,ikv,isn) &! Dry Density
9656  & *(1. -eta_sv(ikl,ikv,isn)) ! [g/cm3]
9657  etasno(ikl,ikv,isn) = 1.e-1 *dzsnsv(ikl,ikv,isn) &! Liquid Water
9658  & * ro__sv(ikl,ikv,isn) &! Content [g/cm2]
9659  & * eta_sv(ikl,ikv,isn)!
9660  END DO
9661  END DO
9662  END DO
9663 
9664  DO isn=1,nsnow
9665  DO ikl=1,kcolp
9666  DO ikv=1,mwp
9667 
9668  isnp = min(isn+1,isnosv(ikl,ikv))
9669 
9670  dtsndz = abs( (tsissv(ikl,ikv,isnp)-tsissv(ikl,ikv,isn-1)) *2.e-2&
9671  & /max(((dzsnsv(ikl,ikv,isnp)+dzsnsv(ikl,ikv,isn) ) &
9672  & *( isnp - isn) &
9673  & +(dzsnsv(ikl,ikv,isn )+dzsnsv(ikl,ikv,isn-1))),eps6))
9674 ! Factor 1.d-2 for Conversion K/m --> K/cm
9675 
9676 
9677 ! 1.2 Metamorphose humide
9678 ! Wet Snow Metamorphism
9679 ! ---------------------
9680 
9681  wet_ok = max(zer0,sign(un_1,eta_sv(ikl,ikv,isn)-eps6))
9682 
9683 
9684 ! Vitesse de diminution de la dendricite
9685 ! Rate of the dendricity decrease
9686 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9687  swater=1.d-1*ro__sv(ikl,ikv,isn)*eta_sv(ikl,ikv,isn) &
9688  & /max(eps6,ro_dry(ikl,ikv,isn))
9689 ! . sWater:Water Content [%]
9690 ! 1.d-1= 1.d2(1->%) * 1.d-3(ro__SV*eta_SV:kg/m3->g/cm3)
9691 
9692  exp1wa= swater**nvdent1
9693  ddendr=max(exp1wa/nvdent2,vdent1*exp(vvap1/tf_sno))
9694 
9695 ! 1.2.1 Cas dendritique/dendritic Case
9696 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9697  ok__wd=max(zer0, &!
9698  & sign(un_1,-g1snsv(ikl,ikv,isn) &!
9699  & -eps6 )) !
9700 
9701  dendrn=-g1snsv(ikl,ikv,isn)/g1_dsv ! Normalized Dendricity (+)
9702  sphern= g2snsv(ikl,ikv,isn)/g1_dsv ! Normalized Sphericity
9703  dendrn= dendrn -ddendr *frac_j ! New Dendricity (+)
9704  sphern= sphern +ddendr *frac_j ! New Sphericity
9705 
9706  ok__de=max(zer0, &! IF 1.,
9707  & sign(un_1, dendrn &! NO change
9708  & -eps6 )) ! Dendr. -> Spheric
9709 
9710  g1__wd=ok__de * ( -dendrn*g1_dsv) &! Dendritic
9711  & +(1.-ok__de)* min(g1_dsv,sphern*g1_dsv) ! Dendr. -> Spheric
9712  g2__wd=ok__de * min(g1_dsv,sphern*g1_dsv) &! Spheric
9713  & +(1.-ok__de)*(adsdsv-min(sphern,vsphe1)) ! Spher. -> Size
9714 
9715 ! 1.2.2 Cas non dendritique non completement spherique
9716 ! Evolution de la Sphericite seulement.
9717 ! Non dendritic and not completely spheric Case
9718 ! Evolution of Sphericity only (not size)
9719 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9720  ok__ws=max(zer0, &!
9721  & sign(un_1, g1_dsv &!
9722  & -epsi5 &!
9723  & -g1snsv(ikl,ikv,isn))) !
9724 
9725  sphern= g1snsv(ikl,ikv,isn)/g1_dsv
9726  sphern= sphern +ddendr *frac_j
9727  g1__ws= min(g1_dsv,sphern*g1_dsv)
9728 
9729 ! 1.2.3 Cas non dendritique et spherique / non dendritic and spheric
9730 ! Evolution de la Taille seulement / Evolution of Size only
9731 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9732  g2__ws = husi_0 &
9733  & *( husi_1 &
9734  & *(husi_2 *( g2snsv(ikl,ikv,isn)/husi_0)**3 &
9735  & +(vtail1 +vtail2 *exp1wa )*dt__sv)) &
9736  & ** husi_3
9737 
9738 
9739 ! 1.3 Metamorposes seches / Dry Metamorphism
9740 ! --------------------------------------
9741 
9742 
9743 ! 1.3.1 Calcul Metamorphose faible/low Gradient (0.00-0.05 deg/cm)
9744 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9745  oklowt=max(zer0, &!
9746  & sign(un_1, vgrat1 &!
9747  & -dtsndz )) !
9748 
9749  facvap=exp(vvap1/tsissv(ikl,ikv,isn))
9750 
9751 ! 1.3.1.1 Cas dendritique / dendritic Case
9752 
9753  ok_ldd=max(zer0, &!
9754  & sign(un_1,-g1snsv(ikl,ikv,isn) &!
9755  & -eps6 )) !
9756 
9757  dendrn=-g1snsv(ikl,ikv,isn) /g1_dsv
9758  sphern= g2snsv(ikl,ikv,isn) /g1_dsv
9759  dendrn= dendrn-vdent1*facvap*frac_j
9760  sphern= sphern+vsphe2*facvap*frac_j
9761 
9762  ok__de=max(zer0, &! IF 1.,
9763  & sign(un_1, dendrn &! NO change
9764  & -eps6 )) ! Dendr. -> Spheric
9765 
9766  g1_ldd= ok__de * ( -dendrn*g1_dsv) &! Dendritic
9767  & +(1.-ok__de)* min(g1_dsv,sphern*g1_dsv) ! Dendr. -> Spheric
9768  g2_ldd= ok__de * min(g1_dsv,sphern*g1_dsv) &! Spheric
9769  & +(1.-ok__de)*(adsdsv-min(sphern,vsphe1)) ! Spher. -> Size
9770 
9771 ! 1.3.1.2 Cas non dendritique / non dendritic Case
9772 
9773  sphern=g1snsv(ikl,ikv,isn)/g1_dsv
9774  diamgx=g2snsv(ikl,ikv,isn)*0.1
9775 
9776  istook=min( abs(istosv(ikl,ikv,isn)- &!
9777  & istdsv(1) ),1) ! zero if istoSV = 1
9778  diamok=max(zer0, sign(un_1,vdiam2-diamgx))
9779  no_big= istook+diamok
9780  no_big=min(no_big,un_1)
9781 
9782  dspher= vsphe2*facvap*frac_j !
9783  spher0= sphern+dspher ! small grains
9784  sphbig= sphern+dspher &! big grains
9785  & *exp(min(zer0,vdiam3-g2snsv(ikl,ikv,isn))) ! (history = 2 or 3)
9786  sphbig= min(vsphe3,sphbig) ! limited sphericity
9787  sphern= no_big * spher0 &!
9788  & + (1.-no_big)* sphbig !
9789 
9790 ! HG v Precudes underflow
9791  sphern= max(epsi15,sphern) !
9792 ! HG ^ Precudes underflow
9793 
9794  g1_lds= min(g1_dsv,sphern*g1_dsv) !
9795 
9796 ! 1.3.2 Calcul Metamorphose Gradient Moyen/Moderate (0.05-0.15)
9797 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9798  ok_mdt=max(zer0, &!
9799  & sign(un_1, vgrat2 &!
9800  & -dtsndz)) !
9801  okmidt= ok_mdt *(1.-oklowt) !
9802  okhigt= (1. -ok_mdt) *(1.-oklowt) !
9803 
9804  facvap=vdent1*exp(vvap1/tsissv(ikl,ikv,isn)) &!
9805  & * (1.e2 *dtsndz)**vvap2 !
9806 
9807 ! 1.3.2.1 cas dendritique / dendritic case.
9808 
9809  ok_mdd=max(zer0, &!
9810  & sign(un_1,-g1snsv(ikl,ikv,isn) &!
9811  & -eps6 )) !
9812 
9813  dendrn=-g1snsv(ikl,ikv,isn)/g1_dsv
9814  sphern= g2snsv(ikl,ikv,isn)/g1_dsv
9815  dendrn= dendrn - facvap*frac_j
9816  sphern= sphern - facvap*frac_j
9817 
9818  ok__de=max(zer0, &! IF 1.,
9819  & sign(un_1, dendrn &! NO change
9820  & -eps6 )) ! Dendr. -> Spheric
9821 
9822  g1_mdd= ok__de * ( -dendrn*g1_dsv) &! Dendritic
9823  & +(1.-ok__de)* max(zer0 ,sphern*g1_dsv) ! Dendr. -> Spheric
9824  g2_mdd= ok__de * max(zer0 ,sphern*g1_dsv) &! Spheric
9825  & +(1.-ok__de)*(adsdsv-max(sphern,zer0 )) ! Spher. -> Size
9826 
9827 ! 1.3.2.2 Cas non dendritique / non dendritic Case
9828 
9829  sphern=g1snsv(ikl,ikv,isn)/g1_dsv
9830  sphern= sphern-facvap*frac_j
9831  g1_mds=max(zer0,sphern*g1_dsv)
9832 
9833 ! 1.3.3 Calcul Metamorphose fort / high Gradient
9834 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9835  facvap=vdent1*exp(vvap1/tsissv(ikl,ikv,isn)) &!
9836  & * (1.e2 *dtsndz)**vvap2 !
9837 
9838 ! 1.3.3.1 Cas dendritique / dendritic Case
9839 
9840  ok_hdd=max(zer0, &!
9841  & sign(un_1,-g1snsv(ikl,ikv,isn) &!
9842  & -eps6 )) !
9843 
9844  dendrn=-g1snsv(ikl,ikv,isn)/g1_dsv !
9845  sphern= g2snsv(ikl,ikv,isn)/g1_dsv !
9846  dendrn= dendrn - facvap*frac_j !
9847  sphern= sphern - facvap*frac_j ! Non dendritic
9848  ! and angular
9849  ok__de=max(zer0, &! IF 1.,
9850  & sign(un_1, dendrn &! NO change
9851  & -eps6 )) ! Dendr. -> Spheric
9852 
9853  g1_hdd= ok__de * ( -dendrn*g1_dsv) &! Dendritic
9854  & +(1.-ok__de)* max(zer0 ,sphern*g1_dsv) ! Dendr. -> Spheric
9855  g2_hdd= ok__de * max(zer0 ,sphern*g1_dsv) &! Spheric
9856  & +(1.-ok__de)*(adsdsv-max(sphern,zer0 )) ! Spher. -> Size
9857 
9858 ! 1.3.3.2 Cas non dendritique non completement anguleux.
9859 ! non dendritic and spericity gt. 0
9860 
9861  ok_hds=max(zer0, &!
9862  & sign(un_1, g1snsv(ikl,ikv,isn) &!
9863  & -eps6 )) !
9864 
9865  sphern= g1snsv(ikl,ikv,isn)/g1_dsv
9866  sphern= sphern - facvap*frac_j
9867  g1_hds= max(zer0,sphern*g1_dsv)
9868 
9869 ! 1.3.3.3 Cas non dendritique et anguleux
9870 ! dendritic and spericity = 0.
9871 
9872  t1__ok = max(zer0,sign(un_1,tsissv(ikl,ikv,isn)-tf_sno+vtang1))
9873  t2__ok = max(zer0,sign(un_1,tsissv(ikl,ikv,isn)-tf_sno+vtang2))
9874  t3_xok = max(zer0,sign(un_1,tsissv(ikl,ikv,isn)-tf_sno+vtang3))
9875  t3__ok = t3_xok * (1. - t2__ok)
9876  t3_nok = (1. - t3_xok) * (1. - t2__ok)
9877  ro1_ok = max(zer0,sign(un_1,vrang1-ro_dry(ikl,ikv,isn)))
9878  ro2_ok = max(zer0,sign(un_1,ro_dry(ikl,ikv,isn)-vrang2))
9879  dt1_ok = max(zer0,sign(un_1,vgang1-dtsndz ))
9880  dt2_ok = max(zer0,sign(un_1,vgang2-dtsndz ))
9881  dt3xok = max(zer0,sign(un_1,vgang3-dtsndz ))
9882  dt3_ok = dt3xok * (1. - dt2_ok)
9883  dt4xok = max(zer0,sign(un_1,vgang4-dtsndz ))
9884  dt4_ok = dt4xok * (1. - dt3_ok) &
9885  & * (1. - dt2_ok)
9886  dt4nok = (1. - dt4xok) * (1. - dt3_ok) &
9887  & * (1. - dt2_ok)
9888 
9889 ! Influence de la Temperature /Temperature Influence
9890 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9891  angsno = &
9892  & t1__ok & ! 11
9893  & *(t2__ok*(vtang4+vtang5*(tf_sno -tsissv(ikl,ikv,isn)) & ! 12
9894  & /vtang6) & !
9895  & +t3__ok*(vtang7-vtang8*(tf_sno-vtang2-tsissv(ikl,ikv,isn)) & ! 13
9896  & /vtang9) & !
9897  & +t3_nok*(vtanga-vtangb*(tf_sno-vtang3-tsissv(ikl,ikv,isn)) & ! 14
9898  & /vtangc)) & !
9899 
9900 ! Influence de la Masse Volumique /Density Influence
9901 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9902  & * ro1_ok & !
9903  & *( ro2_ok*(1. - (ro_dry(ikl,ikv,isn)-vrang2) & !
9904  & /(vrang1-vrang2)) & !
9905  & +1.-ro2_ok ) & !
9906 
9907 ! Influence du Gradient de Temperature /Temperature Gradient Influence
9908 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9909  & *( dt1_ok*(dt2_ok*vgang5*(dtsndz-vgang6) & ! 15
9910  & /(vgang2-vgang6) & !
9911  & +dt3_ok*vgang7 & ! 16
9912  & +dt4_ok*vgang9 & ! 17
9913  & +dt4nok*vgangb ) & ! 18
9914  & +1.-dt1_ok ) & !
9915  & + ro1_ok & !
9916  & * dt1_ok*(dt3_ok*vgang8*(dtsndz-vgang2) & !
9917  & /(vgang3-vgang2) & !
9918  & +dt4_ok*vganga*(dtsndz-vgang3) & !
9919  & /(vgang4-vgang3) & !
9920  & +dt4nok*vgangc*(dtsndz-vgang4) & !
9921  & /(vgang1-vgang4)) !
9922 
9923  g2_hds = g2snsv(ikl,ikv,isn) + 1.d2 *angsno*vfi *frac_j
9924 
9925 
9926 ! New Properties
9927 ! --------------
9928 
9929  g1_bak = g1snsv(ikl,ikv,isn)
9930  g2_bak = g2snsv(ikl,ikv,isn)
9931 
9932  g1snsv(ikl,ikv,isn) = wet_ok * ( ok__wd *g1__wd & ! 1
9933  & +(1.-ok__wd)* ok__ws *g1__ws & ! 2
9934  & +(1.-ok__wd)*(1.-ok__ws)*g1_bak) & ! 3
9935  & +(1. - wet_ok) & !
9936  & *( oklowt *( ok_ldd *g1_ldd & ! 4
9937  & +(1.-ok_ldd) *g1_lds) & ! 5
9938  & + okmidt *( ok_mdd *g1_mdd & ! 6
9939  & +(1.-ok_mdd) *g1_mds) & ! 7
9940  & + okhigt *( ok_hdd *g1_hdd & ! 8
9941  & +(1.-ok_hdd)* ok_hds *g1_hds & ! 9
9942  & +(1.-ok_hdd)*(1.-ok_hds)*g1_bak)) ! 10
9943 
9944 ! XF
9945  IF (g1snsv(ikl,ikv,isn).GE.0.0.AND.g1snsv(ikl,ikv,isn)<0.1) & !
9946 ! HG -------------------------^^^^^^
9947  & g2_hds = g2snsv(ikl,ikv,isn) + 1.d1 *angsno*vfi *frac_j !
9948 ! Previens chute exageree de l'albedo lorsque G1~0.
9949 ! XF
9950 
9951  g2snsv(ikl,ikv,isn) = wet_ok * ( ok__wd *g2__wd & ! 1
9952  & +(1.-ok__wd)* ok__ws *g2_bak & ! 2
9953  & +(1.-ok__wd)*(1.-ok__ws)*g2__ws) & ! 3
9954  & +(1. - wet_ok) & !
9955  & *( oklowt *( ok_ldd *g2_ldd & ! 4
9956  & +(1.-ok_ldd) *g2_bak) & ! 5
9957  & + okmidt *( ok_mdd *g2_mdd & ! 6
9958  & +(1.-ok_mdd) *g2_bak) & ! 7
9959  & + okhigt *( ok_hdd *g2_hdd & ! 8
9960  & +(1.-ok_hdd)* ok_hds *g2_bak & ! 9
9961  & +(1.-ok_hdd)*(1.-ok_hds)*g2_hds)) ! 10
9962 
9963 ! OUTPUT/Verification: Snow Layers Agregation: Properties
9964 ! #vp G_curr( 1) = Wet_OK * OK__wd
9965 ! #vp G_curr( 2) = Wet_OK *(1.-OK__wd)* OK__ws
9966 ! #vp G_curr( 3) = Wet_OK *(1.-OK__wd)*(1.-OK__ws)
9967 ! #vp G_curr( 4) = (1.-Wet_OK)* OKlowT * OK_ldd
9968 ! #vp G_curr( 5) = (1.-Wet_OK)* OKlowT *(1.-OK_ldd)
9969 ! #vp G_curr( 6) = (1.-Wet_OK)* OKmidT * OK_mdd
9970 ! #vp G_curr( 7) = (1.-Wet_OK)* OKmidT *(1.-OK_mdd)
9971 ! #vp G_curr( 8) = (1.-Wet_OK)* OKhigT * OK_hdd
9972 ! #vp G_curr( 9) = (1.-Wet_OK)* OKhigT *(1.-OK_hdd)* OK_hds
9973 ! #vp G_curr(10) = (1.-Wet_OK)* OKhigT *(1.-OK_hdd)*(1.-OK_hds)
9974 ! #vp G_curr(11) = T1__OK * G_curr(10)
9975 ! #vp G_curr(12) = T2__OK * G_curr(10)
9976 ! #vp G_curr(13) = T3__OK * G_curr(10)
9977 ! #vp G_curr(14) = T3_nOK * G_curr(10)
9978 ! #vp G_curr(15) = ro1_OK* dT1_OK * dT2_OK * G_curr(10)
9979 ! #vp G_curr(16) = ro1_OK* dT1_OK * dT3_OK * G_curr(10)
9980 ! #vp G_curr(17) = ro1_OK* dT1_OK * dT4_OK * G_curr(10)
9981 ! #vp G_curr(18) = ro1_OK* dT1_OK * dT4nOK * G_curr(10)
9982 
9983 ! #vp Gcases( 1) = max(Gcases( 1),G_curr( 1))
9984 ! #vp Gcases( 2) = max(Gcases( 2),G_curr( 2))
9985 ! #vp Gcases( 3) = max(Gcases( 3),G_curr( 3))
9986 ! #vp Gcases( 4) = max(Gcases( 4),G_curr( 4))
9987 ! #vp Gcases( 5) = max(Gcases( 5),G_curr( 5))
9988 ! #vp Gcases( 6) = max(Gcases( 6),G_curr( 6))
9989 ! #vp Gcases( 7) = max(Gcases( 7),G_curr( 7))
9990 ! #vp Gcases( 8) = max(Gcases( 8),G_curr( 8))
9991 ! #vp Gcases( 9) = max(Gcases( 9),G_curr( 9))
9992 ! #vp Gcases(10) = max(Gcases(10),G_curr(10))
9993 ! #vp Gcases(11) = max(Gcases(11),G_curr(11))
9994 ! #vp Gcases(12) = max(Gcases(12),G_curr(12))
9995 ! #vp Gcases(13) = max(Gcases(13),G_curr(13))
9996 ! #vp Gcases(14) = max(Gcases(14),G_curr(14))
9997 ! #vp Gcases(15) = max(Gcases(15),G_curr(15))
9998 ! #vp Gcases(16) = max(Gcases(16),G_curr(16))
9999 ! #vp Gcases(17) = max(Gcases(17),G_curr(17))
10000 ! #vp Gcases(18) = max(Gcases(18),G_curr(18))
10001 
10002 ! #vp IF (isn .le. isnoSV(ikl,ikv)) &
10003 ! #vp& write(47,471)isn ,isnoSV(ikl,ikv) ,&
10004 ! #vp& TsisSV(ikl,ikv,isn),ro__SV(ikl,ikv,isn),eta_SV(ikl,ikv,isn),&
10005 ! #vp& G1_bak ,G2_bak ,istoSV(ikl,ikv,isn),&
10006 ! #vp& dTsndz, &
10007 ! #vp& ( k ,k=1,18), &
10008 ! #vp& (G_curr(k),k=1,18), &
10009 ! #vp& (Gcases(k),k=1,18), &
10010 ! #vp& Wet_OK,OK__wd,G1__wd,G2__wd, &
10011 ! #vp& 1.-OK__wd,OK__ws,G1__ws,1.-OK__ws,G2__ws, &
10012 ! #vp& 1.-Wet_OK,OKlowT,OK_ldd,G1_ldd, G2_ldd, &
10013 ! #vp& 1.-OK_ldd,G1_lds, &
10014 ! #vp& OKmidT,OK_mdd,G1_mdd, G1_mdd, &
10015 ! #vp& 1.-OK_mdd,G1_mds, &
10016 ! #vp& OKhigT,OK_hdd,G1_hdd, G2_hdd, &
10017 ! #vp& 1.-OK_hdd,OK_hds, G1_hds, &
10018 ! #vp& 1.-OK_hds,G2_hds, &
10019 ! #vp& G1snSV(ikl,ikv,isn), &
10020 ! #vp& G2snSV(ikl,ikv,isn)
10021 ! #vp 471 format( &
10022 ! #vp& /,' isn = ',i4,6x,'(MAX.:',i4,')', &
10023 ! #vp& /,' T = ',f8.3, &
10024 ! #vp& /,' ro = ',f8.3, &
10025 ! #vp& /,' eta = ',f8.3, &
10026 ! #vp& /,' G1 = ',f8.3, &
10027 ! #vp& /,' G2 = ',f8.3, &
10028 ! #vp& /,' Histor. = ',i4 , &
10029 ! #vp& /,' Grad(T) = ',f8.3,' ' ,18i3 , &
10030 ! #vp&/, ' Current Case: ',18f3.0, &
10031 ! #vp&/, ' Cases performed: ',18f3.0, &
10032 ! #vp&/,' ------------------------------------------------------------',&
10033 ! #vp& '-----------+------------------+------------------+',&
10034 ! #vp&/,' Status ',&
10035 ! #vp& ' | G1 | G2 |',&
10036 ! #vp&/,' ------------------------------------------------------------',&
10037 ! #vp& '-----------+------------------+------------------+',&
10038 ! #vp&/,' Wet_OK: ',f8.3,' OK__wd: ',f8.3,' ',&
10039 ! #vp& ' | G1__wd: ',f8.3,' | G2__wd: ',f8.5,' |',&
10040 ! #vp&/,' 1.-OK__wd: ',f8.3,' OK__ws',&
10041 ! #vp& ': ',f8.3,' | G1__ws: ',f8.3,' | |',&
10042 ! #vp&/,' 1.-OK__ws',&
10043 ! #vp& ': ',f8.3,' | | G2__ws: ',f8.5,' |',&
10044 ! #vp&/,' 1.-Wet_OK: ',f8.3,' OKlowT: ',f8.3,' OK_ldd: ',f8.3,' ',&
10045 ! #vp& ' | G1_ldd: ',f8.3,' | G2_ldd: ',f8.5,' |',&
10046 ! #vp&/,' 1.-OK_ldd: ',f8.3,' ',&
10047 ! #vp& ' | G1_lds: ',f8.3,' | |',&
10048 ! #vp&/,' OKmidT: ',f8.3,' OK_mdd: ',f8.3,' ',&
10049 ! #vp& ' | G1_mdd: ',f8.3,' | G2_mdd: ',f8.5,' |',&
10050 ! #vp&/,' 1.-OK_mdd: ',f8.3,' ',&
10051 ! #vp& ' | G1_mds: ',f8.3,' | |',&
10052 ! #vp&/,' OKhigT: ',f8.3,' OK_hdd: ',f8.3,' ',&
10053 ! #vp& ' | G1_hdd: ',f8.3,' | G2_hdd: ',f8.5,' |',&
10054 ! #vp&/,' 1.-OK_hdd: ',f8.3,' OK_hds',&
10055 ! #vp& ': ',f8.3,' | G1_hds: ',f8.3,' | |',&
10056 ! #vp&/,' 1.-OK_hds',&
10057 ! #vp& ': ',f8.3,' | | G2_hds: ',f8.5,' |',&
10058 ! #vp&/,' ------------------------------------------------------------',&
10059 ! #vp& '-----------+------------------+------------------+',&
10060 ! #vp&/,' ',&
10061 ! #vp& ' | ',f8.3,' | ',f8.5,' |',&
10062 ! #vp&/,' ------------------------------------------------------------',&
10063 ! #vp& '-----------+------------------+------------------+')
10064  END DO
10065  END DO
10066  END DO
10067 
10068 
10069 ! 2. Mise a Jour Variables Historiques (Cas non dendritique)
10070 ! Update of the historical Variables
10071 ! =======================================================
10072 
10073  IF (vector) THEN
10074  DO isn=1,nsnow
10075  DO ikl=1,kcolp
10076  DO ikv=1,mwp
10077 
10078  sphrok = max(zer0,sign(un_1, g1snsv(ikl,ikv,isn)))
10079  h1a_ok = max(zer0,sign(un_1,vsphe4-g1snsv(ikl,ikv,isn)))
10080  h1b_ok = 1 - min(1 , istosv(ikl,ikv,isn))
10081  h1__ok = h1a_ok*h1b_ok
10082  h23aok = max(zer0,sign(un_1,vsphe4-g1_dsv &
10083  & +g1snsv(ikl,ikv,isn)))
10084  h23bok = max(zer0,sign(un_1,etasno(ikl,ikv,isn) &
10085  & /max(eps6,dzsnsv(ikl,ikv,isn)) &
10086  & -vtelv1 ))
10087  h23_ok = h23aok*h23bok
10088  h2__ok = 1 - min(1 , istosv(ikl,ikv,isn))
10089  h3__ok = 1 - min(1 , abs(istosv(ikl,ikv,isn)-istdsv(1)))
10090  h45_ok = max(zer0,sign(un_1,tf_sno-tsissv(ikl,ikv,isn)+eps6))
10091  h4__ok = 1 - min(1 , abs(istosv(ikl,ikv,isn)-istdsv(2)))
10092  h5__ok = 1 - min(1 , abs(istosv(ikl,ikv,isn)-istdsv(3)))
10093 
10094  hisupd = &
10095  & sphrok*(h1__ok *istdsv(1) &
10096  & +(1.-h1__ok)* h23_ok *(h2__ok*istdsv(2) &
10097  & +h3__ok*istdsv(3)) &
10098  & +(1.-h1__ok)*(1.-h23_ok) *h45_ok*(h4__ok*istdsv(4) &
10099  & +h5__ok*istdsv(5)))
10100  istosv(ikl,ikv,isn)=int(hisupd) + &
10101  & int(1.-min(un_1,hisupd)) *istosv(ikl,ikv,isn)
10102  END DO
10103  END DO
10104  END DO
10105  ELSE
10106 
10107 
10108 ! 2. Mise a Jour Variables Historiques (Cas non dendritique)
10109 ! Update of the historical Variables
10110 ! =======================================================
10111 
10112  DO ikl=1,kcolp
10113  DO ikv=1,mwp
10114  DO isn=iicesv(ikl,ikv),isnosv(ikl,ikv)
10115  IF (g1snsv(ikl,ikv,isn).ge.0.) THEN
10116  IF(g1snsv(ikl,ikv,isn).lt.vsphe4.and.istosv(ikl,ikv,isn).eq.0) THEN
10117  istosv(ikl,ikv,isn)=istdsv(1)
10118  ELSEIF(g1_dsv-g1snsv(ikl,ikv,isn) .lt.vsphe4.and. &
10119  & etasno(ikl,ikv,isn)/dzsnsv(ikl,ikv,isn).gt.vtelv1) THEN
10120  IF (istosv(ikl,ikv,isn).eq.0) &
10121  & istosv(ikl,ikv,isn)= istdsv(2)
10122  IF (istosv(ikl,ikv,isn).eq.istdsv(1)) &
10123  & istosv(ikl,ikv,isn)= istdsv(3)
10124  ELSEIF(tsissv(ikl,ikv,isn).lt.tf_sno) THEN
10125  IF (istosv(ikl,ikv,isn).eq.istdsv(2)) &
10126  & istosv(ikl,ikv,isn)= istdsv(4)
10127  IF (istosv(ikl,ikv,isn).eq.istdsv(3)) &
10128  & istosv(ikl,ikv,isn)= istdsv(5)
10129  END IF
10130  END IF
10131  END DO
10132  END DO
10133  END DO
10134  END IF
10135 
10136 
10137 ! 3. Tassement mecanique /mechanical Settlement
10138 ! ==========================================
10139 
10140  DO ikl=1,kcolp
10141  DO ikv=1,mwp
10142  snmass(ikl,ikv) = 0.
10143  END DO
10144  END DO
10145  DO isn=nsnow,1,-1
10146  DO ikl=1,kcolp
10147  DO ikv=1,mwp
10148  dsnmas = 100.*dzsnsv(ikl,ikv,isn)*ro_dry(ikl,ikv,isn)
10149  snmass(ikl,ikv)= snmass(ikl,ikv)+0.5*dsnmas
10150  viscsn = vvisc1 *vvisc2 &
10151  & *exp(vvisc3 *ro_dry(ikl,ikv,isn) &
10152  & +vvisc4*abs(tf_sno-tsissv(ikl,ikv,isn))) &
10153  & *ro_dry(ikl,ikv,isn)/rovisc
10154 
10155 ! Changement de Viscosite si Teneur en Eau liquide
10156 ! Change of the Viscosity if liquid Water Content
10157 ! ------------------------------------------------
10158 
10159  ok_liq = max(zer0,sign(un_1,etasno(ikl,ikv,isn)-eps6))
10160  ok_ang = max(zer0,sign(un_1,vgran6-g1snsv(ikl,ikv,isn))) &
10161  & *(1-min(1 , abs(istosv(ikl,ikv,isn)-istdsv(1))))
10162 
10163 ! OUTPUT/Verification: Snow Properties
10164 ! #vs IF (G1snSV(ikl,ikv,isn).gt.0..AND.G1snSV(ikl,ikv,isn).lt.vsphe4 &
10165 ! #vs& .AND.istoSV(ikl,ikv,isn).eq. 0) &
10166 ! #vs& THEN
10167 ! #vs write(6,*) ikl,ikv,isn,' G1,G2,hist,OK_Ang ', &
10168 ! #vs& G1snSV(ikl,ikv,isn), G2snSV(ikl,ikv,isn),istoSV(ikl,ikv,isn),OK_Ang
10169 ! #vs stop "Grains anguleux mal d?finis"
10170 ! #vs END IF
10171 
10172  okxliq = max(zer0,sign(un_1,vtelv1-etasno(ikl,ikv,isn)&
10173  & /max(eps6,dzsnsv(ikl,ikv,isn)))) &
10174  & * max(0 ,sign(1 ,istosv(ikl,ikv,isn) &
10175  & -istdsv(1) ))
10176  viscsn = &
10177  & viscsn*( ok_liq/(vvisc5+vvisc6*etasno(ikl,ikv,isn) &
10178  & /max(eps6,dzsnsv(ikl,ikv,isn))) &
10179  & +(1.-ok_liq) ) &
10180  & *( ok_ang*exp(min(adsdsv,g2snsv(ikl,ikv,isn)-vdiam4)) &
10181  & +(1.-ok_ang) ) &
10182  & *( okxliq* vvisc7 &
10183  & +(1.-okxliq) )
10184 
10185 
10186 ! Calcul nouvelle Epaisseur / new Thickness
10187 ! -----------------------------------------
10188 
10189  dzsnew = &
10190  & dzsnsv(ikl,ikv,isn) &
10191  & *max(vdz3, &
10192  & (un_1-dt__sv*max(snmass(ikl,ikv)*cos(slorsv(ikl,ikv)),un_1) &
10193  & /max(viscsn ,eps6)))
10194  rosnew = ro__sv(ikl,ikv,isn) *dzsnsv(ikl,ikv,isn) &
10195  & /max(eps6,dzsnew)
10196  rosmax = 1.d0 /( (1.d0 -eta_sv(ikl,ikv,isn)) /rhoice &
10197  & + eta_sv(ikl,ikv,isn) /rhowat)
10198  rosnew = min(rosnew ,rosmax)
10199  dzsnsv(ikl,ikv,isn)= dzsnsv(ikl,ikv,isn) *ro__sv(ikl,ikv,isn)&
10200  & /max(eps6,rosnew)
10201  ro__sv(ikl,ikv,isn)= rosnew
10202  ro_dry(ikl,ikv,isn)= ro__sv(ikl,ikv,isn)*(1.-eta_sv(ikl,ikv,isn))*1.e-3
10203 ! ro_dry: Dry Density (g/cm3)
10204 
10205  snmass(ikl,ikv) = snmass(ikl,ikv)+dsnmas*0.5
10206  END DO
10207  END DO
10208  END DO
10209 
10210 
10211 ! OUTPUT/Verification: Snow Properties
10212 ! #vs DO ikl = 1,kcolp
10213 ! #vs DO ikv=1,mwp
10214 ! #vs DO isn = 1,isnoSV(ikl,ikv)
10215 ! #vs IF (G1snSV(ikl,ikv,isn).gt.0. .AND. G2snSV(ikl,ikv,isn).gt.D__MAX) THEN
10216 ! #vs write(6,6600) G1snSV(ikl,ikv,isn),G2snSV(ikl,ikv,isn),ikl,ikv,isn
10217 ! #vs6600 format(/,'WARNING in _GSn: G1,G2 =',2f9.3,' (ikl,ikv,isn) =',2i4)
10218 ! #vs D__MAX = G2snSV(ikl,ikv,isn)
10219 ! #vs END IF
10220 ! #vs IF ( G2snSV(ikl,ikv,isn).lt.0. ) THEN
10221 ! #vs write(6,6601) G1snSV(ikl,ikv,isn),G2snSV(ikl,ikv,isn),ikl,ikv,isn
10222 ! #vs6601 format(/,'ERROR 1 in _GSn: G1,G2 =',2f9.3,' (ikl,ikv,isn) =',2i4)
10223 ! #vs STOP
10224 ! #vs END IF
10225 ! #vs IF (G1snSV(ikl,ikv,isn).gt.G1_dSV+eps6 ) THEN
10226 ! #vs write(6,6602) G1snSV(ikl,ikv,isn),G2snSV(ikl,ikv,isn),ikl,ikv,isn
10227 ! #vs6602 format(/,'ERROR 2 in _GSn: G1,G2 =',2f9.3,' (ikl,ikv,isn) =',2i4)
10228 ! #vs STOP
10229 ! #vs END IF
10230 ! #vs IF (G1snSV(ikl,ikv,isn).lt.0. .AND. &
10231 ! #vs& G2snSV(ikl,ikv,isn).gt.G1_dSV+eps6 ) THEN
10232 ! #vs write(6,6603) G1snSV(ikl,ikv,isn),G2snSV(ikl,ikv,isn),ikl,ikv,isn
10233 ! #vs6603 format(/,'ERROR 3 in _GSn: G1,G2 =',2f9.3,' (ikl,ikv,isn) =',2i4)
10234 ! #vs STOP
10235 ! #vs END IF
10236 ! #vs END DO
10237 ! #vs END DO
10238 ! #vs END DO
10239 
10240 
10241 
10242 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10243 ! !
10244 ! DE-ALLOCATION !
10245 ! ============= !
10246 
10247  IF (flagdalloc) THEN !
10248 
10249  deallocate ( ro_dry ) ! Dry Density [g/cm3]
10250  deallocate ( etasno ) ! Liquid Water Content [g/cm2]
10251  deallocate ( snmass ) ! Snow Mass [kg/m2]
10252 
10253  END IF !
10254 ! !
10255 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10256 
10257 
10258  return
10259  end subroutine sisvat_gsn
10260 
10261 
10262 
10263  subroutine sisvat_qso( &
10264 ! #m0& Wats_0,Wats_1,Wats_d &
10265  & )
10267 !--------------------------------------------------------------------------+
10268 ! MAR SISVAT_qSo Wed 26-Jun-2013 MAR |
10269 ! SubRoutine SISVAT_qSo computes the Soil Water Balance |
10270 ! |
10271 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
10272 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
10273 ! |
10274 !--------------------------------------------------------------------------+
10275 ! |
10276 ! PARAMETERS: kcolv: Total Number of columns = |
10277 ! ^^^^^^^^^^ = Total Number of continental grid boxes |
10278 ! X Number of Mosaic Cell per grid box |
10279 ! |
10280 ! INPUT: isnoSV = total Nb of Ice/Snow Layers |
10281 ! ^^^^^ isotSV = 0,...,11: Soil Type |
10282 ! 0: Water, Solid or Liquid |
10283 ! |
10284 ! INPUT: rhT_SV : SBL Top Air Density [kg/m3] |
10285 ! ^^^^^ drr_SV : Rain Intensity [kg/m2/s] |
10286 ! LSdzsv : Vertical Discretization Factor [-] |
10287 ! = 1. Soil |
10288 ! = 1000. Ocean |
10289 ! dt__SV : Time Step [s] |
10290 ! |
10291 ! Lx_H2O : Latent Heat of Vaporization/Sublimation [J/kg] |
10292 ! HLs_sv : Latent Heat Flux [W/m2] |
10293 ! Rootsv : Root Water Pump [kg/m2/s] |
10294 ! |
10295 ! INPUT / eta_SV : Water Content [m3/m3] |
10296 ! OUTPUT: Khydsv : Soil Hydraulic Conductivity [m/s] |
10297 ! ^^^^^^ |
10298 ! |
10299 ! OUTPUT: RnofSV : RunOFF Intensity [kg/m2/s] |
10300 ! ^^^^^^ Wats_0 : Soil Water, before Forcing [mm] |
10301 ! Wats_1 : Soil Water, after Forcing [mm] |
10302 ! Wats_d : Soil Water Forcing [mm] |
10303 ! |
10304 ! Internal Variables: |
10305 ! ^^^^^^^^^^^^^^^^^^ |
10306 ! z_Bump : (Partly)Bumpy Layers Height [m] |
10307 ! z0Bump : Bumpy Layers Height [m] |
10308 ! dzBump : Lowest Bumpy Layer: [m] |
10309 ! etBump : Bumps Layer Averaged Humidity [m3/m3] |
10310 ! etaMid : Layer Interface's Humidity [m3/m3] |
10311 ! eta__f : Layer Humidity (Water Front)[m3/m3] |
10312 ! Dhyd_f : Soil Hydraulic Diffusivity (Water Front) [m2/s] |
10313 ! Dhydif : Soil Hydraulic Diffusivity [m2/s] |
10314 ! WgFlow : Water gravitational Flux [kg/m2/s] |
10315 ! Wg_MAX : Water MAXIMUM gravitational Flux [kg/m2/s] |
10316 ! SatRat : Water Saturation Flux [kg/m2/s] |
10317 ! WExces : Water Saturation Excess Flux [kg/m2/s] |
10318 ! Dhydtz : Dhydif * dt / dz [m] |
10319 ! FreeDr : Free Drainage Fraction [-] |
10320 ! Elem_A : A Diagonal Coefficient |
10321 ! Elem_C : C Diagonal Coefficient |
10322 ! Diag_A : A Diagonal |
10323 ! Diag_B : B Diagonal |
10324 ! Diag_C : C Diagonal |
10325 ! Term_D : Independant Term |
10326 ! Aux__P : P Auxiliary Variable |
10327 ! Aux__Q : Q Auxiliary Variable |
10328 ! |
10329 ! TUNING PARAMETER: |
10330 ! ^^^^^^^^^^^^^^^^ |
10331 ! z0soil : Soil Surface averaged Bumps Height [m] |
10332 ! |
10333 ! METHOD: NO Skin Surface Humidity |
10334 ! ^^^^^^ Semi-Implicit Crank Nicholson Scheme |
10335 ! (Partial) free Drainage, Water Bodies excepted (Lakes, Sea) |
10336 ! |
10337 ! |
10338 ! Preprocessing Option: |
10339 ! ^^^^^^^^^^^^^^^^^^^^^ |
10340 ! #GF: Saturation Front |
10341 ! #GH: Saturation Front allows Horton Runoff |
10342 ! #GA: Soil Humidity Geometric Average |
10343 ! #TB: Parameterization of Terrain Bumps |
10344 ! |
10345 ! |
10346 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
10347 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
10348 ! FILE | CONTENT |
10349 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
10350 ! # SISVAT_iii_jjj_n | #m0: OUTPUT/Verification: H2O Conservation |
10351 ! # SISVAT_iii_jjj_n | #m1: OUTPUT/Verification: * Mass Conservation |
10352 ! # stdout | #mw: OUTPUT/Verification: H2O Conservation |
10353 ! | unit 6, SubRoutine SISVAT_qSo **ONLY** |
10354 ! # SISVAT_qSo.vw | #vw: OUTPUT/Verif+Detail: H2O Conservation |
10355 ! | unit 42, SubRoutine SISVAT_qSo **ONLY** |
10356 ! # stdout | #vg: OUTPUT/Verification: Gravitational Front |
10357 ! | unit 6, SubRoutine SISVAT_qSo **ONLY** |
10358 ! |
10359 ! REMARQUE: Inclure possibilite de creer mare sur bedrock impermeable |
10360 ! ^^^^^^^^ |
10361 !--------------------------------------------------------------------------+
10362 
10363 
10364 ! Global Variables
10365 ! =================
10366 
10367  use mod_real
10368  use mod_phy____dat
10369  use mod_phy____grd
10370  use mod_sisvat_grd
10371 
10372 
10373 
10374 ! General Variables
10375 ! =================
10376 
10377  use mod_sisvat_ctr
10378  use mod_sisvat_dat
10379  use mod_sisvat_dzs
10380  use mod_sisvat_kkl
10381  use mod_sisvat_loc
10382 
10383 
10384 
10385 ! Internal Variables
10386 ! ==================
10387 
10388  use mod_sisvatlqso
10389 
10390 
10391  IMPLICIT NONE
10392 
10393 
10394  integer :: isl !
10395  integer :: ist ,ikl,ikv!
10396  integer :: ikm ,ikp !
10397  integer :: ik0 !
10398  integer :: ist__s,ist__w ! Soil/Water Body Identifier
10399 
10400 
10401 ! #TB real(kind=real8) :: z0soil = 0.02 ! Soil Surface Bumps Height [m]
10402 ! #TB real(kind=real8) :: z_Bump !(Partly)Bumpy Layers Height [m]
10403 ! #TB real(kind=real8) :: z0Bump ! Bumpy Layers Height [m]
10404 ! #TB real(kind=real8) :: dzBump ! Lowest Bumpy Layer:
10405 
10406  real(kind=real8) :: etaMid ! Layer Interface's Humidity
10407  real(kind=real8) :: Dhydif ! Hydraulic Diffusivity [m2/s]
10408 ! #GH real(kind=real8) :: eta__f ! Water Front Soil Water Content
10409  real(kind=real8) :: Khyd_f ! Water Front Hydraulic Conduct.
10410  real(kind=real8) :: Khydav ! Hydraulic Conductivity [m/s]
10411 ! #GF real(kind=real8) :: WgFlow ! Water gravitat. Flux [kg/m2/s]
10412  real(kind=real8) :: Wg_MAX ! Water MAX.grav. Flux [kg/m2/s]
10413  real(kind=real8) :: SatRat ! Saturation Flux [kg/m2/s]
10414 ! #GF real(kind=real8) :: WExces ! Saturat. Excess Flux [kg/m2/s]
10415  real(kind=real8) :: Elem_A ! Diagonal Coefficients
10416  real(kind=real8) :: Elem_B ! Diagonal Coefficients
10417  real(kind=real8) :: Elem_C ! Diagonal Coefficients
10418  real(kind=real8) :: FreeDr ! Free Drainage Fraction (actual)
10419 ! real(kind=real8) :: FreeD0 = 1.00 ! Free Drainage Fraction (1=Full)
10420 
10421 ! OUTPUT
10422 ! ------
10423 
10424 ! OUTPUT/Verification: H2O Conservation
10425 ! #mw real(kind=real8) :: hourwr
10426 
10427 
10428 
10429 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10430 ! !
10431 ! ALLOCATION !
10432 ! ========== !
10433 
10434  IF (it_run.EQ.1 .OR. flagdalloc) THEN !
10435 
10436 ! OUTPUT/Verification: H2O Conservation
10437 ! #m0 allocate ( Wats_0(kcolp,mwp) ) ! Soil Water, before forcing
10438 ! #m0 allocate ( Wats_1(kcolp,mwp) ) ! Soil Water, after forcing
10439 ! #m0 allocate ( Wats_d(kcolp,mwp) ) ! Soil Water forcing
10440 
10441 ! #TB allocate ( etBump(kcolp,mwp) ) ! Bumps Layer Averaged Humidity
10442 
10443  allocate ( sornof(kcolp,mwp) ) ! Soil Run OFF
10444  allocate ( dhydtz(kcolp,mwp,-nsoil:0) ) ! Dhydif * dt / dz [m]
10445  allocate ( diag_a(kcolp,mwp,-nsoil:0) ) ! A Diagonal
10446  allocate ( diag_b(kcolp,mwp,-nsoil:0) ) ! B Diagonal
10447  allocate ( diag_c(kcolp,mwp,-nsoil:0) ) ! C Diagonal
10448  allocate ( term_d(kcolp,mwp,-nsoil:0) ) ! Independant Term
10449  allocate ( aux__p(kcolp,mwp,-nsoil:0) ) ! P Auxiliary Variable
10450  allocate ( aux__q(kcolp,mwp,-nsoil:0) ) ! Q Auxiliary Variable
10451  allocate ( etaaux(kcolp,mwp,-nsoil:-nsoil+1) ) ! Soil Water Content [m3/m3]
10452 
10453  END IF !
10454 ! !
10455 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10456 
10457 
10458 
10459 ! OUTPUT/Verification: H2O Conservation: Water Budget (IN)
10460 ! #m0 DO ikl=1,kcolp
10461 ! #m0 DO ikv=1,mwp
10462 ! #m0 Wats_0(ikl,ikv) = 0. ! OLD RunOFF Contrib.
10463 ! #m0 Wats_d(ikl,ikv) = drr_SV(ikl,ikv) ! Water Surface Forc.
10464 ! #m0 END DO
10465 ! #m0 END DO
10466 
10467 ! #m0 isl= -nsoil
10468 ! #m0 DO ikl=1,kcolp
10469 ! #m0 DO ikv=1,mwp
10470 ! #m0 Wats_0(ikl,ikv) = Wats_0(ikl,ikv) &
10471 ! #m0& + rhoWat *( eta_SV(ikl,ikv,isl) *dz78SV(isl) &
10472 ! #m0& + eta_SV(ikl,ikv,isl+1) *dz_8SV(isl) ) * LSdzsv(ikl,ikv)
10473 ! #m0 END DO
10474 ! #m0 END DO
10475 
10476 ! #m0 DO isl= -nsoil+1,-1
10477 ! #m0 DO ikl=1,kcolp
10478 ! #m0 DO ikv=1,mwp
10479 ! #m0 Wats_0(ikl,ikv) = Wats_0(ikl,ikv) &
10480 ! #m0& + rhoWat *( eta_SV(ikl,ikv,isl) *dz34SV(isl) &
10481 ! #m0& +(eta_SV(ikl,ikv,isl-1) &
10482 ! #m0& +eta_SV(ikl,ikv,isl+1))*dz_8SV(isl) ) * LSdzsv(ikl,ikv)
10483 ! #m0 END DO
10484 ! #m0 END DO
10485 ! #m0 END DO
10486 
10487 ! #m0 isl= 0
10488 ! #m0 DO ikl=1,kcolp
10489 ! #m0 DO ikv=1,mwp
10490 ! #m0 Wats_0(ikl,ikv) = Wats_0(ikl,ikv) &
10491 ! #m0& + rhoWat *( eta_SV(ikl,ikv,isl) *dz78SV(isl) &
10492 ! #m0& + eta_SV(ikl,ikv,isl-1) *dz_8SV(isl) ) * LSdzsv(ikl,ikv)
10493 ! #m0 END DO
10494 ! #m0 END DO
10495 
10496 
10497 ! Gravitational Flow
10498 ! ==================
10499 
10500 ! . METHOD: Surface Water Flux saturates successively the soil layers
10501 ! ^^^^^^ from up to below, but is limited by infiltration capacity.
10502 ! Hydraulic Conductivity again contributes after this step,
10503 ! not redundantly because of a constant (saturated) profile.
10504 
10505 ! Flux Limitor
10506 ! ^^^^^^^^^^^^^
10507  isl=0
10508  DO ikl=1,kcolp
10509  DO ikv=1,mwp
10510  ist = isotsv(ikl,ikv) ! Soil Type
10511  ist__s = min(ist, 1) ! 1 => Soil
10512  ist__w = 1 - ist__s ! 1 => Water Body
10513  dhydif = s1__sv(ist) &!
10514  & *max(eps6,eta_sv(ikl,ikv,isl)) &! Hydraulic Diffusivity
10515  & **(bchdsv(ist)+2.) ! DR97, Eqn.(3.36)
10516  dhydif = ist__s * dhydif &!
10517  & + ist__w * vk_dsv ! Water Bodies
10518 
10519  khydav = ist__s * ks_dsv(ist) &! DR97 Assumption
10520  & + ist__w * vk_dsv ! Water Bodies
10521 
10522  wg_max = rhowat *dhydif &! MAXimum Infiltration
10523  & *(etadsv(ist)-eta_sv(ikl,ikv,isl)) &! Rate
10524  & /(dzavsv(isl)*lsdzsv(ikl,ikv) ) &!
10525  & + rhowat *khydav !
10526 
10527 ! Surface Horton RunOFF
10528 ! ^^^^^^^^^^^^^^^^^^^^^
10529  sornof(ikl,ikv) = &!
10530  & max(zer0,drr_sv(ikl,ikv)-wg_max) !
10531  drr_sv(ikl,ikv) = drr_sv(ikl,ikv)-sornof(ikl,ikv)
10532  END DO
10533  END DO
10534 
10535 ! #GF DO isl=0,-nsoil,-1
10536 ! #GF DO ikl=1,kcolp
10537 ! #GF DO ikv=1,mwp
10538 ! #GF ist = isotSV(ikl,ikv) ! Soil Type
10539 ! #GF ist__s = min(ist, 1) ! 1 => Soil
10540 ! #GF ist__w = 1 - ist__s ! 1 => Water Body
10541 
10542 ! Water Diffusion
10543 ! ^^^^^^^^^^^^^^^
10544 ! #GF Dhydif = s1__SV(ist) &!
10545 ! #GF& *max(eps6,eta_SV(ikl,ikv,isl)) &! Hydraulic Diffusivity
10546 ! #GF& **(bCHdSV(ist)+2.) ! DR97, Eqn.(3.36)
10547 ! #GF Dhydif = ist__s * Dhydif &!
10548 ! #GF& + ist__w * vK_dSV ! Water Bodies
10549 
10550 ! Water Conduction (without Horton Runoff)
10551 ! ^^^^^^^^^^^^^^^^
10552 ! #GF Khyd_f = Ks_dSV(ist)
10553 ! Uses saturated K ==> Horton Runoff ~0 !
10554 
10555 ! Water Conduction (with Horton Runoff)
10556 ! ^^^^^^^^^^^^^^^^
10557 ! #GH ik0 = nkhy *int(eta_SV(ikl,ikv,isl)&!
10558 ! #GH& /etadSV(ist)) !
10559 ! #GH eta__f = 1. &!
10560 ! #GH& -aKdtSV(ist,ik0)/(2. *dzAvSV(isl) &!
10561 ! #GH& *LSdzsv(ikl,ikv)) !
10562 ! #GH eta__f = max(eps_21,eta__f)
10563 ! #GH eta__f = min(etadSV(ist), &!
10564 ! #GH& eta_SV(ikl,ikv,isl) + &!
10565 ! #GH& (aKdtSV(ist,ik0) *eta_SV(ikl,ikv,isl)&!
10566 ! #GH& +bKdtSV(ist,ik0)) /(dzAvSV(isl) &!
10567 ! #GH& *LSdzsv(ikl,ikv)) &!
10568 ! #GH& / eta__f )
10569 
10570 ! #GH eta__f = .5*(eta_SV(ikl,ikv,isl)&!
10571 ! #GH& +eta__f) !
10572 ! eta__f = eta_SV(ikl,isl) ! Another Possibility
10573 
10574 ! #GH ik0 = nkhy *eta__f &!
10575 ! #GH& /etadSV(ist) !
10576 ! #GH Khyd_f = &!
10577 ! #GH& (aKdtSV(ist,ik0) *eta__f &!
10578 ! #GH& +bKdtSV(ist,ik0)) /dt__SV !
10579 
10580 ! #GF Khydav = ist__s * Khyd_f &! DR97 Assumption
10581 ! #GF& + ist__w * vK_dSV ! Water Bodies
10582 
10583 ! Gravitational Flow
10584 ! ^^^^^^^^^^^^^^^^^^
10585 ! #GF Wg_MAX = &! MAXimum Infiltration
10586 ! #GF& rhoWat *Dhydif &! Rate
10587 ! #GF& *(etadSV(ist)-eta_SV(ikl,ikv,isl)) &!
10588 ! #GF& /(dzAvSV(isl)*LSdzsv(ikl,ikv) ) &!
10589 ! #GF& + rhoWat *Khydav !
10590 
10591 ! OUTPUT/Verification: Gravitational Front
10592 ! #vg write(6,6001) isl,drr_SV(ikl,ikv)*3.6e3,Wg_MAX *3.6e3
10593 ! #vg6001 format(i3,' vRain ,Wg_MAX ',2e12.3,' mm/hr')
10594 
10595 ! #GF WgFlow = min(Wg_MAX,drr_SV(ikl,ikv)) ! Infiltration Rate
10596 ! #GF WExces = max(zer0 ,drr_SV(ikl,ikv)-WgFlow) ! Water Excess => RunOff
10597 
10598 ! OUTPUT/Verification: Gravitational Front
10599 ! #vg write(6,6002) WgFlow *3.6e3,WExces *3.6e3
10600 ! #vg6002 format(3x,' WgFlow,WExces ',2e12.3,' mm/hr')
10601 
10602 ! #GF SoRnOF(ikl,ikv) = SoRnOF(ikl,ikv)+WExces !
10603 ! #GF drr_SV(ikl,ikv) = WgFlow !
10604 
10605 ! OUTPUT/Verification: Gravitational Front
10606 ! #vg write(6,6003) SoRnOF(ikl,ikv)*3.6e3,drr_SV(ikl,ikv)*3.6e3
10607 ! #vg6003 format(3x,' SoRnOF,drr_SV ',2e12.3,' mm/hr')
10608 
10609 ! #GF SatRat =(etadSV(ist)-eta_SV(ikl,ikv,isl)) &! Saturation Rate
10610 ! #GF& *rhoWat *dzAvSV(isl) &!
10611 ! #GF& *LSdzsv(ikl,ikv)/dt__SV !
10612 ! #GF SatRat = min(SatRat,drr_SV(ikl,ikv)) !
10613 ! #GF drr_SV(ikl,ikv) = drr_SV(ikl,ikv)-SatRat ! Water Flux for Below
10614 
10615 ! OUTPUT/Verification: Gravitational Front
10616 ! #vg write(6,6004) SatRat *3.6e3,drr_SV(ikl,ikv)*3.6e3
10617 ! #vg6004 format(3x,' SatRat,drr_SV ',2e12.3,' mm/hr')
10618 ! #vg write(6,6005) eta_SV(ikl,ikv,isl)*1.e3
10619 
10620 ! #GF eta_SV(ikl,ikv,isl) = eta_SV(ikl,ikv,isl)&! Saturation
10621 ! #GF& +SatRat*dt__SV &!
10622 ! #GF& /(rhoWat*dzAvSV(isl) &!
10623 ! #GF& *LSdzsv(ikl,ikv)) !
10624 
10625 ! OUTPUT/Verification: Gravitational Front
10626 ! #vg write(6,6005) eta_SV(ikl,ikv,isl)*1.e3
10627 ! #vg6005 format(3x,' eta_SV, ',e12.3,' g/kg')
10628 ! #GF END DO
10629 ! #GF END DO
10630 ! #GF END DO
10631 ! #GF DO ikl=1,kcolp
10632 ! #GF DO ikv=1,mwp
10633 ! #GF SoRnOF(ikl,ikv) = SoRnOF(ikl,ikv)&! RunOFF Intensity
10634 ! #GF& + drr_SV(ikl,ikv) ! [kg/m2/s]
10635 ! Inclure la possibilite de creer une mare sur un bedrock impermeable
10636 ! #GF drr_SV(ikl,ikv) = 0.
10637 ! #GF END DO
10638 ! #GF END DO
10639 
10640 
10641 ! Temperature Correction due to a changed Soil Energy Content
10642 ! ===========================================================
10643 
10644 ! REMARQUE: Mettre en oeuvre le couplage humidite-energie
10645 ! ^^^^^^^^
10646 
10647 
10648 ! Full Resolution of the Richard's Equation
10649 ! =========================================
10650 
10651 ! METHOD: Water content evolution results from water fluxes
10652 ! ^^^^^^ at the layer boundaries
10653 ! Conductivity is approximated by a piecewise linear profile.
10654 ! Semi-Implicit Crank-Nicholson scheme is used.
10655 ! (Bruen, 1997, Sensitivity of hydrological processes
10656 ! at the land-atmosphere interface.
10657 ! Proc. Royal Irish Academy, IGBP symposium
10658 ! on global change and the Irish Environment.
10659 ! Publ.: Maynooth)
10660 
10661 ! - - - - - - - - isl+1/2 - - ^
10662 ! |
10663 ! eta_SV(isl) --------------- isl ----- +--dz_dSV(isl) ^
10664 ! | |
10665 ! Dhydtz(isl) etaMid - - - - - - - - isl-1/2 - - v dzmiSV(isl)--+
10666 ! |
10667 ! eta_SV(isl-1) --------------- isl-1 ----- v
10668 
10669 ! Transfert Coefficients
10670 ! ----------------------------
10671 
10672  DO isl=-nsoil+1,0
10673  DO ikl=1,kcolp
10674  DO ikv=1,mwp
10675  ist = isotsv(ikl,ikv) ! Soil Type
10676  ist__s = min(ist, 1) ! 1 => Soil
10677  ist__w = 1 - ist__s ! 1 => Water Body
10678  etamid = (dz_dsv(isl) *eta_sv(ikl,ikv,isl-1) &! eta at layers
10679  & +dz_dsv(isl-1)*eta_sv(ikl,ikv,isl) ) &! interface
10680  & /(2.0* dzmisv(isl)) ! LSdzsv implicit !
10681 ! #GA etaMid = sqrt(dz_dSV(isl) *eta_SV(ikl,ikv,isl-1) &! Idem, geometric
10682 ! #GA& *dz_dSV(isl-1)*eta_SV(ikl,ikv,isl) ) &! average
10683 ! #GA& /(2.0* dzmiSV(isl)) ! (Vauclin&al.1979)
10684  dhydif = s1__sv(ist) &! Hydraul.Diffusi.
10685  & *(etamid **( bchdsv(ist)+2.)) ! DR97, Eqn.(3.36)
10686  dhydtz(ikl,ikv,isl) = dhydif*dt__sv &!
10687  & /(dzmisv(isl) &!
10688  & *lsdzsv(ikl,ikv)) !
10689  dhydtz(ikl,ikv,isl) = dhydtz(ikl,ikv,isl) * ist__s &! Soil
10690  & +0.5*dzmisv(isl)*lsdzsv(ikl,ikv) * ist__w ! Water bodies
10691 
10692  END DO
10693  END DO
10694  END DO
10695  isl=-nsoil
10696  DO ikl=1,kcolp
10697  DO ikv=1,mwp
10698  dhydtz(ikl,ikv,isl) = 0.0 !
10699  END DO
10700  END DO
10701 
10702 
10703 ! Tridiagonal Elimination: Set Up
10704 ! -------------------------------
10705 
10706 ! Soil/Snow Interior
10707 ! ^^^^^^^^^^^^^^^^^^
10708  DO isl=-nsoil,-nsoil+1
10709  DO ikl=1,kcolp
10710  DO ikv=1,mwp
10711  etaaux(ikl,ikv,isl) = eta_sv(ikl,ikv,isl)
10712  END DO
10713  END DO
10714  END DO
10715 
10716  DO isl=-nsoil+1,-1
10717  DO ikl=1,kcolp
10718  DO ikv=1,mwp
10719  ist = isotsv(ikl,ikv)
10720  ikm =nkhy*int(eta_sv(ikl,ikv,isl-1) / etadsv(ist))
10721  ik0 =nkhy*int(eta_sv(ikl,ikv,isl) / etadsv(ist))
10722  ikp =nkhy*int(eta_sv(ikl,ikv,isl+1) / etadsv(ist))
10723  elem_a = dhydtz(ikl,ikv,isl) &
10724  & - akdtsv(ist,ikm)* dziisv(isl) *lsdzsv(ikl,ikv)
10725  elem_b = - (dhydtz(ikl,ikv,isl) &
10726  & +dhydtz(ikl,ikv,isl+1) &
10727  & -akdtsv(ist,ik0)*(dziisv(isl+1) &
10728  & -dzi_sv(isl) )*lsdzsv(ikl,ikv))
10729  elem_c = dhydtz(ikl,ikv,isl+1) &
10730  & + akdtsv(ist,ikp)* dzi_sv(isl+1)*lsdzsv(ikl,ikv)
10731  diag_a(ikl,ikv,isl) = dz_8sv(isl) *lsdzsv(ikl,ikv) &
10732  & -implic * elem_a
10733  diag_b(ikl,ikv,isl) = dz34sv(isl) *lsdzsv(ikl,ikv) &
10734  & -implic * elem_b
10735  diag_c(ikl,ikv,isl) = dz_8sv(isl) *lsdzsv(ikl,ikv) &
10736  & -implic * elem_c
10737 
10738  term_d(ikl,ikv,isl) = (dz_8sv(isl) *lsdzsv(ikl,ikv) &
10739  & +explic *elem_a )*eta_sv(ikl,ikv,isl-1)&
10740  & + (dz34sv(isl) *lsdzsv(ikl,ikv) &
10741  & +explic *elem_b )*eta_sv(ikl,ikv,isl) &
10742  & + (dz_8sv(isl) *lsdzsv(ikl,ikv) &
10743  & +explic *elem_c )*eta_sv(ikl,ikv,isl+1)&
10744  & + (bkdtsv(ist,ikp)* dzi_sv(isl+1) &
10745  & +bkdtsv(ist,ik0)*(dziisv(isl+1) &
10746  & -dzi_sv(isl) ) &
10747  & -bkdtsv(ist,ikm)* dziisv(isl) ) &
10748  & * lsdzsv(ikl,ikv) &
10749  & - dt__sv * rootsv(ikl,ikv,isl)/rhowat
10750  END DO
10751  END DO
10752  END DO
10753 
10754  isl=-nsoil
10755  DO ikl=1,kcolp
10756  DO ikv=1,mwp
10757  ist = isotsv(ikl,ikv)
10758  freedr = iwafsv(ikl,ikv) * min(ist,1)
10759 ! FreeDr = FreeD0 * min(ist,1) ! Free Drainage
10760  ik0 =nkhy*int(eta_sv(ikl,ikv,isl ) / etadsv(ist))
10761  ikp =nkhy*int(eta_sv(ikl,ikv,isl+1) / etadsv(ist))
10762  elem_a = 0.
10763  elem_b = - (dhydtz(ikl,ikv,isl+1) &
10764  & -akdtsv(ist,ik0)*(dziisv(isl+1)*lsdzsv(ikl,ikv)&
10765  & -freedr ))
10766  elem_c = dhydtz(ikl,ikv,isl+1) &
10767  & + akdtsv(ist,ikp)* dzi_sv(isl+1)*lsdzsv(ikl,ikv)
10768  diag_a(ikl,ikv,isl) = 0.
10769  diag_b(ikl,ikv,isl) = dz78sv(isl) *lsdzsv(ikl,ikv) &
10770  & -implic *elem_b
10771  diag_c(ikl,ikv,isl) = dz_8sv(isl) *lsdzsv(ikl,ikv) &
10772  & -implic *elem_c
10773 
10774  term_d(ikl,ikv,isl) = (dz78sv(isl) *lsdzsv(ikl,ikv) &
10775  & +explic *elem_b )*eta_sv(ikl,ikv,isl) &
10776  & + (dz_8sv(isl) *lsdzsv(ikl,ikv) &
10777  & +explic *elem_c )*eta_sv(ikl,ikv,isl+1)&
10778  & + (bkdtsv(ist,ikp)* dzi_sv(isl+1)*lsdzsv(ikl,ikv)&
10779  & +bkdtsv(ist,ik0)*(dziisv(isl+1)*lsdzsv(ikl,ikv)&
10780  & -freedr ))&
10781  & - dt__sv * rootsv(ikl,ikv,isl)/rhowat
10782  END DO
10783  END DO
10784 
10785  isl=0
10786  DO ikl=1,kcolp
10787  DO ikv=1,mwp
10788  ist = isotsv(ikl,ikv)
10789  ikm =nkhy*int(eta_sv(ikl,ikv,isl-1) / etadsv(ist))
10790  ik0 =nkhy*int(eta_sv(ikl,ikv,isl) / etadsv(ist))
10791  elem_a = dhydtz(ikl,ikv,isl) &
10792  & - akdtsv(ist,ikm)* dziisv(isl)*lsdzsv(ikl,ikv)
10793  elem_b = - (dhydtz(ikl,ikv,isl) &
10794  & +akdtsv(ist,ik0)* dzi_sv(isl)*lsdzsv(ikl,ikv))
10795  elem_c = 0.
10796  diag_a(ikl,ikv,isl) = dz_8sv(isl) *lsdzsv(ikl,ikv) &
10797  & - implic *elem_a
10798  diag_b(ikl,ikv,isl) = dz78sv(isl) *lsdzsv(ikl,ikv) &
10799  & - implic *elem_b
10800  diag_c(ikl,ikv,isl) = 0.
10801 
10802  term_d(ikl,ikv,isl) = (dz_8sv(isl) *lsdzsv(ikl,ikv) &
10803  & +explic *elem_a )*eta_sv(ikl,ikv,isl-1)&
10804  & + (dz78sv(isl) *lsdzsv(ikl,ikv) &
10805  & +explic *elem_b )*eta_sv(ikl,ikv,isl) &
10806  & - (bkdtsv(ist,ik0)* dzi_sv(isl) &
10807  & +bkdtsv(ist,ikm)* dziisv(isl))*lsdzsv(ikl,ikv) &
10808  & + dt__sv *(hls_sv(ikl,ikv) * (1-min(1,isnosv(ikl,ikv)))&
10809  & / lx_h2o(ikl,ikv) &
10810  & +drr_sv(ikl,ikv) &
10811  & -rootsv(ikl,ikv,isl) )/rhowat
10812  END DO
10813  END DO
10814 
10815 
10816 ! Tridiagonal Elimination
10817 ! =======================
10818 
10819 ! Forward Sweep
10820 ! ^^^^^^^^^^^^^^
10821  DO ikl= 1,kcolp
10822  DO ikv=1,mwp
10823  aux__p(ikl,ikv,-nsoil) = diag_b(ikl,ikv,-nsoil)
10824  aux__q(ikl,ikv,-nsoil) =-diag_c(ikl,ikv,-nsoil)/aux__p(ikl,ikv,-nsoil)
10825  END DO
10826  END DO
10827 
10828  DO isl=-nsoil+1,0
10829  DO ikl= 1,kcolp
10830  DO ikv=1,mwp
10831  aux__p(ikl,ikv,isl) = diag_a(ikl,ikv,isl) *aux__q(ikl,ikv,isl-1) &
10832  & +diag_b(ikl,ikv,isl)
10833  aux__q(ikl,ikv,isl) =-diag_c(ikl,ikv,isl) /aux__p(ikl,ikv,isl)
10834  END DO
10835  END DO
10836  END DO
10837 
10838  DO ikl= 1,kcolp
10839  DO ikv=1,mwp
10840  eta_sv(ikl,ikv,-nsoil) = term_d(ikl,ikv,-nsoil)/aux__p(ikl,ikv,-nsoil)
10841  END DO
10842  END DO
10843 
10844  DO isl=-nsoil+1,0
10845  DO ikl= 1,kcolp
10846  DO ikv=1,mwp
10847  eta_sv(ikl,ikv,isl) =(term_d(ikl,ikv,isl) &
10848  & -diag_a(ikl,ikv,isl) *eta_sv(ikl,ikv,isl-1)) &
10849  & /aux__p(ikl,ikv,isl)
10850  END DO
10851  END DO
10852  END DO
10853 
10854 ! Backward Sweep
10855 ! ^^^^^^^^^^^^^^
10856  DO isl=-1,-nsoil,-1
10857  DO ikl= 1,kcolp
10858  DO ikv=1,mwp
10859  eta_sv(ikl,ikv,isl) = aux__q(ikl,ikv,isl) *eta_sv(ikl,ikv,isl+1) &
10860  & +eta_sv(ikl,ikv,isl)
10861  END DO
10862  END DO
10863  END DO
10864 
10865 
10866 ! Horton RunOFF Intensity
10867 ! =======================
10868 
10869  DO isl=0,-nsoil,-1
10870  DO ikl=1,kcolp
10871  DO ikv=1,mwp
10872  ist = isotsv(ikl,ikv) ! Soil Type
10873  satrat = (eta_sv(ikl,ikv,isl)-etadsv(ist)) &! OverSaturation Rate
10874  & *rhowat *dzavsv(isl) &!
10875  & *lsdzsv(ikl,ikv) &!
10876  & /dt__sv !
10877  sornof(ikl,ikv) = sornof(ikl,ikv) &!
10878  & + max(zer0,satrat) !
10879  eta_sv(ikl,ikv,isl) = max(eps6 &!
10880  & ,eta_sv(ikl,ikv,isl)) !
10881  eta_sv(ikl,ikv,isl) = min(eta_sv(ikl,ikv,isl) &!
10882  & ,etadsv(ist) ) !
10883  END DO
10884  END DO
10885  END DO
10886 
10887 ! OUTPUT/Verification: Soil Vertic.Discret.
10888 ! #kw write(6,6010)
10889 ! #kw6010 format(/,1x)
10890  DO isl= 0,-nsoil,-1
10891  DO ikl= 1,kcolp
10892  DO ikv=1,mwp
10893  ist = isotsv(ikl,ikv)
10894  ikp = nkhy*int(eta_sv(ikl,ikv,isl) /etadsv(ist))
10895  khydsv(ikl,ikv,isl) =(akdtsv(ist,ikp) *eta_sv(ikl,ikv,isl)&
10896  & +bkdtsv(ist,ikp)) *2.0/dt__sv
10897 ! OUTPUT/Verification: Soil Vertic.Discret.
10898 ! #kw write(6,6011) ikl,ikv,isl,eta_SV(ikl,ikv,isl)*1.e3, &
10899 ! #kw& ikp, aKdtSV(ist,ikp),bKdtSV(ist,ikp), &
10900 ! #kw& Khydsv(ikl,ikv,isl)
10901 ! #kw6011 format(2i3,f8.1,i3,3e12.3)
10902 
10903  END DO
10904  END DO
10905  END DO
10906 
10907 
10908 ! Additional RunOFF Intensity
10909 ! ===========================
10910 
10911  DO ikl=1,kcolp
10912  DO ikv=1,mwp
10913  ist = isotsv(ikl,ikv)
10914  ik0 = nkhy*int(etaaux(ikl,ikv,-nsoil ) /etadsv(ist))
10915  freedr = iwafsv(ikl,ikv) * min(ist,1)
10916 ! FreeDr = FreeD0 * min(ist,1) ! Free Drainage
10917  sornof(ikl,ikv) = sornof(ikl,ikv) &
10918  & + (akdtsv(ist,ik0)*(etaaux(ikl,ikv,-nsoil)*explic &
10919  & +eta_sv(ikl,ikv,-nsoil)*implic)&
10920  & + bkdtsv(ist,ik0) ) &
10921  & * freedr *rhowat /dt__sv
10922 
10923 ! Full Run OFF: Update
10924 ! ~~~~~~~~~~~~~~~~~~~~
10925  rnofsv(ikl,ikv) = rnofsv(ikl,ikv) + sornof(ikl,ikv)
10926  END DO
10927  END DO
10928 
10929 
10930 ! Temperature Correction due to a changed Soil Energy Content
10931 ! ===========================================================
10932 
10933 ! REMARQUE: Mettre en oeuvre le couplage humidite-energie
10934 ! ^^^^^^^^
10935 
10936 
10937 ! Bumps/Asperites Treatment
10938 ! =========================
10939 
10940 ! Average over Bump Depth (z0soil)
10941 ! --------------------------------
10942 
10943 ! #TB z_Bump = 0.
10944 ! #TB DO ikl=1,kcolp
10945 ! #TB DO ikv=1,mwp
10946 ! #TB etBump(ikl,ikv) = 0.
10947 ! #TB END DO
10948 ! #TB END DO
10949 
10950 ! #TB DO isl=0,-nsoil,-1
10951 ! #TB z0Bump = z_Bump
10952 ! #TB z_Bump = z_Bump + dzAvSV(isl)
10953 ! #TB IF (z_Bump.lt.z0soil) THEN
10954 ! #TB DO ikl=1,kcolp
10955 ! #TB DO ikv=1,mwp
10956 ! #TB etBump(ikl,ikv) = etBump(ikl,ikv) + dzAvSV(isl) *eta_SV(ikl,ikv,isl)
10957 ! #TB END DO
10958 ! #TB END DO
10959 ! #TB END IF
10960 ! #TB IF (z_Bump.gt.z0soil.AND.z0Bump.lt.z0soil) THEN
10961 ! #TB DO ikl=1,kcolp
10962 ! #TB DO ikv=1,mwp
10963 ! #TB etBump(ikl,ikv) = etBump(ikl,ikv) + (z0soil-z0Bump)*eta_SV(ikl,ikv,isl)
10964 ! #TB etBump(ikl,ikv) = etBump(ikl,ikv) / z0soil
10965 ! #TB END DO
10966 ! #TB END DO
10967 ! #TB END IF
10968 ! #TB END DO
10969 
10970 
10971 ! Correction
10972 ! ----------
10973 
10974 ! #TB z_Bump = 0.
10975 ! #TB DO isl=0,-nsoil,-1
10976 ! #TB z0Bump = z_Bump
10977 ! #TB z_Bump = z_Bump +dzAvSV(isl)
10978 ! #TB IF (z_Bump.lt.z0soil) THEN
10979 ! #TB DO ikl=1,kcolp
10980 ! #TB DO ikv=1,mwp
10981 ! #TB eta_SV(ikl,ikv,isl) = etBump(ikl,ikv)
10982 ! #TB END DO
10983 ! #TB END DO
10984 ! #TB END IF
10985 ! #TB IF (z_Bump.gt.z0soil.AND.z0Bump.lt.z0soil) THEN
10986 ! #TB dzBump = z_Bump - z0soil
10987 ! #TB DO ikl=1,kcolp
10988 ! #TB DO ikv=1,mwp
10989 ! #TB eta_SV(ikl,ikv,isl) =(etBump(ikl,ikv) *(dzAvSV(isl)-dzBump) &
10990 ! #TB& + eta_SV(ikl,ikv,isl)* dzBump) &
10991 ! #TB& / dzAvSV(isl)
10992 ! #TB END DO
10993 ! #TB END DO
10994 ! #TB END IF
10995 ! #TB END DO
10996 
10997 
10998 ! Positive Definite
10999 ! =================
11000 
11001 ! #TB DO isl= 0,-nsoil,-1
11002 ! #TB DO ikl= 1,kcolp
11003 ! #TB DO ikv=1,mwp
11004 ! #TB eta_SV(ikl,ikv,isl) = max(eps6,eta_SV(ikl,ikv,isl))
11005 ! #TB END DO
11006 ! #TB END DO
11007 ! #TB END DO
11008 
11009 
11010 ! OUTPUT/Verification: H2O Conservation: Water Budget (OUT)
11011 ! #m0 DO ikl=1,kcolp
11012 ! #m0 DO ikv=1,mwp
11013 ! #m0 Wats_d(ikl,ikv) = Wats_d(ikl,ikv) &!
11014 ! #m0& + drr_SV(ikl,ikv) *0.00 &! Precipitation is
11015 ! \______________ already included
11016 ! #m0& + HLs_sv(ikl,ikv) &!
11017 ! #m0& *(1-min(isnoSV(ikl,ikv),1)) /Lx_H2O(ikl,ikv) &! Evaporation
11018 ! #m0& - SoRnOF(ikl,ikv) ! Soil RunOFF Contrib.
11019 ! #m0 Wats_1(ikl,ikv) = 0. !
11020 
11021 ! OUTPUT/Verification: H2O Conservation
11022 ! #mw Evapor(ikl,ikv) = HLs_sv(ikl,ikv) *dt__SV &!
11023 ! #mw& *(1-min(isnoSV(ikl,ikv),1)) /Lx_H2O(ikl,ikv) !
11024 
11025 ! #m0 END DO
11026 ! #m0 END DO
11027 
11028 ! #m0 DO isl= -nsoil,0
11029 ! #m0 DO ikl=1,kcolp
11030 ! #m0 DO ikv=1,mwp
11031 ! #m0 Wats_d(ikl,ikv) = Wats_d(ikl,ikv) &!
11032 ! #m0& - Rootsv(ikl,ikv,isl) ! Root Extract.
11033 ! #m0 END DO
11034 ! #m0 END DO
11035 ! #m0 END DO
11036 ! #m0 DO ikl=1,kcolp
11037 ! #m0 DO ikv=1,mwp
11038 ! #m0 Wats_d(ikl,ikv) = Wats_d(ikl,ikv) *dt__SV!
11039 ! #m0 END DO
11040 ! #m0 END DO
11041 
11042 ! #m0 isl= -nsoil
11043 ! #m0 DO ikl=1,kcolp
11044 ! #m0 DO ikv=1,mwp
11045 ! #m0 Wats_1(ikl,ikv) = Wats_1(ikl,ikv) &
11046 ! #m0& + rhoWat *( eta_SV(ikl,ikv,isl) *dz78SV(isl) &
11047 ! #m0& + eta_SV(ikl,ikv,isl+1) *dz_8SV(isl) ) *LSdzsv(ikl,ikv)
11048 ! #m0 END DO
11049 ! #m0 END DO
11050 
11051 ! #m0 DO isl= -nsoil+1,-1
11052 ! #m0 DO ikl=1,kcolp
11053 ! #m0 DO ikv=1,mwp
11054 ! #m0 Wats_1(ikl,ikv) = Wats_1(ikl,ikv) &
11055 ! #m0& + rhoWat *( eta_SV(ikl,ikv,isl) *dz34SV(isl) &
11056 ! #m0& +(eta_SV(ikl,ikv,isl-1) &
11057 ! #m0& +eta_SV(ikl,ikv,isl+1))*dz_8SV(isl) ) *LSdzsv(ikl,ikv)
11058 ! #m0 END DO
11059 ! #m0 END DO
11060 ! #m0 END DO
11061 
11062 ! #m0 isl= 0
11063 ! #m0 DO ikl=1,kcolp
11064 ! #m0 DO ikv=1,mwp
11065 ! #m0 Wats_1(ikl,ikv) = Wats_1(ikl,ikv) &
11066 ! #m0& + rhoWat *( eta_SV(ikl,ikv,isl) *dz78SV(isl) &
11067 ! #m0& + eta_SV(ikl,ikv,isl-1) *dz_8SV(isl) ) *LSdzsv(ikl,ikv)
11068 ! #m0 END DO
11069 ! #m0 END DO
11070 
11071 
11072 ! OUTPUT/Verification: H2O Conservation
11073 ! #mw IF (.NOT.mwopen) THEN
11074 ! #mw mwopen = .true.
11075 ! #mw open(unit=42,status='unknown',file='SISVAT_qSo.vw')
11076 ! #mw rewind 42
11077 ! #mw write(42,42)
11078 ! #mw42 format('SubRoutine SISVAT_qSo: Local Water Budget', &
11079 ! #mw& /,'=========================================')
11080 ! #mw END IF
11081 ! #mw timewr=timewr + dt__SV
11082 ! #mw hourwr=3600.0
11083 ! #mw IF (mod(timewr,hourwr).lt.eps6) &
11084 ! #mw& write(42,420)timewr/hourwr
11085 ! #mw420 format(11('-'),'----------+--------------+-', &
11086 ! #mw& 3('-'),'----------+--------------+-', &
11087 ! #mw& '----------------+----------------+', &
11088 ! #mw& /,f8.2,3x,'Wats_0(1) | Wats_d(1) | ', &
11089 ! #mw& 3x,'Wats_1(1) | W_0+W_d-W_1 | ', &
11090 ! #mw& ' Soil Run OFF | Soil Evapor. |', &
11091 ! #mw& /,11('-'),'----------+--------------+-', &
11092 ! #mw& 3('-'),'----------+--------------+-', &
11093 ! #mw& '----------------+----------------+')
11094 ! #mw write(42,421) Wats_0(1),Wats_d(1) &
11095 ! #mw& ,Wats_1(1) &
11096 ! #mw& ,Wats_0(1)+Wats_d(1)-Wats_1(1) &
11097 ! #mw& ,SoRnOF(1),Evapor(1)
11098 ! #mw421 format(8x,f12.6,' + ',f12.6,' - ',f12.6,' = ',f12.6,' | ',f12.6,&
11099 ! #mw& ' ',f15.6)
11100 
11101 
11102 
11103 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
11104 ! !
11105 ! DE-ALLOCATION !
11106 ! ============= !
11107 
11108  IF (flagdalloc) THEN !
11109 
11110 ! OUTPUT/Verification: H2O Conservation
11111 ! #m0 deallocate ( Wats_0 ) ! Soil Water, before forcing
11112 ! #m0 deallocate ( Wats_1 ) ! Soil Water, after forcing
11113 ! #m0 deallocate ( Wats_d ) ! Soil Water forcing
11114 
11115 ! #TB deallocate ( etBump ) ! Bumps Layer Averaged Humidity
11116 
11117  deallocate ( sornof ) ! Soil Run OFF
11118  deallocate ( dhydtz ) ! Dhydif * dt / dz [m]
11119  deallocate ( diag_a ) ! A Diagonal
11120  deallocate ( diag_b ) ! B Diagonal
11121  deallocate ( diag_c ) ! C Diagonal
11122  deallocate ( term_d ) ! Independant Term
11123  deallocate ( aux__p ) ! P Auxiliary Variable
11124  deallocate ( aux__q ) ! Q Auxiliary Variable
11125  deallocate ( etaaux ) ! Soil Water Content [m3/m3]
11126 
11127  END IF !
11128 ! !
11129 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
11130 
11131 
11132  return
11133  end subroutine sisvat_qso
11134 
11135 
11136 
11137  subroutine sisvat_weq( labWEq ,istart)
11139 !--------------------------------------------------------------------------+
11140 ! MAR SISVAT_wEq Wed 26-Jun-2013 MAR |
11141 ! SubRoutine SISVAT_wEq computes the Snow/Ice Water Equivalent |
11142 ! |
11143 ! version 3.p.4.1 created by H. Gallee, Tue 5-Feb-2013 |
11144 ! Last Modification by H. Gallee, Wed 26-Jun-2013 |
11145 ! |
11146 ! |
11147 ! Preprocessing Option: SISVAT IO (not always a standard preprocess.) |
11148 ! ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ |
11149 ! FILE | CONTENT |
11150 ! ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
11151 ! # SISVAT_wEq.ve | #ve: OUTPUT/Verification: Snow/Ice Water Eqv. |
11152 ! | unit 45, SubRoutine SISVAT_wEq **ONLY** |
11153 !--------------------------------------------------------------------------+
11154 
11155 
11156 ! General Variables
11157 ! =================
11158 
11159  use mod_real
11160  use mod_sisvat_ctr
11161  use mod_sisvat_grd
11162  use mod_sisvat_kkl
11163  use mod_sisvat_weq
11164 
11165 
11166  IMPLICIT NONE
11167 
11168 
11169 ! Global Variables
11170 ! ================
11171 
11172  character(len=6) :: labWEq
11173  integer :: istart
11174 
11175 
11176 ! Local Variables
11177 ! ================
11178 
11179  integer :: ikl,ikv ,isn
11180  real(kind=real8) :: SnoWEQ,IceWEQ
11181 
11182 
11183 ! Switch Initialization
11184 ! =====================
11185 
11186  IF (.NOT.logweq) THEN
11187  logweq = .true.
11188  open(unit=45,status='unknown',file='SISVAT_wEq.ve')
11189  rewind 45
11190  END IF
11191 
11192 
11193 ! Snow Water Equivalent
11194 ! =====================
11195 
11196  ikl = 1
11197  ikv = 1
11198  IF (isnosv(ikl,ikv).gt.iicesv(ikl,ikv)) THEN
11199 
11200  snoweq = 0.
11201  DO isn = iicesv(ikl,ikv)+1 ,isnosv(ikl,ikv)
11202  snoweq = snoweq + ro__sv(ikl,ikv,isn) * dzsnsv(ikl,ikv,isn)
11203  END DO
11204 
11205  END IF
11206 
11207 
11208 ! Ice Water Equivalent
11209 ! =====================
11210 
11211  IF (iicesv(ikl,ikv).gt.0) THEN
11212 
11213  iceweq = 0.
11214  DO isn = 1 , iicesv(ikl,ikv)
11215  iceweq = iceweq + ro__sv(ikl,ikv,isn) * dzsnsv(ikl,ikv,isn)
11216  END DO
11217 
11218  END IF
11219 
11220 
11221 ! OUTPUT
11222 ! ======
11223 
11224  IF (istart.eq.1) THEN
11225  write(45,45)dahost,i___sv(lwrisv(1,1)),j___sv(lwrisv(1,1)) &
11226  & ,n___sv(lwrisv(1,1))
11227  45 format(a18,10('-'),'Pt.',3i4,60('-'))
11228  END IF
11229 
11230  write(45,450) labweq,iceweq,iicesv(ikl,ikv),snoweq &
11231  & ,iceweq+snoweq,isnosv(ikl,ikv) &
11232  & ,drr_sv(ikl,ikv)*dt__sv &
11233  & ,dsn_sv(ikl,ikv)*dt__sv &
11234  & ,bufssv(ikl,ikv)
11235  450 format(a6,3x,' I+S =',f11.4,'(',i2,') +',f11.4,' =', &
11236  & f11.4,'(',i2,')', &
11237  & ' drr =', f7.4, &
11238  & ' dsn =', f7.4, &
11239  & ' Buf =', f7.4)
11240 
11241 
11242  return
11243  end subroutine sisvat_weq
real(kind=real8), dimension(:,:), allocatable, save hs___d
real(kind=real8), dimension(:,:), allocatable, save brossv
integer, parameter nsot
real(kind=real8), dimension(:,:), allocatable, save sol_sv
real(kind=real8), dimension(:,:), allocatable, save g2agr1
real(kind=real8), dimension(:,:), allocatable, save vv__sv
real(kind=real8), dimension(:,:), allocatable, save rrmxsv
real(kind=real8), dimension(0:nvgt), save stodsv
real(kind=real8), dimension(:,:,:), allocatable, save dtc_sv
real(kind=real8), save cpdair
real(kind=real8), save ea_min
real(kind=real8), dimension(:,:), allocatable, save alb0sv
real(kind=real8), dimension(:,:), allocatable, save hl___d
integer, save day_tu
real(kind=real8), save dr_2sn
real(kind=real8), dimension(:,:), allocatable, save qat_sv
real(kind=real8), dimension(:,:), allocatable, save tsurf0
real(kind=real8), dimension(:,:,:), allocatable, save diag_a
integer, dimension(:,:), allocatable, save nosnow
real(kind=real8), dimension(0:nvgt), save trnird
real(kind=real8), dimension(:,:), allocatable, save etanew
real(kind=real8), dimension(:,:), allocatable, save devtdt
real(kind=real8), save difsol
real(kind=real8), dimension(:,:), allocatable, save t_agr2
real(kind=real8), save rcd10n
real(kind=real8), dimension(:), allocatable, save dzi_sv
real(kind=real8), dimension(:,:), allocatable, save fsisva
real(kind=real8), dimension(:,:,:), allocatable, save zdepos
real(kind=real8), dimension(:,:), allocatable, save c1__sv
real(kind=real8), dimension(:,:), allocatable, save z0e_sv
real(kind=real8), save sncamx
real(kind=real8), dimension(:,:,:), allocatable, save zza_sv
real(kind=real8), dimension(:,:), allocatable, save z0h_sv
real(kind=real8), dimension(:,:,:), allocatable, save term_d
real(kind=real8), dimension(:,:,:), allocatable, save zzsnsv
real(kind=real8), dimension(:,:), allocatable, save bufssv
real(kind=real8), dimension(:,:), allocatable, save dzmelt
real(kind=real8), dimension(:,:), allocatable, save agrege
real(kind=real8), dimension(:,:), allocatable, save qsnosv
integer, dimension(:,:), allocatable, save nlay_s
integer, dimension(:), allocatable, save ii__ap
real(kind=real8), dimension(:,:), allocatable, save g2agr2
real(kind=real8), dimension(:,:,:), allocatable, save mu__dz
real(kind=real8), save un_1
real(kind=real8), dimension(:,:), allocatable, save irs__d
real(kind=real8), dimension(:,:), allocatable, save irsokl
integer, dimension(:,:), allocatable, save i_thin
real(kind=real8), dimension(:,:), allocatable, save sososv
real(kind=real8), dimension(:,:), allocatable, save sext_1
real(kind=real8), dimension(:,:), allocatable, save irupsv
real(kind=real8), dimension(0:nsot), save psidsv
real(kind=real8), dimension(-nsol:0), save dz_dsv
real(kind=real8), dimension(:,:,:), allocatable, save diag_a
real(kind=real8), dimension(:,:), allocatable, save rrcasv
real(kind=real8), dimension(:,:), allocatable, save t_agr2
subroutine sisvat_weq(labWEq, istart)
Definition: sisvat.F:10088
real(kind=real8), save half
real(kind=real8), dimension(:,:), allocatable, save us__sv
real(kind=real8), dimension(:,:), allocatable, save agagr1
real(kind=real8), dimension(:,:), allocatable, save hss_sv
real(kind=real8), dimension(:,:), allocatable, save dsdtsv
real(kind=real8), dimension(:,:), allocatable, save tsrfsv
real(kind=real8), dimension(:,:), allocatable, save dfh_sv
real(kind=real8), dimension(:,:), allocatable, save rcdmsv
real(kind=real8), dimension(0:nvgt), save trvisd
real(kind=real8), dimension(:,:), allocatable, save dsn_sv
subroutine sisvat_ini
Definition: SISVAT.f90:2
real(kind=real8), dimension(:,:), allocatable, save mu_sno
real(kind=real8), dimension(:,:), allocatable, save swf_sv
real(kind=real8), dimension(:,:), allocatable, save g1agr1
real(kind=real8), dimension(:,:), allocatable, save xdrift
integer, save nsnow
real(kind=real8), save reviss
real(kind=real8), dimension(0:nvgt), save pr_dsv
real(kind=real8), save pscdsv
real(kind=real8), save df_3sn
real(kind=real8), save stxdsv
real(kind=real8), dimension(:,:), allocatable, save sigcsv
real(kind=real8), dimension(:,:), allocatable, save dbs_sv
real(kind=real8), dimension(:,:), allocatable, save rht_sv
real(kind=real8), dimension(:,:,:), allocatable, save ro_dry
real(kind=real8), dimension(:,:), allocatable, save dpdpsi
real(kind=real8), dimension(:,:), allocatable, save fac_dt
real(kind=real8), dimension(:,:), allocatable, save tbr_sv
real(kind=real8), save lhfh2o
real(kind=real8), dimension(:,:), allocatable, save dta_ts
real(kind=real8), dimension(:,:), allocatable, save etagr2
real(kind=real8), dimension(:,:), allocatable, save ram_sv
real(kind=real8), dimension(:,:), allocatable, save coalb1
real(kind=real8), save p0_kap
real(kind=real8), dimension(:,:), allocatable, save dbsaux
integer, dimension(:), allocatable, save islmsv
real(kind=real8), dimension(:,:,:), allocatable, save khydsv
real(kind=real8), dimension(:,:,:), allocatable, save sex_sv
real(kind=real8), dimension(:,:), allocatable, save z0hnsv
real(kind=real8), dimension(:), allocatable, save dzavsv
real(kind=real8), dimension(:,:), allocatable, save albssv
real(kind=real8), dimension(:,:), allocatable, save dhsdtv
real(kind=real8), dimension(:,:), allocatable, save dirsdt
real(kind=real8), save dt__sv
real(kind=real8), dimension(0:nsot), save s2__sv
real(kind=real8), dimension(:,:,:), allocatable, save ro__sv
integer, dimension(:,:), allocatable, save isagr1
real(kind=real8), dimension(:,:), allocatable, save rusnsv
real(kind=real8), dimension(:,:), allocatable, save plantw
real(kind=real8), dimension(:,:), allocatable, save hsv_sv
subroutine vgoptp
Definition: sisvat.F:4618
real(kind=real8), dimension(:,:), allocatable, save roagr2
real(kind=real8), save so2dsv
real(kind=real8), dimension(:,:), allocatable, save c2__sv
real(kind=real8), save g1_dsv
real(kind=real8), save pinmbr
real(kind=real8), dimension(:,:,:), allocatable, save roa_sv
real(kind=real8), dimension(:,:), allocatable, save z0mnsv
real(kind=real8), dimension(:,:), allocatable, save psiarg
real(kind=real8), dimension(:,:), allocatable, save zwecsv
real(kind=real8), dimension(:,:), allocatable, save sosokl
real(kind=real8), dimension(:,:), allocatable, save rhu_av
real(kind=real8), dimension(:,:), allocatable, save tveg_0
real(kind=real8), dimension(:,:), allocatable, save lx_h2o
integer, dimension(:,:), allocatable, save lwrisv
real(kind=real8), dimension(:,:,:), allocatable, save saltsi
real(kind=real8), save eps_21
real(kind=real8), save explic
real(kind=real8), dimension(:,:), allocatable, save crilai
integer, parameter nkhy
real(kind=real8), dimension(:,:), allocatable, save etabak
integer, dimension(5), save istdsv
real(kind=real8), dimension(0:nvgt), save trnirl
real(kind=real8), dimension(0:nsot), save rocssv
real(kind=real8), dimension(:,:), allocatable, save snmass
real(kind=real8), save vonkrm
real(kind=real8), dimension(:,:), allocatable, save f_hshl
real(kind=real8), dimension(:,:,:), allocatable, save aux__p
subroutine sisvat_qvg
Definition: sisvat.F:7427
real(kind=real8), save facsbs
real(kind=real8), dimension(:,:,:), allocatable, save aux__q
real(kind=real8), dimension(:,:), allocatable, save albisv
real(kind=real8), dimension(:,:), allocatable, save dridts
real(kind=real8), dimension(:,:), allocatable, save dzagr2
real(kind=real8), save adsdsv
real(kind=real8), dimension(0:nvgt), save trvisl
integer, save ivg
real(kind=real8), dimension(:,:), allocatable, save usthsv
real(kind=real8), dimension(:,:,:), allocatable, save tsissv
real(kind=real8), dimension(:,:), allocatable, save tau_sv
real(kind=real8), save sheabs
real(kind=real8), dimension(:,:), allocatable, save glf0sv
real(kind=real8), dimension(:,:), allocatable, save psi
subroutine sisvat_tvg
Definition: sisvat.F:5959
real(kind=real8), dimension(:,:), allocatable, save fallok
subroutine sisvat_sic
Definition: sisvat.F:2610
real(kind=real8), dimension(:,:), allocatable, save dhldtv
real(kind=real8), dimension(:,:,:), allocatable, save dhydtz
real(kind=real8), dimension(0:nvgt), save revisd
real(kind=real8), dimension(:,:), allocatable, save devpdt
real(kind=real8), dimension(:,:), allocatable, save ird_sv
real(kind=real8), dimension(:,:), allocatable, save eteubk
real(kind=real8), dimension(:,:,:), allocatable, save aux__p
real(kind=real8), save dr_1sn
integer, save kcolp
real(kind=real8), dimension(:,:), allocatable, save hlv_sv
real(kind=real8), dimension(:,:), allocatable, save dzthin
real(kind=real8), save dfcdsv
real(kind=real8), dimension(:,:), allocatable, save hls_kl
real(kind=real8), dimension(:,:), allocatable, save sws_sv
real(kind=real8), dimension(:,:), allocatable, save richar
real(kind=real8), save dfc3sn
real(kind=real8), dimension(:,:), allocatable, save alb_sv
real(kind=real8), dimension(:,:), allocatable, save weagre
integer, save nsoil
integer, dimension(:,:), allocatable, save isnosv
real(kind=real8), dimension(:,:), allocatable, save coalb3
integer, dimension(:,:), allocatable, save isagr1
real(kind=real8), save ai3dsv
integer, save nwunit
real(kind=real8), save trnirs
real(kind=real8), dimension(:,:), allocatable, save emi_sv
real(kind=real8), save so1dsv
subroutine sisvat(SnoMod, BloMod, jjtime)
Definition: sisvat.F:2
real(kind=real8), dimension(:,:), allocatable, save agagr1
real(kind=real8), dimension(0:nsot), save s1__sv
real(kind=real8), dimension(:,:), allocatable, save gamasv
subroutine sisvatesbl
Definition: sisvat.F:5113
real(kind=real8), save renirs
integer, save nwr_sv
real(kind=real8), dimension(:,:), allocatable, save za__sv
real(kind=real8), save a_stab
real(kind=real8), dimension(:), allocatable, save dziisv
real(kind=real8), dimension(:,:), allocatable, save vvasbl
real(kind=real8), save lro__i
real(kind=real8), save lhvh2o
real(kind=real8), dimension(:,:), allocatable, save cds
real(kind=real8), dimension(:,:,:), allocatable, save tsisva
integer, dimension(:), allocatable, save i___sv
subroutine sisvat_zcr
Definition: sisvat.F:3601
real(kind=real8), dimension(:,:), allocatable, save g2agr1
real(kind=real8), dimension(:), allocatable, save dz_8sv
real(kind=real8), dimension(:,:), allocatable, save etagr1
real(kind=real8), dimension(:,:,:), allocatable, save agsnsv
real(kind=real8), save rhowat
real(kind=real8), dimension(0:nvgt), save f__ust
real(kind=real8), save grav_f
real(kind=real8), dimension(:,:), allocatable, save eexcsv
real(kind=real8), save crodzw
integer, dimension(:), allocatable, save isnpsv
real(kind=real8), dimension(:,:,:), allocatable, save etaaux
real(kind=real8), save totsol
real(kind=real8), dimension(:,:), allocatable, save g1agr1
real(kind=real8), dimension(:,:,:), allocatable, save g1snsv
real(kind=real8), dimension(:), allocatable, save dz34sv
real(kind=real8), dimension(0:nsot, 0:nkhy), save akdtsv
real(kind=real8), dimension(:,:), allocatable, save roagr2
real(kind=real8), dimension(:,:), allocatable, save eso_sv
real(kind=real8), save smndsv
real(kind=real8), dimension(:,:,:), allocatable, save pktasv
real(kind=real8), dimension(0:nsot), save claypc
real(kind=real8), dimension(:,:), allocatable, save hlsokl
real(kind=real8), dimension(:,:), allocatable, save rah_sv
real(kind=real8), dimension(:,:), allocatable, save shusol
real(kind=real8), save ru_dsv
real(kind=real8), dimension(:,:), allocatable, save fh__sv
real(kind=real8), dimension(:,:), allocatable, save alb3sv
real(kind=real8), dimension(:,:,:), allocatable, save eta_sv
real(kind=real8), dimension(:,:), allocatable, save uts_sv
subroutine sisvat_bdu
Definition: sisvat.F:2503
real(kind=real8), dimension(:,:), allocatable, save slorsv
real(kind=real8), dimension(:,:), allocatable, save agrege
integer, dimension(:,:), allocatable, save ivgtsv
real(kind=real8), save rhoice
integer, save mon_tu
real(kind=real8), save cristr
integer, dimension(:,:), allocatable, save ispisv
real(kind=real8), dimension(:,:), allocatable, save alb1sv
real(kind=real8), dimension(:,:), allocatable, save sqrcm0
real(kind=real8), dimension(:,:), allocatable, save lsdzsv
real(kind=real8), dimension(:,:,:), allocatable, save diag_c
integer, dimension(:,:), allocatable, save isn1
real(kind=real8), dimension(:,:), allocatable, save sornof
real(kind=real8), dimension(:), allocatable, save dtz_sv
real(kind=real8), dimension(:,:), allocatable, save hssokl
integer, dimension(:,:), allocatable, save iwafsv
real(kind=real8), save dr_3sn
real(kind=real8), dimension(:,:,:), allocatable, save diag_b
subroutine sisvat_bsn(BloMod)
Definition: sisvat.F:1947
real(kind=real8), dimension(:,:), allocatable, save zdrift
integer, save ivg
real(kind=real8), dimension(0:nsot), save etaust
real(kind=real8), dimension(:,:), allocatable, save a0__sv
real(kind=real8), dimension(:,:), allocatable, save cdh
real(kind=real8), dimension(0:nvgt), save rbtdsv
real(kind=real8), dimension(:,:,:), allocatable, save g2snsv
!$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
character(len=1) seplab
real(kind=real8), dimension(:,:), allocatable, save evg_sv
real(kind=real8), dimension(:,:), allocatable, save evt_sv
real(kind=real8), dimension(:,:), allocatable, save g2agr2
real(kind=real8), dimension(:,:,:), allocatable, save dzsnsv
real(kind=real8), dimension(:,:,:), allocatable, save snopsv
real(kind=real8), dimension(:,:), allocatable, save laiesv
integer, dimension(:,:), allocatable, save lindsv
real(kind=real8), dimension(:,:), allocatable, save eexdum
real(kind=real8), dimension(:,:,:), allocatable, save diag_c
!$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(kind=real8), dimension(:,:), allocatable, save z_snsv
real(kind=real8), dimension(0:nvgt), save z0mdsv
real(kind=real8), save df_2sn
real(kind=real8), dimension(:,:), allocatable, save bg1ssv
real(kind=real8), save cn_dsv
real(kind=real8), dimension(:,:), allocatable, save irdwsv
real(kind=real8), save ahstab
real(kind=real8), save dscdsv
real(kind=real8), dimension(:,:), allocatable, save agagr2
real(kind=real8), dimension(:,:), allocatable, save sigmsv
subroutine sisvat_zsn
Definition: sisvat.F:2758
real(kind=real8), dimension(:,:), allocatable, save vv10sv
real(kind=real8), dimension(:,:), allocatable, save z0m_sv
real(kind=real8), save trviss
real(kind=real8), dimension(:,:), allocatable, save dza__1
real(kind=real8), dimension(:,:), allocatable, save drr_sv
real(kind=real8), dimension(:,:), allocatable, save t_agr1
subroutine snoptp(jjtime)
Definition: sisvat.F:4035
real(kind=real8), dimension(:,:), allocatable, save esnbsv
real(kind=real8), dimension(:,:), allocatable, save faceta
real(kind=real8), save dfc2sn
real(kind=real8), dimension(:,:), allocatable, save bg2ssv
real(kind=real8), dimension(:,:), allocatable, save qsatsg
real(kind=real8), dimension(:,:), allocatable, save alb2sv
real(kind=real8), dimension(:,:), allocatable, save shumsv
real(kind=real8), save rcwdsv
real(kind=real8), dimension(:,:), allocatable, save dzagr1
subroutine sisvat_qso
Definition: sisvat.F:9334
integer, dimension(:,:), allocatable, save lsmask
real(kind=real8), save implic
integer, save minutu
real(kind=real8), dimension(:,:), allocatable, save tvegsv
real(kind=real8), dimension(0:nvgt), save renirl
real(kind=real8), dimension(:,:), allocatable, save dqs_dt
real(kind=real8), save ddcdsv
real(kind=real8), save facubs
integer, save mzp
real(kind=real8), dimension(:,:), allocatable, save lmo_sv
real(kind=real8), dimension(:,:), allocatable, save dirdtv
integer, dimension(:,:), allocatable, save iicesv
real(kind=real8), dimension(:,:), allocatable, save cld_sv
subroutine sisvat_sbl
Definition: sisvat.F:5715
real(kind=real8), dimension(:,:,:), allocatable, save rootsv
real(kind=real8), dimension(:,:), allocatable, save g1agr2
real(kind=real8), dimension(:,:), allocatable, save evp_sv
real(kind=real8), dimension(0:nsot), save ks_dsv
real(kind=real8), dimension(:,:), allocatable, save rcdhsv
real(kind=real8), save zz_dsv
real(kind=real8), save rocdsv
real(kind=real8), save dfc1sn
integer, dimension(:,:), allocatable, save isagr2
character(len=18) dahost
integer, save it_run
real(kind=real8), dimension(:,:), allocatable, save coalb2
real(kind=real8), save lhsh2o
integer, dimension(:,:), allocatable, save isagr2
real(kind=real8), save cdidsv
integer, save jwr_sv
real(kind=real8), dimension(:,:), allocatable, save rnofsv
real(kind=real8), save vk_dsv
real(kind=real8), dimension(:,:), allocatable, save etagr2
real(kind=real8), dimension(:,:), allocatable, save glf_sv
real(kind=real8), dimension(:,:), allocatable, save roagr1
real(kind=real8), dimension(:,:), allocatable, save exnrsv
real(kind=real8), save laidsv
real(kind=real8), save so3dsv
real(kind=real8), save ai2dsv
real(kind=real8), dimension(:,:), allocatable, save rf__sv
real(kind=real8), save eps6
real(kind=real8), dimension(:,:,:), allocatable, save aux__q
real(kind=real8), dimension(:,:), allocatable, save sext_2
real(kind=real8), save tf_sno
integer, dimension(:,:), allocatable, save mobile
integer, dimension(:), allocatable, save n___sv
real(kind=real8), dimension(:,:), allocatable, save sqrch0
real(kind=real8), dimension(:,:), allocatable, save dzagr2
real(kind=real8), dimension(:,:), allocatable, save sext_3
real(kind=real8), dimension(0:nvgt), save revisl
real(kind=real8), dimension(:,:), allocatable, save dldtsv
real(kind=real8), save zer0
integer, save yeartu
subroutine colprt_sbl
Definition: sisvat.F:4982
real(kind=real8), dimension(:,:), allocatable, save tat_sv
real(kind=real8), dimension(0:nsot, 0:nkhy), save bkdtsv
real(kind=real8), dimension(:,:,:), allocatable, save etasno
real(kind=real8), save stefbo
subroutine sisvat_gsn
Definition: sisvat.F:8379
real(kind=real8), dimension(:,:), allocatable, save coszsv
real(kind=real8), dimension(:,:), allocatable, save z0ensv
real(kind=real8), save ws0dsv
integer, dimension(:), allocatable, save islpsv
real(kind=real8), dimension(0:nsot), save etadsv
real(kind=real8), dimension(:), allocatable, save dzmisv
real(kind=real8), save hc_wat
real(kind=real8), dimension(:,:), allocatable, save agagr2
real(kind=real8), dimension(:,:), allocatable, save sncasv
real(kind=real8), dimension(:,:,:), allocatable, save sdrift
real(kind=real8), dimension(:,:), allocatable, save g1agr2
real(kind=real8), dimension(:,:), allocatable, save f___hl
real(kind=real8), dimension(:,:), allocatable, save iru_sv
integer, dimension(:,:), allocatable, save icindx
real(kind=real8), dimension(:,:,:), allocatable, save term_d
real(kind=real8), save dirsol
character(len=6) fillab
real(kind=real8), dimension(:,:), allocatable, save dsnbsv
integer, dimension(:,:,:), allocatable, save istosv
real(kind=real8), save ocndsv
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(kind=real8), dimension(:,:), allocatable, save irv_sv
real(kind=real8), dimension(0:nvgt), save renird
real(kind=real8), dimension(0:nsot), save bchdsv
integer, save mwp
real(kind=real8), dimension(:,:), allocatable, save bdzssv
integer, save hourtu
real(kind=real8), dimension(:,:), allocatable, save cdm
real(kind=real8), dimension(0:nsot), save ustdmn
character(len=3), dimension(0:12) labmon
real(kind=real8), dimension(:), allocatable, save dz78sv
real(kind=real8), dimension(:,:), allocatable, save tdepos
integer, save iwr_sv
real(kind=real8), save df_1sn
real(kind=real8), dimension(:,:), allocatable, save weagre
subroutine sisvat_qsn(
Definition: sisvat.F:7661
real(kind=real8), dimension(:,:), allocatable, save hlv_kl
real(kind=real8), dimension(:,:,:), allocatable, save psi_sv
real(kind=real8), save por_bs
!$Header!integer nvarmx s s unit
Definition: gradsdef.h:20
real(kind=real8), save ai1dsv
integer, dimension(:), allocatable, save j___sv
integer, dimension(:,:), allocatable, save nlaysv
real(kind=real8), dimension(:,:), allocatable, save dzagr1
real(kind=real8), save bsnoro
real(kind=real8), save epsn
real(kind=real8), dimension(:,:), allocatable, save rhusol
real(kind=real8), dimension(:,:), allocatable, save lmomom
real(kind=real8), dimension(:,:), allocatable, save uss_sv
real(kind=real8), dimension(:,:), allocatable, save uqs_sv
real(kind=real8), dimension(0:nsot), save etamsv
real(kind=real8), dimension(:,:), allocatable, save zwe_sv
real(kind=real8), dimension(:,:), allocatable, save etagr1
real(kind=real8), dimension(:,:), allocatable, save hls_sv
real(kind=real8), dimension(:,:), allocatable, save socasv
real(kind=real8), dimension(:,:), allocatable, save lai0sv
real(kind=real8), dimension(:,:), allocatable, save psiv_0
real(kind=real8), dimension(:,:), allocatable, save psivsv
real(kind=real8), dimension(:,:), allocatable, save t_agr1
integer, dimension(:), allocatable, save jj__ap
real(kind=real8), dimension(:,:,:), allocatable, save diag_b
real(kind=real8), dimension(:,:), allocatable, save roagr1
integer, save kcolv
subroutine sisvat_tso
Definition: sisvat.F:6288
real(kind=real8), save ea_max
integer, dimension(:,:), allocatable, save isotsv
real(kind=real8), dimension(:,:), allocatable, save rcds
real(kind=real8), dimension(:,:), allocatable, save k___sv
real(kind=real8), dimension(:,:,:), allocatable, save kz__sv
real(kind=real8), dimension(0:nvgt), save dh_dsv
real(kind=real8), dimension(:,:), allocatable, save lai_sv
real(kind=real8), dimension(:,:), allocatable, save irs_sv