/[lmdze]/trunk/Sources/dyn3d/leapfrog.f
ViewVC logotype

Diff of /trunk/Sources/dyn3d/leapfrog.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3 by guez, Wed Feb 27 13:16:39 2008 UTC revision 12 by guez, Mon Jul 21 16:05:07 2008 UTC
# Line 22  contains Line 22  contains
22      ! et possibilite d'appeler une fonction f(y) a derivee tangente      ! et possibilite d'appeler une fonction f(y) a derivee tangente
23      ! hyperbolique a la place de la fonction a derivee sinusoidale.      ! hyperbolique a la place de la fonction a derivee sinusoidale.
24    
25      ! ... Possibilite de choisir le shema pour l'advection de      ! ... Possibilité de choisir le schéma pour l'advection de
26      ! q, en modifiant iadv dans "traceur.def" (10/02) .      ! q, en modifiant iadv dans "traceur.def" (10/02) .
27    
28      ! Pour Van-Leer + Vapeur d'eau saturee, iadv(1)=4. (F.Codron, 10/99)      ! Pour Van-Leer + Vapeur d'eau saturee, iadv(1)=4. (F.Codron, 10/99)
29      ! Pour Van-Leer iadv=10      ! Pour Van-Leer iadv=10
30    
31      use dimens_m, only: iim, llm, nqmx      use dimens_m, only: iim, jjm, llm, nqmx
32      use paramet_m, only: ip1jmp1, ip1jm, llmp1, ijmllm, ijp1llm, jjp1, iip1, &      use paramet_m, only: ip1jmp1, ip1jm, ijmllm, ijp1llm, jjp1, iip1, iip2
          iip2  
33      use comconst, only: dtvr, daysec, dtphys      use comconst, only: dtvr, daysec, dtphys
34      use comvert, only: ap, bp      use comvert, only: ap, bp
35      use conf_gcm_m, only: day_step, iconser, idissip, iphysiq, iperiod, nday, &      use conf_gcm_m, only: day_step, iconser, idissip, iphysiq, iperiod, nday, &
36           offline, periodav           offline, periodav
37      use logic, only: ok_guide, apdiss, apphys, conser, forward, iflag_phys, &      use logic, only: ok_guide, iflag_phys
          leapf, statcl  
38      use comgeom      use comgeom
39      use serre      use serre
40      use temps, only: itaufin, day_ini, dt      use temps, only: itaufin, day_ini, dt
41      use iniprint, only: prt_level      use iniprint, only: prt_level
42      use com_io_dyn      use com_io_dyn
     use abort_gcm_m, only: abort_gcm  
43      use ener      use ener
44      use calfis_m, only: calfis      use calfis_m, only: calfis
45      use exner_hyb_m, only: exner_hyb      use exner_hyb_m, only: exner_hyb
46      use guide_m, only: guide      use guide_m, only: guide
47      use pression_m, only: pression      use pression_m, only: pression
48        use pressure_var, only: p3d
49    
50      integer nq      integer nq
51        REAL, intent(in):: clesphy0(:)
52    
53      INTEGER longcles      ! Variables dynamiques:
     PARAMETER (longcles = 20)  
     REAL clesphy0(longcles)  
   
     ! variables dynamiques  
54      REAL vcov(ip1jm, llm), ucov(ip1jmp1, llm) ! vents covariants      REAL vcov(ip1jm, llm), ucov(ip1jmp1, llm) ! vents covariants
55      REAL teta(ip1jmp1, llm) ! temperature potentielle      REAL teta(ip1jmp1, llm) ! temperature potentielle
56      REAL q(ip1jmp1, llm, nqmx) ! mass fractions of advected fields      REAL q(ip1jmp1, llm, nqmx) ! mass fractions of advected fields
57      REAL ps(ip1jmp1) ! pression au sol      REAL ps(ip1jmp1) ! pression au sol, en Pa
58      REAL p(ip1jmp1, llmp1) ! pression aux interfac.des couches      REAL masse(ip1jmp1, llm) ! masse d'air
59        REAL phis(ip1jmp1) ! geopotentiel au sol
60    
61        REAL time_0
62    
63        ! Variables local to the procedure:
64    
65        ! Variables dynamiques:
66    
67      REAL pks(ip1jmp1) ! exner au sol      REAL pks(ip1jmp1) ! exner au sol
68      REAL pk(ip1jmp1, llm) ! exner au milieu des couches      REAL pk(ip1jmp1, llm) ! exner au milieu des couches
69      REAL pkf(ip1jmp1, llm) ! exner filt.au milieu des couches      REAL pkf(ip1jmp1, llm) ! exner filt.au milieu des couches
     REAL masse(ip1jmp1, llm) ! masse d'air  
     REAL phis(ip1jmp1) ! geopotentiel au sol  
