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

Contents of /trunk/dyn3d/dynredem0.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 227 - (show annotations)
Thu Nov 2 15:47:03 2017 UTC (6 years, 6 months ago) by guez
Original Path: trunk/Sources/dyn3d/dynredem0.f
File size: 8310 byte(s)
Rename phisinit to phis in restart.nc: clearer, same name as Fortran variable.

In aaam_bud, use rlat and rlon from phyetat0_m instead of having these
module variables associated to actual arguments in physiq.

In clmain, too many wind variables make the procedure hard to
understand. Use yu(:knon, 1) and yv(:knon, 1) instead of u1lay(:knon)
and v1lay(:knon). Note that when yu(:knon, 1) and yv(:knon, 1) are
used as actual arguments, they are probably copied to new arrays since
the elements are not contiguous. Rename yu10m to wind10m because this
is the norm of wind vector, not its zonal component. Rename yustar to
ustar. Rename uzon and vmer to u1 and v1 since these are wind
components at first layer and u1 and v1 are the names of corresponding
dummy arguments in stdlevvar.

In clmain, rename yzlev to zlev.

In clmain, screenc, stdlevvar and coefcdrag, remove the code
corresponding to zxli true (not used in LMDZ either).

Subroutine ustarhb becomes a function. Simplifications using the fact
that zx_alf2 = 0 and zx_alf1 = 1 (discarding the possibility to change
this).

In procedure vdif_kcay, remove unused dummy argument plev. Remove
useless computations of sss and sssq.

In clouds_gno, exp(100.) would overflow in single precision. Set
maximum to exp(80.) instead.

In physiq, use u(:, 1) and v(:, 1) as arguments to phytrac instead of
creating ad hoc variables yu1 and yv1.

In stdlevvar, rename dummy argument u_10m to wind10m, following the
corresponding modification in clmain. Simplifications using the fact
that ok_pred = 0 and ok_corr = 1 (discarding the possibility to change
this).

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
20 USE ener, ONLY: ang0, 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