La mise en \oe uvre de l'ensemble de ces routines a bénéficié
de nombreuses collaborations avec, en particulier, J.Provost, G.Berthomieu et
B.Pichon.\index{routines de physique}

On fait d'abord mention des règles de programmation utilisées dans \cesam2k,
puis on décrit l'aspect programmation des routines de physique
regroupées dans les modules du sous-directory {\tt SOURCE}. La plupart
d'entre elles ne constituent que des applications au problème de la structure
interne des méthodes numériques développées au \chap{cha:num}.
La description des routines purement numériques fait l'objet du \chap{cha:rnum}.

Dans le but de faciliter l'exploitation de cette notice,
les routines sont décrites en suivant l'ordre alphabétique
de leur dénomination.

\section{Routines génériques}\label{sec:gene}
\index{routines génériques}\index{routines dépendantes}
La physique retenue est introduite par l'intermédiaire des mots clefs du
fichier de données {\tt mon\_modele.don}, \cfparagr{sec:fdon}.
A chaque mot clef est associée une {\embf routine générique}, à laquelle sera
affectée la {\embf routine dépendante} où sera effectué le calcul.
Par exemple, dans le fichier de données du
\paragr{sec:fdon} {\tt ppcno9} est affecté au mot clef {\tt nom\_nuc}.
Ce mot clef associe à la routine générique {\tt nuc} la fonction
de la routine {\tt ppcno9}. Ainsi, à chaque appel de {\tt CALL nuc(....)}, 
le calcul des réactions thermonucléaires sera effectué par {\tt ppcno9},
\cfparagr{sec:ppcno9}.

\section{Unités}\label{sec:unit}\index{unités}
Les arguments des routines sont en {\embf unité cgs sauf}~:
la masse, la luminosité et
le rayon qui sont en unités solaires \ie\ $M_\odot$,$R_\odot$ et $L_\odot$.
Si, dans un sous-programme, l'évaluation de
certaines variables de sortie fait in\-ter\-ve\-nir des va\-ria\-bles d'en\-trée
dont les unités sont dans des systèmes différents, la
cohérence entre les unités des variables d'entrée et de sortie est respectée.
Par exem\-ple, dans le sous-programme {\tt thermo}, \cfparagr{sec:thermo},
qui calcule diverses grandeurs et leurs
dérivées premières à partir des variables thermodynamiques, la variable
{\tt gradient} ($\nabla =\partial\ln T/\partial\ln P$) est sans dimension.
Le calcul de la va\-ria\-ble {\tt dgradm}=($\partial\nabla/\partial m$)
nécessite la variable d'entrée
{\tt m} (masse) qui est sans dimension~: $[m/M_\odot]$ ainsi, {\tt dgradm} est
sans dimension et non pas en $\rm g^{-1}$.
 
Les noms des variables sont choisis de façon à être facilement
identifiables.\\
La composition chi\-mi\-que est un argument d'entrée
de divers sous-programmes. Les proportions par mole
-- proportion par gramme / masse atomique --
des divers éléments sont les coordonnées
d'un vecteur très souvent appelé~: {\tt xchim} où
les isotopes {\embf effectivement utilisés}\index{tabul\_nuc.f}
sont souvent rangés dans l'ordre des masses ato\-mi\-ques croissantes,
ordre qui est défini dans le sous-programme
{\tt tabul\_nuc}, \cfparagr{sec:tabulnuc},
 lors de la création des tables de réactions
nucléaires, \cfparagr{sec:pro}. Cet ordre n'est pas
impératif, sauf en ce qui concerne \H1 qui doit être le premier isotope.\\
\index{ihe4}
Des valeurs spécifiques sont utilisées pour~:\index{indices spécifiques}
\begin{itemize}
 \item Indice de \H1~: 1.
 \item Indice de \He4~: {\tt ihe4}
 \item Indice de \He3~: {\tt ihe4-1}
 \item Indice de \Fe{56}~: {\tt ife56}.
 \item Indice de l'élément fictif complémentaire~: {\tt i\_ex},
 \cfparagr{sec:abini}.
\end{itemize}
 
Les variables sont toutes de {\embf type déclaré}, sauf pour certains
programmes de source externe, exemple~: {\tt z14xcotrin21}
\cfparagr{sec:z14xcotrin21}.\index{constantes physiques}\index{ini\_ctes.f}
 La plupart des cons\-tan\-tes phy\-si\-ques fon\-da\-men\-ta\-les
 utilisées par \cesam2k sont réunies
dans le mo\-du\-le {\tt mod\_donnees}, \cfparagr{sec:moddon}.
Elles sont initialisées au début de
chaque exécution par un appel au sous-programme\index{mod\_donnees.f}
{\tt ini\_ctes}, \cfparagr{sec:inictes}, au début du sous-programme {\tt cesam},
\cfparagr{sec:cesam}. Les constantes propres à
chaque routine sont initialisées ou, si possible,
recalculées à l'aide des constantes fondamentales au premier appel de cette 
routine, elles y sont conservées par l'utilisation de l'instruction 
{\tt SAVE}.
 
Des commentaires et références permettent de suivre et de
vérifier les algorithmes. Dans chaque sous-programme les quantités
entrantes et sortantes de la liste d'arguments sont répertoriées,
parfois un peu succintement. Dans un sous-programme, les
variables et les routines externes au mo\-du\-le auquel appartient le 
sous-programme sont introduites par l'instruction~:
\centerline{\tt USE nom\_module ONLY : routine, variable}
Cette contrainte permet l'identification des MODULES d'appartenance des
quantités invoquées.
  
Le nombre de couches, les limites \ZRZCs\ variant en fonction du temps,
il est fait
grand usage de tableaux de dimensions variables qui sont alloués/déalloués en
fonction des besoins.

Les notations utilisées pour les variables sont aussi explicites
que possible, compte tenu d'une nécessaire concision \eg\ on utilise
{\tt gradad} pour le gradient adiabatique $\nabla_{\rm ad}$; de même pour
les dérivées \eg\ les dérivées par rapport
à $\Pgaz\equiv$ {\tt p} ont un préfixe {\tt "d"} et une
extension\footnote{Cette règle
est souvent transgressée pour raison de concision.}
{\tt "p"}, exemple~:
{\tt dgradadp}$\equiv\dsdx{\nabla_{\rm ad}}{\Pgaz}$.

\section{Routine {\tt abon\_ini}}\index{abon\_ini.f}
\label{sec:abin}\index{tabul\_nuc.f}
La routine {\tt abon\_ini} est une routine {\tt PRIVATE}
du module {\tt mod\_nuc}, \cfparagr{sec:amnuc}. Sa fonction principale est d'effectuer
l'initialisation des abondances, des rapports isotopiques et des
charges des éléments chi\-mi\-ques utilisés par le modèle.
A la suite de cette initialisation dans la routine {\tt tabul\_nuc},
\cf\ \fig{fig:nuc}, les éléments chi\-mi\-ques utilisés par les
réactions thermonucléaires seront seuls retenus.
La source des données est principalement le site d'OPAL~:
{\tt ftp:://www-phys.llnl.gov/pub/opal}.
 
\medskip
\noi {\bf Description}~:
\begin{itemize}\index{rapports isotopiques}\index{masses atomiques}
\index{charges}
  \item Les charges, masses atomiques et les symboles des éléments
  chi\-mi\-ques jusqu'au nickel ($Z=28$) sont initialisés puis un certain
  nombre de rapports isotopiques\footnote{Ces initialisations seraient
  plus justifiées dans la routine {\tt ctes}.}. 
  \item Suivant la mixture initiale retenue,
 \cfparagr{sec:fdon}, les abondances en DeX (H=12) ou en nombre, sont
 initialisées puis, si besoin, transformées en abondances par nombre.
 Dans les cas où il y a utilisation d'une mixture initiale personnalisée,
 celle-ci est lue, en nombre, soit dans le fichier {\tt mon\_modele.mix},
 soit dans le fichier {\tt mixture} à défaut du précédent \cf\
 \paragr{sec:perso}.
 \item Les abondances relatives des métaux dans $Z$ sont
  ensuite évaluées.
\end{itemize}

\medskip
\noi {\bf Appel~}~: {\tt abon\_ini} est appelée par la routine de calcul des
réactions nucléaires lors de son initialisation, \cfparagr{sec:nuc}.
{\tt abon\_ini} n'a {\bf pas d'argument} 

\section{Routine {\tt add\_ascii}}\index{add\_ascii.f}
\label{sec:addascii}
Dans cette routine {\tt PRIVATE} du module {\tt mod\_cesam},
\cfparagr{sec:amcs}, on complète
 le tableau des quantités entrant éventuellement dans
les fichiers ASCII de type {\tt output}, \cfparagr{sec:output}.

\medskip
\noi{\bf Description}~:\index{df\_rotx}\\
 En utilisant les valeurs du fichier des oscillations adiabatiques, il y a
tabulation, en fonction du rayon, de $X$ pour calcul de la dérivée
$\dsdx Xr$, ainsi que de
$F_{\rm rad}=f(r)$ pour celui de  $\dsdx{F_{\rm rad}}r=B-J$
et de $\int_0^r\frac 34\kappa\rho dr=f_{\rm edd}J(r)$.
L'ordre des interpolations $m_{\rm x}\geq 2$ fixé dans la routine
peut être adapté (ne pas dépasser 4 \ie\ splines naturelles).
Le fichier d'oscillations adiabatiques est ensuite augmenté,
soit pour le calcul des
inversions ({\tt ivar=25}) soit pour celui des oscillations non adiabatiques
({\tt ivar=44}).
Les dérivées partielles du second ordre sont déduites numériquement
en utilisant la routine {\tt df\_rotx} décrite au \paragr{sec:drotx}.
L'identification des quantités est décrite au \paragr{sec:fichosc}.

\medskip
\noi {\bf Appel~}~: {\tt add\_ascii} est appelée par {\tt cesam}.

\begin{tt}\begin{verbatim}
    SUBROUTINE add_ascii(var,glob,itot,ivar)	
\end{verbatim}\end{tt}
\begin{itemize}
\item Entrées~:
 \begin{itemize}	
  \item {\tt glob}~: Tableau des quantités globales.
  \item {\tt itot}~: Nombre total de points. 
  \item {\tt ivar}~: Nombre de variables.
 \end{itemize}
\item Entrées/Sorties~:
 \begin{itemize}
 \item {\tt var}~: Tableau des variables.
\end{itemize}
\end{itemize}

\section{Routine {\tt alecian1}}\index{alecian1.f}\label{sec:accrad}
La routine interne
{\tt alecian1} est une routine PRIVATE du module {\tt mod\_evol},
\cfparagr{sec:amevol}, sa
fonction est le calcul des accélérations radiatives suivant le premier
formalisme de G.Alécian. {\tt alecian1} utilise les tables~:
{\tt phi\_psi2\_100.dat ... phi\_psi2\_200.dat} du sous-directory
{\tt SUN\_STAR\_DATA}.
Chaque fichier correspond à une valeur de la masse clairement identifiée. 
Cette routine est le regroupement et l'adaptation à \cesam2k
des données calculées par les sous-programmes {\tt modul\_ppxi}
et {\tt modul\_grad} de G.Alécian.

\medskip
\noi {\bf Description}~: 
\begin{itemize}
\item Lors du premier appel~: lecture des options, des données et
préparation de tableaux nécessaires au calcul des accélérations. Les
éléments chi\-mi\-ques utilisés sont identifiés et les isotopes sont
regroupés. L'accélération radiative de chaque élément non identifié
peut, soit être mise à 0, soit être fixée égale à $-g_{\rm e}$
(gravité), l'élément ne subit alors aucune force externe. Pour chaque
élément identifié, bien que le calcul de l'accélération radiative
puisse être effectué, l'une ou l'autre des possibilités décrites
précédemment peut être éventuellement utilisée. Pour ce faire, il
convient de suivre, {\embf avant compilation}, les intructions données en
commentaires.

\medskip

\PB{Dans la présente version de \cesam2k, les seuls éléments identifiables
sont~: C, N, O, Ne, Na, Mg, Al, Si, S, Ar, Ca, et Fe. Il n'est pas possible de
calculer des accélérations radiatives pour H, He, Li, Be par exemple.}

\medskip

\item Puis, pour chaque appel~: calcul des accélérations radiatives et
calcul de la gravité effective sur chaque ion.
\end{itemize}
 
\medskip
\noi {\bf Appel~}~: {\tt alecian1} est appelée par la routine générique
{\tt f\_rad}, \cfparagr{sec:frad}.

\begin{tt}
\begin{verbatim}
  SUBROUTINE alecian1(lum,ray,t,kap,dkapx,nel,ychim,ioni,grav,g_rad,dg_rad)	
\end{verbatim}
\end{tt}
\begin{itemize}
\item Entrées~:
 \begin{itemize}	
  \item {\tt lum, ray, t, kap, dkapx}~: luminosité,
   rayon, température, opacité, dérivée/X (mole).
  \item {\tt nel, ychim, ioni, grav}~: nombre d'électrons libres par volume,
   composition chi\-mi\-que par mole, taux d'ionisation, gravité.    
 \end{itemize}
 \item Entrées/Sorties~: {\tt g\_rad(i)}~: vecteur des accélérations radiatives,
  la gravité est {\tt grav+g\_rad} sur l'élément d'indice i 
 \item Sorties~: {\tt g\_rad(i,j)}~: matrice des dérivées des
 accélérations radiatives sur l'élément i / abondance par mole
 de l'élément j.
\end{itemize}

\section{Routine {\tt ascii}}\index{ascii.f}\label{sec:rascii}
Cette routine {\tt PRIVATE} du module {\tt mod\_cesam}, \cfparagr{sec:amcs},
 permet la création d'un fichier de sortie ASCII personnalisé. Pour ce faire,
coder {\tt nom\_output='ascii'} dans le fichier de données
{\tt mon\_modele.don}.
Les quantités à écrire, leur ordre et la structure souhaitée sont
définis dans un fichier de nom {\tt sortie\_ascii} qui doit se trouver
dans l'environnement, \cfparagr{sec:ascii}. Les lignes d'identification sont
adaptées aux
Sorties effectuées.
Le fichier ASCII ainsi créé aura l'extension {\tt -ascii}, Exemple~:
{\tt mon\_modele-ascii} dont un exemple se trouve dans le sous-directory
{\tt EXPLOIT}.

\noi Diverses possibilités sont offertes~:
\begin{itemize}
 \item Ecriture de la fraction de masse en réel ou en DeX
 \cfparagr{sec:fichosc}.
 \item Tabulation du centre vers la surface ou l'inverse. 
\end{itemize}
Les variables et quantités globales à écrire sont {\bf nécessairement} à
prendre parmi celles des tableaux {\tt glob} et {\tt var} calculés
par {\tt cesam} \cfparagr{sec:tglob} et \paragr{sec:tvar}.

\medskip
\noi {\bf Description}~:
\begin{itemize}
 \item Mise en correspondance des tableaux des quantités globales et
 des tableaux des variables créés par {\tt cesam} et à écrire.
 \item Transformation éventuelle des masses en DeX $\Rightarrow$ fraction de
 masse.
 \item Inversion éventuelle de l'ordre d'écriture des variables.
 \item Ecriture des en-têtes.
 \item Ecriture des variables.
\end{itemize}

\medskip
\noi {\bf Appel~}~: Le sous-programme {\tt ascii} est appelé
par la routine générique {\tt output}, \cfparagr{sec:output}.
\begin{tt}\begin{verbatim}
	 SUBROUTINE ascii(nglob,tglob,totvar,tvar,var,glob,itot,
	 1 logm,reverse,titre_ascii)	
\end{verbatim}\end{tt}
\begin{itemize}
\item Entrées~:
 \begin{itemize}	
  \item {\tt nglob}~: Nombre de quantités globales à écrire.
  \item {\tt tglob}~: Tableau des indices des quantités globales à écrire. 
  \item {\tt totvar}~: Nombre de variables à écrire.
  \item {\tt tvar}~: Tableau des indices des variables à écrire. 
  \item {\tt var}~: Tableau des valeurs des variables créé par {\tt
  cesam}.  
  \item {\tt glob}~: Tableau des valeurs des quantités globales
  créé par {\tt cesam}.    
  \item {\tt itot}~: Nombre de points du tableau {\tt var}.
  \item {\tt logm}=.TRUE.~: Tabulation de la masse en DeX, en fraction de
  masse sinon.
  \item {\tt reverse}=.TRUE.~: Tabulation du centre vers la surface, de la
  surface au centre sinon. 
  \item {\tt titre\_ascii}~: Nom à attribuer au fichier ainsi créé. 
 \end{itemize}
\end{itemize}

\section{Routine générique {\tt atm}}\index{atm.f}\label{sec:atm}
Cette routine PUBLIC du module {\tt mod\_atm}, \cfparagr{sec:amatm},
gère la restitution de l'atmosphère. 
Elle fait appel à différentes routines PRIVATE, suivant le type d'atmosphère requis
défini par la variable {\tt nom\_atm} du fichier de données.

Dans ces routines y sont définies les conditions limites externes
du problème différentiel de la structure interne; ces conditions limites 
doivent porter
sur deux des trois variables thermodynamiques $P$, $T$ et $\rho$. Elles se
trouvent localisées dans la région optiquement mince de l'atmosphère.
Les équations de la structure interne supposent que le flux d'énergie
radiative est\index{limite externe}
transporté par diffusivité radiative \ie\ approximation de diffusion,
ce qui est inexact dans le milieu optiquement mince où sont définies
les conditions limites externes. Il faut donc
transporter ces limites du milieu mince dans le milieu épais.
La source de \cesam2k
offre la possibilité d'utiliser deux types de méthodes~: l'approximation
monocouche et la reconstitution de l'atmosphère. Voir, pour plus de 
détails, \citet{mp4}.

\medskip
\noi {\bf Appel~}~: {\tt atm} est appelée 
par les routines {\tt cesam}, {\tt static\_m} et {\tt static\_r}.

\begin{tt}\begin{verbatim}
	SUBROUTINE atm(list,l_rac,r_rac,xchim,pt_rac,dptsdl,dptsdr,
	1 t_rac,dtsdl,dtsdr,m_rac,dmsdl,dmsdr,p_rac,dpsdl,dpsdr,t_eff)
\end{verbatim}\end{tt}
\begin{itemize}
\item Entrées~:
 \begin{itemize}	
  \item {\tt list=.TRUE.}~: calcul réduit pour une liste (sans les dérivées),
  \item {\tt l\_rac}~: luminosité au raccord,
  \item {\tt r\_rac}~: rayon au raccord,        
  \item {\tt xchim }~: composition chi\-mi\-que par gramme.  
 \end{itemize}
\item Sorties~:
 \begin{itemize}	
  \item {\tt pt\_rac}~: pression totale au raccord,
  \item {\tt dptsdl}~: dérivée / L de la pression totale au raccord,   
  \item {\tt dptsdr}~: dérivée / R de la pression totale au raccord,   
  \item {\tt t\_rac}~: température au raccord,
  \item {\tt dtsdl}~: dérivée / L de la température au raccord,    
  \item {\tt dtsdr}~: dérivée / R de la température au raccord,    
  \item {\tt m\_rac}~: masse au raccord,
  \item {\tt dmsdl}~: dérivée / L de la masse au raccord,   
  \item {\tt dmsdr}~: dérivée / R de la masse au raccord,       
  \item {\tt p\_rac}~: pression gazeuse au raccord,
  \item {\tt dpsdl}~: dérivée / L de la pression gazeuse au raccord,   
  \item {\tt dpsdr}~: dérivée / R de la pression gazeuse au raccord,    
  \item {\tt t\_eff }~: température effective. 
 \end{itemize}
\end{itemize}

\section{Routine subordonnée {\tt base\_chim}}\index{base\_chim.f}
\label{sec:basechim}
Cette routine subordonnée de {\tt diffus}, génère le vecteur nodal de la base
de B-splines utilisée
pour la résolution des équations de la diffusion des éléments chimiques,
 \cfparagr{sec:eqd}.

\medskip
\noi {\bf Description}~:
\begin{itemize}
 \item Allocation et initialisation du tableau des multiplicités.
 \item Définition des multiplicités aux limites \ZRZC. 
 \item Formation du vecteur nodal.
\end{itemize}

\medskip
\noi {\bf Appel~}~: Le sous-programme {\tt base\_chim}, n'a pas d'argument.

\section{Routine subordonnée {\tt base\_rota}}\index{base\_rota.f}
\label{sec:baserota}
Cette routine subordonnée de {\tt diffus} et de {\tt evol}, génère le vecteur
nodal de la base de B-splines utilisée
pour la résolution des équations de la diffusion du moment cinétique,
 \cfparagr{sec:difcin}.

\medskip
\noi {\bf Description}~:
\begin{itemize}
 \item Allocation du tableau des multiplicités.
 \item Initialisation du tableau des multiplicités selon la présence ou
 l'abscence de limites \ZRZC.
 \item Formation du vecteur nodal.
\end{itemize}

\medskip
\noi {\bf Appel~}~: Le sous-programme {\tt base\_rota}, n'a pas d'argument.

\section{Routine {\tt cesam}}\index{cesam.f}\label{sec:cesam}
Cette routine PUBLIC, sans argument, du module {\tt mod\_cesam},
\cfparagr{sec:amcs},
constitue en fait le programme principal. Elle gère l'ensemble des calculs;
elle est appelée par les programmes {\tt cesam2k} ou {\tt cesam2k\_dbg},
\cfparagr{sec:cesam2k}. Son organigramme général est présenté \Fig{fig:org}.
 Elle est divisée en 5 parties~:
\begin{itemize}
 \item {\em Menu d'entrée identifiant l'option de \cesam2k à utiliser}~:
  \begin{itemize}
   \item Reprise d'une évolution en cours.
   \item Initialisation d'un modèle de \ZAMS\ homogène.
   \item Initialisation d'un modèle de \PMS\ homogène. 
  \end{itemize}
  Puis lecture du fichier de données {\tt mon\_modele.don}, enfin,
  initialisation des paramètres de calcul.
  \item {\em Cas de la reprise d'une évolution en cours.}
  Bien qu'il y ait séparation des cas, modèle repris en binaire ou en ASCII, le
  déroulement des calculs est assez similaire~:
  \begin{itemize}  
   \item Lecture du modèle à reprendre, soit en binaire, soit en ASCII.
   \item Vérification de la cohérence des paramètres utilisés dans le
   modèle repris et ceux définis par le fichier de données.
   \item Initialisations diverses, en particulier les réactions
   thermonucléaires et détermination de la valeur du premier pas temporel à
   utiliser.
   \item Pour un modèle repris en ASCII, initialisation des développements
   sur des bases de B-splines des variables principales et de la
   composition chi\-mi\-que.
  \end{itemize}
 \item {\em Cas de l'initialisation d'un modèle de \ZAMS\ homogène.}
  \begin{itemize}
  \item Séparation des cas~: modèle d'initialisation en binaire, en ASCII.
  \item Pour un modèle repris en ASCII, initialisation des développements
   sur les bases de B-splines des variables principales.
  \item Formation de la fonction de répartition.
  \item Initialisations diverses, en particulier les réactions
   thermonucléaires.
   \item calcul du modèle de ZAMS homogène par appel à la routine
   {\tt resout}.    
  \end{itemize}
 \item {\em Cas de l'initialisation d'un modèle de \PMS\ homogène.}  
  \begin{itemize}
   \item Séparation des cas~: modèle repris en binaire ou en ASCII.
   \item Pour un modèle repris en ASCII, initialisation des développements
   sur des bases de B-splines des variables principales.
   \item Formation de la fonction de répartition.
   \item Initialisations diverses, en particulier les réactions
   thermonucléaires.
   \item Lecture du facteur de contraction, et calcul d'un premier modèle
   initial par appel à la routine {\tt resout}.
   \item Dialogue de validation du modèle calculé avec, éventuellement,
    reprise du calcul avec un facteur de contraction amélioré.
   \item Calcul d'un second modèle initial avec un facteur de contraction
   augmenté de 10\%.
   \item Après validation, calcul du pas temporel initial.
  \end{itemize}
 \item {\em Calcul de l'évolution.}
  \begin{itemize}
   \item Ecriture du modèle en binaire pour les reprises~:
   fichier {\tt mon\_modele\_B.rep}. En affectant une valeur négative au
   paramètre {\tt NB\_MAX\_MODELES} du fichier de données,\cfparagr{sec:nlevol},
   tous les fichiers binaires seront écrits dans l'environnement. Pour
   identification le numéro du modèle est indiqué dans le nom du fichier,
   exemple~: {\tt mon\_modele{\em 0146}\_B.rep}. 
   \item Mise à jour du fichier {\tt mon\_modele.HR}  pour dessin du
   dia\-gram\-me HR; ce dernier est réinitialisé dans le cas d'une nouvelle
   évolution.
   \item Formation du listing {\tt mon\_modele.lis}.
   \item Calcul du modèle au pas temporel suivant par appel à la routine
   {\tt resout}.
   \item Gestion du nouveau modèle~:
    \begin{itemize}
    \item Arrêt du calcul, formation du listing, du fichier ASCII s'il est
    demandé. On trouve au \paragr{sec:tglob} et \paragr{sec:tvar}
    la des\-crip\-tion des tableaux
    {\tt glob} et {\tt var} créés par {\tt cesam} pour les Sorties ASCII.
    \item Poursuite du calcul de l'évolution.    
   \end{itemize}
  \end{itemize} 
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt cesam}, appelée par le programme principal,
\cfparagr{sec:cesam2k}, {\embf n'a pas d'argument}.

\section{Programmes {\tt cesam2k, cesam2k\_dbg}}\label{sec:cesam2k}
\index{cesam2k.f}\index{cesam2k\_dbg.f}
Ces deux programmes permettent l'exploitation et le debug de \cesam2k. Ils ne
comportent que l'instruction d'appel à la routine {\tt cesam},
 \cfparagr{sec:cesam}. Ils ne sont
différenciés que par des options de compilation qui optimisent l'exécution
ou permettent le debug. (Les deux programmes {\tt cesamT} et {\tt cesamT\_dbg}
identiques aux précédents et utilisés pour des tests, ne sont laissés dans la
distribution que pour en faciliter la gestion.)

\section{Routine {\tt chim\_gram}}\index{chim\_gram.f}
\label{sec:chimgram}
La fonction de cette routine PUBLIC du module {\tt mod\_variables}
effectue la transformation des valeurs des
rapports d'abondances par mole et de leurs dérivées en rapports  d'abondances
par masse.

\medskip
\noi {\bf Appel~}~: {\tt chim\_gram} est appelée de divers endroits,
depuis {\tt cesam} particulièrement.

\begin{tt}
\begin{verbatim}
	SUBROUTINE chim_gram(xchim,dxchim)
\end{verbatim}
\end{tt}
\begin{itemize}
\item Entrées/Sorties~:
 \begin{itemize}	
   \item {\tt xchim, dxchim}~: composition chi\-mi\-que et
   dérivée par mole $\longrightarrow$ par gramme.
 \end{itemize}
\end{itemize}

\section{Routine générique {\tt coeff\_rota}}\index{coeff\_rota.f}
\label{sec:coeffrota} 
Cette routine PRIVATE du module {\tt mod\_evol},
\cfparagr{sec:amevol}, est la gestion du calcul 
des coefficients de la diffusion du moment cinétique.

\medskip
\noi {\bf Description}~:
Le calcul est orienté vers la routine définie dans la
routine {\tt lit\_nl.f}, \cfparagr{sec:litnl}, suivant le nom du formalisme à
utiliser, \cfparagr{sec:fdon}.

\medskip
\noi {\bf Appel~:} {\tt coeff\_rota} est appelée par {\tt eq\_diff\_rota},
\cfparagr{sec:eqdiffrota}.

\begin{tt}
\begin{verbatim}
	SUBROUTINE coeff_rota(dt,nu,y,frl,ddfrl)
\end{verbatim}
\end{tt}
\begin{itemize}
\item Entrées~:
 \begin{itemize}	
  \item {\tt dt, nu, y}~: pas temporel, abscisse, tableau des variables de la
  rotation.
 \end{itemize}
\item Sorties~:
 \begin{itemize}	
  \item {\tt frl, ddfrl}~: coefficients des équations de la rotation et
  dérivées par rapport aux variables de la rotation.
 \end{itemize}
\end{itemize}

\section{Routines {\tt coeff\_rota3/4}}\index{coeff\_rota3/4.f}
\label{sec:corot3/4}
Ces routines ont pour fonction le calcul des
coefficients des équations de la diffusion du moment angulaire suivant le
formalismes de \citet{tzmm97,mz04} respectivement.

\medskip
\noi {\bf Description}~:
\begin{itemize}
\item Interpolation au point de calcul des variables de l'équilibre
quasi-statique et calcul de divers coefficients.
\item Interpolation de la composition chi\-mi\-que, appel à l'\EOS.
\item Estimation des variables de la rotation et de  l'équilibre
quasi-statique au pas temporel précédent.
\item Calcul de l'opacité, des taux d'ionisation, de l'énergie nucléaire et
calcul de divers coefficients.
\item Interpolation au point de calcul des variables de la rotation.
\item Calcul des coefficients de diffusion et des pertes de moment cinétique.
\item Calcul des coefficients non identiquement nuls.
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt coeff\_rota3/4} sont appelées par {\tt coeff\_rota}
 {\tt eq\_diff\_rota3/4}. Les arguments sont ceux de {\tt coeff\_rota}.

