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

Contents of /trunk/dyn3d/gcm.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 108 - (show annotations)
Tue Sep 16 14:00:41 2014 UTC (9 years, 7 months ago) by guez
File size: 4955 byte(s)
Imported writefield from LMDZ. Close at the end of gcm the files which
were created by writefiled (not done in LMDZ).

Removed procedures for the output of Grads files. Removed calls to
dump2d. In guide, replaced calls to wrgrads by calls to writefield.

In vlspltqs, removed redundant programming of saturation
pressure. Call foeew from module FCTTRE instead.

Bug fix in interpre: size of w exceeding size of correponding actual
argument wg in advtrac.

In leapfrog, call guide until the end of the run, instead of six hours
before the end.

Bug fix in readsulfate_preind: type of arguments.

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 netcdf95, only: nf95_close
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 use write_field, only: NbField, FieldId
39
40 IMPLICIT NONE
41
42 ! Variables dynamiques :
43 REAL ucov(iim + 1, jjm + 1, llm), vcov(iim + 1, jjm, llm) ! vent covariant
44 REAL teta(iim + 1, jjm + 1, llm) ! température potentielle
45 REAL q(iim + 1, jjm + 1, llm, nqmx) ! champs advectés
46 REAL ps(iim + 1, jjm + 1) ! pression au sol (Pa)
47 REAL masse(iim + 1, jjm + 1, llm) ! masse d'air
48 REAL phis(iim + 1, jjm + 1) ! géopotentiel au sol
49
50 ! Variables pour le fichier histoire :
51 REAL time_0 ! time in day, as a fraction of day, in [0, 1[
52
53 ! Calendrier :
54 LOGICAL:: true_calendar = .false. ! default value
55
56 logical mask_v(iim + 1, jjm)
57 ! (mask for points in the "v" grid, first index is for longitude,
58 ! second index is for latitude)
59
60 integer i
61
62 namelist /main_nml/true_calendar
63
64 !------------------------------------------------------------
65
66 call new_unit(unit_nml)
67 open(unit_nml, file="used_namelists.txt", status="replace", action="write")
68
69 CALL conf_gcm
70
71 print *, "Enter namelist 'main_nml'."
72 read (unit=*, nml=main_nml)
73 write(unit_nml, nml=main_nml)
74
75 ! Choix du calendrier :
76 if (true_calendar) then
77 call ioconf_calendar('gregorian')
78 else
79 call ioconf_calendar('360d')
80 endif
81
82 ! Initialisation des traceurs
83 ! Choix du schéma pour l'advection dans le fichier "traceur.def" ou via INCA
84 call iniadvtrac
85
86 CALL iniconst
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 à zéro si demandé :
92 if (raz_date) then
93 print *, 'On réinitialise à la date lue dans la namelist.'
94 annee_ref = anneeref
95 day_ref = dayref
96 day_ini = dayref
97 itau_dyn = 0
98 time_0 = 0.
99 else
100 print *, 'On garde les dates du fichier "start".'
101 endif
102
103 CALL disvert
104 CALL inigeom ! initialisation de la géometrie
105 CALL inifilr ! initialisation du filtre
106 CALL inidissip
107 call init_dyn_phy
108
109 ! Initialisation de la physique :
110 IF (iflag_phys == 1) THEN
111 rlatd(1)=rlatu(1)
112 rlatd(2:klon-1) = pack(spread(rlatu(2:jjm), 1, iim), .true.)
113 rlatd(klon)= rlatu(jjm + 1)
114
115 rlond(1)=0.
116 rlond(2:klon-1) = pack(spread(rlonv(:iim), 2, jjm - 1), .true.)
117 rlond(klon)= 0.
118
119 cuphy = pack(cu_2d, dyn_phy)
120
121 ! Construct a mask for points in the "v" grid:
122 mask_v = .true.
123 mask_v(2:, 1) = .false.
124 mask_v(iim + 1, 2:) = .false.
125
126 cvphy(:klon - 1) = pack(cv_2d, mask_v)
127 cvphy(klon) = cv_2d(1, jjm)
128 ! (that value of "cv_2d" is used twice in "cvphy")
129
130 airephy = pack(aire_2d, dyn_phy)
131 CALL suphec
132 call yoethf
133 ENDIF
134
135 ! Initialisation des entrées-sorties :
136 day_end = day_ini + nday
137 print *, "day_ini = ", day_ini
138 print *, "day_end = ", day_end
139
140 CALL dynredem0("restart.nc", day_end, phis)
141 CALL inithist(day_ref, annee_ref, dtvr, nqmx, t_ops = iecri * daysec, &
142 t_wrt = iecri * daysec)
143 CALL initdynav(day_ref, annee_ref, dtvr, nqmx, t_ops = iperiod * dtvr, &
144 t_wrt = periodav * daysec)
145 call init_dynzon(dt_app = dtvr * iperiod)
146
147 ! Choix des fréquences de stockage pour le hors-ligne :
148 istdyn = day_step / 4 ! stockage toutes les 6 h = 1 jour / 4
149 istphy = istdyn / iphysiq
150
151 ! Intégration temporelle du modèle :
152 CALL leapfrog(ucov, vcov, teta, ps, masse, phis, q, time_0)
153
154 close(unit_nml)
155 call histclo
156
157 do i = 1, nbfield
158 call nf95_close(FieldId(i))
159 end do
160
161 print *, 'Simulation finished'
162 print *, 'Everything is cool'
163
164 END PROGRAM gcm

  ViewVC Help
Powered by ViewVC 1.1.21