/[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 67 by guez, Tue Oct 2 15:50:56 2012 UTC revision 70 by guez, Mon Jun 24 15:39:52 2013 UTC
# Line 19  contains Line 19  contains
19      USE comgeom, ONLY: aire_2d, apoln, apols      USE comgeom, ONLY: aire_2d, apoln, apols
20      USE disvert_m, ONLY: ap, bp      USE disvert_m, ONLY: ap, bp
21      USE conf_gcm_m, ONLY: day_step, iconser, iperiod, iphysiq, nday, offline, &      USE conf_gcm_m, ONLY: day_step, iconser, iperiod, iphysiq, nday, offline, &
22           iflag_phys, ok_guide           iflag_phys, ok_guide, iecri
23      USE dimens_m, ONLY: iim, jjm, llm, nqmx      USE dimens_m, ONLY: iim, jjm, llm, nqmx
24      use dissip_m, only: dissip      use dissip_m, only: dissip
25      USE dynetat0_m, ONLY: day_ini      USE dynetat0_m, ONLY: day_ini
26      use dynredem1_m, only: dynredem1      use dynredem1_m, only: dynredem1
27      USE exner_hyb_m, ONLY: exner_hyb      USE exner_hyb_m, ONLY: exner_hyb
28      use filtreg_m, only: filtreg      use filtreg_m, only: filtreg
29        use fluxstokenc_m, only: fluxstokenc
30      use geopot_m, only: geopot      use geopot_m, only: geopot
31      USE guide_m, ONLY: guide      USE guide_m, ONLY: guide
32      use inidissip_m, only: idissip      use inidissip_m, only: idissip
# Line 34  contains Line 35  contains
35      USE pressure_var, ONLY: p3d      USE pressure_var, ONLY: p3d
36      USE temps, ONLY: itau_dyn      USE temps, ONLY: itau_dyn
37      use writedynav_m, only: writedynav      use writedynav_m, only: writedynav
38        use writehist_m, only: writehist
39    
40      ! Variables dynamiques:      ! Variables dynamiques:
41      REAL, intent(inout):: ucov(:, :, :) ! (iim + 1, jjm + 1, llm) vent covariant      REAL, intent(inout):: ucov(:, :, :) ! (iim + 1, jjm + 1, llm) vent covariant
# Line 43  contains Line 45  contains
45      ! potential temperature      ! potential temperature
46    
47      REAL, intent(inout):: ps(:, :) ! (iim + 1, jjm + 1) pression au sol, en Pa      REAL, intent(inout):: ps(:, :) ! (iim + 1, jjm + 1) pression au sol, en Pa
48      REAL masse(:, :, :) ! (iim + 1, jjm + 1, llm) masse d'air      REAL, intent(inout):: masse(:, :, :) ! (iim + 1, jjm + 1, llm) masse d'air
49      REAL phis(:, :) ! (iim + 1, jjm + 1) geopotentiel au sol      REAL, intent(in):: phis(:, :) ! (iim + 1, jjm + 1) surface geopotential
50    
51      REAL, intent(inout):: q(:, :, :, :) ! (iim + 1, jjm + 1, llm, nqmx)      REAL, intent(inout):: q(:, :, :, :) ! (iim + 1, jjm + 1, llm, nqmx)
52      ! mass fractions of advected fields      ! mass fractions of advected fields
# Line 55  contains Line 57  contains
57    
58      ! Variables dynamiques:      ! Variables dynamiques:
59    
60      REAL pks((iim + 1) * (jjm + 1)) ! exner au sol      REAL pks(iim + 1, jjm + 1) ! exner au sol
61      REAL pk(iim + 1, jjm + 1, llm) ! exner au milieu des couches      REAL pk(iim + 1, jjm + 1, llm) ! exner au milieu des couches
62      REAL pkf(iim + 1, jjm + 1, llm) ! exner filtré au milieu des couches      REAL pkf(iim + 1, jjm + 1, llm) ! exner filtré au milieu des couches
63      REAL phi(iim + 1, jjm + 1, llm) ! geopotential      REAL phi(iim + 1, jjm + 1, llm) ! geopotential
# Line 133  contains Line 135  contains
135         end if         end if
136    
137         ! Calcul des tendances dynamiques:         ! Calcul des tendances dynamiques:
138         CALL geopot((iim + 1) * (jjm + 1), teta, pk, pks, phis, phi)         CALL geopot(teta, pk, pks, phis, phi)
139         CALL caldyn(itau, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, &         CALL caldyn(itau, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, &
140              dudyn, dv, dteta, dp, w, pbaru, pbarv, time_0, &              dudyn, dv, dteta, dp, w, pbaru, pbarv, time_0, &
141              conser=MOD(itau, iconser)==0)              conser=MOD(itau, iconser)==0)
# Line 145  contains Line 147  contains
147         IF (offline) CALL fluxstokenc(pbaru, pbarv, masse, teta, phi, phis, &         IF (offline) CALL fluxstokenc(pbaru, pbarv, masse, teta, phi, phis, &
148              dtvr, itau)              dtvr, itau)
149    
150         ! Integrations dynamique et traceurs:         ! Intégrations dynamique et traceurs:
151         CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, dudyn, dteta, &         CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, dudyn, dteta, &
152              dp, vcov, ucov, teta, q(:, :, :, :2), ps, masse, finvmaold, dt, &              dp, vcov, ucov, teta, q(:, :, :, :2), ps, masse, finvmaold, dt, &
153              leapf)              leapf)
# Line 156  contains Line 158  contains
158            CALL exner_hyb(ps, p3d, pks, pk, pkf)            CALL exner_hyb(ps, p3d, pks, pk, pkf)
159    
160            ! Calcul des tendances dynamiques:            ! Calcul des tendances dynamiques:
161            CALL geopot((iim + 1) * (jjm + 1), teta, pk, pks, phis, phi)            CALL geopot(teta, pk, pks, phis, phi)
162            CALL caldyn(itau + 1, ucov, vcov, teta, ps, masse, pk, pkf, phis, &            CALL caldyn(itau + 1, ucov, vcov, teta, ps, masse, pk, pkf, phis, &
163                 phi, dudyn, dv, dteta, dp, w, pbaru, pbarv, time_0, &                 phi, dudyn, dv, dteta, dp, w, pbaru, pbarv, time_0, &
164                 conser=.false.)                 conser=.false.)
# Line 168  contains Line 170  contains
170         end if         end if
171    
172         IF (MOD(itau + 1, iphysiq) == 0 .AND. iflag_phys /= 0) THEN         IF (MOD(itau + 1, iphysiq) == 0 .AND. iflag_phys /= 0) THEN
173            ! calcul des tendances physiques:            ! Calcul des tendances physiques:
174    
175            forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps            forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps
176            CALL exner_hyb(ps, p3d, pks, pk, pkf)            CALL exner_hyb(ps, p3d, pks, pk, pkf)
# Line 182  contains Line 184  contains
184                 phis, phi, dudyn, dv, dq, w, dufi, dvfi, dtetafi, dqfi, dpfi, &                 phis, phi, dudyn, dv, dq, w, dufi, dvfi, dtetafi, dqfi, dpfi, &
185                 lafin = itau + 1 == itaufin)                 lafin = itau + 1 == itaufin)
186    
187            ! ajout des tendances physiques:            ! Ajout des tendances physiques:
188            CALL addfi(nqmx, dtphys, ucov, vcov, teta, q, ps, dufi, dvfi, &            CALL addfi(nqmx, ucov, vcov, teta, q, ps, dufi, dvfi, dtetafi, &
189                 dtetafi, dqfi, dpfi)                 dqfi, dpfi)
190         ENDIF         ENDIF
191    
192         forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps         forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps
# Line 229  contains Line 231  contains
231            call bilan_dyn(ps, masse, pk, pbaru, pbarv, teta, phi, ucov, vcov, &            call bilan_dyn(ps, masse, pk, pbaru, pbarv, teta, phi, ucov, vcov, &
232                 q(:, :, :, 1))                 q(:, :, :, 1))
233         ENDIF         ENDIF
234    
235           IF (MOD(itau + 1, iecri * day_step) == 0) THEN
236              CALL geopot(teta, pk, pks, phis, phi)
237              CALL writehist(itau, vcov, ucov, teta, phi, q, masse, ps)
238           END IF
239      end do time_integration      end do time_integration
240    
241      CALL dynredem1("restart.nc", vcov, ucov, teta, q, masse, ps, &      CALL dynredem1("restart.nc", vcov, ucov, teta, q, masse, ps, &
242           itau = itau_dyn + itaufin)           itau = itau_dyn + itaufin)
243    
244      ! Calcul des tendances dynamiques:      ! Calcul des tendances dynamiques:
245      CALL geopot((iim + 1) * (jjm + 1), teta, pk, pks, phis, phi)      CALL geopot(teta, pk, pks, phis, phi)
246      CALL caldyn(itaufin, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, &      CALL caldyn(itaufin, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, &
247           dudyn, dv, dteta, dp, w, pbaru, pbarv, time_0, &           dudyn, dv, dteta, dp, w, pbaru, pbarv, time_0, &
248           conser = MOD(itaufin, iconser) == 0)           conser = MOD(itaufin, iconser) == 0)

Legend:
Removed from v.67  
changed lines
  Added in v.70

  ViewVC Help
Powered by ViewVC 1.1.21