/[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 91 by guez, Wed Mar 26 17:18:58 2014 UTC revision 108 by guez, Tue Sep 16 14:00:41 2014 UTC
# Line 15  contains Line 15  contains
15      use caladvtrac_m, only: caladvtrac      use caladvtrac_m, only: caladvtrac
16      use caldyn_m, only: caldyn      use caldyn_m, only: caldyn
17      USE calfis_m, ONLY: calfis      USE calfis_m, ONLY: calfis
18      USE comconst, ONLY: daysec, dtphys, dtvr      USE comconst, ONLY: daysec, dtvr
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, &
# Line 120  contains Line 120  contains
120         else         else
121            ! Matsuno            ! Matsuno
122            dt = dtvr            dt = dtvr
123            if (ok_guide .and. (itaufin - itau - 1) * dtvr > 21600.) &            if (ok_guide) call guide(itau, ucov, vcov, teta, q(:, :, :, 1), ps)
                call guide(itau, ucov, vcov, teta, q, masse, ps)  
124            vcovm1 = vcov            vcovm1 = vcov
125            ucovm1 = ucov            ucovm1 = ucov
126            tetam1 = teta            tetam1 = teta
127            massem1 = masse            massem1 = masse
128            psm1 = ps            psm1 = ps
129            finvmaold = masse            finvmaold = masse
130            CALL filtreg(finvmaold, jjm + 1, llm, - 2, 2, .TRUE.)            CALL filtreg(finvmaold, direct = .false., intensive = .false.)
131         end if         end if
132    
133         ! Calcul des tendances dynamiques:         ! Calcul des tendances dynamiques:
# Line 148  contains Line 147  contains
147              dp, vcov, ucov, teta, q(:, :, :, :2), ps, masse, finvmaold, dt, &              dp, vcov, ucov, teta, q(:, :, :, :2), ps, masse, finvmaold, dt, &
148              leapf)              leapf)
149    
150           forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps
151           CALL exner_hyb(ps, p3d, pks, pk, pkf)
152    
153         if (.not. leapf) then         if (.not. leapf) then
154            ! Matsuno backward            ! Matsuno backward
           forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps  
           CALL exner_hyb(ps, p3d, pks, pk, pkf)  
   
155            ! Calcul des tendances dynamiques:            ! Calcul des tendances dynamiques:
156            CALL geopot(teta, pk, pks, phis, phi)            CALL geopot(teta, pk, pks, phis, phi)
157            CALL caldyn(itau + 1, ucov, vcov, teta, ps, masse, pk, pkf, phis, &            CALL caldyn(itau + 1, ucov, vcov, teta, ps, masse, pk, pkf, phis, &
# Line 163  contains Line 162  contains
162            CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, dudyn, &            CALL integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, dudyn, &
163                 dteta, dp, vcov, ucov, teta, q(:, :, :, :2), ps, masse, &                 dteta, dp, vcov, ucov, teta, q(:, :, :, :2), ps, masse, &
164                 finvmaold, dtvr, leapf=.false.)                 finvmaold, dtvr, leapf=.false.)
165    
166              forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps
167              CALL exner_hyb(ps, p3d, pks, pk, pkf)
168         end if         end if
169    
170         IF (MOD(itau + 1, iphysiq) == 0 .AND. iflag_phys /= 0) THEN         IF (MOD(itau + 1, iphysiq) == 0 .AND. iflag_phys /= 0) THEN
171            ! Calcul des tendances physiques:            ! Calcul des tendances physiques:
172    
           forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps  
           CALL exner_hyb(ps, p3d, pks, pk, pkf)  
   
173            rdaym_ini = itau * dtvr / daysec            rdaym_ini = itau * dtvr / daysec
174            rdayvrai = rdaym_ini + day_ini            rdayvrai = rdaym_ini + day_ini
175            time = REAL(mod(itau, day_step)) / day_step + time_0            time = REAL(mod(itau, day_step)) / day_step + time_0
176            IF (time > 1.) time = time - 1.            IF (time > 1.) time = time - 1.
177    
178            CALL calfis(rdayvrai, time, ucov, vcov, teta, q, ps, pk, phis, phi, &            CALL calfis(rdayvrai, time, ucov, vcov, teta, q, pk, phis, phi, w, &
179                 w, dufi, dvfi, dtetafi, dqfi, lafin = itau + 1 == itaufin)                 dufi, dvfi, dtetafi, dqfi, lafin = itau + 1 == itaufin)
180    
181            ! Ajout des tendances physiques:            ! Ajout des tendances physiques:
182            CALL addfi(ucov, vcov, teta, q, dufi, dvfi, dtetafi, dqfi)            CALL addfi(ucov, vcov, teta, q, dufi, dvfi, dtetafi, dqfi)
183         ENDIF         ENDIF
184    
        forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps  
        CALL exner_hyb(ps, p3d, pks, pk, pkf)  
   
185         IF (MOD(itau + 1, idissip) == 0) THEN         IF (MOD(itau + 1, idissip) == 0) THEN
186            ! Dissipation horizontale et verticale des petites \'echelles            ! Dissipation horizontale et verticale des petites \'echelles
187    

Legend:
Removed from v.91  
changed lines
  Added in v.108

  ViewVC Help
Powered by ViewVC 1.1.21