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

Annotation of /trunk/dyn3d/dynredem0.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 139 - (hide annotations)
Tue May 26 17:46:03 2015 UTC (9 years ago) by guez
Original Path: trunk/Sources/dyn3d/dynredem0.f
File size: 8503 byte(s)
dynetat0 read rlonu, rlatu, rlonv, rlatv, cu_2d, cv_2d, aire_2d from
"start.nc" and then these variables were overwritten by
inigeom. Corrected this. Now, inigeom does not compute rlonu, rlatu,
rlonv and rlatv. Moreover, cu_2d, cv_2d, aire_2d are not written to
"restart.nc". Since xprimu, xprimv, xprimm025, xprimp025, rlatu1,
rlatu2, yprimu1, yprimu2 are computed at the same time as rlonu,
rlatu, rlonv, rlatv, and since it would not be convenient to separate
those computations, we decide to write xprimu, xprimv, xprimm025,
xprimp025, rlatu1, rlatu2, yprimu1, yprimu2 into "restart.nc", read
them from "start.nc" and not compute them in inigeom. So, in summary,
"start.nc" contains all the coordinates and their derivatives, and
inigeom only computes the 2D-variables.

Technical details:

Moved variables rlatu, rlonv, rlonu, rlatv, xprimu, xprimv from module
comgeom to module dynetat0_m. Upgraded local variables rlatu1,
yprimu1, rlatu2, yprimu2, xprimm025, xprimp025 of procedure inigeom to
variables of module dynetat0_m.

Removed unused local variable yprimu of procedure inigeom and
corresponding argument yyprimu of fyhyp.

Moved variables clat, clon, grossismx, grossismy, dzoomx, dzoomy,
taux, tauy from module serre to module dynetat0_m (since they are read
from "start.nc"). The default values are now defined in read_serre
instead of in the declarations. Changed name of module serre to
read_serre_m, no more module variable here.

The calls to fxhyp and fyhyp are moved from inigeom to etat0.

Side effects in programs other than gcm: etat0 and read_serre write
variables of module dynetat0; the programs test_fxyp and
test_inter_barxy need more source files.

Removed unused arguments len and nd of cv3_tracer. Removed unused
argument PPSOL of LWU.

Bug fix in test_inter_barxy: forgotten call to read_serre.

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

  ViewVC Help
Powered by ViewVC 1.1.21