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

Contents of /trunk/dyn3d/dynredem0.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 259 - (show annotations)
Tue Mar 6 16:19:52 2018 UTC (6 years, 2 months ago) by guez
File size: 8302 byte(s)
Try to clarify the logic. Remove module ener. Move variables from
module ener to module dynetat0_m, where they are defined in program
gcm. In sortvarc, I do not see how ptot0 could be 0, discard this possibility.

Remove dummy argument resetvarc of procedure sortvarc. The difference
is that sortvarc is called by caldyn or caldyn0 so just do different
processing in caldyn and caldyn0 instead of inside sortvarc.

No need for variables ang, etot, ptot, rmsdpdt, rmsv, stot, ztot to be
at module level in module sortvarc_m, downgrade them to arguments of
sortvarc. Instead of modyfying the meaning of ang, etot, ptot,
rmsdpdt, rmsv, stot, ztot from absolute quantities to variations of
these quantities, print the ratio in caldyn.

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

  ViewVC Help
Powered by ViewVC 1.1.21