TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Simpler.h
1/****************************************************************************
2* Copyright (c) 2022, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15
16
17#ifndef Simpler_included
18#define Simpler_included
19#include <Simple.h>
20
21//Description
22
23//Ref. Numerical heat Transfer Vol. 10 P. 209-228
24// D. S. Jang - R. Jetli - S. Acharya
25
26// La convergence de la pression dans l'algorithme Simple (voir classe Simple) est faible
27// du fait de la non prise en compte des termes non diagonaux pour resoudre l equation de
28// Poisson sur la correction en pression.
29// L objectif de l algorithme Simpler est de realiser une evaluation plus precise de la pression
30// et d utiliser celle ci pour appliquer ensuite l algorithme Simple.
31
32// A = (M/dt + C(Uk) + D)
33// Bt et -B designent respectivement les operateurs gradient et divergence
34
35// -Estimation de la pression
36// On evalue dans un premier temps le champ de vitesse UPk en resolvant le systeme
37// (Da partie diagonale de A et E partie non diagonale) :
38// Da[Uk-1]UPk = E[Uk-1]Uk-1 + Sv + Ss -> UPk
39//
40// L equation de q.d.m. peut alors s ecrire sous la forme :
41// Da[Uk-1]Uk = Da[Uk-1]UPk -BtPk
42// En combinant cette equation de q.d.m. avec celle de continuite (-BUk = 0) on a :
43// (BDa-1Bt)Pk = BUPk -> Pk
44//
45//
46// -Application de l algorithme Simple pour determiner la solution (Uk,Pk)
47//
48// (U*k,Pk) satisfait l equation de q.d.m. suivante :
49// A[Uk-1]U*k = -BtPk + Sv + Ss + (M/dt)Uk-1 -> U*k
50//
51// p'k est evalue en resolvant le systeme suivant :
52// (BDa-1Bt)p'k = BU*k -> p'k
53//
54// La correction de vitesse u'k est deduite en resolvant le systeme :
55// Da[Uk-1] (Uk-U*k) = -Btp'k -> U'k
56//
57// Le champ de pression Pk n est pas modifie par la correction p'k
58// alors que la vitesse est modifiee par la relation : Uk = U*k + U'k
59//
60// L algorithme peut etre repete jusqu a convergence du systeme ||Uk-Uk-1|| < seuil_convergence_implicite_
61// en pratique on peut ne faire qu une seule iteration (seuil_convergence_implicite_ = 1e6)
62
63// L algorithme code dans cette classe (iterer_NS) differe legerement de celui rappele ci-dessus :
64// Dans l etape d evaluation UPk :
65// -le gradient de pression est pris en compte et la relation traitee est
66// Da[Uk-1]UPk = E[Uk-1]Uk-1 + Sv + Ss -BtPk
67//
68// -la resolution de (BDa-1Bt)Pcor = BUPk fournit alors une correction de pression
69// et le champ de pression est evalue par : Pk = Pk-1 + Pcor
70// (Pcor remplace la notation Pk utilisee plus haut)
71//
72// -resu est reajuste (BtPk = BtPk-1 + BtPcor) pour contenir -BtPk
73
74class Simpler : public Simple
75{
76
77 Declare_instanciable(Simpler);
78
79public :
80 void iterer_NS(Equation_base&, DoubleTab& current, DoubleTab& pression, double, Matrice_Morse&, double, DoubleTrav&,int nb_iter,int& converge, int& ok) override;
81
82
83
84protected :
85
86
87};
88
89int inverser_par_diagonale(const Matrice_Morse& matrice,const DoubleTrav& resu,const DoubleTab& present,DoubleTrav& correction_en_vitesse);
90
91#endif
92
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
Simple()
Definition Simple.cpp:38
void iterer_NS(Equation_base &, DoubleTab &current, DoubleTab &pression, double, Matrice_Morse &, double, DoubleTrav &, int nb_iter, int &converge, int &ok) override
Definition Simpler.cpp:172