Vous êtes sur la page 1sur 277

EDF R&D

Fluid Dynamics, Power Generation and Environment Department Single Phase Thermal-Hydraulics Group 6, quai Watier F-78401 Chatou Cedex Tel: 33 1 30 87 75 40 Fax: 33 1 30 87 79 16

APRIL 2008

Code Saturne documentation Code Saturne 1.3.2 Theory and Programmers Guide

contact: saturne-support@edf.fr

http://rd.edf.com/code saturne

c EDF 2008

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 2/277

` SYNTHESE

Code Saturne est un syst`me de rsolution des quations de Navier-Stokes pour des coulements 2D, e e e e 2D axisymtriques ou 3D, stationnaires ou instationnaires, laminaires ou turbulents, incompressibles e ou dilatables, isothermes ou non, avec prise en compte de scalaires et de uctuations de scalaires. Le code comprend en outre un module lagrangien, un module de rayonnement semi-transparent, un module combustion gaz, un module charbon pulvris, un module lectrique (eet Joule et e e e arc lectrique) et un module compressible. On dsignera dans le prsent document les potentialits e e e e combustion gaz, charbon pulvris, lectrique et compressible sous la dnomination commune e e e e de physiques particuli`res. La discrtisation est de type volume nis, et permet lutilisation dune e e large gamme de maillages non structurs, quils soient hybrides (contenant des lments de dirents e ee e types) ou quils prsentent des non conformits. e e Ce document constitue la documentation thorique et informatique des parties centrales du noyau de e e e Code Saturne version 1.3.2. Les modules lectrique et compressible sont aussi traits. An que la documentation soit directement utilisable par les dveloppeurs, elle a t structure en e ee e sous-parties correspondant ` la fois aux tapes majeures de lalgorithme et ` certains sous-programmes a e a cls du code. Pour chacune des sous-parties (ou sous-programmes), on donne une description de la e ` fonction, puis on dtaille la discrtisation. A lattention des dveloppeurs, on prcise ensuite la e e e e mise en uvre informatique et, le cas chant, on liste dans un dernier paragraphe les points ` e e a traiter et les amliorations ` apporter au code. e a La documentation est attache ` la version du code correspondante pour favoriser les mises ` jour. En e a a pratique, les utilisateurs de Code Saturne peuvent accder ` la documentation sous e a $CS HOME/doc/NOYAU/, information qui leur est rappele par la commande dinformation gnrale e e e info cs [theory]. Code Saturne is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Code Saturne is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

SOMMAIRE

Introduction

II
1- Sous-programme bilsc2 2- Sous-programme clptur 3- Sous-programme clsyvt 4- Sous-programme codits 5- Sous-programme condli 6- Sous-programme covo 7- Sous-programme gradmc 8- Sous-programme gradrc 9- Sous-programme inimas 10- Sous-programme itrmas/itrgrp 11- Sous-programme matrix 12- Sous-programme navsto 13- Sous-programme preduv 14- Sous-programme recvmc 15- Sous-programme resolp

Module de base

21
22 32 52 60 66 82 100 106 116 120 122 128 138 150 152

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 4/277

16- Sous-programme turbke 17- Sous-programme turrij 18- Sous-programme viscfa 19- Sous-programme visort 20- Sous-programme vissec 21- Sous-programme vortex

162 168 182 184 188 192

III
1- Sous-programme cfbl** 2- Sous-programme cfener 3- Sous-programme cfmsvl 4- Sous-programme cfqdmv 5- Sous-programme cfxtcl

Module compressible

198
200 218 224 230 234

IV
1- Sous-programme elec**

Module lectrique e

254
256

Module combustion

274
276

1- Sous-programme co**, cp**, fu** and so ... d3p*, ebu*, lwc*, pdf*

Part I

Introduction

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 6/277

Introduction
1.1 Disclaimer

Code Saturne is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Code Saturne is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.1

1.2

Aims of the document

This chapter constitutes an introduction to the theory and developers guide associated with the kernel of Code Saturne. The system of equations considered consists of the Navier-Stokes equations, with turbulence and passive scalars. First, the continuous equations for mass, momentum, turbulence and passive scalars are presented. Then, information related to the time scheme is supplied. Finally, the spatial discretisation is detailed: it is based on a co-located2 nite volume scheme for unstructured meshes. To make the documentation immediately suitable to the developers needs, it has been organized into sub-sections corresponding to the major steps of the algorithm and to some important subroutines of the code. In each sub-section (for each subroutine), the function of the piece of code considered is indicated. Then, a description of the discretisation follows. Finally, and more oriented towards the developers, details of the implementation are provided and a list of open problems is given (improvements, limitations...). Several accessibility levels have been dened for the documentation, so that it is possible to choose the information level best suited to the intended use. At the present time, on UNIX and Linux platforms, free access is granted to all information (level called Complet). The most restrictive level provides only the function of the subroutines (Fonction level). The intermediate level provides the function of the subroutines and the associated discretisation (Discret level). During the development process of the code, the documentation is naturally updated as and when required by the evolution of the source code itself. Suggestions for improvement are welcome. In particular, it will be necessary to deal with some transverse subjects (such as parallelism, periodicity or memory management) which were voluntarily left out of the rst versions, to focus on the algorithms and their implementation. To make it easier for the developers to keep the documentation up to date during the development process, the les have been associated physically with the release of the code (each release of the code includes a directory containing the whole documentation). In practice, the users of Code Saturne will nd the documentation at the following location (UNIX and Linux server at MFEE): $CS HOME/doc/NOYAU/Postscripts/Base, The general command info cs [noyau] also provides this information.
1 You should have received a copy of the GNU General Public License along with Code Saturne; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 2 All the variables are located at the centres of the cells.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 7/277

1.3

Continuous equations

This section presents the continuous equations. It is no substitutes for the specic sub-sections of this documentation: the purpose here is mainly to provide an overview before more detailed reading. In the following, stands for the density, u for the velocity eld. A mass source term, , may present, but in most cases the right-hand side of the Masss equation is = 0 Mass div(u) = (I.1.1)

In fact, to compute a given unknown (and in particular for the velocity prediction), the equation + div(u) = is used to re-write the term as follows: div(u) + . The possible t t t variations in time of the density are however not taken into account in the pressure correction step.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


(u) + div( u u) = div() + ST K u t div(u) = 0

Code Saturne documentation Page 8/277

Momentum

(I.1.2)

[ ST K u ] stands for the additional momentum Source Terms which may be prescribed by the user (head loss, ui contribution associated with a user-prescribed mass source term...). K is a positive diagonal tensor, by denition (derived, for example, from the diagonal source term of the head loss tensor). For laminar ow, is the stress tensor: = P Id (I.1.3)

where is the viscous stress tensor, dened from = l (dynamic molecular viscosity) and S (strain rate tensor) as: 2 = 2 S tr(S) Id 3 with S= 1 (grad u + t grad u) 2 (I.1.4)

For turbulent ow, also accounts for the turbulent Reynolds stress tensor (correlations of the velocity uctuations arising from the non linear convective term). The modelling of the latter depends upon the turbulence model adopted: - with an eddy-viscosity model (EVM) such as the k model, the closure requires a turbulent viscosity t . With formally the same denition for as in equation (I.1.4), but with = l + t , reads: 2 = (P + k)Id (I.1.5) 3 - with the LES approach, the denition for remains the same as for the EVM, above, but the turbulent viscosity t now accounts only for the sub-grid eects. - with a Dierential Reynolds Stress Model (DRSM), the components of the Reynolds stress tensor R are solved as extra variables during the simulation, and are readily available for the momentum equation, so one obtains, with = l in the denition of (equation (I.1.4)) : = P Id R (I.1.6)

In the following, only three standard types of turbulence models are described, as representatives of the types of equations that need to be dicretised. A more detailed description of available turbulence models is described in section (?? Turbulence Models??)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 9/277

Equations for the variables k and (standard k model)

t (k) + div u k ( + grad k) = P + G + k i + STk t k t 2 () + div u ( + grad ) = C1 [P + (1 C3 )G] C2 + i + T S t k k P is the production term created by mean shear: P = Rij = t = t ui uj 2 uk 2 ui ui = t + + t ij + kij xj xj xi 3 xk 3 xj ui uj ui 2 2 + t (divu)2 kdiv(u) xj xi xj 3 3 2 2 2 2 2 v w u v u w v u +2 +2 + + + + + 2 x y z y x z x z 2 t (divu)2 3 1 t gi t xi

(I.1.7)

w y

2 kdiv(u) 3

G is the production term created by gravity eects: G = The turbulent viscosity is: t = C

k2 . ST ( = k or ) stands for the additional source terms prescribed by the user (in rare cases only). The constants of the model are given below: C C1 C2 k 0, 09 1, 44 1, 92 1 1, 3

C3 = 0 if G

0 (unstable stratication) and C3 = 1 if G

0 (stable stratication).

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 10/277

Equations for the Reynolds stress tensor components Rij and (LRR model)

(R ) + div(u R grad R ) = P + G + + d ij ij ij ij ij ij ij ij t 2 () + div [u (grad )] = d + C1 [P + G ] C2 t k k

i +Rij + STRij

(I.1.8)

+i + ST

P stands for the turbulence production tensor associated with mean ow strain-rate and G is stands for the production- tensor associated with buoyancy eects: Pij = Rik uj ui + Rjk xk xk and Gij = 3 C k (ri gj + rj gi ) 2 t (I.1.9)

withk moreover, P

= =

1 Rll andri = Rik 2 xk 1 1 Pkk and G = max(0, Gkk ) 2 2

(I.1.10) (I.1.11)

is the term representing pressure-velocity correlations: ij = ij,1 + ij,2 + ij,3 + ij,w (I.1.12)

2 2 withij,1 = C1 (Rij kij ) , ij,2 = C2 (Pij P)ij k 3 3

1 and ij,3 = C3 (Gij ij Gkk ) 3 (I.1.13)

The term ij,w is called wall echo term (by default, it is not accounted for : see turrij). The dissipation term, ij , is considered isotropic: ij = The turbulent diusion terms are : dij = CS k Rij ( Rkm ) xk xm and d = C xk k Rkm xm (I.1.15) 2 ij 3 (I.1.14)

i In the rare event of masse sources, Rij and i are the corresponding injection terms. STRij and ST are also rarely used additional source terms that can prescribed by the user.

C C C1 C2 C1 0, 09 0, 18 1, 44 1, 92 1, 8

C2 0, 6

C3 CS 0, 55 0.22

C1 0, 5

C2 0, 3

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 11/277

Denition of t for LES Smagorinsky model t = (Cs )2 With Sij the ltered strain rate tensor components: Sij = 1 2 ui uj + xj xi (I.1.17) 2Sij Sij (I.1.16)

Here, ui stands for the ith resolved velocity component3 . C is the Smagorinsky constant. Its theoretical value is 0.18 for homogenous isotropic turbulence, but the value 0.065 is classic for channel ow. is the lter width associated with the nite volume formulation (implicit ltering which corresponds 1 to the integration over a cell). The value recommended for hexahedral cells is: = 2 || 3 where || is the volume of the cell. Classic dynamic model (??this should be moved to chapter turbulence models??)

A second lter is introduced: it is an explicit lter with a characteristic width superior to that of the implicit lter (). If a is a discrete variable dened over the computational domain, the variable obtained after applying the explicit lter to a is noted a. Moreover, with: Lij = ui uj ui uj ij = ui uj ui uj Tij = ui uj ui uj Germano identity reads: Lij = Tij ij Both dynamic models described herafter rely on the estimation of the tensors T and as functions of the lter widths and of the strain rate tensor (Smagorinsky model). The following modelling is adopted4 : 1 Tij ij Tkk = 2C 2 |Dij |Dij 3 1 2 ij ij kk = 2C |Dij |Dij 3 u stands for the implicit-ltered value of a variable u dened at the centres of the cells and u represents the explicit-ltered value associated with the variable u. It follows that the numerical computation of Lij is possible, since it requires the explicit ltering to be applied to implicitly ltered variables only (i.e. to the variables explicitly computed). On the following assumption: C = C
3 In the case of implicit ltering, the discretisation in space introduces a spectral low pass lter: only the structures larger that twice the size of the cells are accounted for. Those structures are called the resolved scales, whereas the rest, ui ui , is referred to as unresolved scales or sub-grid scales. The inuence of the unresolved scales on the resolved scales have to be modelled. 4 ij stands for the Kroeneker symbol.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 12/277

and assuming that C is only slightly non-uniform, so that it can be taken out of the explicit ltering operator, the following equation is obtained: 1 Lij ij Lkk = C(ij ij ) 3 with: ij = 22 |Dij |Dij ij = 2 |Dij |Dij Since we are left with six equations to determine one single variable, the least square method is used5 . With: Eij = Lij C(ij ij ) the value for C is obtained by solving the following equation: Eij Eij =0 C Finally: C= with Mij = ij ij This method allows to calculate the Smagorinsky constant dynamically at each time step and at each cell. However, the value obtained for C can be subjected to strong variations. Hence, this approach is often restricted to ows presenting one or more homogeneous directions (Homogeneous Isotropic Turbulence, 2D ows presenting an homogeneous spanwise direction...): indeed, in such cases, the model can be (and is) stabilized by replacing C by an average value of C computed over the homogeneous direction(s). For a general case (without any homogeneous direction), a specic averaging is introduced to stabilize the model: for any given cell of the mesh, the averaged Smagorinsky constant is obtained as an average of C over the extended neighbourhood of the cell (the set of cells that share at least one vertex with the cell considered). More precisely, the average value (also denoted C hereafter) is calculated as indicated below: Mij Lij Mkl Mkl Mij Lij Mkl Mkl
2

C=

5L kk

has no eect for incompressible ows.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 13/277

Equations for the scalars Two types of transport equations are considered: advection of a scalar with additional source terms: (a) + div ((u) a) div (Kgrad a) = T Sa + ai t
convection diusion

(I.1.18)

advection of the variance a2 with additional source terms :


i (a2 ) + div (( u) a2 ) div (K grad a2 ) = T Sa2 + a2 g t convection

t +2 (grad a)2 a2 t Rf k
production and dissipation

diusion

(I.1.19)

The two previous equations can be unied formally as: (f ) + div (( u)f ) div (Kgrad f ) = T Sf + f i + Tspd t with: Tspd = 0 for f = a, for f = a2 (I.1.21) (I.1.20)

t a2 (grad a)2 2 t Rf k

T Sf represents the additional source terms that may be prescribed by the user.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 14/277

1.4

Discretisation in time

At rst, the physical properties of the ow are computed (density, viscosity, specic heat...): indeed, they may depend upon the variables (such as the temperature for example). The time scheme is a -scheme: =1 for an implicit rst order Euler scheme = 1/2 for second order Crank-Nicolson scheme For the second order scheme, the time step is assumed to be constant. A fractional step scheme is used to solve the mass and momentum equations (Chorin). The rst step (predictor step) provides predicted velocity components: they are determined sequentially and without coupling between each other. The mass equation is taken into account during the second step (corrector step): a pressure Poisson equation is solved and the mass uxes at the cell faces are updated. If required, the equations for the turbulent variables are solved (turbulent kinetic energy and dissipation or Reynolds stresses and dissipation), using a -scheme again. For the k model, an additional step is carried out to couple the source terms. For the Reynolds stress model, the variables (turbulent stresses and dissipation) are solved sequentially, without coupling. Next, the equations for the scalars (enthalpy, temperature, tracers, concentrations, mass fractions...) are solved, also with a -scheme. Finally, all the variables are updated and another time step may start. The general equation for advection (valid for the velocity components, the turbulent variables and the scalars) is re-written as follows in a condensed form; the mass equation ( + div(u) = ) has been t used to split the time derivative: f + div (( u)f ) div (Kgrad f ) = Si (, ) f + Se (, ) + div ( u) f t In this equation: : represents the physical properties (, K, t , ...) : represents the variables of the problem (u, k, , ...) Si (, ) f : represents the linear part of the source terms Se (, ) : includes all other source terms div ( u) f : is the term associated with mass accumulation (I.1.23) (I.1.22)

The time at which the dierent quantities are evaluated is indicated below: : the time considered is dened by the time scheme applied to the physical properties. ( u): the time considered is dened by the time scheme applied to the mass ux. Se (, ): the time considered is dened by the time scheme applied to the explicit source terms. If = 1/2, or if an extrapolation is used, the time step t is constant in time and uniform in space.

1.4.1

Physical properties

The physical properties of the ow (density, viscosity, specic heat...) are: - either explicit, dened at the time step n. - or extrapolated at n + using the Adam-Bashforth time scheme (in this case, the time step is assumed to be constant). Under a more general form, this reads: n+ = (1 + ) n n1 (I.1.24)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


standard explicit formulation = 0 = 1/2 second order extrapolation at n + 1/2 = 1 rst order extrapolation at n + 1

Code Saturne documentation Page 15/277

(I.1.25)

1.4.2

Mass ux

For the mass ux, three time schemes are available. The mass ux may be: - explicit, taken at time step n for the momentum equations and updated with its value at time step n + 1 for the equations for turbulence and scalars (standard scheme). - explicit, taken at time step n for the momentum equations and also for the equations for turbulence and scalars. - taken at n + F (second order if F = 1/2). To solve the momentum equations, ( u)n2+F and ( u)n1+F are known. Hence, the value at n + F is obtained as a result of the following extrapolation: ( u)n+F = 2 ( u)n1+F ( u)n2+F (I.1.26) At the end of this phase (after the pressure correction step), ( u)n+1 is known and the following interpolation is used to determine the mass ux at n + F that will be adopted for the equations for turbulence and scalars: ( u)n+F = 1 F 1 ( u)n+1 + ( u)n1+F 2 F 2 F (I.1.27)

1.4.3

Source terms

As for the physical properties, the explicit source terms are: - explicit: [Se (, )]n = Se (n+ , n ) - extrapolated at n + S using the Adams-Bashforth scheme: [Se (, )]n+S = (1 + S ) Se (n , n ) S Se (n1 , n1 ) (I.1.29) (I.1.28)

By default, to be consistent and preserve the order of convergence in time, the implicit source terms are discretized with the same scheme as that used for convection-diusion of the unknown considered, i.e. taken at n + : [Si (, ) f ]n+ = Si (n+ , n ) [ f n+1 + (1 ) f n ] (I.1.30)

Note: The implicit source terms taken also at n + for S = 0, while for S = 0, the implicit source terms are taken at n + 1 , this to enhance stability.

1.4.4

General discrete form

For the sake of clarity, it is assumed hereafter that, unless otherwise explicitly stated, the mass ux is taken at n + F and the physical properties are taken at n + , with F and dependant upon the specic schemes selected for the mass ux and the physical properties respectively.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 16/277

Under a general form, the discrete counterpart of equation (I.1.23) at n + reads: n+1 (f f n ) + div (( u)f n+ ) div (Kgrad f n+ ) = t n+ n+ [Si (, ) f ] + [Se (, )] S + div ( u) f n+ Using the standard -scheme f n+ = f n+1 + (1 ) f n , the equation reads: n+1 (f f n ) + div (( u)f n+1 ) div (Kgrad f n+1 ) = t (1 ) div (( u)f n ) + (1 ) div (Kgrad f n )+ n+ Si (, n ) f n+1 + (1 ) f n + [Se (, )] S + div ( u) ( f n+1 + (1 ) f n ) (I.1.31)

(I.1.32)

For numerical reasons, the system is solved in an iterative and incremental manner, with the help of the series f n+1,k+1 = f n+1,k+1 f n+1,k (with, by denition, f n+1,0 = f n ). In particular, this method allows to treat implicitly a portion of the advection-diusion terms associated correction terms for non orthogonal meshes. Hence, the system actually solved reads: Si (, n ) div ( u) (f n+1,k+1 f n+1,k ) t ROVSDT + div (( u) (f n+1,k+1 f n+1,k )) div (Kgrad (f n+1,k+1 f n+1,k )) = div (( u) f n+1,k ) + div (Kgrad f n+1,k ) (1 ) div (( u) f n ) + (1 ) div (Kgrad f n ) n+1,k SMBRS f n ) + Si (, n ) f n+1,k + (1 ) f n (f t n+ +div ( u) ( f n+1,k + (1 ) f n ) + [Se (, )] S

(I.1.33)

Whatever the equation considered (momentum equation, equations for turbulence or scalars,...) the system representation is always the same: a right-hand side (stored in the vector-array SMBRS) and a vector-array ROVSDT for the part linear with respect to f n+1,k+1 .

The vector-array ROVSDT is computed by the subroutine covofi for the scalars, by preduv for the velocity and by turbke or turrij for the turbulence. The vector-array SMBRS is not computed at one go, but in two successive steps.

The rst part is calculated by the subroutines covofi, preduv, turbke and turrij (respectively for the scalars, the velocity and the turbulence). At that point, the vector SMBRS is dened as follows: SMBRS = Si (, n ) f n + div ( u) f n + [Se (, )]
n+S

(I.1.34)

then, the calculation of SMBRS is complemented at each sub-iteration during the resolution of the equation by the subroutine codits as follows: SMBRS = SMBRS ROVSDT (f n+1,k f n ) div (( u) f n+1,k ) + div (Kgrad f n+1,k ) (1 ) div (( u) f n ) + (1 ) div (Kgrad f n ) (I.1.35)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 17/277

1.5

Discretisation in space

Within the framework of the nite volume approach, the equations are integrated over each cell of the mesh (or control volume i ). This section is limited to a brief description of the way the terms appearing in the equations are integrated. Specic attention is devoted to the calculation of gradients, since it is a major characteristic of the co-located nite volume method (all the variables are associated with the same point, namely the cell centre6 ). The terms of order 0 (i.e. the terms that are not a space derivative) are integrated to introduce their average over the cell. For example, g becomes |i |i g. In this expression, |i | is the volume of cell i and i denotes the average of over the control volume (the cell) i . For less clumsy notations, |i |i g is simply written as |i |i g. When reconstructions (in fact Taylor series) are required to reach a higher order in space, the average value i is assumed to be associated with the centre I of i . The divergence terms (or ux terms, or again conservative terms) are integrated using the Green relation to introduce cell faces values (and so, uxes appear naturally). For example, a term such pij Sij . In this expression, pij is the average of p on the interface between as div(p) becomes7
jN eibr(i)

the neighbouring cells i and j. The summation is carried out for j N eibr(i), that is, all cells in the neighbourhood of i thus sharing a cell face with it. As for the cell-average above, the overbar is pij Sij . The value pij is assumed to be associated with omitted: the sum is simply written
jN eibr(i)

the centre F of the face ij when reconstructions are needed to reach a higher order in space. The precision of the value pij determines the precision of the calculation of div(p). For pij , it is possible to take a non-centred and non-interpolated value (upwind scheme for convection) or a linear interpolation between the values at the centres I and J of the neighbouring cells. Both methods are relatively straighforward but may lack consistence and precision for arbitrary meshes (and in particular on non-orthogonal meshes). A higher order in space may be reached if reconstruction techniques are used. The idea is to compute the value for pij more precisely: to do so, p is interpolated at Fij (the centre of the face) using the values for p at I and J and... the gradients of p calculated at I and J. The reader will notice that it is precisely the calculation of the space derivatives8 of p that motivated the need for a good interpolation of p at Fij . Hence, the computation of the space derivatives of p requires to solve a system: this is done in an iterative manner. Doing so allows to calculate the cell gradient of the variables. It is important to keep in mind that the cell gradient of a given variable represents the gradient of the variable in the cell and that it is obtained from the values of the variable interpolated at the cell faces. Similarly, the terms written as divergence of gradient are integrated to introduce face values. One has to calculate the gradient at each face (or face gradient) in the direction normal to the face. This concept of face gradient is extremely important. The face gradient normal to a face can be easily calculated with just the values at the centres of the two cells that share the face (points I and J on gure I.1.1), but this method is limited to orthogonal meshes. For consistence and to reach a higher order in space, the values of the variables at points I and J have to be used. These are calculated by a Taylor series from the values at I and J and from the cell gradient previously determined.

6 The centre of a cell is a geometric point associated with the cell and located preferably inside the cell. Nevertheless, the word centre shall not be taken literally, especially in the case of polyhedral P that do not have a regular shape. cells P 7 If the cell i is at the domain boundary, the sum becomes pij Sij + pbik Sbik , with bik referring to the jV ois(i) k(i)

faces of the cell i which are at the domain boundary. 8 The rst derivatives in space are required to obtain div(p) in each cell.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 18/277

Sij

I F

Figure I.1.1: Identication of the geometric entities for internal (left) and boundary faces (right).

J J

ik

Sb

I i

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 19/277

1.6

Calling tree

Each sub-section of this document is associated with an important subroutine. The full list of the subroutines described here is the following: bilsc2 clptur clsyvt codits condli covofi gradmc gradrc inimas itrmas matrix navsto preduv recvmc resolp turbke turrij viscfa visort vissec. The table 1 presents their sequence within a time step. This calling tree is only partial. In particular, it does not account for the number of calls to each subroutine. Also, for the sake of clarity, no reference has been made to the subroutines dedicated to the gradient calculation (gradmc, gradrc), which are called very often. For the same reason, the calls to bilsc2 (advection uxes) and matrix (matrix calculation) which are made from within codits (treatment of an advection equation with source terms) have not been reported. The sub-sections where important information can be found are indicated below:

Calculation of gradients gradrc gradmc Least square method recvmc gradmc Convective schemes bilsc2 Wall-laws (for velocity and temperature) clptur condli System solve (incremental method) codits Calculation of the values at the faces (not exhaustive) viscfa visort Finally, for the reader wishing to become more familiar with the methods implemented in Code Saturne, it is recommended to begin with the study of the advection equation for a scalar (covofi) which is solved iteratively using an incremental method (codits). It will then be useful to look at navsto which briey presents the solution of the system made up of the mass and momentum equations.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 20/277

Calculation of the physical properties Boundary Conditions condli clptur turbulent conditions at the wall clsyvt symmetry conditions for the vectors and the tensors Navier-Stokes solution navsto Velocity prediction preduv vissec momentum source terms related to the transposed gradient of the velocity viscfa calculation of the viscosity at the faces codits iterative solution of the system using an incremental method Pressure correction resolp viscfa calculation of the time step at the faces... visort ...according to the selected options matrix calculation of the Poisson equation matrix inimas initialisation of the mass ow rate itrmas update of the mass ow rate Velocity correction standard method or... recvmc least square method k model turbke viscfa preliminary steps before... bilsc2 ...source terms coupling viscfa calculation of the viscosity at the faces codits iterative solution of the systems using an incremental method Reynolds stress model turrij visort calculation of the viscosity at the faces codits iterative solution of the systems using an incremental method Equations for the scalars covofi viscfa calculation of the viscosity at the faces codits iterative solution of the systems using an incremental method Table 1: Partial and simplied calling tree associated with the successive stages within a time step.

Part II

Module de base

21

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 22/277

1- Sous-programme bilsc2

1.1

Fonction

Dans ce sous-programme, appel par codits et turbke, sont calcules les contributions au bilan e e explicite des termes convectifs et diusifs reconstruits (sur maillages non orthogonaux et si lutilisateur le dsire) du second membre dune quation de convection/diusion pour un scalaire a. Ces termes e e scrivent de facon gnrique 1 : e e e B (( u)n , a) = div( (u)n a) + div( grad a)
partie convective partie diusive

(II.1.1)

avec , u, et a variables connues ` linstant tn . a

1.2

Discretisation

1.2.1 Partie convective


En sinspirant des notations adoptes dans le sous-programme navsto, le bilan explicite correspondant e a ` lintgration sur une cellule i de la partie convective div( ( u)n a) de B peut scrire sous forme e e dune somme de ux numriques F ij calculs aux faces des cellules purement internes et de ux e e numriques F bik calculs aux faces de bord du domaine . Soient V ois(i) lensemble des centres des e e cellules voisines de i et b (i) lensemble des centres des faces de bord de i , sils existent. On a donc : div((u)n a) d =
i jV ois(i)

F ij ((u)n , a) +
kb (i)

F bik ((u)n , a)

en posant : F ij ((u)n , a) = (u)n . S ij ij F bik ((u)n , a) = (u)nik . S bik b a f,ij (II.1.2)

af bik

(II.1.3)

e o` a f,ij et af bik reprsentent les valeurs aux faces internes et de bord respectivement. u On rappelle : ij = FJ dni aux faces internes uniquement et e IJ

uK = uK + (grad u)K . KK ` lordre 1 en espace, pour K = I ou J a La valeur du ux convectif F ij dpend du type de schma numrique choisi. Il en existe trois dans ce e e e sous-programme :
1 Ils interviennent notamment dans le second membre du syst`me en incrments pour la cellule I de ltape de e e e prdiction des vitesses : EM(uk+1 , I) = E(un+1/2,k , I) (cf. navsto pour plus de dtails). e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


Sij

Code Saturne documentation Page 23/277

I F

Figure II.1.1: Dnition des direntes entits gomtriques pour les faces internes (gauche) et de bord e e e e e (droite).

un schma dcentr amont dordre 1 (upwind) : e e e


amont F ij ((u)n , a) = F ij ((u)n , a) a si (u)n . S I 0 ij ij a f,ij = a si (u)n . S < 0 J ij ij

o` : u

un schma centr pur : e e


centr e ((u)n , a) F ij ((u)n , a) = F ij

avec : a f,ij = ij aI + (1 ij )aJ un schma dcentr amont dordre 2, SOLU 2 (Second Order Linear Upwind) : e e e
SOLU F ij ((u)n , a) = F ij ((u)n , a) a + IF . (grad a) si (u)n . S I 0 I ij ij avec : a f,ij = a + JF . (grad a) si (u)n . S < 0 J J ij ij

La valeur de F bik est calcule avec : e af bik = aI si (u)nik . S bik 0 b a bik si (u)nik . S bik < 0 b

a bik est la valeur au bord donne directement par les conditions aux limites. e

Remarque 1 En schma centr, on crit en ralit (galit conservant lordre 1 en espace sur a) : e e e e e e e a f,ij = ij aI + (1 ij )aJ + On utilise le facteur Remarque 2
2 Extrapolation

1 [(grad a)I + (grad a)J ] . OF 2

1 pour des raisons purement de stabilit numrique. e e 2

de la valeur upwind au centre des faces.

J J

ik

Sb

I i

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 24/277

Un test de pente qui peut introduire des non linarits dans loprateur de convection permet de base e e culer du schma centr ou S.O.L.U. (dordre deux en maillage orthogonal) vers le schma dcentr e e e e e amont dordre un (sans blending). De plus, en mode standard, on utilise en tout point une valeur de a f,ij issue dune moyenne barycentrique entre la valeur dcentre amont et la valeur centre (blending), e e e suivant le souhait de lutilisateur (variable BLENCV dans le sous-programme usini1).

1.2.2 Partie diusive


De mme, la partie diusive peut scrire (au signe pr`s) : e e e div( grad a) d =
i jV ois(i)

D ij ( , a) +
kb (i)

D bik (, a)

avec : D ij ( , a) = ij et : D bik ( , a) = bik a bik a I S bik IF (II.1.5) aJ aI S ij IJ (II.1.4)

en conservant les notations prcdentes et avec S ij norme du vecteur S ij , S bik norme du vecteur S bik , e e a bik valeur au bord donne directement par les conditions aux limites. e

1.3

Mise en uvre

On rappelle le rle des variables suivantes, intervenant lors de dirents tests : o e IRCFLP, issu du tableau IRCFLU ; indique pour la variable considre si on reconstruit les ux de ee convection et de diusion = 0 : on ne reconstruit pas = 1 : on reconstruit ICONVP, issu du tableau ICONV ; indique si on convecte ou non la variable. = 0 : on ne convecte pas = 1 : on convecte IDIFFP, issu du tableau IDIFF ; indique si on prend en compte la diusion ou non pour la variable. = 0 : on ne diuse pas = 1 : on diuse IUPWIN indique localement dans bilsc2 (pour viter des calculs inutiles) si, pour la variable cone sidre ` convecter, on choisit le schma upwind pur (dcentr amont) ou non. ee a e e e = 0 : on nest pas en upwind pur = 1 : on travaille en upwind pur ISCHCP, issu du tableau ISCHCV ; indique, pour la variable considre ` convecter, quel type de ee a schma convectif dordre deux sur maillage orthogonal on choisit ( nest utile que si BLENCP > 0 ). e = 0 : on travaille avec le schma S.O.L.U. (Second Order Linear Upwind ) dit dcentr amont e e e dordre deux = 1 : on travaille en centr e Dans ces deux cas, le coecient de blending BLENCP est ` fournir dans usini1. a BLENCP, issu du tableau BLENCV ; indique le pourcentage de schma convectif centr ou S.O.L.U. e e que lon veut prendre en compte. Ce coecient de pondration est compris entre 0 et 1. e ISSTPP, issu du tableau ISSTPC ; indique si lon veut viter le test de pente qui fait basculer le e schma convectif du second ordre vers le schma upwind si le test est positif. e e = 0 : on travaille avec le test de pente systmatiquement e = 1 : on travaille sans test de pente

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 25/277

1.3.1 Calcul du gradient G c,i de la variable a


Le gradient de la variable a traite intervient dans le calcul du bilan explicite. Un appel au souse programme grdcel qui permet de calculer cette quantit et de la stocker dans le tableau (DPDX, DPDY, e DPDZ) est donc ralis lorsque le calcul de ce gradient est ncessaire, cest-`-dire : e e e a si loption convection est active avec un schma non upwind pur (ICONVP = 0 et IUPWIN = 0) e e et, si on veut reconstruire les ux (IRCFLP = 1), ou si on veut utiliser le schma S.O.L.U. (ISCHCP = 0), e ou si on se sert du test de pente (ISSTPP = 0), ou : sil y a de la diusion et si on veut reconstruire les ux (IDIFFP = 0 et IRCFLP = 1). Sinon, le tableau (DPDX, DPDY, DPDZ) est mis ` zro. a e

1.3.2 Calcul du gradient dcentr G amont de la variable a e e c,i


On dsigne par G amont le gradient dcentr de la variable a, pour la cellule i . Il est stock dans le e e e e c,i tableau (DPDXA, DPDYA, DPDZA). On dnit galement les scalaires a amont et a amont par : e e ij bik |i | G amont c,i
df e

a amont S ij + ij
jV ois(i) kb (i)

a amont S bik bik

(II.1.6)

Apr`s initialisation ` zro, G amont est calcul uniquement lorsque lutilisateur dsire travailler e a e e e c,i en convection avec une mthode faisant intervenir un schma centr ou S.O.L.U. et en e e e eectuant un test de pente. Pour chaque cellule i , sont calcules les deux quantits aIF (variable PIF) et aJF (variable PJF), e e valeurs ` la face dnies par : a e aIF = aI + IF . (grad a) I aJF = aJ + JF . (grad a) J Suivant le signe sn du ux de masse (u)n . S ij , on aecte aIF ou aJF ` la valeur a amont de lexpression a ij ij ij a amont S ij . ij
jV ois(i)

a amont = ij

aI + IF . (grad a) I si sn = 1 ij aJ + JF . (grad a) J si sn = 1 ij

Quant aux termes de bord, ils sont calculs classiquement, en conservant les notations adoptes dans e e les autres sous-programmes, comme suit :
kb (i)

a amont S bik bik

=
kb (i)

(INC A b,ik + B b,ik aI ) S bik INC A b,ik + B b,ik aI + B b,ik II . G c,i S bik
kb (i)

Dans les tableaux (COEFAP, COEFBP) sont stocks (A b,ik , B b,ik )kb (i) , dans les tableaux (DIIPBX, e DIIPBY, DIIPBZ) le vecteur II , dans SURFBO les surfaces (S bik )kb (i) .

1.3.3 Assemblage des ux numriques convectifs et diusifs e


Les contributions du bilan explicite [div( (u)n a)+div( grad a)] sont calcules et ajoutes au tableau e e second membre SMBR, qui a dj` t initialis avant lappel ` BILSC2 (par les termes sources explicites eaee e a

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 26/277

par exemple, etc...). La variable FLUX regroupe les parties convective et diusive des ux numriques. Elle se calcule e classiquement sur les faces purement internes dans un premier temps, puis sur les faces de bord. Les indices i et j sont reprsents respectivement par II et JJ. e e Pour une prise en compte (lorsque ncessaire) aise du signe sn du ux de masse (u)n . S ij , on utilise e e ij ij les relations suivantes : Pour un rel quelconque b, on a : e = b+ + b avec b+ = max (b, 0), b = min (b, 0) b | b| = b+ b 1 + = [ b + | b| ] b 2 1 b = [ b |b | ] 2 Dans ce sous-programme, b reprsente le ux de masse FLUMAS(IFAC) pour une face interne IFAC (ree spectivement FLUMAB(IFAC) pour une face IFAC de bord) ; b+ est stock dans FLUI et b dans FLUJ. e pour une face purement interne ij (IFAC) Il sagit de calculer : F ij ((u)n , a)
jV ois(i) jV ois(i)

D ij ( , a) =
jV ois(i)

(u)n . S ij ij

a f,ij ij

aJ aI S ij IJ

La quantit sur laquelle porte la somme correspond ` : e a FLUX = ICONVP . [ FLUI . PIF + FLUJ . PJF ] + IDIFFP . VISCF(IFAC) . [ PIP PJP ] (II.1.7)

quelque soit le schma convectif choisi, celui-ci impactant seulement les aectations des quantits PIF e e (valeur ` la face de a utilise quand b est positif) et PJF (valeur ` la face de a utilise quand b est a e a e S ij . ngatif). PIP reprsente aI , PJP aJ et VISCF(IFAC) ij e e IJ La partie diusive tant traite de faon identique (soit en ne reconstruisant pas, soit en reconstrue e c isant), seul le schma numrique relatif ` la convection di`re. e e a e pour une face de bord ik (IFAC) On soccupe alors des termes : F bik ((u)n , a)
kb (i) kb (i)

D bik (, a) =
kb (i)

(u)nik . S bik b

af bik bik

a bik a I S bik IF

avec : aI a b1ik a bik Les coecients (A b,ik , B b,ik )kb (i) = aI + II . G c,i = INC A b,ik + B b,ik aI = INC Adif f + B dif f aI b,ik b,ik traduisent les conditions aux limites as3

(Adif f , B dif f )kb (i) b,ik b,ik

socies ` a (respectivement au ux de diusion de a). e a De mme, la quantit sur laquelle porte la somme correspond ` : e e a FLUX = ICONVP . [ FLUI . PVAR(II) + FLUJ . PFAC ] + IDIFFP . VISCB(IFAC) . [ PIP PFACD ] o` PFAC reprsente a b1ik , PIP aI , PFACD a bik et VISCB(IFAC) bik u e
3 cf.

(II.1.8)

S bik . IF Ce traitement est commun ` tous les schmas, car les valeurs aux bords ne sont fonction que des a e
clptur pour plus de dtails. La distinction na eectivement lieu quen mod`le k e e pour la vitesse.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 27/277

conditions aux limites et F bik est tr`s simpli (upwind)4 . e e Il reste donc ` dterminer, lorsque loption convection est active (ICONVP = 1), les valeurs ` afa e e a fecter aux variables PIF et ` PJF, pour toute face IFAC interne commune ` la cellule i et ` la cellule a a a j .

Calcul du ux en upwind pur IUPWIN = 1


Dans ce cas, aucune reconstruction nest ncessaire puisque seules les valeurs PVAR(II) et PVAR(JJ) e au centre des cellules interviennent. PIF = PVAR(II) PJF = PVAR(JJ) (II.1.9)

La variable INFAC comptabilise le nombre de calculs eectus en upwind pur, pour impression dans e le listing. Pour obtenir le ux numrique global FLUX (convectif + diusif) associ, on eectue les e e oprations suivantes : e calcul des vecteurs II et JJ, calcul du gradient facette (DPXF, DPYF, DPZF) demi-somme des gradients volumiques G c,i et G c,j , calcul des valeurs ventuellement reconstruites aI et aJ (variables PIP et PJP respectivement) e donnes par : e 1 (II.1.10) aK = aK + IRCFLP . KK . ( G c,i + G c,j ) K = I et J 2 calcul des quantits FLUI et FLUJ, e calcul du ux FLUX via (II.1.7). Lassemblage dans le second membre SMBR suit, en tenant compte de lexpression (II.1.1)5 .

Calcul du ux en centr ou S.O.L.U. (IUPWIN = 0) e


Les deux schmas possibles dordre deux sur maillage orthogonal sont ici soit le centr, soit le second e e ordre dcentr amont (S.O.L.U.). e e Dans les deux cas, on eectue les oprations suivantes : e calcul des vecteurs II, tableau (DIIPFX, DIIPFY, DIIPFZ) et JJ, tableau (DJJPFX, DJJPFY, DJJPFZ) calcul du gradient facette (DPXF, DPYF, DPZF) demi-somme des gradients volumiques G c,i et G c,j , calcul des valeurs ventuellement (si IRCFLP = 1) reconstruites aI et aJ (variables PIP et PJP e respectivement) donnes par : e aK = aK + IRCFLP . KK . 1 ( G c,i + G c,j ) 2 K = I et J (II.1.11)

calcul des quantits FLUI et FLUJ. e sans test de pente (ISSTPP = 1) en centr (ISCHCP = 1) e Les valeurs des variables PIF et PJF sont gales et calcules ` laide du coecient de pondration ij e e a e comme suit : PIF = ij . PI + (1 ij ) . PJ (II.1.12) PJF = PIF en S.O.L.U. (ISCHCP = 0)
4 En eet, a f b ik 5 notamment du

vaut aI si (u)n . S bik bik signe oppos de B . e

0, a b1ik sinon.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 28/277

Apr`s avoir dtermin les vecteurs IF et JF , les valeurs des variables PIF et PJF sont calcules e e e e comme suit : PIF PJF = PI + IF . G c,i = PJ + JF . G c,j (II.1.13)

On reconstruit systmatiquement PIF et PJF an dviter de travailler en upwind pur, i.e. cette fore e mule est applique mme lorsque lutilisateur ne veut pas reconstruire (IRCFLP = 0). e e avec test de pente (ISSTPP = 0) La dmarche est identique ` celle dcrite dans le paragraphe prcdent, avec en plus, un calcul de e a e e e test de pente qui fait rebasculer localement (mais systmatiquement) sous certains crit`res le schma e e e centr ou S.O.L.U. choisi en schma upwind pur. e e calcul du test de pente e Lgalit (II.1.6) peut scrire, sur une cellule i purement interne, avec sn = sgn (u)n . S ij : e e ij ij |i | G amont c,i =
jV ois(i)

a amont S ij ij 1 n ( s +1 ) 2 ij 1 n ( s +1 ) 2 ij aIF + 1 n ( s 1 ) aJF 2 ij S ij

=
jV ois(i)

=
jV ois(i)

( aI + IF . (grad a) I ) + 1 ( sn 1 ) ( aI + JF . (grad a) J ) S ij ij 2

Sur une cellule i de voisins (j )jV ois(i) , le test de pente classique consiste ` reprer les non monoa e tonies de la variable a en tudiant le signe du produit scalaire des deux gradients volumiques G c,i et e G c,j . Sil est ngatif, on rebascule en schma upwind, sil est positif, on travaille en schma centr ou e e e e S.O.L.U.. Une autre dmarche garantissant galement la monotonie de la solution est dappliquer ce crit`re aux e e e gradients dcentrs G amont ou ` leur projection sur la normale ` la face ( G amont . S kl ). e e a a c,k c,k On tudie alors le signe du produit G amont . G amont ou du produit ( G amont . S ij ) . ( G amont . S ij ) . e c,i c,j c,i c,j ee Le test de pente mis en uvre est bas sur la premi`re quantit, G amont . G amont (la seconde ayant t e e e c,i c,j abandonne, son champ daction paraissant moins large). Le choix dun test bas sur G amont . G amont e e c,i c,j est tir du raisonnement monodimensionnel suivant6 : e Soit p une fonction polynmiale de degr deux en x valant pI1 , pI , pI+1 aux points I 1, I, I + 1 o e dabscisses respectives xI1 , xI et xI+1 . Pour simplier, on supposera I en lorigine O ( xI = 0 ), le pas de discrtisation h constant, soit xI+1 = xI1 = h. De plus, on suppose que la vitesse est e oriente du point I vers le point I + 1, i.e. sn = 1. Cest pourquoi on consid`re les points I 1, I et e e ij I + 1 pour la face ij qui se trouve ente I et I + 1. Le signe du produit p (xI1 ) . p (xI+1 ) traduit la monotonie de la fonction p. Si ce produit est positif, la fonction est monotone et on travaille en centr ou en S.O.L.U., sinon, on repasse en schma upwind. e e En identiant les coecients du polynme ` laide des galits p (xI1 ) = pI1 , p (xI ) = pI , o a e e p (xI+1 ) = pI+1 , on obtient : p (xI1 ) p (xI+1 ) pI+1 pI1 2h pI+1 pI1 =+ 2h =+ + pI pI1 pI+1 pI h h pI pI1 pI+1 pI h h

(II.1.14)

6 Une information provenant de la drive seconde permettrait dtudier plus nement les comportements et notame e e ment les variations brusques de a.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 29/277

soit : p (xI1 ) = G c,i + p (xI+1 ) = G c,i pI+1 pI h pI+1 pI amont G c,i h G amont c,i (II.1.15)

Or : pI+1 pI reprsente la drive dcentre au point I + 1, directement accessible par les valeurs de p e e e e e h dans les cellules voisines de la face ij, pI+1 pI1 la valeur de la drive centre (au sens volumes nis) au point I, soit G c,i , e e e 2h pI pI1 la valeur de la drive dcentre (au sens volumes nis) au point I, soit G amont par e e e e c,i h dnition. e Le test de pente relatif ` lexpression p (xI1 ) . p (xI+1 ) se traduit donc par ltude du signe de a e lexpression T P 1d : T P 1d = pI+1 pI pI+1 pI ] . G c,i [ G amont ] c,i h h pI+1 pI 2 = |G c,i |2 ( G amont ) c,i h G c,i + [ G amont c,i

(II.1.16)

En raisonnant de faon analogue, une extension possible en dimension suprieure consiste ` remplacer c e a les valeurs G c,k et G amont par ( G c,k . S kl ) et ( G amont . S kl ) respectivement. Ce qui conduit ` la a c,k c,k + formule T P 3d : aJ aI T P + = (G c,i . S ij )2 (G amont . S ij S ij )2 (II.1.17) c,i 3d IJ ceci pour (u)n . S ij > 0. ij e a De mme, on peut dduire une formulation T P associe ` (u)n . S ij < 0, dnie par : e e e ij 3d T P = (G c,j . S ij )2 (G amont . S ij c,j 3d aJ aI S ij )2 IJ (II.1.18)

Sont introduites les variables TESTI, TESTJ et TESTIJ qui valent : TESTI = G amont . S ij c,i TESTJ = G amont . S ij c,j TESTIJ = G amont . G amont c,i c,j

(II.1.19)

La quantit TESQCK correspondant ` T P 3d , est calcule dynamiquement, en fonction du signe du ux e a e de masse sn , an de dcentrer correctement. e ij alors : si (u)n . S ij > 0 et ij si (G c,i . S ij )2 (G amont . S ij c,i
TESQCK

aJ aI S ij )2 < 0 ou (G amont . G amont ) < 0, c,i c,j IJ

ou : si (u)n . S ij < 0 et ij si (G c,j . S ij )2 (G amont . S ij c,j


TESQCK

aJ aI S ij )2 < 0 ou (G amont . G amont ) < 0, c,i c,j IJ

alors on passe en upwind pur : PIF = PVAR(II) PJF = PVAR(JJ) (II.1.20)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 30/277

et INFAC est incrment. e e sinon : on aecte les valeurs en centr ou S.O.L.U. comme prcdemment : e e e en centr (ISCHCP = 1) e Les valeurs des variables PIF et PJF sont gales et calcules ` laide du coecient de e e a pondration ij : e PIF = ij . PI + (1 ij ) . PJ (II.1.21) PJF = PIF en S.O.L.U. (ISCHCP = 0) Apr`s avoir dtermin les vecteurs IF et JF , les valeurs des variables PIF et PJF sont e e e calcules comme suit : e PIF = PI + IF . G c,i (II.1.22) PJF = PJ + JF . G c,j On reconstruit systmatiquement PIF et PJF an dviter de travailler en upwind pur, i.e. e e cette formule est applique mme lorsque lutilisateur ne veut pas reconstruire (IRCFLP = 0). e e Que lon active le test de pente ou pas, lorsque loption schma centr ou S.O.L.U. est active, un e e e coecient de blending (BLENCP), fourni par lutilisateur et compris entre 0 et 1, permet de panacher si on le souhaite, le schma considr et le schma dcentr amont (upwind pur) suivant la formule : e ee e e e PIF PJF = BLENCPP IF (centre = BLENCPP JF
(centre ou SOLU ) ou SOLU )

+ (1 BLENCP) PII + (1 BLENCP) PJJ

(II.1.23)

calcul des quantits FLUI et FLUJ, e calcul du ux FLUX via (II.1.7). Lassemblage dans le second membre SMBR suit, en tenant compte de lexpression (II.1.1)7 . Remarque Pour plus dinformation sur les schmas convectifs et le test de pente dans Code Saturne (version 1.1), e on pourra se reporter au rapport EDF HI-83/04/020 (F. Archambeau, 2004).

7 notamment

du signe oppos de B . e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 31/277

1.4

` Points a traiter

Schma de convection e Schma dcentr amont (upwind pur) e e e Comme tout schma dordre un, il est robuste, mais diuse beaucoup numriquement. e e Schma centr ou S.O.L.U. e e Cette classe de schmas peut gnrer des oscillations numriques, qui peuvent provoquer lexplosion e e e e du calcul. Elle peut galement gnrer des dpassements non physiques sur des grandeurs scalaires e e e e physiques. Compte-tenu de ces dfauts et du non respect du principe du maximum, dautres schmas sont en e e cours de test et dintgration an daugmenter la qualit du schma propos ` lutilisateur. e e e ea Schma de diusion e La formule : D ij ( , a) = ij nest dordre 2 que pour ij = aJ aI S ij IJ

(II.1.24)

1 . Une correction ` apporter pourrait tre dcrire : a e e 2 aJ aI 1 G f,ij . S ij = (grad a) ij = . S ij + ( ij ) [(grad a)I (grad a)J ] . S ij 2 IJ avec un limiteur de gradient et un calcul de ij ne dgradant pas lordre. e Rcriture informatique ee

(II.1.25)

An damliorer le temps C.P.U., un eort peut tre fait au niveau de lcriture des boucles. Notame e e ment, il existe un test IF dans une boucle sur la variable IFAC quil faudra regarder. Calcul du gradient intervenant lors de la reconstruction des ux diusifs Pourquoi prend-on lexpression valeurs reconstruites aI ou aJ 1 ( G c,i + G c,j ) au lieu de G c,k , pour k = i ou pour k = j dans les 2 de (II.1.10) et (II.1.11)?

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 32/277

2- Sous-programme clptur

2.1

Fonction

Ce sous-programme est ddi au calcul des conditions aux limites en paroi. On utilise le formalisme e e introduit dans CONDLI pour les conditions aux limites gnrales. e e Par conditions aux limites en paroi, on entend ici lensemble des conditions aux limites pour la vitesse, les grandeurs turbulentes (k, , Rij ), la temprature lorsquelle a une valeur de paroi impose (ou e e lenthalpie et plus gnralement les VarScalaires1 ` traiter en paroi en prenant en compte une loi de e e a similitude pour la couche limite associe). Pour les VarScalaires, en particulier, lorsque les conditions e aux limites de paroi sont du type Neumann (homog`ne ou non), elles sont traites dans condli et on e e ne sy intresse donc pas ici. En particulier, les conditions aux limites des VarScalaires reprsentant la e e variance de uctuations dautres VarScalaires ne sont pas traites ici car leur traitement en paroi est e de type Neumann homog`ne. e On indique comment sont calculs les couples de coecients Ab et Bb qui sont utiliss pour le calcul e e de certains termes discrets des quations ` rsoudre et qui permettent en particulier de dterminer une e a e e valeur associe aux faces de bord fb,int (en un point localis au centre de la face de bord, barycentre e e de ses sommets) par la relation fb,int = Ab + Bb fI (fI est la valeur de la variable au point I , projet e du centre de la cellule jouxtant le bord sur la droite normale ` la face de bord et passant par son a centre : voir la gure II.2.1).
Sb I I y fI F f b,int

Bord du domaine de calcul


Domaine de calcul

Coefficients dechange h int h b

himp,ext

Figure II.2.1: Cellule de bord.

2.2

Discretisation

Notations
1 Comme dans condli, on dsignera ici par VarScalaire toute variable solution dune quation de convection-diusion e e autre que la vitesse, la pression et les grandeurs turbulentes k, et Rij . La dnomination VarScalaire pourra en e particulier se rapporter ` la temprature, ` lenthalpie ou ` un scalaire passif. a e a a

fb,ext

n normale sortante de norme 1 fimp,ext

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 33/277

La vitesse de la paroi est note v p . On la suppose projete dans le plan tangent ` la paroi (si elle ne e e a lest pas, le code la projette). La vitesse du uide est note u. Lindice I, I ou F dsigne le point auquel elle est estime. La e e e composante tangentielle par rapport ` la paroi est note u . La vitesse du uide dans le rep`re li ` a e e ea la paroi (vitesse relative) est note ur = u v p . e Le rep`re orthonorm li ` la paroi est not R = ( , n, b). e e ea e n = n est le vecteur norm orthogonal ` la paroi et dirig vers lintrieur du domaine de calcul. e a e e = 1 e e [ur (ur . n)] est le vecteur norm port par la projection de la vitesse I I ur (ur . n) I I r relative en I , uI , dans le plan tangent ` la paroi (i.e. orthogonal ` n) : voir la gure II.2.1. a a

b est le vecteur norm compltant le rep`re direct. e e e La distance adimensionnelle limite sparant la sous-couche visqueuse de la zone logarithmique est note e e + ylim . Elle vaut 1/ (avec = 0, 42) en gnral (valeur de continuit du gradient de vitesse) et 10,88 e e e en LES (valeur de continuit de la vitesse). e Dans le cas du mod`le ` deux chelles de vitesse, e a e - on note uk la vitesse de frottement en paroi obtenue ` partir de lnergie turbulente. On note u a e ur ,I + la vitesse de frottement en paroi dtermine ` partir de la relation = f (yk ). e e a u
+ + - La grandeur yk reprsente une distance ` la paroi adimensionnelle, soit yk = e a

uk I F ( est la viscosit cinmatique molculaire prise au centre I de la cellule jouxtant la face de bord). La e e e fonction f traduit la forme idale du prol de vitesse . Elle est approche par morceaux par la e e 1 + loi logarithmique f (z) = f1 (z) = ln(z) + 5, 2 pour z > ylim et la loi linaire f (z) = f2 (z) = z e sinon.

- Les deux chelles de vitesse uk et u sont simples ` calculer mais leur obtention ncessite la e a e connaissance de lnergie turbulente kI au centre de la maille jouxtant la face de bord (en Rij , e cest la demi-trace du tenseur de Reynolds qui est utilise). e - Le mod`le ` deux chelles est le mod`le par dfaut dans Code Saturne. Il permet souvent, et en e a e e e particulier dans les cas avec transfert thermique, de diminuer les eets de certains dfaut lis au e e mod`le k . e On se sert plus bas de u et uk pour les conditions aux limites portant sur la vitesse et les scalaires (temprature en particulier). e Mod`le ` deux chelles de vitesse e e a1 1 4 2 uk = C kI r 1 u,I + + + = ln(yk ) + 5, 2 pour yk > ylim u u solution de r u + + ,I = y + pour yk ylim k u uk I F + et = 0, 42 avec C = 0, 09 yk = Dans le cas du mod`le ` une chelle de vitesse, e a e on note u lunique vitesse de frottement en paroi solution de lquation e y + reprsente une distance ` la paroi adimensionnelle, soit y + = e a ur ,I = f (y + ). La grandeur u

(II.2.1)

u I F ( est la viscosit cinmatique e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 34/277

molculaire prise au centre I de la cellule jouxtant la face de bord). La fonction f traduit la forme e idale du prol de vitesse comme pour le mod`le ` deux chelles de vitesses. On peut noter que cette e e a e vitesse de frottement, dun calcul plus dlicat (mthode de Newton), sobtient cependant sans faire e e rfrence aux variables turbulentes (k, , Rij ). Par commodit, on posera dans le cas du mod`le ` une ee e e a chelle uk = u . e On se sert plus bas de u et uk pour les conditions aux limites portant sur la vitesse et les scalaires (temprature en particulier). e Mod`le ` une chelle de vitesse e a e uk = u r 1 u,I + = ln(y + ) + 5, 2 pour y + > ylim u u solution de r u,I + = y+ pour y + ylim u u IF et = 0, 42 avec y + =

(II.2.2)

Remarque : Il faut noter que le sous-programme utilisateur usruet permet de modier la valeur des chelles de vitesses. On donne ci-dessous trois exemples sur la base du mod`le ` deux chelles de e e a e vitesses. Ainsi, on peut implanter une loi de paroi spcique de type : e u,I = g(y + ) u en imposant simplement u = u,I /g(y + ) (les valeurs de u,I et de y + sont disponibles en argument de usruet). Il est galement possible dutiliser une loi de paroi rugueuse telle que : e u,I 1 y = ln( ) + 8, 5 u o` est la hauteur des asprits en paroi : il sut dimposer u = u,I / u e e 1 y ln( ) + 8, 5 , la + valeur de y tant dduite de celle de y , disponible en argument, par la relation y = y + . e e uk

On pourrait encore utiliser une corrlation plus globale de type Colebrook : e u = udeb / 4 2log10 2, 51 + + 3, 7 DH 2 2DH

o` DH est le diam`tre hydraulique adimensionn ` laide de uk et de , udeb la vitesse dbitante u + e ea e moyenne et la rugosit relative. e DH Conditions aux limites pour la vitesse en k On consid`re tout dabord les conditions utilises dans le cas dun calcul ralis avec le mod`le k . e e e e e Ce sont en eet les plus complexes et les plus gnrales. e e Les conditions aux limites sont ncessaires pour imposer au bord la contrainte tangentielle = I u uk e adquate dans lquation de quantit de mouvement2 (I est la masse volumique au centre de la cellule e e e
2 Proposition de modication des conditions aux limites de paroi turbulente pour le Solveur Commun dans le cadre du mod`le k standard, rapport EDF HI-81/00/019/A, 2000, M. Boucker, J.-D. Mattei. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 35/277

I). Le terme qui ncessite des conditions aux limites est celui qui contient la drive de la vitesse dans e e e la direction normale ` la paroi, soit3 : (I + t,I )grad u n. Il appara au second membre de lquation a t e de quantit de mouvement usuelle (voir bilsc2 et preduv). e Dans le cas o` le mod`le k a tendance ` surestimer la production de lnergie turbulente, lchelle de u e a e e longueur du mod`le, Lk , peut devenir signicativement plus grande que lchelle thorique maximale e e e des tourbillons de la couche limite turbulente Ltho . On note : e 3 k2 Lk = C (II.2.3) L tho = I F e Dans le cas o` Lk > Ltho , on a donc t,I > lm avec t,I la viscosit turbulente du mod`le k u e e e t au point I et lm = I Ltho uk la viscosit turbulente du mod`le de longueur de mlange. En outre, la e e e e t contrainte tangentielle peut scrire en faisant appara la viscosit turbulente, soit : e tre e = I u u k = u I I F uk I F
lm t

(II.2.4)

Lchelle de viscosit introduite dans la contrainte est alors en contradiction avec celle dduite de la e e e turbulence calcule alentour par le mod`le. On prf`re d`s lors crire, en utilisant lchelle de longueur e e ee e e e du k chaque fois quelle est infrieure ` la limite Ltho : e a e = u max(lm , t,I ) t I F (II.2.5)

On peut alors utiliser cette valeur pour le calcul du ux diusif qui en dpend dans lquation de e e Navier-Stokes : (I + t,I )grad u n = (II.2.6) Or, le gradient de vitesse (gradient ` la face de bord) est calcul dans le code sous la forme suivante : a e (I + t,I )grad u n = (I + t,I ) (uF uI ) IF (II.2.7)

Du rapprochement de (II.2.6) et de (II.2.7) on tire alors la valeur de uF ` imposer, soit uF,f lux (respect a du ux de quantit de mouvement) : e uF,f lux IF I + t,I u max(lm , t,I ) = uI t (I + t,I ) = uI

(II.2.8)

En ralit, une approximation supplmentaire est ralise, qui consiste ` imposer la vitesse normale e e e e e a e a nulle ` la paroi et ` utiliser lquation (II.2.8) projete sur le plan tangent ` la paroi, soit : a a e uF,f lux = u,I u max(lm , t,I ) t (I + t,I ) (II.2.9)

De plus, si la valeur obtenue pour y + est infrieure ` ylim une condition dadhrence est applique. e a + e e Enn, on peut galement faire appara la vitesse de la paroi dans lexpression nale : e tre Conditions aux limites sur la vitesse de type ux (k ) + si y + ylim uF,f lux = v p u ur max(lm , t,I ) sinon uF,f lux = v p + t ,I (I + t,I )
3 Le

(II.2.10)

terme en gradient transpos est trait dans vissec et ne sera pas considr ici. e e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 36/277

Un premier couple de coecients Af lux et Bf lux sen dduit (pour chaque composante de vitesse e sparment) et il nest utilis que pour le calcul du terme dpendant de la contrainte tangentielle (voir e e e e bilsc2) : Coecients associs aux conditions aux limites sur la vitesse de type ux(k ) e + si y + ylim Af lux = v p u ur max(lm , t,I ) sinon Af lux = v p + t ,I (I + t,I ) B f lux = 0 (II.2.11) On a vu ci-dessus comment imposer une condition ` la limite permettant de calculer correctement le a terme en contrainte. Une analyse supplmentaire est ncessaire pour le calcul des gradients de vitesse. e e On cherche ` trouver une valeur en face de bord qui permette dobtenir, avec la formulation adopte a e pour le gradient, la valeur de la production turbulente la plus proche possible de la valeur thorique, e elle-mme dtermine en utilisant la loi logarithmique, pour valuer la drive normale de la vitesse e e e e e e tangentielle. Ainsi, on dnit (au point I) : e Ptho = I u uk e u n
I

= I

uk (u )2 I F

(II.2.12)

Par ailleurs, le terme prpondrant de la production calcule dans la cellule I est, pour les situations e e e classiques (y est lordonne sur laxe de vecteur directeur n), e Pcalc = t,I u y
2

(II.2.13)
I

Or, le gradient normal de la vitesse tangentielle (gradient cellule) est calcul dans le code en volumes e nis et son expression dans le cas dun maillage orthogonal et rgulier est la suivante (voir les notations e sur la gure II.2.2) : Pcalc = t,I u,G u,F 2d
2

= t,I

u,I + u,J 2u,F 4d

(II.2.14)

On suppose alors que u,J peut tre obtenu ` partir de u,I et du gradient normal de u valu en G e a e e a ` partir de la loi logarithmique, soit : u,J = u,I + IJ . (y u )G + O(IJ 2 ) u,I + IJ . y et lon obtient alors : Pcalc = t,I = t,I
u u,I + u,I + 2d 2d 2u,F 4d

u ln(y + ) + 5, 2

= u,I + 2d
G

u (II.2.15) 2d

2u,I + 2 u 2u,F 2 4d

= t,I

u,I +

u 2

u,F

(II.2.16)

2d

On rapproche alors les quations (II.2.12) et (II.2.16) pour imposer que la production calcule soit gale e e e a ` la la production thorique. On tend sans prcaution les formules prcdentes aux maillages non e e e e e orthogonaux (la vitesse en I est alors simplement prise en I ). On obtient alors lexpression suivante pour u,F : u,F,grad = u,I u 2 I uk I F 1 t,I 2 (II.2.17)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 37/277

Bord du domaine de calcul


Domaine de calcul

Figure II.2.2: Cellule de bord - Maillage orthogonal.

On impose dautre part que le gradient reste au moins aussi raide que celui donn par la drive e e e normale du prol de vitesse thorique (logarithmique) en I : e u u y u = y ( ln(y + ) + 5, 2) = , soit donc : I F u max 1, 2

u,F,grad = u,I

I u k I F 1 t,I 2

Enn, on impose une borne infrieure pour la vitesse en paroi, issue de lhypoth`se que lon se trouve e e en zone logarithmique :

u,F,grad = max u

1 u + ln(ylim ) + 5, 2 , u,I max 1, 2

I u k I F 1 t,I 2

La vitesse normale ` la paroi est impose nulle. De plus, si la valeur obtenue pour y + est infrieure ` a e e a + ylim une condition dadhrence est applique. Enn, on peut galement faire appara la vitesse de e e e tre la paroi dans lexpression nale : Conditions aux limites sur la vitesse de type gradient(k ) + si y + ylim uF,grad = v p u F,grad = v p + max u 1 u + ln(ylim ) + 5, 2 , ur max 1, 2 ,I I u k I F 1 t,I 2 sinon (II.2.20) Un second couple de coecients Agrad et Bgrad sen dduit (pour chaque composante de vitesse e sparment) et est utilis chaque fois que le gradient de la vitesse est ncessaire (hormis pour les e e e e termes dpendant de la contrainte tangentielle, traits dans bilsc2 au moyen des coecients Af lux et e e

d/2

d/2

n
normale sortante de norme 1

(II.2.18)

(II.2.19)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 38/277

Bf lux ) : Coecients associs aux conditions aux limites sur la vitesse e de type gradient(k ) + si y + ylim Agrad = v p A grad = v p + 1 I u k I F 1 u + max u max 1, 2 ln(ylim ) + 5, 2 , ur ,I t,I 2 B grad = 0

sinon (II.2.21)

Conditions aux limites pour la vitesse en Rij Les conditions aux limites pour la vitesse avec le mod`le Rij sont plus simples car dun seul type. e Avec les mmes notations que prcdemment, on souhaite que le gradient de vitesse tangentielle qui e e e sera calcul en I et qui servira ` valuer la production turbulente soit cohrent avec la loi logarithmique e ae e donnant le prol de vitesse tangentielle idal. Le gradient thorique est : e e u y u I F

Gtho = e

=
I

(II.2.22)

Or, le gradient normal de la vitesse tangentielle (gradient cellule) est calcul dans le code en volumes e nis et son expression dans le cas dun maillage orthogonal et rgulier est la suivante (voir les notations e sur la gure II.2.2) : Gcalc = u,I + u,J 2u,F u,G u,F = 2d 4d (II.2.23)

On suppose alors que u,J peut tre obtenu ` partir de u,I et du gradient normal de u valu en e a e e u G ` partir de la loi logarithmique, soit (voir lquation (II.2.15)) u,J = u,I + 2d a e et lon obtient 2d alors : u,I + u,I + 2d Gcalc = u u u 2u,I + 2 2u,F u,I + u,F 2u,F 2d 2 2 = = 4d 4d 2d

(II.2.24)

On rapproche alors les quations (II.2.22) et (II.2.24) pour obtenir une expression de u,F (on tend e e sans prcaution les formules prcdentes aux maillages non-orthogonaux, la vitesse en I tant alors e e e e simplement prise en I ) : 3u 2

u,F = u,I

(II.2.25)

La vitesse normale ` la paroi est impose nulle. De plus, si la valeur obtenue pour y + est infrieure ` a e e a + ylim une condition dadhrence est applique. Enn, on peut galement faire appara la vitesse de e e e tre la paroi dans lexpression nale : Conditions aux limites sur la vitesse (Rij ) + si y + ylim uF = v p 3u + v p sinon uF = ur ,I 2

(II.2.26)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 39/277

Un couple de coecients A et B sen dduit (pour chaque composante de vitesse sparment) : e e e Coecients associs aux conditions aux limites sur la vitesse (Rij ) e + si y + ylim A = vp 3u + v p sinon A = ur ,I 2 B=0

(II.2.27)

Conditions aux limites pour la vitesse en laminaire Lorsquaucun mod`le de turbulence nest activ, on travaille implicitement avec un mod`le ` une e e e a chelle de vitesse (il ny a pas de grandeur turbulente permettant dobtenir uk ) et on applique les e mmes conditions 4 quen Rij : le mod`le dgn`re seul. e e e e e

4 Cest-`-dire a

que les conditions aux limites sont exactement donnes par (II.2.26) et (II.2.27). e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 40/277

Conditions aux limites pour les variables k et (mod`le k standard) e

On impose sur k une condition de Dirichlet tire de la vitesse de frottement uk (se reporter ` e a lquation (II.2.1)), soit : e u2 k= k (II.2.28) 1 2 C On cherche ` imposer la drive normale de ` partir de la loi thorique suivante (voir les notations a e e a e sur la gure II.2.2) : u3 /( y) k (II.2.29) Gtho, = e y On utilise le point M pour imposer une condition ` la limite avec un ordre plus lev en espace. En a e e eet, la simple utilisation de la relation F = I + dy I + O(d2 ) conduit ` une prcision dordre 1. En a e utilisant les dveloppements limits suivants, on peut obtenir une prcision ` lordre 2. En eet : e e e a M d d2 2 = I y I + y I + O(d3 ) 2 82 d 2 d = F + y F + y F + O(d3 ) 2 8

(II.2.30)

Par dirence, ces relations conduisent ` e a d F = I (y I + y F ) + O(d3 ) 2 De plus, on a y I y F


2 = y M + dy M + O(d2 ) 2 = y M dy M + O(d2 )

(II.2.31)

(II.2.32)

La somme de ces deux derni`res relations permet dtablir y I + y F = 2y M + O(d2 ) et, en e e a e reportant dans (II.2.31), on obtient alors une expression de F ` lordre 2, comme souhait : F = I dy M + O(d3 ) (II.2.33)

On utilise alors la valeur thorique (II.2.29) pour valuer y M et on obtient alors la valeur ` imposer e e a au bord (d = I F ) : u3 k F = I + d (II.2.34) (d/2)2 Cette relation est tendue au cas de maillages non orthogonaux sans prcaution (ce qui doit dgrader e e e lordre en espace). Par ailleurs, la vitesse uk est annule pour y + e ux nul pour . On a nalement : Conditions aux limites sur les variables k et u2 k F = k 1 2 C u3 k F = I + I F (I F/2)2 + avec uk = 0 pour y + ylim
+ ylim , et on obtient donc une valeur nulle de k et un

(II.2.35)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 41/277

et les coecients associs e Coecients associs aux conditions aux limites sur les variables k et e u2 A = k k et Bk = 0 1 2 C u3 k A = I F et B = 1 (I F/2)2 + + avec uk = 0 pour y ylim

(II.2.36)

Conditions aux limites pour les variables Rij et (mod`le Rij standard) e

Pour les tensions de Reynolds, les conditions aux limites dans le rep`re local li ` la paroi sexpriment e ea sous la forme suivante (la notation R renvoie au rep`re local) : e n R = n Rnn = n Rbb = 0 et R n = u uk et R b = Rnb = 0 (II.2.37)

De plus, si la valeur obtenue pour y + est infrieure ` ylim , on annule toutes les tensions de Reynolds e a + au bord (on suppose que la contrainte turbulente est ngligeable devant la contrainte visqueuse). e Le passage au rep`re de calcul est systmatique mais relativement lourd (rotation dun tenseur) : on e e se reportera ` la documentation de clsyvt qui le dtaille. On se restreint ici ` une prsentation des a e a e conditions aux limites dans le rep`re local. e Ainsi, on cherche donc ` imposer les valeurs de bord suivantes : a Conditions aux limites sur les variables Rij + si y + ylim R,F = R,F = 0 ,F = R,I avec {, n, b} (sans sommation) R sinon n = u uk et R b = Rnb = 0 R

(II.2.38)

Pour la dissipation, la condition applique est identique ` celle utilise en k . On la rappelle e a e ci-dessous : Conditions aux limites sur la variable (Rij ) u3 k F = I + I F (I F/2)2 + avec uk = 0 pour y + ylim

(II.2.39)

Ces conditions aux limites peuvent tre imposes de mani`re explicite (par dfaut, ICLPTR=0) ou e e e e (semi-) implicite (ICLPTR = 1). Le choix standard (explicite) conduit aux valeurs suivantes5 des

notera que la valeur de nest pas reconstruite en I . On esp`re ainsi amliorer la stabilit car la variable e e e 1 ) et de faibles erreurs de reconstruction en I pourraient donc savrer e y particuli`rement pnalisantes. Il serait cependant ncessaire de vrier si la stabilit est remise en question avec la e e e e e reconstruction des gradients de gradrc. prsente un tr`s fort gradient en paroi ( e e

5 On

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 42/277

coecients A et B :

Coecients associs aux conditions aux limites explicites sur les variables Rij et e + Si y + ylim : AR = AR = 0 et BR = BR = 0 Sinon : et BR = 0 avec {, n, b} (sans sommation) AR = (R )I A = u uk et BR n = 0 R n AR b = ARnb = 0 et BR b = BRnb = 0 Et dans tous les cas : u3 k et B = 0 A = I + I F (I F/2)2 + avec uk = 0 pour y + ylim (II.2.40) Le choix semi-implicite conduit aux valeurs suivantes des coecients A et B. Elles ne di`rent des e prcdentes que pour les tensions de Reynolds diagonales et la dissipation. Dans le cas gnral, e e e e limplicitation de certaines composantes du tenseur dans le rep`re local se traduit par une implicitation e partielle pour toutes les composantes dans le rep`re global : e Coecients associs aux conditions aux limites semi-implicites e sur les variables Rij et + + ylim : Si y AR = AR = 0 et BR = BR = 0 Sinon : avec {, n, b} (sans sommation) et BR = 1 AR = 0 et BR n = 0 AR n = u uk AR b = ARnb = 0 et BR b = BRnb = 0 Et dans tous les cas : u3 k A = I F et B = 1 (I F/2)2 + avec uk = 0 pour y + ylim (II.2.41)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 43/277

Conditions aux limites pour les VarScalaires On ne traite ici que les conditions se prsentant sous la forme dune valeur impose (` la paroi ou e e a en retrait de celle-ci avec un coecient dchange externe ventuel). On se reporte aux notations de e e la gure II.2.1 et ` la prsentation gnrale disponible dans condli dont on ne reprend que la partie a e e e essentielle ci-dessous. La conservation du ux normal au bord pour la variable f scrit sous la forme : e himp,ext (fimp,ext fb,ext ) (condition de Dirichlet) rel impos e e hint (fb,int fI ) = hb (fb,ext fI ) = (condition de Neumann) imp,ext
int b

rel e

impos e

(II.2.42) On rarrange ces deux quations an dobtenir la valeur numrique fb,int = fF ` imposer en face de e e e a paroi, tant donnes les valeurs de fimp,ext et de himp,ext xes par lutilisateur et la valeur hb dicte e e e e par les lois de similitude qui seront dtailles plus bas. On prcise les coecients A et B qui sen e e e dduisent naturellement. e Conditions aux limites sur les VarScalaires hint + himp,ext (hr 1) hint himp,ext fimp,ext + fI avec hr = fb,int = hint + hr himp,ext hint + hr himp,ext hb
A B

(II.2.43)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 44/277

Principe de similitude : calcul de hb . Dans lexpression (II.2.43), seule reste ` dterminer la valeur de hb , celle de hint tant une valeur a e e numrique cohrente avec le mode de calcul des gradients aux faces et prcise dans condli (hint = e e e e ). La valeur de hb doit permettre de relier le ux ` lcart entre les valeurs fI et fb,ext en prenant a e IF en compte la couche limite (le prol de f nest pas toujours linaire) : e b = hb (fb,ext fI ) (II.2.44)

Les considrations suivantes sont prsentes en adoptant des notations gnrales. En particulier, le e e e e e C . Lorsque le scalaire f considr est la temprature, on ee e nombre de Prandtl-Schmidt est not = e a (voir condli) : C = Cp (chaleur massique), = (conductivit molculaire), e e = Cp = P r (nombre de Prandtl),

t = P rt (nombre de Prandtl turbulent), = + Cp t t T (ux en W m2 ). y

On sest appuy sur la rfrence Convection Heat Transfer, Vedat S. Arpaci and Poul S. Larsen, e ee Prentice-Hall, Inc. Le ux en paroi scrit, pour le scalaire f (le ux est positif sil est entrant dans le domaine uide, e comme lindique lorientation de laxe y) : = +C t t f = C y t + C t f y (II.2.45)

Pour la temprature, avec a = e

t et at = , on a donc, de mani`re quivalente : e e Cp t = Cp (a + at ) T y (II.2.46)

On introduit f an dadimensionner f , en utilisant la valeur du ux au bord b : f = Pour la temprature, on a donc : e T = b Cp uk (II.2.48) b C uk (II.2.47)

On divise alors les membres de lquation (II.2.45) par b . Pour le membre de gauche, on simplie en e utilisant le fait que le ux se conserve et donc que = b . Pour le membre de droite, on remplace b par sa valeur C uk f . Avec les notations : = on a : 1= 1 1 t + t t = t y+ = y uk f + y + f+ = f fb,ext f (II.2.49)

(II.2.50)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 45/277

+ Remarquons d`s ` prsent quavec les notations prcdentes, hb sexprime en fonction de fI : e a e e e

hb =

b C uk = + fb,ext fI fI

(II.2.51)

+ e Pour dterminer hb , on int`gre alors lquation (II.2.50) an de disposer de fI . Lunique dicult e e e 1 1 t consiste alors ` prescrire une loi de variation de K = + a . t

Dans la zone turbulente pleinement dveloppe (susamment loin des parois, pour y + e e hypoth`se de longueur de mlange permet de modliser les variations de t : e e e t = l 2 | U | = y u y

+ y2 ), une

(II.2.52)

De plus, les eets de diusion de f (ou eets conductifs lorsque f reprsente la temprature) sont e e 1 t 1 devant . On a donc nalement6 : ngligeables devant les eets turbulents : on nglige alors e e t K= y+ t (II.2.53)

+ Dans la zone de proche paroi (pour y + < y1 ), au contraire, la contribution turbulente devient 1 1 t devant . ngligeable devant la contribution molculaire et on nglige alors e e e t

Il serait possible de se limiter ` ces deux zones, mais Arpaci et Larsen sugg`rent damliorer le mod`le a e e e + + en introduisant une zone intermdiaire (y1 e y + < y2 ) dans laquelle on fait lhypoth`se suivante : e t = a1 (y + )3 o` a1 est une constante dont la valeur est obtenue ` partir de corrlations exprimentales : u a e e a1 = t 1000 (II.2.55) (II.2.54)

On a donc le mod`le suivant pour K (voir une illustration sur la gure 2.2) : e + 1 pour y + < y1 1 a1 (y + )3 + + + pour y1 y + < y2 K= t y+ + pour y2 y+ t

(II.2.56)

+ + Les valeurs de y1 et y2 sont obtenues en calculant les points dintersection des lois de variation utilises e pour K.

Lexistence de la zone intermdiaire dpend en particulier des valeurs de . Considrons tout dabord e e e les cas pour lesquels nest pas ngligeable devant 1. En pratique on consid`re > 0, 1 (cest le e e cas rencontr couramment lorsque le scalaire f reprsente la temprature de lair ou de leau dans e e e 1 devant les conditions normales de temprature et de pression). On suppose que lon peut ngliger e e + 3 a1 (y ) dans la zone intermdiaire. On obtient alors : e t
+ y1
6 On

1000

1 3

+ y2 =

1000 t

(II.2.57)

fait lapproximation que les dnitions de y + ` partir de u et de uk sont quivalentes. e a e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


14 12 10 8 K 6 4 2 0 y+
1

Code Saturne documentation Page 46/277

1/Pr 0.42 y+/Prt a1 (y+)**3/Prt

y+
2

10 y+

20

30

Figure II.2.3: Courbes (a + at )/ fonction de y + obtenues pour = 1 et t = 1. On int`gre lquation adimensionnelle (II.2.50) sous la mme hypoth`se et on obtient alors la loi e e e e donnant f + : + + + pour y + < y1 f = y + t + + f = a2 pour y1 y + < y2 (II.2.58) 2 a1 (y + )2 + f = t ln(y + ) + a3 pour y + y + 2 o` a2 et a3 sont des constantes dintgration, choisies de mani`re ` assurer la continuit du prol de u e e a e f+ : 2 2 t 1000 a2 = 15 3 a3 = 15 3 1 + ln (II.2.59) 2 t Plaons nous ` prsent dans le cas o` est tr`s petit devant 1. En pratique on suppose 0, 1 (cest c a e u e par exemple le cas des mtaux liquides pour lesquels la conduction thermique stend tr`s loin et qui e e e prsentent des valeurs du nombre de Prandtl de lordre de 0,01). La couche intermdiaire dispara e e t alors et labscisse du raccord entre la loi utilise en proche paroi et celle utilise loin de la paroi est e e donne par : e t + (II.2.60) y0 = On int`gre lquation adimensionnelle (II.2.50) sous la mme hypoth`se et on obtient alors la loi e e e e donnant f + : + + pour y + y0 f = y+ + t y (II.2.61) + + ln + y0 pour y0 < y + f+ = + y0

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 47/277

Ainsi donc, pour rsumer, le calcul de hb e hb = C uk b = + fb,ext fI fI (II.2.62)

+ + est ralis en dterminant fI ` partir de y + = yI selon les lois suivantes. e e e a

Si

0, 1, on utilise un mod`le ` deux couches : e a + f = y+ y+ t + ln + y0 f+ = + y0


+ y0 =

pour y +

+ y0

+ pour y0 < y +

(II.2.63)

avec

(II.2.64)

Si > 0, 1, on utilise un mod`le ` trois couches : e a + + f = y + t f = a2 2 a1 (y + )2 + f = t ln(y + ) + a3 avec 1 1000 3 + y1 = et a2 = 15 3


2 2

+ pour y + < y1 + + pour y1 y + < y2

(II.2.65)

pour

+ y2

+ y2 =

1000 t 1000 t

(II.2.66)

a3 = 15 3

t 2

1 + ln

(II.2.67)

2.3

Mise en uvre

On traite ici les variables IVAR sur les faces IFAC telles que ICODCL(IFAC,IVAR)=5. La vitesse de dlement (ventuellement nulle) de la paroi est tout dabord projete dans le plan e e e tangent ` la paroi. Ses trois composantes dans le rep`re de calcul sont stockes dans les tableaux a e e RCODCL(IFAC,IUIPH,1),RCODCL(IFAC,IVIPH,1)RCODCL(IFAC,IWIPH,1). On dtermine ensuite le rep`re local R. Pour chaque face, il est disponible dans les vecteurs e e (TX, TY, TZ), n (-RNX, -RNY, -RNZ), et b (T2X, -T2Y,-T2Z). Il faut noter que le troisi`me vecteur e nest ncessaire (et nest donc calcul) que lorsque le mod`le de turbulence Rij est utilis (pour la e e e e projection du tenseur dordre deux). Par ailleurs, si la norme de la vitesse tangentielle est infrieure ` e a la valeur arbitraire EPZERO (1012 ), lindicateur TXN0 est positionn ` 0 (il vaut 1 sinon) et le vecteur ea est pris - arbitraire, dans le plan perpendiculaire ` n en Rij (on utilise les composantes de n pour a construire ; si n est identiquement nul, le code sarrte) ; e - identiquement nul sinon. Une fois le rep`re local dtermin, le sous-programme clca66 est appel avec7 CLSYME =0 si le mod`le e e e e e Rij est activ, an de calculer la matrice ALPHA qui permettra, ` partir des valeurs du tenseur de e a Reynolds au points I , de calculer les valeurs ` imposer aux faces de bord. a On calcule ensuite les vitesses de frottement qui sont stockes dans UET (= u ) et dans UK (= uk ). Le e sous-programme causta permet de calculer la vitesse de frottement pour le mod`le ` une chelle de e a e
7 CLSYME = 0 permet de spcier quon traite les conditions de paroi et non des conditions de symtrie. On pourra se e e reporter ` CLSYVT pour les dtails de clca66. a e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 48/277

vitesse (IDEUCH=0). Pour le mod`le ` deux chelles (IDEUCH=1), le calcul (plus simple) de UET et de e a e UK est fait directement dans clptur. Le sous-programme utilisateur usruet permet alors de donner la main ` lutilisateur qui souhaiterait modier les chelles de vitesses (prise en compte dune paroi a e rugueuse, ou de variantes de la loi logarithmique par exemple). Dans le cas ou le mod`le ` une chelle de vitesse est actif, on impose UK=UET an de conserver la e a e cohrence du codage dans la suite du sous-programme. Nanmoins, dans le cas o` on se trouve dans la e e u sous-couche visqueuse, on force UK=0 ce qui permettra dobtenir une valeur nulle pour k et un ux nul pour (la valeur UET nest pas utilise, car la condition sur la vitesse devient une condition dadhrence e e et les tensions de Reynolds sont annules). Si lon se trouve dans la sous-couche visqueuse, on recalcule e UET (et YPLUS si lon est ` une chelle de vitesse) car lvaluation prcdente a t faite avec lhypoth`se a e e e e ee e que lon tait en zone logarithmique. e Les conditions aux limites pour la vitesse sont ensuite compltes. ee - En k , on aecte, pour les trois composantes de vitesse respectivement, ` a COEFA(IFAC,ICLUF), COEFA(IFAC,ICLVF) et COEFA(IFAC,ICLWF) les coecients Af lux issus de lanalyse relative ` la contrainte tangentielle. a De mme, les coecients Bf lux sont aects ` e e a COEFB(IFAC,ICLUF), COEFB(IFAC,ICLVF) et COEFB(IFAC,ICLWF). Les conditions aux limites issues de lanalyse portant directement sur le gradient de vitesse Agrad et Bgrad sont aectes ` e a COEFA(IFAC,ICLU), COEFA(IFAC,ICLV), COEFA(IFAC,ICLW) et COEFB(IFAC,ICLU), COEFB(IFAC,ICLV), COEFB(IFAC,ICLW). - Lorsque la vitesse tangentielle en I est infrieure ` EPZERO, lindicateur TXN0 est annul (sinon, e a e TXN0 vaut 1). De mme, quand la valeur de y + est infrieure ou gale ` 10, 88, lindicateur e e e a UNTURB est positionn ` 0 (sinon, il vaut 1). Ces deux indicateurs sont utiliss pour annuler les ea e coecients A et imposer des conditions dadhrence. e - la vitesse de dlement de la paroi est prise en compte dans les conditions aux limites (coecients e COEFA). Les conditions sur les grandeurs turbulentes sont ensuite compltes. Une prcision est ncessaire pour ee e e t le tenseur de Reynolds en Rij . En notation tensorielle on souhaite obtenir RF = Eloglo RF Eloglo , o` RF est le tenseur des contraintes ` imposer dans le rep`re de paroi local et Eloglo la matrice de u a e passage. Le tenseur dans le rep`re local est dni par les conditions aux limites prcises plus haut, e e e e = RB=1 , avec 8 : soit RF F R ,I Bu uk 0 B RF = Bu uk Rnn,I (II.2.68) 0 0 0 Rbb,I Le tenseur de Reynolds est cependant stock sous forme dun vecteur de 6 composantes (aux points I e relatifs aux faces de bord, ces valeurs sont portes par RIJIPB(IFAC,II), avec IFAC le numro de la e e face et II le numro de la contrainte, de 1 ` 6 pour dsigner dans lordre R11 , R22 , R33 et R12 , R13 , R23 . e a e La table ALPHA de dimension 6 6 calcule par clca66 permet deectuer les calculs de changement de e B=0 a rep`re necessaires et dobtenir les valeurs RF ` partir des valeurs contenues dans RIJIPB(IFAC,II). e Ainsi,
8 Le

param`tre B permet dannuler formellement deux termes si besoin. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 49/277

- pour chaque tension de Reynolds ISOU, dans le cas de conditions aux limites explicites (ICLPTR=0), on aecte ` COEFA(IFAC,ISOU) la valeur RB=1 correspondante obtenue en calculant dabord a F RB=0 par II=1,6 ALPHA(ISOU,II)*RIJIPB(IFAC,II), puis en y ajoutant la quantit en facteur e F de B dans lexpression formelle de la somme sus-nomme, an dobtenir la valeur compl`te de e e e RB=1 . Les conditions aux limites tant explicites, COEFB prend la valeur 0. F - dans le cas de conditions aux limites semi-implicites (ICLPTR=1), pour chaque tension de Reynolds e ISOU, on aecte au tableau COEFA(IFAC,ISOU) la valeur RB=1 correspondante diminue des F termes dpendants de RIJIPB(IFAC,ISOU) qui seront implicits. Cette valeur est obtenue en e e calculant dabord e II=1,6|II=ISOU ALPHA(ISOU,II)*RIJIPB(IFAC,II), puis en ajoutant la quantit en facteur de B=1 diminue du terme e B an dobtenir la valeur de RF ALPHA(ISOU,ISOU) RIJIPB(IFAC,ISOU). On aecte ensuite la valeur ALPHA(ISOU,ISOU) ` a COEFB (partie implicite des conditions aux limites)9 . Les conditions aux limites pour les scalaires sont ensuite compltes. Les coecients COEFA et COEFB ee sont simplement renseigns en utilisant les conditions aux limites dcrites prcdemment. La seule e e e e dicult consiste ` grer correctement les direntes grandeurs permettant de calculer le coecient e a e e dchange hb sans erreur. e Lindicateur ISCSTH sert, pour chaque VarScalaires ` indiquer quelle valeur de C utiliser au moment a du traitement des conditions aux limites. Ainsi, pour ISCSTH=1, la variable doit tre traite comme e e une temprature, avec C = Cp . Pour ISCSTH=0 ou 2, la variable doit tre traite comme un scalaire e e e passif ou une enthalpie respectivement, avec C = 1 (constante sans dimension) dans les deux cas. Pour ISCSTH=3, la variable est lnergie rsolue dans le cadre du module compressible (cf. cfxtcl). On a e e alors C = 1. Par ailleurs, une valeur strictement positive de lentier IPCCP indique que Cp est variable en espace et disponible dans le tableau PROPCE(IEL,IPCCP ) (renseign dans USPHYV). Lorsque IPCCP est nul, Cp e est constant et disponible sous forme du rel CP0(IPHAS). e Lindicateur IHCP permet de rassembler ces informations : - IHCP = 0 : CPP = C = 1 - IHCP = 1 : CPP = C = Cp uniforme en espace - IHCP = 2 : CPP = C = Cp variable en espace m est variable en C espace et disponible dans le tableau PROPCE(IEL,IPCVSL) (IVISLS > 0) ou uniforme en espace et m disponible sous forme du rel VISLS0(LL) (IVISLS = 0). On pose RKL= e C ( est la viscosit dynamique molculaire e e Le nombre de Prandtl local est alors calcul PRDTL = e m /C disponible dans VISCLC). est ensuite dtermin et conserv dans HINT. e e e Le coecient hint = IF Lorsquun mod`le de turbulence est activ, le sous-programme HTURBP permet le calcul de HFLUI e e y+ = P r + (ou HFLUI = 1 dans la sous-couche visqueuse), que lon multiplie immdiatement par e T m Cuk m CPP*RKL/DISTBF= pour obtenir HFLUI = hb = (ou HFLUI = hb = dans la sous-couche T+ IF IF visqueuse). Si le calcul est ralis en laminaire, on a simplement HFLUI = HINT (= hb = hint = e e ) IF Pour la VarScalaire LL, lindicateur IVISLS(LL) permet galement de reprer si e e
9 Limplicitation

ne concerne pas la contrainte tangentielle issue des vitesses de frottement et nest donc pas totale.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 50/277

Dans les cas o` lon souhaite stocker le coecient dchange (couplage avec SYRTHES), HFLUI est u e conserv dans le tableau HBORD. Dans les cas o` lon utilise le module de rayonnement, HFLUI est e u stock dans le tableau de travail RA(IHCONV). e On dispose alors de tous les lements pour calculer les coecients A et B (COEFA et COEFB) relatif ` e a la variable traite. Noter pour terminer les correspondances suivantes qui permettent de rapprocher e le code source de la relation (II.2.43) : HEXT = himp,ext , PIMP = fimp,ext , HREDUI = hr , HINT = hint , HFLUI = hb .

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 51/277

2.4

` Points a traiter

Lutilisation de HFLUI/CPP lorsque ISCSTH vaut 2 (cas du rayonnement) est ` vrier (CPP vaut en a e eet 1 dans ce cas). Les conditions aux limites pour la vitesse sont bases sur des considrations portant sur un seul terme e e e de la contrainte tangentielle (I + t,I )(grad u) n sans aucune prise en compte du gradient transpos. Pour tablir les conditions aux limites portant sur la vitesse en k ` partir des considrations sur la e a e contrainte, on introduit une projection sur le plan tangent ` la paroi et on impose arbitrairement une a vitesse normale nulle. Les hypoth`ses faites pour tablir les formules des dirents types de conditions aux limites (dissipation, e e e vitesses) sont bases sur des hypoth`ses de maillage orthogonal en paroi. Elles sont tendues sans e e e prcaution aux maillages non orthogonaux. e La loi de paroi ` une chelle de vitesse (causta) ncessite la rsolution dune quation au moyen dun a e e e e algorithme de Newton. Le cot de ce dernier est faible. On peut galement utiliser une loi en puissance u e 1/7 (Werner et Wengle) qui produit, dans la zone logarithmique, des rsultats aussi prcis que la loi e e logarithmique et permet des rsolutions analytiques (option choisie pour la version LES). Attention e nanmoins, car avec cette loi, lintersection avec la loi linaire est lg`rement dirente, ce qui requiert e e e e e 1 donc des adaptations (intersection vers 11,81 au lieu de 10,88 pour la loi choisie ici U + = 8, 3 (y + ) 7 ). Les valeurs de toutes les proprites physiques sont prises au centre des cellules, sans reconstruction. e Il ne sagit pas de modier forcment cette approche, mais il serait bon de garder ce fait prsent ` e e a lesprit. Pour la loi thermique avec des nombres de Prandtl tr`s petits devant lunit, Arpaci et Larsen sugg`rent e e e + de prendre y0 5/P r (en sappuyant sur des donnes exprimentales) plutt que P rt /(P r ) (valeur e e o adopte actuellement et issue de lintersection analytique des lois linaire et logarithmique considres). e e ee Il faudrait se pencher sur la question.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 52/277

3- Sous-programme clsyvt

3.1

Fonction

Le but de ce sous-programme est de remplir les tableaux de conditions aux limites (COEFA et COEFB) pour la vitesse et le tenseur de Reynolds, pour les faces de symtrie. Ces conditions scrivent assez e e naturellement dans le rep`re local ` la face. La fonction de clsyvt est alors de partir de ces conditions e a naturelles dans rep`re local, de les transformer dans le rep`re gnral, et de les impliciter ventuellement e e e e e en partie. On note que le sous-programme clptur (pour les conditions aux parois) contient une partie criture e dans le rep`re local et rotation totalement similaire. e

3.2

Discretisation

e e a e e a La gure II.3.1 prsente les notations utilises ` la face. Le rep`re local est dni ` partir de la normale a ` la face et la vitesse en I : 1 u t= est le premier vecteur du rep`re local. e |uI , | I , n = n est le deuxi`me vecteur du rep`re local. e e b = t n = n t est le troisi`me vecteur du rep`re local. e e
I

u
I

Figure II.3.1: Dnition des vecteurs de base du rep`re local e e Ici, n est la normale ` la face de bord au sens de Code Saturne (i.e. pointant vers lextrieur) et uI , a e est la projection de la vitesse en I dans le plan de la face : uI , = uI (uI .n)n. Si uI , = 0, lorientation de t dans le plan normal ` n est sans importance. On le dnit alors par a e 1 1 : t= (nz ey ny ez ) ou t = (nz ex nx ez ) suivant les composantes de n qui sont n2 + n2 n2 + n2 x z y z non nulles (composantes dans le rep`re global (ex , ey , ez )). e Pour plus de clart, on utilisera les notations suivantes : e Le rep`re gnral sera not R = (ex , ey , ez ). e e e e = (t, n, b) = (t, n, b). Le rep`re local sera not R e e Les matrices des composantes dun vecteur u dans les rep`res R et R seront notes respectivement e e U et U. Les matrices des composantes dun tenseur R (dordre 2) dans les rep`res R et R seront notes e e respectivement R et R.

ey

ex

ez

~ n = n ~ b=t n

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 53/277

On note P la matrice (orthogonale) de passage de R ` R. a tx P = ty tz e (P tant orthogonale, P1 = t P). On a alors en particulier les relations suivantes, pour tout vecteur u et tout tenseur R dordre 2 : U = P.U . tP R = P.R (II.3.2) nx ny nz bx by bz

(II.3.1)

Traitement de la vitesse Dans le rep`re local, les conditions aux limites pour u e uF,t = uF, = n uF,b = Soit 1 UF = P . UF = P . 0 0 1 On pose A = P . 0 0 0 0 0 0 0 . tP 1 0 0 0

scrivent naturellement : e uI 0 uI
,t

(II.3.3)
,b

0 1 0 . UI = P . 0 1 0

0 0 0

0 0 . t P . UI 1

(II.3.4)

(matrice dans le rep`re R du projecteur orthogonal ` la face). e a

Les conditions aux limites pour u scrivent donc : e UF = A . UI La matrice P tant orthogonale, on montre que e 1 n2 x x ny n A= x nz n x ny n 1 n2 y y nz n x nz n y nz n 1 n2 z (II.3.5)

(II.3.6)

Les conditions aux limites peuvent alors tre implicites partiellement, en crivant : e e e uF,x
(n+1)

= 1 n2 u I x
COEFB

(n+1) ,x

x ny uI n

(n) ,y

nx nz u I

(n) ,z

(II.3.7)

COEFA

Le traitement des deux autres composantes est similaire. On note que seules les coordonnes de n sont e utiles, il nest donc pas ncessaire (pour u) de dnir concr`tement les vecteurs t et b. e e e

Traitement du tenseur de Reynolds On a vu quon avait la relation suivante : R = P . R . tP (II.3.8)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 54/277

Les conditions aux limites que lon cherche ` crire sont des relations du type : ae RF,ij =
k,l

ijkl RI

,kl

(II.3.9)

On est donc amen assez naturellement ` introduire les matrices colonne des composantes de R dans e a les dirents rep`res. e e On pose S = t [R11 , R12 , R13 , R21 , R22 , R23 , R31 , R32 , R33 ] et S = t [R11 , R12 , R13 , R21 , R22 , R23 , R31 , R32 , R33 ] (II.3.11) (II.3.10)

On introduit deux applications q et r de {1, 2, 3, 4, 5, 6, 7, 8, 9} dans {1, 2, 3} dont les valeurs sont donnes dans le tableau suivant : e i 1 2 3 4 5 6 7 8 9 q(i) 1 1 1 2 2 2 3 3 3 r(i) 1 2 3 1 2 3 1 2 3 i (q(i), r(i)) est alors une bijection de {1, 2, 3, 4, 5, 6, 7, 8, 9} dans {1, 2, 3}2 , et on a : Rij = S3(i1)+j Si = Rq(i)r(i) Dapr`s lquation II.3.8, on a donc : e e SF,i = RF,q(i)r(i) =
(m,n){1,2,3}2 9

(II.3.12)

Pq(i)m RF,mn Pr(i)n

=
j=1 9

Pq(i)q(j) RF,q(j)r(j) Pr(i)r(j) Pq(i)q(j) Pr(i)r(j) SF,j


j=1

(dapr`s la bijectivit de (q, r)) e e

(II.3.13)

Soit SF = A . SF avec Aij = Pq(i)q(j) Pr(i)r(j) (II.3.14)

On peut montrer que A est une matrice orthogonale (cf. Annexe A). e e Dans le rep`re local, les conditions aux limites de R scrivent de mani`re naturelle1 . e RF,11 = RI ,11 F,12 = 0 R RF,13 = B RI ,13
1 cf.

RF,21 = 0 RF,22 = RI RF,23 = 0

,22

RF,31 = B RI ,31 F,32 = 0 R RF,33 = RI ,33

(II.3.15)

Davroux A., Archambeau F., Le Rij dans Code Saturne (version ), HI-83/00/030/A

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


1 0 0 . 0 0 ... . . . .. . .. . . . B . . . . . .. .. . . . . 0 . . . . .. .. avec B = . . . 1 . . . . . .. .. . . . 0 . . . . . .. .. . . B . . . . . .. . . 0 0 . 0 0 1

Code Saturne documentation Page 55/277

soit

SF = B . SI

(II.3.16)

Dans le cas des faces de symtries traites par clsyvt, le coecient B vaut 1. Mais un traitement e e similaire est ralis dans clptur pour les faces de paroi, et dans ce cas B est nul. Ce param`tre devra e e e tre spci dans lappel ` clca66 (cf. 3.3). e e e a En retournant dans le rep`re global, on obtient nalement la formule suivante : e SF = C . SI avec C = A . B . t A (II.3.17)

On peut montrer que la matrice C a pour composantes :


9

Cij =
k=1

Pq(i)q(k) Pr(i)r(k) Pq(j)q(k) Pr(j)r(k) (k1 + Bk3 + k5 + Bk7 + k9 )

(II.3.18)

e Pour nir, on note que la matrice S est redondante, du fait des symtries du tenseur R. On va donc : plus simplement utiliser les matrices rduites S et S e S = t [R11 , R22 , R33 , R12 , R13 , R23 ] S = t [R11 , R22 , R33 , R12 , R13 , R23 ] (II.3.19)

(II.3.20)

e e En regroupant direntes lignes de la matrice C, on transforme lquation II.3.17 en lquation nale e suivante : (II.3.21) SF = D . SI Le calcul de la matrice D est ralis dans le sous-programme clca66. La mthodologie est dcrite en e e e e annexe B. ` A partir de D, on peut exprimer les coecients des conditions aux limites, partiellement implicites (ICLSYR = 1) ou totalement explicites (ICLSYR = 0). Implicitation partielle SF,i
(n+1)

= Dii SI
COEFB

(n+1) ,i

+
j=i

Dij SI
COEFA

(n) ,j

(II.3.22)

Explicitation totale SF,i


(n+1)

=
j

Dij SI
COEFA

(n) ,j

(COEFB = 0)

(II.3.23)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 56/277

3.3

Mise en uvre

Dbut de boucle e Dbut de boucle sur toutes les faces de bord IFAC avec des conditions de symtrie. La face est e e considre comme une face de symtrie quand ICODCL(IFAC,IU(IPHAS)) vaut 4, sachant que les tests ee e dans vericl sont tels que ICODCL vaut 4 pour IU si et seulement si il vaut aussi 4 pour les autres composantes de la vitesse et les composantes de R (le cas chant). e e La valeur 0 est alors aecte ` ISYMPA, ce qui identie la face comme une face de paroi ou de symtrie, e a e cest-`-dire o` le ux de masse sera forc ` 0 (cf. inimas). a u ea Calcul des vecteurs de base e La normale n est stocke dans (RNX,RNY,RNZ). e e e uI , calcul dans CONDLI et pass via COEFU est stock dans (UPX,UPY,UPZ). Cas du Rij Dans le cas o` on est en Rij (ITURB=30 ou 31), alors les vecteurs t et b doivent tre calculs u e e explicitement (on utilise P et pas simplement A). Ils sont stocks respectivement dans (TX,TY,TZ) et e (T2X,T2Y,T2Z). e e La matrice de passage P est ensuite calcule et stocke dans le tableau ELOGLO. On appelle alors le sous-programme clca66 qui calcule la matrice rduite D, quil stocke dans ALPHA. e clca66 est appel avec un param`tre CLSYME qui vaut 1 et qui correspond au param`tre de lquation e e e e II.3.15. Remplissage des tableaux COEFA et COEFB On remplit les tableaux COEFA et COEFB en suivant directement les quations II.3.7, II.3.22 et II.3.23. e RIJIPB(IFAC,.) correspond au vecteur SI , calcul dans condli et pass en argument ` clsyvt. e e a Remplissage des tableaux COEFAF et COEFBF Dans le cas o` ils sont dnis, les tableaux COEFAF et COEFBF sont remplis. Ils contiennent les mmes u e e valeurs que COEFA et COEFB.

3.4

Annexe A

Demonstration de lorthogonalite de la matrice A On conserve toutes les notations du paragraphe 2. On a :


9

(t A . A)ij

=
k=1 9

Aki Akj

=
k=1

Pq(k)q(i) Pr(k)r(i) Pq(k)q(j) Pr(k)r(j)

(II.3.24)

Or, quand k varie de 1 ` 3, q(k) reste gal ` 1 et r(k) varie de 1 ` 3. On a donc : a e a a


3 3

Pq(k)q(i) Pr(k)r(i) Pq(k)q(j) Pr(k)r(j)


k=1

P1q(i) P1q(j)
k=1 3

Pr(k)r(i) Pr(k)r(j) Pkr(i) Pkr(j)


k=1

= =

P1q(i) P1q(j)

(II.3.25)

P1q(i) P1q(j) r(i)r(j)

(par orthogonalit de P) e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 57/277

On fait de mme pour k variant de 4 ` 6 ou de 7 ` 9, q(k) valant alors respectivement 2 ou 3. On e a a obtient alors :
9

(t A . A)ij

=
k=1 3

Pq(k)q(i) Pr(k)r(i) Pq(k)q(j) Pr(k)r(j) Pkq(i) Pkq(j) r(i)r(j)


k=1

(II.3.26)

= q(i)q(j) r(i)r(j) = ij (par bijectivit de (q, r)) e e Donc t A . A = Id. De mme, on montre que A . t A = Id. A est donc bien une matrice orthogonale.

3.5

Annexe B

Calcul de la matrice D On conna la relation liant les matrices de dimension 9 1 des composantes de R dans le rep`re R en t e F et en I (matrices SF et SI ) : SF = C . SI (II.3.27) avec Cij =
k=1 9

Pq(i)q(k) Pr(i)r(k) Pq(j)q(k) Pr(j)r(k) (k1 + k3 + k5 + k7 + k9 )

(II.3.28)

Pour passer de S ` la matrice rduite 6 1 S , on introduit lapplication s de {1, 2, 3, 4, 5, 6, 7, 8, 9} a e dans {1, 2, 3, 4, 5, 6} prenant les valeurs suivantes : i 1 2 3 4 5 6 7 8 9 s(i) 1 4 5 4 2 6 5 6 3 Par construction, on a Si = Ss(i) pour tout i entre 1 et 9. Pour calculer Dij , on peut choisir une valeur m telle que s(m) = i et sommer tous les Cmn tels que s(n) = j. Le choix de m est indirent. De mani`re plus symtrique, on peut aussi sommer sur tous e e e les m tels que s(m) = i et diviser par le nombre de telles valeurs de m. Cest cette derni`re mthode e e que nous allons utiliser. On dnit N (i) le nombre dentiers entre 1 et 9 tels que s(m) = i. Dapr`s ce qui prc`de, on a donc : e e e e

Dij

1 N (i) 1 N (i)

Cmn
s(m)=i s(n)=j

Pq(m)q(k) Pr(m)r(k) Pq(n)q(k) Pr(n)r(k) (k1 + k3 + k5 + k7 + k9 ) (II.3.29)


s(m)=i s(n)=j 1 k 9

Premier cas : i 3 et j 3 Dans ce cas, on a forcment N (i) = N (j) = 1. De plus, si s(m) = i et s(n) = j, alors q(m) = r(m) = i e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 58/277

et q(n) = r(n) = j. Donc


9

Dij =
k=1

Piq(k) Pir(k) Pjq(k) Pjr(k) (k1 + k3 + k5 + k7 + k9 )

(II.3.30)

Quand k balaye {1, 5, 9}, q(k) = r(k) balaye {1, 2, 3}. Et pour k = 3 ou k = 7, q(k) = 1 et r(k) = 3, ou vice-versa (et pour k pair le facteur en somme de symboles de Kronecker est nul). On a donc nalement :
3

Dij =
k=1

P2 P2 + 2Pj1 Pi3 Pi1 Pj3 ik jk

(II.3.31)

` Deuxieme cas : i 3 et j 4 On a encore N (i) = 1, et si s(m) = i alors q(m) = r(m) = i. Par contre, on a N (j) = 2, les deux possibilits tant m1 et m2 . e e

- si j = 4, alors m1 = 2 et m2 = 4, q(m1 ) = r(m2 ) = 1 et r(m1 ) = q(m2 ) = 2. On pose alors m = 1 et n = 2. - si j = 5, alors m1 = 3 et m2 = 7, q(m1 ) = r(m2 ) = 1 et r(m1 ) = q(m2 ) = 3. On pose alors m = 1 et n = 3. - si j = 6, alors m1 = 6 et m2 = 8, q(m1 ) = r(m2 ) = 2 et r(m1 ) = q(m2 ) = 3. On pose alors m = 2 et n = 3. Et on a :
9

Dij =
k=1

Piq(k) Pir(k) Pmq(k) Pnr(k) + Pnq(k) Pmr(k) (k1 + k3 + k5 + k7 + k9 )

(II.3.32)

Or quand k balaye {1, 5, 9}, q(k) = r(k) balaye {1, 2, 3}. Donc :
3 9

Dij = 2
k=1

P2 Pmk Pnk + ik
k=1

Piq(k) Pir(k) Pmq(k) Pnr(k) + Pnq(k) Pmr(k) (k3 + k7 )

(II.3.33)

Et pour k = 3 ou k = 7, q(k) = 1 et r(k) = 3, ou vice-versa. On a donc nalement :


3

Dij = 2
k=1

P2 Pmk Pnk + Pi1 Pi3 (Pm1 Pn3 + Pn1 Pm3 ) ik

(II.3.34)

avec (m, n) = (1, 2) si j = 4, (m, n) = (1, 3) si j = 5 et (m, n) = (2, 3) si j = 6.

` Troisieme cas : i 4 et j 3 Par symtrie de C, on obtient un rsultat symtrique du deuxi`me cas, sauf que N (i) vaut maintenant e e e e 2. Donc :
3

Dij =
k=1

P2 Pmk Pnk + Pj1 Pj3 (Pm1 Pn3 + Pn1 Pm3 ) jk

(II.3.35)

avec (m, n) = (1, 2) si i = 4, (m, n) = (1, 3) si i = 5 et (m, n) = (2, 3) si i = 6.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 59/277

` Quatrieme cas : i 4 et j 4 Alors N (i) = N (j) = 2. On pose (m, n) = (1, 2) si i = 4, (m, n) = (1, 3) si i = 5 et (m, n) = (2, 3) si i = 6. On fait de mme e pour dnir m et n en fonction de j. On a alors : e Dij = 1 2
9

Pmq(k) Pnr(k) + Pnq(k) Pmr(k)


k=1

Pm q(k) Pn r(k) + Pn q(k) Pm r(k) (k1 + k3 + k5 + k7 + k9 )

1 2

4Pmk Pnk Pm k Pn k + 2 (Pm1 Pn3 + Pn1 Pm3 ) (Pm 1 Pn 3 + Pn 1 Pm 3 ) (II.3.36)


k=1

soit au nal :
3

Dij = 2
k=1

Pmk Pnk Pm k Pn k + (Pm1 Pn3 + Pn1 Pm3 ) (Pm 1 Pn 3 + Pn 1 Pm 3 )

(II.3.37)

avec (m, n) = (1, 2) si i = 4, (m, n) = (1, 3) si i = 5 et (m, n) = (2, 3) si i = 6 et (m , n ) = (1, 2) si j = 4, (m , n ) = (1, 3) si j = 5 et (m , n ) = (2, 3) si j = 6.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 60/277

4- Sous-programme codits
4.1 Fonction

Ce sous-programme, appel entre autre par preduv, turbke, covofi, resrij, reseps, ..., rsout les e e quations de convection-diusion dun scalaire a avec termes sources du type : e fsimp (an+1 an ) + div((u) an+1 ) div( tot grad an+1 )
convection implicite diusion implicite

(II.4.1) = fsexp (1 ) div((u) an ) +(1 ) div( tot grad an )


convection explicite diusion explicite

exp imp o` u, fs et fs dsignent respectivement le ux de masse, les termes sources explicites et les termes u e n+1 linariss en a e e . a est un scalaire dni sur toutes les cellules1 . Par souci de clart on suppose, en e e labsence dindication, les proprites physiques (viscosit totale tot ,...) et le ux de masse (u) e e pris respectivement aux instants n + et n + F , o` et F dpendent des schmas en temps u e e spciquement utiliss pour ces grandeurs2 . e e Lcriture des termes de convection et diusion en maillage non orthogonal engendre des dicults e e (termes de reconstruction et test de pente) qui sont contournes en utilisant une mthode itrative e e e dont la limite, si elle existe, est la solution de lquation prcdente. e e e

4.2

Discretisation

An dexpliquer la procdure utilise pour traiter les dicults dues aux termes de reconstruction et e e e de test de pente dans les termes de convection-diusion, on note, de faon analogue ` ce qui est dni c a e dans navsto mais sans discrtisation spatiale associe, En loprateur : e e e fsexp En (a) = fsimp a + div((u) a) div( tot grad a) fsimp an + (1 ) div((u) an ) (1 ) div( tot grad an ) En (an+1 ) = 0
n+1

(II.4.2)

Lquation (II.4.1) scrit donc : e e (II.4.3) La quantit En (a e ) comprend donc : fsimp an+1 , contribution des termes direntiels dordre 0 linaire en an+1 , e e div((u) an+1 ) div( tot grad an+1 ), termes de convection-diusion implicites complets (termes non reconstruits + termes de reconstruction) linaires3 en an+1 , e fsexp fsimp an et (1 ) div((u) an ) (1 ) div( tot grad an ) lensemble des termes explicites (y compris la partie explicite provenant du schma en temps appliqu ` la convection diue ea sion).

De mme, on introduit un oprateur EMn approch de En , linaire et simplement inversible, tel que e e e e son expression contient :
1 a, sous forme discr`te en espace, correspond ` un vecteur dimensionn ` NCELET de composante a , I dcrivant e a e a e I lensemble des cellules. 2 cf. introd 3 Lors de la discrtisation en espace, le caract`re linaire de ces termes pourra cependant tre perdu, notamment ` e e e e a cause du test de pente.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 61/277

la prise en compte des termes linaires en a, e la convection intgre par un schma dcentr amont (upwind) du premier ordre en espace, e e e e e les ux diusifs non reconstruits. EMn (a) = fsimp a + [div((u) a)]amont [div( tot grad a)]N Rec (II.4.4)

Cet oprateur permet donc de contourner la dicult induite par la prsence dventuelles non linarits e e e e e e introduites par lactivation du test de pente lors du schma convectif, et par le remplissage important e de la structure de la matrice dcoulant de la prsence des gradients propres ` la reconstruction. e e a On a la relation4 , pour toute cellule I de centre I : EMdisc (a, I) =
i

EMn (a) d

On cherche ` rsoudre : a e 0 = En (an+1 ) = EMn (an+1 ) + En (an+1 ) EMn (an+1 ) Soit : EMn (an+1 ) = EMn (an+1 ) En (an+1 ) (II.4.6) On va pour cela utiliser un algorithme de type point xe en dnissant la suite (an+1, k )kIN 5 : e an+1, 0 = an an+1, k+1 = an+1, k + an+1, k+1 o` an+1, k+1 est solution de : u EMn (an+1, k + an+1, k+1 ) = EMn (an+1, k ) En (an+1, k ) Soit encore, par linarit de EMn : e e EMn (an+1, k+1 ) = En (an+1, k ) (II.4.8) (II.4.7) (II.4.5)

Cette suite, couple avec le choix de loprateur En , permet donc de lever la dicult induite par e e e la prsence de la convection (discrtise ` laide de schmas numriques qui peuvent introduire des e e e a e e non linarits) et les termes de reconstruction. Le schma rellement choisi par lutilisateur pour la e e e e convection (donc ventuellement non linaire si le test de pente est activ) ainsi que les termes de ree e e construction vont tre pris ` litration k et traits au second membre via le sous-programme bilsc2, e a e e alors que les termes non reconstruits sont pris ` litration k + 1 et reprsentent donc les inconnues du a e e syst`me linaire rsolu par codits6 . e e e On suppose de plus que cette suite (an+1, k )k converge vers la solution an+1 de lquation (II.4.2), i.e. e lim an+1, k = 0, ceci pour tout n donn. e

(II.4.8) correspond ` lquation rsolue par codits. La matrice EM n , matrice associe ` EMn est ` a e e e a a inverser, les termes non linaires sont mis au second membre mais sous forme explicite (indice k de e an+1, k ) et ne posent donc plus de probl`me. e Remarque 1 La viscosit tot prise dans EMn et dans En dpend du mod`le de turbulence utilis. Ainsi on a e e e e tot = laminaire + turbulent dans EMn et dans En sauf lorsque lon utilise un mod`le Rij , auquel e cas on a tot = laminaire .
4 On pourra se reporter au sous-programme matrix pour plus de dtails relativement ` EM e a e disc , oprateur discret agissant sur un scalaire a. 5 Dans le cas ou le point xe en vitesse-pression est utilis (NTERUP> 1) an+1,0 est initialis par la derni`re valeur e e e obtenue de an+1 . 6 cf. le sous-programme navsto.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 62/277

Le choix de EMn tant a priori arbitraire (EMn doit tre linaire et la suite (an+1, k )kIN doit cone e e verger pour tout n donn), une option des mod`les Rij (IRIJNU = 1) consiste ` forer n dans e e a c tot n lexpression de EMn ` la valeur n a a laminaire + turbulent lors de lappel ` codits dans le sous-programme navsto, pour ltape de prdiction de la vitesse. Ceci na pas de sens physique (seul n e e e laminaire tant cens intervenir), mais cela peut dans certains cas avoir un eet stabilisateur, sans que cela modie e pour autant les valeurs de la limite de la suite (an+1, k )k .

Remarque 2 Quand codits est utilis pour le couplage instationnaire renforc vitesse-pression (IPUCOU=1), on fait e e une seule itration k en initialisant la suite (an+1, k )kIN ` zro. Les conditions de type Dirichlet e a e sont annules (on a INC = 0) et le second membre est gal ` |i |. Ce qui permet dobtenir une e e a e e approximation de type diagonal de EM n ncessaire lors de ltape de correction de la vitesse7 .

4.3

Mise en uvre

Lalgorithme de ce sous-programme est le suivant : - dtermination des proprits de la matrice EM n (symtrique si pas de convection, non symtrique e ee e e sinon) - choix automatique de la mthode de rsolution pour linverser si lutilisateur ne la pas spci pour la e e e e variable traite. La mthode de Jacobi est utilise par dfaut pour toute variable scalaire a convecte. e e e e e Les mthodes disponibles sont la mthode du gradient conjugu, celle de Jacobi, et le bi-gradient cone e e jugu stabilis (BICGStab) pour les matrices non symtriques. Un prconditionnement diagonal est e e e e possible et utilis par dfaut pour tous ces solveurs except Jacobi. e e e - prise en compte de la priodicit (translation ou rotation dun scalaire, vecteur ou tenseur), e e - construction de la matrice EM n correspondant ` loprateur linaire EMn par appel au sousa e e programme matrix8 . Les termes implicites correspondant ` la partie diagonale de la matrice et donc a imp aux contributions direntielles dordre 0 linaires en an+1 ,(i.e fs ), sont stocks dans le tableau e e e ROVSDT (ralis en amont du sous-programme appelant codits). e e - cration de la hirarchie de maillage si on utilise le multigrille (IMGRP > 0). e e - appel ` bilsc2 pour une ventuelle prise en compte de la convection-diusion explicite lorsque = 0. a e - boucle sur le nombre ditrations de 1 ` NSWRSM (appel NSWRSP dans codits). Les itrations sont e a e e reprsentes par k appel ISWEEP dans le code et dnissent les indices de la suite (an+1, k )k et de e e e e (an+1, k )k . Le second membre est scind en deux parties : e un terme, ane en an+1, k1 , facile ` mettre ` jour dans le cadre de la rsolution par incrment, a a e e et qui scrit : e fsimp an+1, k1 an+1,0 + fsexp (1 ) div((u) an+1,0 ) div( tot grad an+1,0 ) les termes issus de la convection/diusion (avec reconstruction) calcule par bilsc2. e div (u) an+1, k1 div tot grad an+1, k1 La boucle en k est alors la suivante : Calcul du second membre, hors contribution des termes de convection-diusion explicite SMBINI; le second membre complet correspondant ` En (an+1, k1 ) est, quant ` lui, stock dans le tableau a a e
le sous-programme resolp. rappelle que dans matrix, la convection est traite, quelque soit le choix de lutilisateur, avec un schma dcentr e e e e amont dordre 1 en espace et quil ny a pas de reconstruction pour la diusion. Le choix de lutilisateur quant au schma numrique pour la convection intervient uniquement lors de lintgration des termes de convection de En , au e e e second membre de (II.4.8) dans le sous-programme bilsc2.
8 On 7 cf.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 63/277

SMBRP, initialis par SMBINI et complt par les termes reconstruits de convection-diusion par e ee appel au sous-programme bilsc2. ` A litration k, SMBINI not SMBINI k vaut : e e SMBINI k = fsexp (1 ) [ div((u) an ) div( tot grad an ) ] fsimp ( an+1, k1 an ) Avant de boucler sur k,un premier appel au sous-programme bilsc2 avec THETAP = 1 permet de prendre en compte la partie explicite des termes de convection-diusion provenant du schma en temps. e SMBRP 0 = fsexp (1 ) [ div((u) an ) div( tot grad an ) ] Avant de boucler sur k, le second membre SMBRP 0 est stock dans le tableau SMBINI 0 et sert e pour linitialisation du reste du calcul. SMBINI 0 = SMBRP 0 pour k = 1, SMBINI 1 On a donc : SMBINI 1 = SMBINI 0 ROVSDT ( PVAR PVARA) et SMBRP 1 est complt par un second appel au sous-programme bilsc2 avec THETAP = , de ee mani`re ` ajouter dans le second membre la partie de la convection-diusion implicite. e a SMBRP 1 = SMBINI 1 div((u) an+1, 0 ) div( tot grad an+1, 0 ) = fsexp (1 ) [ div((u) an ) div( tot grad an ) ] fsimp (an+1, 0 an ) div((u) an+1, 0 ) div( tot grad an+1, 0 ) = fsexp (1 ) [ div((u) an ) div( tot grad an ) ] fsimp ( an+1, 0 an ) = fsexp (1 ) div((u) an+1, 0 ) div( tot grad an+1, 0 ) fsimp an+1, 0

pour k = 2, de faon analogue, on obtient : c SMBINI 2 Soit : SMBINI 2 = SMBINI 1 ROVSDT DPVAR 1 lappel au sous-programme bilsc2, tant systmatiquement fait par la suite avec THETAP = , e e on obtient de mme : e SMBRP 2 o` u an+1, 1 = PVAR 1 = PVAR 0 + DPVAR 1 = an+1, 0 + an+1, 1 pour litration k + 1, e Le tableau SMBINI k+1 initialise le second membre complet SMBRP k+1 auquel vont tre rajoutes e e les contributions convectives et diusives via le sous-programme bilsc2. on a la formule : SMBINI k+1 = SMBINI k ROVSDT DPVAR k Puis suit le calcul et lajout des termes de convection-diusion reconstruits de En (an+1, k ), par appel au sous-programme bilsc2. On rappelle que la convection est prise en compte ` cette a tape par le schma numrique choisi par lutilisateur (schma dcentr amont du premier ordre e e e e e e en espace, schma centr du second ordre en espace, schma dcentr amont du second ordre e e e e e S.O.L.U. ou une pondration (blending) des schmas dits du second ordre (centr ou S.O.L.U.) e e e = SMBINI 2 div (u) an+1, 1 div tot grad an+1, 1 = fsexp (1 ) [ div((u) an ) div( tot grad an ) ] fsimp ( an+1, 1 an )

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 64/277

avec le schma amont du premier ordre, utilisation ventuelle dun test de pente). e e Cette contribution (convection-diusion) est alors ajoute dans le second membre SMBRP k+1 e (initialis par SMBINI k+1 ). e SMBRP k+1 = SMBINI k+1 div (u) an+1, k div tot grad an+1, k = fsexp (1 ) [ div((u) an ) div( tot grad an ) ] fsimp (an+1, k an ) div((u) an+1,k ) div( tot grad an+1,k )

Rsolution du syst`me linaire en an+1, k+1 correspondant ` lquation (II.4.8) par inversion de e e e a e a a la matrice EM n , en appelant le sous programme invers. On calcule an+1, k+1 grce ` la formule : an+1, k+1 = an+1, k + an+1, k+1 Soit : PVAR k+1 = PVAR k + DPVAR k+1 Traitement de la priodicit et du paralllisme. e e e Test de convergence : Il porte sur la quantit ||SMBRP k+1 || < ||EM n (an ) + SMBRP 1 ||, o` || . || reprsente la norme e u e euclidienne. Si le test est vri, la convergence est atteinte et on sort de la boucle sur les e e itrations. La solution recherche est a n+1 = an+1, k+1 . e e Sinon, on continue ditrer dans la limite des itrations imposes par NSWRSM dans usini1. e e e En continu ce test de convergence scrit aussi : e ||SMBRP k+1 || < ||fsexp div((u) an ) + div( tot grad an ) +[div((u) an )]amont + [div( tot grad an )]N Rec || Si bien que sur maillage orthogonal avec schma de convection upwind et en labsence de terme e source, la suite converge en thorie en une unique itration puisque par construction : e e ||SMBRP 2 || = 0 Fin de la boucle. < ||fsexp ||

4.4

` Points a traiter

Approximation EMn de loprateur En e Dautres approches visant soit ` modier la dnition de lapproxime, prise en compte du schma a e e e centr sans reconstruction par exemple, soit ` abandonner cette voie seraient ` tudier. e a ae

Test de convergence La quantit dnissant le test de convergence est galement ` revoir, ventuellement ` simplier. e e e a e a
imp Prise en compte de Ts Lors de la rsolution de lquation par codits, le tableau ROVSDT a deux fonctions : il sert ` calculer e e a la diagonale de la matrice (par appel de matrix) et il sert ` mettre ` jour le second membre ` chaque a a a sous-itration de la rsolution en incrments. Or, dans le cas o` Ts e e e u imp est positif, on ne lint`gre pas e dans ROVSDT, an de ne pas aaiblir la diagonale de la matrice. De ce fait, on ne lutilise pas pour mettre ` jour le second membre, alors que ce serait tout ` fait possible. Au nal, on obtient donc a a exp imp un terme source trait totalement en explicite (Ts + Ts an ), alors que la rsolution en incrments e e e exp imp nous permettrait justement de limpliciter quasiment totalement (Ts + Ts an+1,kf in 1 , o` kf in est u la derni`re sous-itration eectue). e e e Pour ce faire, il faudrait dnir deux tableaux ROVSDT dans codits. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 65/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 66/277

5- Sous-programme condli

5.1

Fonction
calcul de termes convectifs (direntiels dordre un en espace) au bord : le calcul fait intervenir e un ux au bord et demande la donne au bord de la variable convecte lorsque la fronti`re est e e e entrante au sens des courbes caractristiques du syst`me (au sens de la vitesse, dans le cas e e dune quation isole portant sur un simple scalaire : interprtation susante dans le cadre actuel e e e de Code Saturne 1 ) ; calcul de termes de diusion (direntiels dordre deux en espace) : il est alors ncessaire de e e disposer dun moyen de conna tre la valeur de drives spatiales dordre un au bord (plus exe e actement, il est ncessaire de disposer dinformation permettant de calculer les termes qui en e dpendent, comme les contraintes ou les ux thermiques en paroi) ; e calcul de gradient cellules plus standard : il est ncessaire de disposer de la donne de la variable e e aux faces de bord (plus gnralement, il est ncessaire de disposer dun moyen de calculer les e e e termes discrets des quations lorsquils font intervenir le gradient dans les cellules de bord, comme e par exemple les termes de gradient transpos des quations de Navier-Stokes). e e

Il est ncessaire de disposer de conditions aux limites dans au moins trois cas principaux : e

Les considrations prsentes concernent uniquement les variables de calcul (vitesse, pression, tenseur de e e Reynolds, scalaires solution dune quation de convection-diusion). Pour ces grandeurs2 , lutilisateur e doit dnir les conditions aux limites en chaque face de bord (usclim). e Le sous-programme condli permet de traduire les donnes utilisateur (fournies dans usclim) au format e interne de reprsentation des conditions aux limites. Des vrications de compltude et de cohrence e e e e sont galement menes (dans vericl). Sont en particulier traites les conditions aux limites de paroi e e e (clptur) et de symtrie pour les vitesses et le tenseur de Reynolds (clsyvt). e Le sous-programme condli fournit en sortie des couples de coecients Ab et Bb pour chaque variable f et chaque face de bord. Ils sont utiliss pour le calcul des termes discrtiss intervenant dans les e e e quations ` rsoudre et permettent en particulier de dterminer une valeur de face de bord fb,int e a e e (localise au centre de la face de bord, barycentre de ses sommets) par la relation fb,int = Ab + Bb fI e o` fI est la valeur de la variable au point I , projet du centre de la cellule jouxtant le bord sur la u e droite normale ` la face de bord et passant par son centre (voir la gure II.5.1). a

5.2

Discretisation

Notation On dsignera dans la suite par VarScalaire toute variable e - autre que la vitesse, la pression, les grandeurs turbulentes k, , Rij , , f et , - solution dune quation de convection-diusion. e
en module compressible, cf. cfxtcl autres grandeurs (proprits physiques par exemple) font lobjet dun traitement dirent qui ne sera pas dtaill e e e e e ici (par exemple, pour la masse volumique, lutilisateur dnit directement les valeurs aux bord, information qui est e conserve telle quelle ; on pourra se reportera ` usphyv ou phyvar). e a
2 Les 1 sauf

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


Sb I I y fI F f b,int

Code Saturne documentation Page 67/277

Bord du domaine de calcul


Domaine de calcul

Coefficients dechange h int h b

himp,ext

Figure II.5.1: Cellule de bord. La dnomination VarScalaire pourra en particulier dsigner la temprature, un scalaire passif, une frace e e tion massique ou (sauf mention contraire explicite) la variance des uctuations dune autre VarScalaire. Les variables dtat dduites (masse volumique, viscosit...) ne seront pas dsignes par VarScalaire. e e e e e Reprsentation des conditions aux limites standard dans usclim e Des conditions aux limites standardises peuvent tre fournies par lutilisateur dans usclim. Il est pour e e cela ncessaire daecter un type aux faces de bord des cellules concernes3 . Les conditions prvues e e e par dfaut sont les suivantes : e Entre : correspond ` une condition de Dirichlet sur toutes les variables transportes (vitesse, e a e variables turbulentes, VarScalaires...), et ` une condition de Neumann homog`ne (ux nul) sur a e la pression. Sortie : - lorsque le ux de masse est eectivement dirig vers lextrieur du domaine, ce choix core e respond ` une condition de Neumann homog`ne sur toutes les variables transportes et a e e 2P a ` = 0, pris en compte sous forme de Dirichlet pour la pression (n et ( i )i{1,2} n i dsignent respectivement le vecteur normal de la face de sortie considre et deux vecteurs e ee norms, orthogonaux entre eux et dans le plan de la face de sortie). Cette condition est e applique de mani`re explicite en utilisant le champ de pression et son gradient au pas de e e temps prcdent. En outre, la pression tant dnie ` une constante pr`s, elle est recale en e e e e a e e un point de sortie pour y conserver la valeur P0 (on vite ainsi toute drive vers des valeurs e e tr`s grandes relativement ` lcart maximal de pression sur le domaine)4 . e a e - lorsque le ux de masse est dirig vers lintrieur du domaine, situation peu souhaitable a e e priori5 , on impose une condition de Dirichlet homog`ne sur la vitesse (pas sur le ux de e masse), ` dfaut de conna sa valeur en aval du domaine. La pression est traite comme a e tre e
dun type se fait en renseignant le tableau ITYPFB. ny a pas de sortie, le spectre des valeurs propres de la matrice est dcal dune valeur constante an de e e rendre le syst`me inversible : voir matrix. e 5 Un message indique ` lutilisateur combien de faces de sortie voient un ux de masse entrer dans le domaine. a
4 Lorsquil 3 Laectation

fb,ext

n normale sortante de norme 1 fimp,ext

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 68/277

dans le cas prcdent o` le ux de masse est dirig vers lextrieur du domaine. Pour les e e u e e variables autres que la vitesse et la pression, deux cas se prsentent : e - dans le cas de sorties de type 10 (ISOR10 dans usclim), on impose une condition de Dirichlet (valeur fournie par lutilisateur et nulle par dfaut) pour reprsenter la valeur e e du scalaire introduit dans le domaine par les faces de bord concernes. e - dans le cas des sorties de type 9 (ISOR09 dans usclim), on impose, comme lorsque le ux de masse est sortant, une condition de Neumann homog`ne (ceci nest pas une e situation souhaitable, puisque linformation porte sur les faces de bord provient alors e de laval de lcoulement local). e Paroi : on se reportera ` clptur pour une description du traitement des conditions aux limites a de paroi (supposes impermables au uide). Bri`vement, on peut dire ici quune approche par e e e lois de paroi est utilise an dimposer la contrainte tangentielle sur la vitesse. La paroi peut tre e e dlante6 . Les VarScalaires reoivent par dfaut une condition de Neumann homog`ne (ux nul). e c e e Si lon souhaite imposer une valeur en paroi pour ces variables (par exemple, dans le cas dune paroi ` temprature impose) une loi de similitude est utilise pour dterminer le ux au bord a e e e e en tenant compte de la couche limite. Dans le cas des couplages avec SYRTHES, Code Saturne reoit une temprature de paroi et fournit un ux thermique. La condition de pression standard c e est une condition de Neumann homog`ne7 e Symtrie : correspond ` des conditions de Neumann homog`nes pour les grandeurs scalaires e a e et ` des conditions de symtrie classiques pour les vecteurs (vitesse) et les tenseurs (tensions de a e Reynolds) : voir clsyvt.

doit alors fournir les composantes de la vitesse de la paroi. pourra se reporter ` gradrc pour la condition conduisant ` lextrapolation de la pression au bord, condition a a pilotable par lutilisation de la variable EXTRAP.
7 On

6 On

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 69/277

Reprsentation des conditions aux limites spciques dans usclim e e On a vu que laectation ` une face de bord dun type standard (entre, sortie, paroi, symtrie) a e e permettait dappliquer simplement ` lensemble des variables un assortiment de conditions aux limites a cohrentes entre elles pour les types usuels de fronti`re physique. e e Une solution consiste ` dnir dans usclim, pour chaque face de bord et chaque variable, des condia e tions aux limites spciques8 (celles-ci, comme les conditions standards, se ram`nent nalement ` des e e a conditions de type mixte). Les deux approches ne sont pas ncessairement incompatibles et peuvent mme se rvler complmentaires. e e e e e En eet, les conditions aux limites standards peuvent tre surcharges par lutilisateur pour une ou e e plusieurs variables donnes. Il convient cependant de sassurer que, dune faon ou dune autre, une e c condition ` la limite a t dnie pour chaque face de bord et chaque variable. a ee e Des conditions de compatibilit existent galement entre les direntes variables (voir vericl): e e e - en entre, paroi, symtrie ou sortie libre, il est important que toutes les composantes de la vitesse e e aient le mme type de condition ; e - lorsque la vitesse reoit une condition de sortie, il est important que la pression reoive une c c condition de type Dirichlet. Pour plus de dtails, on se reportera au paragraphe relatif ` la e a condition de sortie pour la pression, page 67 ; - lorsquune des variables de vitesse ou de turbulence reoit une condition de paroi, il doit en tre c e de mme pour toutes ; e - lorsquune des composantes Rij reoit une condition de symtrie, il doit en tre de mme pour c e e e toutes ; - lorsquune VarScalaire reoit une condition de paroi, la vitesse doit avoir le mme type de conc e dition.

8 Les conditions aux limites spciques sont codes en renseignant directement les tableaux ICODCL et RCODCL pour e e chaque face de bord et chaque variable : des exemples sont fournis dans usclim.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 70/277

Reprsentation interne des conditions aux limites e Objectif Les conditions fournies par lutilisateur sont retraduites sous forme de couples de coecients Ab et Bb pour chaque variable f et chaque face de bord. Ces coecients sont utiliss pour le calcul des e termes discrets intervenant dans les quations ` rsoudre et permettent en particulier de dterminer e a e e une valeur de face de bord fb,int . Il est important dinsister d`s ` prsent sur le fait que cette valeur e a e est, de mani`re gnrale, une simple valeur numrique qui ne re`te pas ncessairement une ralit e e e e e e e e physique (en particulier aux parois, pour les grandeurs aectes par la couche limite turbulente). On e dtaille ci-dessous le calcul de Ab , Bb et de fb,int . e Notations - On consid`re lquation (II.5.1) portant sur le scalaire f , dans laquelle reprsente la masse e e e volumique, u la vitesse, la conductivit et S les termes sources additionnels. C est dni plus e e bas. f (II.5.1) + div(uf ) = div grad f + S t C - Le coecient reprsente la somme des conductivits molculaire et turbulente (selon les mod`les e e e e t utiliss), soit = m + t , avec, pour une modlisation de type viscosit turbulente, t = C , e e e t o` t est le nombre de Prandtl turbulent9 . u ` - A titre dexemple, on prcise dans le tableau 5.1 la valeur et lunit de pour quelques cas e e particuliers de f (certains termes de lquation peuvent alors dispara : pour la pression, en e tre particulier, lquation est stationnaire et les termes convectifs sont absents). e - Le coecient Cp reprsente la chaleur spcique, dunit m2 s2 K 1 = J kg 1 K 1 . e e e - On note la conductivit thermique, dunit kg m s3 K 1 = W m1 K 1 . e e - Il convient de prciser que C = 1 pour toutes les variables hormis pour la temprature, cas dans e e m lequel on a10 C = Cp . Dans le code, cest la valeur de que lutilisateur doit fournir (si C la proprit est constante, les valeurs sont aectes dans usini1 ` VISCL0 pour la vitesse et ` ee e a a VISLS0 pour les VarScalaires ; si la proprit est variable, ce sont des tableaux quivalents qui ee e doivent tre renseigns dans usphyv). e e - Pour la variance des uctuations dune VarScalaire, la conductivit et le coecient C sont e hrits de la VarScalaire associe. e e e Condition de type Dirichlet simple : lorsque la condition est une condition de Dirichlet simple, on obtient naturellement (cas particulier de (II.5.6)) : fb,int
valeur de bord utilise par le calcul e
9 Le

frel e
valeur relle impose au bord e e

(II.5.2)

nombre de Prandtl turbulent est sans dimension et, dans certains cas usuels, pris gal ` 0, 7. e a exactement, on a C = Cp pour toutes les VarScalaires f que lon souhaite traiter comme la temprature pour e les conditions aux limites. Ces VarScalaires sont reprables par lutilisateur au moyen de lindicateur ISCSTH=1. Par e dfaut cet indicateur est positionn ` la valeur 0 pour toutes les VarScalaires (qui sont alors traites comme des scalaires e ea e e passifs avec C = 1) hormis pour la variable thermique ventuelle (ISCALTi`me VarScalaire), pour laquelle on a ISCSTH=1 : e on suppose par dfaut que la variable thermique est la temprature et non lenthalpie. Si lon souhaite rsoudre en e e e enthalpie, il faut positionner ISCSTH ` la valeur 2 pour la variable thermique. Pour le compressible, la variable thermique a est lnergie, identie par ISCSTH=3. On se reportera ` cfxtcl pour le traitement des conditions aux limites. e e a
10 Plus

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


symbole ui p T H f f nom vitesse pression temprature e enthalpie VarScalaire unit e m s1 kg m1 s2 K m2 s2 = J kg 1 unit(f ) e symbole ou + t t /Cp nom viscosit dynamique e pas de temps conductivit thermique e conductivit thermique/Cp e conductivit ou diusivit e e

Code Saturne documentation Page 71/277

unit e kg m1 s1 s kg m s3 K 1 = W m1 K 1 kg m1 s1 kg m1 s1

Table 5.1: Valeurs et units de dans quelques cas particuliers usuels. e Autres cas : lorsque la condition ` la limite porte sur la donne dun ux, il sagit dun ux diusif11 . a e On a alors : int = rel (II.5.3) e
ux diusif transmis au domaine interne ux diusif rel impos au bord e e

Le ux diusif rel impos peut tre donn e e e e - directement (condition de Neumann), soit rel = imp,ext ou e - dduit implicitement de deux informations imposes : une valeur externe fimp,ext et un coecient e e dchange himp,ext (condition de Dirichlet gnralise). e e e e

Selon le type de condition (Dirichlet ou Neumann) et en prenant pour hypoth`se la conservation du e ux dans la direction normale au bord, on peut alors crire (voir gure II.5.1) : e himp,ext (fimp,ext fb,ext ) (condition de Dirichlet) rel impos e e hint (fb,int fI ) = hb (fb,ext fI ) = (condition de Neumann) imp,ext int b
rel e
impos e

(II.5.4) Le rapport entre le coecient hb et le coecient hint rend compte de limportance de la traverse de e la zone proche du bord et revt une importance particuli`re dans le cas des parois le long desquelles e e se dveloppe une couche limite (dont les proprits sont alors prises en compte par hb : se reporter ` e ee a clptur). Dans le cadre plus simple considr ici, on se limitera au cas hb = hint et fb,ext = fb,int = fb . ee La relation (II.5.4) scrit alors : e himp,ext (fimp,ext fb ) (condition de Dirichlet)
rel e
impos e

hint (fb fI ) =
int

imp,ext
rel e

(condition de Neumann)

(II.5.5)

impos e

En rarrangeant, on obtient la valeur de bord : e himp,ext hint fimp,ext + hint + himp,ext hint + himp,ext fb = 1 imp,ext + hint

fI fI

(condition de Dirichlet) (II.5.6) (condition de Neumann)

11 En eet, le ux total sortant du domaine est donn par la somme du ux convectif (si la variable est eectivement e convecte) et du ux diusif. Nanmoins, pour les parois tanches et les symtries, le ux de masse est nul et la condition e e e e se rduit ` une contrainte sur le ux diusif. De plus, pour les sorties (ux de masse sortant), la condition ` la limite ne e a a porte que sur le ux diusif (souvent une condition de Neumann homog`ne), le ux convectif dpendant des conditions e e amont (il na donc pas besoin de condition ` la limite). Enn, aux entres, cest le plus souvent une condition de Dirichlet a e simple qui est applique et le ux diusif sen dduit. e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 72/277

Conclusion : on notera donc les conditions aux limites de mani`re gnrale sous la forme : e e e fb = Ab + Bb fI avec Ab et Bb dnis selon le type des conditions : e himp,ext Ab = fimp,ext hint + himp,ext Dirichlet hint B = b hint + himp,ext (II.5.7)

Neumann

Ab =

1 hint 1

imp,ext

(II.5.8)

B = b

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 73/277

Remarques - La valeur fI est calcule en utilisant le gradient cellule de f , soit : fI = fI + II grad fI . e - Il reste ` prciser la valeur de hint . Il sagit dune valeur numrique, nayant a priori aucun a e e rapport avec un coecient dchange physique, et dpendante du mode de calcul du ux diusif e e (lunit sen dduit naturellement). e e dans la premi`re maille de bord. Ainsi hint = e IF m - On rappelle que dans le code, cest la valeur de que lutilisateur doit fournir. Si la proprit ee C est constante, les valeurs sont aectes dans usini1 ` VISCL0 pour la vitesse (viscosit dynamique e a e molculaire en kg m1 s1 ) et a VISLS0 pour les VarScalaires (par exemple, pour la temprature e ` e et lenthalpie, en kg m1 s1 ). Si la proprit est variable en espace ou en temps, ce sont ee Cp des tableaux quivalents qui doivent tre renseigns dans usphyv. En outre, la variance des e e e m de la VarScalaire associe e uctuations dune VarScalaire hrite automatiquement la valeur de e C (Code Saturne 1.1 et suivantes). - On rappelle galement, car ce peut tre source derreur, que dans le code, on a : e e - pour la temprature m = et C = Cp e - pour lenthalpie m = et C = 1 Cp Exemples de cas particuliers - Dans le cas dune condition de Dirichlet, lutilisateur est donc conduit ` fournir deux donnes : a e fimp,ext et himp,ext . Pour obtenir une condition de Dirichlet simple (sans coecient dchange) il e sut dimposer himp,ext = +. Cest le cas dutilisation le plus courant (en pratique, himp,ext = 1030 ). - Dans le cas dune condition de Neumann, lutilisateur fournit une seule valeur imp,ext (nulle pour les conditions de Neumann homog`nes). e Valeur et unit des donnes ` fournir e e a Le tableau 5.2 permet didentier les units de h (himp,ext ou hint ) et imp,ext pour quelques variables e classiques. La variable d reprsente une longueur (gale, pour hint , ` I F ). Il est galement important e e a e de noter quun ux sortant doit tre positif. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


f nom vitesse pression temprature e enthalpie scalaire f nom vitesse pression temprature e enthalpie scalaire h unit e 1 ms kg m1 s2 K m2 s2 = J kg 1 unit(f ) e homog`ne ` e a ( + t )/d (t)/d ( + Cp t /t )/d

Code Saturne documentation Page 74/277

symbole ui p T H f

unit e kg m2 s1 s m1 kg s3 K 1 = W m2 K 1 (/Cp + t /t )/d kg m2 s1 /d kg m2 s1

symbole ui p T H f

unit e 1 ms kg m1 s2 K m2 s2 = J kg 1 unit(f ) e

imp,ext homog`ne ` e a unit e ( + t ) grad (ui ).n kg m1 s2 kg m2 s1 (t) grad (p).n ( + Cp t /t ) grad (T ).n kg s3 = W m2 (/Cp + t /t ) grad (H).n kg s3 = W m2 grad (f ).n kg m2 s1 unit(f ) e

Table 5.2: Valeur et unit de h et imp,ext dans quelques cas particuliers usuels. e

Condition de sortie pour la pression On prcise ici la condition de sortie applique ` la pression dans le cas des sorties standards. Il est e e a ncessaire dimposer une condition de type Dirichlet (accompagne dune condition de type Neumann e e homog`ne sur les composantes de la vitesse). On la calcule ` partir des valeurs de la variable au pas e a de temps prcdent. e e - En raisonnant sur une conguration simple (de type canal, avec une sortie plane, perpendiculaire a e ` lcoulement), on peut faire lhypoth`se que la forme des prols de pression pris sur les surfaces e parall`les ` la sortie est inchange aux alentours de celle-ci (hypoth`se dun coulement tabli, e a e e e e 2P loin de toute perturbation). Dans cette situation, on peut crire e = 0 (n est le vecteur n i normal ` la sortie, i reprsente une base du plan de sortie). a e - Si, de plus, on peut supposer que le gradient de pression pris dans la direction perpendiculaire aux faces de sortie est uniforme au voisinage de celle-ci, le prol ` imposer en sortie (valeurs pb ) a se dduit du prol pris sur un plan amont (valeurs pamont ) en ajoutant simplement la constante e R = d grad (p).n (o` d est la distance entre le plan amont et la sortie), soit pb = pamont + R (le u fait que R soit identique pour toutes les faces de sortie est important an de pouvoir lliminer e dans lquation (II.5.9) ci-dessous). e - Avec lhypoth`se supplmentaire que les points I relatifs aux faces de sortie sont sur un plan e e parall`le ` la sortie, on peut utiliser les valeurs en ces points (pI ) pour valeurs amont soit e a pamont = pI = pI + II .grad p. - Par ailleurs, la pression tant dnie ` une constante pr`s (coulement incompressible) on peut e e a e e xer sa valeur arbitrairement en un point A (centre dune face de sortie choisie arbitrairement12 ) a ` p0 (valeur xe par lutilisateur, gale ` P0 et nulle par dfaut), et donc dcaler le prol impos e e a e e e en sortie en ajoutant : R0 = p0 (pamont,A + R) = p0 (pI ,A + R).
12 premi`re face de sortie rencontre en parcourant les faces de bord dans lordre naturel induit par la numrotation e e e interne au code

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 75/277

- On obtient donc nalement : pb = pI + R + R 0 = pI + R + p0 (pI ,A + R) = pI + p0 pI ,A


valeur constante R1

(II.5.9)

= pI + R 1 On constate donc que la condition de pression en sortie est une condition de Dirichlet dont les valeurs sont gales aux valeurs de la pression (prises au pas de temps prcdent) sur le plan amont des points e e e I et recales pour obtenir P0 en un point de sortie arbitraire. e

5.3

Mise en uvre

Mode de prescription des conditions aux limites dans usclim Lutilisateur fournit pour chaque face un moyen de dterminer les conditions aux limites de toutes les e variables de calcul. Comme on la vu, plusieurs mthodes sont envisageables. e La plus simple consiste ` renseigner, pour chaque face, un code dsignant une condition ` la limite stana e a dard (dans le tableau ITYPFB de dimension NFABOR) et les informations complmentaires ventuelles. e e Les valeurs de ITYPFB suivantes sont prdnies13 : IENTRE (entre), ISOR09 (sortie de type 9), ISOR10 e e e (sortie de type 10), ISYMET (symtrie), IPAROI (paroi). Dans le cas des entres (et des sorties de type e e 10), il est ncessaire de fournir une valeur de Dirichlet. e Lutilisateur peut galement renseigner un entier (tableau ICODCL de dimension NFABORNVAR) dsignant e e le type de condition ` appliquer ` une variable donne : les valeurs 1 (pour Dirichlet) et 3 (pour Neua a e mann) sont souvent utilises, plus rarement 5 (pour les conditions de paroi) et exceptionnellement 4 e (pour la symtrie dune vitesse ou du tenseur de Reynolds), 9 ou 10 (pour les sorties de type 9 ou e 10). Lorsque ICODCL est renseign pour une variable donne, il prend alors le pas sur ITYPFB sur la e e face considre. Lutilisateur doit dans ce cas galement fournir, suivant les cas, zro, un ou deux rels ee e e e (dans le tableau RCODCL de dimension NFABORNVAR3). Pour une face et une variable f donnes, les e 3 valeurs de RCODCL dsignent respectivement les grandeurs fimp,ext , himp,ext et imp,ext . e e On indique dans le tableau 5.3 le mode de traitement des variables pour les dirents types de conditions aux limites standards. La liste des valeurs complmentaires ` fournir est galement prcise. Le tableau e a e e e 5.4 propose le mme type dinformation pour les conditions aux limites spciques plus complexes, e e dnies ` partir de la valeur de ICODCL. Enn, le tableau 5.5 synthtise les valeurs admissibles de e a e ICODCL pour chaque variable de calcul.

13 Lutilisateur peut dnir dautres types (i.e. aecter ` ITYPFB dautres valeurs enti`res), mais elles ne recouvrent e a e pas de conditions aux limites par dfaut. Les faces de bord ainsi repres sont cependant traites comme un ensemble e e e e particulier lors de limpression dinformations de type ux de masse par exemple.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 76/277

ITYPFB type IENTRE entre e ISYMET symtrie e

variables traites e

type de condition

donnes complmentaires e e RCODCL(.,.,1) valeur dentre e nulle par dfaut e

variables transportes Dirichlet e pression Neumann homog`ne e vitesse tensions de Reynolds autres variables pression vitesses grandeurs turbulentes autres variables transportes e pression vitesses symtrie vecteur e symtrie tenseur e Neumann homog`ne e Neumann homog`nea e lois de paroi (Dirichlet)b c lois de paroi Neumann homog`ned e 2P =0 n i Neumann homog`ne e (ux de masse sortant) Dirichlet homog`ne e (ux de masse entrant) Neumann homog`ne e

IPAROI paroi

RCODCL(.,.,1) vitesse de dlement nulle par dfaut e e

ISOR09 sortie

autres variables transportes e ISOR10 sortie pression vitesses

autres variables transportes e

2P =0 n i Neumann homog`ne e (ux de masse sortant) Dirichlet homog`ne e (ux de masse entrant) Neumann homog`ne e (ux de masse sortant) e Dirichlet RCODCL(.,.,1) valeur dentre e (ux de masse entrant)

nulle par dfaut e

a b c d

Le gradient peut tre extrapol en paroi selon les valeurs de EXTRAP : voir gradrc e e

voir clptur voir galement clptur e La condition de Neumann homog`ne est obtenue lorsque lutilisateur ne prcise rien dautre que le type de fronti`re IPAROI ; e e e

dautres conditions sont possibles : le tableau 5.4 les prcise. e


e

La valeur est impose par lutilisateur. Il ny a pas dimplicitation temporelle. e

Table 5.3: Conditions aux limites standards.

ICODCL variables 1 3 4 5 toutes toutes vitesse Rij vitesse k, Rij , , , f , VarScalaire (sauf variance) vitesse

type de condition Dirichlet Neumann Symtrie vecteur e Symtrie tenseur e Loi de paroi Loi de paroi Loi de paroi Neumann homog`ne e (ux de masse sortant) Dirichlet homog`ne e (ux de masse entrant)

donnes complmentaires ncessaires et susantes e e e RCODCL(.,.,1) fimp,ext valeur RCODCL(.,.,2) himp,ext coef. dchange e RCODCL(.,.,3) imp,ext valeur nulle par dfaut e =RINFIN= 1030 par dfaut e nulle par dfaut e

RCODCL(.,.,1)

vitesse de dlement nulle par dfaut e e nulle par dfaut e =RINFIN= 1030 par dfaut e

RCODCL(.,.,1) fimp,ext valeur en paroi RCODCL(.,.,2) himp,ext coef. dchange e

10

k, Rij , , , f , VarScalaire

Dirichlet RCODCL(.,.,1) fimp,ext valeur (ux de masse entrant) RCODCL(.,.,2) himp,ext coef. dchange e Neumann RCODCL(.,.,3) imp,ext valeur (ux de masse sortant)

nulle par dfaut e =RINFIN= 1030 par dfaut e nulle par dfaut e

Table 5.4: Conditions aux limites spciques. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 77/277

Variable Valeurs de ICODCL admissibles Vitesse U 1 3 4 5 9 Pression p 1 3 Variable scalaire de turbulence k, , , f , 1 3 5 10 Tenseur de Reynolds Rij 1 3 4 5 10 VarScalaire (hormis variances) 1 3 5 10 Variance des uctuations dune VarScalaire 1 3 10 Table 5.5: Valeurs admissibles de ICODCL pour chaque variable. Il est important de conna galement les compatibilits ` assurer entre les valeurs de ICODCL associes tre e e a e aux direntes variables (Cf. Points ` traiter). e a - Si ICODCL vaut 4, 5 ou 9 pour une composante de la vitesse, la mme valeur de ICODCL doit tre e e associe ` toutes les composantes (symtrie, paroi ou sortie libre). e a e - Si ICODCL vaut 9 pour une composante de la vitesse, la valeur de ICODCL associe ` la pression e a doit tre 1 (sortie libre). e - Si ICODCL vaut 5 pour une composante de la vitesse, pour k, , , f , ou pour une des composantes du tenseur de Reynolds Rij , la valeur de ICODCL associe ` toutes ces variables doit e a tre 5 (paroi). e - Si ICODCL vaut 4 pour une composante de la vitesse ou pour une des composantes du tenseur de Reynolds Rij , la valeur de ICODCL associe ` toutes ces variables doit tre 4 (symtrie). e a e e - Si ICODCL vaut 5 pour une variable VarScalaire, la valeur de ICODCL associe ` toutes les come a posantes de la vitesse doit tre 5 (paroi). e

Conversion des donnes utilisateur e Une premi`re tape (TYPECL) permet essentiellement de convertir les donnes des utilisateurs. Plus e e e prcisment, les actions suivantes sont ralises : e e e e - les faces de bord sont tries selon le type de condition ` la limite qui leur a ventuellement t e a e ee aect (valeurs de ITYPFB) ; e - les types ITYPFB (si lutilisateur en a dni) sont convertis en quadruplets dnis pour chaque e e face IFAC et chaque variable IVAR (hormis lorsque lutilisateur a aect une valeur ` ICODCL) : e a (ICODCL, RCODCL(IFAC,IVAR,1), RCODCL(IFAC,IVAR,2), RCODCL(IFAC,IVAR,3)) - pour la pression, la condition de sortie se traduit par une condition de type Dirichlet : on impose aux faces de bord la valeur de la pression p au point I , calcule ` partir des donnes e a e du pas de temps prcdent (et le calcul du gradient de pression est donc ralis au pralable). e e e e e Cette valeur pI est conserve dans le tableau COEFU(.,1), de dimension NFABOR, puis aecte ` e e a RCODCL(.,IPR,1) accompagne dun recalage (identique pour toutes les faces) destin ` assurer e ea une valeur de Dirichlet de pression xe P0 sur la premi`re face de sortie rencontre (Cf. Points e e a ` traiter). - Lindicateur IDIRCL (tableau de dimension NVAR) est annul pour reprer les variables pour e e lesquelles le syst`me diusif ` rsoudre nest pas ncessairement inversible (le probl`me sera e a e e e trait dans matrix). Il sagit en pratique, dans le cadre actuel, de la variable pression lorsquil e ny a aucune face de sortie (cavit ferme par exemple). Plus prcisment, IDIRCL est annul e e e e e pour les variables qui nont aucune condition de Dirichlet14 et pour lesquelles lindicateur ISTAT
14 Le test contient une rfrence ` ICODCL = 2 qui est un hritage dune version dans laquelle les conditions de Dirichlet ee a e avec coecient dchange taient distingues des conditions de Dirichlet sans coecient dchange. e e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 78/277

est positionn ` zro. Cet indicateur (de valeur 0 ou 1) est, dans le bilan explicite, le coecient ea e multiplicatif du terme de drive temporelle de la variable rsolue ; il est nul pour la pression. e e e - la valeur du ux de masse est imprime pour les ensembles de faces de bord de mme type e e ITYPFB (il existe un type par dfaut appliqu aux faces de bord pour lesquelles lutilisateur na e e pas renseign ITYPFB). e Vrications e Une vrication des conditions aux limites est ensuite mene (vericl) (lutilisateur est prvenu et le e e e programme interrompu en cas de probl`me). e - Le sous-programme sassure que toutes les faces de bord ont reu une condition ` la limite pour c a toutes les variables. - Ladmissibilit des conditions aux limites (selon la nature de la variable ` laquelle elles sont e a appliques) est vrie. e e e - La cohrence des conditions aux limites entre les direntes variables est vrie (voir les tableaux e e e e 5.4 et 5.5).

Calculs prliminaires e Direntes grandeurs sont ensuite construites pour prparer le traitement ultrieur des conditions aux e e e limites. - quand la connaissance de la distance ` la paroi est ncessaire (Rij avec termes dcho de a e e paroi, mod`le LES de Smagorinsky avec amortissement de van Driest, mod`le k SST) et que e e la mthode de calcul ancienne a t choisie (|ICDPAR|=2, non compatible avec le paralllisme e ee e et la priodicit), pour chaque phase IPHAS, on dtermine, pour chaque cellule IEL, le numro de e e e e la face de paroi la plus proche (cette information est stocke dans IA(IIFAPA(IPHAS)-1+IEL)) ; e cette distance est inutile pour le traitement des conditions aux limites, mais condli est le sousprogramme dans lequel la ralisation de ce calcul est la plus simple. e - en cas de couplage avec SYRTHES, on dtermine, pour le scalaire coupl f (habituellement la e e temprature), les valeurs fI dans les cellules de bord au moyen de la formule fI = fI +II grad fI e (ou au moyen de fI = fI si on traite le premier pas de temps15 ou que la reconstruction a t ee desactive par ITBRRB=016 ). Ces valeurs sont stockes dans TBORD (tableau de dimension NFABOR) e e qui est utilis en sortie de condli pour transmission dinformation ` SYRTHES. e a - si des faces portent des conditions de symtrie ou de paroi, on construit les composantes de la e vitesse uj,I dans les cellules de bord (valeurs stockes dans le tableau local COEFU de dimension e NFABOR3) au moyen de la formule uj,I = uj,I + II grad uj I (ou au moyen de uj,I = uj,I au premier pas de temps) ; en outre, si le mod`le de turbulence est le Rij , on construit les e composantes du tenseur de Reynolds dans les cellules de bord (valeurs stockes dans le tableau e local RIJIPB de dimension NFABOR6) de la mme mani`re. Les deux tableaux COEFU et RIJIPB e e sont utiliss dans clptur et clsyvt. e Conditions aux limites de paroi On dtermine alors (clptur) les conditions aux limites de paroi pour la vitesse et les grandeurs ture bulentes. Les VarScalaires (except les variances) peuvent galement recevoir un traitement partice e ulier prenant en compte la couche limite si la condition qui leur est applique est de type Dirichlet e (ICODCL=5). On traite donc en particulier dans clptur les conditions portant sur la temprature e
15 On ne dispose pas encore de conditions aux limites permettant le calcul du gradient lors du passage dans condli au premier pas de temps. 16 ce qui est le cas par dfaut e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 79/277

lorsque la paroi est ` temprature impose. Par contre, les conditions de ux sont traites plus tard a e e e dans condli. Le sous-programme clptur remplit les tableaux COEFA et COEFB pour les faces de paroi et les variables traites. Ces tableaux reprsentent les coecients Ab et Bb . Plus prcisment, pour une face IFAC et e e e e une variable IVAR donne, les valeurs renseignes sont COEFA(IFAC,ICLVAF) et COEFB(IFAC,ICLVAF) e e avec ICLVAF=ICLRTP(IVAR,ICOEFF). Deux autres valeurs sont galement renseignes : e e COEFA(IFAC,ICLVAR) et COEFB(IFAC,ICLVAR) avec ICLVAR=ICLRTP(IVAR,ICOEF). Elles ne di`rent des prcdentes quen k et reprsentent des coecients Ab et Bb particuliers pour e e e e le calcul des gradients intervenant dans le terme de production turbulente (il y a donc bien deux types de conditions aux limites pour la vitesse dans ce cas, et chacun est utilis lors du traitement dun terme e particulier : on se reportera ` clptur). a Conditions aux limites de symtrie e On dtermine galement (clsyvt) les conditions aux limites de symtrie pour les vecteurs (vitesse) et e e e les tenseurs (de Reynolds). Elles ncessitent des rotations pour sexprimer dans le rep`re li au bord e e e et le traitement lourd qui en rsulte a donc t encapsul. Le sous-programme compl`te les tableaux e ee e e COEFA et COEFB aux faces de symtries pour la vitesse et les tensions de Reynolds (contrairement e aux faces de paroi en k , les valeurs COEFA(IFAC,ICLVAF) et COEFB(IFAC,ICLVAF) sont gales ` e a COEFA(IFAC,ICLVAR) et COEFB(IFAC,ICLVAR)). Autres conditions aux limites pour la vitesse On dtermine, pour la vitesse, les conditions aux limites en sortie. On traite en outre les condie tions restantes de type Dirichlet et Neumann. Ici galement, on fournit une valeur de COEFA et de e COEFB pour chaque face concerne (les valeurs COEFA(IFAC,ICLVAF) et COEFB(IFAC,ICLVAF) sont e gales ` COEFA(IFAC,ICLVAR) et COEFB(IFAC,ICLVAR)). Notons que, si le ux de masse est entrant ` e a a travers une face de sortie, on impose un Dirichlet homog`ne sur la vitesse (COEFA(IFAC,ICLVAF)=0, e COEFB(IFAC,ICLVAF)=0) au lieu de la condition de Neumann homog`ne (COEFA(IFAC,ICLVAF)=0, e COEFB(IFAC,ICLVAF)=1), lorsque le ux de masse est sortant. Autres conditions aux limites On dtermine enn, pour la pression, les grandeurs turbulentes et les autres scalaires, les conditions aux e limites de type Dirichlet et Neumann restantes. Ici galement, on fournit donc une valeur de COEFA et e de COEFB pour chaque face concerne (les valeurs COEFA(IFAC,ICLVAF) et COEFB(IFAC,ICLVAF) sont e gales ` COEFA(IFAC,ICLVAR) et COEFB(IFAC,ICLVAR)). e a

5.4

` Points a traiter

Reprsentation des conditions par une valeur de face e Bien que la mthode utilise permette une simplicit et une homognit de traitement de toutes les e e e e e e conditions aux limites, elle est relativement restrictive au sens o` une seule valeur ne sut pas toujours u pour reprsenter les conditions ` appliquer lors du calcul de termes dirents. e a e Ainsi, en k a-t-il t ncessaire, lors du calcul des conditions aux limites de paroi, de disposer ee e de deux couples (Ab , Bb ) an de prendre en compte les conditions ` appliquer pour le calcul de la a contrainte tangentielle et celles ` utiliser lors du calcul du terme de production (et un troisi`me jeu de a e coecients serait ncessaire pour permettre le traitement des gradients intervenant dans les termes de e gradient transpos, dans vissec). e Peut-tre pourrait-il tre utile de mettre en place une mthode permettant dutiliser (au moins en e e e certains points stratgiques du code) directement des forces, des contraintes ou des ux, sans passer e ncessairement par le calcul dune valeur de face. e Dicults lies ` la donne dun ux (entre des donnes peu intuitive) e e a e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 80/277

Lutilisateur est invit ` fournir, dans le cas dune condition de Neumann, une valeur de ux en W m2 ea pour la temprature ou lenthalpie. Par souci de cohrence, lorsquil souhaite fournir une condition e e de Neumann sur une autre variable, il est amen ` fournir une grandeur similaire (en fait homog`ne ea e a ` grad f.n, si f est la variable), ce qui est peu naturel pour la vitesse, la pression ou un scalaire, dans le cas o` lon souhaite imposer la valeur du gradient normal ` la face et non pas la valeur de u a ( + t )grad uj .n, de tgrad (p).n ou de grad (f ).n. C Condition de sortie en pression La condition de pression en sortie se traduit par pf = pI + R1 et le prol obtenu correspond au prol amont pris aux points I et recal pour obtenir p0 en un point A arbitraire. Ce type de condition e est appliqu sans prcautions, mais nest pas toujours justi (une condition de Dirichlet base sur e e e e la valeur calcule directement aux faces de bord pourrait tre plus adapte). Les hypoth`ses sont en e e e e particulier mises en dfaut dans les cas suivants : e - la sortie est proche dune zone o` lcoulement nest pas tabli en espace (ou varie en temps) ; u e e - la sortie nest pas une surface perpendiculaire ` lcoulement ; a e - le gradient de pression dans la direction normale ` la sortie nest pas le mme pour toutes les a e faces de sortie (dans le cas de sortie multiples, par exemple, le gradient nest probablement pas le mme au travers de toutes les sorties) ; e - les points I ne sont pas sur une surface parall`le ` la sortie (cas des maillage irrguliers par e a e exemple). On pourrait galement tester la mthode dOrlansky (quation de convection sur la pression). e e e Par ailleurs, en labsence de condition de sortie, il pourrait peut-tre se rvler utile de xer une valeur e e e de rfrence sur une cellule donne ou de ramener la moyenne de la pression ` une valeur de rfrence ee e a ee (avec le dcalage du spectre, on assure linversibilit de la matrice ` chaque pas de temps, mais il e e a faudrait vrier si la pression nest pas susceptible de driver au cours du calcul). e e Termes non pris en compte Les conditions aux limites actuelles semblent causer des dicults lors du traitement du terme de e gradient transpos de la vitesse dans lquation de Navier-Stokes (terme trait de mani`re explicite en e e e e temps). Il est possible de dbrancher ce terme en positionnant le mot cl IVISSE ` 0. Sa valeur par e e a dfaut est 1 (les termes en gradient transpos sont pris en compte). e e On remarquera que lindicateur IVISSE active non seulement les termes de gradient transpos en e 2 t ( grad v), mais galement le terme en grad ( tot div v) avec : e 3 tot = l l + t en laminaire ou en mod`le Rij e en mod`le k . e (II.5.10)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 81/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 82/277

6- Sous-programme covofi

6.1

Fonction

Dans ce sous-programme, on rsout : e soit lquation de convection-diusion dun scalaire en prsence de termes sources : e e (a) + div ((u) a) div (Kgrad a) = Tsimp a + Tsexp + ai t
convection diusion

(II.6.1)

Ici a reprsente la valeur instantane du scalaire en approche laminaire ou, en approche RANS, sa e e moyenne de Reynolds a. Les deux approches tant exclusives et les quations obtenues similaires, on e e utilisera le plus souvent aussi la notation a pour a. soit, dans le cas dune modlisation RANS, la variance de la uctuation dun scalaire en prsence de e e termes sources1 : (a2 ) + div (( u) a2 ) div (K grad a2 ) = Tsimp a2 + Tsexp + a2 i t
convection

+2

t (grad a)2 a2 t Rf k

diusion

(II.6.2)

termes de production et de dissipation dus ` la turbulence moyenne a exp imp e et Ts reprsentent respeca2 reprsente ici la moyenne du carr des uctuations2 de a. K, , Ts e e tivement le coecient de diusion, la valeur du terme source de masse, les termes sources implicite

et explicite du scalaire a ou a2 . t et t sont respectivement la viscosit turbulente et le nombre de e Schmidt ou de Prandtl turbulent, est la dissipation de lnergie turbulente k et Rf dnit le rapport e e constant entre les chelles dissipatives de k et de a2 (Rf est constant selon le mod`le assez simple e e adopt ici). e On crit les deux quations prcdentes sous la forme commune suivante : e e e e (f ) + div (( u)f ) div (Kgrad f ) = Tsimp f + Tsexp + fi + Tspd t avec, pour f = a ou f = a2 : Tspd = 0 pour f = a, pour f = a2 (II.6.4) (II.6.3)

t (grad a)2 a2 2 t Rf k

Le terme

(f ) est dcompos de la sorte : e e t (f ) f = +f t t t (II.6.5)

1 Davroux A. et Archambeau F. : Calcul de la variance des uctuations dun scalaire dans le solveur commun. Application ` lexprience du CEGB dite Jet in Pool, HE-41/99/043. a e g 2 a et a2 , sous forme discr`te en espace, correspondent donc en fait ` des vecteurs dimensionns ` NCELET de come a e a g posantes a et a2 respectivement, I dcrivant lensemble des cellules. e I I

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 83/277

En utilisant lquation de conservation de la masse (cf. preduv), lquation prcdente scrit nalement e e e e e : f + div (( u) f ) div (K grad f ) = Tsimp f + Tsexp + (fi f ) + Tspd + f div ( u) t

(II.6.6)

6.2

Discretisation

Pour intgrer lquation (II.6.6), une discrtisation temporelle de type -schma est applique ` la e e e e e a variable rsolue3 : e f n+ = f n+1 + (1 ) f n (II.6.7) e e Lquation (II.6.6) est discrtise au temps n + en supposant les termes sources explicites pris au e temps n + S , et ceux implicites en n + . Par souci de clart, on suppose, en labsence dindication, e que les proprites physiques (K, ,...) et le ux de masse ( u) sont pris respectivement aux instants e n + et n + F , o` et F dpendent des schmas en temps spciquement utiliss pour ces u e e e e grandeurs4 . f n+1 f n + div (( u) f n+ ) div ( K grad f n+ ) = Tsimp f n+ + Tsexp, n+S t
convection +( fi )n+S

n+

diusion + Tspd, n+S

(II.6.8)

+f

n+

div (u) pour f = a,

o` : u Tspd, n+S = 0 2 t (grad a)2 t


n+S

n (a2 )n+ Rf k n

pour f = a2

(II.6.9)

Le terme de production aect dun indice n + S est un terme source explicite et il est donc trait e e comme tel : t (grad a)2 t
n+S

(1 + S )

n n1 t (grad an )2 S t (grad an1 )2 t t

(II.6.10)

e Lquation (II.6.6) scrit : e f n+1 f n + div (( u) f n+1 ) div ( K grad f n+1 ) t imp Ts n + Tspd, imp + div ( u) f n+1 = (1 ) Tsimp f n + Tsexp, n+S + ( fi )n+S (1 ) n f n + Tspd, exp Tspd, imp f n +(1 ) f n div ( u) (1 ) div (( u) f n ) + (1 ) div ( K grad f n ) avec : Tspd, imp = 0 2 t (grad a)2 t 0 pour f = a, pour f = a2 pour f = a,
n+S

(II.6.11)

n Rf k n

(II.6.12)

Tspd, exp =

n (a2 )n Rf k n

pour f = a2

(II.6.13)

3 Si 4 cf.

= 1/2, ou quune extrapolation est utilise, le pas de temps t est suppos uniforme en temps et en espace. e e introd

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 84/277

On rappelle que, pour un scalaire f , le sous-programme codits rsout une quation du type suivant e e fsimp (f n+1 f n ) + div(( u) f n+1 ) div ( K grad f n+1 ) = fsexp (1 ) div(( u) f n ) + (1 ) div ( K grad f n )
convection diusion explicite exp fs reprsente les termes sources discrtiss de mani`re explicite en temps (hormis contributions de e e e e imp la convection diusion explicite provenant du -schma) et fs f n+1 reprsente les termes linaires e e e n+1 en f dans lquation discrtise en temps. e e e e On rcrit lquation (II.6.11) sous la forme (II.6.15) qui est ensuite rsolue par codits. ee e

(II.6.14)

Tsimp + n Tspd, imp div ( u) t


fsimp

f n+1

+ div( (u) f n+1 ) div (K grad f n+1 ) = imp n Ts f + Tsexp, n+S + (fi )n+S n f n + Tspd, exp + f n div( u) (1 ) div( (u) f ) + (1 ) div (K grad f n )
n
exp fs

(II.6.15)

6.3

Mise en uvre

On distingue deux cas suivant le type de schma en temps choisi pour les termes sources : e Si les temres sources ne sont pas extrapols, toutes les contributions du second membre vont directee ment dans le vecteur SMBRS. Sinon, un vecteur supplmentaire est ncessaire an de stocker les contributions du pas de temps e e prcedent (PROPCE). Dans ce cas : e - le vecteur PROPCE sert ` stocker les contributions explicites du second menbre au temps n 1 a (pour lextrapolation en n + S ). - le vecteur SMBRS est complt au fur et ` mesure. ee a

Lalgorithme de ce sous-programme est le suivant : mise ` zro des vecteurs reprsentants le second membre (SMBRS) et de la diagonale de la matrice a e e (ROVSDT). calcul des termes sources du scalaire dnis par lutilisateur en appelant le sous-programme e ustssc. Si les termes sources sont extrapols, SMBRS reoit S fois la contribution au temps n 1 des e c termes sources qui sont extrapols (stocks dans PROPCE). La contribution des termes sources e e exp utisateurs (au pas temps courant) est rpartie entre PROPCE (pour la partie Ts qui est ` stocker e a en vue de lextrapolation) et SMBRS (pour la partie explicite provenant de lutilisation du schma e imp pour Ts ). La contribution implicite est alors mise dans ROVSDT (apr`s multiplication par ) e quel que soit son signe, an de ne pas utiliser des discrtisations temporelles direntes entre e e deux pas de temps successifs, dans le cas par exemple o` Ts u imp change de signe5 .
exp imp Sinon la contibution de Ts est directement mise dans SMBRS. Celle de Ts est ajoute e a ` ROVSDT si elle est positive (de mani`re ` conserver la dominance de la diagonale), ou explicite e a e et mise dans le second membre sinon.
5 cf.

preduv

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 85/277

prise en compte des physiques particuli`res : arc lectrique, rayonnement, combustion gaz et e e charbon pulvris. Seuls les vecteurs ROVSDT et SMBRS sont complts (schma dordre 1 sans e e ee e extrapolation). ajout des termes sources de masse en (fi f ) par appel au sous-programme catsma. Si les termes sources sont extrapols, le terme explicite en fi est stock dans PROPCE. Le e e -schma est appliqu au terme implicite, puis les contributions implicite et explicite rparties e e e entre ROVSDT et SMBRS. Sinon, la partie implicte en f va dans ROVSDT, et tout le reste dans SMBRS. calcul du terme daccumulation de masse en div(u) par appel ` divmas et ajout de sa contria bution dans SMBRS, et dans ROVSDT apr`s multiplication par 6 . e ajout du terme instationnaire ` ROVSDT. a calcul des termes de production (2 t a2 ) si on tudie la e (grad a)2 ) et de dissipation ( t Rf k variance des uctuations dun scalaire avec un mod`le de turbulence de type RANS. Ce calcul e seectue en calculant pralablement le gradient du scalaire f par appel au sous-programme e grdcel.

Si les termes sources sont extrapols, la production est mise dans PROPCE puis lnergie cintique e e e k et la dissipation turbulentes sont calcules (XK et XE) en fonction du mod`le de turbulence e e a2 au temps n et ROVSDT le coecient dimplicitation apr`s e utilis. SMBRS reoit e c Rf k Rf k multiplication par THETAP = . Sinon, la production va dans SMBRS, et la dissipation est rpartie de la mme mani`re que e e e prcdemment avec THETAP = 1. e e une fois la contribution de tous les termes sources calculs, le second membre est assembl, et le e e vecteur PROPCE ajout apr`s multiplication par 1 + S ` SMBRS, dans le cas o` les termes sources e e a u sont extrapols. e calcul du coecient de diusion K au centre des cellules, et des valeurs aux faces par appel au sous-programme viscfa. rsolution de lquation compl`te (avec les termes de convection diusion) par un appel au souse e e exp imp programme codits avec fs = SMBRS et fs = ROVSDT. ajustement (clipping) du scalaire ou de la uctuation du scalaire en appelant le sous-programme clpsca. n impression du bilan explicite dexpression ||En (f n ) ( f n+1 f n )|| , o` ||.|| dsigne la norme u e t euclidienne.

On rsume dans les tableaux II.6.16 et II.6.17 les direntes contributions (hors convection-diusion) e e aectes ` chacun des vecteurs PROPCE, SMBRS et ROVSDT suivant le schma en temps choisi pour les e a e termes sources. En labsence dindication, les proprits physiques , , ... sont supposes prises en au ee e temps n + , et le ux de masse ( u) pris au temps n + F , les valeurs de F et de dpendant du e
6 cette

opration est faite quel que soit le schma en temps de faon ` rester cohrent avec ce qui est fait dans bilsc2 e e c a e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 86/277

type de schma slectionn spciquement pour ces grandeurs7 . e e e e

Avec extrapolation des termes sources : ROVSDTn PROPCEn SMBRSn n Tsimp div( u) + n + t Rf k n n Tsexp, n + n fin + 2 t (grad f n )2 t (1 + S ) PROPCEn S PROPCEn1 + Tsimp f n + div( u) f n n f n

n n f Rf k n (II.6.16)

Sans extrapolation des termes sources : ROVSDTn SMBRSn n + M ax(Tsimp , 0) div( u) + n + t Rf k n n t Tsexp + Tsimp f n + div( u) f n + n ( fin f n ) f n + 2 (grad f n )2 Rf k n t

(II.6.17)

6.4

` Points a traiter

Intgration du terme de convection-diusion e Dans ce sous-programme, les points litigieux sont dus ` lintgration du terme de convection-diusion. a e On renvoie donc le lecteur au sous-programme bilsc2 qui les explicite.

7 cf.

introd

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 87/277

6.5

Annexe 1 : Inversibilite de la matrice EM n

Dans cette section, on va tudier plus particuli`rement linversibilit de la matrice EM n , matrice du e e e syst`me linaire ` rsoudre associe ` EMn pour le cas dun schma en temps de type Euler implicite e e a e e a e dordre un ( = 1). Pour toutes les notations, on se reportera ` la documentation sur le sous-programme a covofi. On va montrer que la dmarche adopte permet de sassurer que la matrice des syst`mes de e e e convection-diusion dans les cas courants est toujours inversible.

6.5.1 Introduction
Pour montrer linversibilit, on va utiliser le fait que la dominance stricte de la diagonale limplique8 . e On cherche donc ` dterminer sous quelles conditions les matrices de convection diusion sont ` a e a diagonale strictement dominante. , on peut tablir directee t 9 ment et exactement la proprit. Par contre, si ce terme nest pas pris en compte dans la matrice, il ee est ncessaire de faire intervenir le pendant discret de la relation : e On va montrer quen incluant dans la matrice le terme en div( u) issu de div( u) d = 0
i

(II.6.18)

Cette relation nest cependant vrie au niveau discret qu` la prcision du solveur de pression pr`s e e a e e (et, en tous les cas, ne peut tre approche au mieux qu` la prcision machine pr`s). Il para donc e e a e e t prfrable de sen aranchir. ee Avant dentrer dans les dtails de lanalyse, on rappelle quelques proprits et dnitions. e ee e Soit C une matrice carre dordre N, dlment gnrique Cij . On a par dnition : e ee e e e Dnition : La matrice C est ` diagonale strictement dominante ssi e a
j=N

i [1, N ],

|Cii | >
j=1, j=i

|Cij |

(II.6.19)

On convient de dire que C est ` diagonale simplement dominante ssi lingalit nest pas stricte, a e e soit :
j=N

i [1, N ],

|Cii |
j=1, j=i

|Cij |

(II.6.20)

ee ee Remarque : Si, sur chaque ligne, la somme des lments dune matrice est nulle, que les lments extradiagonaux sont ngatifs et que les lments diagonaux sont positifs, alors la matrice est ` diagonale e ee a simplement dominante. Si la somme est strictement positive, la diagonale est strictement dominante. On a limplication suivante : Proprit : Si la matrice C est ` diagonale strictement dominante, elle est inversible. ee a Cette proprit10 se dmontre simplement si lon admet le thor`me de Gerschgrin ci-dessous : ee e e e o Thor`me : Soit B une matrice carre dordre N dans C C, dlment gnrique B ij , les valeurs e e e l l ee e e
j=N

propres l de B sont, dans le plan complexe, telles que ||l Bii ||C l
8 Ce 9 Hormis

j=1, j=i

||Bij ||C l

faisant, on choisit cependant une condition forte et la dmonstration nest probablement pas optimale. e dans le cas de conditions aux limites mixtes, quil conviendrait dexaminer plus en dtail. e 10 Lascaux, P. et Thodor, R. : Analyse Numrique Matricielle Applique ` lart de lIngnieur, Tome 2, Ed. Masson. e e e a e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


j=N

Code Saturne documentation Page 88/277

Si B est ` lments rels, on crira ||l Bii ||C aee e e l Dmontration de la proprit prcdente : e ee e e

|Bij |
j=1, j=i

Soit C ` diagonale strictement dominante ` lments rels. On montre quil est possible dinverser le a aee e syst`me CX = S dinconnue X, quel que soit le second membre S. Pour cela, on dcompose C en e e partie diagonale (D) et extradiagonale (E) soit : C =DE C tant ` diagonale strictement dominante, tous ses lments diagonaux sont non nuls. D est donc e a ee inversible (et les lements de linverse sont rels). On consid`re alors la suite11 : e e e (X n )nIN , On peut crire : e
k=n

avec

X 0 = D1 S

et

DX n = S + EX n1

Xn =
k=0

D1 E

D1 S

Cette somme converge si le rayon spectral de B = D1 E est strictement infrieur ` 1. Or, la matrice e a C est ` diagonale strictement dominante. On a donc pour tout i IN (` partir de la relation (II.6.19) a a et en divisant par |Cii |) : i [1, N ], ce qui scrit encore : e i [1, N ], |Dii | > |Dii |
j=N

|Cii | > |Cii |

j=N

j=1, j=i

|Cij | |Cii |

j=1, j=i

|Eij | = |Dii |

j=N

| D1 E
j=1, j=i

ij

ou bien :
j=N

i [1, N ],

1>
j=1, j=i

|Bij |

do`, avec le thor`me de Gerschgrin, une relation sur les valeurs propres l de B : u e e o
j=N

i [1, N ],

||l Bii ||C l


j=1, j=i

|Bij | < 1

et comme Bii = 0 : ||l ||C < 1 l en particulier, la valeur propre dont la norme est la plus grande vrie galement cette quation. Ceci e e e implique que le rayon spectral de B est strictement infrieur ` 1. La suite (X n )nIN converge donc e a (et la mthode de Jacobi converge). Il existe donc une solution ` lquation CX = S. Cette solution e a e est unique12 et la matrice C est donc inversible.
reconna la mthode de Jacobi t e peut le voir par labsurde. En eet, supposons quil existe deux solutions distinctes X1 et X2 ` lquation a e CX = S. Alors Y = X2 X1 vrie CY = 0, soit DY = EY , donc D1 EY = Y . Ceci signie que Y (qui nest e pas nul, par hypoth`se) est vecteur propre de D1 E avec = 1 pour valeur propre associe. Or, le rayon spectral de e e D1 E est strictement infrieur ` 1 et = 1 ne peut donc pas tre une valeur propre de D1 E. En consquence, il ne e a e e peut exister quune seule solution ` lquation CX = S. a e
12 On 11 On

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 89/277

6.5.2 Avec prise en compte des termes issus de


Introduction

dans EM n t

Pour montrer que la matrice EM n est inversible, on va montrer quelle est ` diagonale strictement a dominante. Pour cela, on va considrer successivement les contributions : e - des termes direntiels dordre 0 linaires en f n+1,k+1 , e e , - des termes issus de la prise en compte de t - des termes direntiels dordre 1 (convection), e - des termes direntiels dordre 2 (diusion). e Pour chacune de ces contributions, on va examiner la dominance de la diagonale de loprateur linaire e e associ. Si, pour chaque contribution, la dominance de la diagonale est acquise, on pourra alors conclure e a e a ` la dominance de la diagonale pour la matrice (somme) compl`te13 EM n et donc ` son inversibilit. e

Contributions des termes differentiels dordre 0 lineaires en f n+1,k+1


Lunique contribution est sur la diagonale : il faut donc vrier quelle est strictement positive. e e Pour chaque ligne I, fsimp I (cf. (II.6.15)) contient au minimum la quantit strictement positive14 n |i | I . Les autres expressions, ( |i | (Tsimp )I , +|i | I , |i | (Tspd,imp ) I ), lorsquelles existent, t contribuent toutes positivement15 . Loprateur linaire associ ` ces contributions vrie donc bien la dominance stricte de la diagonale e e ea e (proprit 1). Ce nest cependant pas vrai si on extrapole les termes source, ` cause de Tsimp . Il en ee a rsulte une contrainte sur la valeur du pas de temps. e

Contributions des termes differentiels dordre 1 et des termes issus de la prise en compte de t
Les termes considrs sont au nombre de deux dans (II.6.11) : ee - la contribution issue de la prise en compte de se retrouve dans fsimp I (quation II.6.15), e t - la contribution du terme de convection linaris. e e Apr`s intgration spatiale, la somme de ces deux termes discrets scrit : e e e 1 2 + 1 2 ( mn + | mn | ) fIn+1,k+1 + ( mn | mn |) fJn+1,k+1 ij ij ij ij
jV ois(i) n+1,k+1 ( mnik + | mnik | ) fIn+1,k+1 + ( mnik |mnik |) f bik b b b b kb (i)

(II.6.21)

(II.6.22)

Pour chaque ligne I, on va chercher les proprits de dominance de la diagonale en traitant sparment ee e e les faces internes (quation (II.6.21)) et les faces de bord (quation (II.6.22)). e e la contribution des faces internes ij (facteur de fIn+1,k+1 ) ` la diagonale est positive ; la a contribution aux extradiagonales est ngative (facteur de fJn+1,k+1 ) et la somme de ces contributions e
13 Ce raisonnement nest pas optimal (la somme de valeurs absolues tant suprieure ` la valeur absolue de la somme), e e a mais permet dobtenir des conclusions dans le cas prsent (condition susante). e 14 Ceci permettra de conclure ` la stricte dominance de la diagonale de la matrice somme compl`te EM . a e n 15 Le terme de dissipation 1 , spcique ` ltude de la variance des uctuations, est positif par dnition et ne e a e e R k
f

remet donc pas en cause la conclusion.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 90/277

est exactement nulle (quation (II.6.21)). Si lon note CIJ les coecients de la matrice issus de la e
J=N

contribution de ces termes, on a donc |CII |


J=1, J=I

|CIJ | qui traduit la dominance simple

(lingalit nest pas stricte) de la diagonale et r`gle la question des contributions des faces internes. e e e la contribution des faces de bord doit tre rcrite en utilisant lexpression des conditions aux e ee limites sur f pour prciser la valeur de f bik (on omet lexposant ( n + 1, k + 1) pour allger les notae e tions) : - pour une condition de Dirichlet : f bik = 0, - pour une condition de Neumann : f bik = fI , - pour une condition mixte (f bik = + fi ) : f bik = fI . Pour la contribution des faces de bord, il faut alors considrer deux cas de gure possibles. e Le ux de masse au bord est positif ou nul ( mnik = ( u)nik . S bik 0). Cette situation b b correspond par exemple aux sorties standards (uide sortant du domaine), aux symtries ou e aux parois tanches (ux de masse nul). Les contributions aux faces de bord sont alors toutes e nulles, quelles que soient les conditions aux limites portant sur la variable f . En consquence, la e diagonale issue de ces contribution est simplement dominante. Le ux de masse au bord est strictement ngatif. Cette situation correspond ` une entre e a e de uide dans le domaine. Les contributions considres scrivent alors : ee e
n+1,k+1 ( mnik ) fIn+1,k+1 + ( mnik ) f bik b b kb (i)

(II.6.23)

Il convient alors de distinguer plusieurs situations, selon le type de condition ` la limite portant a sur f : si la condition ` la limite de f est de type Dirichlet, seule subsiste une contribution a positive ou nulle ` la diagonale, qui assure donc la dominance simple : a ( mnik ) fIn+1,k+1 b
kb (i)

(II.6.24)

si la condition ` la limite de f est de type Neumann, la somme des contributions dues a aux faces de bord est alors nulle, ce qui assure donc la dominance simple. si la condition ` la limite de f est de type mixte, la contribution des faces de bord est a sur la diagonale et vaut : 1 2 (1 )( mnik ) fIn+1,k+1 b
kb (i)

(II.6.25)

On ne peut pas se prononcer quand ` la dominance de la diagonale, ` cause de la prsence de a a e (1) (la valeur de est xe par lutilisateur) et la dmarche adopte ici ne permet donc pas e e e de conclure. Il faut nanmoins noter que cette situation est rare dans les calculs standards. Elle e demande un complment danalyse et sera pour le moment exclue des considrations exposes e e e dans le prsent document. e

On peut conclure, quand il ny a pas de condition ` la limite de type mixte, que la matrice associe a e aux contributions des termes direntiels dordre 1 (convectifs) et ` la prise en compte des termes issus e a de et est ` diagonale simplement dominante. a t

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 91/277

Contributions des termes differentiels dordre 2


On va considrer enn les contributions des termes direntiels dordre 2 (issus du terme e e a e div (K n grad f n+1,k+1 )). Pour ces termes, la contribution ` la diagonale est positive16 , ngative aux extradiagonales16 , compte tenu de :
i

div (K n grad f n+1,k+1 ) d Kn ij


jV ois(i)

fJn+1,k+1 fIn+1,k+1 . Sij IJ k

K nik b
b (i)

n+1,k+1 f bik fIn+1,k+1

IF

. Sbik (II.6.26)

Considrons deux cas : e - la cellule courante I na que des faces internes au domaine de calcul (pas de faces de bord). La somme des contributions est nulle. On a donc dominance simple de la diagonale. - la cellule courante I a des faces de bord. La somme des contributions diagonales et extradiagonales est positive quand on a une condition ` la limite de type Dirichlet ou de type Neumann a sur f . La diagonale est alors strictement dominante. Lorsquil y a des conditions ` la limite de a type mixte, il nest plus possible de conclure (situation carte prcdemment). e e e e On peut conclure, quand il ny a pas de condition ` la limite de type mixte, que la matrice associe a e aux contributions des termes direntiels dordre 2 est au moins ` diagonale simplement dominante. e a

Conclusion
En travaillant sur des maillages non pathologiques (` transmittivit positive, voir la note de bas de a e a page numro 16) et en nimposant pas de condition ` la limite de type mixte sur les variables, on e peut donc conclure que EM n est la somme de matrices ` diagonale simplement dominante et dune a a matrice ` diagonale strictement dominante (paragraphe 6.5.2). Elle est donc ` diagonale strictement a dominante, et donc inversible (de plus, la mthode itrative de Jacobi converge). e e

6.5.3 Sans prise en compte des termes issus de


Introduction

dans EM n t

Pour identier les cas dans lesquels la matrice EM n est inversible, on va rechercher les conditions qui assurent la dominance de la diagonale. Par rapport ` lanalyse prsente au paragraphe 6.5.2, seules a e e di`rent les considrations relatives aux contributions des termes direntiels dordre 1, puisquelles e e e sont traites au paragraphe 6.5.2 avec les termes issus de la prise en compte de e . t

Contributions des termes differentiels dordre 1


La contribution du terme de convection est la seule ` prendre en compte. Elle scrit, dapr`s les a e e quations (II.6.15) et la discrtisation explicite pour le sous-programme covofi : e e e 1 2
16 Ceci

( + mn + | mn | ) fIn+1,k+1 + ( mn | mn |) fJn+1,k+1 ij ij ij ij
jV ois(i)
n

(II.6.27)

nest en fait pas toujours vrai. En eet, pour chaque face ij, la transmittivit K Sij fait intervenir la e I J mesure algbrique du segment I J , o` I et J sont les projets orthogonaux sur la normale ` la face du centre des e u e a cellules voisines. Cette grandeur est une valeur algbrique et peut thoriquement devenir ngative sur certains maillages e e e pathologiques, contenant par exemple des mailles non convexes. On pourra se reporter au dernier point ` traiter du a sous-programme matrix.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 92/277

1 2

n+1,k+1 ( + mnik + | mnik | ) fIn+1,k+1 + ( mnik |mnik |) f bik b b b b kb (i)

(II.6.28)

On constate que pour chaque ligne I, la contribution des faces internes (facteur de fIn+1,k+1 ) ` la a n+1,k+1 diagonale est positive et quelle est ngative aux extradiagonales (facteur de fJ e ). Cependant, contrairement au cas prsent au paragraphe 6.5.2, la somme de ces contributions nest pas nulle dans e e le cas gnral. Pour obtenir un rsultat quant ` la dominance de la diagonale, il faut faire intervenir e e e a e la version discr`te de la proprit (II.6.18) rappele ci-dessous : e ee div( u) d = 0
i

Soit, sous forme discr`te : e mn + ij


jV ois(i) kb (i)

mnik = 0 b

(II.6.29)

Il nest donc pas possible danalyser sparment les contributions des faces internes et celles des faces e e de bord (contrairement ` la situation rencontre au paragraphe 6.5.2). On se place ci-apr`s dans le a e e cas gnral dune cellule qui a des faces internes et des faces de bord (si elle na que des faces internes, e e la dmonstration est la mme, mais plus simple. On peut lcrire en considrant formellement que la e e e e cellule a zro faces de bord, cest ` dire que b (i) est lensemble vide). e a Il faut alors considrer deux cas de gure, selon la valeur du ux de masse aux faces de bord (ventuelles) e e de la cellule : Le ux de masse au bord est positif ou nul ( mnik = ( u)nik . S bik 0). Cette situation b b correspond ` des cellules qui ont des faces de bord de sortie standard (uide sortant du domaine), a de symtrie ou de paroi tanche (ux de masse nul). Les contributions scrivent alors : e e e 1 2 ( + mn + | mn | ) fIn+1,k+1 + ( mn | mn |) fJn+1,k+1 + ij ij ij ij
jV ois(i) kb (i)

mnik fIn+1,k+1 b

(II.6.30) Dans ce cas, la somme des contributions ` la diagonale est positive, les contributions aux extraa diagonales sont ngatives et, avec la relation (II.6.29), on vrie que la somme des contributions e e diagonales et extradiagonales est nulle. On a donc dominance simple de la diagonale. Le ux de masse au bord est strictement ngatif. Cette situation correspond ` des cellules e a qui ont des faces de bord dentre standard (entre de uide dans le domaine). Les contributions e e considres scrivent alors : ee e 1 2 ( + mn + | mn | ) fIn+1,k+1 + ( mn | mn |) fJn+1,k+1 + ij ij ij ij
jV ois(i) kb (i) n+1,k+1 mnik f bik b

(II.6.31) Il convient alors de distinguer plusieurs situations, selon le type de condition ` la limite portant a sur f (on omet lexposant ( n + 1, k + 1) pour allger les notations) : e - pour une condition de Dirichlet : f bik = 0, - pour une condition de Neumann : f bik = fI , - pour une condition mixte (f bik = + fI ) : f bik = fI . Selon le cas on se trouve dans une des situations suivantes : si la condition ` la limite de f est de type Dirichlet, la contribution des faces de a bord est nulle dans la matrice. La contribution des faces internes ` la diagonale est positive, la a contribution aux extradiagonales ngative et la somme de ces contributions vaut e mn , ij
jV ois(i)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 93/277

soit avec la relation (II.6.29) : mn = ij


jV ois(i) kb (i)

mnik b

Elle est strictement positive et la diagonale est donc strictement dominante. si la condition ` la limite de f est de type Neumann, la contribution des faces de a bord se rduit au terme : e mnik fIn+1,k+1 . La somme des contributions ` la diagonale est a b
kb (i)

alors SCi : SCi =

1 2

( + mn + | mn | ) + ij ij
jV ois(i) kb (i)

mnik b

En utilisant deux fois la relation (II.6.29), on obtient donc pour la diagonale : 1 1 SCi = | mn | + mnik = ( | mn | mn ) ij b ij ij 2 2
jV ois(i) kb (i) jV ois(i)

Cette grandeur est positive et gale ` loppos de la somme des termes extradiagonaux qui sont e a e tous ngatifs. La diagonale est donc simplement dominante. e si la condition ` la limite de f est de type mixte, la somme des contributions dues aux a faces de bord est : mnik fIn+1,k+1 b
kb (i)

(II.6.32)

On ne peut donc pas conclure quant au signe de cette contribution, le facteur tant choisi e librement par lutilisateur. Cette situation a t carte dans le paragraphe 6.5.2. eee e

On peut donc conclure, quand il ny a pas de condition ` la limite de type mixte, que la matrice a associe aux contributions des termes direntiels dordre 1 (convectifs) est ` diagonale simplement e e a e e dominante, ` condition que la relation (II.6.29) soit vrie exactement. a

Conclusion
En travaillant sur des maillages non pathologiques (` transmittivit positive, voir la note de bas de a e page numro 16) et en nimposant pas de condition ` la limite de type mixte sur les variables, on peut e a a e donc conclure que EM n est ` diagonale strictement dominante, donc inversible (et la mthode itrative de Jacobi converge) ` condition que la relation (II.6.29) soit vrie exactement. Ce nest e a e e gnralement pas le cas (la prcision du solveur de pression et la prcision machine sont nies). Mme e e e e e n |i | I si la contribution diagonale en peut sure ` assurer la dominance, on a cependant souhait, a e t dans Code Saturne, saranchir du probl`me potentiel en prenant en compte les termes issus de e t dans la matrice.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 94/277

6.6
6.6.1

` Annexe 2 : Remarques a propos du respect du principe du maximum discret


Introduction

Les considrations exposes ici sont relatives au fait que, en continu, une variable qui nest que convecte e e e par un champ de dbit ` divergence nulle doit rester dans les bornes minimales et maximales dnies e a e par les conditions initiales et par les conditions aux limites en espace. Ainsi, les valeurs dun scalaire passif initialement nul dont les conditions aux limites sont des conditions de Neumann homog`ne et e des conditions de Dirichlet de valeur 1 devront ncessairement rester comprises dans lintervalle [0 ; 1]. e Cest ce que lon entend ici par principe du maximum. e e e e e Soient u un champ de vitesse g et connu et t un rel positif. On consid`re le probl`me mod`le P de convection des variables scalaires et f , dni par : e

+ div ( u) = 0 t (f ) + div (( u) f ) = 0 t

(II.6.33)

avec une condition initiale f 0 donne ainsi que des conditions aux limites associes sur f de type e e Dirichlet ou Neumann. Dans Code Saturne, la deuxi`me quation de P est rcrite en continu, en utilisant la premi`re, sous la e e ee e forme :

f f div ( u) + div (( u) f ) = 0 t

(II.6.34)

et discrtise temporellement comme suit : e e

f n+1 f n f n+1 div ( u)n + div (( u)n f n+1 ) = 0 t

(II.6.35)

Dans un premier temps, on va tudier la discrtisation spatiale associe ` (II.6.35), qui correspond e e e a donc ` la prise en compte de la contribution de a dans lquation en continu (et se traduit par la e t n imp prsence de div(( u) ) dans lexpression de fs I ), puis dans un deuxi`me temps, la discrtisation e e e spatiale de lexpression ;

f n+1 f n + div (( u)n f n+1 ) = 0 t

(II.6.36)

qui correspond ` un probl`me de convection pure classique. a e On tudiera ensuite un exemple simpli (monodimensionnel ` masse volumique constante). e e a Les considrations prsentes mriteraient dtre approfondies. e e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 95/277

6.6.2

Cas general
f n+1 f n f n+1 div ( u)n + div (( u)n f n+1 ) = 0 t

Discretisation spatiale de n

En intgrant sur une cellule i ` laide de la formulation volumes nis habituelle, on obtient : e a [n i = n I +
jV ois(i)

f n+1 f n f n+1 div ( u)n + div (( u)n f n+1 )] d t |i | ( u)nik . S bik ) fIn+1 ( ( u)n . S ij + ij b t (
jV ois(i) u)n . S ij ffn+1 ij ij

+
kb (i)

kb (i) ( u)nik . S bik b

(II.6.37)

ffn+1 b ik

n I

|i | n f t I

o` ffn+1 et ffn+1 sont les valeurs de f aux faces internes et de bord issues du choix du schma convectif. u ij e b ik En reprenant les notations prcdentes, en imposant un schma dcentr amont au premier membre e e e e e n+1,k+1 n+1,k+1 (i.e. en exprimant f ij et f bik ) et en raisonnant en incrments (cf. sous-programme e navsto), on aboutit ` : a |i | f n+1,k n I t I 1 + ( mn + | mn | ) fIn+1,k+1 + ( mn | mn |) fJn+1,k+1 ij ij ij ij 2 jV ois(i) 1 n+1,k+1 + ( mnik + | mnik | ) fIn+1,k+1 + ( mnik |mnik |) f bik b b b b 2
kb (i)

= n

|i | n ( fIn+1,k fI ) t
n+1,k ( u)n . S ij f ij + ij kb (i) n+1,k ( u)nik . S bik f bik b

(II.6.38)

jV ois(i)

jV ois(i)

( u)n . S ij + ij
kb (i)

( u)nik . S bik b

fIn+1,k

avec :

fIn+1,0 = fIn fIn+1,k+1 = fIn+1,k+1 fIn+1,k , k IN

(II.6.39)

et (f n+1,k )kIN suite convergeant vers f n+1 , n entier donn, solution de (II.6.35) . e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


n

Code Saturne documentation Page 96/277

f n+1 f n Discretisation spatiale de + div (( u)n f n+1 ) = 0 t


En procdant de faon analogue et en adoptant les mmes hypoth`ses, on obtient : e c e e |i | n f n+1,k+1 t I 1 + ( + mn + | mn | ) fIn+1,k+1 + ( mn | mn |) fJn+1,k+1 ij ij ij ij 2 jV ois(i) 1 n+1,k+1 + ( + mnik + | mnik | ) fIn+1,k+1 + ( mnik |mnik |) f bik b b b b 2
kb (i)

(II.6.40)

= n

|i | n ( fIn+1,k fI ) t ( u)n . S ij ffn+1,k + ij ij


kb (i)

jV ois(i)

( u)nik . S bik ffn+1,k b bik

(o` u et convectif) avec :

ffn+1 ij

ffn+1 b ik

sont les valeurs de f aux faces internes et de bord issues du choix du schma e

fIn+1,0 = fIn fIn+1,k+1 = fIn+1,k+1 fIn+1,k , k IN

(II.6.41)

et (f n+1,k )kIN suite convergeant vers f n+1 , n entier donn, solution de (II.6.36) . e

6.6.3

Exemple pour le principe du maximum

On va maintenant se placer en monodimensionnel, sur un maillage rgulier form de trois cellules de e e e pas h constant (gure II.6.1) et tudier le comportement du premier membre pour les deux types dexpressions, entre le pas de temps n t et le pas de temps (n + 1) t, avec, comme condition initiale 0 0 0 f1 = f2 = f3 = 0 et comme conditions aux limites, une de type Dirichlet et lautre de type Neumann homog`ne : e f b1 = 1 f (II.6.42) =0 x b2 On supposera de plus que : le schma convectif utilis est le schma upwind e e e la masse volumique est constante ( u)n1 > 0, ( u)n > 0 , ( u)n > 0 , ( u)n2 > 0 12 23 b b
Sb 1 (u)b 1 i=1 1 (u) 12 2 (u) 23 3 (u)b 2 Sb 2 x

et

S b1 < 0.

Figure II.6.1: Dnition du domaine de calcul unidimensionnel considr. e ee On sintresse ` linuence sur le respect du principe du maximum discret de la prcision avec laquelle e a e est vrie sous forme discr`te la relation : e e e i [1, N ],
i

div ( u) d = 0

12 i=2 i=3

S 23

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 97/277

soit, ici : ( u)n1 . S b1 = ( u)n . S 12 = ( u)n . S 23 = ( u)n2 . S b2 b 12 23 b (II.6.43)

Prise en compte de la contribution de

dans la matrice t

Le syst`me ` rsoudre est alors, en omettant pour simplier lexposant ( n + 1, k + 1) : e a e |1 | f1 t n |2 | 2 f2 t |3 | n 3 f3 t ce qui donne :
n 1

( u)n1 . S b1 f1 b + + ( u)n . S 12 f2 12 ( u)n . S 23 f3 23 ( u)n . S 12 f1 12 ( u)n . S 23 f2 23

= ( u)n1 . S b1 f b1 b = = 0 0 (II.6.44)

do` : u

( u)n1 . S b1 b n |1 | ( u)n . S 1 b1 b1 t n ( u) 12 . S 12 f2 = + f1 |2 | n + ( u)n . S 12 2 12 t n ( u) 23 . S 23 f3 = + f2 n |3 | + ( u)n . S 3 23 23 t f1 < 1 f2 < 1 f3 < 1 f1 = f b1

(II.6.45)

(II.6.46)

On obtient donc bien une solution qui vrie le principe du maximum discret, mme pour des grands e e pas de temps t, et ce, quelle que soit la prcision avec laquelle est vrie, ` ltape de correction, la e e e a e forme discr`te (II.6.43) de la conservation de la masse e ici.
i

div ( u) d = 0 dont on ne sest pas servi

Sans la contribution de
On obtient de mme : e
n 1 n 2 n 3

dans la matrice t

|1 | f1 t |2 | f2 t |3 | f3 t

+ +

( u)n . S 12 f1 12 ( u)n . S 23 f2 23 ( u)n . S 12 f1 12 + ( u)n2 . S b2 f3 b

= ( u)n1 . S b1 f b1 b = = 0 0 (II.6.47)

( u)n . S 23 f2 23

soit : ( u)n1 . S b1 b |1 | + ( u)n . S 12 12 t ( u)n . S 12 12 |2 | + ( u)n . S 23 23 t n ( u) 23 . S 23 |3 | + ( u)n2 . S b2 b t

f1 = f2 = f3 =

f b1
n 1

f1
n 2

(II.6.48)

f2
n 3

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 98/277

Ici, on constate que le respect du principe du maximum discret : 1 f1 f2 1 f3 1 est quivalent ` la condition : e a ( u)n . S b1 b1 ( u)n . S 12 12 ( u)n . S 23 23

(II.6.49)

|1 | + ( u)n . S 12 12 t n |2 | n 2 + ( u) 23 . S 23 t n |3 | + ( u)n2 . S b2 3 b t
n 1

(II.6.50)

e Contrairement ` la situation du paragraphe 6.6.3, on ne peut obtenir ici un rsultat quen faisant a e a intervenir lgalit (II.6.43), forme discr`te de la conservation de la masse. On obtient bien alors, ` e e partir du syst`me prcdent : e e e f1 < 1 f2 < 1 (II.6.51) f3 < 1 Si lon sintresse ` la cellule 1 et que lon suppose ( u)n . S 12 = ( u)n1 . S b1 ( u)n . S 12 (o` e a u 12 12 b est la prcision locale relative pour lquation de conservation de la masse discr`te), on constate que e e e lon obtient f1 > fb1 = 1 (valeur non admissible) d`s lors que : e 1 ( u)n . S 12 t 12 < 1 |1 | cest-`-dire d`s que le nombre de CFL local a e locale . ( u)n . S 12 t 12 exc`de linverse de la prcision relative e e 1 |1 |

6.6.4

Conclusion

dans la matrice permet un meilleur respect du principe du t maximum discret, lorsque la prcision de e div ( u) d = 0 nest pas exactement vrie. e e Prendre en compte la contribution de
i

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 99/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 100/277

7- Sous-programme gradmc
7.1 Fonction

Le but de ce sous-programme est de calculer, au centre des cellules, le gradient dune fonction scalaire, galement connue au centre des cellules. Pour obtenir la valeur de toutes les composantes du gradie ent, une mthode de minimisation par moindres carrs est mise en uvre : elle utilise lestimation e e dune composante du gradient aux faces, obtenue ` partir des valeurs de la fonction au centre des a cellules voisines. Cette mthode est active lorsque lindicateur IMRGRA vaut 1 et on lutilise alors e e pour le calcul des gradients de toutes les grandeurs. Elle est beaucoup plus rapide que la mthode e utilise par dfaut (IMRGRA=0), mais prsente linconvnient dtre moins robuste sur des maillages e e e e e non orthogonaux, le gradient produit tant moins rgulier. e e

7.2

Discretisation
Sij

I F

Figure II.7.1: Dnition des direntes entits gomtriques pour les faces internes (gauche) et de bord e e e e e (droite). On se reportera aux notations de la gure II.7.1. On cherche ` calculer Gc,i , gradient au centre de la a cellule i de la fonction scalaire P . Soit Gf,ij . dij une estimation ` la face ij (dont les voisins sont les a cellules i et j) du gradient projet dans la direction du vecteur dij (` prciser). De mme, on note e a e e i`me e Gf b,ik . db,ik une estimation ` la face de bord ik (k a face de bord appuye sur la cellule i) du gradient e projet dans la direction du vecteur db,ik (` prciser). Lidal serait de pouvoir trouver un vecteur Gc,i e a e e tel que, pour toute face interne ij (j V ois(i)) et toute face de bord ik (k b (i)), on ait : Gc,i . dij = Gf,ij . dij Gc,i . db,ik = Gf,b,ik . db,ik (II.7.1)

Comme il est gnralement impossible dobtenir lgalit, on cherche ` minimiser la fonctionnelle Fi e e e e a suivante : Fi (Gc,i , Gc,i ) = 1 2 Gc,i . dij Gf,ij . dij
jV ois(i) 2

1 2

Gc,i . db,ik Gf,b,ik . db,ik


kb (i)

Pour ce faire, on annule la drive de Fi (Gc,i , Gc,i ) par rapport ` chacune des trois composantes e e a (Gc,i,x , Gc,i,y , Gc,i,z ) du vecteur inconnu Gc,i et lon rsout le syst`me qui en rsulte. e e e Pour pouvoir inverser le syst`me localement et donc ` faible cot, on cherche ` viter les dpendances e a u ae e de Gf,ij . dij et de Gf,b,ik . db,ik au gradient Gc,j (gradient pris dans les cellules voisines). Un choix

J J

ik

Sb

I i

(II.7.2)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 101/277

particulier du vecteur d permet datteindre ce but : dij = (I F )l IJ et db,ik = = nb,ik ||IJ|| ||I F || (II.7.3)

Ainsi, pour les faces internes, le vecteur d est le vecteur norm joignant le centre des cellules voisines. e La quantit Gf,ij . dij est relie directement aux valeurs de la variable P prises au centre des cellules, e e sans faire intervenir de gradient : Pj Pi (II.7.4) Gf,ij . dij = ||IJ|| Pour les faces de bord, il est possible dopter pour un choix plus naturel sans pour autant faire intervenir le gradient des cellules voisines : on utilise pour d le vecteur norm orthogonal ` la face, dirig vers e a e lextrieur (le gradient le mieux connu, en particulier au bord, tant le gradient normal aux faces). On e e a alors : Pb,ik Pi (II.7.5) Gf,b,ik . db,ik = ||I F || On utilise alors les relations (II.7.6) au bord (Aik et Bik permettent de reprsenter les conditions aux e limites imposes, Pb,ik en est issue et reprsente la valeur ` la face de bord) : e e a Pi Pb,ik On obtient nalement : Gf,b,ik . db,ik = 1 Aik + (Bik 1) (Pi + II .Gc,i ) ||I F || (II.7.7) = Pi + II .Gc,i = Aik + Bik Pi = Aik + Bik (Pi + II .Gc,i ) (II.7.6)

Lquation (II.7.7), qui fait intervenir Gc,i , doit tre utilise pour modier lexpression (II.7.2) de la e e e fonctionnelle avant de prendre sa direntielle. Ainsi : e Fi (Gc,i , Gc,i ) = 1 2 1 2 Gc,i . dij Gf,ij . dij
jV ois(i) 2

+
2

kb (i)

Bik 1 1 Gc,i . (db,ik II ) (Aik + (Bik 1) Pi ) ||I F || ||I F ||

(II.7.8)

On annule alors la drive de Fi (Gc,i , Gc,i ) par rapport ` chacune des trois composantes (Gc,i,x , Gc,i,y , Gc,i,z ) e e a du vecteur inconnu Gc,i . On obtient, pour chaque cellule i, le syst`me 3 3 local (II.7.9) : e Ci,x x Ci,y x Ci,z x Ci,x y Ci,y y Ci,z y
C
i

Ci,x z Gc,i,x Ti,x Ci,y z Gc,i,y = Ti,y Ci,z z Gc,i,z Ti,z


Gc,i Ti

(II.7.9)

avec

Ci,l m Ti,l

=
jV ois(i)

(dij )l (dij )m +
kb (i)

db,ik

Bik 1 II ||I F ||

db,ik
l

Bik 1 II ||I F ||

=
jV ois(i)

(Gf,ij . dij )(dij )l +


kb (i)

1 Bik 1 (Aik + (Bik 1) Pi ) db,ik II ||I F || ||I F ||

(II.7.10)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 102/277

On obtient nalement : Ci,l m Ti,l =


jV ois(i)

1 (IJ)l (IJ)m + ||IJ||2 (IJ)l (Pj Pi ) + ||IJ||2

nb,ik +
kb (i)

1 Bik II ||I F ||

nb,ik +
l

1 Bik II ||I F ||

=
jV ois(i)

kb (i)

1 Bik 1 (Aik + (Bik 1) Pi ) nb,ik II ||I F || ||I F ||

(II.7.11)

7.3

Mise en uvre

La variable dont il faut calculer le gradient est contenue dans le tableau PVAR. Les conditions aux limites associes sont disponibles au travers des tableaux COEFAP et COEFBP qui reprsentent respectivement e e les grandeurs A et B utilises ci-dessus. Les trois composantes du gradient seront contenues, en sortie e du sous-programme, dans les tableaux DPDX, DPDY et DPDZ. Calcul de la matrice e Les NCEL matrices C i (matrices 33) sont stockes dans le tableau COCG, (de dimension NCELET33). Ce dernier est initialis ` zro, puis son remplissage est ralis dans des boucles sur les faces internes ea e e e e e a et les faces de bord. Les matrices C i tant symtriques, ces boucles ne servent qu` remplir la partie triangulaire suprieure, le reste tant complt ` la n par symtrie. e e eea e Pour viter de raliser plusieurs fois les mmes calculs gomtriques, on conserve, en sortie de souse e e e e programme, dans le tableau COCG, linverse des NCEL matrices C i . De plus, pour les NCELBR cellules qui ont au moins une face de bord, on conserve dans tableau COCGB, de dimension NCELBR 3 3, la contribution aux matrices C i des termes purement gomtriques. On prcise ces points ci-dessous. e e e Notons donc d`s ` prsent quil ne faut pas utiliser les tableaux COCG et COCGB par ailleurs comme e a e tableaux de travail. Cellule ne possdant pas de face de bord e Lorsque, pour une cellule, aucune des faces nest une face de bord du domaine, lexpression de la matrice C i ne fait intervenir que des grandeurs gomtriques et elle reste inchange tant que le maillage nest pas e e e dform. Son inverse nest donc calcul quune seule fois, au premier appel de GRADMC avec ICCOCG=1 e e e (lindicateur INICOC, local ` GRADMC, est positionn ` 0 d`s lors que ces calculs gomtriques ont t a ea e e e ee raliss une fois). Le tableau COCG est ensuite rutilis lors des appels ultrieurs au sous-programme e e e e e GRADMC. Cellule possdant au moins une face de bord e Lorsque lensemble des faces dune cellule contient au moins une face de bord du domaine, un terme contributeur aux matrices C i est spcique ` la variable dont on cherche ` calculer le gradient, au e a a travers du coecient Bik issu des conditions aux limites. Il sagit de : nb,ik +
kb (i)

1 Bik II ||I F ||

nb,ik +
l

1 Bik II ||I F ||

(II.7.12)
m

Au premier appel ralis avec ICCOCG=1, on calcule la contribution des faces internes et on les stocke e e dans le tableau COCGB, qui sera disponible lors des appels ultrieurs. En eet, la contribution des faces e internes est de nature purement gomtrique et reste donc inchange tant que le maillage ne subit pas e e e de dformation. Elle scrit : e e 1 (IJ)l (IJ)m ||IJ||2
jV ois(i)

` A tous les appels raliss avec ICCOCG=1, les termes qui dpendent des faces de bord (II.7.12) sont e e e ensuite calculs et on additionne cette contribution et COCGB qui contient celle des faces internes : e e on obtient ainsi les matrices C i dans le tableau COCG. Leur inverse se calcule indpendamment pour chaque cellule et on le conserve dans COCG qui sera disponible lors des appels ultrieurs. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 103/277

Lorsque GRADMC a t appel une fois avec ICCOCG=1, des calculs peuvent tre vits en positionnant ee e e e e lindicateur ICCOCG ` 0 (si ICCOCG est positionn ` 1, tous les calculs relatifs aux cellules ayant au a e a moins une face de bord sont refaits). - Si GRADMC est utilis pour calculer le gradient de la mme variable (ou, plus gnralement, dune e e e e variable dont les conditions aux limites conduisent aux mmes valeurs du coecient Bik ), les e matrices C i sont inchanges et leur inverse est disponible dans COCG (on positionne ICCOCG ` 0 e a pour viter de refaire les calculs). e - Dans le cas contraire, les termes relatifs aux faces de bord (II.7.12) sont recalculs et on additionne e cette contribution et COCGB qui fournit celle des faces internes : on obtient ainsi les matrices C i dans COCG. Il reste alors ` inverser ces matrices. a Remarque : Pour sauvegarder les contributions gomtriques dans COCGB, on a recours a une boucle portant sur les e e NCELBR cellules dont au moins une face est une face de bord du domaine. Le numro de ces cellules est e donn par IEL = ICELBR(II) (II variant de 1 ` NCELBR). Les oprations ralises dans cette boucle e a e e e sont du type COCGB(II,1,1) = COCG(IEL,1,1). La structure (injective) de ICELBR permet de forcer la vectorisation de la boucle. Inversion de la matrice On calcule les coecients de la comatrice, puis linverse. Pour des questions de vectorisation, la boucle sur les NCEL lments est remplace par une srie de boucles en vectorisation force sur des blocs de ee e e e NBLOC=1024 lments. Le reliquat (NCEL E(NCEL/1024) 1024) est trait apr`s les boucles. La ee e e matrice inverse est ensuite stocke dans COCG (toujours en utilisant sa proprit de symtrie). e ee e Calcul du second membre et rsolution e Le second membre est stock dans BX, BY et BZ. Le gradient obtenu par rsolution des syst`mes locaux e e e est stock dans DPDX, DPDY et DPDZ. e Remarque : gradient sans reconstruction (non consistant sur maillage non orthogonal) Dans le cas o` lutilisateur souhaite ne pas reconstruire le gradient (i.e. ne pas inclure les termes de u non orthogonalit au calcul du gradient), une mthode spcique est mise en uvre, qui na pas de e e e rapport avec la mthode de moindres carrs prsente ci-dessus. e e e e Le volume de la cellule i est not i . Pij (resp. Pb,ik ) reprsente la valeur estime de la variable P ` e e e a la face interne ij (resp. ` la face de bord ik) de vecteur normal associ S ij (resp. S b,ik ). Le gradient a e est simplement calcul en utilisant la formule suivante : e 1 (II.7.13) Gc,i = = Pij S ij + Pb,ik S b,ik i
jV ois(i) kb (i)

Les valeurs aux faces sont obtenues simplement comme suit (avec ij = Pij Pb,ik = ij Pi + (1 ij )Pj = Aik + Bik Pi

FJ ): IJ (II.7.14)

7.4

` Points a traiter

Vectorisation force e Il est peut-tre possible de saranchir du dcoupage en boucles de 1024 si les compilateurs sont e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 104/277

capables deectuer la vectorisation sans cette aide. On note cependant que ce dcoupage en boucles e de 1024 na pas de cot CPU supplmentaire, et que le cot mmoire associ est ngligeable. Le seul u e u e e e inconvnient rside dans la relative complexit de lcriture. e e e e Choix du vecteur d IJ a Le choix dij = ||IJ|| permet de calculer simplement une composante du gradient ` la face en ne faisant
I J intervenir que les valeurs de la variable au centre des cellules voisines. Le choix dij = ||I J || serait galement possible, et peut-tre meilleur, mais conduirait naturellement ` faire intervenir, pour le e e a calcul de la composante du gradient normale aux faces, les valeurs de la variable aux points I et J , et donc les valeurs du gradient dans les cellules voisines. Il en rsulterait donc un syst`me coupl, auquel e e e un algorithme itratif (voir GRADRC) pourrait tre appliqu. Laspect temps calcul, atout majeur de la e e e mthode actuelle, sen ressentirait sans doute. e

Amlioration de la mthode e e Cette mthode rencontre des dicults dans le cas de maillages assez non orthogonaux (cas de la e e voiture maill en ttra`dres par exemple). Une voie damlioration possible est dutiliser un support e e e e tendu (le support est lensemble des cellules utilises pour calculer le gradient en une cellule donne). e e e Un exemple est fourni sur la gure II.7.2 ci-dessous : si la cellule I est la cellule courante, on choisit pour support les cellules de centre J telles que la droite (IJ) soit la plus orthogonale possible ` une a face de la cellule I.

Cellule courante : I

Figure II.7.2: Dirents supports pour le calcul du gradient. e

I Support actuel Support etendu


EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 105/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 106/277

8- Sous-programme gradrc

8.1

Fonction

Le but de ce sous-programme est de calculer, au centre des cellules, le gradient dune fonction scalaire, galement connue au centre des cellules. Pour obtenir la valeur du gradient, une mthode itrative de ree e e construction pour les maillages non orthogonaux est mise en uvre : elle fait appel ` un dveloppement a e limit dordre 1 en espace sur la variable, obtenu ` partir de la valeur de la fonction et de son gradient e a au centre de la cellule. Cette mthode, choisie comme option par dfaut, correspond ` IMRGRA = 0 et e e a est utilise pour le calcul des gradients de toutes les grandeurs. Cette technique est plus robuste mais e beaucoup plus lente que la mthode par moindres carrs correspondant ` IMRGRA = 1. e e a

8.2

Discretisation

8.2.1 Mthode gnrale e e e


Sij

I F

Figure II.8.1: Dnition des direntes entits gomtriques pour les faces internes (gauche) et de bord e e e e e (droite). On se reportera aux notations de la gure II.8.1, qui correspondent ` celles employes dans le sousa e programme gradmc. On cherche ` calculer G c,i , gradient au centre de la cellule i de la fonction scalaire a P . Le volume de la cellule i est not i . Soit G f,ij la valeur du gradient ` la face ij dont les voisins e a sont les cellules i et j. Pij (resp. Pb,ik ) reprsente la valeur estime de la variable P ` la face interne e e a e ij (resp. ` la face de bord ik, k i`me face de bord appuye sur la cellule i) de vecteur normal associ a e e S ij (resp. S b ik ). Par dnition : e G c,i G f,ij On a : G f,ij = (grad P ) Oij = (grad P ) Fij (` lordre 1 en P ) a An de prendre en compte les non orthogonalits ventuelles du maillage, on calcule le gradient G c,i e e = (grad P ) I = (grad P ) f,ij

J J

ik

Sb

I i

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 107/277

en eectuant un dveloppement limit dordre 1 en espace. On obtient alors : e e |i | (grad P ) I


df e

grad P d =
i jV ois(i)

P ij S ij +
kb (i)

P bik S bik (INC A b,ik + B b,ik PI ) S bik


kb (i)

=
jV ois(i)

[POij + O ij F ij . (grad P ) Oij ] S ij + [ ( ij PI + (1 ij ) PJ ) ] S ij +


jV ois(i) jV ois(i)

= +
kb (i)

O ij F ij . (grad P ) f,ij S ij

(INC A b,ik + B b,ik PI ) S bik (II.8.1)

La variable INC permet daecter correctement les conditions aux limites des quantits dont on veut e prendre le gradient. En eet, INC = 1 correspond ` un calcul de gradient de variable totale et donc ` des conditions aux limites a a standards, INC = 0 correspond ` un calcul de variable en incrment et donc ` des conditions aux limites a e a associes homog`nes. e e En faisant une approximation sur P dordre 1 en espace ` nouveau : a (grad P ) f,ij PI do` : u 1 [(grad P ) I + (grad P ) J ] 2 = PI + II . (grad P ) I =

|i | G c,i =
jV ois(i)

( ij PI + (1 ij ) PJ ) + +

1 O ij F ij . G c,i + G c,j 2

S ij

INC A b,ik + B b,ik PI + B b,ik II . G c,i S bik


kb (i)

FJ . IJ On regroupe ` gauche les termes en G c,i et on obtient : a en notant ij = |i | G c,i


jV ois(i)

1 (O ij F ij . G c,i )S ij 2

B b,ik (II . G c,i ) S bik =


kb (i)

[( ij PI + (1 ij ) PJ )] S ij +
jV ois(i) jV ois(i)

1 (O ij F ij . G c,j )S ij 2 (INC A b,ik + B b,ik PI ) S bik (II.8.2)

+
kb (i)

ce qui donne pour la direction (, = x, y ou z) : 1 |i | G c,i, (O ij F ij ), G c,i, S ij, 2


jV ois(i)

B b,ik
kb (i)

(II ), G c,i, S bik , =

[( ij PI + (1 ij ) PJ )] S ij, +
jV ois(i) jV ois(i)

1 2

(O ij F ij ), G c,j, S ij,

+
kb (i)

(INC A b,ik + B b,ik PI ) S bik ,

(II.8.3)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 108/277

8.2.2 Cas sans reconstruction des non orthogonalits e


Lorsque le maillage est orthogonal ou lorsquon ne veut pas reconstruire, seules les contributions dordre 0 au centre des cellules interviennent dans le calcul du gradient (II = 0, OF = 0) : |i | G c,i
df e

grad P d =
i jV ois(i)

P ij S ij +
kb (i)

P b,ik S bik (INC A b,ik + B b,ik PI ) S bik


kb (i)

=
jV ois(i)

[ ( ij PI + (1 ij ) PJ ) ] S ij +

do` : u 1 = . |i | [ ij PI + (1 ij ) PJ ) ] S ij +
kb (i)

G c,i

(INC A b,ik + B b,ik PI ) S bik (II.8.4)

jV ois(i)

Remarque Le gradient non reconstruit GN Rec se calcule donc tr`s facilement et directement via lquation (II.8.4). e e c,i Il nest cependant pas consistant sur maillage non orthogonal.

8.2.3 Reconstruction
Mthode de rsolution e e
An de pouvoir rsoudre le syst`me (II.8.2), on va impliciter les termes en G c,i , expliciter ceux en G c,j e e et raisonner de facon itrative en introduisant une suite dincrments ( G k )kIN dnie par : e e e i G 0 = GN Rec i c,i G k+1 = Gk+1 Gk c,i i c,i et de syst`me associ, dans la direction : e e

(II.8.5)

|i | G k+1 c,i,
jV ois(i)

1 2

(O ij F ij ), G k+1 S ij, c,i,


kb (i)

B b,ik

(II ), G k+1 S bik , c,i,

=
jV ois(i)

[( ij PI + (1 ij ) PJ )] S ij, +
jV ois(i)

1 2

(O ij F ij ), G k S ij, c,j,

+
kb (i)

(INC A b,ik + B b,ik PI ) S bik ,

(II.8.6)

ou, comme : Gk+1 = Gk + G k+1 c,i c,i i

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 109/277

|i | G k+1 i,
jV ois(i)

(O ij F ij ), G k+1 S ij, c,i,


kb (i)

B b,ik

(II ), G k+1 S bik , c,i,

1 2

= |i | G k + c,i,
jV ois(i)

[( ij PI + (1 ij ) PJ )] S ij, 1 (G k + G k ) S ij, c,i, c,j, 2

+
jV ois(i)

(O ij F ij ),

(II.8.7)

+
kb (i)

(INC A b,ik + B b,ik (PI +

(II ), G k )) S bik , c,i,

Lquation (II.8.7) conduit ` un syst`me matriciel local par rapport ` chacune des trois composantes e a e a e ( G k+1 , G k+1 , G k+1 ) du vecteur inconnu G k+1 . On obtient donc, pour chaque cellule i, le syst`me i,x i,y i,z i 3 3 suivant : k+1 Ri,x G k+1 Ci,x x Ci,x y Ci,x z i,x k+1 Ci,y x Ci,y y Ci,y z G k+1 = Ri,y (II.8.8) i,y k+1 k+1 Ci,z x Ci,z y Ci,z z Ri,z G i,z
C
i

G k+1 i

k+1 Ri

avec, (, = x, y ou z) :

C i, Ci, k+1 R i,

= |i | = = + 1 2

1 2

(O ij F ij ), S ij,
jV ois(i) kb (i)

B b,ik (II ), S bik , B b,ik (II ), S bik , pour = (II.8.9)

(O ij F ij ), S ij,
kb (i)

jV ois(i) |i | G k + c,i, jV ois(i)

[( ij PI + (1 ij ) PJ )] S ij, 1 (G k + G k ) S ij, c,i, c,j, 2 (II ), G k ) S bik , c,i,

(O ij F ij ),
jV ois(i)

+
kb (i)

(INC A b,ik + B b,ik PI +

Linversion de la matrice C i permet de calculer ( G k+1 ) et donc (G k+1 ). Les itrations sarrtent e e i i k+1 lorsque la norme euclidienne du second membre R i tend vers zro (i.e. lorsque la norme euclidienne e de ( G k ) tend vers zro) ou lorsque le nombre ditrations en k x maximal est atteint. e e e i Remarque 3 Pour les conditions aux limites en pression, un traitement particulier est mis en uvre, surtout utile dans les cas o` un gradient de pression (hydrostatique ou autre) ncessite une attention spcique u e e aux bords, o` une condition ` la limite de type Neumann homog`ne est gnralement inadapte. Soit u a e e e e PF b ik la valeur de la pression ` la face associe, que lon veut calculer. a e On note que : I F b ik . (grad P )I = I F b ik . G c,i = I F b ik . P n
F b ik

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 110/277

avec les conventions prcdentes. e e

Sur maillage orthogonal On se place dans le cas dun maillage orthogonal , i.e. pour toute cellule I , I et son projet I sont identiques. Soit M b ik le milieu du segment IF b ik . e On peut crire les galits suivantes : e e e PF b ik PI = PM b ik + M b ik F b ik . = PM b ik P + M b ik I . n P n + M b ik F b ik .
M b ik 2

1 2 P 2 n2
M b ik

+ O(h3 )
M b ik

M b ik

1 2 P + M b ik I . 2 n2
2

+ O(h3 )

avec M b ik I = M b ik F b ik . On obtient donc : PF b ik PI = IF b ik . Grce ` la formule des accroissements nis : a a P n On sintresse aux cas suivants : e condition ` la limite de type Dirichlet a PF b ik = PIM P OSE , aucun traitement particulier =
M b ik

P n

+ O(h3 )
M b ik

(II.8.10)

1 2

P n

+
I

P n

+ O(h2 )
F b ik

(II.8.11)

condition ` la limite de type Neumann homog`ne standard a e On veut imposer : P = 0 + O(h) n F b


ik

(II.8.12)

On a :

P n

=
I

P n

+ O(h)
F b ik

et comme : PF b ik = PI + IF b ik . on en dduit : e PF b ik = PI + IF b ik . soit :

P n

+ O(h2 )
I

(II.8.13)

P n

+ O(h2 )
F b ik

(II.8.14)

PF b ik = PI + O(h2 ) On obtient donc une approximation dordre 1. condition ` la limite de type Neumann homog`ne amliore a e e e Des galits (II.8.10, II.8.11), on tire : e e PF b ik = PI + 1 P IF b ik . 2 n + O(h3 )
I

(II.8.15)

On obtient donc une approximation dordre 2. condition ` la limite de type extrapolation du gradient a e Des deux galits (II.8.10, II.8.11), on dduit : e e PF b ik = PI + IF b ik . P n + O(h3 )
I

P n

=
F b ik

P n

(II.8.16)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 111/277

On obtient donc galement une approximation dordre 2. e

Sur maillage non orthogonal PF b ik = PI +

Dans ce cas, on peut seulement crire : e (II.8.17)

1 I F b ik . [ (grad P )I + (grad P )F b ik ] + O(h3 ) 2 condition ` la limite de type Dirichlet a PF b ik = PIM P OSE , toujours aucun traitement particulier condition ` la limite de type Neumann homog`ne standard a e On veut : P = 0 + O(h) n F b
ik

(II.8.18)

ce qui entra : ne I F b ik . (grad P )F b ik = O(h2 ) On peut crire : e (grad P )I = (grad P )F b ik + O(h) do` : u PF b ik = PI + O(h2 ) On obtient donc une approximation dordre 1. condition ` la limite de type Neumann homog`ne amliore a e e e Le gradient nest connu quau centre des cellules I et non aux points I . (grad P )I = (grad P )I + O(h) do` : u 1 I F b ik . [ (grad P )I + (grad P )F b ik ] + O(h3 ) 2 (II.8.21) 1 = PI + I F b ik . [ (grad P )I + (grad P )F b ik ] + O(h2 ) 2 Compte-tenu de la condition impose et de lquation (II.8.19), seule la contribution en I reste. e e PF b ik = PI + PF b ik = PI + 1 I F b ik . (grad P )I + O(h2 ) 2 P n devient : P n (II.8.22) (II.8.20) (II.8.19)

On obtient donc une approximation dordre 1. condition ` la limite de type extrapolation du gradient a En tenant compte de cette galit, lexpression de PF b ik e e =
F b ik I

PF b ik = PI + I F b ik . (grad P )I + O(h2 ) On obtient galement une approximation dordre 1. e Conclusion On peut rcapituler toutes ces situations via la formule : e PF b ik = PI + EXTRAP (I F b ik . (grad P )I ) avec EXTRAP valant 0, 0.5 ou 1.

(II.8.23)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 112/277

Il ne faut en aucun cas utiliser EXTRAP avec des conditions de type Neumann non homog`nes e g bord , g bord donne non nulle ou de type Robin (mixtes) plus gnralement e e e P aPF b ik + b = g bord , le recours ` EXTRAP nayant plus aucun sens. a n F b
ik

P n

=
F

8.3

Mise en uvre

La variable dont il faut calculer le gradient est contenue dans le tableau PVAR. Les conditions aux limites associes sont disponibles au travers des tableaux COEFAP et COEFBP qui reprsentent respece e tivement les grandeurs A et B utilises ci-dessus. Les trois composantes du gradient sont contenues, e en sortie du sous-programme, dans les tableaux DPDX, DPDY et DPDZ.

Initialisations ea e Le tableau (BX, BY, BZ) du second membre R i est initialis ` zro. e e e Le calcul du gradient cellule non reconstruit GN Rec est ralis et stock dans les tableaux DPDX, DPDY c,i et DPDZ. Si aucune reconstruction nest ` faire, on a ni. a

8.3.1 Reconstruction
e Sinon, on cherche ` rsoudre le syst`me (II.8.7) en incrments de gradient G k+1 . Le gradient non a e e i reconstruit constitue alors une premi`re estimation du gradient ` calculer par incrments. e a e On eectue les oprations suivantes : e

Phase prliminaire e
Calcul de la matrice, hors boucle en k e e Les NCEL matrices C i (matrices non symtriques 33) sont stockes dans le tableau COCG, (de dimension NCELET 3 3). Ce dernier est initialis ` zro, puis son remplissage est ralis dans des boucles sur les ea e e e faces internes et les faces de bord. Pour viter de raliser plusieurs fois les mmes calculs gomtriques, e e e e e on conserve, en sortie de sous-programme, dans le tableau COCG, linverse des NCEL matrices C i . Cellule ne possdant pas de face de bord e Lorsque, pour une cellule, aucune des faces nest une face de bord du domaine, lexpression de la matrice C i ne fait intervenir que des grandeurs gomtriques. Son inverse peut tre donc calcul une e e e e seule fois, stock dans COCG et rutilis si lon rappelle gradrc squentiellement et si on est sur un e e e e maillage xe (indicateur ICCOCG positionn ` 0). ea Cellule possdant au moins une face de bord e Lorsque lensemble des faces dune cellule contient au moins une face de bord du domaine, un terme contributeur aux matrices C i est spcique ` la variable dont on cherche ` calculer le gradient, au e a a travers du coecient B b,ik issu des conditions aux limites. Il sagit de :
kb (i)

B b,ik (II ) S bik ,

Si, lors de lappel prcdent1 ` gradrc, les conditions aux limites relatives ` la variable P traite e e a a e conduisaient ` des valeurs identiques de B b,ik , les matrices C i sont donc inchanges et linverse est a e encore disponible dans COCG. Pour viter de refaire les calculs associs, lindicateur ICCOCG, pass en e e e argument, est alors positionn ` 0. ea
1 donc,

a ` partir du second appel au moins

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 113/277

Si, au contraire, les valeurs de B b,ik sont direntes de celles de lappel prcdent, il est alors indise e e pensable de recalculer le terme et lindicateur ICCOCG doit tre positionn ` 1. e ea Toutefois compte-tenu du cot total de linversion de ces matrices relativement au cot global du u u sous-programme, cette dmarche de stockage et donc dconomie de temps C.P.U. est un peu supere e ue et risque dengendrer des erreurs (indicateur ICCOCG positionn ` 0 au lieu de 1) beaucoup plus ea pnalisantes que lventuel gain escompt. e e e Inversion de la matrice On calcule les coecients de la comatrice, puis linverse. Pour des questions de vectorisation, la boucle sur les NCEL lments est remplace par une srie de boucles en vectorisation force sur des blocs de ee e e e NBLOC=1024 lments. Le reliquat (NCEL E(NCEL/1024) 1024) est trait apr`s les boucles. La ee e e matrice inverse est ensuite stocke dans COCG. e

Phase itrative k, k IN e
e On suppose G k connu et donc Gk pour k donn et sur toute cellule i et on veut calculer G k+1 i c,i i et Gk+1 . c,i Calcul du second membre R k+1 et rsolution e i Le calcul proprement dit du second membre R k+1 correspondant au syst`me (II.8.9) est eectu et e e i stock dans le tableau (BX, BY, BZ). Il est initialis, ` chaque pas k, par la valeur du gradient Gk e e a c,i multipli par le volume de la cellule |i |, avec G0 = GN rec . Lincrment ( G k+1 ) de gradient est e e c,i c,i i e obtenu par C i 1 R k+1 et ajout dans les tableaux DPDX, DPDY et DPDZ pour obtenir Gk+1 . i c,i En ce qui concerne les conditions aux limites en pression, elles sont traites comme suit dans Code Saturne: e = PI + II .Gc,i PI P = INC A b,ik + B b,ik PI = INC A b,ik + B b,ik (PI + II . G c,i ) b,ik Pb1 ,ik = PI + IF ij . G c,i Pf, b ik = B b,ik (EXTRAP Pb1 ,ik + (1 EXTRAP) Pb,ik ) + (1 B b,ik )Pb,ik ce qui correspond ` : a lorsquon veut imposer des conditions de Dirichlet (A b,ik = PF b ik , B b,ik = 0), PF b ik = PIM P OSE pour toute valeur de EXTRAP. lorsquon veut imposer des conditions de ux (A b,ik = 0, B b,ik = 1) (condition de type Neumann) PF b ik = EXTRAP (PI + (IF b ik . (grad P )I ) + (1 EXTRAP)PI (II.8.25) seules trois valeurs de EXTRAP sont licites. avec un maillage non orthogonal Lordre obtenu est gal ` 1 dans tous les cas. e a EXTRAP = 0 1 EXTRAP = 2 EXTRAP = 1 Neumann homog`ne e Neumann homog`ne amlior e e e extrapolation du gradient PF b ik = PI + O(h2 ) 1 PF b ik = PI + I F b ik . (grad P )I + O(h2 ) 2 PF b ik = PI + I F b ik . (grad P )I + O(h2 ) (II.8.24)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 114/277

avec un maillage orthogonal On peut atteindre lordre deux. EXTRAP = 0 EXTRAP = 1 2 Neumann homog`ne e on est ` lordre 1 a Neumann homog`ne amlior e e e on est ` lordre 2 a extrapolation du gradient on est ` lordre 2 a PF b ik = PI + O(h2 ) PF b ik = PI + 1 IF b ik . (grad P )I + O(h3 ) 2

EXTRAP = 1

PF b ik = PI + IF b ik . (grad P )I + O(h3 )

Test de convergence de la mthode itrative de rsolution e e e On calcule la norme euclidienne RESIDU du second membre (BX, BY, BZ). On arrte les itrations sur k si le test de convergence pour cette norme ou le nombre de sweeps e e maximal NSWRGP est atteint. La valeur par dfaut de NSWRGP est xe ` 100, ce qui permet un calcul e e a susamment prcis pour lordre despace considr. e ee Sinon, on continue ditrer sur k. e

8.4

` Points a traiter

Vectorisation force e Il est peut-tre possible de saranchir du dcoupage en boucles de 1024 si les compilateurs sont e e capables deectuer la vectorisation sans cette aide. On note cependant que ce dcoupage en boucles e de 1024 na pas de cot CPU supplmentaire, et que le cot mmoire associ est ngligeable. Le seul u e u e e e inconvnient rside dans la relative complexit de lcriture. e e e e Traitement des conditions aux limites de pression 1 Actuellement, lordre deux dcrit dans le cas EXTRAP = relativement aux conditions aux limites de e 2 pression nexiste pas dans Code Saturne en non orthogonal. Mais en a-t-on vraiment besoin ? Mthode itrative de rsolution e e e La mthode itrative de rsolution adopte dans ce sous-programme marche, i.e. converge, mais e e e e ne rentre dans aucun cadre thorique prcis. Des rexions sur le sujet pourraient ventuellement e e e e permettre dexhiber certaines proprits des matrices considres, cerner les limites dapplication ou ee ee expliquer certains comportements.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 115/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 116/277

9- Sous-programme inimas

9.1

Fonction

Le but de ce sous-programme est principalement de calculer le ux de masse aux faces. Il prend une variable vectorielle associe au centre des cellules (gnralement la vitesse), la projette aux faces e e e en la multipliant par la masse volumique, et la multiplie scalairement par le vecteur surface. Plus gnralement, inimas est aussi appel comme premi`re tape du calcul dune divergence (terme en e e e e e div(R) en Rij , ltre Rhie & Chow, ...).

9.2

Discretisation

La gure II.9.1 rappelle les diverses dnitions gomtriques pour les faces internes et les faces de bord. e e e FJ (dni aux faces internes uniquement). e On notera = IJ
Sij

I F

Figure II.9.1: Dnition des direntes entits gomtriques pour les faces internes (gauche) et de bord e e e e e (droite).

9.2.1

Faces internes

On ne conna pas la masse volumique ` la face, cette derni`re doit donc aussi tre interpole. On t a e e e utilise la discrtisation suivante : e (u)F = (I uI ) + (1 )(J uJ ) + grad (u)O .OF (II.9.1)

La partie en (I uI ) + (1 )(J uJ ) correspondant en fait ` (u)O . Le gradient en O est calcul a e 1 1 par interpolation : grad (u)O = grad (u)I + grad (u)J . La valeur sest impose de mani`re e e 2 2 heuristique au l des tests comme apportant plus de stabilit ` lalgorithme global quune interpolation ea faisant intervenir . Lerreur commise sur u est en O(h2 ).

9.2.2

Faces de bord

Le traitement des faces de bord est ncessaire pour y calculer le ux de masse, bien sr, mais aussi e u pour obtenir des conditions aux limites pour le calcul du grad (u) utilis pour les faces internes. e

J J

ik

Sb

I i

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 117/277

Pour les faces de bord, on conna la valeur de F , qui est stocke dans la variable ROMB. De plus, les t e e conditions aux limites pour u sont donnes par des coecients A et B tels que : uk,F = Ak + Bk uk,I = Ak + Bk (uk,I + grad (uk )I .II ) (k {1, 2, 3} est la composante de la vitesse, lerreur est en O(Bk h)) On a donc ` lordre 1 : a (uk )F = F [Ak + Bk (uk,I + grad (uk )I .II )] (II.9.3) (II.9.2)

a ea Mais pour utiliser cette formule, il faudrait calculer grad (u) (trois appels ` GRDCEL), alors quon a dj` u ee calcul grad (u) pour les faces internes. Le surcot en temps serait alors important. On rcrit donc : e (uk )F = F Ak + F Bk uk,I F (uk )I = F Ak + Bk I F F = F Ak + Bk (uk )I + Bk grad (uk )I .II I I (II.9.4) (II.9.5) (II.9.6)

Pour calculer les gradients de u, il faudrait donc en thorie utiliser les coecients de conditions aux e limites quivalents : e Ak = F Ak k = B k F B I F Ceci para dlicat, ` cause du terme en t e a , et en particulier ` lerreur que lon peut commettre sur a I I si la reconstruction des gradients est imparfaite (sur des maillages fortement non orthogonaux par exemple). On rcrit donc lquation (II.9.6) sous la forme suivante : ee e (uk )F = F Ak + Bk I F F uk,I + Bk grad (uk )I .II I I (II.9.7)

Pour le calcul du ux de masse au bord, on va faire deux approximations. Pour le deuxi`me terme, e on va supposer I I (ce qui conduit ` une erreur en O(Bk h) sur u si I = I ). Pour le troisi`me a e terme, on va supposer I F . Cette derni`re approximation est plus forte, mais elle nintervient e que dans la reconstruction des non-orthogonalits ; lerreur nale reste donc faible (erreur en O(Bk h2 ) e e sur u si I = F ). Et au nal, le ux de masse au bord est calcul par :
3

mF =
k=1

[F Ak + Bk F uk,I + Bk grad (uk )I .II ] Sk

(II.9.8)

e Pour le calcul des gradients, on repart de lquation (II.9.5), sur laquelle on fait lhypoth`se que e I F . Encore une fois, cette hypoth`se peut tre assez forte, mais les gradients obtenus ne sont e e utiliss que pour des reconstructions de non-orthogonalits ; lerreur nale reste donc l` encore assez e e a faible. Au nal, les gradients sont calculs ` partir de la formule suivante : e a (uk )F = F Ak + Bk (uk )I ce qui revient ` utiliser les conditions aux limites suivantes pour u: a Ak = F Ak Bk = Bk Remarque (II.9.9)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 118/277

Dans la plupart des cas, les approximations eectues nengendrent aucune erreur. En eet : e - dans le cas dune entre on a gnralement Bk = 0, avec un ux de masse impos par la condition ` e e e e a la limite. - dans le cas dune sortie, on a gnralement ux nul sur les scalaires donc sur , soit F = I = I . e e - dans le cas dune paroi, on a gnralement Bk = 0 et le ux de masse est impos nul. e e e - dans le cas dune symtrie, on a gnralement F = I = I et le ux de masse est impos nul. e e e e Pour sentir un eet de ces approximations, il faudrait par exemple une paroi glissante (Bk = 0) avec un gradient de temprature (F = I ). e

9.3

Mise en uvre

La vitesse est passe par les arguments UX, UY et UZ. Les conditions aux limites de la vitesse sont e COEFAX, COEFBX, ... Le ux de masse rsultat est stock dans les variables FLUMAS (faces internes) et e e FLUMAB (faces de bord). QDMX, QDMY et QDMZ sont des variables de travail qui serviront ` stocker u, et a COEFQA servira ` stocker les A. a Initialisation ventuelle du ux de masse e Si INIT vaut 1, le ux de masse est remis ` zro. Sinon, le sous-programme rajoute aux variables a e FLUMAS et FLUMAB existantes le ux de masse calcul. e Remplissage des tableaux de travail e u est stock dans QDM, et A dans COEFQA. Cas sans reconstruction On calcule alors directement
3

FLUMAS = et FLUMAB =
k=1 k=1 3

[(I uk,I ) + (1 )(J uk,J )] Sk

[F Ak + Bk F uk,I ] Sk

Cas avec reconstruction On rp`te trois fois de suite les oprations suivantes, pour k = 1, 2 et 3 : e e e - Appel de GRDCEL pour le calcul de grad (uk ). - Mise ` jour du ux de masse a 1 FLUMAS = FLUMAS + (I uk,I ) + (1 )(J uk,J ) + [grad (uk )I + grad (uk )J ] .OF Sk 2 et FLUMAB = FLUMAB + [F Ak + Bk F uk,I + Bk grad (uk )I .II ] Sk Annulation du ux de masse au bord Quand le sous-programme a t appel avec la valeur IFLMB0=1 (cest-`-dire quand il est rellement ee e a e appel pour calculer un ux de masse, et pas pour calculer le terme en div(R) par exemple), le ux de e masse au bord FLUMAB est forc ` 0, pour les faces de paroi et de symtrie (identies par ISYMPA=0). ea e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 119/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 120/277

10- Sous-programme itrmas/itrgrp

10.1

Fonction

Le but du sous-programme itrmas est de calculer un gradient de pression facette. Il est utilis dans e la phase de correction de pression (deuxi`me phase de navsto) o` le ux de masse est mis ` jour ` e u a a laide de termes en t ij (grad f P ) ij .S ij et en t bik (grad f P ) bik . S bik . Le sous-programme itrgrp calcule un gradient facette de pression et en prend la divergence, cesta `-dire calcule le terme :
jV ois(i)

t ij (grad f P ) ij .S ij
kb (i)

t bik (grad f P ) bik . S bik

En pratique itrgrp correspond ` la combinaison de itrmas et de divmas, mais permet par son traitea ment en un seul bloc dviter la dnition de tableaux de travail de taille NFAC et NFABOR. e e

10.2

Discretisation

La gure II.10.1 rappelle les diverses dnitions gomtriques pour les faces internes et les faces de e e e bord.
Sij

I F

Figure II.10.1: Dnition des direntes entits gomtriques pour les faces internes (gauche) et de e e e e e bord (droite).

10.2.1

Calcul sans reconstruction des non orthogonalites


t ij S ij (PI PJ ) IJ

Pour les faces internes, on crit simplement : e t ij (grad f P ) ij . S ij = Pour les faces de bord, on crit : e tbik (grad f P ) bik . S bik = t bik S bik ((1 Bb,ik )PI INC Ab,ik ) IF (II.10.2) (II.10.1)

Les pas de temps aux faces t ij et t bik sont calculs par interpolation par les sous-programmes e viscfa (cas isotrope, IPUCOU=0) ou visort (cas anisotrope, IPUCOU=1).

J J

ik

Sb

I i

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 121/277

10.2.2

Calcul avec reconstruction des non orthogonalites

Plusieurs discrtisations peuvent tre proposes pour le traitement des non orthogonalits. Celle e e e e retenue dans le code est issue des premiers tests raliss sur le prototype, et fait intervenir non seulement e e le pas de temps interpol ` la face, mais aussi les pas de temps dans chaque cellule. Il serait sans doute ea bon de revenir sur cette criture et valuer dautres solutions. La forme utilise pour les faces internes e e e est : t ij (grad f P ) ij . S ij = t ij S ij (PI PJ ) IJ S ij 1 + (II JJ ). [tI (grad P )I + tJ (grad P )J ] 2 IJ Pour les faces de bord, on crit : e t bik (grad f P ) bik . S bik = t bik S bik (1 Bb,ik )(PI + II .(grad P )I ) INC Ab,ik IF (II.10.4) (II.10.3)

10.3

Mise en uvre

Les principaux arguments passs ` itrmas et itrgrp sont la variable traite PVAR (la pression), ses e a e conditions aux limites, le pas de temps projet aux faces1 (VISCF et VISCB), le pas de temps au e centre des cellules, ventuellement anisotrope (VISELX, VISELY, VISELZ). itrmas retourne les tableaux e FLUMAS et FLUMAB (ux de masse aux faces) mis ` jour. itrgrp retourne directement la divergence du a ux de masse mis ` jour, dans le tableau DIVERG. a Initialisation Si INIT vaut 1, les variables FLUMAS et FLUMAB ou DIVERG sont mises ` zro. a e Cas sans reconstruction La prise en compte ou non des non orthogonalits est dtermine par lindicateur NSWRGR de la variable e e e traite (nombre de sweeps de reconstruction des non orthogonalits dans le calcul des gradients), pass e e e par la variable NSWRGP. Une valeur infrieure ou gale ` 1 enclenche le traitement sans reconstruction. e e a Des boucles sur les faces internes et les faces de bord utilisent directement les formules (II.10.1) et (II.10.2) pour remplir les tableaux FLUMAS et FLUMAB (itrmas) ou des variables de travail FLUMAS et FLUMAB qui servent ` mettre ` jour le tableau DIVERG (itrgrp). a a t ij S ij t bik S bik ` A noter que les tableaux VISCF et VISCB contiennent respectivement et . IJ IF Cas avec reconstruction Apr`s un appel ` GRDCEL pour calculer le gradient cellule de pression, on remplit les tableaux FLUMAS e a et FLUMAB ou DIVERG l` encore par une application directe des formules (II.10.3) et (II.10.4). a

10.4

` Points a traiter

Il est un peu redondant de passer en argument ` la fois le pas de temps projet aux faces et le pas a e de temps au centre des cellules. Il faudrait sassurer de la relle ncessit de cela, ou alors tudier des e e e e formulations plus simples de la partie reconstruction.

1 Plus

prcisment, le pas de temps projet aux faces, multipli par la surface et divis par I J ou I F , cf. viscfa e e e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 122/277

11- Sous-programme matrix

11.1

Fonction

Le but de ce sous-programme, appel par codits et covofi, est de construire la matrice de convece tion/diusion, incluant les contributions adquates des termes sources, intervenant dans le membre e de gauche dquations discrtises telles que celle de la quantit de mouvement, dune quation de e e e e e convection diusion dun scalaire ou de mod`le de turbulence. e Le type dquation considre est, pour la variable scalaire a : e ee a + div( (u) a) t x a x

=0

La matrice ne sapplique quaux termes non reconstruits, les autres tant pris en compte au second e membre et traits dans le sous-programme bilsc2. La partie convective, lorsquelle existe, est issue e du schma upwind pur, quelque soit le type de schma convectif choisi par lutilisateur. En eet, cest, e e a ` lheure actuelle, la seule faon dobtenir un oprateur linaire ` diagonale dominante. c e e a La matrice est donc associe ` EMscal , oprateur agissant sur un scalaire a (inspir de celui vectoriel e a e e EM dni dans navsto) dexpression actuelle, pour tout cellule i de centre I : e EMscal (a, I)
imp aI = fs amont + F ij ((u)n , a) + jV ois(i)

jV ois(i)

DN Rec (, a) ij

amont F bik ((u)n , a) kb (i) Rec DNik (, a) b kb (i)

|i | , sil y a lieu, et de limplicitation de certains t termes sources (contribution dcoulant de la prise en compte de la variation e de la masse volumique t au cours du temps, diagonale du tenseur de pertes de charges par exemple...): cette initialisation est en fait eectue en amont de ce sous-programme, e amont F ij le ux numrique convectif scalaire dcentr amont calcul ` la face interne ij de la cellule e e e ea i , amont F bik le ux numrique convectif scalaire dcentr amont associ calcul ` la face de bord ik de la e e e e ea cellule i jouxtant le bord du domaine , N D ij Rec le ux numrique diusif scalaire non reconstruit associ calcul ` la face interne ij de la e e e a cellule i , N Rec D bik le ux numrique diusif scalaire non reconstruit associ calcul ` la face de bord ik de la e e ea cellule i jouxtant le bord du domaine , V ois(i) reprsente toujours lensemble des cellules voisines de i et b (i) lensemble des faces de bord e de i . Du fait de la rsolution en incrments, a est un incrment et ses conditions aux limites associes sont e e e e donc de type Dirichlet homog`ne ou de type Neumann homog`ne. e e
imp fs le coecient issu du terme instationnaire

avec :

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


Sij

Code Saturne documentation Page 123/277

I F

Figure II.11.1: Dnition des direntes entits gomtriques pour les faces internes (gauche) et de e e e e e bord (droite).

11.2

Discretisation
EMscal (a, I)
imp = fs aI + (u)n . S ij ij jV ois(i)

Loprateur EMscal scrit, pour tout I centre de cellule : e e

a f,ij +
kb (i)

(u)nik . S bik b

aJ aI S ij ij IJ jV ois(i) k

ab aI bik ik S bik IF (i)

o` a f,ij = a I ou a J selon le signe de (u)n .S ij (schma convectif upwind systmatique), et avec I J , u e e ij mesure algbrique, oriente comme la normale sortante ` la face, i.e. allant de I vers J pour la cellule e e a I i de centre I. On la notera I J lorsquon aura besoin dexpliciter clairement lorientation. af bik = aI ou a bik selon le signe de (u)nik . S bik (schma upwind systmatique) et a bik valeur au e e b bord est donne directement par les conditions aux limites (valeur non reconstruite). I F , mesure e algbrique, oriente relativement ` la normale sortante ` la face, i.e. allant de I vers lextrieur du e e a a e domaine. En gnral, sauf cas pathologiques, les mesures algbriques I J et I F sont positives et correspondent e e e aux distances I J et I F . On se reportera au paragraphe Points ` traiter pour plus de dtails. a e Soit EM scal la matrice associe ; sa taille est a priori de NCELNCEL, mais compte-tenu de la nature de e la structure de donnes, seuls deux tableaux DA(NCEL) contenant les valeurs diagonales et XA(NFAC,*) e les contributions des termes extra-diagonaux sont ncessaires, avec NCEL nombre de cellules du maillage e considr et NFAC nombre de faces internes associ. ee e Du fait des simplications eectues sur la matrice (non reconstruction des termes), les composantes e extradiagonales de la ligne I ne sont direntes de zro que pour les indices J des cellules voisines de I. e e On peut donc stocker toutes les contributions non nulles de la matrice dans deux tableaux DA(NCEL) et XA(NFAC,2) : DA(I) est le coecient de la colonne I dans la ligne I, si IFAC est une face qui spare les cellules i et j , oriente de I vers J, alors : e e XA(IFAC,1) est le coecient de la colonne J dans la ligne I et XA(IFAC,2) est le coecient de la colonne I dans la ligne J. Lorsque la matrice est symtrique, i.e. lorsquil ny a pas de convection e (ICONVP = 0) et que seule la diusion est ` prendre en compte, alors XA(IFAC,1) = XA(IFAC,2) et on a rduit XA ` XA(NFAC,1). e a Soit mn ( mnik ) la valeur de (u)n .S ij (respectivement (u)nik . S bik ). ij ij b b Alors : contribution volumique : fsimp aI contribution dune face purement interne ij Lexpression

J J

ik

Sb

I i

af bik

(II.11.1)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 124/277

+
jV ois(i)

amont F ij ((u)n , a) jV ois(i)

DN Rec ( , a) ij

scrit : e (u)n . S ij ij
jV ois(i)

=
jV ois(i)

1 ( mn ij 2

aJ aI S ij IJ 1 aJ aI S ij + | mn | ) aI + ( mn | mn |) aJ ij ij ij ij 2 IJ jV ois(i) a f,ij ij

(II.11.2)

Ici, I J = I J . contribution dune face de bord ik De mme : e


kb (i) amont F bik ((u)n , a) kb (i) Rec DNik (, a) b

=
kb (i)

(u)nik . S bik b

af bik bik

a bik aI S bik IF

(II.11.3)

=
kb (i)

1 1 a b aI ( mnik + | mnik | ) aI + ( mnik |mnik |) a bik S bik bik ik b b b b 2 2 IF kb (i) a bik = INC A b,ik + B b,ik aI = B b,ik aI

avec : a ntant associe qu` des conditions aux limites de type Dirichlet homog`ne ou de type Neumann e e a e homog`ne. e

11.3

Mise en uvre

11.3.1 Initialisations
Lindicateur de symtrie ISYM de la matrice considre est aect comme suit : e ee e ISYM = 1 , si la matrice est symtrique ; on travaille en diusion pure , ICONVP = 0 et IDIFFP e = 1, ISYM = 2 , si la matrice est non symtrique ; on travaille soit en convection pure ( ICONVP = 1, e IDIFFP = 0 ), soit en convection/diusion ( ICONVP = 1, IDIFFP = 1 ). Les termes diagonaux de la matrice sont stocks dans le tableau DA(NCEL). Ceux extra-diagonaux le e sont dans XA(NFAC,1) si la matrice est symtrique, dans XA(NFAC,2) sinon. e Le tableau DA est initialis ` zro pour un calcul avec ISTATP = 0 (en fait, ceci ne concerne que les ea e calculs relatifs ` la pression). Sinon, on lui aecte la valeur ROVSDT comprenant la partie instationnaire, a la contribution du terme continu en a div(u)n et la partie diagonale des termes sources implicits. e Le tableau XA(NFAC,*) est initialis a zro. e` e

11.3.2 Calcul des termes extradiagonaux stocks dans XA e


Ils ne se calculent que pour des faces purement internes IFAC, les faces de bord ne contribuant qu` la a diagonale.

matrice non symetrique ( presence de convection )


Pour chaque face interne IFAC, les contributions extradiagonales relatives au terme aI et ` son voisin a associ aJ sont calcules dans XA(IFAC,1) et XA(IFAC,2) respectivement (pour une face oriente de I e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 125/277

vers J). On a les relations suivantes : XA(IFAC,1) = ICONVP FLUI IDIFFP VISCF(IFAC) XA(IFAC,2) = ICONVP FLUJ IDIFFP VISCF(IFAC) avec FLUMAS(IFAC) correspondant ` mn , FLUI ` a a ij (II.11.4)

1 S ij . ( mn | mn | ), VISCF(IFAC) ` ij a ij ij 2 IJ

XA(IFAC,1) reprsente le facteur de aJ dans la derni`re expression de (II.11.2). e e 1 FLUJ correspond ` ( mn + | mn | ). En eet, XA(IFAC,2) est le facteur de aI dans lexpression a ij ij 2 quivalente de la derni`re ligne de (II.11.2), mais crite en J. e e e Ce qui donne : 1 1 ( mn + | mn | ) aJ + ( mn | mn |) aI ji ji ji ji 2 2 1 S ji ( mn | mn | ) ji . ji ji 2 JI ji
iV ois(j)

iV ois(j)

aI aJ S ji JI

(II.11.5)

Le terme recherch est donc : e

Or : mn = mn (S ji = S ij et (u)n = (u)n ), avec J I mesure algbrique, oriente relativement e e ji ij ji ij a ` la normale sortante ` la face, i.e. allant de J vers I. On la note J I a On a la relation : JI do` la deuxi`me galit dans (II.11.4). u e e e
J J

= IJ

=(IJ )

(II.11.6)

matrice symetrique ( diffusion pure )


Pour chaque face interne IFAC, la contribution extradiagonale relative au terme aI est calcule dans e XA(IFAC,1) par la relation suivante : XA(IFAC,1) = IDIFFP VISCF(IFAC) S ij . avec VISCF(IFAC) ` ij a IJ (II.11.7)

11.3.3 Calcul des termes diagonaux stocks dans DA e


matrice non symetrique ( presence de convection )
Pour chaque face interne ij (IFAC) sparant les cellules i de centre I et j de centre J, DA(II) est e la quantit en facteur de aI dans la derni`re expression de (II.11.2), soit : e e S ij 1 ( mn + | mn | ) + ij ij ij 2 IJ De mme, pour DA(JJ), on a : e S ij 1 ( mn + | mn | ) + ji ij ij 2 IJ (II.11.9) (II.11.8)

e e dapr`s lexpression de (II.11.5) et lgalit (II.11.6). e Limplantation dans Code Saturne associe est la suivante : e pour toute face IFAC dlments voisins II = IFACEL(1,IFAC) et JJ = IFACEL(2,IFAC), ee on ajoute ` DA(II) la contribution croise XA(IFAC,2) (cf. (II.11.8)) et ` DA(JJ) la contribution a e a XA(IFAC,1) (cf. (II.11.9)).

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 126/277

11.3.4 Prise en compte des conditions aux limites


Elles interviennent juste dans le tableau DA, compte-tenu de leur criture et dnition. Elles se calculent e e via la derni`re expression de (II.11.3). Pour chaque face IFAC, de llment de centre I, jouxtant le e ee bord, on sintresse ` : e a 1 1 a b aI S bik ( mnik + | mnik | ) aI + ( mnik |mnik |) a bik bik ik b b b b 2 2 IF kb (i) a bik = B b,ik aI soit : 1 1 1 B b,ik ( mnik + | mnik | ) + ( mnik |mnik |)B b,ik + S bik bik b b b b 2 2 IF kb (i) aI (II.11.11) ce qui, pour le terme sur lequel porte la somme, se traduit par : ICONVP (FLUJ + FLUI COEFBP(IFAC) + IDIFFP VISCB(IFAC) ( 1 COEFBP(IFAC)) 1 ( mnik + | mnik | ) par - FLUJ , avec, mnik reprsent par FLUMAB(IFAC) , e e b b b 2 1 Sb n n ( m bik |m bik |)B b,ik par FLUI , B b,ik par COEFBP(IFAC), bik ik par VISCB(IFAC). 2 IF (II.11.10)

kb (i)

avec :

kb (i)

11.3.5 Dcalage du spectre e


Lorsquil nexiste aucune condition ` la limite de type Dirichlet et que ISTATP = 0 (cest-`-dire pour a a la pression uniquement), on dplace le spectre de la matrice EM scal de EPSI (i.e. on multiplie chaque e terme diagonal par (1 + EPSI) ) an de la rendre inversible. EPSI est x en dur dans matrix ` 107 . e a

11.4

` Points a traiter

|i | Le tableau XA est initialis ` zro lorsquon veut annuler la contribution du terme en e a e , i.e. t ISTATP = 0 . Ce qui ne permet donc pas la prise en compte eective des parties diagonales des termes sources ` impliciter, dcide par lutilisateur. Actuellement, ceci ne sert que pour la variable pression a e e et reste donc a priori correct, mais cette dmarche est ` corriger dans labsolu. e a Nettoyage La contribution ICONVP FLUI, dans le calcul du terme XA(IFAC,1) lorsque la matrice est symtrique e est inutile, car ICONVP = 0. Prise en compte du type de schma de convection dans EM scal e Actuellement, les contributions des ux convectifs non reconstruits sont traites par schma dcentr e e e e amont, quelque soit le schma choisi par lutilisateur. Ceci peut tre handicapant. Par exemple, mme e e e sur maillage orthogonal, on est oblig de faire plusieurs sweeps pour obtenir une vitesse prdite core e recte. Un schma centr sans test de pente peut tre implant facilement, mais cette criture pourrait, e e e e e dans ltat actuel des connaissances, entra e ner des instabilits numriques. Il serait souhaitable davoir e e dautres schmas tout aussi robustes, mais plus adapts ` certaines congurations. e e a Maillage localement pathologique

Initialisation

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 127/277

Il peut arriver, notamment au bord, que les mesures algbriques, I J ou I F soient ngatives (en cas e e de maillages non convexes par exemple). Ceci peut engendrer des probl`mes plus ou moins graves : e perte de lexistence et lunicit de la solution (loprateur associ nayant plus les bonnes proprits de e e e ee rgularit ou de coercivit), dgradation de la matrice (perte de la positivit) et donc rsolution par e e e e e e solveur linaire associ non appropri (gradient conjugu par exemple). e e e e Une impression permettant de signaler et de localiser le probl`me serait souhaitable. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 128/277

12- Sous-programme navsto


On sintresse ` la rsolution du syst`me dquations de Navier-Stokes tridimensionnelles monophasiques, e a e e e a ` une pression, instationnaires, en incompressible ou faiblement dilatable, bases sur une discrtisation e e temporelle de type Euler implicite dordre 1 ou Crank-Nicolson dordre 2 et sur une discrtisation e spatiale par volumes nis colocalise. e

12.1

Fonction

Dans ce sous-programme sont calcules, ` un pas de temps donn, les variables vitesse et pression de e a e ce probl`me en procdant en deux tapes issues dune dcomposition des oprateurs (mthode ` pas e e e e e e a fractionnaires). Les variables sont donc supposes connues ` linstant tn et on cherche ` les dterminer ` linstant1 e a a e a tn+1 . Soit tn = tn+1 tn le pas de temps associ. Dans un premier temps, on ralise ltape de e e e prdiction de la vitesse en rsolvant lquation de quantit de mouvement avec une pression explicite. e e e e Suit ltape de correction de la pression (ou projection de la vitesse) qui permet dobtenir un champ e de vitesse ` divergence nulle. a Les quations en continu sont donc : e (u) + div( u u) = div() + T S K u t div(u) =

(II.12.1)

avec la masse volumique, u le champ de vitesse, [ T SK u ] les autres termes sources (K est un tenseur diagonal positif par dnition), le tenseur de contraintes, le tenseur des contraintes visqueuses, la e viscosit dynamique (molculaire et ventuellement turbulente), la viscosit de volume (usuellement e e e e nulle et nglige dans le code et dans la suite du document, sauf en compressible), D le tenseur taux e e de dformation2 , le terme source de masse. e = P Id 2 = 2 D + ( 3 ) tr(D) Id (II.12.2) 1 t D = 2 (grad u + grad u)

On rappelle la dnition des notations employes3 : e e grad a ij = j ai div() = j ij [a b] i = a b i j ij et donc : [div(a b)]i = j (ai bj )

Remarque Dans le cas de la prise en compte dune masse volumique variable, lquation de continuit scrit : e e e + div ( u) = t
1 La pression est suppose connue ` linstant tn1+ et recherche en tn+ , avec = 1 ou 1/2 suivant le schma en e a e e temps considr. e e 2 A ne pas confondre, malgr la mme notation D, avec les ux diusifs D ` e e e ij et D bik dcrits par la suite dans ce sous-programme. 3 en utilisant la convention de sommation dEinstein.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 129/277

Cette quation nest pas prise en compte dans ltape de projection (on continue ` rsoudre seulement e e a e div( u) = ) alors que le terme appara lors de ltape de prdiction de la vitesse dans le soust e e t programme preduv. Si ce terme joue un rle sensible, lalgorithme compressible de Code Saturne (qui o rsout lquation compl`te) est alors sans doute plus adapt. e e e e

12.2

Discretisation

On pose : FJ dni aux faces internes uniquement et e IJ

ij =

uK = uK + (grad u)K . KK ` lordre 1 en espace, pour K = I ou J a


Sij

I F

Figure II.12.1: Dnition des direntes entits gomtriques pour les faces internes (gauche) et de e e e e e bord (droite).

12.2.1 Mthode ` pas fractionnaires e a


Introduction
Une des mthodes permettant de rsoudre numriquement les quations de Navier-Stokes est de e e e e dcomposer les oprateurs sy rattachant en oprateurs moins complexes (qui peuvent tre traits e e e e e a ` laide dalgorithmes ecaces), moyennant des sous-pas intermdiaires dans un mme pas de temps. e e Ici, deux sous-pas sont raliss : le premier reprend les parties convective, diusive et termes sources e e de lquation de quantit de mouvement et constitue ltape dite de prdiction de la vitesse, le second e e e e traite lquation de continuit et est dsign comme ltape de correction de pression ou de projection e e e e e de la vitesse.

Etape de prdiction des vitesses e


La discrtisation en temps se fait en appliquant ` la variable rsolue un -schma au temps n + e a e e sinspirant de la dmarche utilise pour lquation de transport dun scalaire4 . e e e La vitesse au temps n + 1 ntant disponible quapr`s ltape de projection, cest ici une vitesse prdite e e e e au temps n + 1 que lon utilise pour interpoler : un+ = un+1 + (1 ) un
4 cf.

covofi

J J

ik

Sb

I i

(II.12.3)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 130/277

Avec5 : =1 Pour un schma de type Euler implicite dordre 1. e = 1/2 Pour un schma de type Cranck-Nicolson dordre 2. e (II.12.4)

e Le champ de vitesse un+1 prdit est alors obtenu par : Linarisation partielle de loprateur de convection engendrant un dcouplage des composantes de e e e la vitesse. Explicitation de la pression. Explicitation ou extrapolation des grandeurs physiques (i.e , , Cp ...) et du ux de masse. Explicitation ou extrapolation des termes sources explicites au temps n+S tels que les contributions du gradient transpos, de la viscosit secondaire, de la partie extradiagonale des pertes de charges, de e e la masse injecte ui , ... e Les termes sources implicites linaires par rapport ` la vitesse (termes sources utilisateurs implicite, e a partie diagonale des pertes de charge Kd u, sources de masse u, etc...) sont supposs pris au temps e 6 n + et sont rattachs au tenseur K . e Par souci de clart, on suppose quen labsence dindication, les proprites physiques = , ... et e e le ux de masse (u) pris respectivement aux instants n + et n + F , o` et F dpendent des u e schmas en temps spciquement utiliss pour ces grandeurs7 . e e e On rsout donc le syst`me suivant, apr`s rcriture des termes instationnaires ` laide de la conservation e e e ee a de la masse : un+1 un t + div un+ (u) = div( n+ ) + T S n+S K n un+ + un+ div(u)

(II.12.5)

avec : n+ = grad un+ P n1+ Id + ( t grad u)n+S 2 ( div u)n+S Id 3 (II.12.6)

termes sources explicites

Etape de correction de la pression (ou projection des vitesses)


Le champ de vitesse prdit est a priori ` divergence non nulle. La seconde tape corrige la pression en e a e imposant la nullit de la contrainte stationnaire pour la vitesse prise ` linstant tn+1 . On rsout donc e a e : (u)n+1 (u)n+1 = grad P n+ (II.12.7) t div(u)n+1 = o` lincrment de pression P n+ vaut : u e P n+ = P n+ P n1+ Remarque Les quantits et sont constantes lors de ces deux tapes. Leur variation ventuelle est eectue au e e e e dbut du pas de temps suivant, apr`s ractualisation des scalaires (temprature, fraction massique,...). e e e e
le cas o` = 1/2, le pas de temps t est suppos uniforme en temps et en espace. u e ralit, les composantes de la vitesse tant dcouples, seuls les termes linaires par rapport ` la composante e e e e e e a rsolue sont factoriss de la sorte. Les autres termes tant traits comme des termes explicites. On pourra se rapporter e e e e ` preduv pour plus de dtail. a e 7 cf. introd
6 En 5 Dans

(II.12.8)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 131/277

12.2.2 Discrtisation spatiale e


On int`gre classiquement sur les volumes de contrle i (ou cellules) les quations discrtises en e o e e e temps.

Etape de prdiction des vitesses e


Second membre Si lon ne tient pas compte des termes de convection et de diusion issus du -schma, les termes e e e e sources volumiques explicites de lquation (II.12.5) scrivent pour le syst`me portant sur la quantit e (un+1 un ) : grad P n1+ + div ( t grad u)n+S 2 ( div u)n+S Id + T S n+S K n un + un div(u) 3

Pour intgrer ces termes sur une cellule i , on multiplie leur valeur locale au centre par le volume de e la cellule. Convection Apr`s dcomposition de u ` laide de la relation (II.12.3), lintgration spatiale des parties convectives e e a e n+1 n div u e (u) et (1 ) div (u (u)) conduit ` une somme de ux numriques F ij calculs a e aux faces des cellules purement internes et de ux numriques F bik calculs aux faces de bord du e e domaine . Soient V ois(i) lensemble des centres des cellules voisines de i et b (i) lensemble des centres des faces de bord de i , on a : div (u (u)) d =
i jV ois(i)

F ij ((u), u) +
kb (i)

F bik ((u), u)

en posant : F ij ((u), u) = (u) ij . S ij u f,ij (II.12.9)

F bik ((u), u) = (u) bik . S bik uf b

(II.12.10)
ik

La valeur de F ij dpend du type de schma numrique choisi. Il en existe trois dans Code Saturne : e e e un schma dcentr amont dordre 1 (upwind) : e e e F ij ((u), u) = F amont ((u), u) ij o` : u f,ij = u I si (u) ij .S ij u 0 u f,ij = u J si (u) ij .S ij < 0 , un schma centr dordre 2: e e e F ij ((u), u) = F centr((u), u) ij avec : u f,ij = ij u I + (1 ij )u J et uK = uK + (grad u)K . KK pour K = I ou J un schma dcentr amont dordre 2 SOLU (Second Order Linear Upwind) : e e e SOLU F ij ((u), u) = F ij ((u), u) avec : u f,ij = u I + IF . (grad u) I si (u) ij .S ij 0 u J + JF . (grad u)J si (u) ij .S ij < 0. La valeur de F bik est calcule avec : e uf b avec u
ik

= u I si (u) bik . S bik 0 = u bik si (u) bik . S bik < 0

(II.12.11)

bik

valeur au bord donne directement par les conditions aux limites. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 132/277

Remarque 2 En centr, on crit en ralit (galit conservant lordre un en espace) : e e e e e e u f,ij = ij u I + (1 ij )u J + pour des raisons de stabilit purement numrique. e e Remarque 3 Un test de pente (qui peut introduire des non linarits dans loprateur de convection) permet de e e e basculer entre un schma dordre deux et le schma dcentr amont dordre un. De plus, en mode e e e e standard, on utilise en tout point une valeur de u f,ij issue dune moyenne barycentrique entre la valeur dcentre amont et la valeur dordre 2 (blending, spci par lutilisateur). e e e e 1 (grad u)I + (grad u)J . OF 2

Diusion De mme, les parties diusives div( grad un+1 ) et (1 ) div(grad un ) scrivent : e e div( grad u)d =
i jV ois(i)

D ij (, u) +
kb (i)

D bik (, u)

avec : D ij (, u) = ij et : D bik (, u) = bik

uJ uI S ij IJ u bik u I IF S bik

(II.12.12)

(II.12.13)

e en conservant les notations prcdentes et avec u bik la valeur au bord donne directement par les e e conditions aux limites. La viscosit ij ` la face est calcule ` laide des valeurs aux centres selon une fonction f donne : e a e a e ij = f (I , J ) qui est, soit une moyenne arithmtique : e f (I , J ) = soit une moyenne gomtrique : e e f (I , J ) = et la viscosit bik est gale ` : e e a bik = I On introduit en outre, pour une utilisation ultrieure, les notations suivantes : e DN Rec (, u) = ij ij uJ uI S ij IJ S bik (II.12.17) (II.12.16) I J ij I + (1 ij )J (II.12.15) 1 (I + J ) 2 (II.12.14)

Rec DNik (, u) = bik b

u bik u I IF

(II.12.18)

qui correspondent chacune ` une valeur non reconstruite aux faces internes et de bord. a

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 133/277

Rsolution e e e Le syst`me (II.12.5) pouvant comporter des non linarits dues au recours au test de pente ou pouvant e conduire via la reconstruction du gradient (cellule) ` une matrice quasiment pleine en prsence de non a e orthogonalits, on le rsout de mani`re itrative avec la suite (un+1,k )kIN dnie par : e e e e e n+1,0 = un u n+1,k+1 (II.12.19) = un+1,k + uk+1 u k+1 , I) = E(un+1,k , I) EM(u ce qui dnit galement la suite (uk+1 )kIN . e e Les deux oprateurs E et EM ont pour expression respective : e E(u, I) = J (u, I) + (1 ) J (un , I) + |I | I (u un ) I t I . S ij
ij

+ |I | (T S)n+S (grad P )n1+ I I 2 t n+S + ( grad u) ( div u)n+S Id 3 jV ois(i)


moyenne ou interpolation linaire entre I et J e

+
kb (i)

( t grad u)n+S

2 ( div u)n+S Id 3

. S bik
bik

issu des conditions aux limites

avec :

J (v, I)

= |I | [K n div(u) ]I v I +
jV ois(i)

F ij ((u), v) +
kb (i)

F bik ((u), v) D bik (, v)

jV ois(i)

D ij (, v) +
kb (i)

EM(u, I)

= |I | +

I + [K n div(u) ]I t F amont ((u), u) + ij

uI F amont ((u), u) bik


kb (i) Rec DNik (, u) b

jV ois(i)

jV ois(i)

DN Rec (, u) + ij
kb (i)

De plus, on suppose que cette suite (un+1,k )kIN converge vers un+1 .

Remarque 4 Les conditions aux limites associes aux oprateurs E et EM du syst`me (II.12.20) sont celles portant e e e sur la vitesse u. Elles sont de type Dirichlet homog`ne ou de type Neumann homog`ne sur u si u a e e une condition de type Dirichlet ou de type Neumann respectivement. Elles sont mixtes dans le cas dune condition de symtrie sur une face en biais par rapport aux axes. e Remarque 5 Les deux premi`res sommes de type ( e
kb (i)

), i.e. comportant les termes en F bik ((u), u) et D bik (, u),

utilisent les conditions aux limites de la vitesse. Le terme volumique : ( t grad u)n+S
jV ois(i)

2 ( div u)n+S Id 3

. S ij
ij

moyenne ou interpolation linaire entre I et J e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 134/277

de terme de bord associ : e ( t grad u)n+S


kb (i)

2 ( div u)n+S Id 3

. S bik
bik

issu des conditions aux limites

a un traitement particulier. En eet, pour une cellule i jouxtant le bord, la contribution du premier terme (en gradient transpos) est annule, aucune condition ` la limite correcte ne lui tant attribue e e a e e pour le moment. Remarque 6 Loprateur EM approche E (aucun terme nest reconstruit et la partie convective est traite systmatiquement e e e en schma dcentr amont). Ceci peut gnrer des imprcisions numriques non ngligeables si la suite e e e e e e e e e (un+1,k )kIN na pas converg.

Etape de correction de la pression


En prenant la divergence de la premi`re quation du syst`me (II.12.7), on obtient : e e e div (u)n+1 (u)n+1 = div(t grad P n+ ) En utilisant la contrainte stationnaire div(u)n+1 = , on a donc : div(t grad P n+ ) = div((u)n+1 ) soit : div(t grad P n+ ) = div((u)n+1 ) (u)n+1 = (u)n+1 t grad P n+ un+1 = un+1 En intgrant sur une cellule : e div(tgrad P n+ ) d =
i jV ois(i)

(II.12.20)

(II.12.21)

(II.12.22)

et :

t grad P n+

(II.12.23)

D ij (t, P n+ ) +
kb (i)

D bik (t, P n+ )

(II.12.24)

et : div(u)n+1 d =
i jV ois(i)

(u)n+1 . S ij + ij
kb (i)

(u)n+1 . S bik bik

(II.12.25)

On utilise le mme formalisme que prcdemment pour lintgration du terme de diusion de ltape de e e e e e prdiction. Les conditions aux limites sont de type Dirichlet homog`ne ou de type Neumann homog`ne e e e sur P si P a une condition de type Dirichlet ou de type Neumann respectivement. Calcul du second membre de lquation portant sur lincrment de pression. e e La discrtisation de e
jV ois(i) Init

(u)n+1 . S ij + ij
kb (i)

(u)n+1 . S bik est particuli`re. Le choix suive bik

ant not [ ] e , pour une cellule ne touchant pas le bord par exemple, est insatisfaisant avec la discrtisation et le schma utiliss ici, en particulier avec lquation (II.12.23) : e e e e (u)n+1 . S ij = (u)n+1 . S ij ij ij
Init

= ij (u)n+1 + (1 ij )(u)n+1 . S ij I J

(II.12.26)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 135/277

Tout comme pour le calcul du ux numrique en centr, on utilise de faon licite lapproximation e e c suivante : (u)n+1 = ij I un+1 + (1 ij )J un+1 I J ij (II.12.27) 1 n+1 )I + (grad (u)n+1 )J . OF + (grad (u) 2 mais ce nest pas elle qui pose probl`me. e En fait, (u)n+1 ij
Init

e e e e contient le terme G n , hrit de ltape de prdiction, qui vaut : cel,ij G n1+ = ij grad PIn1+ + (1 ij ) grad PJn1+ cel,ij

Or, sur un maillage orthogonal rgulier cartsien, ` partir dune vitesse un+1 = 0 et dune pression e e a PIn1+ = (1)I , on obtient G n1+ = 0 do` P n+ = 0 : lirrgularit initiale de pression ne peut u e e cel,ij donc jamais tre corrige. e e Pour remdier ` cela, on modie lcriture [ ] e a e Corr [ ] : (u)n+1 . S ij ij = (u)n+1 ij = (u)
Corr Init

de (u)n+1 et de (u)n+1 en adoptant la valeur ij bik

. S ij
Init ij

+ (D ij (t, P n1+ )) . S ij (II.12.28) et, pour les conditions aux limites dentre, de symtrie (quelconque) ou de paroi : e e (u)n+1 . S bik = (u)n+1 bik bik pour les conditions aux limites de sortie : (u)n+1 . S bik bik = (u)n+1 .S bik bik = bik un+1 (tgrad P n1+ )I bik
Corr Corr

n+1

(tgrad P n1+ )

. S bik = bik un+1 . S bik bik

+ (D bik (t, P n1+ )) . S bik

est appel coecient dArakawa. Lorsquil vaut 1 (valeur par dfaut), il sagit du ltre Rhie & Chow. e e Remarque 7 On peut gnraliser cette dmarche ` dautres termes sources du mme type, par exemple pour le e e e a e mod`le Rij . e Rsolution e On construit une suite (P n+1,k )kIN pour rsoudre lquation (II.12.24), qui peut conduire via la e e reconstruction du gradient cellule ` une matrice quasiment pleine en prsence de non orthogonalits, a e e dnie par : e P n+,0 = 0 P n+,k+1 = P n+,k + Crelax (P )n+,k+1 (II.12.29) FM((P )n+,k+1 , I) = F(P n+,k , I) ce qui dnit galement la suite ((P )n+,k+1 )kIN . e e Les oprateurs F et FM ont pour expression : e F(P, I) =
jV ois(i)

D ij (t, P ) (u)n+1 ij
kb (i)

Corr Corr

+ et : FM((P ), I) =
jV ois(i)

D bik (tn , P ) (u)n+1 bik

(II.12.30) +

DN Rec (t, (P )) + ij
kb (i)

Rec DNik (t, (P )) b

(II.12.31)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 136/277

respectivement. Crelax est un coecient de relaxation donn et x ` 1 en standard. e e a (P n+,k )kIN converge vers P n+ .

On suppose que la suite

` Au fur et ` mesure des itrations, le ux de masse est mis ` jour, en utilisant (P ). A convergence, a e a le ux de masse actualis obtenu est : e (u)n+1 .S ij = (u)n+1 ij ij
Corr

. S ij D ij (tn , P n+ )

(II.12.32)

et on calcule le nouveau champ de vitesse au centre des cellules grce ` lgalit : a a e e un+1 = un+1 Remarque 8 Un traitement spcique permet dassurer que la conservation de la masse portant sur le bilan des ux e de masse aux faces est toujours parfaitement vrie ` lissue de ltape de correction, que la suite e e a e (P n+,k+1 )kIN ait ou non atteint la convergence. En eet, P n+,kf in +1 , dernier terme valu de la e e suite, est donn par : e FM((P )n+,kf in +1 , I) = F(P n+,kf in , I) Au lieu de ractualiser classiquement le ux de masse, on le calcule comme suit : e (u)n+1 . S ij = (u)n+1 ij ij et : (u)n+1 . S bik = (u)n+1 bik bik ce qui conduit bien ` : a (u)n+1 . S ij + ij
jV ois(i) kb (i) Corr Rec . S bik D bik (t, P n+,kf in ) DNik (t, (P )n+,kf in +1 ) b Corr

t grad P n+

(II.12.33)

. S ij D ij (t, P n+,kf in ) DN Rec (t, (P )n+,kf in +1 ) ij

(u)n+1 . S bik bik


Corr

=
jV ois(i)

(u)n+1 ij
jV ois(i)

. S ij +
kb (i) kb (i) n+,kf in +1

(u)n+1 bik

Corr

. S bik


jV ois(i)

D ij (t, P n+,kf in ) DN Rec (t, (P ) ij

D bik (t, P n+,kf in ) )


kb (i) Rec DNik (t, (P )n+,kf in +1 ) b

soit : (u)n+1 .S ij + ij
jV ois(i) kb (i)

(u)n+1 . S bik = F(P n+,kf in , I) + FM((P )n+,kf in +1 , I) + bik

et donc : div(u)n+1 d =
i

12.3

Mise en uvre

On se reportera aux sections relatives aux sous-programmes Preduv (prdiction des vitesses) et Resolp e (correction de pression). Pour la reconstruction des vitesses par moindres carrs ` partir des ux de e a masse aux faces, on pourra voir Recvmc.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 137/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 138/277

13- Sous-programme preduv

13.1

Fonction

Dans ce sous-programme, on eectue ltape de prdiction de la vitesse u. Ceci consiste ` rsoudre e e a e lquation de quantit de mouvement (Q.D.M.) en traitant la pression p de mani`re explicite. La e e e solution en vitesse-pression est obtenue apr`s une tape de correction sur la pression eectue dans le e e e sous-programme resolp, en utilisant la loi de conservation de la masse : + div(u) = , t (II.13.1)

o` est le terme source de masse1 . u Lquation de conservation de la quantit de mouvement moyenne obtenue par application du thor`me e e e e fondamental de la dynamique est : (u) + div(u u) = div() + S div( R) t o` : u = pId + avec pour les coulements newtoniens, la relation linaire suivante : e e = 2 D + tr(D) Id 1 D = (grad u + t grad u) 2 (II.13.4) (II.13.3) (II.13.2)

e e reprsente le tenseur de contraintes, le tenseur des contraintes visqueuses, la viscosit dynamique e (molculaire et ventuellement turbulente), D le tenseur taux de dformation2 , R le tenseur de Reynolds e e qui appara lors de lapplication de loprateur moyenne ` lquation instantane, S les termes sources. t e a e e est le second coecient de viscosit. Il est reli ` la viscosit de volume par la relation e ea e 2 = 3 (II.13.5)

Quand lhypoth`se de Stokes est vrie, la viscosit de volume est nulle, soit 3 + 2 = 0. Cette e e e e hypoth`se est implicite dans le code et dans le reste du doument, sauf en compressible. e Lquation de conservation de la quantit de mouvement scrit nalement : e e e + div( grad u)
terme en gradient transpos e t

u = div(u u) + div( grad u) t


convection diusion

2 grad ( divu) div(R) grad (p) + ( 0 ) g + u div( u) 3


viscosit secondaire e

(u i u)
terme source de Q.D.M. d ` la source de masse ua

K pdc u +
perte de charge

T exp + Tsimp u s
autres termes sources de Q.D.M.

(II.13.6)
1 en 2A `

kg.m3 .s1 ne pas confondre, malgr la mme notation D, avec les ux diusifs dcrits dans le sous-programme navsto e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 139/277

avec p dnissant lcart ` la pression hydrostatique de rfrence (la pression hydrostatique relle tant e e a ee e e calcule avec la masse volumique et non 0 ) : e p = p 0 g . X (II.13.7)

(X tant le vecteur de composantes x, y et z). e t , K pdc , u i reprsentent respectivement la viscosit dynamique turbulente, le tenseur des pertes de e e charge et la valeur de la variable associe ` la source de masse. e a La divergence du tenseur des contraintes de Reynolds scrit : e 0 en laminaire, 2 2 t grad (t divu) + div(t (grad u + grad u)) grad ( k) pour les mod`les e 3 3 a ` viscosit turbulente, e div( R) = div( R) pour les mod`les e au second ordre, 2 grad (t divu) + div(t (grad u + t grad u)) en LES 3 (II.13.8) Le terme source de masse fait intervenir la vitesse locale u et aussi une vitesse u i associe ` la masse e a injecte (ou retire). Lorsque < 0, on te de la masse au syst`me et on a donc u i = u. Le terme est e e o e nul (i.e. (u i u) = 0). Quand > 0, on a un terme non nul si u i = u. Dans ce sous-programme, tous les termes intervenant dans lquation de conservation de la quantit de mouvement, except e e e les termes de convection et diusion, sont calculs et transmis au sous-programme codits qui rsout e e lquation compl`te (convection-diusion avec termes sources). e e

13.2

Discretisation

Le terme convectif en div(u u) introduit une non linarit et un couplage des composantes de la e e vitesse u dans lquation (II.13.6). Une linarisation et un dcouplage des trois composantes de la e e e vitesse sont raliss lors de la discrtisation de cette tape de prdiction. e e e e e En eet, soit : u = un + u (II.13.9) La contribution exacte du terme convectif ` prendre en compte dans cette tape de prdiction serait : a e e div(u u) = div(un un ) + div(u un ) + div(un u)
terme couplant linaire e

div(u u)
terme couplant et non linaire e

(II.13.10) Les deux derniers termes de lexpression (II.13.10) sont a priori ngligs de mani`re ` obtenir un e e e a syst`me en vitesse qui soit dcoupl et donc, viter linversion dune matrice pouvant tre de tr`s e e e e e e grande taille. Ces deux termes peuvent nanmoins tre pris en compte de mani`re plus ou moins e e e approche par extrapolation explicite du ux de masse en n + F (pour le terme couplant linaire e e provenant de la convection de un par u) et utilisation dun point-xe par sous itration sur le sous e programme navsto (pour le terme non-linaire, en spciant NTERUP > 1). e e e e a e Lquation (II.13.6) est discrtise au temps n + ` laide dun -schma, et le tenseur des pertes de e charges dcompos en une partie diagonale K d et une extradiagonale K e (soit K pdc = K d + K e ). e e La pression est suppose connue en n 1 + (dcalage temporel pression-vitesse) et le gradient e e naturellement calcul ` cet instant. ea Les termes sources de viscosit secondaire, de gradient transpos, ceux provenant du mod`le de e e e exp e turbulence3 , K e u, ( 0 )g ainsi que T s et u i sont pris de mani`re explicite au temps n, ou extrapols suivant le schma en temps choisi pour les proprits physique et les termes sources. e e ee
3 except e

div(t (grad u))

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 140/277

Les termes sources u div( u), u, Tsimp u et K d u sont implicits est calculs ` linstant n + . e e a Le terme de diusion div( tot grad u) est implicit : la vitesse est prise ` linstant n + et la viscosit e a e explicite ou extrapole. e e Enn, le terme de convection en div( u (u) ) est implicit : la composante rsolue de la vitesse est e e prise en n + , et le ux de masse, explicit, ou extrapol en n + F . e e Par souci de clart, on suppose, en labsence dindication, que les proprites physiques (, tot , ...) e e et le ux de masse (u) sont pris respectivement aux instants n + et n + F , o` et F dpendent u e des schmas en temps spciquement utiliss pour ces grandeurs4 . e e e e La discrtisation temporelle de lquation (II.13.6) scrit alors comme suit : e e un+1 un + div( un+ (u) ) div( tot grad un+ ) = t grad pn1+ + div( u) un+ + ( u i )n+S n un+ exp K n un+ ( K e u)n+S + (T s ) n+S + Tsimp un+ d 2 +[div( tot t grad u)]n+S [ grad ( tot divu)]n+S + ( 0 )g (turb)n+S 3 o`, par souci de simplication, on a pos : u e tot = et : + t pour les mod`les ` viscosit turbulente ou en LES, e a e pour les mod`les au second ordre ou en laminaire e

(II.13.11)

(II.13.12)

2 grad (n k n ) pour les mod`les ` viscosit turbulente, e a e 3 n n turb = div(n R ) pour les mod`les au second ordre, e 0 en laminaire ou en LES

(II.13.13)

Par analogie avec lcriture du -schma pour une variable scalaire, un+ est interpole ` partir de la e e e a vitesse prdite un+1 de la mani`re suivante5 : e e un+ = un+1 + (1 ) un Avec : =1 Pour un schma de type Euler implicite dordre 1. e = 1/2 Pour un schma de type Cranck-Nicolson dordre 2. e Lquation (II.13.11) est alors rcrite sous la forme : e ee div( u) + n + K n Tsimp ( un+1 un ) d t
imp fs + div(u (u)) div( tot grad un+1 ) = n (1 ) div(u (u)) + (1 ) div( tot grad un ) grad pn1+ + div( u) un + ( n u i )n+S n un exp ( K e u )n+S K n un + (T s ) n+S + Tsimp un d 2 +[div( tot t grad u )]n+S [ grad ( tot divu )]n+S + ( 0 )g (turb)n+S 3 n+1

(II.13.14) (II.13.15)

(II.13.16)

exp fs

do` lquation rsolue par le sous-programme codits : u e e fsimp (un+1 un ) + div(un+1 (u)) div( tot grad un+1 ) = (II.13.17) (1 ) div(un (u)) + (1 ) div( tot grad un ) + f exp s
introd = 1/2, ou quune extrapolation est utilise, lordre 2 nest obtenu que si le pas de temps t est uniforme en e temps et en espace.
5 si 4 cf.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 141/277

La mthode de discrtisation spatiale est dveloppe dans le sous-programme codits. e e e e

Remarques : Dans le cas standard sans extrapolation, le terme Tsimp nest ajout ` fsimp que sil est positif an ea de ne pas aaiblir la dominance de la diagonale de la matrice ` inverser. a Si une extrapolation est utilise, par contre, Tsimp est ajout ` fsimp quel que soit son signe. En e ea eet, lide intuitive qui consiste ` prendre : e a
exp (T s + Tsimp u) n+S exp (T s ) n+S + Tsimp un+

si Tsimp > 0 sinon

(II.13.18)

imp aboutit ` une incohrence dans le traitement si Ts a e change de signe entre deux pas de temps. la partie diagonale K d du terme de perte de charge est utilise dans fsimp . En fait, pour tre e e rigoureux, il faudrait ne retenir que les contributions positives (point signal dans le sous-programme e utilisateur associ uskpdc). Cette prise en compte sera ` amliorer. e a e e Le terme n div( u) ne pose pas de probl`me pour la dominance de la diagonale de la matrice car il est exactement compens par le terme de convection (cf. covofi). e

13.3

Mise en uvre

Lquation de conservation de la quantit de mouvement est donc rsolue de faon dcouple. Ainsi, e e e c e e lintgration des dirents termes a t eectue an de traiter sparment lquation obtenue pour e e ee e e e e chaque composante de la vitesse. exp Dans le sous-programme preduv, on calcule pour chaque composante le second membre fs du syst`me e e a (II.13.16), les termes implicites du syst`me (` lexception des termes de convection-diusion), et le terme de viscosit totale aux faces internes6 et de bord. Ces termes sont alors transmis au souse programme codits qui construit et rsout le syst`me complet obtenu pour chaque composante de la e e vitesse avec les termes de convection-diusion. Le rsidu de normalisation pour la rsolution du syst`me en pression (resolp) est calcul dans preduv. e e e e Il est dni par la norme de la grandeur e div( un+1 + tgrad P n1+ ) intgre sur chaque cellule IEL du maillage (iel ) soit, symboliquement, par la racine carre de la e e e somme sur les cellules du maillage de la quantit e XNORMP(IEL)=
iel

[div( un+1 + t grad P n1+ ) ] d.

Il reprsente le second membre du syst`me qui porterait sur la pression si le gradient de pression ntait e e e pas pris en compte lors de ltape de prdiction des vitesses. On note que si lon utilisait directement e e le second membre de lquation portant sur lincrment de pression, on obtiendrait, pour un calcul e e stationnaire men ` convergence, un rsidu de normalisation tendant vers zro, ce qui serait pnalisant ea e e e et peu utile. Au dbut de preduv, on ne dispose pas encore de un+1 et il nest donc pas possible de calculer le e rsidu de normalisation en totalit. Cependant, le calcul du rsidu complet ` la n de preduv nest pas e e e a souhaitable non plus, car on devrait alors monopoliser un tableau de travail pour conserver le gradient de pression tout au long de preduv. Le calcul du rsidu de normalisation est donc ralis en deux fois. e e e
6 valeur

ncessaire pour lintgration du terme de diusion dans codits, ( tot )ij e e

SURFN DIST

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 142/277

La quantit e div( u
iel iel n+1

div( t grad P n1+ ) d est calcule au dbut de preduv et on y ajoute le complment e e e )d ` la n de preduv. a

On calcule donc tout dabord le gradient de pression aux cellules ` linstant n 1 + par un appel a a ` grdcel. On utilise alors inimas pour valuer t S grad P n1+ n aux faces (de surface S et de e normale n). Pour cela, en entre de inimas , le tableau de travail TRAV contient t grad P n1+ ; en e sortie, les tableaux VISCF et VISCB contiennent la valeur de t S grad P n1+ n aux faces internes et de bord respectivement. On utilise ensuite divmas qui place alors dans XNORMP la valeur de
iel

div( t grad P n1+ )d aux

cellules ` partir des tableaux VISCF et VISCB. a On ajoute enn ` XNORMP la contribution a
iel

n d du terme source de masse.

On applique pour u + tgrad P les conditions aux limites de la vitesse. Les conditions aux limites utilises pour le gradient de pression (ou plutt pour t grad P n1+ ) pour le calcul de e o div( t grad P n1+ )d
iel

sont donc les conditions aux limites de la vitesse homognises : ainsi, on suppose que dans la direce e e tion normale aux entres et aux parois, le gradient de pression (ou plutt t grad P n1+ ) est nul et e o que dans la direction normale aux symtries et aux sorties, il reste inchang. e e De plus, pour gagner du temps calcul lors du passage par inimas, on se contente, sur les maillages non orthogonaux, dune valuation des valeurs aux faces ` lordre 1 en espace (pas de reconstruction : e a NSWRP=1). En eet, on cherche ` valuer un simple rsidu de normalisation global : la prcision locale ae e e na donc pas dintrt. ee Le calcul du rsidu sera complt ` la n de preduv. e eea Calcul en partie du rsidu de normalisation pour ltape de pression e e Dans cette premi`re tape on calcule dans le tableau XNORMP(NCELET) la grandeur e e div(t grad P n1+ ) intgre sur chaque cellule IEL du maillage (iel ) soit, symboliquement, e e XNORMP(IEL) =
iel

div( t grad P n1+ ) d

On ralise cette opration en utilisant successivement inimas (calcul aux faces dans VISCF et VISCB e e de t grad P n1+ ` partir du tableau de travail TRAV= t grad P n1+ , assorti des conditions aux a limites de vitesse homog`nes et sans reconstruction) et divmas (calcul dans XNORMP de lintgrale sur e e les cellules). Par une simple boucle, on ajoute ensuite la contribution du terme source de masse . Ce calcul est complt ` la n de preduv. eea

exp Calcul en partie du terme f s

Pour reprsenter le second membre correspondant ` chaque composante de la vitesse, on utilise les e a tableaux TRAV(IEL,DIR), TRAVA(IEL,DIR) et PROPCE, o` IEL est le numro de la cellule et DIR la direcu e tion (x, y, z). Quatre cas sont ` considrer suivant que les termes sources sont extrapols en n + S , a e e ou que lon it`re par un point xe sur le syst`me en vitesse-pression (NTERUP> 1). e e Si on extrapole les termes sources et que lon it`re sur navsto e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 143/277

- TRAV reoit les termes sources qui sont recalculs au cours de toutes les itrations sur navsto et c e e qui ne sont pas extrapols (grad P n1+ et ( 0 )g 7 ). e - TRAVA reoit les termes sources qui ne changent pas au cours des itrations sur navsto et qui ne c e imp sont pas extrapols (Ts un , K d un , n un , ...). e - PROPCE reoit les termes sources devant tre extrapols. c e e

Sans itration sur navsto, TRAVA est inutile et son contenu est directement stock dans TRAV. e e Sans extrapolation des termes sources, PROPCE est inutile et son contenu est directement stock e dans TRAVA (ou dans TRAV si TRAVA est inutile). Ainsi, sans extrapolation des termes sources, et sans itration sur navsto, tout les termes sources vont e directement dans TRAV.

On dispose dj` du gradient de pression sur les cellules ` linstant n 1 + . Le terme de gravit ea a e est alors ajout au vecteur TRAV qui contient dj` le gradient de pression. Ainsi, on a par exemple e ea pour la direction x : TRAV(IEL, 1) = |IEL |(( p )IEL + ((IEL) 0 )gx ) x (II.13.19)

Si une extrapolation des termes sources est utilise, le vecteur TRAV (ou TRAVA) reoit ` la e c a premi`re itration sur navsto, S fois la contribution au temps n 1 des termes sources devant e e tre extrapols8 (stocke dans PROPCE). PROPCE est ensuite rinitialis ` zro de faon ` pouvoir e e e e ea e c a recevoir plus tard la contribution au pas de temps courant des termes sources qui sont extrapols. e Le terme correspondant au mod`le de turbulence nest calcul que lors de la premiere itration e e e sur navsto puis ajout ` TRAVA, TRAV ou PROPCE suivant que les termes sources sont extrapols, ea e ou que lon it`re sur navsto. e Mod`les ` viscosit turbulente : e a e 2 2 Si IGRHOK = 1, alors on calcule grad k (et non, comme on devrait, grad (k)) par sim3 3 plication (cf. paragraphe 13.4). Le gradient de k est calcul sur la cellule par le sous-programme e grdcel. Si IGRHOK = 0, ce terme est suppos tre implicitement pris en compte dans la pression. ee Mod`les au second ordre : e Le calcul du terme div(R) seectue en deux temps. Tout dabord, on appelle le sousprogramme divrij qui projette le vecteur R.eDIR aux faces, pour la direction DIR. Puis, on appelle le sous-programme divmas qui en calcule la divergence.

2 Les termes de viscosit secondaire grad ( tot div u) et de gradient transpos div( tot t grad u) e e 3 sont calculs (sils sont pris en compte i.e. IVISSE (IPHAS) = 1, o` IPHAS est le numro de la e u e phase traite) par le sous-programme vissec. Il ne sont calculs qu` la premi`re itration sur e e a e e
7 en ralit ( )g ne change pas, mais il est rapide ` calculer ce qui vite davoir un traitement supplmentaire e e a e e 0 pour ce terme. 8 car (T exp )n+S = (1 + ) (T exp )n (T exp )n1 S S s s s

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 144/277

navsto. Au cours de cette tape, le tableau TRAV est utilis comme tableau de travail lors de e e lappel au sous-programme vissec. Il retrouve sa valeur ` la n de cet appel, son contenu tant a e temporairement stock dans les vecteurs W7 ` W9. e a Les termes correspondant aux pertes de charges (K pdc u), sils existent ( NCEPDP > 0 ), sont calculs par le sous-programme tsepdc ` la premi`re itration sur navsto. Ils sont dcomposs e a e e e e en deux parties : Une premi`re, correspondant ` la contribution des termes diagonaux ( K d u) qui nest pas e a extrapole. e e Une seconde, correspondant aux termes extradiagonaux ( K e u) qui peut ltre ou non. Au cours de cette tape, le tableau TRAV est utilis comme tableau de travail lors de lappel au e e sous-programme tsepdc. Il retrouve sa valeur ` la n de cet appel, son contenu tant tempoa e rairement stock dans les vecteurs W7 ` W9. e a SURFN Calcul du terme de viscosit aux faces ( tot )ij e DIST Le calcul du terme de viscosit totale aux faces est eectu par le sous-programme viscfa et stock e e e dans les tableaux VISCF et VISCB pour les faces internes et faces de bord respectivement. Lors de lintgration des termes de convection-diusion dans le sous-programme codits, on distingue e les termes non reconstruits, intgrs dans la matrice EM , de lensemble des termes (non reconstruits e e + gradients de reconstruction) associs ` loprateur E (non linaire)9 . De la mme mani`re, on dise a e e e e tingue la viscosit totale aux faces utilise dans E, tableaux VISCF et VISCB, de la viscosit totale aux e e e faces utilise dans EM , tableaux VISCFI et VISCBI. e Pour les mod`les ` viscosit turbulente et en LES, ces deux tableaux sont identiques et contiennent e a e t +. Pour les mod`les au second ordre, ils contiennent normalement , mais pour des simples raisons e de stabilit numrique, on peut choisir de mettre t + dans la matrice (i.e. dans EM ) en conservant e e au second menbre (i.e. dans E). De par la rsolution par incrments, cette manipulation ne change e e pas le rsultat. Cette option est active par lindicateur IRIJNU = 1 e e Si la vitesse nest pas diuse ( IDIFF(IUIPH) < 1), alors les termes VISCF et VISCB sont mis ` zro. e a e

e e Calcul du second membre complet, de fsimp et rsolution de lquation Les quations dvolution des composantes de la quantit de mouvement sont rsolues de faon dcouple. e e e e c e e On utilise, par consquent, un seul tableau ROVSDT pour reprsenter la partie diagonale de la matrice e e obtenue pour chaque composante de la vitesse. Pour chaque composante de la vitesse :

Lors de la premi`re itration sur le sous-programme navsto, les parties implicites et explicites e e des termes sources utilisateurs sont calcules par appel au sous-programme ustsns. e imp La partie implicite (Ts ) est conserve dans le vecteur XIMPA pour les itrations suivantes e e en cas dutilisation du point-xe sur le syst`me en vitesse-pression, et la contribution issue des e imp mmes termes implicites (Ts un ) ajoute ` TRAVA ou ` TRAV. e e a a exp La partie explicite (Ts ) est ajoute ` TRAVA, TRAV ou PROPCE suivant que les termes sources e a sont extrapols, ou que lon it`re sur navsto. e e Le terme daccumulation de masse (div(u)) est calcul en appelant le sous-programme divmas e avec en argument le ux de masse. Lors de la premi`re itration faite sur le sous-programme e e navsto, le terme correspondant a la contribution explicite de laccumulation de masse (un div(u)) ` est ajout ` TRAVA ou ` TRAV. Le vecteur ROVSDT est initialis par div(u) (par cohrence avec ea a e e ce qui est fait dans le sous-programme bilsc2) puis la contribution du terme instationnaire ( ) t
9 par

cohrence avec les oprateurs EM et E dnis dans navsto e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 145/277

ajoute ` ce dernier. e a Le vecteur ROVSDT est ensuite complt avec la contribution des termes sources implicites utilee isateur (stocke dans XIMPA) et avec celle des perte de charge ( K d ) si NCEPDP > 0. e Dans le cas ou les termes sources ne sont pas extrapols, la partie implicite des termes sources e utilisateur nest ajoute ` ROVSDT que si elle est ngative de faon ` ne pas aaiblir la diagonale e a e c a du syt`me. e Dans le cas ou ils sont extrapols par contre, elle est prise en compte quel que soit son signe. e Les termes sources implicite et explicite de masse, sils existent ( NCESMP > 0 ), sont calculs ` e a la premi`re itration sur navsto par le sous-programme catsma. ui est ajout ` TRAV, TRAVA e e ea ea a ou PROPCE pour tre ventuellement extrapol. un est rajout ` TRAV ou TRAVA et ` ROVSDT. e e e Le second membre est enn assembl en tenant compte de toutes les contributions stockes dans e e les tableaux PROPCE, TRAVA et TRAV. Si les termes sources sont extrapols alors : e SMBR = (1 S ) PROPCE + TRAVA + TRAV Sinon on a directement : SMBR = TRAVA + TRAV Prise en compte des physiques particuli`res (lagrangien, arc lectrique, ...) ajouts directement e e e a ` SMBR. La resolution du syst`me linaire est faite par le sous-programme codits avec pour argument e e ROVSDT et SMBR. Si on utilise le couplage instationnaire renforc vitesse-pression ( IPUCOU = 1 ) (uniquement e disponible avec lordre 1, sans extrapolation des termes sources et sans itration sur navsto) on e rsout, en utilisant pour codits : e EM DIR . (RHO n )1 . T DIR = . 1 (II.13.20)

avec RHOn le tenseur diagonal dlment n , le tenseur diagonal dlment |IEL |, 1 le ee ee IEL vecteur de composantes toutes gales ` 1. e a Linversion du syst`me par codits fournit (RHO n )1 . T DIR , qui est ensuite multipli par RHO n e e pour obtenir T DIR . Ceci est ralis pour chaque composante DIR de la vitesse. T DIR est alors e e une approximation de type matrice diagonale de RHO n . EM 1 , avec EM DIR reprsentant toue DIR jours la partie implicite de lquation de quantit de mouvement (i.e. ROVSDT + contribution des e e termes de convection-diusion pris en compte dans le sous-programme matrix). T DIR intervient dans ltape corrective (cf. sous-programme resolp). e

Fin de la boucle sur les composantes de la vitesse.

Fin du calcul du rsidu de normalisation pour ltape de pression e e Comme indiqu prcdemment, on peut maintenant complter le calcul du rsidu de normalisation e e e e e pour ltape de pression de resolp. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 146/277

Le tableau XNORMP contient dj` ea


iel

div( t grad P n1+ ) d . On lui ajoute donc


iel

div( un+1 )d.

Pour cela, on proc`de comme prcdemment pour le calcul de e e e


iel n+1

div( t grad P n1+ )d. Un appel

a ` inimas permet dobtenir S un+1 n aux faces ` partir de u connu aux cellules (tableau RTP). Les a conditions aux limites pour inimas sont naturellement celles de la vitesse. Comme prcdemment, on se e e contente pour gagner du temps calcul lors du passage par inimas, dune valuation des valeurs aux faces e a ` lordre 1 en espace sur les maillages non orthogonaux (pas de reconstruction : NSWRP=1). On utilise a ensuite divmas pour calculer aux cellules la divergence div( un+1 )d et lajouter directement `
iel

XNORMP. Pour nir, le rsidu de normalisation est dtermin et stock dans RNORMP(IIPHAS) par un appel ` e e e e a prodsc (qui ralise le calcul de la somme sur les cellules du carr des valeurs de XNORMP et en prend la e e racine carre). e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 147/277

On rsume dans les tableaux (II.13.21), (II.13.22), (II.13.23) et (II.13.24) les direntes contributions e e (hors convection-diusion) aectes ` chacun des vecteurs TRAV, TRAVA, PROPCE et ROVSDT ` litration e a a e n. On direncie pour chacun des schmas en temps appliqus aux les termes sources, deux cas suive e e ant quun point xe sur le syst`me en vitesse-pression est utilis ou non (itration sur navsto pour e e e NTERUP> 1). En labsence dindication les proprits physiques (,,etc...) sont supposes prises au ee e u e e temps n + , et le ux de masse ( u) pris au temps n + F , o` et F dpendent des schmas en temps spciquement utiliss pour ces grandeurs (cf. introd). e e Les termes gurant dans ces tableaux sont crits tels quils ont t implants dans le code, do` e ee e u lorigine de certaines dirences par rapport ` lcriture adopte dans lquation (II.13.16). e a e e e Par souci de simplication, on pose : tot = + t pour les mod`les ` viscosit turbulente ou en LES, e a e pour les mod`les au second ordre ou en laminaire e

Avec extrapolation des termes sources 2 n grad ( k n ) 3 n turb = div(n Rn ) 0 pour les mod`les ` viscosit turbulente, e a e pour les mod`les au second ordre, e en laminaire ou en LE.

NTERUP = 1 : SMBRn = (1 S ) PROPCEn + TRAVn ROVSDTn PROPCEn div( u) + n + K n Tsimp d t exp, T s n n K n un + n un i e 2 (u) n n t n turb + div( tot grad u ) + grad (n div n ) tot 3 grad pn1+ + ( 0 )g S PROPCEn1 K n un d +Tsimp un + div( u) un n un

(II.13.21)

TRAV

NTERUP > 1 (sous-itration k) : SMBRn = (1 S ) PROPCEn + TRAVAn + TRAVn e ROVSDTn PROPCEn div( u) + n + K n Tsimp d t exp, T s n n K n un + n un i e 2 (u) n n t n turb + div( tot grad u ) + grad (n div n ) tot 3 S PROPCEn1 K n un + Tsimp un + div( u) un n un d grad (pn+ )(k1) + ( 0 )g

(II.13.22)

TRAVAn TRAVn

Sans extrapolation des termes sources

2 grad ( k n ) pour les mod`les ` viscosit turbulente, e a e 3 n turb = div( Rn ) pour les mod`les au second ordre, e 0 en laminaire ou en LES.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 148/277

NTERUP = 1 : SMBRn = TRAVn div( u) + n + K n + M ax( Tsimp , 0) d t grad pn1+ + ( 0 )g exp +T s K n un + n un i e 2 (u) n n t ) turb + div( tot grad u ) + grad ( tot div 3 n n imp n n n n u + div( u) u u K d u + Ts

ROVSDTn TRAVn

(II.13.23)

NTERUP > 1 (sous-itration k) : SMBRn = TRAVAn + TRAVn e ROVSDTn TRAVAn div( u) + n + K n + M ax( Tsimp , 0) d t exp T s K n un + n un i e (u) 2 n t n turb + div( tot grad u ) + grad ( tot div ) 3 n n imp n n n n K d u + Ts u + div( u) u u n+ (k1) grad (p ) + ( 0 )g

(II.13.24)

TRAVn

13.4

` Points a traiter

Prise en compte du terme grad (k) pour les mod`les ` viscosit turbulente e a e Pour les mod`les ` viscosit turbulente, on calcule grad k au lieu de grad (k). Cette approximation, e a e historique, provient du fait que les conditions aux limites de k ne sont pas directement accessibles, contrairement ` celles de k. a

Prise en compte de la diagonale de K pdc Actuellement, dans le sous-programme utilisateur uskpdc, une mise en garde explicite est crite, mais e en commentaire. La partie diagonale K d du tenseur de pertes de charge K pdc peut donc intervenir systmatiquement dans le calcul du coecient fsimp , que sa contribution K d soit positive ou non, si e lutilisateur ny prend garde. Un test de positivit sur les lments de K d assurant une prise en compte e ee correcte (contribution renforant rellement la diagonale de la matrice globale) devrait tre implant. c e e e Ecriture de EM Dans la rsolution procdant par incrments, il nest pas indispensable ` convergence que la viscosit e e e a e utilise pour lcriture de loprateur E soit la mme que celle prise en compte dans EM , matrice du e e e e e syst`me en incrments. Ainsi, en Rij , la viscosit totale utilise dans EM contient la viscosit e e e e molculaire mais aussi la viscosit turbulente si lon choisit loption IRIJNU = 1 , alors que dans E e e intervient seule la viscosit molculaire. Cet ajout de la viscosit turbulente qui na pas de raison e e e dappara tre en Rij , a t hrit des pratiques mises en uvre dans ESTET et N3S-EF pour ee e e renforcer la stabilit (lissage ventuel de lincrment). Mais, ce nest peut tre pas le seul eet produit. e e e e En outre, cette pratique na pas aujourdhui montr son absolue ncessit dans Code Saturne. Par e e e consquent, une tude approfondie serait intressante. e e e Rsidu de normalisation de ltape de pression e e On pourra vrier le calcul du rsidu de normalisation et en particulier lutilisation des conditions aux e e limites de vitesse. Calcul des pertes de charges

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 149/277

Avec extrapolation des termes sources on a : (K e u)n+S + K n un+ d Il serait aussi envisageable dutiliser : (K e u)n+S + K n+S un+ d

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 150/277

14- Sous-programme recvmc

14.1

Fonction

Le but de ce sous-programme est de calculer la vitesse au centre des cellules ` partir du ux de masse a aux faces, par moindres carrs. Utilise apr`s ltape de correction de pression (cf. navsto) cette e e e e mthode est une alternative ` la technique de reconstruction ` partir du gradient de lincrment de e a a e pression (technique standard). Elle est active quand lindicateur IREVMC vaut 1 ou 2. e On rappelle que, ` la n de ltape de correction de pression, le ux de masse aux faces vaut : a e (u)n+1 .S ij = (u)n+1 . S ij D ij (tn , P n+ ) + RC ij ij ij (II.14.1)

o` u est la vitesse issue de ltape de prdiction, D ij un oprateur de gradient aux faces et RC ij u e e e le terme dArakawa (cf. navsto pour une dnition prcise des notations). Une premi`re mthode, e e e e active par IREVMC = 2, consiste ` partir directement de (u)n+1 .S ij pour calculer un+1 par moindres e a ij carrs. Son utilisation a montr quelle semblait plus diusive que la mthode standard (par exemple, e e e dans le cas de la cavit entra ee) et pouvait conduire ` des rsultats errons sur des maillages ne e n a e e comportant pas uniquement des ttra`dres (ou des prismes ` base triangulaire en 2D) et des pavs e e a e (hexa`dres orthogonaux). e On note que, dans la mthode ci-dessus, on est parti dune vitesse u au centre des cellules, quon a e projete aux faces pour obtenir le ux de masse, et quon ram`ne au centre des cellules par moindres e e carrs. Fort de cette constatation, une mthode alternative est disponible, active par IREVMC = 1. e e e Elle consiste ` nappliquer la mthode des moindres carrs qu` la partie D ij (tn , P n+ ) + RC ij a e e a e du ux de masse et ` rajouter directement u (connu au centre des cellules) au rsultat obtenu1 . Cette a mthode donne des rsultats sensiblement meilleurs. e e

14.2

Discretisation

Soit une cellule i , ij le ux de masse (total ou uniquement la partie en gradient de pression) ` travers a la face la sparant dune cellule voisine j et bi k le ux de masse (total ou uniquement la partie en e gradient de pression)` travers la face de bord bik . Lidal serait de pouvoir trouver un vecteur v i telle a e que, pour toute cellule voisine j on ait : i v i .S ij = ij et lquivalent aux faces de bords, i.e. : e i v i .S bik = bik (II.14.3) (II.14.2)

Comme cest gnralement impossible dobtenir les deux galits prcdentes2 , on va simplement e e e e e e chercher ` minimiser la fonction Fi : a Fi =
jV ois(i)

i v i .S ij ij

+
kb (i)

i v i .S bik bik

(II.14.4)

Pour ce faire, on drive Fi par rapport aux trois composantes du vecteur v i , et on rsout le syst`me e e e 3 3 local qui rsulte : e
1 cette 2 sauf

derni`re tape est faite dans navsto. e e en incompressible pour des triangles en 2D et des ttra`dres en 3D e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


1 ( ij Sij,x + bik S bik ,x ) i jV ois(i) kb (i) 1 ( ij Sij,y + bik S bik ,y ) i jV ois(i) kb (i) 1 ( ij Sij,z + bik S bik ,z ) i
jV ois(i) kb (i)

Code Saturne documentation Page 151/277

vi,x S i vi,y = vi,z

(II.14.5)

i avec S i matrice carre 3 3 dlment S ml courant dni par : e ee e i S ml = jV ois(i)

Sij, l Sij, m +
kb (i)

S bik , l S bik , m

(II.14.6)

14.3

Mise en uvre

Le ux de masse est pass par les arguments FLUMAS et FLUMAB. e Calcul de la matrice Les NCEL matrices 3 3 sont stockes dans le tableau de travail COCG, de dimension N CELET 3 3. e Ce dernier est dabord mis ` zro, puis son remplissage se fait dans des boucles sur les faces internes et a e les faces de bord. La matrice tant symtrique, ces boucles ne servent qu` remplir la partie triangulaire e e a suprieure, le reste tant rempli par symtrie ` la n. e e e a Inversion de la matrice On calcule les coecients de la comatrice, puis linverse. Pour des questions de vectorisation, la boucle sur les NCEL lments est remplace par une srie de boucles en vectorisation force sur des blocs de ee e e e ` NBLOC=1024 lments. Le reliquat (NCEL E(NCEL/1024) 1024) est trait apr`s les boucles. A la n, ee e e la matrice inverse est stocke dans COCG (toujours en utilisant sa proprit de symtrie). e ee e Calcul du second membre et rsolution e Le second membre est stock dans BX, BY et BZ. La vitesse nale est stocke dans UX, UY et UZ. e e

14.4

` Points a traiter

Vectorisation force e Le dcoupage en boucles de 1024 est-il vraiment ncessaire ? Les machines vectorielles et les compilae e teurs sont-ils aujourdhui capables deectuer la vectorisation sans cette aide ? On note cependant que ce dcoupage en boucles de 1024 na pas de cot CPU supplmentaire, et un cot mmoire ngligeable. e u e u e e Le seul inconvnient rside dans la complexit de lcriture. e e e e Suppression de la mthode IREVMC = 2 e Sur un maillage 1D dhexa`dres tous orthogonaux sauf une face, on peut montrer que la mthode e e fait appara une composante de vitesse aberrante non nulle et directement dtermine par langle de tre e e non orthogonalit de la face (non consistance). On pourrait donc songer ` supprimer purement cette e a mthode, dans la mesure o` elle nest a priori consistante que sur une classe rduite de maillages. e u e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 152/277

15- Sous-programme resolp


15.1 Fonction

Dans ce sous-programme appel dans navsto, on eectue ltape de projection de la vitesse (ou de e e correction de pression). Lquation de quantit de mouvement (prdiction) est rsolue dans preduv e e e e avec une pression totalement explicite. Il en rsulte un champ de vitesse qui ne satisfait pas lquation e e de continuit. Deux algorithmes de correction sont proposs : e e 1. Lalgorithme que lon appellera couplage faible vitesse-pression. Cest un algorithme largement implant dans les codes industriels. Il ne couple la vitesse et la pression qu` travers le terme de e a masse (cest lalgorithme propos par dfaut). Cest un algorithme de type SIMPLEC proche du e e SIMPLE. Ce dernier prend en compte, en plus du terme de masse, les diagonales simplies de e la convection, de la diusion et des termes source implicites. 2. Lalgorithme de couplage vitesse-pression renforc (option IPUCOU = 1). Cest un algorithme qui e couple la vitesse et la pression ` travers tous les termes (convection, diusion et termes source a implicites) de lquation de quantit de mouvement sans pour autant tre exact. Il permet en e e e pratique de prendre de grands pas de temps sans dcoupler totalement la vitesse et la pression. e Si p est lincrment de pression (i.e. pn+1 = pn + p) et u la vitesse issue de ltape de prdiction, e e e ltape de projection revient dun point de vue continu ` rsoudre une quation de Poisson : e a e e div( T n grad p) = div( u) et ` corriger la vitesse : a un+1 = un 1 n T grad p (II.15.2) (II.15.1)

T n est un tenseur dordre 2 dont les termes sont homog`nes ` un pas de temps. e a

15.2

Discretisation

Ltape de prdiction de la vitesse est dcrite dans preduv. On adopte ici une notation doprateurs e e e e pour simplier la comprhension des algorithmes implants. Lquation discr`te de quantit de mouvee e e e e ment scrit, ` un instant de rsolution intermdiaire, dans chaque direction despace ( {1, 2, 3}) e a e e : M n Rn (V V n ) + A n V = G P n + S n + I s, V (II.15.3)

M n , de dimension NCEL NCEL, est une matrice diagonale contenant le rapport du volume dune |i | cellule et du pas de temps local ( M n (i, i) = ), tn reprsente le pas de temps dans la e ,I tn ,I direction despace ` la cellule i et au pas de temps n, a Rn , de dimension NCEL NCEL, est la matrice diagonale contenant la masse volumique (on la spare de la matrice de masse pour ltape de projection de u). Par dnition, Rn (i, i) = n et e e e I lapparition du vide tant exclue, cette matrice est naturellement inversible, e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 153/277

e V , de dimension NCEL, est un tableau o` est stocke la `me composante de la vitesse prdite u, u e e e a V n , de dimension NCEL, est un tableau o` est stocke la `me composante de la vitesse un ` u e linstant prcdent n, e e

e e e e e a A n dsigne loprateur de convection/diusion (cet oprateur nest pas forcment linaire ` cause des tests de pente ventuels dans le terme de convection, il peut dpendre de V ), e e G est loprateur linaire1 gradient cellules dans la direction (il est donc appliqu ` des e e e a vecteurs de dimension NCEL), P n , de dimension NCEL, est un tableau o` est stocke la pression pn du pas de temps prcdent u e e e a ` chaque cellule, S n est le tableau de dimension NCEL qui contient tous les termes source explicites (voir preduv pour plus de dtails), e I s, est le tenseur diagonal relatif aux termes source implicites des composantes de la vitesse. Ltape de correction consiste ` imposer : e a div( u ) = o` est un terme source de masse ventuel. u e Soit W le tableau de dimension 3 NCEL qui contient toutes les composantes de la quantit de moue vement (V dsigne V n , V n+1 ou V ). e n V1 W = R n V = n V 2 n V 3 e e e e Soit D loprateur de divergence. Lquation de continuit (II.15.4) scrit : D W = contient la valeur de au centre des cellules. Dapr`s lquation discr`te (II.15.3), on crit pour tout {1, 2, 3} : e e e e (M n + A n (Rn ) On pose :
1

(II.15.4)

I s, (Rn )

) R n V = G P n + S n + M R n V n

(II.15.5)

B = M n + A n (Rn ) I s, (Rn ) B1 0 0 B = 0 B2 0 0 0 B3 G1 G = G2 G3 S1 n + M 1 R n V 1 n S n = S2 n + M 2 R n V 2 n S3 n + M 3 R n V 3 n

1 en toute rigueur, ` cause des limitations ventuelles de gradient qui peuvent tre active par lutilisateur, cet oprateur a e e e e peut ne plus tre vraiment linaire e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 154/277

On peut donc crire : e B W = G P n +Sn La mthode des pas fractionnaires se dcompose en deux tapes : e e e 1. rsolution de lquation (II.15.3) (cette quation nous donne lquation(II.15.6)), soit : e e e e M n Rn (V V n ) + A n V I s, V = G P n + S n (II.15.7) (II.15.6)

2. soustraction2 de lquation de quantit de mouvement prise ` linstant (n + 1) de (II.15.7) : e e a M n Rn (V n+1 V ) + A n (V n+1 V ) I s, (V n+1 V ) = G (P n+1 P n ) (II.15.8) Lquation (II.15.8) nous donne : e B (W n+1 W ) = G (P n+1 P n ) avec : W n+1 = Rn V Or : D W n+1 = Do`, en posant P = P n+1 P n , u D B 1 G P = D W (II.15.10)
n+1

(II.15.9)

Il nous reste donc ` inverser le syst`me (II.15.10) pour dterminer p (donc p n+1 ) et corriger la vitesse a e e e pour obtenir u n+1 . La correction de la vitesse se fait dans navsto, soit en incrmentant la vitesse par le gradient de lincrment de pression p calcul, soit en reconstruisant la vitesse ` partir du ux de e e a masse actualis par une mthode de moindres carrs (en appelant le sous-programme recvmc). e e e Le probl`me provient tout dabord du calcul de B 1 . En eet, il a t jug trop coteux de calculer e ee e u linverse de B. Les algorithmes couplage faible vitesse-pression et celui du couplage vitesse-pression renforc correspondent ` une approximation de cet oprateur. e a e Dans le cas de lalgorithme couplage faible vitesse-pression, on suppose B 1 = M 1 (on pourrait inclure aussi les termes diagonaux issus de la convection, de la diusion et des termes source implicites). Pour le couplage vitesse-pression renforc, on inverse le syst`me3 B T = et on pose B 1 = diag(T ). e e Cette tape a lieu dans le sous-programme preduv. e Les critures ` laide des oprateurs posent un inconvnient majeur avec la discrtisation colocalise. e a e e e e e e En eet, loprateur4 D B 1 G peut dcoupler les nuds pairs et impairs sur un maillage cartsien e et rgulier5 . Pour viter ce probl`me, on utilise loprateur L (issu naturellement de la formulation e e e e volumes nis colocalise de loprateur div( grad )) dni en chaque cellule6 i de centre I par7 : e e e (L P )I =
jV ois(i)
2 On 3

[ T n (grad p) f ij ] . S ij + ij

kb (i)

[Tn b

ik

(grad p) f b ik ] . S b ik

(II.15.11)

nglige la variation des termes sources explicites S n qui sont toujours estims en n. e e = (|1 |, ..., |NCEL |, |1 |, ..., |NCEL |, |1 |, ..., |NCEL |). 4 On insiste sur le fait que loprateur G est loprateur gradients cellules appliqu ` la pression explicite lors de la e e ea prdiction de la vitesse. e 5 Si u est la valeur dune variable aux centres des cellules sur un maillage cartsien 1D, le Laplacien de u calcul par e e i ui2 + 2ui ui+2 cet oprateur en i scrit : e e , o` h est le pas despace. Do` le dcouplage des cellules. u u e 4h2 6 On rappelle que V ois(i) est lensemble des centres des cellules voisines de et (i) lensemble des centres ventuels e i b des faces de bord de i . 7 Si u est la valeur dune variable aux centres des cellules sur un maillage cartsien 1D, le Laplacien de u par ce e i ui1 + 2ui ui+1 dernier oprateur en i scrit : e e , o` h est le pas despace. u 4h2

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 155/277

T n un tenseur diagonal dordre 2 contenant les pas de temps dans les trois directions despace et S ij (respectivement S b ik ) le vecteur surface de la face purement interne ij (resp. de la face de bord ik). Le gradient (grad p) f prsent dans lquation (II.15.11) est un gradient facette8 . e e Dun point de vue continu, on peut crire9 : e (L P n+1 )I =
i

div( T n grad pn+1 ) d

Loprateur L ne pose pas de probl`me de dcouplage pair/impair sur les maillages cartsiens et e e e e rguliers. e n tI 0 0 n tI 0 Avec lalgorithme couplage faible vitesse-pression : T n = 0 I n 0 0 tI n T 11, I 0 0 n T 22, I 0 et avec lalgorithme couplage vitesse-pression renforc : T n = 0 e I n 0 0 T 33, I La matrice du syst`me de pression, dans le cas de lutilisation du couplage vitesse-pression renforc, e e nest pas facilement calculable ` cause du terme : a [ T n (grad p) f ij ] . S ij ij pour une face interne ij et du terme : [Tn b
ik

(grad p) f b ik ] . S b ik

pour une face de bord. En eet, ` cause du changement de la viscosit suivant la direction de lespace du fait de lanisotropie a e de T n , il faudrait calculer les gradients directionnels en fonction du gradient normal. On pose pour tout scalaire a, sans prciser pour le moment la nature du gradient grad : e Ga=T
n n T11

n grad a = T22 n T33

a x a y a z

On peut galement dnir : e e (G a) cell . S ij = T n (grad a)


df e
ij

ij

. S ij

o` grad a est le gradient cellule classique de a. u De mme , on pose : e (G a) f


ij

. S ij = T n ((grad a)) f

df e

ij

. S ij

o` (grad a) f est le gradient facette de a. u On doit calculer G (p) . S ` la face. a Sil sagit dun gradient cellule, cela nengendre aucune dicult, les composantes du gradient cellule e tant toutes parfaitement calculables. e
8 Sur

maillage orthogonal, (grad p) f ij . S ij =

9 Dans

S ij . I (resp. J) et I (resp. J ) sont en eet superposs. e IJ n en le cas de lalgorithme couplage faible vitesse-pression, TI = tI .

pJ pI

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 156/277

Par contre, sil sagit dun gradient facette, seule la dcomposition sur la normale ` la face est exe a (p) (p) (p) 10 ploitable . On a besoin, explicitement et sparment, des quantits e e e , et ce qui x y z rend dicile lutilisation du gradient normal de lincrment de la pression. e On fait donc une approximation sur le gradient de lincrment de la pression en supposant quil est e gal ` sa composante normale11 , cest ` dire : e a a (grad (p)) f ((grad (p)) f . n) n o` n est la normale extrieure unitaire. On a donc : u e G (p) ((grad (p)) f . n) (T n n)
n On peut donc se ramener au cas dun pas de temps scalaire T ij en posant : n T ij = (T n n) . n ij

(II.15.12)

(II.15.13)

En eet :

[ T n (grad p) f ij ] . S ij ij

(T n n) . S ij (grad (p)f ij . n) ij = (T n n) . n (grad (p)f ij . n) S ij ij =


n T ij

(II.15.14)

(grad (p)f ij . n) S ij

or :
n T ij (grad (p)f ij . n) S ij n = T ij grad (p)f ij . S ij n = T ij

1 S ij ( grad P I + grad P J ) 2 IJ (II.15.15) Ceci intervient lors de la reconstruction des gradients au second membre du syst`me nal ` rsoudre, e a e par appel aux sous-programmes itrmas et itrgrp. n En fait, lapproximation (T ij = (T n n) . n) ny est pas utilise. En eet, puisquon calcule un gradient e ij directionnel de lincrment de pression avec le sous-programme grdcel, on se permet dutiliser le e tenseur T pour corriger le terme [ T n (grad p) f ij ] . S ij . ij PJ PI + ( JJ II ) En pratique, on le discrtise, pour une face interne ij, par12 : e PJ PI JJ II 1 + ( T n grad P I + T n grad P J ) S ij I J 2 IJ IJ (II.15.16) au lieu de (II.15.15). On proc`de de mme pour les termes de bord. e e n Par la suite, on notera quand mme cette expression T ij (grad (p)f ij . S ij ). e [ T n (grad p) f ij ] . S ij ij
n = T ij

Il reste le terme D W , qui via les gradients cellule de la pression prsents dans lquation de quantit e e e de mouvement, dcouple les cellules paires et impaires sur une grille cartsienne. On utilise pour viter e e e ce probl`me un ltre de type Rhie & Chow qui permet de lisser la contribution de la pression de e lquation de quantit de mouvement. On crit : e e e (D W )I =
jV ois(i)

[ n u + Arak (G (pn )) cell ] f ij . S ij Arak


jV ois(i)

n T ij (grad pn ) f ij . S ij n T b ik (grad pn ) fb ik . S b ik

+
kb (i)

[ n u + Arak (G (pn )) cell ] f b ik . S b ik Arak m ij + m b ik


kb (i)

kb (i)

=
jV ois(i)

(II.15.17)
S ij . I J e on ne prend pas en compte la composante tangentielle ((grad (p)) f . ). , tant un vecteur tangentiel unitaire. 12 Le coecient 1 dans (II.15.16) est mis pour des raisons de stabilit. En eet, lutilisation des coecients de e 2 pondration aux faces serait plus exact mais probablement moins stable. e
11 i.e. 10 Dapr`s e

la formule

pJ pI

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 157/277

m ij (resp. m b ik ) est le ux de masse ` la face purement interne ij (resp.` la face de bord ik) modi a a e par le ltre Rhie & Chow. (grad pn )f ij est un gradient facette alors que [ n u + Arak (G (pn )) cell ] f ij est une valeur ` la face a interpole ` partir des valeurs estimes aux cellules (le gradient de pression dans ce terme est un e a e gradient cellule). Cette prcision sapplique galement aux termes de bord. e e e Dans Code Saturne, Arak est appel pour des raisons historiques le coecient dArakawa. Il est not ARAK. e Il faut remarquer, encore une fois, que pour le ltre Rhie & Chow, le tenseur T n est utilis dans le e terme volumique G alors que lapproximation (II.15.13) est applique lors du calcul du gradient facette. e Finalement, dapr`s (II.15.10) et (II.15.11), on rsout : e e
n T ij (grad (p)) f ij . S ij + jV ois(i) kb (i) n T b ik (grad (p)) fb ik . S b ik = jV ois(i)

m ij +
kb (i)

m b ik I

(II.15.18) Pour la prise en compte des non orthogonalits, on rsout ce syst`me linaire par incrment, en ajoutant e e e e e au second membre les termes de reconstruction. Si (p) est lincrment de lincrment (lincrment e e e de la variable p ` calculer) et k lindice ditration sur le point xe, on rsout exactement : a e e
n T ij jV ois(i) k+1 k+1 ((p))I ((p))J S ij + IJ k n T b ik
b (i)

k+1 ((p))I ((p)) k+1 bik

IF

S b ik

jV ois(i)

n T ij (grad

m b ik kb (i) n (p)k ) f ij . S ij T b ik (grad (p)k ) fb ik kb (i) = mk + m k ik I ij b jV ois(i) kb (i)


jV ois(i)

m ij +

. S b ik I

(II.15.19) avec : ((p))0 ((p))k+1 =0 = (p)k+1 (p)k k IN (II.15.20)

Ce sont les gradients facette (grad (p)k ) f ij et (grad (p)k ) fb ik qui seront reconstruits.

15.3

Mise en uvre

On expose dans ce qui suit lalgorithme tel quil est crit dans resolp. e T n dsignera un tableau de dimension 3 contenant les pas de temps locaux dans chaque direction e (pour lutilisation du couplage vitesse-pression renforc). Dans le cas de lalgorithme couplage e faible vitesse-pression, on garde cette notation, les pas de temps tant gaux dans les trois directions e e de lespace. Calcul de la matrice du syst`me ` rsoudre e a e

calcul du coecient de diusion aux faces pour le Laplacien de pression (le coecient de diusion utilise le pas de temps de calcul ou celui du couplage vitesse-pression renforc). Deux cas se e prsentent suivant lalgorithme de couplage vitesse/pression choisi par lutilisateur : e 1. Appel de viscfa avec une viscosit totale gale au pas de temps tn pour lalgorithme e e I couplage faible vitesse-pression (IPUCOU = 0), 2. Appel de visort avec une viscosit totale diagonale pour lalgorithme du couplage vitessee pression renforc (IPUCOU = 1). Cest ` ce niveau quest calcul T ij . Les pas de temps e a e n quivalents calculs auparavant dans la subroutine preduv sont stocks dans le tableau e e e TPUCOU.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 158/277

Appel de matrix pour la construction de la matrice de diusion de la pression (sans les termes de reconstruction qui ne peuvent pas tre pris en compte si on veut garder une structure de matrice e creuse) avec la viscosit calcule prcdemment et le tableau COEFB des conditions aux limites de e e e e la pression pn (on impose une condition de Neumann homog`ne (resp. Dirichlet homog`ne) sur e e p pour une condition de Neumann (resp. Dirichlet) pour p).

Calcul du rsidu de normalisation RNORMP e Cette tape est ralise directement dans preduv ` partir de la version 1.1.0.s, et le rsidu de normale e e a e isation est transmis par lintermdiaire de la variable RNORMP(IPHAS). e Le tableau TRAV contient ` ce niveau de Code Saturne le second membre issu de preduv sans les termes a source utilisateur. Le calcul de RNORMP se fait de la faon suivante : c 1. TRAV(I) = u I tn (I 0 )tn I I TRAV(I) + g, I |i | I

2. Appel de inimas pour calculer le ux de masse du vecteur TRAV (on calcule ` chaque face a ij TRAV ij . S ij , o` S est le vecteur surface). On impose le nombre de sweeps (ou ditrations) u e total ` 1 (NSWRP = 1), ce qui signie que lon ne recontruit pas les gradients lors de ce passage a dans inimas (pour des raisons de gain de temps de calcul). Les tableaux des conditions aux limites qui sont passs dans inimas sont ceux de la vitesse un . e 3. Appel de divmas pour calculer la divergence par cellule du ux de masse prcdent. La divergence e e est stocke dans le tableau de travail W1. e 4. Les termes source de masse stocks dans le tableau SMACEL sont ajouts ` W1. e e a W1(I) = W1(I) |i | SMACEL(I) I (II.15.21)

5. Appel de prodsc (RNORMP = W1.W1). RNORMP servira dans le test darrt du solveur de pression e pour normaliser le rsidu (voir la routine gradco pour linversion par gradient conjugu). e e

prparation de la rsolution du syst`me e e e

Appel de grdcel pour le calcul du gradient de la pression pn . Le rsultat est stock dans TRAV. e e pn pn pn TRAV contient donc ` ce niveau a , , . x y z Introduction du gradient cellule de la pression explicite pn pour lutilisation du ltre Rhie & Chow. TRAV(I) = u I + ARAK n T I grad pn I I

ARAK reprsente le coecient dit dArakawa que lutilisateur peut modier dans usini1 et qui e vaut 1 par dfaut. Pour simplier les notations, on pose ARAK = Arak . e Appel de inimas pour calculer le ux de masse de TRAV. Les conditions aux limites appliques e sont celles de la vitesse (voir sous-programme navsto). Ceci reste une approximation des conditions aux limites de TRAV. Le ux de masse est donc gal ` (voir sous-programme inimas pour e a plus de dtails sur le calcul aux faces de bord) : e m ij = u + Arak T n grad (pn ) . S ij

f ij

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 159/277

Appel de itrmas pour incrmenter le ux de masse aux faces13 de e


n Arak T ij (grad pn ) f ij . S ij .

Appel de clmlga pour lutilisation dun algorithme de multigrille algbrique pour linversion de e la matrice de pression. initialisation de p, (p) et SMBR ` 0. SMBR servira ` stocker le second membre. Dans le code, a a RTP(*,IPRIPH) et DRTP contiennent respectivement p et (p). Appel de divmas pour le calcul de la divergence du ux de masse issu du dernier appel de itrmas. Cette divergence est stocke dans le tableau de travail W7. e Ajout des contributions des termes source de masse14 ` W7. a W7(I) = W7(I) |i | SMACEL(I) (II.15.22)

Boucle sur les non orthogonalits e Une seule inversion permettrait de rsoudre le probl`me en supposant que le maillage soit orthogonal. e e On dcrit ci-dessous la boucle sur les non orthogonalits. e e dbut de la boucle sur k (dans ce qui suit, on est en k + 1) e Actualisation de SMBR au dbut de la boucle15 . e SMBR(I) = W7(I) SMBR(I) Calcul de la norme de SMBR dans prodsc. On lappelle RESIDU. Comme on rsout le syst`me e e par incrment, le second membre doit sannuler ` convergence. e a Si RESIDU < 10 RNORMP, la convergence est atteinte16 . Appel de itrmas pour la ractualisation du ux de masse avec le gradient facette e n n (grad (p)k ) f . On calcule donc ` chaque face T ij (grad (p)k ) f ij . S ij et T b ik (grad (p)k ) f b ik . S b ik . a ractualisation17 de la pression pn+1 = pn + e Sinon, ((p))k+1 = 0, Appel de invers pour linversion du syst`me (II.15.19). Le test darrt de lalgorithme e e dinversion RESIDU est normalis par RNORMP (voir gradco pour linversion de la prese sion). Si on atteint le nombre de sweeps maximal, Appel de itrmas pour lincrmentation du ux de masse par le gradient de la pression e (p)k . Second appel de itrmas pour lincrmentation du ux de masse avec le gradient de e ((p))k+1 non reconstruit pour assurer une divergence nale nulle, ceci pour rester cohrent avec la matrice de pression qui ne prend pas en compte les non orthogonalits18 . e e
S ij . IJ tableau W7 contient le second membre sans le gradient de p. Il reste donc inchang ` chaque sweep. En revanche, ea SMBR contient le second membre complet qui varie ` chaque sweep. a 15 Le signe - rsulte de la construction de la matrice. e 16 est la tolrance associe ` la pression qui peut tre modie par lutilisateur dans usini1, via le tableau EPSILO. e e a e e l=k P 17 (p)k = l est stocke dans RTP(*,IPRIPH). ((p)) e
14 Le 18 On l=1 13 (grad

l=k l=1

((p))l .

pn ) f ij . S ij est le gradient normal ` la face gal, sur un maillage orthogonal, ` a e a

pn pn J I

pourra se rfrer au sous-programme navsto pour plus de dtails. ee e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 160/277

mise ` jour de lincrment de pression (p)k+1 = (p)k + ((p))k+1 . a e Sinon, Incrmentation du ux de masse en prenant en compte un coecient de relaxation. e (p)k+1 = (p)k + RELAX (()p)k+1 . Le coecient de relaxation est mis par dfaut ` e a 1 et peut tre modi dans usini1. e e Appel de itrgrp pour le calcul de la partie en T n grad (p) du second membre (auquel sera ajout le tableau W7 en dbut de boucle). e e SMBR(I) =
jV ois(i) n T ij (grad (p)k ) f ij . S ij + kb (i) n T b ik (grad (p)k ) fb ik . S b ik

n de la boucle

ractualisation de la pression e On ractualise la pression par la somme des incrments de p. e e pn+1 = pn + (p)kconv avec,
k=kconv

(p)kconv =
k=1

((p))k

e En pratique, RTP contient (p)k . On incrmente donc pn par RTP : conv RTP = RTPA + RTP

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 161/277

15.4

` Points a traiter

Il reste plusieurs probl`mes ` rsoudre : e a e 1. Lapproximation du gradient de lincrment de la pression par le gradient normal peut poser des e probl`mes de consistance, notamment avec la remarque ci-dessous. e 2. Lapproximation T n (T n n) . n nest pas faite lors de la reconstruction des gradients au second membre de lquation de pression. Elle nest pas faite non plus pour le calcul du gradient cellule e lors de lapplication du ltre Rhie & Chow. 3. Utilisation de pondration e 1 lors de calculs de valeurs aux faces pour des raisons de stabilit e 2 numrique (ex. dans itrmas ou itrgrp lors de la reconstruction du gradient de lincrment de e e pression ` la face). a

4. On pourra vrier le calcul du rsidu de normalisation (voir preduv). e e 5. Lors du calcul du ux de masse de u + T grad pn dans inimas, on utilise les conditions aux limites de la vitesse au temps n. Ceci reste un point peu clair particuli`rement pour les conditions e aux limites de sortie. Il faudra plus gnralement analyser les conditions aux limites des variables e e dans navsto. Ce probl`me est a relier ` celui signal pour vissec. e ` a e

6. Lors du test de convergence de la boucle sur les non orthogonalits, on multiplie la tolrance par e e 10. Est-ce rellement ncessaire ? e e 7. Il faudrait revoir le probl`me de relaxation lors de lactualisation de la pression dans la boucle e sur les non orthogonalits (un coecient de relaxation dynamique serait peut-tre intressant). e e e 8. Le ltre de Rhie & Chow peut savrer assez gnant dans certaines congurations. Il serait e e intressant, avant toute travail de modication, de vrier quil est vraiment utile, en identiant e e clairement une conguration o` il joue un rle positif certain, si une telle conguration existe. u o

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 162/277

16- Sous-programme turbke

16.1

Fonction

Le but de ce sous-programme est de rsoudre le syst`me des quations de k et de mani`re semie e e e couple. e Le syst`me dquations rsolu est le suivant : e e e

t k t + div u k ( + k grad k) = P + G + kdiv(u) + (ki k) +k k + k t 2 t + div u ( + grad ) = C1 k [P + (1 C3 )G] C2 k + div(u) +(i ) + +

(II.16.1)

P est le terme de production par cisaillement moyen : ui uj 2 uk 2 ui ui = t + + t ij + kij xj xj xi 3 xk 3 xj 2 uj ui 2 ui 2 + t (divu) kdiv(u) xj xi xj 3 3 2 2 2 2 2 v w u v u w v u +2 +2 + + + + + 2 x y z y x z x z 2 2 t (divu) 3

= Rij = t = t

w y

2 kdiv(u) 3

G est le terme de production par gravit : G = e La viscosit turbulente est t = C e k2 .

1 t gi t xi

Les constantes sont : C = 0, 09 ; C2 = 1, 92 ; k = 1 ; = 1, 3 C3 = 0 si G 0 (stratication instable) et C3 = 1 si G

0 (stratication stable).

+ t div(u) = ). i ( = k ou ) est la valeur de associe ` la masse injecte ou retire. Dans le cas e a e e o` on retire de la masse ( < 0), on a forcment i = . De mme, quand on injecte de la masse, on u e e spcie souvent aussi i = . Dans ces deux cas, le terme dispara de lquation. Dans la suite du e t e document, on qualiera dinjection force les cas o` on a > 0 et i = . e u est un ventuel terme source de masse (tel que lquation de conservation de masse devienne e e k , k , , sont des termes sources utilisateur ventuels, conduisant ` une implicitation partielle, e a imposs le cas chant par le sous-programme ustske. e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 163/277

16.2

Discretisation

La rsolution se fait en trois tapes, an de coupler partiellement les deux variables k et . Pour e e simplier, rcrivons le syst`me de la faon suivante : ee e c k = D(k) + Sk (k, ) + kdiv(u) + (ki k) + k k + k t = D() + S (k, ) + div(u) + (i ) + + t D est loprateur de convection/diusion. Sk (resp. S ) est le terme source de k (resp. ). e ` Premiere phase : bilan explicite On rsout le bilan explicite : e (n) (n) ke k = D(k (n) ) + Sk (k (n) , (n) ) + k (n) div(u) + (ki k (n) ) + k k (n) + k t (n) e (n) = D((n) ) + S (k (n) , (n) ) + (n) div(u) + (i (n) ) + (n) + t (le terme en nest pris en compte que dans le cas de linjection force) e ` Deuxieme phase : couplage des termes sources On implicite les termes sources de mani`re couple : e e (n) (n) kts k = D(k (n) ) + Sk (kts , ts ) + k (n) div(u) + (ki k (n) ) + k k (n) + k t (n) ts (n) = D((n) ) + S (kts , ts ) + (n) div(u) + (i (n) ) + (n) + t soit kts k (n) ke k (n) = (n) + Sk (kts , ts ) Sk (k (n) , (n) ) t t e (n) (n) ts (n) = (n) + S (kts , ts ) S (k (n) , (n) ) t t (n) (II.16.5)

(II.16.2)

(II.16.3)

(II.16.4)

Le terme en div(u) nest pas implicit car il est li au terme D pour assurer que la matrice dimplicitation e e sera ` diagonale dominante. Le terme en et les termes sources utilisateur ne sont pas implicits non a e plus, mais ils le seront dans la troisi`me phase. e Et on crit (pour = k ou ) e S (kts , ts ) S (k (n) , (n) ) = (kts k (n) ) S k + (ts (n) )
k(n) ,(n)

(II.16.6)
k(n) ,(n)

On rsout donc nalement le syst`me 2 2 : e e (n) Sk Sk t k k(n) ,(n) k(n) ,(n) (n) S S k k(n) ,(n) t k(n) ,(n)

(kts k ) (ts (n) )


(n)

ke k (n) (n) t = e (n) (n) t

(II.16.7)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 164/277

` Troisieme phase : implicitation de la convection/diffusion On rsout le syst`me : e e (n+1) k (n) (n) k = D(k (n+1) ) + Sk (kts , ts ) + k (n+1) div(u) + (ki k (n+1) ) t +k k (n+1) + k (n+1) (n) (n) = D((n+1) ) + S (kts , ts ) + (n+1) div(u) + (i (n+1) ) t + (n+1) + soit (n+1) kts k (n) k (n) (n) k = D(k (n+1) ) D(k (n) ) + (n) + (k (n+1) k (n) )div(u) t t (k (n+1) k (n) ) + k (k (n+1) k (n) ) (n+1) (n) ts (n) (n) = D((n+1) ) D((n) ) + (n) + ((n+1) (n) )div(u) t t ((n+1) (n) ) + ((n+1) (n) )

(II.16.8)

(II.16.9)

Le terme en nest l` encore pris en compte que dans le cas de linjection force. Le terme en nest a e pris en compte que si est ngatif, pour viter daaiblir la diagonale de la matrice quon va inverser. e e Precisions sur le couplage Lors de la phase de couplage, an de privilgier la stabilit et la ralisabilit du rsultat, tous les termes e e e e e ne sont pas pris en compte. Plus prcisment, on peut crire : e e e k2 2 P + G kdiv(u) 3 2 S = C C k P + (1 C )G 2 C div(u) C 1 1 3 2 3 k Sk = C en notant P = ui uj + xj xi ui 2 (divu)2 xj 3

(II.16.10)

1 et G = gi t xi On a donc en thorie e Sk = 2C k P + G 2 div(u) k 3 S k = 2 S = C1 C P + (1 C3 )G + C2 2 k k S 2 = C1 div(u) 2C2 3 k

(II.16.11)

En pratique, on va chercher ` assurer kts > 0 et ts > 0. En se basant sur un calcul simpli, ainsi a e que sur le retour dexprience dESTET, on montre quil est prfrable de ne pas prendre en compte e ee certains termes. Au nal, on ralise le couplage suivant : e ke k (n) t = e (n) t

A11 A21

A12 A22

(kts k ) (ts (n) )

(n)

(II.16.12)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


(n) A11 = 1 2C k Min t (n) A =1 12

Code Saturne documentation Page 165/277

avec

2 P + G , 0 + Max [div(u), 0] 3
(n) 2

A21 = C1 C P + (1 C3 )G C2 k (n) (n) A22 = 1 + 2 C1 Max [div(u), 0] + 2C2 t 3 k (n) (par dnition de C3 , P + (1 C3 )G est toujours positif) e

(II.16.13)

16.3

Mise en uvre

Calcul du terme de production On appelle trois fois grdcel pour calculer les gradients de u, v et w. Au nal, on a 2 2 2 2 2 u v w u v u w v w TINSTK = 2 +2 +2 + + + + + + x y z y x z x z y et w u v + + DIVU = x y z

(le terme div(u) nest pas calcul par divmas, pour correspondre exactement ` la trace du tenseur des e a dformations qui est calcul pour la production) e e Lecture des termes sources utilisateur Appel de ustske pour charger les termes sources utilisateurs. Ils sont stocks dans les tableaux suivants e : W7 = k W8 = DAM = k W9 = a Puis on ajoute le terme en (divu)2 ` TINSTK. On a donc TINSTK = P Calcul du terme de gravit e 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 na pas de scalaire temprature. a e G est calcul et les termes sources sont mis ` jour : e a TINSTK = P + G TINSTE = P + Max G, 0 = P + (1 C3 )G Si IGRAKE = 0, on a simplement TINSTK = TINSTE = P Calcul du terme daccumulation de masse e On stocke W1 = div(u) calcul par divmas (pour correspondre aux termes de convection de la matrice). Calcul des termes sources explicites On aecte les termes sources explicites de k et pour la premi`re tape. e e 2 (n) (n) (n) (n) (n) SMBRK = t (P + G) k divu + k div(u) 3

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


C1
(n)

Code Saturne documentation Page 166/277

SMBRE =

(n) k (n)

2 t (P + (1 C3 )G) (n) k (n) divu C2 (n) (n) 3


(n)

+ (n) div(u)

soit SMBRK = Sk

+ k (n) div(u) et SMBRE = S

+ (n) div(u).

Calcul des termes sources utilisateur On ajoute les termes sources utilisateur explicites ` SMBRK et SMBRE, soit : a (n) (n) (n) SMBRK = Sk + k div(u) + k k + k (n) SMBRE = S + (n) div(u) + (n) + Les tableaux W7 et W8 sont librs, DAM et W9 sont conservs pour tre utiliss dans la troisi`me phase ee e e e e de rsolution. e Calcul des termes de convection/diusion explicites bilsc2 est appel deux fois, pour k et pour , an dajouter ` SMBRK et SMBRE les termes de convece a tion/diusion explicites D(k (n) ) et D((n) ). Ces termes sont dabord stocks dans W7 et W8, pour tre e e conservs et rutiliss dans la troisi`me phase de rsolution. e e e e e Termes source de masse Dans le cas dune injection force de mati`re, on passe deux fois dans catsma pour ajouter les termes en e e (ki k (n) ) et (i (n) ) ` SMBRK et SMBRE. La partie implicite () est stocke dans les variables a e W2 et W3, qui seront utilises lors de la troisi`me phase (les deux variables sont bien ncessaires, au cas e e e o` on aurait une injection force sur k et pas sur , par exemple). u e Fin de la premi`re phase e Ceci termine la premi`re phase. On a e (n) (n) ke k SMBRK = t (n) (n) e SMBRE = t Phase de couplage (uniquement si IKECOU = 1) On renormalise SMBRK et SMBRE qui deviennent les seconds membres du syst`me de couplage. e 1 ke k (n) SMBRK = SMBRK = t (n) e (n) 1 SMBRE = SMBRE = t (n) 2 et DIVP23 = Max [div(u), 0]. 3 On remplit la matrice de couplage k (n) 2 1 2C (n) Min P + G , 0 + Max [div(u), 0] A11 = t 3 A12 = 1 2 (n) + (1 C )G C A21 = C1 C P 3 2 k (n) 1 2 (n) A22 = + C Max [div(u), 0] + 2C2 (n) t 3 1 k On inverse le syst`me 2 2, et on rcup`re : e e e DELTK = kts k (n) DELTE = ts (n) Fin de la deuxi`me phase e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 167/277

On met ` jour les variables SMBRK et SMBRE. a kts k (n) SMBRK = (n) t (n) (n) ts SMBRE = t Dans le cas o` on ne couple pas (IKECOU = 0), ces deux variables gardent la mme valeur qu` la n u e a de la premi`re tape. e e Calcul des termes implicites On retire ` SMBRK et SMBRE la partie en convection diusion au temps n, qui tait stocke dans W7 et a e e W8. kts k (n) D(k (n) ) SMBRK = (n) t ts (n) D((n) ) SMBRE = (n) t On calcule les termes implicites, hors convection/diusion, qui correspondent ` la diagonale de la a matrice. (n) div(u) + + Max[k , 0] TINSTK = t (n) div(u) + + Max[ , 0] TINSTE = t ( nest pris en compte quen injection force, cest-`-dire quil est forcment positif et ne risque pas e a e daaiblir la diagonale de la matrice). Rsolution nale e On passe alors deux fois dans codits, pour k et , pour rsoudre les quations du type : e e TINST ((n+1) (n) ) = D((n+1) ) + SMBR. clipping nal On passe enn dans la routine clipke pour faire un clipping ventuel de k (n+1) et (n+1) . e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 168/277

17- Sous-programme turrij

17.1

Fonction

Le but de ce sous-programme est de rsoudre le syst`me des quations des tensions de Reynolds et de e e e la dissipation de mani`re totalement dcouple dans le cadre de lutilisation du mod`le Rij LRR1 e e e e (option ITURB = 30 dans usini1). e Le tenseur symtrique des tensions de Reynolds est not R. Les composantes de ce tenseur reprsentent e e le moment dordre deux de la vitesse : Rij = ui uj . Pour chaque composante Rij , on rsout : e Rij + div(u Rij grad Rij ) = Pij + Gij + ij + dij ij + Rij div(u) t in +(Rij Rij ) + Rij Rij + Rij

(II.17.1)

P est le tenseur de production par cisaillement moyen : Pij = Rik e G est le tenseur de production par gravit : 1 Gij = Gij C3 (Gij ij Gkk ) 3 avec Gij = 3 C k (ri gj + rj gi ) 2 t 1 k = Rll 2 ri = Rik xk uj ui + Rjk xk xk

(II.17.2)

(II.17.3)

(II.17.4)

Dans ce qui prc`de, k reprsente lnergie turbulente2 , gi la composante de la gravit dans la direction e e e e e i, t le nombre de Prandlt turbulent et C , C3 des constantes dnies dans Tab. 17.1. e est le terme de corrlations pression-dformation. Il est modlis avec le terme de dissipation de e e e e la mani`re suivante : e 2 ij [ij ij ] = ij,1 + ij,2 + ij,w 3 Il en rsulte : e 2 ij ij = ij,1 + ij,2 + ij,w ij 3
1 la 2 Les

(II.17.5)

(II.17.6)

description du SSG est prvue pour une version ultrieure de la documentation e e sommations se font sur lindice l et on applique plus gnralement la convention de sommation dEinstein. e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 169/277

Le terme ij,1 est un terme lent de retour ` lisotropie. Il est donn par : a e 2 ij,1 = C1 (Rij kij ) k 3 Le terme ij,2 est un terme rapide disotropisation de la production. Il est donn par : e 2 ij,2 = C2 (Pij Pij ) 3 avec, P= 1 Pkk 2 (II.17.8) (II.17.7)

Le terme ij,w est appel terme decho de paroi. Il nest pas utilis par dfaut dans Code Saturne, e e e mais peut tre activ avec IRIJEC = 1. Si y reprsente la distance ` la paroi : e e e a ij,w = C1 3 3 l k Rkm nk nm ij Rki nk nj Rkj nk ni f ( ) 2 2 y 3 3 l + C2 km,2 nk nm ij ki,2 nk nj kj,2 nk ni f ( ) 2 2 y

(II.17.9)

f est une fonction damortissement construite pour valoir 1 en paroi et tendre vers 0 en sloignant e des parois. 3 k2 La longueur l reprsente e , caractristique de la turbulence. On prend : e
2 l 0,75 k f ( ) = min(1, C ) y y 3

(II.17.10)

dij est un terme de diusion turbulente3 qui vaut : dij = CS k Rij ( Rkm ) xk xm (II.17.11)

k On notera par la suite A = CS R. Ainsi, dij = div( A grad (Rij )) est une diusion avec un coecient tensoriel. Le terme de dissipation turbulente est trait dans ce qui prc`de avec le terme . e e e
in est le terme source de masse4 , Rij est la valeur de Rij associe ` la masse injecte ou retire. e a e e

(Rij Rij + Rij ) reprsente le terme source utilisateur (sous-programme ustsri) ventuel avec une e e dcomposition permettant dimpliciter la partie Rij Rij si Rij 0. e De mme, on rsout une quation de convection/diusion/termes sources pour la dissipation . Cette e e e quation est tr`s semblable ` celle du mod`le k (voir turbke), seuls les termes de viscosit turbulente e e a e e et de gravit changent. On rsout : e e + div [u (grad )] = t 2 [P + G ] C2 + div(u) k k in +( ) + + d + C1

(II.17.12)

3 Dans 4 Dans

la littrature, ce terme contient en gnral la dissipation par viscosit molculaire. e e e e e ce cas, lquation de continuit scrit : e e e + div(u) = . t

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


C C C1 C2 C1 C2 C3 CS C1 C2 0, 09 0, 18 1, 44 1, 92 1, 8 0, 6 0, 55 0, 22 0, 5 0, 3

Code Saturne documentation Page 170/277

Table 17.1: Dnition des constantes utilises. e e d est le terme de diusion turbulente : d = C xk k Rkm xm (II.17.13)

k On notera par la suite A = C R. Le terme de diusion turbulente est donc modlis par : e e d = div(A grad ()) La viscosit turbulente usuelle (t ) en mod`le k est remplace par le tenseur visqueux A . e e e 1 P est le terme de production par cisaillement moyen : P = Pkk . Ce terme est modlis avec la notion e e 2 de viscosit turbulente dans le cadre du mod`le k . Dans le cas prsent, il est calcul ` laide des e e e ea tensions de Reynolds (` partir de Pij ). a G est le terme de production des eets de gravit pour la variable . e 1 G = max(0, Gkk ) 2 (II.17.14)

17.2

Discretisation

La rsolution se fait en dcouplant totalement les tensions de Reynolds entre elles et la dissipation . On e e rsout ainsi une quation de convection/diusion/termes sources pour chaque variable. Les variables e e sont rsolues dans lordre suivant : R11 , R22 , R33 , R12 , R13 , R23 et . Lordre de la rsolution nest e e pas important puisque lon a opt pour une rsolution totalement dcouple en nimplicitant que les e e e e termes pouvant tre linariss par rapport ` la variable courante5 . e e e a Les quations sont rsolues ` linstant n + 1. e e a

17.2.1 Variables tensions de Reynolds


Pour chaque composante Rij , on crit : e
n+1 n Rij Rij n+1 n+1 n n = Pij + Gij + div (u)n Rij n grad Rij tn n,n+1 n n +ij,1 + ij,2 + ij,w 2 n,n+1 n+1 +dij n n ij + Rij div(u)n 3 n+1 in +(Rij Rij ) n+1 n n +Rij Rij + Rij (II.17.15) n est la viscosit molculaire6 . e e Lindice ( n, n + 1) est relatif ` une semi implicitation des termes (voir ci-dessous). Quand seul lindice a (n) est utilis, il sut de reprendre lexpression des termes et de considrer que toutes les variables e e sont explicites.

5 En 6 La

eet, aucune variable nest actualise pour la rsolution de la suivante. e e viscosit peut dpendre ventuellement de la temprature ou dautres variables. e e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 171/277

Dans le terme n,n+1 donn ci-dessous, la tension de Reynolds Rij est implicite (les tensions diagonales e ij,1 apparaissent aussi dans lnergie turbulente k). Ainsi : e
n,n+1 ij,1 = n C1

n ij 2 1 n n+1 (1 )Rij ij (k n Rii ) n k 3 3 2

(II.17.16)

e Le terme de diusion turbulente d scrit : dij = div A grad Rij . Le tenseur A est toujours explicite. e En intgrant sur un volume de contrle (cellule) l , le terme d de diusion turbulente de Rij scrit : e o
n,n+1 dij d = l mVois(l) n+1 An grad Rij

lm

. n lm S lm

(II.17.17)

n lm est la normale unitaire ` la face7 lm = lm de la fronti`re l = lm de l , face dsigne a e e e m par abus par lm et S lm sa surface associe. e On dcompose An en partie diagonale Dn et extra-diagonale E n : e An = Dn + E n Ainsi, dij d =
l mVois(l)

Dn grad Rij

lm

. n lm S lm (II.17.18)

partie diagonale lm

+
mV ois(l)

E n grad Rij

. n lm S lm

partie extra-diagonale

La partie extra-diagonale sera prise totalement explicite et interviendra donc dans lexpression regroupant les termes purement explicites fsexp du second membre de codits. Pour la partie diagonale, on introduit la composante normale du gradient de la variable principale Rij . Cette contribution normale sera traite en implicite pour la variable et interviendra ` la fois dans e a lexpression de la matrice simplie du syst`me rsolu par codits et dans le second membre trait par e e e e bilsc2. La contribution tangentielle sera, elle, purement explicite et donc prise en compte dans fsexp intervenant dans le second membre de codits. On a : grad Rij = grad Rij (grad Rij . n lm ) n lm + (grad Rij . n lm ) n lm (II.17.19) Comme Dn [(grad Rij . n lm ) n lm ] . n lm = n (grad Rij . n lm ) lm avec :
n n n n = (D11 ) n2 lm + (D22 ) n2 lm + (D33 ) n2 lm lm 1, 2, 3,

on peut traiter ce terme n comme une diusion avec un coecient de diusion indpendant de la e lm direction. Finalement, on crit : e
n,n+1 dij d = l

+
mV ois(l)

n E n grad Rij n Dn grad Rij mV ois(l)

lm lm

. n lm S lm (II.17.20) . n lm S lm
n+1 n grad Rij . n lm S lm lm mV ois(l)

+
mV ois(l)
7 La

n n grad Rij . n lm S lm + lm

notion de face purement interne ou de bord nest pas explicite ici, pour allger lexpos. Pour tre rigoureux et e e e e homog`ne avec les notations adoptes, il faudrait distinguer m V ois(l) et m b (l). e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 172/277

Les trois premiers termes sont totalement explicites et correspondent ` la discrtisation de loprateur a e e continu : n n n div( E n grad Rij ) + div( Dn [ grad Rij (grad Rij . n) n ] ) en omettant la notion de face. Le dernier terme est implicite relativement ` la variable Rij et correspond ` loprateur continu : a a e
n+1 div( Dn (grad Rij . n) n)

17.2.2 Variable
On rsout lquation de de faon analogue ` celle de Rij . e e c a n n+1 n + div(( u)n n+1 ) div(n grad n+1 ) = d n,n+1 tn kn (n )2 n +C1 n [P n + G ] n C2 n k +n+1 div(u)n n n +( in n+1 ) + n+1 + (II.17.21)

n,n+1 Le terme de diusion turbulente d est trait comme celui des variables Rij et scrit : e e n,n+1 d = div A n

grad n+1
n

Le tenseur A est toujours explicite. On le dcompose en une partie diagonale D e n extra-diagonale E : A Ainsi :
n,n+1 d d = l n

et une partie

=D

+E

E
mVois(l)

grad n

lm

. n lm S lm (II.17.22)

+
mV ois(l)

grad n +

lm

. n lm S lm n grad lm
mV ois(l) n+1 . n lm

n (grad n . n lm ) S lm lm S lm

mV ois(l)

avec :
n n n n = (D11 ) n2 lm + (D22 ) n2 lm + (D33 ) n2 lm . lm 1, 2, 3,

On peut traiter ce terme n comme une diusion avec un coecient de diusion indpendant de la e lm direction. Les trois premiers termes sont totalement explicites et correspondent ` loprateur : a e div( E
n

n ) + div( D

[grad n (grad n . n) n] )

en omettant la notion de face. Le dernier terme est implicite relativement ` la variable et correspond ` loprateur : a a e div( D
n

(grad n+1 . n) n)

17.3

Mise en uvre

La numro de la phase traite fait partie des arguments de turrij. On omettra volontairement de le e e prciser dans ce qui suit, on indiquera par ( ) la notion de tableau sy rattachant. e Calcul des termes de production P

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 173/277

Initialisation ` zro du tableau PRODUC dimensionn ` NCEL 6. a e ea On appelle trois fois grdcel pour calculer les gradients des composantes de la vitesse u, v et w prises au temps n. Au nal, on a :
n PRODUC(1,IEL) = 2 R11 n n u n n u n u n + R12 + R13 (production de R11 ) x y z n n n n v n v n v n 2 R12 + R22 + R23 (production de R22 ) x y z n n n n w n w n n w + R23 + R33 (production de R33 ) 2 R13 x y z n n n n u n u n u R12 + R22 + R23 x y z n n n n v n v n v n R11 + R12 + R13 (production de R12 ) x y z n n n n u n u n u + R23 + R33 R13 x y z w n w n w n n n n n R11 + R12 + R13 (production de R13 ) x y z n n n n v n v n v + R23 + R33 R13 x y z n w n w n n n n w n R12 + R22 + R23 (production de R23 ) x y z

PRODUC(2,IEL) = PRODUC(3,IEL) = PRODUC(4,IEL) =

PRODUC(5,IEL) =

PRODUC(6,IEL) =

Calcul du gradient de la masse volumique n prise au dbut du pas de temps courant8 e (n + 1) Ce calcul na lieu que si les termes de gravit doivent tre pris en compte (IGRARI() = 1). e e Appel de grdcel pour calculer le gradient de n dans les trois directions de lespace. Les conditions aux limites sur n sont des conditions de Dirichlet puisque la valeur de n aux faces de bord ik (variable IFAC) est connue et vaut b ik . Pour crire les conditions aux limites sous la e forme habituelle, b ik = COEFA + COEFB n I on pose alors COEFA = PROPCE(IFAC,IPPROB(IROM(IPHAS))) et COEFB = VISCB = 0. PROPCE(1,IPPROB(IROM(IPHAS))) (resp.VISCB) est utilis en lieu et place de lhabituel COEFA e (COEFB), lors de lappel ` grdcel. a On a donc : n n n , GRAROY = et GRAROZ = . GRAROX = x y z Le gradient de n servira ` calculer les termes de production par eets de gravit si ces derniers sont a e pris en compte. Boucle ISOU de 1 ` 6 sur les tensions de Reynolds a Pour ISOU = 1, 2, 3, 4, 5, 6, on rsout respectivement et dans lordre les quations de R11 , R22 , R33 , e e R12 , R13 et R23 par lappel au sous-programme resrij. n+1,k+1 La rsolution se fait par incrment Rij e e , en utilisant la mme mthode que celle dcrite dans le e e e sous-programme codits. On adopte ici les mmes notations. SMBR est le second membre du syst`me e e a ` inverser, syst`me portant sur les incrments de la variable. ROVSDT reprsente la diagonale de la e e e matrice, hors convection/diusion.
8 i.e.

calcule ` partir des variables du pas de temps prcdent n si ncessaire. e a e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 174/277

On va rsoudre lquation (II.17.15) sous forme incrmentale en utilisant codits, soit : e e e n n ij n L + n C1 L (1 ) mn + L + max(Rij , 0) L lm n n t kL 3
ROVSDT contribuant ` la diagonale de la matrice simplie de matrix a e n+1,p+1 n+1,p+1 )L ) )M (Rij (Rij n+1,p+1 )L |l | (Rij

+
mV ois(l)

n+1,p+1 mn Rij, f lm (n + n ) lm lm lm

LM

S lm

convection upwind pur et diusion non reconstruite relatives ` la matrice simplie de matrix9 a e n n+1,p n L )L (Rij )L n (Rij t n+1,p n+1,p (n + n ) grad Rij ] d div [ ( u)n Rij l convection et diusion traites par bilsc2 e n n+1,p n+1,p n+1,p n C1 n Rij + Gij Pij k

(II.17.23) 2 n n+1,p n+1,p k ij + ij,2 + ij,w 3 d

+
l

+
l

+ +

2 n+1,p n+1,p n in n + Rij d ) + Rij Rij n n ij + ( Rij Rij 3 n+1,p E n grad Rij . n lm S lm
lm

mV ois(l)

D grad
mV ois(l)

n+1,p Rij

lm

. n lm S lm

mV ois(l)

n+1,p . n lm S lm n grad Rij lm n+1,p mn (Rij )L lm mV ois(l)

o` on rappelle : u n+1,p pour n donn entier positif, on dnit la suite (Rij e e )pIN par :
n+1,0 n Rij = Rij n+1,p+1 n+1,p n+1,p+1 Rij = Rij + Rij n+1,p+1 n+1 (Rij ) L dsigne la valeur sur llment l du ( p + 1 )-i`me incrment de Rij , mn le ux de e ee e e lm n+1,p+1 n+1,p+1 n+1,p+1 masse ` linstant n ` travers la face lm, Rij, f lm vaut (Rij a a )L si mn 0, (Rij )M sinon, lm n+1,p n+1,p n+1,p n+1,p Pij , ij,2 , ij,w les valeurs des quantits associes correspondant ` lincrment (Rij e e a e ).

Tous ces termes sont calculs comme suit : e Terme de gauche de lquation (II.17.23) e Dans resrij est calcule la variable ROVSDT. Les autres termes sont complts par codits, lors e ee de la construction de la matrice simplie , via un appel au sous-programme matrix. La quantit e e (n + n ) ` la face lm est calcule lors de lappel ` visort. a e a lm lm Second membre de lquation (II.17.23) e Le premier terme non dtaill est calcul par le sous-programme bilsc2, qui applique le schma e e e e convectif choisi par lutilisateur, qui reconstruit ou non selon le souhait de lutilisateur les gradients intervenants dans la convection-diusion. Les termes sans accolade sont, eux, compl`tement explicites et ajouts au fur et ` mesure dans e e a SMBR pour former lexpression fsexp de codits.
n 9 Si IRIJNU = 1, on remplace n e a lm par ( + t ) lm dans lexpression de la diusion non reconstruite associe ` la matrice simplie de matrix (t dsigne la viscosit turbulente calcule comme en k ). e e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 175/277

On dcrit ci-dessous les tapes de resrij : e e DELTIJ = 1, pour ISOU Kroeneker ij . 3 et DELTIJ = 0 Si ISOU > 3. Cette valeur reprsente le symbole de e

Initialisation ` zro de SMBR (tableau contenant le second membre) et ROVSDT (tableau contenant a e la diagonale de la matrice sauf celle relative ` la contribution de la diagonale des oprateurs de a e convection et de diusion linariss 10 ), tous deux de dimension NCEL. e e Lecture et prise en compte des termes sources utilisateur pour la variable Rij Appel ` ustsri pour charger les termes sources utilisateurs. Ils sont stocks comme suit. Pour a e la cellule l de centre L, reprsente par IEL, on a : e e ROVSDT(IEL) = |l | Rij SMBR(IEL) = |l | Rij On aecte alors les valeurs adquates au second membre SMBR et ` la diagonale ROVSDT comme e a suit : n SMBR(IEL) = SMBR(IEL) + |l | Rij (Rij )L ROVSDT(IEL) = max ( |l | Rij , 0) La valeur de ROVSDT est ainsi calcule pour des raisons de stabilit numrique. En eet, on ne e e e rajoute sur la diagonale que les valeurs positives, ce qui correspond physiquement ` impliciter a les termes de rappel uniquement. Calcul du terme source de masse si L > 0 Appel de catsma et incrmentation si ncessaire de SMBR et ROVSDT via : e e
in n SMBR(IEL) = SMBR(IEL) + |l | L (Rij )L (Rij )L ROVSDT(IEL) = ROVSDT(IEL) + |l | L

Calcul du terme daccumulation de masse et du terme instationnaire On stocke W1 = ternes mn = lm


kb (l) l mV ois(l)

e a div ( u) d calcul par divmas ` laide des ux de masse aux faces in(u)n . S lm (tableau FLUMAS) et des ux de masse aux bords mnlk = lm b

(u)nlk . S blk (tableau FLUMAB). On incrmente ensuite SMBR et ROVSDT. e b


n = SMBR(IEL) + ICONV (Rij )L (

SMBR(IEL)

div ( u) d)
l

ROVSDT(IEL) = ROVSDT(IEL) + ISTAT

n L

|l | ICONV ( tn

div ( u) d)
l

2 Calcul des termes sources de production, des termes ij,1 + ij,2 et de la dissipation ij : 3 On eectue une boucle dindice IEL sur les cellules l de centre L : 1 1 n (Pii )L = [PRODUC(1,IEL) + PRODUC(2,IEL) + PRODUC(3,IEL)] 2 2 1 n TRRIJ = (Rii )L 2 SMBR(IEL) = SMBR(IEL) + 2 C2 n n |l | ij (Pii )L + (C1 1) n L L 3 2 2 n n L + (1 C2 ) PRODUC(ISOU,IEL) C1 (Rij )L n (Rii )L TRPROD =
10 qui

correspondent aux schmas convectif upwind pur et diusif sans reconstruction. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


2 n 1 L ij + 1) C1 n 3 (Rii )L

Code Saturne documentation Page 176/277

ROVSDT(IEL) = ROVSDT(IEL) + n |l | ( L

Appel de rijech pour le calcul des termes dcho de paroi n si IRIJEC() = 1 et ajout dans e ij,w SMBR. SMBR = SMBR + n ij,w Suivant son mode de calcul (ICDPAR), la distance ` la paroi est directement accessible par a RA(IDIPAR+IEL-1) (|ICDPAR| = 1) ou bien est calcule ` partir de IA(IIFAPA(IPHAS)+IEL - 1), e a qui donne pour llment IEL le numro de la face de bord paroi la plus proche (|ICDPAR| = 2). ee e Ces tableaux ont t renseign une fois pour toutes au dbut de calcul. ee e e Appel de rijthe pour le calcul des termes de gravit Gij et ajout dans SMBR. e n
n Ce calcul na lieu que si IGRARI() = 1. SMBR = SMBR + Gij n Calcul de la partie explicite du terme de diusion div A grad Rij , plus prcisment des contrie e butions du terme extradiagonal pris aux faces purement internes (remplissage du tableau VISCF), puis aux faces de bord (remplissage du tableau VISCB). n Appel de grdcel pour le calcul du gradient de Rij dans chaque direction. Ces gradients sont respectivement stocks dans les tableaux de travail W1, W2 et W3. e n boucle dindice IEL sur les cellules l de centre L pour le calcul de E n grad Rij aux cellules dans un premier temps :

TRRIJ =

1 n (R )L 2 ii

n (Rii )L 2 n L n (Rii )L n n n [ (R12 )L W2(IEL) + (R13 )L W3(IEL) ] W4(IEL) = L CS 2 n L n (Rii )L n n n [ (R12 )L W1(IEL) + (R23 )L W3(IEL) ] W5(IEL) = L CS 2 n L n (Rii )L n n W6(IEL) = n CS [ (R13 )L W1(IEL) + (R23 )L W2(IEL) ] L 2 n L

CSTRIJ = n CS L

n Appel de vectds11 pour assembler E n grad Rij . n lm S lm aux faces lm.

Appel de divmas pour calculer la divergence du ux dni par VISCF et VISCB. Le rsultat e e est stock dans W4. e Ajout au second membre SMBR. SMBR = SMBR + W4 A lissue de cette tape, seule la partie extradiagonale de la diusion prise enti`rement explicite : e e
n E n grad Rij mV ois(l) lm

. n lm S lm

a t calcule. ee e Calcul de la partie diagonale du terme de diusion12 : Comme on la dja vu, une partie de cette contribution sera traite en implicite (celle relative e e a ` la composante normale du gradient) et donc ajoute au second membre par bilsc2 ; lautre e partie sera explicite et prise en compte dans fsexp . On eectue une boucle dindice IEL sur les cellules l de centre L :
11 Le rsultat est stock dans VISCF et VISCB. Dans vectds, les valeurs aux faces internes sont interpoles linairement e e e e sans reconstruction et VISCB est mis ` zro. a e 12 Seule la composante normale du gradient de R ij aux faces sera implicite.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


1 n (R )L 2 ii n (Rii )L CSTRIJ = n CS L 2 n L n (Rii )L n n (R11 )L W4(IEL) = L CS 2 n L n (Rii )L n n W5(IEL) = L CS (R22 )L 2 n L n (Rii )L n n (R33 )L W6(IEL) = L CS 2 n L

Code Saturne documentation Page 177/277

TRRIJ =

On eectue une boucle dindice IFAC sur les faces purement internes lm pour remplir le tableau VISCF : Identication des cellules l et m de centre respectif L (variable II) et M (variable JJ), se trouvant de chaque ct de la face lm13 . oe Calcul du carr de la surface de la face. La valeur est stocke dans le tableau SURFN2. e e n n Interpolation du gradient de Rij ` la face lm (gradient facette grad Rij lm ) : a GRDPX = 1 (W1(II) + W1(JJ)) 2 1 GRDPY = (W2(II) + W2(JJ)) 2 GRDPZ = 1 (W3(II) + W3(JJ)) 2
n n Calcul du gradient de Rij normal ` la face lm, grad Rij a lm

.n lm S lm .

GRDSN = GRDPX SURFAC(1,IFAC) + GRDPY SURFAC(2,IFAC) + GRDPZ SURFAC(3,IFAC) SURFAC est le vecteur surface de la face IFAC. n n calcul de grad Rij (grad Rij . n lm )n lm , les vecteurs tant calculs ` la face lm : e e a GRDPX = GRDPX GRDPY = GRDPY GRDPZ = GRDPZ GRDSN SURFAC(1,IFAC) SURFN2 GRDSN SURFAC(2,IFAC) SURFN2 GRDSN SURFAC(3,IFAC) SURFN2

nalisation du calcul de lexpression totalement explicite


n n Dn grad Rij (grad Rij . n lm ) n lm

. n lm

VISCF =

1 ( W4(II) + W4(JJ)) GRDPX SURFAC(1,IFAC)) + 2 1 ( W5(II) + W5(JJ)) GRDPY SURFAC(2,IFAC)) + 2

1 ( W6(II) + W6(JJ)) GRDPZ SURFAC(3,IFAC)) 2 Mise ` zro du tableau VISCB. a e


13 La

normale ` la face est oriente de L vers M. a e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 178/277

Appel de divmas pour calculer la divergence de :


n n D n grad Rij (grad Rij . n lm )n lm

dni aux faces dans VISCF et VISCB. e Le rsultat est stock dans le tableau W1. e e Ajout au second membre SMBR. SMBR = SMBR + W1
n Calcul de la viscosit orthotrope n ` la face lm de la variable principale Rij e lm a Ce calcul permet au sous-programme codits de complter le second membre SMBR par : e n n grad Rij . n lm S lm + lm mV ois(l) mV ois(l) n ( n + n ) grad Rij . n lm S lm lm lm mV ois(l) n grad Rij . n lm

D n n lm

lm

. n lm S lm

(II.17.24) sans prciser la nature de la face lm, via lappel ` bilsc2 et de disposer de la quantit (n + n ) e a e lm lm pour construire sa matrice simplie. e On eectue une boucle dindice IEL sur les cellules l : 1 n TRRIJ = (Rii )L 2 n (Rii )L RCSTE = n CS L 2 n L n (Rii )L n (R11 )L W1(IEL) = n + n CS L 2 n L n (Rii )L n (R22 )L W2(IEL) = n + n CS L 2 n L n (Rii )L n n n (R33 )L W3(IEL) = + L CS 2 n L Appel de visort pour calculer la viscosit orthotrope 14 n = (D n n lm ).n lm aux faces lm e lm Le rsultat est stock dans les tableaux VISCF et VISCB. e e appel de codits pour la rsolution de lquation de convection/diusion/termes sources de la e e variable Rij . Le terme source est SMBR, la viscosit VISCF aux faces purement internes ( resp. e VISCB aux faces de bord) et FLUMAS le ux de masse interne ( resp. FLUMAB ux de masse au n+1 bord). Le rsultat est la variable Rij au temps n + 1, donc Rij . Elle est stocke dans le tableau e e RTP des variables mises ` jour. a

Appel de reseps pour la rsolution de la variable e On dcrit ci-dessous le sous-programme reseps, les commentaires du sous-programme resrij ne seront e pas rpts puisque les deux sous-programmes ne di`rent que par leurs termes sources. e ee e Initialisation ` zro de SMBR et ROVSDT. a e Lecture et prise en compte des termes sources utilisateur pour la variable :
S lm , o` S lm et L M reprsentent respecu e LM tivement la surface de la face lm et la mesure algbrique du segment reliant les projections des centres des cellules e voisines sur la normale ` la face. On garde dans ce sous-programme la possibilit dinterpoler la viscosit aux cellules a e e linairement ou dutiliser une moyenne harmonique. La viscosit au bord est celle de la cellule de bord correspondante. e e
14 Comme

dans le sous-programme viscfa, on multiplie la viscosit par e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 179/277

Appel de ustsri pour charger les termes sources utilisateurs. Ils sont stocks dans les tableaux e suivants : pour la cellule l reprsente par IEL de centre L, on a : e e ROVSDT(IEL) = |l | SMBR(IEL) = |l | On aecte alors les valeurs adquates au second membre SMBR et ` la diagonale ROVSDT comme e a suit : SMBR(IEL) = SMBR(IEL) + |l | n L ROVSDT(IEL) = max ( |l | , 0) Calcul du terme source de masse si L > 0 :
in SMBR(IEL) = SMBR(IEL) + |l | L (L n ) L ROVSDT(IEL) = ROVSDT(IEL) + |l | L

Calcul du terme daccumulation de masse et du terme instationnaire e a On stocke W1 = div ( u) d calcul par divmas ` laide des ux de masse internes et aux
l

bords. On incrmente ensuite SMBR et ROVSDT. e SMBR(IEL) = SMBR(IEL) + ICONV n ( L ROVSDT(IEL) = ROVSDT(IEL) + ISTAT

div ( u) d)
l

n |l | L ICONV ( tn

div ( u) d)
l

Traitement du terme de production C1 P et du terme de dissipation C2 k k pour cela, on eectue une boucle dindice IEL sur les cellules l de centre L : 1 n 1 (P )L = [PRODUC(1,IEL) + PRODUC(2,IEL) + PRODUC(3,IEL)] 2 ii 2 1 n TRRIJ = (Rii )L 2 2 (n )2 n n L L SMBR(IEL) = SMBR(IEL) + n |l | C2 (Pii )L L n ) + C1 (Rn ) (Rii L L ii 2 n n L ROVSDT(IEL) = ROVSDT(IEL) + C2 L |l | n (Rii )L TRPROD = Appel de rijthe pour le calcul des termes de gravit G et ajout dans SMBR. e n
n SMBR = SMBR + G Ce calcul na lieu que si IGRARI() = 1.

Calcul de la diusion de e e e Le terme div grad () + A grad () est calcul exactement de la mme mani`re que pour les tensions de Reynolds Rij en remplaant A par A . c Appel de codits pour la rsolution de lquation de convection/diusion/termes sources de la e e variable principale . Le rsultat n+1 est stock dans le tableau RTP des variables mises ` jour. e e a clippings naux n+1 On passe enn dans le sous-programme clprij pour faire un clipping ventuel des variables Rij et e n+1 . Le sous-programme clprij est appel15 avec ICLIP = 2 . Cette option 16 contient loption e ICLIP = 1 et permet de vrier lingalit de Cauchy-Schwarz sur les grandeurs extra-diagonales du e e e tenseur R (pour i = j, |Rij |2 Rii Rjj ).
ICLIP = 1 consiste en un clipping minimal des variables Rii et en prenant la valeur absolue de ces variables puisquelles ne peuvent tre que positives. e 16 Quand la valeur des grandeurs R ou est ngative, on la remplace par le minimum entre sa valeur absolue et (1,1) e ii fois la valeur obtenue au pas de temps prcdent. e e
15 Loption

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 180/277

17.4

` Points a traiter

Sauf mention explicite, reprsentera une tension de Reynolds ou la dissipation turbulente ( = e Rij ou ). La vitesse utilise pour le calcul de la production est explicite. Est-ce quune implicitation peut e amliorer la prcision temporelle de 17 ? e e Dans quelle mesure le terme dcho de paroi est-il valide ? En eet, ce terme est remis en question e par certains auteurs. On peut envisager la rsolution dun syst`me hyperbolique pour les tensions de Reynolds an e e dintroduire un couplage avec le champ de vitesse. Le ux au bord VISCB est annul dans le sous-programme vectds. Peut-on envisager de mettre e au bord la valeur de la variable concerne ` la cellule de bord correspondant? De mme, il e a e faudrait se pencher sur les hypoth`ses sous-jacentes ` lannulation des contributions aux bords e a de VISCB lors du calcul de :
n n Dn grad Rij (grad Rij . n lm ) n lm

. n lm .

Un probl`me de pondration appara plus gnralement. Si on prend la partie explicite de e e t e e 1 e D grad (), la pondration aux faces internes utilise le coecient avec pondration spare de e e e 2 D et grad (), alors que pour E grad (), on calcule dabord ce terme aux cellules pour ensuite linterpoler linairement aux faces 18 . Ceci donne donc deux types dinterpolations pour des e termes de mme nature. e On laisse la possibilit dans visort dutiliser une moyenne harmonique aux faces. Est-ce que e ceci est valable puisque les interpolations utilises lors du calcul de la partie explicite de A grad e sont des moyennes arithmtiques ? e Les techniques adoptes lors du clipping sont ` revoir. e a On utilise dans le cadre du mod`le Rij une semi-implicitation de termes comme ij,1 ou e C2 . On peut envisager le mme type dimplicitation dans turbke mme en prsence du e e e k couplage k . Ladoption dune rsolution dcouple fait perdre linvariance par rotation. e e e La formulation et limplantation des conditions aux limites de paroi devront tre vries. En e e e eet, il semblerait que, dans certains cas, des phnom`nes oscillatoires apparaissent, sans quil e e soit ais den dterminer la cause. e e Limplicitation partielle (du fait de la rsolution dcouple) des conditions aux limites conduit e e e souvent ` des calculs instables. Il conviendrait den conna la raison. Limplicitation partielle a tre avait t mise en uvre an de tenter dutiliser un pas de temps plus grand dans le cas de jets ee axisymtriques en particulier. e

remarque peut tre gnralise. En eet, peut-on envisager dactualiser les variables dj` rsolues (sans e e e e ea e ractualiser les variables turbulentes apr`s leur rsolution)? Ceci obligerait ` modier les sous-programmes tels que e e e a condli qui sont appels au dbut de la boucle en temps. e e 18 Cette interpolation se fait dans vectds avec des coecients de pondration aux faces. e

17 Cette

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 181/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 182/277

18- Sous-programme viscfa


18.1 Fonction

Dans ce sous-programme est calcul le coecient de diusion isotrope aux faces. Ce coecient fait e intervenir la valeur de la viscosit aux faces multiplie par le rapport surface de la face sur la distance e e e e algbrique I J ou I F (cf. gure II.18.1), rapport rsultant de lintgration du terme de diusion. Par e analogie du terme calcul, ce sous-programme est aussi appel par le sous-programme resolp pour e e calculer le coecient diusif de la pression faisant intervenir le pas de temps. La valeur de la viscosit aux faces est dtermine soit par une moyenne arithmtique, soit par une e e e e moyenne harmonique de la viscosit au centre des cellules, suivant le choix de lutilisateur. Par dfaut, e e cette valeur est calcule par une moyenne arithmtique. e e

18.2

Discretisation
Sij

e e e e e On rappelle dans la gure II.18.1, la dnition des dirents points gomtriques utiliss par la suite.

I F

Figure II.18.1: Dnition des direntes entits gomtriques pour les faces internes (gauche) et de e e e e e bord (droite). Lintgration du terme de diusion sur une cellule i est la suivante : e div( grad (f )) d =
i jV ois(i)

ij

fJ fI . S ij + IJ k

b (i)

Dans ce sous-programme, on calcule les termes de diusion ij

La valeur de la viscosit sur la face interne ij, ij , est calcule : e e soit par moyenne arithmtique : e ij = ij i + (1 ij ) j (II.18.2)

avec ij = 0.5 car ce choix semble stabiliser, bien que cette interpolation soit dordre 1 en espace en convergence. soit par moyenne harmonique : ij = i j ij i + (1 ij ) j

J J

ik

Sb

I i

bik

f bik fI . S bik IF

(II.18.1)

S ij Sb et bik . ik . IJ IF

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 183/277

avec ij =

FJ . IJ

La valeur de la viscosit sur la face de bord ik, bik , est dnie ainsi : e e bik = I . Remarque Lors de lappel de viscfa par le sous-programme resolp, le terme ` considrer est : a e div( tn grad (p) ) soit : = n = t

18.3

Mise en uvre

La valeur de la viscosit au centre des cellules est entre en argument via la variable VISTOT. On e e calcule sa valeur moyenne aux faces et on la multiplie par le rapport surface SURFN sur la distance algbrique DIST pour une face interne (SURFBN et DISTBR respectivement pour une face de bord). La e valeur du terme de diusion rsultant est mise dans le vecteur VISCF pour une face interne et VISCB e pour une face de bord. La variable IMVISF dtermine quel type de moyenne est utilis pour calculer la viscosit aux faces. e e e Si IMVISF= 0, la moyenne est arithmtique, sinon la moyenne est harmonique. e

18.4

` Points a traiter

Lobtention des interpolations utilises dans le code Code Saturne du paragraphe 18.2 est rsume e e e dans le rapport de Davroux et al1 . Les auteurs de ce rapport ont montr que, pour un maillage e monodimensionnel irrgulier et avec une viscosit non constante, la convergence mesure est dordre e e e 2 en espace avec linterpolation harmonique et dordre 1 en espace avec linterpolation linaire (pour e des solution rguli`res). e e Par consquent, il serait prfrable dutiliser linterpolation harmonique pour calculer la valeur de la e ee viscosit aux faces. Des tests de stabilit seront ncessaires au pralable. e e e e De mme, on envisage dextrapoler la viscosit sur les faces de bord plutt que de prendre la valeur de e e o la viscosit au centre de la cellule jouxtant cette face. e Dans le cas de la moyenne arithmtique, lutilisation de la valeur 0.5 pour les coecients ij serait ` e a revoir.

1 Davroux A., Archambeau F. et Hrard J.M., Tests numriques sur quelques mthodes de rsolution dune quation e e e e e de diusion en volumes nis, HI-83/00/027/A.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 184/277

19- Sous-programme visort


19.1 Fonction

Dans ce sous-programme est calcul le coecient de diusion orthotrope aux faces. Ce type de e coecient se rencontre pour la diusion de R ij et en R ij ( cf. turrij), ainsi que pour la correction de pression dans le cadre de lalgorithme avec couplage vitesse-pression renforc (resolp). e Ce coecient fait intervenir la valeur de la viscosit aux faces multiplie par le rapport surface de la e e e e face sur la distance algbrique I J , rapport rsultant de lintgration du terme de diusion. La valeur e de la viscosit aux faces est base soit sur une moyenne arithmtique, soit sur une moyenne harmonique e e e de la viscosit au centre des cellules. e

19.2

Discretisation

La gure II.19.1 rappelle les diverses dnitions gomtriques pour les faces internes et les faces de e e e bord.
Sij

I F

Figure II.19.1: Dnition des direntes entits gomtriques pour les faces internes (gauche) et de e e e e e bord (droite). Lintgration du terme de diusion orthotrope sur une cellule est la suivante : e div ( grad f ) d =
i jV ois(i)

( grad f ) ij . S ij +
kb (i)

avec :

x =0 0

0 y 0

0 0 z

et : S ij = S ij n ij S bik = S bik n bik Le terme ( grad (f )) ij n ij est calcul ` laide de la dcomposition suivante : ea e ( grad f ) ij = (grad f . n ij ) n ij + (grad f. ij ) ij (II.19.4) (II.19.3)

o` ij reprsente un vecteur tangent (unitaire) ` la face. Une dcomposition similaire est utilise aux u e a e e faces de bord.

J J

ik

Sb

I i

( grad f ) bik . S bik

(II.19.1)

(II.19.2)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 185/277

e e Dans la matrice, seul le terme (grad f . n ij ) n ij est intgrable facilement en implicite. Par consquent, la partie projete sur ij est : e nglige dans le cas du calcul des chelles de temps relatives au couplage vitesse-pression renforc, e e e e traite en explicite dans les termes de diusion de R ij (cf. turrij). e

Lintgration implicite du terme de diusion scrit : e e div ( grad f ) d =


i jV ois(i)

( n ij ) . S ij

fJ fI + IJ k

( n bik ) . S bik
b (i)

f bik fI IF

(II.19.5)

Dans ce sous-programme, on calcule le terme

( n ij ) . S ij IJ

a ` laide la formule :

( n ij ) . n ij = moy = x (n x )2 + y (n y )2 + z (n z )2 ij ij ij ij ij ij ij soit encore : moy ij Au bord, on calcule de mme : e ( n bik ) . S bik IF avec : ( n bik ) . n bik = moy = bik
y y x x z z I (S bik )2 + I (S bik )2 + I (S bik )2 S 2 ik b y x z x (S ij )2 + y (S ij )2 + z (S ij )2 ij ij ij = S2 ij

La valeur de la viscosit dans une direction l sur la face, l , est calcule : e e ij soit par interpolation linaire : e l = ij il + (1 ij )jl ij (II.19.6)

avec ij = 0.5 car ce choix semble stabiliser bien que cette interpolation soit dordre 1 en espace en convergence, soit par interpolation harmonique : l = ij o` : u ij = FJ IJ il jl ij il + (1 ij )jl

19.3

Mise en uvre

La viscosit orthotrope au centre des cellules est entre en argument via les variables W1 , W2 et W3 . e e On calcule la valeur moyenne de chaque viscosit aux faces de faon arithmtique ou harmonique. e c e S ij Ensuite, on calcule la viscosit quivalente correspondant ` ( n ij ) . ee a pour les faces internes et ` a IJ S bik ( n bik ) . pour les faces de bord. IF

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 186/277

Cette criture fait intervenir les vecteurs surface stocks dans le tableau SURFAC, la norme de la surface e e SURFN et la distance algbrique DIST pour une face interne (SURFBO, SURFBN et DISTBR respectivement e pour une face de bord). La valeur du terme de diusion rsultant est mise dans le vecteur VISCF e (VISCB aux faces de bord). La variable IMVISF dtermine quel type de moyenne est utilis pour calculer la viscosit dans une e e e direction ` la face. Si IMVISF= 0, alors la moyenne est arithmtique, sinon la moyenne est harmonique). a e

19.4

` Points a traiter

e e Lobtention des interpolations utilises dans le code Code Saturne du paragraphe 19.2 est rsume e dans le rapport de Davroux et al1 . Les auteurs de ce rapport ont montr que, pour un maillage e monodimensionnel irrgulier et avec une viscosit non constante, la convergence mesure est dordre e e e 2 en espace avec linterpolation harmonique et dordre 1 en espace avec linterpolation linaire (pour e des solutions rguli`res). Par consquent, il serait prfrable dutiliser linterpolation harmonique pour e e e ee calculer la valeur de la viscosit aux faces. Des tests de stabilit seront ncessaires au pralable. e e e e De mme, on envisage dextrapoler la viscosit sur les faces de bord plutt que de prendre la valeur de e e o la viscosit de la cellule jouxtant cette face. e Dans le cas de la moyenne arithmtique, lutilisation de la valeur 0.5 pour les coecients ij serait ` e a revoir.

1 Davroux A., Archambeau F. et Hrard J.M., Tests numriques sur quelques mthodes de rsolution dune quation e e e e e de diusion en volumes nis, HI-83/00/027/A.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 187/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 188/277

20- Sous-programme vissec


20.1 Fonction

Dans ce sous-programme sont calculs les termes de gradient transpos et de viscosit secondaire (uide e e e newtonien). Ils seront traits en explicite pur. En eet, si on traitait ces termes en implicite, cela e reviendrait ` coupler les quations des direntes composantes de la vitesse, ce qui nest pas compatible a e e avec le schma de rsolution actuel (cf. sous-programme navsto). e e

20.2

Discretisation

Lintgration des termes de gradient transpos div ( tot t grad (v)) et de viscosit secondaire e e e 2 1 grad ( tot div(v)) est la suivante : 3 div( tot t grad (v) ) d
i

vx vy vz ) moy,ij n x + ( ) moy,ij n y + ( ) moy,ij n z )S ij ij ij ij l l l l=x,y,z jV ois(i) vx vy vz ) moy, bik n xik + ( ) moy, bik n yik + ( ) moy, bik n zik )S bik e l + tot, bik (( b b b l l l = tot,ij ((
kb (i)

2 3

grad ( tot div (v)) d


l ( tot div(v)) ij S ij + kb (i) jV ois(i)

l ( tot div(v)) bik S bik e l

2 = 3

l=x,y,z

Le terme de viscosit tot est calcul en fonction du mod`le de turbulence utilis : e e e e tot = + t pour les mod`les ` viscosit turbulente ou en LES, e a e pour les mod`les au second ordre ou en laminaire. e

o` et t reprsentent respectivement la viscosit dynamique molculaire et la viscosit dynamique u e e e e turbulente.

20.3
20.3.1

Mise en uvre
Terme de gradient transpose

Avant de calculer lintgration des deux termes, on calcule dans un premier temps la viscosit totale e e en fonction du mod`le de turbulence considr. e ee Les termes calculs dans ce sous-programme, appel par preduv, interviennent dans le second membre e e de lquation de quantit de mouvement, et sont donc directement stocks dans le tableau correspone e e dant TRAV. Le terme div ( tot t grad (v)) est calcul en oprant comme suit. e e
1 la

viscosit de volume est suppose nulle, cf. navsto e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 189/277

On eectue une boucle sur les composantes v o` = x, y, z de la vitesse ( correspond ` ISOU dans u a le code) : on calcule le gradient cellule de v par un appel au sous-programme grdcel. on initialise un tableau nomm W6 ` la valeur 1 pour les cellules internes, et ` la valeur 0 pour e a a les cellules de bord. Ce tableau sert par la suite ` ne pas considrer la contribution du terme a e de gradient transpos sur les cellules de bord. En eet, on ne sait pas crire de conditions aux e e limites correctes pour le gradient transpos. On prf`re donc tout simplement annuler son eet e ee sur les cellules de bord (cf. paragraphe 20.4). pour chaque direction l (l = x, y, z), l correspondant ` IDIM dans le code, on calcule pour chaque a cellule i dont le centre correspond ` la variable II ou JJ (pour les centres voisins) dans le code a : TRAV(i, l) = TRAV(i, l) +W6 (i)
jV ois(i)

v ) moy,ij S ij + tot, ij ( l

kb (i)

v tot, b ik ( ) moy,b ik S b ik l

v 1 v v avec ( ) moy,ij = ( )i + ( )j l 2 l l Fin de la boucle sur les composantes de la vitesse.

20.3.2

Terme de viscosite secondaire

2 e c Le terme de seconde viscosit grad ( tot div (v)) est calcul de la faon suivante : e 3 on calcule la valeur de la vitesse sur la face ij en divisant le ux masse connu ` la face par la a i + j ). densit moyenne moy, ij de la face ( moy, ij = e 2 on calcule ensuite lintgrale volumique de la divergence de la vitesse sur chaque cellule en e appelant le sous-programme divmas. 2 on calcule alors pour chaque cellule i le terme ( tot div(v)) i que lon met dans le tableau 3 de travail W4 . La valeur de ce terme sur la face interne ij est obtenue en prenant la moyenne arithmtique des valeurs des deux cellules avoisinantes (tableau VISCF) et celle sur la face de e bord est prise gale la valeur de la cellule avoisinante (tableau VISCB). e on calcule alors pour chaque direction l le terme nal, i.e. : 2 TRAV(i, l) = TRAV(i, l) 3
l ( tot div(v)) moy, ij S ij + kb (i) l ( tot div (v)) moy,b ik S bik

jV ois(i)

Le traitement est similaire pour le terme de viscosit de volume dans le module compressible. e

20.4

` Points a traiter

Lintgration du terme de gradient transpos pose un probl`me de compatibilit. En eet, le gradient e e e e transpos provient de lcriture de la divergence du tenseur des contraintes (cf. preduv), soit : e e div () = div (pId + )

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


1 2 1 = 2 [ (grad v + t grad v) tr( (grad v + t grad v)) Id ] 2 3 2
partie 1 partie 2

Code Saturne documentation Page 190/277

o` : u

Or, lorsque lon int`gre la premi`re partie de la divergence de , on implicite le terme div ( grad v) e e et on explicite le gradient transpos div (t grad v). Ce traitement fait intervenir la vitesse au centre e des cellules. Elle ne vrie pas exactement la condition div (v) = 0. En eet, au cours de ltape de e e correction, on utilise un ltre Rhie et Chow (cf. resolp) et la vitesse nest mise ` jour qu` la n de a a c ltape. Par contre, lorsque lon int`gre la deuxi`me partie de la divergence de de faon explicite, e e e on utilise la vitesse issue du ux masse aux faces qui vrie la condition div (v) = 0 (du moins ` e a constant, linterpolation de ` la face tant galement un point ` considrer). Ainsi, la discrtisation a e e a e e de ces deux parties nest pas totalement cohrente. Il serait utile de baser la discrtisation de ces e e termes sur une vitesse vriant la contrainte div (v) = 0. e Pour la mme raison, il est dicile de conna e tre les conditions aux limites du terme en gradient transpos. Sur les cellules de bord, on sait uniquement que la contrainte totale normale doit quilibrer e e le frottement et toutes les autres forces. Or, le tenseur des contraintes est scind en une partie explicite e et une partie implicite, donc cest un peu dicile dutiliser cette condition physique. Actuellement, la contribution aux cellules de bord du terme de gradient transpos est annule, ce e e qui limine linuence des conditions aux limites mais nest naturellement pas satisfaisant. Quelques e essais dintgration des conditions aux limites pour ce terme nont pas t concluants jusqu` prsent. e ee a e Cependant, des essais supplmentaires sont envisageables. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 191/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 192/277

21- Sous-programme vortex

21.1

Fonction

Ce sous-programme est ddi ` la gnration des conditions dentre turbulente utilises en LES. e ea e e e e La mthode des vortex est base sur une approche de tourbillons ponctuels. Lide de la mthode e e e e consiste ` injecter des tourbillons 2D dans le plan dentre du calcul, puis ` calculer le champ de a e a vitesse induit par ces tourbillons au centre des faces dentre. e

21.2

Discretisation

Pour utiliser la mthode, on se place tout dabord dans un rep`re local dni de mani`re ` ce que le e e e e a plan (0yz), o` sont injects les vortex, soit confondu avec le plan dentre du calcul (voir gure II.21.1). u e e

Lzz

U
P

Lyy y 0 x z

Figure II.21.1: Dniton des direntes grandeurs dans le rep`re local correspondant ` lentre dune e e e a e conduite de section carre. e u, v et w sont les composantes de la vitesse uctuante (principale et transverse) dans ce plan, et v w (y, z) = la vorticit dans la direction normale au plan dentre. U (y, z) reprsente ici la e e e y z vitesse principale moyenne impose par lutilisateur dans le plan dentre. e e Chaque vortex p va tre caractris par sa fonction de forme (identique pour tous les vortex), sa e e e circulation p , son rayon p et les coordonnes (yp , zp ) du point P o` est situ le vortex dans le plan e u e (0yz). Pour cela, on suppose que la vorticit gnre par un vortex p au point M de coordonne (y, z) scrit e e ee e e : p (y, z) = p p (r) o` r = u (y yp )2 + (z zp )2 est la distance sparant le point M du point P . e

Dans la mthode implante, la fonction de forme est de type gaussienne modie : e e e (r) =
r2 r2 1 2e 22 1 e 22 2 2

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 193/277

Le champ de vitesse induit par cette distribution de vorticit sobtient par inversion des deux quations e e de poisson suivantes qui sont dduites de la condition dincompressibilit dans la plan1 : e e = w y et = v y

Dans le cas gnral, ce syst`me peut tre intgr ` laide de la formule de Biot et Savart. e e e e e ea Dans le cas dune distribution de vorticit de type gaussienne modie, les composantes de vitesse e e vrient : e r2 r2 vp (y, x) = 1 (z zp ) 1 e 22 e 22 2 2 r r2 r2 wp (y, z) = 1 (y yp ) 1 e 22 e 22 2 2 r Ces relations stendent de faon immdiate au cas de N vortex distincts. Le champ de vitesse induit e c e par la distribution de vorticit e
N

(y, z) =
p=1

p p (r)

(II.21.1)

vaut au point M : v(x, y) =


N p=1

p vp (y, z)

et

w(y, z) =

N p=1

p wp (y, z)

21.2.1

` Parametres physiques

Marche en temps
La position initiale de chaque vortex est tire de mani`re alatoire. On calcul les dplacements successifs e e e e de chacun des vortex dans le plan dentre par intgration explicite du champ de vitesse lagrangien : e e dyp = V (y, z) dt et dzp = W (y, z) dt

Les vortex sont alors assimils ` des particules ponctuelles qui sont convectes par le champ (V, W ). e a e Ce champ peut tre impos par des tirages alatoires ou bien dduit de la vitesse induite par les vortex e e e e dans le plan dentre. Dans ce cas V (x, y) = V (y, z) + v(y, z) et W (y, z) = W (y, z) + w(y, z) o` V et e u W sont les composantes de la vitesse transverse moyenne quimpose lutilisateur ` laide des chiers a de donnes. e

Intensite et duree de vie des vortex


Il serait possible, ` partir de lquation de transport de la vorticit, dobtenir un mod`le dvolution a e e e e pour lintensit du vecteur tourbillon p associ ` chacun des vortex. En pratique, on prf`re utiliser un e ea ee mod`le simpli dans lequel la circulation des tourbillons ne dpend que de la postion de ces derniers e e e a ` linstant considr. La circulation initiale de chaque vortex est alors obtenue ` partir de la relation ee a : Sk |p | = 4 3N [2ln(3) 3ln(2)] o` S est la surface du plan dentre, N le nombre de vortex, et k lnergie cintique turbulente au u e e e point o` se trouve le vortex ` linstant considr. Le signe de p correspond au sens de rotation du u a ee vortex et est tir alatoirement. e e
1 i.e

v w + =0 y w

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 194/277

Ce param`tre est celui qui contrle lintensit des uctuations. Sa dpendance en k exprime que, plus e o e e lcoulement est turbulent, plus les vortex sont intenses. La valeur de k est spcie par lutilisateur. e e e Elle peut tre constante ou impose a partir de prols dnergie cintique turbulente en entre. e e ` e e e Pour viter que des structures trop allonges ne se dveloppent au niveau de lentre, lutilisateur doit e e e e galement spcier un temps limites p au bout duquel le vortex p va tre dtruit. Ce temps p peut e e e e tre pris constant ou estim au moyen de la relation : e e p = 5C k 2 U
3

U et reprsentent respectivement la vitesse moyenne principale et la dissipation turbulente au point e o` est initialement gnr le vortex (C = 0, 09). u e ee Lorsque le temps coul depuis la cration du vortex p est suprieur ` p , le vortex est dtruit et un e e e e a e nouveau vortex gnr (sa position et le signe de p sont tirs de faon alatoire). e ee e c e

Taille des vortex


La taille des vortex peut tre prise constante, ou calcule ` partir des relations : e e a
3 4 C k 2 = 3

ou

= max[Lt , Lk ] 3
1 4

avec: Lt = 5k et Lk = 200

o` , k et sont la viscosit dynamique, lnergie cintique turbulente et la dissipation turbulente au u e e e point o` se trouve le vortex. u Dans tous les cas, la taille du vortex doit tre suprieure ` la taille des mailles en entre an que le e e a e vortex soit eectivement simul. e

21.2.2

Conditions aux limites

Le champ de vitesse gnr ` laide de la relation II.21.2 ne tient pas compte a priori des conditions e eea aux limites appliques sur les bords du plan dentre. Pour obtenir des valeurs de la vitesse qui soient e e cohrentes sur les fronti`res du domaine dentre, des vortex images, pseudo-vortex situs en dehors e e e e du domaine dentre, sont gnrs ` des positions particuli`res et leur champ de vitesse associ est e e ee a e e superpos au champ prcdemment calcul. e e e e Seuls les cas dune conduite rectangulaire et dune conduite circulaire permettent la gnration de ces e e pseudo-vortex. On distingue pour cela trois types de conditions aux limites.

Condition de paroi
On cre, pour chaque vortex P contenu dans le plan dentre, un vortex image P identique ` P e e a (i.e de mme caractristiques) et symtrique de P par rapport au point J (J tant la projection e e e e orthogonalement ` la paroi du point M correspondant au centre de la face o` lon cherche ` calculer a u a la vitesse). La gure II.21.2 illustre la technique dans le cas dune conduite carre. Dans ce cas les e coordonnes du vortex situ en P vrient (yp + yp )/2 = yJ et (zp + zp )/2 = zJ . Le champ de vitesse e e e peru depuis le point M au niveau du point J est nul, ce qui est bien leet recherch. c e

Condition de symetrie
La technique est identique ` celle utilise pour les conditions de paroi, mais seule la composante pour a e la vitesse normale au bord est modie dans ce cas. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 195/277

Vortex images au point M


P J M P P L

y Condition de paroi z Condition de priodicit

Figure II.21.2: Principe de gnration des vortex images suivant le type de conditions aux limites e e dans une conduite carre. e

Condition de periodicite
On cre pour chaque vortex, un vortex images P identique ` P mais translat dune quantit L e a e e correspondant ` la longueur qui spare les deux plans de la section dentre o` sont appliques les a e e u e conditions de priodicit. Dans le cas o` il y a deux directions de priodicit, on cre deux vortex e e u e e e image.

21.2.3

Composante de vitesse principale

La mthode des vortex ne gnrant pas de uctuation u de la vitesse dans la direction principale, la e e e derni`re composante est calcule ` partir dune quation de Langevin. Les coecients de cette quation e e a e e sont dtermins par identication des expressions obtenues pour les contraintes de Reynolds en Rij . e e Dans le cas dun coulement en canal plan, cette technique conduit ` lquation : e a e du C1 = u+ dt 2T 2 C2 1 3 U v+ y C0 dWi

avec T =

k , C1 = 1, 8, C2 = 0, 6, C0 = 14 , et dWi une variable altoire Gaussienne de variance dt. e 15 En pratique, lquation de Langevin namliore pas vraiment les rsultats. Elle nest utilise que dans e e e e le cas de conduites circulaires.

21.3

Mise en uvre
Aprs une tape de prparation de la mmoire (memvor), on rep`re dans usvort les faces dentre e e e e e e pour lesquelles la mthode va tre utilise. e e e Vrication des dimensions rentres (vervor). e e

Le sous-programme vorpre se charge ensuite de prparer le calcul (transmission de la gomtrie e e e des entres ` tous les processeurs en cas de paralllisme, et construction dun tableau de connece a e tivit). Le sous-programme proc`de ainsi : e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 196/277

On compte, pour chaque entre IENT, le nombre de faces o` est applique la mthode. e u e e Celui-ci est stock dans le tableau ICVOR(IENT). Un passage dans la sous-routine memvor e (avec IAPPEL = 2) permet dallouer la mmoire ncessaire ` cette phase de prparation. e e a e Pour chaque processeur, on stocke les coordonnes des faces dentre repres prcdemment e e ee e e dans les tableaux de travail RA(IW1X),RA(IW1Y),RA(IW1Z),... On regarde ensuite pour chaque processeur (boucle IPROC=1, NRANGP-1), si le processeur IPROC a des donnes ` envoyer aux autres processeurs (an que tous disposent des coore a donnes). e Si cest le cas : ICVOR(IENT)>0, et on place les donnes ` envoyer dans les tableaux e a de travail RA(IW2X),RA(IW2Y),RA(IW2Z),.... La valeur NCOMV = ICVOR(IENT) correspond alors ` la longueur des tableaux ` envoyer. a a Sinon, on ne fait rien et NCOM=0. Le processeur numro IPROC distribue ` tous les autres processeurs la valeur NCOM. Si e a NCOM > 0, il envoie galement les donnes contenues dans les tableaux de travails RA(IW2X),.... e e Ces donnes sont ensuite stockes par tous les processeurs dans les tableaux RA(IXYZV+III),... e e an de librer les tableaux de travail pour la communication suivante, et lindice III = III + NCOM e est incrment de mani`re a ranger les valeurs de faon chronologique. e e e ` c Au nal de la boucle sur IPROC, chaque processeur dispose des coordonnes des faces e dentre pour lesquelles la mthode va tre utilise, et il est donc simple de construire la e e e e connectivit. e Construction de la connectivit. Au nal, la vitesse au centre de la II me face dentre e e e utilisant la mthode est contenue ` la IA(IIFAGL+II) `me ligne du tableau RA(IUVORT). e a e La routine se termine par un appel au sous-programme memvor ( avec IAPPEL = 3) an de rserver la mmoire utile ` la mthode des vortex. e e a e

Cette phase dinitialisation est ralise une seule fois au dbut du calcul. Cest apr`s cette phase e e e e seulement que commence la mthode des vortex proprement dite. e

Initialisation des variables avant intervention utilisateur (inivor). Appel au sous-programme utilisateur usvort (IAPPEL = 2). Vrication des param`tres rentrs (vervor). e e e Calcul de la vitesse par la mthode des vortex (vortex) e Initialisation du calcul gnration du champ initial par appel au sous-programme vorini : e e Construction du repre local (et calcul de lquation du plan dentre suivant les cas), e e e localisation du centre de lentre, et transformation des coordonnes de lentre dans le e e e rep`re local. Les tableaux YZCEL(II,1) et YZCEL(II,2) contiennent les coordonnes e e des faces du plan dentre une fois ramenes dans le rep`re (0yz) (II est compris entre e e e 1 et NCEVOR o` NCEVOR=ICVOR reprsente le nombre de faces pour lesquelles la mthode u e e va tre utilise a cette entre). e e e Lecture du chier de donnes, et initialisation des tableaux XDAT, YDAT, UDAT, VDAT, e WDAT, DUYDAT, KDAT, EPSDAT, ... Si on ne fait pas de suite (ISUIVO=0) ou que lon rinitialise le calcul (INITVO=1), e tirage alatoire de la position des vortex et de leur sens de rotation, ainsi que calcul e de leur dure de vie. Les positions sont stockes dans les tableaux YZVOR(IVOR,1) et e e YZVOR(IVOR,2) (IVOR dsignant le numro du vortex). e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 197/277

Stockage de la vitesse principale moyenne au centre de la cellule dans le tableau XU, et recherche pour chaque vortex, de la face dentre qui lui est la plus proche. e Dplacement des vortex par appel au sous-programme vordep : e Convection des vortex. Traitement des conditions aux limites. Les vortex qui sortent du domaine de calcul sont replacs ` leur position dorigine. e a Rgnration des vortex morts. Si le temps de vie cumul TEMPS(II) du vortex II e e e e est suprieur ` sont temps de vie limite TPSLIM(II), alors le vortex est dtruit, et un e a e nouveau vortex est gnr. e ee Recherche pour chaque vortex de la face dentre qui lui est la plus proche apr`s e e dplacement (mise ` jour du tableau IVORCE). e a Calcul du champ de vitesse induit par appel au sous-programme vorvit : Calcul de lintensit du vortex. e Calcul de la taille du vortex. Calcul du champ de vitesse induit par lensemble des vortex au centre des faces dentre. e Traitement suivant les cas, des conditions de priodicit de symtrie et des conditions e e e de paroi par gnration de vortex images. e e Ajout de la vitesse moyenne dans les directions transverse aux tableaux XV et XW. Gnration des uctuations de vitesse dans la direction principale par appel au souse e programme vorlgv. appel au sous-programme vor2cl : Communication en cas de paralllisme de la vitesse calcule en entre par le processeur 0 aux e e e autres processeurs. Application des conditions aux limites apr`s utilisation dun changement de rep`re ventuel. e e e

21.4

` Points a traiter

Il serait possible de gagner de la mmoire en liberant lespace alou aux tableaux IW1X,...,IW2V apr`s e e e le passage dans vorpre.

Part III

Module compressible

198

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 199/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 200/277

1- Sous-programme cfbl**
1.1 Fonction
On sintresse ` la rsolution des quations de Navier-Stokes en compressible, en particulier pour des e a e e congurations sans choc. Le schma global correspond ` une extension des algorithmes volumes nis e a mis en uvre pour simuler les quations de Navier-Stokes en incompressible. e Dans les grandes lignes, le schma est constitu dune tape acoustique fournissant la masse volue e e mique (ainsi quune prdiction de pression et un dbit acoustique), suivie de la rsolution de lquation e e e e de la quantit de mouvement ; on rsout ensuite lquation de lnergie et, pour terminer, la pression e e e e est mise ` jour. Moyennant une contrainte sur la valeur du pas de temps, le schma permet dassurer a e la positivit de la masse volumique. e La thermodynamique prise en compte ` ce jour est celle des gaz parfaits, mais lorganisation du code a aee e ` t prvue pour permettre ` lutilisateur de fournir ses propres lois. a Pour complter la prsentation, on pourra se reporter ` la rfrence suivante : e e a ee [Mathon] P. Mathon, F. Archambeau, J.-M. Hrard : Implantation dun algorithme compressible e dans Code Saturne , HI-83/03/016/A Le cas de validation tube ` choc de la version 1.2 de Code Saturne permettra galement dapporter a e quelques complments (tube ` choc de Sod, discontinuit de contact instationnaire, double dtente e a e e symtrique, double choc symtrique). e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 201/277

1.1.1

Notations
Unit e J/(kg. K) J/(kg. K) m2 /s J/m3 Signication

Symbole Cp , Cp i Cv , Cv i Df /b E F H I I K M , Mi P Q Qac Q R S S T Yi

h capacit calorique ` pression constante Cp = T P e a capacit calorique ` volume constant Cv = T e a diusivit molculaire du composant f dans le bain e e nergie totale volumique E = e e centre de gravit dune face e J/kg enthalpie totale massique H = E+P point de co-location de la cellule i pour une face ij partage entre les cellules i et j, I est le projet de e e I sur la normale ` la ij passant par F , centre de ij a kg/(m. s) diusivit thermique e kg/mol masse molaire (Mi pour le constituant i) Pa pression kg/(m2 . s) vecteur quantit de mouvement Q = u e kg/(m2 . s) vecteur quantit de mouvement issu de ltape acoustique e e 2 kg/(m . s) norme de Q J/(mol. K) constante universelle des gaz parfaits J/(K. m3 ) entropie volumique [f ]. kg/(m3 . s) Terme de production/dissipation volumique pour le scalaire f K temprature (> 0) e fraction massique du compos i (0 Yi 1) e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


Unit e (m/s)2 J/kg N/kg Signication carr de la vitesse du son c2 = e
P s + 1 u2 2

Code Saturne documentation Page 202/277

Symbole c2 e fv g h i I jB r, ri s t u u

m/s2 J/kg

N/m3 J/(kg. K) J/(K. kg) s m/s m/s

nergie totale massique e = e f v reprsente le terme source volumique pour la quantit de moue e vement : gravit, pertes de charges, tenseurs des contraintes turbue lentes, forces de Laplace... acclration de la pesanteur ee enthalpie massique h = + P indice faisant rfrence ` la cellule i ; fi est la valeur de la variable f ee a associe au point de co-location I e indice faisant rfrence ` la cellule i ; fI est la valeur de la variable ee a f associe au point I e forces de Laplace R constante massique des gaz parfaits r = M (pour le constituant i, on R a ri = M i ) entropie massique temps vecteur vitesse norme de u

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


Unit e kg/(m3 . K) Signication =
P s

Code Saturne documentation Page 203/277

Symbole f f v s s v

kg/(m3 . K) J/kg kg/(m. s) W/(m. K) kg/(m. s) kg/m3 [f ]. kg/(m2 . s) [f ]. kg/(m2 . s) kg/(m2 . s2 ) W/m2 W/m2 W/kg

constante caractristique dun gaz parfait = e nergie interne massique e viscosit dynamique en volume e conductivit thermique e viscosit dynamique ordinaire e densit e vecteur ux diusif du compos f e norme de f

Cp Cv

tenseur des contraintes visqueuses vecteur ux conductif de chaleur norme de s v reprsente le terme source volumique dnergie, comprenant par e e exemple leet Joule j E, le rayonnement...

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 204/277

1.1.2

` Systeme dequations laminaires de reference

Lalgorithme dvelopp propose de rsoudre lquation de continuit, les quations de Navier-Stokes e e e e e e ainsi que lquation dnergie totale de mani`re conservative, pour des coulements compressibles. e e e e + div(Q) = 0 t Q + div(u Q) + grad P = f v + div(v ) t E + div(u(E + P )) = f v u + div(v u) div s + v t

(III.1.1)

Nous avons prsent ici le syst`me dquations laminaires, mais il faut prciser que la turbulence ne e e e e e pose pas de probl`me particulier dans la mesure o` les quations supplmentaires sont dcouples du e u e e e e syst`me (III.1.1). e

1.1.3

Expression des termes intervenant dans les equations


1 E = e = + u2 2 avec lnergie interne (P, ) donne par lquation dtat e e e e (III.1.2)

Energie totale volumique :

Forces volumiques : f v (dans la plupart des cas f v = g) Tenseur des contraintes visqueuses pour un uide Newtonien : 2 v = (grad u + t grad u) + ( )div u Id 3 avec (T, . . .) et (T, . . .) mais souvent = 0 Flux de conduction de la chaleur : loi de Fourier s = grad T avec (T, . . .) Source de chaleur volumique : v (III.1.4) (III.1.3)

1.1.4 Equations detat et expressions de lenergie interne


Gaz parfait
Equation dtat : P = rT e Energie interne massique : = Soit : P ( 1) 1 P = ( 1)(e u2 ) 2 (III.1.5)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 205/277

Melange de gaz parfaits


On consid`re un mlange de N constituants de fractions massiques (Yi )i=1...N e e Equation dtat : P = rmlange T e e Energie interne massique : = Soit : 1 P = (mlange 1)(e u2 ) e 2
N

P (mlange 1) e (III.1.6)

Yi Cpi avec mlange = e


i=1 N

et rmlange = e Yi Cvi
i=1

Yi ri

i=1

Equation detat de Van der Waals


Cette quation est une correction de lquation dtat des gaz parfaits pour tenir compte des forces e e e intermolculaires et du volume des molcules constitutives du gaz. On introduit deux coecients core e rectifs : a [P a. m6 /kg 2 ] est li aux forces intermolculaires et b [m3 /kg] est le covolume (volume occup e e e par les molcules). e Equation dtat : (P + a2 )(1 b) = rT e (P + a2 )(1 b) a Energie interne massique : = ( 1) Soit : P = ( 1) 1 (e u2 + a) a2 (1 b) 2 + 2a2 (1 b) P + a2 (III.1.7)

avec = 1 +

r Cp = Cv Cv

P a2 (1 2b) P + a2

1.1.5

Calcul des grandeurs thermodymamiques

` Pour un gaz parfait a constant


Equation dtat : e P = rT

On suppose connues la chaleur massique ` pression constante Cp et la masse molaire M du gaz, ainsi a que les variables dtat. e

Chaleur massique ` volume constant : a

Cv = Cp

R = Cp r M

Constante caractristique du gaz : = e

Cp Cp = Cv Cp r

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


P P s

Code Saturne documentation Page 206/277

Vitesse du son : c2 =

Entropie :

s=

et =

Remarque : Lentropie choisie ici nest pas lentropie physique, mais une entropie mathmatique qui e s 2 s vrie c e + =0 P P Pression : P = ( 1) 1 P 1

Energie interne :

= Cv T =

avec sup = 0

Enthalpie :

h = Cp T =

P 1

Pour un melange de gaz parfaits


Une intervention de lutilisateur dans le sous-programme utilisateur uscfth est ncessaire pour pouvoir e utiliser ces lois.
N N

Equation dtat : e

P = rml T e

avec rml = e
i=1

Yi ri =
i=1

Yi

R Mi

On suppose connues la chaleur massique ` pression constante des dirents constituants Cp i , la masse a e molaire Mi des constituants du gaz, ainsi que les variables dtat (dont les fractions massiques Yi ). e
1

Masse molaire du mlange : e

Mml = e
i=1

Yi Mi

Chaleur massique ` pression constante du mlange : a e


N

Cp ml = e
i=1

Yi Cp i

Chaleur massique ` volume constant du mlange : a e N R Cv ml = Yi Cv i = Cp ml = Cp ml rml e e e e Mml e i=1 Cp ml Cp ml e e = Cv ml Cp ml rml e e e

Constante caractristique du gaz : ml = e e

Vitesse du son : c2 = ml e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


s= P e ml et = P s
e = ml

Code Saturne documentation Page 207/277

Entropie :

Pression :

P = (ml 1) e = Cv ml T e avec sup = 0

Energie interne :

Enthalpie :

h = Cp ml T = e

ml P e ml 1 e

Pour un gaz de Van der Waals


Ces lois nont pas t programmes, mais lutilisateur peut intervenir dans le sous-programme utilisaee e teur uscfth sil souhaite le faire. Equation dtat : e (P + a2 )(1 b) = rT

avec a [P a. m6 /kg 2 ] li aux forces intermolculaires et b [m3 /kg] le covolume (volume occup par les e e e molcules). e On suppose connus les coecients a et b, la chaleur massique ` pression constante Cp , la masse molaire a M du gaz et les variables dtat. e P + a2 P a2 (1 2b) P a2 (1 2b) P + a2 2a2 (1 b) P + a2

Chaleur massique ` volume constant : a

Cv = Cp r

Constante quivalente du gaz : e

=1+

r Cp = Cv Cv

Vitesse du son :

c2 =

P + a2 2a (1 b) 1 b

Entropie :

s = (P + a2 )

et =

P s

1 b

Pression :

P = ( 1)

( + a) a2 (1 b) avec sup = a

Energie interne :

= Cv T a b P + a2 2a 1

Enthalpie :

h=

1.1.6

Algorithme de base

On suppose connues toutes les variables au temps tn et on cherche ` les dterminer ` linstant tn+1 . a e a On rsout en deux blocs principaux : dune part le syst`me masse-quantit de mouvement, de lautre e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 208/277

lquation portant sur lnergie et les scalaires transports. Dans le premier bloc, on distingue le e e e traitement du syst`me (coupl) acoustique et le traitement de lquation de la quantit de mouvement e e e e compl`te. e Au dbut du pas de temps, on commence par mettre ` jour les proprits physiques variables (par e a ee exemple (T ), (T ), Cp (Y1 , . . . , YN ) ou (T )), puis on rsout les tapes suivantes : e e 1. Acoustique : sous-programme cfmsvl Rsolution dune quation de convection-diusion portant sur n+1 . e e On obtient ` la n de ltape n+1 , Qn+1 et ventuellement une prdiction de la pression a e e e ac P pred (n+1 , en ). 2. Quantit de mouvement : sous-programme cfqdmv e Rsolution dune quation de convection-diusion portant sur un+1 qui fait intervenir Qn+1 et e e ac P pred . On obtient ` la n de ltape un+1 . a e 3. Energie totale : sous-programme cfener Rsolution dune quation de convection-diusion portant sur en+1 qui fait intervenir Qn+1 , e e ac P pred et un+1 . On obtient ` la n de ltape en+1 et une valeur actualise de la pression P (n+1 , en+1 ). a e e 4. Scalaires passifs Rsolution dune quation de convection-diusion standard par scalaire, avec Qn+1 pour ux e e ac convectif.

1.2

Discretisation

On se reportera aux sections relatives aux sous-programmes cfmsvl (masse volumique), cfqdmv (quantit de mouvement) et cfener (nergie). La documentation du sous-programme cfxtcl fournit des e e lments relatifs aux conditions aux limites. ee

1.3

Mise en uvre

Le module compressible est une physique particuli`re active lorsque le mot-cl IPPMOD(ICOMPF) est e e e positif ou nul. Dans ce qui suit, on prcise les inconnues et les proprits principales utilises dans le module. On e ee e fournit galement un arbre dappel simpli des sous-programmes du module : initialisation avec e e initi1 puis (iniva0 et) inivar et enn, boucle en temps avec tridim.

1.3.1

Inconnues et proprietes

Les NSCAPP inconnues scalaires associes ` la physique particuli`re sont dnies dans cfvarp dans e a e e lordre suivant : la masse volumique RTP(*,ISCA(IRHO(IPHAS))), lnergie totale RTP(*,ISCA(IENERG(IPHAS))), e la temprature RTP(*,ISCA(ITEMPK(IPHAS))) e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 209/277

On souligne que la temprature est dnie en tant que variable RTP et non pas en tant que proprit e e ee physique PROPCE. Ce choix a t motiv par la volont de simplier la gestion des conditions ee e e aux limites, au prix cependant dun encombrement mmoire lg`rement suprieur (une grandeur RTP e e e e consomme plus quune grandeur PROPCE). La pression et la vitesse sont classiquement associes aux tableaux suivants : e pression : RTP(*,IPR(IPHAS)) vitesse : RTP(*,IU(IPHAS)), RTP(*,IV(IPHAS)), RTP(*,IW(IPHAS)).

Outre les proprits associes en standard aux variables identies ci-dessus, le tableau PROPCE contient ee e e galement : e la chaleur massique ` volume constant Cv , stocke dans PROPCE(*,IPPROC(ICV(IPHAS))), si a e lutilisateur a indiqu dans uscfth quelle tait variable. e e la viscosit en volume PROPCE(*,IPPROC(IVISCV(IPHAS))) si lutilisateur a indiqu dans uscfx2 e e quelle tait variable. e

Pour la gestion des conditions aux limites et en particulier pour le calcul du ux convectif par le schma e de Rusanov aux entres et sorties (hormis en sortie supersonique), on dispose des tableaux suivants e dans PROPFB : ux convectif de quantit de mouvement au bord pour les trois composantes dans les tableaux e PROPFB(*,IPPROB(IFBRHU(IPHAS))) (composante x), PROPFB(*,IPPROB(IFBRHV(IPHAS))) (composante y) et PROPFB(*,IPPROB(IFBRHW(IPHAS))) (composante z) ux convectif dnergie au bord PROPFB(*,IPPROB(IFBENE(IPHAS))) e et on dispose galement dans IA : e dun tableau dentiers dont la premi`re case est IA(IIFBRU), dimensionn au nombre de faces e e de bord et permettant de reprer les faces de bord pour lesquelles on calcule le ux convectif par e le schma de Rusanov, e dun tableau dentiers dont la premi`re case est IA(IIFBET), dimensionn au nombre de faces e e de bord et permettant de reprer les faces de paroi ` temprature ou ` ux thermique impos. e a e a e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 210/277

1.3.2

Arbre dappel simplie

Initialisation des mots-cls utilisateur gnraux et e e e positionnement des variables usppmo Dnition du module physique particuli`re eme e ploy e varpos Positionnement des variables pplecd Branchement des physiques particuli`res pour la lece ture du chier de donnes ventuel e e ppvarp Branchement des physiques particuli`res pour le poe sitionnement des inconnues cfvarp Positionnement des inconnues spciques au module e compressible uscfth Appel avec ICCFTH=-1, pour indiquer que Cp et e Cv sont constants ou variables uscfx2 Conductivit thermique molculaire constante ou e e variable et viscosit en volume constante ou variable e (ainsi que leur valeur, si elles sont constantes) ppprop Branchement des physiques particuli`res pour le poe sitionnement des proprits ee cfprop Positionnement des proprits spciques au module ee e compressible ppini1 Branchement des physiques particuli`res pour e linitialisation des mots-cls spciques e e cfini1 Initialisation des mots-cls spciques au module e e compressible uscfi1 Initialisation des mots-cls utilisateur spciques au e e module compressible usini1 Table 22.1: Sous-programme initi1 : initialisation des mots-cls et positionnement des variables e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 211/277

ppiniv cfiniv memcfv uscfth

uscfxi

Branchement des physiques particuli`res pour linitialisation des e variables Initialisation des variables spciques au module compressible e Rservation de tableaux de travail locaux e Initialisation des variables par dfaut (en calcul suite : seulement e Cv ; si le calcul nest pas une suite : Cv , la masse volumique et lnergie) e Initialisation des variables par lutilisateur (seulement si le calcul nest pas une suite)

Table 22.2: Sous-programme inivar : initialisation des variables

phyvar ppphyv

Calcul des proprits physiques variables ee Branchement des physiques particuli`res pour le calcul des proe prits physiques variables ee cfphyv Calcul des proprits physiques variables pour le module comee pressible uscfpv Calcul par lutilisateur des proprits physiques variables pour le ee module compressible (Cv est calcul dans uscfth qui est appel e e par uscfpv)

Table 22.3: Sous-programme tridim : partie 1 (proprits physiques) ee

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 212/277

Calcul du pas de temps variable Calcul de la contrainte lie au CFL en compressible e memcft Gestion de la mmoire pour le calcul de la contrainte en CFL e cfmsfl Calcul du ux associ ` la contrainte en CFL ea precli Initialisation des tableaux avant calcul des conditions aux limites (IITYPF, ICODCL, RCODCL) ppprcl Initialisations spciques aux direntes physiques particuli`res e e e avant calcul des conditions aux limites (pour le module compressible : IZFPPP, IA(IIFBRU), IA(IIFBET), RCODCL, ux convectifs pour la quantit de mouvement et lnergie) e e ppclim Branchement des physiques particuli`res pour les conditions aux e limites (en lieu et place de usclim) uscfcl Intervention de lutilisateur pour les conditions aux limites (en lieu et place de usclim, mme pour les variables qui ne sont pas e spciques au module compressible) e condli Traitement des conditions aux limites pptycl Branchement des physiques particuli`res pour le traitement des e conditions aux limites cfxtcl Traitement des conditions aux limites pour le compressible uscfth Calculs de thermodynamique pour le calcul des conditions aux limites cfrusb Flux de Rusanov (entres ou sorties sauf sortie supersonique) e dttvar cfdttv Table 22.4: Sous-programme tridim : partie 2 (pas de temps variable et conditions aux limites)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 213/277

memcfm cfmsvl cfmsfl cfdivs

cfmsvs

codits clpsca uscfth cfbsc3 uscfth cfqdmv cfcdts cfbsc2

Gestion de la mmoire pour la rsolution de ltape acoustique e e e Rsolution de ltape acoustique e e Calcul du ux de masse aux faces (not w n S dans la docue mentation du sous-programme cfmsvl) Calcul du terme en divergence du tenseur des contraintes visqueuses (trois appels), ventuellement e Apr`s cfmsfl, on impose le ux de masse aux faces de bord ` e a partir des conditions aux limites Calcul de la viscosit aux faces (note t c2 S dans la documene e d tation du sous-programme cfmsvl) Apr`s cfmsvs, on annule la viscosit aux faces de bord pour que e e le ux de masse soit bien celui souhait e Rsolution du syst`me portant sur la masse volumique e e Impression des bornes et clipping ventuel (pas de clipping en e standard) Gestion ventuelle des bornes par lutilisateur e Calcul du ux de masse acoustique aux faces (not Qac n dans e la documentation du sous-programme cfmsvl) Actualisation de la pression, ventuellement e Rsolution de la quantit de mouvement e e Rsolution du syst`me e e Calcul des termes de convection et de diusion au second membre

Table 22.5: Sous-programme tridim : partie 3 (Navier-Stokes)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 214/277

scalai cfener

Rsolution des quations sur les scalaires e e Rsolution de lquation sur lnergie totale e e e memcfe Gestion de la mmoire locale e cfdivs Calcul du terme en divergence du produit tenseur des contraintes par vitesse uscfth Calcul de lcart nergie interne - Cv T (sup ) e e cfcdts Rsolution du syst`me e e cfbsc2 Calcul des termes de convection et de diusion au second membre clpsca Impression des bornes et clipping ventuel (pas de clipping en e standard) uscfth Gestion ventuelle des bornes par lutilisateur e uscfth Mise ` jour de la pression a Table 22.6: Sous-programme tridim : partie 4 (scalaires)

Le sous-programme cfbsc3 est similaire ` bilsc2, mais il produit des ux aux faces et nest crit que a e pour un schma upwind, ` lordre 1 en temps (ce qui est cohrent avec les choix faits dans lalgorithme e a e compressible). Le sous-programme cfbsc2 est similaire ` bilsc2, mais nest crit que pour un schma dordre 1 en a e e temps. Le sous-programme cfbsc2 permet deectuer un traitement spcique aux faces de bord pour e lesquelles on a appliqu un schma de Rusanov pour calculer le ux convectif total. Ce sous-programme e e est appel pour la rsolution de lquation de la quantit de mouvement et de lquation de lnergie. e e e e e e On pourra se reporter ` la documentation du sous-programme cfxtcl. a Le sous-programme cfcdts est similaire ` codits mais fait appel ` cfbsc2 et non pas ` bilsc2. Il a a a di`re de codits par quelques autres dtails qui ne sont pas gnants dans limmdiat : initialisation e e e e de PVARA et de SMBINI, ordre en temps (ordre 2 non pris en compte).

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 215/277

1.4

` Points a traiter

Des actions complmentaires sont identies ci-apr`s, dans lordre durgence dcroissante (on se ree e e e portera galement ` la section Points ` traiter de la documentation des autres sous-programmes du e a a module compressible). Assurer la cohrence des sous-programmes suivants (ou, ventuellement, les fusionner pour viter e e e quils ne divergent) : cfcdts et codits, cfbsc2 et bilsc2, cfbsc3 et bilsc2. Permettre les suites de calcul incompressible/compressible et compressible/incompressible. Apporter un complment de validation (exemple : IPHYDR). e Assurer la compatibilit avec certaines physiques particuli`res, selon les besoins. Par exemple : e e arc lectrique, rayonnement, combustion. e Identier les causes des dicults rencontres sur certains cas acadmiques, en particulier : e e e canal subsonique (comment saranchir des eets indsirables associs aux conditions dentre e e e et de sortie, comment raliser un calcul priodique, en particulier pour la temprature dont e e e le gradient dans la direction de lcoulement nest pas nul, si les parois sont adiabatiques), e cavit ferme sans vitesse ni eets de gravit, avec temprature ou ux thermique impos e e e e e en paroi (il pourrait tre utile dextrapoler le gradient de pression au bord : la pression e dpend de la temprature et une simple condition de Neumann homog`ne est susceptible e e e de crer un terme source de quantit de mouvement parasite), e e maillage non conforme (non conformit dans la direction transverse dun canal), e tube ` choc avec terme source dnergie. a e Complter certains points de documentation, en particulier les conditions aux limites thermiques e pour le couplage avec SYRTHES. Amliorer la rapidit ` faible nombre de Mach (est-il possible de lever la limite actuelle sur la e ea valeur du pas de temps ?). Enrichir, au besoin : les thermodynamiques prises en compte (multiconstituant, gamma variable, Van der Waals...), la gamme des conditions aux limites dentre disponibles (condition ` dbit massique et e a e dbit enthalpique imposs par exemple). e e Tester des variantes de lalgorithme : prise en compte des termes sources de lquation de la quantit de mouvement autres que e e la gravit dans lquation de la masse rsolue lors de ltape acoustique (les tests raliss e e e e e e avec cette variante de lalgorithme devront tre repris dans la mesure o`, dans cfmsfl, e u IIROM et IIROMB ntaient pas initialiss), e e implicitation du terme de convection dans lquation de la masse (liminer cette possibilit e e e si elle napporte rien), tape de prdiction de la pression, e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 216/277

non reconstruction de la masse volumique pour le terme convectif (actuellement, les termes convectifs sont traits avec dcentrement amont, dordre 1 en espace ; pour lquation de e e e la quantit de mouvement et lquation de lnergie, on utilise les valeurs prises au centre e e e des cellules sans reconstruction : cest lapproche standard de Code Saturne, traduite dans cfbsc2 ; par contre, dans cfmsvl, on reconstruit les valeurs de la masse volumique utilises e pour le terme convectif ; il ny a pas de raison dadopter des stratgies direntes, dautant e e plus que la reconstruction de la masse volumique ne permet pas de monter en ordre et augmente le risque de dpassement des bornes physiques), e monte en ordre en espace (en vrier lutilit et la robustesse, en particulier relativement e e e au principe du maximum pour la masse volumique), monte en ordre en temps (en vrier lutilit et la robustesse). e e e Optimiser lencombrement mmoire. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 217/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 218/277

2- Sous-programme cfener
2.1 Fonction

Pour les notations et lalgorithme dans son ensemble, on se reportera ` cfbase. a Apr`s masse (acoustique) et quantit de mouvement, on consid`re un dernier pas fractionnaire (de t e e e a ` t ) au cours duquel seule varie lnergie totale E = e. e = = n+1 = Q = Qn+1 Q e P + div Qac e + t

(III.2.1) = f v u + div(v u) div s + v

Pour conserver la positivit de lnergie, il est indispensable ici, comme pour les scalaires, dutiliser le e e e ux de masse convectif acoustique Qn+1 compatible avec lquation de la masse. De plus, pour obtenir ac des proprits de positivit sur les scalaires, un schma upwind pour le terme convectif doit tre utilis ee e e e e (mais les termes sources introduisent des contraintes supplmentaires qui peuvent tre prpondrantes e e e e et gnantes). e ` A la n de cette tape, on actualise ventuellement (mais par dfaut non) une deuxi`me et derni`re e e e e e fois la pression en utilisant la loi dtat pour obtenir la pression nale : e P n+1 = P (n+1 , n+1 ) (III.2.2)

2.2
2.2.1

Discretisation
Discretisation en temps

La modlisation des ux de chaleur choisie jusqu` prsent est de la forme div( s ) = div(grad T ). e a e Pour faire appara un terme diusif stabilisant dans la matrice de rsolution, on cherche ` exprimer tre e a le ux diusif de chaleur (div( s )) en fonction de la variable rsolue (lnergie totale). e e Avec sup (P, ) dpendant de la loi dtat, on exprime lnergie totale de la faon suivante : e e e c 1 1 e = + u2 = (Cv T + sup ) + u2 2 2 En supposant Cv constant1 , on a alors : 1 div( s ) = div(Kgrad (e u2 sup )) 2 avec K = /Cv (III.2.4) (III.2.3)

Lorsquun mod`le de turbulence est activ, on conserve la mme forme de modlisation pour les ux e e e e thermiques et K int`gre alors la diusivit turbulente. On pourra se reporter ` la documentation de e e a cfxtcl ` ce sujet. a
1 Pour C non constant, les dveloppements restent ` faire : on pourra se reporter ` P. Mathon, F. Archambeau, e a a v J.-M. Hrard : Implantation dun algorithme compressible dans Code Saturne , HI-83/03/016/A e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 219/277

Avec la formulation (III.2.4), on peut donc impliciter le terme en grad e. De plus, puisque la vitesse a dj` t rsolue, on implicite galement le terme en grad 1 u2 . Lexposant eae e e e 2 e n + 1 de sup indique que limplicitation de ce terme est partielle (elle dpend de la forme de la loi 2 dtat). e Par ailleurs, on implicite le terme de convection, le terme de puissance des forces volumiques, ventuellement e le terme de puissance des forces de pression (suivant la valeur de IGRDPP, on utilise la prdiction de e pression obtenue apr`s rsolution de lquation portant sur la masse volumique ou bien la pression e e e du pas de temps prcdent) et le terme de puissance des forces visqueuses. On implicite le terme de e e puissance volumique en utilisant n+1 .

On obtient alors lquation discr`te portant sur e : e e P (e)n+1 (e)n + div(Qn+1 en+1 ) div(K n grad en+1 ) = n+1 f v un+1 div(Qn+1 n+1 ) n ac ac t n+ 1 + div((v )n+1 un+1 ) div(K n grad ( 1 (u2 )n+1 + sup2 )) + n+1 v 2 (III.2.5) P red n n avec P = P ou P suivant la valeur de IGRDPP (P par dfaut). e En pratique, dans Code Saturne, on rsout cette quation en faisant appara ` gauche lcart en+1 e e tre a e en . Pour cela, on crit la drive en temps discr`te sous la forme suivante : e e e e (e)n+1 (e)n tn n+1 en+1 n en tn n en+1 n en n+1 en+1 n en+1 = + tn tn n n+1 n n+1 n n+1 = e e +e tn tn =

(III.2.6)

et lon utilise lquation de la masse discr`te pour crire : e e e n (e)n+1 (e)n = en+1 en en+1 div Qn+1 n ac t tn (III.2.7)

2.2.2

Discretisation en espace

Introduction
e e On int`gre lquation (III.2.5) sur la cellule i de volume i et lon proc`de comme pour lquation de e e la masse et de la quantit de mouvement. e On obtient alors lquation discr`te suivante : e e i n+1 n+1 ( ei n en ) + i i tn i = i n+1 f v i un+1 i i
jV (i)

en+1 Qn+1 ac
jV (i)

ij

S ij
jV (i)

K n grad (en+1 )

ij

S ij

P P red n+1 Qac n+1

S ij +
ij jV (i)

(v )n+1 un+1

ij

S ij

(III.2.8)

jV (i)

K n grad

1 2 n+1 n+ 1 (u ) + sup2 2

S ij + i n+1 v i i
ij

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 220/277

Discretisation de la partie convective


La valeur ` la face scrit : a e en+1 Qn+1 ac
ij

S ij = en+1 (Qn+1 )ij S ij ij ac

(III.2.9)

avec un dcentrement sur la valeur de en+1 aux faces : e en+1 ij = en+1 i = en+1 j si si (Qn+1 )ij S ij 0 ac (Qn+1 )ij S ij < 0 ac (III.2.10)

que lon peut noter : en+1 = ij en+1 + (1 ij )en+1 ij i j avec ij = 1 ij = 0 si si (Qn+1 )ij S ij 0 ac (Qn+1 )ij S ij < 0 ac (III.2.12) (III.2.11)

Discretisation de la partie diffusive


La valeur ` la face scrit : a e K n grad (en+1 )
n S ij = Kij

ij

e n

n+1

Sij
ij 1 2 2u
1 n+ 2

et K n grad
1 2 n+1 2 (u )

(III.2.13) Sij

+ sup

1 n+ 2

ij

n S ij = Kij

+ sup n

ij

avec une interpolation linaire pour K n aux faces (et en pratique, ij = 1 ) : e 2


n n n Kij = ij Ki + (1 ij )Kj

(III.2.14)

et un schma centr avec reconstruction pour le gradient normal aux faces : e e e n


n+1 ij

en+1 en+1 I = J IJ

et

1 2 2u

+ sup n

1 n+ 2

=
ij

( 1 u2 + sup )J 2

1 n+ 2

1 ( 2 u2 + sup )I

n+ 1 2

IJ (III.2.15)

Discretisation de la puissance des forces de pression


Ce terme est issu du terme convectif, on le discrtise donc de la mme faon. e e c P Qn+1 n+1 ac P n+1

S ij =
ij

(Qn+1 )ij S ij ac
ij

(III.2.16)

avec un dcentrement sur la valeur de e P n+1


ij

P aux faces : Pj n+1 j avec ij = 1 si ij = 0 si (Qn+1 )ij S ij 0 ac (Qn+1 )ij S ij < 0 ac (III.2.17)

= ij

Pi n+1 i

+ (1 ij )

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 221/277

Discretisation de la puissance des forces visqueuses


On calcule les termes dans les cellules puis on utilise une interpolation linaire (on utilise ij = e la relation ci-dessous) : (v )n+1 un+1 S ij = ij (v )n+1 un+1 + (1 ij ) (v )n+1 un+1 S ij
1 2

dans

ij

(III.2.18)

Remarques
Les termes convectifs associs ` div e a en+1 + P n+1 Qn+1 ac sont calculs avec un dcentrement e e

amont (consistant, dordre 1 en espace). Les valeurs utilises sont bien prises au centre de la cellule e amont (ei , Pi , i ) et non pas au projet I du centre de la cellule sur la normale ` la face passant e a par son centre de gravit (sur un cas test en triangles, lutilisation de PI et de I pour le terme de e transport de pression a conduit ` un rsultat insatisfaisant, mais des corrections ont t apportes aux a e ee e sources depuis et il serait utile de vrier que cette conclusion nest pas remise en question). e Les termes diusifs associs ` div K grad e a 1 e + u2 + sup sont calculs en utilisant des valeurs e 2 aux faces reconstruites pour sassurer de la consistance du schma. e

2.3

Mise en uvre

Apr`s une tape de gestion de la mmoire (memcfe), on calcule les dirents termes sources (au centre e e e e des cellules) : source volumique de chaleur (ustssc), source associe aux sources de masse (catsma), e source associe ` laccumulation de masse div Qac (directement dans cfener), e a dissipation visqueuse (cfdivs), transport de pression (directement dans cfener), puissance de la pesanteur (directement dans cfener), termes diusifs en div K grad 1 2 u + sup 2 diusif directement dans cfener). (calcul de sup par uscfth, puis calcul du terme

Le syst`me (III.2.8) est rsolu par une mthode dincrment et rsidu en utilisant une mthode de e e e e e e Jacobi (cfcdts). Limpression des bornes et la limitation ventuelle de lnergie sont ensuite eectues par clpsca suivi e e e de uscfth (intervention utilisateur optionnelle). On actualise enn la pression et on calcule la temprature (uscfth). e Pour terminer, en parall`le ou en priodique, on change les variables pression, nergie et temprature. e e e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 222/277

2.4

` Points a traiter

Choix de P En standard, on utilise P = P n , mais ce nest pas le seul choix possible. On pourrait tudier le e P comportement de lalgorithme avec P P red et P n+1 (avec P n+1 , en particulier, n+1 est valu avec la e e masse volumique et lnergie prises au mme instant). e e Terme source dans lquation de lnergie e e La prsence dun terme source externe dans lquation de lnergie gn`re des oscillations de vitesse e e e e e quil est important danalyser et de comprendre.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 223/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 224/277

3- Sous-programme cfmsvl

3.1

Fonction

Pour les notations et lalgorithme dans son ensemble, on se reportera ` cfbase. a On consid`re un premier pas fractionnaire au cours duquel lnergie totale est xe. Seules varient la e e masse volumique et le ux de masse acoustique normal aux faces (dni et calcul aux faces). e e On a donc le syst`me suivant, entre tn et t : e + divQ = 0 ac t Q ac + grad P = f t Q = Qn e = en

(III.3.1)

Une partie des termes sources de lquation de la quantit de mouvement peut tre prise en compte e e e dans cette tape (les termes les plus importants, en prtant attention aux sous-quilibres). e e e Il faut noter que si f est eectivement nul, on aura bien un syst`me acoustique, mais que si lon e place des termes supplmentaires dans f , la dnomination est abusive (on la conservera cependant). e e On obtient = n+1 en rsolvant (III.3.1), et lon actualise alors le ux de masse acoustique Qn+1 , e ac qui servira pour la convection (en particulier pour la convection de lenthalpie totale et de tous les scalaires transports). e Suivant la valeur de IGRDPP, on actualise ventuellement la pression, en utilisant la loi dtat : e e P P red = P (n+1 , n )

3.2
3.2.1

Discretisation
Discretisation en temps

Le syst`me (III.3.1) discrtis en temps donne : e e e n+1 n + divQn+1 = 0 ac tn n+1 Q n ac Q + grad P = n f n tn Q = Qn e = en

(III.3.2)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


fn fn fn

Code Saturne documentation Page 225/277

avec ou ou mme e

= 0 = g = fv + 1 div(u Q) + div(v ) + j B n
n

(III.3.3)

Dans la pratique nous avons dcid de prendre f n = g : e e le terme j B na pas t test, ee e le terme div(v ) tait ngligeable sur les tests raliss, e e e e le terme div(u Q) a paru dstabiliser les calculs (mais au moins une partie des tests a t e ee ralise avec une erreur de programmation et il faudrait donc les reprendre). e e

e Le terme Qn dans la 2`me quation de (III.3.2) est le vecteur quantit de mouvement qui provient e e de ltape de rsolution de la quantit de mouvement du pas de temps prcdent, Qn = n un . On e e e e e pourrait thoriquement utiliser un vecteur quantit de mouvement issu de ltape acoustique du pas e e e de temps prcdent, mais il ne constitue quun prdicteur plus ou moins satisfaisant (il na pas vu e e e ee e les termes sources qui ne sont pas dans f n ) et cette solution na pas t teste.

On crit alors la pression sous la forme : e grad P = c2 grad + grad s avec c2 = P P s (III.3.4)

et =
s

tabuls ou analytiques ` partir de la loi dtat. e a e

On discrtise lexpression prcdente en : e e e grad P = (c2 )n grad (n+1 ) + n grad (sn ) (III.3.5)

e On obtient alors une quation portant sur n+1 en substituant lexpression de Qn+1 issue de la 2`me e ac e quation de (III.3.2) dans la 1`re quation de (III.3.2) : e e

n+1 n + div(wn n ) div tn (c2 )n grad (n+1 ) = 0 tn o` : u wn = un + tn f n n grad (sn ) n

(III.3.6)

(III.3.7)

Formulation alternative (programme mais non teste) avec le terme de convection implicite : e e n+1 n + div(wn n+1 ) div tn (c2 )n grad (n+1 ) = 0 tn (III.3.8)

3.2.2

Discretisation en espace

Introduction
On int`gre lquation prcdente ( (III.3.6) ou (III.3.8) ) sur la cellule i de volume i . On transforme les e e e e intgrales de volume en intgrales surfaciques et lon discrtise ces intgrales. Pour simplier lexpos, e e e e e on se place sur une cellule i dont aucune face nest sur le bord du domaine.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 226/277

On obtient alors lquation discr`te suivante1 : e e i n+1 n i i + tn (n+ 2 wn )ij S ij


jV ois(i) jV ois(i)
1

tn (c2 )n grad (n+1 )

ij

S ij = 0

(III.3.9)

Discretisation de la partie convective


La valeur ` la face scrit : a e (n+ 2 wn )ij S ij = ij avec, pour wn , une simple interpolation linaire : e ij wn = ij wn + (1 ij )wn ij i j et un dcentrement sur la valeur de n+ 2 aux faces : e ij
1 n+ 2 1 1 1 n+ 2

wn S ij ij

(III.3.10)

(III.3.11)

= I =

n+ 1 2

si si

n+ 1 J 2

wn S ij ij wn ij

S ij < 0
n+ 1 2

(III.3.12)

que lon peut noter : ij avec ij = 1 si ij = 0 si wn S ij 0 ij wn S ij < 0 ij (III.3.14)


1 n+ 2

= ij I

n+ 1 2

+ (1 ij )J

(III.3.13)

Discretisation de la partie diffusive


La valeur ` la face scrit : a e tn (c2 )n grad (n+1 ) S ij = tn (c2 )n ij n
n+1

ij

Sij
ij

(III.3.15)

avec, pour assurer la continuit du ux normal ` linterface, une interpolation harmonique de (c2 )n : e a (c2 )n = ij (c2 )n (c2 )n i j ij (c2 )n + (1 ij )(c2 )n i j (III.3.16)

et un schma centr pour le gradient normal aux faces : e e n


n+1

=
ij

n+1 n+1 J I IJ

(III.3.17)

` Systeme nal
On obtient maintenant le syst`me nal, portant sur (n+1 )i=1...N : e i i n+1 ( n ) + i tn i
1 Lexposant n+ 1 2

ij
jV ois(i)

n+ 1 2

wn S ij ij
jV ois(i)

tn (c2 )n ij

n+1 n+1 J I Sij = 0 IJ


1

(III.3.18)

signie que le terme peut tre implicite ou explicite. En pratique on a choisi n+ 2 = n . e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 227/277

Remarque : interpolation aux faces pour le terme de diffusion


Le choix de la forme de la moyenne pour le cofacteur du ux normal nest pas sans consquence sur la e vitesse de convergence, surtout lorsque lon est en prsence de fortes inhomognits. e e e e On utilise une interpolation harmonique pour c2 an de conserver la continuit du ux diusif normal e 2 t(c ) a ` linterface ij. En eet, on suppose que le ux est drivable ` linterface. Il doit donc y e a n tre continu. e Ecrivons la continuit du ux normal ` linterface, avec la discrtisation suivante2 : e a e t(c2 ) n = t(c2 )i
ij

ij I J ij = t(c2 )j IF FJ

(III.3.19)

En galant les ux ` gauche et ` droite de linterface, on obtient e a a ij = I F (c2 )j J + F J (c2 )i I I F (c2 )j + F J (c2 )i (III.3.20)

On introduit cette formulation dans la dnition du ux (par exemple, du ux ` gauche) : e a t(c2 ) n = t(c2 )i
ij

ij I IF

(III.3.21)

et on utilise la dnition de (c2 )ij en fonction de ce mme ux e e t(c2 ) n


df e ij

= t(c2 )ij

J I IJ

(III.3.22)

pour obtenir la valeur de (c2 )ij correspondant ` lquation (III.3.16) : a e (c2 )ij = I J (c2 )i (c2 )j F J (c2 )i + I F (c2 )j (III.3.23)

3.3

Mise en uvre

e e e e e Le syst`me (III.3.18) est rsolu par une mthode dincrment et rsidu en utilisant une mthode de e Jacobi pour inverser le syst`me si le terme convectif est implicite et en utilisant une mthode de e e gradient conjugu si le terme convectif est explicite (qui est le cas par dfaut). e e Attention, les valeurs du ux de masse w S et de la viscosit t c2 S aux faces de bord, qui sont e d calcules dans cfmsfl et cfmsvs respectivement, sont modies immdiatement apr`s lappel ` ces souse e e e a programmes. En eet, il est indispensable que la contribution de bord de w t (c2 ) grad S reprsente exactement Qac S. Pour cela, e immdiatement apr`s lappel ` cfmsfl, on remplace la contribution de bord de w S par le ux e e a de masse exact, Qac S, dtermin ` partir des conditions aux limites, e ea puis, immdiatement apr`s lappel ` cfmsvs, on annule la viscosit au bord t (c2 ) pour liminer e e a e e la contribution de t (c2 ) (grad )S (lannulation de la viscosit nest pas problmatique pour e e la matrice, puisquelle porte sur des incrments). e Une fois quon a obtenu n+1 , on peut actualiser le ux de masse acoustique aux faces (Qn+1 )ij S ij , ac qui servira pour la convection des autres variables : (Qn+1 )ij S ij = tn (c2 )n grad (n+1 ) ac
2 On

ij

S ij + n+ 2 wn

ij

S ij

(III.3.24)

ne reconstruit pas les valeurs de t c2 aux points I et J .

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 228/277

Ce calcul de ux est ralis par cfbsc3. Si lon a choisi lalgorithme standard, quation (III.3.6), e e e on compl`te le ux dans cfmsvl immdiatement apr`s lappel ` cfbsc3. En eet, dans ce cas, la e e e a 1 convection est explicite (n+ 2 = n , obtenu en imposant ICONV(ISCA(IRHO(IPHAS)))=0) et le sousprogramme cfbsc3, qui calcule le ux de masse aux faces, ne prend pas en compte la contribution du 1 e a terme n+ 2 wn S. On ajoute donc cette contribution dans cfmsvl, apr`s lappel ` cfbsc3. Au bord, en particulier, cest bien le ux de masse calcul ` partir des conditions aux limites que lon obtient. ea On actualise la pression ` la n de ltape, en utilisant la loi dtat : a e e Pipred = P (n+1 , n ) i i (III.3.25)

3.4

` Points a traiter

Le calcul du ux de masse au bord nest pas enti`rement satisfaisant si la convection est traite de e e mani`re implicite (algorithme non standard, non test, associ ` lquation (III.3.8), correspondant au e e ea e 1 choix n+ 2 = n+1 et obtenu en imposant ICONV(ISCA(IRHO(IPHAS)))=1). En eet, apr`s cfmsfl, il e faut dterminer la vitesse de convection wn pour quapparaisse n+1 wn n au cours de la rsolution e e a par codits. De ce fait, on doit dduire une valeur de wn ` partir de la valeur du ux de masse. Au e bord, en particulier, il faut donc diviser le ux de masse issu des conditions aux limites par la valeur de bord de n+1 . Or, lorsque des conditions de Neumann sont appliques ` la masse volumique, la valeur e a de n+1 au bord nest pas connue avant la rsolution du syst`me. On utilise donc, au lieu de la valeur e e de bord inconnue de n+1 la valeur de bord prise au pas de temps prcdent n . Cette approximation e e est susceptible daecter la valeur du ux de masse au bord.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 229/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 230/277

4- Sous-programme cfqdmv

4.1

Fonction

Pour les notations et lalgorithme dans son ensemble, on se reportera ` cfbase. a Dans le premier pas fractionnaire (cfmsvl), on a rsolu une quation sur la masse volumique, obtenu e e une prdiction de la pression et un ux convectif acoustique. On consid`re ici un second pas frace e tionnaire au cours duquel seul varie le vecteur ux de masse Q = u (seule varie la vitesse au centre des cellules). On rsout lquation de Navier-Stokes indpendamment pour chaque direction despace, e e e et lon utilise le ux de masse acoustique calcul prcdemment comme ux convecteur (on pourrait e e e aussi utiliser le vecteur quantit de mouvement du pas de temps prcdent). De plus, on rsout en e e e e variable u et non Q. Le syst`me ` rsoudre entre t et t est (on exclut la turbulence, dont le traitement na rien de e a e particulier dans le module compressible) :

n+1 = = u + div(u Qac ) + grad P = f v + div(v ) t e = e = en

(III.4.1)

La rsolution de cette tape est similaire ` ltape de prdiction des vitesses du schma de base de e e a e e e Code Saturne.

4.2
4.2.1

Discretisation
Discretisation en temps

On implicite le terme de convection, ventuellement le gradient de pression (suivant la valeur de e IGRDPP, en utilisant la pression prdite lors de ltape acoustique) et le terme en gradient du tenseur e e des contraintes visqueuses. On explicite les autres termes du tenseur des contraintes visqueuses. On implicite les forces volumiques en utilisant n+1 . On obtient alors lquation discr`te suivante : e e (u)n+1 (u)n + div(un+1 Qn+1 ) div(n grad un+1 ) ac tn
2 = n+1 f v grad P + div n t grad un + (n 3 n )divun Id

(III.4.2)

avec P = P n ou P P red suivant la valeur de IGRDPP (P n par dfaut). e En pratique, dans Code Saturne, on rsout cette quation en faisant appara ` gauche lcart un+1 e e tre a e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 231/277

un . Pour cela, on crit la drive en temps discr`te sous la forme suivante : e e e e (u)n+1 (u)n tn n+1 un+1 n un tn n un+1 n un n+1 un+1 n un+1 = + tn tn n n+1 n n+1 n n+1 = u u +u n t tn =

(III.4.3)

et lon utilise alors lquation de la masse discr`te pour crire : e e e (u)n+1 (u)n n = un+1 un un+1 div Qn+1 ac tn tn (III.4.4)

4.2.2

Discretisation en espace

Introduction
On int`gre lquation (III.4.2) sur la cellule i de volume i et on obtient lquation discrtise en e e e e e espace :

i n+1 n+1 ( u i n u n ) + i i tn i i n+1 f v i i

(un+1 Qn+1 )ij S ij ac


jV (i) jV (i)

n grad un+1

ij

S ij (III.4.5)

i (grad P )i +
jV (i)

n t

2 grad u + ( n )divun Id 3
n n

S ij
ij

Discretisation de la partie convective


La valeur ` la face scrit : a e (un+1 Qn+1 )ij S ij = un+1 (Qn+1 )ij S ij ij ac ac avec un dcentrement sur la valeur de un+1 aux faces : e un+1 ij que lon peut noter : un+1 = ij un+1 + (1 ij )un+1 ij i j avec ij = 1 si ij = 0 si (Qn+1 )ij S ij 0 ac (Qn+1 )ij S ij < 0 ac (III.4.8) (III.4.9) = un+1 i = un+1 j si si (Qn+1 )ij S ij 0 ac (Qn+1 )ij S ij < 0 ac (III.4.7) (III.4.6)

Discretisation de la partie diffusive


La valeur ` la face scrit : a e n grad un+1 S = n ij ij ij u n
n+1

Sij
ij

(III.4.10)

avec une interpolation linaire pour n aux faces (en pratique avec ij = 1 ) : e 2 n = ij n + (1 ij )n ij i j (III.4.11)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 232/277

et un schma centr pour le gradient normal aux faces : e e u n


n+1

=
ij

un+1 un+1 J I IJ

(III.4.12)

Discretisation du gradient de pression


On utilise grdcel standard. Suivant la valeur de IMRGRA, cela correspond ` une reconstruction itrative a e ou par moindres carrs. e

Discretisation du reste du tenseur des contraintes visqueuses


On calcule des gradients aux cellules et on utilise une interpolation linaire aux faces (avec, en pratique, e 1 ij = 2 ) : n t grad un + (n 2 n )divun Id 3
ij

S ij = ij n t grad un + (n 2 n )divun Id 3
j

2 +(1 ij ) n t grad un + (n 3 n )divun Id

S ij (III.4.13)

4.3

Mise en uvre

On rsout les trois directions despace du syst`me (III.4.5) successivement et indpendamment : e e e i n+1 n+1 u n+1 ui n+1 () n+1 n+1 n j () n n ij Sij uij () (Qac )ij S ij tn (i ui () i ui () ) + IJ jV (i) jV (i) = i n+1 fv i() i (grad P )i () i 2 Sij () + (n t grad un )ij S ij () + (n n )divun 3 ij jV (i) jV (i) i = 1...N et () = x, y, z (III.4.14) Chaque syst`me associ ` une direction est rsolu par une mthode dincrment et rsidu en utilisant e ea e e e e une mthode de Jacobi. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 233/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 234/277

5- Sous-programme cfxtcl
5.1 Fonction
+ div(Q) = 0 t Q + div(u Q) + grad P = f v + div(v ) t E + div(u(E + P )) = f v u + div(v u) div s + v t en tant que syst`me hyperbolique portant sur la variable vectorielle W = t (, Q, E). e Le syst`me scrit alors : e e W + F (W ) = t xi i i=1
3 3

Pour le traitement des conditions aux limites, on consid`re le syst`me (III.5.1) e e

(III.5.1)

i=1

D F (W , W ) + S xi i

(III.5.2)

o` les F i (W ) sont les vecteurs ux convectifs et les F D (W ) sont les vecteurs ux diusifs dans les u i trois directions despace, et S est un terme source. La dmarche classique de Code Saturne est adopte : on impose les conditions aux limites en dterminant, e e e pour chaque variable, des valeurs numriques de bord. Ces valeurs sont calcules de telle faon que, e e c lorsquon les utilise dans les formules standard donnant les ux discrets, on obtienne les contributions souhaites au bord. e Pour rendre compte des ux convectifs (aux entres et aux sorties en particulier), on fait abstraction des e ux diusifs et des termes sources pour rsoudre un probl`me de Riemann qui fournit un vecteur dtat e e e au bord. Celui-ci permet de calculer un ux, soit directement (par les formules discr`tes standard), e soit en appliquant un schma de Rusanov (schma de ux dcentr). e e e e En paroi, on rsout galement, dans certains cas, un probl`me de Riemann pour dterminer une e e e e pression au bord.

5.2
5.2.1

Discretisation
Introduction

Objectif
On rsume ici les direntes conditions aux limites utilises pour lalgorithme compressible an de e e e fournir une vue densemble. Pour atteindre cet objectif, il est ncessaire de faire rfrence ` des e ee a lments relatifs ` la discrtisation et au mode dimplantation des conditions aux limites. ee a e Lors de limplantation, on a cherch ` prserver la cohrence avec lapproche utilise dans le cadre e a e e e standard de lalgorithme incompressible de Code Saturne. Il est donc conseill davoir pris connaise sance du mode de traitement des conditions aux limites incompressibles avant daborder les dtails de e lalgorithme compressible.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 235/277

Comme pour lalgorithme incompressible, les conditions aux limites sont imposes par le biais dune e valeur de bord associe ` chaque variable. De plus, pour certaines fronti`res (parois ` temprature e a e a e impose ou ` ux thermique impos), on dispose de deux valeurs de bord pour la mme variable, lune e a e e delles tant ddie au calcul du ux diusif. Enn, sur certains types dentre et de sortie, on dnit e e e e e galement une valeur du ux convectif au bord. e Comme pour lalgorithme incompressible, lutilisateur peut dnir, pour chaque face de bord, des e conditions aux limites pour chaque variable, mais on conseille cependant dutiliser uniquement les types prdnis dcrits ci-apr`s (entre, sortie, paroi, symtrie) qui ont lavantage dassurer la cohrence entre e e e e e e e les direntes variables et les direntes tapes de calcul. e e e

Parois
Pression : on doit disposer dune condition pour le calcul du gradient qui intervient dans ltape de e quantit de mouvement. On dispose de deux types de condition, au choix de lutilisateur : e par dfaut, la pression impose au bord est proportionnelle ` la valeur interne (la pression au e e a bord est obtenue comme solution dun probl`me de Riemann sur les quations dEuler avec un e e tat miroir ; on distingue les cas de choc et de dtente et, dans le cas dune dtente trop forte, une e e e condition de Dirichlet homog`ne est utilise pour viter de voir appara une pression ngative), e e e tre e si lutilisateur le souhaite (ICFGRP(IPHAS)=1), le gradient de pression est impos ` partir du e a prol de pression hydrostatique. Vitesse et turbulence : traitement standard (voir la documentation des sous-programmes condli et clptur). Scalaires passifs : traitement standard (ux nul par dfaut impos dans typecl). e e Masse volumique : traitement standard des scalaires (ux nul par dfaut impos dans typecl). e e Energie et temprature1 : traitement standard des scalaires (ux nul par dfaut impos dans e e e typecl), hormis pour le calcul du ux diusif dans le cas de parois ` temprature impose ou ` ux a e e a thermique impos. e Flux diusif pour lnergie en paroi : lutilisateur peut choisir (dans uscfcl) entre une temprature e e de paroi impose et un ux thermique diusif (ou conductif) impos. Sil ne prcise rien, on cone e e sid`re que la paroi est adiabatique (ux thermique diusif impos et de valeur nulle). Dans tous les e e cas, il faut donc disposer dun moyen dimposer le ux diusif souhait. Pour cela, on dtermine e e une valeur de bord pour lnergie qui, introduite dans la formule donnant le ux discret, permettra e dobtenir la contribution attendue (voir le paragraphe 5.2.5). Conformment ` lapproche classique e a de Code Saturne, cette valeur est stocke sous la forme dun couple de coecients (de type COEFAF, e COEFBF). Il est important de souligner que cette valeur de bord ne doit tre utilise que pour le calcul e e du ux diusif : dans les autres situations pour lesquelles une valeur de bord de lnergie ou de la e temprature est requise (calcul de gradient par exemple), on utilise une condition de ux nul (traitee ment standard des scalaires). Pour cela, on dispose dune seconde valeur de bord qui est stocke au e moyen dun couple de coecients (COEFA, COEFB) distinct du prcdent. e e Flux convectifs : le ux de masse dans la direction normale ` la paroi est pris nul. De ce fait, les a ux convectifs seront nuls quelle que soit les valeurs de bord imposes pour les direntes variables e e transportes. e

Symetrie
Les conditions appliques sont les conditions classiques de lalgorithme incompressible (vitesse normale e nulle, ux nul pour les autres variables).
1 Le

gradient de temprature est a priori inutile, mais peut tre requis par lutilisateur. e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 236/277

Elles sont imposes dans le sous-programme typecl essentiellement. Pour la pression, la condition de e ux nul est impose dans cfxtcl (au dbut des dveloppements, on appliquait le mme traitement e e e e quen paroi, mais une condition de ux nul a t prfre an de saranchir des probl`mes potentiels ee eee e dans les congurations 2D).

Entrees et sorties
On obtient, par rsolution dun probl`me de Riemann au bord, complt par des relations de thermoe e ee dynamique (uscfth), des valeurs de bord pour toutes les variables (on suppose quen entre, toutes les e composantes de la vitesse sont fournies ; elles sont supposes nulles par dfaut, hormis pour les entres e e e e a ` (, u) imposs, IERUCF, pour lesquelles il faut fournir la vitesse explicitement). Ces valeurs de bord sont utilises de deux faons : e c elles sont utilises pour calculer les ux convectifs, en faisant appel au schma de Rusanov (sauf e e en sortie supersonique) ; ces ux sont directement intgrs au second membre des quations ` e e e a rsoudre. e elles servent de valeur de Dirichlet dans toutes les autres congurations pour lesquelles une valeur de bord est requise (calcul de ux diusif, calcul de gradient...) Deux cas particuliers : aux entres ou sorties pour lesquelles toutes les variables sont imposes (IESICF), on utilise e e une condition de Neumann homog`ne pour la pression (hormis pour le calcul du gradient intere venant dans lquation de la quantit de mouvement, qui est pris en compte par le ux convectif e e dtermin par le schma de Rusanov). Ce choix est arbitraire (on na pas test le comportement e e e e de lalgorithme si lon conserve une condition de Dirichlet sur la pression), mais a t fait en ee supposant quune condition de Neumann homog`ne serait a priori moins dstabilisante, dans e e la mesure o`, pour ce type de fronti`re, lutilisateur peut imposer une valeur de pression tr`s u e e dirente de celle rgnant ` lintrieur du domaine (la valeur impose est utilise pour le ux e e a e e e convectif). pour les grandeurs turbulentes et les scalaires utilisateur, si le ux de masse est entrant et que lon a fourni une valeur de Dirichlet (RCODCL(*,*,1) dans uscfcl), on lutilise, pour le calcul du ux convectif et du ux diusif ; sinon, on utilise une condition de Neumann homog`ne (le e concept de sortie de type 9 ou 10 est couvert par cette approche).

5.2.2

` Probleme de Riemann au bord

Introduction
On cherche ` obtenir un tat au bord, pour les entres, les sorties et les parois. a e e Pour cela, on fait abstraction des ux diusifs et des sources. Le syst`me rsultant est alors appel e e e syst`me dquations dEuler. On se place de plus dans un rep`re orient suivant la normale au bord e e e e considr ( 1 , 2 , n) et lon ne consid`re que les variations suivant cette normale. Le syst`me devient ee e e donc : W + F (W ) = 0 t n n
3

avec

F n (W ) =
i=1

ni F i (W )

et

= n

ni
i=1

xi

(III.5.3)

Pour dterminer les valeurs des variables au bord, on recherche lvolution du probl`me instationnaire e e e suivant, appel probl`me de Riemann : e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


bord E  n      

Code Saturne documentation Page 237/277

intrieur e Wi tat constant dans la cellule i e

extrieur e W tat constant e

e e avec W dpendant du type de bord et dirent de W i a priori. Pour rsoudre ce probl`me de Riemann, on utilisera les variables non-conservatives W = t (, u, P ) et e e lon retrouvera lnergie grce ` lquation dtat. e a a e e Pour allger lcriture, dans le prsent paragraphe 5.2.2, on notera aussi W le vecteur t (, u, P ) et e e e u = u + u n (en posant u = u n et u = u (u n)n). La solution est une suite dtats constants, dont les valeurs dpendent de W i et W , spars par des e e e e ondes se dplaant ` des vitesses donnes par les valeurs propres du syst`me (i )i=1...5 . On reprsente e c a e e e les caractristiques du syst`me sur le schma suivant : e e e 1 = u c e e Wi bord 2,3,4 = u T n E  W1  e  5 = u + c W2  e  e  e  W e  e Ex t

Comme valeurs des variables au bord, on prendra les valeurs correspondant ` ltat constant qui a e contient le bord (W 1 dans lexemple prcdent). e e Il faut remarquer que la solution du probl`me de Riemann dpend de la thermodynamique et devra e e donc tre calcule et code par lutilisateur si la thermodynamique na pas t prvue (en version 1.2, e e e ee e la seule thermodynamique prvue est celle des gaz parfaits). e

En paroi, pour la condition de pression (sans effet de gravite)


Pour les faces de paroi, on dnit ` lextrieur du domaine un tat miroir W par : e a e e

Wi

i u = i ui Pi

u = u P

= = = =

i u i ui Pi

(III.5.4)

Les solutions dpendent de lorientation de la vitesse dans la cellule de bord : e

1. Si ui

0, la solution est une double dtente symtrique. e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


t

Code Saturne documentation Page 238/277

paroi E T n 1 = u c (< 0) 5 = u + c (> 0) 2,3,4 = 0 ( d d  5 p = 1 = 2 ( 5  d up = u1 = u2 W 1  W 2 (5 W paroi = W 1 = W 2 d  d 5 W Pp = P1 = P2 ( Wi  d  ( 5 ( 5 d  5 d Ex 5 ( La conservation de la vitesse tangentielle ` travers la 1-onde donne u p = u i . Par des cona sidrations de symtrie on trouve up = 0. Puis on obtient p et Pp en crivant la conservation e e e des invariants de Riemann ` travers la 1-dtente : a e 1 i 1 c c c u1 + d = ui p = 1 d = ui + d i 0 0 (III.5.5) s1 = si s(P1 , 1 ) = s(Pi , i ) Pp = P1

2. Si ui > 0, la solution est un double choc symtrique. e paroi E T n 1 = u c (< 0) 5 = u + c (> 0) 2,3,4 = 0 d d  p = 1 = 2 d  up = u1 = u2 W1  W2 W paroi = W 1 = W 2 d  Pp = P1 = P2 d Wi  W  d d  d  Ex t e De mme que prcdemment, on trouve u p = u i et up = 0, puis p et Pp en crivant les e e e relations de saut ` travers le 1-choc : a 1 i (u1 ui )2 = (P1 Pi )(1 i ) p = 1 avec = (P, ) (III.5.6) 21 i (1 i ) = (P1 + Pi )(1 i ) Pp = P1

Pour les gaz parfaits, avec Mi = Cas dtente (Mi e 0) :

ui n (Nombre de Mach de paroi), on a : ci

P =0 p Pp = Pi 1 + 1 Mi 2 p = i Cas choc (Mi > 0) : Pp Pi


1

si
2 1

1+

1 Mi < 0 2

sinon

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 239/277

Pp = Pi

1+

( + 1) 2 Mi + Mi 4

1+

( + 1)2 2 Mi 16

p = i

Pp Pi Pp Pi i (ui n)2

En pratique, le ux convectif normal ` la paroi est nul et seule la condition de pression dtermine a e e ci-dessus est eectivement utilise (pour le calcul du gradient sans eet de gravit). e e

En sortie
Il existe deux cas de traitement des conditions en sortie, selon le nombre de Mach normal ` la face de a bord (ci est la vitesse du son dans la cellule de bord) : Mi = ui u n = i ci ci Mi 1 ui ci 0

Sortie supersonique (condition ISSPCF de uscfcl) : bord 1 = u c ( 0) E T n 2,3,4 = u  W  1  =u+c  W2 5     W   Ex

Wi

W bord = W i

Toutes les caractristiques sont sortantes, on conna donc toutes les conditions au bord : e t b = i u b = u i ub = ui Pb = Pi Sortie subsonique (condition ISOPCF de uscfcl) : 0 bord 2,3,4 = u ( 0) 1 = u c (< 0) t E T n e e W  1 e  W2 5 = u + c Wi  e  e  e  W e  e Ex Mi < 1 (ui

(III.5.7)

0 et ui ci < 0)

W bord = W 1

b = 1 ub = u1 Pb = P1

On a une caractristique entrante, on doit donc imposer une seule condition au bord (en gnral la e e e pression de sortie Pext ).

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 240/277

On conna alors Pb = Pext et u b = u i (par conservation de la vitesse tangentielle ` travers la 1-onde). t a Pour trouver les inconnues manquantes (b et ub ) on doit rsoudre le passage de la 1-onde : e 1. Si Pext Pi , on a une 1-dtente. e

On crit la conservation des invariants de Riemann ` travers la 1-dtente : e a e s1 = si s(Pext , 1 ) = s(Pi , i ) b = 1 1 i 1 c c c u =u u1 + 1 d ub = u1 d = ui + d i i 0 0 2. Si Pext > Pi , on a un 1-choc. On crit les relations de saut ` travers le 1-choc : e a 1 i (u1 ui )2 = (Pext Pi )(1 i ) 21 i ((Pext , 1 ) (Pi , i )) = (Pext + Pi )(1 i )

(III.5.8)

b = 1 ub = u1

(III.5.9)

Pour les gaz parfaits, on a : Cas dtente (Pext e Pi ) : Pb = Pext b = i Cas choc (Pext > Pi ) : Pb = Pext b = i Pext Pi Pext Pi i (ui n ub n)2 = i ( + 1)Pext + ( 1)Pi ( 1)Pext + ( + 1)Pi Pext Pi
1

La valeur de la masse volumique au bord intervient en particulier dans le ux de masse.

En entree
Lutilisateur impose les valeurs quil souhaite pour les variables en entre : e ext u = ext uext Pext

W ext

De mme que prcdemment, il existe deux cas de traitement des conditions en entre, pilots par le e e e e e nombre de Mach entrant, normalement ` la face de bord (avec cext la vitesse du son en entre) : a e Mext = uext u n = ext cext cext

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 241/277

Entre supersonique (condition IESICF de uscfcl) : Mext e bord 5 = u + c ( 0) t E T n e 2,3,4 = u  W 2e  e  1 = u c  e r  rr W 1 e  rr e  r Wi rre  r e

1 uext + cext

W bord = W = W ext

Ex

Toutes les caractristiques sont entrantes, toutes les conditions au bord sont donc imposes par e e lutilisateur. b = ext u b = u ext ub = uext Pb = Pext Entre subsonique (condition IERUCF de uscfcl) : e 1 < Mext 0 (uext 0 et uext + cext > 0)

(III.5.10)

bord 5 = u + c (> 0) E T n  W2   1 = u c W 1  W r  r rr   r rr Wi  r  Ex r 2,3,4 = u ( 0) t

W bord = W 2

b = 2 ub = u2 Pb = P2

On a une caractristique sortante. Lutilisateur doit donc laisser un degr de libert. e e e En gnral, on impose le ux de masse en entre, donc ext et uext , et lon calcule la pression au bord e e e en rsolvant le passage des 14-ondes. On conna aussi u b = u ext , par conservation de la vitesse e t tangentielle ` travers la 5-onde. a 1. Si uext ui , on a une 1-dtente. e

On crit la conservation des invariants de Riemann ` travers la 1-dtente et la conservation de e a e la vitesse et de la pression ` travers le contact : a 1 i c c u1 + d = ui + d 0 0 1 c d = ui uext 1 s1 = si i (III.5.11) s(P2 , 1 ) = s(Pi , i ) Pb = P2 u1 = u2 = uext P1 = P2

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 242/277

2. Si uext < ui , on a un 1-choc. On crit les relations de saut ` travers le 1-choc et la conservation de la vitesse et de la pression e a a ` travers le contact : 1 i (u1 ui )2 = (P1 Pi )(1 i ) 21 i (1 i ) = (P1 + Pi )(1 i ) 1 = (P, ) (III.5.12) Pb = P2 u1 = u2 = uext P1 = P2

Pour les gaz parfaits, on a : Cas dtente (M 0) : e P =0 b Pb = Pi 1 + 1 M 2 b = ext Cas choc (M > 0) : Pb = Pi b = ext 1+ ( + 1) M 2 + M 4 1+ ( + 1)2 M 2 16

si
2 1

1+

1 M < 0 2

sinon

5.2.3

Condition de pression en paroi avec effets de gravite

Le probl`me de Riemann considr prcdemment ne prend pas en compte les eets de la gravit. Or, e ee e e e dans certains cas, si lon ne prend pas en compte le gradient de pression hydrostatique, on peut obtenir une solution errone (en particulier, par exemple, on peut crer une source de quantit de e e e mouvement non physique dans un milieu initialement au repos). Ecrivons lquilibre local dans la maille de bord : e grad P = g (III.5.13)

Pour simplier la rsolution, on peut utiliser la formulation de (III.5.13) en incompressible (cest cette e approche qui a t adopte dans Code Saturne) : ee e (grad P )i = i g ce qui donne Pparoi = Pi + i g (xparoi xi ) (III.5.14)

Une autre approche (dpendante de lquation dtat) consiste ` rsoudre lquilibre local avec la e e e a e e formulation compressible (III.5.13), en supposant de plus que la maille est isentropique : grad P = g (III.5.15) P = P (, si ) Ce qui donne, pour un gaz parfait : Pparoi = Pi 1 i 1+ g (xparoi xi ) Pi
1

(III.5.16)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 243/277

Remarque : la formule issue de lincompressible (III.5.14) est une linarisation de la formule (III.5.16). e Dans les cas courants elle sloigne tr`s peu de la formule exacte. Dans des conditions extrmes, si lon e e e consid`re par exemple de lair ` 1000K et 10bar, avec une acclration de la pesanteur g = 1000m/s2 et e a ee une dirence de hauteur entre le centre de la cellule et le centre de la face de bord de 10m, lexpression e (III.5.16) donne Pparoi = 1034640, 4P a et lexpression (III.5.14) donne Pparoi = 1034644, 7P a, soit une dirence relative de moins de 0, 001%. On voit aussi que la dirence entre la pression calcule au e e e centre de la cellule et celle calcule au bord est de lordre de 3%. e

5.2.4

Schema de Rusanov pour le calcul de ux convectifs au bord

Introduction
Le schma de Rusanov est utilis pour certains types de conditions aux limites an de passer du vecteur e e dtat calcul au bord comme indiqu prcdemment (solution du probl`me de Riemann) ` un ux e e e e e e a convectif de bord (pour la masse, la quantit de mouvement et lnergie). Lutilisation de ce schma e e e (dcentr amont) permet de gagner en stabilit. e e e Le schma de Rusanov est appliqu aux fronti`res auxquelles on consid`re quil est le plus probable e e e e de rencontrer des conditions en accord imparfait avec ltat rgnant dans le domaine, conditions qui e e sont donc susceptibles de dstabiliser le calcul : il sagit des entres et des sorties (fronti`res de type e e e IESICF, ISOPCF, IERUCF, IEQHCF). En sortie supersonique (ISSPCF) cependant, le schma de e Rusanov est inutile et nest donc pas appliqu : en eet, pour ce type de fronti`re, ltat impos au e e e e bord est exactement ltat amont et le dcentrement du schma de Rusanov napporterait donc rien. e e e

Principe
Pour le calcul du ux dcentr de Rusanov, on consid`re le syst`me hyperbolique constitu des seuls e e e e e termes convectifs issus des quations de masse, quantit de mouvement et nergie. Ce syst`me est e e e e et on note u crit, par changement de variable, en non conservatif (on utilise la relation P = e 1 les composantes de u) : t u t P t + div u + u grad 1 P + u grad u + + P divu + u grad P = = = 0 0 0 (III.5.17)

En notant le vecteur dtat W = (, u, P )t , ce syst`me est not : e e e W + div F (W ) = 0 t (III.5.18)

Avec W lincrment temporel du vecteur dtat, n la normale ` une face, ij la face interne partage e e a e par les cellules i et j et ik la face de bord k associe ` la cellule i, la discrtisation spatiale conduit ` : e a e a |i | Wi + t F (W ) n dS +
j V ois(i) Sij kb (i) S bik

F (W ) n dS = 0

(III.5.19)

Sur une face de bord donne, on applique le schma de Rusanov pour calculer le ux comme suit : e e 1 |S bik | F (W ) n dS =
S bik

1 1 F (W i ) + F (W bik ) n bik rus bik W bik W i = F rus bik (W ) 2 2 (III.5.20)

Dans cette relation, W bik est le vecteur dtat W , connu au bord (tel quil rsulte de la rsolution e e e du probl`me de Riemann au bord prsente plus haut pour chaque type de fronti`re considr). e e e e ee

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 244/277

` Parametre de decentrement rus bik


Pour chaque face de bord, le scalaire rus bik est la plus grande valeur du rayon spectral de la matrice F n (W ) jacobienne obtenu pour les vecteurs dtat W i et W bik . e W F n est la composante du ux F dans la direction de la normale ` la face de bord, n bik . Utiliser F n pour a la dtermination du param`tre de dcentrement rus bik rel`ve dune approche classique qui consiste ` e e e e a remplacer le syst`me tridimensionnel initial par le syst`me unidimensionnel projet dans la direction e e e a normale ` la face, en ngligeant les variations du vecteur dtat W dans la direction tangeante ` la a e e face : F n (W ) W W =0 + n t W (III.5.21)

De mani`re plus explicite, si lon se place dans un rep`re de calcul ayant n bik comme vecteur de base, e e et si lon note u la composante de vitesse associe, le syst`me est le suivant (les quations portant e e e sur les composantes transverses de la vitesse sont dcouples, associes ` la valeur propre u, comme le e e e a serait un scalaire simplement convect et ne sont pas crites ci-apr`s) : e e e t u t P t u +u n n u 1 P + u + n n u P + P +u n n +

= = =

0 0 0 (III.5.22)

La matrice jacobienne associe est donc : e u u P 0 1 0

0 0

(III.5.23)

Les valeurs propres sont u et u c (avec c = de dcentrement sen dduit : e e

). Le rayon spectral est donc |u| + c et le param`tre e

rus bik = max (|ui | + ci , |ubik | + cbik )

(III.5.24)

Expression des ux convectifs


Les ux convectifs calculs par le schma de Rusanov pour les variables masse, quantit de mouvement e e e et nergie reprsentent donc la discrtisation des termes suivants : e e e div(Q) div(u Q) + grad P div Q (e + P )

(III.5.25)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 245/277

Pour une face de bord ik adjacente ` la cellule i et avec la valeur prcdente de rus bik , on a : a e e Q n dS
S bik

1 (Qi + Q b ) n bik ik 2

S bik 1 rus bik ( bik i ) S bik 2 + u bik (Q b n bik ) + P bik n bik


ik

(u Q + grad P ) n dS
S bik

1 u (Q n bik ) + Pi n bik 2 i i 1 2

S bik

(e +
S bik

P ) Q n dS

1 rus bik Q b Qi S bik ik 2 Pi Pb (ei + ) (Qi n bik ) + (e bik + ik )(Q b n bik ) S bik ik i bik 1 rus bik ( bik e bik i ei ) S bik 2 (III.5.26)

5.2.5
Rappel

Conditions aux limites pour le ux diffusif denergie

Pour le ux de diusion dnergie, les conditions aux limites sont imposes de mani`re similaire ` ce e e e a qui est dcrit dans la documentation de clptur et de condli. La gure (III.5.1) rappelle quelques e notations usuelles et lquation (III.5.27) traduit la conservation du ux normal au bord pour la variable e f.
Bord du domaine de calcul

Sb Domaine de calcul I I y fI F f b,int


Coefficients dechange h int h b

himp,ext

Figure III.5.1: Cellule de bord.

hint (fb,int fI ) = hb (fb,ext fI ) =


int b

himp,ext (fimp,ext fb,ext ) (condition de Dirichlet)


rel e
impos e

imp,ext
rel e

impos e

fb,ext

n normale sortante de norme 1 fimp,ext

(condition de Neumann) (III.5.27)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 246/277

Lquation (III.5.28) rappelle la formulation des conditions aux limites pour une variable f . e himp,ext hint + hr himp,ext = 1 hint fimp,ext imp,ext + +
2

fb,int

hint + himp,ext (hr 1) hint + hr himp,ext

fI fI

(condition de Dirichlet) (condition de Neumann) (III.5.28)

Les coecients dchange sont dnis comme e e hint = hr = h = b

suit : IF hint hb

(III.5.29)

C uk b = + fb,ext fI fI

Dans Code Saturne, on note les conditions aux limites de mani`re gnrale sous la forme suivante : e e e fb,int = Ab + Bb fI avec Ab et Bb dnis selon le type des conditions : e himp,ext Ab = fimp,ext hint + hr himp,ext Dirichlet B = hint + himp,ext (hr 1) b hint + hr himp,ext (III.5.30)

Neumann

Ab =

1 hint 1

imp,ext

(III.5.31)

B = b

Flux diffusif denergie


Dans le module compressible, on rsout une quation sur lnergie, qui scrit, si lon excepte tous les e e e e termes hormis le ux de diusion et le terme instationnaire, pour faciliter la prsentation : e e t = div s = = div(K grad T ) avec div K grad e
1 2

K = + Cp

u2 sup Cv K 1 2 = div grad (e u sup ) Cv 2 K K = div grad e div grad Cv Cv

t t (III.5.32)

si

Cv est constant

1 ( u2 + sup ) 2

La dcomposition en e et 1 u2 + sup est purement mathmatique (elle rsulte du fait que lon rsout e e e e 2 en nergie alors que le ux thermique sexprime en fonction de la temprature). Aussi, pour imposer e e un ux de bord ou une temprature de bord (ce qui revient au mme puisque lon impose toujours e e nalement la conservation du ux normal), on choisit de reporter la totalit de la condition ` la limite e a K K 1 2 sur le terme grad e et donc dannuler le ux associ au terme e grad ( u + sup ) (en pratique, Cv Cv 2 pour lannuler, on se contente de ne pas lajouter au second membre de lquation). Conformment e e a ` lapproche retenue dans Code Saturne et rappele prcdemment, on dterminera donc une valeur e e e e
rappelle que, comme dans condli, dsigne + Cp t si f est la temprature, C + t si f reprsente e e e t t p lenthalpie. Le coecient C reprsente Cp pour la temprature et vaut 1 pour lenthalpie. La grandeur adimensionnelle e e f + est obtenue par application dun principe de similitude en paroi : pour la temprature, elle dpend du nombre de e e Prandlt molculaire, du nombre de Prandtl turbulent et de la distance adimensionnelle ` la paroi y + dans la cellule de e a bord. 2 On

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 247/277

de bord ctive de lnergie qui permette de reconstruire le ux diusif total attendu ` partir de la e a K discrtisation du seul terme e grad e. Cv Remarque : dans la version 1.2.0, on utilise K = Cv t + , ` partir de 1.2.1, on utilise la valeur a Cv t

Cp t K = + . On notera que le nombre de Prandtl turbulent t est associ ` la variable e a Cv Cv Cv t rsolue et peut tre x par lutilisateur. e e e

Condition de Neumann
La conservation du ux scrit : e hint (eb,int eI ) = imp,ext
int rel e
impos e

(III.5.33)

On a donc dans ce cas :

Ab

= =

1 hint 1

imp,ext

(III.5.34)

B b

Condition de Dirichlet
On suppose que la condition de Dirichlet porte sur la temprature Tb,ext . e La conservation du ux scrit : e hint (eb,int eI )
int (forme numrique du ux) e

hb (Tb,ext TI )
b qui int`gre leet de couche limite e

= himp,ext (Timp,ext Tb,ext )


rel e
impos e

(III.5.35)

Avec pour les coecients dchange : e hint h b

= =

K Cv I F b Cp uk = + Tb,ext TI TI

(III.5.36)

On tire Tb,ext de la seconde partie de lgalit (III.5.35) traduisant la conservation du ux : e e Tb,ext = himp,ext Timp,ext + hb TI hb + himp,ext (III.5.37)

En utilisant cette valeur et la premi`re partie de lquation de conservation du ux (III.5.35), on e e obtient : hb himp,ext eb,int = (Timp,ext TI ) + eI (III.5.38) hint (hb + himp,ext ) On utilise alors TI = sup ) : eb,int =
hb himp,ext Cv

1 Cv

1 eI u2 sup,i 2 i

pour crire (sans reconstruction pour la vitesse et e

+ hint (hb + himp,ext )

hint (hb + himp,ext )

eI +

hb himp,ext hint (hb + himp,ext )

Timp,ext +

1 2 2 ui

+ sup,i Cv (III.5.39)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


hint
hb Cv

Code Saturne documentation Page 248/277

Et on a donc, avec hr =

: Cv hint + himp,ext (hr 1) 1 Cv Timp,ext + u2 + sup,i + eI i 2 Cv hint + hr himp,ext


Ab Bb

eb,int =

himp,ext Cv hint + hr himp,ext

(III.5.40) Avec ces notations, hb est le coecient habituellement calcul pour la temprature. e e Le coecient himp,ext est le coecient dchange externe qui est impos pour la temprature3 . Pour e e e obtenir lquivalent dimensionnel de himp,ext pour lnergie, il faut diviser sa valeur par Cv (ce qui ne e e fait pas de dirence dans la majorit des cas, car il est habituellement pris inni). e e

5.3
5.3.1

Mise en uvre
Introduction

Les conditions aux limites sont imposes par une suite de sous-programmes, dans la mesure o` lon a e u cherch ` rester cohrent avec la structure standard de Code Saturne. ea e Dans ppprcl (appel par precli), on initialise les tableaux avant le calcul des conditions aux limites : e IZFPPP (numro de zone, inutilis, x ` zro), e e ea e IA(IIFBRU) (reprage des faces de bord pour lesquelles on applique un schma de Rusanov : e e initialis ` zro, on imposera la valeur 1 dans cfrusb pour les faces auxquelles on applique le ea e schma de Rusanov) e IA(IIFBET) (reprage des faces de paroi ` temprature ou ` ux thermique impos : initialis ` e a e a e ea 0, on imposera la valeur 1 dans cfxtcl lorsque la temprature ou le ux est impos), e e RCODCL(*,*,1) (initialis ` -RINFIN en prvision du traitement des sorties rentrantes pour e a e e lesquelles lutilisateur aurait fourni une valeur ` imposer en Dirichlet), a ux convectifs de bord pour la quantit de mouvement et lnergie (initialiss ` zro). e e e a e

Les types de fronti`re (ITYPFB) et les valeurs ncessaires (ICODCL, RCODCL) sont imposs par lutilisateur e e e dans uscfcl. On convertit ensuite ces donnes dans condli pour quelles soient directement utilisables lors du calcul e des matrices et des seconds membres. Pour cela, cfxtcl permet de raliser le calcul des valeurs de bord et, pour certaines fronti`res, des ux e e convectifs. On fait appel, en particulier, ` uscfth (utilisation de la thermodynamique) et ` cfrusb a a (ux convectifs par le schma de Rusanov). Lors de ces calculs, on utilise COEFA et COEFB comme e tableaux de travail (transmission de valeurs ` uscfth en particulier) an de renseigner ICODCL et a RCODCL. Apr`s cfxtcl, le sous-programme typecl compl`te quelques valeurs par dfaut de ICODCL et e e e de RCODCL, en particulier pour les scalaires passifs. Apr`s cfxtcl et typecl, les tableaux ICODCL et RCODCL sont complets. Ils sont utiliss dans la suite e e de condli et en particulier dans clptur pour construire les tableaux COEFA et COEFB (pour lnergie, e on dispose de deux couples (COEFA, COEFB) an de traiter les parois).
3 Le coecient h u a e imp,ext est utile pour les cas o` lon souhaite relaxer la condition ` la limite : pour la temprature, cela correspond ` imposer une valeur sur la face externe dune paroi unidimensionnelle idale, sans inertie, caractrise a e e e par un simple coecient dchange. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 249/277

On prsente ci-apr`s les points dont limplantation di`re de lapproche standard. Il sagit de lutilisation e e e dun schma de Rusanov pour le calcul des ux convectifs en entre et sortie (hormis sortie supersone e ique) et du mode de calcul des ux diusifs dnergie en paroi. On insiste en particulier sur limpact e des conditions aux limites sur la construction des seconds membres de lquation de la quantit de e e mouvement et de lquation de lnergie (cfqdmv et cfener). e e

5.3.2

Flux de Rusanov pour le calcul des ux convectifs en entree et sortie

Le schma de Rusanov est utilis pour calculer des ux convectifs de bord (masse, quantit de mouvee e e ment et nergie) aux entres et des sorties de type IESICF, ISOPCF, IERUCF, IEQHCF. e e La gestion des conditions aux limites est dirente de celle adopte classiquement dans Code Saturne, e e bien que lon se soit eorc de sy conformer le mieux possible. e En volumes nis, il faut disposer de conditions aux limites pour trois utilisations principales au moins : imposer les ux de convection, imposer les ux de diusion, calculer les gradients pour les reconstructions. Dans lapproche standard de Code Saturne, les conditions aux limites sont dnies par variable et non e pas par terme discret4 . On dispose donc, pour chaque variable, dune valeur de bord dont devront tre e dduits les ux de convection, les ux de diusion et les gradients5 . Ici, avec lutilisation dun schma e e de Rusanov, dans lequel le ux convectif est trait dans son ensemble, il est impratif de disposer dun e e moyen dimposer directement sa valeur au bord6 . Le ux convectif calcul par le schma de Rusanov sera ajout directement au second membre des e e e quations de masse, de quantit de mouvement et dnergie. Comme ce ux contient, outre la cone e e tribution des termes convectifs usuels (div(Q), div(u Q) et div(Q e)), celle des termes en grad P (quantit de mouvement) et div(Q P ) (nergie), il faut veiller ` ne pas ajouter une seconde fois les tere e a mes de bord issus de grad P et de div(Q P ) au second membre des quations de quantit de mouvement e e et dnergie. e Pour la masse, le ux convectif calcul par le schma de Rusanov dnit simplement le ux de masse e e e au bord (PROPFB(IFAC,IPPROB(IFLUMA(ISCA(IENERG(IPHAS)))))).

Pour la quantit de mouvement, le ux convectif calcul par le schma de Rusanov est stock dans les e e e e tableaux PROPFB(IFAC,IPPROB(IFBRHU(IPHAS))), PROPFB(IFAC,IPPROB(IFBRHV(IPHAS))) et PROPFB(IFAC,IPPROB Il est ensuite ajout au second membre de lquation directement dans cfqdmv (boucle sur les faces e e de bord). Comme ce ux contient la contribution du terme convectif usuel div(u Q), il ne faut pas lajouter dans le sous-programme cfbsc2. De plus, le ux convectif calcul par le schma de Rusanov e e contient la contribution du gradient de pression. Or, le gradient de pression est calcul dans cfqdmv e au moyen de grdcel et ajout au second membre sous forme de contribution volumique (par cellule) : e il faut donc retirer la contribution des faces de bord auxquelles est appliqu le schma de Rusanov, e e pour ne pas la compter deux fois (cette opration est ralise dans cfqdmv). e e e

Pour lnergie, le ux convectif calcul par le schma de Rusanov est stock dans le tableau PROPFB(IFAC,IPPROB(IFBE e e e e Pour les faces auxquelles nest pas appliqu le schma de Rusanov, on ajoute la contribution du terme e e
4 Par exemple, pour un scalaire convect et dius, on dnit une valeur de bord unique pour le scalaire et non pas e e e une valeur de bord pour le ux convectif et une valeur de bord pour le ux diusif. 5 Nanmoins, pour certaines variables comme la vitesse par exemple, Code Saturne dispose de deux valeurs de bord (et e non pas dune seule) an de pouvoir imposer de mani`re indpendante le gradient normal et le ux de diusion. e e 6 Il serait possible de calculer une valeur de bord ctive des variables dtat qui permette de retrouver le ux convectif e calcul par le schma de Rusanov, mais cette valeur ne permettrait pas dobtenir un ux de diusion et un gradient e e satisfaisants.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 250/277

de transport de pression div(Q P ) au second membre de lquation dans cfener et on compl`te le e e second membre dans cfbsc2 avec la contribution du terme convectif usuel div(Q e). Pour les faces auxquelles est appliqu le schma de Rusanov, on ajoute directement le ux de Rusanov au second e e membre de lquation dans cfener, en lieu et place de la contribution du terme de transport de prese sion et lon prend garde de ne pas comptabiliser une seconde fois le ux convectif usuel div(Q e) dans le sous-programme cfbsc2. Cest lindicateur IA(IIFBRU) (renseign dans cfrusb) qui permet, dans cfbsc2, cfqdmv et cfener, e de reprer les faces de bord pour lesquelles on a calcul un ux convectif avec le schma de Rusanov. e e e

5.3.3

Flux diffusif denergie

Introduction
Une condition doit tre fournie sur toutes les fronti`res pour le calcul du ux diusif dnergie. e e e Il ny a pas lieu de stendre particuli`rement sur le traitement de certaines fronti`res. Ainsi, aux e e e entres et sorties, on dispose dune valeur de bord (issue de la rsolution du probl`me de Riemann) e e e que lon utilise dans la formule discr`te classique donnant le ux7 . La situation est simple aux symtries e e galement, o` un ux nul est impos. e u e Par contre, en paroi, les conditions de temprature ou de ux thermique impos doivent tre traites e e e e avec plus dattention, en particulier lorsquune couche limite turbulente est prsente. e

Coexistence de deux conditions de bord


Comme indiqu dans la partie discrtisation, les conditions de temprature ou de ux conductif e e e K grad e , en imposant impos en paroi se traduisent, pour le ux dnergie, au travers du terme div e e Cv K 1 e une condition de ux nul sur le terme div grad ( u2 + sup ) . Les faces IFAC concernes sont Cv 2 repres dans cfxtcl par lindicateur IA(IIFBET+IFAC-1+(IPHAS-1)*NFABOR) = 1 (qui vaut 0 sinon, ee initialis dans ppprcl). e Sur ces faces, on calcule une valeur de bord de lnergie, qui, introduite dans la formule gnrale de e e e ux utilise au bord dans Code Saturne, permettra de retouver le ux souhait. La valeur de bord est e e une simple valeur numrique sans signication physique et ne doit tre utilise que pour calculer le e e e ux diusif. En plus de cette valeur de bord destine ` retrouver le ux diusif, il est ncessaire de disposer dune e a e seconde valeur de bord de lnergie an de pouvoir en calculer le gradient. e Ainsi, comme pour la vitesse en k , il est ncessaire de disposer pour lnergie de deux couples e e de coecients (COEFA,COEFB), correspondant ` deux valeurs de bord distinctes, dont lune est utilise a e pour le calcul du ux diusif spciquement. e

` Calcul des COEFA et COEFB pour les faces de paroi a temperature imposee
Les faces de paroi IFAC ` temprature impose sont identifes par lutilisateur dans uscfcl au moyen de a e e e lindicateur ICODCL(IFAC,ISCA(ITEMPK(IPHAS)))=5 (noter que ce tableau est associ ` la temprature). ea e Dans cfxtcl, on impose alors ICODCL(IFAC,ISCA(IENERG(IPHAS)))=5 et on calcule la quantit Cv Timp,ext + e 1 2 uI + sup,I , que lon stocke dans RCODCL(IFAC,ISCA(IENERG(IPHAS)),1) (on ne reconstruit pas les 2 valeurs de u2 et sup au bord, cf. 5.4).
valeurs de u2 et de sup ne sont pas reconstruites pour le calcul du gradient au bord dans K 1 div grad ( u2 + sup ) Cv 2
7 Les

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 251/277

` A partir de ces valeurs de ICODCL et RCODCL, on renseigne ensuite dans clptur les tableaux de conditions aux limites permettant le calcul du ux : COEFA(*,ICLRTP(ISCA(IENERG(IPHAS)),ICOEFF)) et COEFB(*,ICLRTP(ISCA(IENERG(IPHAS)),ICOEFF)) (noter lindicateur ICOEFF qui renvoie aux coecients ddis au ux diusif). e e

` Calcul des COEFA et COEFB pour les faces de paroi a ux thermique impose
Les faces de paroi IFAC ` ux thermique impos sont identifes par lutilisateur dans uscfcl au a e e moyen de lindicateur ICODCL(IFAC,ISCA(ITEMPK(IPHAS)))=3 (noter que le tableau est associ ` la ea temprature). e Dans cfxtcl, on impose alors ICODCL(IFAC,ISCA(IENERG(IPHAS)))=3 et on transf`re la valeur du e ux de RCODCL(IFAC,ISCA(ITEMPK(IPHAS)),3) ` RCODCL(IFAC,ISCA(IENERG(IPHAS)),3). a ` A partir de ces valeurs de ICODCL et RCODCL, on renseigne ensuite dans condli les tableaux de conditions aux limites permettant le calcul du ux, COEFA(*,ICLRTP(ISCA(IENERG(IPHAS)),ICOEFF)) et COEFB(*,ICLRTP(ISCA(IENERG(IPHAS)),ICOEFF)) (noter lindicateur ICOEFF qui renvoie aux coecients ddis au ux diusif). e e

` ` Gradient de lenergie en paroi a temperature ou a ux thermique impose

Dans les deux cas (paroi ` temprature ou ` ux thermique impos), on utilise les tableaux COEFA(*,ICLRTP(ISCA(II) a e a e COEFB(*,ICLRTP(ISCA(II),ICOEF)) (noter le ICOEF) pour disposer dune condition de ux nul pour lnergie (avec II=IENERG(IPHAS)) et pour la temprature (avec II=ITEMPK(IPHAS)) si un calcul de e e gradient est requis. Un gradient est en particulier utile pour les reconstructions de lnergie sur maillage non orthogonal. e Pour la temprature, il sagit dune prcaution, au cas o` lutilisateur aurait besoin den calculer le e e u gradient.

` ` ` Autres frontieres que les parois a temperature ou a ux thermique impose


Pour les fronti`res qui ne sont pas des parois ` temprature ou ` ux thermique impos, les conditions e a e a e aux limites de lnergie et de la temprature sont compltes classiquement dans condli selon les choix e e ee faits dans cfxtcl pour ICODCL et RCODCL. En particulier, dans le cas de conditions de Dirichlet sur lnergie (entres, sorties), les deux jeux de e e conditions aux limites sont identiques (tableaux COEFA, COEFB avec ICOEFF et ICOEF). Si un ux est impos pour lnergie totale (condition assez rare, lutilisateur ne raisonnant pas, e e dordinaire, en nergie totale), on le stocke au moyen de COEFA(*,ICLRTP(ISCA(IENERG(IPHAS)),ICOEFF)) e et COEFB(*,ICLRTP(ISCA(IENERG(IPHAS)),ICOEFF)) (tableaux associs au ux diusif). Pour le grae dient, une condition de ux nul est stocke dans COEFA(*,ICLRTP(ISCA(IENERG(IPHAS)),ICOEF)) et e COEFB(*,ICLRTP(ISCA(IENERG(IPHAS)),ICOEF)). On peut remarquer que les deux jeux de conditions aux limites sont identiques pour les faces de symtrie. e

Impact dans cfener


Lors de la construction des seconds membres, dans cfener, on utilise les conditions aux limites stockes dans les tableaux associs au ux diusif COEFA(*,ICLRTP(ISCA(IENERG(IPHAS)),ICOEFF)) e e K grad e et COEFB(*,ICLRTP(ISCA(IENERG(IPHAS)),ICOEFF)) pour le terme de ux diusif div Cv K 1 en prenant soin dannuler la contribution de bord du terme div grad ( u2 + sup ) sur les faces Cv 2 pour lesquelles cette condition prend les deux termes en compte, cest-`-dire sur les faces pour lesquelles a IA(IIFBET+IFAC-1+(IPHAS-1)*NFABOR) = 1.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 252/277

Pour tous les autres termes qui requi`rent une valeur de bord, on utilise les conditions aux limites e que lon a stockes au moyen des deux tableaux COEFA(*,ICLRTP(ISCA(IENERG(IPHAS)),ICOEF)) et e COEFB(*,ICLRTP(ISCA(IENERG(IPHAS)),ICOEF)). Ces conditions sont donc en particulier utilises e pour le calcul du gradient de lnergie, lors des reconstructions sur maillage non orthogonal. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 253/277

5.4

` Points a traiter

Apporter un complment de test sur une cavit ferme sans vitesse et sans gravit, avec ux de bord e e e e ou temprature de bord impose. Il semble que le transfert dnergie via les termes de pression gn`re e e e e e de fortes vitesses non physiques dans la premi`re maille de paroi et que la conduction thermique ne e parvienne pas ` tablir le prol de temprature recherch. Il est galement possible que la condition ae e e e de bord sur la pression gn`re une perturbation (une extrapolation pourrait se rvler indispensable). e e e e Il pourrait tre utile de gnraliser ` lincompressible lapproche utilise en compressible pour unier e e e a e simplement le traitement des sorties de type 9 et 10. Il pourrait tre utile dtudier plus en dtail linuence de la non orthogonalit des mailles en sortie e e e e supersonique (pas de reconstruction, ce qui nest pas consistant pour les ux de diusion). De mme, il serait utile dtudier linuence de labsence de reconstruction pour la vitesse et sup dans e e 1 1 eI u2 sup,i utilise pour les parois ` temprature impose. e a e e la relation TI = Cv 2 i Apporter un complment de documentation pour le couplage avec SYRTHES (conversion nergie e e temprature). Ce nest pas une priorit. e e Pour les thermodynamiques ` variable, il sera ncessaire de modier non seulement uscfth mais a e galement cfrusb qui doit disposer de en argument. e Pour les thermodynamiques ` Cv variable, il sera ncessaire de prendre en compte un terme en grad Cv , a e issu des ux diusifs, au second membre de lquation de lnergie (on pourra cependant remarquer e e quactuellement, en incompressible, on nglige le terme en grad Cp dans lquation de lenthalpie). e e

Part IV

Module lectrique e

254

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 255/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 256/277

1- Sous-programme elec**

On sintresse ` la rsolution des quations de la magntohydrodynamique, constitues de la runion e a e e e e e des quations de larothermodynamique et des quations de Maxwell. e e e On se place dans deux cadres dutilisation bien spciques et distincts, qui permettront chacun de e raliser des simplications : les tudes dites darc lectrique (dans lesquelles sont prises en compte e e e les forces de Laplace et leet Joule) et les tudes dites Joule (dans lesquelles seul leet Joule est e pris en compte). Les tudes darc lectrique sont associes en grande partie, pour EDF, aux problmatiques relatives e e e e aux transformateurs. Les tudes Joule sont plus sciquement lies aux phnom`nes rencontrs dans e e e e e e les fours verriers. Outre la prise en compte ou non des forces de Laplace, ces deux types dtudes se direncient galement e e e par le mode de dtermination de leet Joule (utilisation dun potentiel complexe pour les tudes Joule e e faisant intervenir un courant alternatif non monophas). e On dcrit tout dabord les quations rsolues pour les tudes darc lectrique. Les spcicits des e e e e e e e tudes Joule seront abordes ensuite. e e Pour larc lectrique, les rfrences [douce] et [delalondre] pourront complter la prsentation : e ee e e [delalondre] Delalondre, Clarisse : Modlisation arothermodynamique darcs lectriques ` forte e e e a intensit avec prise en compte du dsquilibre thermodynamique local et du transfert thermique ` la e ee a cathode, Th`se de lUniversit de Rouen, 1990 e e [douce] Douce, Alexandre : Modlisation 3-D du chauage dun bain mtallique par plasma darc e e transfr. Application ` un racteur axisymtrique, HE-26/99/027A, HE-44/99/043A, Th`se de ee a e e e lEcole Centrale Paris et EDF, 1999

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 257/277

1.1
1.1.1

Fonction
Notations
potentiel vecteur rel e champ magntique e dplacement lectrique e e champ lectrique e nergie totale massique e nergie interne massique e nergie cintique massique e e excitation magntique e enthalpie massique densit de courant e pression potentiel scalaire rel, imaginaire e vitesse permittivit lectrique ee permittivit lectrique du vide ee permabilit lectrique e ee permabilit lectrique du vide e ee conductivit lectrique ee kg m s2 A1 T (ou kg s2 A1 ) A s m2 V m1 J kg 1 (ou m2 s2 ) J kg 1 (ou m2 s2 ) J kg 1 (ou m2 s2 ) A m1 J kg 1 (ou m2 s2 ) A m2 kg m1 s2 V (ou kg m2 s3 A1 ) m s1 F m1 (ou m3 kg 1 s4 A2 ) 8, 854 1012 F m1 (ou m3 kg 1 s4 A2 ) H m1 (ou m kg s2 A2 ) 4 107 H m1 (ou m kg s2 A2 ) S m1 (ou m3 kg 1 s3 A2 )

Variables utilises e A B D E E e ec H h j P PR , PI u 0 0

Notations danalyse vectorielle On rappelle galement la dnition des notations employes1 : e e e grad a ij = j ai div() = j ij [a b] i = a b i j ij et donc : [div(a b)]i = j (ai bj )

1.1.2

Arcs electriques

Introduction
Pour les tudes darc lectrique, on calcule, ` un pas de temps donn : e e a e la vitesse u, la pression P , la variable nergtique enthalpie h (et les grandeurs turbulentes), e e un potentiel scalaire rel PR (dont le gradient permet dobtenir le champ lectrique E et la e e densit de courant j), e un potentiel vecteur rel A (dont le rotationnel permet dobtenir le champ magntique B). e e

Le champ lectrique, la densit de courant et le champ magntique sont utiliss pour calculer les e e e e termes sources deet Joule et les forces de Laplace qui interviennent respectivement dans lquation e de lenthalpie et dans celle de la quantit de mouvement. e
1 en

utilisant la convention de sommation dEinstein.

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 258/277

Equations continues
Syst`me dquations e e Les quations continues qui sont rsolues sont les suivantes : e e div(u) = 0 t (u) + div( u u) = div() + T S + j B t + grad h + PJ t (h) + div( uh) = v div Cp t div( grad P ) = 0 R div(grad A) = 0 j avec les relations suivantes : PJ = j E E = grad PR j = E

(IV.1.1)

(IV.1.2)

Equation de la masse Cest lquation rsolue en standard par Code Saturne (contrainte stationnaire). Elle na pas de traitee e ment particulier dans le cadre du module prsent. Un terme source de masse peut tre pris en compte e e au second membre si lutilisateur le souhaite. Pour simplier lexpos le terme source sera suppos nul e e ici, dans la mesure o` il nest pas spcique au module lectrique. u e e Equation de la quantit de mouvement e Elle prsente, par rapport ` lquation standard rsolue par Code Saturne, un seul terme additionnel e a e e (j B) qui rend compte des forces de Laplace. Pour lobtenir, on fait lhypoth`se que le milieu est e lectriquement neutre. e En eet, une charge qi (Coulomb) anime dune vitesse v i subit, sous leet du champ lectrique E e e (V m1 ) et du champ magntique B (Tesla), une force f i (kg m s2 ) : e f i = qi (E + v i B) (IV.1.3)

Avec ni charges de type qi par unit de volume et en sommant sur tous les types de charge i (lectrons, e e ions, molcules ionises...), on obtient la force de Laplace totale F L (kg m2 s2 ) subie par unit de e e e volume : FL = [ni qi (E + v i B)] (IV.1.4)
i

On introduit alors la densit de courant j (A m2 ) : e j=


i

ni q i v i

(IV.1.5)

Avec lhypoth`se que le milieu est lectriquement neutre (` un niveau macroscopique) : e e a ni q i = 0


i

(IV.1.6)

la force totale F L scrit alors : e FL = j B et on peut donc crire lquation de la quantit de mouvement : e e e (u) + div( u u) = div() + T S + j B t (IV.1.8) (IV.1.7)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 259/277

Equation de lenthalpie Elle est obtenue ` partir de lquation de lnergie apr`s plusieurs approximations utilises en standard a e e e e dans Code Saturne et en prenant en compte le terme deet Joule li ` lnergie lectromagntique. ea e e e Energie lectromagntique e e Avec les mmes notations que prcdemment mais sans quil soit besoin de supposer que le milieu est e e e lectriquement neutre, la puissance reue par une charge qi (particule doue de masse) de vitesse v i e c e (vitesse du porteur de charge, contenant ventuellement leet de la vitesse du uide) sous leet du e champ lectrique E (V m1 ) et du champ magntique B (T ) est (sans sommation sur i) : e e Pi = f i v i = qi (E + v i B) v i = qi v i E (IV.1.9)

Avec ni charges par unit de volume et en sommant sur tous les types de charges i, on obtient la e puissance totale par unit de volume : e PJ =
i

ni q i v i E

(IV.1.10)

On introduit alors la densit de courant j = e


i

ni qi v i (en A m2 ) et on obtient lexpression usuelle

de la puissance lectromagntique dissipe par eet Joule (en W m3 ) : e e e PJ = j E (IV.1.11)

Pour reformuler la puissance dissipe par eet Joule et obtenir une quation dvolution de lnergie e e e e lectromagntique, on utilise alors les quations de Maxwell. Les quations scrivent (lois dAmp`re e e e e e e et de Faraday) : D rot H = j t (IV.1.12) B + rot E = 0 t On a donc : PJ = j E = On utilise alors la relation suivante : rot H E = H rot E div(E H) (IV.1.14) D + rot H t E (IV.1.13)

En eet, elle permet de faire appara un terme en divergence, caractristique dune redistribution tre e spatiale : D (IV.1.15) jE = E + H rot E div(E H) t Et en utilisant la loi de Faraday pour faire appara la drive en temps du champ magntique : tre e e e jE = D B EH div(E H) t t (IV.1.16)

Dans le cadre de Code Saturne, on fait les hypoth`ses suivantes : e la permabilit et la permittivit sont constantes et uniformes (pour les gaz, en pratique, on e e e utilise les proprits du vide 0 et 0 ). ee on utilise B = H et D = E

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 260/277

On a alors : jE Energie totale On tablit lquation de lnergie totale en prenant en compte la puissance des forces de Laplace et le e e e terme deet Joule. Sans prendre en compte lnergie lectromagntique, le premier principe de la thermodynamique scrit e e e e dordinaire sous la forme suivante (pour un volume matriel suivi sur une unit de temps) : e e d
V

0 E 2 1 B 2 1 div(E B) 2 t 2 0 t 0

(IV.1.17)

EdV = Q + W

(IV.1.18)

Dans cette relation, E est lnergie totale par unit de masse2 , soit E = e + ec , e tant lnergie interne e e e e 1 e e e c massique et ec = 2 uu lnergie cintique massique. Le terme Q reprsente la chaleur reue au travers des fronti`res du domaine considr tandis que le terme W reprsente le travail des forces extrieures e ee e e reu par le syst`me (y compris les forces drivant dune nergie potentielle). c e e e Pour prendre en compte lnergie lectromagntique, il sut dintgrer ` la relation (IV.1.18) la puise e e e a sance des forces de Laplace (j B)u et le terme deet Joule j E (transformation volumique dnergie e lectromagntique en nergie totale3 ). Dans cette relation, la vitesse u est la vitesse du uide et non e e e pas celle des porteurs de charge : elle nest donc pas ncessairement coliaire au vecteur j (par exemple, e e si le courant est d ` des lectrons, la vitesse du uide pourra tre considre comme dcorrle de la ua e e ee e ee vitesse des porteurs de charges ; par contre, si le courant est d ` des ions, la vitesse du uide pourra ua tre plus directement inuence par le dplacement des porteurs de charge). Ainsi, le premier principe e e e de la thermodynamique scrit : e d
V

EdV = Q + W + j E V dt + (j B) u V dt

(IV.1.19)

et lquation locale pour lnergie totale est alors : e e (E) + div( uE) = div( u) + T S u + (j B) u + v divs + j E t (IV.1.20)

Le terme v reprsente les termes sources volumiques dnergie autres que leet Joule (par exemple, e e il inclut le terme source de rayonnement, pour un milieu optiquement non transparent). Le terme s est le ux dnergie surfacique4 . e Enthalpie Pour obtenir une quation sur lenthalpie, qui est la variable nergtique choisie dans Code Saturne e e e dans le module lectrique, on soustrait tout dabord ` lquation de lnergie totale celle de lnergie e a e e e cintique pour obtenir une quation sur lnergie interne. e e e Lquation de lnergie cintique (obtenue ` partir de lquation de la quantit de mouvement crite e e e a e e e sous forme non conservative) est : (ec ) + div( uec ) = div( u) : grad (u) t de sorte que, pour lnergie interne, on a : e (e) + div( ue) = : grad (u) t
2 Ne 3 Le

+ T S u + (j B) u

(IV.1.21)

+ v divs + j E

(IV.1.22)

pas confondre le scalaire E, nergie totale, avec le vecteur E, champ lectrique. e e 1 terme en divergence div(E B) traduit une redistribution spatiale dnergie lectromagntique : ce nest e e e 0 donc pas un terme source pour lnergie totale. e 4 Dans Code Saturne, il est modlis par une hypoth`se de gradient et inclut galement la diusion turbulente. e e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide


P

Code Saturne documentation Page 261/277

et enn, pour lenthalpie h = e +

:
t

(h) + div( uh) = : grad (u) t

+ v divs + j E +

d dt

(IV.1.23)

En faisant appara la pression dans le tenseur des contraintes = P Id + , on peut crire : tre e (h) + div( uh) = : grad (u) t
t

+ v divs + j E +

dP dt

(IV.1.24)

Les approximations habituelles de Code Saturne consistent alors ` ngliger le terme dchauement a e e t issu du tenseur des contraintes : grad (u) et le terme en drive totale de la pression dP , supposs e e e dt faibles en comparaison des autres termes dans les applications traites (exemple : terme deet Joule e important, eets de compressibilit faibles...). De plus, le terme de ux est modlis en suivant une e e e hypoth`se de gradient appliqu ` lenthalpie (et non pas ` la temprature), soit donc : e ea a e (h) + div( uh) = v div t t + Cp t grad h + j E (IV.1.25)

Equations lectromagntiques e e Elles sont obtenues ` partir des quations de Maxwell sous les hypoth`ses dtailles dans [douce], a e e e e paragraphe 3.3. Densit de courant e La relation liant la densit de courant et le champ lectrique est issue de la loi dOhm que lon suppose e e pouvoir utiliser sous la forme simplie suivante : e j = E Champ lectrique e Le champ lectrique sobtient ` partir dun potentiel vecteur. e a En eet, la loi de Faraday scrit : e B + rot E = 0 t Avec une hypoth`se quasi-stationnaire, il reste : e rot E = 0 Il est donc possible de postuler lexistence dun potentiel scalaire PR tel que : E = grad PR Potentiel scalaire Le potentiel scalaire est solution dune quation de Poisson. e En eet, la conservation de la charge q scrit : e q + div(j) = 0 t Pour un milieu lectriquement neutre (` lchelle macroscopique), on a e a e div(j) = 0 q = 0 soit donc : t (IV.1.31) (IV.1.30) (IV.1.29) (IV.1.27) (IV.1.26)

(IV.1.28)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 262/277

Cest-`-dire, avec la loi dOhm (IV.1.26), a div( E) = 0 e Avec (IV.1.29), on obtient donc une quation permettant de calculer le potentiel scalaire : div( grad PR ) = 0 Champ magntique e Le champ magntique sobtient ` partir dun potentiel vecteur. e a En eet, la loi dAmp`re scrit : e e D rot H = j t Sous les hypoth`ses indiques prcdemment, on crit : e e e e e 0 0 E rot B = 0 j t (IV.1.34) (IV.1.33) (IV.1.32)

(IV.1.35)

Avec une hypoth`se quasi-stationnaire, il reste : e rot B = 0 j De plus, la conservation du ux magntique scrit5 : e e div B = 0 et on peut donc postuler lexistence dun potentiel vecteur A tel que : B = rot A Potentiel vecteur Le potentiel vecteur est solution dune quation de Poisson. e En prenant le rotationnel de (IV.1.38) et avec (IV.1.36), on obtient : rot (rot A) = 0 j (IV.1.39) (IV.1.38) (IV.1.37) (IV.1.36)

Avec la relation donnant le Laplacien6 dun vecteur div(grad a) = grad (diva) rot (rot a) et sous la contrainte7 que divA = 0, on obtient nalement une quation permettant de calculer le potentiel e vecteur : div (grad A) = 0 j (IV.1.40)

1.1.3

Effet Joule

Introduction
Pour les tudes Joule, on calcule, ` un pas de temps donn : e a e la vitesse u, la pression P , la variable nergtique enthalpie h (et les grandeurs turbulentes e e ventuelles), e un potentiel scalaire rel PR , e
la divergence de la loi de Faraday, avec div(rot E) = 0 (par analyse vectorielle) donne divB = cst. coordonnes cartsiennes, le Laplacien du vecteur a est le vecteur dont les composantes sont gales au Laplacien e e e de chacune des composantes de a. 7 La condition divA = 0, dite jauge de Coulomb, est ncessaire pour assurer lunicit du potentiel vecteur. e e
6 En 5 Prendre

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 263/277

et, si le courant nest ni continu, ni alternatif monophas, un potentiel scalaire imaginaire PI . e

Le gradient du potentiel permet dobtenir le champ lectrique E et la densit de courant j (partie e e relle et, ventuellement, partie imaginaire). Le champ lectrique et la densit de courant sont utiliss e e e e e pour calculer le terme source deet Joule qui intervient dans lquation de lenthalpie. e La puissance instantane dissipe par eet Joule est gale au produit instantan j E. Dans le e e e e cas gnral, j et E sont des signaux alternatifs (j = |j|cos( t + j ) et E = |E|cos( t + E )) que lon e e e peut reprsenter par des complexes (j = |j| ei ( t+j ) et E = |E| ei ( t+E ) ). La puissance instantane e scrit alors (|j| |E|)cos( t + j )cos( t + E ). e En courant continu ( = j = E = 0), la puissance se calcule donc simplement comme le e produit scalaire PJ = |j| |E|. Le calcul de la puissance dissipe par eet Joule ne pose donc pas de probl`me particulier car les variables densit de courant et champ lectrique rsolues par e e e e e e e Code Saturne sont prcisment |j| et |E| (les variables sont relles). En courant alternatif, la periode du courant est beaucoup plus petite que les chelles de e temps des phnom`nes thermohydrauliques pris en compte. Il nest donc pas utile de disposer e e de la puissance instantane dissipe par eet Joule : la moyenne sur une priode est susante e e e e e e et elle scrit8 : PJ = 1 (|j| |E|)cos(j E ). Cette formule peut galement scrire de mani`re e 2 1 quivalente sous forme complexe : PJ = 2 j E , o` E est le complexe conjugu de E. e u e En courant alternatif monophas (j = E ), en particulier, la formule donnant la puissance e 1 1 se simplie sous la forme PJ = 1 (|j| |E|), ou encore : PJ = 2 |j| 2 |E|. Il sagit donc du 2 produit des valeurs ecaces. Or, les variables rsolues par Code Saturne en courant alternatif e monophas sont prcisment les valeurs ecaces (valeurs que lon dnomme abusivement e e e e valeurs relles dans le code source). e En courant alternatif non monophas (triphas, en particulier), la formule donnant la puise e 1 sance est utilise directement sous la forme PJ = 2 j E . On utilise pour la calculer les e variables rsolues qui sont la partie relle et la partie imaginaire de j et E. e e En conclusion, e en continu, les variables rsolues j Res et E Res sont les variables relles continues et la e puissance se calcule par la formule suivante : PJ = j Res E Res en alternatif monophas, les variables rsolues j Res et E Res sont les valeurs ecaces et la e e puissance se calcule par la formule suivante : PJ = j Res E Res en alternatif non monophas, les variables rsolues j Res,R , j Res,I et E Res,R , E Res,I sont e e la partie relle et la partie imaginaire de j et E, et la puissance se calcule par la formule e 1 suivante : PJ = 2 (j Res,R E Res,R j Res,I E Res,I ) Le potentiel imaginaire nest donc utilis dans le code que lorsque le courant est alternatif e et non monophas. En particulier, le potentiel imaginaire nest pas utilis lorsque le courant est e e continu ou alternatif monophas. En eet, la partie imaginaire nest introduite en complment de la e e partie relle que dans le cas o` il est ncessaire de disposer de deux grandeurs pour dnir le potentiel, e u e e cest-`-dire lorsquil importe de conna a tre son amplitude et sa phase. En courant continu, on na naturellement besoin que dune seule information. En alternatif monophas, la valeur de la phase e importe peu (on ne travaille pas sur des grandeurs lectriques instantanes) : il sut de conna e e tre lamplitude du potentiel et il est donc inutile dintroduire une variable imaginaire. La variable dnomme potentiel rel, PR , reprsente une valeur ecace si le courant e e e e est monophas et une partie relle sinon. De mani`re plus explicite, pour un potentiel physique e e e
8 Lintgrale e

de cos2 x sur un intervalle de longueur 2 est .

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 264/277

alternatif sinuso dal P p, de valeur maximale note P pmax , de phase note , la variable PR reprsente e e e 1 P pmax en monophas et P pmax cos sinon. En courant continu, PR reprsente naturellement le e e 2 potentiel (rel, continu). Il est donc indispensable de prter une attention particuli`re aux e e e 1 valeurs de potentiel imposes aux limites (facteur 2 ou cos). e

Equations continues
Syst`me dquations e e Les quations continues qui sont rsolues sont les suivantes : e e div(u) = 0 t (u) + div( u u) = div() + T S t + grad h + PJ t (h) + div( uh) = v div Cp t div( grad P ) = 0 R div( grad PI ) = 0 en alternatif non monophas uniquement e avec, en continu ou alternatif monophas : e PJ = j E E = grad PR j = E et, en alternatif non monophas (avec i2 = 1) : e PJ = 1 j E 2 E = grad (PR + i PI ) j = E

(IV.1.41)

(IV.1.42)

(IV.1.43)

Equation de la masse Cest lquation rsolue en standard par Code Saturne (contrainte stationnaire dincompressibilit). e e e Elle na pas de traitement particulier dans le cadre du module prsent. Un terme source de masse peut e tre pris en compte au second membre si lutilisateur le souhaite. Pour simplier lexpos, le terme e e source sera suppos nul ici, dans la mesure o` il nest pas spcique au module lectrique. e u e e Equation de la quantit de mouvement e Cest lquation rsolue en standard par Code Saturne (les forces de Laplace (j B) sont supposes e e e ngligeables). e Equation de lenthalpie On ltablit comme dans le cas des arcs lectriques9 ` partir de lquation de lnergie apr`s plusieurs e e a e e e approximations utilises en standard dans Code Saturne et en prenant en compte le terme deet Joule e li ` lnergie lectromagntique. ea e e e Par rapport ` lquation utilise pour les tudes darc lectrique, seule lexpression de leet Joule a e e e e
9 A ceci pr`s que la puissance des forces de Laplace nappara pas du tout, au lieu de dispara ` e t tre lorsque lon soustrait lquation de lnergie cintique ` celle de lnergie totale. e e e a e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 265/277

di`re lorsque le courant est alternatif non monophas. e e Equations lectromagntiques e e Elles sont obtenues comme indiqu dans la partie relative aux arcs lectriques, mais on ne conserve e e que les relations associes ` la densit de courant, au champ lectrique et au potentiel dont il drive. e a e e e

1.2

Discretisation

La discrtisation des quations ne pose pas de probl`me particulier (ajout de termes sources explicites e e e pour leet Joule et les forces de Laplace, quations de Poisson pour la dtermination des potentiels). e e Un point sur les conditions aux limites doit cependant tre fait ici, en particulier pour prciser la e e mthode de recalage automatique des potentiels. e

1.2.1

Arcs electriques

Conditions aux limites


Seules les conditions aux limites pour les potentiels sont ` prciser. a e Les conditions aux limites sur le potentiel scalaire sont des conditions de Neumann homog`nes e ` sur toutes les fronti`res hormis ` la cathode et ` lanode. A la cathode, on impose une condition de e a a ` Dirichlet homog`ne (potentiel nul par convention). A lanode, on impose une condition de Dirichlet e permettant de xer la dirence de potentiel souhaite entre lanode et la cathode. Lutilisateur peut e e xer le potentiel de lanode directement ou demander quun recalage automatique du potentiel soit eectu pour atteindre une intensit de courant prdtermine. e e e e e Lorsque le recalage automatique est demand (IELCOR=1), lutilisateur doit xer la valeur cible de e lintensit, COUIMP, (A) et une valeur leve de dpart de la dirence de potentiel entre lanode et la e e e e e cathode10 , DPOT, (V ). Le recalage est eectu en n de pas temps et permet de disposer, pour le pas e de temps suivant, de valeurs recales des forces de Laplace et de leet Joule. e Pour eectuer le recalage, Code Saturne dtermine lintgrale de leet Joule estim sur le domaine e e e (en W ) et en compare la valeur au produit de lintensit COUIMP par la dirence de potentiel11 e e DPOT. Un coecient multiplicatif de recalage COEPOT en est dduit (pour viter des variations e e trop brusques, on sassure quil reste born). e On multiplie alors par COEPOT la dirence de potentiel entre lanode et la cathode, DPOT, et le e vecteur j. Leet Joule, produit de j par E, est multipli par le carr de COEPOT. Pour assurer e e la cohrence du post-traitement des variables, le potentiel vecteur et le potentiel scalaire sont e galement multiplis par COEPOT. e e Le champ lectrique ntant pas explicitement stock, on ne le recale pas. Le potentiel vecteur e e e et les forces de Laplace seront dduits de la densit de courant et intgreront donc naturellement e e e le recalage. Les conditions aux limites sur le potentiel vecteur sont des conditions de Neumann homog`ne e sur toutes les fronti`res hormis sur une zone de bord arbitrairement choisie (paroi par exemple) pour e laquelle une condition de Dirichlet est utilise an que le syst`me soit inversible (la valeur impose est e e e la valeur du potentiel vecteur calcule au pas de temps prcdent). e e e
10 Plus prcisment, lutilisateur doit imposer un potentiel nul en cathode et le potentiel DPOT ` lanode, en utilisant e e a explicitement, dans le sous-programme utilisateur uselcl, la variable DPOT qui sera automatiquement recale au cours e du calcul. 11 DPOT est la dirence de potentiel impose entre lanode et la cathode au pas de temps qui sach`ve. DPOT a conditionn e e e e le champ lectrique et la densit de courant utiliss pour le calcul de leet Joule. e e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 266/277

1.2.2

Effet Joule

Conditions aux limites


Seules les conditions aux limites pour les potentiels sont ` prciser. a e Les conditions aux limites sur le potentiel scalaire sont ` prciser au cas par cas selon la cona e guration des lectrodes. Ainsi, on dispose classiquement de conditions de Neumann homog`nes ou de e e Dirichlet (potentiel impos). On peut galement avoir besoin dimposer des conditions dantisymtrie e e e (en utilisant des conditions de Dirichlet homog`nes par exemple). Lutilisateur peut galement souhaiter e e quun recalage automatique du potentiel soit eectu pour atteindre une valeur prdtermine de la e e e e puissance dissipe par eet Joule. e Lorsque le recalage automatique est demand (IELCOR=1), lutilisateur doit xer la valeur cible de la e puissance dissipe dans le domaine, PUISIM, (V.A). Il doit en outre, sur les fronti`res o` il souhaite que e e u le potentiel (rel ou complexe) sadapte automatiquement, fournir en condition ` la limite une valeur e a initiale du potentiel et la multiplier par la variable COEJOU qui sera automatiquement recale au cours e du calcul (COEJOU vaut 1 au premier pas de temps). Le recalage est eectu en n de pas temps et e permet de disposer, pour le pas de temps suivant, dune valeur recale de leet Joule. e Pour eectuer le recalage, Code Saturne dtermine lintgrale de leet Joule estim sur le domaine e e e (en W ) et en compare la valeur ` la puissance cible. Un coecient multiplicatif de recalage COEPOT a en est dduit (pour viter des variations trop brusques, on sassure quil reste born entre 0,75 e e e et 1,5). On multiplie alors par COEPOT le facteur multiplicatif COEJOU utilis pour les conditions aux e limites. La puissance dissipe par eet Joule est multiplie par le carr de COEPOT. Pour assurer e e e la cohrence du post-traitement des variables, le potentiel est galement multipli par COEPOT. e e e Le champ lectrique ntant pas explicitement stock, on ne le recale pas. e e e

On notera que la variable DPOT est galement recale et quelle peut donc tre utilise si besoin pour e e e e imposer les conditions aux limites.

1.3
1.3.1

Mise en uvre
Introduction

Le module lectrique est une physique particuli`re active lorsque les mots-cls IPPMOD(IELARC) e e e e (arc lectrique) ou IPPMOD(IELJOU) (Joule) sont strictement positifs. Les dveloppements concere e nant la conduction ionique (mot-cl IPPMOD(IELION)) ont t prvus dans le code mais restent ` e ee e a e raliser. Pour larc lectrique, dans la version actuelle de Code Saturne, seule est oprationnelle e e loption IPPMOD(IELARC)=2 : la version 2D axisymtrique qui permettrait de saranchir du poe tentiel vecteur (option IPPMOD(IELARC)=1) nest pas activable. Pour leet Joule, lorsquil nest pas utile dintroduire un potentiel scalaire complexe (en courant continu ou alternatif monophas), on e utilise IPPMOD(IELJOU)=1. Lorsquun potentiel scalaire complexe est indispensable (courant alternatif triphas, par exemple), on utilise IPPMOD(IELJOU)=2. e Dans ce qui suit, on prcise les inconnues et les proprits principales utilises dans le module. On e ee e fournit galement un arbre dappel simpli des sous-programmes du module (initialisation avec initi1 e e puis inivar et boucle en temps avec tridim). Les sous-programmes marqus dun astrisque sont e e dtaills ensuite. e e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 267/277

1.3.2

Inconnues et proprietes

Les dveloppements ont t raliss pour une unique phase (NPHAS=1). e ee e e Les NSCAPP inconnues scalaires associes ` la physique particuli`re sont dnies dans elvarp dans e a e e lordre suivant (en particulier an de limiter le stockage en mmoire lors de la rsolution squentielle e e e des scalaires par scalai) : lenthalpie RTP(*,ISCA(IHM)), un potentiel scalaire rel RTP(*,ISCA(IPOTR)), e un potentiel scalaire imaginaire RTP(*,ISCA(IPOTI)) ssi IPPMOD(IELJOU)=2 (tudes Joule en e courant alternatif non monophas), e les trois composantes dun potentiel vecteur rel RTP(*,ISCA(IPOTVA(i))) (avec i variant de 1 e a ` 3) ssi IPPMOD(IELARC)=2 (arc lectrique), e NGAZG-1 fractions massiques RTP(*,ISCA(IYCOEL(j))) (avec j variant de 1 ` NGAZG-1) pour un a uide ` NGAZG constituants (avec NGAZG strictement suprieur ` 1). En arc lectrique, la compoa e a e sition est fournie dans le chier de donnes dp ELE. La fraction massique du dernier constituant e nest pas stocke en mmoire. Elle est dtermine chaque fois que ncessaire en calculant le e e e e e complment ` lunit des autres fractions massiques (et, en particulier, lorsque elthht est utilis e a e e pour le calcul des proprits physiques). ee

Outre les proprits associes en standard aux variables scalaires identies ci-dessus, le tableau PROPCE ee e e contient galement : e la temprature, PROPCE(*,IPPROC(ITEMP)). En thorie, on pourrait viter de stocker cette e e e variable, mais lutilisateur est presque toujours intress par sa valeur en post-traitement et les e e proprits physiques sont souvent donnes par des lois qui en dpendent explicitement. Son unit ee e e e (Kelvin ou Celsius) dpend des tables enthalpie-temprature fournies par lutilisateur. e e la puissance lectromagntique dissipe par eet Joule, PROPCE(*,IPPROC(IEFJOU)) (terme e e e source positif pour lenthalpie), les trois composantes des forces de Laplace, PROPCE(*,IPPROC(ILAPLA(i))) (avec i variant de 1 ` 3) en arc lectrique (IPPMOD(IELARC)=2). a e

La conductivit lectrique est a priori variable et conserve dans le tableau de proprits aux cele e e ee lules PROPCE(*,IPPROC(IVISLS(IPOTR))). Elle intervient dans lquation de Poisson portant sur le e potentiel scalaire. Lorsque le potentiel scalaire a une partie imaginaire, la conductivit nest pas due plique : les entiers IPPROC(IVISLS(IPOTI)) et IPPROC(IVISLS(IPOTR)) pointent sur la mme case e e du tableau PROPCE. La conductivit associe au potentiel vecteur est uniforme et de valeur unit e e e (VISLS0(IPOTVA(i))=1.D0 avec i variant de 1 ` 3). a Le champ lectrique, la densit de courant et le champ magntique ne sont stocks que de mani`re e e e e e temporaire (voir elflux).

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 268/277

1.3.3

Arbre dappel simplie

usini1

Initialisation des mots-cls utilisateur gnraux et positionnement e e e des variables usppmo Dnition du module physique particuli`re employ e e e varpos Positionnement des variables pplecd Branchement des physiques particuli`res pour la lecture de chier e de donnes e ellecd* Lecture du chier de donnes pour les arcs lectriques dp ELE e e ppvarp Branchement des physiques particuli`res pour le positionnement e des inconnues elvarp* Positionnement des inconnues (enthalpie, potentiels, fractions massiques) ppprop Branchement des physiques particuli`res pour le positionnement e des proprits ee elprop* Positionnement des proprits (temprature, eet Joule, forces de ee e Laplace) ppini1 Branchement des physiques particuli`res pour linitialisation des e mots-cls spciques e e elini1 Initialisation des mots-cls pour le module lectrique e e useli1 Initialisation des mots-cls utilisateur pour le module lectrique e e elveri Vrication des mots-cls pour le module lectrique e e e Table 27.1: Sous-programme initi1 : initialisation des mots-cls et positionnement des variables e

ppiniv

Branchement des physiques particuli`res pour linitialisation des e variables eliniv* Initialisation des variables spciques au module lectrique e e elthht* Transformation temprature-enthalpie et enthalpie-temprature e e par interpolation sur la base du chier de donnes dp ELE (arc e lectrique uniquement) e useliv Initialisation des variables par lutilisateur elthht* Transformation temprature-enthalpie et enthalpie-temprature e e par interpolation sur la base du chier de donnes dp ELE (arc e lectrique uniquement) e Table 27.2: Sous-programme inivar : initialisation des variables

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 269/277

phyvar

Calcul des proprits physiques variables ee Branchement des physiques particuli`res pour le calcul des proe prits physiques variables ee elphyv Calcul des proprits physiques variables pour le module ee lectrique. En arc lectrique, les proprits sont calcules par ine e ee e terpolation ` partir des tables fournies dans le chier de donnes a e dp ELE elthht* Transformation temprature-enthalpie et enthalpie-temprature e e par interpolation sur la base du chier de donnes dp ELE (arc e lectrique uniquement) e uselph Calcul par lutilisateur des proprits physiques variables pour ee le module lectrique. Pour les tudes Joule, en particulier, les e e proprits doivent tre fournies ici sous forme de loi (des exemples ee e sont disponibles) usthht Transformation temprature-enthalpie et enthalpie-temprature e e fournie par lutilisateur (plus spciquement pour les tudes Joule, e e pour lesquelles on ne dispose pas dun chier de donnes ` partir e a duquel raliser des interpolations avec elthht) e ppphyv Table 27.3: Sous-programme tridim : partie 1 (proprits physiques) ee

1.3.4

Precisions

ellecd Ce sous-programme ralise la lecture du chier de donnes spcique aux arcs lectriques. On donne cie e e e dessous, ` titre dexemple, lentte explicative et deux lignes de donnes dun chier type. Ces valeurs a e e sont interpoles chaque fois que ncessaire par elthht pour dterminer les proprits physiques du e e e ee uide ` une temprature (une enthalpie) donne. a e e
# Nb despeces NGAZG et Nb de points NPO (le fichier contient NGAZG blocs de NPO lignes chacun) # NGAZG NPO 1 238 # # Proprietes # T H ROEL CPEL SIGEL VISEL XLABEL XKABEL # Temperature Enthalpie Masse vol. Chaleur Conductivite Viscosite Conductivite Coefficient # volumique massique electrique dynamique thermique dabsorption # K J/kg kg/m3 J/(kg K) Ohm/m kg/(m s) W/(m K) # 300.00 14000. 1.6225 520.33 0.13214E-03 0.34224E-04 0.26712E-01 0.0000 400.00 65800. 1.2169 520.33 0.13214E-03 0.34224E-04 0.26712E-01 0.0000

elvarp Ce sous-programme permet de positionner les inconnues de calcul listes prcdemment. On y prcise e e e e galement que la chaleur massique ` pression constante est variable, ainsi que la conductivit de tous les e a e scalaires associs au module lectrique, hormis la conductivit de lventuel potentiel vecteur (celle-ci e e e e est uniforme et de valeur unit). e elprop Cest dans ce sous-programme que sont positionnes les proprits stockes dans le tableau PROPCE, et e ee e en particulier la temprature, leet Joule et les forces de Laplace. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 270/277

ppclim uselcl

navsto preduv turb scalai* covofi

elflux* uselrc*

covofi

covofi

elflux*

covofi

Branchement des physiques particuli`res pour les conditions aux e limites Intervention de lutilisateur pour les conditions aux limites (en lieu et place de usclim, mme pour les variables qui ne sont pas e spciques au module lectrique). Si un recalage automatique des e e potentiels est demand (IELCOR=1), il doit tre pris en compte ici e e par le biais des variables DPOT ou COEJOU (voir la description des conditions aux limites). Rsolution des quations de Navier-Stokes e e Prdiction de la vitesse : prise en compte des forces de Laplace e calcules dans elflux au pas de temps prcdent e e e Turbulence : rsolution des quations pour les mod`les ncessitant e e e e des quations de convection-diusion e Rsolution des quations portant sur les scalaires associs aux e e e physiques particuli`res et des scalaires utilisateur e Rsolution successive de lenthalpie, du potentiel scalaire rel et, e e si IPPMOD(IELJOU)=2, de la partie imaginaire du potentiel scalaire (appels successifs ` covofi qui appelle eltssc pour le calcul du a terme deet Joule au second membre de lquation de lenthalpie) e Calcul du champ lectrique, de la densit de courant et de leet e e Joule (premier de deux appels au cours du pas de temps courant) Recalage automatique ventuel de la densit de courant, de leet e e Joule, des potentiels et des coecients DPOT et COEJOU. Ce recalage, sil a t demand par lutilisateur (IELCOR=1), est eectu ee e e a ` partir du deuxi`me pas de temps. e Rsolution successive, si IPPMOD(IELARC)=2, des trois come posantes du potentiel vecteur. On proc`de par appels successifs e a ` covofi qui appelle eltssc pour le calcul du second membre de lquation de Poisson portant sur chaque composante du potentiel. e Rsolution successive des NGAZG-1 fractions massiques care actrisant la composition du uide, sil est multiconstituant. On e proc`de par appels successifs ` covofi. e a En arc lectrique, calcul du champ magntique et des trois come e posantes des forces de Laplace (deuxi`me et dernier appel au cours e du pas de temps courant) Rsolution des scalaires utilisateur e

Table 27.4: Sous-programme tridim : partie 2 (conditions aux limites, Navier-Stokes, turbulence et scalaires)

postlc ecrevo uselen

Post-traitement Ecriture des variables ` post-traiter a Ajout au post-traitement de variables calcules par lutilisateur. e En exemple activ standard sont post-traits, sils existent, e e loppos du champ lectrique (i.e. le gradient du potentiel scalaire, e e rel ou complexe), le vecteur densit de courant imaginaire (en e e eet Joule), le champ magntique (en arc lectrique) et ene e n le module et largument du potentiel (en eet Joule, avec IPPMOD(IELJOU)=4)

Table 27.5: Sous-programme tridim : partie 3 (post-traitement)

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 271/277

eliniv Ce sous-programme permet de raliser les initialisations par dfaut spciques au module. e e e En particulier, en k , les deux variables turbulentes sont initialises ` 1010 (choix historique e a arbitraire, mais rput, lors de tests non rfrencs, permettre le dmarrage de certains calculs qui e e ee e e chouaient avec une initialisation classique). e Les potentiels sont initialiss ` zro, de mme que leet Joule. En arc lectrique, les forces de Laplace e a e e e sont initialises ` zro. e a e Le uide est suppos monoconstituant (seule est prsente la premi`re esp`ce). e e e e En arc lectrique, lenthalpie est initialise ` la valeur de lenthalpie du mlange suppos monocone e a e e stituant ` la temprature T0(IPHAS) donne dans usini1. En eet Joule, lenthalpie est initialise ` a e e e a zro (mais lutilisateur peut fournir une valeur dirente dans useliv). e e elthht Ce sous-programme permet de raliser (en arc lectrique) les interpolations ncessaires ` la dtere e e a e mination des proprits physiques du uide, ` partir des tables fournies dans le chier de donnes ee a e dp ELE. On notera en particulier que ce sous-programme prend en argument le tableau YESP(NESP) qui reprsente la fraction massique des NGAZG constituants du uide. Dans le code, on ne rsout que e e la fraction massique des NGAZG-1 premiers constituants. Avant chaque appel ` elthht, la fraction a massique du dernier constituant doit tre calcule comme le complment ` lunit des autres fractions e e e a e massiques. scalai, elflux, uselrc Le sous-programme scalai permet de calculer, dans lordre souhait, les NSCAPP scalaires physique e particuli`re associs au module lectrique, puis de calculer les grandeurs intermdiaires ncessaires et e e e e e enn de raliser les oprations qui permettent dassurer le recalage automatique des potentiels, lorsquil e e est requis par lutilisateur (i.e. si IELCOR=1). Les NSCAPP scalaires physique particuli`re sont calculs successivement par un appel ` covofi plac e e a e dans une boucle portant sur les NSCAPP scalaires. Lalgorithme tire prot de lordre spcique dans e lequel ils sont dnis et donc rsolus (dans lordre : enthalpie, potentiel scalaire, potentiel vecteur, e e fractions massiques). Pour viter des variations trop brutales en dbut de calcul, le terme source deet Joule nest pris en e e compte dans lquation de lenthalpie qu` partir du troisi`me pas de temps. e a e Apr`s la rsolution de lenthalpie et du potentiel scalaire (rel ou complexe), le sous-programme e e e elflux permet de calculer les trois composantes du champ lectrique (que lon stocke dans des e tableaux de travail), puis la densit de courant et enn leet Joule, que lon conserve dans le tableau e PROPCE(*,IPPROC(IEFJOU)) pour le pas temps suivant (apr`s recalage ventuel dans uselrc comme e e indiqu ci-apr`s). Lorsque IPPMOD(IELJOU)=2, lapport de la partie imaginaire est pris en compte pour e e le calcul de leet Joule. Lorsque IPPMOD(IELARC)=2 (arc lectrique), le vecteur densit de courant est e e conserv dans PROPCE, en lieu et place des forces de Laplace PROPCE(*,IPPROC(ILAPLA(i))) : il est e utilis pour le calcul du potentiel vecteur dans le second appel ` elflux, apr`s recalage ventuel par e a e e uselrc (en eet, il nest plus ncessaire de conserver les forces de Laplace ` ce stade puisque la seule e a quation dans laquelle elles interviennent est lquation de la quantit de mouvement et quelle a dj` e e e ea t rsolue). ee e ` A la suite de elflux, le sous-programme uselrc eectue le recalage permettant dadapter automa-

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 272/277

tiquement les conditions aux limites portant sur les potentiels, si lutilisateur la demand (i.e. si e IELCOR=1). On se reportera au paragraphe relatif aux conditions aux limites. On prcise ici que le coe ecient de recalage COEPOT permet dadapter leet Joule PROPCE(*,IPPROC(IEFJOU)) et la dirence e de potentiel DPOT (utile pour les conditions aux limites portant sur le potentiel scalaire au pas de temps suivant12 ). Pour les cas darc lectrique, COEPOT permet galement de recaler le vecteur densit e e e de courant que lon vient de stocker temporairement dans PROPCE(*,IPPROC(ILAPLA(i))) et qui va servir immdiatement ` calculer le potentiel vecteur. Pour les cas Joule, on recale en outre le coecient e a COEJOU (utile pour les conditions aux limites portant sur le potentiel scalaire au pas de temps suivant). Pour les cas darc lectrique (IPPMOD(IELARC)=2), apr`s elflux et uselrc, la rsolution squentielle e e e e des inconnues scalaires se poursuit dans scalai avec le calcul des trois composantes du potentiel vecteur. Le second membre de lquation de Poisson considre dpend de la densit de courant qui, e ee e e dans elflux, a t temporairement stocke dans le tableau PROPCE(*,IPPROC(ILAPLA(i))) et qui, ee e dans uselrc, vient dtre recale si IELCOR=1. Les valeurs du potentiel vecteur obtenues int`grent e e e donc naturellement lventuel recalage. e Pour les cas darc lectrique (IPPMOD(IELARC)=2), un second appel ` elflux permet alors de calculer e a le champ magntique que lon stocke dans des tableaux de travail et les forces de Laplace que lon e stocke dans PROPCE(*,IPPROC(ILAPLA(i))) pour le pas de temps suivant (la densit de courant, que e lon avait temporairement conserve dans ce tableau, ne servait qu` calculer le second membre de e a lquation de Poisson portant sur le potentiel vecteur : il nest donc plus ncessaire de la conserver). e e La rsolution squentielle des inconnues scalaires spciques au module se poursuit dans scalai, avec e e e le calcul des NGAZG-1 fractions massiques permettant de dnir la composition du uide. e Pour terminer, scalai permet la rsolution des scalaires utilisateurs (appel ` covofi dans une e a boucle portant sur les NSCAUS scalaires utilisateur). On peut remarquer pour nir que les termes sources des quations de la quantit de mouvement (forces e e de Laplace) et de lenthalpie (eet Joule) sont disponibles ` la n du pas de temps n pour une utilisation a au pas de temps n + 1 (de ce fait, pour permettre les reprises de calcul, ces termes sources sont stocks e dans le chier suite auxiliaire, ainsi que DPOT et COEJOU).

12 A

priori, DPOT nest pas ncessaire pour les cas Joule. e

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 273/277

1.4

` Points a traiter

Mobilit ionique e Le module est ` dvelopper. a e Conditions aux limite en Joule La prise en compte de conditions aux limites couples entre lectrodes reste ` faire. e e a Compressible en arc lectrique e e Les dveloppements du module compressible de Code Saturne doivent tre rendus compatibles avec le e module arc lectrique. e

Part V

Module combustion

274

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 275/277

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 276/277

1Sous-programme co**, cp**, fu** and so


1.1 Fonction

From a CFD point of vue combustion is a (somestimes very) complicated way to determine . Models needs few extra elds of scalar with regular transport equation, somes of them with a reactive or interfacial source term. Modeling of combustion is able to deal with gaz phase combustion (diusion, premix, partial premix), and with solid or liquid fuels. Combustion of condensed fuels involves one-way interfacial ux due to phenomenon in the condensed phase (evaporation or pyrolisis) and reciprocal ones (heterogeneous combustion). Many of the species injected in the gaz phase are afterwards involved in gaz phase combsution. That is the reason why a lot of modules are similar for gaz, coal and fuel combusiton modelling. Obviously, the thermodynamical description of gaz species is similar in every version as close as possible of the JANAF rules. Every models are developped in both an adiabatic version and an undiabatic (permeatic) one, so in addition with standard, the rule to call models is : IPPMOd(index model) = -1 unused IPPMOD(index model) = 0 simplest adiabatic version IPPMOD(index model) = 1 simplest permeatic version Eventually IPPMOD(index model) = 2.p p adiabatic version IPPMOD(index model) = 2.p+1 P permeatic version Every permeatic version involves the transport of enthalpy (one more variable).

1.1.1

Gaz combustion modelling

Combustion of gaz is limited by disponibility (in the same uid particle) of both fuel and oxidant and by kinetic eects (a lot of chemical reactions involved can be described using an Arrhenius law with an high activation energy). The mixing of mass (atoms) incoming with fuel and oxydant is described by a mixture fraction (mass fraction of mass incoming with fuel), this variable is not aected by combustion. A progress variabl is used to describe the transformation of the mixture from fuel and oxydant to product (carbon dioxyde and so on). Combsution of gaz is, traditionnaly, splitted in premix and diusion. In premix combustion process a rst stage of mixing have been realised (without blast ...) and the mixture is introduced in the boiler (or combustion can). In industrial common conditions the combustion is mainly limited by the mixing of fresh gaz (inert) and burnt ones resulting in the inammation of the rst and their conversion to burnt ones ; so an assumption of chemistry much faster than mixing induces an intermittent regime. The gaz ow is constituted of totally fresh and totally burnt gaz (the amme containing the gaz during their transformation) is extremuly thin. With previous assumptions, Spalding have established the Eddy Break Up model, wich allows a complete descrition with only one progress variable (mixture fraction is homogeneous). In diusion ame the fuel and the oxydant are introduced by two (at least) inlets, in common industiral conditions, their mixing is the main limitation and the mixture fraction is enough to qualify a uid particle, but in turbulent ow a probability density function of the mixture fraction is needed to qualify the thermodynamical state of the bulk. So both the mean and the variance of the mixture fraction are needed (two variables). In the real world the chemistry is not so fast and, often, the mixing is not as homogeneous as wished. Then the industrial combustion occurs in partial premix combsution. Partial premix occurs if the mixing is not nished (at molecular level) when the mixing is introduced, or if air, or fuel, are staggered,

EDF R&D

Code Saturne 1.3.2 Theory and Programmers Guide

Code Saturne documentation Page 277/277

or if a diusion ame is blowed o. For these situations, and specically for lean premix gaz turbines Libby & Williams have developped a model allowing a descirption of both mixing and chemical limitations. A collaboration between the LCD Poitiers and EDF R&D allows a simpler version of their algorithm. Not only the mean and the variance of both mixture fraction and progress variable are needed but so the covariance (ve variables).

1.1.2

Coal combustion modelling

Combustion of coal is the main way to produce electricity in the world. The coal is a natural product with a very complex composition, during the industrial process of milling the raw coal is broken in tiny particles of dierent sizes. After its introduction in the boiler, the caol particles undergoes drying, devolatilisation (heating of coal turn it in a mixture of char and gases), heterogenous combustion (of char leaving to carbone monoxide) leaving an ash particle. Each of therse phenomena are taken in account for some class of particles : a class is caracterised by a coal (it is useful to burn mixture of coals with dierents ranks or mixture of coal with biomasse ...) and an initla diameter. For each class, Code Saturne computes the number and the mass of particles by unit mass of mixture. The main assumption is to solve only one speed (and pressure) eld : it means the discrepancy of speed between coal particles and gases is supposed negligible. Due to the radiation and heterogeneous combustion, temperature can be dierent for gas and dierent size particles : so the specic enthalpy of each particle class is solved. The descripton of coal pyrolisis proposed by Kobayashi and bhayakar is used, leaving at two source terms for light and heavy volatile matters (the moderate temperature reaction produces gases with low molecular mass, the high temperature reaction produces heavier gases and less char) represented by passive scalar : mixture fraction. The description of heterogeneous reaction (who produce carbon monoxide) leads to a source term for the carbon : a mixture fraction who cant be greater than the results of stoechiometric oxydation of char by air. The retained model for the gaz phase combusiton is diusion ammelets surrounding each particle, so the previous gaseous fuels are mixed in a local mean fuel and the mixing with air is represented by a pdf between air and mean local fuel constructed with the variance of a passive scalar linked with air (interfacial mass ux produce a source term for this scalar).

1.1.3

Heavy Fuel Oil combustion modelling

Combustion of heavy fuel oil have been hugely used to produced electrical energy. Environemental regulation turns it more dicult and less acceptable, a focus is needed on pollutant emission mainly soulphur oxide and particles (condensation of sulphuric acid can aggregate soot). The description of fuel evaporation is done with respect of its heaviness : after a minimum temperature is reached, the gain of enthalpy is distributed between heating and evaporation. This way the evaporation takes place on a range of temperature (which can be large). The total evaporation is common for light oil but impossible for heavy ones, so a particle similar to char is leaved ; the heterogeneous oxydation of this char particle is very similar to coal char ones. Injection of fuel is described (2006 version) with only one class of particle, the number and mass of particles is calculated eveywhere. And so the enthalpy. So three variables are used to describe the condensed pahse. Like for coal, only one speed eld is solved. The model for gas combustion is very similar to coal ones but a special is paid to sulphur (assumed to leave the particle as H2S during evaporation and to be converted to SO2 during gas combustion).

Vous aimerez peut-être aussi