<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SandrineSaturne</id>
		<title>Planets - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SandrineSaturne"/>
		<link rel="alternate" type="text/html" href="http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php/Special:Contributions/SandrineSaturne"/>
		<updated>2026-06-11T08:20:48Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.7</generator>

	<entry>
		<id>http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php?title=Dynamico-giant&amp;diff=2734</id>
		<title>Dynamico-giant</title>
		<link rel="alternate" type="text/html" href="http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php?title=Dynamico-giant&amp;diff=2734"/>
				<updated>2025-04-30T14:10:20Z</updated>
		
		<summary type="html">&lt;p&gt;SandrineSaturne: /* - Modules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[transferred from github, now active here]&lt;br /&gt;
&lt;br /&gt;
= 1. Introduction =&lt;br /&gt;
&lt;br /&gt;
Modeling the atmospheric circulation of giant planets of our solar System (Jupiter, Saturn, Uranus and Neptune) require high horizontal resolution grid: typically, half a degree (in latitude, longitude) for Jupiter and Saturn, and one degree for Uranus and Neptune. &lt;br /&gt;
For this reason, GCM runs for giant planets use the DYNAMICO dynamical core (see [[The_DYNAMICO_dynamical_core|Dynamico]]), coupled to the Generic physics (see [[Overview_of_the_Generic_PCM|Generic-PCM]]).&lt;br /&gt;
&lt;br /&gt;
= 2. Installation =&lt;br /&gt;
&lt;br /&gt;
== A) Fichiers d'architecture ==&lt;br /&gt;
&lt;br /&gt;
=== - Modules ===&lt;br /&gt;
&lt;br /&gt;
Two options:&lt;br /&gt;
&lt;br /&gt;
1/ Before installation, set environment (do it once) in your .bash_profile.&lt;br /&gt;
&lt;br /&gt;
Example for Ciclad:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ulimit -s unlimited&lt;br /&gt;
# modules&lt;br /&gt;
module purge&lt;br /&gt;
module load gnu/4.9.3 &lt;br /&gt;
module load intel/15.0.6.233&lt;br /&gt;
module load openmpi/1.6.5-ifort&lt;br /&gt;
module load hdf5/1.8.18-parallel-ifort&lt;br /&gt;
module load netcdf4/4.4.1.1-parallel-ifort&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beware, if you change version of model (newer or older version), it's possible that you have to change modules...&lt;br /&gt;
&lt;br /&gt;
2/ Or, in your script that launches a job, source a .env file (' source .../dynamico-giant/code/ARCH/arch-ADASTRA-gnu.env ')&lt;br /&gt;
&lt;br /&gt;
=== - Installation sur un nouveau cluster ===&lt;br /&gt;
&lt;br /&gt;
En pratique LMDZ.COMMON, ICOSA_LMDZ et IOIPSL peuvent utiliser exactement le même fichier arch.fcm ; mais celui pour ICOSAGCM est légèrement différent (les %FPP_DEF diffèrent, peut-être aussi le %FPP).&lt;br /&gt;
&lt;br /&gt;
make_icosa_lmdz doit être lancé avec -arch_path ../ARCH puisque les arch.env et arch.path communs se trouvent dans ../ARCH (l'option -arch_path ne concerne d'ailleurs que les fichiers arch.env et arch.path; le fichier arch.fcm recherché sera toujours celui dans le &amp;amp;quot;arch&amp;amp;quot; de chacun des modèles. Donc il faut bien mettre pour chacun des quatre modèles (LMDZ.COMMON, ICOSA_LMDZ,IOIPSL et ICOSAGCM) le arch.fcm dans le sous-dossier arch/ du modèle correspondant.&lt;br /&gt;
&lt;br /&gt;
L'installation d'IOIPSL doit se faire à partir du bon script bash. Si vous utilisez un server autre qu'occigen, il vous faut changer le nom du script à utiliser dans install_ioipsl.sh. Par exemple, il vous faudra utiliser install_ioipsl_ciclad-ifort.bash pour CICLAD.&lt;br /&gt;
&lt;br /&gt;
XIOS est écrit en C++, et pas en Fortran. Le fichier arch.fcm correspondant est donc nécessairement différent de celui des quatre autres modèles. Pour créér ce arch.fcm, prendre exemple sur les fichiers .fcm déjà présent dans XIOS/arch/, avec une architecture similaire à celle du nouveau cluster. En particulier, il faut utiliser des versions de gcc/gfortran &amp;amp;gt; 6+. Il faut absolument avoir une bibliothèque HDF5 compilée en parallèle, ainsi que netcdf-C et netcdf-fortran (et peut être aussi netcdf-Cxx) compilé en parallèle. Sans ça, il sera peut-être possible de compiler le modèle, mais pas de lancer une simulation en utilisant XIOS.&lt;br /&gt;
&lt;br /&gt;
== B. Download ==&lt;br /&gt;
&lt;br /&gt;
Download structure&lt;br /&gt;
&lt;br /&gt;
Take place on a repository and git clone the model.&lt;br /&gt;
&lt;br /&gt;
On occigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $SCRATCHDIR&lt;br /&gt;
git clone https://github.com/aymeric-spiga/dynamico-giant.git [optional different name]&amp;lt;/pre&amp;gt;&lt;br /&gt;
== C. Install ==&lt;br /&gt;
&lt;br /&gt;
Install code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd dynamico-giant&lt;br /&gt;
./install.sh&lt;br /&gt;
./install_ioipsl.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
A login and a password are necessary to install IOIPSL (only for the first time, after that we can save them). Please contact TGCC computing center to get the login/password.&lt;br /&gt;
&lt;br /&gt;
After that, please add &amp;amp;quot;$PWD&amp;amp;quot;/FCM_V1.2/bin/ to PATH environment variable.&lt;br /&gt;
&lt;br /&gt;
Ant that's all, we can now change parameters of files or compile the code to do a test (part 6) or eat a beautiful tartiflette (can be also do during compilation).&lt;br /&gt;
&lt;br /&gt;
= 3. General parameters =&lt;br /&gt;
&lt;br /&gt;
== A) Mesh grid &amp;amp;amp; resolution ==&lt;br /&gt;
&lt;br /&gt;
On run_icosa.def:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nbp --&amp;amp;gt; number of subdivision on a main triangle: integer (default=40)&lt;br /&gt;
        nbp = sqrt((nbr_lat x nbr_lon)/10)&lt;br /&gt;
        nbp                 20  40  80 160&lt;br /&gt;
        T-edge length (km) 500 250 120  60&lt;br /&gt;
        Example: nbp(128x96)=35 -&amp;amp;gt; 40&lt;br /&gt;
                 nbp(256x192)=70 -&amp;amp;gt; 80&lt;br /&gt;
                 nbp(360x720)=160 -&amp;amp;gt; 160&lt;br /&gt;
nsplit_i, nsplit_j --&amp;amp;gt; sub splitting of main rhombus: integer&lt;br /&gt;
                        Example: for nbp=80, nsplit_i=4,nsplit_j=6&lt;br /&gt;
                        nbp/nsplit_{i,j} = 20 &amp;amp;gt; 10 &amp;amp;amp; 13 &amp;amp;gt; 10 --&amp;amp;gt; GOOD&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== - Remapping ===&lt;br /&gt;
&lt;br /&gt;
Pour le remapping, il faut aller dans context_lmdz_physics.xml changer les paramètres ni_glo et nj_glo par exemple pour remapper sur du lat/lon à 360 pts en latitude et 720 pts en longitude (0.5°).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;domain id=&amp;amp;quot;dom_regular&amp;amp;quot; ni_glo=&amp;amp;quot;720&amp;amp;quot; nj_glo=&amp;amp;quot;360&amp;amp;quot; type=&amp;amp;quot;rectilinear&amp;amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== B) Time ==&lt;br /&gt;
&lt;br /&gt;
* ndays is number of days to simulate.&lt;br /&gt;
* day_step is number of dynamical time step per day&lt;br /&gt;
* Dynamics called every day_length(in s) / day_step per day&lt;br /&gt;
* 1 ts (physical timestep) = (day_length(in s)/day_step) x itau_physics&lt;br /&gt;
* Physics called (day_step / itau_physics) per day&lt;br /&gt;
* Physics called day_length(in s) / ts per day&lt;br /&gt;
* Radiative called every Physics x iradia physical timestep&lt;br /&gt;
* Radiative called every iradia/Physics days&lt;br /&gt;
&lt;br /&gt;
== C) Sponge layer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;iflag_sponge=0 for no sponge (default)&lt;br /&gt;
iflag_sponge=1 for sponge over 4 topmost layers&lt;br /&gt;
iflag_sponge=2 for sponge from top to ~1% of top layer pressure&lt;br /&gt;
mode_sponge=1 for u,v --&amp;amp;gt; 0&lt;br /&gt;
mode_sponge=2 for u,v --&amp;amp;gt; zonal mean&lt;br /&gt;
mode_sponge=3 for u,v,h --&amp;amp;gt; zonal mean&lt;br /&gt;
tau_sponge --&amp;amp;gt; damping frequency at last layer&lt;br /&gt;
           --&amp;amp;gt; e-5 medium / e-4 strong yet reasonable / e-3 very strong&amp;lt;/pre&amp;gt;&lt;br /&gt;
Spiga et al (2020): Shaw and Shepherd (2007) showed that the inclusion of sponge-layer parameterizations that do not conserve angular momentum (which is the case for Rayleigh drag), or allow for momentum to escape to space, implies a sensitivity of the dynamical results (especially zonal wind speed) to the choice for model top or drag characteristic timescale, because of spurious downward influence when momentum conservation is violated.&lt;br /&gt;
&lt;br /&gt;
Il ne faut donc pas ajouter de sponge layer pour les planètes géantes (iflag_sponge = 0)&lt;br /&gt;
&lt;br /&gt;
== D) Dissipation ==&lt;br /&gt;
&lt;br /&gt;
Spiga et al (2020): A subgrid-scale dissipation term is included in our Saturn DYNAMICO GCM to prevent the accumulation of energy at scales close to the grid resolution, caused by the GCM not resolving the turbulent scales at which this energy is dissipated. This hyperviscosity term is written in our Saturn DYNAMICO model as an iterated Laplacian term on a given variable. The three variables denoted are vorticity, divergence, and potential temperature, chosen to set horizontal dissipation on respectively the rotational component of the flow (e.g. Rossby waves), the divergent component of the flow (e.g. gravity waves), and the diabatic perturbations (e.g. coming from the physical packages).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tau_graddiv --&amp;amp;gt; dissipation timescale of smallest wvl: u,v (gradiv) : real (default=5000)&lt;br /&gt;
tau_gradrot --&amp;amp;gt; dissipation timescale of smallest wvl: u,v (nxgradrot) : real (default=5000)&lt;br /&gt;
tau_divgrad --&amp;amp;gt; dissipation timescale of smallest wvl: h (divgrad) : real (default=5000)&lt;br /&gt;
nitergdiv --&amp;amp;gt; number of iterations for gradiv operator : integer (default=1)&lt;br /&gt;
nitergrot --&amp;amp;gt; number of iterations for nxgradrot operator : integer (default=1)&lt;br /&gt;
niterdivgrad --&amp;amp;gt; number of iterations for divgrad operator : integer (default=1)&amp;lt;/pre&amp;gt;&lt;br /&gt;
tau_graddiv,tau_gradrot,tau_divgrad correspondent au temps de dissipation (plus c'est petit, plus la dissipation est efficace). nitergdiv,nitergrot,niterdivgrad correspondent à l'ordre du laplacien (plus c'est grand, plus on dissipe sélectivement les petites échelles).&lt;br /&gt;
&lt;br /&gt;
Attention, Trop dissiper -&amp;amp;gt; instabilité numérique&lt;br /&gt;
&lt;br /&gt;
Pas assez dissiper -&amp;amp;gt; instabilité dynamique trop forte&lt;br /&gt;
&lt;br /&gt;
L'ordre du laplacien dans les fichiers .def est suffisant. S'il faut changer la dissipation, il vaut mieux changer les temps de dissipation que l'ordre du laplacien (risque d'instabilité numérique).&lt;br /&gt;
&lt;br /&gt;
=== - Facteurs de dissipation ===&lt;br /&gt;
&lt;br /&gt;
A partir de ces valeurs de temps de dissipation, il est également possible d'ajouter 2 facteurs de dissipation (fac_mid et fac_up) qui permettent d'augmenter la dissipation à partir de certains niveaux. Le fac_mid permet de diminuer le temps de dissipation d'un facteur sur toute l'atmosphère jusqu'au bottom. Il y a une zone transition de quelques niveaux entre le bottom (le temp de dissipation au bottom est sans facteur) et quelques niveaux au-dessus où la valeur du temps de dissipation est avec ce facteur jusqu'au top. On ne peut donc pas choisir l'altitude et la zone de transition avec ce facteur. Quant au fac_up, il permet de diminuer le temps de dissipation d'un facteur à partir d'une altitude et d'une épaisseur de zone de transition qu'on peut choisir. On peut utiliser la combinaison des 2 ou l'un des 2. Pour ne pas prendre en compte ces facteurs de dissipation, il faut qu'il soit mis à 1.&lt;br /&gt;
&lt;br /&gt;
Il existe 2 modes possibles pour le fac_up: le mode martien (en fonction de l'altitude) et le mode vénusien (en fonction de la pression). Dans le 1er cas, il faut renseigner l'altitude où démarre la zone de transition et l'épaisseur de cette zone. Dans le 2ème cas, il faut renseigner la pression où démarre la zone de transition et l'échelle de hauteur de cette zone de transition.&lt;br /&gt;
&lt;br /&gt;
Il est vivement conseillé de tracer votre profil de dissipation à partir des équations (dans vert_prof_dissip_icosa_lmdz.f90) afin d'être certain de leur allure.&lt;br /&gt;
&lt;br /&gt;
== E) Rayleigh Friction ==&lt;br /&gt;
&lt;br /&gt;
Spiga et al 2020: This drag plays the role devoted to surface friction on terrestrial planets, which allows to close the angular momentum budget through downward control (Haynes and McIntyre, 1987; Haynes et al., 1991). This could also be regarded as a zeroth-order parameterization for Magneto-HydroDynamic (MHD) drag as a result of Lorenz forces acting on jet streams putatively extending to the depths of Saturn's interior (Liu et al., 2008; Galanti et al., 2019), much deeper than the shallow GCM's model bottom.&lt;br /&gt;
&lt;br /&gt;
Comme Liu and Schneider (2010), cette couche de frottement ne s'exerce pas aux régions équatoriales car à l’extérieur du cylindre tangeant du rayon équatorial, les cylindres convectifs ne coupent pas cette couche et ne subissent pas les frottements liés aux effets de la MHD.&lt;br /&gt;
&lt;br /&gt;
Le paramètre rayleigh_limlat correspond à la latitude maximale de part et d'autre de l'équateur où cette friction n'est pas observée.&lt;br /&gt;
&lt;br /&gt;
Pour le temps (rayleigh_friction_tau), il est similaire à celui utilisé par Liu and Schneider (2010). Elle est fixée à 100 jours terrestres. Mais attention, on fonction de la valeur, la dynamique peut évoluer dans votre simulation.&lt;br /&gt;
&lt;br /&gt;
== F) Conservation ==&lt;br /&gt;
&lt;br /&gt;
Dans run_icosa.def:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;check_conservation = detailed &lt;br /&gt;
itau_check_conserv = 320&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le itau_check_conserv est comme itau_physics pour que la contribution de la physique à AAM ne soit pas nulle. de plus il est coûteux d'appeler les diagnostics trop souvent.&lt;br /&gt;
&lt;br /&gt;
S. Lebonnois, C. Covey, A. Grossman, H. Parish, G. Schubert, R. Walterscheid, P. Lauritzen, and C. Jablonowski. Angular momentum budget in General Circulation Models of superrotating atmospheres: A critical diagnostic. Journal of Geophysical Research (Planets), 117:E12004, 2012.&lt;br /&gt;
&lt;br /&gt;
P. H. Lauritzen, J. T. Bacmeister, T. Dubos, S. Lebonnois, and M. A. Taylor. Held-Suarez simulations with the Community Atmosphere Model Spectral Element (CAM-SE) dynamical core: A global axial angular momentum analysis using Eulerian and floating Lagrangian vertical coordinates. Journal of Advances in Modeling Earth Systems, 6:129-140, 2014.&lt;br /&gt;
&lt;br /&gt;
== G) Traceur ==&lt;br /&gt;
&lt;br /&gt;
=== - Branche master version du 04/04/2022 dans le dossier Jupiter (traceur) ===&lt;br /&gt;
&lt;br /&gt;
La version actuelle des fichiers de réglage dans le dossier Jupiter est réglée pour utiliser des traceurs. Si vous souhaiter utiliser le modèle sans traceur, il vous faut modifier les fichiers suivants :&lt;br /&gt;
&lt;br /&gt;
run_icosa.def&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;        nqtot = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
traceur.def&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;        0&amp;lt;/pre&amp;gt;&lt;br /&gt;
context_dynamico.xml (ligne 125)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;         &amp;amp;lt;field id=&amp;amp;quot;q_start&amp;amp;quot; name=&amp;amp;quot;q&amp;amp;quot;  grid_ref=&amp;amp;quot;grid_q_start&amp;amp;quot; prec=&amp;amp;quot;8&amp;amp;quot;/&amp;amp;gt;   &amp;lt;/pre&amp;gt;&lt;br /&gt;
== H) Bottom du modèle ==&lt;br /&gt;
&lt;br /&gt;
* refaire tourner le 1D&lt;br /&gt;
** changer la pression &amp;lt;code&amp;gt;psurf&amp;lt;/code&amp;gt; dans rcm1d.def&lt;br /&gt;
** changer &amp;lt;code&amp;gt;ichoice=1&amp;lt;/code&amp;gt; et changer &amp;lt;code&amp;gt;tref&amp;lt;/code&amp;gt; (ex: 10b: 330K)&lt;br /&gt;
* refaire tourner le 3D (avec makestart) en changeant &amp;lt;code&amp;gt;preff&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;[nom_de_la_planète]_const.def&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 4. Physical parameterizations =&lt;br /&gt;
&lt;br /&gt;
== A) Cycle diurne ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;diurnal = .false.&amp;lt;/code&amp;gt; Car le temps radiatif est beaucoup plus long sur les planètes géantes.&lt;br /&gt;
&lt;br /&gt;
== B) Anneaux ==&lt;br /&gt;
&lt;br /&gt;
[Pour saturne uniquement] Il est possible d'ajouter l'ombre des anneaux dans le callphys.def:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rings_shadow = .true.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== C) Collision-induced absorption data ==&lt;br /&gt;
&lt;br /&gt;
L'absorption induite par collision est importante dans le transfet radiatif sur les planètes géantes, notamment celle provenant de H2. Cependant, le rapport ortho-para du H2 est différent selon les planètes et peut modifier fortement le chauffage sur ces planètes. Pour le cas des géantes gazeuses, le rapport ortho-para est normal (rapport 3:1). Mais pour le cas des géantes glacées, le rapport ortho-para est à l'équilibre. Par défaut, le rapport ortho-para est normal (H2orthopara_mixture = normal). Pour les géantes glacées, il faut mettre H2orthopara_mixture = equilibrium .&lt;br /&gt;
&lt;br /&gt;
Si vous voulez modifier le fichier utilisé dans un cas de CIA, il faut aller dans le code (dynamico-giant/code/LMDZ.GENERIC/libf/phystd/interpolate????.F90) et changer le nom du fichier (assurez-vous que ce fichier soit dans votre répertoire DATAGENERIC/continuum_data).&lt;br /&gt;
&lt;br /&gt;
Dans la version actuelle, il n'existe pas d'option qui permet de ne pas utiliser certaines contributions de CIA. Par exemple, si votre atmosphère est composé de H2, He et CH4 et que vous ne voulez pas des contributions venant du CH4, il vous faut commenter dans le modèle ces contributions.&lt;br /&gt;
&lt;br /&gt;
== D) K-correlated data ==&lt;br /&gt;
&lt;br /&gt;
Les fichiers k-corrélées doivent se situer dans votre répertoire DATAGENERIC/corrk_data .&lt;br /&gt;
&lt;br /&gt;
== E) Cpp mode ==&lt;br /&gt;
&lt;br /&gt;
cpp_mugaz_mode=0 pour que la valeur de cpp et de mugaz proviennent de la dynamique. cpp_mugaz_mode=1 pour forcer la valeur de cpp et de mugaz dans le callphys.def (à utiliser dans le makestart uniquement) cpp_mugaz_mode=2 pour calculer automatiquement à partir de données de références à 300 K et du gases.def (à éviter)&lt;br /&gt;
&lt;br /&gt;
== F) Generic n-layer aerosols (replaces the former 2-layer and NH3 cloud) ==&lt;br /&gt;
&lt;br /&gt;
Ce mode permet de créer des couches d'aérosols/nuages ayant une opacité (aeronlay_tauref) à une longueur d'onde donnée (aeronlay_lamref), un rayon de particule fixe (aeronlay_size) situés à une pression fixe et en fonction des propriétés optiques des particules (optprop_aeronlay_vis et optprop_aeronlay_ir). Pour le cas de l'altitude, on peut choisir soit (aeronlay_choice = 1) une pression max (aeronlay_ptop) et une pression min (aeronlay_pbot), soit (aeronlay_choice = 2) une pression min (aeronlay_pbot) et une échelle de hauteur (aeronlay_sclhght). On peut également choisir la variance effective pour les rayons de particules.&lt;br /&gt;
&lt;br /&gt;
Le nombre de couche de nuage (nlayero) est égal au nombre de scatterers dans la compilation (option -s ).&lt;br /&gt;
&lt;br /&gt;
Les fichiers de propriétés optiques doivent être dans votre DATAGENERIC.&lt;br /&gt;
&lt;br /&gt;
Un exemple pour 3 couches:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;aeronlay = .true.&lt;br /&gt;
nlayaero = 3&lt;br /&gt;
aeronlay_tauref       = 2.5 0.04 0.1&lt;br /&gt;
aeronlay_lamref       = 0.8e-6 0.8e-6 0.16e-6&lt;br /&gt;
aeronlay_choice       = 2 2 1&lt;br /&gt;
aeronlay_pbot         = 1.5e5 1.6e5 20.&lt;br /&gt;
aeronlay_ptop         = 1.1e5 1. 1.&lt;br /&gt;
aeronlay_sclhght      = 0.1 2.0 1&lt;br /&gt;
aeronlay_size         = 0.5e-6 0.05e-6 0.5e-6&lt;br /&gt;
aeronlay_nueff        = 0.3 0.3 0.3&lt;br /&gt;
optprop_aeronlay_vis  = optprop_aerosol2_vis.dat optprop_aerosol3_vis.dat optprop_carbon4_vis.dat&lt;br /&gt;
optprop_aeronlay_ir   = optprop_aerosol2_ir.dat optprop_aerosol3_ir.dat optprop_carbon4_ir.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
== G) Panaches thermiques ==&lt;br /&gt;
&lt;br /&gt;
# Comme pour toutes nouvelles simulations, il faut commencer par un run 1D de plusieurs décennies permettant d'obtenir un profil de température (&amp;lt;code&amp;gt;temp_profile.txt&amp;lt;/code&amp;gt;) et les coefficients ap et bp (&amp;lt;code&amp;gt;apbp.txt&amp;lt;/code&amp;gt;) en équilibre radiatif-convectif pour la planète que l'on étudie. Ce run 1D s'effectue dans les dossiers jupiter1d, saturn1d, neptune1d et/ou uranus1d, avec ces options pour le callphys.def :&lt;br /&gt;
&lt;br /&gt;
callrad = true calladj = true tous les autres mots clés à false (y compris &amp;lt;code&amp;gt;calltherm&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Faire un &amp;amp;quot;makestart&amp;amp;quot; run : permet d'obtenir les fichiers restart à partir du profil de température initial. Il s'agit du run dont l'état initial est le profil de température créé par run 1D (&amp;lt;code&amp;gt;temp_profile.txt&amp;lt;/code&amp;gt; est appliquer à chaque point de grille horizontale du modèle). L'état initial est ainsi une planète isotherme horizontalement mais qui varie verticalement. Pour ce run, aucun traceur ne va être utilisé dans le modèle. Néanmoins, il faut renseigner au modèle le nombre de traceurs que nous souhaitons utiliser avec le schéma des panaches thermiques afin qu'il puisse créer la dimension nq et le champ q dans les fichiers &amp;lt;code&amp;gt;restart_icosa.nc&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;restartfi.nc&amp;lt;/code&amp;gt;. dans '''callphys.def''' :&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;          traceur = true&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;dans '''run_icosa.def''' : &amp;lt;code&amp;gt;nqtot = 2&amp;lt;/code&amp;gt; (par exemple, h2o_vap et h2o_ice) dans '''traceur.def''' :&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;           2&lt;br /&gt;
           h2o_vap&lt;br /&gt;
           h2o_ice&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Ajout des quantités pour chaque traceur. Ici, nous ajoutons les profils pour chacun des traceurs dans les fichiers &amp;lt;code&amp;gt;restart_icosa.nc&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;restartfi.nc&amp;lt;/code&amp;gt; &amp;amp;quot;à la main&amp;amp;quot; en utilisant le programme python &amp;lt;code&amp;gt;/processing_codes/tracer_settings.py&amp;lt;/code&amp;gt; pour obtenir des fichiers restart avec la bonne abondance d'eau dans le cas présent.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commencer la simulation : Il ne reste plus qu'à lancer la simulation 3D avec les nouveaux fichiers restart et les réglages suivant : dans '''callphys.def''' :&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;            traceur = true&lt;br /&gt;
            calltherm = true&lt;br /&gt;
            # thermal plume model options:&lt;br /&gt;
            divmpl = true&lt;br /&gt;
            r_aspect_thermals = 2.0&lt;br /&gt;
            tau_thermals      = 0.0&lt;br /&gt;
            betalpha          = 0.9&lt;br /&gt;
            afact             = 0.7&lt;br /&gt;
            fact_epsilon      = 2.e-4&lt;br /&gt;
            alpha_max         = 0.7&lt;br /&gt;
            fomass_max        = 0.5&lt;br /&gt;
            pres_limit        = 2.e5&lt;br /&gt;
            water             = true&lt;br /&gt;
            watercond         = true&lt;br /&gt;
            waterain          = true&lt;br /&gt;
            evap_prec         = true&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dans '''run_icosa.def''' : &amp;lt;code&amp;gt;nqtot = 2&amp;lt;/code&amp;gt; dans '''traceur.def''' :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;               2&lt;br /&gt;
               h2o_vap&lt;br /&gt;
               h2o_ice&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, ajouter la déclaration et l'écriture des variables relatives à l'utilisation du schéma des thermiques (&amp;lt;code&amp;gt;h2o_vap&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2o_ice&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;w_plm&amp;lt;/code&amp;gt;) dans les fichiers XML de la physique.&lt;br /&gt;
&lt;br /&gt;
== H) Rotation ==&lt;br /&gt;
&lt;br /&gt;
Dans [name_of_planet]_const.def, changer le taux de rotation.&lt;br /&gt;
&lt;br /&gt;
Cela n'a jamais été testé avec 0, mais cela pourrait créer des problèmes (ex: beta). ''vérifier que omega dans saturn_const.def n'intervient pas dans la physique LMDZ.GENERIC/libf/phystd/''&lt;br /&gt;
&lt;br /&gt;
== I) Appel à la physique ==&lt;br /&gt;
&lt;br /&gt;
Il faut changer à ''deux endroits'' en réglant la même valeur: - dans run_icosa.def, changer itau_physics ; - dans run.def, changer iphysiq. Ces paramètres sont exprimés en pas de temps dynamique. Pour appeler la physique à chaque pas de temps dynamique, régler ces paramètres à 1.&lt;br /&gt;
&lt;br /&gt;
'''Attention: ''' Lorsque l'on change dans le ''run_icosa.def'' la valeur de itau_physics, faire bien attention à la valeur du champ itau_adv (qui controle la frequence d'advection des traceurs par la dynamique, compté en pas de temps dynamique). Il faut que itau_physics soit un multiple de itau_adv. Cela veut dire, que l'on advecte notre champ de traceurs plus souvent (ou autant de fois) que l'on appelle la physique, qui peut transformer ces traceurs.&lt;br /&gt;
&lt;br /&gt;
= 5. Ecriture des fichiers =&lt;br /&gt;
&lt;br /&gt;
== A) Nombre d'écriture dans chaque Xhistins.nc ==&lt;br /&gt;
&lt;br /&gt;
Prenons l'exemple de l'écriture d'un fichier sur une simu Uranus pour 1000j&lt;br /&gt;
&lt;br /&gt;
Nombre d'écriture = day_step X ndays/(itau_physics X output_freq)&lt;br /&gt;
&lt;br /&gt;
* ndays = 1000&lt;br /&gt;
* day_step = 200&lt;br /&gt;
* itau_physics = 50&lt;br /&gt;
* output_freq = 200&lt;br /&gt;
&lt;br /&gt;
On a 20 sorties tous les 1000 jours.&lt;br /&gt;
&lt;br /&gt;
Globalement, il est conseillé d'avoir 800 à 1000 sorties minimum par année planétaire (voir beaucoup plus en fonction de votre étude).&lt;br /&gt;
&lt;br /&gt;
== B) Ajouter une variable ==&lt;br /&gt;
&lt;br /&gt;
Pour ajouter une variable dans le fichier de sortie Xhistins.nc, il faut l'ajouter dans le field_group correspondant et s'assurer que cette variable est présente en tant que variable de sortie dans dynamico-giant/code/LMDZ.GENERIC/libf/phystd/physiq_mod.F90. Si ce n'est pas le cas, il faut faire un call writediagfi de la variable puis l'ajouter dans un call send_xios_field.&lt;br /&gt;
&lt;br /&gt;
== C) Forcer XIOS à écrire tous les .... ==&lt;br /&gt;
&lt;br /&gt;
Il faut utiliser l'attribut (ici par ex pour forcer l'écriture tous les ts (==time step) ; d'autres délais doivent être possible): &amp;lt;code&amp;gt;sync_freq=&amp;amp;quot;1ts&amp;amp;quot;&amp;lt;/code&amp;gt; dans le &amp;lt;code&amp;gt;&amp;amp;lt;file id=... .... &amp;amp;gt;&amp;lt;/code&amp;gt; concerné.&lt;br /&gt;
&lt;br /&gt;
== D) XIOS server ou client ==&lt;br /&gt;
&lt;br /&gt;
# XIOS client &amp;lt;code&amp;gt;use_server=False&amp;lt;/code&amp;gt; Broadwell 24 processeurs sur 28&lt;br /&gt;
# XIOS server &amp;lt;code&amp;gt;use_server=true&amp;lt;/code&amp;gt; Broadwell 24 processurs sur 28 + 4 processeurs pour XIOS&lt;br /&gt;
&lt;br /&gt;
Le cas 1 est 3 min plus lent que le cas 2 -- sur 2h20...(!) parce qu'on fait peu de sorties.&lt;br /&gt;
&lt;br /&gt;
= 6. Running the model =&lt;br /&gt;
&lt;br /&gt;
== A) Compilation ==&lt;br /&gt;
&lt;br /&gt;
Pour compiler le modèle, il suffit d'aller dans le dossier avec vos fichiers .def et .xml et d'utiliser le script compile_occigen.sh si on est sur occigen ou compile_ciclad.sh si on est sur ciclad&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./compile_occigen.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les options qui peuvent être modifiées/ajoutées sont - -s : le nombre de scatterers - -parallel: mpi ou mpi_omp - -arch: le nom du ficher d'architecture - -arch_path: le chemin vers ce fichier - -job: 8 (conseillé) - -full: compile le code entièrement - -debug: pour trouver un éventuel bug. A ENLEVER obligatoirement s'il n'y a plus de bug car multiplie par 5 votre temp de calcul.&lt;br /&gt;
&lt;br /&gt;
En 1D, d'autres options sont nécessaires: - -t: nombre de traceurs - -d: nombre de niveaux verticaux - -parallel: none (en 1D uniquement)&lt;br /&gt;
&lt;br /&gt;
=== - Versions fonctionnelles de dynamico-giant ===&lt;br /&gt;
&lt;br /&gt;
'''Jupiter''' - XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
- ICOSAGCM revision 756&amp;lt;br /&amp;gt;&lt;br /&gt;
- IOIPSL revision 339&amp;lt;br /&amp;gt;&lt;br /&gt;
- FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2228 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
but check Physics version 2142 and 2180&lt;br /&gt;
&lt;br /&gt;
'''Saturne (référence Spiga 2020, à vérifier)''' - DYNAMICO --&amp;amp;gt; Revision: 756 - PHYSICS --&amp;amp;gt; Revision: 2005 - XIOS --&amp;amp;gt; Revision: 1583 - IOIPSL --&amp;amp;gt; Revision: 310?&lt;br /&gt;
&lt;br /&gt;
'''Saturne (simulation de référence sur 61 niveaux, Bardet et al. Icarus 2021)''' - XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
- ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
- IOIPSL revision 310&amp;lt;br /&amp;gt;&lt;br /&gt;
- FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2005 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
'''Saturne (simulation avec la GWD paramétrisation sur 61 niveaux, chapitre 6 PhD Bardet)''' - XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
- ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
- IOIPSL revision 310&amp;lt;br /&amp;gt;&lt;br /&gt;
- FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2213 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
'''Saturne (simulation sur 96 niveaux, Bardet et al. Nature Astronomy 2022)''' - XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
- ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
- IOIPSL revision 431&amp;lt;br /&amp;gt;&lt;br /&gt;
- FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2305 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
'''Saturne (simulation avec la GWD paramétrisation sur 96 niveaux, chapitre 6 PhD Bardet)''' - XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
- ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
- IOIPSL revision 431&amp;lt;br /&amp;gt;&lt;br /&gt;
- FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2403 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
'''Uranus &amp;amp;amp; Neptune (old version)''' - XIOS revision 1944 - ICOSAGCM revision 765 - IOIPSL revision 431 - FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2413 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
'''Uranus &amp;amp;amp; Neptune (new version)''' - XIOS revision 2203 - ICOSAGCM revision (20/08/2021) - IOIPSL revision 450 - FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2555 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
'''Jupiter, Saturne, Uranus &amp;amp;amp; Neptune [OCCIGEN VERSION]''' - XIOS revision 2319 - ICOSAGCM revision (90f7138a60ebd3644fbbc42bc9dfa22923386385) - IOIPSL revision 453 - FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2655 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
'''Jupiter, Saturne, Uranus &amp;amp;amp; Neptune [IRENE VERSION]''' - XIOS revision 2399 - ICOSAGCM revision (4fbd393a9051fd9c1a5b662683f6ad8d0dc2867c) - IOIPSL revision 6234 - FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2842 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
== B) Run 1D ==&lt;br /&gt;
&lt;br /&gt;
Pour une simulation 1D, 1 seul CPU suffit.&lt;br /&gt;
&lt;br /&gt;
To run on Occigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbatch job_mpi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run on Irene:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccc_msub job_mpi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see evolution of your job on Occigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;squeue -u username&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see evolution of your job on Irene:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccc_mpp -u username&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To kill your job on Occigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scancel id_of_your_job&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To kill your job on Irene:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccc_mdel id_of_your_job&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois que votre simulation est fini, lancer le script python printapbp.py qui vous permettra d'obtenir les fichiers apbp.txt et temp_profile.txt nécessaires pour les simulations en 3D.&lt;br /&gt;
&lt;br /&gt;
== C) Run 3D ==&lt;br /&gt;
&lt;br /&gt;
Pour lancer une première simulation, il faut tout d'abord le faire une seule fois dans le dossier makestart de l'un des dossiers jupiter, saturne, uranus ou neptune. Ce dernier permettra de créer les premiers fichiers restart_icosa.nc et restartfi.nc. Ensuite, il suffit revenir dans le dossier parent (jupiter, saturne, uranus, neptune) et de lancer ses simulations.&lt;br /&gt;
&lt;br /&gt;
=== - MPI ===&lt;br /&gt;
&lt;br /&gt;
Avant de lancer une simulation, il est nécessaire de déterminer - le nombre de procs - le nombre de noeuds&lt;br /&gt;
&lt;br /&gt;
Il faut avant tout savoir qu'il y a 10 x nsplit_i x nsplit_j domaines. Ces domaines sont divisés en plusieurs cellules. Il y a (nbp)²/(nsplit_i x nsplit_j) cellules par domaine. Ce nombre est égal au nombre de MPI process.&lt;br /&gt;
&lt;br /&gt;
Il est important de ne pas faire des tuiles &amp;amp;quot;trop petites&amp;amp;quot; et donc de garder nsplit_i et nsplit_j tels que nbp/nsplit_{i,j} &amp;amp;gt;=10-15 (plutôt 15). Car il y a des calculs &amp;amp;quot;redondants&amp;amp;quot; faits sur les bords du domaine. Admettons que ton domaine soit 10 x 10 (100 cellules par domaine). Le nombre de cellules au bord du domaine est égal à 2 x nsplit_i + 2 x nsplit_j - 4. Dans ce cas, le nombre de cellules au bord est de 36. Cela signifie que le bord du domaine correspond à 36% du domaine (36 points sur 100). Si le domaine est 15 x 15, alors le bord du domaine n'est plus que de 24.8 %. On aimerait avoir des domaines les plus grands possibles mais il faut aussi voir que chaque cellule correspond à une colonne à résoudre... Et c'est là ou il faut expérimenter un peu pour trouver l'optimum entre le nombre total de proc à employer et le gain effectif (temps total &amp;amp;quot;facturé&amp;amp;quot; au vu du nombre de procs monopolisés pour une simu donnée). Ehouarn&lt;br /&gt;
&lt;br /&gt;
Il faut au total que le nombre de procs soit égal à 10 x nsplit_i x nsplit_j qu'il faut répartir entre les noeuds.&lt;br /&gt;
&lt;br /&gt;
Pour les noeuds, il faut tenir compte qu'un noeud sur Occigen, c'est 24 (ou 28) procs. Disons 24. Quand on demande N procs, le système te donne M noeuds, soit M X 24 procs (les noeuds ne sont pas partagés avec d'autres applications). Et bien sûr on te facturera ces M noeuds, même si tu n'utilises pas tous les procs. Donc il faut s'efforcer de tomber juste et demander un multiple de 24 procs. Même raisonement si tu demandes à utiliser des noeuds de 28 procs.&lt;br /&gt;
&lt;br /&gt;
Par exemple, nsplit_i = 4 et nsplit_j = 6. 4 x 6 est égal à 24. On utilisera donc 10 noeuds pour avoir 240 nprocs.&lt;br /&gt;
&lt;br /&gt;
Prenons un autre exemple. nsplit_i = 5 et nsplit_j = 6. 5x6 = 30 Or il y a 24 procs par noeuds. Il faudra utiliser 13 noeuds. Et ce ne sont pas 300 procs qui seront facturés au total mais 312.&lt;br /&gt;
&lt;br /&gt;
Mais comme vu plus haut, en fonction de la configuration de tes domaines, il est possible que le 2nd exemple coûte moins cher en heure CPU que le 1er exemple car il sera plus rapide.&lt;br /&gt;
&lt;br /&gt;
=== - OpenMP / MPI ===&lt;br /&gt;
&lt;br /&gt;
Dans le cas mixte OpenMP/MPI, il est nécessaire de renseigner le nombre de tâche OpenMP et de MPI threads. Dans le script pour le job, on a :&lt;br /&gt;
&lt;br /&gt;
cpus-per-task et OMP_NUM_THREADS correspondent au nombre de tâche OpenMP ntask-per-node correspond au nombre de tâche par noeud&lt;br /&gt;
&lt;br /&gt;
Pour déterminer la configuration à utiliser en OpenMP/MPI, il faut respecter ces règles: - ntask-per-node x nodes correspond au nombre total de MPI threads qu'il devrait y avoir (c'est-à-dire dans le cas MPI seul). - cpus-per-task x ntask-per-node doit être égale ou inférieur au nombre de procs par noeuds (24 ou 28- sur Occigen) - cpus-per-task devrait être ~égal au nombre de niveaux verticaux / 10 - OMP_NUM_THREADS doit être égal au cpus-per-task - omp_level_size (dans le fichier run_icosa.def) devrait être ~égal au nombre de cpus-per-task. (dans le cas MPI seul, il faut le laisser égal à 1)&lt;br /&gt;
&lt;br /&gt;
Au total, le nombre total de nprocs est égal à cpus-per-task x ntask-per-node x nodes&lt;br /&gt;
&lt;br /&gt;
En reprenant le premier exemple MPI (on suppose qu'on a 40 niveaux verticaux), on aura - cpus-per-task = 4 - ntask-per-norde = 6 On a bien cpus-per-task x ntask-per-norde &amp;amp;lt;= 24. Le nombre de noeuds doit être égal à 40 car 6x40 = 240 nprocs MPI Le nombre de procs qu'on utilisera au total sera de 960.&lt;br /&gt;
&lt;br /&gt;
=== - Comment déterminer le nombre d'heure CPU (consommation en heure)? ===&lt;br /&gt;
&lt;br /&gt;
Heures CPU = durée_de_la_simu X nombre de procs total facturé&lt;br /&gt;
&lt;br /&gt;
Si on veut connaître le nombre d'heure CPU qu'on consommera à partir d'un test, voici le calcul&lt;br /&gt;
&lt;br /&gt;
Heures CPU = durée_de_la_simu_test X nombre de procs total facturé X nombre de jour qu'on veut simulé / (nombre de jour simulées pendant la simu test)&lt;br /&gt;
&lt;br /&gt;
== D) Optimisation ==&lt;br /&gt;
&lt;br /&gt;
Pour savoir quelle est la meilleure configuration en MPI seul, en OpenMP/MPI et entre les 2, des tests ont été effectués. Ces tests ont été réalisés sur Uranus à nbp80 sur les noeuds Broadwell (28 procs par noeud). 1000 jours uraniens ont été simulés à chaque fois.&lt;br /&gt;
&lt;br /&gt;
'''MPI:''' [[File:fig1.png]]&lt;br /&gt;
&lt;br /&gt;
'''OpenMP/MPI:''' [[File:fig2.png]]&lt;br /&gt;
&lt;br /&gt;
La comparaison du MPI seul et du mixte OpenMP/MPI permet de tirer la conclusion que le mixte OpenMP/MPI est beaucoup plus rapide (facteur 2.5 à 3) mais consomme plus (facteur 1.1 à 1.7).&lt;br /&gt;
&lt;br /&gt;
[[File:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
== E) Visualizing the output files ==&lt;br /&gt;
&lt;br /&gt;
=== - Comment comparer deux fichiers? file1.nc file2.nc ===&lt;br /&gt;
&lt;br /&gt;
ncdiff file1.nc file2.nc output.nc&lt;br /&gt;
&lt;br /&gt;
=== - Comment coller plusieurs fichiers file1.nc file2.nc file3.nc ===&lt;br /&gt;
&lt;br /&gt;
ncrcat file1.nc file2.nc file3.nc output.nc&lt;br /&gt;
&lt;br /&gt;
Avec juste la vitesse u et v: ncrcat -v u -v v file1.nc file2.nc file3.nc output.nc&lt;br /&gt;
&lt;br /&gt;
Avec tous les fichiers fileXXX.nc disponibles ncrcat file*.nc output.nc&lt;br /&gt;
&lt;br /&gt;
=== - Comment tracer les champs et divers diagnostics en moyenne zonale? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;mettre à jour planetoplot et planets&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;utiliser precast.py dans planetoplot/examples/ppclass_additional/dynanalysis&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;changer les options au début (il y a des exemples), exemple pour Saturne&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;fileAP=&amp;quot;Xhistins_42.nc&amp;quot;&lt;br /&gt;
p_upper,p_lower,nlev = 4.0e2,2.5e5,40&lt;br /&gt;
targetp1d = np.logspace(np.log10(p_lower),np.log10(p_upper),nlev)&lt;br /&gt;
myp = planets.Saturn&lt;br /&gt;
day_per_year = 24430.&lt;br /&gt;
short = False&lt;br /&gt;
includels = False&lt;br /&gt;
charx = &amp;quot;0,360&amp;quot;&lt;br /&gt;
ispressure = False&lt;br /&gt;
vartemp = &amp;quot;temperature&amp;quot;&lt;br /&gt;
outfile = &amp;quot;precast.nc&amp;quot;&lt;br /&gt;
nopole = True&amp;lt;/source&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Il faut que apbp.txt soit présent !&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Le résultat se trouve dans le fichier indiqué dans outfile.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== F) Debug ==&lt;br /&gt;
&lt;br /&gt;
=== - Pour debugger ===&lt;br /&gt;
&lt;br /&gt;
Réglez &amp;lt;code&amp;gt;info_level&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; dans le fichier &amp;lt;code&amp;gt;iodef.xml&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
=== - Erreur en début de run, SEGMENTATION FAULT dans la routine &amp;lt;code&amp;gt;advect.f90&amp;lt;/code&amp;gt; (ICOSAGCM/ppsrc/transport) au niveau de l'appel à &amp;lt;code&amp;gt;cross_product2&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
La routine &amp;lt;code&amp;gt;cross_product2&amp;lt;/code&amp;gt; effectue des produits vectoriels. Cette erreur vient du fait qu'en essayant de faire des optimisations de calcul, le compilateur se prend &amp;amp;quot;les pieds dans le tapis&amp;amp;quot; et ne sait plus faire le produit vectoriel. Pour empêcher le compilateur de faire des optimisations trop poussées, il faut ajouter l'option &amp;lt;code&amp;gt;-fp-model strict&amp;lt;/code&amp;gt; au niveau du mot-clé &amp;lt;code&amp;gt;%BASE_FFLAGS&amp;lt;/code&amp;gt; dans tous les fichiers &amp;lt;code&amp;gt;.fcm&amp;lt;/code&amp;gt; du modèle (LMDZ.COMMON / ICOSAGCM / ICOSA_LMDZ).&lt;br /&gt;
&lt;br /&gt;
== G) Pas de radiatif et perturbations ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;faire descendre le modèle&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;modifier le code pour perturbations vitesse et pas température&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;compiler (voir README.md)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;changer dans callphys.def (dans saturn/makestart)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;surfalbedo = 1.0&lt;br /&gt;
surfemis = 0.0&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;changer dans callphys.def (dans saturn '''et''' saturn/makestart)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;corrk      = .false.&lt;br /&gt;
enertest  = .true.&lt;br /&gt;
randompert = 1&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;voir si on garde le flux interne ou non (&amp;lt;code&amp;gt;intheat&amp;lt;/code&amp;gt;)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;refaire les états initiaux (dans makestart)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;faire un run court pour voir sur les spectres l'injection d'Ek&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== H) PROFILING with DYNAMICO-Giant ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;-pg&amp;lt;/code&amp;gt;: Generate extra code to write profile information suitable for analysis program &amp;lt;code&amp;gt;gprof&amp;lt;/code&amp;gt;. You must use this option when compiling the sources files you want data about and you must '''also use it when linking'''. 1. For DYNAMICO-Giant: in the arch.fcm file of each part of the model (ICOSAGCM, ICOSA_LMDZ, LMDZ.COMMON and XIOS), you have to add the option &amp;lt;code&amp;gt;-pg&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;%PROD_FFLAGS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%BASE_LD&amp;lt;/code&amp;gt; 2. Compile as usual 3. Execute your code as usual 4. Run &amp;lt;code&amp;gt;gprof&amp;lt;/code&amp;gt; tool:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    gprof icosa_lmdz.exe goon.out &amp;amp;gt; analysis.txt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= OLD WIKI (DEPRECATED, JUST FOR REFERENCE/INFORMATION) =&lt;br /&gt;
&lt;br /&gt;
``Welcome to the dynamico-giant wiki!&lt;br /&gt;
&lt;br /&gt;
== pour debugger ==&lt;br /&gt;
&lt;br /&gt;
régler &amp;lt;code&amp;gt;info_level&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; dans le fichier &amp;lt;code&amp;gt;iodef.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== pourquoi diurnal=.false. ==&lt;br /&gt;
&lt;br /&gt;
le temps radiatif est beaucoup plus long sur les géantes&lt;br /&gt;
&lt;br /&gt;
== comment changer la fréquence d'appel à la physique? ==&lt;br /&gt;
&lt;br /&gt;
il faut changer à ''deux endroits'' en réglant la même valeur - dans run_icosa.def, changer itau_physics - dans run.def, changer iphysiq ces paramètres sont exprimés en pas de temps dynamique. pour appeler la physique à chaque pas de temps dynamique, régler ces paramètres à 1&lt;br /&gt;
&lt;br /&gt;
== comment changer la résolution ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/aymeric-spiga/dynamico-giant/commit/f39e3b651c19cefb26da72ab77933520ff8f27f5 voir lien ici]&lt;br /&gt;
&lt;br /&gt;
== comment choisir le nombre de processeurs pour la résolution ==&lt;br /&gt;
&lt;br /&gt;
voir commentaires sur run_icosa.def&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;###########################################&lt;br /&gt;
## There must be less MPIxOpenMP processes than the 10 x nsplit_i x nsplit_j tiles&lt;br /&gt;
## typically for pure MPI runs, let nproc = 10 x nsplit_i x nsplit_j&lt;br /&gt;
## it is better to have nbp/split &amp;amp;gt;~ 10&lt;br /&gt;
###########################################&lt;br /&gt;
#### 40 noeuds de 24 processeurs = 960 procs&lt;br /&gt;
nsplit_i=12&lt;br /&gt;
nsplit_j=8&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ehouarn: ''Une règle à suivre est de ne pas faire des tuiles &amp;amp;quot;trop petites&amp;amp;quot; et donc de garder nbsplit_i et nbsplit_j tels que nbp/nbsplit &amp;amp;gt;=10-15 (plutôt 15). Car il y a des calculs &amp;amp;quot;redondants&amp;amp;quot; faits sur les bords du domaine. Or si ton domaine est 10''10, le bord du domaine c'est 38% du domaine (38 points sur le bord pour 100 points en tout) alors que si ton domaine est 15''15, le bord du domaine n'est plus que 56/(15''15) = 25.7%. 56=2''15+2''13 (pour ne pas compter 2 fois les coins). On voudrait du coup des domaine les plus grand possible, clairement, mais il faut aussi voir que chaque domaine c'est nbp''nbp colonnes à résoudre sur ce même proc... Et c'est là ou il faut expérimenter un peu pour trouver l'optimum entre le nombre total de proc à employer et le gain effectif (temps total &amp;amp;quot;facturé&amp;amp;quot; au vu du nombre de procs monopolisés pour une simu donnée).''&lt;br /&gt;
&lt;br /&gt;
_Pour les noeuds, il faut tenir compte qu'un noeud sur Occigen, c'est 24 (ou 28) procs. Disons 24. Quand on demande N procs, le système te donne M noeuds, soit M*24 procs (les noeuds ne sont pas partagés avec d'autres applications). Et bien sûr on te facturera ces M noeuds, même si tu n'utilises pas tous les procs. Donc il faut s'efforcer de tomber juste et demander un multiple de 24 procs. Même raisonement si tu demandes à utiliser des noeuds de 28 procs._&lt;br /&gt;
&lt;br /&gt;
== comment changer la rotation? ==&lt;br /&gt;
&lt;br /&gt;
dans saturn_const.def, changer le taux de rotation jamais testé avec 0, mais pourrait créer des problèmes (ex: beta) ''vérifier que omega dans saturn_const.def n'intervient pas dans la physique LMDZ.GENERIC/libf/phystd/''&lt;br /&gt;
&lt;br /&gt;
== la dissipation c'est où? ==&lt;br /&gt;
&lt;br /&gt;
laplacien itéré: hyperviscosity - tau_graddiv,tau_gradrot,tau_divgrad: periode (plus c'est petit, plus la dissipation est efficace) - nitergdiv,nitergrot,niterdivgrad: ordre du laplacien (plus c'est grand, plus on dissipe sélectivement les petites échelles)&lt;br /&gt;
&lt;br /&gt;
== comment changer la grille cible du remapping on-the-fly ==&lt;br /&gt;
&lt;br /&gt;
dans context_lmdz_physics.xml changer les paramètres ni_glo et nj_glo par exemple pour remapper sur du lat/lon à 360 pts en latitude et 720 pts en longitude (0.5°) &amp;lt;domain id=&amp;quot;dom_regular&amp;quot; ni_glo=&amp;quot;720&amp;quot; nj_glo=&amp;quot;360&amp;quot; type=&amp;quot;rectilinear&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Forcer XIOS à écrire tous les .... ==&lt;br /&gt;
&lt;br /&gt;
Il faut utiliser l'attribut (ici par ex pour forcer l'écriture tous les ts (==time step) ; d'autres délais doivent être possible): &amp;lt;code&amp;gt;sync_freq=&amp;amp;quot;1ts&amp;amp;quot;&amp;lt;/code&amp;gt; dans le &amp;lt;code&amp;gt;&amp;amp;lt;file id=... .... &amp;amp;gt;&amp;lt;/code&amp;gt; concerné.&lt;br /&gt;
&lt;br /&gt;
== comment changer le bottom du modele ==&lt;br /&gt;
&lt;br /&gt;
* refaire tourner le 1D&lt;br /&gt;
** changer la pression &amp;lt;code&amp;gt;psurf&amp;lt;/code&amp;gt; dans rcm1d.def&lt;br /&gt;
** changer &amp;lt;code&amp;gt;ichoice=1&amp;lt;/code&amp;gt; et changer &amp;lt;code&amp;gt;tref&amp;lt;/code&amp;gt; (ex: 10b: 330K)&lt;br /&gt;
* refaire tourner le 3D (avec makestart) en changeant &amp;lt;code&amp;gt;preff&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;saturn_const.def&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comment changer la fréquence de sortie des Xhistins.nc ==&lt;br /&gt;
&lt;br /&gt;
les commandes XIOS sont appelées depuis la physique (dans la config présente) dans context_lmdz_physics.xml il suffit de changer output_freq ''attention'' ts se comprend comme le pas de temps physique (voir donc dans run_icosa.def les paramètres dt et itau_physics pour le connaître) par exemple, pour des sorties tous les 20 jours Saturne&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;file id=&amp;quot;histins&amp;quot;&lt;br /&gt;
      name=&amp;quot;Xhistins&amp;quot;&lt;br /&gt;
      output_freq=&amp;quot;40ts&amp;quot;&lt;br /&gt;
      type=&amp;quot;one_file&amp;quot;&lt;br /&gt;
      enabled=&amp;quot;.true.&amp;quot;&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
== pas de radiatif et perturbations ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;faire descendre le modèle&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;modifier le code pour perturbations vitesse et pas température&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;compiler (voir README.md)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;changer dans callphys.def (dans saturn/makestart)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;surfalbedo = 1.0&lt;br /&gt;
surfemis = 0.0&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;changer dans callphys.def (dans saturn '''et''' saturn/makestart)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;corrk      = .false.&lt;br /&gt;
enertest  = .true.&lt;br /&gt;
randompert = 1&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;voir si on garde le flux interne ou non (&amp;lt;code&amp;gt;intheat&amp;lt;/code&amp;gt;)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;refaire les états initiaux (dans makestart)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;faire un run court pour voir sur les spectres l'injection d'Ek&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comment comparer deux fichiers? file1.nc file2.nc ==&lt;br /&gt;
&lt;br /&gt;
ncdiff file1.nc file2.nc output.nc&lt;br /&gt;
&lt;br /&gt;
== comment coller plusieurs fichiers file1.nc file2.nc file3.nc ==&lt;br /&gt;
&lt;br /&gt;
ncrcat file1.nc file2.nc file3.nc output.nc avec juste la vitesse u et v ncrcat -v u -v v file1.nc file2.nc file3.nc output.nc avec tous les fichiers fileXXX.nc disponibles ncrcat file*.nc output.nc&lt;br /&gt;
&lt;br /&gt;
== comment tracer les champs et divers diagnostics en moyenne zonale? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;mettre à jour planetoplot et planets&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;utiliser precast.py dans planetoplot/examples/ppclass_additional/dynanalysis&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;changer les options au début (il y a des exemples), exemple pour Saturne&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;fileAP=&amp;quot;Xhistins_42.nc&amp;quot;&lt;br /&gt;
p_upper,p_lower,nlev = 4.0e2,2.5e5,40&lt;br /&gt;
targetp1d = np.logspace(np.log10(p_lower),np.log10(p_upper),nlev)&lt;br /&gt;
myp = planets.Saturn&lt;br /&gt;
day_per_year = 24430.&lt;br /&gt;
short = False&lt;br /&gt;
includels = False&lt;br /&gt;
charx = &amp;quot;0,360&amp;quot;&lt;br /&gt;
ispressure = False&lt;br /&gt;
vartemp = &amp;quot;temperature&amp;quot;&lt;br /&gt;
outfile = &amp;quot;precast.nc&amp;quot;&lt;br /&gt;
nopole = True&amp;lt;/source&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Il faut que apbp.txt soit présent !&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;le résultat se trouve dans le fichier indiqué dans outfile&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== bilan de moment cinétique ==&lt;br /&gt;
&lt;br /&gt;
dans run_icosa.def&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;check_conservation = detailed &lt;br /&gt;
itau_check_conserv = 160&amp;lt;/pre&amp;gt;&lt;br /&gt;
le itau_check_conserv est comme itau_physics pour que la contribution de la physique à AAM ne soit pas nulle. de plus il est coûteux d'appeler les diagnostics trop souvent.&lt;br /&gt;
&lt;br /&gt;
S. Lebonnois, C. Covey, A. Grossman, H. Parish, G. Schubert, R. Walterscheid, P. Lauritzen, and C. Jablonowski. Angular momentum budget in General Circulation Models of superrotating atmospheres: A critical diagnostic. Journal of Geophysical Research (Planets), 117:E12004, 2012.&lt;br /&gt;
&lt;br /&gt;
P. H. Lauritzen, J. T. Bacmeister, T. Dubos, S. Lebonnois, and M. A. Taylor. Held-Suarez simulations with the Community Atmosphere Model Spectral Element (CAM-SE) dynamical core: A global axial angular momentum analysis using Eulerian and floating Lagrangian vertical coordinates. Journal of Advances in Modeling Earth Systems, 6:129-140, 2014.&lt;br /&gt;
&lt;br /&gt;
== XIOS server ou client ==&lt;br /&gt;
&lt;br /&gt;
# XIOS client &amp;lt;code&amp;gt;use_server=False&amp;lt;/code&amp;gt; Broadwell 24 processeurs sur 28&lt;br /&gt;
# XIOS server &amp;lt;code&amp;gt;use_server=true&amp;lt;/code&amp;gt; Broadwell 24 processurs sur 28 + 4 processeurs pour XIOS&lt;br /&gt;
&lt;br /&gt;
cas 1 est 3 min plus lent que cas 2 -- sur 2h20...! parce qu'on fait peu de sorties&lt;br /&gt;
&lt;br /&gt;
== Optimisation ==&lt;br /&gt;
&lt;br /&gt;
# 40 noeuds au lieu de 50 noeuds, même temps de calcul...! Testé dans la branche https://github.com/aymeric-spiga/dynamico-giant/tree/work_61levels&lt;br /&gt;
# &amp;lt;code&amp;gt;sync_freq=40ts&amp;lt;/code&amp;gt; (ou multiple de, si 40ts est la fréquence d'écriture) dans context_lmdz_physics.xml doit être inclus sinon il n'est pas réglé et XIOS transfère tout à la fin du run ce qui prend du temps (et peut occasionner des problèmes de mémoire)&lt;br /&gt;
&lt;br /&gt;
== Versions fonctionnelles de dynamico-giant ==&lt;br /&gt;
&lt;br /&gt;
=== Jupiter ===&lt;br /&gt;
&lt;br /&gt;
* XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ICOSAGCM revision 756&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* IOIPSL revision 339&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Physics revision 2228 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
but check Physics version 2142 and 2180&lt;br /&gt;
&lt;br /&gt;
=== Saturne (référence Spiga 2020, à vérifier) ===&lt;br /&gt;
&lt;br /&gt;
* DYNAMICO --&amp;amp;gt; Revision: 756&lt;br /&gt;
* PHYSICS --&amp;amp;gt; Revision: 2005&lt;br /&gt;
* XIOS --&amp;amp;gt; Revision: 1583&lt;br /&gt;
* IOIPSL --&amp;amp;gt; Revision: 310?&lt;br /&gt;
&lt;br /&gt;
=== Saturne (simulation de référence sur 61 niveaux, Bardet et al. Icarus 2021) ===&lt;br /&gt;
&lt;br /&gt;
* XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* IOIPSL revision 310&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Physics revision 2005 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
=== Saturne (simulation avec la GWD paramétrisation sur 61 niveaux, chapitre 6 PhD Bardet) ===&lt;br /&gt;
&lt;br /&gt;
* XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* IOIPSL revision 310&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Physics revision 2213 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
=== Saturne (simulation sur 96 niveaux, Bardet et al. Nature Astronomy 2022) ===&lt;br /&gt;
&lt;br /&gt;
* XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* IOIPSL revision 431&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Physics revision 2305 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
=== Saturne (simulation avec la GWD paramétrisation sur 96 niveaux, chapitre 6 PhD Bardet) ===&lt;br /&gt;
&lt;br /&gt;
* XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* IOIPSL revision 431&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Physics revision 2403 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
=== Uranus &amp;amp;amp; Neptune (old version) ===&lt;br /&gt;
&lt;br /&gt;
* XIOS revision 1944&lt;br /&gt;
* ICOSAGCM revision 765&lt;br /&gt;
* IOIPSL revision 431&lt;br /&gt;
* FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Physics revision 2413 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
=== Uranus &amp;amp;amp; Neptune (new version) ===&lt;br /&gt;
&lt;br /&gt;
* XIOS revision 2203&lt;br /&gt;
* ICOSAGCM revision (20/08/2021)&lt;br /&gt;
* IOIPSL revision 450&lt;br /&gt;
* FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Physics revision 2555 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
works on 03/03/2022 for all HEAD&lt;br /&gt;
&lt;br /&gt;
== Les fichiers d'architecture (Installation sur un nouveau cluster) ==&lt;br /&gt;
&lt;br /&gt;
En pratique LMDZ.COMMON, ICOSA_LMDZ et IOIPSL peuvent utiliser exactement le même fichier arch.fcm ; mais celui pour ICOSAGCM est légèrement différent (les %FPP_DEF diffèrent, peut-être aussi le %FPP).&lt;br /&gt;
&lt;br /&gt;
make_icosa_lmdz doit être lancé avec -arch_path ../ARCH puisque les arch.env et arch.path communs se trouvent dans ../ARCH (l'option -arch_path ne concerne d'ailleurs que les fichiers arch.env et arch.path; le fichier arch.fcm recherché sera toujours celui dans le &amp;amp;quot;arch&amp;amp;quot; de chacun des modèles. Donc il faut bien mettre pour chacun des quatre modèles (LMDZ.COMMON, ICOSA_LMDZ,IOIPSL et ICOSAGCM) le arch.fcm dans le sous-dossier arch/ du modèle correspondant.&lt;br /&gt;
&lt;br /&gt;
XIOS est écrit en C++, et pas en Fortran. Le fichier arch.fcm correspondant est donc nécessairement différent de celui des quatre autres modèles. Pour créér ce arch.fcm, prendre exemple sur les fichiers .fcm déjà présent dans XIOS/arch/, avec une architecture similaire à celle du nouveau cluster. En particulier, il faut utiliser des versions de gcc/gfortran &amp;amp;gt; 6+. Il faut absolument avoir une bibliothèque HDF5 compilée en parallèle, ainsi que netcdf-C et netcdf-fortran (et peut être aussi netcdf-Cxx) compilé en parallèle. Sans ça, il sera peut-être possible de compiler le modèle, mais pas de lancer une simulation en utilisant XIOS.&lt;br /&gt;
&lt;br /&gt;
== Commencer une nouvelle simulation en utilisant le schéma des panaches thermiques ==&lt;br /&gt;
&lt;br /&gt;
# Comme pour toutes nouvelles simulations, il faut commencer par un run 1D de plusieurs décennies permettant d'obtenir un profil de température (&amp;lt;code&amp;gt;temp_profile.txt&amp;lt;/code&amp;gt;) et les coefficients ap et bp (&amp;lt;code&amp;gt;apbp.txt&amp;lt;/code&amp;gt;) en équilibre radiatif-convectif pour la planète que l'on étudie. Ce run 1D s'effectue dans les dossiers jupiter1d, saturn1d, neptune1d et/ou uranus1d, avec ces options pour le callphys.def :&lt;br /&gt;
&lt;br /&gt;
callrad = true calladj = true tous les autres mots clés à false (y compris &amp;lt;code&amp;gt;calltherm&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Faire un &amp;amp;quot;makestart&amp;amp;quot; run : permet d'obtenir les fichiers restart à partir du profil de température initial. Il s'agit du run dont l'état initial est le profil de température créé par run 1D (&amp;lt;code&amp;gt;temp_profile.txt&amp;lt;/code&amp;gt; est appliquer à chaque point de grille horizontale du modèle). L'état initial est ainsi une planète isotherme horizontalement mais qui varie verticalement. Pour ce run, aucun traceur ne va être utilisé dans le modèle. Néanmoins, il faut renseigner au modèle le nombre de traceurs que nous souhaitons utiliser avec le schéma des panaches thermiques afin qu'il puisse créer la dimension nq et le champ q dans les fichiers &amp;lt;code&amp;gt;restart_icosa.nc&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;restartfi.nc&amp;lt;/code&amp;gt;. dans '''callphys.def''' :&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;          traceur = true&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;dans '''run_icosa.def''' : &amp;lt;code&amp;gt;nqtot = 2&amp;lt;/code&amp;gt; (par exemple, h2o_vap et h2o_ice) dans '''traceur.def''' :&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;           2&lt;br /&gt;
           h2o_vap&lt;br /&gt;
           h2o_ice&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Ajout des quantités pour chaque traceur. Ici, nous ajoutons les profils pour chacun des traceurs dans les fichiers &amp;lt;code&amp;gt;restart_icosa.nc&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;restartfi.nc&amp;lt;/code&amp;gt; &amp;amp;quot;à la main&amp;amp;quot; en utilisant le programme python &amp;lt;code&amp;gt;/processing_codes/tracer_settings.py&amp;lt;/code&amp;gt; pour obtenir des fichiers restart avec la bonne abondance d'eau dans le cas présent.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commencer la simulation : Il ne reste plus qu'à lancer la simulation 3D avec les nouveaux fichiers restart et les réglages suivant : dans '''callphys.def''' :&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;            traceur = true&lt;br /&gt;
            calltherm = true&lt;br /&gt;
            # thermal plume model options:&lt;br /&gt;
            divmpl = true&lt;br /&gt;
            r_aspect_thermals = 2.0&lt;br /&gt;
            tau_thermals      = 0.0&lt;br /&gt;
            betalpha          = 0.9&lt;br /&gt;
            afact             = 0.7&lt;br /&gt;
            fact_epsilon      = 2.e-4&lt;br /&gt;
            alpha_max         = 0.7&lt;br /&gt;
            fomass_max        = 0.5&lt;br /&gt;
            pres_limit        = 2.e5&lt;br /&gt;
            water             = true&lt;br /&gt;
            watercond         = true&lt;br /&gt;
            waterain          = true&lt;br /&gt;
            evap_prec         = true&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dans '''run_icosa.def''' : &amp;lt;code&amp;gt;nqtot = 2&amp;lt;/code&amp;gt; dans '''traceur.def''' :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;               2&lt;br /&gt;
               h2o_vap&lt;br /&gt;
               h2o_ice&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, ajouter la déclaration et l'écriture des variables relatives à l'utilisation du schéma des thermiques (&amp;lt;code&amp;gt;h2o_vap&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2o_ice&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;w_plm&amp;lt;/code&amp;gt;) dans les fichiers XML de la physique.&lt;br /&gt;
&lt;br /&gt;
== Erreur en début de run, SEGMENTATION FAULT dans la routine &amp;lt;code&amp;gt;advect.f90&amp;lt;/code&amp;gt; (ICOSAGCM/ppsrc/transport) au niveau de l'appel à &amp;lt;code&amp;gt;cross_product2&amp;lt;/code&amp;gt;. ==&lt;br /&gt;
&lt;br /&gt;
La routine &amp;lt;code&amp;gt;cross_product2&amp;lt;/code&amp;gt; effectue des produits vectoriels. Cette erreur vient du fait qu'en essayant de faire des optimisations de calcul, le compilateur se prend &amp;amp;quot;les pieds dans le tapis&amp;amp;quot; et ne sait plus faire le produit vectoriel. Pour empêcher le compilateur de faire des optimisations trop poussées, il faut ajouter l'option &amp;lt;code&amp;gt;-fp-model strict&amp;lt;/code&amp;gt; au niveau du mot-clé &amp;lt;code&amp;gt;%BASE_FFLAGS&amp;lt;/code&amp;gt; dans tous les fichiers &amp;lt;code&amp;gt;.fcm&amp;lt;/code&amp;gt; du modèle (LMDZ.COMMON / ICOSAGCM / ICOSA_LMDZ)&lt;br /&gt;
&lt;br /&gt;
== Branche master version du 04/04/2022 dans le dossier Jupiter ==&lt;br /&gt;
&lt;br /&gt;
La version actuelle des fichiers de réglage dans le dossier Jupiter sont réglés pour utiliser des traceurs. Si vous souhaiter utiliser le modèle sans traceur, il vous faut modifier les fichiers suivants :&lt;br /&gt;
&lt;br /&gt;
run_icosa.def&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;        nqtot = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
traceur.def&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;        0&amp;lt;/pre&amp;gt;&lt;br /&gt;
context_dynamico.xml (ligne 125)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;         &amp;amp;lt;field id=&amp;amp;quot;q_start&amp;amp;quot; name=&amp;amp;quot;q&amp;amp;quot;  grid_ref=&amp;amp;quot;grid_q_start&amp;amp;quot; prec=&amp;amp;quot;8&amp;amp;quot;/&amp;amp;gt;   &amp;lt;/pre&amp;gt;&lt;br /&gt;
== PROFILING with DYNAMICO-Giant: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;-pg&amp;lt;/code&amp;gt;: Generate extra code to write profile information suitable for analysis program &amp;lt;code&amp;gt;gprof&amp;lt;/code&amp;gt;. You must use this option when compiling the sources files you want data about and you must '''also use it when linking'''. 1. For DYNAMICO-Giant: in the arch.fcm file of each part of the model (ICOSAGCM, ICOSA_LMDZ, LMDZ.COMMON and XIOS), you have to add the option &amp;lt;code&amp;gt;-pg&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;%PROD_FFLAGS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%BASE_LD&amp;lt;/code&amp;gt; 2. Compile as usual 3. Execute your code as usual 4. Run &amp;lt;code&amp;gt;gprof&amp;lt;/code&amp;gt; tool:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    gprof icosa_lmdz.exe goon.out &amp;amp;gt; analysis.txt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:DYNAMICO]]&lt;br /&gt;
[[Category:Generic-DYNAMICO]]&lt;/div&gt;</summary>
		<author><name>SandrineSaturne</name></author>	</entry>

	<entry>
		<id>http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php?title=Dynamico-giant&amp;diff=2732</id>
		<title>Dynamico-giant</title>
		<link rel="alternate" type="text/html" href="http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php?title=Dynamico-giant&amp;diff=2732"/>
				<updated>2025-04-30T13:52:41Z</updated>
		
		<summary type="html">&lt;p&gt;SandrineSaturne: /* 1. Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[transferred from github, now active here]&lt;br /&gt;
&lt;br /&gt;
= 1. Introduction =&lt;br /&gt;
&lt;br /&gt;
Modeling the atmospheric circulation of giant planets of our solar System (Jupiter, Saturn, Uranus and Neptune) require high horizontal resolution grid: typically, half a degree (in latitude, longitude) for Jupiter and Saturn, and one degree for Uranus and Neptune. &lt;br /&gt;
For this reason, GCM runs for giant planets use the DYNAMICO dynamical core (see [[The_DYNAMICO_dynamical_core|Dynamico]]), coupled to the Generic physics (see [[Overview_of_the_Generic_PCM|Generic-PCM]]).&lt;br /&gt;
&lt;br /&gt;
= 2. Installation =&lt;br /&gt;
&lt;br /&gt;
== A) Fichiers d'architecture ==&lt;br /&gt;
&lt;br /&gt;
=== - Modules ===&lt;br /&gt;
&lt;br /&gt;
Before installation, set environment (do it once) in your .bash_profile.&lt;br /&gt;
&lt;br /&gt;
Modules used on Occigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ulimit -s unlimited&lt;br /&gt;
# modules&lt;br /&gt;
module purge&lt;br /&gt;
module load intel/17.0&lt;br /&gt;
module load intelmpi/2017.0.098&lt;br /&gt;
module load hdf5/1.8.17&lt;br /&gt;
module load netcdf/4.4.0_fortran-4.4.2&lt;br /&gt;
module load ncview&lt;br /&gt;
module load nco&lt;br /&gt;
module load qt&lt;br /&gt;
module load python&amp;lt;/pre&amp;gt;&lt;br /&gt;
Modules used on Ciclad:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ulimit -s unlimited&lt;br /&gt;
# modules&lt;br /&gt;
module purge&lt;br /&gt;
module load gnu/4.9.3 &lt;br /&gt;
module load intel/15.0.6.233&lt;br /&gt;
module load openmpi/1.6.5-ifort&lt;br /&gt;
module load hdf5/1.8.18-parallel-ifort&lt;br /&gt;
module load netcdf4/4.4.1.1-parallel-ifort&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beware, if you change version of model (newer or older version), it's possible that you have to change modules...&lt;br /&gt;
&lt;br /&gt;
=== - Installation sur un nouveau cluster ===&lt;br /&gt;
&lt;br /&gt;
En pratique LMDZ.COMMON, ICOSA_LMDZ et IOIPSL peuvent utiliser exactement le même fichier arch.fcm ; mais celui pour ICOSAGCM est légèrement différent (les %FPP_DEF diffèrent, peut-être aussi le %FPP).&lt;br /&gt;
&lt;br /&gt;
make_icosa_lmdz doit être lancé avec -arch_path ../ARCH puisque les arch.env et arch.path communs se trouvent dans ../ARCH (l'option -arch_path ne concerne d'ailleurs que les fichiers arch.env et arch.path; le fichier arch.fcm recherché sera toujours celui dans le &amp;amp;quot;arch&amp;amp;quot; de chacun des modèles. Donc il faut bien mettre pour chacun des quatre modèles (LMDZ.COMMON, ICOSA_LMDZ,IOIPSL et ICOSAGCM) le arch.fcm dans le sous-dossier arch/ du modèle correspondant.&lt;br /&gt;
&lt;br /&gt;
L'installation d'IOIPSL doit se faire à partir du bon script bash. Si vous utilisez un server autre qu'occigen, il vous faut changer le nom du script à utiliser dans install_ioipsl.sh. Par exemple, il vous faudra utiliser install_ioipsl_ciclad-ifort.bash pour CICLAD.&lt;br /&gt;
&lt;br /&gt;
XIOS est écrit en C++, et pas en Fortran. Le fichier arch.fcm correspondant est donc nécessairement différent de celui des quatre autres modèles. Pour créér ce arch.fcm, prendre exemple sur les fichiers .fcm déjà présent dans XIOS/arch/, avec une architecture similaire à celle du nouveau cluster. En particulier, il faut utiliser des versions de gcc/gfortran &amp;amp;gt; 6+. Il faut absolument avoir une bibliothèque HDF5 compilée en parallèle, ainsi que netcdf-C et netcdf-fortran (et peut être aussi netcdf-Cxx) compilé en parallèle. Sans ça, il sera peut-être possible de compiler le modèle, mais pas de lancer une simulation en utilisant XIOS.&lt;br /&gt;
&lt;br /&gt;
== B. Download ==&lt;br /&gt;
&lt;br /&gt;
Download structure&lt;br /&gt;
&lt;br /&gt;
Take place on a repository and git clone the model.&lt;br /&gt;
&lt;br /&gt;
On occigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $SCRATCHDIR&lt;br /&gt;
git clone https://github.com/aymeric-spiga/dynamico-giant.git [optional different name]&amp;lt;/pre&amp;gt;&lt;br /&gt;
== C. Install ==&lt;br /&gt;
&lt;br /&gt;
Install code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd dynamico-giant&lt;br /&gt;
./install.sh&lt;br /&gt;
./install_ioipsl.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
A login and a password are necessary to install IOIPSL (only for the first time, after that we can save them). Please contact TGCC computing center to get the login/password.&lt;br /&gt;
&lt;br /&gt;
After that, please add &amp;amp;quot;$PWD&amp;amp;quot;/FCM_V1.2/bin/ to PATH environment variable.&lt;br /&gt;
&lt;br /&gt;
Ant that's all, we can now change parameters of files or compile the code to do a test (part 6) or eat a beautiful tartiflette (can be also do during compilation).&lt;br /&gt;
&lt;br /&gt;
= 3. General parameters =&lt;br /&gt;
&lt;br /&gt;
== A) Mesh grid &amp;amp;amp; resolution ==&lt;br /&gt;
&lt;br /&gt;
On run_icosa.def:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nbp --&amp;amp;gt; number of subdivision on a main triangle: integer (default=40)&lt;br /&gt;
        nbp = sqrt((nbr_lat x nbr_lon)/10)&lt;br /&gt;
        nbp                 20  40  80 160&lt;br /&gt;
        T-edge length (km) 500 250 120  60&lt;br /&gt;
        Example: nbp(128x96)=35 -&amp;amp;gt; 40&lt;br /&gt;
                 nbp(256x192)=70 -&amp;amp;gt; 80&lt;br /&gt;
                 nbp(360x720)=160 -&amp;amp;gt; 160&lt;br /&gt;
nsplit_i, nsplit_j --&amp;amp;gt; sub splitting of main rhombus: integer&lt;br /&gt;
                        Example: for nbp=80, nsplit_i=4,nsplit_j=6&lt;br /&gt;
                        nbp/nsplit_{i,j} = 20 &amp;amp;gt; 10 &amp;amp;amp; 13 &amp;amp;gt; 10 --&amp;amp;gt; GOOD&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== - Remapping ===&lt;br /&gt;
&lt;br /&gt;
Pour le remapping, il faut aller dans context_lmdz_physics.xml changer les paramètres ni_glo et nj_glo par exemple pour remapper sur du lat/lon à 360 pts en latitude et 720 pts en longitude (0.5°).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;domain id=&amp;amp;quot;dom_regular&amp;amp;quot; ni_glo=&amp;amp;quot;720&amp;amp;quot; nj_glo=&amp;amp;quot;360&amp;amp;quot; type=&amp;amp;quot;rectilinear&amp;amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== B) Time ==&lt;br /&gt;
&lt;br /&gt;
* ndays is number of days to simulate.&lt;br /&gt;
* day_step is number of dynamical time step per day&lt;br /&gt;
* Dynamics called every day_length(in s) / day_step per day&lt;br /&gt;
* 1 ts (physical timestep) = (day_length(in s)/day_step) x itau_physics&lt;br /&gt;
* Physics called (day_step / itau_physics) per day&lt;br /&gt;
* Physics called day_length(in s) / ts per day&lt;br /&gt;
* Radiative called every Physics x iradia physical timestep&lt;br /&gt;
* Radiative called every iradia/Physics days&lt;br /&gt;
&lt;br /&gt;
== C) Sponge layer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;iflag_sponge=0 for no sponge (default)&lt;br /&gt;
iflag_sponge=1 for sponge over 4 topmost layers&lt;br /&gt;
iflag_sponge=2 for sponge from top to ~1% of top layer pressure&lt;br /&gt;
mode_sponge=1 for u,v --&amp;amp;gt; 0&lt;br /&gt;
mode_sponge=2 for u,v --&amp;amp;gt; zonal mean&lt;br /&gt;
mode_sponge=3 for u,v,h --&amp;amp;gt; zonal mean&lt;br /&gt;
tau_sponge --&amp;amp;gt; damping frequency at last layer&lt;br /&gt;
           --&amp;amp;gt; e-5 medium / e-4 strong yet reasonable / e-3 very strong&amp;lt;/pre&amp;gt;&lt;br /&gt;
Spiga et al (2020): Shaw and Shepherd (2007) showed that the inclusion of sponge-layer parameterizations that do not conserve angular momentum (which is the case for Rayleigh drag), or allow for momentum to escape to space, implies a sensitivity of the dynamical results (especially zonal wind speed) to the choice for model top or drag characteristic timescale, because of spurious downward influence when momentum conservation is violated.&lt;br /&gt;
&lt;br /&gt;
Il ne faut donc pas ajouter de sponge layer pour les planètes géantes (iflag_sponge = 0)&lt;br /&gt;
&lt;br /&gt;
== D) Dissipation ==&lt;br /&gt;
&lt;br /&gt;
Spiga et al (2020): A subgrid-scale dissipation term is included in our Saturn DYNAMICO GCM to prevent the accumulation of energy at scales close to the grid resolution, caused by the GCM not resolving the turbulent scales at which this energy is dissipated. This hyperviscosity term is written in our Saturn DYNAMICO model as an iterated Laplacian term on a given variable. The three variables denoted are vorticity, divergence, and potential temperature, chosen to set horizontal dissipation on respectively the rotational component of the flow (e.g. Rossby waves), the divergent component of the flow (e.g. gravity waves), and the diabatic perturbations (e.g. coming from the physical packages).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tau_graddiv --&amp;amp;gt; dissipation timescale of smallest wvl: u,v (gradiv) : real (default=5000)&lt;br /&gt;
tau_gradrot --&amp;amp;gt; dissipation timescale of smallest wvl: u,v (nxgradrot) : real (default=5000)&lt;br /&gt;
tau_divgrad --&amp;amp;gt; dissipation timescale of smallest wvl: h (divgrad) : real (default=5000)&lt;br /&gt;
nitergdiv --&amp;amp;gt; number of iterations for gradiv operator : integer (default=1)&lt;br /&gt;
nitergrot --&amp;amp;gt; number of iterations for nxgradrot operator : integer (default=1)&lt;br /&gt;
niterdivgrad --&amp;amp;gt; number of iterations for divgrad operator : integer (default=1)&amp;lt;/pre&amp;gt;&lt;br /&gt;
tau_graddiv,tau_gradrot,tau_divgrad correspondent au temps de dissipation (plus c'est petit, plus la dissipation est efficace). nitergdiv,nitergrot,niterdivgrad correspondent à l'ordre du laplacien (plus c'est grand, plus on dissipe sélectivement les petites échelles).&lt;br /&gt;
&lt;br /&gt;
Attention, Trop dissiper -&amp;amp;gt; instabilité numérique&lt;br /&gt;
&lt;br /&gt;
Pas assez dissiper -&amp;amp;gt; instabilité dynamique trop forte&lt;br /&gt;
&lt;br /&gt;
L'ordre du laplacien dans les fichiers .def est suffisant. S'il faut changer la dissipation, il vaut mieux changer les temps de dissipation que l'ordre du laplacien (risque d'instabilité numérique).&lt;br /&gt;
&lt;br /&gt;
=== - Facteurs de dissipation ===&lt;br /&gt;
&lt;br /&gt;
A partir de ces valeurs de temps de dissipation, il est également possible d'ajouter 2 facteurs de dissipation (fac_mid et fac_up) qui permettent d'augmenter la dissipation à partir de certains niveaux. Le fac_mid permet de diminuer le temps de dissipation d'un facteur sur toute l'atmosphère jusqu'au bottom. Il y a une zone transition de quelques niveaux entre le bottom (le temp de dissipation au bottom est sans facteur) et quelques niveaux au-dessus où la valeur du temps de dissipation est avec ce facteur jusqu'au top. On ne peut donc pas choisir l'altitude et la zone de transition avec ce facteur. Quant au fac_up, il permet de diminuer le temps de dissipation d'un facteur à partir d'une altitude et d'une épaisseur de zone de transition qu'on peut choisir. On peut utiliser la combinaison des 2 ou l'un des 2. Pour ne pas prendre en compte ces facteurs de dissipation, il faut qu'il soit mis à 1.&lt;br /&gt;
&lt;br /&gt;
Il existe 2 modes possibles pour le fac_up: le mode martien (en fonction de l'altitude) et le mode vénusien (en fonction de la pression). Dans le 1er cas, il faut renseigner l'altitude où démarre la zone de transition et l'épaisseur de cette zone. Dans le 2ème cas, il faut renseigner la pression où démarre la zone de transition et l'échelle de hauteur de cette zone de transition.&lt;br /&gt;
&lt;br /&gt;
Il est vivement conseillé de tracer votre profil de dissipation à partir des équations (dans vert_prof_dissip_icosa_lmdz.f90) afin d'être certain de leur allure.&lt;br /&gt;
&lt;br /&gt;
== E) Rayleigh Friction ==&lt;br /&gt;
&lt;br /&gt;
Spiga et al 2020: This drag plays the role devoted to surface friction on terrestrial planets, which allows to close the angular momentum budget through downward control (Haynes and McIntyre, 1987; Haynes et al., 1991). This could also be regarded as a zeroth-order parameterization for Magneto-HydroDynamic (MHD) drag as a result of Lorenz forces acting on jet streams putatively extending to the depths of Saturn's interior (Liu et al., 2008; Galanti et al., 2019), much deeper than the shallow GCM's model bottom.&lt;br /&gt;
&lt;br /&gt;
Comme Liu and Schneider (2010), cette couche de frottement ne s'exerce pas aux régions équatoriales car à l’extérieur du cylindre tangeant du rayon équatorial, les cylindres convectifs ne coupent pas cette couche et ne subissent pas les frottements liés aux effets de la MHD.&lt;br /&gt;
&lt;br /&gt;
Le paramètre rayleigh_limlat correspond à la latitude maximale de part et d'autre de l'équateur où cette friction n'est pas observée.&lt;br /&gt;
&lt;br /&gt;
Pour le temps (rayleigh_friction_tau), il est similaire à celui utilisé par Liu and Schneider (2010). Elle est fixée à 100 jours terrestres. Mais attention, on fonction de la valeur, la dynamique peut évoluer dans votre simulation.&lt;br /&gt;
&lt;br /&gt;
== F) Conservation ==&lt;br /&gt;
&lt;br /&gt;
Dans run_icosa.def:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;check_conservation = detailed &lt;br /&gt;
itau_check_conserv = 320&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le itau_check_conserv est comme itau_physics pour que la contribution de la physique à AAM ne soit pas nulle. de plus il est coûteux d'appeler les diagnostics trop souvent.&lt;br /&gt;
&lt;br /&gt;
S. Lebonnois, C. Covey, A. Grossman, H. Parish, G. Schubert, R. Walterscheid, P. Lauritzen, and C. Jablonowski. Angular momentum budget in General Circulation Models of superrotating atmospheres: A critical diagnostic. Journal of Geophysical Research (Planets), 117:E12004, 2012.&lt;br /&gt;
&lt;br /&gt;
P. H. Lauritzen, J. T. Bacmeister, T. Dubos, S. Lebonnois, and M. A. Taylor. Held-Suarez simulations with the Community Atmosphere Model Spectral Element (CAM-SE) dynamical core: A global axial angular momentum analysis using Eulerian and floating Lagrangian vertical coordinates. Journal of Advances in Modeling Earth Systems, 6:129-140, 2014.&lt;br /&gt;
&lt;br /&gt;
== G) Traceur ==&lt;br /&gt;
&lt;br /&gt;
=== - Branche master version du 04/04/2022 dans le dossier Jupiter (traceur) ===&lt;br /&gt;
&lt;br /&gt;
La version actuelle des fichiers de réglage dans le dossier Jupiter est réglée pour utiliser des traceurs. Si vous souhaiter utiliser le modèle sans traceur, il vous faut modifier les fichiers suivants :&lt;br /&gt;
&lt;br /&gt;
run_icosa.def&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;        nqtot = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
traceur.def&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;        0&amp;lt;/pre&amp;gt;&lt;br /&gt;
context_dynamico.xml (ligne 125)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;         &amp;amp;lt;field id=&amp;amp;quot;q_start&amp;amp;quot; name=&amp;amp;quot;q&amp;amp;quot;  grid_ref=&amp;amp;quot;grid_q_start&amp;amp;quot; prec=&amp;amp;quot;8&amp;amp;quot;/&amp;amp;gt;   &amp;lt;/pre&amp;gt;&lt;br /&gt;
== H) Bottom du modèle ==&lt;br /&gt;
&lt;br /&gt;
* refaire tourner le 1D&lt;br /&gt;
** changer la pression &amp;lt;code&amp;gt;psurf&amp;lt;/code&amp;gt; dans rcm1d.def&lt;br /&gt;
** changer &amp;lt;code&amp;gt;ichoice=1&amp;lt;/code&amp;gt; et changer &amp;lt;code&amp;gt;tref&amp;lt;/code&amp;gt; (ex: 10b: 330K)&lt;br /&gt;
* refaire tourner le 3D (avec makestart) en changeant &amp;lt;code&amp;gt;preff&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;[nom_de_la_planète]_const.def&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 4. Physical parameterizations =&lt;br /&gt;
&lt;br /&gt;
== A) Cycle diurne ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;diurnal = .false.&amp;lt;/code&amp;gt; Car le temps radiatif est beaucoup plus long sur les planètes géantes.&lt;br /&gt;
&lt;br /&gt;
== B) Anneaux ==&lt;br /&gt;
&lt;br /&gt;
[Pour saturne uniquement] Il est possible d'ajouter l'ombre des anneaux dans le callphys.def:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rings_shadow = .true.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== C) Collision-induced absorption data ==&lt;br /&gt;
&lt;br /&gt;
L'absorption induite par collision est importante dans le transfet radiatif sur les planètes géantes, notamment celle provenant de H2. Cependant, le rapport ortho-para du H2 est différent selon les planètes et peut modifier fortement le chauffage sur ces planètes. Pour le cas des géantes gazeuses, le rapport ortho-para est normal (rapport 3:1). Mais pour le cas des géantes glacées, le rapport ortho-para est à l'équilibre. Par défaut, le rapport ortho-para est normal (H2orthopara_mixture = normal). Pour les géantes glacées, il faut mettre H2orthopara_mixture = equilibrium .&lt;br /&gt;
&lt;br /&gt;
Si vous voulez modifier le fichier utilisé dans un cas de CIA, il faut aller dans le code (dynamico-giant/code/LMDZ.GENERIC/libf/phystd/interpolate????.F90) et changer le nom du fichier (assurez-vous que ce fichier soit dans votre répertoire DATAGENERIC/continuum_data).&lt;br /&gt;
&lt;br /&gt;
Dans la version actuelle, il n'existe pas d'option qui permet de ne pas utiliser certaines contributions de CIA. Par exemple, si votre atmosphère est composé de H2, He et CH4 et que vous ne voulez pas des contributions venant du CH4, il vous faut commenter dans le modèle ces contributions.&lt;br /&gt;
&lt;br /&gt;
== D) K-correlated data ==&lt;br /&gt;
&lt;br /&gt;
Les fichiers k-corrélées doivent se situer dans votre répertoire DATAGENERIC/corrk_data .&lt;br /&gt;
&lt;br /&gt;
== E) Cpp mode ==&lt;br /&gt;
&lt;br /&gt;
cpp_mugaz_mode=0 pour que la valeur de cpp et de mugaz proviennent de la dynamique. cpp_mugaz_mode=1 pour forcer la valeur de cpp et de mugaz dans le callphys.def (à utiliser dans le makestart uniquement) cpp_mugaz_mode=2 pour calculer automatiquement à partir de données de références à 300 K et du gases.def (à éviter)&lt;br /&gt;
&lt;br /&gt;
== F) Generic n-layer aerosols (replaces the former 2-layer and NH3 cloud) ==&lt;br /&gt;
&lt;br /&gt;
Ce mode permet de créer des couches d'aérosols/nuages ayant une opacité (aeronlay_tauref) à une longueur d'onde donnée (aeronlay_lamref), un rayon de particule fixe (aeronlay_size) situés à une pression fixe et en fonction des propriétés optiques des particules (optprop_aeronlay_vis et optprop_aeronlay_ir). Pour le cas de l'altitude, on peut choisir soit (aeronlay_choice = 1) une pression max (aeronlay_ptop) et une pression min (aeronlay_pbot), soit (aeronlay_choice = 2) une pression min (aeronlay_pbot) et une échelle de hauteur (aeronlay_sclhght). On peut également choisir la variance effective pour les rayons de particules.&lt;br /&gt;
&lt;br /&gt;
Le nombre de couche de nuage (nlayero) est égal au nombre de scatterers dans la compilation (option -s ).&lt;br /&gt;
&lt;br /&gt;
Les fichiers de propriétés optiques doivent être dans votre DATAGENERIC.&lt;br /&gt;
&lt;br /&gt;
Un exemple pour 3 couches:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;aeronlay = .true.&lt;br /&gt;
nlayaero = 3&lt;br /&gt;
aeronlay_tauref       = 2.5 0.04 0.1&lt;br /&gt;
aeronlay_lamref       = 0.8e-6 0.8e-6 0.16e-6&lt;br /&gt;
aeronlay_choice       = 2 2 1&lt;br /&gt;
aeronlay_pbot         = 1.5e5 1.6e5 20.&lt;br /&gt;
aeronlay_ptop         = 1.1e5 1. 1.&lt;br /&gt;
aeronlay_sclhght      = 0.1 2.0 1&lt;br /&gt;
aeronlay_size         = 0.5e-6 0.05e-6 0.5e-6&lt;br /&gt;
aeronlay_nueff        = 0.3 0.3 0.3&lt;br /&gt;
optprop_aeronlay_vis  = optprop_aerosol2_vis.dat optprop_aerosol3_vis.dat optprop_carbon4_vis.dat&lt;br /&gt;
optprop_aeronlay_ir   = optprop_aerosol2_ir.dat optprop_aerosol3_ir.dat optprop_carbon4_ir.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
== G) Panaches thermiques ==&lt;br /&gt;
&lt;br /&gt;
# Comme pour toutes nouvelles simulations, il faut commencer par un run 1D de plusieurs décennies permettant d'obtenir un profil de température (&amp;lt;code&amp;gt;temp_profile.txt&amp;lt;/code&amp;gt;) et les coefficients ap et bp (&amp;lt;code&amp;gt;apbp.txt&amp;lt;/code&amp;gt;) en équilibre radiatif-convectif pour la planète que l'on étudie. Ce run 1D s'effectue dans les dossiers jupiter1d, saturn1d, neptune1d et/ou uranus1d, avec ces options pour le callphys.def :&lt;br /&gt;
&lt;br /&gt;
callrad = true calladj = true tous les autres mots clés à false (y compris &amp;lt;code&amp;gt;calltherm&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Faire un &amp;amp;quot;makestart&amp;amp;quot; run : permet d'obtenir les fichiers restart à partir du profil de température initial. Il s'agit du run dont l'état initial est le profil de température créé par run 1D (&amp;lt;code&amp;gt;temp_profile.txt&amp;lt;/code&amp;gt; est appliquer à chaque point de grille horizontale du modèle). L'état initial est ainsi une planète isotherme horizontalement mais qui varie verticalement. Pour ce run, aucun traceur ne va être utilisé dans le modèle. Néanmoins, il faut renseigner au modèle le nombre de traceurs que nous souhaitons utiliser avec le schéma des panaches thermiques afin qu'il puisse créer la dimension nq et le champ q dans les fichiers &amp;lt;code&amp;gt;restart_icosa.nc&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;restartfi.nc&amp;lt;/code&amp;gt;. dans '''callphys.def''' :&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;          traceur = true&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;dans '''run_icosa.def''' : &amp;lt;code&amp;gt;nqtot = 2&amp;lt;/code&amp;gt; (par exemple, h2o_vap et h2o_ice) dans '''traceur.def''' :&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;           2&lt;br /&gt;
           h2o_vap&lt;br /&gt;
           h2o_ice&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Ajout des quantités pour chaque traceur. Ici, nous ajoutons les profils pour chacun des traceurs dans les fichiers &amp;lt;code&amp;gt;restart_icosa.nc&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;restartfi.nc&amp;lt;/code&amp;gt; &amp;amp;quot;à la main&amp;amp;quot; en utilisant le programme python &amp;lt;code&amp;gt;/processing_codes/tracer_settings.py&amp;lt;/code&amp;gt; pour obtenir des fichiers restart avec la bonne abondance d'eau dans le cas présent.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commencer la simulation : Il ne reste plus qu'à lancer la simulation 3D avec les nouveaux fichiers restart et les réglages suivant : dans '''callphys.def''' :&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;            traceur = true&lt;br /&gt;
            calltherm = true&lt;br /&gt;
            # thermal plume model options:&lt;br /&gt;
            divmpl = true&lt;br /&gt;
            r_aspect_thermals = 2.0&lt;br /&gt;
            tau_thermals      = 0.0&lt;br /&gt;
            betalpha          = 0.9&lt;br /&gt;
            afact             = 0.7&lt;br /&gt;
            fact_epsilon      = 2.e-4&lt;br /&gt;
            alpha_max         = 0.7&lt;br /&gt;
            fomass_max        = 0.5&lt;br /&gt;
            pres_limit        = 2.e5&lt;br /&gt;
            water             = true&lt;br /&gt;
            watercond         = true&lt;br /&gt;
            waterain          = true&lt;br /&gt;
            evap_prec         = true&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dans '''run_icosa.def''' : &amp;lt;code&amp;gt;nqtot = 2&amp;lt;/code&amp;gt; dans '''traceur.def''' :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;               2&lt;br /&gt;
               h2o_vap&lt;br /&gt;
               h2o_ice&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, ajouter la déclaration et l'écriture des variables relatives à l'utilisation du schéma des thermiques (&amp;lt;code&amp;gt;h2o_vap&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2o_ice&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;w_plm&amp;lt;/code&amp;gt;) dans les fichiers XML de la physique.&lt;br /&gt;
&lt;br /&gt;
== H) Rotation ==&lt;br /&gt;
&lt;br /&gt;
Dans [name_of_planet]_const.def, changer le taux de rotation.&lt;br /&gt;
&lt;br /&gt;
Cela n'a jamais été testé avec 0, mais cela pourrait créer des problèmes (ex: beta). ''vérifier que omega dans saturn_const.def n'intervient pas dans la physique LMDZ.GENERIC/libf/phystd/''&lt;br /&gt;
&lt;br /&gt;
== I) Appel à la physique ==&lt;br /&gt;
&lt;br /&gt;
Il faut changer à ''deux endroits'' en réglant la même valeur: - dans run_icosa.def, changer itau_physics ; - dans run.def, changer iphysiq. Ces paramètres sont exprimés en pas de temps dynamique. Pour appeler la physique à chaque pas de temps dynamique, régler ces paramètres à 1.&lt;br /&gt;
&lt;br /&gt;
'''Attention: ''' Lorsque l'on change dans le ''run_icosa.def'' la valeur de itau_physics, faire bien attention à la valeur du champ itau_adv (qui controle la frequence d'advection des traceurs par la dynamique, compté en pas de temps dynamique). Il faut que itau_physics soit un multiple de itau_adv. Cela veut dire, que l'on advecte notre champ de traceurs plus souvent (ou autant de fois) que l'on appelle la physique, qui peut transformer ces traceurs.&lt;br /&gt;
&lt;br /&gt;
= 5. Ecriture des fichiers =&lt;br /&gt;
&lt;br /&gt;
== A) Nombre d'écriture dans chaque Xhistins.nc ==&lt;br /&gt;
&lt;br /&gt;
Prenons l'exemple de l'écriture d'un fichier sur une simu Uranus pour 1000j&lt;br /&gt;
&lt;br /&gt;
Nombre d'écriture = day_step X ndays/(itau_physics X output_freq)&lt;br /&gt;
&lt;br /&gt;
* ndays = 1000&lt;br /&gt;
* day_step = 200&lt;br /&gt;
* itau_physics = 50&lt;br /&gt;
* output_freq = 200&lt;br /&gt;
&lt;br /&gt;
On a 20 sorties tous les 1000 jours.&lt;br /&gt;
&lt;br /&gt;
Globalement, il est conseillé d'avoir 800 à 1000 sorties minimum par année planétaire (voir beaucoup plus en fonction de votre étude).&lt;br /&gt;
&lt;br /&gt;
== B) Ajouter une variable ==&lt;br /&gt;
&lt;br /&gt;
Pour ajouter une variable dans le fichier de sortie Xhistins.nc, il faut l'ajouter dans le field_group correspondant et s'assurer que cette variable est présente en tant que variable de sortie dans dynamico-giant/code/LMDZ.GENERIC/libf/phystd/physiq_mod.F90. Si ce n'est pas le cas, il faut faire un call writediagfi de la variable puis l'ajouter dans un call send_xios_field.&lt;br /&gt;
&lt;br /&gt;
== C) Forcer XIOS à écrire tous les .... ==&lt;br /&gt;
&lt;br /&gt;
Il faut utiliser l'attribut (ici par ex pour forcer l'écriture tous les ts (==time step) ; d'autres délais doivent être possible): &amp;lt;code&amp;gt;sync_freq=&amp;amp;quot;1ts&amp;amp;quot;&amp;lt;/code&amp;gt; dans le &amp;lt;code&amp;gt;&amp;amp;lt;file id=... .... &amp;amp;gt;&amp;lt;/code&amp;gt; concerné.&lt;br /&gt;
&lt;br /&gt;
== D) XIOS server ou client ==&lt;br /&gt;
&lt;br /&gt;
# XIOS client &amp;lt;code&amp;gt;use_server=False&amp;lt;/code&amp;gt; Broadwell 24 processeurs sur 28&lt;br /&gt;
# XIOS server &amp;lt;code&amp;gt;use_server=true&amp;lt;/code&amp;gt; Broadwell 24 processurs sur 28 + 4 processeurs pour XIOS&lt;br /&gt;
&lt;br /&gt;
Le cas 1 est 3 min plus lent que le cas 2 -- sur 2h20...(!) parce qu'on fait peu de sorties.&lt;br /&gt;
&lt;br /&gt;
= 6. Running the model =&lt;br /&gt;
&lt;br /&gt;
== A) Compilation ==&lt;br /&gt;
&lt;br /&gt;
Pour compiler le modèle, il suffit d'aller dans le dossier avec vos fichiers .def et .xml et d'utiliser le script compile_occigen.sh si on est sur occigen ou compile_ciclad.sh si on est sur ciclad&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./compile_occigen.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les options qui peuvent être modifiées/ajoutées sont - -s : le nombre de scatterers - -parallel: mpi ou mpi_omp - -arch: le nom du ficher d'architecture - -arch_path: le chemin vers ce fichier - -job: 8 (conseillé) - -full: compile le code entièrement - -debug: pour trouver un éventuel bug. A ENLEVER obligatoirement s'il n'y a plus de bug car multiplie par 5 votre temp de calcul.&lt;br /&gt;
&lt;br /&gt;
En 1D, d'autres options sont nécessaires: - -t: nombre de traceurs - -d: nombre de niveaux verticaux - -parallel: none (en 1D uniquement)&lt;br /&gt;
&lt;br /&gt;
=== - Versions fonctionnelles de dynamico-giant ===&lt;br /&gt;
&lt;br /&gt;
'''Jupiter''' - XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
- ICOSAGCM revision 756&amp;lt;br /&amp;gt;&lt;br /&gt;
- IOIPSL revision 339&amp;lt;br /&amp;gt;&lt;br /&gt;
- FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2228 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
but check Physics version 2142 and 2180&lt;br /&gt;
&lt;br /&gt;
'''Saturne (référence Spiga 2020, à vérifier)''' - DYNAMICO --&amp;amp;gt; Revision: 756 - PHYSICS --&amp;amp;gt; Revision: 2005 - XIOS --&amp;amp;gt; Revision: 1583 - IOIPSL --&amp;amp;gt; Revision: 310?&lt;br /&gt;
&lt;br /&gt;
'''Saturne (simulation de référence sur 61 niveaux, Bardet et al. Icarus 2021)''' - XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
- ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
- IOIPSL revision 310&amp;lt;br /&amp;gt;&lt;br /&gt;
- FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2005 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
'''Saturne (simulation avec la GWD paramétrisation sur 61 niveaux, chapitre 6 PhD Bardet)''' - XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
- ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
- IOIPSL revision 310&amp;lt;br /&amp;gt;&lt;br /&gt;
- FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2213 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
'''Saturne (simulation sur 96 niveaux, Bardet et al. Nature Astronomy 2022)''' - XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
- ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
- IOIPSL revision 431&amp;lt;br /&amp;gt;&lt;br /&gt;
- FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2305 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
'''Saturne (simulation avec la GWD paramétrisation sur 96 niveaux, chapitre 6 PhD Bardet)''' - XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
- ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
- IOIPSL revision 431&amp;lt;br /&amp;gt;&lt;br /&gt;
- FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2403 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
'''Uranus &amp;amp;amp; Neptune (old version)''' - XIOS revision 1944 - ICOSAGCM revision 765 - IOIPSL revision 431 - FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2413 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
'''Uranus &amp;amp;amp; Neptune (new version)''' - XIOS revision 2203 - ICOSAGCM revision (20/08/2021) - IOIPSL revision 450 - FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2555 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
'''Jupiter, Saturne, Uranus &amp;amp;amp; Neptune [OCCIGEN VERSION]''' - XIOS revision 2319 - ICOSAGCM revision (90f7138a60ebd3644fbbc42bc9dfa22923386385) - IOIPSL revision 453 - FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2655 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
'''Jupiter, Saturne, Uranus &amp;amp;amp; Neptune [IRENE VERSION]''' - XIOS revision 2399 - ICOSAGCM revision (4fbd393a9051fd9c1a5b662683f6ad8d0dc2867c) - IOIPSL revision 6234 - FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
- Physics revision 2842 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
== B) Run 1D ==&lt;br /&gt;
&lt;br /&gt;
Pour une simulation 1D, 1 seul CPU suffit.&lt;br /&gt;
&lt;br /&gt;
To run on Occigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sbatch job_mpi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run on Irene:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccc_msub job_mpi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see evolution of your job on Occigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;squeue -u username&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see evolution of your job on Irene:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccc_mpp -u username&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To kill your job on Occigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scancel id_of_your_job&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To kill your job on Irene:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccc_mdel id_of_your_job&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois que votre simulation est fini, lancer le script python printapbp.py qui vous permettra d'obtenir les fichiers apbp.txt et temp_profile.txt nécessaires pour les simulations en 3D.&lt;br /&gt;
&lt;br /&gt;
== C) Run 3D ==&lt;br /&gt;
&lt;br /&gt;
Pour lancer une première simulation, il faut tout d'abord le faire une seule fois dans le dossier makestart de l'un des dossiers jupiter, saturne, uranus ou neptune. Ce dernier permettra de créer les premiers fichiers restart_icosa.nc et restartfi.nc. Ensuite, il suffit revenir dans le dossier parent (jupiter, saturne, uranus, neptune) et de lancer ses simulations.&lt;br /&gt;
&lt;br /&gt;
=== - MPI ===&lt;br /&gt;
&lt;br /&gt;
Avant de lancer une simulation, il est nécessaire de déterminer - le nombre de procs - le nombre de noeuds&lt;br /&gt;
&lt;br /&gt;
Il faut avant tout savoir qu'il y a 10 x nsplit_i x nsplit_j domaines. Ces domaines sont divisés en plusieurs cellules. Il y a (nbp)²/(nsplit_i x nsplit_j) cellules par domaine. Ce nombre est égal au nombre de MPI process.&lt;br /&gt;
&lt;br /&gt;
Il est important de ne pas faire des tuiles &amp;amp;quot;trop petites&amp;amp;quot; et donc de garder nsplit_i et nsplit_j tels que nbp/nsplit_{i,j} &amp;amp;gt;=10-15 (plutôt 15). Car il y a des calculs &amp;amp;quot;redondants&amp;amp;quot; faits sur les bords du domaine. Admettons que ton domaine soit 10 x 10 (100 cellules par domaine). Le nombre de cellules au bord du domaine est égal à 2 x nsplit_i + 2 x nsplit_j - 4. Dans ce cas, le nombre de cellules au bord est de 36. Cela signifie que le bord du domaine correspond à 36% du domaine (36 points sur 100). Si le domaine est 15 x 15, alors le bord du domaine n'est plus que de 24.8 %. On aimerait avoir des domaines les plus grands possibles mais il faut aussi voir que chaque cellule correspond à une colonne à résoudre... Et c'est là ou il faut expérimenter un peu pour trouver l'optimum entre le nombre total de proc à employer et le gain effectif (temps total &amp;amp;quot;facturé&amp;amp;quot; au vu du nombre de procs monopolisés pour une simu donnée). Ehouarn&lt;br /&gt;
&lt;br /&gt;
Il faut au total que le nombre de procs soit égal à 10 x nsplit_i x nsplit_j qu'il faut répartir entre les noeuds.&lt;br /&gt;
&lt;br /&gt;
Pour les noeuds, il faut tenir compte qu'un noeud sur Occigen, c'est 24 (ou 28) procs. Disons 24. Quand on demande N procs, le système te donne M noeuds, soit M X 24 procs (les noeuds ne sont pas partagés avec d'autres applications). Et bien sûr on te facturera ces M noeuds, même si tu n'utilises pas tous les procs. Donc il faut s'efforcer de tomber juste et demander un multiple de 24 procs. Même raisonement si tu demandes à utiliser des noeuds de 28 procs.&lt;br /&gt;
&lt;br /&gt;
Par exemple, nsplit_i = 4 et nsplit_j = 6. 4 x 6 est égal à 24. On utilisera donc 10 noeuds pour avoir 240 nprocs.&lt;br /&gt;
&lt;br /&gt;
Prenons un autre exemple. nsplit_i = 5 et nsplit_j = 6. 5x6 = 30 Or il y a 24 procs par noeuds. Il faudra utiliser 13 noeuds. Et ce ne sont pas 300 procs qui seront facturés au total mais 312.&lt;br /&gt;
&lt;br /&gt;
Mais comme vu plus haut, en fonction de la configuration de tes domaines, il est possible que le 2nd exemple coûte moins cher en heure CPU que le 1er exemple car il sera plus rapide.&lt;br /&gt;
&lt;br /&gt;
=== - OpenMP / MPI ===&lt;br /&gt;
&lt;br /&gt;
Dans le cas mixte OpenMP/MPI, il est nécessaire de renseigner le nombre de tâche OpenMP et de MPI threads. Dans le script pour le job, on a :&lt;br /&gt;
&lt;br /&gt;
cpus-per-task et OMP_NUM_THREADS correspondent au nombre de tâche OpenMP ntask-per-node correspond au nombre de tâche par noeud&lt;br /&gt;
&lt;br /&gt;
Pour déterminer la configuration à utiliser en OpenMP/MPI, il faut respecter ces règles: - ntask-per-node x nodes correspond au nombre total de MPI threads qu'il devrait y avoir (c'est-à-dire dans le cas MPI seul). - cpus-per-task x ntask-per-node doit être égale ou inférieur au nombre de procs par noeuds (24 ou 28- sur Occigen) - cpus-per-task devrait être ~égal au nombre de niveaux verticaux / 10 - OMP_NUM_THREADS doit être égal au cpus-per-task - omp_level_size (dans le fichier run_icosa.def) devrait être ~égal au nombre de cpus-per-task. (dans le cas MPI seul, il faut le laisser égal à 1)&lt;br /&gt;
&lt;br /&gt;
Au total, le nombre total de nprocs est égal à cpus-per-task x ntask-per-node x nodes&lt;br /&gt;
&lt;br /&gt;
En reprenant le premier exemple MPI (on suppose qu'on a 40 niveaux verticaux), on aura - cpus-per-task = 4 - ntask-per-norde = 6 On a bien cpus-per-task x ntask-per-norde &amp;amp;lt;= 24. Le nombre de noeuds doit être égal à 40 car 6x40 = 240 nprocs MPI Le nombre de procs qu'on utilisera au total sera de 960.&lt;br /&gt;
&lt;br /&gt;
=== - Comment déterminer le nombre d'heure CPU (consommation en heure)? ===&lt;br /&gt;
&lt;br /&gt;
Heures CPU = durée_de_la_simu X nombre de procs total facturé&lt;br /&gt;
&lt;br /&gt;
Si on veut connaître le nombre d'heure CPU qu'on consommera à partir d'un test, voici le calcul&lt;br /&gt;
&lt;br /&gt;
Heures CPU = durée_de_la_simu_test X nombre de procs total facturé X nombre de jour qu'on veut simulé / (nombre de jour simulées pendant la simu test)&lt;br /&gt;
&lt;br /&gt;
== D) Optimisation ==&lt;br /&gt;
&lt;br /&gt;
Pour savoir quelle est la meilleure configuration en MPI seul, en OpenMP/MPI et entre les 2, des tests ont été effectués. Ces tests ont été réalisés sur Uranus à nbp80 sur les noeuds Broadwell (28 procs par noeud). 1000 jours uraniens ont été simulés à chaque fois.&lt;br /&gt;
&lt;br /&gt;
'''MPI:''' [[File:fig1.png]]&lt;br /&gt;
&lt;br /&gt;
'''OpenMP/MPI:''' [[File:fig2.png]]&lt;br /&gt;
&lt;br /&gt;
La comparaison du MPI seul et du mixte OpenMP/MPI permet de tirer la conclusion que le mixte OpenMP/MPI est beaucoup plus rapide (facteur 2.5 à 3) mais consomme plus (facteur 1.1 à 1.7).&lt;br /&gt;
&lt;br /&gt;
[[File:fig3.png]]&lt;br /&gt;
&lt;br /&gt;
== E) Visualizing the output files ==&lt;br /&gt;
&lt;br /&gt;
=== - Comment comparer deux fichiers? file1.nc file2.nc ===&lt;br /&gt;
&lt;br /&gt;
ncdiff file1.nc file2.nc output.nc&lt;br /&gt;
&lt;br /&gt;
=== - Comment coller plusieurs fichiers file1.nc file2.nc file3.nc ===&lt;br /&gt;
&lt;br /&gt;
ncrcat file1.nc file2.nc file3.nc output.nc&lt;br /&gt;
&lt;br /&gt;
Avec juste la vitesse u et v: ncrcat -v u -v v file1.nc file2.nc file3.nc output.nc&lt;br /&gt;
&lt;br /&gt;
Avec tous les fichiers fileXXX.nc disponibles ncrcat file*.nc output.nc&lt;br /&gt;
&lt;br /&gt;
=== - Comment tracer les champs et divers diagnostics en moyenne zonale? ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;mettre à jour planetoplot et planets&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;utiliser precast.py dans planetoplot/examples/ppclass_additional/dynanalysis&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;changer les options au début (il y a des exemples), exemple pour Saturne&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;fileAP=&amp;quot;Xhistins_42.nc&amp;quot;&lt;br /&gt;
p_upper,p_lower,nlev = 4.0e2,2.5e5,40&lt;br /&gt;
targetp1d = np.logspace(np.log10(p_lower),np.log10(p_upper),nlev)&lt;br /&gt;
myp = planets.Saturn&lt;br /&gt;
day_per_year = 24430.&lt;br /&gt;
short = False&lt;br /&gt;
includels = False&lt;br /&gt;
charx = &amp;quot;0,360&amp;quot;&lt;br /&gt;
ispressure = False&lt;br /&gt;
vartemp = &amp;quot;temperature&amp;quot;&lt;br /&gt;
outfile = &amp;quot;precast.nc&amp;quot;&lt;br /&gt;
nopole = True&amp;lt;/source&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Il faut que apbp.txt soit présent !&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Le résultat se trouve dans le fichier indiqué dans outfile.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== F) Debug ==&lt;br /&gt;
&lt;br /&gt;
=== - Pour debugger ===&lt;br /&gt;
&lt;br /&gt;
Réglez &amp;lt;code&amp;gt;info_level&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; dans le fichier &amp;lt;code&amp;gt;iodef.xml&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
=== - Erreur en début de run, SEGMENTATION FAULT dans la routine &amp;lt;code&amp;gt;advect.f90&amp;lt;/code&amp;gt; (ICOSAGCM/ppsrc/transport) au niveau de l'appel à &amp;lt;code&amp;gt;cross_product2&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
La routine &amp;lt;code&amp;gt;cross_product2&amp;lt;/code&amp;gt; effectue des produits vectoriels. Cette erreur vient du fait qu'en essayant de faire des optimisations de calcul, le compilateur se prend &amp;amp;quot;les pieds dans le tapis&amp;amp;quot; et ne sait plus faire le produit vectoriel. Pour empêcher le compilateur de faire des optimisations trop poussées, il faut ajouter l'option &amp;lt;code&amp;gt;-fp-model strict&amp;lt;/code&amp;gt; au niveau du mot-clé &amp;lt;code&amp;gt;%BASE_FFLAGS&amp;lt;/code&amp;gt; dans tous les fichiers &amp;lt;code&amp;gt;.fcm&amp;lt;/code&amp;gt; du modèle (LMDZ.COMMON / ICOSAGCM / ICOSA_LMDZ).&lt;br /&gt;
&lt;br /&gt;
== G) Pas de radiatif et perturbations ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;faire descendre le modèle&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;modifier le code pour perturbations vitesse et pas température&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;compiler (voir README.md)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;changer dans callphys.def (dans saturn/makestart)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;surfalbedo = 1.0&lt;br /&gt;
surfemis = 0.0&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;changer dans callphys.def (dans saturn '''et''' saturn/makestart)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;corrk      = .false.&lt;br /&gt;
enertest  = .true.&lt;br /&gt;
randompert = 1&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;voir si on garde le flux interne ou non (&amp;lt;code&amp;gt;intheat&amp;lt;/code&amp;gt;)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;refaire les états initiaux (dans makestart)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;faire un run court pour voir sur les spectres l'injection d'Ek&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== H) PROFILING with DYNAMICO-Giant ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;-pg&amp;lt;/code&amp;gt;: Generate extra code to write profile information suitable for analysis program &amp;lt;code&amp;gt;gprof&amp;lt;/code&amp;gt;. You must use this option when compiling the sources files you want data about and you must '''also use it when linking'''. 1. For DYNAMICO-Giant: in the arch.fcm file of each part of the model (ICOSAGCM, ICOSA_LMDZ, LMDZ.COMMON and XIOS), you have to add the option &amp;lt;code&amp;gt;-pg&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;%PROD_FFLAGS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%BASE_LD&amp;lt;/code&amp;gt; 2. Compile as usual 3. Execute your code as usual 4. Run &amp;lt;code&amp;gt;gprof&amp;lt;/code&amp;gt; tool:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    gprof icosa_lmdz.exe goon.out &amp;amp;gt; analysis.txt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= OLD WIKI (DEPRECATED, JUST FOR REFERENCE/INFORMATION) =&lt;br /&gt;
&lt;br /&gt;
``Welcome to the dynamico-giant wiki!&lt;br /&gt;
&lt;br /&gt;
== pour debugger ==&lt;br /&gt;
&lt;br /&gt;
régler &amp;lt;code&amp;gt;info_level&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; dans le fichier &amp;lt;code&amp;gt;iodef.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== pourquoi diurnal=.false. ==&lt;br /&gt;
&lt;br /&gt;
le temps radiatif est beaucoup plus long sur les géantes&lt;br /&gt;
&lt;br /&gt;
== comment changer la fréquence d'appel à la physique? ==&lt;br /&gt;
&lt;br /&gt;
il faut changer à ''deux endroits'' en réglant la même valeur - dans run_icosa.def, changer itau_physics - dans run.def, changer iphysiq ces paramètres sont exprimés en pas de temps dynamique. pour appeler la physique à chaque pas de temps dynamique, régler ces paramètres à 1&lt;br /&gt;
&lt;br /&gt;
== comment changer la résolution ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/aymeric-spiga/dynamico-giant/commit/f39e3b651c19cefb26da72ab77933520ff8f27f5 voir lien ici]&lt;br /&gt;
&lt;br /&gt;
== comment choisir le nombre de processeurs pour la résolution ==&lt;br /&gt;
&lt;br /&gt;
voir commentaires sur run_icosa.def&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;###########################################&lt;br /&gt;
## There must be less MPIxOpenMP processes than the 10 x nsplit_i x nsplit_j tiles&lt;br /&gt;
## typically for pure MPI runs, let nproc = 10 x nsplit_i x nsplit_j&lt;br /&gt;
## it is better to have nbp/split &amp;amp;gt;~ 10&lt;br /&gt;
###########################################&lt;br /&gt;
#### 40 noeuds de 24 processeurs = 960 procs&lt;br /&gt;
nsplit_i=12&lt;br /&gt;
nsplit_j=8&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ehouarn: ''Une règle à suivre est de ne pas faire des tuiles &amp;amp;quot;trop petites&amp;amp;quot; et donc de garder nbsplit_i et nbsplit_j tels que nbp/nbsplit &amp;amp;gt;=10-15 (plutôt 15). Car il y a des calculs &amp;amp;quot;redondants&amp;amp;quot; faits sur les bords du domaine. Or si ton domaine est 10''10, le bord du domaine c'est 38% du domaine (38 points sur le bord pour 100 points en tout) alors que si ton domaine est 15''15, le bord du domaine n'est plus que 56/(15''15) = 25.7%. 56=2''15+2''13 (pour ne pas compter 2 fois les coins). On voudrait du coup des domaine les plus grand possible, clairement, mais il faut aussi voir que chaque domaine c'est nbp''nbp colonnes à résoudre sur ce même proc... Et c'est là ou il faut expérimenter un peu pour trouver l'optimum entre le nombre total de proc à employer et le gain effectif (temps total &amp;amp;quot;facturé&amp;amp;quot; au vu du nombre de procs monopolisés pour une simu donnée).''&lt;br /&gt;
&lt;br /&gt;
_Pour les noeuds, il faut tenir compte qu'un noeud sur Occigen, c'est 24 (ou 28) procs. Disons 24. Quand on demande N procs, le système te donne M noeuds, soit M*24 procs (les noeuds ne sont pas partagés avec d'autres applications). Et bien sûr on te facturera ces M noeuds, même si tu n'utilises pas tous les procs. Donc il faut s'efforcer de tomber juste et demander un multiple de 24 procs. Même raisonement si tu demandes à utiliser des noeuds de 28 procs._&lt;br /&gt;
&lt;br /&gt;
== comment changer la rotation? ==&lt;br /&gt;
&lt;br /&gt;
dans saturn_const.def, changer le taux de rotation jamais testé avec 0, mais pourrait créer des problèmes (ex: beta) ''vérifier que omega dans saturn_const.def n'intervient pas dans la physique LMDZ.GENERIC/libf/phystd/''&lt;br /&gt;
&lt;br /&gt;
== la dissipation c'est où? ==&lt;br /&gt;
&lt;br /&gt;
laplacien itéré: hyperviscosity - tau_graddiv,tau_gradrot,tau_divgrad: periode (plus c'est petit, plus la dissipation est efficace) - nitergdiv,nitergrot,niterdivgrad: ordre du laplacien (plus c'est grand, plus on dissipe sélectivement les petites échelles)&lt;br /&gt;
&lt;br /&gt;
== comment changer la grille cible du remapping on-the-fly ==&lt;br /&gt;
&lt;br /&gt;
dans context_lmdz_physics.xml changer les paramètres ni_glo et nj_glo par exemple pour remapper sur du lat/lon à 360 pts en latitude et 720 pts en longitude (0.5°) &amp;lt;domain id=&amp;quot;dom_regular&amp;quot; ni_glo=&amp;quot;720&amp;quot; nj_glo=&amp;quot;360&amp;quot; type=&amp;quot;rectilinear&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Forcer XIOS à écrire tous les .... ==&lt;br /&gt;
&lt;br /&gt;
Il faut utiliser l'attribut (ici par ex pour forcer l'écriture tous les ts (==time step) ; d'autres délais doivent être possible): &amp;lt;code&amp;gt;sync_freq=&amp;amp;quot;1ts&amp;amp;quot;&amp;lt;/code&amp;gt; dans le &amp;lt;code&amp;gt;&amp;amp;lt;file id=... .... &amp;amp;gt;&amp;lt;/code&amp;gt; concerné.&lt;br /&gt;
&lt;br /&gt;
== comment changer le bottom du modele ==&lt;br /&gt;
&lt;br /&gt;
* refaire tourner le 1D&lt;br /&gt;
** changer la pression &amp;lt;code&amp;gt;psurf&amp;lt;/code&amp;gt; dans rcm1d.def&lt;br /&gt;
** changer &amp;lt;code&amp;gt;ichoice=1&amp;lt;/code&amp;gt; et changer &amp;lt;code&amp;gt;tref&amp;lt;/code&amp;gt; (ex: 10b: 330K)&lt;br /&gt;
* refaire tourner le 3D (avec makestart) en changeant &amp;lt;code&amp;gt;preff&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;saturn_const.def&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comment changer la fréquence de sortie des Xhistins.nc ==&lt;br /&gt;
&lt;br /&gt;
les commandes XIOS sont appelées depuis la physique (dans la config présente) dans context_lmdz_physics.xml il suffit de changer output_freq ''attention'' ts se comprend comme le pas de temps physique (voir donc dans run_icosa.def les paramètres dt et itau_physics pour le connaître) par exemple, pour des sorties tous les 20 jours Saturne&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;file id=&amp;quot;histins&amp;quot;&lt;br /&gt;
      name=&amp;quot;Xhistins&amp;quot;&lt;br /&gt;
      output_freq=&amp;quot;40ts&amp;quot;&lt;br /&gt;
      type=&amp;quot;one_file&amp;quot;&lt;br /&gt;
      enabled=&amp;quot;.true.&amp;quot;&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
== pas de radiatif et perturbations ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;faire descendre le modèle&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;modifier le code pour perturbations vitesse et pas température&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;compiler (voir README.md)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;changer dans callphys.def (dans saturn/makestart)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;surfalbedo = 1.0&lt;br /&gt;
surfemis = 0.0&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;changer dans callphys.def (dans saturn '''et''' saturn/makestart)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;corrk      = .false.&lt;br /&gt;
enertest  = .true.&lt;br /&gt;
randompert = 1&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;voir si on garde le flux interne ou non (&amp;lt;code&amp;gt;intheat&amp;lt;/code&amp;gt;)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;refaire les états initiaux (dans makestart)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;faire un run court pour voir sur les spectres l'injection d'Ek&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== comment comparer deux fichiers? file1.nc file2.nc ==&lt;br /&gt;
&lt;br /&gt;
ncdiff file1.nc file2.nc output.nc&lt;br /&gt;
&lt;br /&gt;
== comment coller plusieurs fichiers file1.nc file2.nc file3.nc ==&lt;br /&gt;
&lt;br /&gt;
ncrcat file1.nc file2.nc file3.nc output.nc avec juste la vitesse u et v ncrcat -v u -v v file1.nc file2.nc file3.nc output.nc avec tous les fichiers fileXXX.nc disponibles ncrcat file*.nc output.nc&lt;br /&gt;
&lt;br /&gt;
== comment tracer les champs et divers diagnostics en moyenne zonale? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;mettre à jour planetoplot et planets&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;utiliser precast.py dans planetoplot/examples/ppclass_additional/dynanalysis&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;changer les options au début (il y a des exemples), exemple pour Saturne&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;fileAP=&amp;quot;Xhistins_42.nc&amp;quot;&lt;br /&gt;
p_upper,p_lower,nlev = 4.0e2,2.5e5,40&lt;br /&gt;
targetp1d = np.logspace(np.log10(p_lower),np.log10(p_upper),nlev)&lt;br /&gt;
myp = planets.Saturn&lt;br /&gt;
day_per_year = 24430.&lt;br /&gt;
short = False&lt;br /&gt;
includels = False&lt;br /&gt;
charx = &amp;quot;0,360&amp;quot;&lt;br /&gt;
ispressure = False&lt;br /&gt;
vartemp = &amp;quot;temperature&amp;quot;&lt;br /&gt;
outfile = &amp;quot;precast.nc&amp;quot;&lt;br /&gt;
nopole = True&amp;lt;/source&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Il faut que apbp.txt soit présent !&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;le résultat se trouve dans le fichier indiqué dans outfile&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== bilan de moment cinétique ==&lt;br /&gt;
&lt;br /&gt;
dans run_icosa.def&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;check_conservation = detailed &lt;br /&gt;
itau_check_conserv = 160&amp;lt;/pre&amp;gt;&lt;br /&gt;
le itau_check_conserv est comme itau_physics pour que la contribution de la physique à AAM ne soit pas nulle. de plus il est coûteux d'appeler les diagnostics trop souvent.&lt;br /&gt;
&lt;br /&gt;
S. Lebonnois, C. Covey, A. Grossman, H. Parish, G. Schubert, R. Walterscheid, P. Lauritzen, and C. Jablonowski. Angular momentum budget in General Circulation Models of superrotating atmospheres: A critical diagnostic. Journal of Geophysical Research (Planets), 117:E12004, 2012.&lt;br /&gt;
&lt;br /&gt;
P. H. Lauritzen, J. T. Bacmeister, T. Dubos, S. Lebonnois, and M. A. Taylor. Held-Suarez simulations with the Community Atmosphere Model Spectral Element (CAM-SE) dynamical core: A global axial angular momentum analysis using Eulerian and floating Lagrangian vertical coordinates. Journal of Advances in Modeling Earth Systems, 6:129-140, 2014.&lt;br /&gt;
&lt;br /&gt;
== XIOS server ou client ==&lt;br /&gt;
&lt;br /&gt;
# XIOS client &amp;lt;code&amp;gt;use_server=False&amp;lt;/code&amp;gt; Broadwell 24 processeurs sur 28&lt;br /&gt;
# XIOS server &amp;lt;code&amp;gt;use_server=true&amp;lt;/code&amp;gt; Broadwell 24 processurs sur 28 + 4 processeurs pour XIOS&lt;br /&gt;
&lt;br /&gt;
cas 1 est 3 min plus lent que cas 2 -- sur 2h20...! parce qu'on fait peu de sorties&lt;br /&gt;
&lt;br /&gt;
== Optimisation ==&lt;br /&gt;
&lt;br /&gt;
# 40 noeuds au lieu de 50 noeuds, même temps de calcul...! Testé dans la branche https://github.com/aymeric-spiga/dynamico-giant/tree/work_61levels&lt;br /&gt;
# &amp;lt;code&amp;gt;sync_freq=40ts&amp;lt;/code&amp;gt; (ou multiple de, si 40ts est la fréquence d'écriture) dans context_lmdz_physics.xml doit être inclus sinon il n'est pas réglé et XIOS transfère tout à la fin du run ce qui prend du temps (et peut occasionner des problèmes de mémoire)&lt;br /&gt;
&lt;br /&gt;
== Versions fonctionnelles de dynamico-giant ==&lt;br /&gt;
&lt;br /&gt;
=== Jupiter ===&lt;br /&gt;
&lt;br /&gt;
* XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ICOSAGCM revision 756&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* IOIPSL revision 339&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Physics revision 2228 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
but check Physics version 2142 and 2180&lt;br /&gt;
&lt;br /&gt;
=== Saturne (référence Spiga 2020, à vérifier) ===&lt;br /&gt;
&lt;br /&gt;
* DYNAMICO --&amp;amp;gt; Revision: 756&lt;br /&gt;
* PHYSICS --&amp;amp;gt; Revision: 2005&lt;br /&gt;
* XIOS --&amp;amp;gt; Revision: 1583&lt;br /&gt;
* IOIPSL --&amp;amp;gt; Revision: 310?&lt;br /&gt;
&lt;br /&gt;
=== Saturne (simulation de référence sur 61 niveaux, Bardet et al. Icarus 2021) ===&lt;br /&gt;
&lt;br /&gt;
* XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* IOIPSL revision 310&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Physics revision 2005 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
=== Saturne (simulation avec la GWD paramétrisation sur 61 niveaux, chapitre 6 PhD Bardet) ===&lt;br /&gt;
&lt;br /&gt;
* XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* IOIPSL revision 310&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Physics revision 2213 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
=== Saturne (simulation sur 96 niveaux, Bardet et al. Nature Astronomy 2022) ===&lt;br /&gt;
&lt;br /&gt;
* XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* IOIPSL revision 431&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Physics revision 2305 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
=== Saturne (simulation avec la GWD paramétrisation sur 96 niveaux, chapitre 6 PhD Bardet) ===&lt;br /&gt;
&lt;br /&gt;
* XIOS revision 1583&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ICOSAGCM revision 765&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* IOIPSL revision 431&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Physics revision 2403 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
=== Uranus &amp;amp;amp; Neptune (old version) ===&lt;br /&gt;
&lt;br /&gt;
* XIOS revision 1944&lt;br /&gt;
* ICOSAGCM revision 765&lt;br /&gt;
* IOIPSL revision 431&lt;br /&gt;
* FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Physics revision 2413 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
=== Uranus &amp;amp;amp; Neptune (new version) ===&lt;br /&gt;
&lt;br /&gt;
* XIOS revision 2203&lt;br /&gt;
* ICOSAGCM revision (20/08/2021)&lt;br /&gt;
* IOIPSL revision 450&lt;br /&gt;
* FCM_V1.2 revision 12&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Physics revision 2555 (LMDZ.COMMON, LMDZ.GENERIC, ICOSA_LMDZ, ARCH)&lt;br /&gt;
&lt;br /&gt;
works on 03/03/2022 for all HEAD&lt;br /&gt;
&lt;br /&gt;
== Les fichiers d'architecture (Installation sur un nouveau cluster) ==&lt;br /&gt;
&lt;br /&gt;
En pratique LMDZ.COMMON, ICOSA_LMDZ et IOIPSL peuvent utiliser exactement le même fichier arch.fcm ; mais celui pour ICOSAGCM est légèrement différent (les %FPP_DEF diffèrent, peut-être aussi le %FPP).&lt;br /&gt;
&lt;br /&gt;
make_icosa_lmdz doit être lancé avec -arch_path ../ARCH puisque les arch.env et arch.path communs se trouvent dans ../ARCH (l'option -arch_path ne concerne d'ailleurs que les fichiers arch.env et arch.path; le fichier arch.fcm recherché sera toujours celui dans le &amp;amp;quot;arch&amp;amp;quot; de chacun des modèles. Donc il faut bien mettre pour chacun des quatre modèles (LMDZ.COMMON, ICOSA_LMDZ,IOIPSL et ICOSAGCM) le arch.fcm dans le sous-dossier arch/ du modèle correspondant.&lt;br /&gt;
&lt;br /&gt;
XIOS est écrit en C++, et pas en Fortran. Le fichier arch.fcm correspondant est donc nécessairement différent de celui des quatre autres modèles. Pour créér ce arch.fcm, prendre exemple sur les fichiers .fcm déjà présent dans XIOS/arch/, avec une architecture similaire à celle du nouveau cluster. En particulier, il faut utiliser des versions de gcc/gfortran &amp;amp;gt; 6+. Il faut absolument avoir une bibliothèque HDF5 compilée en parallèle, ainsi que netcdf-C et netcdf-fortran (et peut être aussi netcdf-Cxx) compilé en parallèle. Sans ça, il sera peut-être possible de compiler le modèle, mais pas de lancer une simulation en utilisant XIOS.&lt;br /&gt;
&lt;br /&gt;
== Commencer une nouvelle simulation en utilisant le schéma des panaches thermiques ==&lt;br /&gt;
&lt;br /&gt;
# Comme pour toutes nouvelles simulations, il faut commencer par un run 1D de plusieurs décennies permettant d'obtenir un profil de température (&amp;lt;code&amp;gt;temp_profile.txt&amp;lt;/code&amp;gt;) et les coefficients ap et bp (&amp;lt;code&amp;gt;apbp.txt&amp;lt;/code&amp;gt;) en équilibre radiatif-convectif pour la planète que l'on étudie. Ce run 1D s'effectue dans les dossiers jupiter1d, saturn1d, neptune1d et/ou uranus1d, avec ces options pour le callphys.def :&lt;br /&gt;
&lt;br /&gt;
callrad = true calladj = true tous les autres mots clés à false (y compris &amp;lt;code&amp;gt;calltherm&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Faire un &amp;amp;quot;makestart&amp;amp;quot; run : permet d'obtenir les fichiers restart à partir du profil de température initial. Il s'agit du run dont l'état initial est le profil de température créé par run 1D (&amp;lt;code&amp;gt;temp_profile.txt&amp;lt;/code&amp;gt; est appliquer à chaque point de grille horizontale du modèle). L'état initial est ainsi une planète isotherme horizontalement mais qui varie verticalement. Pour ce run, aucun traceur ne va être utilisé dans le modèle. Néanmoins, il faut renseigner au modèle le nombre de traceurs que nous souhaitons utiliser avec le schéma des panaches thermiques afin qu'il puisse créer la dimension nq et le champ q dans les fichiers &amp;lt;code&amp;gt;restart_icosa.nc&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;restartfi.nc&amp;lt;/code&amp;gt;. dans '''callphys.def''' :&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;          traceur = true&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;dans '''run_icosa.def''' : &amp;lt;code&amp;gt;nqtot = 2&amp;lt;/code&amp;gt; (par exemple, h2o_vap et h2o_ice) dans '''traceur.def''' :&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;           2&lt;br /&gt;
           h2o_vap&lt;br /&gt;
           h2o_ice&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Ajout des quantités pour chaque traceur. Ici, nous ajoutons les profils pour chacun des traceurs dans les fichiers &amp;lt;code&amp;gt;restart_icosa.nc&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;restartfi.nc&amp;lt;/code&amp;gt; &amp;amp;quot;à la main&amp;amp;quot; en utilisant le programme python &amp;lt;code&amp;gt;/processing_codes/tracer_settings.py&amp;lt;/code&amp;gt; pour obtenir des fichiers restart avec la bonne abondance d'eau dans le cas présent.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commencer la simulation : Il ne reste plus qu'à lancer la simulation 3D avec les nouveaux fichiers restart et les réglages suivant : dans '''callphys.def''' :&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;            traceur = true&lt;br /&gt;
            calltherm = true&lt;br /&gt;
            # thermal plume model options:&lt;br /&gt;
            divmpl = true&lt;br /&gt;
            r_aspect_thermals = 2.0&lt;br /&gt;
            tau_thermals      = 0.0&lt;br /&gt;
            betalpha          = 0.9&lt;br /&gt;
            afact             = 0.7&lt;br /&gt;
            fact_epsilon      = 2.e-4&lt;br /&gt;
            alpha_max         = 0.7&lt;br /&gt;
            fomass_max        = 0.5&lt;br /&gt;
            pres_limit        = 2.e5&lt;br /&gt;
            water             = true&lt;br /&gt;
            watercond         = true&lt;br /&gt;
            waterain          = true&lt;br /&gt;
            evap_prec         = true&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dans '''run_icosa.def''' : &amp;lt;code&amp;gt;nqtot = 2&amp;lt;/code&amp;gt; dans '''traceur.def''' :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;               2&lt;br /&gt;
               h2o_vap&lt;br /&gt;
               h2o_ice&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, ajouter la déclaration et l'écriture des variables relatives à l'utilisation du schéma des thermiques (&amp;lt;code&amp;gt;h2o_vap&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2o_ice&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;w_plm&amp;lt;/code&amp;gt;) dans les fichiers XML de la physique.&lt;br /&gt;
&lt;br /&gt;
== Erreur en début de run, SEGMENTATION FAULT dans la routine &amp;lt;code&amp;gt;advect.f90&amp;lt;/code&amp;gt; (ICOSAGCM/ppsrc/transport) au niveau de l'appel à &amp;lt;code&amp;gt;cross_product2&amp;lt;/code&amp;gt;. ==&lt;br /&gt;
&lt;br /&gt;
La routine &amp;lt;code&amp;gt;cross_product2&amp;lt;/code&amp;gt; effectue des produits vectoriels. Cette erreur vient du fait qu'en essayant de faire des optimisations de calcul, le compilateur se prend &amp;amp;quot;les pieds dans le tapis&amp;amp;quot; et ne sait plus faire le produit vectoriel. Pour empêcher le compilateur de faire des optimisations trop poussées, il faut ajouter l'option &amp;lt;code&amp;gt;-fp-model strict&amp;lt;/code&amp;gt; au niveau du mot-clé &amp;lt;code&amp;gt;%BASE_FFLAGS&amp;lt;/code&amp;gt; dans tous les fichiers &amp;lt;code&amp;gt;.fcm&amp;lt;/code&amp;gt; du modèle (LMDZ.COMMON / ICOSAGCM / ICOSA_LMDZ)&lt;br /&gt;
&lt;br /&gt;
== Branche master version du 04/04/2022 dans le dossier Jupiter ==&lt;br /&gt;
&lt;br /&gt;
La version actuelle des fichiers de réglage dans le dossier Jupiter sont réglés pour utiliser des traceurs. Si vous souhaiter utiliser le modèle sans traceur, il vous faut modifier les fichiers suivants :&lt;br /&gt;
&lt;br /&gt;
run_icosa.def&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;        nqtot = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
traceur.def&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;        0&amp;lt;/pre&amp;gt;&lt;br /&gt;
context_dynamico.xml (ligne 125)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;         &amp;amp;lt;field id=&amp;amp;quot;q_start&amp;amp;quot; name=&amp;amp;quot;q&amp;amp;quot;  grid_ref=&amp;amp;quot;grid_q_start&amp;amp;quot; prec=&amp;amp;quot;8&amp;amp;quot;/&amp;amp;gt;   &amp;lt;/pre&amp;gt;&lt;br /&gt;
== PROFILING with DYNAMICO-Giant: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;-pg&amp;lt;/code&amp;gt;: Generate extra code to write profile information suitable for analysis program &amp;lt;code&amp;gt;gprof&amp;lt;/code&amp;gt;. You must use this option when compiling the sources files you want data about and you must '''also use it when linking'''. 1. For DYNAMICO-Giant: in the arch.fcm file of each part of the model (ICOSAGCM, ICOSA_LMDZ, LMDZ.COMMON and XIOS), you have to add the option &amp;lt;code&amp;gt;-pg&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;%PROD_FFLAGS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%BASE_LD&amp;lt;/code&amp;gt; 2. Compile as usual 3. Execute your code as usual 4. Run &amp;lt;code&amp;gt;gprof&amp;lt;/code&amp;gt; tool:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    gprof icosa_lmdz.exe goon.out &amp;amp;gt; analysis.txt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:DYNAMICO]]&lt;br /&gt;
[[Category:Generic-DYNAMICO]]&lt;/div&gt;</summary>
		<author><name>SandrineSaturne</name></author>	</entry>

	<entry>
		<id>http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php?title=The_traceur.def_Input_File&amp;diff=2136</id>
		<title>The traceur.def Input File</title>
		<link rel="alternate" type="text/html" href="http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php?title=The_traceur.def_Input_File&amp;diff=2136"/>
				<updated>2024-09-18T13:59:26Z</updated>
		
		<summary type="html">&lt;p&gt;SandrineSaturne: /* In 1D */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is it for? ==&lt;br /&gt;
