source: LMDZ6/trunk/libf/phylmd/inlandsis/sisvat_bsn.F @ 3792

Last change on this file since 3792 was 3792, checked in by evignon, 3 years ago

Ajout de INLANDSIS, nouvelle interface entre LMDZ et la neige de SISVAT
Etienne, 04/01/2021

File size: 4.0 KB
Line 
1 
2 
3      subroutine SISVAT_BSn
4 
5C +------------------------------------------------------------------------+
6C | MAR          SISVAT_BSn                               04-apr-2020  MAR |
7C |   SubRoutine SISVAT_BSn treats Snow Erosion                            |
8C |   (not deposition anymore since 2-jun 2018)                            |
9C |                                                                        |
10C |   SISVAT_bsn computes the snow erosion mass according to both the      |
11C |   theoretical maximum erosion amount computed in SISVATesbl and the    |
12C |   availability of snow (currently in the uppermost snow layer only)    |
13C |                                                                        |
14C |   Preprocessing  Option: SISVAT IO (not always a standard preprocess.) |
15C |   ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^                                     |
16C |   FILE                 |      CONTENT                                  |
17C |   ~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
18C | # stdout               | #sb: OUTPUT of Snow Erosion                   |
19C |                        |      unit  6, SubRoutine  SISVAT_BSn **ONLY** |
20C +------------------------------------------------------------------------+
21 
22 
23 
24 
25C +--General Variables
26C +  =================
27
28      use VARphy
29      use VAR_SV
30      use VARdSV
31      use VARxSV
32      use VARySV
33 
34 
35       IMPLICIT NONE
36
37C +--Local Variables
38C +  ===============
39 
40 
41      integer  ikl   ,isn
42      real     h_mmWE                        ! Eroded Snow Layer Min Thickness
43      real     dbsaux(knonv)                 ! Drift Amount   (Dummy Variable)
44      real     dzweqo,dzweqn,bsno_x          ! Conversion variables for erosion
45      real     dz_new,rho_new
46      real     snofOK                        ! Threshd Snow Fall
47      real     Fac                           ! Correction factor for erosion
48      real     densif                        ! Densification rate if erosion
49 
50C +--DATA
51C +  ====
52 
53      data     h_mmWE  / 0.01e00  /          ! Eroded Snow Layer Min Thickness
54 
55C +--EROSION
56C +  =======
57 
58      !DO isn = nsno,2,-1
59      DO ikl = 1,knonv
60 
61        isn         = isnoSV(ikl)
62        dzweqo      = dzsnSV(ikl,isn) *ro__SV(ikl,isn)      ! [kg/m2, mm w.e.]
63 
64        bsno_x      = min(0.,dbs_SV(ikl))
65c       Fac         = min(1.,max(1-(ro__SV(ikl,isn)/700.),0.)**2)
66c       Fac         = min(1.,max(1-(qsnoSV(ikl)*1000/30.),0.))
67c       bsno_x      = bsno_x*Fac
68 
69        dzweqn      = dzweqo + bsno_x
70        dzweqn      = max(dzweqn,h_mmWE)
71        dzweqn      = min(dzweqn,dzweqo)
72cXF
73        dbs_SV(ikl) = dbs_SV(ikl)    +(dzweqo -dzweqn)
74        dbs_Er(ikl) = dbs_Er(ikl)    +(dzweqo -dzweqn)
75        dzsnSV(ikl,isn) =              dzweqn
76     .                       /max(epsi,ro__SV(ikl,isn))
77 
78        ! Densification of the uppermost snow layer if erosion:
79        if((dzweqo-dzweqn)>0                    .and.
80     .     dzsnSV(ikl,isn)>0                    .and.
81     .     ro__SV(ikl,max(1,isnoSV(ikl)))<roBdSV) then
82 
83        !characteristic time scale for drifting snow compaction set to 24h
84        !linear densification rate [kg/m3/s] over 24h
85        densif         = (450. - frsno) / (3600*24)
86 
87        !Attenuation of compaction rate from 450 to 500 kg/m3
88        Fac         = 1-((ro__SV(ikl,max(1,isnoSV(ikl)))
89     .                        -roBdSV)/(500.-roBdSV))
90        Fac         = max(0.,min(1.,Fac))
91 
92        if (ro__SV(ikl,max(1,isnoSV(ikl)))>roBdSV) then
93          densif=densif*Fac
94        endif
95 
96        rho_new        = min(roBdSV,ro__SV(ikl,isn)+densif*dt__SV)
97        dz_new         = dzsnSV(ikl,isn)*ro__SV(ikl,isn)/rho_new
98        ro__SV(ikl,isn)=rho_new
99        dzsnSV(ikl,isn)=dz_new
100        endif
101 
102        if(dzsnSV(ikl,isn)>0 .and.dzsnSV(ikl,isn)<0.0001)then
103        dbs_SV(ikl) = dbs_SV(ikl)+ dzsnSV(ikl,isn)*ro__SV(ikl,isn)
104        dbs_Er(ikl) = dbs_Er(ikl)+ dzsnSV(ikl,isn)*ro__SV(ikl,isn)
105        dzsnSV(ikl,isn) = 0
106        ro__SV(ikl,isn) = 0
107        isnoSV(ikl)     = max(0,isnoSV(ikl) - 1)
108        endif
109 
110      END DO
111      !END DO
112 
113      return
114      END
Note: See TracBrowser for help on using the repository browser.