1 | !> \file deformation_mod-0.3.f90 |
---|
2 | !! C'est ce module qui doit etre selectionne pour faire le calcul de la |
---|
3 | !! deformation de la glace en utilisant une loi de deformation de corps |
---|
4 | !! visqueux non newtonnien. |
---|
5 | !< |
---|
6 | |
---|
7 | !> \namespace deformation_mod |
---|
8 | !!C'est ce module qui doit etre selectionne pour faire le calcul de la |
---|
9 | !!deformation de la glace en utilisant une loi de deformation de corps |
---|
10 | !!visqueux non newtonnien. |
---|
11 | !! \author CatRitz |
---|
12 | !! \date decmebre 1999 |
---|
13 | !!@note Ce module contient la routine d'initialisation des variables utilisees |
---|
14 | !! pour la deformation. |
---|
15 | !! @note Used modules |
---|
16 | !! @note - use deform_declar |
---|
17 | !< |
---|
18 | |
---|
19 | |
---|
20 | module DEFORMATION_MOD |
---|
21 | |
---|
22 | use DEFORM_DECLAR |
---|
23 | |
---|
24 | |
---|
25 | CONTAINS |
---|
26 | |
---|
27 | |
---|
28 | !> SUBROUTINE: init_deformation |
---|
29 | !!Routine qui initialise les variables et alloue les tableaux qui |
---|
30 | !!@note interviennent dans la loi de deformation |
---|
31 | !!@note Used modules |
---|
32 | !!@note use module3D_phy |
---|
33 | !> |
---|
34 | SUBROUTINE INIT_DEFORMATION |
---|
35 | |
---|
36 | USE module3D_phy |
---|
37 | |
---|
38 | implicit none |
---|
39 | |
---|
40 | REAL,dimension(NZ) :: EDECAL ! tableau de travail (decalage de E de 1 indice) |
---|
41 | |
---|
42 | ! tous les tableaux qui dependent de la loi de deformation sont allocatable. |
---|
43 | ! L'allocation se fait juste apres avoir determiner le nombre d'exposants |
---|
44 | ! differents utilises. |
---|
45 | |
---|
46 | |
---|
47 | !************ allocation des tableaux ********************* |
---|
48 | |
---|
49 | if (.not.allocated(BTT)) THEN |
---|
50 | allocate(BTT(NX,NY,NZ,n1poly:n2poly),stat=err) |
---|
51 | if (err/=0) then |
---|
52 | print *,"Erreur a l'allocation du tableau BTT",err |
---|
53 | stop 4 |
---|
54 | end if |
---|
55 | end if |
---|
56 | |
---|
57 | if (.not.allocated(SA)) THEN |
---|
58 | allocate(SA(NX,NY,NZ,n1poly:n2poly),stat=err) |
---|
59 | if (err/=0) then |
---|
60 | print *,"Erreur a l'allocation du tableau SA",err |
---|
61 | stop 4 |
---|
62 | end if |
---|
63 | end if |
---|
64 | |
---|
65 | if (.not.allocated(SA_mx)) THEN |
---|
66 | allocate(SA_mx(NX,NY,NZ,n1poly:n2poly),stat=err) |
---|
67 | if (err/=0) then |
---|
68 | print *,"Erreur a l'allocation du tableau SA_mx",err |
---|
69 | stop 4 |
---|
70 | end if |
---|
71 | end if |
---|
72 | |
---|
73 | if (.not.allocated(SA_my)) THEN |
---|
74 | allocate(SA_my(NX,NY,NZ,n1poly:n2poly),stat=err) |
---|
75 | if (err/=0) then |
---|
76 | print *,"Erreur a l'allocation du tableau SA_my",err |
---|
77 | stop 4 |
---|
78 | end if |
---|
79 | end if |
---|
80 | |
---|
81 | if (.not.allocated(S2A)) THEN |
---|
82 | allocate(S2A(NX,NY,NZ,n1poly:n2poly),stat=err) |
---|
83 | if (err/=0) then |
---|
84 | print *,"Erreur a l'allocation du tableau S2A",err |
---|
85 | stop 4 |
---|
86 | end if |
---|
87 | end if |
---|
88 | |
---|
89 | if (.not.allocated(S2A_mx)) THEN |
---|
90 | allocate(S2A_mx(NX,NY,NZ,n1poly:n2poly),stat=err) |
---|
91 | if (err/=0) then |
---|
92 | print *,"Erreur a l'allocation du tableau S2A_mx",err |
---|
93 | stop 4 |
---|
94 | end if |
---|
95 | end if |
---|
96 | |
---|
97 | if (.not.allocated(S2A_my)) THEN |
---|
98 | allocate(S2A_my(NX,NY,NZ,n1poly:n2poly),stat=err) |
---|
99 | if (err/=0) then |
---|
100 | print *,"Erreur a l'allocation du tableau S2A_my",err |
---|
101 | stop 4 |
---|
102 | end if |
---|
103 | end if |
---|
104 | |
---|
105 | |
---|
106 | if (.not.allocated(SF)) THEN |
---|
107 | allocate(SF(n1poly:n2poly),stat=err) |
---|
108 | if (err/=0) then |
---|
109 | print *,"Erreur a l'allocation du tableau SF",err |
---|
110 | stop 4 |
---|
111 | end if |
---|
112 | end if |
---|
113 | |
---|
114 | if (.not.allocated(Q1)) THEN |
---|
115 | allocate(Q1(n1poly:n2poly),stat=err) |
---|
116 | if (err/=0) then |
---|
117 | print *,"Erreur a l'allocation du tableau Q1",err |
---|
118 | stop 4 |
---|
119 | end if |
---|
120 | end if |
---|
121 | |
---|
122 | if (.not.allocated(Q2)) THEN |
---|
123 | allocate(Q2(n1poly:n2poly),stat=err) |
---|
124 | if (err/=0) then |
---|
125 | print *,"Erreur a l'allocation du tableau Q2",err |
---|
126 | stop 4 |
---|
127 | end if |
---|
128 | end if |
---|
129 | |
---|
130 | if (.not.allocated(BAT1)) THEN |
---|
131 | allocate(BAT1(n1poly:n2poly),stat=err) |
---|
132 | if (err/=0) then |
---|
133 | print *,"Erreur a l'allocation du tableau BAT1",err |
---|
134 | stop 4 |
---|
135 | end if |
---|
136 | end if |
---|
137 | |
---|
138 | if (.not.allocated(BAT2)) THEN |
---|
139 | allocate(BAT2(n1poly:n2poly),stat=err) |
---|
140 | if (err/=0) then |
---|
141 | print *,"Erreur a l'allocation du tableau BAT2",err |
---|
142 | stop 4 |
---|
143 | end if |
---|
144 | end if |
---|
145 | |
---|
146 | if (.not.allocated(glen)) THEN |
---|
147 | allocate(glen(n1poly:n2poly),stat=err) |
---|
148 | if (err/=0) then |
---|
149 | print *,"Erreur a l'allocation du tableau glen",err |
---|
150 | stop 4 |
---|
151 | end if |
---|
152 | end if |
---|
153 | |
---|
154 | if (.not.allocated(TTRANS)) THEN |
---|
155 | allocate(TTRANS(n1poly:n2poly),stat=err) |
---|
156 | if (err/=0) then |
---|
157 | print *,"Erreur a l'allocation du tableau TTRANS",err |
---|
158 | stop 4 |
---|
159 | end if |
---|
160 | end if |
---|
161 | if (.not.allocated(DDX)) THEN |
---|
162 | allocate(DDX(NX,NY,n1poly:n2poly),stat=err) |
---|
163 | if (err/=0) then |
---|
164 | print *,"Erreur a l'allocation du tableau DDX",err |
---|
165 | stop 4 |
---|
166 | end if |
---|
167 | end if |
---|
168 | |
---|
169 | if (.not.allocated(DDY)) THEN |
---|
170 | allocate(DDY(NX,NY,n1poly:n2poly),stat=err) |
---|
171 | if (err/=0) then |
---|
172 | print *,"Erreur a l'allocation du tableau DDY",err |
---|
173 | stop 4 |
---|
174 | end if |
---|
175 | end if |
---|
176 | |
---|
177 | !************* FIN DE L'ALLOCATION DES TABLEAUX ************* |
---|
178 | |
---|
179 | |
---|
180 | !************** COEFFICIENTS DES LOIS DE COMPORTEMENT ******** |
---|
181 | glen(1) = 3. ! LOI DE GLEN |
---|
182 | glen(2) = 1. ! LOI LINEAIRE |
---|
183 | |
---|
184 | !********* INITIALISATION DES LOIS DE DEFORMATION ************** |
---|
185 | |
---|
186 | ! ************** FLOW LAW COEFFICIENT LOI DE GLEN ************** |
---|
187 | ! softening factor for flow law |
---|
188 | if ((GEOPLACE.eq.'eismint').and.(ICOUPLE.eq.2)) then |
---|
189 | if (IMARGIN.eq.0) then |
---|
190 | SF(1)=3.52 ! coefficient multiplicateur |
---|
191 | else |
---|
192 | SF(1)=1.745 |
---|
193 | endif |
---|
194 | else if ((GEOPLACE(1:6).eq.'marine') & |
---|
195 | .and.(GEOPLACE.ne.'marine0')) then |
---|
196 | |
---|
197 | ! SF(1)=6. |
---|
198 | SF(1)=1. |
---|
199 | ! SF(1)=0.4 |
---|
200 | else |
---|
201 | SF(1)=3. |
---|
202 | endif |
---|
203 | ! arrhenius constants /Pa3/a, J/mol |
---|
204 | ! A0=1.E-16 initialise dans flowlawcoefbis |
---|
205 | |
---|
206 | if (icouple.eq.4) then |
---|
207 | ! idem these catritz |
---|
208 | SF(1)=3. |
---|
209 | ! SF(1)=1. |
---|
210 | ! SF(1)=0.4 |
---|
211 | ! BAT1(1)=0. |
---|
212 | BAT1(1)=0.166e-15 ! fluidite Newtonienne T < TTRANS(1) |
---|
213 | Q1(1)=78.2e+3 ! energie d'activation T < TTRANS(1) |
---|
214 | BAT2(1)=0.2e-15 ! fluidite Newtonienne T > TTRANS(1) |
---|
215 | Q2(1)=95.45e+3 ! energie d'activation T > TTRANS(1) |
---|
216 | ! temperature de transition entre les deux lois en deg Celsius |
---|
217 | TTRANS(1)=-6.5 |
---|
218 | else |
---|
219 | ! idem P. Huybrechts |
---|
220 | SF(1)=5. ! pour run Antarctique Grounded ou level 3a |
---|
221 | BAT1(1)=7.65e-17 |
---|
222 | Q1(1)=60.e+3 |
---|
223 | BAT2(1)=0.28642e-15 |
---|
224 | Q2(1)=139.e+3 |
---|
225 | ! temperature de transition entre les deux lois en deg Celsius |
---|
226 | TTRANS(1)=-10. |
---|
227 | endif |
---|
228 | |
---|
229 | |
---|
230 | !************* LINEAR FLOW LAW COEFFICIENT *************** |
---|
231 | |
---|
232 | ! temperature de transition entre les deux lois en deg Celsius |
---|
233 | TTRANS(2)=-10. |
---|
234 | ! SF(2)=0. |
---|
235 | SF(2)=1. |
---|
236 | ! SF(2)=3. |
---|
237 | ! SF(2)=6. ! coefficient multiplicateur |
---|
238 | |
---|
239 | ! Pour les temperatures inferieures a TTRPHI |
---|
240 | |
---|
241 | BAT1(2)=8.313e-8 ! fluidite Newtonienne |
---|
242 | Q1(2)=40.e+3 ! energie d'activation |
---|
243 | |
---|
244 | ! Pour les temperatures superieures a TTRPHI |
---|
245 | BAT2(2)=0. ! fluidite Newtonienne |
---|
246 | BAT2(2)=BAT1(2) ! attention rajouté pour l'ice shelf |
---|
247 | |
---|
248 | ! Q2(2)=SPHI*8.313e-8 |
---|
249 | Q2(2)=60.e+3 ! energie d'activation |
---|
250 | |
---|
251 | !********* gas constant (J/mol/K) ************ |
---|
252 | RGAS=8.314 |
---|
253 | |
---|
254 | |
---|
255 | !************* INITIALISATION DE DDX ET DDY ***************** |
---|
256 | DDX(:,:,:)=0. |
---|
257 | DDY(:,:,:)=0. |
---|
258 | |
---|
259 | |
---|
260 | write(num_rep_42,*) 'Loi de deformation n, sf, ttrans, bat1, Q1, bat2, Q2' |
---|
261 | do iglen=1,2 |
---|
262 | write(num_rep_42,fmt=123) int(glen(iglen)), sf(iglen), ttrans(iglen),bat1(iglen), & |
---|
263 | Q1(iglen), bat2(iglen), Q2(iglen) |
---|
264 | 123 format(i2,1x,f0.2,1x,f0.3,1x,4(es10.3,1x)) |
---|
265 | ! application des sf |
---|
266 | bat1(iglen)=bat1(iglen)*sf(iglen) |
---|
267 | bat2(iglen)=bat2(iglen)*sf(iglen) |
---|
268 | end do |
---|
269 | |
---|
270 | |
---|
271 | |
---|
272 | |
---|
273 | END SUBROUTINE INIT_DEFORMATION |
---|
274 | |
---|
275 | |
---|
276 | END MODULE DEFORMATION_MOD |
---|