15#include <Navier_Stokes_IBM.h>
16#include <Navier_Stokes_std.h>
17#include <Schema_Temps_base.h>
18#include <Source_PDF_base.h>
19#include <Assembleur_base.h>
20#include <Probleme_base.h>
21#include <Fluide_base.h>
78 Cerr <<
"(IBM) Immersed Interface: modified velocity corrector for initial projection." << finl;
93 Cerr <<
"(IBM) Immersed Interface: compute pressure matrix coefficients." << finl;
101 Cerr <<
"(IBM) Immersed Interface: modified pressure matrix for initial projection." << finl;
115 Cerr <<
"Assembling for quasi-compressible" << finl;
130 le_dom_Cl_dis->mettre_a_jour(temps);
137 Cout <<
"Estimation du champ de pression au demarrage:" << finl;
144 Cerr <<
"(IBM) Immersed Interface: modified pressure gradient for initial pressure computation." << finl;
153 if (le_schema_en_temps->pas_de_temps() == 0)
156 dt = std::min(dt, le_schema_en_temps->pas_temps_max());
157 le_schema_en_temps->set_dt() = (dt);
160 for (
int i = 0; i <
sources().size(); i++)
171 Cerr <<
"(IBM) Immersed Interface: Dirichlet velocity in initial pressure computation for PDF (if any)." << finl;
172 DoubleTrav secmem_pdf(vpoint);
174 vpoint -= secmem_pdf;
176 DoubleTrav secmem_pdf_calculer(vpoint);
178 vpoint += secmem_pdf_calculer;
185 le_schema_en_temps->set_dt() = 0;
188 solveur_masse->appliquer(vpoint);
194 assembleur_pression_->modifier_secmem_pour_incr_p(
la_pression->valeurs(), 1, secmem);
197 Cerr <<
"Pressure increment computed successfully" << finl;
201 Cerr <<
"(IBM) Immersed Interface: correction of initial pressure." << finl;
207 operator_add(
la_pression->valeurs(), inc_pre, VECT_ALL_ITEMS);
223 if (le_traitement_particulier)
224 le_traitement_particulier->preparer_calcul_particulier();
233 Cerr <<
"(IBM) Immersed Interface: H1 penalty of pressure matrix." << finl;
238 Cerr <<
"(IBM) Immersed Interface: modification of pressure matrix." << finl;
243 coeff.echange_espace_virtuel();
258 if (mat_var ==
false)
260 Cerr <<
"(IBM) Immersed Interface: update of pressure matrix coefficents." << finl;
269 Cerr <<
"(IBM) Immersed Interface: update of pressure matrix." << finl;
298 Cerr<<
"*******(IBM) Use an explicit time scheme (at least Euler explicit + diffusion) with Source_PDF_base.*******"<<finl;
static void verifier(const char *const msg, double)
Class defining operators and methods for all reading operation in an input flow (file,...
bool initTimeStep_ibm_proto(double ddt)
void modify_initial_variable_ibm_proto(DoubleTab &)
Entree & readOn_ibm_proto(Entree &is, Equation_base &eq)
void assembler_ibm_proto(Matrice_Morse &mat_morse, const DoubleTab &present, DoubleTab &secmem)
void set_champ_coeff_pdf_som(DoubleTab &coeff)
DoubleTab champ_coeff_pdf_som_
void preparer_calcul_ibm_proto()
void set_param_ibm_proto(Param ¶m) const
DoubleTab & derivee_en_temps_inco_ibm_proto(DoubleTab &)
int correction_variable_initiale_
virtual int equation_non_resolue() const
Sources & sources()
Renvoie les termes sources asssocies a l'equation.
virtual int preparer_calcul()
Tout ce qui ne depend pas des autres problemes eventuels.
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
virtual double calculer_pas_de_temps() const
Calcul du prochain pas de temps.
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
bool initTimeStep(double dt) override
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
int correction_calcul_pression_initiale_
void assembler(Matrice_Morse &mat_morse, const DoubleTab &present, DoubleTab &secmem) override
void set_param(Param &titi) const override
void modify_initial_gradP(DoubleTrav &) override
int correction_vitesse_projection_initiale_
int preparer_calcul() override
Tout ce qui ne depend pas des autres problemes eventuels.
void verify_scheme() override
void modify_initial_variable() override
void derivee_en_temps_inco_sources(DoubleTrav &) override
int correction_matrice_pression_
int matrice_pression_penalisee_H1_
int correction_matrice_projection_initiale_
int gradient_pression_qdm_modifie_
int correction_pression_modifie_
int correction_vitesse_modifie_
classe Navier_Stokes_std Cette classe porte les termes de l'equation de la dynamique
const Champ_Inc_base & inconnue() const override
Renvoie la vitesse (champ inconnue de l'equation) (version const).
const Fluide_base & fluide() const
Renvoie le fluide incompressible (milieu physique de l'equation) associe a l'equation.
virtual void projeter()
Calcule la solution U des equations: | M(U-V)/dt + BtP = 0.
Matrice matrice_pression_
bool initTimeStep(double dt) override
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
void set_param(Param &titi) const override
virtual int projection_a_faire()
const Operateur & operateur(int) const override
Renvoie le i-eme operateur de l'equation: - le terme_diffusif si i = 0.
Matrice & matrice_pression()
SolveurSys solveur_pression_
virtual void calculer_la_pression_en_pa()
Calcul de "la_pression_en_pa" en fonction de "la_pression".
int nombre_d_operateurs() const override
Renvoie le nombre d'operateurs de l'equation: Pour Navier Stokes Standard c'est 2.
int methode_calcul_pression_initiale_
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
virtual DoubleTab & ajouter(const DoubleTab &, DoubleTab &) const =0
Helper class to factorize the readOn method of Objet_U classes.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
bool is_dilatable() const
static void abort()
Routine de sortie de Trio-U sur une erreur abort().
double temps_courant() const
Renvoie le temps courant.
Classe de base des flux de sortie.
class Source_PDF_base Base class for the source terms for the penalisation of the momentum in the Imm...
const bool & get_matrice_pression_variable_bool_() const
DoubleTab & calculer_pdf(DoubleTab &) const
virtual DoubleTab compute_coeff_matrice() const
virtual void multiply_coeff_volume(DoubleTab &) const
DoubleTab & calculer(DoubleTab &) const override
virtual void correct_incr_pressure(const DoubleTab &, DoubleTab &) const
void mettre_a_jour(double temps)
Mise a jour en temps, de toute les sources de la liste.
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")