\section{Routine {\tt coll\_atm}}\index{coll\_atm.f}
\label{sec:collatm} 
La fonction de cette routine PRIVATE du module {\tt mod\_atm},
\cfparagr{sec:amatm}, 
est la résolution, dans l'espace des B-splines,
du système des équations de la restitution de l'atmosphère~\eq{eq:sysa2}.

\medskip
\noi {\bf Description}~:
\begin{itemize}
\item Initialisation du vecteur nodal et des limites, initialisations et
allocations diverses lors du premier appel.
\item Vérification, qu'au point de raccord,  l'accélération
centrifuge ne dépasse pas la gravité.
\item Pour chaque point de collocation et chaque point limite,
formation par appels à {\tt eq\_atm} des~\eq{eq:sysa2}
dans l'espace des B-splines.
\item Résolution du système et évaluation des corrections
de la méthode itérative, retour à {\tt lim\_atm}
ou poursuite des itérations (boucle infinie).
\end{itemize}

\medskip
\noi {\bf Appel~}~: {\tt coll\_atm} est appelée par la routine
{\tt lim\_atm} \cfparagr{sec:limatm}.

\begin{tt}
\begin{verbatim}
 SUBROUTINE coll_atm(r_rac,l_rac,xchim,ord_atm,knot_atm,dim_atm,ms_atm)
\end{verbatim}
\end{tt}

\begin{itemize}
 \item Entrées~:
 \begin{itemize}	
  \item {\tt r\_rac, l\_rac, xchim}~: rayon, luminosité
  composition chi\-mi\-que au raccord avec l'enveloppe.
\item {\tt ord\_atm, knot\_atm, dim\_atm, ms\_atm}~: ordre des équations
différentielles,
nombre de points du vecteur nodal, dimension de la base de B-splines, ordre des
B-splines.
 \end{itemize}
\end{itemize}

\section{Routine {\tt coll\_qs}}\index{coll\_qs.f}
\label{sec:collqs} 
La fonction de cette routine PRIVATE du module {\tt mod\_static},
\cfparagr{sec:amqst}, 
effectue la résolution, dans l'espace des B-splines,
du sytème \eq{eq:43} des équations de la structure interne
(équilibre quasi-statique).

\medskip
\noi {\bf Description}~:
\begin{itemize}
\item Initialisation du vecteur nodal
et des limites, initialisations et allocations diverses lors du premier appel.
\item Changement de la base de B-splines si le nombre de couches a varié
depuis l'appel précédent.
\item Pour chaque point de collocation et chaque point limite,
formation par appels à {\tt static}, \cfparagr{sec:static}, des \eqs{eq:43}
dans l'espace des B-splines.
\item Résolution du système et évaluation des corrections et de la précision
de la méthode itérative, retour à {\tt resout}
ou poursuite des itérations (boucle infinie).
\end{itemize}

\medskip
\noi {\bf Appel~}~: {\tt coll\_qs} est appelée par {\tt resout},
\cfparagr{sec:resout}.

\begin{tt}
\begin{verbatim}
         SUBROUTINE coll\_qs(dt,compt,reprend,err,vare,qmax,corr)
\end{verbatim}
\end{tt}

\begin{itemize}
 \item Entrées~:
 \begin{itemize}	
  \item {\tt dt, compt, reprend=.TRUE.}~: pas temporel, compteur du nombre
  d'itérations, il faut réinitialiser la solution.
 \end{itemize}
 \item Sorties~:
 \begin{itemize}
  \item {\tt err, vare, qmax, corr}~: erreur maximale, variable présentant
  cette erreur, indice de la couche où l'erreur est maximale, correction.  
 \end{itemize}	 
\end{itemize}

\section{Routine {\tt collision}}\index{collision.f}
\label{sec:collision}\index{intégrales de collision}
Cette routine PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol},
calcule les intégrales de collision
$\Omega^{(kl)}_{ij},\ k,l=1,2$ en utilisant les tabulations de
\citet{ppfm86}. Ces tables ont été scannées de l'ApJS.
Les quantités qui figurent dans les {\tt data} sont
les valeurs des intégrales de collision calculées
par les formules d'interpolation pour les $\psi_{st}(n)$
(notations de \citet{ppfm86}), et prolongées jusqu'à $\psi_{st}=4$;
au delà de $\psi_{st}=4$, on utilise les approximations analytiques.

Au premier appel de la routine, on calcule les coefficients
d'interpolation (appel à {\tt bsp1dn}, \cfparagr{sec:bsp1dn}) et on effectue
quelques autres initialisations. De la longueur de Debye $\lambda$,
on déduit les valeurs des $\psi_{ij}$ d'où
l'interpolation des intégrales de collision et le
calcul de leurs dérivées par rapport à chacune des abondances;
distinction est faite entre potentiels attractifs et répulsifs.
On économise des ressources de temps calcul en exploitant les symétries.

\medskip
\noi {\bf Appel~}~: {\tt collision} est appelée par la routine
 {\tt diffm\_br} \cfparagr{sec:diffmbr}.

\begin{tt}
\begin{verbatim}
	SUBROUTINE collision(nb,zb,mij,xi,ro,drox,t,omega11,zij,zpij,zsij,
	1	domega11,dzij,dzpij,dzsij)
\end{verbatim}
\end{tt}
 
\begin{itemize}
\item Entrées~:
 \begin{itemize}	
   \item {\tt nb, zb, mij, xi}~: nombre de particules (1~: indice de \H1,
   {\tt nb}~: indice pour les électrons), charges, masses réduites,
   abondances par mole. 
    \item {\tt ro, drox, t}~: densité, dérivée logarithmique par mole,
    température.  
 \end{itemize}
 
\item Sorties~:
 \begin{itemize}
 \item {\tt omega11, zij, zpij, zsij}~: tables des intégrales de collision.
 \item {\tt domega11, dzij, dzpij, dzsij}~: tables des dérivées des
 intégrales de collision.
\end{itemize}
\end{itemize}

\section{Routine générique {\tt conv}}\label{sec:conv.f}\index{conv}
\index{routines de convection}
Cette routine PUBLIC du module {\tt mod\_conv}, \cfparagr{sec:amco}, gére le
calcul du gradient de température $\nabla\equiv\dsdx{\ln T}{\ln P}$
dans les zones convectives et de ses dérivées
partielles par rapport aux variables locales.\index{convection}
Suivant la formulation de la convection définie dans le fichier de données,
\cfparagr{sec:fdon}, un appel ciblé dirige le calcul vers la routine
{\sl ad-hoc}.

\medskip
\noi{\bf Description}~:\\
La structure des routines de convection est la même pour toutes. Seules
diffèrent les formulations \cfparagr{sec:gradconv}.
Des grandeurs spécifiques aux conditions physiques du calcul
sont initialisées au premier appel.
Puis la racine réelle de la cubique est recherchée en utilisant l'algorithme de
Newton-Raphson. Enfin le gradient convectif, l'efficacité de la convection et
leurs diverses dérivées sont calculés.

\medskip
\noi {\bf Appel~}~: Le sous-programme {\tt conv} est appelé 
par les routines {\tt thermo}, \cfparagr{sec:thermo}, et {\tt thermo\_atm},
\cfparagr{sec:thermoatm}.

\begin{tt}\begin{verbatim}
	SUBROUTINE conv(r,krad,gravite,delta,cp,ro,hp,taur,gradrad,
	1 gradad,der,gradconv,dgradkra,dgradgra,dgradel,dgradcp,dgradro,
	2 dgradhp,dgradtaur,dgradgrad,dgradgad,
	3 gam,dgamkra,dgamgra,dgamdel,dgamcp,dgamro,
	4 dgamhp,dgamtaur,dgamgrad,dgamgad)
\end{verbatim}\end{tt}
\begin{itemize}
\item Entrées~:
\begin{itemize}
\item {\tt r, krad, gravite, delta, cp}~: rayon, conductivité radiative,
gravité, $\delta$, $c_{\rm p}$.
\item {\tt ro ,hp, taur, gradrad, gradad}~: densité, échelle de hauteur de
pression, épaisseur optique de la bulle convective, gradient radiatif,
gradient adiabatique -- éventuellement corrigé du terme
$\ddx{\ln\Pgaz}{\ln P}$, \cfparagr{sec:pturb}.
\item {\tt der=.TRUE.}~: le calcul des dérivées est requis.
\end{itemize}
\item Sorties~:
\begin{itemize}
\item {\tt gradconv, dgradkra, dgradgra, dgradel, dgradcp, dgradro,
dgradhp, dgradtaur, dgradrad, dgradad}~: gradient
de température et dérivées.
\item {\tt gam, dgamkra, dgamgra, dgamdel, dgamcp, dgamro, dgamhp, dgamtaur,
dgamgrad, dgamgad}~: efficacité de la convection et dérivées.
\end{itemize}
\end{itemize}

\section{Routine {\tt conv\_a0}}\index{conv\_a0.f}\label{sec:conva0}
En un point d'une zone convective,
il semble irréaliste que la longeur de mélange puisse être
supérieure à la distance qui sépare ce point de la plus proche
limite de la zone convective. Ainsi que \citet{e72} l'a proposé,
avec la routine PRIVATE {\tt conv\_a0} du module {\tt mod\_conv},
\cfparagr{sec:amco}, la longueur de mélange utilisée devient nulle
à chaque limite\ \ZRZC. L'introduction de la distance
exacte change la nature du problème qui devient
intégro-différentiel ce qui complique considérablement la résolution
numérique. Ce qu'évite la formulation locale d'Eggleton,
\cfparagr{sec:gradconv}.

\section{Routine {\tt conv\_cm}}\label{sec:convcm}\index{conv\_cm.f} 
Dans la routine PRIVATE {\tt conv\_cm} du module {\tt mod\_conv},
\cfparagr{sec:amco}, le gradient de température
dans une zone convective est calculé selon les prescriptions de
\citet{cm91} avec, pour longueur de mélange, $l=\alpha\Hp$,
\cfparagr{sec:gradconv}.

\section{Routines {\tt conv\_cgm\_reza, conv\_cm\_reza}}
\label{sec:convreza}\label{sec:convcreza} 
\index{conv\_cm\_reza.f}\index{conv\_cgm\_reza.f}
 Dans la routine PRIVATE {\tt conv\_cm\_reza} du module {\tt mod\_conv},
\cfparagr{sec:amco}, similaire à {\tt conv\_cm}, il est tenu
 compte de la quantité thermodynamique $\delta=(\dsdx{\ln\rho}{\ln T})_P$.
 Dans la routine {\tt conv\_cgm\_reza},
 le calcul du gradient convectif est effectué selon les prescriptions de 
 \citet{cgm96}  avec la prescription de Bernkopf (\citet{h02}),
 \cfparagr{sec:gradconv}.

 Ces deux routines ont été mises en \oe uvre et mises à la disposition des
 utilisateurs de \cesam2k
  par Reza Samadi, LESIA , Observatoire de Paris

\section{Routine {\tt conv\_jmj}}\label{sec:convjmj}\index{conv\_jmj.f}
Les spécificités de la routine de convection PRIVATE {\tt conv\_jmj}
du module {\tt mod\_conv}, \cfparagr{sec:amco}, 
ont été décrites au \paragr{sec:gradconv}.
La mise en \oe uvre de {\tt conv\_jmj} a bénéficié
de la collaboration de J.Provost et de MJ.Goupil.

\section{Routine {\tt coulomb}}\index{coulomb.f}
\label{sec:coulb}
Cette routine PRIVATE du module {\tt mod\_evol} effectue le calcul
 du logarithme de Coulomb et de
ses dérivées par rapport à la densité et à l'abondance en \H1
 ou \He4, suivant le formalisme simplifié de \citet[][p. 250]{mp93}.

\medskip
\noi {\bf Appel~:} {\tt coulomb} est appelée par la routine {\tt diffm\_mp}. 

\begin{tt}
\begin{verbatim}
	SUBROUTINE coulomb(zi,zj,thetae,ro,x,t,lnlambij,
	1	lnlambijr,lnlambijx,cij,cijr,cijx)
\end{verbatim}
\end{tt}

\begin{itemize}
\item Entrées~:
 \begin{itemize}	
 \item {\tt zi, zj, thetae}~: charges des éléments {\tt i} et {\tt j},
 {\tt thetae}=1 pour un mélange hélium/hydrogène;   
 \item {\tt ro, x, t}~: densité, abondance par volume de \H1
ou \He4, température. 
 \end{itemize}
 
\item Sorties~:
 \begin{itemize}
 \item {\tt lnlambij, lnlambijr, lnlambijx,  cij, cijr, cijx}~: logarithmes de
 Coulomb et dérivées par rapport à $\rho$ et \H1 ou \He4.
\end{itemize}
\end{itemize}

\section{Routines {\tt ctes\_85}, {\tt ctes\_94}, {\tt ctes\_94m}}
\index{ctes\_85.f}\label{sec:ctes85}\index{ctes\_94.f}\index{ctes\_94m.f}
Ces routines PRIVATE du module {\tt mod\_donnees} permettent
l'initialisation de la plupart des éléments du module {\tt mod\_donnees},
\cfparagr{sec:moddon}, qui
regroupe les principales constantes physiques à utiliser.
                                                                 
\begin{itemize}
 \item {\tt ctes\_85}~: Routine de référence, dont la
source principale des données de physique est le CRC Handbook of
chemistry and physics\index{ctes}
75th edition 1994, D.R. Lide {\em et al.} CRC press Boka Raton, Ann Arbor,
London, Tokyo.   
 \item {\tt ctes\_94}~: Identique à {\tt ctes\_85} avec des valeurs plus
 récentes pour quelques constantes.
 \item {\tt ctes\_94m}~: Identique à {\tt ctes\_94} avec des valeurs entières
 pour les masses atomiques.
 
\end{itemize}

\medskip
\noi {\bf Appel}~: Suivant la variable {\tt nom\_ctes} du fichier de données
\cfparagr{sec:fdon},
l'une ou l'autre est appelée par la routine générique {\tt ini\_ctes}
\cfparagr{sec:inictes},
au début de l'exécution du sous-programme {\tt cesam} \cfparagr{sec:cesam}.
Ces routines {\bf n'ont pas d'argument}. 

\section{Routine générique {\tt des}}\index{des.f}\label{sec:des}
Cette routine PRIVATE du module {\tt mod\_cesam}, \cfparagr{sec:amcs}, 
est la {\embf routine générique} de dessin, elle utilise le logiciel
{\sc pgplot} \cfparagr{sec:pgplot}. Au fur et à mesure du calcul, 
le diagramme HR, la répartition en \ZRZC, les variables
de structure et les abondances en fonction de la masse ou du rayon sont tracés.

\medskip
\noi {\bf Appel~:} {\tt des} qui n'a que des arguments d'entrée est
appelée par {\tt cesam}.

\begin{tt}
\begin{verbatim}
	SUBROUTINE des(fin,dt,teff)
\end{verbatim}
\end{tt}
\begin{itemize}
\item   {\tt fin=.TRUE.}~: dernier appel, fermeture du dessin, 
\item   {\tt dt, teff}~: pas temporel, température effective.
\end{itemize}
  
\section{Routines {\tt des\_m}, {\tt des\_r}}
\index{des\_r.f}\index{des\_m.f}\index{no\_des}
L'une ou l'autre de ces routines PRIVATE du module {\tt mod\_cesam},
\cfparagr{sec:amcs}, est appelée
par la routine générique {\tt des} suivant le type de dessin défini par la
variable {\tt nom\_des} du fichier de données, \cfparagr{sec:fdon}.
Le dessin est effectué respectivement en fonction de la masse
({\tt nom\_des='des\_m'}) ou du rayon {\tt nom\_des='des\_r'}), ou encore
n'est pas effectué ({\tt nom\_des='no\_des'})

\medskip
\noi{\bf Description~:} Les algorithmes de ces deux routines sont similaires~:

\begin{itemize}
\item Initialisations diverses relatives au logiciel {\tt PGPLOT}.
\item Tracé des abondances par unité de masse,
\H1 et \He4 sont dessinées en valeurs réelles, les abondances des autres
éléments sont normalisées sur [0,1], les coefficients
de normalisation sont indiqués sur l'écran pour chaque variable.  
\item Tracé des variables de structure normalisées, pression,
température, rayon ou masse et luminosité, les coefficients
de normalisation sont indiqués sur l'écran pour chaque variable. 
\item Tracé du diagramme HR, sur les deux axes, les échelles sont
déterminées lors du premier appel en fonction de la valeur de
la masse initiale; si le fichier {\tt mon\_modele.TeffL} existe dans
l'environnement, tracé de la boîte d'erreur \cfparagr{sec:zoom}.
\item Tracé des zones convectives, à l'issue de chaque pas temporel,
un trait plein indique les intervalles de masse affectés par la convection.
\end{itemize}

\medskip
\noi {\bf Particularité de} {\tt des\_r}~: 

\noi Le rayon d'une étoile change au cours de l'évolution;
il arrive que les graphes de la représentation des variables de structure
en fonction du rayon utilisent mal le domaine spatial de l'épure. Lorsque
le rayon total devient, soit supérieur aux 9/10, soit inférieur
aux 3/4, du domaine, on effectue un changement d'échelle qui a pour effet de
ramener la surface aux 3/4 du domaine. Tant que l'échelle en rayon reste fixée,
un tiret vertical -- aux 3/4 du domaine -- matérialise
la valeur antérieure du rayon qui a servi à définir l'échelle. Cette disposition
permet de suivre l'évolution du rayon en restant dans le cadre de l'épure.

\section{Routine {\tt df\_rotx}}
\index{df\_rotx.f}\label{sec:drotx}
Cette routine PUBLIC du module {\tt mod\_etat}, \cfparagr{sec:amet},
constitue un opérateur qui
permet de transformer les dérivées par rapport à $P,T,X$
d'une fonction thermodynamique $f(P,T,X)$ en celles par rapport à 
$\rho,T,X$. En appliquant plusieurs fois l'opérateur on obtient les
dérivées d'ordre supérieur.

\medskip
\noi {\bf Appel~:} {\tt df\_rotx} est appelée par {\tt add\_ascii},
\cfparagr{sec:addascii}. 

\begin{tt}
\begin{verbatim}
  SUBROUTINE df_rotx(p,ro,t,alfa,delta,dfdp_tx,dfdt_px,dfdx_pt,
  1 drodx_pt,df_dro,df_dt,df_dx)	
\end{verbatim}
\end{tt}

\begin{itemize}
\item Entrées~:
 \begin{itemize}	
  \item {\tt p, ro, t, alfa, delta}:
  pression, densité, température, $\dsdx{\ln\rho}{\ln P}$,
  $-\dsdx{\ln\rho}{\ln T}$,
  \item {\tt dfdp\_tx, dfdt\_px, dfdx\_pt,drodx\_pt}~: $\dsdx fP$, $\dsdx fT$,
  $\dsdx fX$, $\dsdx\rho X$.
 \end{itemize}
 \item Sorties~: 
 \begin{itemize}	
  \item {\tt df\_dro, df\_dt, df\_dx}~: $\dsdx f\rho$, $\dsdx fT$,
  $\dsdx fX$
 \end{itemize} 
\end{itemize}

\section{Fonction {\tt dgrad}}\index{dgrad.f}\label{sec:dgrad}
Cette fonction PUBLIC du module {\tt mod\_static}, \cfparagr{sec:amqst},
forme le critère de convection de Schwarzschild ou de Ledoux suivant les
prescriptions décrites au \paragr{sec:swlx}. \index{Schwarzschild}\index{Ledoux}

{\bf Description~:}
\begin{itemize}
\item Après quelques initialisations, appel à l'\EOS\ et calcul de l'\opa
\item Calcul du gradient radiatif avec le cas particulier du centre.
\item Formation du critère de convection de Schwarzschild ou de Ledoux.
\end{itemize}

\medskip
\PB{Pour une raison inconnue, l'utilisation du critère de Ledoux
est délicate.}

\medskip
\noi {\bf Appel~:} {\tt dgrad} est appelée de {\tt lim\_zc},
\cfparagr{sec:limzc}.

\begin{tt}
\begin{verbatim}
	FUNCTION dgrad(pt,p,t,dlpp,xchim,m,l,r,dxchim,w)
\end{verbatim}
\end{tt}

\begin{itemize}	
 \item {\tt pt, p, t, dlpp, xchim, dxchim}~: Pression totale et gazeuse,
 température, $\dsdx{\ln\Pgaz}{\ln P}$, composition chi\-mi\-que et dérivée;
 \item {\tt m, l, r, w}~: masse, luminosité, rayon, vitesse angulaire. 
\end{itemize}

\section{Routine générique {\tt diffm}}\label{sec:diffm}\index{diffm.f}
Cette routine PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol}, 
est la {\embf routine générique} de calcul de la diffusion microscopique.
Elle gère les
descriptions {\tt diffm\_br}, {\tt diffm\_mp} et {\tt diffm\_0}, cette dernière,
formelle, fixe à zéro les coefficients de diffusion microscopique.

\medskip
\noi {\bf Description}~:\\
Pour chaque élément du vecteur de composition chi\-mi\-que, l'équation de
diffusion, avec les termes nucléaires, est formulée
dans la routine {\tt eq\_dif\_chim}. Les coefficients de diffusion
microscopique sont calculés dans les routines de type {\tt diffm},
et des coefficients de diffusion turbulente et de mélange
(moment angulaire inclus) sont introduits par l'intermédiaire
des routines de type {\tt difft} \cfparagr{sec:difft}.

\medskip
\noi {\bf Appel~:} {\tt diffm} est appelée par {\tt eq\_diff\_chim},
\cfparagr{sec:eqdiffchim}.
\begin{tt}
\begin{verbatim}
  SUBROUTINE diffm(p,t,r,l,m,ro,drox,kap,dkapx,w,gradrad,dgradradx,xi,d,dd,v,dv)	
\end{verbatim}
\end{tt}
\begin{itemize}
\item Entrées~:
\begin{itemize}	
 \item {\tt p, t, r, lum, ltot, m}~: pression, température, rayon,
 luminosité locale et totale, masse.
 \item {\tt ro, drox, kap, dkapx}~: densité, dérivée/ X, opacité, dérivée / X,
  \item {\tt gradrad, dgradradx, xi}~: gradient radiatif, dérivée / X.
  composition chi\-mi\-que par mole.
\end{itemize}
\item Sorties~:
\begin{itemize}	
 \item {\tt d, dd}~: matrice des coefficients de diffusion microscopiques
 $d_{ij}$ de $\dsdx{x_j}m$ et dérivées $\dsdx{d_{ij}}{x_k}$.
 \item {\tt v, dv}~: vecteur des vitesses $v_i$ des $x_i$ et dérivées
 $\dsdx{v_i}{x_k}$.    
\end{itemize}
\end{itemize}

\section{Routine {\tt diffm\_br}}\label{sec:diffmbr}
\index{equations de Burgers}\index{diffm\_br.f}
La routine PRIVATE {\tt diffm\_br} du module {\tt mod\_evol},
\cfparagr{sec:amevol}, permet de calculer les coefficients
de diffusion microscopique en résolvant les équations
de transport selon le formalisme de Burgers, en tenant compte, éventuellement,
des accélérations radiatives \cfparagr{sec:accrad}.
La formulation du système des équations de
Burgers utilisée dans \cesam2k, est en grande partie originale. Elle est décrite
\paragr{sec:burgers}.
 
\medskip
\noi{\bf Description}~:
\begin{itemize}
\item Au premier appel, initialisation de constantes, des masses réduites,
allocation diverses, initialisation des accélérations radiatives.
\item Calcul des taux d'ionisation, calcul du poids moléculaire moyen, de la
gravité corrigée des accélérations radiatives et de leurs dérivées.
\item Calcul des intégrales de collision, des coefficients de
résistance \eq{eq:kij} et de leurs dérivées.
\item Calcul des coefficients $\bar{q_{ij}}$ \eq{eq:qij}, $d_i$ \eq{eq:di},
$f_{ij}$ \eq{eq:fij} et de leurs dérivées.
\item Formation des matrices $\Delta$ \eq{eq:delta}, $\cal M$ \eq{eq:m},
$A_w$ \eq{eq:aw}, $A_r$ \eq{eq:ar}, $A_c$ \eq{eq:ac}, $A_e$ \eq{eq:ae}.
\item Calcul de $\omega$ par inversion du système linéaire, \eq{eq:w}.
\item Formation de la matrice des coefficients de diffusion \eq{eq:d},
et du jacobien \eq{eq:bjac}.
\item Calcul du vecteur des vitesses de diffusion \eq{eq:v} et du jacobien 
\eq{eq:vjac}.
\end{itemize} 

\section{Routine {\tt diffm\_mp}}
\index{element trace}\index{diffm\_mp.f} 
La routine PRIVATE {\tt diffm\_mp} du module {\tt mod\_evol},
\cfparagr{sec:amevol}, utilise la formulation simplifiée de 
\citet{mp93} pour l'estimation des coefficients de diffusion microscopique.
On suppose que les éléments lourds sont {\em éléments traces}, \ie un
élément autre
que \H1 et \He4 ne diffuse que par rapport aux protons. Ce formalisme, plus
simple mais moins général que celui de Burgers, {\bf ne s'applique pas} dans
un milieu privé de noyaux d'hygrogène, \ie un c\oe ur d'hélium.

\medskip
\noi{\bf Description}~:
\begin{itemize}
\item Au premier appel, initialisation de constantes, des masses réduites,
allocations diverses.
\item Calcul des logarithmes de Coulomb pour \H1 et \He4.
\item Calcul des coefficients de diffusion de \H1 et de \He4 et dérivées.
\item Calcul des coefficients de diffusion pour les éléments tests par rapport
 à \H1 et dérivées.
\end{itemize}

\section{Routine générique {\tt difft}}\label{sec:difft}\index{difft.f}
Cette routine PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol},
est la {\embf routine générique} de calcul de la diffusion turbulente.

\medskip
\noi {\bf Appel~~:} {\tt difft} est appelée par {\tt eq\_diff\_chim},
\cfparagr{sec:eqdiffchim}.
\medskip

\begin{tt}
\begin{verbatim}
	SUBROUTINE difft(melange,t,ro,drox,kap,dkapx,deff,gradad,gradrad,m,d,dd)
\end{verbatim}
\end{tt}

\begin{itemize}
\item Entrées~:
\begin{itemize}
\item {\tt melange}~: melange=.TRUE. on est dans une zone à mélanger,
\item {\tt t, ro, drox, kap, dkapx, deff}~: température, densité, opacité,
et dérivées par rapport à l'abondance de \H1 {\bf par gramme}, coefficient de
diffusion turbulente due à la rotation,
\item {\tt gradad, gradrad, m}~: gradients adiabatique et radiatifs, abscisse de
calcul.
\end{itemize}
\item Sorties~:
\begin{itemize}
\item {\tt d, dd, v, dv}~: tableaux $d(i,j),\ dd(i,j,k),\ v(i),\ dv(i,k),
\ i,j,k=1,\ldots,n_{\rm elem}$.
\end{itemize}
\end{itemize}

\section{Routine {\tt difft\_gab}}\index{difft\_gab.f}\label{sec:difftgab}
Cette routine PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol},
effectue le calcul des coefficients de diffusion turbulente. Elle exploite une
suggestion de M.Gabriel~: pour éviter la
sédimentation de l'hélium est des éléments lourds dans la partie supérieure de
l'enveloppe, il suffit de mélanger la partie de l'enveloppe jusqu'à la fin de la
zone d'ionisation de l'hélium, localisée vers $10^6$K.

\medskip
\noi{\bf Description~:}
\begin{itemize}
\item Quelques initialisations sont effectuées au premier appel.
\item S'il y a mélange, ou si la tempétature est inférieure à $10^6$K
la diagonale de la matrice de diffusion est affectée
du coefficient de mélange convectif $d_M>>1$ \cfparagr{sec:melconv}.
\item Sans mélange, on ajoute aux termes diagonaux de la matrice de diffusion,
les coefficients de diffusion turbulente {\tt d\_turb} \cfparagr{sec:fdon},
$d_{\rm eff}$ \cfparagr{sec:cturbrot}.
\end{itemize}

\begin{tt}
\begin{verbatim}
	SUBROUTINE difft_gab(melange,t,deff,d)
\end{verbatim}
\end{tt}

\begin{itemize}
\item Entrées~:
\begin{itemize}
\item {\tt melange}~: melange=.TRUE. on est dans une zone à mélanger,
\item {\tt t,deff}~: température, coefficient de diffusion turbulente due à
la rotation,
\end{itemize}
\item Sortie~:
\begin{itemize}
\item {\tt d}~: tableau $d(i,j)$.
\end{itemize}
\end{itemize}

