/[lmdze]/trunk/libf/dyn3d/gcm.f90
ViewVC logotype

Contents of /trunk/libf/dyn3d/gcm.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 61 - (show annotations)
Fri Apr 20 14:58:43 2012 UTC (12 years ago) by guez
File size: 5594 byte(s)
No more included file in LMDZE, not even "netcdf.inc".

Created a variable containing the list of common source files in
GNUmakefile. So we now also see clearly files that are specific to
each program.

Split module "histcom". Assembled resulting files in directory
"Histcom".

Removed aliasing in calls to "laplacien".

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 calendar, only: ioconf_calendar
12 use clesphys2, only: read_clesphys2
13 use comconst, only: daysec, cpp, dtvr, g, rad, r
14 use comgeom, only: rlatu, aire_2d, cu_2d, cv_2d, rlonv
15 use comgeomphy, only: airephy, cuphy, cvphy, rlatd, rlond
16 use conf_gcm_m, only: day_step, iperiod, anneeref, dayref, iecri, iphysiq, &
17 nday, raz_date, periodav, conf_gcm, iflag_phys
18 use dimens_m, only: iim, jjm, llm, nqmx
19 use dimphy, only: klon
20 use dynetat0_m, only: dynetat0, day_ini
21 use dynredem0_m, only: dynredem0
22 use grid_change, only: dyn_phy, init_dyn_phy
23 use histclo_m, only: histclo
24 use iniadvtrac_m, only: iniadvtrac
25 use inidissip_m, only: inidissip
26 use inifilr_m, only: inifilr
27 use inigeom_m, only: inigeom
28 use initdynav_m, only: initdynav
29 use inithist_m, only: inithist
30 use init_dynzon_m, only: init_dynzon
31 use jumble, only: new_unit
32 use leapfrog_m, only: leapfrog
33 use suphec_m, only: suphec
34 use temps, only: day_ref, annee_ref, day_end, itau_dyn
35 use tracstoke, only: istdyn, istphy
36 use unit_nml_m, only: unit_nml
37 use yoethf_m, only: yoethf
38
39 IMPLICIT NONE
40
41 REAL zdtvr ! time step for dynamics, in s
42
43 ! Variables dynamiques :
44 REAL ucov(iim + 1, jjm + 1, llm), vcov(iim + 1, jjm, llm) ! vent covariant
45 REAL teta(iim + 1, jjm + 1, llm) ! température potentielle
46 REAL q(iim + 1, jjm + 1, llm, nqmx) ! champs advectés
47 REAL ps(iim + 1, jjm + 1) ! pression au sol (Pa)
48 REAL masse(iim + 1, jjm + 1, llm) ! masse d'air
49 REAL phis(iim + 1, jjm + 1) ! géopotentiel au sol
50
51 ! Variables pour le fichier histoire :
52 REAL time_0 ! time in day, as a fraction of day, in [0, 1[
53
54 ! Calendrier :
55 LOGICAL:: true_calendar = .false. ! default value
56
57 logical mask_v(iim + 1, jjm)
58 ! (mask for points in the "v" grid, first index is for longitude,
59 ! second index is for latitude)
60
61 namelist /main_nml/true_calendar
62
63 !------------------------------------------------------------
64
65 call new_unit(unit_nml)
66 open(unit_nml, file="used_namelists", status="replace", action="write")
67
68 CALL conf_gcm
69
70 print *, "Enter namelist 'main_nml'."
71 read (unit=*, nml=main_nml)
72 write(unit_nml, nml=main_nml)
73
74 ! Choix du calendrier :
75 if (true_calendar) then
76 call ioconf_calendar('gregorian')
77 else
78 call ioconf_calendar('360d')
79 endif
80
81 ! Lecture des fichiers "gcm.def" ou "run.def" :
82 call read_clesphys2
83
84 ! Initialisation des traceurs
85 ! Choix du schéma pour l'advection dans le fichier "traceur.def" ou via INCA
86 call iniadvtrac
87
88 ! Lecture du fichier "start.nc" :
89 CALL dynetat0(vcov, ucov, teta, q, masse, ps, phis, time_0)
90
91 ! On remet le calendrier à zero si demandé :
92 if (annee_ref /= anneeref .or. day_ref /= dayref) then
93 print *, 'Attention : les dates initiales lues dans le fichier ' // &
94 '"start" ne correspondent pas à celles lues dans "gcm.def".'
95 if (raz_date) then
96 print *, 'On réinitialise à la date lue dans "gcm.def".'
97 annee_ref = anneeref
98 day_ref = dayref
99 day_ini = dayref
100 itau_dyn = 0
101 time_0 = 0.
102 else
103 print *, 'On garde les dates du fichier "start".'
104 endif
105 ELSE
106 raz_date = .false.
107 endif
108
109 ! On recalcule éventuellement le pas de temps :
110 zdtvr = daysec / REAL(day_step)
111 IF (dtvr /= zdtvr) THEN
112 print *, 'Warning: the time steps in the ".def" file and in ' // &
113 '"start.nc" are different'
114 print *, 'dtvr (from "start.nc") = ', dtvr
115 print *, 'zdtvr (from ".def") = ', zdtvr
116 print *, 'Using the value from the ".def" file.'
117 dtvr = zdtvr
118 ENDIF
119
120 CALL iniconst
121 close(unit_nml)
122 CALL inigeom ! initialisation de la géometrie
123 CALL inifilr ! initialisation du filtre
124 CALL inidissip
125 call init_dyn_phy
126
127 ! Initialisation de la physique :
128 IF (iflag_phys == 1) THEN
129 rlatd(1)=rlatu(1)
130 rlatd(2:klon-1) = pack(spread(rlatu(2:jjm), 1, iim), .true.)
131 rlatd(klon)= rlatu(jjm + 1)
132
133 rlond(1)=0.
134 rlond(2:klon-1) = pack(spread(rlonv(:iim), 2, jjm - 1), .true.)
135 rlond(klon)= 0.
136
137 cuphy = pack(cu_2d, dyn_phy)
138
139 ! Construct a mask for points in the "v" grid:
140 mask_v = .true.
141 mask_v(2:, 1) = .false.
142 mask_v(iim + 1, 2:) = .false.
143
144 cvphy(:klon - 1) = pack(cv_2d, mask_v)
145 cvphy(klon) = cv_2d(1, jjm)
146 ! (that value of "cv_2d" is used twice in "cvphy")
147
148 airephy = pack(aire_2d, dyn_phy)
149 CALL suphec
150 call yoethf
151 ENDIF
152
153 ! Initialisation des entrées-sorties :
154 day_end = day_ini + nday
155 print *, "day_ini = ", day_ini
156 print *, "day_end = ", day_end
157
158 CALL dynredem0("restart.nc", day_end, phis)
159 CALL inithist(day_ref, annee_ref, zdtvr, nqmx, t_ops = iecri * daysec, &
160 t_wrt = iecri * daysec)
161 CALL initdynav(day_ref, annee_ref, zdtvr, nqmx, t_ops = iperiod * zdtvr, &
162 t_wrt = periodav * daysec)
163 call init_dynzon(dt_app = dtvr * iperiod)
164
165 ! Choix des fréquences de stockage pour le hors-ligne :
166 istdyn = day_step / 4 ! stockage toutes les 6 h = 1 jour / 4
167 istphy = istdyn / iphysiq
168
169 ! Intégration temporelle du modèle :
170 CALL leapfrog(ucov, vcov, teta, ps, masse, phis, q, time_0)
171
172 call histclo
173 print *, 'Simulation finished'
174 print *, 'Everything is cool'
175
176 END PROGRAM gcm

  ViewVC Help
Powered by ViewVC 1.1.21