&lt;br /&gt;
Tracers need to be listed in ''traceur.def''.&lt;br /&gt;
&lt;br /&gt;
Characteristics of the tracers can be also specified in ''traceur.def''.&lt;br /&gt;
&lt;br /&gt;
== What is a tracer? ==&lt;br /&gt;
&lt;br /&gt;
Tracers are elements which will be defined at each grid point and tracked in the model. They may interact with the atmosphere in different ways.&lt;br /&gt;
&lt;br /&gt;
The model may include different types of tracers:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;condensed species (e.g., CO2, H2O, dust)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;chemically active species&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;radiatively active gases (e.g., water vapor)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
In the code, all tracers are stored in one three-dimensional array q, the third index of&lt;br /&gt;
which corresponds to each individual tracer. In input &lt;br /&gt;
([https://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php/The_start.nc_and_startfi.nc_input_files ''start.nc'', ''startfi.nc''])&lt;br /&gt;
and output files tracers are stored separately using their individual names. Loading specific&lt;br /&gt;
tracers requires that the approriate tracer names are set in the ''traceur.def'' file, &lt;br /&gt;
and specific computations for given tracers (e.g. computing the water or CO2&lt;br /&gt;
cycles) is controlled by setting the corresponding options in the &lt;br /&gt;
[https://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php/The_callphys.def_Input_File ''callphys.def''] file.&lt;br /&gt;
&lt;br /&gt;
== File structure ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Old&amp;quot; version ===&lt;br /&gt;
&lt;br /&gt;
Number of tracers need to be specified, followed by tracers names. The following example will set up water tracers to compute water cloud and water cycle in general.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
h2o_vap&lt;br /&gt;
h2o_ice&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Modern&amp;quot; version ===&lt;br /&gt;
&lt;br /&gt;
An update version named '''ModernTrac-v1''' need to be used with chemistry in order to set up properly the chemical tracers. This gives also the opportunity to specify for each tracers specific characteristics.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ModernTrac-v1&lt;br /&gt;
#&lt;br /&gt;
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
# !! README !!&lt;br /&gt;
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
#  Welcome, this is the modern traceur.def !&lt;br /&gt;
# &lt;br /&gt;
#         ---&amp;gt; DON'T TOUCH/REMOVE THE FIRST LINE OF HEADER #ModernTrac-v1 &amp;lt;---&lt;br /&gt;
#&lt;br /&gt;
# * You can use this area to write as many comments as you want starting lines with #.&lt;br /&gt;
# * You cannot have comment lines in the middle nor at the end, only at the top.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# 0. Philosophy  This modern version of traceur.def gather in a single file what was&lt;br /&gt;
# ~~~~~~~~~~~~~  previously in traceur.def AND gases.def plus some hard-coded things.&lt;br /&gt;
#&lt;br /&gt;
# 1. Structure  After the header, first line is the total number of modern tracers in&lt;br /&gt;
# ~~~~~~~~~~~~  your file, ie not only tracers sent to dynamics, but also species that&lt;br /&gt;
#               takes part in the composition, radiative transfer, chemistry, etc.&lt;br /&gt;
#&lt;br /&gt;
#               Then, each line needs to start with the specie name ... and that's the&lt;br /&gt;
#               only mandatory information ! But you can specify all the options you&lt;br /&gt;
#               want in separate blocks following 'option=value', assuming this option&lt;br /&gt;
#               is defined in traceur_h.F90 &amp;amp; initracer.F for physics, infotrac.F90 &lt;br /&gt;
#               for dynamics or chimiedata_h.F90 &amp;amp; calchim_asis.F90 for chemistry.&lt;br /&gt;
#               Indeed this file is read once by dynamics, once by physics and once by&lt;br /&gt;
#               chemistry who keep only the information needed.&lt;br /&gt;
#&lt;br /&gt;
#               Note that by default a tracer listed below will be sent to dynamics&lt;br /&gt;
#               except if you specify is_dyn=0. If nothing is given, then is_dyn=1.&lt;br /&gt;
#               Not yet fully implemented.&lt;br /&gt;
#&lt;br /&gt;
# 3. Options.   Implemented options listed below.&lt;br /&gt;
# ~~~~~~~~~~~~  For dynamic see &amp;quot;infotrac.F90&amp;quot;.&lt;br /&gt;
#               For physic see &amp;quot;initracer.F90&amp;quot;.&lt;br /&gt;
#               For chemistry see &amp;quot;calchim_asis.F90&amp;quot;.&lt;br /&gt;
#                        init see &amp;quot;inichim_1D.F90&amp;quot; and &amp;quot;inichim_newstart.F90&amp;quot;&lt;br /&gt;
#&lt;br /&gt;
# Dynamic:      vadv           ! index of vertical trasport schema&lt;br /&gt;
#               hadv           ! index of horizontal trasport schema&lt;br /&gt;
#               tnom_transp    ! transporting fluid short name: CRisi&lt;br /&gt;
#&lt;br /&gt;
# Physic:       mmol           ! mole mass of tracer [g.mol-1]&lt;br /&gt;
#               aki            ! coefficient of thermal concduction&lt;br /&gt;
#               cpi            ! heat capacity [J.kg-1.K-1]&lt;br /&gt;
#               is_chim        ! 1 if tracer used in chemistry, else 0&lt;br /&gt;
#               is_rad         ! 1 if tracer used in radiative transfer, else 0&lt;br /&gt;
#               is_recomb      ! 1 if tracer used in recombining scheme, else 0&lt;br /&gt;
#                                (if 1, must have is_rad=1)&lt;br /&gt;
#               is_recomb_qset ! 1 if tracer k-corr assume predefined vmr, else 0&lt;br /&gt;
#                                (if 1, must have is_recomb=1)&lt;br /&gt;
#               is_recomb_qotf ! 1 if tracer recombination is done on-the-fly, else 0&lt;br /&gt;
#                                (if 1, must have is_recomb_qset=0)&lt;br /&gt;
#&lt;br /&gt;
# Chemistry:    SF_mode        ! 1 if surface set up value, else 2 sedimentation velocity&lt;br /&gt;
#               SF_value       ! [vmr] if SF_mode=1, else [cm.s-1]&lt;br /&gt;
#               prod_rate      ! if SF_mode=2 production flux [molecules.m-2.s-1]&lt;br /&gt;
#&lt;br /&gt;
#      init:    qx             ! value that initialize constant profile [vmr]&lt;br /&gt;
#               qxf            ! file that initialize profile [Pa,vmr] (1 line header)&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# Random Ex :&lt;br /&gt;
#               4&lt;br /&gt;
#               n2 is_dyn=0&lt;br /&gt;
#               co2 cpi=450.0 is_dyn=1 mmol=44.&lt;br /&gt;
#               hdo hadv=14 vadv=10 tnom_transp=air&lt;br /&gt;
#               h2s&lt;br /&gt;
#&lt;br /&gt;
# Insert your tracers list and options below !&lt;br /&gt;
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
29&lt;br /&gt;
h2o_ice                 mmol=18   &lt;br /&gt;
co2                     mmol=44   is_chim=1    SF_mode=1    SF_value=4.0e-4    is_rad=1&lt;br /&gt;
co                      mmol=28   is_chim=1&lt;br /&gt;
o                       mmol=16   is_chim=1&lt;br /&gt;
o1d                     mmol=16   is_chim=1&lt;br /&gt;
o2                      mmol=32   is_chim=1    SF_mode=1    SF_value=2.1e-1&lt;br /&gt;
o3                      mmol=48   is_chim=1    is_rad=1 is_recomb=1 is_recomb_qotf=1&lt;br /&gt;
h                       mmol=1    is_chim=1&lt;br /&gt;
h2                      mmol=2    is_chim=1&lt;br /&gt;
oh                      mmol=17   is_chim=1&lt;br /&gt;
ho2                     mmol=33   is_chim=1&lt;br /&gt;
h2o2                    mmol=34   is_chim=1&lt;br /&gt;
h2o_vap                 mmol=18   is_chim=1    is_rad=1&lt;br /&gt;
ch4                     mmol=16   is_chim=1    SF_mode=1    SF_value=1.8e-6    is_rad=1&lt;br /&gt;
ch3                     mmol=15   is_chim=1&lt;br /&gt;
cho                     mmol=29   is_chim=1&lt;br /&gt;
ch2o                    mmol=30   is_chim=1&lt;br /&gt;
ch3o                    mmol=31   is_chim=1&lt;br /&gt;
ch3o2                   mmol=47   is_chim=1&lt;br /&gt;
ch3o2h                  mmol=48   is_chim=1&lt;br /&gt;
n                       mmol=14   is_chim=1&lt;br /&gt;
no                      mmol=30   is_chim=1&lt;br /&gt;
no2                     mmol=46   is_chim=1&lt;br /&gt;
n2                      mmol=28   is_chim=1    is_rad=1&lt;br /&gt;
hno3                    mmol=63   is_chim=1&lt;br /&gt;
hno4                    mmol=79   is_chim=1&lt;br /&gt;
n2o                     mmol=44   is_chim=1    SF_mode=1    SF_value=3.3e-7&lt;br /&gt;
no3                     mmol=62   is_chim=1&lt;br /&gt;
n2o5                    mmol=108  is_chim=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Initialisation ==&lt;br /&gt;
&lt;br /&gt;
=== In 3D ===&lt;br /&gt;
&lt;br /&gt;
In 3D, the initial distribution of tracers is in the '''start.def''' file. In order to change it, you have to modify the '''start.def''', for example using newstart.&lt;br /&gt;
&lt;br /&gt;
=== In 1D ===&lt;br /&gt;
&lt;br /&gt;
In 1D, the initial distribution of each tracer can be read from a file named &amp;quot;'''profile_&amp;lt;tracer name&amp;gt;'''&amp;quot; (e.g. '''profile_h2o_vap''' for the water vapour initial profile), located in the run directory. This file has Nlayer + 1 lines (with Nlayer the number of horizontal layers): its first line is the surface value (in kg/m^2), and then each line is the value at the corresponding level (in kg/kg).&lt;br /&gt;
&lt;br /&gt;
For '''giant planets''', as there is no condensation at the surface and as we evaporate the condensates above the bottom of the model (we set the bottom level as deep as necessary for it to be a dry level), the total column of the tracer (initialized with profile_xxx_vap) should be conserved during the run. Hence the choice of initial profile matters a lot. &lt;br /&gt;
For giant planets as well: you can additionally set '''qvap_deep = value''' to force the deep specific concentration to remain constant (bottomless planet) (works with either the generic tracer or the water = .true. option). In that case, note that the total column of the tracer will not remain the same as the column set from the initial profile_xxx_vap.&lt;br /&gt;
&lt;br /&gt;
=== Using photochemistry ===&lt;br /&gt;
&lt;br /&gt;
When you use photochemistry (both in 3D and 1D), the initial distribution of tracers can be given as options in the '''traceur.def''' file, as explained above.&lt;br /&gt;
&lt;br /&gt;
[[Category:Inputs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Generic-Model]]&lt;/div&gt;</summary>
		<author><name>SandrineSaturne</name></author>	</entry>

	<entry>
		<id>http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php?title=The_traceur.def_Input_File&amp;diff=2134</id>
		<title>The traceur.def Input File</title>
		<link rel="alternate" type="text/html" href="http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php?title=The_traceur.def_Input_File&amp;diff=2134"/>
				<updated>2024-09-18T13:32:14Z</updated>
		
		<summary type="html">&lt;p&gt;SandrineSaturne: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is it for? ==&lt;br /&gt;
&lt;br /&gt;
Tracers need to be listed in ''traceur.def''.&lt;br /&gt;
&lt;br /&gt;
Characteristics of the tracers can be also specified in ''traceur.def''.&lt;br /&gt;
&lt;br /&gt;
== What is a tracer? ==&lt;br /&gt;
&lt;br /&gt;
Tracers are elements which will be defined at each grid point and tracked in the model. They may interact with the atmosphere in different ways.&lt;br /&gt;
&lt;br /&gt;
The model may include different types of tracers:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;condensed species (e.g., CO2, H2O, dust)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;chemically active species&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;radiatively active gases (e.g., water vapor)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
In the code, all tracers are stored in one three-dimensional array q, the third index of&lt;br /&gt;
which corresponds to each individual tracer. In input &lt;br /&gt;
([https://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php/The_start.nc_and_startfi.nc_input_files ''start.nc'', ''startfi.nc''])&lt;br /&gt;
and output files tracers are stored separately using their individual names. Loading specific&lt;br /&gt;
tracers requires that the approriate tracer names are set in the ''traceur.def'' file, &lt;br /&gt;
and specific computations for given tracers (e.g. computing the water or CO2&lt;br /&gt;
cycles) is controlled by setting the corresponding options in the &lt;br /&gt;
[https://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php/The_callphys.def_Input_File ''callphys.def''] file.&lt;br /&gt;
&lt;br /&gt;
== File structure ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Old&amp;quot; version ===&lt;br /&gt;
&lt;br /&gt;
Number of tracers need to be specified, followed by tracers names. The following example will set up water tracers to compute water cloud and water cycle in general.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
h2o_vap&lt;br /&gt;
h2o_ice&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Modern&amp;quot; version ===&lt;br /&gt;
&lt;br /&gt;
An update version named '''ModernTrac-v1''' need to be used with chemistry in order to set up properly the chemical tracers. This gives also the opportunity to specify for each tracers specific characteristics.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ModernTrac-v1&lt;br /&gt;
#&lt;br /&gt;
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
# !! README !!&lt;br /&gt;
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
#  Welcome, this is the modern traceur.def !&lt;br /&gt;
# &lt;br /&gt;
#         ---&amp;gt; DON'T TOUCH/REMOVE THE FIRST LINE OF HEADER #ModernTrac-v1 &amp;lt;---&lt;br /&gt;
#&lt;br /&gt;
# * You can use this area to write as many comments as you want starting lines with #.&lt;br /&gt;
# * You cannot have comment lines in the middle nor at the end, only at the top.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# 0. Philosophy  This modern version of traceur.def gather in a single file what was&lt;br /&gt;
# ~~~~~~~~~~~~~  previously in traceur.def AND gases.def plus some hard-coded things.&lt;br /&gt;
#&lt;br /&gt;
# 1. Structure  After the header, first line is the total number of modern tracers in&lt;br /&gt;
# ~~~~~~~~~~~~  your file, ie not only tracers sent to dynamics, but also species that&lt;br /&gt;
#               takes part in the composition, radiative transfer, chemistry, etc.&lt;br /&gt;
#&lt;br /&gt;
#               Then, each line needs to start with the specie name ... and that's the&lt;br /&gt;
#               only mandatory information ! But you can specify all the options you&lt;br /&gt;
#               want in separate blocks following 'option=value', assuming this option&lt;br /&gt;
#               is defined in traceur_h.F90 &amp;amp; initracer.F for physics, infotrac.F90 &lt;br /&gt;
#               for dynamics or chimiedata_h.F90 &amp;amp; calchim_asis.F90 for chemistry.&lt;br /&gt;
#               Indeed this file is read once by dynamics, once by physics and once by&lt;br /&gt;
#               chemistry who keep only the information needed.&lt;br /&gt;
#&lt;br /&gt;
#               Note that by default a tracer listed below will be sent to dynamics&lt;br /&gt;
#               except if you specify is_dyn=0. If nothing is given, then is_dyn=1.&lt;br /&gt;
#               Not yet fully implemented.&lt;br /&gt;
#&lt;br /&gt;
# 3. Options.   Implemented options listed below.&lt;br /&gt;
# ~~~~~~~~~~~~  For dynamic see &amp;quot;infotrac.F90&amp;quot;.&lt;br /&gt;
#               For physic see &amp;quot;initracer.F90&amp;quot;.&lt;br /&gt;
#               For chemistry see &amp;quot;calchim_asis.F90&amp;quot;.&lt;br /&gt;
#                        init see &amp;quot;inichim_1D.F90&amp;quot; and &amp;quot;inichim_newstart.F90&amp;quot;&lt;br /&gt;
#&lt;br /&gt;
# Dynamic:      vadv           ! index of vertical trasport schema&lt;br /&gt;
#               hadv           ! index of horizontal trasport schema&lt;br /&gt;
#               tnom_transp    ! transporting fluid short name: CRisi&lt;br /&gt;
#&lt;br /&gt;
# Physic:       mmol           ! mole mass of tracer [g.mol-1]&lt;br /&gt;
#               aki            ! coefficient of thermal concduction&lt;br /&gt;
#               cpi            ! heat capacity [J.kg-1.K-1]&lt;br /&gt;
#               is_chim        ! 1 if tracer used in chemistry, else 0&lt;br /&gt;
#               is_rad         ! 1 if tracer used in radiative transfer, else 0&lt;br /&gt;
#               is_recomb      ! 1 if tracer used in recombining scheme, else 0&lt;br /&gt;
#                                (if 1, must have is_rad=1)&lt;br /&gt;
#               is_recomb_qset ! 1 if tracer k-corr assume predefined vmr, else 0&lt;br /&gt;
#                                (if 1, must have is_recomb=1)&lt;br /&gt;
#               is_recomb_qotf ! 1 if tracer recombination is done on-the-fly, else 0&lt;br /&gt;
#                                (if 1, must have is_recomb_qset=0)&lt;br /&gt;
#&lt;br /&gt;
# Chemistry:    SF_mode        ! 1 if surface set up value, else 2 sedimentation velocity&lt;br /&gt;
#               SF_value       ! [vmr] if SF_mode=1, else [cm.s-1]&lt;br /&gt;
#               prod_rate      ! if SF_mode=2 production flux [molecules.m-2.s-1]&lt;br /&gt;
#&lt;br /&gt;
#      init:    qx             ! value that initialize constant profile [vmr]&lt;br /&gt;
#               qxf            ! file that initialize profile [Pa,vmr] (1 line header)&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# Random Ex :&lt;br /&gt;
#               4&lt;br /&gt;
#               n2 is_dyn=0&lt;br /&gt;
#               co2 cpi=450.0 is_dyn=1 mmol=44.&lt;br /&gt;
#               hdo hadv=14 vadv=10 tnom_transp=air&lt;br /&gt;
#               h2s&lt;br /&gt;
#&lt;br /&gt;
# Insert your tracers list and options below !&lt;br /&gt;
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
29&lt;br /&gt;
h2o_ice                 mmol=18   &lt;br /&gt;
co2                     mmol=44   is_chim=1    SF_mode=1    SF_value=4.0e-4    is_rad=1&lt;br /&gt;
co                      mmol=28   is_chim=1&lt;br /&gt;
o                       mmol=16   is_chim=1&lt;br /&gt;
o1d                     mmol=16   is_chim=1&lt;br /&gt;
o2                      mmol=32   is_chim=1    SF_mode=1    SF_value=2.1e-1&lt;br /&gt;
o3                      mmol=48   is_chim=1    is_rad=1 is_recomb=1 is_recomb_qotf=1&lt;br /&gt;
h                       mmol=1    is_chim=1&lt;br /&gt;
h2                      mmol=2    is_chim=1&lt;br /&gt;
oh                      mmol=17   is_chim=1&lt;br /&gt;
ho2                     mmol=33   is_chim=1&lt;br /&gt;
h2o2                    mmol=34   is_chim=1&lt;br /&gt;
h2o_vap                 mmol=18   is_chim=1    is_rad=1&lt;br /&gt;
ch4                     mmol=16   is_chim=1    SF_mode=1    SF_value=1.8e-6    is_rad=1&lt;br /&gt;
ch3                     mmol=15   is_chim=1&lt;br /&gt;
cho                     mmol=29   is_chim=1&lt;br /&gt;
ch2o                    mmol=30   is_chim=1&lt;br /&gt;
ch3o                    mmol=31   is_chim=1&lt;br /&gt;
ch3o2                   mmol=47   is_chim=1&lt;br /&gt;
ch3o2h                  mmol=48   is_chim=1&lt;br /&gt;
n                       mmol=14   is_chim=1&lt;br /&gt;
no                      mmol=30   is_chim=1&lt;br /&gt;
no2                     mmol=46   is_chim=1&lt;br /&gt;
n2                      mmol=28   is_chim=1    is_rad=1&lt;br /&gt;
hno3                    mmol=63   is_chim=1&lt;br /&gt;
hno4                    mmol=79   is_chim=1&lt;br /&gt;
n2o                     mmol=44   is_chim=1    SF_mode=1    SF_value=3.3e-7&lt;br /&gt;
no3                     mmol=62   is_chim=1&lt;br /&gt;
n2o5                    mmol=108  is_chim=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Initialisation ==&lt;br /&gt;
&lt;br /&gt;
=== In 3D ===&lt;br /&gt;
&lt;br /&gt;
In 3D, the initial distribution of tracers is in the '''start.def''' file. In order to change it, you have to modify the '''start.def''', for example using newstart.&lt;br /&gt;
&lt;br /&gt;
=== In 1D ===&lt;br /&gt;
&lt;br /&gt;
In 1D, the initial distribution of each tracer can be read from a file named &amp;quot;'''profile_&amp;lt;tracer name&amp;gt;'''&amp;quot; (e.g. '''profile_h2o_vap''' for the water vapour initial profile), located in the run directory. This file has Nlayer + 1 lines (with Nlayer the number of horizontal layers): its first line is the surface value (in kg/m^2), and then each line is the value at the corresponding level (in kg/kg).&lt;br /&gt;
&lt;br /&gt;
For '''giant planets''', as there is no condensation at the surface and as we evaporate the condensates at the bottom of the model, the total column of the tracer (initialized with profile_xxx_vap) should be conserved during the run. Hence the choice of initial profile matters a lot. &lt;br /&gt;
For giant planets as well: you can additionally set '''qvap_deep = value''' to force the deep mass mixing ratio to remain constant (bottomless planet) (works with either the generic tracer or the water = .true. option). In that case, note that the total column of the tracer will not remain the same as the column set from the initial profile_xxx_vap.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using photochemistry ===&lt;br /&gt;
&lt;br /&gt;
When you use photochemistry (both in 3D and 1D), the initial distribution of tracers can be given as options in the '''traceur.def''' file, as explained above.&lt;br /&gt;
&lt;br /&gt;
[[Category:Inputs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Generic-Model]]&lt;/div&gt;</summary>
		<author><name>SandrineSaturne</name></author>	</entry>

	<entry>
		<id>http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php?title=Advanced_Use_of_the_GCM&amp;diff=429</id>
		<title>Advanced Use of the GCM</title>
		<link rel="alternate" type="text/html" href="http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php?title=Advanced_Use_of_the_GCM&amp;diff=429"/>
				<updated>2022-06-24T11:13:39Z</updated>
		
		<summary type="html">&lt;p&gt;SandrineSaturne: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Running in parallel ==&lt;br /&gt;
&lt;br /&gt;
For large simulation (long run, high resolution etc...), the waiting time can becomes very long.&lt;br /&gt;
To overcome this issue, the model can works in parallel.&lt;br /&gt;
It first needs to be compiled in parallel mode and then be run with a specific command.&lt;br /&gt;
For all the details see the dedicated page [https://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php/Parallelism Parallelism]&lt;br /&gt;
&lt;br /&gt;
== Distinctions beween ifort, mpi, etc. ==&lt;br /&gt;
&lt;br /&gt;
TO BE COMPLETED by Ehouarn ?&lt;br /&gt;
&lt;br /&gt;
== Distinction between using IOIPSL or XIOS ==&lt;br /&gt;
&lt;br /&gt;
TO BE COMPLETED by Ehouarn ?&lt;br /&gt;
&lt;br /&gt;
== How to Change Vertical and Horizontal Resolutions ==&lt;br /&gt;
&lt;br /&gt;
=== When you are using the regular longitude/latitude horizontal grid ===&lt;br /&gt;
To run at a different grid resolution than available initial conditions files, one needs to use the tools ''newstart.e'' and ''start2archive.e''&lt;br /&gt;
&lt;br /&gt;
For example, to create initial states at grid resolution 32×24×25 from NetCDF files start and startfi at grid resolution 64×48×32 :&lt;br /&gt;
&lt;br /&gt;
* Create file ''start_archive.nc'' with ''start2archive.e'' compiled at grid resolution 64×48×32 using old file ''z2sig.def'' used previously&lt;br /&gt;
* Create files ''restart.nc'' and ''restartfi.nc'' with ''newstart.e'' compiled at grid resolution 32×24×25, using a new file ''z2sig.def'' (more details below on the choice of the ''z2sig.def'').&lt;br /&gt;
* While executing ''newstart.e'', you need to choose the answer '0 - from a file start_archive' and then press enter to all other requests.&lt;br /&gt;
&lt;br /&gt;
==== What you need to ''know'' about the ''z2sig.def'' file ====&lt;br /&gt;
&lt;br /&gt;
For a model with Nlay layers, the z2sig.def file must contain at least Nlay+1 lines (the other not being read).&lt;br /&gt;
&lt;br /&gt;
The first line is a scale height ($$H$$). The following lines are the target pseudo-altitudes for the model from the bottom up ($$z_i$$).&lt;br /&gt;
The units do not matter as long as you use the same ones for both. &lt;br /&gt;
&lt;br /&gt;
The model will use these altitudes to compute a target pressure grid ($$p_i$$ ) as follows:&lt;br /&gt;
\begin{align}&lt;br /&gt;
  \label{def:pseudoalt}&lt;br /&gt;
  p_i &amp;amp;= p_s \exp(-z_i/H),&lt;br /&gt;
\end{align}&lt;br /&gt;
where $$p_s$$ is the surface pressure. &lt;br /&gt;
&lt;br /&gt;
As you can see, the scale height and pseudo altitudes enter the equation only through their ratio. So they do not have to to be the real scale-height and altitudes of the atmosphere you are simulating.&lt;br /&gt;
So you can use the same z2sig.def for different planets. &lt;br /&gt;
&lt;br /&gt;
There is no hard rule to follow to determine the altitude/pressure levels you should use. As a rule of thumb, layers should be thiner near the surface to properly resolve the surface boundary layer. Then they should gradually increase in size over a couple scale heights and transition to constant thickness above that. Of course, some specific applications may require thinner layers in some specific parts of the atmospheres. &lt;br /&gt;
&lt;br /&gt;
A little trick for those who prefer to think in terms of (log)pressure: if you use $$H=  \ln 10 \approx 2.30259$$, then $$z_i=x$$ corresponds to a pressure difference with the surface of exactly x pressure decades. This is particularly useful for giant-planet applications.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!-- [NOT RELEVANT??] If you want to create starts files with tracers for 50 layers using a start archive.nc obtained for 32 layers, do not forget to use the ini_q option in newstart in order to correctly initialize tracers value for layer 33 to layer 50. You just have to answer yes to the question on thermosphere initialization if you want to initialize the thermosphere part only (l=33 to l=50), and no if you want to initialize tracers for all layers (l=0 to l=50). --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When you are using the DYNAMICO icosahedral horizontal grid ===&lt;br /&gt;
&lt;br /&gt;
The horizontal resolution for the DYNAMICO dynamical core is managed from several setting files, online during the execution. &lt;br /&gt;
To this purpose, each part  of the GCM managing the in/output fields ('''ICOSAGCM''', '''ICOSA_LMDZ''', '''XIOS''') requires to know the input and output grids: &lt;br /&gt;
&lt;br /&gt;
'''1. ''context_lmdz_physics.xml'':'''&lt;br /&gt;
&lt;br /&gt;
You can find several grid setup already defined:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;domain_definition&amp;gt;&lt;br /&gt;
    &amp;lt;domain id=&amp;quot;dom_96_95&amp;quot; ni_glo=&amp;quot;96&amp;quot; nj_glo=&amp;quot;95&amp;quot; type=&amp;quot;rectilinear&amp;quot;  &amp;gt;&lt;br /&gt;
      &amp;lt;generate_rectilinear_domain/&amp;gt;&lt;br /&gt;
      &amp;lt;interpolate_domain order=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/domain&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;domain id=&amp;quot;dom_144_142&amp;quot; ni_glo=&amp;quot;144&amp;quot; nj_glo=&amp;quot;142&amp;quot; type=&amp;quot;rectilinear&amp;quot;  &amp;gt;&lt;br /&gt;
      &amp;lt;generate_rectilinear_domain/&amp;gt;&lt;br /&gt;
      &amp;lt;interpolate_domain order=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/domain&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;domain id=&amp;quot;dom_512_360&amp;quot; ni_glo=&amp;quot;512&amp;quot; nj_glo=&amp;quot;360&amp;quot; type=&amp;quot;rectilinear&amp;quot;  &amp;gt;&lt;br /&gt;
      &amp;lt;generate_rectilinear_domain/&amp;gt;&lt;br /&gt;
      &amp;lt;interpolate_domain order=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/domain&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;domain id=&amp;quot;dom_720_360&amp;quot; ni_glo=&amp;quot;720&amp;quot; nj_glo=&amp;quot;360&amp;quot; type=&amp;quot;rectilinear&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;generate_rectilinear_domain/&amp;gt;&lt;br /&gt;
      &amp;lt;interpolate_domain order=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/domain&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;domain id=&amp;quot;dom_out&amp;quot; domain_ref=&amp;quot;dom_720_360&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/domain_definition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the output grid for the physics fields is defined by &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;domain id=&amp;quot;dom_out&amp;quot; domain_ref=&amp;quot;dom_720_360&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which is an half-degree horizontal resolution. To change this resolution, you have to change name of the '''domain_ref''' grid, for instance: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;domain id=&amp;quot;dom_out&amp;quot; domain_ref=&amp;quot;dom_96_95&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2. ''run_icosa.def'': setting file to execute a simulation''' &lt;br /&gt;
&lt;br /&gt;
In this file, regarding of the horizontal resolution intended, you have to set the number of subdivision on the main triangle. &lt;br /&gt;
For reminder, each hexagonal mesh is divided in several main triangles and each main triangles are divided in suitable number of sub-triangles according the horizontal resolution&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
#nbp --&amp;gt; number of subdivision on a main triangle: integer (default=40)&lt;br /&gt;
#              nbp = sqrt((nbr_lat x nbr_lon)/10)&lt;br /&gt;
#              nbp:                 20   40   80  160&lt;br /&gt;
#              T-edge length (km): 500  250  120   60&lt;br /&gt;
#              Example: nbp(128x96) = 35 -&amp;gt; 40&lt;br /&gt;
#                       nbp(256x192)= 70 -&amp;gt; 80&lt;br /&gt;
#                       nbp(360x720)= 160 -&amp;gt; 160&lt;br /&gt;
nbp = 160&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have chosen the 96_95 output grid in ''context_lmdz_physics.xml'', you have to calculate $$nbp = \sqrt(96x95) / 10 = 10$$ and  in this case &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nbp = 20&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After the number of subdivision of the main triangle, you have to define the number subdivision over each direction. At this stage you need to be careful as the number of subdivisions on each direction:&lt;br /&gt;
* needs to be set according to the number of subdivisions on the main triangle '''nbp'''&lt;br /&gt;
* will determine the number of processors on which the GCM will be most effective&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
## sub splitting of main rhombus : integer (default=1)&lt;br /&gt;
#nsplit_i=1&lt;br /&gt;
#nsplit_j=1&lt;br /&gt;
#omp_level_size=1&lt;br /&gt;
###############################################################&lt;br /&gt;
## There must be less MPIxOpenMP processes than the 10 x nsplit_i x nsplit_j tiles&lt;br /&gt;
## typically for pure MPI runs, let nproc = 10 x nsplit_i x nsplit_j&lt;br /&gt;
## it is better to have nbp/nsplit_i  &amp;gt; 10 and nbp/nplit_j &amp;gt; 10&lt;br /&gt;
###############################################################&lt;br /&gt;
#### 40 noeuds de 24 processeurs = 960 procs&lt;br /&gt;
nsplit_i=12&lt;br /&gt;
nsplit_j=8&lt;br /&gt;
&lt;br /&gt;
#### 50 noeuds de 24 processeurs = 1200 procs&lt;br /&gt;
#nsplit_i=10&lt;br /&gt;
#nsplit_j=12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With the same example as above, the 96_95 output grid requires:&lt;br /&gt;
$$nsplit_i &amp;lt; 2$$ and $$nsplit_j &amp;lt; 2$$&lt;br /&gt;
We advise you to select:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
## sub splitting of main rhombus : integer (default=1)&lt;br /&gt;
nsplit_i=1&lt;br /&gt;
nsplit_j=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and using 10 processors.&lt;br /&gt;
&lt;br /&gt;
== How to Change the Topography (or remove it) ==&lt;br /&gt;
&lt;br /&gt;
The generic model can use in principle any type of surface topography, provided that the topographic data file is available in the right format, and put in the right place. The information content on the surface topography is contained in the ''startfi.nc'', and we do have developed tools (see below) to modify the ''startfi.nc'' to account for a new surface topography.&lt;br /&gt;
&lt;br /&gt;
To change the surface topography of a simulation, we recommend to follow the procedure detailed below:&lt;br /&gt;
&lt;br /&gt;
* Create file ''start_archive.nc'' with ''start2archive.e'' compiled at the same (horizontal and vertical) resolution than the ''start.nc'' and ''startfi.nc'' files.&lt;br /&gt;
* Create files ''restart.nc'' and ''restartfi.nc'' with ''newstart.e'' compiled again at the same (horizontal and vertical) resolution. &lt;br /&gt;
* While executing ''newstart.e'', you need to choose the answer '0 - from a file start_archive' and then press enter to all other requests.&lt;br /&gt;
* At some point, the script ''newstart.e'' asks you to chose the surface topography you want from the list of files available in your 'datagcm/surface_data/' directory. &lt;br /&gt;
&lt;br /&gt;
We do have a repository of for Venus, Earth and Mars through time available at https://web.lmd.jussieu.fr/~lmdz/planets/LMDZ.GENERIC/datagcm/surface_data/. You can download the surface topography files and place them in your 'datagcm/surface_data/' directory.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Special note: How to remove the topography?&lt;br /&gt;
&lt;br /&gt;
TBD by Gwenael?&lt;br /&gt;
&lt;br /&gt;
== How to Change the Stellar Spectrum ==&lt;br /&gt;
&lt;br /&gt;
TO BE COMPLETED by Martin (once Martin has updated the code with the modifications regarding stellar spectrum input)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to Change the Opacity Tables ==&lt;br /&gt;
&lt;br /&gt;
To change the opacity tables (generated &amp;quot;offline&amp;quot; for a given set of pressures, temperatures, a given composition and a specific spectral decomposition), follow these steps:&lt;br /&gt;
&lt;br /&gt;
* copy your directory containing your opacity tables in .... It has to contain...&lt;br /&gt;
* change corrkdir = ... in callphys.def with the name of that directory.&lt;br /&gt;
* change gases.def: it has to be consistent with Q.dat. A special case concerns...&lt;br /&gt;
* change -b option when compiling the model with makelmdz_fcm: it has to correspond to the number of bands (in the IR x in the visible) of the new opacity tables. For instance, compile with -b 38x26 if you used 38 bands in the infrared and 26 in the visible to generate the opacity tables.&lt;br /&gt;
&lt;br /&gt;
== How to Manage Tracers ==&lt;br /&gt;
&lt;br /&gt;
Tracers are managed thanks to the [https://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php/The_traceur.def_Input_File ''traceur.def''] file.&lt;br /&gt;
&lt;br /&gt;
Specific treatment of some tracers (e.g., water vapor cycle) can be added directly in the model and an option added in [https://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php/The_callphys.def_Input_File ''callphys.def''] file.&lt;/div&gt;</summary>
		<author><name>SandrineSaturne</name></author>	</entry>

	<entry>
		<id>http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php?title=Advanced_Use_of_the_GCM&amp;diff=425</id>
		<title>Advanced Use of the GCM</title>
		<link rel="alternate" type="text/html" href="http://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php?title=Advanced_Use_of_the_GCM&amp;diff=425"/>
				<updated>2022-06-24T09:18:49Z</updated>
		
		<summary type="html">&lt;p&gt;SandrineSaturne: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Running in parallel ==&lt;br /&gt;
&lt;br /&gt;
For large simulation (long run, high resolution etc...), the waiting time can becomes very long.&lt;br /&gt;
To overcome this issue, the model can works in parallel.&lt;br /&gt;
It first needs to be compiled in parallel mode and then be run with a specific command.&lt;br /&gt;
For all the details see the dedicated page [https://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php/Parallelism Parallelism]&lt;br /&gt;
&lt;br /&gt;
== Distinctions beween ifort, mpi, etc. ==&lt;br /&gt;
&lt;br /&gt;
TO BE COMPLETED by Ehouarn ?&lt;br /&gt;
&lt;br /&gt;
== Distinction between using IOIPSL or XIOS ==&lt;br /&gt;
&lt;br /&gt;
TO BE COMPLETED by Ehouarn ?&lt;br /&gt;
&lt;br /&gt;
== How to Change Vertical and Horizontal Resolutions ==&lt;br /&gt;
&lt;br /&gt;
=== When you are using the regular longitude/latitude horizontal grid ===&lt;br /&gt;
To run at a different grid resolution than available initial conditions files, one needs to use the tools ''newstart.e'' and ''start2archive.e''&lt;br /&gt;
&lt;br /&gt;
For example, to create initial states at grid resolution 32×24×25 from NetCDF files start and startfi at grid resolution 64×48×32 :&lt;br /&gt;
&lt;br /&gt;
* Create file ''start_archive.nc'' with ''start2archive.e'' compiled at grid resolution 64×48×32 using old file ''z2sig.def'' used previously&lt;br /&gt;
* Create files ''restart.nc'' and ''restartfi.nc'' with ''newstart.e'' compiled at grid resolution 32×24×25, using a new file ''z2sig.def'' (more details below on the choice of the ''z2sig.def'').&lt;br /&gt;
* While executing ''newstart.e'', you need to choose the answer '0 - from a file start_archive' and then press enter to all other requests.&lt;br /&gt;
&lt;br /&gt;
==== What you need to ''know'' about the ''z2sig.def'' file ====&lt;br /&gt;
&lt;br /&gt;
For a model with Nlay layers, the z2sig.def file must contain at least Nlay+1 lines (the other not being read).&lt;br /&gt;
&lt;br /&gt;
The first line is a scale height ($$H$$). The following lines are the target pseudo-altitudes for the model from the bottom up ($$z_i$$).&lt;br /&gt;
The units do not matter as long as you use the same ones for both. &lt;br /&gt;
&lt;br /&gt;
The model will use these altitudes to compute a target pressure grid ($$p_i$$ ) as follows:&lt;br /&gt;
\begin{align}&lt;br /&gt;
  \label{def:pseudoalt}&lt;br /&gt;
  p_i &amp;amp;= p_s \exp(-z_i/H),&lt;br /&gt;
\end{align}&lt;br /&gt;
where $$p_s$$ is the surface pressure. &lt;br /&gt;
&lt;br /&gt;
As you can see, the scale height and pseudo altitudes enter the equation only through their ratio. So they do not have to to be the real scale-height and altitudes of the atmosphere you are simulating.&lt;br /&gt;
So you can use the same z2sig.def for different planets. &lt;br /&gt;
&lt;br /&gt;
There is no hard rule to follow to determine the altitude/pressure levels you should use. As a rule of thumb, layers should be thiner near the surface to properly resolve the surface boundary layer. Then they should gradually increase in size over a couple scale heights and transition to constant thickness above that. Of course, some specific applications may require thinner layers in some specific parts of the atmospheres. &lt;br /&gt;
&lt;br /&gt;
A little trick for those who prefer to think in terms of (log)pressure: if you use $$H=  \ln 10 \approx 2.30259$$, then $$z_i=x$$ corresponds to a pressure difference with the surface of exactly x pressure decades. This is particularly useful for giant-planet applications.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!-- [NOT RELEVANT??] If you want to create starts files with tracers for 50 layers using a start archive.nc obtained for 32 layers, do not forget to use the ini_q option in newstart in order to correctly initialize tracers value for layer 33 to layer 50. You just have to answer yes to the question on thermosphere initialization if you want to initialize the thermosphere part only (l=33 to l=50), and no if you want to initialize tracers for all layers (l=0 to l=50). --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When you are using the DYNAMICO icosahedral horizontal grid ===&lt;br /&gt;
&lt;br /&gt;
The horizontal resolution for the DYNAMICO dynamical core is managed from several setting files, online during the execution. &lt;br /&gt;
To this purpose, each part  of the GCM managing the in/output fields ('''ICOSAGCM''', '''ICOSA_LMDZ''', '''XIOS''') requires to know the input and output grids: &lt;br /&gt;
&lt;br /&gt;
'''1. ''context_lmdz_physics.xml'':'''&lt;br /&gt;
&lt;br /&gt;
You can find several grid setup already defined:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;domain_definition&amp;gt;&lt;br /&gt;
    &amp;lt;domain id=&amp;quot;dom_96_95&amp;quot; ni_glo=&amp;quot;96&amp;quot; nj_glo=&amp;quot;95&amp;quot; type=&amp;quot;rectilinear&amp;quot;  &amp;gt;&lt;br /&gt;
      &amp;lt;generate_rectilinear_domain/&amp;gt;&lt;br /&gt;
      &amp;lt;interpolate_domain order=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/domain&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;domain id=&amp;quot;dom_144_142&amp;quot; ni_glo=&amp;quot;144&amp;quot; nj_glo=&amp;quot;142&amp;quot; type=&amp;quot;rectilinear&amp;quot;  &amp;gt;&lt;br /&gt;
      &amp;lt;generate_rectilinear_domain/&amp;gt;&lt;br /&gt;
      &amp;lt;interpolate_domain order=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/domain&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;domain id=&amp;quot;dom_512_360&amp;quot; ni_glo=&amp;quot;512&amp;quot; nj_glo=&amp;quot;360&amp;quot; type=&amp;quot;rectilinear&amp;quot;  &amp;gt;&lt;br /&gt;
      &amp;lt;generate_rectilinear_domain/&amp;gt;&lt;br /&gt;
      &amp;lt;interpolate_domain order=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/domain&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;domain id=&amp;quot;dom_720_360&amp;quot; ni_glo=&amp;quot;720&amp;quot; nj_glo=&amp;quot;360&amp;quot; type=&amp;quot;rectilinear&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;generate_rectilinear_domain/&amp;gt;&lt;br /&gt;
      &amp;lt;interpolate_domain order=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/domain&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;domain id=&amp;quot;dom_out&amp;quot; domain_ref=&amp;quot;dom_720_360&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/domain_definition&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the output grid for the physics fields is defined by &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;domain id=&amp;quot;dom_out&amp;quot; domain_ref=&amp;quot;dom_720_360&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which is an half-degree horizontal resolution. To change this resolution, you have to change name of the '''domain_ref''' grid, for instance: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;domain id=&amp;quot;dom_out&amp;quot; domain_ref=&amp;quot;dom_96_95&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2. ''run_icosa.def'': setting file to execute a simulation''' &lt;br /&gt;
&lt;br /&gt;
In this file, regarding of the horizontal resolution intended, you have to set the number of subdivision on the main triangle. &lt;br /&gt;
For reminder, each hexagonal mesh is divided in several main triangles and each main triangles are divided in suitable number of sub-triangles according the horizontal resolution&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
#nbp --&amp;gt; number of subdivision on a main triangle: integer (default=40)&lt;br /&gt;
#              nbp = sqrt((nbr_lat x nbr_lon)/10)&lt;br /&gt;
#              nbp:                 20   40   80  160&lt;br /&gt;
#              T-edge length (km): 500  250  120   60&lt;br /&gt;
#              Example: nbp(128x96) = 35 -&amp;gt; 40&lt;br /&gt;
#                       nbp(256x192)= 70 -&amp;gt; 80&lt;br /&gt;
#                       nbp(360x720)= 160 -&amp;gt; 160&lt;br /&gt;
nbp = 160&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have chosen the 96_95 output grid in ''context_lmdz_physics.xml'', you have to calculate $$nbp = \sqrt(96x95) / 10 = 10$$ and  in this case &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nbp = 20&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After the number of subdivision of the main triangle, you have to define the number subdivision over each direction. At this stage you need to be careful as the number of subdivisions on each direction:&lt;br /&gt;
* needs to be set according to the number of subdivisions on the main triangle '''nbp'''&lt;br /&gt;
* will determine the number of processors on which the GCM will be most effective&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
## sub splitting of main rhombus : integer (default=1)&lt;br /&gt;
#nsplit_i=1&lt;br /&gt;
#nsplit_j=1&lt;br /&gt;
#omp_level_size=1&lt;br /&gt;
###############################################################&lt;br /&gt;
## There must be less MPIxOpenMP processes than the 10 x nsplit_i x nsplit_j tiles&lt;br /&gt;
## typically for pure MPI runs, let nproc = 10 x nsplit_i x nsplit_j&lt;br /&gt;
## it is better to have nbp/nsplit_i  &amp;gt; 10 and nbp/nplit_j &amp;gt; 10&lt;br /&gt;
###############################################################&lt;br /&gt;
#### 40 noeuds de 24 processeurs = 960 procs&lt;br /&gt;
nsplit_i=12&lt;br /&gt;
nsplit_j=8&lt;br /&gt;
&lt;br /&gt;
#### 50 noeuds de 24 processeurs = 1200 procs&lt;br /&gt;
#nsplit_i=10&lt;br /&gt;
#nsplit_j=12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With the same example as above, the 96_95 output grid requires:&lt;br /&gt;
$$nsplit_i &amp;lt; 2$$ and $$nsplit_j &amp;lt; 2$$&lt;br /&gt;
We advise you to select:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
## sub splitting of main rhombus : integer (default=1)&lt;br /&gt;
nsplit_i=1&lt;br /&gt;
nsplit_j=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and using 10 processors.&lt;br /&gt;
&lt;br /&gt;
== How to Change the Topography (or remove it) ==&lt;br /&gt;
&lt;br /&gt;
The generic model can use in principle any type of surface topography, provided that the topographic data file is available in the right format, and put in the right place. The information content on the surface topography is contained in the ''startfi.nc'', and we do have developed tools (see below) to modify the ''startfi.nc'' to account for a new surface topography.&lt;br /&gt;
&lt;br /&gt;
To change the surface topography of a simulation, we recommend to follow the procedure detailed below:&lt;br /&gt;
&lt;br /&gt;
* Create file ''start_archive.nc'' with ''start2archive.e'' compiled at the same (horizontal and vertical) resolution than the ''start.nc'' and ''startfi.nc'' files.&lt;br /&gt;
* Create files ''restart.nc'' and ''restartfi.nc'' with ''newstart.e'' compiled again at the same (horizontal and vertical) resolution. &lt;br /&gt;
* While executing ''newstart.e'', you need to choose the answer '0 - from a file start_archive' and then press enter to all other requests.&lt;br /&gt;
* At some point, the script ''newstart.e'' asks you to chose the surface topography you want from the list of files available in your 'datagcm/surface_data/' directory. &lt;br /&gt;
&lt;br /&gt;
We do have a repository of for Venus, Earth and Mars through time available at https://web.lmd.jussieu.fr/~lmdz/planets/LMDZ.GENERIC/datagcm/surface_data/. You can download the surface topography files and place them in your 'datagcm/surface_data/' directory.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Special note: How to remove the topography?&lt;br /&gt;
&lt;br /&gt;
TBD by Gwenael?&lt;br /&gt;
&lt;br /&gt;
== How to Change the Opacity Tables ==&lt;br /&gt;
&lt;br /&gt;
TO BE COMPLETED by Sandrine ?&lt;br /&gt;
change corrkdir = ... in callphys.def with the path of &lt;br /&gt;
change gases.def: it has to be consistent with Q.dat&lt;br /&gt;
change -b option when compiling with makelmdz_fcm: it has to correspond to the number of bands (in the IR x in the visible) of the new opacity tables.&lt;br /&gt;
&lt;br /&gt;
== How to Manage Tracers ==&lt;br /&gt;
&lt;br /&gt;
Tracers are managed thanks to the [https://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php/The_traceur.def_Input_File ''traceur.def''] file.&lt;br /&gt;
&lt;br /&gt;
Specific treatment of some tracers (e.g., water vapor cycle) can be added directly in the model and an option added in [https://lmdz-forge.lmd.jussieu.fr/mediawiki/Planets/index.php/The_callphys.def_Input_File ''callphys.def''] file.&lt;/div&gt;</summary>
		<author><name>SandrineSaturne</name></author>	</entry>

	</feed>