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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 13 - (hide annotations)
Fri Jul 25 19:59:34 2008 UTC (15 years, 10 months ago) by guez
File MIME type: application/x-tex
File size: 87241 byte(s)
-- Minor change of behaviour:

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

-- Minor modification of input/output:

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

-- Should not change any result at run time:

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

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

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

Added some "intent" attributes.

"regr11_lint" does not call "polint".

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

  ViewVC Help
Powered by ViewVC 1.1.21