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

Contents of /trunk/dyn3d/gcm.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 98 - (show 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 PROGRAM gcm
2
3 ! Authors: P. Le Van, L. Fairhead, F. Hourdin
4 ! From "gcm.F", version 1.4, 2006/04/04 15:05:16
5
6 ! 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 use comconst, only: daysec, dtvr, iniconst
12 use comgeom, only: rlatu, aire_2d, cu_2d, cv_2d, rlonv, inigeom
13 use comgeomphy, only: airephy, cuphy, cvphy, rlatd, rlond
14 use conf_gcm_m, only: day_step, iperiod, anneeref, dayref, iecri, iphysiq, &
15 nday, raz_date, periodav, conf_gcm, iflag_phys
16 use dimens_m, only: iim, jjm, llm, nqmx
17 use dimphy, only: klon
18 USE disvert_m, ONLY : disvert
19 use dynetat0_m, only: dynetat0, day_ini
20 use dynredem0_m, only: dynredem0
21 use grid_change, only: dyn_phy, init_dyn_phy
22 use histclo_m, only: histclo
23 use iniadvtrac_m, only: iniadvtrac
24 use inidissip_m, only: inidissip
25 use inifilr_m, only: inifilr
26 use initdynav_m, only: initdynav
27 use inithist_m, only: inithist
28 use init_dynzon_m, only: init_dynzon
29 USE ioconf_calendar_m, only: ioconf_calendar
30 use jumble, only: new_unit
31 use leapfrog_m, only: leapfrog
32 use suphec_m, only: suphec
33 use temps, only: day_ref, annee_ref, day_end, itau_dyn
34 use tracstoke, only: istdyn, istphy
35 use unit_nml_m, only: unit_nml
36 use yoethf_m, only: yoethf
37
38 IMPLICIT NONE
39
40 ! Variables dynamiques :
41 REAL ucov(iim + 1, jjm + 1, llm), vcov(iim + 1, jjm, llm) ! vent covariant
42 REAL teta(iim + 1, jjm + 1, llm) ! température potentielle
43 REAL q(iim + 1, jjm + 1, llm, nqmx) ! champs advectés
44 REAL ps(iim + 1, jjm + 1) ! pression au sol (Pa)
45 REAL masse(iim + 1, jjm + 1, llm) ! masse d'air
46 REAL phis(iim + 1, jjm + 1) ! géopotentiel au sol
47
48 ! Variables pour le fichier histoire :
49 REAL time_0 ! time in day, as a fraction of day, in [0, 1[
50
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 call new_unit(unit_nml)
63 open(unit_nml, file="used_namelists.txt", status="replace", action="write")
64
65 CALL conf_gcm
66
67 print *, "Enter namelist 'main_nml'."
68 read (unit=*, nml=main_nml)
69 write(unit_nml, nml=main_nml)
70
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 call iniadvtrac
81
82 CALL iniconst
83
84 ! Lecture du fichier "start.nc" :
85 CALL dynetat0(vcov, ucov, teta, q, masse, ps, phis, time_0)
86
87 ! 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 endif
98
99 CALL disvert
100 CALL inigeom ! initialisation de la géometrie
101 CALL inifilr ! initialisation du filtre
102 CALL inidissip
103 call init_dyn_phy
104
105 ! Initialisation de la physique :
106 IF (iflag_phys == 1) THEN
107 rlatd(1)=rlatu(1)
108 rlatd(2:klon-1) = pack(spread(rlatu(2:jjm), 1, iim), .true.)
109 rlatd(klon)= rlatu(jjm + 1)
110
111 rlond(1)=0.
112 rlond(2:klon-1) = pack(spread(rlonv(:iim), 2, jjm - 1), .true.)
113 rlond(klon)= 0.
114
115 cuphy = pack(cu_2d, dyn_phy)
116
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 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
126 airephy = pack(aire_2d, dyn_phy)
127 CALL suphec
128 call yoethf
129 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 CALL dynredem0("restart.nc", day_end, phis)
137 CALL inithist(day_ref, annee_ref, dtvr, nqmx, t_ops = iecri * daysec, &
138 t_wrt = iecri * daysec)
139 CALL initdynav(day_ref, annee_ref, dtvr, nqmx, t_ops = iperiod * dtvr, &
140 t_wrt = periodav * daysec)
141 call init_dynzon(dt_app = dtvr * iperiod)
142
143 ! Choix des fréquences de stockage pour le hors-ligne :
144 istdyn = day_step / 4 ! stockage toutes les 6 h = 1 jour / 4
145 istphy = istdyn / iphysiq
146
147 ! Intégration temporelle du modèle :
148 CALL leapfrog(ucov, vcov, teta, ps, masse, phis, q, time_0)
149
150 close(unit_nml)
151 call histclo
152 print *, 'Simulation finished'
153 print *, 'Everything is cool'
154
155 END PROGRAM gcm

  ViewVC Help
Powered by ViewVC 1.1.21