/[lmdze]/trunk/Documentation/Manuel_LMDZE.texfol/Manuel-LMDZE.tex
ViewVC logotype

Contents of /trunk/Documentation/Manuel_LMDZE.texfol/Manuel-LMDZE.tex

Parent Directory Parent Directory | Revision Log Revision Log


Revision 15 - (show annotations)
Fri Aug 1 15:24:12 2008 UTC (15 years, 9 months ago) by guez
File MIME type: application/x-tex
File size: 86957 byte(s)
-- Minor modification of input/output:

Added variable "Sigma_O3_Royer" to "histday.nc". "ecrit_day" is not
modified in "physiq". Removed variables "pyu1", "pyv1", "ftsol1",
"ftsol2", "ftsol3", "ftsol4", "psrf1", "psrf2", "psrf3", "psrf4"
"mfu", "mfd", "en_u", "en_d", "de_d", "de_u", "coefh" from
"histrac.nc".

Variable "raz_date" of module "conf_gcm_m" has logical type instead of
integer type.

-- Should not change any result at run time:

Modified calls to "IOIPSL_Lionel" procedures because the interfaces of
these procedures have been simplified.

Changed name of variable in module "start_init_orog_m": "masque" to
"mask".

Created a module containing procedure "phyredem".

Removed arguments "punjours", "pdayref" and "ptimestep" of procedure
"iniphysiq".

Renamed procedure "gr_phy_write" to "gr_phy_write_2d". Created
procedure "gr_phy_write_3d".

Removed procedures "ini_undefstd", "moy_undefSTD", "calcul_STDlev",
"calcul_divers".

