1 | |
---|
2 | |
---|
3 | subroutine SISVAT_zAg & |
---|
4 | (isagra,isagrb,WEagra & |
---|
5 | ,dzagra,dzagrb,T_agra,T_agrb & |
---|
6 | ,roagra,roagrb,etagra,etagrb & |
---|
7 | ,G1agra,G1agrb,G2agra,G2agrb & |
---|
8 | ,agagra,agagrb,Agreg1 & |
---|
9 | ) |
---|
10 | |
---|
11 | ! +------------------------------------------------------------------------+ |
---|
12 | ! | MAR SURFACE Sat 30-Apr-2004 MAR | |
---|
13 | ! | SubRoutine SISVAT_zAg aggregates two contiguous snow layers | |
---|
14 | ! | | |
---|
15 | ! +------------------------------------------------------------------------+ |
---|
16 | ! | | |
---|
17 | ! | PARAMETERS: knonv: Total Number of columns = | |
---|
18 | ! | ^^^^^^^^^^ = Total Number of continental grid boxes | |
---|
19 | ! | X Number of Mosaic Cell per grid box | |
---|
20 | ! | | |
---|
21 | ! | INPUT: isagrb : 2nd Layer History | |
---|
22 | ! | ^^^^^ | |
---|
23 | ! | | |
---|
24 | ! | INPUT: dzagrb : 2nd Layer Thickness | |
---|
25 | ! | ^^^^^ T_agrb : 2nd Layer Temperature | |
---|
26 | ! | roagrb : 2nd Layer Density | |
---|
27 | ! | etagrb : 2nd Layer Water Content | |
---|
28 | ! | G1agrb : 2nd Layer Dendricity/Spher. | |
---|
29 | ! | G2agrb : 2nd Layer Sphericity/Size | |
---|
30 | ! | agagrb : 2nd Age | |
---|
31 | ! | Agreg1 : 1. when Agregation constrained | |
---|
32 | ! | | |
---|
33 | ! | INPUT / isagra : 1st Layer History | |
---|
34 | ! | OUTPUT: | |
---|
35 | ! | ^^^^^^ | |
---|
36 | ! | | |
---|
37 | ! | INPUT / dzagra : 1st Layer Thickness | |
---|
38 | ! | OUTPUT: T_agra : 1st Layer Temperature | |
---|
39 | ! | ^^^^^^ roagra : 1st Layer Density | |
---|
40 | ! | etagra : 1st Layer Water Content | |
---|
41 | ! | G1agra : 1st Layer Dendricity/Spher. | |
---|
42 | ! | G2agra : 1st Layer Sphericity/Size | |
---|
43 | ! | agagra : 1st Age | |
---|
44 | ! | | |
---|
45 | ! +------------------------------------------------------------------------+ |
---|
46 | |
---|
47 | |
---|
48 | |
---|
49 | |
---|
50 | ! +--Global Variables |
---|
51 | ! + ================ |
---|
52 | |
---|
53 | use VARphy |
---|
54 | use VAR_SV |
---|
55 | use VARdSV |
---|
56 | use VAR0SV |
---|
57 | use VARxSV |
---|
58 | |
---|
59 | IMPLICIT NONE |
---|
60 | |
---|
61 | |
---|
62 | ! +--INPUT |
---|
63 | ! + ----- |
---|
64 | |
---|
65 | integer :: isagrb(knonv) ! 2nd Layer History |
---|
66 | real :: dzagrb(knonv) ! 2nd Layer Thickness |
---|
67 | real :: T_agrb(knonv) ! 2nd Layer Temperature |
---|
68 | real :: roagrb(knonv) ! 2nd Layer Density |
---|
69 | real :: etagrb(knonv) ! 2nd Layer Water Content |
---|
70 | real :: G1agrb(knonv) ! 2nd Layer Dendricity/Spher. |
---|
71 | real :: G2agrb(knonv) ! 2nd Layer Sphericity/Size |
---|
72 | real :: agagrb(knonv) ! 2nd Layer Age |
---|
73 | |
---|
74 | |
---|
75 | ! +--INPUT/OUTPUT |
---|
76 | ! + ------------ |
---|
77 | |
---|
78 | integer :: isagra(knonv) ! 1st Layer History |
---|
79 | real :: WEagra(knonv) ! 1st Layer Height [mm w.e.] |
---|
80 | real :: Agreg1(knonv) ! 1. ===> Agregates |
---|
81 | real :: dzagra(knonv) ! 1st Layer Thickness |
---|
82 | real :: T_agra(knonv) ! 1st Layer Temperature |
---|
83 | real :: roagra(knonv) ! 1st Layer Density |
---|
84 | real :: etagra(knonv) ! 1st Layer Water Content |
---|
85 | real :: G1agra(knonv) ! 1st Layer Dendricity/Spher. |
---|
86 | real :: G2agra(knonv) ! 1st Layer Sphericity/Size |
---|
87 | real :: agagra(knonv) ! 1st Layer Age |
---|
88 | |
---|
89 | |
---|
90 | ! +--Internal Variables |
---|
91 | ! + ================== |
---|
92 | |
---|
93 | integer :: ikl |
---|
94 | integer :: nh ! Averaged Snow History |
---|
95 | integer :: nh__OK ! 1=>Conserve Snow History |
---|
96 | real :: rh ! |
---|
97 | real :: dz ! Thickness |
---|
98 | real :: dzro_1 ! Thickness X Density, Lay.1 |
---|
99 | real :: dzro_2 ! Thickness X Density, Lay.2 |
---|
100 | real :: dzro ! Thickness X Density, Aver. |
---|
101 | real :: ro ! Averaged Density |
---|
102 | real :: wn ! Averaged Water Content |
---|
103 | real :: tn ! Averaged Temperature |
---|
104 | real :: ag ! Averaged Snow Age |
---|
105 | real :: SameOK ! 1. => Same Type of Grains |
---|
106 | real :: G1same ! Averaged G1, same Grains |
---|
107 | real :: G2same ! Averaged G2, same Grains |
---|
108 | real :: typ__1 ! 1. => Lay1 Type: Dendritic |
---|
109 | real :: zroNEW ! dz X ro, if fresh Snow |
---|
110 | real :: G1_NEW ! G1, if fresh Snow |
---|
111 | real :: G2_NEW ! G2, if fresh Snow |
---|
112 | real :: zroOLD ! dz X ro, if old Snow |
---|
113 | real :: G1_OLD ! G1, if old Snow |
---|
114 | real :: G2_OLD ! G2, if old Snow |
---|
115 | real :: SizNEW ! Size, if fresh Snow |
---|
116 | real :: SphNEW ! Spheric.,if fresh Snow |
---|
117 | real :: SizOLD ! Size, if old Snow |
---|
118 | real :: SphOLD ! Spheric.,if old Snow |
---|
119 | real :: Siz_av ! Averaged Grain Size |
---|
120 | real :: Sph_av ! Averaged Grain Spher. |
---|
121 | real :: Den_av ! Averaged Grain Dendr. |
---|
122 | real :: DendOK ! 1. => Average is Dendr. |
---|
123 | real :: G1diff ! Averaged G1, diff. Grains |
---|
124 | real :: G2diff ! Averaged G2, diff. Grains |
---|
125 | real :: G1 ! Averaged G1 |
---|
126 | real :: G2 ! Averaged G2 |
---|
127 | |
---|
128 | |
---|
129 | |
---|
130 | ! +--Mean Properties |
---|
131 | ! + ================= |
---|
132 | |
---|
133 | ! +-- 1 Densite, Contenu en Eau, Temperature / |
---|
134 | ! + Density, Water Content, Temperature |
---|
135 | ! + ------------------------------------ |
---|
136 | |
---|
137 | DO ikl = 1,knonv |
---|
138 | dz = dzagra(ikl) + dzagrb(ikl) |
---|
139 | dzro_1 = roagra(ikl) * dzagra(ikl) |
---|
140 | dzro_2 = roagrb(ikl) * dzagrb(ikl) |
---|
141 | dzro = dzro_1 + dzro_2 |
---|
142 | ro = dzro & |
---|
143 | /max(epsi,dz) |
---|
144 | wn = (dzro_1*etagra(ikl) + dzro_2*etagrb(ikl)) & |
---|
145 | /max(epsi,dzro) |
---|
146 | tn = (dzro_1*T_agra(ikl) + dzro_2*T_agrb(ikl)) & |
---|
147 | /max(epsi,dzro) |
---|
148 | ag = (dzro_1*agagra(ikl) + dzro_2*agagrb(ikl)) & |
---|
149 | /max(epsi,dzro) |
---|
150 | |
---|
151 | rh = max(zero,sign(unun,zWEcSV(ikl) & |
---|
152 | -0.5*WEagra(ikl))) |
---|
153 | nh__OK = rh |
---|
154 | nh = max(isagra(ikl),isagrb(ikl)) |
---|
155 | ! #HB. * nh__OK |
---|
156 | ! #HB. + (1-nh__OK)* min(isagra(ikl),isagrb(ikl)) |
---|
157 | |
---|
158 | |
---|
159 | |
---|
160 | ! +-- 2 Nouveaux Types de Grains / new Grain Types |
---|
161 | ! + ------------------------------------------- |
---|
162 | |
---|
163 | ! +-- 2.1. Meme Type de Neige / same Grain Type |
---|
164 | ! + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
---|
165 | SameOK = max(zero, & |
---|
166 | sign(unun, G1agra(ikl) *G1agrb(ikl) - eps_21)) |
---|
167 | G1same = (dzro_1*G1agra(ikl) + dzro_2*G1agrb(ikl)) & |
---|
168 | /max(epsi,dzro) |
---|
169 | G2same = (dzro_1*G2agra(ikl) + dzro_2*G2agrb(ikl)) & |
---|
170 | /max(epsi,dzro) |
---|
171 | |
---|
172 | ! +-- 2.2. Types differents / differents Types |
---|
173 | ! + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
---|
174 | typ__1 = max(zero,sign(unun,epsi-G1agra(ikl))) ! =1.=> Dendritic |
---|
175 | zroNEW = typ__1 *dzro_1 & ! ro of Dendr.Lay. |
---|
176 | + (1.-typ__1) *dzro_2 ! |
---|
177 | G1_NEW = typ__1 *G1agra(ikl) & ! G1 of Dendr.Lay. |
---|
178 | + (1.-typ__1) *G1agrb(ikl) ! |
---|
179 | G2_NEW = typ__1 *G2agra(ikl) & ! G2 of Dendr.Lay. |
---|
180 | + (1.-typ__1) *G2agrb(ikl) ! |
---|
181 | zroOLD = (1.-typ__1) *dzro_1 & ! ro of Spher.Lay. |
---|
182 | + typ__1 *dzro_2 ! |
---|
183 | G1_OLD = (1.-typ__1) *G1agra(ikl) & ! G1 of Spher.Lay. |
---|
184 | + typ__1 *G1agrb(ikl) ! |
---|
185 | G2_OLD = (1.-typ__1) *G2agra(ikl) & ! G2 of Spher.Lay. |
---|
186 | + typ__1 *G2agrb(ikl) ! |
---|
187 | SizNEW = -G1_NEW *DDcdSV/G1_dSV & ! Size Dendr.Lay. |
---|
188 | +(1.+G1_NEW /G1_dSV) & ! |
---|
189 | *(G2_NEW *DScdSV/G1_dSV & ! |
---|
190 | +(1.-G2_NEW /G1_dSV)*DFcdSV) ! |
---|
191 | SphNEW = G2_NEW /G1_dSV ! Spher.Dendr.Lay. |
---|
192 | SizOLD = G2_OLD ! Size Spher.Lay. |
---|
193 | SphOLD = G1_OLD /G1_dSV ! Spher.Spher.Lay. |
---|
194 | Siz_av = (zroNEW*SizNEW+zroOLD*SizOLD) & ! Averaged Size |
---|
195 | /max(epsi,dzro) ! |
---|
196 | Sph_av = (zroNEW*SphNEW+zroOLD*SphOLD) & ! Averaged Sphericity |
---|
197 | /max(epsi,dzro) ! |
---|
198 | Den_av = (Siz_av -( Sph_av *DScdSV & ! |
---|
199 | +(1.-Sph_av)*DFcdSV)) & ! |
---|
200 | / (DDcdSV -( Sph_av *DScdSV & ! |
---|
201 | +(1.-Sph_av)*DFcdSV)) ! |
---|
202 | DendOK = max(zero, & ! |
---|
203 | sign(unun, Sph_av *DScdSV & ! Small Grains Contr. |
---|
204 | +(1.-Sph_av)*DFcdSV & ! Faceted Grains Contr. |
---|
205 | - Siz_av ))! |
---|
206 | ! +... REMARQUE: le type moyen (dendritique ou non) depend |
---|
207 | ! + ^^^^^^^^ de la comparaison avec le diametre optique |
---|
208 | ! + d'une neige recente de dendricite nulle |
---|
209 | ! +... REMARK: the mean type (dendritic or not) depends |
---|
210 | ! + ^^^^^^ on the comparaison with the optical diameter |
---|
211 | ! + of a recent snow having zero dendricity |
---|
212 | |
---|
213 | G1diff =( -DendOK *Den_av & |
---|
214 | +(1.-DendOK)*Sph_av) *G1_dSV |
---|
215 | G2diff = DendOK *Sph_av *G1_dSV & |
---|
216 | +(1.-DendOK)*Siz_av |
---|
217 | G1 = SameOK *G1same & |
---|
218 | +(1.-SameOK)*G1diff |
---|
219 | G2 = SameOK *G2same & |
---|
220 | +(1.-SameOK)*G2diff |
---|
221 | |
---|
222 | |
---|
223 | ! +--Assignation to new Properties |
---|
224 | ! + ============================= |
---|
225 | |
---|
226 | isagra(ikl) = Agreg1(ikl) *nh +(1.-Agreg1(ikl)) *isagra(ikl) |
---|
227 | dzagra(ikl) = Agreg1(ikl) *dz +(1.-Agreg1(ikl)) *dzagra(ikl) |
---|
228 | T_agra(ikl) = Agreg1(ikl) *tn +(1.-Agreg1(ikl)) *T_agra(ikl) |
---|
229 | roagra(ikl) = Agreg1(ikl) *ro +(1.-Agreg1(ikl)) *roagra(ikl) |
---|
230 | etagra(ikl) = Agreg1(ikl) *wn +(1.-Agreg1(ikl)) *etagra(ikl) |
---|
231 | G1agra(ikl) = Agreg1(ikl) *G1 +(1.-Agreg1(ikl)) *G1agra(ikl) |
---|
232 | G2agra(ikl) = Agreg1(ikl) *G2 +(1.-Agreg1(ikl)) *G2agra(ikl) |
---|
233 | agagra(ikl) = Agreg1(ikl) *ag +(1.-Agreg1(ikl)) *agagra(ikl) |
---|
234 | |
---|
235 | END DO |
---|
236 | |
---|
237 | return |
---|
238 | end subroutine sisvat_zag |
---|