/[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 39 by guez, Tue Jan 25 15:11:05 2011 UTC revision 40 by guez, Tue Feb 22 13:49:36 2011 UTC
# Line 11  contains Line 11  contains
11      ! Matsuno-leapfrog scheme.      ! Matsuno-leapfrog scheme.
12    
13      use addfi_m, only: addfi      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 38  contains Line 40  contains
40      REAL ps(iim + 1, jjm + 1) ! pression au sol, en Pa      REAL 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 103  contains Line 108  contains
108      forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps      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 141  contains
141    
142         ! integrations dynamique et traceurs:         ! integrations dynamique et traceurs:
143         CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, dteta, dp, &         CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, dteta, dp, &
144              vcov, ucov, teta, q(:, :, :2), ps, masse, finvmaold, dt, leapf)              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
# Line 151  contains Line 155  contains
155    
156            ! integrations dynamique et traceurs:            ! integrations dynamique et traceurs:
157            CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, dteta, &            CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, dteta, &
158                 dp, vcov, ucov, teta, q(:, :, :2), ps, masse, finvmaold, dtvr, &                 dp, vcov, ucov, teta, q(:, :, :, :2), ps, masse, finvmaold, &
159                 leapf=.false.)                 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
# Line 212  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.39  
changed lines
  Added in v.40

  ViewVC Help
Powered by ViewVC 1.1.21