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 |
|
|
13 |
|
use addfi_m, only: addfi |
14 |
USE calfis_m, ONLY: calfis |
USE calfis_m, ONLY: calfis |
15 |
USE com_io_dyn, ONLY: histaveid |
USE com_io_dyn, ONLY: histaveid |
16 |
USE comconst, ONLY: daysec, dtphys, dtvr |
USE comconst, ONLY: daysec, dtphys, dtvr |
28 |
use integrd_m, only: integrd |
use integrd_m, only: integrd |
29 |
USE logic, ONLY: iflag_phys, ok_guide |
USE logic, ONLY: iflag_phys, ok_guide |
30 |
USE paramet_m, ONLY: ip1jmp1 |
USE paramet_m, ONLY: ip1jmp1 |
|
USE pression_m, ONLY: pression |
|
31 |
USE pressure_var, ONLY: p3d |
USE pressure_var, ONLY: p3d |
32 |
USE temps, ONLY: itau_dyn |
USE temps, ONLY: itau_dyn |
33 |
|
|
100 |
dq = 0. |
dq = 0. |
101 |
|
|
102 |
! On initialise la pression et la fonction d'Exner : |
! On initialise la pression et la fonction d'Exner : |
103 |
CALL pression(ip1jmp1, ap, bp, ps, p3d) |
forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps |
104 |
CALL exner_hyb(ps, p3d, pks, pk, pkf) |
CALL exner_hyb(ps, p3d, pks, pk, pkf) |
105 |
|
|
106 |
! Début de l'integration temporelle : |
! Début de l'integration temporelle : |
141 |
|
|
142 |
if (.not. leapf) then |
if (.not. leapf) then |
143 |
! Matsuno backward |
! Matsuno backward |
144 |
CALL pression(ip1jmp1, ap, bp, ps, p3d) |
forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps |
145 |
CALL exner_hyb(ps, p3d, pks, pk, pkf) |
CALL exner_hyb(ps, p3d, pks, pk, pkf) |
146 |
|
|
147 |
! Calcul des tendances dynamiques: |
! Calcul des tendances dynamiques: |
158 |
IF (MOD(itau + 1, iphysiq) == 0 .AND. iflag_phys /= 0) THEN |
IF (MOD(itau + 1, iphysiq) == 0 .AND. iflag_phys /= 0) THEN |
159 |
! calcul des tendances physiques: |
! calcul des tendances physiques: |
160 |
|
|
161 |
CALL pression(ip1jmp1, ap, bp, ps, p3d) |
forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps |
162 |
CALL exner_hyb(ps, p3d, pks, pk, pkf) |
CALL exner_hyb(ps, p3d, pks, pk, pkf) |
163 |
|
|
164 |
rdaym_ini = itau * dtvr / daysec |
rdaym_ini = itau * dtvr / daysec |
166 |
time = REAL(mod(itau, day_step)) / day_step + time_0 |
time = REAL(mod(itau, day_step)) / day_step + time_0 |
167 |
IF (time > 1.) time = time - 1. |
IF (time > 1.) time = time - 1. |
168 |
|
|
169 |
CALL calfis(itau + 1 == itaufin, rdayvrai, time, ucov, vcov, & |
CALL calfis(rdayvrai, time, ucov, vcov, teta, q, masse, ps, pk, & |
170 |
teta, q, masse, ps, pk, phis, phi, du, dv, dteta, dq, w, dufi, & |
phis, phi, du, dv, dteta, dq, w, dufi, dvfi, dtetafi, dqfi, & |
171 |
dvfi, dtetafi, dqfi, dpfi) |
dpfi, lafin=itau+1==itaufin) |
172 |
|
|
173 |
! ajout des tendances physiques: |
! ajout des tendances physiques: |
174 |
CALL addfi(nqmx, dtphys, ucov, vcov, teta, q, ps, dufi, dvfi, & |
CALL addfi(nqmx, dtphys, ucov, vcov, teta, q, ps, dufi, dvfi, & |
175 |
dtetafi, dqfi, dpfi) |
dtetafi, dqfi, dpfi) |
176 |
ENDIF |
ENDIF |
177 |
|
|
178 |
CALL pression(ip1jmp1, ap, bp, ps, p3d) |
forall (l = 1: llm + 1) p3d(:, :, l) = ap(l) + bp(l) * ps |
179 |
CALL exner_hyb(ps, p3d, pks, pk, pkf) |
CALL exner_hyb(ps, p3d, pks, pk, pkf) |
180 |
|
|
181 |
IF (MOD(itau + 1, idissip) == 0) THEN |
IF (MOD(itau + 1, idissip) == 0) THEN |