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

Contents of /trunk/dyn3d/dynredem0.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 335 - (show annotations)
Thu Sep 12 21:22:46 2019 UTC (4 years, 8 months ago) by guez
File size: 8313 byte(s)
Julian dates be in double precision

`ConfigureCompilerFlags.cmake` and `TAGS.cmake` are now copied into
LMDZE, to avoid dependency on the environment.

Julian dates must be in double precision, to get time step precision.

Add optional attribute to argument sec of procedure ju2ymds. We do
not need sec in procedure dynredem0.

In procedure ju2ymds, by construction, sec cannot be > `un_jour`.

Remove useless intermediary variables in procedure ymds2ju.

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

  ViewVC Help
Powered by ViewVC 1.1.21