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

Contents of /trunk/dyn3d/dynredem0.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 113 - (show annotations)
Thu Sep 18 19:56:46 2014 UTC (9 years, 7 months ago) by guez
File size: 7937 byte(s)
Moved the call to read_serre out of conf_gcm so that it can be called
only in the program ce0l, not in gcm. In gcm, variables of module
serre are read from start file. Added reading of dzoomx, dzoomy, taux,
tauy from start file, in dynetat0. Those variables were written by
dynredem0 but not read.

Removed possibility fxyhypb = false, because the geometric part of the
program is such a mess. Could then remove variables transx, transy,
alphax, alphay, pxo, pyo of module serre.

Bug fix in tau2alpha: missing save attributes. The first call to
tau2alpha needs to compute dxdyu and dxdyv regardless of value of
argument type, because they will be needed for subsequent calls to
tau2alpha with various values of argument type.

1 MODULE dynredem0_m
2
3 IMPLICIT NONE
4
5 CONTAINS
6
7 SUBROUTINE dynredem0(fichnom, iday_end, phis)
8
9 ! From dyn3d/dynredem.F, version 1.2 2004/06/22 11:45:30
10 ! Ecriture du fichier de redémarrage au format NetCDF (initialisation)
11
12 USE comconst, ONLY: cpp, daysec, dtvr, g, kappa, omeg, rad
13 USE comgeom, ONLY: aire_2d, cu_2d, cv_2d, rlatu, rlatv, rlonu, rlonv
14 USE dimens_m, ONLY: iim, jjm, llm, nqmx
15 USE disvert_m, ONLY: ap, bp, pa, preff, presnivs
16 USE ener, ONLY: ang0, etot0, ptot0, stot0, ztot0
17 USE iniadvtrac_m, ONLY: tname, ttext
18 USE ju2ymds_m, ONLY: ju2ymds
19 USE netcdf, ONLY: nf90_clobber, nf90_float, nf90_global, nf90_unlimited
20 USE netcdf95, ONLY: nf95_close, nf95_create, nf95_def_dim, nf95_def_var, &
21 nf95_enddef, nf95_inq_varid, nf95_put_att, nf95_put_var
22 USE paramet_m, ONLY: iip1, jjp1, llmp1
23 USE serre, ONLY: clat, clon, dzoomx, dzoomy, grossismx, grossismy, taux, &
24 tauy
25 USE temps, ONLY: annee_ref, day_ref
26 use ymds2ju_m, only: ymds2ju
27
28 CHARACTER(len=*), INTENT(IN):: fichnom
29 INTEGER, INTENT(IN):: iday_end
30 REAL, INTENT(IN):: phis(:, :)
31
32 ! Local:
33
34 INTEGER iq, l
35 INTEGER, PARAMETER:: length = 100
36 REAL tab_cntrl(length) ! tableau des paramètres du run
37
38 ! Variables locales pour NetCDF:
39
40 INTEGER idim_index
41 INTEGER idim_rlonu, idim_rlonv, idim_rlatu, idim_rlatv
42 INTEGER idim_s, idim_sig
43 INTEGER idim_tim
44 INTEGER ncid, varid
45
46 REAL zjulian, hours
47 INTEGER yyears0, jjour0, mmois0
48 CHARACTER(len=30) unites
49
50 !-----------------------------------------------------------------------
51
52 PRINT *, 'Call sequence information: dynredem0'
53
54 CALL ymds2ju(annee_ref, 1, iday_end, 0., zjulian)
55 CALL ju2ymds(zjulian, yyears0, mmois0, jjour0, hours)
56
57 DO l = 1, length
58 tab_cntrl(l) = 0.
59 END DO
60 tab_cntrl(1) = real(iim)
61 tab_cntrl(2) = real(jjm)
62 tab_cntrl(3) = real(llm)
63 tab_cntrl(4) = real(day_ref)
64 tab_cntrl(5) = real(annee_ref)
65 tab_cntrl(6) = rad
66 tab_cntrl(7) = omeg
67 tab_cntrl(8) = g
68 tab_cntrl(9) = cpp
69 tab_cntrl(10) = kappa
70 tab_cntrl(11) = daysec
71 tab_cntrl(12) = dtvr
72 tab_cntrl(13) = etot0
73 tab_cntrl(14) = ptot0
74 tab_cntrl(15) = ztot0
75 tab_cntrl(16) = stot0
76 tab_cntrl(17) = ang0
77 tab_cntrl(18) = pa
78 tab_cntrl(19) = preff
79
80 ! Paramètres pour le zoom :
81
82 tab_cntrl(20) = clon
83 tab_cntrl(21) = clat
84 tab_cntrl(22) = grossismx
85 tab_cntrl(23) = grossismy
86 tab_cntrl(24) = 1.
87 tab_cntrl(25) = dzoomx
88 tab_cntrl(26) = dzoomy
89 tab_cntrl(27) = 0.
90 tab_cntrl(28) = taux
91 tab_cntrl(29) = tauy
92
93 tab_cntrl(30) = real(iday_end)
94
95 CALL nf95_create(fichnom, nf90_clobber, ncid)
96 CALL nf95_put_att(ncid, nf90_global, 'title', &
97 'Fichier de démarrage dynamique')
98
99 ! Definir les dimensions du fichiers:
100
101 CALL nf95_def_dim(ncid, 'index', length, idim_index)
102 CALL nf95_def_dim(ncid, 'rlonu', iip1, idim_rlonu)
103 CALL nf95_def_dim(ncid, 'rlatu', jjp1, idim_rlatu)
104 CALL nf95_def_dim(ncid, 'rlonv', iip1, idim_rlonv)
105 CALL nf95_def_dim(ncid, 'rlatv', jjm, idim_rlatv)
106 CALL nf95_def_dim(ncid, 'sigs', llm, idim_s)
107 CALL nf95_def_dim(ncid, 'sig', llmp1, idim_sig)
108 CALL nf95_def_dim(ncid, 'temps', nf90_unlimited, idim_tim)
109
110 ! Definir et enregistrer certains champs invariants:
111
112 CALL nf95_def_var(ncid, 'controle', nf90_float, idim_index, varid)
113 CALL nf95_put_att(ncid, varid, 'title', 'Parametres de controle')
114
115 CALL nf95_def_var(ncid, 'rlonu', nf90_float, idim_rlonu, varid)
116 CALL nf95_put_att(ncid, varid, 'title', 'Longitudes des points U')
117
118 CALL nf95_def_var(ncid, 'rlatu', nf90_float, idim_rlatu, varid)
119 CALL nf95_put_att(ncid, varid, 'title', 'Latitudes des points U')
120
121 CALL nf95_def_var(ncid, 'rlonv', nf90_float, idim_rlonv, varid)
122 CALL nf95_put_att(ncid, varid, 'title', 'Longitudes des points V')
123
124 CALL nf95_def_var(ncid, 'rlatv', nf90_float, idim_rlatv, varid)
125 CALL nf95_put_att(ncid, varid, 'title', 'Latitudes des points V')
126
127 CALL nf95_def_var(ncid, 'ap', nf90_float, idim_sig, varid)
128 CALL nf95_put_att(ncid, varid, 'title', 'Coefficient A pour hybride')
129
130 CALL nf95_def_var(ncid, 'bp', nf90_float, idim_sig, varid)
131 CALL nf95_put_att(ncid, varid, 'title', 'Coefficient B pour hybride')
132
133 CALL nf95_def_var(ncid, 'presnivs', nf90_float, idim_s, varid)
134
135 ! Coefficients de passage cov. <-> contra. <--> naturel
136
137 CALL nf95_def_var(ncid, 'cu', nf90_float, (/idim_rlonu, idim_rlatu/), varid)
138 CALL nf95_put_att(ncid, varid, 'title', 'Coefficient de passage pour U')
139
140 CALL nf95_def_var(ncid, 'cv', nf90_float, (/idim_rlonv, idim_rlatv/), varid)
141 CALL nf95_put_att(ncid, varid, 'title', 'Coefficient de passage pour V')
142
143 ! Aire de chaque maille:
144
145 CALL nf95_def_var(ncid, 'aire', nf90_float, (/idim_rlonv, idim_rlatu/), &
146 varid)
147 CALL nf95_put_att(ncid, varid, 'title', 'Aires de chaque maille')
148
149 ! Geopentiel au sol:
150
151 CALL nf95_def_var(ncid, 'phisinit', nf90_float, &
152 (/idim_rlonv, idim_rlatu/), varid)
153 CALL nf95_put_att(ncid, varid, 'title', 'Geopotentiel au sol')
154
155 ! Definir les variables pour pouvoir les enregistrer plus tard:
156
157 CALL nf95_def_var(ncid, 'temps', nf90_float, idim_tim, varid)
158 CALL nf95_put_att(ncid, varid, 'title', 'Temps de simulation')
159 WRITE(unites, 200) yyears0, mmois0, jjour0
160 200 FORMAT ('days since ', I4, '-', I2.2, '-', I2.2, ' 00:00:00')
161 CALL nf95_put_att(ncid, varid, 'units', unites)
162
163 CALL nf95_def_var(ncid, 'ucov', nf90_float, &
164 (/idim_rlonu, idim_rlatu, idim_s, idim_tim/), varid)
165 CALL nf95_put_att(ncid, varid, 'title', 'Vitesse U')
166
167 CALL nf95_def_var(ncid, 'vcov', nf90_float, &
168 (/idim_rlonv, idim_rlatv, idim_s, idim_tim/), varid)
169 CALL nf95_put_att(ncid, varid, 'title', 'Vitesse V')
170
171 CALL nf95_def_var(ncid, 'teta', nf90_float, &
172 (/idim_rlonv, idim_rlatu, idim_s, idim_tim/), varid)
173 CALL nf95_put_att(ncid, varid, 'title', 'Temperature')
174
175 DO iq = 1, nqmx
176 CALL nf95_def_var(ncid, tname(iq), nf90_float, &
177 (/idim_rlonv, idim_rlatu, idim_s, idim_tim/), varid)
178 CALL nf95_put_att(ncid, varid, 'title', ttext(iq))
179 END DO
180
181 CALL nf95_def_var(ncid, 'masse', nf90_float, &
182 (/idim_rlonv, idim_rlatu, idim_s, idim_tim/), varid)
183 CALL nf95_put_att(ncid, varid, 'title', 'C est quoi ?')
184
185 CALL nf95_def_var(ncid, 'ps', nf90_float, &
186 (/idim_rlonv, idim_rlatu, idim_tim/), varid)
187 CALL nf95_put_att(ncid, varid, 'title', 'Pression au sol')
188
189 CALL nf95_enddef(ncid)
190
191 CALL nf95_inq_varid(ncid, 'controle', varid)
192 CALL nf95_put_var(ncid, varid, tab_cntrl)
193
194 CALL nf95_inq_varid(ncid, 'rlonu', varid)
195 CALL nf95_put_var(ncid, varid, rlonu)
196
197 CALL nf95_inq_varid(ncid, 'rlatu', varid)
198 CALL nf95_put_var(ncid, varid, rlatu)
199
200 CALL nf95_inq_varid(ncid, 'rlonv', varid)
201 CALL nf95_put_var(ncid, varid, rlonv)
202
203 CALL nf95_inq_varid(ncid, 'rlatv', varid)
204 CALL nf95_put_var(ncid, varid, rlatv)
205
206 CALL nf95_inq_varid(ncid, 'ap', varid)
207 CALL nf95_put_var(ncid, varid, ap)
208
209 CALL nf95_inq_varid(ncid, 'bp', varid)
210 CALL nf95_put_var(ncid, varid, bp)
211
212 CALL nf95_inq_varid(ncid, 'presnivs', varid)
213 CALL nf95_put_var(ncid, varid, presnivs)
214
215 CALL nf95_inq_varid(ncid, 'cu', varid)
216 CALL nf95_put_var(ncid, varid, cu_2d)
217
218 CALL nf95_inq_varid(ncid, 'cv', varid)
219 CALL nf95_put_var(ncid, varid, cv_2d)
220
221 CALL nf95_inq_varid(ncid, 'aire', varid)
222 CALL nf95_put_var(ncid, varid, aire_2d)
223
224 CALL nf95_inq_varid(ncid, 'phisinit', varid)
225 CALL nf95_put_var(ncid, varid, phis)
226
227 CALL nf95_close(ncid) ! fermer le fichier
228
229 PRINT *, 'iim, jjm, llm, iday_end', iim, jjm, llm, iday_end
230 PRINT *, 'rad, omeg, g, cpp, kappa', rad, omeg, g, cpp, kappa
231
232 END SUBROUTINE dynredem0
233
234 END MODULE dynredem0_m

  ViewVC Help
Powered by ViewVC 1.1.21