source: branches/GRISLIv3/SOURCES/main3D-0.4-40km.f90 @ 469

Last change on this file since 469 was 469, checked in by aquiquet, 4 months ago

Cleaning branch: old empty ritz files and unused file numbers removed

File size: 8.7 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, only: time,iout,ntmax
105  use runparam, only: tend,itracebug,nt
106
107  implicit none
108
109
110  ! good luck
111
112  call grisli_init  ! Initializations
113
114  time_loop: do nt=1,ntmax         !____________________________ debut boucle temporelle
115
116     if (time.ge.tend) exit
117     if (time.gt.10) itracebug = 0
118     call step_time_loop()
119
120  end do time_loop
121  if (itracebug.eq.1)  call tracebug('dans main avant call out_recovery ')
122  call out_recovery(iout)
123
124  write(6,*) "end of the run at time = ",time
125  write(6,*) "_____________________________________________________________________"
126
127end program main3D
128
129
130!---------------------------------------------------------------------------------------
131subroutine grisli_init
132
133  USE module3D_phy, only: itemp,icouple,isynchro,icompteur,iglen, &
134                          s,h,b,bsoc,flot,mk,mk0,uxbar,uybar,hwater,time,timemax,ndebug,ndebug_max
135  use runparam, only: nt,tbegin,dtprofile,dtcpt,dirnameout,runname,itracebug
136  use geography, only: nx,ny,geoplace
137  use deformation_mod_2lois, only:n1poly,n2poly
138  use bilan_eau_mod, only: init_bilan_eau
139  use module_choix, only: forclim,ablation,bmeltshelf,calving,flow_general,flowlaw
140  !  module_choix donne acces a tous les modules
141  !  de declaration des packages
142  use flottab_mod, only: flottab
143  use sorties_ncdf_grisli, only: iglob_ncdf,testsort_time_ncdf,init_sortie_ncdf,testsort_time_ncdf, &
144                                 sortie_ncdf_cat
145  use util_recovery, only: dtout
146 
147!  use track_debug
148
149  implicit none
150
151  integer :: i,j
152
153  if (itracebug.eq.1)  call tracebug(' Entree dans routine grisli_init')
154  !      switch pour passer ou non par T lliboutry calcule => 0, ne passe pas,
155  !      1 ou 2 passe (se met a 0 tout seul si on prend un fichier .cptr)
156
157  ITEMP=0
158
159  !      switch couple physique faible =>  CP et CT independant T
160  !               0     pas de trait. vert.  A FAIRE           niveau L0
161  !               1     pas de couplage , faible physique      niveau L1
162  !               2     couplage, faible physique              niveau L2
163  !               3     couplage, physique complete sans CBT   niveau L3
164  !               4     idem 3 mais loi de def. Duval          niveau L4
165  ICOUPLE=4
166
167  nt=-1   ! utilisee dans initialisation flottab
168  !     sortie profile tous les dtprofile
169  DTPROFILE=50000.
170  !     ----------------------------------fin des modifs run les plus usuelles
171  DIRNAMEOUT='../RESULTATS/'
172  !DIRNAMEOUT='./'
173
174  call initial  ! routine qui appel toutes les routines d'initialisation
175
176
177  !      call init_sortie_ncdf
178  !      call sortie_ncdf_cat
179  !      STOP
180
181  !     compteur tous les DTCPT
182  DTCPT=dtout
183
184  !------------------------------ INITIALISATION ----------------------------
185  !
186! ecriture netcdf apres initialisation
187
188
189
190  call testsort_time_ncdf(dble(tbegin))
191  if (iglob_ncdf .EQ. 1) call sortie_ncdf_cat
192
193  ! test vincent car certains H(i,j)=0 dans fichier de reprise
194  do j=1,ny
195     do i=1,nx
196        H(i,j)=max(0.,H(i,j))
197     enddo
198  enddo
199
200
201  call forclim                   !  initialisation BM et TS         
202  call ablation
203
204
205
206  !  -----------                  CALCULATION OF INITIAL TEMPERATURES
207
208  tcpt:if (ICOMPTEUR.eq.0) then
209
210
211
212        if ((ITEMP.eq.0).or.(ITEMP.eq.3)) then
213           call masque(flot,mk,mk0,itracebug)
214
215           call Neffect()
216
217           call flottab()
218
219           call Neffect()
220
221
222           !          call vitbilan_lect   ! routine de lecture des vitesses de bilan
223           !       ========================================================
224
225           if (ITEMP.eq.0) call lineartemp()
226
227           call bmelt_grounded 
228           call  bmeltshelf
229
230
231           call flow_general
232
233           do iglen=n1poly,n2poly
234              call flowlaw(iglen)
235           end do
236
237           call Neffect()
238           call flottab()
239           call calving
240           call ablation_bord
241           call flottab
242           call Neffect()
243           call diffusiv()
244           call SIA_velocities()
245        endif
246
247  else  ! tcpt     on reprend un fichier compteur (ICOMPTEUR.eq.1)
248
249     time=tbegin       ! prend le temps du compteur
250
251
252     call masque(flot,mk,mk0,itracebug)
253     call flottab()
254     call neffect()
255     call flottab()
256     call masque(flot,mk,mk0,itracebug)
257
258     do i=1,nx
259        do j=1,ny
260           if (S(i,j).lt.0) then
261              print*,i,j,S(i,j)
262              goto 11115
263           endif
264        enddo
265     enddo
26611115 continue
267
268     call  bmeltshelf ! afq --
269
270     !       ========================================================
271     call flow_general
272
273     do iglen=n1poly,n2poly
274        call flowlaw(iglen)
275     end do
276
277
278     call Neffect()
279     call flottab
280     call diffusiv()
281     call SIA_velocities()
282     call strain_rate
283
284  endif tcpt
285  !     fin du test sur icompteur
286
287  !      call init_sortie_ncdf
288  !      call sortie_ncdf_cat
289
290  call flottab()
291  call Neffect()
292  call flottab()
293
294  if (icompteur.eq.0) then
295     do i=1,nx
296        do j=1,ny
297           if (.not.flot(i,j)) then
298              B(i,j) = Bsoc(i,j)
299              Uxbar(i,j) = 0.
300              Uybar(i,j) = 0.
301           end if
302        end do
303     end do
304  endif
305
306  do i=2,nx-1
307     do j=2,ny-1
308        hwater(i,j)=max(hwater(i,j),0.)
309     enddo
310  enddo
311  timemax=time
312  isynchro=1
313  ndebug=0
314  ndebug_max=9
315
316  call init_bilan_eau
317  call step_thermomeca()     ! un tour dans la boucle temporelle, partie avant icethick
318  call init_sortie_ncdf
319  if (itracebug.eq.1)  call tracebug(' fin routine grisli_init')
320  call testsort_time_ncdf(dble(tbegin))
321
322  if (iglob_ncdf .EQ. 1) call sortie_ncdf_cat
323
324  return
325end subroutine grisli_init
Note: See TracBrowser for help on using the repository browser.