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

Annotation of /trunk/dyn3d/gcm.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 108 - (hide 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 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 108 use netcdf95, only: nf95_close
33 guez 37 use suphec_m, only: suphec
34 guez 26 use temps, only: day_ref, annee_ref, day_end, itau_dyn
35     use tracstoke, only: istdyn, istphy
36 guez 57 use unit_nml_m, only: unit_nml
37 guez 38 use yoethf_m, only: yoethf
38 guez 108 use write_field, only: NbField, FieldId
39 guez 3
40     IMPLICIT NONE
41    
42     ! Variables dynamiques :
43 guez 55 REAL ucov(iim + 1, jjm + 1, llm), vcov(iim + 1, jjm, llm) ! vent covariant
44 guez 43 REAL teta(iim + 1, jjm + 1, llm) ! température potentielle
45 guez 40 REAL q(iim + 1, jjm + 1, llm, nqmx) ! champs advectés
46 guez 39 REAL ps(iim + 1, jjm + 1) ! pression au sol (Pa)
47 guez 55 REAL masse(iim + 1, jjm + 1, llm) ! masse d'air
48 guez 7 REAL phis(iim + 1, jjm + 1) ! géopotentiel au sol
49 guez 3
50     ! Variables pour le fichier histoire :
51 guez 25 REAL time_0 ! time in day, as a fraction of day, in [0, 1[
52 guez 3
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 guez 108 integer i
61    
62 guez 3 namelist /main_nml/true_calendar
63    
64     !------------------------------------------------------------
65    
66 guez 57 call new_unit(unit_nml)
67 guez 79 open(unit_nml, file="used_namelists.txt", status="replace", action="write")
68 guez 57
69     CALL conf_gcm
70    
71 guez 3 print *, "Enter namelist 'main_nml'."
72     read (unit=*, nml=main_nml)
73 guez 57 write(unit_nml, nml=main_nml)
74 guez 3
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 guez 23 call iniadvtrac
85 guez 3
86 guez 79 CALL iniconst
87    
88 guez 3 ! Lecture du fichier "start.nc" :
89     CALL dynetat0(vcov, ucov, teta, q, masse, ps, phis, time_0)
90    
91 guez 98 ! 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 guez 3 endif
102    
103 guez 79 CALL disvert
104 guez 36 CALL inigeom ! initialisation de la géometrie
105     CALL inifilr ! initialisation du filtre
106 guez 27 CALL inidissip
107 guez 3 call init_dyn_phy
108    
109     ! Initialisation de la physique :
110     IF (iflag_phys == 1) THEN
111 guez 37 rlatd(1)=rlatu(1)
112     rlatd(2:klon-1) = pack(spread(rlatu(2:jjm), 1, iim), .true.)
113     rlatd(klon)= rlatu(jjm + 1)
114 guez 3
115 guez 37 rlond(1)=0.
116     rlond(2:klon-1) = pack(spread(rlonv(:iim), 2, jjm - 1), .true.)
117     rlond(klon)= 0.
118 guez 3
119 guez 37 cuphy = pack(cu_2d, dyn_phy)
120 guez 3
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 guez 37 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 guez 3
130 guez 37 airephy = pack(aire_2d, dyn_phy)
131     CALL suphec
132 guez 38 call yoethf
133 guez 3 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 guez 5 CALL dynredem0("restart.nc", day_end, phis)
141 guez 79 CALL inithist(day_ref, annee_ref, dtvr, nqmx, t_ops = iecri * daysec, &
142 guez 56 t_wrt = iecri * daysec)
143 guez 79 CALL initdynav(day_ref, annee_ref, dtvr, nqmx, t_ops = iperiod * dtvr, &
144 guez 56 t_wrt = periodav * daysec)
145 guez 57 call init_dynzon(dt_app = dtvr * iperiod)
146 guez 3
147     ! Choix des fréquences de stockage pour le hors-ligne :
148 guez 36 istdyn = day_step / 4 ! stockage toutes les 6 h = 1 jour / 4
149 guez 3 istphy = istdyn / iphysiq
150    
151     ! Intégration temporelle du modèle :
152 guez 23 CALL leapfrog(ucov, vcov, teta, ps, masse, phis, q, time_0)
153 guez 3
154 guez 68 close(unit_nml)
155 guez 10 call histclo
156 guez 108
157     do i = 1, nbfield
158     call nf95_close(FieldId(i))
159     end do
160    
161 guez 10 print *, 'Simulation finished'
162     print *, 'Everything is cool'
163    
164 guez 3 END PROGRAM gcm

  ViewVC Help
Powered by ViewVC 1.1.21