source: trunk/SOURCES/main3D-0.4-40km.f90 @ 159

Last change on this file since 159 was 157, checked in by dumas, 7 years ago

determin_marais is now called only when isynchro=1 | sortie_hz_multi and hz_output are suppressed | step_time_loop_avec_iterbeta updated as step_time_loop

File size: 10.1 KB
Line 
1!     **********************************************************************
2!     *       GRISLI      Grenoble Ice Shelves-Land Ice
3!     **********************************************************************
4
5
6!     Ont participe a l'ecriture de ce modele :
7!
8!                   Catherine Ritz                           (tout du long)
9!                   Adeline Fabre                      (la partie Gremlins)
10!                   Vincent Rommelaere         (ice shelves et ice streams)
11!                   Christophe Dumas (debut f90,              (Antarctique)
12!                   Vincent Peyaud      (portage HN,calving, front, hydrol)
13!                   Cyril Mazauric                                  (AGRIF)
14!                   Hassine Baya             (netcdf, doxygen, icetemp,...)
15!
16!     catritz@lgge.obs.ujf-grenoble.fr
17!
18!     **********************************************************************
19
20
21
22!> \mainpage GRISLI Modele 3D De Calotte Glaciaire
23!!
24!! \section start Pour commencer
25!! Le programme principal est dans le module main3D.
26!! Ce module est dans le fichier  main3D-0.4-40km.f90.
27!!
28!! \section tree Arbre d'appel
29!!
30!! - call grisli_init()
31!!   - step_grisli()
32!!   - sortie_ncdf_cat()
33!!   - testsort_time_ncdf()
34!!   - initial()
35!!   - sortie_hz_multi()
36!! - call step_grisli1()
37!!
38!<
39
40
41!> \file main3D-0.4-40km.f90 GRISLI Modele 3D De Calotte Glaciaire
42!! programme principal
43!! (voir l'\ref tree)
44!!
45!! @brief   modele flow line d'evolution de calotte
46!! @authors         Catherine Ritz     catritz@lgge.obs.ujf-grenoble.fr  (tout du long)
47!! @authors         Adeline Fabre                      (la partie Gremlins)
48!! @authors         Vincent Rommelaere         (ice shelves et ice streams)
49!! @authors         Christophe Dumas (debut f90,              (Antarctique)
50!! @authors         Vincent Peyaud      (portage HN,calving, front, hydrol)
51!! @authors         Cyril Mazauric                                  (AGRIF)
52!!
53!!
54!! @note use module3D_phy
55!! @note use module_choix
56!! @note use flottab_mod
57!! @note use icetempmod
58!! @note use sorties_ncdf_grisli
59!! @note use diagno_mod
60!! @note use resolmeca_SIA_L1
61!!
62!!
63!! Ce module appelle les routines suivantes :
64!! - grisli_init()
65!! - step_grisli1()
66!! - step_output()
67!!
68!<
69
70!> \namespace main3D GRISLI Modele 3D De Calotte Glaciaire
71!! programme principal
72!! (voir l'\ref tree)
73!!
74!!
75!! @brief   modele flow line d'evolution de calotte
76!! @authors         Catherine Ritz     catritz@lgge.obs.ujf-grenoble.fr  (tout du long)
77!! @authors         Adeline Fabre                      (la partie Gremlins)
78!! @authors         Vincent Rommelaere         (ice shelves et ice streams)
79!! @authors         Christophe Dumas (debut f90,              (Antarctique)
80!! @authors         Vincent Peyaud      (portage HN,calving, front, hydrol)
81!! @authors         Cyril Mazauric                                  (AGRIF)
82!!
83!!
84!! @note use module3D_phy
85!! @note use module_choix
86!! @note use flottab_mod
87!! @note use icetempmod
88!! @note use sorties_ncdf_grisli
89!! @note use diagno_mod
90!! @note use resolmeca_SIA_L1
91!!
92!!
93!! @todo itracebug : faire une routine
94!!
95!! Ce module appelle les routines suivantes :
96!! - grisli_init()
97!! - step_grisli1()
98!!
99!! Defined in file main3D-0.4-40km.f90
100!<
101
102program main3D
103
104  USE module3D_phy
105  USE module_choix !   module de choix du type de run
106  !  module_choix donne acces a tous les modules
107  !  de declaration des packages
108  use flottab_mod
109  use icetempmod
110  use sorties_ncdf_grisli
111  use diagno_mod 
112  use resolmeca_SIA_L1
113  use bilan_eau_mod
114!  use track_debug
115
116  implicit none
117
118
119  ! good luck
120
121  call grisli_init  ! Initializations
122
123  time_loop: do nt=1,ntmax         !____________________________ debut boucle temporelle
124
125     if (time.ge.tend) exit
126     if (time.gt.10) itracebug = 0
127     call step_time_loop()
128
129  end do time_loop
130  if (itracebug.eq.1)  call tracebug('dans main avant call out_recovery ')
131  call out_recovery(iout)
132
133  write(6,*) "end of the run at time = ",time
134  write(6,*) "_____________________________________________________________________"
135
136end program main3D
137
138
139!---------------------------------------------------------------------------------------
140subroutine grisli_init
141
142  USE module3D_phy
143  USE module_choix ! module de choix du type de run
144  !  module_choix donne acces a tous les modules
145  !  de declaration des packages
146  use flottab_mod
147  use icetempmod
148  use sorties_ncdf_grisli
149  use util_recovery
150  use diagno_mod 
151!  use track_debug
152
153  implicit none
154
155  if (itracebug.eq.1)  call tracebug(' Entree dans routine grisli_init')
156  !      switch pour passer ou non par T lliboutry calcule => 0, ne passe pas,
157  !      1 ou 2 passe (se met a 0 tout seul si on prend un fichier .cptr)
158
159  ITEMP=0
160
161  !      switch couple physique faible =>  CP et CT independant T
162  !               0     pas de trait. vert.  A FAIRE           niveau L0
163  !               1     pas de couplage , faible physique      niveau L1
164  !               2     couplage, faible physique              niveau L2
165  !               3     couplage, physique complete sans CBT   niveau L3
166  !               4     idem 3 mais loi de def. Duval          niveau L4
167  ICOUPLE=4
168  !     switch margin IMARGIN=0 fixed, IMARGIN=1 moving
169  IMARGIN=1
170
171  TIMECG=TBEGIN
172  nt=-1   ! utilisee dans initialisation flottab
173  !     sortie profile tous les dtprofile
174  DTPROFILE=50000.
175  marine=.true.
176  !     ----------------------------------fin des modifs run les plus usuelles
177  !DIRNAMEOUT='../RESULTATS/'
178  DIRNAMEOUT='./'
179
180  call initial  ! routine qui appel toutes les routines d'initialisation
181
182
183  !      call init_sortie_ncdf
184  !      call sortie_ncdf_cat
185  !      STOP
186
187  !     compteur tous les DTCPT
188  DTCPT=dtout
189
190
191  !     ************ OPEN FILES.RITZ ****************
192
193  if ((geoplace.eq.'anteis1').or.(geoplace.eq.'ant20km')) then
194     ! fichier de reference pour le niveau des mers
195     open(num_sealevel,file=TRIM(DIRNAMEOUT)//'sealevel'//runname//'.ritz',position="append")
196     open(num_ts_ritz,file=TRIM(DIRNAMEOUT)//'ts_'//runname//'.ritz',position="append")
197     open(num_ic_vo,file=TRIM(DIRNAMEOUT)//'ic_'//runname//'vo.ritz',position="append")
198     open(num_ic_by,file=TRIM(DIRNAMEOUT)//'ic_'//runname//'by.ritz',position="append")
199     open(num_ic_dm,file=TRIM(DIRNAMEOUT)//'ic_'//runname//'dm.ritz',position="append")
200     open(num_ic_dc,file=TRIM(DIRNAMEOUT)//'ic_'//runname//'dc.ritz',position="append")
201     open(num_ic_df,file=TRIM(DIRNAMEOUT)//'ic_'//runname//'df.ritz',position="append")
202  endif
203
204  !------------------------------ INITIALISATION ----------------------------
205  !
206! ecriture netcdf apres initialisation
207
208
209
210  call testsort_time_ncdf(dble(tbegin))
211  if (iglob_ncdf .EQ. 1) call sortie_ncdf_cat
212
213
214!cdc supprime pour initialisation propre
215!~   if (iter_beta.eq.0) then
216
217!~      if (itracebug.eq.1)  call tracebug(' Avant appel routine icethick3')
218!~      call icethick3
219!~      debug_3D(:,:,88) = S(:,:)
220!~      if (itracebug.eq.1)  call tracebug(' Apres appel routine icethick3')
221!~   end if
222
223
224  !     Tgrounded, temps pendant lequel la calotte est terrestre
225  tgrounded=tbegin-10.
226  !if (tgrounded.le.tbegin) then
227  marine=.true. ! Cas la calotte est terrestre
228  !end if
229
230  ! test vincent car certains H(i,j)=0 dans fichier de reprise
231  do j=1,ny
232     do i=1,nx
233        H(i,j)=max(0.,H(i,j))
234     enddo
235  enddo
236
237
238  ! call firstoutput()           ! ouverture fichier temporel et premieres ecritures
239
240  call forclim                   !  initialisation BM et TS         
241  call ablation
242
243
244
245  !  -----------                  CALCULATION OF INITIAL TEMPERATURES
246
247  tcpt:if (ICOMPTEUR.eq.0) then
248
249
250     if ((GEOPLACE.ne.'eismint').and.(GEOPLACE(1:6).ne.'marine')) then
251        !       ITEMP=1 => calcul de T lliboutry; ITEMP=2 => reprise d'un fichier cptr
252        !       ITEMP=0 => on ne prend pas en compte T Lliboutry
253        !       ITEMP=3 => on prend les temperatures d'un fichier cptr
254
255
256
257        if ((ITEMP.eq.0).or.(ITEMP.eq.3)) then
258           call masque()
259
260           call Neffect()
261
262           call flottab()
263
264           call Neffect()
265
266
267           !          call vitbilan_lect   ! routine de lecture des vitesses de bilan
268           !       ========================================================
269
270           if (ITEMP.eq.0) call lineartemp()
271
272           call bmelt_grounded 
273           call  bmeltshelf
274
275
276           call flow_general
277
278           do iglen=n1poly,n2poly
279              call flowlaw(iglen)
280           end do
281
282           call Neffect()
283           call flottab()
284           call calving
285           call ablation_bord
286           call flottab
287           call Neffect()
288           call diffusiv()
289           call SIA_velocities()
290        endif
291
292
293     endif
294     !     fin du test geoplace
295
296  else  ! tcpt     on reprend un fichier compteur (ICOMPTEUR.eq.1)
297
298     time=tbegin       ! prend le temps du compteur
299
300
301     call masque()
302     call flottab()
303     call neffect()
304     call flottab()
305     call masque()
306
307     do i=1,nx
308        do j=1,ny
309           if (S(i,j).lt.0) then
310              print*,i,j,S(i,j)
311              goto 11115
312           endif
313        enddo
314     enddo
31511115 continue
316
317     call  bmeltshelf ! afq --
318
319     !       ========================================================
320     call flow_general
321
322     do iglen=n1poly,n2poly
323        call flowlaw(iglen)
324     end do
325
326
327     call Neffect()
328     call flottab
329     call diffusiv()
330     call SIA_velocities()
331     call strain_rate
332
333  endif tcpt
334  !     fin du test sur icompteur
335
336  !      call init_sortie_ncdf
337  !      call sortie_ncdf_cat
338
339  call flottab()
340  call Neffect()
341  call flottab()
342
343  if (icompteur.eq.0) then
344     do i=1,nx
345        do j=1,ny
346           if (.not.flot(i,j)) then
347              B(i,j) = Bsoc(i,j)
348              Uxbar(i,j) = 0.
349              Uybar(i,j) = 0.
350           end if
351        end do
352     end do
353  endif
354
355  boost = .false.
356
357  do i=2,nx-1
358     do j=2,ny-1
359        hwater(i,j)=max(hwater(i,j),0.)
360     enddo
361  enddo
362  timemax=time
363  isynchro=1
364  ndebug=0
365  ndebug_max=9
366
367  call step_thermomeca()     ! un tour dans la boucle temporelle, partie avant icethick
368  call init_sortie_ncdf
369  call init_bilan_eau
370  if (itracebug.eq.1)  call tracebug(' fin routine grisli_init')
371  call testsort_time_ncdf(dble(tbegin))
372
373  if (iglob_ncdf .EQ. 1) call sortie_ncdf_cat
374
375  return
376end subroutine grisli_init
Note: See TracBrowser for help on using the repository browser.