/[lmdze]/trunk/dyn3d/leapfrog.f90
ViewVC logotype

Diff of /trunk/dyn3d/leapfrog.f90

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

revision 33 by guez, Fri Apr 9 10:56:14 2010 UTC revision 41 by guez, Tue Feb 22 15:09:57 2011 UTC
# Line 8  contains Line 8  contains
8    
9      ! From dyn3d/leapfrog.F, version 1.6, 2005/04/13 08:58:34      ! From dyn3d/leapfrog.F, version 1.6, 2005/04/13 08:58:34
10      ! Authors: P. Le Van, L. Fairhead, F. Hourdin      ! Authors: P. Le Van, L. Fairhead, F. Hourdin
11      ! schema matsuno + leapfrog      ! Matsuno-leapfrog scheme.
12    
13        use addfi_m, only: addfi
14        use bilan_dyn_m, only: bilan_dyn
15        use caladvtrac_m, only: caladvtrac
16      USE calfis_m, ONLY: calfis      USE calfis_m, ONLY: calfis
17      USE com_io_dyn, ONLY: histaveid      USE com_io_dyn, ONLY: histaveid
18      USE comconst, ONLY: daysec, dtphys, dtvr      USE comconst, ONLY: daysec, dtphys, dtvr
# Line 27  contains Line 30  contains
30      use integrd_m, only: integrd      use integrd_m, only: integrd
31      USE logic, ONLY: iflag_phys, ok_guide      USE logic, ONLY: iflag_phys, ok_guide
32      USE paramet_m, ONLY: ip1jmp1      USE paramet_m, ONLY: ip1jmp1
     USE pression_m, ONLY: pression  
33      USE pressure_var, ONLY: p3d      USE pressure_var, ONLY: p3d
34      USE temps, ONLY: itau_dyn      USE temps, ONLY: itau_dyn
35    
36      ! Variables dynamiques:      ! Variables dynamiques:
     REAL, intent(inout):: vcov((iim + 1) * jjm, llm) ! vent covariant  
37      REAL, intent(inout):: ucov(ip1jmp1, llm) ! vent covariant      REAL, intent(inout):: ucov(ip1jmp1, llm) ! vent covariant
38        REAL, intent(inout):: vcov((iim + 1) * jjm, llm) ! vent covariant
39      REAL, intent(inout):: teta(iim + 1, jjm + 1, llm) ! potential temperature      REAL, intent(inout):: teta(iim + 1, jjm + 1, llm) ! potential temperature
40      REAL ps(iim + 1, jjm + 1) ! pression au sol, en Pa      REAL, intent(inout):: ps(iim + 1, jjm + 1) ! pression au sol, en Pa
   
41      REAL masse(ip1jmp1, llm) ! masse d'air      REAL masse(ip1jmp1, llm) ! masse d'air
42      REAL phis(ip1jmp1) ! geopotentiel au sol      REAL phis(ip1jmp1) ! geopotentiel au sol
43      REAL q(ip1jmp1, llm, nqmx) ! mass fractions of advected fields  
44        REAL, intent(inout):: q(:, :, :, :) ! (iim + 1, jjm + 1, llm, nqmx)
45        ! mass fractions of advected fields
46    
47      REAL, intent(in):: time_0      REAL, intent(in):: time_0
48    
49      ! Variables local to the procedure:      ! Variables local to the procedure:
# Line 101  contains Line 105  contains
105      dq = 0.      dq = 0.
106    
107      ! On initialise la pression et la fonction d'Exner :      ! On initialise la pression et la fonction d'Exner :
108      CALL pression(ip1jmp1, ap, bp, ps, p3d)      forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps
109      CALL exner_hyb(ps, p3d, pks, pk, pkf)      CALL exner_hyb(ps, p3d, pks, pk, pkf)
110    
111      ! Début de l'integration temporelle :      time_integration: do itau = 0, itaufin - 1
     do itau = 0, itaufin - 1  
