/[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 13 - (show annotations)
Fri Jul 25 19:59:34 2008 UTC (15 years, 10 months ago) by guez
File MIME type: application/x-tex
File size: 87241 byte(s)
-- Minor change of behaviour:

"etat0" does not compute "rugsrel" nor "radpas". Deleted arguments
"radpas" and "rugsrel" of "phyredem". Deleted argument "rugsrel" of
"phyetat0". "startphy.nc" does not contain the variable "RUGSREL". In
"physiq", "rugoro" is set to 0 if not "ok_orodr". The whole program
"etat0_lim" does not use "clesphys2".

-- Minor modification of input/output:

Created subroutine "read_clesphys2". Variables of "clesphys2" are read
in "read_clesphys2" instead of "conf_gcm". "printflag" does not print
variables of "clesphys2".

-- Should not change any result at run time:

References to module "numer_rec" instead of individual modules of
"Numer_rec_Lionel".

Deleted argument "clesphy0" of "calfis", "physiq", "conf_gcm",
"leapfrog", "phyetat0". Deleted variable "clesphy0" in
"gcm". "phyetat0" does not modify variables of "clesphys2".

The program unit "gcm" does not modify "itau_phy".

Added some "intent" attributes.

"regr11_lint" does not call "polint".

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

  ViewVC Help
Powered by ViewVC 1.1.21