Le but de ce sous-programme est de résoudre le système des équations de
k et ε de manière semi-couplée.
Le système d’équations résolu est le suivant :

P est le terme de production par cisaillement moyen :
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
G est le terme de production par gravité : G=−1/ρµt/σt ∂ρ/∂ xigi
La viscosité turbulente est µt=ρ Cµk2/ε.
Les constantes sont :
Cµ=0,09 ;
Cε2=1,92 ; σk=1 ; σε=1,3
Cε3=0 si G0 (stratification instable) et
Cε3=1 si G0 (stratification stable).
Γ est un éventuel terme source de masse (tel que l’équation de conservation de masse devienne ∂ ρ/∂ t+div(ρu)=Γ). ϕi (ϕ=k ou ε) est la valeur de ϕ associée à la masse injectée ou retirée. Dans le cas où on retire de la masse (Γ<0), on a forcément ϕi=ϕ. De même, quand on injecte de la masse, on spécifie souvent aussi ϕi=ϕ. Dans ces deux cas, le terme disparaît de l’équation. Dans la suite du document, on qualifiera d’injection forcée les cas où on a Γ>0 et ϕi≠ϕ.
αk, βk, αε, βε sont des termes sources utilisateur éventuels, conduisant à une implicitation partielle, imposés le cas échéant par le sous-programme ustske .
La résolution se fait en trois étapes, afin de coupler partiellement les deux variables k et ε. Pour simplifier, réécrivons le système de la façon suivante :

D est l’opérateur de convection/diffusion. Sk (resp. Sε) est le terme source de k (resp. ε).
On résout le bilan explicite :

(le terme en Γ n’est pris en compte que dans le cas de l’injection forcée)
On implicite les termes sources de manière couplée :
soit

Le terme en div(ρu) n’est pas implicité car il est lié au terme D pour assurer que la matrice d’implicitation sera à diagonale dominante. Le terme en Γ et les termes sources utilisateur ne sont pas implicités non plus, mais ils le seront dans la troisième phase.
Et on écrit (pour ϕ=k ou ε)

On résout donc finalement le système 2× 2 :

On résout le système :
soit

Le terme en Γ n’est là encore pris en compte que dans le cas de l’injection forcée. Le terme en α n’est pris en compte que si α est négatif, pour éviter d’affaiblir la diagonale de la matrice qu’on va inverser.
Lors de la phase de couplage, afin de privilégier la stabilité et la réalisabilité du résultat, tous les termes ne sont pas pris en compte. Plus précisément, on peut écrire :

en notant
P
= (∂ ui/∂ xj +
∂ uj/∂ xi)∂ ui/∂ xj
−2/3(divu)2
et
G
= −1/ρσt
∂ρ/∂ xigi
On a donc en théorie

En pratique, on va chercher à assurer kts>0 et εts>0. En se basant sur un calcul simplifié, ainsi que sur le retour d’expérience d’ESTET, on montre qu’il est préférable de ne pas prendre en compte certains termes. Au final, on réalise le couplage suivant :
avec

