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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 12 - (show annotations)
Mon Jul 21 16:05:07 2008 UTC (15 years, 11 months ago) by guez
File MIME type: application/x-tex
File size: 85763 byte(s)
-- Minor modification of input/output:

Created procedure "read_logic". Variables of module "logic" are read
by "read_logic" instead of "conf_gcm". Variable "offline" of module
"conf_gcm" is read from namelist instead of "*.def".

Deleted arguments "dtime", "co2_ppm_etat0", "solaire_etat0",
"tabcntr0" and local variables "radpas", "tab_cntrl" of
"phyetat0". "phyetat0" does not read "controle" in "startphy.nc" any
longer. "phyetat0" now reads global attribute "itau_phy" from
"startphy.nc". "phyredem" does not create variable "controle" in
"startphy.nc" any longer. "phyredem" now writes global attribute
"itau_phy" of "startphy.nc". Deleted argument "tabcntr0" of
"printflag". Removed diagnostic messages written by "printflag" for
comparison of the variable "controle" of "startphy.nc" and the
variables read from "*.def" or namelist input.

-- Removing unwanted functionality:

Removed variable "lunout" from module "iniprint", replaced everywhere
by standard output.

Removed case "ocean == 'couple'" in "clmain", "interfsurf_hq" and
"physiq". Removed procedure "interfoce_cpl".

-- Should not change anything at run time:

Automated creation of graphs in documentation. More documentation on
input files.

Converted Fortran files to free format: "phyredem.f90", "printflag.f90".

Split module "clesphy" into "clesphys" and "clesphys2".

Removed variables "conser", "leapf", "forward", "apphys", "apdiss" and
"statcl" from module "logic". Added arguments "conser" to "advect",
"leapf" to "integrd". Added local variables "forward", "leapf",
"apphys", "conser", "apdiss" in "leapfrog".

Added intent attributes.

Deleted arguments "dtime" of "phyredem", "pdtime" of "flxdtdq", "sh"
of "phytrac", "dt" of "yamada".

Deleted local variables "dtime", "co2_ppm_etat0", "solaire_etat0",
"length", "tabcntr0" in "physiq". Replaced all references to "dtime"
by references to "pdtphys".

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

  ViewVC Help
Powered by ViewVC 1.1.21