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

Annotation of /trunk/dyn3d/gcm.f

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21