6 |
|
|
7 |
contains |
contains |
8 |
|
|
9 |
SUBROUTINE leapfrog(ucov, vcov, teta, ps, masse, phis, nq, q, time_0) |
SUBROUTINE leapfrog(ucov, vcov, teta, ps, masse, phis, q, time_0) |
10 |
|
|
11 |
! 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 |
12 |
|
|
27 |
! Pour Van-Leer + Vapeur d'eau saturee, iadv(1)=4. (F.Codron, 10/99) |
! Pour Van-Leer + Vapeur d'eau saturee, iadv(1)=4. (F.Codron, 10/99) |
28 |
! Pour Van-Leer iadv=10 |
! Pour Van-Leer iadv=10 |
29 |
|
|
30 |
use dimens_m, only: iim, jjm, llm, nqmx |
use dimens_m, only: iim, llm, nqmx |
31 |
use paramet_m, only: ip1jmp1, ip1jm, ijmllm, ijp1llm, jjp1, iip1, iip2 |
use paramet_m, only: ip1jmp1, ip1jm, ijmllm, ijp1llm, jjp1, iip1 |
32 |
use comconst, only: dtvr, daysec, dtphys |
use comconst, only: dtvr, daysec, dtphys |
33 |
use comvert, only: ap, bp |
use comvert, only: ap, bp |
34 |
use conf_gcm_m, only: day_step, iconser, idissip, iphysiq, iperiod, nday, & |
use conf_gcm_m, only: day_step, iconser, idissip, iphysiq, iperiod, nday, & |
46 |
use pression_m, only: pression |
use pression_m, only: pression |
47 |
use pressure_var, only: p3d |
use pressure_var, only: p3d |
48 |
|
|
|
integer nq |
|
|
|
|
49 |
! Variables dynamiques: |
! Variables dynamiques: |
50 |
REAL vcov(ip1jm, llm), ucov(ip1jmp1, llm) ! vents covariants |
REAL vcov(ip1jm, llm), ucov(ip1jmp1, llm) ! vents covariants |
51 |
REAL teta(ip1jmp1, llm) ! temperature potentielle |
REAL teta(ip1jmp1, llm) ! temperature potentielle |
90 |
|
|
91 |
REAL tppn(iim), tpps(iim), tpn, tps |
REAL tppn(iim), tpps(iim), tpn, tps |
92 |
|
|
93 |
INTEGER itau, itaufinp1 |
INTEGER itau ! index of the time step of the dynamics, starts at 0 |
94 |
|
integer itaufinp1 |
95 |
INTEGER iday ! jour julien |
INTEGER iday ! jour julien |
96 |
REAL time ! Heure de la journee en fraction d'1 jour |
REAL time ! time of day, as a fraction of day length |
97 |
|
|
98 |
REAL SSUM |
REAL SSUM |
99 |
real finvmaold(ip1jmp1, llm) |
real finvmaold(ip1jmp1, llm) |
102 |
INTEGER ij, l |
INTEGER ij, l |
103 |
|
|
104 |
REAL rdayvrai, rdaym_ini |
REAL rdayvrai, rdaym_ini |
|
LOGICAL:: callinigrads = .true. |
|
105 |
|
|
106 |
!+jld variables test conservation energie |
!+jld variables test conservation energie |
107 |
REAL ecin(ip1jmp1, llm), ecin0(ip1jmp1, llm) |
REAL ecin(ip1jmp1, llm), ecin0(ip1jmp1, llm) |
114 |
INTEGER:: ip_ebil_dyn = 0 ! PRINT level for energy conserv. diag. |
INTEGER:: ip_ebil_dyn = 0 ! PRINT level for energy conserv. diag. |
115 |
|
|
116 |
logical:: dissip_conservative = .true. |
logical:: dissip_conservative = .true. |
|
LOGICAL:: prem = .true. |
|
117 |
logical forward, leapf, apphys, conser, apdiss |
logical forward, leapf, apphys, conser, apdiss |
118 |
|
|
119 |
!--------------------------------------------------- |
!--------------------------------------------------- |
213 |
teta, q(:, :, 1), q(:, :, 2)) |
teta, q(:, :, 1), q(:, :, 2)) |
214 |
ENDIF |
ENDIF |
215 |
|
|
216 |
CALL calfis(nq, lafin, rdayvrai, time, ucov, vcov, teta, q, & |
CALL calfis(nqmx, lafin, rdayvrai, time, ucov, vcov, teta, q, & |
217 |
masse, ps, pk, phis, phi, du, dv, dteta, dq, w, & |
masse, ps, pk, phis, phi, du, dv, dteta, dq, w, & |
218 |
dufi, dvfi, dtetafi, dqfi, dpfi) |
dufi, dvfi, dtetafi, dqfi, dpfi) |
219 |
|
|
314 |
ENDIF |
ENDIF |
315 |
|
|
316 |
IF (itau == itaufin) THEN |
IF (itau == itaufin) THEN |
317 |
CALL dynredem1("restart.nc", 0., vcov, ucov, teta, q, masse, ps) |
CALL dynredem1("restart.nc", vcov, ucov, teta, q, masse, ps) |
318 |
CLOSE(99) |
CLOSE(99) |
319 |
ENDIF |
ENDIF |
320 |
|
|
332 |
dt = 2. * dtvr |
dt = 2. * dtvr |
333 |
END IF |
END IF |
334 |
ELSE |
ELSE |
335 |
! ...... pas leapfrog ..... |
! pas leapfrog |
336 |
leapf = .TRUE. |
leapf = .TRUE. |
337 |
dt = 2. * dtvr |
dt = 2. * dtvr |
338 |
END IF |
END IF |