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

Contents of /trunk/dyn3d/gcm.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 79 - (show annotations)
Fri Feb 28 17:52:47 2014 UTC (10 years, 2 months ago) by guez
Original Path: trunk/dyn3d/gcm.f90
File size: 5064 byte(s)
Moved procedure iniconst inside module comconst. Removed useless
variables of module comconst: im, jm, lllm, imp1, jmp1, lllmm1,
lllmp1, lcl, cotot, unsim. Move definition of dtvr that was in
dynetat0 and etat0 to iniconst. Moved comparison of dtvr from day_step
and start.nc that was in gcm to dynetat0. Moved call to disvert out of
iniconst. Moved call to iniconst in gcm before call to dynetat0.

Removed unused argument pvteta of physiq (not used either in LMDZ).

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 comconst, only: daysec, dtvr, iniconst
13 use comgeom, only: rlatu, aire_2d, cu_2d, cv_2d, rlonv, inigeom
14 use comgeomphy, only: airephy, cuphy, cvphy, rlatd, rlond
15 use conf_gcm_m, only: day_step, iperiod, anneeref, dayref, iecri, iphysiq, &
16 nday, raz_date, periodav, conf_gcm, iflag_phys
17 use dimens_m, only: iim, jjm, llm, nqmx
18 use dimphy, only: klon
19 USE disvert_m, ONLY : disvert
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 initdynav_m, only: initdynav
28 use inithist_m, only: inithist
29 use init_dynzon_m, only: init_dynzon
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 à zero si demandé :
88 if (annee_ref /= anneeref .or. day_ref /= dayref) then
89 print *, 'Attention : les dates initiales lues dans le fichier ' // &
90 '"start" ne correspondent pas à celles lues dans "gcm.def".'
91 if (raz_date) then
92 print *, 'On réinitialise à la date lue dans "gcm.def".'
93 annee_ref = anneeref
94 day_ref = dayref
95 day_ini = dayref
96 itau_dyn = 0
97 time_0 = 0.
98 else
99 print *, 'On garde les dates du fichier "start".'
100 endif
101 ELSE
102 raz_date = .false.
103 endif
104
105 CALL disvert
106 CALL inigeom ! initialisation de la géometrie
107 CALL inifilr ! initialisation du filtre
108 CALL inidissip
109 call init_dyn_phy
110
111 ! Initialisation de la physique :
112 IF (iflag_phys == 1) THEN
113 rlatd(1)=rlatu(1)
114 rlatd(2:klon-1) = pack(spread(rlatu(2:jjm), 1, iim), .true.)
115 rlatd(klon)= rlatu(jjm + 1)
116
117 rlond(1)=0.
118 rlond(2:klon-1) = pack(spread(rlonv(:iim), 2, jjm - 1), .true.)
119 rlond(klon)= 0.
120
121 cuphy = pack(cu_2d, dyn_phy)
122
123 ! Construct a mask for points in the "v" grid:
124 mask_v = .true.
125 mask_v(2:, 1) = .false.
126 mask_v(iim + 1, 2:) = .false.
127
128 cvphy(:klon - 1) = pack(cv_2d, mask_v)
129 cvphy(klon) = cv_2d(1, jjm)
130 ! (that value of "cv_2d" is used twice in "cvphy")
131
132 airephy = pack(aire_2d, dyn_phy)
133 CALL suphec
134 call yoethf
135 ENDIF
136
137 ! Initialisation des entrées-sorties :
138 day_end = day_ini + nday
139 print *, "day_ini = ", day_ini
140 print *, "day_end = ", day_end
141
142 CALL dynredem0("restart.nc", day_end, phis)
143 CALL inithist(day_ref, annee_ref, dtvr, nqmx, t_ops = iecri * daysec, &
144 t_wrt = iecri * daysec)
145 CALL initdynav(day_ref, annee_ref, dtvr, nqmx, t_ops = iperiod * dtvr, &
146 t_wrt = periodav * daysec)
147 call init_dynzon(dt_app = dtvr * iperiod)
148
149 ! Choix des fréquences de stockage pour le hors-ligne :
150 istdyn = day_step / 4 ! stockage toutes les 6 h = 1 jour / 4
151 istphy = istdyn / iphysiq
152
153 ! Intégration temporelle du modèle :
154 CALL leapfrog(ucov, vcov, teta, ps, masse, phis, q, time_0)
155
156 close(unit_nml)
157 call histclo
158 print *, 'Simulation finished'
159 print *, 'Everything is cool'
160
161 END PROGRAM gcm

  ViewVC Help
Powered by ViewVC 1.1.21