Ce sous-programme, appelé entre autre par preduv
, turbke
, covofi
,
resrij
, reseps
, ..., résout les équations de convection-diffusion
d’un scalaire a avec termes sources du type :
où ρ u, fsexp et fsimp désignent respectivement le flux de masse, les termes sources explicites et les termes linéarisés en an+1.
a est un scalaire défini sur toutes les cellules1.
Par souci de clarté on suppose, en l’absence d’indication, les propriétes
physiques Φ (viscosité totale µtot,...) et le flux de masse (ρ
u) pris respectivement aux instants n+θΦ et
n+θF, où θΦ et θF dépendent des schémas en temps
spécifiquement utilisés pour ces grandeurs2.
L’écriture des termes de convection et diffusion en maillage non orthogonal
engendre des difficultés (termes de reconstruction et test de pente) qui sont
contournées en utilisant une méthode itérative dont la limite, si elle
existe, est la solution de l’équation précédente.
Afin d’expliquer la procédure utilisée pour traiter les difficultés dues aux
termes de reconstruction et de test de pente dans les termes de
convection-diffusion, on note, de façon analogue à ce qui est défini dans
navsto
mais sans discrétisation spatiale associée, En l’opérateur :
L’équation (??) s’écrit donc :
La quantité En(an+1) comprend donc :
fs imp an+1, contribution des
termes différentiels d’ordre 0 linéaire en an+1,
θ
div((ρu) an+1)
− θ div(µ tot grad an+1), termes de convection-diffusion
implicites complets (termes non reconstruits + termes de reconstruction)
linéaires3
en an+1,
fs exp− fs imp an et
(1−θ) div((ρ
u) an) − (1−θ) div(µ tot grad an) l’ensemble
des termes explicites (y compris la partie explicite provenant du schéma en
temps appliqué à la convection diffusion).
De même, on introduit un opérateur EMn approché de
En, linéaire et simplement inversible, tel que son
expression contient :
la prise en compte des termes linéaires en a,
la convection intégrée par un schéma décentré amont
(upwind) du premier ordre en espace,
les flux diffusifs non reconstruits.
Cet opérateur permet donc de contourner la difficulté induite par la présence d’éventuelles non linéarités introduites par l’activation du test de pente lors du schéma convectif, et par le remplissage important de la structure de la matrice découlant de la présence des gradients propres à la reconstruction.
On a la relation4, pour toute cellule ΩI de centre I :
On cherche à résoudre :
Soit :
On va pour cela utiliser un algorithme de type point fixe en définissant la
suite (an+1, k)k∈ IN5:
où δ an+1, k+1 est solution de :
Soit encore, par linéarité de EMn :

Cette suite, couplée avec le choix de l’opérateur En, permet donc de lever la difficulté induite par la
présence de la convection (discrétisée à l’aide de schémas numériques
qui peuvent introduire des non linéarités) et les termes de
reconstruction. Le schéma réellement choisi par l’utilisateur pour la
convection (donc éventuellement non linéaire si le test de pente est activé) ainsi que les termes de
reconstruction vont être pris à l’itération k et traités au second membre via le sous-programme bilsc2
, alors que les termes
non reconstruits sont pris à l’itération k+1 et représentent donc les
inconnues du système linéaire résolu par codits
6.
On suppose de plus que cette suite (an+1, k)k converge vers la solution
an+1 de l’équation (??), i.e.
limk→∞ δ an+1, k = 0, ceci pour tout n donné.
(??) correspond à l’équation résolue par codits
. La
matrice EM n, matrice associée à EMn est
à inverser, les termes non linéaires sont mis au second membre mais sous forme
explicite (indice k de an+1, k) et ne posent donc plus de problème.
La viscosité µ tot prise dans EMn et dans
En dépend du modèle de turbulence utilisé. Ainsi on a
µ tot=µ laminaire + µ turbulent
dans EMn et dans En sauf lorsque l’on
utilise un modèle Rij−ε, auquel cas on a
µ tot=µ laminaire.
Le choix de EMn étant a
priori arbitraire (EMn doit être linéaire et la suite
(an+1, k)k∈IN doit converger pour tout n donné), une option des modèles
Rij−ε (IRIJNU=1) consiste à forçer µ totn
dans l’expression de EMn à la
valeur µ laminairen + µ turbulentn lors de l’appel à
codits
dans le sous-programme navsto
, pour l’étape de
prédiction de la vitesse. Ceci n’a pas de sens
physique (seul µ laminairen étant censé intervenir), mais cela peut
dans certains cas avoir un effet stabilisateur, sans que cela modifie pour
autant les valeurs de la limite de la suite (an+1, k)k.
Quand codits est utilisé pour le couplage instationnaire renforcé vitesse-pression (IPUCOU=1), on fait une seule itération k en initialisant la suite (an+1, k)k∈IN à zéro. Les conditions de type Dirichlet sont annulées (on a INC = 0) et le second membre est égal à ρ |Ωi|. Ce qui permet d’obtenir une approximation de type diagonal de EMn nécessaire lors de l’étape de correction de la vitesse7.
L’algorithme de ce sous-programme est le suivant :
- détermination des propriétés de la matrice EMn (symétrique
si pas de convection, non symétrique sinon)
- choix automatique de la méthode de résolution pour l’inverser si l’utilisateur
ne l’a pas spécifié pour la variable traitée. La méthode de Jacobi est utilisée par défaut pour toute variable scalaire a convectée. Les méthodes
disponibles sont la méthode du gradient conjugué, celle de Jacobi, et le
bi-gradient conjugué stabilisé (BICGStab) pour les matrices non
symétriques. Un préconditionnement diagonal est possible et utilisé par
défaut pour tous ces solveurs excepté Jacobi.
- prise en compte de la périodicité (translation ou rotation d’un scalaire, vecteur ou tenseur),
- construction de la matrice EMn correspondant à l’opérateur
linéaire EMn par appel au sous-programme
matrix
8. Les termes implicites correspondant à
la partie diagonale de la matrice et donc aux contributions différentielles
d’ordre 0 linéaires en an+1,(i.e fsimp), sont stockés dans le tableau ROVSDT (réalisé en amont du sous-programme appelant codits
).
- création de la hiérarchie de maillage si on utilise le multigrille
( IMGRP >0 ).
- appel à bilsc2
pour une éventuelle prise en compte de la
convection-diffusion explicite lorsque θ ≠ 0.
- boucle sur le nombre d’itérations de 1 à NSWRSM (appelé NSWRSP dans codits
).
Les itérations sont représentées par k appelé
ISWEEP dans le code et définissent les indices de la suite (an+1, k)k
et de (δ an+1, k)k.
Le second membre est scindé en deux parties :
un terme, affine
en an+1, k−1, facile à mettre à jour dans le cadre de la résolution
par incrément, et qui s’écrit :

