/[lmdze]/trunk/dyn3d/gcm.f
ViewVC logotype

Annotation of /trunk/dyn3d/gcm.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 98 - (hide annotations)
Tue May 13 17:23:16 2014 UTC (10 years ago) by guez
File size: 4803 byte(s)
Split inter_barxy.f : one procedure per module, one module per
file. Grouped the files into a directory.

Split orbite.f.

Value of raz_date read from the namelist is taken into account
(resetting the step counter) even if annee_ref == anneeref and day_ref
== dayref. raz_date is no longer modified by gcm main unit. (Following
LMDZ.)

Removed argument klon of interfsur_lim. Renamed arguments lmt_alb,
lmt_rug to alb_new, z0_new (same name as corresponding actual
arguments in interfsurf_hq).

Removed argument klon of interfsurf_hq.

Removed arguments qs and d_qs of diagetpq. Were always
zero. Downgraded arguments d_qw, d_ql of diagetpq to local variables,
they were not used in physiq. Removed all computations for solid water
in diagetpq, was just zero.


Downgraded arguments fs_bound, fq_bound of diagphy to local variables,
they were not used in physiq. Encapsulated in a test on iprt all
computations in diagphy.

Removed parameter nbtr of module dimphy. Replaced it everywhere in the
program by nqmx - 2.

Removed parameter rnpb of procedure physiq. Kept the true case in
physiq and phytrac. Could not work with false case anyway.

Removed arguments klon, llm, airephy of qcheck. Removed argument ftsol
of initrrnpb, was not used.

