/[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 18 - (show annotations)
Thu Aug 7 12:29:13 2008 UTC (15 years, 10 months ago) by guez
File MIME type: application/x-tex
File size: 87150 byte(s)
In module "regr_pr", rewrote scanning of horizontal positions as a
single set of loops, using a mask.

Added some "intent" attributes.

In "dynredem0", replaced calls to Fortran 77 interface of NetCDF by
calls to NetCDF95. Removed calls to "nf_redef", regrouped all writing
operations. In "dynredem1", replaced some calls to Fortran 77
interface of NetCDF by calls to Fortran 90 interface.

Renamed variable "nqmax" to "nq_phys".

In "physiq", if "nq >= 5" then "wo" is computed from the
parameterization of "Cariolle".

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

  ViewVC Help
Powered by ViewVC 1.1.21