\section{Routine {\tt difft\_nu}}\index{difft\_nu.f}\label{sec:difftnu}
Cette routine PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol},
effectue le calcul des coefficients de diffusion turbulente.

\medskip
\noi{\bf Description~:}
\begin{itemize}
\item Quelques initialisations sont effectuées au premier appel.
\item En cas de mélange, la diagonale de la matrice de diffusion est affectée
du coefficient de mélange convectif $d_M>>1$ \cfparagr{sec:melconv}.
\item Sans mélange, on ajoute aux termes diagonaux de la matrice de diffusion,
les coefficients de diffusion turbulente {\tt d\_turb} \cfparagr{sec:fdon},
$d_{\rm eff}$ \cfparagr{sec:cturbrot} et de viscosité radiative $Re_\nu$,
\cf \citet{mt02}.
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt difft\_nu}, est appelée par {\tt difft} ~:
\begin{tt}
\begin{verbatim}
	SUBROUTINE difft(melange,t,ro,drox,kap,dkapx,deff,d,dd)
\end{verbatim}
\end{tt}

\begin{itemize}
\item Entrées~:
\begin{itemize}
\item {\tt melange}~: melange=.TRUE. on est dans une zone à mélanger,
\item {\tt t, ro, drox, kap, dkapx, deff}~: température, densité, opacité,
et dérivées par rapport à l'abondance de \H1 {\bf par gramme}, coefficient de
diffusion turbulente due à la rotation,
\end{itemize}
\item Sorties~:
\begin{itemize}
\item {\tt d, dd}~: tableaux $d(i,j),\ dd(i,j,k),\ i,j,k=1,\ldots,
n_{\rm elem}$.
\end{itemize}
\end{itemize}
\medskip

\section{Routine {\tt difft\_sun}}\label{sec:difftsun}\index{difft\_sun.f}
Cette routine PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol},
calcule un coefficient de diffusion turbulente, sous la ZC externe solaire,
suivant \citet{g97}.
\medskip
\noi {\bf Appel~:} {\tt difft\_sun} est appelée par {\tt eq\_difft},
\medskip

\begin{tt}
\begin{verbatim}
	SUBROUTINE difft_sun(melange,deff,gradad,gradrad,m,d)
\end{verbatim}
\end{tt}

\begin{itemize}
\item Entrées~:
\begin{itemize}
\item {\tt melange}~: melange=.TRUE. on est dans une zone à mélanger,
\item {\tt deff, gradad, gradrad, m}~: coefficient de
diffusion turbulente due à la rotation, gradients adiabatique et radiatifs,
abscisse de calcul.
\end{itemize}
\item Sorties~:
\begin{itemize}
\item {\tt d}~: tableau $d(i,j)\ i,j, \ldots,n_{\rm elem}$.
\end{itemize}
\end{itemize}

\section{Routine {\tt diffus}}\index{diffus.f}\label{sec:diffus}
Cette routine PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol},
gère l'intégration numérique des équations de diffusion des espèces
chi\-mi\-ques \cfparagr{sec:eqd} et du moment cinétique \cfparagr{sec:difcin}.\\
Ces équations, du type intégro-différentiel, sont couplées.
Pour des raisons d'instabilité numérique, il s'est avéré
extrèmement délicat de les résoudre simultatément, force a été de
les traiter séquentiellement, au prix d'une convervenge médiocre.
Leur résolution numérique utilise
la méthode des éléments finis de Galerkin, \cfparagr{sec:elemfini}.
Bien que la structure des algorithmes de résolution utilisés pour chacun
des deux systèmes différentiels soient identiques
deux routines distinctes ont été créées, pour conserver un maximum de souplesse.

\medskip
\noi{\bf Description}~:
\begin{itemize}
\item Au premier appel, initialisation et diverses écritures.
\item Recherche du nombre et des indices des limites \ZRZC.
\item Création du vecteur nodal pour la diffusion des éléments chi\-mi\-ques.
\item Création du vecteur nodal pour la diffusion du moment cinétique.
\item Résolution des équations de la diffusion du moment cinétique.
\item Résolution des équations de la diffusion des éléments chi\-mi\-ques.
\item Déallocations diverses.
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt diffus} est appelée par {\tt evol}, \cfparagr{sec:evol}.

\begin{tt}
\begin{verbatim}
	SUBROUTINE diffus(ok,dt,mc_tmp,nc_tmp)
\end{verbatim}
\end{tt}
 \begin{itemize}  
 \item Entrées~:
 \begin{itemize}
  \item   {\tt dt}~: pas temporel, 
  \item   {\tt mc\_tmp,nc\_tmp}~: masses temporaires (abscisses langrangiennes),
   nombre de masses temporaires.    
  \end{itemize}
    
 \item Sorties~:
  \begin{itemize}
  \item   {\tt ok:} {\tt ok=.TRUE.} les algorithmes de résolution de la
   diffusion du moment cinétique et des espèces chimiques ont convergé
  au niveau de précision requis. 
  \end{itemize}
  \end{itemize}

\section{Routine générique {\tt diffw}}\index{diffw.f}\label{sec:diffw}
Cette routine PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol}, 
est la {\embf routine générique} de calcul des coefficients de diffusion turbulente
horizontale, verticale et effective du moment cinétique, \cfparagr{sec:difcin}.
Dans la présente version de \cesam2k elle ne gère que la description
{\tt diffw\_mpz}.

\medskip
\noi {\bf Appel~:} {\tt diffw} est appelée par {\tt eq\_diff\_rota},
\cfparagr{sec:eqdiffrota}.

\medskip
\noi{\bf Arguments de {\tt diffw}}
\begin{tt}
\begin{verbatim}
	SUBROUTINE diffw(dlnro,grand_k,nu,n2mu,n2t,r,ro,dfrot,frot,
	1 deff,dh,dv)
\end{verbatim}
\end{tt}
\begin{itemize}  
 \item Entrées~:
\begin{itemize}	
 \item {\tt dlnro,grand\_k,nu,n2mu,n2t}~: gradient $\ln\rho$, $K$,
 $\nu$, variables liées à la \fbv, \cfparagr{sec:cturbrot}.
 \item {\tt r,ro,dfrot,frot}~: rayon, densité, vecteur des variables de la
 rotation et dérivées.
\end{itemize}
 \item Sorties~:
  \begin{itemize}
  \item   {\tt deff,dh,dv}~: coefficients de diffusion turbulente effective,
  horizontale, verticale. 
  \end{itemize}
  \end{itemize}

\section{Routine {\tt diffw\_mpz/p03}}\index{diffw\_mpz/p03.f}\label{sec:diffwmpz}
Ces routines PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol},
effectue le calcul des coefficients de diffusion horizontale, verticale et
effective du moment cinétique, selon les prescriptions de \citet{mpz04,p03}
respectivement.

\medskip
\noi{\bf Description de {\tt diffw\_mpz}}~:
\begin{itemize}
\item Au premier appel, initialisation et diverses écritures.
\item Calcul de $D_{\rm h}$
\item Calcul de $D_{\rm v}$
\item Calcul de $D_{\rm eff}$
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt diffw\_mpz/p03}, appelées par {\tt diffw},
utilisent la même liste d'appel.

\section{Routine {\tt dnunl}}\index{dnunl.f}\label{sec:dnunl}
La fonction de cette routine PRIVATE du module {\tt mod\_cesam},
\cfparagr{sec:amcs}, est le calcul approximatif, valable uniquement
pour le cas solaire,
de $\nu_0$, $\delta\nu_{02}$ et $\delta\nu_{13}$ suivant Schatzman \& Praderie
\citet[][eq. 101-102 ]{sp90}.

\medskip
\noi{\bf Description de {\tt dnunl}}~:
\begin{itemize}
\item Tabulation de la vitesse du son en fonction de $R^2$, calcul de
$\nu_0$ par intégration numérique de type Gauss
(on utilise le fait que $rdr=1/2dr^2$).
\item Calcul de $\delta\nu_{02}$ et $\delta\nu_{13}$.
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt dnunl} est appelée de {\tt list}, \cfparagr{sec:list}. 

\begin{tt}
\begin{verbatim}
	SUBROUTINE dnunl(r,c,n,rtot,nu0,dnu02,dnu13,a)
\end{verbatim}
\end{tt}

\begin{itemize}
 \item Entrées~:
 \begin{itemize}	
  \item {\tt r, c, n, rtot}~: tables des rayons, des vitesses du son,
 nombre de points, rayon total. 
 \end{itemize}
 \item Sorties~:
 \begin{itemize}
  \item {\tt nu0, dnu02, dnu13, a}~: $\nu_0$, $\delta\nu_{02}$,
  $\delta\nu_{13}$, le $A$ de la formule 100.
 \end{itemize}
\end{itemize}

\section{Routine subordonnée {\tt ecrit\_ascii}}\label{sec:ecriascii}
Cette routine subordonnée de la routine {\tt cesam} a pour fonctions la
formation la mise en forme et l'écriture des fichiers de sortie ASCII,
\cfparagr{sec:nlcesam}.\index{ecrit\_ascii.f}
Pour décrire finement le comportement de la \fbv, dans les fichiers de sortie
destinés aux exploitations sismologiques, \cfparagr{sec:estbv}, des points
sont ajoutés au
voisinage des limites \ZRZCs; typiquement, avec la valeur du paramètre
$l_0=3$, 20 points supplémentaires sont ajoutés de part et d'autre de chaque
limite.  

\medskip
\noi {\bf Description}~:
\begin{itemize}
\item Au premier appel, allocation du tableau des quantités globales.
\item Allocations de tableaux et création des abscisses supplémentaires
permettant de
décrire finement le profil de la \fbv\ au voisinage des limites \ZRZCs.
Par défaut, on dispose 10 abscisses supplémentaires de part et d'autre de
chaque limite.
Insertion de ces abscisses dans le tableau des abscisses connues.
\item Formation de la table des quantités globales.
\item Allocation du tableau des quantités variables et formation de la partie
atmosphère.
\item Formation de la partie structure interne et composition chimique. Les
quantités correspondants aux abscisses déjà connues sont reprises;
celles correspondant aux point ajoutés sont calculées.
\item Déallocations de tableaux.
\item Appel à la routine {\tt add\_ascii}, \cfparagr{sec:addascii} pour
complément de données.
\item Appel à la routine générique {\tt output}, \cfparagr{sec:output}, 
qui oriente vers le type de sortie ASCII désirée.
\item Déallocation du tableau des variables.

\end{itemize}
\medskip
\noi {\bf Appel~:} {\tt écrit\_ascii}, qui n'a pas d'argument, est appelée de
{\tt cesam} à l'occasion de la sortie de fin de calcul, ou encore à l'issue de
chaque pas temporel si on désire conserver tous les fichiers ASCII,
\cfparagr{sec:nlcesam}. 

\section{Routine subordonnée {\tt ecrit\_rota}}\index{ecrit\_rota.f}
\label{sec:ecritrota}
Cette routine subordonnée de {\tt diffus} et de {\tt evol}, a pour fonction
l'écriture, dans
l'évironnement du calcul, du fichier des variables et des coefficients
des équations de la diffusion du moment cinétique, \cfparagr{sec:difcin}.
Ce fichier est destiné à être exploité par le programme de dessin
{\tt des\_rota.f} du sous-directory {\tt EXPLOIT}, \cfparagr{sec:pexploit}.
Ce fichier de travail n'est pas destiné à des exploitations mais aux mises au
point. Il n'est créé que si la variable logique {\tt ecrit\_rot},
\cfparagr{sec:reg}, du module {\tt mod\_donnees} est vraie, il est alors formé
à l'issue de chaque appel à la routine {\tt resout\_rota},
\cfparagr{sec:resoutrota}.
\medskip

\noi {\bf Description}~:
\begin{itemize}
 \item Définition du nombre de variables et allocation du tableau à écrire.
 \item Calcul des coefficients des équations de la diffusion du moment
 cinétique, aux abscisses du vecteur de la rotation (le centre est omis en
 raison de la singularité de l'échelle de hauteur de presion).
 \item Formation du tableau des variables et écriture sur le fichier
 {\tt mon\_modele\_coeff\_rota.dat}. Ce dernier est écrasé par chaque nouvelle
 écriture.
\end{itemize}

\medskip
\noi {\bf Appel~}~: Le sous-programme {\tt ecrit\_rota}, n'a pas d'argument.

\section{Routine {\tt edding}}\label{sec:edding}\index{edding.f}
 Cette routine PRIVATE du module {\tt mod\_atm}, \cfparagr{sec:amatm}, calcule
 la température dans une
 atmosphère purement radiative, pour une profondeur optique grise donnée suivant
 la loi $T(\tau)$ d'Eddington.
 
\medskip
\noi {\bf Appel~:} {\tt edding}, appelée par la routine
 générique {\tt tdetau} \cfparagr{sec:tdetau}, utilise les mêmes arguments.

\section{Routine {\tt eq\_atm}}\index{eq\_atm.f}\label{sec:eqatm}
La fonction de cette routine PRIVATE du module {\tt mod\_atm},
\cfparagr{sec:amatm}, est de former les équations de restitution de
l'atmosphère \eq{eq:sysa2}.

\medskip
\noi{\bf Description} de {\tt eq\_atm}~: 
\begin{itemize}
\item Au premier appel, après quelques initialisations,
on projette sur la base de B-spline l'atmosphère solaire,
 connue sous forme de DATA, on obtient ainsi la solution initiale,
 on définit ensuite les limites et on détermine les points de collocation.
 \item Extraction des grandeurs physiques, calcul de la \Teff,
 de la gravité et loi $T(\tau)$.
 \item Calcul des grandeurs thermodynamiques, de $\nabla$ en particulier,
 et dérivées, formation des équations aux  points de collocation et aux
 points limites.
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt eq\_atm} est appelée de {\tt coll\_atm},
\cfparagr{sec:collatm}~:
\begin{tt}
\begin{verbatim}
	SUBROUTINE eq_atm(fait,li,xchim,cx,y,be,ae,r_rac,l_rac,xcoll_atm)
\end{verbatim}
\end{tt}

\begin{itemize}
\item Entrées~:
 \begin{itemize}	
 \item {\tt fait, li, xchim, cx}~: {\tt fait=1} point de collocation,
 {\tt fait=2}  point li\-mi\-te, indice de la limite, composition
 chi\-mi\-que/gramme, indice du point de collocation,
  \item {\tt y}~: variables et dérivées, 
  \item {\tt r\_rac,l\_rac, xcoll\_atm}~: rayon au fond de l'atmosphère,
  luminosité, abscisses des points de collocation. 
 \end{itemize}
\item Sorties~:
 \begin{itemize}
 \item {\tt be, ae}~: seconds membres et jacobien.
\end{itemize}
\end{itemize}

\section{Routine {\tt eq\_diff\_chim}}\index{eq\_diff\_chim.f}
\label{sec:eqdiffchim}
La routine PRIVATE {\tt eq\_diff\_chim} du module {\tt mod\_evol},
\cfparagr{sec:amevol}, a pour fonction de calculer,
dans l'espace physique, les résidus des~\eqs{eq:sca2}, les quantités
figurant à gauche des produits scalaires et
leurs dérivées par rapport aux abondances.\index{diffusion microscopique}

\noi Pour un élément chi\-mi\-que d'indice $i$ fixé,
les coefficients de l'équation de diffusion calculés dans
les routines de type {\tt diffm}, \cfparagr{sec:diffm} sont de trois sortes:
\begin{itemize}
\item Les coefficients $v_i$ de ${x_i}$, dans l'\equ{eq:diff1},
codés {\tt v(i)}.
\item Les coefficients de diffusion microscopique
$d^\star_{i,j},$ de $\dsdx{x_j}m$, dans l'\equ{eq:diff2}, codés {\tt d(i,j)}.
\item Les coefficients $d_{i,i},$ de $\dsdx{x_j}m$, dans l'\equ{eq:diff2},
sont ajoutés à {\tt d(i,i)} dans
les routines de type {\tt difft}, \cfparagr{sec:difft}. 
\end{itemize}
les dérivées par rapport à $x_k,\ k=1,n_{\rm elem}$
sont respectivement notées {\tt dv(i,k) = dv(nbelem(k-1)+i)} et
{\tt dd(i,j,k) = dd(nbelem(nbelem(k-1)+j-1)+i)}.

\medskip
\noi{\bf Description de {\tt eq\_diff\_chim}}
\begin{itemize}
\item Au point courant~:
\begin{itemize}
\item Initialisations diverses,
\item extraction des variables de structure au point de
calcul {\tt cx}, appel à l'\EOS, détermination des opacités, calcul
des réactions thermonucléaires et des coefficients de
l'équation de diffusion,
\item détermination des résidus des~\eqs{eq:sca2},
des quantités figurant à gauche des produits scalaires et
de leurs dérivées par rapport aux abondances.
\end{itemize}
\item Au point limite externe, évaluation et exploitation
de la perte de moment angulaire.
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt eq\_dif\_chim} est appelée par {\tt resout\_chim},
\cfparagr{sec:resoutchim}.

\begin{tt}
\begin{verbatim}
	 SUBROUTINE eq_diff_chim(nu,y,dt,ad,as,bd,bs)
\end{verbatim}
\end{tt}

  \begin{itemize}  
 \item Entrées~:
 \begin{itemize}
  \item   {\tt nu, dt, y}~: point de calcul en $m^\frac23$, pas temporel,
  variables et dérivées.
 \end{itemize}
 \item Sorties~:
 \begin{itemize}
  \item   {\tt as, ad, bs, bd}~: dérivées
  par rapport aux abondances $x_{i,j}$ des arguments des produits scalaires
  avec $S_j^{m_c}$ et $\dsdx{x_{i,j}}\nu$ et résidus.
  \end{itemize}  
  \end{itemize}
  
\section{Routine {\tt eq\_diff\_poisson}}\label{sec:eqdiffpoisson}
\index{eq\_diff\_poisson.f}\index{diffusion du moment cinétique}  
 La routine PRIVATE {\tt eq\_diff\_poisson} du module {\tt mod\_evol},
\cfparagr{sec:amevol}, a pour fonction de calculer, dans l'espace physique, 
les coefficients des équations, à résoudre dans {\tt poisson\_initial.f},
\cfparagr{sec:poissini},
pour l'initialisation du potentiel gravitationnel.

\medskip
\noi{\bf Description de {\tt eq\_diff\_poisson}}~:
\begin{itemize}
 \item initialisation de constantes et allocations.
 \item calcul des coefficients au temps $t+dt$.
 \item formation des coefficients au point courant.
 \item formation des coefficients aux points limites.
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt eq\_diff\_poisson} est appelée par
{\tt poisson\_initial}, \cfparagr{sec:poissini}.

\begin{tt}
\begin{verbatim}
	 SUBROUTINE eq_diff_poisson(fait,nu,ad,as,bs)	
\end{verbatim}
\end{tt}
\begin{itemize}  
 \item Entrées~:
 \begin{itemize}
  \item   {\tt fait, nu}~: fait=0: point courant, fait=1, 2: limite,
  point de calcul en $m^\frac23$, variables et dérivées.
 \end{itemize}
 \item Sorties~:
 \begin{itemize}
  \item   {\tt as, ad, bs}~: dérivées par rapport à la variable $\Psi$
  des arguments des produits scalaires avec $S_j^{m_c}$ et $\dsdx{x_{i,j}}\nu$,
  résidus.  
 \end{itemize}  
\end{itemize}

\section{Routine {\tt eq\_diff\_rota3/4}}\label{sec:eqdiffrota}
\index{eq\_diff\_rota.f}\index{diffusion du moment cinétique}
La routine PRIVATE {\tt eq\_diff\_rota} du module {\tt mod\_evol},
\cfparagr{sec:amevol}, a pour fonction de calculer, dans l'espace physique,
les coefficients et les résidus des équations de la diffusion du moment
cinétique, \paragr{sec:difcin}.

\medskip
\noi{\bf Description de {\tt eq\_diff\_rota3/4}}~:
\begin{itemize}
 \item Interpolation au point d'abscisse lagrangienne {\tt nu} des
 coefficients des équations.
 \item Détermination de la nature du milieu convectif ou radiatif par
 interpolation du vecteur de convection. 
 \item Au point courant ({\tt fait=1})~: 
 \begin{itemize}
  \item Formation des équations dans le milieu convectif.
  \item Formation des équations dans le milieu radiatif.
 \end{itemize}
 \item Sur les limites ({\tt fait=2, 3})~:
 \begin{itemize}
%  \item Partie intégrée des équations pour $\Omega$ au centre~:   
%  \begin{itemize}
 %  \item Cas d'un centre radiatif.
%   \item Cas d'un noyau convectif et d'une zone convective externe.
%  \end{itemize}
%  \item Partie intégrée des équations pour $U$ à l'extérieur.
  \item Partie intégrée des équations
  pour un noyau convectif et une zone convective externe.
 \end{itemize}
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt eq\_rota} est appelée par {\tt resout\_rota},
\cfparagr{sec:resoutrota}.

\begin{tt}
\begin{verbatim}
	 SUBROUTINE eq_diff_rota(fait,nu,y,ad,as,bd,bs)	
\end{verbatim}
\end{tt}
\begin{itemize}  
 \item Entrées~:
 \begin{itemize}
  \item   {\tt fait, nu, y}~: fait=1: point courant, fait=2, 3: limite,
  point de calcul en $m^\frac23$, variables et dérivées.
 \end{itemize}
 \item Sorties~:
 \begin{itemize}
  \item   {\tt as, ad, bs, bd}~: dérivées
  par rapport aux variables $\Omega,\ U,\ \theta,\ \Lambda, \psi$
  des arguments des produits scalaires avec $S_j^{m_c}$ et $\dsdx{x_{i,j}}\nu$,
  résidus.  
 \end{itemize}  
\end{itemize}

\section{Routine générique {\tt etat}}\index{etat}\label{sec:etat}\index{etat.f}
Les routines de type {\tt etat} constituent les
interfaces entre \cesam2k et la routine de calcul de l'\EOS\ qui
a souvent une origine externe. Ces routines sont des routines PRIVATE du module
{\tt mod\_etat}, \cfparagr{sec:amet}.\\ 
Pour une pression gazeuse $P$, une température $T$ et une composition
chi\-mi\-que ${X_i}$ données, {\tt etat} calcule la densité $\rho$,
l'énergie interne
spécifique $U$, $c_{\rm p}$, $\delta$, $\gradad$, et leurs dérivées
premières, $\alpha$, $\beta$, $\Gamma_1$. Certaines routines d'équation d'état
utilisent des tables que l'on doit créer dans le sous-directory
{\tt SUN\_STAR\_DATA}, \cfparagr{sec:dphys}.
Le nom de ces tables doit être indiqué dans le fichier de données.
La {\embf routine générique} de calcul de l'équation d'état est {\tt etat},
routine PUBLIC du module {\tt mod\_etat}.

\medskip
\noi {\bf Appel~:} {\tt etat} est appelée de divers endroits, en particulier
 depuis {\tt evol},
{\tt thermo}, {\tt thermo\_atm}, {\tt eq\_dif\_chim}, {\tt cesam}.

\begin{tt}
\begin{verbatim}
	SUBROUTINE etat(p,t,xchim,deriv,
	1 ro,drop,drot,drox,u,dup,dut,dux,
	2 delta,deltap,deltat,deltax,cp,dcpp,dcpt,dcpx,
	3 gradad,dgradadp,dgradadt,dgradadx,alfa,beta,gamma1)
\end{verbatim}
\end{tt}

\begin{itemize}
\item Entrées~:
\begin{itemize}
\item  {\tt p, t, xchim, deriv}~: pression, température,
composition chi\-mi\-que par gramme, {\tt deriv=.TRUE.} calcul des dérivées;
\end{itemize}
\item Sorties~:
\begin{itemize}

\item  {\tt ro, drop, drot, drox}~: densité et dérivées;	
	
\item  {\tt u, dup, dut, dux}~: énergie interne et dérivées;

\item  {\tt delta, deltap, deltat, deltax}~: $\delta$ et dérivées;

\item  {\tt cp,dcpp,dcpt,dcpx}~: $c_{\rm p}$ et dérivées;

\item  {\tt gradad, dgradadp, dgradadt, dgradadx}~: $\gradad$\ et dérivées; 

\item  {\tt alfa, beta, gamma1}~: $\alpha$, $\beta$,
$\Gamma_1$.
\end{itemize}
\end{itemize}

%\PB{Certaines quantités peuvent ne pas être calculées,
%au\-quel cas une va\-leur ar\-bi\-trai\-re est af\-fectée à la va\-ria\-ble \eg\ 5 pour le
%co\-ef\-fi\-cient de dé\-gé\-né\-res\-cen\-ce.}

\section{Routine {\tt etat\_ceff}} \index{etat\_ceff.f} 
La routine PRIVATE {\tt etat\_ceff} du module {\tt mod\_etat},
\cfparagr{sec:amet}, utilise le formalisme CEFF. C'est une adaptation à
\cesam2k des programmes originaux de  J.Christensen-Dalsgaard par A.Baglin,
M.Auvergne, Y. Lebreton, P.Morel \& B.Pichon.\\
Les routines qui relèvent de ce package sont les suivantes~:\\
{\tt bilinc, clmnew, cvmgp, cvmgz, cvmgn, cvmgt, cvmgm, dmpeqs, derive,
eostst, eqstfc, eqstpc, eqstrh, eosder, f4der, f4n, f4mhd, hheion,
hmnion, hvionac, inteffc, ismax, isamax, ismin, leq, neweta, omegac, phderc,
prthvi, setgm1, setf4, seteqs, blockdata bleqstc, setcnsc, sdot, ssum, sscal,
scopy, saxpy, storec, zeroc.}\\
Ces routines sont regroupées dans un même package et compilées simultanément
avec {\tt etat\_ceff};
elles sont donc des routines PRIVATE du module {\tt mod\_etat},
\cfparagr{sec:amet}. Diverses modernisations concernant la programmation 
ont été effectuées par B.Pichon et P.Morel.
Le BLOCKDATA initial a été transformé en un tableau de paramètres.
D'origine externe, ces routines ne sont pas détaillées.

\medskip
\PB{Cette routine qui demande beaucoup de ressources est peu robuste,
son usage est délicat.}

\section{Routine {\tt etat\_eff}}\index{etat\_eff.f} 
La routine PRIVATE {\tt etat\_eff} du module {\tt mod\_etat},
\cfparagr{sec:amet}, utilise le formalisme EFF,
la source, rassemblée dans le package {\tt EFF},
est une adaptation à \cesam2k des
programmes originaux de  J. Christensen-Dalsgaard par A. Baglin, M. Auvergne
\& P.Morel.\\
Les routines qui relèvent de ce package sont les suivantes~:\\
{\tt bilin, eqstf, eqstp, hviona,
 inteff, omega, phder, setcns, store, theffp, zero.}\\
Elles sont exploitées sous forme de routines subordonnées de la routine
{\tt etat\_eff}.
Le BLOCKDATA initial a été transformé en un tableau de paramètres.

\section{Routine {\tt etat\_gong1}}\index{etat\_gong1.f}
Selon les prescriptions du "Solar Model Com\-pa\-ri\-son Pro\-ject"
\citet{c88},
la rou\-ti\-ne PRIVATE {\tt etat\_gong1} du module {\tt mod\_etat},
\cfparagr{sec:amet}, sup\-po\-se le mi\-lieu to\-ta\-le\-ment
io\-ni\-sé, mais ne
tient comp\-te ni de la dé\-gé\-né\-res\-cen\-ce, ni de l'é\-ner\-gie
interne d'ionisation, ni de la pression de radiation.
 
\section{Routine {\tt etat\_gong2}}\index{etat\_gong2.f} 
Suivant  "Solar Model Comparison Project" \citet{c88},
la routine PRIVATE {\tt etat\_gong2} du module {\tt mod\_etat},
\cfparagr{sec:amet}, utilise le formalisme EFF simplifié, sans tenir
compte, ni de la pression de radiation, ni de la dégénérescence.
La mise en \oe uvre de {\tt etat\_gong2} a bénéficié
de la collaboration de J. Provost.

\section{Routine {\tt etat\_mhd}}\label{sec:mhd}\index{etat\_mhd.f}
La routine PRIVATE {\tt etat\_mhd} du module {\tt mod\_etat},
\cfparagr{sec:amet}, assure
l'interface avec l'équation d'état solaire tabulée MHD de W.D\"appen
\cf \citet{d88}.
Les tables, en ASCII compressé,
sont distribuées dans le package de l'\EOS\ MHD, par W.D\"appen.
Les plus récentes
\ie\ avec "correction $\tau$", sont disponibles à l'adresse FTP
anonymous {\tt usc.edu} directory {\tt pub/astro-physics/mhd-oc/wd-evo};
leur mise en place est décrite au \paragr{sec:mhdk}.\\
Les routines qui relèvent de ce package sont regroupées et compilées
simultanément avec
{\tt etat\_mhd}; ce sont donc des routines PRIVATE du module {\tt mod\_etat}.
Il s'agit de~:\\
\noi{\tt fmttob, mhdpx, mhdpx1, mhdpx2, intpt, mhdst, mhdst1,
rtab, rabu, quint, quintd, lir.}\\
Les noms des tables à utiliser sont indiqués directement dans {\tt etat\_mhd}
il n'y a donc pas lieu d'en indiquer les noms dans le fichier de données.
Ces tables doivent être créées par l'utilisateur, \cfparagr{sec:mhdk},
et placées
dans le sous-directory {\tt SUN\_STAR\_DATA}, \cfparagr{sec:dphys}.