les termes issus de la
convection/diffusion (avec reconstruction) calculée par bilsc2
.

La boucle en k est alors la suivante :

Avant de boucler sur k, le second membre SMBRP 0 est stocké dans le tableau SMBINI 0 et sert pour l’initialisation du reste du calcul.

On a donc :
et SMBRP 1 est complété par un second appel au sous-programme bilsc2
avec THETAP=θ, de manière à ajouter dans le second membre la partie de la convection-diffusion implicite.
• pour k = 2,
Soit :
l’appel au sous-programme bilsc2
, étant systématiquement fait par la suite avec THETAP=θ, on obtient de même :
où
• pour l’itération k+1,
Puis suit le calcul et l’ajout des termes de convection-diffusion reconstruits de − En(an+1, k), par appel au sous-programme
bilsc2
. On rappelle que la convection est prise en compte à cette étape
par le schéma numérique choisi par l’utilisateur (schéma décentré amont du
premier ordre en espace, schéma centré du second ordre en espace, schéma
décentré amont du second ordre S.O.L.U. ou une
pondération (blending) des schémas dits du second ordre (centré ou S.O.L.U.) avec le schéma
amont du premier ordre, utilisation éventuelle d’un test de pente).
Soit :

Si bien que sur maillage orthogonal avec schéma de convection upwind et en l’absence de terme source, la suite converge en théorie en une unique itération puisque par construction :
Fin de la boucle.
• Approximation EMn de l’opérateur
En
D’autres approches visant soit à modifier la définition de l’approximée, prise en compte du schéma centré sans reconstruction par exemple,
soit à abandonner cette voie seraient à étudier.
• Test de convergence
La quantité définissant le test de convergence est également à revoir, éventuellement à simplifier.
• Prise en compte de Tsimp
Lors de la résolution de l’équation par codits
, le tableau ROVSDT a
deux fonctions : il sert à calculer la diagonale de la matrice (par appel de
matrix
) et il sert à mettre à jour le second membre à chaque
sous-itération de la résolution en incréments. Or, dans le cas où Tsimp
est positif, on ne l’intègre pas dans ROVSDT, afin de ne pas affaiblir la
diagonale de la matrice. De ce fait, on ne l’utilise pas pour mettre à jour le
second membre, alors que ce serait tout à fait possible. Au final, on obtient
donc un terme source traité totalement en explicite (Tsexp+Tsimpan),
alors que la résolution en incréments nous permettrait justement de l’impliciter
quasiment totalement (Tsexp+Tsimpan+1,kfin−1, où kfin est
la dernière sous-itération effectuée).
Pour ce faire, il faudrait définir deux tableaux ROVSDT dans codits
.