1 guez 3 PROGRAM gcm
2    
3 guez 36 ! Authors: P. Le Van, L. Fairhead, F. Hourdin
4     ! From "gcm.F", version 1.4, 2006/04/04 15:05:16
5 guez 3
6 guez 38 ! General circulation model of LMD. Avec coordonnée verticale
7     ! hybride, avec nouveaux opérateurs de dissipation "*" ("gradiv2",
8     ! "divgrad2", "nxgraro2"). Possibilité de choisir le schéma pour
9     ! l'advection de "q", en modifiant "iadv" dans "traceur.def".
10    
11 guez 79 use comconst, only: daysec, dtvr, iniconst
12 guez 78 use comgeom, only: rlatu, aire_2d, cu_2d, cv_2d, rlonv, inigeom
13 guez 37 use comgeomphy, only: airephy, cuphy, cvphy, rlatd, rlond
14 guez 3 use conf_gcm_m, only: day_step, iperiod, anneeref, dayref, iecri, iphysiq, &
15 guez 57 nday, raz_date, periodav, conf_gcm, iflag_phys
16 guez 26 use dimens_m, only: iim, jjm, llm, nqmx
17     use dimphy, only: klon
18 guez 79 USE disvert_m, ONLY : disvert
19 guez 25 use dynetat0_m, only: dynetat0, day_ini
20 guez 26 use dynredem0_m, only: dynredem0
21 guez 3 use grid_change, only: dyn_phy, init_dyn_phy
22 guez 61 use histclo_m, only: histclo
23 guez 18 use iniadvtrac_m, only: iniadvtrac
24 guez 26 use inidissip_m, only: inidissip
25 guez 54 use inifilr_m, only: inifilr
26 guez 26 use initdynav_m, only: initdynav
27     use inithist_m, only: inithist
28 guez 57 use init_dynzon_m, only: init_dynzon
29 guez 92 USE ioconf_calendar_m, only: ioconf_calendar
30 guez 57 use jumble, only: new_unit
31 guez 3 use leapfrog_m, only: leapfrog
32 guez 37 use suphec_m, only: suphec
33 guez 26 use temps, only: day_ref, annee_ref, day_end, itau_dyn
34     use tracstoke, only: istdyn, istphy
35 guez 57 use unit_nml_m, only: unit_nml
36 guez 38 use yoethf_m, only: yoethf
37 guez 3
38     IMPLICIT NONE
39    
40     ! Variables dynamiques :
41 guez 55 REAL ucov(iim + 1, jjm + 1, llm), vcov(iim + 1, jjm, llm) ! vent covariant
42 guez 43 REAL teta(iim + 1, jjm + 1, llm) ! température potentielle
43 guez 40 REAL q(iim + 1, jjm + 1, llm, nqmx) ! champs advectés
44 guez 39 REAL ps(iim + 1, jjm + 1) ! pression au sol (Pa)
45 guez 55 REAL masse(iim + 1, jjm + 1, llm) ! masse d'air
46 guez 7 REAL phis(iim + 1, jjm + 1) ! géopotentiel au sol
47 guez 3
48     ! Variables pour le fichier histoire :
49 guez 25 REAL time_0 ! time in day, as a fraction of day, in [0, 1[
50 guez 3
51     ! Calendrier :
52     LOGICAL:: true_calendar = .false. ! default value
53    
54     logical mask_v(iim + 1, jjm)
55     ! (mask for points in the "v" grid, first index is for longitude,
56     ! second index is for latitude)
57    
58     namelist /main_nml/true_calendar
59    
60     !------------------------------------------------------------
61    
62 guez 57 call new_unit(unit_nml)
63 guez 79 open(unit_nml, file="used_namelists.txt", status="replace", action="write")
64 guez 57
65     CALL conf_gcm
66    
67 guez 3 print *, "Enter namelist 'main_nml'."
68     read (unit=*, nml=main_nml)
69 guez 57 write(unit_nml, nml=main_nml)
70 guez 3
71     ! Choix du calendrier :
72     if (true_calendar) then
73     call ioconf_calendar('gregorian')
74     else
75     call ioconf_calendar('360d')
76     endif
77    
78     ! Initialisation des traceurs
79     ! Choix du schéma pour l'advection dans le fichier "traceur.def" ou via INCA
80 guez 23 call iniadvtrac
81 guez 3
82 guez 79 CALL iniconst
83    
84 guez 3 ! Lecture du fichier "start.nc" :
85     CALL dynetat0(vcov, ucov, teta, q, masse, ps, phis, time_0)
86    
87 guez 98 ! On remet le calendrier à zéro si demandé :
88     if (raz_date) then
89     print *, 'On réinitialise à la date lue dans la namelist.'
90     annee_ref = anneeref
91     day_ref = dayref
92     day_ini = dayref
93     itau_dyn = 0
94     time_0 = 0.
95     else
96     print *, 'On garde les dates du fichier "start".'
97 guez 3 endif
98    
99 guez 79 CALL disvert
100 guez 36 CALL inigeom ! initialisation de la géometrie
101     CALL inifilr ! initialisation du filtre
102 guez 27 CALL inidissip
103 guez 3 call init_dyn_phy
104    
105     ! Initialisation de la physique :
106     IF (iflag_phys == 1) THEN
107 guez 37 rlatd(1)=rlatu(1)
108     rlatd(2:klon-1) = pack(spread(rlatu(2:jjm), 1, iim), .true.)
109     rlatd(klon)= rlatu(jjm + 1)
110 guez 3
111 guez 37 rlond(1)=0.
112     rlond(2:klon-1) = pack(spread(rlonv(:iim), 2, jjm - 1), .true.)
113     rlond(klon)= 0.
114 guez 3
115 guez 37 cuphy = pack(cu_2d, dyn_phy)
116 guez 3
117     ! Construct a mask for points in the "v" grid:
118     mask_v = .true.
119     mask_v(2:, 1) = .false.
120     mask_v(iim + 1, 2:) = .false.
121    
122 guez 37 cvphy(:klon - 1) = pack(cv_2d, mask_v)
123     cvphy(klon) = cv_2d(1, jjm)
124     ! (that value of "cv_2d" is used twice in "cvphy")
125 guez 3
126 guez 37 airephy = pack(aire_2d, dyn_phy)
127     CALL suphec
128 guez 38 call yoethf
129 guez 3 ENDIF
130    
131     ! Initialisation des entrées-sorties :
132     day_end = day_ini + nday
133     print *, "day_ini = ", day_ini
134     print *, "day_end = ", day_end
135    
136 guez 5 CALL dynredem0("restart.nc", day_end, phis)
137 guez 79 CALL inithist(day_ref, annee_ref, dtvr, nqmx, t_ops = iecri * daysec, &
138 guez 56 t_wrt = iecri * daysec)
139 guez 79 CALL initdynav(day_ref, annee_ref, dtvr, nqmx, t_ops = iperiod * dtvr, &
140 guez 56 t_wrt = periodav * daysec)
141 guez 57 call init_dynzon(dt_app = dtvr * iperiod)
142 guez 3
143     ! Choix des fréquences de stockage pour le hors-ligne :
144 guez 36 istdyn = day_step / 4 ! stockage toutes les 6 h = 1 jour / 4
145 guez 3 istphy = istdyn / iphysiq
146    
147     ! Intégration temporelle du modèle :
148 guez 23 CALL leapfrog(ucov, vcov, teta, ps, masse, phis, q, time_0)
149 guez 3
150 guez 68 close(unit_nml)
151 guez 10 call histclo
152     print *, 'Simulation finished'
153     print *, 'Everything is cool'
154    
155 guez 3 END PROGRAM gcm

  ViewVC Help
Powered by ViewVC 1.1.21