\section{Routines {\tt etat\_opal, etat\_opalX, etat\_opalZ}}\label{sec:opal}
\index{etat\_opal.f}\index{etat\_opalX.f}\index{etat\_opalZ.f}
Ces routines PRIVATE du module {\tt mod\_etat}, \cfparagr{sec:amet},
assurent l'interface avec les diverses versions de
l'équation d'état tabulée OPAL \citep{ir91}.
Les tables d'\EOS, disponibles sur le site WEB
{\tt ftp://www-phys.llnl.gov/pub/opal/eos/} sont très grandes.\\
Suivant les valeurs de l'abondance en métaux requise, il faut
contruire les tables ainsi qu'il est décrit au \paragr{sec:eosopal}, et les
placer dans le sous-directory {\tt SUN\_STAR\_DATA}, \cfparagr{sec:dphys}.
Les routines utilisent les tables OPAL en binaire.
La transformation des BLOCKDATA de la distribution sous la forme de paramètres,  
a permis des gains de place et de temps calcul appréciables.
La mise en \oe uvre de
ces routines a bénéficié de collaborations de S.Brun, J.M. Marques \& L.Piau.\\
Bien qu'identiques, les routines utilisées pour la lecture et
l'interpolation des tables utilisent des paramétrages différents. Il s'agit
de~:\\
{\tt  esac, gmass, quad, r\_opal\_bin, rad\_sub ro,\_new, t6rinterp}.\\
Elles sont introduites sous la forme de
routines subordonnées et reproduites pour chacune des routines
d'équation d'état OPAL.

\begin{figure}%[ht]
\includegraphics[width=0.9\textwidth]{Orga-evol.eps}
\caption{Environnement de la routine {\tt evol} de gestion de l'évolution
de la composition chi\-mi\-que et du moment cinétique.
}\label{fig:evol}
\end{figure}

\section{Routine {\tt evol}}\index{evol.f}\label{sec:evol}
La routine PUBLIC {\tt evol} du module {\tt mod\_evol}, \cfparagr{sec:amevol},
gère le mélange convectif, l'intégration temporelle de la composition chi\-mi\-que,
éventuellement du moment cinétique.
Un organigramme schématique est reproduit \Fig{fig:evol}.

\medskip
\noi{\bf Description}\index{renormalisation}
\begin{itemize}\index{grille\_fixe}\label{sec:desevol}
\item Initialisations diverses, éliminations éventuelles
pour le mélange convectif {\embf uniquement} de limites \ZRZCs\ trop externes,
détermination si le modèle est totalement radiatif ou convectif.
\item Détermination de la répartition en masse
-- en $(m/M_\odot)^{2/3}$ -- utilisée pour l'interpolation de
la composition chi\-mi\-que et du moment cinétique. Les points
retenus sont, ou bien identiques aux points de la grille utilisée pour les
variables globales, ou bien situés aux centres des intervalles entre deux
points de cette grille, ou bien encore ceux de la {\em grille fixe},
\cfparagr{sec:nlchim}.
A défaut d'une description physique de l'évolution des discontinuités aux
limites\ \ZRZCs\ l'utilisation alternative des milieux de grille comme points
d'interpolation crée une légère diffusion numérique destinée à stabiliser
l'évolution. Aux voisinages du centre et des
limites \ZRZCs, des points supplémentaires sont ajoutés pour améliorer
la précision. Cette dernière disposition n'est appliquée qu'avec
l'utilisation d'une {\em grille fixe}. 
\item  Les indices du début et de la fin de chaque \ZC\ sont ensuite
identifiés dans la grille pour l'interpolation de
la composition chi\-mi\-que; en enlevant les {\tt "c"} de commentaires,
des algorithmes de test permettent des vérifications.
\item Une alternative se présente alors~::
\begin{itemize}
\item On tient compte de la diffusion microscopique avec ou sans diffusion du
moment cinétique,
il y a appel à la routine {\tt diffus}, \cfparagr{sec:diffus},
sauf si le modèle est complètement
convectif depuis le début de l'évolution -- ou de la reprise du calcul.
Au retour de la routine {\tt diffus}, la précision du calcul de l'évolution
des abondances est estimée.
\item Il y intégration et mélange convectif classiques,
en tenant compte d'éventuels
gains ou pertes de masse, et en estimant la précision
du calcul de l'évolution des abondances:
\begin{itemize}
\item d'abord pour les zones convectives où l'intégration
de la composition chi\-mi\-que est
réalisée de façon simultanée avec le mélange convectif,
\item ensuite pour les zones radiatives.
\item La composition chi\-mi\-que est ensuite ajustée en
fonction des retraits ou avancées des limites \ZRZCs.
\item Enfin, on calcule les coefficients d'interpolation de la
composition chi\-mi\-que en tenant compte des discontinuités aux limites \ZRZCs.
\end{itemize} 
\end{itemize}
\item Une renormalisation de la composition chi\-mi\-que de façon à assurer
$X+Y+Z=1$ est effectuée dans l'espace des splines. Cette renormalisation est
nécessaire pour des arguments:
\begin{itemize}
\item {\tt Physiques:} les masses atomiques n'étant pas des nombres entiers,
les équations de l'évolution thermonucléaire de la composition chi\-mi\-que
ne peuvent conserver {\embf exactement} $X+Y+Z=1$. Pour ce faire, il faudrait
tenir compte de corrections relativistes.
\item {\tt Numériques:} les équations implicites de l'évolution
de la composition chi\-mi\-que étant résolues de façon itérative,
il y a nécessairement une erreur numérique résultant de l'appréciation
de la convergence. Les erreurs d'arrondi sont aussi à prendre en ligne de
compte.
\end{itemize}
\item Une estimation du pas temporel à venir est faite en fonction
des valeurs, re\-qui\-se et obtenue, de la précision de l'intégration.  En
cas de non convergence d'algorithmes itératifs, ou si
la précision requise n'est pas atteinte, le modèle est réinitialisé
lors du retour à {\tt resout}, et le calcul est alors repris
avec un pas temporel divisé par 2. {\embf L'estimation du pas temporel
ne porte que sur
l'estimation de la précision de l'intégration de la composition chi\-mi\-que.}
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt evol} est appelée par {\tt resout},
\cfparagr{sec:resout}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE evol(compt,dt,dts,reprend)
\end{verbatim}
\end{tt}

\begin{itemize}
 \item Entrées~: 
 \begin{itemize}
  \item {\tt compt}~: compteur des itérations globales, compt=0 pour
  la première itération globale de chaque nouveau pas temporel.
  \item {\tt dt}~: pas temporel. 
 \end{itemize}

 \item Sorties~:
 \begin{itemize}
  \item {\tt dts}~: estimation du pas temporel à utiliser pour le pas temporel
  suivant.
  \item {\tt reprend=.TRUE.}~: il faut réduire le pas temporel à cause de TdS
  ou de non convergence.
 \end{itemize}
\end{itemize}

\section{Routine générique {\tt f\_rad}}\index{f\_rad.f}\label{sec:frad}
La routine PRIVATE {\tt f\_rad} du module {\tt mod\_evol},
\cfparagr{sec:amevol}, cons\-ti\-tue la {\embf routine générique} du calcul
 des
accélérations radiatives. Le calcul de l'accélération radiative est effectué
avec la routine dont le nom {\tt NOM\_FRAD} est indiqué dans le fichier de
données, \cfparagr{sec:nldiff}.

\medskip
\noi {\bf Appel~:} {\tt f\_rad} est appelée par {\tt diffm\_br},
\cfparagr{sec:diffmbr}.
\begin{tt}
\begin{verbatim}
  SUBROUTINE f_rad(lum,ray,t,kap,dkapx,nel,ychim,ioni,grav,g_rad,dg_rad)	
\end{verbatim}
\end{tt}
\begin{itemize}
\item Entrées~:
 \begin{itemize}	
  \item {\tt lum, ray, t, kap, dkapx}~: luminosité,
   rayon, température, opacité, dérivée/X (mole).
  \item {\tt nel, ychim, ioni, grav}~: nombre d'électrons libres par volume,
   composition chi\-mi\-que par mole, taux d'ionisation, gravité.    
 \end{itemize}
 \item Entrées/Sorties~: {\tt g\_rad(i)}~: vecteur des accélérations radiatives,
  la gravité est grav+g\_rad sur l'élément d'indice i 
 \item Sorties~: {\tt dg\_rad(i,j)}~: matrice des dérivées des
 accélérations radiatives sur l'élément i par rapport à l'abondance par mole
 de l'élément j.
\end{itemize}

\section{Routine subordonnée {\tt fcmax}}\index{fcmax} 
\label{sec:fcmax}
Cette routine subordonnée de {\tt resout} a pour fonction d'indiquer s'il sera
nécessaire d'utiliser le nombre maximum de couches pour les modèles à calculer.

\medskip
\noi{\bf Description}~:  
\begin{itemize}
\item Définition de la variable logique {\tt logic} suivant la réalisation d'un
des critères d'utilisation du nombre maximum de couches.
 \item Définition de la variable logique de sortie {\tt cmax} suivant les
 critères de sortie ASCII définis au \paragr{sec:maxcouches}.
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt fcmax} est appelé de {\tt resout} à l'issue de la
convergence du modèle.
\begin{tt}\begin{verbatim}
	SUBROUTINE fcmax(clogic)
\end{verbatim}\end{tt}
\begin{itemize}
 \item Sortie~:
 \begin{itemize}
  \item   {\tt clogic = .TRUE.}~: il faudra utiliser le nombre maximum de
  couches.
 \end{itemize}  
\end{itemize}  

\section{Routine {\tt from\_alecian}}\index{from\_alecian.f}
\label{sec:fromalecian}
La subroutine PRIVATE {\tt from\_alecian} du module {\tt mod\_bp\_for\_alecian},
\cfparagr{sec:ambpal}, regroupe une partie des routines de calcul des
accélérations radiatives, selon la seconde version du formalisme développé par
G.Alécian. D'origine externe les fonctions des routines de ce regroupement
ne sont pas détaillées.

\section{Routine {\tt hopf}}\index{hopf.f}\label{sec:hopf}
Cette routine PRIVATE du module {\tt mod\_atm}, \cfparagr{sec:amatm}, calcule
la température dans une
atmosphère purement radiative pour une profondeur optique grise donnée suivant
la loi $T(\tau)$ de Hopf, \cf \citet{m78}.

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item Mise en forme des données pour l'interpolation.
 \item Interpolation de la température et dérivées.
\end{itemize}
 
\medskip
\noi {\bf Appel~:} {\tt hopf}, appelée par la routine
générique {\tt tdetau} \cfparagr{sec:tdetau}, utilise les mêmes arguments.
 
\section{Routine {\tt iben}}\index{iben.f}\label{sec:iben}
Cette routine PRIVATE du module {\tt mod\_nuc}, \cfparagr{sec:amnuc},
de type {\tt nuc}, \cfparagr{sec:nuc}, calcule l'énergie gravifique pour
dl'initialisation de l'évolution avec \PMS, \cfparagr{sec:inipms}. 
Cette initialisation est effectuée dans la routine {\tt cesam},
\cfparagr{sec:cesam}; à cet effet, le nom de la routine de réactions
thermonucléaires à utiliser est temporairement redéfini~: {\tt nom\_nuc=iben}.
\index{PMS}\index{modèle de PMS}\index{fichier mon\_modele\_B.pms}

\medskip
\noi {\bf Appel~:} {\tt iben}, appelée par la routine générique {\tt nuc}.
Les arguments sont ceux d'une routine de type {\tt nuc}.

\section{Routine générique {\tt ini\_ctes}}\label{sec:inictes}\index{ini\_ctes.f}
Cette routine PUBLIC du module {\tt mod\_donnees}, \cfparagr{sec:moddon},
est la {\embf routine générique} pour l'initialisation de la plupart
des constantes physiques.
Suivant le nom indiqué dans le fichier de données, \cfparagr{sec:fdon},
il est fait appel à la routine d'initialisation correspondante,
\cfparagr{sec:ctes85}.

\medskip
\noi {\bf Appel~:} 
Cette routine générique est appelée par {\tt lit\_nl}, \cfparagr{sec:litnl},
elle {\bf n'a pas d'argument}. 

\section{Routine {\tt initialise\_rota}}\label{sec:inirota}
\index{initialise\_rota.f}
La fonction de cette routine PRIVATE du module {\tt mod\_cesam},
\cfparagr{sec:amcs}, est l'initialisation des fonctions décrivant la diffusion
du moment cinétique.

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item Détermination du rayon de l'étoile $R_\star$. 
 \item Appels aux routines {\tt w\_initial}, \cfparagr{sec:winitial}, et 
 {\tt u\_initial}, \cfparagr{sec:uinitial}, pour l'initialisation de la vitesse
 angulaire $\Omega$ et de la vitesse de circulation méridienne $U$.
 \item Déduction des valeurs initiales de $\theta$, $\Lambda$ et $\psi$ de 
 celles de $\Omega$ et $U$.
\end{itemize}

\medskip
\noi{\bf Appel}~: {\tt initialise\_rota}, appelée par {\tt cesam},
\cfparagr{sec:cesam}, n'a pas d'argument.


\section{\ Fonction {\tt initialise\_u}}\index{initialise\_u.f}
\label{sec:uinitial}
Cette fonction PRIVATE du module {\tt mod\_cesam},
\cfparagr{sec:amcs}, initialise la vitesse de circulation méridienne $U$ du
formalisme de la diffusion du moment cinétique, \cfparagr{sec:varcin}.

\medskip
\noi{\bf Description}~:
La valeur initiale de la vitesse de circulation méridienne est initialisée par~:
\[|\Omega|U_0 \left(2-\frac R{R_\star)^2}\right)^{-1}, \quad U_0\sim0.01.\]

\medskip
\noi{\bf Appel}~: {\tt initialise\_u} est appelée par {\tt initialise\_rota},
\cfparagr{sec:inirota}.
\begin{tt}
\begin{verbatim}
	FUNCTION initialise_u(r,rstar)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item {\tt r, rstar}~: rayon local, rayon total.
\end{itemize}

\section{\ Fonction {\tt initialise\_w}}\index{initialise\_w.f}
\label{sec:winitial}
Cette fonction PRIVATE du module {\tt mod\_cesam},
\cfparagr{sec:amcs}, initialise la vitesse angulaire $\Omega$ du
formalisme de la diffusion du moment cinétique, \cfparagr{sec:varcin}.

\medskip
\noi{\bf Description}~: La valeur locale de la vitesse angulaire est donnée
par~:
\[\Omega=|\Omega_0|\left\{1+\Omega_{\rm f}\left[1+
\cos\left(\pi\frac R{R_\star}\right) \right]\right\},\]
$\Omega_0$ et $\Omega_{\rm f}$ sont respectivement la vitesse angulaire initiale
et le facteur de forme définis dans le
fichier de données {\tt mon\_modele.don}, \cfparagr{sec:fdon}.

\medskip
\noi{\bf Appel}~: {\tt initialise\_w} est appelée par {\tt initialise\_rota},
\cfparagr{sec:inirota}.
\begin{tt}
\begin{verbatim}
	FUNCTION initialise_w(r,rstar)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item {\tt r, rstar}~: rayon local, rayon total.
\end{itemize}

\section{Routine {\tt inter}}\index{inter.f}\label{sec:inter}
La fonction de cette routine PUBLIC du module {\tt mod\_variables},
\cfparagr{sec:amvar}, est de déterminer par interpolation inverse,
à partir de son développement sur une base de B-splines,
l'indice de la couche correspondant à une masse ou à un rayon donné.
Puis, par interpolation directe, de déterminer en ce point les
valeurs des variables et de leurs dérivées premières, par rapport à la
variable de masse ou de rayon. En variables lagrangiennes, l'interpolation est
effectuée en $(m/M_\odot)^{2/3}$; en variables eulériennes l'interpolation est
effectuée en $(r/R_\odot)$. La variable d'indice 6 \ie\ $f(6)$, affectée
à la fonction de répartition, \cfparagr{sec:adap}, est utilisée
pour transmettre
l'indice décimal de la couche où s'effectue l'interpolation.

\medskip
\noi {\bf Appel~:} {\tt inter} est appelée par divers programmes, en particulier
{\tt evol}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE inter(m23_ou_r2,bp,q,qt n,knot,x,f,dfdx,r2,m23)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrées~:
 \begin{itemize}
 \item   {\tt m23\_ou\_r2}~: chaîne de {\embf 3 caractères}, si
 {\tt m23\_ou\_r2='m23'} interpolation en masse, si
 {\tt m23\_ou\_r2='r2$\sqcup$'} interpolation en rayon. 
 \item   {\tt bp, q, qt, n, knot, x}~: éléments pour l'interpolation.
 \item   {\tt r2, m23}~: points d'interpolation.
 \end{itemize}
 \item Sorties~:
 \begin{itemize}
 \item   {\tt f, dfdx}~: fonctions ($f(6)$~: indice fractionnaire
 d'interpolation), dérivées. 
 \end{itemize}
\end{itemize}

\section{Routine {\tt inter\_atm}}\index{inter\_atm.f}
\label{sec:interatm}
Pour l'atmosphère, cette routine PUBLIC du module {\tt mod\_exploit},
\cfparagr{sec:amexp}, a une
fonction similaire à la routine {\tt inter} précédente. Elle est utilisée par le
programme {\tt for037\_2k} du module
{\tt mod\_exploit}, \cfparagr{sec:pexploit}, qui permet l'interpolation
d'un modèle en des masses ou des rayons définis à l'avance.

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item Localisation de l'intervalle d'interpolation en masse, rayon ou indice
 de couche.
 \item Détermination de l'indice fractionnaire d'interpolation inverse par
 algorithme de Brent.
 \item Interpolation des variables de l'atmosphère.
 \item L'indice fractionnaire est conservé. 
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt inter\_atm} est appelée par le programme
{\tt for037\_2k}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE inter_atm(m_ou_r,ne_atm,bp_atm,x_atm,xt_atm,n_atm,
	1 ord_atm,knot_atm,m_atm,r_atm,x,f,dfdx)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrées~:
 \begin{itemize}
 \item   {\tt m23\_ou\_r2}~: chaîne de 3 caractères, interpolation en masse
 si {\tt m23\_ou\_r2='m23'}, ou
 interpolation en rayon si {\tt m23\_ou\_r2='r2$\sqcup$'}.
 \item   {\tt ne\_atm, bp\_atm, x\_atm, xt\_atm, n\_atm, ord\_atm, knot\_atm}~:
  éléments pour l'interpolation par B-spline.
 \item   {\tt m\_atm, r\_atm}~: masses et rayons de la discrétisation de
 l'atmosphère.
 \end{itemize}
 \item Sorties~:
 \begin{itemize}
 \item   {\tt f, dfdx}~: fonctions, dérivées, rayon, masse.
 \item   {\tt f(ne\_atm+1)=x\_int}~: indice fractionnaire de l'abscisse
 d'interpolation.
 \end{itemize}
\end{itemize}

\section{Routines {\tt k5750, \tt k5777}}\index{k5750.f}
\label{sec:k5750}\index{k5777.f}\label{sec:k5777}

Ces deux routines PRIVATE du module {\tt mod\_atm}, \cfparagr{sec:amatm},
calculent la température dans une
atmosphère non purement radiative pour une profondeur optique
grise donnée, suivant les lois $T(\tau)$ solaires 
$T_{\rm eff}=5750$\,K et $T_{\rm eff}=5777$\,K
calculées par C. Van't Veer avec le programme Atlas 9 de Kurucz.

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item Mise en forme des données pour l'interpolation.
 \item Interpolation de la température et dérivées.
\end{itemize}
 
\medskip
\noi {\bf Appel~:} {\tt k5750, k5777}, sont appelées par la routine générique
{\tt tdetau}, \cfparagr{sec:tdetau}. Elles utilisent les mêmes arguments.
 
\section{Routine {\tt kappa\_cond}}\index{kappa\_cond.f}
\label{sec:kappacond}
Cette routine PRIVATE du module {\tt mod\_opacite},
\cfparagr{sec:amop}, calcule l'opacité conductive en utilisant les
ajustements polynômiaux de \citet{i75}, et complète l'opacité radiative.

\medskip
\noi{\bf Description}~: Bien que remaniée pour son adaptation à \cesam2k,
cette routine, en grande partie d'origine externe, n'est pas détaillée.
La moyenne harmonique avec l'opacité radiative est effectuée à l'issue du calcul.

\medskip
\noi {\bf Appel~:} 
Cette routine est appelée par la plupart des routines de calcul d'opacité à
l'issue du calcul de l'opacité radiative.
\begin{tt}
\begin{verbatim}
	SUBROUTINE  kappa_cond(xh,t,ro,kappa,dkapdt,dkapdr,dkapdx)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrées~:
 \begin{itemize}
  \item   {\tt xh}~: composition chi\-mi\-que en fraction de masse.
  \item   {\tt t}~: température. 
  \item   {\tt ro}~: densité. 
 \end{itemize}
 \item Entrées/Sorties~:
 \begin{itemize}
  \item   {\tt kap}~: opacité.
  \item   {\tt dkapdt, dkapdr, dkapdx}~: dérivées de l'opacité en fonction de la
  température, densité, abondance d'hydrogène. 
 \end{itemize}
\end{itemize}

\section{Routine {\tt lim\_atm}}\index{lim\_atm.f}\label{sec:limatm}
Cette routine PUBLIC du module {\tt mod\_atm}, \cfparagr{sec:amatm}, permet de
restituer l'atmosphère à partir d'une loi $T(\tau)$ grise, \cfparagr{sec:rest}.

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item Au premier appel~:
 \begin{itemize}
  \item Initialisation de constantes.
  \item	Recherche, dans l'environnement, d'un fichier
  binaire d'atmosphère pour reprise, et tests de cohérence.
  \item	Reprise de l'atmosphère en binaire ou initialisation en ASCII.
  \item Recherche du rayon bolométrique et initialisations diverses.  
  \item	Projection sur la base de B-splines.     
 \end{itemize}
 \item Pour chaque appel~:
 \begin{itemize}
  \item Commentaires divers.
  \item Appel à {\tt coll\_atm} pour l'intégration.
  \item Au cas où une liste complète du modèle est requise, formation des
  tableaux des quantités nécessaires.
  \item Ecriture du fichier binaire d'atmosphère {\tt mon\_modele.atm}.
 \end{itemize}
\end{itemize} 
\medskip
\noi {\bf Appel~:} {\tt lim\_atm} appelée par la routine générique
d'atmosphère {\tt atm}, \cfparagr{sec:atm}, a la même liste d'appel.

\section{Routines {\tt lim\_gong1, lim\_tau1}}\index{lim\_gong1.f}
\index{lim\_tau1.f}\index{atmosphère}\label{sec:limtau1}\label{sec:limgong1}
Ces deux routines PUBLIC du module  {\tt mod\_atm}, \cfparagr{sec:amatm}, sont
deux formes similaires de la restitution d'une atmosphère dans l'approximation
monocouche, \cfparagr{sec:mono}.
Dans la routine {\tt lim\_gong1}, deux facteurs $\beta=7.22$ et $\lambda=6$,
affectent respectivement les équations de la pression et de la luminosité,
leur effet étant, avec une \EOS\ supposant l'ionisation totale,
d'obtenir un modèle solaire qui ressemble au soleil actuel.

