2 |
|
|
3 |
! Authors: P. Le Van, L. Fairhead, F. Hourdin |
! Authors: P. Le Van, L. Fairhead, F. Hourdin |
4 |
! From "gcm.F", version 1.4, 2006/04/04 15:05:16 |
! From "gcm.F", version 1.4, 2006/04/04 15:05:16 |
5 |
! General circulation model of LMD |
|
6 |
! Avec coordonnées verticales hybrides, avec nouveaux opérateurs de |
! General circulation model of LMD. Avec coordonnée verticale |
7 |
! dissipation "*" (gradiv2, divgrad2, nxgraro2) |
! hybride, avec nouveaux opérateurs de dissipation "*" ("gradiv2", |
8 |
! Possibilité de choisir le schéma pour l'advection de "q", en |
! "divgrad2", "nxgraro2"). Possibilité de choisir le schéma pour |
9 |
! modifiant "iadv" dans "traceur.def". |
! l'advection de "q", en modifiant "iadv" dans "traceur.def". |
|
! Pour Van-Leer plus vapeur d'eau saturée : iadv(1)=4 |
|
|
! Pour Van-Leer : iadv=10 |
|
10 |
|
|
11 |
use clesphys2, only: read_clesphys2 |
use clesphys2, only: read_clesphys2 |
12 |
use com_io_dyn, only: histid, histvid, histaveid |
use comconst, only: daysec, cpp, dtvr, g, rad, r |
|
use comconst, only: daysec, cpp, dtvr, g, rad, r, initialize |
|
13 |
use comgeom, only: rlatu, aire_2d, cu_2d, cv_2d, rlonv |
use comgeom, only: rlatu, aire_2d, cu_2d, cv_2d, rlonv |
14 |
use comgeomphy, only: airephy, cuphy, cvphy, rlatd, rlond |
use comgeomphy, only: airephy, cuphy, cvphy, rlatd, rlond |
15 |
use conf_gcm_m, only: day_step, iperiod, anneeref, dayref, iecri, iphysiq, & |
use conf_gcm_m, only: day_step, iperiod, anneeref, dayref, iecri, iphysiq, & |
21 |
use grid_change, only: dyn_phy, init_dyn_phy |
use grid_change, only: dyn_phy, init_dyn_phy |
22 |
use iniadvtrac_m, only: iniadvtrac |
use iniadvtrac_m, only: iniadvtrac |
23 |
use inidissip_m, only: inidissip |
use inidissip_m, only: inidissip |
24 |
|
use inifilr_m, only: inifilr |
25 |
use inigeom_m, only: inigeom |
use inigeom_m, only: inigeom |
26 |
use initdynav_m, only: initdynav |
use initdynav_m, only: initdynav |
27 |
use inithist_m, only: inithist |
use inithist_m, only: inithist |
29 |
use histcom, only: histclo |
use histcom, only: histclo |
30 |
use leapfrog_m, only: leapfrog |
use leapfrog_m, only: leapfrog |
31 |
use logic, only: iflag_phys |
use logic, only: iflag_phys |
|
use paramet_m, only: ip1jm, ip1jmp1 |
|
32 |
use suphec_m, only: suphec |
use suphec_m, only: suphec |
33 |
use temps, only: day_ref, annee_ref, day_end, itau_dyn |
use temps, only: day_ref, annee_ref, day_end, itau_dyn |
34 |
use tracstoke, only: istdyn, istphy |
use tracstoke, only: istdyn, istphy |
35 |
|
use yoethf_m, only: yoethf |
36 |
|
|
37 |
IMPLICIT NONE |
IMPLICIT NONE |
38 |
|
|
39 |
REAL zdtvr ! time step for dynamics, in s |
REAL zdtvr ! time step for dynamics, in s |
40 |
|
|
41 |
! Variables dynamiques : |
! Variables dynamiques : |
42 |
REAL vcov(ip1jm, llm), ucov(ip1jmp1, llm) ! vents covariants |
REAL ucov(iim + 1, jjm + 1, llm), vcov(iim + 1, jjm, llm) ! vent covariant |
43 |
REAL teta(ip1jmp1, llm) ! température potentielle |
REAL teta(iim + 1, jjm + 1, llm) ! température potentielle |
44 |
REAL q(ip1jmp1, llm, nqmx) ! champs advectés |
REAL q(iim + 1, jjm + 1, llm, nqmx) ! champs advectés |
45 |
REAL ps(ip1jmp1) ! pression au sol (Pa) |
REAL ps(iim + 1, jjm + 1) ! pression au sol (Pa) |
46 |
|
REAL masse(iim + 1, jjm + 1, llm) ! masse d'air |
|
REAL masse(ip1jmp1, llm) ! masse d'air |
|
47 |
REAL phis(iim + 1, jjm + 1) ! géopotentiel au sol |
REAL phis(iim + 1, jjm + 1) ! géopotentiel au sol |
48 |
|
|
49 |
! Variables pour le fichier histoire : |
! Variables pour le fichier histoire : |
64 |
read (unit=*, nml=main_nml) |
read (unit=*, nml=main_nml) |
65 |
write(unit=*, nml=main_nml) |
write(unit=*, nml=main_nml) |
66 |
|
|
|
! Initialisations: |
|
|
call initialize |
|
|
|
|
67 |
! Choix du calendrier : |
! Choix du calendrier : |
68 |
if (true_calendar) then |
if (true_calendar) then |
69 |
call ioconf_calendar('gregorian') |
call ioconf_calendar('gregorian') |
140 |
|
|
141 |
airephy = pack(aire_2d, dyn_phy) |
airephy = pack(aire_2d, dyn_phy) |
142 |
CALL suphec |
CALL suphec |
143 |
|
call yoethf |
144 |
ENDIF |
ENDIF |
145 |
|
|
146 |
! Initialisation des entrées-sorties : |
! Initialisation des entrées-sorties : |
149 |
print *, "day_end = ", day_end |
print *, "day_end = ", day_end |
150 |
|
|
151 |
CALL dynredem0("restart.nc", day_end, phis) |
CALL dynredem0("restart.nc", day_end, phis) |
152 |
CALL inithist(day_ref, annee_ref, zdtvr, nqmx, histid, histvid, & |
CALL inithist(day_ref, annee_ref, zdtvr, nqmx, t_ops = iecri * daysec, & |
153 |
t_ops = iecri * daysec, t_wrt = iecri * daysec) |
t_wrt = iecri * daysec) |
154 |
CALL initdynav(day_ref, annee_ref, zdtvr, nqmx, histaveid, & |
CALL initdynav(day_ref, annee_ref, zdtvr, nqmx, t_ops = iperiod * zdtvr, & |
155 |
t_ops = iperiod * zdtvr, t_wrt = periodav * daysec) |
t_wrt = periodav * daysec) |
156 |
|
|
157 |
! Choix des fréquences de stockage pour le hors-ligne : |
! Choix des fréquences de stockage pour le hors-ligne : |
158 |
istdyn = day_step / 4 ! stockage toutes les 6 h = 1 jour / 4 |
istdyn = day_step / 4 ! stockage toutes les 6 h = 1 jour / 4 |