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

Diff of /trunk/dyn3d/leapfrog.f

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

revision 31 by guez, Thu Apr 1 14:59:19 2010 UTC revision 32 by guez, Tue Apr 6 17:52:58 2010 UTC
# Line 24  contains Line 24  contains
24      use filtreg_m, only: filtreg      use filtreg_m, only: filtreg
25      USE guide_m, ONLY: guide      USE guide_m, ONLY: guide
26      use inidissip_m, only: idissip      use inidissip_m, only: idissip
27        use integrd_m, only: integrd
28      USE logic, ONLY: iflag_phys, ok_guide      USE logic, ONLY: iflag_phys, ok_guide
29      USE paramet_m, ONLY: ip1jmp1      USE paramet_m, ONLY: ip1jmp1
30      USE pression_m, ONLY: pression      USE pression_m, ONLY: pression
# Line 31  contains Line 32  contains
32      USE temps, ONLY: itau_dyn      USE temps, ONLY: itau_dyn
33    
34      ! Variables dynamiques:      ! Variables dynamiques:
35      REAL vcov((iim + 1) * jjm, llm), ucov(ip1jmp1, llm) ! vents covariants      REAL, intent(inout):: vcov((iim + 1) * jjm, llm) ! vent covariant
36        REAL, intent(inout):: ucov(ip1jmp1, llm) ! vent covariant
37      REAL, intent(inout):: teta(iim + 1, jjm + 1, llm) ! potential temperature      REAL, intent(inout):: teta(iim + 1, jjm + 1, llm) ! potential temperature
38      REAL ps(iim + 1, jjm + 1) ! pression au sol, en Pa      REAL ps(iim + 1, jjm + 1) ! pression au sol, en Pa
39    
# Line 89  contains Line 91  contains
91      ! cree par la dissipation      ! cree par la dissipation
92      REAL dtetaecdt(iim + 1, jjm + 1, llm)      REAL dtetaecdt(iim + 1, jjm + 1, llm)
93      REAL vcont((iim + 1) * jjm, llm), ucont(ip1jmp1, llm)      REAL vcont((iim + 1) * jjm, llm), ucont(ip1jmp1, llm)
     logical forward, leapf  
     REAL dt  
