/[lmdze]/trunk/libf/dyn3d/dynredem0.f90
ViewVC logotype

Annotation of /trunk/libf/dyn3d/dynredem0.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5 - (hide annotations)
Mon Mar 3 16:32:04 2008 UTC (16 years, 2 months ago) by guez
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 guez 5 SUBROUTINE dynredem0(fichnom, iday_end, phis)
2 guez 3
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 guez 5 use dimens_m, only: iim, jjm, llm, nqmx
9 guez 3 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 guez 5 use netcdf95, only: nf95_create, NF90_CLOBBER, nf95_put_att, NF90_GLOBAL, &
19     nf95_def_dim, NF90_UNLIMITED
20 guez 3
21     IMPLICIT NONE
22    
23 guez 5 CHARACTER(len=*), intent(in):: fichnom
24 guez 3 INTEGER, intent(in):: iday_end
25     REAL, intent(in):: phis(ip1jmp1)
26    
27     ! Local:
28 guez 5
29     include "netcdf.inc"
30    
31     INTEGER iq, l
32 guez 3 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 guez 5
39 guez 3 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 guez 5 INTEGER nid, nvarid
45 guez 3
46 guez 5 REAL zjulian, hours
47     INTEGER yyears0, jjour0, mmois0
48 guez 3 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 guez 5 DO l=1, length
58 guez 3 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 guez 5 ! Paramètres pour le zoom :
81    
82 guez 3 tab_cntrl(20) = clon
83     tab_cntrl(21) = clat
84     tab_cntrl(22) = grossismx
85     tab_cntrl(23) = grossismy
86 guez 5
87 guez 3 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 guez 5
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 guez 3 ! Definir les dimensions du fichiers:
112 guez 5
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 guez 3 ierr = NF_ENDDEF(nid) ! sortir du mode de definition
123 guez 5
124 guez 3 ! Definir et enregistrer certains champs invariants:
125 guez 5
126 guez 3 ierr = NF_REDEF (nid)
127 guez 5 ierr = NF_DEF_VAR (nid, "controle", NF_FLOAT, 1, idim_index, nvarid)
128     call nf95_put_att(nid, nvarid, "title", "Parametres de controle")
129 guez 3 ierr = NF_ENDDEF(nid)
130 guez 5 ierr = NF_PUT_VAR_REAL (nid, nvarid, tab_cntrl)
131    
132 guez 3 ierr = NF_REDEF (nid)
133 guez 5 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 guez 3 ierr = NF_ENDDEF(nid)
136 guez 5 ierr = NF_PUT_VAR_REAL (nid, nvarid, rlonu)
137    
138 guez 3 ierr = NF_REDEF (nid)
139 guez 5 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 guez 3 ierr = NF_ENDDEF(nid)
142 guez 5 ierr = NF_PUT_VAR_REAL (nid, nvarid, rlatu)
143    
144 guez 3 ierr = NF_REDEF (nid)
145 guez 5 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 guez 3 ierr = NF_ENDDEF(nid)
148 guez 5 ierr = NF_PUT_VAR_REAL (nid, nvarid, rlonv)
149    
150 guez 3 ierr = NF_REDEF (nid)
151 guez 5 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 guez 3 ierr = NF_ENDDEF(nid)
154 guez 5 ierr = NF_PUT_VAR_REAL (nid, nvarid, rlatv)
155    
156 guez 3 ierr = NF_REDEF (nid)
157 guez 5 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 guez 3 ierr = NF_ENDDEF(nid)
160 guez 5 ierr = NF_PUT_VAR_REAL (nid, nvarid, nivsigs)
161    
162 guez 3 ierr = NF_REDEF (nid)
163 guez 5 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 guez 3 ierr = NF_ENDDEF(nid)
166 guez 5 ierr = NF_PUT_VAR_REAL (nid, nvarid, nivsig)
167    
168 guez 3 ierr = NF_REDEF (nid)
169 guez 5 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 guez 3 ierr = NF_ENDDEF(nid)
172 guez 5 ierr = NF_PUT_VAR_REAL (nid, nvarid, ap)
173    
174 guez 3 ierr = NF_REDEF (nid)
175 guez 5 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 guez 3 ierr = NF_ENDDEF(nid)
178 guez 5 ierr = NF_PUT_VAR_REAL (nid, nvarid, bp)
179    
180 guez 3 ierr = NF_REDEF (nid)
181 guez 5 ierr = NF_DEF_VAR (nid, "presnivs", NF_FLOAT, 1, idim_s, nvarid)
182 guez 3 ierr = NF_ENDDEF(nid)
183 guez 5 ierr = NF_PUT_VAR_REAL (nid, nvarid, presnivs)
184    
185 guez 3 ! Coefficients de passage cov. <-> contra. <--> naturel
186 guez 5
187 guez 3 ierr = NF_REDEF (nid)
188     dims2(1) = idim_rlonu
189     dims2(2) = idim_rlatu
190 guez 5 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 guez 3 ierr = NF_ENDDEF(nid)
193 guez 5 ierr = NF_PUT_VAR_REAL (nid, nvarid, cu)
194    
195 guez 3 ierr = NF_REDEF (nid)
196     dims2(1) = idim_rlonv
197     dims2(2) = idim_rlatv
198 guez 5 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 guez 3 ierr = NF_ENDDEF(nid)
201 guez 5 ierr = NF_PUT_VAR_REAL (nid, nvarid, cv)
202    
203 guez 3 ! Aire de chaque maille:
204 guez 5
205 guez 3 ierr = NF_REDEF (nid)
206     dims2(1) = idim_rlonv
207     dims2(2) = idim_rlatu
208 guez 5 ierr = NF_DEF_VAR (nid, "aire", NF_FLOAT, 2, dims2, nvarid)
209     call nf95_put_att(nid, nvarid, "title", "Aires de chaque maille")
210 guez 3 ierr = NF_ENDDEF(nid)
211 guez 5 ierr = NF_PUT_VAR_REAL (nid, nvarid, aire)
212    
213 guez 3 ! Geopentiel au sol:
214 guez 5
215 guez 3 ierr = NF_REDEF (nid)
216     dims2(1) = idim_rlonv
217     dims2(2) = idim_rlatu
218 guez 5 ierr = NF_DEF_VAR (nid, "phisinit", NF_FLOAT, 2, dims2, nvarid)
219     call nf95_put_att(nid, nvarid, "title", "Geopotentiel au sol")
220 guez 3 ierr = NF_ENDDEF(nid)
221 guez 5 ierr = NF_PUT_VAR_REAL (nid, nvarid, phis)
222    
223 guez 3 ! Definir les variables pour pouvoir les enregistrer plus tard:
224 guez 5
225 guez 3 ierr = NF_REDEF (nid) ! entrer dans le mode de definition
226    
227 guez 5 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 guez 3 dims4(1) = idim_rlonu
235     dims4(2) = idim_rlatu
236     dims4(3) = idim_s
237     dims4(4) = idim_tim
238 guez 5 ierr = NF_DEF_VAR (nid, "ucov", NF_FLOAT, 4, dims4, nvarid)
239     call nf95_put_att(nid, nvarid, "title", "Vitesse U")
240    
241 guez 3 dims4(1) = idim_rlonv
242     dims4(2) = idim_rlatv
243     dims4(3) = idim_s
244     dims4(4) = idim_tim
245 guez 5 ierr = NF_DEF_VAR (nid, "vcov", NF_FLOAT, 4, dims4, nvarid)
246     call nf95_put_att(nid, nvarid, "title", "Vitesse V")
247    
248 guez 3 dims4(1) = idim_rlonv
249     dims4(2) = idim_rlatu
250     dims4(3) = idim_s
251     dims4(4) = idim_tim
252 guez 5 ierr = NF_DEF_VAR (nid, "teta", NF_FLOAT, 4, dims4, nvarid)
253     call nf95_put_att(nid, nvarid, "title", "Temperature")
254    
255 guez 3 dims4(1) = idim_rlonv
256     dims4(2) = idim_rlatu
257     dims4(3) = idim_s
258     dims4(4) = idim_tim
259 guez 5 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 guez 3 dims4(1) = idim_rlonv
265     dims4(2) = idim_rlatu
266     dims4(3) = idim_s
267     dims4(4) = idim_tim
268 guez 5 ierr = NF_DEF_VAR (nid, "masse", NF_FLOAT, 4, dims4, nvarid)
269     call nf95_put_att(nid, nvarid, "title", "C est quoi ?")
270    
271 guez 3 dims3(1) = idim_rlonv
272     dims3(2) = idim_rlatu
273     dims3(3) = idim_tim
274 guez 5 ierr = NF_DEF_VAR (nid, "ps", NF_FLOAT, 3, dims3, nvarid)
275     call nf95_put_att(nid, nvarid, "title", "Pression au sol")
276    
277 guez 3 ierr = NF_ENDDEF(nid) ! sortir du mode de definition
278     ierr = NF_CLOSE(nid) ! fermer le fichier
279    
280 guez 5 PRINT*, 'iim, jjm, llm, iday_end', iim, jjm, llm, iday_end
281     PRINT*, 'rad, omeg, g, cpp, kappa', rad, omeg, g, cpp, kappa
282 guez 3
283     END SUBROUTINE dynredem0

  ViewVC Help
Powered by ViewVC 1.1.21