\medskip
\PB{Avec l'approximation monocouche, la pression tur\-bu\-len\-te
est igno\-rée dans l'at\-mos\-phè\-re.}\index{approximation monocouche}
\index{accélération centrifuge}\index{arrêt de l'évolution}

\medskip
\noi {\bf Appel~:} {\tt lim\_gong1, lim\_tau1}, appelées par la fonction
générique
d'atmosphère {\tt atm}, \cfparagr{sec:atm}, ont la même liste d'appel.

\begin{figure}%[ht]
\includegraphics[width=0.9\textwidth]{Orga-lim_zc.eps}
\caption{Organigramme de la routine {\tt lim\_zc} de détermination des limites
\ZRZCs.
}\label{fig:lim_zc}
\end{figure}

\section{Routine {\tt lim\_zc}}\label{sec:limzc}
\index{lim\_zc.f}\index{Schwarzschild}\index{Ledoux}
Cette routine PRIVATE du module {\tt mod\_static}, \cfparagr{sec:amqst},
a trois fonctions principales~: 
\begin{itemize}
 \item Initialisation, si nécessaire, de la répartition des couches en
 fonction du nombre de points à utiliser.
 \item Localisation des limites des zones radiatives et
convectives, au besoin avec overshoot.
\item Détermination des coefficients de répartition.
\end{itemize}
{\tt lim\_zc} est une routine importante de \cesam2k, son organigramme est
présenté \Fig{fig:lim_zc}.

\medskip
\noi{\bf Description de {\tt lim\_zc}}
\begin{itemize}
\item Initialisation~:
\begin{itemize}\index{dn\_fixe}
\item Initialisations diverses effectuées au premier appel,
en particulier, détermination des points limites et calcul
des coefficients d'intégration correspondants à cette répartition.
\item Au cas où le nombre de couches doit être modifié,
détermination de
la nouvelle fonction d'espacement, changement de la base de B-splines,
redéfinition des points limites et calcul des coefficients d'intégration.
Avec l'option {\tt grille\_fixe}, \cfparagr{sec:nlchim}, la grille
d'interpolation de la composition chi\-mi\-que n'est modifiée que si le nombre
de couches a varié de plus de la quantité {\tt dn\_fixe} fixée dans
{\tt resout}, \cfparagr{sec:cesam}.\index{dn\_fixe}
\end{itemize}
\item Localisation~:
\begin{itemize}
\item Calcul, en chaque point de la grille, de la différence
$\gradrad-\gradad^*$, localisation des changements de signe et identification
de la nature de la limite à l'aide de la variable logique {\tt lconv} qui est
{\tt .TRUE.} lorsqu'on passe d'une \ZR\ à une \ZC, en
traversant la limite dans le sens croissant de la variable d'espace
\ie\ masse, rayon ou encore, indice.
\item Elimination des zones convectives mal définies \ie\ trop
proches du centre,
de la limite externe ou encore n'affectant que très peu de couches.
\item Affinement, par dichotomie, de la localisation des limites retenues.
\item Si besoin, extensions des zones convectives et
analyse des chevauchements éventuels.
\end{itemize}
\item Détermination~:
\begin{itemize} 
\item Des coefficients de répartition qui permettent d'amener
chacune des li\-mi\-tes sur un point de la grille.
\end{itemize}
\end{itemize} 

\medskip
\noi {\bf Appel~:} {\tt lim\_zc}, appelée par {\tt resout}, n'a que des
arguments d'entrée.

\begin{tt}
\begin{verbatim}
	SUBROUTINE lim_zc(no_rep,new_nqs)
\end{verbatim}
\end{tt}
{\tt no\_rep=.TRUE.}~: Il n'y a pas eu d'initialisation ou de réinitialisation
du modèle.\\
{\tt new\_nqs=.TRUE.}~: Il faut effectuer une redistribution des couches du
modèle quasi-statique, la constante de répartition ayant été modifiée.

\section{Routine {\tt list}}\index{list.f}\label{sec:list}
Cette routine PRIVATE du module {\tt mod\_cesam},
\cfparagr{sec:amcs}, n'a que des arguments d'entrée. Sa fonction
est de construire le listing permettant de suivre le déroulement du calcul
et de produire, pour différentes époques de l'évolution,
une liste détaillée des variables du modèle, des abondances,
des rapports isotopiques à la surface et des flux de neutrinos --
l'implantation de ces derniers a bénéficié d'une collaboration avec G.Berthomieu.

\medskip 
\noi{\bf Description}~:  
\begin{itemize}
 \item Initialisations diverses, en particulier des indices d'identification
 des éléments chi\-mi\-ques.
 \item Construction d'un cartouche indiquant~: 
 l'âge du modèle, la température effective, la luminosité, le rayon,
 la gravité, la pression, la
 température, les abondances par fraction de masse de \H1 et \He4 centrales,
 les proportions d'énergie libérées par les cycles thermonucléaires et
 la gravité, la nature du modèle, la variation relative de masse,
 ses valeurs présente et initiale, les abondances et
 les rapports isotopiques en surface, éventuellement la période et la vitesse
 de rotation de surface.
 \item {\em Si le listing complet est requis}, le modèle
 est listé couche par couche du sommet de
 l'enveloppe vers le centre, un cartouche étant disposé toutes les 10 couches
 pour faciliter l'identification des quantités écrites. Les limites
 \ZRZCs\ sont matérialisées. L'atmosphère est ensuite reproduite
 couche par couche, en partant de l'enveloppe vers la surface;
 on indique ensuite la
 déplétion des éléments en surface, les abondances
 relatives en nombre à la surface, les flux de neutrinos, et une
 estimation, pour le cas solaire, des grandeurs astérosismologiques~: $\nu_0,
 \ \delta\nu_{02},\ \delta\nu_{13},\ A$.
\end{itemize}

\medskip
\noi{\bf Appel}~: {\tt list} est appelée par {\tt cesam}, \cfparagr{sec:cesam}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE list(alfa,anub8,anube7,anun13,anuo15,anupep,anupp,beta,
	1 compg,cp,delta,dcapdr,dcapdt,depsdr,depsdt,d2p,d2ro,
	2 chaine,convec,ecritout,epsilon,gamma,gamma_atm,gradad,grada_atm,
	3 gradconv,gradc_atm,gradrad,gradr_atm,hp,i_cno,i_gr,i_pp,i_3a,
	4 kap,l,m,mu,mue,m_atm,p,pt,pt_atm,p_atm,r,ro,ro_atm,r_atm,t,tau,
	5 teff,tx_ioni,t_atm,u,vaissala,w,z,degene)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item {\tt anub8, anube7, anun13, anuo15, anupep, anupp}~: Tables des
 nombres de neutrinos des diverses sources.
 \item {\tt alfa, beta, delta}~:  $\alpha,\ \beta,\ \delta$.
 \item {\tt compg, cp, hp}~: Composition chi\-mi\-que par unité de masse,
 chaleur spécifique à pression  constante, échelle de hauteur de pression.
 \item {\tt kap, dcapdr, dcapdt}~: Opacité, dérivées par rapport à la
 densité et à la température.
 \item {\tt epsilon, depsdr, depsdt}~: Energie nucléaire des différents cycles
 et énergie graviphique, dérivées par rapport à la densité et à la température.
 \item {\tt d2p, d2ro}~: Dérivées secondes
 de la pression et de la densité centrales. 
 \item {\tt chaine, convec, ecritout}~: Statut du modèle, nature radiative ou
 convective de la couche,  écriture du listing complet.  
 \item {\tt gradad, gradconv, gradrad, gamma}~: Gradient adiabatique, gradient
 convectif, gradient radiatif, $\Gamma$.
  \item {\tt grada\_atm, gradc\_atm, gradr\_atm, gamma\_atm}~: Gradient
  adiabatique, gradient convectif, gradient radiatif, $\Gamma$ pour
  l'atmosphère.
 \item {\tt i\_cno, i\_pp, i\_3a, i\_gr}~: Pourcentages d'énergie d'origine
  nucléaire PP, CNO, $3\alpha$ et gravifique.
 \item {\tt mu, mue, vaissala}~: Poids moléculaire moyen, poids moléculaire
  moyen par électron libre, \fbv.  
 \item {\tt p, pt, t, r, l, m, ro, u}~: Pression gazeuse, pression
 totale, température, rayon, luminosité, masse, densité, énergie interne
 spécifique.
 \item {\tt p\_atm, pt\_atm, t\_atm, r\_atm, m\_atm, ro\_atm}~: Pression
 gazeuse, pression totale, température, rayon, masse, densité dans l'atmosphère.
 \item {\tt tau, teff}~: Epaisseur optique, température effective
 \item {\tt tx\_ioni, w, z, degene}~: Taux d'ionisation, vitesse angulaire,
 abondance des métaux, facteur de dégénérescence.
\end{itemize}

\section{Routine {\tt lit\_binaire}}\index{lit\_binaire.f}\label{sec:litbin}
Cette routine PUBLIC du module {\tt mod\_exploit}, \cfparagr{sec:amexp}, permet
la lecture des fichiers binaires, \cfparagr{sec:fichbin}, à l'exception des
fichiers d'atmosphère.

\medskip 
\noi{\bf Description}~:  
\begin{itemize}
 \item Recherche et lecture du fichier de données {\tt mon\_modele.don},
 \cfparagr{sec:fdon}.
 \item Lecture des paramètres du modèle, calcul des dimensions et
 allocation des tableaux.
 \item Lecture du modèle.
\end{itemize}

\medskip
\noi{\bf Appel}~: {\tt lit\_binaire} appelée par des
programmes d'exploitation, \cfparagr{sec:pexploit}, du module
{\tt mod\_exploit}, \cfparagr{sec:amexp}, n'a que des arguments d'entrée.
\begin{tt}
\begin{verbatim}
	SUBROUTINE lit_binaire(chaine,dt)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item {\tt chaine, dt}~: Nom du modèle, pas temporel. 	 
\end{itemize}

\section{Routine {\tt lit\_hr}}\index{lit\_hr.f}\label{sec:lithr}
Cette routine PUBLIC du module {\tt mod\_exploit}, \cfparagr{sec:amexp}, permet
la lecture des fichiers ASCII de diagramme HR {\tt mon\_modele.HR},
\cfparagr{sec:fhr}.

\medskip 
\noi{\bf Description}~:  
\begin{itemize}
 \item  Lecture du premier enregistrement du fichier ASCII
 {\tt mon\_modele.HR}, pour allocations.
 \item  Lecture du fichier dans son intégralité.  
 \item  Formation des tests de lecture.
\end{itemize}

\medskip
\noi{\bf Appel}~: {\tt lit\_hr} est appelée par des
programmes d'exploitation, \cfparagr{sec:pexploit}, du module
{\tt mod\_exploit}, \cfparagr{sec:amexp}, en particulier par le programme
{\tt des\_hr}. 
\begin{tt}
\begin{verbatim}
	SUBROUTINE lit_hr(init,chaine,fin,erreur,log_l,log_r,log_teff,
	1 vrot,wrot)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrées~:
 \begin{itemize} 
  \item {\tt init=.TRUE., chaine}~: Initialisation, nom du modèle.	 
 \end{itemize}
 \item Sorties~:
 \begin{itemize}
  \item {\tt fin=.TRUE., erreur=.TRUE.}~: Fin de fichier, erreur de lecture.
  \item {\tt log\_l, log\_r, log\_teff }~: Logarithmes décimaux de la
  luminosité, du rayon, de la température effective.
   \item {\tt vrot, wrot}~: vitesses linéaire et angulaire de la couche
   externe. 
 \end{itemize}
\end{itemize}

\section{Routine {\tt lit\_nl}}\index{lit\_nl.f}\label{sec:litnl}
La fonction de cette routine PUBLIC des modules {\tt mod\_donnees},
\cfparagr{sec:moddon} et {\tt mod\_exploit}, \cfparagr{sec:amexp},
est de lire les NAMELISTS du fichier
d'entrée {\tt mon\_modele.don}, \cfparagr{sec:fdon}.

\medskip 
\noi{\bf Description}~:  
\begin{itemize}
 \item  Recherche et lecture des NAMELISTs du fichier de données {\tt
 mon\_modele.don}, \cfparagr{sec:fdon}. En cas d'échec de lecture, tentative
 de trouver et d'utiliser des fichiers de données de versions précédentes de
 \dcesam.
 \item  Vérification de la cohérence des données.
 \item  Détermination des abondance par masse de l'hydrogène $X$,
 hélium $Y$ et métaux $Z$, mise en place de tests.
 \item  Initialisation des principales constantes de physique par appel à la
 routine {\tt ini\_ctes}, \cfparagr{sec:inictes}.
 \item  Définition du type de rotation à utiliser.
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt lit\_nl} est appelée par {\tt cesam},
\cfparagr{sec:cesam}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE lit_nl(wrot)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Sortie~:
 \begin{itemize}
  \item {\tt wrot}~: Vitesse angulaire.
 \end{itemize}
\end{itemize}

\section{Fonction logique {\tt lmix}}\index{lmix.f}\label{sec:lmix}
La valeur de cette fonction PRIVATE du module {\tt mod\_evol} est .TRUE.
 dans les \ZCs.

\medskip 
\noi{\bf Description}~:  
\begin{itemize}
 \item Un premier test détermine si on se trouve dans la \ZC\ externe.
 \item Une fois la localisation de l'abscisse obtenue, on affecte à la fonction
  la valeur de la table de mélange pour l'indice obtenu.
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt lmix} est appelée principalement des routines 
concernées par la diffusion du moment cinétique et des éléments chimiques.
\begin{tt}
\begin{verbatim}
	LOGICAL FUNCTION lmix(nu)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item {\tt nu}~: (masse)$^\frac23$.
\end{itemize} 

\section{Routine {\tt modif\_mix}}\index{modif\_mix.f}\label{sec:modifmix}
Cette routine PRIVATE du module {\tt mod\_nuc}, \cfparagr{sec:amnuc}, permet de
personnaliser une mixture, \cfparagr{sec:mix}.

\medskip 
\noi{\bf Description}~:  
\begin{itemize}
 \item  Recherche du fichier de la nouvelle mixture
 {\tt mon\_modele.modif\_mix}, \cfparagr{sec:mix}.
 \item  Lecture des modifications en DeX des abondances initiales.
 \item  Modification des abondances des éléments lourds.
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt modif\_mix}, appelée par {\tt abon\_ini},
\cfparagr{sec:abin}, n'a pas d'argument.


\begin{figure}%[ht]
\includegraphics[width=0.9\textwidth]{Orga-nuc.eps}
\caption{Environnement de la routine de calcul des réactions
thermonucléaires. La routine {\tt nuc}
est appelée de {\tt cesam} pour l'initialisation des abondances.  Lors d'une
évolution, elle est appelée
i) de {\tt eq\_dif\_chim} ou de {\tt rk\_imps} pour le calcul de l'évolution des
abondances, suivant qu'il y ait ou non suivi de la diffusion des éléments
chi\-mi\-ques,
ii) de {\tt thermo} pour le calcul de l'énergie thermonucléaire libérée,
iii) de {\tt list} pour le calcul des flux de neutrinos. Au premier appel,
 il y a
initialisation des abondances initiales et tabulation des réactions
nucléaires sui\-vant le cycle et la compilation des réactions à utiliser,
\cfparagr{sec:fdon}. Lors des appels suivants, il y a calcul des
variations des abondances ou/et de l'énergie thermonucléaire libérée, ou
encore des flux de neutrinos.
}\label{fig:nuc}
\end{figure}

\section{Routine générique {\tt nuc}}\index{nuc.f}\label{sec:nuc}
 La routine PUBLIC {\tt nuc} du module {\tt mod\_nuc}, \cfparagr{sec:amnuc}
 est la {\embf routine générique} qui, par l'intermédiaire de la routine
 spécifique dont le nom est
 défini dans le fichier de données \cfparagr{sec:fdon}, gère le
 calcul des réactions et de l'énergie nucléaire, \cfparagr{sec:reacnu}.
Les routines de type {\tt nuc} sont  disponibles dans 4 catégories différentes,
suivant le domaine de température couvert~:
 \begin{itemize}
 \item {\embf test}~: réseaux de réactions simplifiés destinés à des tests.
  \item {\embf pré-3$\alpha$}~: utilisables depuis la \PMS\ jusqu'à
  l'amorçage des
  réactions de l'hélium, intervalle de température couvert~: 0.5-100 MK.
  Les réseaux de réactions utilisés décrivent les cycles PP et CNO.
  \item {\embf 3$\alpha$}~: utilisables depuis la \PMS\ jusqu'à l'amorçage des
  réactions du carbone, intervalle de température couvert~: 0.5-200 MK.
  Les réseaux de réactions utilisés décrivent les cycles PP, CNO et 3$\alpha$.  
  \item {\embf co}~: utilisables depuis la \PMS\ jusqu'au cycle de l'oxygène,
  intervalle de température couvert~: 0.5-2000 MK.
   Les réseaux de réactions utilisés décrivent les cycles PP, CNO, 3$\alpha$,
   la combustion du carbone et de l'oxygène. Au delà l'hypothèse d'équilibre
   quasi-statique n'est plus justifiée. 
 \end{itemize}
 Les isotopes utilisés dans les réseaux nucléaires dépendent, d'une part,
 du type de
 modèle à calculer et, d'autre part, des éléments chi\-mi\-ques auxquels on
 s'intéresse plus particulièrement.
 
\medskip
La mise en \oe uvre de ces routines a bénéficié, à divers titres,
de collaborations de B. Pichon, Y. Lebreton, S. Brun et D. Cordier.
La source de \cesam2k contient diverses routines du type {\tt nuc}
spécialement adaptées à des cas spécifiques de l'évolution stellaire.

\medskip
\noi{\bf Description}~: On décrit l'organigramme d'une routine de type
{\tt nuc}, à l'exception de {\tt iben}, \cfparagr{sec:iben}, et de {\tt pp1},
\cfparagr{sec:pp1}, dont les algorithmes diffèrent quelque peu du cadre
général. Un argument d'entrée, {\tt fait}, définit la partie du calcul à
effectuer~:
\begin{itemize}
 \item{\tt fait=1}
 \begin{itemize}
  \item Initialisation du nombre d'isotopes du réseau nucléaire.
  \item Initialisation du réseau nucléaire par appel à {\tt rq\_reac},
  \cfparagr{sec:rqreac}.
  \item Initialisation des abondances par appel à
  {\tt abon\_ini}, \cfparagr{sec:abin}.
  \item Détermination du type et des caractéristiques de l'isotope fictif et
  calcul des abondances isotopiques initiales.
  \item Initialisations diverses et écritures.
 \end{itemize}
 \item {\tt fait=2} 
 \begin{itemize}
  \item Calcul des taux de réaction. 
  \item Formation du jacobien.
 \end{itemize}
 \item {\tt fait=3}  
 \begin{itemize} 
  \item Calcul de l'énergie nucléaire.
 \end{itemize}  
 \item {\tt fait=4} 
 \begin{itemize} 
  \item  Calcul des flux de neutrinos. Les ``flux sur terre'' sont calculés en supposant que
   ces neutrinos sont produits à 1UA de la terre, même si le modèle
   n'est pas un modèle solaire.
 \end{itemize}
\end{itemize} 

\medskip
\noi {\bf Appel~:} {\tt nuc} est appelée de divers endroits, en particulier
de {\tt rk\_imps}, {\tt thermo}, {\tt eq\_dif\_chim}, {\tt cesam}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE nuc(t,ro,comp,dcomp,jac,deriv,fait,
	1	epsilon,et,ero,ex,hhe,be7e,b8e,n13e,o15e,f17e)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrées~:
 \begin{itemize}
  \item{\tt t, ro}~: Température, densité.
  \item{\tt deriv=.TRUE.}~: On calcule le jacobien et les dérivées.
  \item{\tt fait}~: fait=1~: initialisation de la composition chi\-mi\-que,
  fait=2~: calcul des taux et du jacobien si deriv=.TRUE.
  fait =3~: énergie nucléaire et si {\tt deriv=.TRUE.}~:
  dérivées / température,
  densité et abondances, fait=4~: calcul des neutrinos.
 \end{itemize}
 \item Entrées/Sorties~:
 \begin{itemize}
  \item{\tt comp}~: Abondances des isotopes par mole.
 \end{itemize} 
 \item Sorties~:
 \begin{itemize}
  \item{\tt dcomp, jac}~: Dérivées temporelles des abondances, jacobien.
  \item{\tt epsilon, et, ero, ex}~: Energie thermonucleaire et dérivées.
  \item{\tt hhe, be7e, b8e, n13e, o15e, f17e}~: Nombres de neutrinos pour
  les réactions \H1($p,\beta^+ \nu$)\H2, \Be7($e^-,\nu \gamma$)\Li7,
  \B8($\beta^+ \nu$)\Be8 \N{13}($\beta^+ \nu$)\C{13}, \O{15}($\beta^+\nu$)\N{15}, 
  \F{17}($\beta^+ \nu$)\O{17}.
 \end{itemize}
\end{itemize}

\section{Routine générique {\tt opa}}\index{opa.f}\index{opacité}\label{sec:opa}
 La routine PUBLIC {\tt opa} du module {\tt mod\_opa}, \cfparagr{sec:amop},
 est la {\embf routine générique} qui, par l'intermédiaire de la routine
 spécifique dont le nom,  {\tt NOM\_OPA}, est
 défini dans le fichier de données \cfparagr{sec:fdon}, réalise la gestion
 du calcul de l'opacité.
Pour un triplet~: (composition chi\-mi\-que, température, densité), les routines de
type {\tt opa} 
déterminent l'opacité Rosseland $\kappa(T,\rho,X,Z)$, ainsi que ses
dérivées premières par rapport à
i) la température, ii) la densité et, iii) la teneur en hydrogène.
Deux types d'opacités sont implantés dans \cesam2k, des opacités analytiques
et des opacités tabulées. Les premières sont des approximations,
leur utilisation est robuste et ne demande que très peu de ressources;
peu précises elles sont réservées aux tests. Les secondes, plus précises, mais
d'utilisation délicate, sont destinées aux exploitations.

\medskip
\noi{\bf Description}~: Les routines de type  {\tt opa}, la plupart d'origine
externe, n'ont pas une structure commune; chacune d'entre elles fait l'objet
d'une description personnalisée.
L'opacité conductive, \cfparagr{sec:kappacond}, est introduite à l'issue
du calcul de l'opacité radiative.

\medskip
\noi {\bf Appel~:} {\tt opa} est appelée de divers endroits
 en particulier de {\tt evol},
{\tt thermo}, {\tt thermo\_atm}, {\tt eq\_dif\_chim}, {\tt cesam}.
\begin{tt}
\begin{verbatim}
        SUBROUTINE opa(xh,t,ro,kappa,dkapdt,dkapdr,dkapdx)
\end{verbatim}
\end{tt}
\begin{itemize}
\item Entrées~:
\begin{itemize}
\item {\tt xh, t, ro}~: composition chi\-mi\-que, température, densité.
\end{itemize}

\item Sorties~:
\begin{itemize}
\item {\tt kappa,dkapdt,dkapdr,dkapdx}~: opacité, dérivées.
\end{itemize}
\end{itemize}

\section{Routine {\tt opa\_gong}}\index{opa\_gong.f}\label{sec:opg}
La routine PRIVATE {\tt opa\_gong} du module {\tt mod\_opa},
\cfparagr{sec:amop}, est une routine de type opacité analytique.
Le formalisme utilisé est décrit dans le "Solar Model Comparison Project" de
\citet{c88}.
L'o\-pa\-ci\-té moy\-en\-ne de Rosseland est approchée par une
formule de Kramers améliorée, sous la forme d'une somme de deux
termes, l'un valable pour l'intérieur stellaire et l'autre pour l'extérieur~:
\begin{displaymath}
\kappa_{\rm R}^{-1}=\kappa_e^{-1}+\kappa_i^{-1},\quad \kappa_e=c_e\rho^{m_e}T^{n_e}
,\quad \kappa_i=c_i\rho^{m_i}T^{n_i},
\end{displaymath}
avec~: $c_e=1.6236784\times10^{-33}$, $m_e=0.407895$, $n_e=9.28289$,
$c_i=7.1548412\times10^{13}$, $m_e=0.138316$, $n_e=-1.97541$.
Cette forme analytique correspond à $Z=0.02$.

\medskip
\noi {\bf Appel~:} {\tt opa\_gong}, appelée par la routine
générique {\tt opa} \cfparagr{sec:opa}, utilise les mêmes arguments.
 
\section{Routine {\tt opa\_houdek9}}\index{opa\_houdek9.f}\label{sec:hou}
La routine PRIVATE {\tt opa\_houdek9} du module {\tt mod\_opa},
\cfparagr{sec:amop}, est une routine de type opacité tabulée. Elle utilise
les interpolations des tables de Livermore 95 prolongées, pour les basses
températures, par les opacités Kurucz ou Alexander; elles peuvent, ou non,
tenir compte de la conductivité électronique. Elles utilisent
les bibliothèques et les données du package de \citet{hr96}.
La mise en forme des données est décrite au \paragr{sec:opahd}.
 Pour son utilisation,
il est nécessaire d'indiquer dans la routine {\tt opa\_houdek}
le chemin qui permet d'atteindre les données {\tt OPINPATH\_95};
il faut aussi indiquer au LINK le chemin de la bibliothèque {\tt libopint.a}.
La mise en \oe uvre de {\tt opa\_houdek } a bénéficié
d'une collaboration avec N.Audard.
La version originale du package de routines d'interpolation de G.Houdek
se trouve à~: {\tt ftp://solaris.tuwien.ac.at/incoming/}.
%, une co\-pie
%{\em verbatim} de la version "v9" est in\-clu\-se dans la sour\-ce de \cesam2k.}

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item Au premier appel~:
 \begin{itemize}
  \item Lecture et initialisation des tables. 
 \end{itemize}
 \item Adaptation et encadrement des données.
 \item Calcul de l'opacité, en cas d'échec appel à {\tt opa\_yveline\_lisse},
 \cfparagr{sec:yvel}.
\end{itemize}
Les routines d'interpolation d'origine externe ne sont pas décrites. Pour plus
d'informations, se
référer aux README du packetage "v9" du sous-directory {SUN\_STAR\_DATA}.

\medskip
\noi {\bf Appel~:} {\tt opa\_houdek9}, appelée par la routine
générique {\tt opa} \cfparagr{sec:opa}, utilise les mêmes arguments.

\section{Routine {\tt opa\_int\_zsx}}\index{opa\_int\_zsx.f}
La routine PRIVATE {\tt opa\_\_int\_zsx} du module {\tt mod\_opa},
\cfparagr{sec:amop}, est une routine de type opacité tabulée.
{\tt opa\_int\_zsx} interpole les {\embf anciennes}
tables Li\-ver\-mo\-re 1991, prolongées par les opacités Kurucz
pour les basses températures.
Elle utilise une interpolation spline 4D linéaire\footnote{La base utilisée est
duale, les calculs d'interpolation sont alors immédiats.}
suivant les axes $(T_6,\ln\rho/T_6^3, X,Z)$, $T_6\equiv T\times 10^{-6}$.
Les données Livermore 1991 sont actuellement ca\-du\-ques.
Des dif\-fi\-cul\-tés de con\-ver\-gen\-ce, obser\-vées prin\-ci\-pa\-le\-ment
dans la res\-ti\-tu\-tion de l'at\-mos\-phère, peu\-vent pro\-ve\-nir de
l'in\-ter\-po\-la\-tion li\-né\-ai\-re -- non dé\-ri\-va\-ble aux points
de la ta\-ble --
dans ces ta\-bles aux lar\-ges in\-ter\-val\-les ta\-bu\-lai\-res.

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item Au premier appel~:
 \begin{itemize}
  \item Initialisation de constantes et extension des tables par interpolation.
  \item Mise en forme des tables pour l'interpolation.
  \item Estimations des limites des tables.  
 \end{itemize}
  \item Localisation du point de calcul.
  \item Interpolation et calcul des dérivées.
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt opa\_int\_zsx}, appelée par la routine
générique {\tt opa} \cfparagr{sec:opa}, utilise les mêmes arguments.

\section{Routine {\tt opa\_opal2}}
\index{opa\_opal2.f}\label{sec:opaopal2}
La routine PRIVATE {\tt opa\_opal2} du module {\tt mod\_opa},
\cfparagr{sec:amop}, est une routine de type opacité tabulée.
Elle permet de dépasser le seuil $Z<0.1$ des données de OPAL.
Elle tient compte des
modifications de composition chi\-mi\-que dues à la nucléosynthèse
$H\rightarrow He\rightarrow C\rightarrow N\rightarrow O$.
Elle ne permet le calcul
de l'opacité que pour des températures supérieures à 1eV, le raccord avec des
opacités basse température n'existant pas. Elles n'est donc pas
utilisable pour les modèles comportant une atmosphère.
Le calcul de l'opacité est basé sur les tables d'opacité
de type 2 de Livermore, il utilise les routines  du paketage {\tt z14xcotrin21},
\cfparagr{sec:z14xcotrin21}, de A.I. Boothroyd. 
Les tables utilisées, placées dans le sous-directory {\tt
SUN\_STAR\_DATA} sont automatiquement décompressées et transformées en binaire
à l'occasion de leur première utilisation.

\medskip
\noi{\tt opa\_opal2} {\embf  est d'usage extrèmement délicat.}

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item Au premier appel~:
 \begin{itemize}
  \item Identification du chemin directory où se trouvent les fichiers de
  données.
  \item  Identification des indices de C, N, O, estimation de l'abondance
  en masse des éléments de la mixture de GN93 qui ne sont pas pris en compte
  et du rapport [O/Fe].
  \item Détermination des rapports C/Z, O/Z, pour les excès de C et O de la
  mixture utilisée par rapport à GN93.
  \item Lecture en binaire des tables d'opacité concernées si elles existent,
  sinon création.
 \item Calcul de X, Y, Z initiaux et définition des limites pour les
 sorties de table.
 \end{itemize} 
 \item Calcul de l'opacité.
 \item Estimation des dérivées par dérivation numérique. 
\end{itemize}
Les routines d'interpolation, d'origine externe ne sont pas décrites,
\cfparagr{sec:z14xcotrin21}.

\medskip
\noi {\bf Appel~:} 
La liste d'appel de cette routine est celle de sa routine
générique {\tt opa} \cfparagr{sec:opa}, avec un argument supplémentaire, la
variable logique {\tt cno} qui permet une alternative~:
\begin{itemize}
 \item {\tt cno=.FALSE.}~: seules les variations de l'abondance en carbone sont
 prises en compte.
 \item {\tt cno=.TRUE.}~: les variations de l'abondance en carbone et en oxygène
 sont prises en compte.
\end{itemize}
En raison de l'absence d'un raccord avec des opacités basse
température, {\tt opa\_opal2} est utilisée pour prolonger les routines d'opacité
{\tt opa\_yveline}, \cfparagr{sec:yve}, et
{\tt opa\_yveline\_lisse}, \cfparagr{sec:yvel}, au delà de $Z>0.1$.

Il est toutefois possible d'utiliser {\tt opa\_opal2} directement, en
codant dans le fichier de données, \cfparagr{sec:fdon},
{\tt NOM\_OPA=opa\_opal2\_cno}, pour tenir compte seulement des variations de
l'abondance du carbone, ou {\tt NOM\_OPA=opa\_opal2\_co}, pour tenir compte
des variations de l'abondance du carbone et de l'oxygène.

\section{Routine {\tt opa\_opalCO}}
\label{sec:opaopalCO}\index{opa\_opalCO.f}
La routine PRIVATE {\tt opa\_opalCO} du module {\tt mod\_opa},
\cfparagr{sec:amop}, est du type opacité tabulée. Elle permet de dépasser le
seuil $Z<0.1$ des données de OPAL. Elle tient compte des
modifications de composition chi\-mi\-que dues à la nucléosynthèse
$H\rightarrow He\rightarrow C\rightarrow O$. Elle ne permet le calcul
de l'opacité que pour des températures supérieures à 1eV, le raccord avec des
opacités basse température n'existant pas. Elle est inutilisable
pour les modèles comportant une atmosphère.

Les tables utilisées par ces routines, placées dans le sous-directory 
 {\tt SUN\_STAR\_DATA} sont automatiquement décompressées et transformées
 en binaire à l'occasion de leur première utilisation.

La mise en \oe uvre de {\tt opa\_opalCO} a bénéficié d'une collaboration avec
L.Piau.

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item Au premier appel~:
 \begin{itemize}
  \item Identification des indices de H, He, C, O.
  \item Définition de la métallicité de la table et calcul des rapports C/Z,
  O/Z.
 \end{itemize}
 \item Détermination des abondances de H, He, C, O, et des excès de C et O.
 \item Calcul des opacités.
\end{itemize}
{\tt opa\_opalCO} utilise une interpolation moins sophistiquée des tables OPAL
que {\tt opa\_opal2}.
Les routines d'interpolation utilisées sont des routines subordonnées
de {\tt opa\_opalCO}; d'origine externe, ces routines ne sont pas décrites.
 Il s'agit de~:\\
\noi{\tt opac, cointerp, t6rinterp, readco, quad, spline, splint, fity, fitx,
 getd, interp, smooth, opaltab}.
 
\medskip
\noi {\bf Appel~:} {\tt opa\_opalCO}, appelée par la routine
générique {\tt opa} \cfparagr{sec:opa}, utilise les mêmes arguments.

\section{Routine {\tt opa\_yveline}}
\index{opa\_yveline.f}\label{sec:yve}
La routine PRIVATE {\tt opa\_yveline} du module {\tt mod\_opa},
\cfparagr{sec:amop}, est une routine de type opacité tabulée.
L'interpolation du package construit par Y. Lebreton pour le
calcul de l'\opa\ OPAL \citep{ir91}.
{\tt opa\_yveline} effectue une interpolation cubique dans la table,
linéaire aux bords.La table en ASCII se trouve dans le fichier
{\tt opa\_yveline\_etendu.dat} du
sous-directory {\tt SUN\_STAR\_DATA}. Extraire cette table et la
transformer en un fichier binaire à l'aide du programme {\tt ascii2bin\_opa}
de ce package \cfparagr{sec:opayv}.\\
Lorsque l'abondance en éléments lourds dépasse $Z>0.1$  {\tt opa\_yveline}
fait appel à
{\tt opa\_opal2}, \cfparagr{sec:opaopal2}, qui permet de tenir compte de
la nucléosynthèse $H\rightarrow He\rightarrow C\rightarrow N\rightarrow O$.

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item Au premier appel~:
 \begin{itemize}
  \item Vérification de la cohérence des données.
 \end{itemize}
 \item Vérification de l'accessibilité du point d'interpolation.
 \item Calcul de l'opacité si $Z<0.1$.
 \item Appel à {\tt opa\_opal2} si $Z>0.1$.
\end{itemize}
Les routines d'interpolation utilisées par {\tt opa\_yveline} sont introduites
sous forme de routines subordonnées, d'origine externe, elles ne sont pas
décrites. Il s'agit de~: \\
\noi{\tt kappa\_opal, intlin\_opal, intl\_opal, sub\_quad,
lect\_opal, lpol\_op, pos\_table\_op.}

\medskip
\noi {\bf Appel~:} {\tt opa\_yveline}, appelée par la routine
générique {\tt opa} \cfparagr{sec:opa}, utilise les mêmes arguments.

%\section{\tt opa\_allard} La routine {\tt opa\_allard} utilise les
%opacités OPAL avec une composition chi\-mi\-que en éléments lourds $\alpha$
%renforcés. Les données sont issues du site WEB de Livermore:
%http://www-phys.llnl.gov/V\_Div/OPAL/existing.html.
%Pour les basses temp'eratures les opacités calculées par la routine
%{\tt opa\_alpha\_kurucz} qui utilise des tables formées à partir des
%données pour des atmosphères calculées avec des éléments $\alpha$
%renforcés de +0.4 dex. Ces atmosphères sont disponibles sur le site WEB~:  
%http://cfaku5.harvard.edu/opacities.html; le programme {\tt lit\_tables\_kcz}
%permet de former la table utilisée par {\tt opa\_alpha\_kurucz}.

\section{Routine {\tt opa\_yveline\_lisse}}
\index{opa\_yveline\_lisse.f}\label{sec:yvel}

La routine PRIVATE {\tt opa\_yveline\_lisse} du module {\tt mod\_opa},
\cfparagr{sec:amop}, est une routine de type opacité tabulée.
L'exploitation du package construit par Y. Lebreton pour le
calcul de l'\opa\ OPAL \citep{ir91} et effectué par
{\tt opa\_yveline\_lisse} est un lissage par des Béziers, dont l'ordre peut
être facilement adapté pour chacune des dimensions ($X,\ Z,\ T,\ \rho$).
Par défaut l'ordre 4 est utilisé, l'ordre 2 correspond à l'interpolation
linéaire. Le lissage assure des dérivées
d'ordre élevé, il est plus robuste que l'interpolation.
Le prix à payer est une précision réduite.
La table en ASCII se trouve dans le fichier
{\tt opa\_yveline\_etendu.dat} du
sous-directory {\tt SUN\_STAR\_DATA}. Extraire cette table et la
transformer en un fichier binaire à l'aide du programme {\tt ascii2bin\_opa}
de ce package \cfparagr{sec:opayv}.

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item Au premier appel~:
 \begin{itemize}
  \item Lecture des tables.
  \item Définitions diverses.
 \end{itemize}
 \item Vérification de l'accessibilité du point d'interpolation.
 \item Appel à {\tt opa\_opal2} si $Z>0.1$.
 \item Si $Z<0.1$, recherche des indices, calcul de l'opacité. 
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt opa\_opa\_yveline\_lisse}, appelée par la routine
générique {\tt opa} \cfparagr{sec:opa}, utilise les mêmes arguments.