70      REAL phi(ip1jmp1, llm) ! geopotential      REAL phi(ip1jmp1, llm) ! geopotential
71      REAL w(ip1jmp1, llm) ! vitesse verticale      REAL w(ip1jmp1, llm) ! vitesse verticale
72    
# Line 98  contains Line 99  contains
99      REAL time ! Heure de la journee en fraction d'1 jour      REAL time ! Heure de la journee en fraction d'1 jour
100    
101      REAL SSUM      REAL SSUM
102      REAL time_0, finvmaold(ip1jmp1, llm)      real finvmaold(ip1jmp1, llm)
103    
104      LOGICAL :: lafin=.false.      LOGICAL :: lafin=.false.
105      INTEGER ij, l      INTEGER ij, l
106    
107      REAL rdayvrai, rdaym_ini      REAL rdayvrai, rdaym_ini
108      LOGICAL callinigrads      LOGICAL:: callinigrads = .true.
   
     data callinigrads/.true./  
109    
110      !+jld variables test conservation energie      !+jld variables test conservation energie
111      REAL ecin(ip1jmp1, llm), ecin0(ip1jmp1, llm)      REAL ecin(ip1jmp1, llm), ecin0(ip1jmp1, llm)
# Line 116  contains Line 115  contains
115      REAL dtetaecdt(ip1jmp1, llm)      REAL dtetaecdt(ip1jmp1, llm)
116      REAL vcont(ip1jm, llm), ucont(ip1jmp1, llm)      REAL vcont(ip1jm, llm), ucont(ip1jmp1, llm)
117      CHARACTER*15 ztit      CHARACTER*15 ztit
118      INTEGER ip_ebil_dyn ! PRINT level for energy conserv. diag.      INTEGER:: ip_ebil_dyn = 0 ! PRINT level for energy conserv. diag.
119      SAVE ip_ebil_dyn  
120      DATA ip_ebil_dyn /0/      logical:: dissip_conservative = .true.
121        LOGICAL:: prem = .true.
122      character(len=*), parameter:: modname = "leapfrog"      logical forward, leapf, apphys, conser, apdiss
     character*80 abort_message  
   
     logical dissip_conservative  
     save dissip_conservative  
     data dissip_conservative /.true./  
   
     LOGICAL prem  
     save prem  
     DATA prem /.true./  
123    
124      !---------------------------------------------------      !---------------------------------------------------
125    
# Line 148  contains Line 138  contains
138    
139      ! On initialise la pression et la fonction d'Exner :      ! On initialise la pression et la fonction d'Exner :
140      dq=0.      dq=0.
141      CALL pression(ip1jmp1, ap, bp, ps, p)      CALL pression(ip1jmp1, ap, bp, ps, p3d)
142      CALL exner_hyb(ps, p, pks, pk, pkf)      CALL exner_hyb(ps, p3d, pks, pk, pkf)
143    
144      ! Debut de l'integration temporelle:      ! Debut de l'integration temporelle:
145      do      outer_loop:do
146         if (ok_guide.and.(itaufin - itau - 1) * dtvr > 21600) then         if (ok_guide.and.(itaufin - itau - 1) * dtvr > 21600) then
147            call guide(itau, ucov, vcov, teta, q, masse, ps)            call guide(itau, ucov, vcov, teta, q, masse, ps)
148         else         else
# Line 177  contains Line 167  contains
167            ! gestion des appels de la physique et des dissipations:            ! gestion des appels de la physique et des dissipations:
168    
169            apphys = .FALSE.            apphys = .FALSE.
           statcl = .FALSE.  