94    
95      !---------------------------------------------------      !---------------------------------------------------
96    
# Line 108  contains Line 108  contains
108      CALL exner_hyb(ps, p3d, pks, pk, pkf)      CALL exner_hyb(ps, p3d, pks, pk, pkf)
109    
110      ! Début de l'integration temporelle :      ! Début de l'integration temporelle :
111      outer_loop:do i = 1, itaufin / iperiod      period_loop:do i = 1, itaufin / iperiod
112         ! {itau is a multiple of iperiod}         ! {"itau" is a multiple of "iperiod"}
113    
114         ! 1. Matsuno forward:         ! 1. Matsuno forward:
115    
# Line 137  contains Line 137  contains
137    
138         ! integrations dynamique et traceurs:         ! integrations dynamique et traceurs:
139         CALL integrd(2, vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, dteta, &         CALL integrd(2, vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, dteta, &
140              dq, dp, vcov, ucov, teta, q, ps, masse, phis, finvmaold, .false., &              dp, vcov, ucov, teta, q, ps, masse, finvmaold, .false., &
141              dtvr)              dtvr)
142    
143         CALL pression(ip1jmp1, ap, bp, ps, p3d)         CALL pression(ip1jmp1, ap, bp, ps, p3d)
# Line 160  contains Line 160  contains
160    
161         ! integrations dynamique et traceurs:         ! integrations dynamique et traceurs:
162         CALL integrd(2, vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, dteta, &         CALL integrd(2, vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, dteta, &
163              dq, dp, vcov, ucov, teta, q, ps, masse, phis, finvmaold, .false., &              dp, vcov, ucov, teta, q, ps, masse, finvmaold, .false., &
164              dtvr)              dtvr)
165    
166         CALL pression(ip1jmp1, ap, bp, ps, p3d)         CALL pression(ip1jmp1, ap, bp, ps, p3d)
# Line 168  contains Line 168  contains
168    
169         ! 3. Leapfrog:         ! 3. Leapfrog:
170    
171         do j = 1, iperiod - 1         leapfrog_loop: do j = 1, iperiod - 1
172            ! Calcul des tendances dynamiques:            ! Calcul des tendances dynamiques:
173            CALL geopot(ip1jmp1, teta, pk, pks, phis, phi)            CALL geopot(ip1jmp1, teta, pk, pks, phis, phi)
174            CALL caldyn(itau, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, &            CALL caldyn(itau, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, &
# Line 183  contains Line 183  contains
183    
184            ! integrations dynamique et traceurs:            ! integrations dynamique et traceurs:
185            CALL integrd(2, vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, &            CALL integrd(2, vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, &
186                 dteta, dq, dp, vcov, ucov, teta, q, ps, masse, phis, &                 dteta, dp, vcov, ucov, teta, q, ps, masse, &
187                 finvmaold, .true., 2 * dtvr)                 finvmaold, .true., 2 * dtvr)
188    
189            IF (MOD(itau + 1, iphysiq) == 0 .AND. iflag_phys /= 0) THEN            IF (MOD(itau + 1, iphysiq) == 0 .AND. iflag_phys /= 0) THEN
# Line 228  contains Line 228  contains
228               dtetadis=dtetadis + dtetaecdt               dtetadis=dtetadis + dtetaecdt
229               teta=teta + dtetadis               teta=teta + dtetadis
230    
231               ! Calcul de la valeur moyenne unique de h aux pôles               ! Calcul de la valeur moyenne aux pôles :
232               forall (l = 1: llm)               forall (l = 1: llm)
233                  teta(:, 1, l) = SUM(aire_2d(:iim, 1) * teta(:iim, 1, l)) &                  teta(:, 1, l) = SUM(aire_2d(:iim, 1) * teta(:iim, 1, l)) &
234                       / apoln                       / apoln
# Line 256  contains Line 256  contains
256               call bilan_dyn(2, dtvr * iperiod, dtvr * day_step * periodav, &               call bilan_dyn(2, dtvr * iperiod, dtvr * day_step * periodav, &
257                    ps, masse, pk, pbaru, pbarv, teta, phi, ucov, vcov, q)                    ps, masse, pk, pbaru, pbarv, teta, phi, ucov, vcov, q)
258            ENDIF            ENDIF
259         end do         end do leapfrog_loop
260      end do outer_loop      end do period_loop
261    
262      ! {itau == itaufin}      ! {itau == itaufin}
263      CALL dynredem1("restart.nc", vcov, ucov, teta, q, masse, ps, &      CALL dynredem1("restart.nc", vcov, ucov, teta, q, masse, ps, &
264           itau=itau_dyn+itaufin)           itau=itau_dyn+itaufin)
265    
     vcovm1 = vcov  
     ucovm1 = ucov  
     tetam1 = teta  
     massem1 = masse  
     psm1 = ps  
     finvmaold = masse  
     CALL filtreg(finvmaold, jjm + 1, llm, - 2, 2, .TRUE., 1)  
   
266      ! Calcul des tendances dynamiques:      ! Calcul des tendances dynamiques:
267      CALL geopot(ip1jmp1, teta, pk, pks, phis, phi)      CALL geopot(ip1jmp1, teta, pk, pks, phis, phi)
268      CALL caldyn(itaufin, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, &      CALL caldyn(itaufin, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, &
269           MOD(itaufin, iconser) == 0, du, dv, dteta, dp, w, pbaru, pbarv, &           MOD(itaufin, iconser) == 0, du, dv, dteta, dp, w, pbaru, pbarv, &
270           time + iday - day_ini)           time + iday - day_ini)
271    
     ! Calcul des tendances advection des traceurs (dont l'humidité)  
     CALL caladvtrac(q, pbaru, pbarv, p3d, masse, dq, teta, pk)  
     ! Stokage du flux de masse pour traceurs off-line:  
     IF (offline) CALL fluxstokenc(pbaru, pbarv, masse, teta, phi, phis, dtvr, &  
          itaufin)  
   
272    END SUBROUTINE leapfrog    END SUBROUTINE leapfrog
273    
274  end module leapfrog_m  end module leapfrog_m

Legend:
Removed from v.31  
changed lines
  Added in v.32

  ViewVC Help
Powered by ViewVC 1.1.21