source: trunk/SOURCES/dragging_jorge_mod.f90 @ 34

Last change on this file since 34 was 34, checked in by dumas, 8 years ago

Ajout du module Ant40_files/bmelt-ant-regions-oce_mod.f90 pour forcer la fonte basale avec des fichiers de temperature oceanique (M2 Ning) | lecture fichier netcdf pour Antarctique | Ajout dans les sortie de ghf : flux geothermique | climat_GrIce2sea_years_mod.f90 : lecture de smb et Tann au lieu de z | correction bug sorties Netdf dans initial-0.3.f90

File size: 13.2 KB
Line 
1module 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
12implicit none
13logical,dimension(nx,ny) :: fleuvemx
14logical,dimension(nx,ny) :: fleuvemy
15logical,dimension(nx,ny) :: fleuve
16logical,dimension(nx,ny) :: cote
17
18real :: seuil_sedim              ! seuil sur hwater pour avoir du glissement
19real :: valmax
20integer :: imax,jmax
21integer :: i_moins1,i_plus1,j_moins1,j_plus1
22integer :: lmax=20
23integer :: idep,jdep,iloc,jloc
24
25integer :: itestd
26
27real,dimension(nx,ny) :: betamx_temp      ! pour lissage du betamx
28real,dimension(nx,ny) :: betamy_temp      ! pour lissage du betamy
29
30real,dimension(nx,ny) :: mksedim      ! jalv, hérité de HUdson
31
32real,dimension(nx,ny) :: h_sedim      ! epaisseur de sediment
33
34
35real :: toto
36real :: neffstream  !jalv valeur en dessous de la quelle onpasse en stream
37real :: tostick   ! pour la glace posee
38real :: tob_ile    ! pour les iles
39real :: cry_lim=50.  ! courbure limite pour le suivi des fleuves
40contains
41!-------------------------------------------------------------------------------
42subroutine init_dragging      ! Cette routine fait l'initialisation du dragging.
43
44implicit none
45 
46namelist/drag_jorge/hwatstream,cf,tobmax,toblim,seuil_sedim   
47
48if (itracebug.eq.1) write(num_tracebug,*)' dragging avec hwatermax'
49
50
51! formats pour les ecritures dans 42
52428 format(A)
53
54! lecture des parametres du run                      block dra_hudson_jorge
55!--------------------------------------------------------------------
56
57rewind(num_param)        ! pour revenir au debut du fichier param_list.dat
58read(num_param,drag_jorge)
59
60write(num_rep_42,428)'!___________________________________________________________' 
61write(num_rep_42,428) '&drag_jorge              ! nom du bloc drag_jorge '
62write(num_rep_42,*)
63write(num_rep_42,*) 'hwatstream      = ',hwatstream 
64write(num_rep_42,*) 'cf             = ',cf
65write(num_rep_42,*) 'tobmax         = ', tobmax
66write(num_rep_42,*) 'toblim         = ', toblim
67write(num_rep_42,*) 'seuil_sedim         = ', seuil_sedim
68write(num_rep_42,*)'/'                           
69write(num_rep_42,428) '! hwatstream (m) :  critere de passage en stream en partant de la cote'
70write(num_rep_42,428) '!  si hwater > hwatstream '
71write(num_rep_42,428) '! cf coefficient de la loi de frottement fonction Neff'
72write(num_rep_42,428) '! seulement pour les points cotiers'
73write(num_rep_42,428) '! tobmax : (Pa) frottement maxi sous les streams '
74write(num_rep_42,428) '! toblim : (Pa)  pour les iles '
75write(num_rep_42,*)
76
77tostick=1.e5   ! valeurs pour les points non flgzmx
78tob_ile=tobmax/2.
79moteurmax=toblim
80
81
82neffstream=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
100open(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       
107h_sedim(:,:)=max(h_sedim(:,:),0.1)  ! pas d'epaisseurs de sediments negatives               
108
109
110where (h_sedim(:,:).gt.250) 
111      mksedim(:,:)=2
112endwhere
113
114return
115end subroutine init_dragging
116!________________________________________________________________________________
117
118subroutine 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
124do 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
129end do
130
131
132! le gzmx initial a ete calculé dans flottab pour les points a cheval sur la grounding line
133
134
135fleuvemx(:,:)=.false.
136fleuvemy(:,:)=.false.
137fleuve(:,:)=.false.
138cote(:,:)=.false.
139
140
141! detection des cotes
142do  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
149end do
150
151
152! critere de passage en stream
153do  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
165enddo
166
167do 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
176end 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
210DO 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
273end 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
301do 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
365end 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
408return
409end subroutine dragging
410
411end module dragging_jorge
Note: See TracBrowser for help on using the repository browser.