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

Contents of /trunk/dyn3d/dynredem0.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5 - (show annotations)
Mon Mar 3 16:32:04 2008 UTC (16 years, 2 months ago) by guez
Original Path: trunk/libf/dyn3d/dynredem0.f90
File size: 8768 byte(s)
Created module from included file parafilt.
Converted caldyn0 to free format.
Added a rule to create cross-references with NAG.
Added optional attribute in iniadvtrac.
Suppressed argument nq in dynredem0 and dynredem1, using nqmx instead.
Replaced some NetCDF calls by netcdf95 calls in dynredem0.
Added intent attribute in dynredem0 and dynredem1.
Annotated use statements with only clause, in dynredem1.
Suppressed variable nq and argument of iniadvtrac in etat0.
Added test on nqmx in etat0.
1 SUBROUTINE dynredem0(fichnom, iday_end, phis)
2
3 ! From dyn3d/dynredem.F, v 1.2 2004/06/22 11:45:30
4
5 ! Ecriture du fichier de redémarrage au format NetCDF (initialisation)
6
7 USE IOIPSL, only: ymds2ju, ju2ymds
8 use dimens_m, only: iim, jjm, llm, nqmx
9 use paramet_m, only: ip1jmp1, iip1, jjp1, llmp1
10 use comconst, only: rad, cpp, daysec, dtvr, kappa, g, omeg
11 use comvert, only: pa, bp, ap, nivsigs, preff, presnivs, nivsig
12 use logic
13 use comgeom
14 use serre
15 use temps, only: annee_ref, day_ref, itaufin, itau_dyn
16 use ener
17 use advtrac_m, only: tname, ttext
18 use netcdf95, only: nf95_create, NF90_CLOBBER, nf95_put_att, NF90_GLOBAL, &
19 nf95_def_dim, NF90_UNLIMITED
20
21 IMPLICIT NONE
22
23 CHARACTER(len=*), intent(in):: fichnom
24 INTEGER, intent(in):: iday_end
25 REAL, intent(in):: phis(ip1jmp1)
26
27 ! Local:
28
29 include "netcdf.inc"
30
31 INTEGER iq, l
32 INTEGER length
33 PARAMETER (length = 100)
34 REAL tab_cntrl(length) ! tableau des parametres du run
35 INTEGER ierr
36
37 ! Variables locales pour NetCDF:
38
39 INTEGER dims2(2), dims3(3), dims4(4)
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 nid, nvarid
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.0, zjulian)
55 call ju2ymds(zjulian, yyears0, mmois0, jjour0, hours)
56
57 DO l=1, length
58 tab_cntrl(l) = 0.
59 ENDDO
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
87 IF ( fxyhypb ) THEN
88 tab_cntrl(24) = 1.
89 tab_cntrl(25) = dzoomx
90 tab_cntrl(26) = dzoomy
91 tab_cntrl(27) = 0.
92 tab_cntrl(28) = taux
93 tab_cntrl(29) = tauy
94 ELSE
95 tab_cntrl(24) = 0.
96 tab_cntrl(25) = dzoomx
97 tab_cntrl(26) = dzoomy
98 tab_cntrl(27) = 0.
99 tab_cntrl(28) = 0.
100 tab_cntrl(29) = 0.
101 IF( ysinus ) tab_cntrl(27) = 1.
102 ENDIF
103
104 tab_cntrl(30) = REAL(iday_end)
105 tab_cntrl(31) = REAL(itau_dyn + itaufin)
106
107 call nf95_create(fichnom, NF90_CLOBBER, nid)
108 call nf95_put_att(nid, NF90_GLOBAL, "title", &
109 "Fichier de démarrage dynamique")
110
111 ! Definir les dimensions du fichiers:
112
113 call nf95_def_dim(nid, "index", length, idim_index)
114 call NF95_DEF_DIM(nid, "rlonu", iip1, idim_rlonu)
115 call NF95_DEF_DIM(nid, "rlatu", jjp1, idim_rlatu)
116 call NF95_DEF_DIM(nid, "rlonv", iip1, idim_rlonv)
117 call NF95_DEF_DIM(nid, "rlatv", jjm, idim_rlatv)
118 call NF95_DEF_DIM(nid, "sigs", llm, idim_s)
119 call NF95_DEF_DIM(nid, "sig", llmp1, idim_sig)
120 call NF95_DEF_DIM(nid, "temps", NF90_UNLIMITED, idim_tim)
121
122 ierr = NF_ENDDEF(nid) ! sortir du mode de definition
123
124 ! Definir et enregistrer certains champs invariants:
125
126 ierr = NF_REDEF (nid)
127 ierr = NF_DEF_VAR (nid, "controle", NF_FLOAT, 1, idim_index, nvarid)
128 call nf95_put_att(nid, nvarid, "title", "Parametres de controle")
129 ierr = NF_ENDDEF(nid)
130 ierr = NF_PUT_VAR_REAL (nid, nvarid, tab_cntrl)
131
132 ierr = NF_REDEF (nid)
133 ierr = NF_DEF_VAR (nid, "rlonu", NF_FLOAT, 1, idim_rlonu, nvarid)
134 call nf95_put_att(nid, nvarid, "title", "Longitudes des points U")
135 ierr = NF_ENDDEF(nid)
136 ierr = NF_PUT_VAR_REAL (nid, nvarid, rlonu)
137
138 ierr = NF_REDEF (nid)
139 ierr = NF_DEF_VAR (nid, "rlatu", NF_FLOAT, 1, idim_rlatu, nvarid)
140 call nf95_put_att(nid, nvarid, "title", "Latitudes des points U")
141 ierr = NF_ENDDEF(nid)
142 ierr = NF_PUT_VAR_REAL (nid, nvarid, rlatu)
143
144 ierr = NF_REDEF (nid)
145 ierr = NF_DEF_VAR (nid, "rlonv", NF_FLOAT, 1, idim_rlonv, nvarid)
146 call nf95_put_att(nid, nvarid, "title", "Longitudes des points V")
147 ierr = NF_ENDDEF(nid)
148 ierr = NF_PUT_VAR_REAL (nid, nvarid, rlonv)
149
150 ierr = NF_REDEF (nid)
151 ierr = NF_DEF_VAR (nid, "rlatv", NF_FLOAT, 1, idim_rlatv, nvarid)
152 call nf95_put_att(nid, nvarid, "title", "Latitudes des points V")
153 ierr = NF_ENDDEF(nid)
154 ierr = NF_PUT_VAR_REAL (nid, nvarid, rlatv)
155
156 ierr = NF_REDEF (nid)
157 ierr = NF_DEF_VAR (nid, "nivsigs", NF_FLOAT, 1, idim_s, nvarid)
158 call nf95_put_att(nid, nvarid, "title", "Numero naturel des couches s")
159 ierr = NF_ENDDEF(nid)
160 ierr = NF_PUT_VAR_REAL (nid, nvarid, nivsigs)
161
162 ierr = NF_REDEF (nid)
163 ierr = NF_DEF_VAR (nid, "nivsig", NF_FLOAT, 1, idim_sig, nvarid)
164 call nf95_put_att(nid, nvarid, "title", "Numero naturel des couches sigma")
165 ierr = NF_ENDDEF(nid)
166 ierr = NF_PUT_VAR_REAL (nid, nvarid, nivsig)
167
168 ierr = NF_REDEF (nid)
169 ierr = NF_DEF_VAR (nid, "ap", NF_FLOAT, 1, idim_sig, nvarid)
170 call nf95_put_att(nid, nvarid, "title", "Coefficient A pour hybride")
171 ierr = NF_ENDDEF(nid)
172 ierr = NF_PUT_VAR_REAL (nid, nvarid, ap)
173
174 ierr = NF_REDEF (nid)
175 ierr = NF_DEF_VAR (nid, "bp", NF_FLOAT, 1, idim_sig, nvarid)
176 call nf95_put_att(nid, nvarid, "title", "Coefficient B pour hybride")
177 ierr = NF_ENDDEF(nid)
178 ierr = NF_PUT_VAR_REAL (nid, nvarid, bp)
179
180 ierr = NF_REDEF (nid)
181 ierr = NF_DEF_VAR (nid, "presnivs", NF_FLOAT, 1, idim_s, nvarid)
182 ierr = NF_ENDDEF(nid)
183 ierr = NF_PUT_VAR_REAL (nid, nvarid, presnivs)
184
185 ! Coefficients de passage cov. <-> contra. <--> naturel
186
187 ierr = NF_REDEF (nid)
188 dims2(1) = idim_rlonu
189 dims2(2) = idim_rlatu
190 ierr = NF_DEF_VAR (nid, "cu", NF_FLOAT, 2, dims2, nvarid)
191 call nf95_put_att(nid, nvarid, "title", "Coefficient de passage pour U")
192 ierr = NF_ENDDEF(nid)
193 ierr = NF_PUT_VAR_REAL (nid, nvarid, cu)
194
195 ierr = NF_REDEF (nid)
196 dims2(1) = idim_rlonv
197 dims2(2) = idim_rlatv
198 ierr = NF_DEF_VAR (nid, "cv", NF_FLOAT, 2, dims2, nvarid)
199 call nf95_put_att(nid, nvarid, "title", "Coefficient de passage pour V")
200 ierr = NF_ENDDEF(nid)
201 ierr = NF_PUT_VAR_REAL (nid, nvarid, cv)
202
203 ! Aire de chaque maille:
204
205 ierr = NF_REDEF (nid)
206 dims2(1) = idim_rlonv
207 dims2(2) = idim_rlatu
208 ierr = NF_DEF_VAR (nid, "aire", NF_FLOAT, 2, dims2, nvarid)
209 call nf95_put_att(nid, nvarid, "title", "Aires de chaque maille")
210 ierr = NF_ENDDEF(nid)
211 ierr = NF_PUT_VAR_REAL (nid, nvarid, aire)
212
213 ! Geopentiel au sol:
214
215 ierr = NF_REDEF (nid)
216 dims2(1) = idim_rlonv
217 dims2(2) = idim_rlatu
218 ierr = NF_DEF_VAR (nid, "phisinit", NF_FLOAT, 2, dims2, nvarid)
219 call nf95_put_att(nid, nvarid, "title", "Geopotentiel au sol")
220 ierr = NF_ENDDEF(nid)
221 ierr = NF_PUT_VAR_REAL (nid, nvarid, phis)
222
223 ! Definir les variables pour pouvoir les enregistrer plus tard:
224
225 ierr = NF_REDEF (nid) ! entrer dans le mode de definition
226
227 ierr = NF_DEF_VAR (nid, "temps", NF_FLOAT, 1, idim_tim, nvarid)
228 call nf95_put_att(nid, nvarid, "title", "Temps de simulation")
229 write(unites, 200)yyears0, mmois0, jjour0
230 200 format('days since ', i4, '-', i2.2, '-', i2.2, ' 00:00:00')
231 call nf95_put_att(nid, nvarid, "units", unites)
232
233
234 dims4(1) = idim_rlonu
235 dims4(2) = idim_rlatu
236 dims4(3) = idim_s
237 dims4(4) = idim_tim
238 ierr = NF_DEF_VAR (nid, "ucov", NF_FLOAT, 4, dims4, nvarid)
239 call nf95_put_att(nid, nvarid, "title", "Vitesse U")
240
241 dims4(1) = idim_rlonv
242 dims4(2) = idim_rlatv
243 dims4(3) = idim_s
244 dims4(4) = idim_tim
245 ierr = NF_DEF_VAR (nid, "vcov", NF_FLOAT, 4, dims4, nvarid)
246 call nf95_put_att(nid, nvarid, "title", "Vitesse V")
247
248 dims4(1) = idim_rlonv
249 dims4(2) = idim_rlatu
250 dims4(3) = idim_s
251 dims4(4) = idim_tim
252 ierr = NF_DEF_VAR (nid, "teta", NF_FLOAT, 4, dims4, nvarid)
253 call nf95_put_att(nid, nvarid, "title", "Temperature")
254
255 dims4(1) = idim_rlonv
256 dims4(2) = idim_rlatu
257 dims4(3) = idim_s
258 dims4(4) = idim_tim
259 DO iq=1, nqmx
260 ierr = NF_DEF_VAR (nid, tname(iq), NF_FLOAT, 4, dims4, nvarid)
261 call nf95_put_att(nid, nvarid, "title", ttext(iq))
262 ENDDO
263
264 dims4(1) = idim_rlonv
265 dims4(2) = idim_rlatu
266 dims4(3) = idim_s
267 dims4(4) = idim_tim
268 ierr = NF_DEF_VAR (nid, "masse", NF_FLOAT, 4, dims4, nvarid)
269 call nf95_put_att(nid, nvarid, "title", "C est quoi ?")
270
271 dims3(1) = idim_rlonv
272 dims3(2) = idim_rlatu
273 dims3(3) = idim_tim
274 ierr = NF_DEF_VAR (nid, "ps", NF_FLOAT, 3, dims3, nvarid)
275 call nf95_put_att(nid, nvarid, "title", "Pression au sol")
276
277 ierr = NF_ENDDEF(nid) ! sortir du mode de definition
278 ierr = NF_CLOSE(nid) ! fermer le fichier
279
280 PRINT*, 'iim, jjm, llm, iday_end', iim, jjm, llm, iday_end
281 PRINT*, 'rad, omeg, g, cpp, kappa', rad, omeg, g, cpp, kappa
282
283 END SUBROUTINE dynredem0

  ViewVC Help
Powered by ViewVC 1.1.21