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

Annotation of /trunk/dyn3d/dynredem0.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 335 - (hide 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 guez 18 MODULE dynredem0_m
2 guez 3
3 guez 7 IMPLICIT NONE
4 guez 3
5 guez 157 INTEGER ncid
6    
7 guez 18 CONTAINS
8 guez 3
9 guez 157 SUBROUTINE dynredem0(iday_end, phis)
10 guez 3
11 guez 138 ! 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 guez 3
14 guez 62 USE comconst, ONLY: cpp, daysec, dtvr, g, kappa, omeg, rad
15 guez 265 USE dimensions, ONLY: iim, jjm, llm, nqmx
16 guez 313 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 guez 321 USE infotrac_init_m, ONLY: tname, ttext
23 guez 92 USE ju2ymds_m, ONLY: ju2ymds
24     USE netcdf, ONLY: nf90_clobber, nf90_float, nf90_global, nf90_unlimited
25 guez 157 USE netcdf95, ONLY: nf95_create, nf95_def_dim, nf95_def_var, nf95_enddef, &
26 guez 178 nf95_put_att, nf95_put_var
27 guez 62 USE paramet_m, ONLY: iip1, jjp1, llmp1
28 guez 92 use ymds2ju_m, only: ymds2ju
29 guez 5
30 guez 62 INTEGER, INTENT(IN):: iday_end
31 guez 5
32 guez 227 REAL, INTENT(IN):: phis(:, :) ! (iim + 1, jjm + 1)
33     ! surface geopotential, in m2 s-2
34    
35 guez 62 ! Local:
36 guez 3
37 guez 139 INTEGER iq
38 guez 22 INTEGER, PARAMETER:: length = 100
39 guez 138 REAL tab_cntrl(length) ! tableau des param\`etres du run
40 guez 5
41 guez 116 ! Pour NetCDF :
42 guez 62 INTEGER idim_index
43     INTEGER idim_rlonu, idim_rlonv, idim_rlatu, idim_rlatv
44     INTEGER idim_s, idim_sig
45 guez 128 INTEGER dimid_temps
46 guez 157 INTEGER varid
47 guez 140 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 guez 227 integer varid_bp, varid_presnivs, varid_phis
51 guez 3
52 guez 335 double precision julian
53     INTEGER year, day, month
54 guez 62 CHARACTER(len=30) unites
55 guez 3
56 guez 7 !-----------------------------------------------------------------------
57 guez 3
58 guez 18 PRINT *, 'Call sequence information: dynredem0'
59 guez 3
60 guez 335 CALL ymds2ju(annee_ref, 1, iday_end, 0., julian)
61     CALL ju2ymds(julian, year, month, day)
62 guez 5
63 guez 129 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 guez 18 tab_cntrl(6) = rad
69     tab_cntrl(7) = omeg
70     tab_cntrl(8) = g
71     tab_cntrl(9) = cpp
72 guez 7 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 guez 5
83 guez 138 ! Param\`etres pour le zoom :
84 guez 18 tab_cntrl(20) = clon
85     tab_cntrl(21) = clat
86     tab_cntrl(22) = grossismx
87     tab_cntrl(23) = grossismy
88 guez 113 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 guez 5
95 guez 129 tab_cntrl(30) = iday_end
96 guez 138 tab_cntrl(31:) = 0.
97 guez 5
98 guez 157 CALL nf95_create("restart.nc", nf90_clobber, ncid)
99 guez 39 CALL nf95_put_att(ncid, nf90_global, 'title', &
100 guez 138 'start file for the dynamics code')
101 guez 5
102 guez 7 ! Definir les dimensions du fichiers:
103 guez 5
104 guez 39 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 guez 128 CALL nf95_def_dim(ncid, 'temps', nf90_unlimited, dimid_temps)
112 guez 5
113 guez 7 ! Definir et enregistrer certains champs invariants:
114 guez 5
115 guez 140 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 guez 5
118 guez 140 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 guez 5
121 guez 140 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 guez 5
124 guez 140 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 guez 5
127 guez 140 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 guez 5
130 guez 140 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 guez 139
133 guez 140 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 guez 139
136 guez 140 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 guez 139
141 guez 140 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 guez 139
146 guez 140 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 guez 5
149 guez 140 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 guez 5
152 guez 140 CALL nf95_def_var(ncid, 'presnivs', nf90_float, idim_s, varid_presnivs)
153 guez 5
154 guez 7 ! Geopentiel au sol:
155 guez 5
156 guez 227 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 guez 5
161 guez 7 ! Definir les variables pour pouvoir les enregistrer plus tard:
162 guez 3
163 guez 128 CALL nf95_def_var(ncid, 'temps', nf90_float, dimid_temps, varid)
164 guez 39 CALL nf95_put_att(ncid, varid, 'title', 'Temps de simulation')
165 guez 335 WRITE(unites, fmt = 200) year, month, day
166 guez 18 200 FORMAT ('days since ', I4, '-', I2.2, '-', I2.2, ' 00:00:00')
167 guez 39 CALL nf95_put_att(ncid, varid, 'units', unites)
168 guez 7
169 guez 62 CALL nf95_def_var(ncid, 'ucov', nf90_float, &
170 guez 128 (/idim_rlonu, idim_rlatu, idim_s, dimid_temps/), varid)
171 guez 39 CALL nf95_put_att(ncid, varid, 'title', 'Vitesse U')
172 guez 5
173 guez 62 CALL nf95_def_var(ncid, 'vcov', nf90_float, &
174 guez 128 (/idim_rlonv, idim_rlatv, idim_s, dimid_temps/), varid)
175 guez 39 CALL nf95_put_att(ncid, varid, 'title', 'Vitesse V')
176 guez 5
177 guez 62 CALL nf95_def_var(ncid, 'teta', nf90_float, &
178 guez 128 (/idim_rlonv, idim_rlatu, idim_s, dimid_temps/), varid)
179 guez 39 CALL nf95_put_att(ncid, varid, 'title', 'Temperature')
180 guez 5
181 guez 18 DO iq = 1, nqmx
182 guez 62 CALL nf95_def_var(ncid, tname(iq), nf90_float, &
183 guez 128 (/idim_rlonv, idim_rlatu, idim_s, dimid_temps/), varid)
184 guez 39 CALL nf95_put_att(ncid, varid, 'title', ttext(iq))
185 guez 18 END DO
186 guez 5
187 guez 62 CALL nf95_def_var(ncid, 'masse', nf90_float, &
188 guez 128 (/idim_rlonv, idim_rlatu, idim_s, dimid_temps/), varid)
189 guez 39 CALL nf95_put_att(ncid, varid, 'title', 'C est quoi ?')
190 guez 5
191 guez 62 CALL nf95_def_var(ncid, 'ps', nf90_float, &
192 guez 128 (/idim_rlonv, idim_rlatu, dimid_temps/), varid)
193 guez 39 CALL nf95_put_att(ncid, varid, 'title', 'Pression au sol')
194 guez 5
195 guez 39 CALL nf95_enddef(ncid)
196 guez 3
197 guez 140 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 guez 227 CALL nf95_put_var(ncid, varid_phis, phis)
214 guez 3
215 guez 18 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 guez 7 END SUBROUTINE dynredem0
219    
220 guez 18 END MODULE dynredem0_m

  ViewVC Help
Powered by ViewVC 1.1.21