/[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 47 by guez, Fri Jul 1 15:00:48 2011 UTC revision 55 by guez, Mon Dec 12 13:25:01 2011 UTC
# Line 32  contains Line 32  contains
32      use inidissip_m, only: idissip      use inidissip_m, only: idissip
33      use integrd_m, only: integrd      use integrd_m, only: integrd
34      USE logic, ONLY: iflag_phys, ok_guide      USE logic, ONLY: iflag_phys, ok_guide
35      USE paramet_m, ONLY: ip1jmp1      use nr_util, only: assert
36      USE pressure_var, ONLY: p3d      USE pressure_var, ONLY: p3d
37      USE temps, ONLY: itau_dyn      USE temps, ONLY: itau_dyn
38    
39      ! Variables dynamiques:      ! Variables dynamiques:
40      REAL, intent(inout):: ucov(ip1jmp1, llm) ! vent covariant      REAL, intent(inout):: ucov(:, :, :) ! (iim + 1, jjm + 1, llm) vent covariant
41      REAL, intent(inout):: vcov((iim + 1) * jjm, llm) ! vent covariant      REAL, intent(inout):: vcov(:, :, :) ! (iim + 1, jjm, llm) ! vent covariant
42    
43      REAL, intent(inout):: teta(:, :, :) ! (iim + 1, jjm + 1, llm)      REAL, intent(inout):: teta(:, :, :) ! (iim + 1, jjm + 1, llm)
44      ! potential temperature      ! potential temperature
45    
46      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
47      REAL masse(ip1jmp1, llm) ! masse d'air      REAL masse((iim + 1) * (jjm + 1), llm) ! masse d'air
48      REAL phis(ip1jmp1) ! geopotentiel au sol      REAL phis((iim + 1) * (jjm + 1)) ! geopotentiel au sol
49    
50      REAL, intent(inout):: q(:, :, :, :) ! (iim + 1, jjm + 1, llm, nqmx)      REAL, intent(inout):: q(:, :, :, :) ! (iim + 1, jjm + 1, llm, nqmx)
51      ! mass fractions of advected fields      ! mass fractions of advected fields
# Line 56  contains Line 56  contains
56    
57      ! Variables dynamiques:      ! Variables dynamiques:
58    
59      REAL pks(ip1jmp1) ! exner au sol      REAL pks((iim + 1) * (jjm + 1)) ! exner au sol
60      REAL pk(iim + 1, jjm + 1, llm) ! exner au milieu des couches      REAL pk(iim + 1, jjm + 1, llm) ! exner au milieu des couches
61      REAL pkf(ip1jmp1, llm) ! exner filt.au milieu des couches      REAL pkf((iim + 1) * (jjm + 1), llm) ! exner filt.au milieu des couches
62      REAL phi(iim + 1, jjm + 1, llm) ! geopotential      REAL phi(iim + 1, jjm + 1, llm) ! geopotential
63      REAL w(ip1jmp1, llm) ! vitesse verticale      REAL w((iim + 1) * (jjm + 1), llm) ! vitesse verticale
64    
65      ! variables dynamiques intermediaire pour le transport      ! Variables dynamiques intermediaire pour le transport
66      REAL pbaru(ip1jmp1, llm), pbarv((iim + 1) * jjm, llm) !flux de masse      ! Flux de masse :
67        REAL pbaru((iim + 1) * (jjm + 1), llm), pbarv((iim + 1) * jjm, llm)
68    
69      ! variables dynamiques au pas - 1      ! variables dynamiques au pas - 1
70      REAL vcovm1((iim + 1) * jjm, llm), ucovm1(ip1jmp1, llm)      REAL vcovm1(iim + 1, jjm, llm), ucovm1(iim + 1, jjm + 1, llm)
71      REAL tetam1(iim + 1, jjm + 1, llm), psm1(iim + 1, jjm + 1)      REAL tetam1(iim + 1, jjm + 1, llm), psm1(iim + 1, jjm + 1)
72      REAL massem1(ip1jmp1, llm)      REAL massem1((iim + 1) * (jjm + 1), llm)
73    
74      ! tendances dynamiques      ! tendances dynamiques
75      REAL dv((iim + 1) * jjm, llm), dudyn(ip1jmp1, llm)      REAL dv((iim + 1) * jjm, llm), dudyn((iim + 1) * (jjm + 1), llm)
76      REAL dteta(iim + 1, jjm + 1, llm), dq(ip1jmp1, llm, nqmx), dp(ip1jmp1)      REAL dteta(iim + 1, jjm + 1, llm), dq((iim + 1) * (jjm + 1), llm, nqmx)
77        real dp((iim + 1) * (jjm + 1))
78    
79      ! tendances de la dissipation      ! tendances de la dissipation
80      REAL dvdis((iim + 1) * jjm, llm), dudis(ip1jmp1, llm)      REAL dvdis(iim + 1, jjm, llm), dudis(iim + 1, jjm + 1, llm)
81      REAL dtetadis(iim + 1, jjm + 1, llm)      REAL dtetadis(iim + 1, jjm + 1, llm)
82    
83      ! tendances physiques      ! tendances physiques
84      REAL dvfi((iim + 1) * jjm, llm), dufi(ip1jmp1, llm)      REAL dvfi((iim + 1) * jjm, llm), dufi((iim + 1) * (jjm + 1), llm)
85      REAL dtetafi(iim + 1, jjm + 1, llm), dqfi(ip1jmp1, llm, nqmx), dpfi(ip1jmp1)      REAL dtetafi(iim + 1, jjm + 1, llm), dqfi((iim + 1) * (jjm + 1), llm, nqmx)
86        real dpfi((iim + 1) * (jjm + 1))
87    
88      ! variables pour le fichier histoire      ! variables pour le fichier histoire
89    
90      INTEGER itau ! index of the time step of the dynamics, starts at 0      INTEGER itau ! index of the time step of the dynamics, starts at 0
91      INTEGER itaufin      INTEGER itaufin
92      REAL time ! time of day, as a fraction of day length      REAL time ! time of day, as a fraction of day length
93      real finvmaold(ip1jmp1, llm)      real finvmaold((iim + 1) * (jjm + 1), llm)
94      INTEGER l      INTEGER l
95      REAL rdayvrai, rdaym_ini      REAL rdayvrai, rdaym_ini
96    
# Line 95  contains Line 98  contains
98      REAL ecin(iim + 1, jjm + 1, llm), ecin0(iim + 1, jjm + 1, llm)      REAL ecin(iim + 1, jjm + 1, llm), ecin0(iim + 1, jjm + 1, llm)
99    
100      REAL dtetaecdt(iim + 1, jjm + 1, llm)      REAL dtetaecdt(iim + 1, jjm + 1, llm)
101      ! tendance de la température potentielle due à la tansformation      ! tendance de la température potentielle due à la transformation
102      ! d'énergie cinétique en énergie thermique créée par la dissipation      ! d'énergie cinétique en énergie thermique par la dissipation
103    
104      REAL vcont((iim + 1) * jjm, llm), ucont(ip1jmp1, llm)      REAL vcont((iim + 1) * jjm, llm), ucont((iim + 1) * (jjm + 1), llm)
105      logical leapf      logical leapf
106      real dt      real dt
107    
108      !---------------------------------------------------      !---------------------------------------------------
109    
110      print *, "Call sequence information: leapfrog"      print *, "Call sequence information: leapfrog"
111        call assert(shape(ucov) == (/iim + 1, jjm + 1, llm/), "leapfrog")
112    
113      itaufin = nday * day_step      itaufin = nday * day_step
114      ! "day_step" is a multiple of "iperiod", therefore "itaufin" is one too      ! "day_step" is a multiple of "iperiod", therefore "itaufin" is one too
# Line 134  contains Line 138  contains
138         end if         end if
139    
140         ! Calcul des tendances dynamiques:         ! Calcul des tendances dynamiques:
141         CALL geopot(ip1jmp1, teta, pk, pks, phis, phi)         CALL geopot((iim + 1) * (jjm + 1), teta, pk, pks, phis, phi)
142         CALL caldyn(itau, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, &         CALL caldyn(itau, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, &
143              dudyn, dv, dteta, dp, w, pbaru, pbarv, time_0, &              dudyn, dv, dteta, dp, w, pbaru, pbarv, time_0, &
144              conser=MOD(itau, iconser)==0)              conser=MOD(itau, iconser)==0)
# Line 157  contains Line 161  contains
161            CALL exner_hyb(ps, p3d, pks, pk, pkf)            CALL exner_hyb(ps, p3d, pks, pk, pkf)
162    
163            ! Calcul des tendances dynamiques:            ! Calcul des tendances dynamiques:
164            CALL geopot(ip1jmp1, teta, pk, pks, phis, phi)            CALL geopot((iim + 1) * (jjm + 1), teta, pk, pks, phis, phi)
165            CALL caldyn(itau + 1, ucov, vcov, teta, ps, masse, pk, pkf, phis, &            CALL caldyn(itau + 1, ucov, vcov, teta, ps, masse, pk, pkf, phis, &
166                 phi, dudyn, dv, dteta, dp, w, pbaru, pbarv, time_0, &                 phi, dudyn, dv, dteta, dp, w, pbaru, pbarv, time_0, &
167                 conser=.false.)                 conser=.false.)
# Line 192  contains Line 196  contains
196         CALL exner_hyb(ps, p3d, pks, pk, pkf)         CALL exner_hyb(ps, p3d, pks, pk, pkf)
197    
198         IF (MOD(itau + 1, idissip) == 0) THEN         IF (MOD(itau + 1, idissip) == 0) THEN
199            ! dissipation horizontale et verticale des petites echelles:            ! Dissipation horizontale et verticale des petites échelles
200    
201            ! calcul de l'energie cinetique avant dissipation            ! calcul de l'énergie cinétique avant dissipation
202            call covcont(llm, ucov, vcov, ucont, vcont)            call covcont(llm, ucov, vcov, ucont, vcont)
203            call enercin(vcov, ucov, vcont, ucont, ecin0)            call enercin(vcov, ucov, vcont, ucont, ecin0)
204    
205            ! dissipation            ! dissipation
206            CALL dissip(vcov, ucov, teta, p3d, dvdis, dudis, dtetadis)            CALL dissip(vcov, ucov, teta, p3d, dvdis, dudis, dtetadis)
207            ucov=ucov + dudis            ucov = ucov + dudis
208            vcov=vcov + dvdis            vcov = vcov + dvdis
209    
210            ! On rajoute la tendance due à la transformation Ec -> E            ! On ajoute la tendance due à la transformation énergie
211            ! thermique créée lors de la dissipation            ! cinétique en énergie thermique par la dissipation
212            call covcont(llm, ucov, vcov, ucont, vcont)            call covcont(llm, ucov, vcov, ucont, vcont)
213            call enercin(vcov, ucov, vcont, ucont, ecin)            call enercin(vcov, ucov, vcont, ucont, ecin)
214            dtetaecdt= (ecin0 - ecin) / pk            dtetaecdt= (ecin0 - ecin) / pk
215            dtetadis=dtetadis + dtetaecdt            dtetadis = dtetadis + dtetaecdt
216            teta=teta + dtetadis            teta = teta + dtetadis
217    
218            ! Calcul de la valeur moyenne aux pôles :            ! Calcul de la valeur moyenne aux pôles :
219            forall (l = 1: llm)            forall (l = 1: llm)
# Line 238  contains Line 242  contains
242           itau=itau_dyn+itaufin)           itau=itau_dyn+itaufin)
243    
244      ! Calcul des tendances dynamiques:      ! Calcul des tendances dynamiques:
245      CALL geopot(ip1jmp1, teta, pk, pks, phis, phi)      CALL geopot((iim + 1) * (jjm + 1), 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.47  
changed lines
  Added in v.55

  ViewVC Help
Powered by ViewVC 1.1.21