112         leapf = mod(itau, iperiod) /= 0         leapf = mod(itau, iperiod) /= 0
113         if (leapf) then         if (leapf) then
114            dt = 2 * dtvr            dt = 2 * dtvr
# Line 137  contains Line 140  contains
140              dtvr, itau)              dtvr, itau)
141    
142         ! integrations dynamique et traceurs:         ! integrations dynamique et traceurs:
143         CALL integrd(2, vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, dteta, &         CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, dteta, dp, &
144              dp, vcov, ucov, teta, q, ps, masse, finvmaold, leapf, dt)              vcov, ucov, teta, q(:, :, :, :2), ps, masse, finvmaold, dt, leapf)
145    
146         if (.not. leapf) then         if (.not. leapf) then
147            ! Matsuno backward            ! Matsuno backward
148            CALL pression(ip1jmp1, ap, bp, ps, p3d)            forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps
149            CALL exner_hyb(ps, p3d, pks, pk, pkf)            CALL exner_hyb(ps, p3d, pks, pk, pkf)
150    
151            ! Calcul des tendances dynamiques:            ! Calcul des tendances dynamiques:
# Line 151  contains Line 154  contains
154                 phi, .false., du, dv, dteta, dp, w, pbaru, pbarv, time_0)                 phi, .false., du, dv, dteta, dp, w, pbaru, pbarv, time_0)
155    
156            ! integrations dynamique et traceurs:            ! integrations dynamique et traceurs:
157            CALL integrd(2, vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, &            CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, dteta, &
158                 dteta, dp, vcov, ucov, teta, q, ps, masse, finvmaold, .false., &                 dp, vcov, ucov, teta, q(:, :, :, :2), ps, masse, finvmaold, &
159                 dtvr)                 dtvr, leapf=.false.)
160         end if         end if
161    
162         IF (MOD(itau + 1, iphysiq) == 0 .AND. iflag_phys /= 0) THEN         IF (MOD(itau + 1, iphysiq) == 0 .AND. iflag_phys /= 0) THEN
163            ! calcul des tendances physiques:            ! calcul des tendances physiques:
164    
165            CALL pression(ip1jmp1, ap, bp, ps, p3d)            forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps
166            CALL exner_hyb(ps, p3d, pks, pk, pkf)            CALL exner_hyb(ps, p3d, pks, pk, pkf)
167    
168            rdaym_ini = itau * dtvr / daysec            rdaym_ini = itau * dtvr / daysec
# Line 167  contains Line 170  contains
170            time = REAL(mod(itau, day_step)) / day_step + time_0            time = REAL(mod(itau, day_step)) / day_step + time_0
171            IF (time > 1.) time = time - 1.            IF (time > 1.) time = time - 1.
172    
173            CALL calfis(nqmx, itau + 1 == itaufin, rdayvrai, time, ucov, vcov, &            CALL calfis(rdayvrai, time, ucov, vcov, teta, q, masse, ps, pk, &
174                 teta, q, masse, ps, pk, phis, phi, du, dv, dteta, dq, w, dufi, &                 phis, phi, du, dv, dteta, dq, w, dufi, dvfi, dtetafi, dqfi, &
175                 dvfi, dtetafi, dqfi, dpfi)                 dpfi, lafin=itau+1==itaufin)
176    
177            ! ajout des tendances physiques:            ! ajout des tendances physiques:
178            CALL addfi(nqmx, dtphys, ucov, vcov, teta, q, ps, dufi, dvfi, &            CALL addfi(nqmx, dtphys, ucov, vcov, teta, q, ps, dufi, dvfi, &
179                 dtetafi, dqfi, dpfi)                 dtetafi, dqfi, dpfi)
180         ENDIF         ENDIF
181    
182         CALL pression(ip1jmp1, ap, bp, ps, p3d)         forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps
183         CALL exner_hyb(ps, p3d, pks, pk, pkf)         CALL exner_hyb(ps, p3d, pks, pk, pkf)
184    
185         IF (MOD(itau + 1, idissip) == 0) THEN         IF (MOD(itau + 1, idissip) == 0) THEN
# Line 213  contains Line 216  contains
216         END IF         END IF
217    
218         IF (MOD(itau + 1, iperiod) == 0) THEN         IF (MOD(itau + 1, iperiod) == 0) THEN
219            ! ecriture du fichier histoire moyenne:            ! Écriture du fichier histoire moyenne:
220            CALL writedynav(histaveid, nqmx, itau + 1, vcov, ucov, teta, pk, &            CALL writedynav(histaveid, nqmx, itau + 1, vcov, ucov, teta, pk, &
221                 phi, q, masse, ps, phis)                 phi, q, masse, ps, phis)
222            call bilan_dyn(2, dtvr * iperiod, dtvr * day_step * periodav, ps, &            call bilan_dyn(ps, masse, pk, pbaru, pbarv, teta, phi, ucov, vcov, &
223                 masse, pk, pbaru, pbarv, teta, phi, ucov, vcov, q)                 q(:, :, :, 1), dt_app = dtvr * iperiod, &
224                   dt_cum = dtvr * day_step * periodav)
225         ENDIF         ENDIF
226      end do      end do time_integration
227    
228      CALL dynredem1("restart.nc", vcov, ucov, teta, q, masse, ps, &      CALL dynredem1("restart.nc", vcov, ucov, teta, q, masse, ps, &
229           itau=itau_dyn+itaufin)           itau=itau_dyn+itaufin)

Legend:
Removed from v.33  
changed lines
  Added in v.41

  ViewVC Help
Powered by ViewVC 1.1.21