1 \documentclass[a4paper]{article}
2
3 % Packages
4
5 \usepackage[latin1]{inputenc}
6 \usepackage{ifpdf}
7
8 \ifpdf
9 \usepackage{aeguill}
10 \usepackage[pdftex]{color,graphicx}
11 \else
12 \usepackage[T1]{fontenc}
13 \usepackage[dvips]{color,graphicx}
14 \usepackage[active]{srcltx}
15 \fi
16
17 \usepackage[frenchb]{babel}
18 \usepackage{mathrsfs}
19 \usepackage{amsmath}
20 \usepackage{amsfonts}
21 \usepackage{mathabx}
22 \usepackage{algorithmic}
23 \usepackage[all]{xy}
24
25
26 % Load last:
27 \ifpdf
28 \usepackage{hyperref}
29 \hypersetup{pdftex, pdftitle={Manuel pour LMDZE}, pdfauthor={Lionel
30 Guez}, pdfstartview=FitBH}
31 \else
32 \usepackage[hypertex]{hyperref}
33 \fi
34
35 %---------------
36
37 \newcommand{\ud}{\mathrm{d}}
38 \DeclareMathOperator{\diverg}{div}
39 \DeclareMathOperator{\tgh}{th}
40
41 \newcommand{\Eng}[1]{\textit{\foreignlanguage{english}{#1}}}
42 % (English language)
43
44 \newcommand{\pseudov}[1]{\overset{\curvearrowbotright}{#1}}
45
46 \renewcommand{\algorithmicdo}{\textbf{faire}}
47 \renewcommand{\algorithmicend}{\textbf{fin}}
48 \renewcommand{\algorithmicfor}{\textbf{pour}}
49
50 \author{Lionel GUEZ}
51 \title{Manuel pour LMDZE}
52
53 %---------------
54
55 \begin{document}
56
57 \maketitle
58 \ifpdf
59 \else
60 \tableofcontents
61 \fi
62 \listoffigures
63 \newpage
64
65 \part{Installation}
66
67 LMDZE utilise quatre bibliothèques. Cf. figure (\ref{fig:libraries}).
68 \begin{figure}[htbp]
69 \centering
70 \includegraphics{Graphiques/libraries}
71 \caption{Bibliothèques utilisées par LMDZE.}
72 \label{fig:libraries}
73 \end{figure}
74
75 Pour télécharger le programme :
76 \begin{verbatim}
77 svn checkout \
78 svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/lmdze/svn/trunk \
79 LMDZE_program
80 \end{verbatim}
81
82 Pour compiler \verb+gcm+ :
83 \begin{enumerate}
84 \item Choisir la résolution spatiale dans \verb+dimens_m.f90+.
85 Choisir la valeur de \verb+kdlon+ dans \verb+phylmd/raddim.f90+.
86 Pour cela, consulter le tableau (\ref{tab:kdlon}), les
87 \href{http://www.lmd.jussieu.fr/~lmdz/LMDZ4/choisir_une_resolution.html}{conseils}
88 et le programme
89 \href{file:///user/guez/Documents/Informatique_fonctionnement/Tests/choixdim.f}{\texttt{choixdim}}.
90 (Il faudra adapter les pas de temps à l'exécution.)
91 \item Vérifier la cible du lien \verb+compiler.mk+. Vérifier dans
92 \verb+make.sh+ la valeur de \verb+dest_dir+.
93 \item \verb+make.sh+. (Si on a modifié les dimensions alors il faudra
94 créer un nouvel état initial adapté à ces dimensions. Il faut donc
95 recompiler \verb+etat0_lim+.)
96 \end{enumerate}
97 \begin{table}[htbp]
98 \centering
99 \begin{tabular}{lll}
100 \texttt{iim} & \texttt{jjm} & \texttt{kdlon} \\
101 \hline
102 32 & 24 & 41 \\
103 48 & 32 & 149 \\
104 72 & 46 & 1621 \\
105 96 & 72 & 487 \\
106 160 & 98 & 78 \\
107 192 & 43 & 10
108 \end{tabular}
109 \caption{Choix de \texttt{kdlon} dans \texttt{phylmd/raddim.f}.}
110 \label{tab:kdlon}
111 \end{table}
112
113 La compilation de \verb+clmain.F+ avec le compilateur IBM XL Fortran
114 Enterprise Edition V9.1 Version: 09.01.0000.0005 et les options
115 \verb+-O5 -qnostrict -qessl+ n'est pas finie en 10 h. Avec les options
116 \verb+-O4 -qnostrict -qessl+, elle n'est pas finie en 1 h.
117
118 \part{Utilisation comme boîte noire}
119
120 Cf. liste des fichiers d'entrée nécessaires sur le
121 \href{file:///user/guez/Documents/Informatique_fonctionnement/Programs/Guide_IPSL_climate_models/inout
122 LMDZE.odg}{schéma des entrées-sorties}.
123
124 Les fichiers \verb+ECDYN.nc+ et \verb+ECPHY.nc+ contiennent des
125 données de réanalyse ERA 40 de l'ECMWF, pour un jour particulier, avec
126 une résolution de 1°. Refaire ces fichiers pour la date initiale
127 choisie. Les
128 \href{http://dataipsl.ipsl.jussieu.fr/data-ipsl/ecmwf-4.html}{données
129 ERA 40} sont accessibles par le centre de données de l'IPSL.
130
131 Le fichier \verb+amipbc_sic_1x1.nc+ donne la fraction de la surface de
132 la mer couverte par de la glace. Les fichiers \verb+amipbc_sic_1x1.nc+
133 et \verb+amipbc_sst_1x1.nc+ viennent du projet
134 \href{http://www-pcmdi.llnl.gov/projects/amip/AMIP2EXPDSN/BCS/bcsintro.php}{AMIP
135 II}.
136
137 \verb+Rugos.nc+ contient la contribution saisonnière de la longueur de
138 rugosité (excluant la contribution des variations de relief). Ces
139 données viennent de la NASA. \verb+Relief.nc+ contient des données de
140 la NASA, corrigées sur l'antarctique, probablement par Gerhard Krinner
141 à partir de données Radar. \verb+Albedo.nc+ contient probablement des
142 données de Yann Polcher.
143
144 L'équipe de développement d'Orchidée a peut-être des informations sur
145 l'origine du fichier \verb+landiceref.nc+. Dans ce fichier, la
146 variable \verb+masq+ prend seulement les valeurs 0 ou 1. La variable
147 \verb+landice+ prend des valeurs différentes de 0 et 1, entre
148 \nombre{0,125} et \nombre{0,875}, en un petit nombre de points (163
149 points), sur des côtes.
150
151 Cf. la
152 \href{file:///user/guez/Documents/Informatique_fonctionnement/Programs/Documentation
153 IOIPSL LMDZ/namelists.ods}{liste des paramètres d'entrée}. Avant de
154 lancer l'exécution de \verb+gcm+, il faut en particulier choisir
155 \verb+nday+ (par exemple 1 ou 30). Je peux aussi modifier
156 \verb+iecri+, qui contrôle la fréquence d'écriture dans le fichier
157 \verb+histday.nc+, et \verb+periodav+, qui contrôle la fréquence
158 d'écriture dans le fichier \verb+histmth.nc+ (?).
159
160 Pour ne pas utiliser Orchidée, choisir \verb+VEGET = n+
161 dans \verb+physiq.def+. Si on intègre sur 1 jour, choisir
162 \verb+OK_journe = y+, \verb+OK_mensuel = n+.
163
164 Si on a changé la résolution spatiale, il peut être nécessaire de
165 modifier les variables \verb+nfilun+, \verb+nfilus+, \verb+nfilvn+ et
166 \verb+nfilvs+, définies dans \verb+filtrez/parafilt.h+.
167 \verb+etat0_lim+ se plante et indique alors les bonnes valeurs.
168
169 \verb+idissip+ dans \verb+gcm.def+ n'est pas pris en compte. Il est
170 automatiquement calculé par le programme. Phu L. V. conseille de
171 diminuer à 3600 les valeurs de \verb+tetagdiv+ et \verb+tetagrot+.
172
173 \verb+grossismx+ et \verb+grossismy+ doivent être inférieurs à 4 pour
174 que le modèle converge.
175
176 Phu L. V. me conseille de choisir \verb+ysinus=n+ dans \verb+gcm.def+.
177
178 \section{Paramètres liés au pas de temps}
179
180 Les paramètres à choisir au moment de l'exécution et liés au pas de
181 temps sont \verb+day_step+, \verb+iphysiq+, \verb+iperiod+ et
182 \verb+iconser+. Il faut en particulier penser à ajuster ces paramètres
183 lorsque l'on a changé la résolution spatiale. Le principe de base est
184 que le pas de temps doit être suffisamment petit pour que le modèle
185 soit stable. Il doit être d'autant plus petit que la résolution
186 spatiale horizontale est fine. Si les milieux de couches ne montent
187 pas trop haut dans la stratosphère alors la résolution verticale n'a
188 pas à être prise en compte. La référence est un pas de temps maximal
189 de 6 mn environ pour une grille de 64 longitudes par 50 latitudes.
190 Lorsqu'on multiplie par un même facteur le nombre de longitudes et de
191 latitudes, on divise par ce facteur le pas de temps maximal. Pour des
192 milieux de couches haut dans la stratosphère, cf.
193 \href{file:///user/guez/Documents/Utilisation_LMDZ/Utilisation_LMDZ.texfol/Utilisation-LMDZ.dvi}{notes
194 sur l'utilisation de LMDZ}.
195
196 \verb+day_step+ est le nombre de pas de temps par jour. \verb+iphys+
197 est le nombre de pas de temps entre deux appels de la physique.
198 \verb+iperiod+ est le nombre de pas de temps entre deux pas Matsuno.
199 \verb+iconser+ est le nombre de pas de temps entre deux écritures des
200 variables de contrôle. Ces quatre paramètres doivent recevoir des
201 valeurs entières. Apparemment, on laisse toujours \verb+iperiod+ à 5
202 (quelle que soit la résolution).
203
204 On a en outre la contrainte que \verb+day_step+ soit un multiple de
205 \verb+iperiod+ (cf. l'unité de programme principale \verb+gcm+), c'est-à-dire
206 normalement un multiple de 5.
207
208 Enfin, on a la contrainte suivante sur \verb+iphysiq+. Dans le fichier
209 \verb+fisrtilp.F+, ligne 133, on trouve :
210 \begin{verbatim}
211 IF (ABS(dtime/FLOAT(ninter)-360.0).GT.0.001) THEN
212 PRINT*, 'fisrtilp: Ce n est pas prevu, voir Z.X.Li', dtime
213 PRINT*, 'Je prefere un sous-intervalle de 6 minutes'
214 ENDIF
215 \end{verbatim}
216 Donc, comme \verb+ninter+ vaut 5, il faut que \verb+dtime+, le pas de
217 temps de la physique, vaille 1800 s à 5.10$^{-3}$ s près. Notons $d$
218 le pas de temps de la dynamique, en mn. Il faut donc que
219 $\mathtt{iphysiq} \times d = 30$.
220
221 En résumé, en notant $d_M$ le pas de temps maximal imposé par la
222 résolution, nous avons le système de contraintes suivant :
223 \begin{displaymath}
224 \left\{
225 \begin{array}{l}
226 \mathtt{iphysiq} \times d = 30 \\
227 d \le d_M \\
228 \mathtt{day\_step} \times d = 1440 \\
229 \mathtt{day\_step} \equiv 0[5]
230 \end{array}
231 \right.
232 \end{displaymath}
233 D'où :
234 \begin{displaymath}
235 \left\{
236 \begin{array}{l}
237 \mathtt{iphysiq} \ge = 30 / d_M \\
238 48 \times \mathtt{iphysiq} \equiv 0[5]
239 \end{array}
240 \right.
241 \end{displaymath}
242 C'est-à-dire :
243 \begin{displaymath}
244 \left\{
245 \begin{array}{l}
246 \mathtt{iphysiq} \ge = 30 / d_M \\
247 \mathtt{iphysiq} \equiv 0[5]
248 \end{array}
249 \right.
250 \end{displaymath}
251 On peut donc adopter l'algorithme suivant :
252 \begin{verbatim}
253 entrer(iim, jjm)
254 n := ceiling(max(iim / 64., jjm / 50.))
255 iphysiq := 5 * n
256 day_step := 240 * n
257 \end{verbatim}
258
259 \section{Ressources nécessaires}
260
261 Espace disque par utilisateur :
262 \begin{itemize}
263 \item fichiers sources LMDZ (sans IOIPSL ni NetCDF) 3 Moctets ;
264 \item fichiers objets, exécutables (sans IOIPSL ni NetCDF) (résolution
265 $32 \times 24 \times 9$) 4 Moctets ;
266 \item fichiers sortie \verb+etat0_lim+ 9 Moctets ;
267 \item fichiers sortie \verb+gcm+ (principalement \verb+histday.nc+) 26
268 Moctets.
269 \end{itemize}
270 Par ailleurs, on peut centraliser :
271 \begin{itemize}
272 \item fichiers NetCDF entrée \verb+etat0_lim+ 40 Moctets ;
273 \item bibliothèque IOIPSL 600 koctets ;
274 \item ensemble NetCDF (bibliothèque, utilitaires, manuels, modules,
275 etc.) 3 Moctets.
276 \end{itemize}
277
278 Mémoire principale (résolution $32 \times 24 \times 9$) : 30 Moctets.
279
280 Durées. Temps de compilation avec \verb+g95 -O3+ : 5 mn. Temps
281 d'exécution de \verb+gcm+ avec \verb+g95 -O3+ (résolution $32 \times
282 24 \times 9$) : environ 10 mn par mois simulé.
283
284 \part{Fonctionnement : derrière les coulisses}
285
286 \begin{verbatim}
287 wc -l `find . -name "*.[fh]" -o -name "*.f90"`
288 \end{verbatim}
289 donne environ $7 \cdot 10^{4}$ lignes.
290
291 \section{Le makefile}
292
293 Intérêt de placer un makefile dans chaque répertoire. J'admets
294 l'intérêt de séparer les fichiers sources dans les répertoires
295 \verb+dyn3d+, \verb+bibio+ etc. Avec un aussi grand nombre de
296 fichiers, ce classement apporte de la clarté. À partir de là se pose
297 la question de l'intérêt de placer un \verb+makefile+ dans chaque
298 répertoire. Cette organisation suppose déjà l'absence de dépendance
299 circulaire entre les répertoires pour la compilation. Admettons qu'il
300 n'y en ait pas. Il y aurait logiquement un \verb+makefile+ au dessus
301 de ces répertoires pour les éditions de liens. Je suis arrivé à la
302 conclusion qu'en bon style de \verb+makefile+ des archives
303 n'apparaissent que dans les options d'édition de liens et ne sont pas
304 connues directement du \verb+makefile+ du programme utilisateur.
305 L'utilisation des archives ne permettrait donc pas la mise à jour des
306 deux programmes, \verb+gcm+ et \verb+etat0_lim+, lorsqu'un fichier
307 d'un répertoire est modifié. J'écarte donc la création d'une archive
308 pour chaque répertoire. Par ailleurs, chacun des deux programmes
309 utilise des fichiers répartis dans les différents répertoires. Pour
310 chacun des deux programmes, la liste des objets pertinents doit donc
311 apparaître en prérequis. On ne pourrait mettre simplement en prérequis
312 des répertoires. Mais alors comment le \verb+makefile+ supérieur
313 sait-il mettre à jour ces objets ? En conclusion, je crois qu'il ne
314 faut pas placer un \verb+makefile+ dans chaque répertoire. Un unique
315 \verb+makefile+ au dessus des répertoires est la bonne solution.
316
317 Dans les règles qui fabriquent les arbres des appels et les listes de
318 variables, les commandes doivent utiliser la variable \verb+$^+ pour
319 récupérer le chemin des sources. Une règle ne peut pas par exemple
320 utiliser directement \verb+${sources_etat0_lim}+. Par ailleurs, on ne
321 peut pas avoir une règle supplémentaire :
322 \begin{verbatim}
323 CG_etat0_lim CG_gcm CR_etat0_lim CR_gcm: ${objects}
324 \end{verbatim}
325 parce qu'alors les objets apparaîtraient dans les commandes.
326
327 \section{Description des programmes}
328
329 Sur le suffixe des fichiers. Pour pouvoir utiliser les outils NAG,
330 tant que le programme est formé d'un mélange de fichiers aux formats
331 fixe et libre, je suis obligé d'associer le format libre au suffixe
332 \verb+f90+ ou \verb+f95+. \verb+sxf90+ m'impose le suffixe \verb+f90+.
333 Pour le format fixe, \verb+sxf90+ m'impose \verb+f+. Cf.
334 \hyperref{file:///user/guez/Documents/Informatique_fonctionnement/Informatique,
335 fonctionnement.texfol/fonctionnement.dvi}{text}{suffixes}{contraintes
336 sur les suffixes de fichiers de Fortran}.
337
338 Deux unités de programme principales en Fortran, dans les fichiers
339 \verb+etat0_lim.f+ et \verb+gcm.f+.
340
341 Au plus haut niveau, parties du programme \verb+gcm+ :
342 calcul des tendances (\verb+caldyn+), intégration (\verb+integr+),
343 physique, dissipation (\verb+dissip+), advection. Variables
344 principales : \verb+ucov+, \verb+vcov+, température,
345 pression. \verb+w+ se déduit par quelque chose comme une
346 relation de fermeture. Dans la physique, il n'y a pas d'échange
347 horizontal entre les mailles. Un problème fondamental est l'utilisation
348 d'une grille rectangulaire en latitudes et longitudes pour couvrir
349 la sphère. Les mailles de la grille n'ont pas la même surface.
350 La solution choisie pour résoudre ce problème est le filtrage.
351 Principe du filtrage : décomposition d'un champ en harmoniques
352 sphériques et conservation d'une partie seulement du spectre.
353 Le filtre est très coûteux : il faut connaître le champ
354 en entier pour le calculer en un point particulier. Par ailleurs,
355 le programme calcule à de nombreuses occasions des valeurs moyennes
356 aux pôles, à partir des mailles pôlaires (à chaque pôle, autant
357 de mailles pôlaires que de longitudes dans la grille)
358
359 \verb+etat0_lim+ crée l'état initial. \verb+etat0_lim+ appelle
360 \verb+etat0+ et \verb+limit+. \verb+etat0+ crée les fichiers
361 \verb+start.nc+ et \verb+startphy.nc+. \verb+limit+ crée
362 \verb+limit.nc+.
363
364 Le répertoire \verb+phylmd+ contient ce qui concerne la
365 physique. Le répertoire \verb+dyn3d+ contient ce qui concerne
366 la dynamique.
367
368 \verb+histday.nc+ contient des moyennes journalières.
369 \verb+ini_histday+ et \verb+write_histday+ sont responsables de
370 l'écriture de \verb+histday.nc+. \verb+ini_histday+ initialise le
371 fichier \verb+histday.nc+, puis \verb+write_histday+ écrit les
372 contenus des variables dans ce fichier. Rôles analogues pour
373 \verb+ini_histmth+ et \verb+write_histmth+ avec le fichier
374 \verb+histmth.nc+. L'initialisation d'un fichier inclut
375 l'initialisation de variables avec le sous-programme \verb+histdef+.
376 L'écriture du contenu d'une variable se fait avec le sous-programme
377 \verb+histwrite+.
378
379 La lecture des fichiers d'entrée \verb+*.def+ se fait entre autres par
380 l'intermédiaire du sous-programme \verb+getin+ de IOIPSL. \verb+getin+
381 n'est appelé que dans les fichiers \verb+phylmd/conf_phys.f+,
382 \verb+dyn3d/conf_gcm.F+ et \verb+dyn3d/getparam.f+.
383
384 La résolution spatiale des fichiers de conditions initiales et de
385 conditions aux limites étant a priori différente de celle de LMDZ,
386 LMDZ re-maille ces données par interpolation ou moyenne.
387
388 Dans le module \verb+start_init_orog_m+, la variable \verb+phis+ est
389 allouée et modifiée par \verb+start_init_orog+. Dans
390 \verb+start_init_orog+, \verb+phis+ est passée en argument à
391 \verb+grid_noro+ et remplie par \verb+grid_noro+.
392
393 Dans \verb+grid_noro+, \verb+mask+ est rempli avec \verb+num_lan+
394 \verb+/+ \verb+num_tot+. On peut voir les valeurs obtenues en
395 regardant la variable \verb+masque+ dans \verb+startphy.nc+. Le nom de
396 masque devrait être réservé à des variables logiques. \verb+mask+
397 calculé par \verb+grid_noro+ n'est pas une variable logique et ne
398 contient pas que les valeurs 0 ou 1. Ce doit être la fraction de terre
399 dans la maille considérée. \verb+zdata+ sert à calculer \verb+zusn+.
400
401 La variable \verb+iperiod+, qui est importante pour la structure de la
402 procédure \verb+leapfrog+, n'est pas modifiée au cours de l'exécution
403 de cette procédure. Cf. figure (\ref{fig:leapfrog}).
404 \begin{figure}[htbp]
405 \centering
406 \includegraphics{Graphiques/leapfrog}
407 \caption[Principe de l'intégration temporelle selon le schéma
408 ``Matsuno-leapfrog'']{Principe de l'intégration temporelle selon le
409 schéma ``Matsuno-leapfrog'', dans \texttt{leapfrog}. Cas où
410 \texttt{iphysiq} = 10. ``FM'' : \Eng{forward} Matsuno, ``BM'' :
411 \Eng{backward} Matsuno. Les flèches courbes représentent des pas
412 ``leapfrog''. Les numéros sur les flèches indiquent l'ordre des
413 intégrations. Six intégrations sont nécessaires pour avancer de
414 cinq pas de temps.}
415 \label{fig:leapfrog}
416 \end{figure}
417
418 Concernant la variable \verb+itau_phy+ du module \verb+temps+. Dans le
419 programme \verb+etat0_lim+ : \verb+itau_phy+ est mis à 0 par
420 \verb+etat0+ et écrit dans \verb+startphy.nc+ par
421 \verb+phyredem+. Dans le programme \verb+gcm+ :
422 \begin{itemize}
423 \item à la première exécution de \verb+physiq+, \verb+phyetat0+ lit
424 \verb+itau_phy+ dans \verb+startphy.nc+, \verb+physiq+ met
425 \verb+itau_phy+ à 0 si \verb+raz_date==1+ ;
426 \item les procédures \verb+ini_hist*+ et \verb+clmain+ passent
427 \verb+itau_phy+ à \verb+histbeg_totreg+ ;
428 \item les procédures \verb+write_hist*+ utilisent \verb+itau_phy+ pour
429 calculer \verb+itau_w+, qui est passé à \verb+histwrite+ ;
430 \item à la dernière exécution de \verb+physiq+, \verb+physiq+ ajoute
431 \verb+itap+ à \verb+itau_phy+, \verb+phyredem+ écrit \verb+itau_phy+
432 dans \verb+startphy.nc+.
433 \end{itemize}
434
435 \subsection{Maillage horizontal}
436
437 Trois grilles à trois dimensions. Une grille de base pour, entre
438 autres, la température et l'humidité relative. François L. l'appelle
439 la grille physique. Une grille décalée en longitude par rapport à la
440 grille de base, d'un demi-pas de longitude, pour la vitesse zonale
441 \textit{u}. Une grille décalée en latitude par rapport à la grille de
442 base, d'un demi-pas de latitude, pour la vitesse \textit{v}. François
443 L. appelle ces deux dernières grilles les grilles dynamiques. Les
444 points de la grille de base de dernier indice de longitude et ceux de
445 premier indice de longitude ont la même longitude. On peut dire que
446 la grille de base est « repliée sur elle même » en longitude. Les deux
447 grilles décalées sont aussi repliées sur elles-mêmes en longitude. La
448 grille décalée en longitude a autant de points que la grille de base.
449 \textit{Cf}. :
450 \begin{itemize}
451 \item Arakawa et Lamb [1977 \#737] ;
452 \item description du modèle par Phu L. V. (juin 1989) ;
453 \item
454 \href{file:///user/guez/Documents/Informatique_fonctionnement/Programs/Guide_IPSL_climate_models/Discrétisation
455 équations LMDZ.ps}{Discrétisation des équations de la dynamique
456 dans LMDZ} (16 novembre 1995) ;
457 \item manuel de LMDZ pour Mars (5 avril 2004) ;
458 \item commentaires dans la procédure \verb+inigeom +;
459 \item
460 \href{file:///user/guez/Documents/Informatique_fonctionnement/Programs/LMDZ/LMDZE/Documentation/Grilles
461 horizontales LMDZ.odg}{schéma des grilles horizontales}.
462 \end{itemize}
463 La variable \verb+iim+ du module \verb+dimens_m+ est le nombre de
464 longitudes distinctes dans la grille de base (scalaire). Les valeurs
465 de ces longitudes sont dans le tableau \verb+rlonv+ du module
466 \verb+comgeom+. La taille de \verb+rlonv+ est \verb-iim+1- et :
467 \begin{verbatim}
468 rlonv(iim+1) = rlonv(1)
469 \end{verbatim}
470 La variable \verb+jjm+ du module \verb+dimens_m+ est le nombre
471 d'intervalles de latitude dans la grille de base. Les valeurs de ces
472 latitudes sont dans le tableau \verb+rlatu+ du module \verb+comgeom+.
473 La taille de \verb+rlatu+ est \verb-jjm+1-. Pour la partie physique
474 du modèle, les points distincts de la grille scalaire sont classés par
475 ordre de latitude décroissante et, pour une même latitude, par ordre
476 de longitude croissante (cf. figure 2.2 du manuel de LMDZ pour Mars).
477 Chacun des points distincts de la grille scalaire peut donc être
478 identifié par un indice dans ce classement : un seul indice au lieu de
479 2 indices faisant référence à la latitude et à la longitude. Les
480 tableaux \verb+latitude+ et \verb+longitude+ du fichier
481 \verb+startphy.nc+ contiennent les coordonnées associées à cet indice
482 simple. Passage du couple d'indices $(i, j)$ à l'indice simple $i'$ :
483 \begin{align*}
484 i = 1, j = 1 & \Rightarrow i' = 1 \\
485 \left.
486 \begin{array}{l}
487 i \le \mathtt{iim} \\
488 j \in \{2, \ldots, \mathtt{jjm}\}
489 \end{array}
490 \right\} & \Rightarrow i' = 1 + (j - 2) \mathtt{iim} + i \\
491 i = 1, j = \mathtt{jjm} + 1 & \Rightarrow i' = \mathtt{klon}
492 \end{align*}
493 Réciproquement :
494 \begin{align*}
495 i' = 1 & \Rightarrow i = 1, j = 1 \\
496 i' \in \{2, \ldots, \mathtt{klon} - 1\} & \Rightarrow
497 \left\{
498 \begin{array}{l}
499 i = (i' - 2) [\mathtt{iim}] + 1 \\
500 j = (i' - 2) / \mathtt{iim} + 2
501 \end{array}
502 \right. \\
503 i' = \mathtt{klon} & \Rightarrow
504 \left\{
505 \begin{array}{l}
506 i = 1 \\
507 j = \mathtt{jjm} + 1
508 \end{array}
509 \right.
510 \end{align*}
511
512 Pour le remplissage des tableaux \verb+latfi+, \verb+lonfi+,
513 \verb+zcufi+ et \verb+zcvfi+ dans \verb+gcm+, cf.
514 \href{file:///user/guez/Documents/Informatique_fonctionnement/Programs/LMDZ/LMDZE/Documentation/Grilles
515 horizontales LMDZ.odg}{schéma des grilles horizontales}. Dans cette
516 figure, dans le tableau \verb+mask_v+, le point d'indice
517 \verb-(1, jjm + 1)- est marqué {\textquotedbl}T(2){\textquotedbl} pour
518 rappeler qu'il est recopié dans deux éléments de \verb+zcvfi+.
519 \verb+zcufi+ et \verb+zcvfi+ sont les valeurs de \verb+cu+ et
520 \verb+cv+ affectées aux points de la grille « physique ». Par
521 exemple, regardons le
522 \href{file:///user/guez/Documents/Informatique_fonctionnement/Programs/Documentation
523 IOIPSL LMDZ/Grilles horizontales LMDZ.odg}{schéma} et considérons le
524 cas de \verb+cv+ et \verb+zcvfi+. \verb+cv+ est bien défini sur les
525 points rouges. Il s'agit de donner des valeurs de \verb+cv+ aux points
526 (noirs) de la grille physique. Pour tous les points de la grille
527 physique sauf le pôle sud, on choisit la valeur au point rouge juste
528 en dessous. Pour le pôle sud, on prend le point rouge juste au dessus.
529 On pourrait imaginer d'interpoler les valeurs en plusieurs points
530 rouges pour chaque point de la grille physique. Et on pourrait de même
531 imaginer des interpolations pour les valeurs de \verb+zcufi+. Cela
532 aurait plus de sens. Mais Phu L. V. semble dire que la faible
533 importance des tableaux \verb+zcufi+ et \verb+zcvfi+ ne justifie pas
534 de compliquer ainsi. Cf. son message du 27/10/6.
535
536 La résolution horizontale standard est de 96 longitudes $\times$ 72
537 latitudes. (Un avantage annexe est que la grille des latitudes tombe
538 alors sur des valeurs rondes.) LMDZ ne converge plus lorsque la
539 résolution devient trop fine. \textit{Cf.} aussi la documentation
540 officielle de LMDZ4 sur le
541 \href{http://www.lmd.jussieu.fr/~lmdz/LMDZ4/choisir_une_resolution.html}{choix
542 d'une résolution horizontale}.
543
544 \subsection{Maillage vertical}
545
546 L'indice de niveau vertical est croissant de la surface au sommet de
547 l'atmosphère. Cf.
548 \href{http://www.lmd.jussieu.fr/~lmdz/manuelGCM/main.ps}{manuel de
549 LMDZ pour Mars}, figure 2.4.
550
551 D'après François L., le temps passé dans les calculs de transfert
552 radiatif est proportionnel au cube du nombre de niveaux verticaux.
553
554 Dans \verb+disvert+, $s$ peut être calculé de quatre façons
555 selon la valeur de \verb+s_sampling+. D'après Phu L. V., le cas
556 \verb+param+ n'est plus utilisé (il n'est pas utilisé non plus par
557 François L. pour son extension à la haute atmosphère). Les quatre
558 échantillonnages de $s$ sont comparés pour quelques valeurs
559 de \verb+llm+ dans les figures (\ref{fig:compare_sampl_9}),
560 (\ref{fig:compare_sampl_19}), (\ref{fig:compare_sampl_30}) et
561 (\ref{fig:compare_sampl_41}).
562 \begin{figure}[htbp]
563 \centering
564 \input{Graphiques/compare_sampl_9.tex}
565 \caption[Maillage vertical, échantillonnages de $s$ pour :
566 \texttt{llm} = 9]{Maillage vertical. Comparaison des quatre
567 échantillonnages de $s$ pour : \texttt{llm} = 9 ; \texttt{h} = 7 ;
568 \texttt{deltaz} = \nombre{0,04} ; \texttt{beta} = \nombre{1,3} ;
569 \texttt{k0} = 20 ; \texttt{k1} = \nombre{1,2}. La pression à la
570 surface choisie est de 101325 Pa.}
571 \label{fig:compare_sampl_9}
572 \end{figure}
573 \begin{figure}[htbp]
574 \centering
575 \input{Graphiques/compare_sampl_19.tex}
576 \caption[Maillage vertical, échantillonnages de $s$ pour :
577 \texttt{llm} = 19]{Maillage vertical. Comparaison des quatre
578 échantillonnages de $s$ pour : \texttt{llm} = 19 ; \texttt{h} = 7
579 ; \texttt{deltaz} = \nombre{0,04} ; \texttt{beta} = \nombre{1,3} ;
580 \texttt{k0} = 20 ; \texttt{k1} = \nombre{1,2}. La pression à la
581 surface choisie est de 101325 Pa.}
582 \label{fig:compare_sampl_19}
583 \end{figure}
584 \begin{figure}[htbp]
585 \centering
586 \input{Graphiques/compare_sampl_30.tex}
587 \caption[Maillage vertical, échantillonnages de $s$ pour :
588 \texttt{llm} = 30]{Maillage vertical. Comparaison des quatre
589 échantillonnages de $s$ pour : \texttt{llm} = 30 ; \texttt{h} = 7
590 ; \texttt{deltaz} = \nombre{0,04} ; \texttt{beta} = \nombre{1,3} ;
591 \texttt{k0} = 20 ; \texttt{k1} = \nombre{1,2}. La pression à la
592 surface choisie est de 101325 Pa.}
593 \label{fig:compare_sampl_30}
594 \end{figure}
595 \begin{figure}[htbp]
596 \centering
597 \input{Graphiques/compare_sampl_41.tex}
598 \caption[Maillage vertical, échantillonnages de $s$ pour :
599 \texttt{llm} = 41]{Maillage vertical. Comparaison des quatre
600 échantillonnages de $s$ pour : \texttt{llm} = 41 ; \texttt{h} = 7
601 ; \texttt{deltaz} = \nombre{0,04} ; \texttt{beta} = \nombre{1,3} ;
602 \texttt{k0} = 20 ; \texttt{k1} = \nombre{1,2}. La pression à la
603 surface choisie est de 101325 Pa.}
604 \label{fig:compare_sampl_41}
605 \end{figure}
606
607 On pose :
608 \begin{align*}
609 & b(0) = 0 \\
610 & b(s) = \exp(1 - 1 / s^2)
611 \qquad \mathrm{pour}\ s \in \mathbb{R}^*
612 \end{align*}
613 $b$ est $\mathscr{C}^\infty$ sur $\mathbb{R}$, paire, strictement croissante
614 sur $\mathbb{R}^+$. On a :
615 \begin{align*}
616 & \exists \lim_{s \to +\infty} b(s) = e \\
617 & b'(0) = 0 \\
618 & b'(1) = 2
619 \end{align*}
620 et $b$ admet un point d'inflexion en $\sqrt{6} / 3$ ($\approx
621 \nombre{0,8}$). Cf. figure (\ref{fig:disvert}).
622 \begin{figure}[htbp]
623 \centering
624 \input{Graphiques/disvert.tex}
625 \caption[Maillage vertical : $a$ et $b$]{Maillage vertical. Pour
626 $p_a = 5 \cdot 10^4$ Pa et $p_s = \nombre{101325}$ Pa.}
627 \label{fig:disvert}
628 \end{figure}
629 Puis, étant donné $p_a \in \mathbb{R}^{+*}$, on pose, pour tout
630 $s$ :
631 \begin{displaymath}
632 a(s) = p_a (s - b(s))
633 \end{displaymath}
634 Pour $s > 0$ :
635 \begin{displaymath}
636 a'(s) \ge 0 \Leftrightarrow b(s) \le s^3 / 2
637 \end{displaymath}
638 L'équation $b(s) = s^3 / 2$ admet deux solutions strictement
639 positives. Notons-les $s_1$ et $s_2$, $s_1 < 1 <
640 s_2$. $a$ est strictement croissante sur $[0, s_1]$,
641 strictement décroissante sur $[s_1, s_2]$, strictement
642 croissante sur $[s_2, + \infty[$. Cf. figure (\ref{fig:disvert}).
643 Enfin, étant donné $p_s \in \mathbb{R}^{+*}$, on pose, pour tout
644 $s$ :
645 \begin{align*}
646 p(s) & = a(s) + b(s) p_s \\
647 & = p_a s + b(s) (p_s - p_a)
648 \end{align*}
649 Cf. figure (\ref{fig:disvert}). On a :
650 \begin{displaymath}
651 s \le \nombre{0,3} \Rightarrow b(s) \ll s
652 \end{displaymath}
653 Cf. figure (\ref{fig:b_s}).
654 \begin{figure}[htbp]
655 \centering
656 \input{Graphiques/b_s.tex}
657 \caption[Maillage vertical : $b(s) / s$]{Maillage vertical. Les
658 niveaux de $s$ sont des niveaux de pression lorsque $b(s) / s$ est
659 très petit.}
660 \label{fig:b_s}
661 \end{figure}
662 En supposant que $p_s - p_a$ soit de l'ordre de $p_a$, on a donc, aux
663 plus hauts niveaux de l'atmosphère, tels que $s(l) \le
664 \nombre{0,3}$ :
665 \begin{displaymath}
666 p(s(l)) \approx a(s(l))
667 \approx p_a s(l)
668 \end{displaymath}
669 En haut de l'atmosphère, les niveaux de $s$ sont des niveaux de
670 pression. Ces niveaux de pression sont les valeurs de \verb+ap+.
671 (Après une exécution de \verb+etat0_lim+, \verb+ap+ est dans le
672 fichier \verb+start.nc+.)
673
674 \subsubsection{Cas \texttt{LMD5}}
675
676 Pour $l \in \{1, \dots,
677 \mathtt{llm}\}$, posons :
678 \begin{displaymath}
679 x_l = \frac{\pi (l - 1/2)}{\mathtt{llm} + 1}
680 \end{displaymath}
681 Pour $x \in \mathbb{R}$, posons :
682 \begin{displaymath}
683 f(x) = 1 + 7 \sin^2 x
684 \end{displaymath}
685 $f$ est périodique de période $\pi$. Cf. figure (\ref{fig:f_x}).
686 \begin{figure}[htbp]
687 \centering
688 \input{Graphiques/f_x.tex}
689 \caption{Maillage vertical, fonction utilisée dans le cas
690 \texttt{LMD5}.}
691 \label{fig:f_x}
692 \end{figure}
693 $(x_l)$ est un échantillonnage de $[0, \pi]$ d'autant plus fin que
694 \verb+llm+ est grand :
695 \begin{align*}
696 & \forall l \in \{1, \dots, \mathtt{llm}\}, x_l \in ]0, \pi[ \\
697 & \exists \lim_{\mathtt{llm} \to +\infty} x_1 = 0 \\
698 & \exists \lim_{\mathtt{llm} \to +\infty} x_\mathtt{llm} = \pi \\
699 & x_{l+1} - x_l = \frac{\pi}{\mathtt{llm} + 1}
700 \underset{\mathtt{llm} \to + \infty}{\longrightarrow} 0
701 \end{align*}
702 Le programme calcule :
703 \begin{displaymath}
704 \mathtt{ds(l)} = \frac{f(x_l)}{\sum_{l'=1}^\mathtt{llm} f(x_{l'})}
705 \end{displaymath}
706 Or :
707 \begin{displaymath}
708 \sum_{l=1}^\mathtt{llm} f(x_{l}) \frac{\pi}{\mathtt{llm} + 1}
709 \underset{\mathtt{llm} \to + \infty}{\longrightarrow} \int_0 ^\pi f
710 \end{displaymath}
711 Notons :
712 \begin{displaymath}
713 I := \int_0 ^\pi f = 9 \pi / 2
714 \end{displaymath}
715 On a donc :
716 \begin{displaymath}
717 \sum_{l=1}^\mathtt{llm} f(x_{l})
718 \underset{\mathtt{llm} \to +\infty}{\sim} \frac{I}{\pi} \mathtt{llm}
719 \end{displaymath}
720 (L'erreur est de 2 \% environ pour \verb+llm+ = 41.) Le niveau
721 $s$ le plus petit est 0, le deuxième plus petit est :
722 \begin{displaymath}
723 s(\mathtt{llm}) = \mathtt{ds(llm)}
724 \underset{\mathtt{llm} \to +\infty}{\sim} \frac{\pi f(\pi)}{I\ \mathtt{llm}}
725 \end{displaymath}
726
727 Donc :
728 \begin{displaymath}
729 p(s(\mathtt{llm}))
730 \underset{\mathtt{llm} \to +\infty}{\sim}
731 \frac{\pi f(\pi) p_a}{I\ \mathtt{llm}}
732 = \frac{2 p_a}{9\ \mathtt{llm}}
733 \end{displaymath}
734 On a :
735 \begin{align*}
736 & \mathtt{llm} = 9 \Rightarrow \mathtt{ap(llm)}
737 \approx 3 \cdot 10\ \mathrm{hPa} \\
738 & \mathtt{llm} = 19 \Rightarrow \mathtt{ap(llm)} \approx 8\ \mathrm{hPa} \\
739 & \mathtt{llm} = 50 \Rightarrow \mathtt{ap(llm)} \approx 2\ \mathrm{hPa}
740 \end{align*}
741 Il faudrait prendre \verb+llm+ de l'ordre de $10^3$ pour résoudre la
742 région décrite par la paramétrisation de la chimie de l'ozone.
743
744 \subsubsection{Cas \texttt{strato1}}
745
746 On pose, pour $(x, y) \in
747 \mathbb{R}^2$ :
748 \begin{displaymath}
749 f(x, y) = \tgh x + \frac{1}{2} \tgh \frac{x - y}{2}
750 \end{displaymath}
751 Relevons quelques propriétés de $f$, considérée comme une fonction de
752 $x$, à $y$ fixé. $f$ est une fonction strictement croissante sur
753 $\mathbb{R}$, de $- 3/2$ à $3/2$. Par rapport à la fonction $\tgh$, le
754 second terme de $f$ est 2 fois plus large, translaté de $y$ et 2 fois
755 moins haut. Puisque $\tgh 3$ est déjà très proche de 1, les domaines
756 de variation des deux termes de $f$ sont clairement séparés dès que $y
757 \ge 9$. Cf. figure (\ref{fig:strato1}).
758 \begin{figure}[htbp]
759 \centering
760 \input{Graphiques/strato1.tex}
761 \caption[Maillage vertical, cas \texttt{strato1}]{Maillage vertical,
762 cas \texttt{strato1}. Fonction utilisée pour \texttt{llm} = 70.}
763 \label{fig:strato1}
764 \end{figure}
765
766 Le programme calcule :
767 \begin{displaymath}
768 \mathtt{dz(l)}
769 = \nombre{1,56}
770 + f\left(\frac{\mathtt{l} - 12}{5}, \frac{\mathtt{llm} - 12}{5}\right)
771 \end{displaymath}
772 D'après l'étude de $f$, $\mathtt{dz(l)} \in ]\nombre{0,06} ;
773 \nombre{3,06}[$, \verb+dz(l)+ croît avec $l$. Pour \verb+llm+
774 suffisamment grand :
775 \begin{align*}
776 & \mathtt{dz(1)} \approx \nombre{1,06} - \tgh\nombre{2,2}
777 \approx \nombre{8,43} \cdot 10^{-2} \\
778 & \mathtt{dz(llm)} \approx \nombre{2,56}
779 \end{align*}
780 (l'erreur relative sur \verb+dz(1)+ devient inférieure à 1 \% si
781 \verb+llm+ $\ge 37$ ; l'erreur relative sur \verb+dz(llm)+ devient
782 inférieure à 1 \% si \verb+llm+ $\ge 23$). Les domaines de variation
783 des deux termes $\tgh$ de \verb+dz+ sont clairement séparés dès que
784 \verb+llm+ $\ge 57$.
785
786 Posons, pour $z \in \mathbb{R}$ :
787 \begin{displaymath}
788 s(z)
789 = \frac{\exp(- z / h) - \exp(- \mathtt{zz(llm + 1)} / h)}
790 {1 - \exp(- \mathtt{zz(llm + 1)} / h)}
791 \end{displaymath}
792 Le programme calcule $s(\mathtt{zz})$. On a, pour $h = 7$ km :
793 \begin{align*}
794 & \mathtt{llm} = 40
795 \Rightarrow \mathtt{ap(llm)} \approx \nombre{2,70}\ \mathrm{Pa} \\
796 & \mathtt{llm} = 41
797 \Rightarrow \mathtt{ap(llm)} \approx \nombre{2,01}\ \mathrm{Pa} \\
798 & \mathtt{llm} = 50
799 \Rightarrow \mathtt{ap(llm)} \approx \nombre{0,14}\ \mathrm{Pa}
800 \end{align*}
801
802 Si $\exp[- \mathtt{zz(llm + 1)} / h] \ll 1$, pour des valeurs de $z$
803 telles que :
804 \begin{equation}
805 \label{eq:z_interm}
806 \left\{
807 \begin{array}{l}
808 \exp(- z / h) \gg \exp[- \mathtt{zz(llm + 1)} / h] \\
809 \exp(- z / h) \le \nombre{0,3}
810 \end{array}
811 \right.
812 \end{equation}
813 on a :
814 \begin{align*}
815 & s(z) \approx \exp(- z / h) \\
816 & b[s(z)] \ll s(z)
817 \end{align*}
818 Donc, en supposant que $p_s - p_a$ soit de l'ordre de $p_a$ :
819 \begin{displaymath}
820 p[s(z)] \approx a[s(z)] \approx p_a \exp(- z / h)
821 \end{displaymath}
822 Si $h$ est proche de la hauteur d'échelle réelle dans la région
823 considérée alors les variations d'altitude entre deux niveaux
824 $s$ sont proches de \verb+dz+. Par exemple, pour \verb+llm+ =
825 70, \verb=zz(llm + 1)= $\approx 125$ km. Si $h = 7$ km, la condition
826 (\ref{eq:z_interm}) devient $z \in [9\ \mathrm{km}, 92\ \mathrm{km}]$,
827 qui correspond aux niveaux 17 à 56.
828
829 \subsubsection{Cas \texttt{strato2}}
830
831 C'est le cas conseillé par François L. pour un domaine incluant la
832 stratosphère. Ce cas est analogue au cas \verb+LMD5+. Seule la
833 fonction $f$ utilisée change. Pour $x \in \mathbb{R}$, posons :
834 \begin{displaymath}
835 g(x)
836 = \frac{1}{2} \left[1 - \tgh\left(\frac{x - \pi / 2}{\pi / 2}\right)\right]
837 \end{displaymath}
838 Par rapport à la fonction $\tgh$, $g$ est translatée de $\pi / 2$ vers
839 la droite, dilatée horizontalement d'un facteur $\pi / 2$, inversée
840 verticalement, translatée verticalement de 1 et contractée
841 verticalement d'un facteur 2. Elle décroît donc de 1 à $-1$. La
842 fonction $f$ utilisée est maintenant :
843 \begin{displaymath}
844 f(x) = (1 + 7 \sin^2 x) g(x)^2
845 \end{displaymath}
846 \begin{figure}[htbp]
847 \centering
848 \input{Graphiques/strato2.tex}
849 \caption[Maillage vertical, cas \texttt{strato2}]{Maillage vertical,
850 cas \texttt{strato2}. $f(\pi) \approx \nombre{0,014}$.}
851 \label{fig:strato2}
852 \end{figure}
853 On a :
854 \begin{displaymath}
855 I := \int_0 ^\pi f \approx \nombre{4,02}
856 \end{displaymath}
857 donc :
858 \begin{displaymath}
859 p(s(\mathtt{llm}))
860 \underset{\mathtt{llm} \to +\infty}{\sim}
861 \frac{\pi f(\pi) p_a}{I\ \mathtt{llm}}
862 = \frac{\nombre{0,011} p_a}{\mathtt{llm}}
863 \end{displaymath}
864
865 \subsection{Module \texttt{inter\_barxy\_m}}
866
867 Cf.
868 \href{file:///user/guez/Documents/Informatique_fonctionnement/Programs/LMDZ/LMDZE/Documentation/inter_barxy.odg}{graphique
869 de transmission de données}.
870
871 Le seul cas où \verb+size(champint, 2)+ vaut \verb+jjm+ dans
872 \verb+inter_barxy+ se produit suite à l'appel :
873 \begin{verbatim}
874 vvent = start_inter_3d("V", ...)
875 \end{verbatim}
876 C'est aussi le seul cas où \verb+rlatimod+ reçoit \verb+rlatu(:jjm)+.
877 Dans tous les autres cas, \verb+rlatimod+ dans \verb+inter_barxy+
878 reçoit \verb+rlatv+.
879
880 Dans le cas le plus fréquent, dans \verb+inter_barxy+ :
881 \begin{verbatim}
882 size(champint, 2) == jjm + 1
883 \end{verbatim}
884 et \verb+rlatimod+ reçoit \verb+rlatv+. On veut interpoler sur les
885 \verb+jjm+ + 1 latitudes \verb+rlatu+ mais on reçoit \verb+rlatv+.
886 Bizarre.
887
888 Je crois que \verb+inter_bary+ réalise une moyenne et non une
889 interpolation. (Par exemple, pour l'initialisation de l'abondance de
890 vapeur d'eau, on veut calculer \verb+q3d+ aux points \verb+rlatu+.)
891 Cf.
892 \href{file:///user/guez/Documents/Utilisation_LMDZ/Utilisation_LMDZ.texfol/Utilisation-LMDZ.pdf}{analyse}.
893 Je crois que le calcul suppose une fonction en escalier, dont les
894 marches sont limitées par \verb+yjdat+. Pour $i \ge 2$, \verb+fdat(i)+
895 est interprété comme la hauteur de la marche $[\mathtt{yjdat(i-1)},
896 \mathtt{yjdat(i)}]$. Pour $i \ge 2$, \verb+inter_bary(i)+ est la
897 moyenne sur l'intervalle $[\mathtt{yjmod(i-1)}, \mathtt{yjmod(i)}]$.
898
899 Cf. le remaillage \verb+@ave+ dans Ferret. On pourrait imaginer une
900 procédure qui reçoit les tableaux \verb+x1edge+, \verb+x2edge+ et
901 \verb+y1+, qui retourne un tableau \verb+y2+, où \verb+x1edge+ et
902 \verb+x2edge+ sont deux listes de frontières d'intervalles, \verb+y1+
903 et \verb+y2+ ont un élément de moins que \verb+x1edge+ et
904 \verb+x2edge+, \verb+y1+ donne les valeurs d'une fonction en escalier
905 dont les marches sont limitées par \verb+x1edge+, et \verb+y2+ est la
906 moyenne de cette fonction sur les intervalles limités par
907 \verb+x2edge+.
908
909 \subsection{Les traceurs en général}
910
911 Procédures qui concernent les traceurs dans le programme
912 \verb+etat0_lim+ : \verb+iniadvtrac+, \verb+etat0+. Procédures qui
913 concernent les traceurs dans le programme \verb+gcm+ :
914 \verb+iniadvtrac+, \verb+dynetat0+, \verb+caladvtrac+, \verb+advtrac+,
915 \verb+physiq+, \verb+phytrac+. Laurent L. connaît peut-être bien le
916 traitement des traceurs. Il a écrit une grande partie de la
917 ``physique'' du modèle.
918
919 Dans le fichier \verb+traceur.def+, le premier nombre est le nombre de
920 traceurs. Chaque ligne suivante correspond à un traceur. Pour chaque
921 traceur, on indique le numéro du schéma
922 d'advection à utiliser. Les numéros sont définis dans
923 \verb+iniadvtrac+.
924
925 \verb+traceur.def+ est lu uniquement dans le sous-programme
926 \verb+iniadvtrac+. \verb+nq+ est lu dans \verb+traceur.def+.
927 \verb+iniadvtrac+ impose \verb+nqmx+ $\ge$ \verb+nq+. \verb+nq+ est
928 passé à \verb+calfis+ et à \verb+physiq+. \verb+physiq+ impose
929 \verb+nq+ $\ge 2$. Donc \verb+nqmx+ doit être supérieur à 2.
930 \verb+nbtr+ (variable de \verb+dimphy+) vaut 1 pour \verb+nqmx+
931 \verb+=+ \verb+2+ et \verb+nqmx+ -- \verb+2+ pour \verb+nqmx+ $\ge 3$.
932 \verb+nq-2+ est passé à \verb+phytrac+ et devient \verb+nqmax+ dans
933 \verb+phytrac+. À cause de l'appel de \verb+dynredem1+ par
934 \verb+etat0+, \verb+nq+ doit être égal à \verb+nqmx+. \verb+initrrnpb+
935 impose \verb+nbtr+ $\ge 2$, mais il n'est appelé que si \verb+rnpb+
936 est vrai. Cf. aussi message de Ionela M. du 29/11/6.
937
938 \verb+phytrac+ peut effectuer un traitement spécial pour les traceurs
939 plomb et radon (décroissance radioactive etc.). \verb+phytrac+
940 suppose que ce sont les traceurs numérotés 3 et 4. Donc si on veut
941 laisser les traceurs plomb et radon, avec le traitement spécial qui
942 leur est réservé, alors il faut les laisser en troisième et quatrième
943 position dans \verb+traceur.def+ et laisser \verb+rnpb+ à
944 \verb+.true.+ dans \verb+physiq+. Cette variable est définie dans
945 \verb+physiq+ et \verb+phytrac+ uniquement. Cf. le message de
946 Frédéric H. du 26/1/7.
947
948 Dans le programme \verb+etat0_lim+, la variable qui contient la
949 distribution initiale des traceurs est \verb+q3d+. Cette variable est
950 définie dans \verb+etat0+. Pour la vapeur d'eau (traceur numéro 1), la
951 distribution initiale est calculée à partir de la variable \verb+R+ du
952 fichier \verb+ECDYN.nc+. La distribution initiale des traceurs est
953 écrite dans \verb+start.nc+.
954
955 Dans le programme \verb+gcm+, la procédure \verb+iniadvtrac+ lit les
956 noms des traceurs. La procédure \verb+dynetat0+ lit les distributions
957 initiales à partir du fichier \verb+start.nc+ vers la variable
958 \verb+q+. Cette variable se retrouve intacte dans \verb+leapfrog+. Par
959 ailleurs, la concentration de radon dans le sol est lue dans
960 \verb+starttrac+ par \verb+phytrac+. Dans \verb+phytrac+, on calcule
961 la fraction massique à $t + \ud t$ :
962 \begin{displaymath}
963 q(\vec r, t + \ud t) = q(\vec r, t) + (\partial_t q)(\vec r, t)\ud t
964 \end{displaymath}
965 Cf.
966 \href{file:///user/guez/Documents/Informatique_fonctionnement/Programs/Guide_IPSL_climate_models/Traceurs.odg}{graphique
967 de flux de données}. Les distributions de traceurs calculées sont
968 écrites dans \verb+dyn_hist_ave.nc+ et \verb+histrac.nc+. Les
969 distributions finales sont écrites dans \verb+restart.nc+ par
970 \verb+dynredem1+. Par ailleurs, la concentration de radon dans le sol
971 est écrite dans \verb+restarttrac+ par \verb+phytrac+.
972
973 \subsection{L'ozone en tant que traceur}
974
975 Résumé. On part d'une certaine paramétrisation de la chimie
976 stratosphérique de l'ozone, préparée par Daniel Cariolle et Hubert
977 Teyssedre. La paramétrisation calcule en chaque point une production
978 chimique d'ozone. On suit l'ozone ainsi produit comme un traceur
979 passif, c'est-à-dire qu'il n'a aucun effet sur le reste du modèle.
980 Les paramètres chimiques sont remaillés pour LMDZ, en latitude et en
981 temps, dans \verb+etat0_lim+. Le remaillage vertical est fait une fois
982 par jour dans \verb+gcm+. On néglige donc l'effet sur le remaillage de
983 la variation temporelle de pression à la surface pendant une journée.
984 Le champ initial d'ozone spécifié dans \verb+etat0_lim+ est le champ
985 de référence de D. Cariolle (un des paramètres). Pour les passages de
986 fraction molaire d'ozone à fraction massique, on néglige la présence
987 de vapeur d'eau dans l'air. L'évolution de la fraction massique
988 d'ozone pendant un pas de temps de la physique est calculée dans
989 \verb+phytrac+ : les contributions du transport et de la chimie sont
990 intégrées séparément. La température, la masse volumique de l'air et
991 la direction du Soleil sont considérées comme constantes pendant un
992 pas de temps de la physique. Un des paramètres de D. Cariolle est la
993 densité-colonne d'ozone au dessus d'un point donné. Cette
994 densité-colonne est calculée dans l'approximation ``plans
995 parallèles''. La production chimique est intégrée pendant un pas de
996 temps de la physique par la méthode du point milieu. Une fois par jour
997 de simulation, dans \verb+gcm+, une procédure lit dans un fichier tous
998 les paramètres chimiques au bon jour, remaillés en latitude pour LMDZ.
999
1000 Cf. Cariolle (1986 \#761),
1001 \href{file:/user/guez/Documents/Commentaires_lectures/Autres_publications/-1991/Cariolle_1986_761.texfol/Cariolle_1986_761.dvi}{commentaires
1002 sur Cariolle (1986 \# 761)}, texte des courriels (François L.,
1003 29/11/6 ; D. Cariolle, 29/11/6 ; François L., 12/1/7), fichiers
1004 \verb+O3_readme.txt+ de D. Cariolle et \verb+coefoz_v2_3.nc+.
1005 Attention : les symboles ne désignent apparemment pas les mêmes
1006 grandeurs dans Cariolle (1986, \#761) et dans la paramétrisation de
1007 2005. $r$ passe d'une concentration massique à une fraction molaire.
1008 $P$ et $L$ passent de la dimension masse$^{-1}$ temps$^{-1}$ à la
1009 dimension temps$^{-1}$.
1010
1011 Phu L. V. conseille d'utiliser le schéma de transport numéro 10 (choix
1012 dans \verb+traceur.def+).
1013
1014 Nous notons avec un indice ``Mob'' les valeurs des paramètres tirés de
1015 Mobidic.
1016
1017 \subsubsection{La paramétrisation de la chimie}
1018
1019 Le taux de production photochimique par unité de volume (ou de masse
1020 d'air) est le nombre de molécules créées par unité de volume (ou de
1021 masse d'air) et par unité de temps. On peut aussi définir un taux de
1022 destruction chimique d'une espèce, de dimension temps$^{-1}$, sachant
1023 que le nombre de molécules de cette espèce détruites par unité de
1024 volume et par unité de temps est proportionnel à la densité de
1025 l'espèce. Comment $P$ est-il donc défini dans la paramétrisation de
1026 2005 ? En divisant par $N$, la densité totale de la phase gazeuse ?
1027 Quelle définition pour $L$ ? Par ailleurs, quelle grandeur la
1028 paramétrisation de 2005 permet-elle de calculer ? Certainement pas la
1029 dérivée partielle comme noté dans l'équation (5) de Cariolle (1986
1030 \#761), car la dérivée partielle doit dépendre du mouvement de
1031 l'atmosphère. Cf.
1032 \href{file:/user/guez/Documents/Commentaires_lectures/Autres_publications/-1991/Cariolle_1986_761.texfol/Cariolle_1986_761.dvi}{commentaires
1033 sur Cariolle (1986 \# 761)}. La paramétrisation donne-t-elle la
1034 dérivée lagrangienne de la fraction molaire, comme noté dans le
1035 fichier \verb+O3_readme.txt+ ? Notons :
1036 \begin{description}
1037 \item[$r$] : fraction molaire d'ozone
1038 \item[$q$] : fraction massique d'ozone
1039 \item[$s_{O_3}$] : masse nette d'ozone créée par la chimie par unité de
1040 volume et par unité de temps
1041 \item[$S$] : nombre net de molécules d'ozone créées par la chimie par
1042 unité de volume et par unité de temps
1043 \item[$N$] : densité totale de la phase gazeuse
1044 \item[$\rho$] : masse volumique totale de la phase gazeuse
1045 \end{description}
1046 On a :
1047 \begin{equation}
1048 \label{eq:o3}
1049 \left\{
1050 \begin{array}{l}
1051 \partial_t \rho_{\mathrm{O}_3} + \diverg(\rho_{\mathrm{O}_3} \vec v)
1052 = s_{O_3} \\
1053 \partial_t \rho + \diverg(\rho \vec v) = 0
1054 \end{array}
1055 \right.
1056 \end{equation}
1057 Remarquer que l'équation bilan sur le nombre total de molécules en
1058 phase gazeuse est plus compliquée que celle sur la masse totale : le
1059 second membre n'est a priori pas nul. D'après (\ref{eq:o3}) :
1060 \begin{equation}
1061 \label{eq:dqdt}
1062 \frac{\ud q}{\ud t} = s_{O_3} / \rho
1063 \end{equation}
1064 D'où :
1065 \begin{displaymath}
1066 \frac{\ud r}{\ud t}
1067 =
1068 \frac{1}{\mu_\mathrm{moy}} \frac{\ud \mu_\mathrm{moy}}{\ud t} r + S / N
1069 \end{displaymath}
1070 Donc il serait bizarre que la paramétrisation donne $\ud r/\ud t$. Je
1071 vais supposer qu'elle donne $S/N$. $P$ et $L$ sont alors les taux de
1072 production et de destruction chimique par unité de volume divisés par
1073 $N$. Je note : $P_\mathrm{net} := S / N$, taux de production chimique
1074 d'ozone, par molécule d'air.
1075
1076 Désignons par $R_\mathrm{het}$ le taux de production chimique
1077 hétérogène par molécule d'ozone, interpolé journalièrement, remaillé
1078 horizontalement et verticalement pour LMDZ. Notons $\phi$ la latitude
1079 et $\lambda$ la longitude. Notons $d(t)$ le jour contenant une date
1080 $t$, $s$ la coordonnée verticale hybride et $\alpha$ l'angle entre la
1081 direction du Soleil et la verticale (\Eng{solar zenith angle?}). Nous
1082 pouvons définir un taux de destruction par chimie hétérogène corrigé :
1083 \begin{multline*}
1084 R_\mathrm{het,corr}(\lambda, \phi, s, t)
1085 =
1086 R_\mathrm{het}(\lambda, \phi, s, d(t))
1087 1_{T(\lambda, \phi, s, t) > 195\ \mathrm{K}}
1088 1_{\phi \notin [- 45°, 45°]} \\
1089 \times 1_{\alpha(\lambda, \phi, t) < 87°}
1090 \left(\frac{\mathrm{Clx}}{\nombre{3,8} \cdot 10^{-9}}\right)^2
1091 \end{multline*}
1092 (La définition de Clx n'est pas claire pour moi.) Clx est supposé être
1093 une constante. On calcule alors :
1094 \begin{multline*}
1095 P_\mathrm{net}(\lambda, \phi, s, t)
1096 =
1097 P_\mathrm{net,Mob}(\lambda, \phi, s, d(t)) \\
1098 + \frac{\partial P_\mathrm{net}}{\partial r}(\lambda, \phi, s, d(t))
1099 [r(\lambda, \phi, s, t) - r_\mathrm{Mob}(\lambda, \phi, s, d(t))] \\
1100 + \frac{\partial P_\mathrm{net}}{\partial T}(\lambda, \phi, s, d(t))
1101 [T(\lambda, \phi, s, t) - T_\mathrm{Mob}(\lambda, \phi, s, d(t))] \\
1102 + \frac{\partial P_\mathrm{net}}{\partial \Sigma}
1103 (\lambda, \phi, s, d(t))
1104 [\Sigma(\lambda, \phi, s, t) - \Sigma_\mathrm{Mob}
1105 (\lambda, \phi, s, d(t))] \\
1106 + R_\mathrm{het,corr}(\lambda, \phi, s, t) r(\lambda, \phi, s, t)
1107 \end{multline*}
1108 Ou encore :
1109 \begin{displaymath}
1110 S = P_\mathrm{net,Mob} N + \ldots
1111 + R_\mathrm{het,corr} n_{\mathrm{O}_3}
1112 \end{displaymath}
1113 Donc $R_\mathrm{het,corr}$ est le taux de production (algébrique) par
1114 chimie hétérogène par unité de volume et par molécule d'ozone.
1115
1116 Soit une position dans l'atmosphère. Soit $\pseudov{\ud^2 S} = \ud^2 S
1117 \vec u_r$ une surface élémentaire à cette position. Notons $\ud^2
1118 \tau$ le volume compris dans l'angle solide de sommet le centre de la
1119 Terre, limitant $\ud^2 S$, et aux rayons $r'$ supérieurs au rayon $r$
1120 de la position considérée. J'interprète $\Sigma$ et
1121 $\Sigma_\mathrm{Mob}$ comme les nombres de molécules d'ozone dans
1122 $\ud^2 \tau$, divisés par $\ud^2 S$. D'où :
1123 \begin{displaymath}
1124 \mu_{\mathrm{O}_3} \Sigma
1125 = \frac{1}{r^2} \int_r ^{+ \infty} q \rho r'^2 \ud r'
1126 \end{displaymath}
1127 Avec l'équilibre hydrostatique vertical :
1128 \begin{displaymath}
1129 \mu_{\mathrm{O}_3} \Sigma
1130 = \frac{1}{r^2} \int_0 ^p q r'^2 \frac{\ud p'}{g}
1131 \end{displaymath}
1132
1133 $a_2$, $a_4$ et $a_6$ sont constants sur les quatre niveaux de
1134 pression les plus proches de la surface, sur toutes les latitudes et
1135 tous les mois : $a_2 \approx - 2 \cdot 10^{-6}$, $a_4 \equiv 0$, $a_6
1136 \equiv 0$. L'intervalle de pression correspond à une couche de 400 ou
1137 500 m au dessus de la surface. Pour $a_2$, il y a une discontinuité
1138 entre la valeur dans cette couche proche de la surface et les valeurs
1139 au-dessus. Cf.
1140 \href{file:///user/guez/Documents/Utilisation_LMDZ/Input_etat0_lim/Ozone/a2.ps}{exemple
1141 de variation de $a_2$}.
1142
1143 Ordres de grandeur dans \verb+coefoz_v2_3.nc+ :
1144 \begin{displaymath}
1145 \begin{array}{rcl}
1146 - 10^{-11} \lesssim & P_\mathrm{net,Mob} & \lesssim 10^{-12} \\
1147 - 10^{-5} \lesssim & a_2 & \lesssim 10^{-11} \\
1148 10^{-8} \lesssim & r_\mathrm{Mob} & \lesssim 10^{-5} \\
1149 - 10^{-12} \lesssim & a_4 & \lesssim 10^{-13} \\
1150 184 \le & T_\mathrm{Mob} & \le 320 \\
1151 - 10^{-27} \lesssim & a_6 & \lesssim 10^{-28} \\
1152 10^{12} \lesssim & \Sigma_\mathrm{Mob} & \lesssim 10^{19} \\
1153 10^{-13} \lesssim & - R_\mathrm{het} & \lesssim 10^{-5}
1154 \end{array}
1155 \end{displaymath}
1156 Deux valeurs de $|a_6|$ sont non nulles inférieures à $1,2 \cdot
1157 10^{-38}$ : environ $7 \cdot 10^{-39}$ et $2 \cdot 10^{-39}$. $1,2
1158 \cdot 10^{-38}$ est le plus petit nombre strictement positif normalisé
1159 dans l'ensemble IEEE des réels simple précision. Les deux petites
1160 valeurs de $|a_6|$ sont donc dénormalisées dans le fichier NetCDF. La
1161 perte de précision n'est pas importante. Ce problème ne se produit pas
1162 pour les autres coefficients.
1163
1164 \subsubsection{Passage de la fraction molaire à la fraction massique d'ozone}
1165
1166 Nous avons besoin de la masse moléculaire moyenne de l'air. Nous
1167 pourrions considérer l'air comme un mélange de trois espèces : une
1168 espèce fictive ``air sec'', l'eau (vapeur) et l'ozone. Nous supposons
1169 connue la fraction massique d'eau (elle est calculée par
1170 \verb+etat0+). Notons ici $q_i$ la fraction massique de l'espèce $i$
1171 et $x_i$ sa fraction molaire. Nous avons donc le système de quatre
1172 équations :
1173 \begin{displaymath}
1174 \left\{
1175 \begin{array}{ll}
1176 q_{\mathrm{H}_2\mathrm{O}}
1177 & = \frac{\mu_{\mathrm{H}_2\mathrm{O}}}{\mu_\mathrm{moy}}
1178 x_{\mathrm{H}_2\mathrm{O}} \\
1179 \mu_\mathrm{moy}
1180 & = \mu_{\mathrm{H}_2\mathrm{O}} x_{\mathrm{H}_2\mathrm{O}}
1181 + \mu_{\mathrm{O}_3} x_{\mathrm{O}_3}
1182 + \mu_\textrm{air sec} x_\textrm{air sec} \\
1183 1 & = x_{\mathrm{H}_2\mathrm{O}} + x_{\mathrm{O}_3}
1184 + x_\textrm{air sec} \\
1185 q_{\mathrm{O}_3} & = \frac{\mu_{\mathrm{O}_3}}{\mu_\mathrm{moy}}
1186 x_{\mathrm{O}_3}
1187 \end{array}
1188 \right.
1189 \end{displaymath}
1190 pour les quatre inconnues : $\mu_\mathrm{moy}$,
1191 $x_{\mathrm{H}_2\mathrm{O}}$, $x_\textrm{air sec}$, $q_{\mathrm{O}_3}$. La
1192 solution de ce système est :
1193 \begin{equation}
1194 \label{eq:qO3}
1195 \left\{
1196 \begin{array}{ll}
1197 \mu_\mathrm{moy}
1198 & =
1199 \frac{[(\mu_{\mathrm{O}_3} - \mu_\textrm{air sec}) x_{\mathrm{O}_3}
1200 + \mu_\textrm{air sec}] \mu_{\mathrm{H}_2\mathrm{O}}}
1201 {\mu_{\mathrm{H}_2\mathrm{O}}
1202 + (\mu_\textrm{air sec} - \mu_{\mathrm{H}_2\mathrm{O}})
1203 q_{\mathrm{H}_2\mathrm{O}}} \\
1204 q_{\mathrm{O}_3}
1205 & =
1206 \frac{\mu_{\mathrm{O}_3}
1207 [(\mu_\textrm{air sec} - \mu_{\mathrm{H}_2\mathrm{O}})
1208 q_{\mathrm{H}_2\mathrm{O}}
1209 + \mu_{\mathrm{H}_2\mathrm{O}}]}
1210 {\mu_{\mathrm{H}_2\mathrm{O}}
1211 \left[
1212 \mu_{\mathrm{O}_3}
1213 + \mu_\textrm{air sec}
1214 \left(
1215 \frac{1}{x_{\mathrm{O}_3}} - 1
1216 \right)
1217 \right]}
1218 \end{array}
1219 \right.
1220 \end{equation}
1221 Les valeurs typiques semblent être :
1222 \begin{align*}
1223 \max q_{\mathrm{H}_2\mathrm{O}} \# 10^{-2} \\
1224 \max x_{\mathrm{O}_3} \# 10^{-5}
1225 \end{align*}
1226 L'écart entre $\mu_\mathrm{moy}$ et $\mu_\textrm{air sec}$ est alors
1227 $\lesssim 10^{-2}$, et essentiellement dû à la présence de l'eau. Une
1228 approximation intermédiaire entre :
1229 \begin{displaymath}
1230 \left\{
1231 \begin{array}{ll}
1232 \mu_\mathrm{moy} & = \mu_\textrm{air sec} \\
1233 q_{\mathrm{O}_3} & = \frac{\mu_{\mathrm{O}_3}}{\mu_\textrm{air sec}}
1234 x_{\mathrm{O}_3}
1235 \end{array}
1236 \right.
1237 \end{displaymath}
1238 et le système (\ref{eq:qO3}) serait de calculer $\mu_\mathrm{moy}$ en
1239 ne tenant compte que de la présence de l'eau :
1240 \begin{displaymath}
1241 \mu_\mathrm{moy}
1242 =
1243 \frac{\mu_\textrm{air sec}}
1244 {1 +
1245 \left(
1246 \frac{\mu_\textrm{air sec}}{\mu_{\mathrm{H}_2\mathrm{O}}} - 1
1247 \right)
1248 q_{\mathrm{H}_2\mathrm{O}}}
1249 \end{displaymath}
1250
1251 \subsubsection{Choix du type de remaillage}
1252
1253 Copiant ce qui était déjà fait pour la vapeur d'eau, j'ai d'abord
1254 choisi de remailler verticalement les paramètres de Cariolle en
1255 interpolant une spline cubique de la pression. (Noter que ce n'est pas
1256 une interpolation en logarithme de pression.) Si on interpole
1257 simplement les données de Cariolle et que la pression à laquelle on
1258 interpole est à l'extérieur du tableau de pressions de Cariolle alors
1259 la formule d'interpolation devient sans crier gare une formule
1260 d'extrapolation. C'est la formule pour l'intervalle extrême qui est
1261 utilisée. Pour mieux contrôler cette extrapolation, j'ai ajouté aux
1262 données de Cariolle un point correspondant à une pression nulle. Le
1263 but était d'avoir approximativement une fraction molaire constante
1264 au-dessus du point le plus haut de Cariolle et une production qui tend
1265 vers 0.
1266
1267 Mais l'interpolation avec une spline cubique produit de fortes
1268 oscillations. (Elle donne d'ailleurs souvent des fractions molaires
1269 négatives.) Cf. exécutions
1270 \href{file:/user/guez/Documents/Utilisation_LMDZ/Utilisation_LMDZ.texfol/Utilisation-LMDZ.dvi}{28}
1271 et
1272 \href{file:///user/guez/Documents/Utilisation_LMDZ/Results_etat0_lim/check_coefoz_38.ps}{38}
1273 de \verb+etat0_lim+. Le remaillage vertical est donc maintenant fait
1274 par moyenne pour la plupart des paramètres chimiques, comme le
1275 remaillage horizontal.
1276
1277 Considérons le remaillage de la fraction molaire $r_\mathrm{Mob}$ (le
1278 raisonnement est le même pour $P_\mathrm{net,Mob}$). Nous avons choisi
1279 un remaillage par moyenne donc nous voulons associer à une cellule de
1280 la grille tri-dimensionnelle de LMDZ une moyenne de $r_\mathrm{Mob}$
1281 sur cette cellule. Plus généralement, considérons un volume quelconque
1282 de l'espace réel humain. Le plus sensé est d'associer à ce volume une
1283 moyenne de $r_\mathrm{Mob}$ pondérée par la densité de l'air :
1284 \begin{align*}
1285 \langle r_\mathrm{Mob} \rangle
1286 & = \frac{\iiint r_\mathrm{Mob} N \ud^3 \tau}{\iiint N \ud^3 \tau} \\
1287 & = \frac{\iiint (a + z)^2 r_\mathrm{Mob} N \cos\phi\,\ud z\, \ud \phi\, \ud \lambda}
1288 {\iiint (a + z)^2 N \cos\phi\, \ud z\, \ud \phi\, \ud \lambda}
1289 \end{align*}
1290 Opérons le changement de variable $(z, \phi, \lambda) \to (p, \phi,
1291 \lambda)$, avec l'hypothèse d'équilibre hydrostatique vertical. Notons
1292 $\ud(z, \phi, \lambda) / \ud(p, \phi, \lambda)$ le jacobien de ce
1293 changement de variable :
1294 \begin{align*}
1295 \ud z\, \ud \phi\, \ud \lambda
1296 & = | \frac{\ud(z, \phi, \lambda)}{\ud(p, \phi, \lambda)} |
1297 \ud p\, \ud \phi\, \ud \lambda \\
1298 & = | \partial_p z | \ud p\, \ud \phi\, \ud \lambda \\
1299 & = \frac{\ud p}{\rho g} \ud \phi\, \ud \lambda
1300 \end{align*}
1301 D'où :
1302 \begin{displaymath}
1303 \langle r_\mathrm{Mob} \rangle = \frac
1304 {
1305 \iiint (a + z)^2 r_\mathrm{Mob} \cos\phi \frac{\ud p}{\mu_\mathrm{moy} g}
1306 \ud \phi\, \ud \lambda
1307 }
1308 {
1309 \iiint (a + z)^2 \cos\phi \frac{\ud p}{\mu_\mathrm{moy} g}
1310 \ud \phi\, \ud \lambda
1311 }
1312 \end{displaymath}
1313 Si $z \ll a$ et $\mu_\mathrm{moy}$ et $g$ sont approximativement
1314 constants sur le domaine considéré alors :
1315 \begin{displaymath}
1316 \langle r_\mathrm{Mob} \rangle \approx \frac
1317 {\iiint r_\mathrm{Mob} \cos\phi\, \ud p\, \ud \phi\, \ud \lambda}
1318 {\iiint \cos\phi \, \ud p\, \ud \phi\, \ud \lambda}
1319 \end{displaymath}
1320 (Attention : même si $r_\mathrm{Mob}$ ne dépend pas de $\lambda$, l'intégrale sur
1321 $\lambda$ ne se simplifie que si le domaine en $(p, \phi)$ est
1322 indépendant de $\lambda$.) Considérons maintenant le cas particulier
1323 où le domaine est une cellule de LMDZ. Nous considérons cette cellule
1324 comme un parallélépipède rectangle dans l'espace $(p, \phi, \lambda)$,
1325 d'où :
1326 \begin{displaymath}
1327 \langle r_\mathrm{Mob} \rangle = \frac{1}{\Delta p \Delta(\sin\phi)}
1328 \iint r_\mathrm{Mob} \cos\phi\, \ud p\, \ud \phi
1329 \end{displaymath}
1330 Cf. figure (\ref{fig:cell}).
1331 \begin{figure}[htbp]
1332 \centering
1333 \includegraphics{Graphiques/Cellule}
1334 \caption[Remaillage de la paramétrisation de la chimie de
1335 l'ozone]{En noir, cellule sur laquelle on moyenne les données
1336 concernant l'ozone. En rouge, cellules de Mobidic.}
1337 \label{fig:cell}
1338 \end{figure}
1339 Nous n'avons pas a priori $r_\mathrm{Mob}$ en tout point $(p, \phi)$,
1340 nous avons un nombre fini de valeurs de $r_\mathrm{Mob}$. Il nous
1341 reste donc à supposer une forme de variation de $r_\mathrm{Mob}$ en
1342 fonction de $(p, \phi)$. Le plus simple est de supposer que
1343 $r_\mathrm{Mob}$ est constant sur des cellules rectangulaires du plan
1344 $(p, \phi)$. Nous devons choisir les limites de ces cellules. En
1345 latitude, nous prenons les milieux des valeurs de Mobidic. En
1346 pression, nous prenons les moyennes géométriques des valeurs de
1347 Mobidic (si bien que les limites de cellule en pression sont à
1348 mi-chemin des valeurs de Mobidic sur un axe logarithmique).
1349
1350 Pour les coefficients $a_2$ et $R_\mathrm{het}$, la démarche est moins évidente. Supposons
1351 connu $a_2$ en tout point de ``l'espace humain'', quelle valeur
1352 moyenne de $a_2$, $\overline{a_2}$, associer à un volume $\tau$ ?
1353 Considérons la paramétrisation simplifiée :
1354 \begin{displaymath}
1355 P_\mathrm{net} = P_\mathrm{net,Mob} + a_2 (r - r_\mathrm{Mob})
1356 \end{displaymath}
1357 Nous voudrions que :
1358 \begin{displaymath}
1359 \overline{P_\mathrm{net}}
1360 = \overline{P_\mathrm{net,Mob}}
1361 + \overline{a_2} (\bar r - \overline{r_\mathrm{Mob}})
1362 \end{displaymath}
1363 Ce qui donne :
1364 \begin{displaymath}
1365 \overline{a_2}
1366 = \frac{\iiint a_2 (r - r_\mathrm{Mob}) N \ud^3 \tau}
1367 {\iiint (r - r_\mathrm{Mob})N \ud^3 \tau}
1368 \end{displaymath}
1369 On peut adopter :
1370 \begin{displaymath}
1371 \overline{a_2} = \frac{\iiint a_2 N \ud^3 \tau}{\iiint N \ud^3 \tau}
1372 \end{displaymath}
1373 et garder ainsi une certaine compatibilité avec l'hypothèse selon
1374 laquelle $r_\mathrm{Mob}$ est constant sur une cellule de
1375 Mobidic. Idem pour $R_\mathrm{het}$.
1376
1377 Pour $a_4$ et $T_\mathrm{Mob}$, nous calculons aussi la moyenne
1378 pondérée par $N$.
1379
1380 Pour $\Sigma_\mathrm{Mob}$, verticalement, une moyenne ne me
1381 semblerait pas avoir de sens. Je choisis de faire une interpolation au
1382 milieu de couche de LMDZ (pression \verb+pls+). Quelle interpolation ?
1383 On a :
1384 \begin{equation}
1385 \label{eq:sigma}
1386 \frac{\partial \Sigma_\mathrm{Mob}}{\partial z} = - r_\mathrm{Mob} N \approx - \frac{r_\mathrm{Mob} p}{k_B T}
1387 \end{equation}
1388 En remaillant $r_\mathrm{Mob}$ et $T$, nous avons supposé qu'ils
1389 étaient constants sur des intervalles de pression centrés sur les
1390 niveaux de pression de Mobidic. Considérons donc un tel intervalle,
1391 centré sur la pression $p_1$, correspondant à une altitude $z_1$.
1392 Supposons aussi $\mu_\mathrm{moy}$ et $g$ constants. Sur l'intervalle,
1393 l'échelle $H$ de gradient de pression est constante :
1394 \begin{displaymath}
1395 p(z) = p(z_1) \exp\left(- \frac{z - z_1}{H}\right)
1396 \end{displaymath}
1397 Donc, en intégrant (\ref{eq:sigma}) sur $z$ :
1398 \begin{displaymath}
1399 \Sigma_\mathrm{Mob}(p) - \Sigma_\mathrm{Mob}(p_1) = \frac{r_\mathrm{Mob}}{\mu_\mathrm{moy} g} (p - p_1)
1400 \end{displaymath}
1401 $\Sigma_\mathrm{Mob}$ varie linéairement avec la pression. Nous connaissons les
1402 valeurs de $\Sigma_\mathrm{Mob}$ aux niveaux de Mobidic, que nous supposons être
1403 les centres des intervalles de fraction molaire constante, et non les
1404 limites des intervalles. Nous pourrions commencer par calculer
1405 $\Sigma_\mathrm{Mob}$ aux limites des intervalles. Notons $p_1$ et $p_2$ deux
1406 niveaux de pression successifs de Mobidic, $r_{\mathrm{Mob},1}$ et $r_{\mathrm{Mob},2}$ les
1407 fractions molaires correspondantes, $p_l = \sqrt{p_1 p_2}$ la
1408 limite entre les deux intervalles de centres $p_1$ et $p_2$. Posons :
1409 \begin{displaymath}
1410 \alpha = \frac{r_{\mathrm{Mob},1}}{r_{\mathrm{Mob},2}} \frac{p_l - p_1}{p_2 - p_l}
1411 \end{displaymath}
1412 On a :
1413 \begin{align*}
1414 & \Sigma_\mathrm{Mob}(p_l) - \Sigma_{\mathrm{Mob},1}
1415 = \frac{r_{\mathrm{Mob},1}}{\mu_\mathrm{moy} g} (p_l - p_1) \\
1416 & \Sigma_{\mathrm{Mob},2} - \Sigma_\mathrm{Mob}(p_l)
1417 = \frac{r_{\mathrm{Mob},2}}{\mu_\mathrm{moy} g} (p_2 - p_l)
1418 \end{align*}
1419 donc :
1420 \begin{displaymath}
1421 \Sigma_\mathrm{Mob}(p_l) = \frac{\Sigma_{\mathrm{Mob},1} + \alpha \Sigma_{\mathrm{Mob},2}}{1 + \alpha}
1422 \end{displaymath}
1423 Plus simplement, je choisis d'interpoler linéairement en pression
1424 entre les valeurs de Mobidic.
1425
1426 Pour $\Sigma_\mathrm{Mob}$ horizontalement, nous moyennons simplement pour
1427 conserver le nombre de molécules d'ozone au-dessus d'une surface :
1428 \begin{align*}
1429 \bar \Sigma_\mathrm{Mob} & = \frac{\iint \Sigma_\mathrm{Mob} \ud^2 S}{S} \\
1430 & =
1431 \frac{\iint \Sigma_\mathrm{Mob} (a + z^2) \cos\phi \ud \phi \ud \lambda}
1432 {\iint (a + z^2) \cos\phi \ud \phi \ud \lambda} \\
1433 & \approx \frac{\iint \Sigma_\mathrm{Mob} \cos\phi \ud \phi \ud \lambda}
1434 {\iint \cos\phi \ud \phi \ud \lambda}
1435 \end{align*}
1436
1437 Pour $a_6$, une moyenne pondérée par $N$ semble censée. $a_6(p) (\Sigma(p) -
1438 \Sigma_\mathrm{Mob}(p))$ est une contribution à
1439 $P_\mathrm{net}(p)$. LMDZ calcule la moyenne
1440 $\overline{P_\mathrm{net}}$ pondérée par $N$ sur une cellule. Une
1441 contribution à cette moyenne est :
1442 \begin{displaymath}
1443 \frac{\int a_6 N (\Sigma - \Sigma_\mathrm{Mob}) \ud \tau}{\int N \ud \tau}
1444 \end{displaymath}
1445 $\overline{a_6} (\Sigma - \Sigma_\mathrm{Mob})$, avec $\Sigma$ la
1446 valeur en milieu de couche dans LMDZ et $\Sigma_\mathrm{Mob}$ la
1447 valeur interpolée, se rapproche de cette contribution.
1448
1449 Cf. figures (\ref{fig:regr_latit}), (\ref{fig:regr_p_stepav}) et
1450 (\ref{fig:regr_p_lint}).
1451 \begin{figure}[htbp]
1452 \centering
1453 \includegraphics{Graphiques/regr_latit}
1454 \caption[Remaillage en latitude de la paramétrisation de la chimie
1455 de l'ozone]{Remaillage en latitude. En bleu, les valeurs d'origine,
1456 en rouge les valeurs utilisées.}
1457 \label{fig:regr_latit}
1458 \end{figure}
1459 \begin{figure}[htbp]
1460 \centering
1461 \includegraphics{Graphiques/regr_p_stepav}
1462 \caption[Remaillage de la paramétrisation de la chimie de l'ozone,
1463 en pression par moyenne de fonction en escalier] {Remaillage en
1464 pression par moyenne de fonction en escalier. En bleu, les
1465 valeurs d'origine, en rouge les valeurs utilisées. La position de
1466 \texttt{p3d(i, j, 1)} par rapport à \texttt{plev(n\_plev)} est
1467 quelconque.}
1468 \label{fig:regr_p_stepav}
1469 \end{figure}
1470 \begin{figure}[htbp]
1471 \centering
1472 \includegraphics{Graphiques/regr_p_lint}
1473 \caption[Remaillage de la paramétrisation de la chimie de l'ozone,
1474 en pression par interpolation linéaire]{Remaillage en pression par
1475 interpolation linéaire. Les calculs aux valeurs élevées de
1476 \texttt{pls} (premiers indices de niveau vertical) peuvent être
1477 des extrapolations. La valeur supplémentaire à pression nulle du
1478 maillage source contrôle l'extrapolation aux basses pressions.}
1479 \label{fig:regr_p_lint}
1480 \end{figure}
1481
1482 \subsubsection{Remaillage : dans quel programme, à quel moment ? Quelles
1483 entrées-sorties ?}
1484
1485 Les paramètres chimiques doivent être remaillés en latitude pour LMDZ.
1486 Ce remaillage en latitude peut être fait une fois pour toutes, dans
1487 \verb+etat0_lim+. Par ailleurs, au cours d'une simulation, la pression
1488 à une longitude, une latitude et un niveau vertical donnés change
1489 parce que la pression à la surface change. Donc il faut en principe
1490 faire le remaillage en pression des données de Cariolle à chaque pas
1491 de temps physique. Enfin, nous voulons lisser les variations
1492 temporelles des paramètres chimiques en les interpolant
1493 journalièrement. Ce remaillage temporel peut être fait une fois pour
1494 toutes, dans \verb+etat0_lim+.
1495
1496 En pratique, le remaillage en pression à chaque pas de temps n'est pas
1497 indispensable parce que l'essentiel de la chimie de l'ozone, avec
1498 notre paramétrisation, se déroule à haute altitude, où les niveaux
1499 verticaux de LMDZ sont pratiquement des niveaux de pression fixés.
1500 Nous pouvons donc nous demander si, pour simplifier le programme, nous
1501 pouvons faire les trois remaillages (latitude, pression, temps) dans
1502 \verb+etat0_lim+. Nous négligerions alors pour le remaillage vertical
1503 l'évolution des pressions aux interfaces des couches. Mais la
1504 \href{file:///user/guez/Documents/Informatique_fonctionnement/Programs/Guide_IPSL_climate_models/taille.ods}{taille
1505 du fichier contenant les paramètres remaillés} serait alors trop
1506 grande.\footnote{Le remaillage en pression dans \texttt{etat0\_lim}
1507 serait une bonne solution si nous utilisions les paramètres mensuels
1508 sans interpolation journalière.}
1509
1510 Nous devons donc faire un des trois remaillages dans \verb+gcm+.
1511 Lequel ? On ne peut faire le remaillage vertical sans avoir fait le
1512 remaillage en latitude. Le choix dans \verb+gcm+ se restreint donc aux
1513 remaillages vertical et temporel. Pour le calcul de la production
1514 chimique d'ozone, nous avons besoin à chaque pas de temps de cinq
1515 coefficients tri-dimensionnels (taille totale : $(\mathtt{iim} + 1)
1516 \times (\mathtt{jjm} + 1) \times \mathtt{llm} \times 5$). Si nous
1517 partons des coefficients remaillés en pression dans \verb+etat0_lim+,
1518 nous devons calculer ces cinq coefficients par interpolation
1519 temporelle pour chaque jour. Si nous partons des coefficients
1520 interpolés journalièrement dans \verb+etat0_lim+, nous pouvons aussi
1521 nous contenter de calculer ces cinq coefficients par remaillage
1522 vertical pour chaque jour. Les deux transformations :
1523 \begin{displaymath}
1524 \xymatrix{
1525 (\mathtt{jjm} + 1) \times 45 \ar[d]_{\textrm{remaillage vertical}}
1526 & (\mathtt{iim} + 1) \times (\mathtt{jjm} + 1) \times \mathtt{llm}
1527 \times 12 \ar[ld]^{\textrm{remaillage temporel}} \\
1528 (\mathtt{iim} + 1) \times (\mathtt{jjm} + 1) \times \mathtt{llm}
1529 }
1530 \end{displaymath}
1531 demandent des nombres d'opérations du même ordre de grandeur :
1532 $(\mathtt{iim} + 1) \times (\mathtt{jjm} + 1) \times \mathtt{llm}$. Le
1533 plus sensé est donc de faire le remaillage en pression dans
1534 \verb+gcm+. Pour que l'arrêt et le redémarrage du programme \verb+gcm+
1535 soient sans conséquence, nous ne pouvons faire le remaillage en
1536 pression moins d'une fois par jour. (En particulier, nous ne pouvons
1537 le faire une fois par exéuction de \verb+gcm+, au début de \verb+gcm+,
1538 à partir de la valeur courante du champ de pression.) Nous faisons
1539 donc le remaillage vertical pour chaque jour, négligeant l'évolution
1540 des pressions aux interfaces des couches pendant un jour.
1541
1542 Nous devons encore nous demander s'il vaut mieux lire tout le contenu
1543 de \verb+coefoz_LMDZ.nc+ au début de l'exécution de \verb+gcm+ ou lire
1544 dans le fichier une fois par jour les paramètres au bon jour. Si nous
1545 lisons tout en une seule fois, nous gagnons en temps d'exécution (nous
1546 limitons les accès au disque) mais nous augmentons la
1547 \href{file:///user/guez/Documents/Informatique_fonctionnement/Programs/Guide_IPSL_climate_models/taille.ods}{mémoire
1548 principale consommée}. La lecture une fois par jour simulé est-elle
1549 trop fréquente ? On peut se référer à une durée de 40 s de temps
1550 écoulé par jour simulé en résolution $96 \times 72 \times 50$, sur
1551 deux processus MPI. Pour le moment, la programmation de la lecture une
1552 fois par jour me paraît plus simple.
1553
1554 \verb+etat0_lim+ fait le remaillage en latitude et en temps des huit
1555 coefficients et le remaillage vertical du coefficient $r$ seulement,
1556 au jour initial seulement, pour servir d'état initial de l'abondance
1557 d'ozone. Nous ne pouvons donc pas faire le remaillage en latitude et
1558 temps après \verb+etat0+.
1559
1560 Dans quel fichier \verb+etat0_lim+ doit-il écrire les coefficients
1561 remaillés ? Le fichier \verb+limit.nc+ n'est pas très adapté car les
1562 coefficients ne sont pas sur la grille de la ``physique''. De plus,
1563 les paramètres chimiques ne sont pas des conditions à la limite. Par
1564 ailleurs, les paramètres chimiques sont les mêmes dans plusieurs
1565 exécutions successives de \verb+gcm+, donc ils ne peuvent pas être
1566 dans \verb+start+ ou \verb+startphy+. Nous créons donc un nouveau
1567 fichier \verb+coefoz_LMDZ.nc+. Cf.
1568 \href{file:///user/guez/Documents/Informatique_fonctionnement/Programs/Guide_IPSL_climate_models/inout
1569 LMDZE.odg}{schéma des entrées-sorties de \texttt{etat0\_lim} et
1570 \texttt{gcm}}. \verb+coefoz_LMDZ.nc+ contient donc les données de
1571 Cariolle remaillées en latitude pour LMDZ et interpolées
1572 journalièrement.
1573
1574 Principe de la procédure \verb+regr_lat_time_coefoz+ :
1575 \begin{algorithmic}
1576 \FOR{chaque coefficient à remailler}
1577 \STATE remaillage en latitude
1578 \STATE remaillage en temps
1579 \ENDFOR
1580 \end{algorithmic}
1581 Cf. figure (\ref{fig:regr_lat_time_coefoz}).
1582 \begin{figure}[htbp]
1583 \centering
1584 \includegraphics{Graphiques/regr_lat_time_coefoz}
1585 \caption{Schéma des entrées-sorties de
1586 \texttt{regr\_lat\_time\_coefoz}.}
1587 \label{fig:regr_lat_time_coefoz}
1588 \end{figure}
1589
1590 \subsubsection{Calcul de l'évolution de la distribution d'ozone dans \texttt{phytrac}}
1591
1592 D'après l'équation (\ref{eq:dqdt}) :
1593 \begin{displaymath}
1594 \partial_t q
1595 = - \vec U \cdot \vec\nabla q
1596 + P_\mathrm{net} \frac{\mu_{\mathrm{O}_3}}{\mu_\mathrm{moy}}
1597 \end{displaymath}
1598 Notons $\vec r$ le vecteur position. \verb+phytrac+ calcule :
1599 \begin{displaymath}
1600 q(\vec r, t + \mathtt{pdtphys}) = q(\vec r, t) + \textrm{termes de transport}
1601 + \int_t ^{t + \mathtt{pdtphys}} P_\mathrm{net}(\vec r, t')
1602 \frac{\mu_{\mathrm{O}_3}}{\mu_\mathrm{moy}} \ud t'
1603 \end{displaymath}
1604 Le dernier terme est la contribution de la chime de l'ozone. Nous
1605 avons besoin de $P_\mathrm{net}$ à chaque point de la grille
1606 horizontale de LMDZ et à chaque niveau vertical de LMDZ. Le fichier
1607 \verb+coefoz_LMDZ.nc+ contenant les grandeurs $P_\mathrm{net,Mob}$,
1608 $a_2$, $r_\mathrm{Mob}$, $a_4$, $T _\mathrm{Mob}$, $a_6$,
1609 $\Sigma_\mathrm{Mob}$ et $R_\mathrm{het}$, \verb+phytrac+ doit
1610 intégrer :
1611 \begin{multline*}
1612 P_\mathrm{net} \frac{\mu_{\mathrm{O}_3}}{\mu_\mathrm{moy}}
1613 = P_\mathrm{net,Mob} \frac{\mu_{\mathrm{O}_3}}{\mu_\mathrm{moy}}
1614 + a_2 \left(q - r_\mathrm{Mob} \frac{\mu_{\mathrm{O}_3}}{\mu_\mathrm{moy}}\right)
1615 + a_4 \frac{\mu_{\mathrm{O}_3}}{\mu_\mathrm{moy}}
1616 (T - T_\mathrm{Mob}) \\
1617 + \frac{a_6}{\mu_\mathrm{moy}}
1618 \left(
1619 \frac{1}{r^2} \int_r ^{+ \infty} q \rho r'^2 \ud r'
1620 - \mu_{\mathrm{O}_3} \Sigma_\mathrm{Mob}
1621 \right)
1622 + R_\mathrm{het,corr} q
1623 \end{multline*}
1624
1625 Dans \verb+phytrac+, nous n'avons accès qu'à la température et à la
1626 masse volumique à l'instant courant, et à aucun autre instant.
1627 Calculons donc l'intégrale comme si $T$ et $\rho$ étaient des
1628 constantes pendant \verb+pdtphys+. La direction du Soleil, qui
1629 intervient dans le terme de chimie hétérogène, pourrait être
1630 considérée comme une fonction du temps. Je choisis pour simplifier de
1631 considérer aussi la direction du Soleil comme une constante pendant un
1632 pas de temps de la physique. Récrivons alors $P_\mathrm{net}
1633 \mu_{\mathrm{O}_3} / \mu_\mathrm{moy}$ en mettant en évidence les
1634 constantes. Posons :
1635 \begin{align*}
1636 & c := [P_\mathrm{net,Mob} - a_2 r_\mathrm{Mob}
1637 + a_4 (T - T_\mathrm{Mob}) - a_6 \Sigma_\mathrm{Mob}]
1638 \frac{\mu_{\mathrm{O}_3}}{\mu_\mathrm{moy}} \\
1639 & b := a_2 + R_\mathrm{het,corr} \\
1640 & a_{6m} := \frac{a_6}{\mu_\mathrm{moy}}
1641 \end{align*}
1642 $c$, $b$ et $a_{6m}$ sont des champs constants connus pendant
1643 \verb+pdtphys+. On a :
1644 \begin{equation}
1645 \label{eq:dq_dt}
1646 P_\mathrm{net} \frac{\mu_{\mathrm{O}_3}}{\mu_\mathrm{moy}}
1647 = c + b q + a_{6m} \frac{1}{r^2} \int_r ^{+ \infty} q \rho r'^2 \ud r'
1648 \end{equation}
1649 Si on calcule l'évolution de $q$ en ne tenant compte
1650 que de la chimie (c'est-à-dire sans tenir compte des termes de
1651 transport) alors on obtient :
1652 \begin{displaymath}
1653 \partial_t q = P_\mathrm{net} \frac{\mu_{\mathrm{O}_3}}{\mu_\mathrm{moy}}
1654 \end{displaymath}
1655
1656 Limitons-nous d'abord aux deux premiers termes dans le membre de
1657 droite de (\ref{eq:dq_dt}) :
1658 \begin{equation}
1659 \label{eq:dq_dt_c_a2}
1660 \partial_t q = c + b q
1661 \end{equation}
1662 La solution exacte de cette équation différentielle sur $q$ donne :
1663 \begin{equation}
1664 \label{eq:delta_q_exact}
1665 \begin{array}{|ll}
1666 \delta q = (c + b q) \frac{e^{b \delta t} - 1}{b}
1667 & \textrm{si } b \ne 0 \\
1668 \delta q = c \delta t & \textrm{si } b = 0
1669 \end{array}
1670 \end{equation}
1671 pour un intervalle de temps $\delta t$ quelconque. \`A l'ordre 2 en
1672 $b \delta t$, nous avons donc, que $b$ soit nul ou non :
1673 \begin{equation}
1674 \label{eq:delta_q}
1675 \delta q = (c + b q) (1 + b \delta t / 2) \delta t
1676 \end{equation}
1677 (Ce qui revient à avoir intégré l'équation différentielle par la
1678 méthode du point milieu. Cf. Press et al. [1992 \# 318, équation
1679 (16.1.2)].) Pour $\delta t = 1800$ s, on a :
1680 \begin{displaymath}
1681 4 \cdot 10^{-11} \le |a_2| \delta t \le \nombre{0,02}
1682 \end{displaymath}
1683 Entre la valeur calculée de $e^x -1$ et la valeur calculée de $x + x^2
1684 / 2$, laquelle est la plus proche de la valeur exacte de $e^x -1$ ?
1685 Pour $x \ge 10^{-2}$, c'est la valeur calculée de $e^x -1$. Pour $0
1686 \le x \le 10^{-3}$, c'est la valeur calculée de $x + x^2 / 2$. En
1687 conséquence, l'utilisation de (\ref{eq:delta_q}) à la place de
1688 (\ref{eq:delta_q_exact}) est un bon choix.
1689
1690 Si on tient maintenant compte du terme de densité-colonne dans
1691 (\ref{eq:dq_dt}), nous avons une équation intégro-différentielle aux
1692 dérivées partielles. Nous commençons par une discrétisation spatiale
1693 verticale, à une position horizontale fixée. Nous avons \verb+llm+
1694 couches d'atmosphère et nous supposons que $q$ est uniforme dans
1695 chaque couche. La fonction inconnue $q(\vec r, t)$ devient alors un
1696 vecteur de fonctions du temps : $[q_1(t), \dots, q_\mathtt{llm}(t)]$.
1697 La fonction connue $c(\vec r)$ devient un vecteur de constantes
1698 connues : $[c_1, \dots, c_\mathtt{llm}]$, idem pour $b$ et $a_{6m}$.
1699 Notons $r_k$ la position de la limite entre les couches $k-1$
1700 et $k$. Pour chaque couche $k$, nous avons :
1701 \begin{displaymath}
1702 \frac{\ud q_k}{\ud t}
1703 = c_k + b_k q_k
1704 + a_{6m,k} \frac{1}{r_k^2}
1705 \sum_{k'=k} ^{\mathtt{llm}} q_{k'} \int_{r_{k'}} ^{r_{k'+1}} \rho r^2 \ud r
1706 \end{displaymath}
1707 Supposons que la différence entre $r_\mathtt{llm}$ et
1708 le rayon de la Terre soit négligeable. Alors pour $k \le k' \le \mathtt{llm}
1709 - 1$ :
1710 \begin{equation}
1711 \label{eq:approx_column}
1712 \frac{1}{r_k^2} \int_{r_{k'}} ^{r_{k'+1}}\rho r'^2 \ud r'
1713 \approx \int_{z_{k'}} ^{z_{k'+1}} \rho \ud z
1714 \end{equation}
1715 Mais le cas de la couche supérieure est plus problématique :
1716 $r_{\mathtt{llm}+1} = + \infty$. Nous pouvons faire l'approximation
1717 (\ref{eq:approx_column}) pour $k' = \mathtt{llm}$ si $\rho$ décroît
1718 suffisamment rapidement au dessus de $r_\mathtt{llm}$. C'est
1719 l'approximation qui est faite dans \verb+phytrac+ pour le calcul de
1720 \verb+zmasse+, et que je garde. Alors :
1721 \begin{equation}
1722 \label{eq:dqk_dt}
1723 \frac{\ud q_k}{\ud t}
1724 = c_k + b_k q_k
1725 + a_{6m,k} \sum_{k'=k} ^{\mathtt{llm}} q_{k'} \mathtt{zmasse}_{k'}
1726 \end{equation}
1727 Nous nous sommes ramenés à un système d'équations différentielles du
1728 premier ordre.
1729
1730 La somme partielle dans (\ref{eq:dqk_dt}) est la densité-colonne
1731 d'ozone au dessus de la base de la couche $k$. Nous pourrions raffiner
1732 en calculant à partir de là des densités-colonnes au dessus des
1733 milieux de couches (par interpolation linéaire en pression). Je reste
1734 pour l'instant à l'équation (\ref{eq:dqk_dt}).
1735
1736 Les équations différentielles du premier ordre du système
1737 (\ref{eq:dqk_dt}) sont linéaires à coefficients constants. Nous
1738 pourrions chercher une solution exacte. Considérant l'étude que j'ai
1739 faite de l'équation (\ref{eq:dq_dt_c_a2}), je choisis d'appliquer
1740 simplement la méthode du point milieu.
1741
1742 $c$ et $b$ doivent être recalculés à chaque pas de temps de la
1743 physique mais, parmi les termes composant $c$, les termes provenant de
1744 Mobidic ne varient que pour le remaillage en pression: leur
1745 combinaison peut être calculée une fois par jour. Distinguons donc :
1746 \begin{displaymath}
1747 c_\mathrm{Mob}
1748 :=
1749 (P_\mathrm{net,Mob} - a_2 r_\mathrm{Mob}
1750 - a_6 \Sigma_\mathrm{Mob} - a_4 T_\mathrm{Mob})
1751 \frac{\mu_{\mathrm{O}_3}}{\mu_\mathrm{moy}}
1752 \end{displaymath}
1753 $c_\mathrm{Mob}$ regroupe les quatre paramètres ``climatologiques''.
1754 On a :
1755 \begin{displaymath}
1756 c = c_\mathrm{Mob} + a_4 \frac{\mu_{\mathrm{O}_3}}{\mu_\mathrm{moy}} T
1757 \end{displaymath}
1758 De même, pour le calcul de $b$, le filtrage de la chimie hétérogène
1759 selon la latitude et la prise en compte du coefficient Clx peuvent
1760 être faits une fois par jour. En résumé, nous avons distingué :
1761 \begin{itemize}
1762 \item la variable $q$ à intégrer pendant un pas de temps de la
1763 physique, qui est donc considérée comme dépendant du temps pendant
1764 \verb+pdtphys+ ;
1765 \item les variables considérées comme constantes pendant
1766 \verb+pdtphys+ mais qui changent d'un pas de temps de la physique à
1767 l'autre ;
1768 \item les variables qui ne changent qu'une fois par jour.
1769 \end{itemize}
1770
1771 \subsubsection{Les procédures \texttt{regr\_pr\_comb\_coefoz} et
1772 \texttt{regr\_pr\_(av|int)\_coefoz}}
1773
1774 Les procédures du module \verb+regr_pr+ (cf. figure
1775 (\ref{fig:regridding_proced})) fournissent des variables ayant un
1776 double indice horizontal alors que \verb+tr_seri+ dans \verb+phytrac+
1777 a un indice horizontal simple.
1778 \begin{figure}[htbp]
1779 \centering
1780 \includegraphics{Graphiques/regridding_proced}
1781 \caption{Arbre des appels des procédures de remaillage. Les cadres
1782 verts symbolisent des modules. Les procédures du plus bas niveau
1783 sont celles qui effectuent réellement le remaillage. Elles sont
1784 les plus générales et ne font pas référence aux notions de
1785 pression, latitude ou temps.}
1786 \label{fig:regridding_proced}
1787 \end{figure}
1788 Il faut lire dans le fichier \verb+coefoz_LMDZ.nc+, remailler en
1789 pression et faire la transformation d'indiçage une seule fois par jour
1790 de simulation. De même, $c_\mathrm{Mob}$, $a_4 \mu_{\mathrm{O}_3} /
1791 \mu_\mathrm{moy}$ et $a_{6m}$ doivent être calculés une seule fois par
1792 jour. Toutes ces opérations sont faites dans la procédure
1793 \verb+regr_pr_comb_coefoz+. Quand pouvons-nous appeler
1794 \verb+regr_pr_comb_coefoz+ ? \verb+calfis+ appelle forcément une seule
1795 fois \verb+physiq+, qui appelle forcément une seule fois
1796 \verb+phytrac+. Nous pourrions donc faire l'appel dans n'importe
1797 laquelle de ces trois procédures. Nous choisissons \verb+phytrac+ pour
1798 une plus grande modularité.
1799
1800 La procédure \verb+regr_pr_comb_coefoz+ lit en entier les huit
1801 coefficients chimiques au jour courant et met à jour les cinq
1802 variables de module : \verb+a2+, \verb+a4_mass+, \verb+c_mob+,
1803 \verb+a6_mass+, \verb+r_het_interm+. Nous regroupons ici les
1804 définitions des quatre dernières :
1805 \begin{align*}
1806 & a_{4m} := a_4 \frac{\mu_{\mathrm{O}_3}}{\mu_\mathrm{moy}} \\
1807 & c_\mathrm{Mob}
1808 := (P_\mathrm{net,Mob} - a_2 r_\mathrm{Mob} - a_6 \Sigma_\mathrm{Mob})
1809 \frac{\mu_{\mathrm{O}_3}}{\mu_\mathrm{moy}} - a_{4m} T_\mathrm{Mob} \\
1810 & a_{6m} := \frac{a_6}{\mu_\mathrm{moy}} \\
1811 & R_\mathrm{het,interm} = R_\mathrm{het} 1_{\phi \notin [- 45°, 45°]}
1812 \left(\frac{\mathrm{Clx}}{\nombre{3,8} \cdot 10^{-9}}\right)^2
1813 \end{align*}
1814 Chacune des cinq variables de module est de profil \verb+(klon, llm)+.
1815
1816 La procédure \verb+regr_pr_(av|int)_coefoz+ est appelée une fois par
1817 jour, pour chaque coefficient chimimque. Cf. figure (\ref{fig:regr_pr_coefoz}).
1818 \begin{figure}[htbp]
1819 \centering
1820 \includegraphics{Graphiques/regr_pr_coefoz}
1821 \caption{Entrées-sorties de la procédure
1822 \texttt{regr\_pr\_(av|int)\_coefoz}. En rouge : les données, en
1823 noir : les traitements.}
1824 \label{fig:regr_pr_coefoz}
1825 \end{figure}
1826
1827
1828 \subsubsection{Vue d'ensemble informatique}
1829
1830 Cf. figure (\ref{fig:ozone}).
1831 \begin{figure}[htbp]
1832 \centering
1833 \includegraphics{Graphiques/ozone}
1834 \caption{Vue d'ensemble de ce qui concerne le traceur ozone.}
1835 \label{fig:ozone}
1836 \end{figure}
1837 Les résultats du programme \texttt{gcm} pour l'ozone apparaissent dans
1838 cinq fichiers (cf. figure (\ref{fig:ozone})). Dans \verb+histrac.nc+,
1839 ce sont les variables :
1840 \begin{itemize}
1841 \item \verb+float O3(time_counter, presnivs, lat, lon)+
1842 \item \verb+flO3+ flux
1843 \item \verb+d_tr_th_O3+ tendance thermique
1844 \item \verb+d_tr_cv_O3+ tendance convection
1845 \item \verb+d_tr_cl_O3+ tendance couche limite
1846 \end{itemize}
1847 La différence entre \verb+O3+ dans \verb+histrac.nc+ et :
1848 \begin{verbatim}
1849 float O3VL1(time_counter, sigss, lat, lon)
1850 \end{verbatim}
1851 dans \verb+dyn_hist_ave.nc+ n'est pas claire pour moi. Une longitude
1852 en plus, 180°, dans \verb+dyn_hist_ave.nc+. Les latitudes sont les
1853 mêmes. Cf.
1854 \hyperref{file:/user/guez/Documents/Utilisation_LMDZ/Utilisation_LMDZ.texfol/Utilisation-LMDZ.dvi}{section}{ozone}{résultats}.
1855 Faire varier les paramètres dans \verb+physiq.def+ :
1856 \begin{verbatim}
1857 OK_mensuel=y
1858 OK_instan=y
1859 lev_histhf=4
1860 lev_histmth=2
1861 \end{verbatim}
1862 n'apporte aucune sortie supplémentaire sur l'ozone. Cf. exécutions 58
1863 à 63 de \verb+gcm+.
1864
1865 Diverses procédures s'occupent de remaillage. Elles sont de
1866 généralités différentes. Cf. figure (\ref{fig:regridding_proced}).
1867 \begin{description}
1868 \item[\texttt{regr\_pr\_comb\_coefoz}] : lecture, remaillage en pression,
1869 empaquetage, combinaison
1870 \item[\texttt{regr\_pr\_coefoz}] : lecture, remaillage en pression, empaquetage
1871 \item[\texttt{regr\_lat\_time\_coefoz}] : lecture, remaillage en temps et
1872 latitude, écriture
1873 \item[\texttt{regr\_pr\_o3}] : lecture, remaillage en pression
1874 \item[\texttt{regr\_pr}] : remaillage en pression
1875 \item[\texttt{regr1\_lint}, \texttt{regr1\_step\_av},
1876 \texttt{regr3\_lint}] : remaillage
1877 \end{description}
1878
1879
1880 \section{Versions de \texttt{etat0\_lim}}
1881
1882 Problème de l'appel à \verb+startget_dyn+ pour \verb+vvent+. Cf.
1883 Flyspray, tâche numéro 29. Dans mon rapport, j'aurais dû ajouter que
1884 le même problème que pour \verb+pls+ se posait pour \verb+workvar+. Si
1885 on corrige en sélectionnant les indices de latitude de 1 à \verb+jjm+
1886 dans les arguments effectifs \verb+pls+ et \verb+workvar+ alors on
1887 obtient des modifications dans la sortie standard et dans le fichier
1888 \verb+start.nc+ uniquement. Dans la sortie standard, des petites
1889 différences seulement, entre autres dans les valeurs de \verb+V+
1890 \verb+min+ \verb+max+ affichées après l'appel incriminé de
1891 \verb+startget_dyn+. Dans le fichier \verb+start.nc+, les seules
1892 variables différentes sont \verb+controle+ et \verb+vcov+.
1893
1894 Modifications provisoires :
1895 \begin{description}
1896 \item[M1] Mise en commentaire de l'appel à \verb+startget+ pour
1897 \verb+phis+ dans \verb+etat0+.
1898 \item[M2] \verb+q3d(:, :, :, 5) = 3.+ dans \verb+etat0+.
1899 \end{description}
1900
1901 Modifications cumulatives :
1902 \begin{description}
1903 \item[L1] Passage à \verb+netcdf95+ dans \verb+limit.f+. Correction
1904 lecture \verb+Rugos+. Correction dans \verb+etat0+, appel à
1905 \verb+startget_dyn+ pour \verb+vvent+. Version 2.10a de
1906 \verb+spline+ et \verb+splint+.
1907 \item[L2] Initialisation d'un traceur ozone (sans rétroaction sur
1908 l'atmosphère) à partir des données de Mobidic. Modification de
1909 \verb+nqmx+, 5 au lieu de 4 dans \verb+dimens_m.f+.
1910 \item[L3] Correction dans \verb+etat0+ : \verb+q3d+ doit contenir des
1911 fractions massiques et non molaires.
1912 \item[L4] Correction : attribut \verb+save+ dans les modules
1913 \verb+comvert+, \verb+serre+, \verb+clesphys+, \verb+iniprint+,
1914 \verb+ener+, \verb+comdissnew+, \verb+dimphy+, \verb+logic+, \verb+comgeom+.
1915 \item[L5] \'Ecriture du fichier \verb+coefoz_LMDZ.nc+ (ajout de la
1916 procédure \verb+aver_interp_coefoz+), lecture de la distribution
1917 initiale d'ozone dans ce fichier (suppression de la procédure
1918 \verb+initial_o3+).
1919 \item[L6] Pour l'écriture de \verb+coefoz_LMDZ.nc+, modification de
1920 l'extrapolation aux basses pressions. Nouveau cas \verb+strato1+ dans
1921 \verb+disvert+.
1922 \item[L7] Création des modules \verb+regr_coefoz_m+, \verb+pressure_m+
1923 et \verb+regrid+. Clarification de \verb+inter_barxy+. Modification
1924 du remaillage en latitude des coefficients pour l'ozone : en
1925 supposant une fonction en escalier et non une fonction linéaire par
1926 morceaux.
1927 \item[L8] Modification du remaillage en latitude des coefficients pour
1928 l'ozone : pondération avec le cosinus de la latitude.
1929 \item[L9] Modification du remaillage en pression des coefficients pour
1930 l'ozone : moyenne au lieu d'une interpolation par spline cubique.
1931 \item[L10] Nouveau cas \verb+strato2+ dans \verb+disvert+.
1932 Correction de bogue dans \verb+inter_bary+ : \verb+y0+ initialisé à
1933 $-90$ au lieu de 0.
1934 \item[L11] Remaillage de la variable \verb+a2+ dans \verb+regr_coefoz+.
1935 \item[L12] Changement de nom : \verb+sigma+ en \verb+s+ dans
1936 \verb+disvert+. Changement de noms : \verb+r+ et \verb+P_net+ en
1937 \verb+r_Mob+ et \verb+P_net_Mob+ dans \verb+coefoz_LMDZ.nc+.
1938 \item[L13] Remaillage de \verb+a4+ et \verb+temperature+ dans
1939 \verb+regr_coefoz+.
1940 \item[L14] Remaillage de \verb+a6+ et \verb+Sigma+ dans
1941 \verb+regr_coefoz+.
1942 \item[L15] Remaillage de \verb+R_Het+ dans \verb+regr_coefoz+.
1943 Suppression de la variable \verb+newlmt+ dans \verb+limit+.
1944 \end{description}
1945
1946 \section{Versions de \texttt{gcm}}
1947
1948 Modifications provisoires :
1949 \begin{description}
1950 \item[M1] Modifications de François L. dans \verb+ini_histday.h+,
1951 \verb+physiq.F+, \verb+phytrac.F+, \verb+write_histday+\verb+.h+.
1952 Avec ces modifications, les fichiers \verb+ini_histhf.h+,
1953 \verb+write_histhf.h+, \verb+ini_histmth.h+, \verb+write_histmth.h+,
1954 \verb+ini_histmthNMC.h+ et \verb+write_histmthNMC.h+ ne sont plus
1955 utilisés. Les variables \verb+lev_histhf+, \verb+lev_histmth+ et
1956 \verb+ok_mensuel+ ne sont donc pas utilisées.
1957 \item[M2] Dans \verb+gcm+, après l'appel à \verb+dynetat0+ :
1958 \verb+teta+ moyenné horizontalement, \verb+ucov=vcov=0+,
1959 \verb+q=0+.
1960 \item[M3] Dans \verb+gcm+, après l'appel à \verb+dynetat0+ :
1961 \verb+ps+ = 101325.
1962 \item[M4] Dans \verb+leapfrog.F+, mise en commentaire des appels
1963 à \verb+writedynav+ et \verb+bilan_dyn+ (deux appels
1964 de chaque sous-programme). Pour que le fichier \verb+dyn_hist_ave.nc+
1965 soit presque vide et que le fichier \verb+dynzon.nc+ ne
1966 soit pas créé.
1967 \end{description}
1968
1969 Modifications cumulatives :
1970 \begin{description}
1971 \item[L1] Sur la base de la version téléchargée le 2/3/6, corrections
1972 de Phu L. V. dans \verb+physiq.F+ et \verb+write_histmthNMC.h+, \textit{cf.}
1973 messages des 13/3/6 et 14/3/6.
1974 \item[L2] Décroissance radioactive de l'ozone (modification dans
1975 \verb+phytrac+).
1976 \item[L3] Correction : attribut \verb+save+ dans les modules
1977 \verb+comvert+, \verb+conema3_m+, \verb+serre+, \verb+clesphys+,
1978 \verb+iniprint+, \verb+ener+, \verb+comgeomphy+, \verb+yoethf+,
1979 \verb+comdissnew+, \verb+dimphy+, \verb+logic+, \verb+comgeom+.
1980 \item[L4] \'Evolution du traceur ozone selon la paramétrisation de
1981 Cariolle, à l'ordre 0 (terme $P_\mathrm{net}$ uniquement) et sans la
1982 chimie hétérogène.
1983 \item[L5] Correction dans \verb+phytrac+, pour empêcher la fraction
1984 massique d'ozone de devenir négative. Nouveaux cas \verb+strato1+ et
1985 \verb+strato2+ dans \verb+disvert+.
1986 \item[L6] Augmentation de \verb+lmx+ de 20 à 100 dans \verb+gradsdef+.
1987 \item[L7] Ajout du terme en $a_2$ dans le calcul de la production
1988 chimique d'ozone, dans \verb+phytrac+.
1989 \item[L8] Ajout du terme en $a_4$ dans le calcul de la production
1990 chimique d'ozone, dans \verb+phytrac+.
1991 \item[L9] Ajout du terme en $a_6$ dans le calcul de la production
1992 chimique d'ozone, dans \verb+phytrac+.
1993 \item[L10] Ajout du terme de chimie hétérogène dans le calcul de la
1994 production chimique d'ozone, dans \verb+o3_chem_m+.
1995 \item[L11] Correction d'un bogue dans \verb+o3_chem+ : le filtrage
1996 selon la direction du Soleil doit affecter $b$ et non \verb+r_het+.
1997 \end{description}
1998
1999 \end{document}

  ViewVC Help
Powered by ViewVC 1.1.21