6 |
|
|
7 |
SUBROUTINE leapfrog(ucov, vcov, teta, ps, masse, phis, q, time_0) |
SUBROUTINE leapfrog(ucov, vcov, teta, ps, masse, phis, q, time_0) |
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 revision 616 |
10 |
! Authors: P. Le Van, L. Fairhead, F. Hourdin |
! Authors: P. Le Van, L. Fairhead, F. Hourdin |
11 |
! Matsuno-leapfrog scheme. |
! Matsuno-leapfrog scheme. |
12 |
|
|
17 |
USE calfis_m, ONLY: calfis |
USE calfis_m, ONLY: calfis |
18 |
USE comconst, ONLY: daysec, dtphys, dtvr |
USE comconst, ONLY: daysec, dtphys, dtvr |
19 |
USE comgeom, ONLY: aire_2d, apoln, apols |
USE comgeom, ONLY: aire_2d, apoln, apols |
20 |
USE comvert, 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, & |
22 |
iflag_phys, ok_guide |
iflag_phys, ok_guide, iecri |
23 |
USE dimens_m, ONLY: iim, jjm, llm, nqmx |
USE dimens_m, ONLY: iim, jjm, llm, nqmx |
24 |
use dissip_m, only: dissip |
use dissip_m, only: dissip |
25 |
USE dynetat0_m, ONLY: day_ini |
USE dynetat0_m, ONLY: day_ini |
43 |
! potential temperature |
! potential temperature |
44 |
|
|
45 |
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 |
46 |
REAL masse((iim + 1) * (jjm + 1), llm) ! masse d'air |
REAL masse(:, :, :) ! (iim + 1, jjm + 1, llm) masse d'air |
47 |
REAL phis((iim + 1) * (jjm + 1)) ! geopotentiel au sol |
REAL phis(:, :) ! (iim + 1, jjm + 1) geopotentiel au sol |
48 |
|
|
49 |
REAL, intent(inout):: q(:, :, :, :) ! (iim + 1, jjm + 1, llm, nqmx) |
REAL, intent(inout):: q(:, :, :, :) ! (iim + 1, jjm + 1, llm, nqmx) |
50 |
! mass fractions of advected fields |
! mass fractions of advected fields |
57 |
|
|
58 |
REAL pks((iim + 1) * (jjm + 1)) ! exner au sol |
REAL pks((iim + 1) * (jjm + 1)) ! exner au sol |
59 |
REAL pk(iim + 1, jjm + 1, llm) ! exner au milieu des couches |
REAL pk(iim + 1, jjm + 1, llm) ! exner au milieu des couches |
60 |
REAL pkf((iim + 1) * (jjm + 1), llm) ! exner filt.au milieu des couches |
REAL pkf(iim + 1, jjm + 1, llm) ! exner filtré au milieu des couches |
61 |
REAL phi(iim + 1, jjm + 1, llm) ! geopotential |
REAL phi(iim + 1, jjm + 1, llm) ! geopotential |
62 |
REAL w((iim + 1) * (jjm + 1), llm) ! vitesse verticale |
REAL w((iim + 1) * (jjm + 1), llm) ! vitesse verticale |
63 |
|
|
68 |
! Variables dynamiques au pas - 1 |
! Variables dynamiques au pas - 1 |
69 |
REAL vcovm1(iim + 1, jjm, llm), ucovm1(iim + 1, jjm + 1, llm) |
REAL vcovm1(iim + 1, jjm, llm), ucovm1(iim + 1, jjm + 1, llm) |
70 |
REAL tetam1(iim + 1, jjm + 1, llm), psm1(iim + 1, jjm + 1) |
REAL tetam1(iim + 1, jjm + 1, llm), psm1(iim + 1, jjm + 1) |
71 |
REAL massem1((iim + 1) * (jjm + 1), llm) |
REAL massem1(iim + 1, jjm + 1, llm) |
72 |
|
|
73 |
! Tendances dynamiques |
! Tendances dynamiques |
74 |
REAL dv((iim + 1) * jjm, llm), dudyn((iim + 1) * (jjm + 1), llm) |
REAL dv((iim + 1) * jjm, llm), dudyn((iim + 1) * (jjm + 1), llm) |
89 |
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 |
90 |
INTEGER itaufin |
INTEGER itaufin |
91 |
REAL time ! time of day, as a fraction of day length |
REAL time ! time of day, as a fraction of day length |
92 |
real finvmaold((iim + 1) * (jjm + 1), llm) |
real finvmaold(iim + 1, jjm + 1, llm) |
93 |
INTEGER l |
INTEGER l |
94 |
REAL rdayvrai, rdaym_ini |
REAL rdayvrai, rdaym_ini |
95 |
|
|
180 |
|
|
181 |
CALL calfis(rdayvrai, time, ucov, vcov, teta, q, masse, ps, pk, & |
CALL calfis(rdayvrai, time, ucov, vcov, teta, q, masse, ps, pk, & |
182 |
phis, phi, dudyn, dv, dq, w, dufi, dvfi, dtetafi, dqfi, dpfi, & |
phis, phi, dudyn, dv, dq, w, dufi, dvfi, dtetafi, dqfi, dpfi, & |
183 |
lafin=itau+1==itaufin) |
lafin = itau + 1 == itaufin) |
184 |
|
|
185 |
! ajout des tendances physiques: |
! ajout des tendances physiques: |
186 |
CALL addfi(nqmx, dtphys, ucov, vcov, teta, q, ps, dufi, dvfi, & |
CALL addfi(nqmx, dtphys, ucov, vcov, teta, q, ps, dufi, dvfi, & |
229 |
call bilan_dyn(ps, masse, pk, pbaru, pbarv, teta, phi, ucov, vcov, & |
call bilan_dyn(ps, masse, pk, pbaru, pbarv, teta, phi, ucov, vcov, & |
230 |
q(:, :, :, 1)) |
q(:, :, :, 1)) |
231 |
ENDIF |
ENDIF |
232 |
|
|
233 |
|
IF (MOD(itau + 1, iecri * day_step) == 0) THEN |
234 |
|
CALL geopot((iim + 1) * (jjm + 1), teta, pk, pks, phis, phi) |
235 |
|
CALL writehist(itau, vcov, ucov, teta, phi, q, masse, ps, phis) |
236 |
|
END IF |
237 |
end do time_integration |
end do time_integration |
238 |
|
|
239 |
CALL dynredem1("restart.nc", vcov, ucov, teta, q, masse, ps, & |
CALL dynredem1("restart.nc", vcov, ucov, teta, q, masse, ps, & |
240 |
itau=itau_dyn+itaufin) |
itau = itau_dyn + itaufin) |
241 |
|
|
242 |
! Calcul des tendances dynamiques: |
! Calcul des tendances dynamiques: |
243 |
CALL geopot((iim + 1) * (jjm + 1), teta, pk, pks, phis, phi) |
CALL geopot((iim + 1) * (jjm + 1), teta, pk, pks, phis, phi) |
244 |
CALL caldyn(itaufin, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, & |
CALL caldyn(itaufin, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, & |
245 |
dudyn, dv, dteta, dp, w, pbaru, pbarv, time_0, & |
dudyn, dv, dteta, dp, w, pbaru, pbarv, time_0, & |
246 |
conser=MOD(itaufin, iconser)==0) |
conser = MOD(itaufin, iconser) == 0) |
247 |
|
|
248 |
END SUBROUTINE leapfrog |
END SUBROUTINE leapfrog |
249 |
|
|