\section{Routine {\tt osc\_adia, osc\_invers, osc\_noad}}\label{sec:osc}
\index{osc\_adia.f}\index{osc\_invers.f}\index{osc\_noad.f}
Ces routines PRIVATE du module {\tt mod\_cesam}, \cfparagr{sec:amcs}, de type
{\tt output}, \cfparagr{sec:output}, ont pour
fonction la création des fichiers utilisés respectivement pour le calcul des
oscillations adiabatiques, des inversions et des oscillations non adiabatiques.

\medskip
\noi{\bf Description}~:\\
Les tableaux d'indices {\tt tglob(nglob)} et {\tt tvar(nvar)}, adaptés à chaque
fichier de sortie, définissent l'ordre dans lequel sont disposés les
éléments de ces fichiers ASCII.
Les éléments des tableaux {\tt var(P, T, L...)} et {\tt glob(age, d2ro...)}
construits dans la routine {\tt cesam}, \cfparagr{sec:cesam},
et complétés dans la routine
{\tt add\_ascii}, \cfparagr{sec:addascii}, sont réorganisés 
dans les tableaux intermédiaires {\tt eglob(nglob)} et
{\tt evar(nvar,itot)}, suivant l'ordre défini dans
{\tt tglob(nglob)} et {\tt tvar(nvar)}.
Le fichier de sortie est ensuite créé à partir des fichiers intermédiaires.
L'identification des quantités est décrite au \paragr{sec:fichosc}. Un exemple
de création de tels fichiers est décrit au \paragr{sec:ascii}.

\medskip
\noi {\bf Appel~:} {\tt osc\_adia, osc\_invers, osc\_noad},
appelées par la routine
générique {\tt output} \cfparagr{sec:output}, utilisent les mêmes arguments.

\section{Routine générique {\tt output}}\index{output.f}\label{sec:output}
Cette routine PRIVATE du module {\tt mod\_cesam}, \cfparagr{sec:amcs}, est la
{\embf routine générique} des routines de formation des fichiers ASCII de
sortie, utilisés pour les calcul des oscillations ou des inversions,
\cfparagr{sec:osc}, ou encore pour créer un fichier de sortie ASCII
personnalisé, \cfparagr{sec:ascii}.

\medskip
\noi{\bf Description}~:\\
Suivant le type de sortie ASCII indiqué par la variable {\tt NOM\_OUTPUT} du
fichier de données {\tt mon\_modele.don}, \cfparagr{sec:fdon},
la routine de formation du fichier ASCII est appelée.

\medskip
\noi {\bf Appel~:} {\tt output} est appelée par la routine {\tt ecrit\_ascii},
\cfparagr{sec:ecriascii} subordonnée de la routine {\tt cesam}; {\tt output}
n'a que des arguments d'entrée.
\begin{tt}
\begin{verbatim}
 SUBROUTINE output(var,glob,itot,ivar)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrées~:
 \begin{itemize}
  \item {\tt glob, itot, ivar}~: quantités globales, nombre total de points,
  nombre de variables
 \end{itemize}
\end{itemize}

\section{Routine générique {\tt pertm}}\index{pertm.f}\label{sec:pertm}
Cette routine PUBLIC du module {\tt mod\_static}, \cfparagr{sec:amqst}, est la
{\embf routine générique} du calcul de la perte de masse. 

\medskip
\noi{\bf Description}~:\\
Suivant le type de sortie ASCII indiqué par la variable {\tt NOM\_PERTM} du
fichier de données {\tt mon\_modele.don}, \cfparagr{sec:fdon},
la routine de perte de masse est appelée.

\medskip
\noi {\bf Appel~:} {\tt pertem} est appelée par {\tt evol}, \cfparagr{sec:evol},
 et {\tt resout}, \cfparagr{sec:resout}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE pertem(dt))
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrée
 \begin{itemize}
  \item {\tt dt}~: pas temporel
 \end{itemize}
\end{itemize}

\section{Routine {\tt pertm\_ext, pertm\_msol}}
\index{pertm\_ext.f}\index{pertm\_msol.f}\label{sec:pertmsol}
Pour ces deux routines PRIVATE du module  {\tt mod\_static},
\cfparagr{sec:amqst}, la perte de masse est supposée linéaire en fonction du
temps. Le taux {\tt mdot}$M_\odot$ par an est celui indiqué dans le fichier de
données {\tt mon\_modele.don}, \cfparagr{sec:fdon}. Avec {\tt pertm\_msol}, le
taux de perte de masse ainsi que le traitement du vent \cfparagr{sec:vent},
sont annulés dès que la masse du modèle atteint la masse solaire.

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item Extraction des masses.
 \item Formation du tableau des masses corrigées de la perte/gain de masse.
\end{itemize}

\medskip
\noi {\bf Appel~:} ces deux routines ont les mêmes arguments que leur routine
générique {\tt pertm}, \cfparagr{sec:pertm}.

\section{Routine {pertm\_tot}}\index{\tt pertm\_tot.f}\label{sec:pertmtot}
Cette routine PRIVATE du module  {\tt mod\_static},
\cfparagr{sec:amqst}, tient compte de la masse perdue par la
 transformation de la masse en énergie, par les réactions
thermonucléaires. La perte de masse externe est supposée linéaire en fonction du
temps. Le taux {\tt mdot}$M_\odot$ par an est celui indiqué dans le fichier de
données {\tt mon\_modele.don}, \cfparagr{sec:fdon}.

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item Extraction des masses.
  \item Calcul de la perte de masse locale due aux réactions nucléaires. 
 \item Formation du tableau des masses corrigées de la perte/gain de masse
 totale.
\end{itemize}

\medskip
\noi {\bf Appel~:} cette routine a les mêmes arguments que sa routine
générique {\tt pertm}, \cfparagr{sec:pertm}.
  
\section{Routine {\tt pertem\_waldron}}\index{pertm\_waldron.f}
Cette routine PRIVATE du module {\tt mod\_static},
\cfparagr{sec:amqst}, utilise la perte de masse empirique de Waldron,
citée dans l'article A.Ap 229 (1990) 469-474.

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item Extraction des masses.
  \item Calcul de la perte de masse. 
 \item Formation du tableau des masses corrigées de la perte de masse.
\end{itemize}

\medskip
\noi {\bf Appel~:} cette routine a les mêmes arguments que sa routine
générique {\tt pertm}, \cfparagr{sec:pertm}.
  
\section{Routine générique {\tt pertw}}\index{pertw.f}\label{sec:pertw}
Cette routine PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol}, est la
{\embf routine générique} du calcul de la perte/gain de moment cinétique.

\medskip
\noi{\bf Description}~:\\
Suivant la description de la perte de moment cinétique indiquée
 par la variable {\tt NOM\_PERTW} du
fichier de données {\tt mon\_modele.don}, \cfparagr{sec:fdon},
la routine spécifique de perte de moment cinétique est utilisée.

\medskip
\noi {\bf Appel~:} {\tt pertw} est appelée par {\tt coeff\_rota},
\cfparagr{sec:coeffrota}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE pertw(nu,omega,r,mw_dot)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrées~:
 \begin{itemize}
  \item {\tt nu, omega, r}~: masse, vitesse angulaire, rayon au point de calcul.
 \end{itemize}
 \item Sortie
 \begin{itemize}
  \item {\tt mw\_dot}~: taux de perte/gain de moment cinétique.
 \end{itemize}
\end{itemize} 

\section{Routine {\tt pertw\_loc}}\index{pertw\_loc.f}\label{sec:pertwloc}
Avec cette routine PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol},
de type {\tt pertw}, la perte / gain de moment cinétique est proportionnelle
à l'énergie cinétique de rotation locale et
supposée localisée dans la fraction de masse externe {\tt M > pw\_extend},
\cfparagr{sec:pertecin}.

\medskip
\noi{\bf Description}~:\\
La variation temporelle
de moment cinétique par unité de masse est modélisée par~:
\[\dot{\cal M}_\Omega=\gamma R^2\Omega^2,\quad |\gamma|\sim 10^{-13}
\sim 10^{-14}\]
Le paramètre $\gamma$ correspond au taux {\tt p\_pertw} indiqué dans
le fichier de données {\tt mon\_modele.don}, \cfparagr{sec:fdon}, 
le taux de perte/gain de moment cinétique {\tt mw\_dot} est nul
en deça de la limite fixée.

\medskip
\noi {\bf Appel~:} cette routine utilise les mêmes arguments que sa routine
générique {\tt pertw}, \cfparagr{sec:pertw}.
 
\section{Routine {\tt pertw\_ptm}}\index{pertw\_ptm.f}
\label{sec:pertwptm}
Avec cette routine PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol},
de type {\tt pertw}, le taux {\tt p\_pertw} de perte de moment cinétique
indiqué dans le fichier de données {\tt mon\_modele.don}, \cfparagr{sec:fdon},
est utilisé comme un paramètre fixant l'efficacité de la perte de moment
cinétique résultant de la perte de masse, \cfparagr{sec:pertecin}.
La perte de moment cinétique est supposée localisée dans la fraction
de masse externe {\tt M > pw\_extend}.

\medskip
\noi{\bf Description}~:\\
L'apport/perte de moment cinétique par unité de masse est approché par~:
\[\dot{\cal M}_\Omega=\frac{\dot{\cal M}}{m_{\rm rot}}R^2\Omega_{\rm p}.\]
Le taux de perte/gain de moment cinétique {\tt mw\_dot} est fixé à 0
 en deça de la limite fixée.

\medskip
\noi {\bf Appel~:} cette routine utilise les mêmes arguments que sa routine
générique {\tt pertw}, \cfparagr{sec:pertw}.
 
\section{Routine {\tt pertw\_sch}}\index{pertw\_sch.f}\label{sec:pertwsch}
Avec cette routine PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol},
de type {\tt pertw}, le taux {\tt p\_pertw} de perte de moment cinétique
indiqué dans le fichier de données {\tt mon\_modele.don}, \cfparagr{sec:fdon},
est utilisé comme un paramètre fixant l'efficacité d'une perte de moment
cinétique proportionnelle à $\Omega^3$ (Schumanish), \cfparagr{sec:pertecin}.

\medskip
\noi{\bf Description}~:\\
 La variation temporelle
de moment cinétique  par unité de masse est modélisée par~:
\[\dot{\cal M}_\Omega=aR^2\Omega_{\rm s}^3,\quad |a|\sim 1.10^{-9}{\rm s}. \]
Le taux de perte de moment cinétique {\tt mw\_dot} est fixé à 0
 en deça de la limite fixée.

\medskip
\noi {\bf Appel~:} cette routine utilise les mêmes arguments que sa routine
générique {\tt pertw}, \cfparagr{sec:pertw}.

\section{\ Routine {\tt planetoides}}\index{planetoides.f}\label{sec:rplanet}
\cesam2k offre la possibilité de tenir
compte des variations de composition chimique dues à des chutes de planétoïdes
dans la \ZC\ externe, \cfparagr{sec:planet}. Cette possibilité est
gérée par la routine PUBLIC {\tt planétoides} du module {\tt mod\_nuc},
\cfparagr{sec:amnuc}.

\medskip 
\noi{\bf Description}~:
\begin{itemize}
 \item Lors d'un appel d'initialisation, depuis la routine {\tt evol},
 on effectue une recherche dans l'environnement du fichier où sont
 indiquées les fractions de masse des planétoïdes, \cfparagr{sec:cplanet}. 
 Si un tel fichier est trouvé, les fractions de masse
 sont normalisées, puis réparties entre les différents isotopes du réseau
 nucléaire, et enfin transformées en fraction par mole;
 la variable logique {\tt l\_planet} est déclarée {\tt .TRUE.}
 \item Lors des appels
 suivants, une correction aux taux de réactions nucléaires est effectuée
 lorsque l'âge du modèle est dans l'intervalle de temps des chutes.
 \cfparagr{sec:planet}.
\end{itemize} 
 
\medskip
\noi {\bf Appel~:} {\tt planetoides} est appelée par~:
\begin{itemize}
 \item {\tt evol}, \cfparagr{sec:evol}, pour initialisation.
 \item {\tt rk\_imps}, \cfparagr{sec:rkimps} ou
 {\tt eq\_dif\_chim}, \cfparagr{sec:diffus}, à la suite d'un appel à la routine
 {\tt nuc}, \cfparagr{sec:nuc}.
\end{itemize}
Les arguments sont optionnels.
\begin{tt}\begin{verbatim}
	SUBROUTINE planetoides(xchim,dxchim,jac,m_planet,mw_planet)
\end{verbatim}\end{tt}
\begin{itemize}
 \item Entrées~: 
 \begin{itemize}
  \item  {\tt xchim}~: Composition chi\-mi\-que par mole. 
 \end{itemize}
 \item Entrées/Sorties~:
 \begin{itemize}
  \item {\tt dxchim, jac}~: Taux de réactions nucléaires et jacobien.
  \item {\tt m\_planet,mw\_planet}~: taux d'accroissement de masse et de moment
  cinétique.
 \end{itemize}
\end{itemize}

\section{Routine {\tt poisson\_initial}}\index{poisson\_initial.f}
\label{sec:poissini}
Cette routine PRIVATE du module {\tt mod\_cesam}, permet l'initialisation du
potentiel gravitationnel $\Psi$ dans le cadre du formalisme de \citet{mz04} de
la diffusion du moment cinétique. L'intégration de léquation différentielle
utilise la méthode des éléments finis Galerkin.

\medskip 
\noi{\bf Description}~:
\begin{itemize}
 \item initialisations.
 \item formation des produits scalaires avec appel à {\tt eq\_diff\_poisson.f},
 \cfparagr{sec:eqdiffpoisson}.
 \item résolution du sytème linéaire.
 \item test de précision et gestion des itérations.
 \item initialisation des coefficients du potentiel gravitationnel.
 \end{itemize} 
 
\medskip
\noi {\bf Appel~:}  {\tt poisson\_initial} est appelée de la routine {\tt
cesam.f}, \cfparagr{sec:cesam}, lors des initialisations.
 
\section{Routine {\tt pp1}}\index{pp1.f}\label{sec:pp1}
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc}, catégorie {\embf test},
 \cfparagr{sec:nuc}. 
Selon les "{\em Computational procedures for GONG solar model project}"
\citep{c88},
seul l'isotope \H1 est explicitement pris en compte. L'abondance initiale
d'hydrogène, le taux de la réaction et l'énergétique
sont calculés {\em in situ} par une approximation analytique du cycle PP.

Toutefois la structure
générale des routines de type {\tt nuc} est respectée. 

\medskip
\noi {\bf Appel~:} {\tt pp1} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.

\section{Routine {\tt pp3}}\index{pp3.f}\label{sec:pp3}
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc},
 catégorie {\embf test}, \cfparagr{sec:nuc}. Les isotopes \H1, \He3, \He4,
et l'élément fictif Ex, sont explicitement pris en compte; 
\H2, \Li7, \Be7 sont supposés à l'équilibre, \cfparagr{sec:elequi}.
Cette routine, qui ne concerne que le cycle PP,
a pour vocation de servir pour les tests de mise au point.

\medskip
\noi {\bf Appel~:} {\tt pp3} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.
 
\section{Routine {\tt ppcno10}}\index{ppcno10.f}\label{sec:ppcno10}
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc}, catégorie {\embf pré-3$\alpha$},
  \cfparagr{sec:nuc}.
  
Les isotopes \H1, \He3, \He4, \Li7, \C{12}, \C{13}, \N{14}, \N{15}, \O{16}, \O{17}
et l'élément fictif Ex, sont explicitement pris en compte; 
\H2, \Be7
sont supposés à l'équilibre, \cfparagr{sec:elequi}.
Cette routine a été construite pour décrire la diffusion microscopique du
lithium, en tenant compte de l'évolution au long de la \PMS.

\medskip
\noi {\bf Appel~:} {\tt ppcno10} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.

\section{Routine {\tt ppcno10BeBFe}}\index{ppcno10BeBFe.f}
\label{sec:ppcno10BeBFe} 
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc}, catégorie {\embf pré-3$\alpha$},
  \cfparagr{sec:nuc}.
  
Les isotopes  \H1, \He3, \He4, \Li6, \Li7, \Be9, \B{11}, \C{12},
\C{13}, \N{14},\N{15}, \O{16},\O{17}, \Fe{56}
et l'élément fictif Ex, sont explicitement pris en compte;
\H2, \Be7 sont supposés à l'équilibre, \cfparagr{sec:elequi}.
Cette routine a été construite pour décrire la diffusion microscopique des
éléments légers et du fer, en tenant compte de l'évolution au long de la \PMS.

\medskip
\noi {\bf Appel~:} {\tt ppcno10BeBFe} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.

\section{Routine {\tt ppcno10Fe}}\index{ppcno10Fe.f}
\label{sec:ppcno10Fe}
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc},
 catégorie {\embf pré-3$\alpha$}, \cfparagr{sec:nuc}.
  
Les isotopes \H1, \He3, \He4, \Li7, \C{12}, \C{13}, \N{14}, \N{15}, \O{16},
 \O{17}, \Fe{56}
et l'élément fictif Ex, sont explicitement pris en compte; 
\H2, \Be7
sont supposés à l'équilibre, \cfparagr{sec:elequi}.
Cette routine a été construite pour décrire la diffusion microscopique du
lithium et du fer.

\medskip
\noi {\bf Appel~:} {\tt ppcno10Fe} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.
 
\section{Routine {\tt ppcno10K}}\index{ppcno10K.f}\label{sec:ppcno10K}
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc},
catégorie {\embf pré-3$\alpha$}, \cfparagr{sec:nuc}.
  
Les isotopes \H1, \He3, \He4, \Li7, \C{12}, \C{13}, \N{14}, \N{15}, \O{16},
\O{17} et deux éléments fictifs ExK et Ex, sont explicitement pris en compte;
\H2, \Be7 sont supposés à l'équilibre, \cfparagr{sec:elequi}.
Les deux éléments fictifs représentent respectivement les éléments
de masse inférieure et supérieure au potassium.
Cette routine a été cons\-trui\-te pour décrire la diffusion microscopique
différentielle entre les éléments de masse supérieure ou inférieure au
potassium.

\medskip
\noi {\bf Appel~:} {\tt ppcno10K} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.
  
\section{Routine {\tt ppcno11}}\index{ppcno11.f}\label{sec:ppcno11}
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc},
 catégorie {\embf pré-3$\alpha$}, \cfparagr{sec:nuc}.
  
Les isotopes \H1, \H2, \He3, \He4, \Li7, \C{12}, \C{13}, \N{14}, \N{15}, \O{16},
\O{17} et l'élément fictif Ex, sont explicitement pris en compte; \Be7
est supposé à l'équilibre, \cfparagr{sec:elequi}.
Cette routine a été construite pour décrire la \PMS, en évitant de suivre
l'abondance du \Be7 dont l'échelle de temps d'évolution est infime.

\medskip
\noi {\bf Appel~:} {\tt ppcno11} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.

\section{Routine {\tt ppcno12}}\index{ppcno12.f}\label{sec:ppcno12}
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc},
 catégorie {\embf pré-3$\alpha$}, \cfparagr{sec:nuc}.
  
Les isotopes \H1, \H2, \He3, \He4, \Li7, \Be7, \C{12},
\C{13}, \N{14},\N{15}, \O{16},\O{17}
et l'élément fictif Ex, sont explicitement pris en compte; 
Aucun isotope n'est à l'équilibre, \cfparagr{sec:elequi}.
Cette routine a été construite pour décrire l'évolution sans élément à
l'équilibre.

\medskip
\noi {\bf Appel~:} {\tt ppcno12} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.

\section{Routine {\tt ppcno12Be}}\index{ppcno12Be.f}\label{sec:ppcno12Be}
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc},
 catégorie {\embf pré-3$\alpha$}, \cfparagr{sec:nuc}.
  
Les isotopes \H1, \H2, \He3, \He4, \Li7, \Be7, \Be9, \C{12},
\C{13}, \N{14},\N{15}, \O{16},\O{17}
et l'élément fictif Ex, sont explicitement pris en compte; 
Aucun isotope n'est à l'équilibre, \cfparagr{sec:elequi}.
Cette routine a été construite pour décrire la diffusion microscopique du
beryllium en tenant compte de l'évolution au long de la \PMS.

\medskip
\noi {\bf Appel~:} {\tt ppcno12Be} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.
  
\section{Routine {\tt ppcno12BeBFe}}\index{ppcno12BeBFe.f}
\label{sec:ppcno12BeBFe}
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc}, catégorie {\embf pré-3$\alpha$},
  \cfparagr{sec:nuc}. 
Les isotopes  \H1, \H2, \He3, \He4, \Li6, \Li7, \Be7, \Be9, \B{11}, \C{12},
\C{13}, \N{14},\N{15}, \O{16},\O{17}, \Fe{56}
et l'élément fictif Ex, sont explicitement pris en compte. 
Aucun isotope n'est à l'équilibre, \cfparagr{sec:elequi}.
Cette routine a été construite pour décrire la diffusion microscopique des
éléments légers, et du fer, en tenant compte de l'évolution au long de la \PMS.

\medskip
\noi {\bf Appel~:} {\tt ppcno12BeBFe} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.

\section{Routine {\tt ppcno12Li}}\index{ppcno12Li.f}\label{sec:ppcno12Li}
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc}, catégorie {\embf pré-3$\alpha$},
 \cfparagr{sec:nuc}.
  
Les isotopes \H1, \H2, \He3, \He4, \Li6, \Li7, \Be7, \C{12}, \C{13}, \N{14},
\N{15}, \O{16},\O{17} et l'élément fictif Ex, sont explicitement pris en compte.
Cette routine a été construite pour décrire la diffusion microscopique des
éléments légers, plus particulièrement du
lithium, en tenant compte de l'évolution au long de la \PMS.
Aucun isotope n'est à l'équilibre, \cfparagr{sec:elequi}.

\medskip
\noi {\bf Appel~:} {\tt ppcno12Li} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.

\section{Routine {\tt ppcno3a12Ne}}\index{ppcno3a12Ne.f}
\label{sec:ppcno3a12Ne} 
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc}, catégorie {\embf 3$\alpha$},
  \cfparagr{sec:nuc}.  
Les isotopes \H1, \He3, \He4, \C{12}, \C{13}, \N{14}, \N{15},\O{16},\O{17},
\O{18}, \Ne{20}, \Ne{22} 
et l'élément fictif Ex, sont explicitement pris en compte; 
\H2, \Li7, \Be7
sont supposés à l'équilibre, \cfparagr{sec:elequi}.

\medskip
\noi {\bf Appel~:} {\tt ppcno3a12Ne} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.

\section{Routine {\tt ppcno3a9}}\index{ppcno3a9.f}
\label{sec:ppcno3a9} 
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc}, catégorie {\embf 3$\alpha$},
  \cfparagr{sec:nuc}.  
Les isotopes \H1, \He3, \He4, \C{12}, \C{13}, \N{14}, \N{15},\O{16},\O{17}
et l'élément fictif Ex, sont explicitement pris en compte; 
\H2, \Li7, \Be7
sont supposés à l'équilibre, \cfparagr{sec:elequi}.

\medskip
\noi {\bf Appel~:} {\tt ppcno3a9} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.

\section{Routine {\tt ppcno3aco}}\index{ppcno3aco.f}\label{sec:ppcno3aco}
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc}, catégorie {\embf co},
 \cfparagr{sec:nuc}. 
Les isotopes \H1, \He3, \He4, \C{12}, \C{13}, \N{14}, \N{15},\O{16},\O{17},
\Ne{20}, \Na{23}, \Mg{24}, \Al{27}, \Si{28}, \P{31}, \So{32},
et l'élément fictif Ex, sont explicitement pris en compte; 
\H2, \Li7, \Be7
sont supposés à l'équilibre, \cfparagr{sec:elequi}.
{\tt ppcno3aco} permet d'atteindre la combustion de l'oxygène.

\medskip
\noi {\bf Appel~:} {\tt ppcno3aco} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.
  
\section{Routine {\tt ppcno9}}\index{ppcno9.f}\label{sec:ppcno9} 
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc}, catégorie {\embf pré-3$\alpha$}
 \cfparagr{sec:nuc}.
Les isotopes \H1, \He3, \He4, \C{12}, \C{13}, \N{14}, \N{15},\O{16},\O{17}
et l'élément fictif Ex, sont explicitement pris en compte; 
\H2, \Li7, \Be7
sont supposés à l'équilibre, \cfparagr{sec:elequi}.

\medskip
\noi {\bf Appel~:} {\tt ppcno9} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.

\section{Routine {\tt ppcno9Fe}}\index{ppcno9Fe.f}\label{sec:ppcno9Fe}
Cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est de type {\tt nuc},
 catégorie {\embf pré-3$\alpha$},  \cfparagr{sec:nuc}. 
Les isotopes \H1, \He3, \He4, \C{12}, \C{13}, \N{14}, \N{15},\O{16},\O{17},
Fe{56}
et l'élément fictif Ex, sont explicitement pris en compte; 
\H2, \Li7, \Be7
sont supposés à l'équilibre, \cfparagr{sec:elequi}.
Cette routine a été construite pour décrire la diffusion microscopique du fer.

\medskip
\noi {\bf Appel~:} {\tt ppcno9Fe} appelée par la routine générique
de réactions nucléaires {\tt nuc} a la même liste d'appel.

\section{Routine {\tt print\_ctes}}\index{print\_ctes.f}\label{sec:printctes}
Cette routine PUBLIC du module {\tt mod\_donnees}, \cfparagr{sec:moddon},
a pour fonction la transcription sur l'unité d'écriture des valeurs
des principales constantes physiques utilisées.

\medskip
\noi {\bf Appel~:} {\tt print\_ctes} est appelée de {\tt cesam},
\cfparagr{sec:cesam}
\begin{tt}
\begin{verbatim}
	SUBROUTINE print_ctes(i)
