/[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 15 - (hide annotations)
Fri Aug 1 15:24:12 2008 UTC (15 years, 11 months ago) by guez
File MIME type: application/x-tex
File size: 86957 byte(s)
-- Minor modification of input/output:

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

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

-- Should not change any result at run time:

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

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

Created a module containing procedure "phyredem".

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

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

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

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

  ViewVC Help
Powered by ViewVC 1.1.21