1 | module dragging_jorge |
---|
2 | |
---|
3 | !jalv: module inspire par le dragging_hwat_contmaj mais simplifie |
---|
4 | ! Definie les zones de stream avec uniquement: |
---|
5 | ! * un critere sur la hauteur d'eau |
---|
6 | ! * presence des sediments |
---|
7 | |
---|
8 | |
---|
9 | use module3d_phy |
---|
10 | ! use sedim_declar |
---|
11 | |
---|
12 | implicit none |
---|
13 | logical,dimension(nx,ny) :: fleuvemx |
---|
14 | logical,dimension(nx,ny) :: fleuvemy |
---|
15 | logical,dimension(nx,ny) :: fleuve |
---|
16 | logical,dimension(nx,ny) :: cote |
---|
17 | |
---|
18 | real :: seuil_sedim ! seuil sur hwater pour avoir du glissement |
---|
19 | real :: valmax |
---|
20 | integer :: imax,jmax |
---|
21 | integer :: i_moins1,i_plus1,j_moins1,j_plus1 |
---|
22 | integer :: lmax=20 |
---|
23 | integer :: idep,jdep,iloc,jloc |
---|
24 | |
---|
25 | integer :: itestd |
---|
26 | |
---|
27 | real,dimension(nx,ny) :: betamx_temp ! pour lissage du betamx |
---|
28 | real,dimension(nx,ny) :: betamy_temp ! pour lissage du betamy |
---|
29 | |
---|
30 | real,dimension(nx,ny) :: mksedim ! jalv, hérité de HUdson |
---|
31 | |
---|
32 | real,dimension(nx,ny) :: h_sedim ! epaisseur de sediment |
---|
33 | |
---|
34 | |
---|
35 | real :: toto |
---|
36 | real :: neffstream !jalv valeur en dessous de la quelle onpasse en stream |
---|
37 | real :: tostick ! pour la glace posee |
---|
38 | real :: tob_ile ! pour les iles |
---|
39 | real :: cry_lim=50. ! courbure limite pour le suivi des fleuves |
---|
40 | contains |
---|
41 | !------------------------------------------------------------------------------- |
---|
42 | subroutine init_dragging ! Cette routine fait l'initialisation du dragging. |
---|
43 | |
---|
44 | implicit none |
---|
45 | |
---|
46 | namelist/drag_jorge/hwatstream,cf,tobmax,toblim,seuil_sedim |
---|
47 | |
---|
48 | if (itracebug.eq.1) write(num_tracebug,*)' dragging avec hwatermax' |
---|
49 | |
---|
50 | |
---|
51 | ! formats pour les ecritures dans 42 |
---|
52 | 428 format(A) |
---|
53 | |
---|
54 | ! lecture des parametres du run block dra_hudson_jorge |
---|
55 | !-------------------------------------------------------------------- |
---|
56 | |
---|
57 | rewind(num_param) ! pour revenir au debut du fichier param_list.dat |
---|
58 | read(num_param,drag_jorge) |
---|
59 | |
---|
60 | write(num_rep_42,428)'!___________________________________________________________' |
---|
61 | write(num_rep_42,428) '&drag_jorge ! nom du bloc drag_jorge ' |
---|
62 | write(num_rep_42,*) |
---|
63 | write(num_rep_42,*) 'hwatstream = ',hwatstream |
---|
64 | write(num_rep_42,*) 'cf = ',cf |
---|
65 | write(num_rep_42,*) 'tobmax = ', tobmax |
---|
66 | write(num_rep_42,*) 'toblim = ', toblim |
---|
67 | write(num_rep_42,*) 'seuil_sedim = ', seuil_sedim |
---|
68 | write(num_rep_42,*)'/' |
---|
69 | write(num_rep_42,428) '! hwatstream (m) : critere de passage en stream en partant de la cote' |
---|
70 | write(num_rep_42,428) '! si hwater > hwatstream ' |
---|
71 | write(num_rep_42,428) '! cf coefficient de la loi de frottement fonction Neff' |
---|
72 | write(num_rep_42,428) '! seulement pour les points cotiers' |
---|
73 | write(num_rep_42,428) '! tobmax : (Pa) frottement maxi sous les streams ' |
---|
74 | write(num_rep_42,428) '! toblim : (Pa) pour les iles ' |
---|
75 | write(num_rep_42,*) |
---|
76 | |
---|
77 | tostick=1.e5 ! valeurs pour les points non flgzmx |
---|
78 | tob_ile=tobmax/2. |
---|
79 | moteurmax=toblim |
---|
80 | |
---|
81 | |
---|
82 | neffstream=1.e6 !jalv |
---|
83 | |
---|
84 | !------------------------------------------------------------------- |
---|
85 | ! masque stream |
---|
86 | |
---|
87 | mstream_mx(:,:)=1 |
---|
88 | mstream_my(:,:)=1 |
---|
89 | |
---|
90 | ! coefficient permettant de modifier le basal drag. |
---|
91 | drag_mx(:,:)=1. |
---|
92 | drag_my(:,:)=1. |
---|
93 | |
---|
94 | |
---|
95 | |
---|
96 | |
---|
97 | |
---|
98 | ! lecture du fichier sediment : |
---|
99 | |
---|
100 | open(20,file=TRIM(DIRNAMEINP)//'Sediment_map_Gabi_Laske/sediment_ij_hemin40.dat') |
---|
101 | do j=1,ny |
---|
102 | do i=1,nx |
---|
103 | read(20,*),toto,toto,h_sedim(i,j) |
---|
104 | enddo |
---|
105 | enddo |
---|
106 | |
---|
107 | h_sedim(:,:)=max(h_sedim(:,:),0.1) ! pas d'epaisseurs de sediments negatives |
---|
108 | |
---|
109 | |
---|
110 | where (h_sedim(:,:).gt.250) |
---|
111 | mksedim(:,:)=2 |
---|
112 | endwhere |
---|
113 | |
---|
114 | return |
---|
115 | end subroutine init_dragging |
---|
116 | !________________________________________________________________________________ |
---|
117 | |
---|
118 | subroutine dragging ! defini la localisation des streams et le frottement basal |
---|
119 | |
---|
120 | ! les iles n'ont pas de condition neff mais ont la condition toblim |
---|
121 | ! (ce bloc etait avant dans flottab) |
---|
122 | |
---|
123 | |
---|
124 | do j=2,ny |
---|
125 | do i=2,nx |
---|
126 | ilemx(i,j)=ilemx(i,j).and.(abs(rog*Hmx(i,j)*sdx(i,j)).lt.toblim) |
---|
127 | ilemy(i,j)=ilemy(i,j).and.(abs(rog*Hmy(i,j)*sdy(i,j)).lt.toblim) |
---|
128 | end do |
---|
129 | end do |
---|
130 | |
---|
131 | |
---|
132 | ! le gzmx initial a ete calculé dans flottab pour les points a cheval sur la grounding line |
---|
133 | |
---|
134 | |
---|
135 | fleuvemx(:,:)=.false. |
---|
136 | fleuvemy(:,:)=.false. |
---|
137 | fleuve(:,:)=.false. |
---|
138 | cote(:,:)=.false. |
---|
139 | |
---|
140 | |
---|
141 | ! detection des cotes |
---|
142 | do j=2,ny-1 |
---|
143 | do i=2,nx-1 |
---|
144 | if ((.not.flot(i,j)).and. & |
---|
145 | ((flot(i+1,j)).or.(flot(i,j+1)).or.(flot(i-1,j)).or.(flot(i,j-1)))) then |
---|
146 | cote(i,j)=.true. |
---|
147 | endif |
---|
148 | end do |
---|
149 | end do |
---|
150 | |
---|
151 | |
---|
152 | ! critere de passage en stream |
---|
153 | do j=2,ny-1 |
---|
154 | do i=2,nx-1 |
---|
155 | if (((hwater(i,j).gt.hwatstream).or.((mksedim(i,j).eq.2).and.(hwater(i,j).ge.seuil_sedim))).and.(.not.flot(i,j))) then |
---|
156 | |
---|
157 | !IF ((neffmx(i,j).LT.neffstream).AND.(neffmy(i,j).LT.neffstream).and.(.not.flot(i,j))) THEN |
---|
158 | ! IF ((((neffmx(i,j).LT.neffstream).AND.(neffmy(i,j).LT.neffstream)).or.((mksedim(i,j).eq.2.).and.(hwater(i,j).gt.seuil_sedim))).AND.(.NOT.flot(i,j))) THEN |
---|
159 | |
---|
160 | fleuve(i,j)=.true. |
---|
161 | else |
---|
162 | fleuve(i,j)=.false. |
---|
163 | endif |
---|
164 | enddo |
---|
165 | enddo |
---|
166 | |
---|
167 | do j=1,ny-1 |
---|
168 | do i=1,nx-1 |
---|
169 | if (fleuve(i,j)) then |
---|
170 | fleuvemx(i,j)=.true. |
---|
171 | fleuvemx(i+1,j)=.true. |
---|
172 | fleuvemy(i,j)=.true. |
---|
173 | fleuvemy(i,j+1)=.true. |
---|
174 | end if |
---|
175 | end do |
---|
176 | end do |
---|
177 | |
---|
178 | ! pas de fleuve dans les endroits trop en pente |
---|
179 | |
---|
180 | !fleuvemx(:,:)=fleuvemx(:,:).and.(abs(rog*Hmx(:,:)*sdx(:,:)).lt.toblim) |
---|
181 | !fleuvemy(:,:)=fleuvemy(:,:).and.(abs(rog*Hmy(:,:)*sdy(:,:)).lt.toblim) |
---|
182 | |
---|
183 | !..................... |
---|
184 | |
---|
185 | !jalv |
---|
186 | !call detect_assym(nx,ny,0,76,1,0,1,0,betamx,itestd) |
---|
187 | !if (itestd.gt.0) then |
---|
188 | ! write(6,*) 'avant calcul betax asymetrie sur betamx pour time=',time |
---|
189 | ! stop |
---|
190 | !else |
---|
191 | ! write(6,*) 'avant calcul betax pas d asymetrie sur betamx pour time=',time |
---|
192 | !end if |
---|
193 | |
---|
194 | !call detect_assym(nx,ny,0,76,1,0,1,0,betamy,itestd) |
---|
195 | !if (itestd.gt.0) then |
---|
196 | ! write(6,*) 'avant calcul betay asymetrie sur betamy pour time=',time |
---|
197 | ! stop |
---|
198 | !else |
---|
199 | ! write(6,*) 'avant calcul betay pas d asymetrie sur betamy pour time=',time |
---|
200 | !end if |
---|
201 | |
---|
202 | |
---|
203 | |
---|
204 | !...........................................! |
---|
205 | ! frottement selon x (avant dans neffect) ! ! test jalv: tous les cas ont la meme loi pour beta: beta=cf*neff |
---|
206 | !...........................................! ! mais le sueil maxi est different pour chaque cas |
---|
207 | |
---|
208 | |
---|
209 | |
---|
210 | DO j=1,ny |
---|
211 | DO i=1,nx |
---|
212 | |
---|
213 | IF ((.NOT.ilemx(i,j)).AND.(fleuvemx(i,j))) gzmx(i,j)=.TRUE. |
---|
214 | |
---|
215 | IF (cotemx(i,j)) THEN ! point cotier: frott maxi=80, mini=8 |
---|
216 | |
---|
217 | ! betamx(i,j)=cf*neffmx(i,j)*1. ! clim3_39 |
---|
218 | ! betamx(i,j)=cf*neffmx(i,j)*1. ! clim3_36 |
---|
219 | ! betamx(i,j)=cf*neffmx(i,j)*1. ! clim3_35 |
---|
220 | ! betamx(i,j)=cf*neffmx(i,j)*1. ! clim3_22 |
---|
221 | ! betamx(i,j)=cf*neffmx(i,j)*0.1 !clim3_21 |
---|
222 | betamx(i,j)=cf*neffmx(i,j)*0.1 ! standar |
---|
223 | ! betamx(i,j)=cf*neffmx(i,j)*0.1/h_sedim(i,j) !clim3_20 |
---|
224 | ! betamx(i,j)=min(betamx(i,j),80.) |
---|
225 | ! betamx(i,j)=max(betamx(i,j),8.) |
---|
226 | ELSE IF ((gzmx(i,j)).AND.(.NOT.cotemx(i,j))) THEN ! stream normal: frott maxi=160, mini=16 |
---|
227 | |
---|
228 | ! betamx(i,j)=cf*neffmx(i,j)*50. ! clim3_39 |
---|
229 | ! betamx(i,j)=cf*neffmx(i,j)*500. ! clim3_36 |
---|
230 | ! betamx(i,j)=cf*neffmx(i,j)*100. ! clim3_22 |
---|
231 | ! betamx(i,j)=cf*neffmx(i,j)*10. ! clim3_21 |
---|
232 | betamx(i,j)=cf*neffmx(i,j)*10. ! standar |
---|
233 | ! betamx(i,j)=cf*neffmx(i,j)*10./h_sedim(i,j) |
---|
234 | ! betamx(i,j)=min(betamx(i,j),160.) |
---|
235 | ! betamx(i,j)=max(betamx(i,j),16.) |
---|
236 | |
---|
237 | IF ((mksedim(i,j).EQ.2).AND.(hwater(i,j).GE.seuil_sedim)) THEN ! jalv: stream en zone sediment |
---|
238 | |
---|
239 | ! betamx(i,j)=cf*neffmx(i,j)*5. ! clim3_39 |
---|
240 | ! betamx(i,j)=cf*neffmx(i,j)*50. ! clim3_36 |
---|
241 | ! betamx(i,j)=cf*neffmx(i,j)*10. ! clim3_22 |
---|
242 | ! betamx(i,j)=cf*neffmx(i,j)*1. !clim3_21 |
---|
243 | betamx(i,j)=cf*neffmx(i,j)*1. ! standar |
---|
244 | ! betamx(i,j)=cf*neffmx(i,j)*1./h_sedim(i,j) |
---|
245 | ! betamx(i,j)=min(betamx(i,j),120.) !stream sediment: frott maxi=120, mini=12 |
---|
246 | ! betamx(i,j)=max(betamx(i,j),12.) |
---|
247 | ENDIF |
---|
248 | |
---|
249 | ELSE IF (ilemx(i,j)) THEN ! ile : frott maxi=40, mini=4 |
---|
250 | |
---|
251 | ! betamx(i,j)=cf*neffmx(i,j)*0.1 ! clim3_39 |
---|
252 | ! betamx(i,j)=cf*neffmx(i,j)*0.1 ! clim3_22 |
---|
253 | betamx(i,j)=cf*neffmx(i,j)*0.1 ! standar |
---|
254 | ! betamx(i,j)=cf*neffmx(i,j)*0.1 !clim3_21 |
---|
255 | ! betamx(i,j)=cf*neffmx(i,j)*0.1/h_sedim(i,j) |
---|
256 | ! betamx(i,j)=min(betamx(i,j),40.) |
---|
257 | ! betamx(i,j)=max(betamx(i,j),4.) |
---|
258 | ELSE IF (flotmx(i,j)) THEN ! flottant : frott 0. |
---|
259 | betamx(i,j)=0. |
---|
260 | ELSE ! grounded, SIA |
---|
261 | ! betamx(i,j)=tostick ! frottement glace posee (1 bar) divise par mil !jalv |
---|
262 | ! betamx(i,j)=200. ! jalv: le cas restant glace posee a priori: frott=150 |
---|
263 | betamx(i,j)=cf*neffmx(i,j)*1000. |
---|
264 | ! betamx(i,j)=cf*neffmx(i,j)*1000./h_sedim(i,j) |
---|
265 | ENDIF |
---|
266 | |
---|
267 | ! if (cf*neffmx(i,j).gt.1500.) then |
---|
268 | ! gzmx(i,j)=.false. |
---|
269 | ! betamx(i,j)=tostick |
---|
270 | ! endif |
---|
271 | |
---|
272 | end do |
---|
273 | end do |
---|
274 | |
---|
275 | |
---|
276 | !................................................! |
---|
277 | !...test..jalv..lissage..des..beta...............! |
---|
278 | !...on..calcule..la..moyenne..ponderee..des......! |
---|
279 | !...points..aux..alentours.......................! |
---|
280 | |
---|
281 | |
---|
282 | !do j=1,ny |
---|
283 | ! do i=3,nx-2 |
---|
284 | |
---|
285 | ! betamx_temp(i,j)=(betamx(i,j)+(0.3*betamx(i-1,j))+(0.2*betamx(i-2,j))+(0.3*betamx(i+1,j))+(0.2*betamx(i+2,j)))/2 |
---|
286 | |
---|
287 | ! end do |
---|
288 | !end do |
---|
289 | |
---|
290 | |
---|
291 | |
---|
292 | !betamx(:,:)=betamx_temp(:,:) |
---|
293 | |
---|
294 | |
---|
295 | |
---|
296 | !...........................................! |
---|
297 | ! frottement selon y (avant dans neffect) ! ! test jalv: tous les cas ont la meme loi pour beta: beta=cf*neff |
---|
298 | !...........................................! ! mais le seuil maxi est different pour chaque cas |
---|
299 | |
---|
300 | |
---|
301 | do j=1,ny |
---|
302 | do i=1,nx |
---|
303 | |
---|
304 | if ((.not.ilemy(i,j)).and.(fleuvemy(i,j))) gzmy(i,j)=.true. |
---|
305 | |
---|
306 | |
---|
307 | IF (cotemy(i,j)) THEN ! point cotier: froot maxi=40, mini=4 |
---|
308 | |
---|
309 | ! betamy(i,j)=cf*neffmy(i,j)*1. ! clim3_39 |
---|
310 | ! betamy(i,j)=cf*neffmy(i,j)*1. ! clim3_36 |
---|
311 | ! betamy(i,j)=cf*neffmy(i,j)*1. ! clim3_35 |
---|
312 | ! betamy(i,j)=cf*neffmy(i,j)*1. ! clim3_22 |
---|
313 | ! betamy(i,j)=cf*neffmy(i,j)*0.1 !clim3_21 |
---|
314 | betamy(i,j)=cf*neffmy(i,j)*0.1 ! standar |
---|
315 | ! betamy(i,j)=cf*neffmy(i,j)*0.1/h_sedim(i,j) |
---|
316 | ! betamy(i,j)=min(betamy(i,j),80.) |
---|
317 | ! betamy(i,j)=max(betamy(i,j),8.) |
---|
318 | else if ((gzmy(i,j)).and.(.not.cotemy(i,j))) then ! stream normal: frott maxi=80, mini=8 |
---|
319 | |
---|
320 | ! betamy(i,j)=cf*neffmy(i,j)*50. ! clim3_39 |
---|
321 | ! betamy(i,j)=cf*neffmy(i,j)*500. ! clim3_36 |
---|
322 | ! betamy(i,j)=cf*neffmy(i,j)*100. ! clim3_22 |
---|
323 | ! betamy(i,j)=cf*neffmy(i,j)*10. !clim3_21 |
---|
324 | betamy(i,j)=cf*neffmy(i,j)*10. ! standar |
---|
325 | ! betamy(i,j)=cf*neffmy(i,j)*10./h_sedim(i,j) |
---|
326 | ! betamy(i,j)=min(betamy(i,j),160.) |
---|
327 | ! betamy(i,j)=max(betamy(i,j),16.) |
---|
328 | |
---|
329 | if ((mksedim(i,j).eq.2).and.(hwater(i,j).ge.seuil_sedim)) then ! jalv: stream en zone sediment |
---|
330 | |
---|
331 | ! betamy(i,j)=cf*neffmy(i,j)*5. ! clim3_39 |
---|
332 | ! betamy(i,j)=cf*neffmy(i,j)*50. ! clim3_36 |
---|
333 | ! betamy(i,j)=cf*neffmy(i,j)*10. ! clim3_22 |
---|
334 | ! betamy(i,j)=cf*neffmy(i,j)*1. !clim3_21 |
---|
335 | betamy(i,j)=cf*neffmy(i,j)*1. ! standar |
---|
336 | ! betamy(i,j)=cf*neffmy(i,j)*1./h_sedim(i,j) |
---|
337 | ! betamy(i,j)=min(betamy(i,j),120.) !stream sediment: frott maxi=60, mini=0. |
---|
338 | ! betamy(i,j)=max(betamy(i,j),12.) |
---|
339 | endif |
---|
340 | |
---|
341 | else if (ilemy(i,j)) then ! ile : frott maxi=20, mini=2 |
---|
342 | |
---|
343 | ! betamy(i,j)=cf*neffmy(i,j)*0.1 ! clim3_39 |
---|
344 | ! betamy(i,j)=cf*neffmy(i,j)*0.1 ! clim3_22 |
---|
345 | betamy(i,j)=cf*neffmy(i,j)*0.1 ! standar |
---|
346 | ! betamy(i,j)=cf*neffmy(i,j)*0.1 !clim3_21 |
---|
347 | ! betamy(i,j)=cf*neffmy(i,j)*0.1/h_sedim(i,j) |
---|
348 | ! betamy(i,j)=min(betamy(i,j),40.) |
---|
349 | ! betamy(i,j)=max(betamy(i,j),4.) |
---|
350 | else if (flotmy(i,j)) then ! flottant : frott 0 |
---|
351 | betamy(i,j)=0. |
---|
352 | else ! grounded, SIA |
---|
353 | ! betamy(i,j)=tostick/1000 ! frottement glace posee divise par mil !jalv |
---|
354 | ! betamy(i,j)=200. ! jalv: le cas restant glace posee a priori: frott maxi 200 |
---|
355 | betamy(i,j)=cf*neffmy(i,j)*1000. |
---|
356 | ! betamy(i,j)=cf*neffmy(i,j)*1000./h_sedim(i,j) |
---|
357 | endif |
---|
358 | |
---|
359 | ! if (cf*neffmy(i,j).gt.1500.) then |
---|
360 | ! gzmy(i,j)=.false. |
---|
361 | ! betamy(i,j)=tostick |
---|
362 | ! endif |
---|
363 | |
---|
364 | end do |
---|
365 | end do |
---|
366 | |
---|
367 | |
---|
368 | |
---|
369 | !................................................! |
---|
370 | !...test..jalv..lissage..des..beta...............! |
---|
371 | !...on..calcule..la..moyenne..ponderee..des......! |
---|
372 | !...points..aux..alentours.......................! |
---|
373 | |
---|
374 | |
---|
375 | !do j=3,ny-2 |
---|
376 | ! do i=1,nx |
---|
377 | |
---|
378 | ! betamy_temp(i,j)=(betamy(i,j)+(0.3*betamy(i,j-1))+(0.2*betamy(i,j-2))+(0.3*betamy(i,j+1))+(0.2*betamy(i,j+2)))/2 |
---|
379 | |
---|
380 | ! end do |
---|
381 | !end do |
---|
382 | |
---|
383 | !betamy(:,:)=betamy_temp(:,:) |
---|
384 | |
---|
385 | |
---|
386 | |
---|
387 | !jalv |
---|
388 | !call detect_assym(nx,ny,0,76,1,0,1,0,betamx,itestd) |
---|
389 | !if (itestd.gt.0) then |
---|
390 | ! write(6,*) 'apres dragging asymetrie sur betamx pour time=',time |
---|
391 | ! stop |
---|
392 | !else |
---|
393 | ! write(6,*) 'apres dragging pas d asymetrie sur betamx pour time=',time |
---|
394 | !end if |
---|
395 | |
---|
396 | !call detect_assym(nx,ny,0,76,1,0,1,0,betamy,itestd) |
---|
397 | !if (itestd.gt.0) then |
---|
398 | ! write(6,*) 'apres dragging asymetrie sur betamy pour time=',time |
---|
399 | ! stop |
---|
400 | !else |
---|
401 | ! write(6,*) 'apres dragging pas d asymetrie sur betamy pour time=',time |
---|
402 | !end if |
---|
403 | |
---|
404 | |
---|
405 | |
---|
406 | |
---|
407 | |
---|
408 | return |
---|
409 | end subroutine dragging |
---|
410 | |
---|
411 | end module dragging_jorge |
---|