\end{verbatim}
\end{tt}

\begin{itemize}
 \item Entrée
 \begin{itemize}
  \item   {\tt i}~: indice de l'unité FORTRAN sur laquelle l'écriture est
  effectuée.
\end{itemize} 
\end{itemize}

\section{\ Routine {\tt read\_ascii}}\index{read\_ascii.f}\label{sec:readascii}
Cette routine PUBLIC du module {\tt mod\_exploit}, \cfparagr{sec:amexp},
a pour fonction la lecture des fichiers ASCII d'oscillation, \cfparagr{sec:osc}.

 \medskip
\noi{\bf Description}
\begin{itemize}
 \item Ouverture du fichier de type {\tt mon\_modele.osc}, lecture de l'en-tête
 et des cons\-tan\-tes.
 \item Lecture des variables.  
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt read\_osc} est appelée par divers programmes
de dessin, en particulier {\tt des\_osc}, {\tt des\_abon},
{\tt des\_diff\_osc} ou encore {\tt lit\_osc}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE read_ascii(nom_fich,itot,nglob,nvar,abid)
\end{verbatim}
\end{tt}

\begin{itemize}
 \item Entrée
 \begin{itemize}
  \item {\tt nom\_fich}~: nom du fichier de type {\tt mon\_modele.osc}
  (sans l'extension {\tt .osc}).
 \end{itemize} 
 \item Sorties~:
 \begin{itemize}
  \item  {\tt itot, nglob, nvar, abid}~: nombre de points, de
  ''constantes global'', de variables du tableau {\tt var}, sans
  les éléments chi\-mi\-ques,
 \end{itemize}
 \end{itemize}
La description des quantités extraites de ces fichiers est donnée au
\paragr{sec:fichosc}. 

\begin{figure}%[ht]
\includegraphics[width=0.9\textwidth]{Orga-resout.eps}
\caption{Organigramme de la routine de la gestion de la résolution des
équations de la structure interne {\tt resout}.
}\label{fig:resout}
\end{figure}

\section{\ Routine {\tt resout}}\index{resout.f}\label{sec:resout}
La fonction de la routine PRIVATE {\tt resout} du module {\tt mod\_static},
\cfparagr{sec:amqst}, est la gestion de la résolution des équations de
l'évolution stellaire pour~:
\begin{enumerate}
 \item Le modèle en cours d'évolution.
 \item Le modèle de \ZAMS\ homogène.
 \item Le modèle initial de \PMS\ homogène.
\end{enumerate}
\Lfig{fig:resout}, présente un organigramme de la routine {\tt resout}.

\medskip
\noi{\bf Description}~:
L'architecture des algorithmes de résolution des
équations de la structure interne est assez similaire dans les trois
phases de l'évolution évoquées çi-avant. La structure de
chacune d'entre elles est celle d'une itération Newton-Raphson.
\begin{itemize}
 \item Initialisation de divers paramètres généraux.
 \item Poursuite d'une évolution~:
 \begin{itemize}
  \item Ajustement de paramètres s'il s'agit du calcul du modèle ultime.
  \item Appel à {\tt update}, \cfparagr{sec:update} pour mise en mémoire
  du modèle au pas temporel précédent.
  \item Initialisation de compteurs et début de l'itération Newton-Raphson.
  \item Calcul de la perte de masse.
  \item Estimation du nombre de couches nécessaire pour assurer à la constante
  de répartition la valeur définie par la précision requise,
  \cfparagr{sec:modifc}.
  \item Appel à {\tt lim\_zc}, \cfparagr{sec:limzc}, pour un réaménagement
  éventuel de la discrétisation spatiale, la détection des limites \ZRZCs\ et
  l'ajustement des facteurs de répartition, \cfparagr{sec:nlimzc}.
  \item Evolution de la composition chi\-mi\-que, éventuellement du moment
  cinétique, par appel à {\tt evol}, \cfparagr{sec:evol}.
  \item Formation et résolution des équations de l'équilibre quasi-statique par
  appel à {\tt coll\_qs}, \cfparagr{sec:collqs}. 
  \item Suivant l'estimation de la précision~:
  \begin{itemize}
   \item Ajustement du pas temporel pour satisfaire les conditions d'arrêt
   particulières, réinitialisation et reprise des itérations Newton-Raphson.
   \item Poursuite des itérations Newton-Raphson.
   \item Réinitialisation avec diminution du pas temporel et reprise.
   \item Gestion éventuelle de la rotation solide, estimation de l'énergie
   graviphique, tabulation de diverses quantités,  retour vers {\tt cesam},
    \cfparagr{sec:cesam}.
   \item Appel à {\tt sortie}, \cfparagr{sec:sortie} pour arrêt du calcul.
  \end{itemize}
 \end{itemize}
 
 \item Modèle initial de \ZAMS\ homogène, ou de \PMS\ homogène~:
 \begin{itemize}
  \item Estimation du nombre de couches nécessaires pour assurer à la constante
  de répartition la valeur définie par la précision requise,
  \cfparagr{sec:modifc}.
   \item Appel à {\tt lim\_zc}, \cfparagr{sec:limzc}, pour un réaménagement
  éventuel de la discrétisation spatiale, la détection des limites \ZRZCs\ et
  l'ajustement des facteurs de répartition, \cfparagr{sec:nlimzc}. 
  \item Initialisation de compteurs et début de l'itération Newton-Raphson.  
  \item Formation et résolution des équations de l'équilibre quasi-statique par
  appel à {\tt coll\_qs}, \cfparagr{sec:collqs}. 
  \item Suivant l'estimation de la précision~:
  \begin{itemize}
   \item Poursuite des itérations Newton-Raphson, précédée par une
   réactualisation de la localisation des limites \ZRZCs\  par appel à
   {\tt lim\_zc}.
   \item Gestion éventuelle de la rotation solide, estimation de l'énergie
   graviphique, tabulation de diverses quantités,  retour vers {\tt cesam},
    \cfparagr{sec:cesam}.
   \item Appel à {\tt sortie}, \cfparagr{sec:sortie}, pour arrêt du calcul.
  \end{itemize}
 \end{itemize}
\end{itemize}
 
\medskip
\noi{\bf Appel}~: à diverses reprises {\tt resout} est appelée par
{\tt cesam}, \cfparagr{sec:cesam}.
\begin{tt}\begin{verbatim}
	SUBROUTINE resout(un23,dt,dts)
\end{verbatim}\end{tt}
\begin{itemize}
 \item Entrées~: 
 \begin{itemize}
  \item   {\tt un23,dt,}~: Paramètre du type de modèle, pas temporel. 
 \end{itemize}
 
 \item Sorties~:
 \begin{itemize}
  \item {\tt dts}~: Estimation de la valeur du pas temporel suivant.
 \end{itemize}  
\end{itemize} 

\section{\ Routine {\tt resout\_chim}}\index{resout\_chim.f}
\label{sec:resoutchim}
Cette routine PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol}, a pour
fonction la résolution par éléments finis du système implicite des équations de
la diffusion des espèces chi\-mi\-ques, \cfparagr{sec:eqd}.
Les produits scalaires sont approchés par une
intégration numérique de type Gauss, suivant un algorithme inspiré
de l'algorithme 5.22 p.203 de Schumaker \citet[alg. 5.22][p.203]{sk81}. De structure identique
à {\tt resout\_rota}, \cfparagr{sec:resoutrota}, ces deux routines pourraient
être rassemblées en une seule, elles sont distinctes pour faciliter la
lisibilité. 

\medskip
\noi{\bf Description}~:
L'architecture globale de la routine est celle d'une itération Newton-Raphson.
Les coefficients provisoires des B-splines, \ie les inconnues,
 sont initialisés dans la routine d'appel {\tt diffus}, \cfparagr{sec:diffus}.
\begin{itemize}
 \item Initialisations au premier appel.
 \item Définition du rang du système, du nombre de lignes, des indices de
 première colonne, initialisation de compteurs.
 \item Itérations Newton-Raphson~:
 \begin{itemize}
  \item Pour chaque intervalle du vecteur nodal, détermination des abscisses de
  Gauss, formation des coefficients des équations par appel à
  {\tt eq\_diff\_chim}, \cfparagr{sec:eqdiffchim}.
  \item Pour chaque B-spline non identiquement nulle sur l'intervalle,
  évaluation du second membre du système linéaire et de sa contribution au
  jacobien.
  \item Résolution du système linéaire bande, correction des coefficients
  provisoires des B-splines, Estimation de la précision.
 \end{itemize} 
 \item Suivant la précision obtenue, poursuite des itérations Newton-Raphson,
 retour vers la routine appelante, réinitialisation si la précision requise n'a
 pas été atteinte après un nombre fixé d'itérations.
\end{itemize}

\medskip
\noi{\bf Appel}~: {\tt resout\_chim} est appelée par 
{\tt diffus}, \cfparagr{sec:diffus}.
\begin{tt}\begin{verbatim}
	SUBROUTINE resout_chim(dt,ok)
\end{verbatim}\end{tt}
\begin{itemize}
 \item Entrées~: 
 \begin{itemize}
  \item   {\tt dt}~: Pas temporel.
 \end{itemize}
 
 \item Sorties~:
 \begin{itemize}
  \item   {\tt ok=.TRUE.}~: La convergence a été obtenue.
 \end{itemize}  
\end{itemize} 

\section{\ Routine {\tt resout\_rota}}\index{resout\_rota.f}
\label{sec:resoutrota}
 Cette routine générique PRIVATE du module {\tt mod\_evol},
 \cfparagr{sec:amevol}, a pour fonction le choix entre les deux formalismes de
 diffusion du moment cinétique implanté dans \cesam2k.

 \medskip
\noi{\bf Description}~: suivant la valeur de la variable {\tt Krot},
il y a choix
entre le formalisme de \citet{tzmm97} ou celui de \citet{mz04}.

\medskip
\noi{\bf Appel}~: {\tt resout\_rota} est appelée par 
{\tt diffus}, \cfparagr{sec:diffus}.
\begin{tt}\begin{verbatim}
	SUBROUTINE resout_rota(dt,ok)
\end{verbatim}\end{tt}
\begin{itemize}
 \item Entrées~: 
 \begin{itemize}
  \item   {\tt dt}~: Pas temporel.
 \end{itemize}
 
 \item Sorties~:
 \begin{itemize}
  \item   {\tt ok=.TRUE.}~: La convergence a été obtenue.
 \end{itemize}  
\end{itemize} 

\section{\ Routine {\tt resout\_rota3/4}}\index{resout\_rota3.f}
\label{sec:resoutrota34}\index{resout\_rota4.f}
Ces routine PRIVATE du module {\tt mod\_evol}, \cfparagr{sec:amevol}, ont pour
fonctions la résolution par éléments finis du système implicite des 
équations de
la diffusion du moment cinétique suivant les formulations de
 \citet{tzmm97,mz04}, \cfparagr{sec:difcin}.
 Les produits scalaires sont approchés par une
intégration numérique de type Gauss, suivant un algorithme inspiré
de \citet[Alg. 5.22][p. 203]{sk81}. De structure identique
à {\tt resout\_chim}, \cfparagr{sec:resoutchim}, ces routines pourraient
être rassemblées en une seule, elles sont distinctes pour faciliter leur
lisibilité. 

\medskip
\noi{\bf Description}~:
L'architecture globale de la routine est celle d'une itération Newton-Raphson.
Les coefficients provisoires des B-splines, \ie les inconnues,
 sont initialisés dans la routine d'appel {\tt diffus}, \cfparagr{sec:diffus}.
\begin{itemize}
 \item Initialisations au premier appel.
 \item Définition du rang du système, du nombre de lignes, des indices de
 première colonne, initialisation de compteurs.
 \item Itérations Newton-Raphson~:
 \begin{itemize}
  \item Pour chaque intervalle du vecteur nodal, détermination des abscisses de
  Gauss, formation des coefficients des équations par appel à
  {\tt eq\_diff\_rota}, \cfparagr{sec:eqdiffrota}.
  \item Pour chaque B-spline non identiquement nulle sur l'intervalle,
  évaluation du second membre du système linéaire et de sa contribution au
  jacobien.
  \item Pour le centre, formation des coefficients des parties intégrées
  par appel à {\tt eq\_diff\_rota3/4}, \cfparagr{sec:eqdiffrota}, et calcul des
  contributions au second membre et au jacobien du système linéaire.
  \item Pour la surface, formation des coefficients des parties intégrées
  par appel à {\tt eq\_diff\_rota3/4}, \cfparagr{sec:eqdiffrota}, et calcul des
  contributions au second membre et au jacobien du système linéaire.  
  \item Résolution du système linéaire bande, correction des coefficients
  provisoires des B-splines, estimation de la précision.
 \end{itemize} 
 \item Suivant la précision obtenue, poursuite des itérations Newton-Raphson,
 retour vers la routine appelante, réinitialisation si la précision requise n'a
 pas été atteinte après un nombre fixé d'itérations.
\end{itemize}

\medskip
\noi{\bf Appel}~: {\tt resout\_rota3/4} sont appelées par {\tt resout\_rota}
et ont les mêmes arguments.

\section{\ Routine {\tt rk\_imps}}\index{rk\_imps.f}\label{sec:rkimps}
Cette routine PRIVATE du module {\tt mod\_evol},
\cfparagr{sec:amevol}, a pour fonction l'intégration des équations
de l'évolution des espèces chi\-mi\-ques $e.g.$~\eq{eq:ppcno}
en l'absence de diffusion.
Les échelles de temps d'évolution des divers isotopes diffèrent par plusieurs
dizaines de magnitudes. A titre d'exemple, dans le soleil, l'échelle
de temps d'évolution de \H2 est de quelques minutes, alors
que celle de \H1 est de l'ordre de la centaine de million d'années.
La disparité de ces échelles de temps est à l'origine
de difficultés numériques~: si on s'impose de suivre la plus courte
échelle de temps, le temps de calcul est inimaginable,
si on s'impose de suivre la plus grande échelle de temps, les erreurs numériques
engendrées sur les espèces chi\-mi\-ques avec courte
échelle de temps font "exploser" le calcul. 

\noi Pour ce type de problème numérique, qualifié de "raide",
ou encore de "mal posé",
il existe des algorithmes spécifiques qui, {\it en gros}, permettent
de suivre l'échelle de temps que l'on désire, \eg\ celle de \H1
pour le soleil, sans que, pour autant, les erreurs numériques
engendrées sur les espèces
chi\-mi\-ques à courte échelle de temps ne perturbent la solution
de façon catastrophique. Ces algorithmes sont implicites, ils nécessitent
le calcul d'un Jacobien; en cas de non linéarité, la solution est obtenue
par approximations successives, le plus souvent par la méthode
de Newton-Raphson, qu'il convient parfois d'aménager.

\noi Dans le cas de la structure interne, le mélange
convectif complique encore le problème qui, non seulement est raide, mais
est donc aussi intégral. En résumé, le problème du calcul
de l'évolution des espèces chi\-mi\-ques est un 
problème intégro-différentiel aux valeurs initiales, non linéaire,
raide.

\noi La routine {\tt rk\_imps} utilise le formalisme de Runge-Kutta
implicite avec le schéma Lobatto IIIC, \cf \citet{hw91},
ainsi qu'il a été décrit au \paragr{sec:sirk},
noté dans la suite IRK Lobatto IIIC. L'ordre d'intégration est
limité au troisième ordre. L'utilisation d'un ordre supérieur
nécessiterait
l'interpolation de la température, de la densité et de la
composition chi\-mi\-que en tous les points du modèle entre
différents pas temporel, interpolations dans lesquelles
serait perdu le gain en précision que l'on peut attendre de
l'utilisation d'un schéma d'ordre élevé.
Cette routine originale est l'une des plus "techniques"
et élégantes de \cesam2k.

\medskip
\noi{\bf Choix du pas temporel}~:\\
La valeur du pas temporel à utiliser dépend de la précision requise.
A l'issue de chaque intégration, la précision obtenue est
estimée. Dans le programme appelant {\tt evol}, \cfparagr{sec:evol},
le pas temporel est alors diminué \respt{augmenté} si la précision obtenue
est inférieure \respt{supérieure} à ce qui est souhaité.
La précision d'une intégration peut être estimée
en l'effectuant avec des algorithmes différents, ou
des pas temporels différents, ce qui nécessite de refaire
plusieurs fois le calcul. Pour limiter l'effort de calcul,
avec {\tt rk\_imps} on se contente de contr\^oler le pas
temporel en limitant les variations de certains isotopes
au cours d'un pas temporel. Cette méthode, quoique très répandue,
n'est pas correcte car une grande \respt{petite} variation d'une abondance
ne signifie pas, {\embf nécessairement},
 que l'intégration est imprécise \respt{précise}.
   
\medskip
\noi{\bf Description}~:\index{rk\_imps.f}\index{vent.f}
\begin{itemize}
\item  Initialisations des matrices de IRK Lobatto IIIC
suivant l'ordre de précision, {\tt ordre}, défini dans la
routine {\tt cesam}, \cfparagr{sec:cesam}, des contraintes du
schéma de Newton-Raphson et de l'ordre de grandeur de chaque
abondance utilisée pour estimer la précision relative
de l'intégration et de la convergence.
\item Pour chaque temps intermédiaire, appel à la routine de
 réactions thermonucléaires pour le calcul des $\Psi_i$, éventuellement
 appel à la routine {\tt vent}, \cfparagr{sec:vent},
  pour tenir compte de la perte ou du gain
 de masse, calcul de la contribution à la ligne correspondante
 du jacobien, détermination de
 la contribution à l'intégrale de Gauss dans les \ZCs.
\item  Formation de la ligne correspondante de~\eq{eq:irkm1}.
\item  Solution du sytème linéaire donnant les corrections
du processus itératif.
\item  Estimation de la précision et des nouvelles abondances, et
poursuite, si besoin, du processus itératif.
\end{itemize}

\noi{\bf Arguments de {\tt rk\_imps}}
\begin{tt}\begin{verbatim}
  SUBROUTINE rk_imps(t_t,ro_t,compx,t,ro,compy,dt,esti,ok,nuc,kk,z_vent,dm)
\end{verbatim}\end{tt}
\begin{itemize}  
 \item Entrées~:
 \begin{itemize}
  \item {\tt t\_t, ro\_t, t, ro}~: tables des températures,
  densité aux temps $t$ et $t+dt$;
  \item {\tt dt, kk, dm, compx, z\_vent}~: pas temporel, nombre de
  couches à mélanger,
  tables des intervalles de masse et de la composition chi\-mi\-que au temps $t$,
  variable logique indiquant que l'on doit corriger les taux de réactions
  nucléaires, pour tenir compte d'un vent de composition chi\-mi\-que différente
  de celle des couches extrernes \cfparagr{sec:rvent}.
 \end{itemize}
 \item Entrées/Sorties~:
 \begin{itemize}
  \item {\tt compy}~: table des la composition chi\-mi\-que au temps $t+dt$.
  \end{itemize}
 \item Sorties~:
 \begin{itemize}
  \item {\tt ok=.TRUE.}~: la précision requise est atteinte.
 \end{itemize}
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt rk\_imps} est appelée par {\tt evol}.

\section{\ Routines {\tt roger00, roger02, roger05, roger10a}}\label{sec:roger}
\index{roger00.f}\index{roger02.f}\index{roger05.f}\index{roger10a.f}
Ces routines PRIVATE du module {\tt mod\_atm}, \cfparagr{sec:amatm}, constituent
des lois $T(\tau]$ dérivées par R.Cayrel du programme ATLAS12 de Kurucz. Elles
diffèrent entre elles par la métallicité de la mixture de type {\embf solaire}
utilisée~:
\begin{itemize}  
 \item {\tt roger00}~: [Fe/H]=0.0.
 \item {\tt roger02}~: [Fe/H]=-0.2.
 \item {\tt roger05}~: [Fe/H]=-0.5.
 \item {\tt roger10a}~: [Fe/H]=-1.0, enhanced.
\end{itemize}

\medskip
\noi{\bf Description}~: D'origine externe, ces routines ne sont pas décrites. 

\medskip
\noi {\bf Appel~:} Ces routines appelées par la routine
générique {\tt tdetau}, \cfparagr{sec:tdetau}, utilisent les mêmes arguments.
 
\section{\ Routine {\tt rq\_reac}}\index{rq\_reac.f}\label{sec:rqreac}
La fonction de cette routine PRIVATE du module {\tt mod\_nuc},
\cfparagr{sec:amnuc}, est la gestion du calcul, en
fonction de la température, de la densité et des abondances,
des taux des réactions nucléaires utilisées et des
énergies libérées, ainsi que de leurs dérivées  par rapport à la température,
 à la densité et aux abondances. Suivant la valeur de la variable logique
{\tt mitler=.FALSE.} ou {\tt  mitler=.TRUE.} de la NAMELIST
{\tt NLCHIM} du fichier de données
{\tt mon\_modele.don}, \cfparagr{sec:fdon}, l'écrantage est calculé soit par
la théorie standard de l'écrantage faible, soit  par celle, plus universelle,
 de l'écrantage de \citet{mi77} qui recouvre
 l'écrantage faible et intermédiaire\footnote{Bien que prévu,
 l'écrantage fort n'est pas opérant dans la version actuelle.}.
Sui\-vant les réactions utilisées, \cfparagr{sec:nuc}, 
 la routine utilise les tabulations
 des taux de réactions nucléaires gérées par la routine
 {\tt tabul\_nuc}, \cfparagr{sec:tabulnuc}. 

\medskip
\noi{\bf Description}~:
\begin{itemize}
\item  Initialisation~: lecture du fichier de réactions nucléaires,
écritures et initialisations diverses.
\item  Calcul du nombre d'électrons libres, du facteur d'écran et des
dérivées.
\item  Calcul des taux et des énergies libérées.
C'est dans la tabulation des réactions nucléaires, \cfparagr{sec:tauxnuc},
que sont introduits
les {\embf dénominateurs 2! ou 3!} et les pertes par neutrinos.
\end{itemize}

\medskip
\noi{\bf  Appel~:}
\begin{tt}
\begin{verbatim}
	SUBROUTINE rq_reac(comp,t,ro,r,drt,dro,drx,q,dqt,dqo,dqx,mue,dmuex)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrées~:
 \begin{itemize}
  \item   {\tt comp, t, ro}~: Composition chi\-mi\-que par volume,
  température, densité.
 \end{itemize}
 \item Sorties~:
 \begin{itemize}
  \item   {\tt r, drt, dro, drx, q, dqt, dqo, dqx, mue, dmuex}~:
  Taux, énergie des réactions et dérivées
  par rapport à la température, densité, composition
  chi\-mi\-que, nombre d'électrons $e^-$ par volume, et dérivées
  par rapport à la composition chi\-mi\-que.
 \end{itemize} 
\end{itemize}

\section{\ Routine {\tt saha}}\index{saha.f}\label{sec:saha}
Cette routine PUBLIC du module {\tt mod\_etat}, \cfparagr{sec:amet},
 résout l'équation de Saha \citep[][eq. 5.30]{cg68} 
pour la détermination des taux d'ionisation des divers éléments chi\-mi\-ques. On
limite les fonctions de partition aux poids statistiques
des niveaux fondamentaux. La formulation est décrite au \paragr{sec:fsaha}.
Les équations, écrites sous la forme:
\[\rho N_0\sum_i \bar{z_i}(n_e) x_i - n_e =0\]
sont résolues par itération Newton-Raphson.

\medskip
\noi{\bf Description}~:\\
\begin{itemize}
 \item  Initialisations au premier appel~:
 \begin{itemize} 
  \item On admet que les taux
  d'ionisation sont identiques pour tous les isotopes d'une même espèce
  chi\-mi\-que. Les différents isotopes d'une même espèce chi\-mi\-que sont regroupés
  dans un seul élément auquel l'abondance totale de l'espèce est affectée.
  \cesam2k signale si un des éléments utilisés est inconnu,
  le déroulement du calcul est alors arrêté.
  \item Initialisation des potentiels d'ionisation et des poids statistiques 
  pour les espèces identifiées par leur charge.
  La fonction de Fermi-Dirac $F_{1/2}$ est ensuite tabulée en fonction
  du paramètre de dégénérescence.
 \end{itemize} 
 \item  Pour les appels suivants~:
 \begin{itemize}  
  \item Initialisation des abondances de chaque espèce et du nombre d'électrons
  libres.
  \item  Calcul du facteur de dégénérescence et résolution
  des équations de Saha pour chaque ion, redétermination
  du nombre d'électrons libres.
  Itération Newton-Raphson sur le nombre d'électrons libres.
  \item  Détermination de la charge moyenne de chaque ion.
  \item  Après convergence~: Restitution des taux d'ionisation et
  de la charge moyenne pour chaque isotope.
 \end{itemize}
\end{itemize}

\medskip
\noi {\bf Appel~:} {\tt saha} est appelée par {\tt cesam, coeff\_rota,
diffm\_br}.\\
\begin{tt}
\begin{verbatim}
	SUBROUTINE saha(xchim,t,ro,ioni,z_bar,nel,eta)	
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrées~:
 \begin{itemize}
  \item   {\tt xchim, t, ro}~: composition chi\-mi\-que par volume,
  température, densité;
 \end{itemize}
 \item Sorties~:
 \begin{itemize}
  \item   {\tt ioni, z\_bar, nel, eta}~: taux d'ionisation et charge moyenne
  de chaque ion, nombre d'électrons libres, facteur de dégénérescence. 
 \end{itemize}
\end{itemize}

\section{\ Routine {\tt sortie}}\index{sortie.f}\label{sec:sortie}
La routine PUBLIC {\tt sortie} du module {\tt mod\_variables},
\cfparagr{sec:amvar}, est sans argument. Elle est appelée lorsque
\cesam2k détecte une anomalie fatale au bon déroulement du calcul
et à laquelle il ne peut remédier, par
exemple une sortie de table. {\tt sortie} ferme
les unités d'écriture et de dessin avant l'arrêt des calculs. 

\section{\ Routine générique {\tt static}}\index{static.f}\label{sec:static}
Cette routine PRIVATE du module {\tt mod\_static}, \cfparagr{sec:amqst},
constitue la {\embf routine générique}
du calcul des coefficients des équations de l'équilibre quasi-statique dans
l'espace physique.

\medskip
\noi{\bf Description}~:\\
{\tt static} oriente le calcul des coefficients des équations
d'équilibre quasi-statique vers leurs formes lagrangienne ou
eulérienne, \cfparagr{sec:eqqst}.

\medskip
\noi{\bf Appel}~:
\begin{tt}
\begin{verbatim}
	SUBROUTINE static(fait,cx,li,y,be,ae,compt,dt,reprend,ip)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrées~:
 \begin{itemize}
  \item {\tt fait=1}~: Calcul des résidus des équations au point de
  collocation.
  \item {\tt fait=2}~: Calcul du résidu pour la condition au point limite.
  \item {\tt cx}~: Indice du point de collocation.
  \item {\tt li}~: Numéro de la limite.
  \item {\tt y}~: variables et dérivées au point de collocation ou limite.  
  \item {\tt compt}~: Compteur du nombre d'itérations Newton-Raphson globales.
  \item {\tt dt}~: Pas temporel.
  \item {\tt ip}~: Indice du facteur de répartition.  	
 \end{itemize}
 \item Sorties~: 
 \begin{itemize} 
  \item {\tt be}~: Résidus.
  \item {\tt ae}~: Eléments du jacobien.
  \item {\tt reprend=.TRUE.}~: La variation relative d'énergie graviphique
  est trop forte, le calcul devra être réinitialisé.
 \end{itemize}
\end{itemize}  
 
\section{\ Routines {\tt static\_m, static\_r}}
\index{static\_m.f}\index{static\_r.f}\label{sec:staticm}
\label{sec:staticr}\label{sec:stat}
Ces deux routines PRIVATE du module {\tt mod\_static}, \cfparagr{sec:amqst},
sont équivalentes, elles forment les coefficients des équations de l'équilibre
quasi-statique, sous leur forme lagrangienne et eulérienne respectivement,
 \cfparagr{sec:amqst}.
Pour chaque point de collocation,
les équations de la structure interne sont écrites sous la forme $f(x)=0$,
ainsi que les conditions limites. On utilise les variables retenues
pour l'intégration numérique. Ces équations ont été détaillées \paragr{sec:eqsi}.
Bien que, formellement, la variable indépendante soit la masse (lagrangien),
dans {\tt static\_m} et le rayon (eulérien) dans {\tt static\_r},
les équations sont écrites pour "l'indice réel de couche" {\tt q},
\cfparagr{sec:eqsi}.\\
\index{conditions limites}
Les singularités centrales des équations de la structure interne écrites
sous la forme \eq{eq:41} disparaissent sous la forme
\eq{eq:43} utilisée par \cesam2k. Par
ailleurs, le centre n'étant pas un point de collocation,
il n'y a pas lieu d'introduire explicitement les formes limites des
équations. Au centre, les variables ont pour valeurs limites celles,
{\embf sans singularité}, des
polynômes par morceaux qui approchent la solution,
ce qui constitue un des avantages de la méthode.\\ 
Pour les limites externes,
les fonctions qui dépendent de la physique utilisée:
$P_{\rm b}(L,R)$, ${\Pgaz}_{\rm\ b}(L,R)$, $T_{\rm b}(L,R)$ et
$M_{\rm b}(L,R)$ sont calculées, au point
$q=n$ par une des routines de physique de type {\tt lim\_atm},
\cfparagr{sec:limatm}.