(par définition de Cε3, P+(1−Cε3)G est toujours positif)
• Calcul du terme de production
On appelle trois fois grdcel
pour calculer les gradients de u, v et
w. Au final, on a
TINSTK=
2(∂ u/∂ x)2+
2(∂ v/∂ y)2+
2(∂ w/∂ z)2+
(∂ u/∂ y+∂ v/∂ x)2+
(∂ u/∂ z+∂ w/∂ x)2+
(∂ v/∂ z+∂ w/∂ y)2
et
DIVU=
∂ u/∂ x+∂ v/∂ y
+∂ w/∂ z
(le terme div(u) n’est pas calculé par divmas , pour correspondre exactement à la trace du tenseur des déformations qui est calculé pour la production)
• Lecture des termes sources utilisateur
Appel de ustske
pour charger les termes sources utilisateurs. Ils sont
stockés dans les tableaux suivants :
W7=Ωβk
W8=Ωβε
DAM=Ωαk
W9=Ωαε
Puis on ajoute le terme en (divu)2 à TINSTK. On a donc
TINSTK=P
• Calcul du terme de gravité
Calcul uniquement si IGRAKE=1.
On appelle grdcel
pour ROM, avec comme conditions aux limites
COEFA=ROMB et COEFB=VISCB=0.
PRDTUR=σt est mis à 1 si on n’a pas de scalaire température.
G est calculé et les termes sources sont mis à jour :
TINSTK=P+G
TINSTE=P+Max[G,0]
=P+(1−Cε3)G
Si IGRAKE=0, on a simplement
TINSTK=TINSTE=P
• Calcul du terme d’accumulation de masse
On stocke
W1=Ωdiv(ρu)
calculé par divmas
(pour correspondre aux termes de convection de la
matrice).
• Calcul des termes sources explicites
On affecte les termes sources explicites de k et ε pour la
première étape.
SMBRK=Ω(µt(P+G)
−2/3ρ(n) k(n)divu
−ρ(n) ε(n))+Ω k(n)div(ρu)
SMBRE=Ωε(n)/k(n)
(Cε1(
µt(P+(1−Cε3)G)
−2/3ρ(n) k(n)divu)
−Cε2ρ(n)ε(n))
+Ωε(n)div(ρu)
soit SMBRK=Ω Sk(n)+Ω k(n)div(ρu) et SMBRE=Ω Sε(n)+Ωε(n)div(ρu).
• Calcul des termes sources utilisateur
On ajoute les termes sources utilisateur explicites à SMBRK et
SMBRE, soit :
SMBRK=Ω Sk(n)+Ω k(n)div(ρu)+Ωαk k(n) +Ωβk
SMBRE=Ω Sε(n)+Ωε(n)div(ρu)
+Ωαεε(n) +Ωβε
Les tableaux W7 et W8 sont libérés, DAM et W9 sont conservés pour être utilisés dans la troisième phase de résolution.
• Calcul des termes de convection/diffusion explicites
bilsc2
est appelé deux fois, pour k et pour ε, afin
d’ajouter à SMBRK et SMBRE les termes de convection/diffusion
explicites D(k(n)) et D(ε(n)). Ces termes sont d’abord
stockés dans W7 et W8, pour être conservés et réutilisés
dans la troisième phase de résolution.
• Termes source de masse
Dans le cas d’une injection forcée de matière, on passe deux fois dans
catsma
pour ajouter les termes en
Ω Γ (ki−k(n)) et
Ω Γ (εi−ε(n)) à SMBRK et
SMBRE. La partie implicite (ΩΓ) est stockée dans les
variables W2 et W3, qui seront utilisées lors de la troisième
phase (les deux variables sont bien nécessaires, au cas où on aurait une
injection forcée sur k et pas sur ε, par exemple).
• Fin de la première phase
Ceci termine la première phase. On a
SMBRK=Ω ρ(n)ke−k(n)/Δ t
SMBRE=Ω ρ(n)εe−ε(n)/Δ t
• Phase de couplage
(uniquement si IKECOU=1)
On renormalise SMBRK et SMBRE qui deviennent les seconds membres du
système de couplage.
SMBRK=1/Ωρ(n)SMBRK
=ke−k(n)/Δ t
SMBRE=1/Ωρ(n)SMBRE
=εe−ε(n)/Δ t
et DIVP23=2/3Max[div(u),0].
On remplit la matrice de couplage
A11=1/Δ t
−2 Cµk(n)/ε(n)
Min[(P+G),0]
+2/3Max[div(u),0]
A12= 1
A21=
− Cε1 Cµ(P
+(1−Cε3)G)
− Cε2(ε(n)/k(n))2
A22=1/Δ t
+2/3Cε1Max[div(u),0]
+2 Cε2ε(n)/k(n)
On inverse le système 2× 2, et on récupère :
DELTK=kts−k(n)
DELTE=εts−ε(n)
• Fin de la deuxième phase
On met à jour les variables SMBRK et SMBRE.
SMBRK=Ω ρ(n)kts−k(n)/Δ t
SMBRE=
Ω ρ(n)εts−ε(n)/Δ t
Dans le cas où on ne couple pas (IKECOU=0), ces deux variables gardent la même valeur qu’à la fin de la première étape.
• Calcul des termes implicites
On retire à SMBRK et SMBRE la partie en convection diffusion au
temps n, qui était stockée dans W7 et W8.
SMBRK=Ω ρ(n)kts−k(n)/Δ t
−Ω D(k(n))
SMBRE=
Ω ρ(n)εts−ε(n)/Δ t
−Ω D(ε(n))
On calcule les termes implicites, hors convection/diffusion, qui correspondent
à la diagonale de la matrice.
TINSTK=Ω ρ(n)/Δ t
−Ωdiv(ρu)+ΩΓ+ΩMax[−αk,0]
TINSTE=Ω ρ(n)/Δ t
−Ωdiv(ρu)+ΩΓ+ΩMax[−αε,0]
(Γ n’est pris en compte qu’en injection forcée, c’est-à-dire qu’il
est forcément positif et ne risque pas d’affaiblir la diagonale de la matrice).
• Résolution finale
On passe alors deux fois dans codits
, pour k et ε,
pour résoudre les équations du type :
TINST×(ϕ(n+1)−ϕ(n)) = D(ϕ(n+1))+SMBR.
• clipping final
On passe enfin dans la routine clipke
pour faire un clipping éventuel
de k(n+1) et ε(n+1).