170            conser = .FALSE.            conser = .FALSE.
171            apdiss = .FALSE.            apdiss = .FALSE.
172    
# Line 196  contains Line 185  contains
185            ! calcul des tendances advection des traceurs (dont l'humidite)            ! calcul des tendances advection des traceurs (dont l'humidite)
186    
187            IF (forward .OR. leapf) THEN            IF (forward .OR. leapf) THEN
188               CALL caladvtrac(q, pbaru, pbarv, p, masse, dq, teta, pk)               CALL caladvtrac(q, pbaru, pbarv, p3d, masse, dq, teta, pk)
189               IF (offline) THEN               IF (offline) THEN
190                  !maf stokage du flux de masse pour traceurs OFF-LINE                  !maf stokage du flux de masse pour traceurs OFF-LINE
191                  CALL fluxstokenc(pbaru, pbarv, masse, teta, phi, phis, dtvr, &                  CALL fluxstokenc(pbaru, pbarv, masse, teta, phi, phis, dtvr, &
# Line 206  contains Line 195  contains
195    
196            ! integrations dynamique et traceurs:            ! integrations dynamique et traceurs:
197            CALL integrd(2, vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, &            CALL integrd(2, vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, &
198                 dteta, dq, dp, vcov, ucov, teta, q, ps, masse, phis, finvmaold)                 dteta, dq, dp, vcov, ucov, teta, q, ps, masse, phis, &
199                   finvmaold, leapf)
200    
201            ! calcul des tendances physiques:            ! calcul des tendances physiques:
202    
203            IF (apphys) THEN            IF (apphys) THEN
204               IF (itau + 1 == itaufin) lafin = .TRUE.               IF (itau + 1 == itaufin) lafin = .TRUE.
205    
206               CALL pression(ip1jmp1, ap, bp, ps, p)               CALL pression(ip1jmp1, ap, bp, ps, p3d)
207               CALL exner_hyb(ps, p, pks, pk, pkf)               CALL exner_hyb(ps, p3d, pks, pk, pkf)
208    
209               rdaym_ini = itau * dtvr / daysec               rdaym_ini = itau * dtvr / daysec
210               rdayvrai = rdaym_ini + day_ini               rdayvrai = rdaym_ini + day_ini
# Line 224  contains Line 214  contains
214               ! Diagnostique de conservation de l'énergie : initialisation               ! Diagnostique de conservation de l'énergie : initialisation
215               IF (ip_ebil_dyn >= 1) THEN               IF (ip_ebil_dyn >= 1) THEN
216                  ztit='bil dyn'                  ztit='bil dyn'
217                  CALL diagedyn(ztit, 2, 1, 1, dtphys &                  CALL diagedyn(ztit, 2, 1, 1, dtphys, ucov, vcov, ps, p3d, pk, &
218                       , ucov, vcov, ps, p, pk, teta, q(:, :, 1), q(:, :, 2))                       teta, q(:, :, 1), q(:, :, 2))
219               ENDIF               ENDIF
220    
221               CALL calfis(nq, lafin, rdayvrai, time, ucov, vcov, teta, q, &               CALL calfis(nq, lafin, rdayvrai, time, ucov, vcov, teta, q, &
222                    masse, ps, p, pk, phis, phi, du, dv, dteta, dq, w, &                    masse, ps, pk, phis, phi, du, dv, dteta, dq, w, &
223                    clesphy0, dufi, dvfi, dtetafi, dqfi, dpfi)                    clesphy0, dufi, dvfi, dtetafi, dqfi, dpfi)
224    
225               ! ajout des tendances physiques:               ! ajout des tendances physiques:
# Line 240  contains Line 230  contains
230               ! Diagnostique de conservation de l'énergie : difference               ! Diagnostique de conservation de l'énergie : difference
231               IF (ip_ebil_dyn >= 1) THEN               IF (ip_ebil_dyn >= 1) THEN
232                  ztit = 'bil phys'                  ztit = 'bil phys'
233                  CALL diagedyn(ztit, 2, 1, 1, dtphys, ucov, vcov, ps, p, pk, &                  CALL diagedyn(ztit, 2, 1, 1, dtphys, ucov, vcov, ps, p3d, pk, &
234                       teta, q(:, :, 1), q(:, :, 2))                       teta, q(:, :, 1), q(:, :, 2))
235               ENDIF               ENDIF
236            ENDIF            ENDIF
237    
238            CALL pression(ip1jmp1, ap, bp, ps, p)            CALL pression(ip1jmp1, ap, bp, ps, p3d)
239            CALL exner_hyb(ps, p, pks, pk, pkf)            CALL exner_hyb(ps, p3d, pks, pk, pkf)
240    
241            ! dissipation horizontale et verticale des petites echelles:            ! dissipation horizontale et verticale des petites echelles:
242    
# Line 256  contains Line 246  contains
246               call enercin(vcov, ucov, vcont, ucont, ecin0)               call enercin(vcov, ucov, vcont, ucont, ecin0)
247    
248               ! dissipation               ! dissipation
249               CALL dissip(vcov, ucov, teta, p, dvdis, dudis, dtetadis)               CALL dissip(vcov, ucov, teta, p3d, dvdis, dudis, dtetadis)
250               ucov=ucov + dudis               ucov=ucov + dudis
251               vcov=vcov + dvdis               vcov=vcov + dvdis
252    
# Line 315  contains Line 305  contains
305               ENDIF               ENDIF
306            ENDIF            ENDIF
307    
308            IF (itau == itaufinp1) then            IF (itau == itaufinp1) exit outer_loop
              abort_message = 'Simulation finished'  
              call abort_gcm(modname, abort_message, 0)  
           ENDIF  
309    
310            ! ecriture du fichier histoire moyenne:            ! ecriture du fichier histoire moyenne:
311    
# Line 332  contains Line 319  contains
319            ENDIF            ENDIF
320    
321            IF (itau == itaufin) THEN            IF (itau == itaufin) THEN
322               CALL dynredem1("restart.nc", 0.0, &               CALL dynredem1("restart.nc", 0., vcov, ucov, teta, q, masse, ps)
                   vcov, ucov, teta, q, nqmx, masse, ps)  
323               CLOSE(99)               CLOSE(99)
324            ENDIF            ENDIF
325    
# Line 356  contains Line 342  contains
342               dt = 2. * dtvr               dt = 2. * dtvr
343            END IF            END IF
344         end do         end do
345      end do      end do outer_loop
346    
347    END SUBROUTINE leapfrog    END SUBROUTINE leapfrog
348    

Legend:
Removed from v.3  
changed lines
  Added in v.12

  ViewVC Help
Powered by ViewVC 1.1.21