\medskip
\noi{\bf Description}~:\\
Après quelques initialisations, on détermine la fonction de répartition
et ses dérivées, puis on forme les équations et leurs
dérivées par rapport à toutes les variables dépendantes.
Les équations
pour les conditions limites sont écrites à la fin de la routine.
On a conservé dans la source des
instructions permettant des vérifications, en particulier celles
des coefficients du jacobien.
\begin{itemize}
 \item Initialisations de quantités invariantes.
 \item  Pour chaque point de collocation:
 \begin{itemize}
  \item Extraction des variables physiques et vérification que 
  le rayon, la masse et la luminosité\footnote{Pour {\tt static\_m}},
  ont des valeurs positives.
  \item Extraction de la composition chi\-mi\-que locale,
  initialisation de quantités liées à la rotation,
  à la pression turbulente.
  \item Calcul par un appel à {\tt thermo}, \cfparagr{sec:thermo}, des valeurs
  locales de grandeurs
  thermodynamiques, de l'opacité, de l'énergie nucléaire, des gradients
  et de leurs dérivées, transformations de ces grandeurs des unités cgs.
  en unités locales avec des aménagements algorithmiques.
  \item Calcul de l'énergie gravifique~:
  \begin{itemize}
   \item Pour un nouveau pas temporel,
   à la première itération globale gérée par {\tt resout}, \cfparagr{sec:resout},
   \ie\ {\tt new=.TRUE.}, la valeur
   est interpolée, en masse, à partir de ses valeurs au pas temporel précédent.
   \item Pour les itérations suivantes, cette quantité
   est calculée avec l'alternative de l'approximation
   de Kippenhahn \cfparagr{sec:kipp} ou du calcul complet
   \cfparagr{sec:gravifq}.
   Au cas où, à la même abs\-cis\-se lagrangienne, un écart relatif
   trop important de pression ou de température est observé
   avec le pas temporel précédent cf, \paragr{sec:bug},
   la variable logique {\tt reprend=.TRUE.}
   et les calculs sont réinitialisés par un retour à {\tt resout}.
  \end{itemize}
  \item Après quelques dispositions algorithmiques concernant le moment
  cinétique, détermination de la fonction de répartition et des dérivées,
  puis formulation des équations et de leurs dérivées
  partielles par rapport à chacune des variables.
  \item Ensemble d'instructions permettant de tester
  numériquement l'exactitude des dérivées.
 \end{itemize}
 \item  Pour chaque point limite:
 \begin{itemize}
  \item Ecriture des conditions limites au centre \ie\ {\tt li=1, 2, 3}.
  \item Ecriture des conditions limites à l'extérieur \ie\ {\tt li=4, 5, 6}.
  Pour limiter le nombre de calculs de l'atmosphère, {\tt lim\_atm},
  \cfparagr{sec:limatm}, n'est
  appelée qu'une seule fois, les grandeurs alors calculées étant
  utilisées pour formuler les autres conditions externes. Il suffit d'enlever
  les {\tt c} de commentaires pour rendre effectifs des tests de vérification
  des dérivées.
 \end{itemize}
\end{itemize}

\medskip
\noi {\bf Appel}~: Ces routines appelées par la routine
générique {\tt static}, \cfparagr{sec:static}, utilisent les mêmes arguments.

\section{\ Routine {\tt tabul\_nuc}}\label{sec:tabulnuc}\index{tabul\_nuc.f}
La fonction de cette routine PRIVATE du module {\tt mod\_nuc},
\cfparagr{sec:amnuc}, est la gestion de la tabulation des réactions nucléaires.
 
\medskip
\noi{\bf Description}~:\\ 
\begin{itemize}
 \item Pour chaque réseau de réactions nucléaires~:
 \begin{itemize} 
  \item Initialisation du nombre de réactions, du nombre d'isotopes utilisés
  par les réactions, des indices de \He4 et de la réaction 3$\alpha$.
  \item Initialisation des indices des isotopes utilisés dans les réactions.
  \item Définition de l'ordre des réactions et du domaine de tabulation.
 \end{itemize}
 \item Sélection du type de compilation à utiliser.
 \item Appel à {\tt taux\_nuc}, \cfparagr{sec:tauxnuc}, pour le calcul des
 taux de {\embf toutes} les réactions implémentées.
 \item Extraction des taux des réactions relevant du réseau retenu et
 tabulation. 
\end{itemize}

\medskip
\noi {\bf Appel}~: cette routine d'initialisation {\tt tabul\_nuc} est appelée
par {\tt rq\_reac}, \cfparagr{sec:rqreac}, en début de calcul.
Cette routine n'a que des arguments de sortie.
\begin{tt}
\begin{verbatim}
	SUBROUTINE tabul_nuc(ar,i3al,knot_temp,m_temp,
	1 nom_reac,n_temp,q0,taux_reac,temp,ttemp)
\end{verbatim}
\end{tt}
\begin{itemize} 
 \item {\tt nom\_reac, i3al}~: Noms des réactions du réseau utilisé et
 indice de la réaction 3$\alpha$. 
 \item {\tt ar, q0, taux\_reac}~: Tabulation des masses réduites, des énergies,
 des taux de réaction.
 \item {\tt knot\_temp, m\_temp, n\_temp, temp, ttemp}~: Eléments du vecteur
 nodal de la tabulation des taux de réaction.
\end{itemize}
  
\section{\ Routine {\tt taueff}}\index{taueff.f}\label{sec:taueff}
Cette routine PRIVATE du module {\tt mod\_atm}, \cfparagr{sec:amatm},
a pour fonction la détermination de la profondeur optique $\tau_\star$
correspondant au rayon
bolométrique du modèle $R_\star$. $\tau_\star$ vérifie l'équation implicite~:
\[T_{\rm eff}={\cal T}(\tau_\star,T_{\rm eff},g).\]

\medskip
\noi{\bf Description}~:
\begin{itemize}
\item Initialisation $\tau_\star=2/3$.
\item Détermination de $\tau_\star$ par l'algorithme de Newton-Raphson
avec appel à la routine de la loi $T(\tau)$ concernée, \cfparagr{sec:tdetau}.  
\end{itemize}

\medskip
\noi {\bf Appel}~: {\tt taueff} est appelée par {\tt lim\_atm},
\cfparagr{sec:limatm}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE taueff(teff,grav,tau)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrées~:
 \begin{itemize}
  \item   {\tt teff, grav}~: température effective, gravité.
 \end{itemize}
 \item Sorties~:
 \begin{itemize}
  \item   {\tt tau}~: $\tau_\star$.  
 \end{itemize}
\end{itemize}

\section{\ Routine {\tt taux\_nuc}}\index{taux\_nuc.f}\label{sec:tauxnuc}
La fonction de cette routine PRIVATE du module {\tt mod\_nuc},
 \cfparagr{sec:amnuc}, est l'initialisation des paramètres nucléaires, le
 calcul des énergies et des taux d'un grand nombre de réactions.
Il est évidemment possible d'implémenter de nouvelles
 réactions, la procédure à suivre en est détaillée au \paragr{sec:asnu}.
 
\medskip
\noi{\bf Description}~:\\
Après une initialisation, les taux de réactions sont dérivés des formules de
diverses compilations.
C'est la nécessité du calcul des dérivées
qui a motivé la tabulation des taux de réactions nucléaires
plutôt que l'emploi direct des formules.
\begin{itemize}
 \item Au premier appel~:
 \begin{itemize}
  \item Initialisations diverses.
  \item Initialisation des excès de masse.
  \item Initialisation des masses atomiques.
  \item Initialisation des charges des isotopes. 
  \item Initialisation des noms des isotopes. 
  \item Initialisation des noms des réactions, des masses réduites, des énergies,
  des charges des noyaux de la réaction.  
 \end{itemize}
 \item Initialisations diverses reliées à la température.
 \item Calcul des taux de {\embf toutes} les réactions, suivant la compilation
 retenue.
\end{itemize}

\medskip
\noi {\bf Appel}~: {\tt taux\_nuc} est appelée par {\tt tabul\_nuc},
\cfparagr{sec:tabulnuc}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE taux_nuc(t,total,rt,zit,izzt,qt,nom_react,nucleot,
	1 at,nom_elemt)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrées~:
 \begin{itemize}
  \item   {\tt t, total}~: température, indice du choix de la compilation à
  utiliser, \cfparagr{sec:fdon}.
 \end{itemize}
 \item Sorties~:
 \begin{itemize}
  \item {\tt rt}~: $\ln$(taux des réactions).
  \item {\tt zit}~: Charges des noyaux.
  \item {\tt izzt}~: Charges des noyaux de la réaction.
  \item {\tt qt}~: Energies.
  \item {\tt nom\_react}~:  Symboles des réactions.
  \item {\tt nucleot}~: Masses des isotopes .
  \item {\tt at}~: Masses réduites.
  \item {\tt nom\_elemt}~: Noms des isotopes.  
 \end{itemize}
\end{itemize}

\section{\ Routine générique {\tt tdetau}}\label{sec:tdetau}\index{tdetau.f}
Cette routine PUBLIC du module {\tt mod\_atm}, \cfparagr{sec:amatm}, constitue
la routine générique de la gestion du calcul de la température en fonction de
la profondeur optique.

\medskip
\noi{\bf Description}~:\\
Le calcul est orienté vers la routine de loi $T(\tau)$ indiquée dans le fichier de données {\tt
mon\_modele.don}, \cfparagr{sec:fdon}.

\medskip
\noi {\bf Appel}~: Les lois $T(\tau)$ étant utilisées pour reconstruire une
atmosphère, la routine {\tt tdetau} est appelée de {\tt lim\_atm},
\cfparagr{sec:limatm}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE tdetau(tau,teff,grav,t,dtsdtau,dtsdteff,dtsdg,
	1 ro_ext,dro_grav,dro_teff,f_tau,df_tau,d2f_tau)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrées~:
 \begin{itemize}
  \item {\tt tau, teff, grav}~: profondeur optique, température effective,
  gravité.
  \end{itemize}
 \item Sorties~:
 \begin{itemize}
  \item {\tt t, dtsdtau, dtsdteff, dtsdg}~: température et dérivées;
  \item {\tt ro\_ext, dro\_grav, dro\_teff}~: densité externe et dérivées;
  \item {\tt f\_tau, df\_tau, d2f\_tau}~: fonction $f$ et dérivées \cf
  \paragr{sec:rac}.
 \end{itemize}
\end{itemize}


\section{\ Routine {\tt thermo}}\index{thermo.f}\label{sec:thermo}
 Cette routine PRIVATE du module {\tt mod\_static}, \cfparagr{sec:amqst},
 effectue le calcul des variables thermodynamiques au sens large, à l'aide
 d'appels aux diverses routines génériques. 

%A partir des résultats obtenus elle effectue le
%calcul de grandeurs thermodynamiques telles que $c_{\rm p}$, $\delta$,
%$\alpha$, \etc\
%et de leurs dérivées premières par rapport à la pression {\em totale}
%$P\equiv\Ptot$ et à la pression
%gazeuse $\Pgaz$:
%\[\Pgaz\equiv\Pth+\Prad,\ P\equiv\Pgaz+\Ptur\equiv\Ptot, \] 
%la température $T$, la luminosité $L$, le rayon $R$,
%la masse $M$ et l'abondance en hydrogène $X$; $\Pth$ est
%la pression thermodynamique, somme des pressions moléculaire, atomique,
%ionique, électronique, $\Prad$ est la pression de radiation,
%$\Ptur$ est la pression\index{Schwarzschild}\index{Ledoux}
%turbulente \cfparagr{sec:pturb}. 
%\cesam2k utilise les définitions habituelles:
%\begin{equation}\label{eq:th1}
%{\begin{array}{l}
%\delta=-\left(\dsdx{\ln\rho}{\ln T}\right)_{\Pgaz,X}=
%\frac T\rho \left(\dsdx \Pgaz T\right)_{\rho,X}\bigg/
%\left(\dsdx \Pgaz\rho\right)_{T,X},\\
%\alpha=\left(\dsdx{\ln\rho}{\ln\Pgaz}\right)_{T,X}=
%\frac \Pgaz\rho \bigg/ \left(\dsdx \Pgaz\rho\right)_{T,X},
%\ \beta=\frac\Pth\Pgaz, \\
%c_{\rm p}=\left(\dsdx UT\right)_{\Pgaz,X}+\frac{\Pgaz\delta}{T\rho}=
%\left(\dsdx UT\right)_{\rho,X}+\frac \delta T\left(\frac \Pgaz\rho 
%-\rho\left(\dsdx U\rho\right)_{T,X}\right)\\
%\end{array}}
%\end{equation}
%le gradient adiabatique, le grand gamma, la fréquence de
%\bv\footnote{Non valable si $X\equiv0$.} sont calculés par:
%\begin{equation}\label{eq:th2}
%\begin{array}{l}
%\nabla_{ad}=\frac{\Pgaz\delta}{T\rho c_p},
%\ \Gamma_1=\left(\dsdx{\ln\Pgaz}{\ln\rho}\right)_S=
%\frac 1{\alpha-\delta\nabla_{ad}},\\ \\
%N^2=\frac R\Hp\left[\alpha\left(\dsdx{\ln\Pgaz}{\ln P}-1\right)+
%\delta\left(\gradad-\nabla\right)\right]-4\pi R^3\dsdx\rho X\dsdx XM\\
%\end{array}
%\end{equation}
%l'échelle de hauteur de la pression, le coefficient de
%conductivité radiative et le gradient radiatif ont pour expressions:
%\begin{displaymath}
%H_{\rm p}=-\left(\dsdx{\ln P}R\right)^{-1}=\frac{r^2 P}{{\cal G}M\rho},
%\quad K=\frac{4acT^3}
%{3\kappa\rho},\qquad
%\nabla_{rad}=\frac{LH_p}{4\pi R^2KT}
%\end{displaymath}

\medskip
\noi{\bf Description}
\begin{itemize}
 \item  Initialisations effectuées lors du premier appel.
 \item  Appel à l'\EOS\ pour le calcul des grandeurs thermodynamiques.
 \item  Détermination de l'énergie thermonucléaire.
 \item  Détermination de l'opacité.
 \item  Calcul du gradient radiatif.
 \item  Formation du critère de convection (Schwarzschild ou Ledoux).
 \item  Affectation du gradient adiabatique ou radiatif dans les extensions des
 \ZC, \cfparagr{sec:nlconv}.
 \item  Pour les zones convectives, calcul du gradient.
\end{itemize}
 
\medskip
\noi{\bf Appel}~: {\tt thermo} est appelée de divers endroits
en particulier par {\tt lim\_zc}, \cfparagr{sec:limzc},
{\tt static\_m}, {\tt static\_r}, \cfparagr{sec:staticm}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE thermo(pt,p,t,m,l,r,dlpp,xchim,dxchim,
	1 ro,drop,drot,drox,u,dup,dut,dux,grad,dgradpt,dgradp,dgradt,
	2 dgradx,dgradm,dgradl,dgradr,dgradlpp,
	3 gam,dgampt,dgamp,dgamt,dgamx,dgamm,dgaml,dgamr,dgamlpp,
	4 epsilon,depsp,depst,depsx,kap,dkapp,dkapt,dkapx,
	5 delta,deltap,deltat,deltax,cp,dcpp,dcpt,dcpx,
	6 gradad,dgradadp,dgradadt,dgradadx,
	7 hp,dhppt,dhpp,dhpt,dhpx,dhpr,dhpm,
	8 gradrad,alfa,beta,gamma1,radiatif)
\end{verbatim}
\end{tt}
\begin{itemize}
\item Entrées~:
 \begin{itemize}	
  \item {\tt pt, p, t, m, l, r}~: Pression totale, pression gazeuse,
  température, masse, luminosité, rayon.
  \item {\tt xchim, dxchim, dlpp}~: Composition chi\-mi\-que par mole,
  dérivée / $(M/M_\odot)$, $\ddx{\ln\Pgaz}{\ln\Ptot}$.
 \end{itemize}
 \item Sorties~:
 \begin{itemize}
  \item {\tt ro, drop, drot, drox}~: densité et dérivées;
  \item {\tt u, dup, dut, dux}~: énergie interne et dérivées; 
  \item {\tt grad, dgradpt, dgradp, dgradt, dgradx, dgradm, dgradl, dgradr, dgradlpp}:
  gra\-dient de tem\-pé\-ra\-tu\-re $\nabla\equiv\dsdx{\ln T}{\ln\Ptot}$
  et dé\-ri\-vées;		
  \item {\tt gam, dgampt, dgamp, dgamt, dgamx, dgamm, dgaml, dgamr, dgamlpp}~: efficacité
  de la convection et dérivées;	
  \item {\tt epsilon, depsp, depst, depsx}~: énergie nucléaire et gravifique
  et dérivées;
  \item {\tt kap, dkapp, dkapt, dkapx}~: opacité et dérivées;
  \item {\tt delta, deltap, deltat, deltax}~: $\delta$ et dérivées;
  \item {\tt cp, dcpp, dcpt, dcpx}~: $c_{\rm p}$ et dérivées;
  \item {\tt gradad, dgradadp, dgradadt, dgradadx}~: gradient
  adiabatique et dérivées;
  \item {\tt hp, dhppt, dhpp, dhpt, dhpx, dhpr, dhpm}~: échelle de hauteur
  de pression et dérivées;
  \item {\tt gradrad, alfa, beta, gamma1, radiatif}:
  gradient radiatif, $\alpha$, $\beta$, $\Gamma_1$, 
  {\tt radiatif}=.TRUE.~: on est dans une zone radiative.
 \end{itemize}
\end{itemize}

\section{\ Routine {\tt thermo\_atm}}\index{thermo\_atm.f}\label{sec:thermoatm}
Pour la restitution de l'atmosphère, cette routine PRIVATE du module {\tt
mod\_atm}, \cfparagr{sec:amatm}, est l'homologue
de la précédente. Elle n'en diffère que par~:
\begin{itemize}
 \item l'abscence d'appel aux taux des réactions thermonucléaires, 
\item le calcul du gradient de
température qui tient compte de la loi $T(\tau)$ utilisée
pour la restitution de l'atmosphère \cfparagr{sec:rest},
\item la composition chi\-mi\-que,
la luminosité et la vitesse angulaire y sont spatialement constantes.
\end{itemize}

\medskip
\noi{\bf Description}~:
\begin{itemize}
 \item  Initialisations effectuées lors du premier appel.
 \item  Appel à l'\EOS\ pour le calcul des grandeurs thermodynamiques.
 \item  Détermination de l'opacité.
 \item  Calcul du gradient radiatif.
 \item  Formation du critère de convection (Schwarzschild ou Ledoux).
 \item  Pour les zones convectives, calcul du gradient.
\end{itemize}

\medskip
\noi{\bf Appel}~: {\tt thermo\_atm} est appelée par {\tt eq\_atm},
\cfparagr{sec:eqatm}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE thermo_atm(pt,p,t,xchim,m,l,r,dlpp,
	1 tau,df_tau,d2f_tau,rstar,ro,drop,drot,kap,dkapp,dkapt,gradad,
	2 dgradadp,dgradadt,grad,dgradpt,dgradp,dgradt,dgradr,dgradrs,
	3 dgradm,dgradtau,dgradlpp,gam,dgampt,dgamp,dgamt,dgamr,dgamrs,
	4 dgamm,dgamtau,dgamlpp,hp,dhppt,dhpp,dhpt,dhpr,dhpm,delta,deltap,
	5 deltat,cp,gradrad,alfa,beta,gamma1,radiatif,deriv)
\end{verbatim}
\end{tt}
\begin{itemize}
 \item Entrées~:
 \begin{itemize}	
  \item {\tt pt, p, t, m, l, r}~: pression totale, pression gazeuse,
  température, masse, luminosité, rayon,
  \item {\tt xchim, dlpp}~: composition chi\-mi\-que par mole,
  $\ddx{\ln\Pgaz}{\ln\Ptot}$;
  \item {\tt tau, df\_tau, d2f\_tau, rstar}~: profondeur optique,
  partie dépendante de $\tau$ de la loi $T(\tau)$ et
  dérivées premières et secondes, rayon total; 
  \item  {\tt deriv}=.TRUE.~: le calcul des dérivées est requis.
 \end{itemize}
 \item Sorties~:
 \begin{itemize}
  \item {\tt ro, drop, drot}~: densité et dérivées;
  \item {\tt grad, dgradpt, dgradp, dgradt, dgradr, dgradrs, dgradm, dgradtau,
  dgradr, dgradlpp}:
  gra\-dient de tem\-pé\-ra\-tu\-re $\nabla\equiv\dsdx{\ln T}{\ln\Ptot}$
  et dé\-ri\-vées;
  \item {\tt gam, dgampt, dgamp, dgamt, dgamr, dgamrs, dgamm, dgamtau,
  dgamlpp}~: efficacité de la convection et dérivées;	
  \item {\tt kap, dkapp, dkapt}~: opacité et dérivées;
  \item {\tt gradad, dgradadp, dgradadt}~: gradient adiabatique et dérivées;
  \item {\tt hp, dhppt, dhpp, dhpt, dhpr, dhpm}~: échelle de hauteur
  de pression et dérivées;
  \item {\tt delta, deltap, deltat}~: $\delta$ et dérivées;
  \item {\tt cp, gradrad, alfa, beta, gamma1, radiatif}: $c_{\rm p}$,
  gradient radiatif, $\alpha$, $\beta$, $\Gamma_1$,
  {\tt radiatif}=.TRUE.~: on est dans une zone radiative.
 \end{itemize}
\end{itemize}

\section{\ Routine {\tt trho}}\index{trho.f}\label{sec:trho}
La fonction de cette routine PRIVATE du module {\tt mod\_atm},
\cfparagr{sec:amatm}, est la lecture des données et l'interpolation en
$(T, \rho)$ des lois $T(\tau)$
de type {\tt roger**}, \cfparagr{sec:roger}.

\medskip
\noi{\bf Description}~: D'origine externe cette routine n'est pas décrite.

\medskip
\noi{\bf Appel}~: {\tt trho} est appelée des routines de lois $T(\tau)$ du type
{\tt roger**}.

\section{\ Routine {\tt update}}\index{update.f}\label{sec:update}
Suivant la valeur {\tt .TRUE. / .FALSE.} de la variable logique {\tt next}, cette
routine PRIVATE du module {\tt mod\_static}, \cfparagr{sec:amqst},
permet, soit de translater au temps $t$ le modèle calculé pour le temps $t+dt$,
soit de réinitialiser un modèle pour le temps $t+dt$ avec celui
 obtenu pour le temps $t$. L'extension {\tt \_t} permet de différencier 
 les variables au temps $t$ de celles au temps $t+dt$.
 
\noi{\bf Description}~:
\begin{itemize}
\item Si {\tt next=.TRUE.} les grandeurs caractérisant le modèle
au temps $t+dt$ sont transcrites sur celles du modèle
au temps $t$, le pas temporel est ajusté de façon à éventuellement 
arrêter le calcul sur l'âge maximum désiré.
\item Si {\tt next=.FALSE.} les grandeurs caractérisant le modèle
au temps $t$ sont trans\-cri\-tes sur celles du modèle
au temps $t+dt$, le pas temporel est ajusté de façon à éventuellement 
arrêter le calcul sur l'âge maximum désiré.
\end{itemize}
  
\medskip
\noi {\bf Appel}~: {\tt update} est appelée par {\tt resout},
\cfparagr{sec:resout}.
\begin{tt}
\begin{verbatim}
	SUBROUTINE update(next,dt,dts)
\end{verbatim}
\end{tt}
\begin{itemize}  
 \item Entrées~:
 \begin{itemize}
  \item {\tt next=.TRUE.}~: On écrase les variables sur celles du pas temporel
  précédent.
  \item {\tt next=.FALSE.}~: On restitue les variables du pas temporel
  précédent.
 \end{itemize}  
 \item Entrées/Sorties~:
 \begin{itemize}
  \item {\tt dt, dts}~: Pas temporel, pas temporel estimé.   
 \end{itemize} 
\end{itemize}


\section{\ Routine {\tt vent}}\index{vent.f}\label{sec:rvent}
Lorsqu'il y a perte ou gain de masse, \cesam2k offre la possibilité que
la composition chi\-mi\-que de la matière gagnée ou perdue diffère de celle des
couches les plus externes \cfparagr{sec:ext}. Cette possibilité est
gérée par la routine PUBLIC {\tt vent} du module {\tt mod\_nuc},
\cfparagr{sec:amnuc}.

\medskip 
\noi{\bf Description}~:
\begin{itemize}
 \item Lors d'un appel d'initialisation, depuis la routine {\tt evol},
 on effectue une recherche dans l'environnement du fichier où sont
 indiquées les fractions de masse du vent, \cfparagr{sec:vent}. 
 Si un tel fichier est trouvé, les fractions de masse
 sont normalisées, puis réparties entre les différents isotopes du réseau
 nucléaire, et enfin transformées en fraction par mole;
 la variable logique {\tt l\_vent} est déclarée {\tt .TRUE.}
  Si le fichier est inconnu, 
 la variable logique {\tt l\_vent} est déclarée {\tt .FALSE.}, la composition
 chi\-mi\-que du vent sera celle de la couche la plus externe du modèle.
 \item Lors des appels
 suivants, une correction aux taux de réactions nucléaires est effectuée,
 \cfparagr{sec:ext}.
\end{itemize} 
 
\medskip
\noi {\bf Appel~:} {\tt vent} est appelée par~:
\begin{itemize}
 \item {\tt evol}, \cfparagr{sec:evol}, pour initialisation et
 dans le cas où le vent a une composition chi\-mi\-que
 différente de celle de la couche la plus externe.
 \item {\tt rk\_imps}, \cfparagr{sec:rkimps} ou
 {\tt eq\_dif\_chim}, \cfparagr{sec:diffus}, à la suite d'un appel à la routine
 {\tt nuc}, \cfparagr{sec:nuc}.
\end{itemize}
Les arguments sont optionnels.
\begin{tt}\begin{verbatim}
	SUBROUTINE vent(xchim,dxchim,jac)
\end{verbatim}\end{tt}
\begin{itemize}
 \item Entrées~: 
 \begin{itemize}
  \item  {\tt xchim}~: Composition chi\-mi\-que par mole. 
 \end{itemize}
 \item Entrées/Sorties~:
 \begin{itemize}
  \item  {\tt dxchim, jac}~: Taux de réactions nucléaires et jacobien. 
 \end{itemize}
\end{itemize}

\section{\ Routine {\tt write\_nl}}\index{write\_nl.f}\label{sec:writenl}
Cette routine PUBLIC du module {\tt mod\_exploit}, \cfparagr{sec:amexp}, a pour
fonction la formation d'un fichier de données {\tt mon\_modele.don},
\cfparagr{sec:fdon}.

\medskip 
\noi{\bf Description}~: Les NAMELISTs sont écrites après l'ouverture du fichier.

\medskip
\noi{\bf Appel}~: {\tt write\_nl}, qui n'a pas d'argument, est utilisée
par des programmes d'exploitation, \cfparagr{sec:pexploit}. 

\section{\ Package {\tt z14xcotrin21}}\index{z14xcotrin21.f}
\label{sec:z14xcotrin21}
Le package d'interpolation d'opacité {\tt z14xcotrin21} de
A.I.Boothroyd, est utilisé par \cesam2k pour le calcul de l'opacité,
lorsque l'abondance en éléments
lourds dépasse $Z>0.1$. Les routines d'interpolations utilisent des tables du
sous-directory {\tt SUN\_STAR\_DATA}, \cfparagr{sec:distri}.
Elles nécessitent une mise en forme qui est transparente pour
l'utilisateur \cfparagr{sec:opal2}.\\
La mise en \oe uvre du package {\tt z14xcotrin21} a bénéficié d'une
collaboration avec A.I.Boothroyd.
En raison de la complexité de sa programmation, {\tt z14xcotrin21}
 n'est pas inclus dans un module. Le package est compilé
conjointement au module {\tt mod\_opa}, \cfparagr{sec:amop}.

\medskip 
\noi{\bf Description}~:\\
En raison de leur complexité et de leur origine externe, les routines du package
ne sont pas détaillées. Pour plus d'informations se
reporter aux explications données en tête de la source de {\tt z14xcotrin21}.

\medskip
\noi {\bf Appel}~: \\
Avec le package {\tt z14xcotrin21} \cesam2k utilise la
routine {\tt opal\_x\_cno\_fu} ou à défaut la routine {\tt opal}.
Ces routines sont appelées par {\tt opa\_opal2}, \cfparagr{sec:opaopal2}.
En raison de la complexité, les listes d'appel ne sont pas détaillées.
