TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Navier_Stokes_FTD_IJK.h
1/****************************************************************************
2* Copyright (c) 2024, 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#ifndef Navier_Stokes_FTD_IJK_included
17#define Navier_Stokes_FTD_IJK_included
18
19#include <Champs_compris_IJK_interface.h>
20#include <Cut_cell_surface_efficace.h>
21#include <Operateur_IJK_faces_diff.h>
22#include <Operateur_IJK_faces_conv.h>
23#include <Fluide_Diphasique_IJK.h>
24#include <Schema_Temps_IJK_base.h>
25#include <Boundary_Conditions.h>
26#include <Champs_compris_IJK.h>
27#include <Multigrille_Adrien.h>
28#include <init_forcage_THI.h>
29#include <IJK_Field_vector.h>
30#include <corrections_qdm.h>
31#include <IJK_Interfaces.h>
32#include <Equation_base.h>
33#include <IJK_Field.h>
34#include <TRUST_Ref.h>
35
36
38class Fluide_base;
39
41{
42 Declare_instanciable_sans_constructeur(Navier_Stokes_FTD_IJK);
43public:
45
46 friend class Postprocessing_IJK;
48
50
51 void set_param(Param& titi) const override;
53
54 void completer() override;
55 void associer_pb_base(const Probleme_base&) override;
56 void discretiser() override { }
57 int preparer_calcul() override;
58 void projeter();
59 const Milieu_base& milieu() const override;
60 Milieu_base& milieu() override;
61 void associer_milieu_base(const Milieu_base& ) override;
62
63 int nombre_d_operateurs() const override { return -123; }
64 const Operateur& operateur(int) const override { throw; }
65 Operateur& operateur(int) override { throw; }
66 const Champ_Inc_base& inconnue() const override { throw; }
67 Champ_Inc_base& inconnue() override { throw; }
68
71
72 // Interface Champs_compris_IJK_interface
73 bool has_champ(const Motcle& nom) const override { return champs_compris_.has_champ(nom); }
74 bool has_champ(const Motcle& nom, OBS_PTR(Champ_base)& ref_champ) const override { /* not used */ throw; }
75 bool has_champ_vectoriel(const Motcle& nom) const override { return champs_compris_.has_champ_vectoriel(nom); }
76 const IJK_Field_double& get_IJK_field(const Motcle& nom) override;
77 const IJK_Field_vector3_double& get_IJK_field_vector(const Motcle& nom) override;
78 static void Fill_postprocessable_fields(std::vector<FieldInfo_t>& chps);
79 void get_noms_champs_postraitables(Noms& noms, Option opt=NONE) const override;
80
81
85
87 const IJK_Field_double& get_pressure() const { return pressure_; }
88 const IJK_Field_double& get_pressure_ghost_cells() const { return pressure_ghost_cells_; }
89
90 double get_vitesse_upstream() const { return vitesse_upstream_; }
91 double get_nb_diam_upstream() const { return nb_diam_upstream_; }
92
93 int get_upstream_dir() const { return upstream_dir_; }
95
96 const IJK_Field_double& get_rho_field() const { return rho_field_; }
97 double get_rho_field_ijk(int i, int j, int k) const { return rho_field_(i,j,k); }
98
99 const IJK_Field_vector3_double& get_velocity() const { return velocity_; }
100 IJK_Field_vector3_double& get_velocity() { return velocity_; }
101
104
115
116 const IJK_Field_vector3_double& get_velocity_ft() const { return velocity_ft_; }
117
118 void associer_interfaces(const IJK_Interfaces& inter) { interfaces_ = inter; }
119// void associer_domaine_ft(const Domaine_IJK& dom) { domaine_ft_ = dom; }
120
122 inline const Fluide_Diphasique_IJK& milieu_ijk() const { return ref_cast(Fluide_Diphasique_IJK, milieu()); }
123 inline Schema_Temps_IJK_base& schema_temps_ijk() { return ref_cast(Schema_Temps_IJK_base, le_schema_en_temps.valeur()); }
124 inline const Schema_Temps_IJK_base& schema_temps_ijk() const { return ref_cast(Schema_Temps_IJK_base, le_schema_en_temps.valeur()); }
125
126 void redistribute_to_splitting_ft_elem(const IJK_Field_double& input_field, IJK_Field_double& output_field);
127 void redistribute_from_splitting_ft_elem(const IJK_Field_double& input_field, IJK_Field_double& output_field);
128
131 // FixedVector<Redistribute_Field, 3>& redistrib_from_ft_face() const {return redistribute_from_splitting_ft_faces_;}
132 void get_redistribute_from_splitting_ft_faces(const IJK_Field_vector3_double& faces_ft, IJK_Field_vector3_double& faces_ns)
133 {
134 for (int dir = 0; dir < 3; dir++)
135 redistribute_from_splitting_ft_faces_[dir].redistribute(faces_ft[dir], faces_ns[dir]);
136 }
137
138 void maj_indicatrice_rho_mu(const bool parcourir = true);
139
141 void update_rho_v();
142
143 void transfer_ft_to_ns();
144
145 // Correcteur PID
146 void calculer_terme_asservissement(double& ax, double& ay, double& az);
147 void calculer_vitesse_gauche(const IJK_Field_double& vx, const IJK_Field_double& vy, const IJK_Field_double& vz, double& vx_moy, double& vy_moy, double& vz_moy);
148 void calculer_vitesse_droite(const IJK_Field_double& vx, const IJK_Field_double& vy, const IJK_Field_double& vz, double& vx_moy, double& vy_moy, double& vz_moy);
149
150 // Calcule la base pour chaque bulle qui est alignee avec la vitesse relative
151 void calculer_base_amont_bulle(const IJK_Field_double& vx, const IJK_Field_double& vy, const IJK_Field_double& vz, const DoubleTab& ubulles, DoubleTab& d1_amont_, DoubleTab& d2_amont_, DoubleTab& d3_amont_, DoubleTab& compteur_base_);
152
153 // Calcule le vecteur vitesse en amont dans la phase liquide pour chaque bulle
154 void calculer_v_amont_bulle(const IJK_Field_double& vx, const IJK_Field_double& vy, const IJK_Field_double& vz, const IJK_Field_double& wx, const IJK_Field_double& wy, const IJK_Field_double& wz, DoubleTab& v_amont_, DoubleTab& w_amont_, const DoubleTab& d1_amont_, const DoubleTab& d2_amont_, const DoubleTab& d3_amont_, DoubleTab& compteur_);
155
156 // Fonctions utiles pour trouver la force que le liquide exerce sur chaque bulle a partir d'un vol de controle definie par l'utilisateur dans le jdd
157 void calculer_terme_S_x(const IJK_Field_double& vx, const IJK_Field_double& vy, const IJK_Field_double& vz, const IJK_Field_double& p, DoubleTab& S, const int nx);
158 void calculer_terme_S_y(const IJK_Field_double& vx, const IJK_Field_double& vy, const IJK_Field_double& vz, const IJK_Field_double& p, DoubleTab& S, const int ny);
159 void calculer_terme_S_z(const IJK_Field_double& vx, const IJK_Field_double& vy, const IJK_Field_double& vz, const IJK_Field_double& p, DoubleTab& S, const int nz);
160 void calculer_terme_volumique(const IJK_Field_double& vx, const IJK_Field_double& vy, const IJK_Field_double& vz, const IJK_Field_double& rho_, const IJK_Field_double& indica_, DoubleTab& S);
161
162 void calculer_vitesses_bulle(const IJK_Field_double& vx, const IJK_Field_double& vy, const IJK_Field_double& vz, DoubleTab& u_bulles_, DoubleTab& compteur_vBulles_);
163
164 void calculer_terme_source_acceleration(IJK_Field_double& vx, const double time, const double timestep, const int rk_step);
165 void calculer_terme_source_acceleration_z(IJK_Field_double& vz, const double time, const double timestep, const int rk_step);
166
167 void calculer_terme_source_acceleration(const double time, const double timestep, const int rk_step, const int );
168
169 void compute_correction_for_momentum_balance(const int rk_step);
170
171 void calculer_dv(const double timestep, const double time, const int rk_step);
172
173 void compute_add_THI_force(const IJK_Field_vector3_double& vitesse, const int time_iteration, const double dt, const double current_time, const Domaine_IJK& my_splitting);
174
175 void compute_add_THI_force_sur_d_velocity(const IJK_Field_vector3_double& vitesse, const int time_iteration, const double dt, const double current_time, const Domaine_IJK& my_splitting,
176 const int facteur);
177
178 double calculer_moyenne_de_phase_liq(const IJK_Field_double& vx);
179
181
182 void fill_variable_source_and_potential_phi(const double time);
183
184 void write_check_etapes_et_termes(const int rk_step);
185
186 void compute_add_external_forces(const int dir);
187
188 double calculer_true_moyenne_de_phase_vap(const IJK_Field_double& vx);
189 double calculer_moyenne_de_phase_vap(const IJK_Field_double& vx);
190 double calculer_true_moyenne_de_phase_liq(const IJK_Field_double& vx);
191
192 void terme_source_gravite(IJK_Field_double& dv, int k_index, int dir) const;
193
196 void compute_var_volume_par_bulle(ArrOfDouble& var_volume_par_bulle);
198
199 Vecteur3 calculer_inv_rho_grad_p_moyen(const IJK_Field_double& inv_rho, const IJK_Field_double& pression);
200 Vecteur3 calculer_grad_p_moyen(const IJK_Field_double& pression);
201 Vecteur3 calculer_grad_p_over_rho_moyen(const IJK_Field_double& pression);
202
203 void euler_explicit_update(const IJK_Field_double& dv, IJK_Field_double& v, const int k_layer) const;
204
206 const IJK_Field_double& get_molecular_mu() const { return molecular_mu_; }
209
210 void rk3_sub_step(const int rk_step, const double total_timestep, const double fractionnal_timestep, const double time);
211 void euler_time_step(ArrOfDouble& var_volume_par_bulle);
212 void update_v_or_rhov(bool with_p = false);
213
214 void corriger_qdm();
215
216 // TODO FIXME DANS DOMAINE
218
219 void test_etapes_et_bilan_rho_u_euler(bool apres);
220
221 void deplacer_interfaces(const double timestep, const int rk_step, ArrOfDouble& var_volume_par_bulle, const int first_step_interface_smoothing);
222 void deplacer_interfaces_rk3(const double timestep, const int rk_step, ArrOfDouble& var_volume_par_bulle);
223 void calculer_vitesse_ft();
225
226 void sauvegarder_equation(const Nom&, SFichier& ) const;
227
229
231
233
234protected:
236
237 void initialise_velocity_using_expression(const Noms& expression_vitesse_initiale);
238 void initialise_velocity_from_file(const Nom& fichier_reprise_vitesse);
239
240 // TODO FIXME ELie : move to milieu
241 // Masse volumique:
242 double rho_moyen_ = 0.;
243 IJK_Field_double rho_field_;
244 IJK_Field_double inv_rho_field_;
245 // Molecular diffusivity (see diffusion operator)
246 IJK_Field_double molecular_mu_;
247
248
249 /* Velocity diffusion operator:
250 * simple_arithmetic : div(mu grad(u))
251 * full_arithmetic : Tenseur des contraintes complet : div[mu (grad(u)+grad^T(u))]
252 * mu : moyenne arithmetique
253 * full_adaptative : Tenseur des contraintes complet : div[mu (grad(u)+grad^T(u))]
254 * mu : switch from arithmetic to geometric mean depending on the direction (Not available yet)
255 */
259
260 /*
261 * Velocity convection operator
262 * non_conservative_simple : rho div(u u)
263 * non_conservative_rhou : div(rho u u) - u div(rho u)
264 * conservative : div(rho u u)
265 */
268
269 // TODO FIXME pas ici ...
270 // Classe outil pour passer entre domain_ijk_ et domain_ft_
271 // Une instance par direction des faces:
279
280 OBS_PTR(Milieu_base) le_fluide_;
282
283 Noms expression_vitesse_initiale_; // on attend trois expressions
284 Nom expression_pression_initiale_; // useless, unless post-pro OR pressure_increment.
286
292 int vitesse_entree_dir_ = DIRECTION_I;
296 bool add_initial_field_ = false;
298 bool suppression_rejetons_ = false; // By defaults, break-ups are not fixed on restart. (no deletion of smaller fractions)
299
300 // Discretisation du champ (1/rho) et utilisation dans le calcul de rho*v*v, dans le mass_solver
301 // et dans pressure_projection_with_inv_rho :
305
306 // Pour la premiere projection, on initialise la pression au champ de pression a l'equilibre diphasique :
308 // travail en increment de pression pour aider le solveur :
312
319 bool frozen_velocity_ = false;
320 bool velocity_reset_ = false;
321
322 double nb_diam_upstream_ = 0.;
324 double vitesse_entree_ = -1.1e20;
325 double vitesse_upstream_ = -1.1e20;
328 double velocity_bubble_old_ = -1.1e20;
334
335
336 // Pour les cas a bulles fixes
337 // valeurs par default des parametres de bulles fixes
340 double coef_mean_force_ = 0.;
343 double p_seuil_max_ = 10000000;
344 double p_seuil_min_ = -10000000;
345 IJK_Field_vector3_double force_rappel_;
346 IJK_Field_vector3_double force_rappel_ft_;
347
348 // right hand side for pressure solver
349 IJK_Field_double pressure_rhs_;
350 IJK_Field_double pressure_;
351 IJK_Field_double pressure_ghost_cells_;
352 IJK_Field_vector3_double velocity_;
353
354 IJK_Field_vector3_double terme_convection_mass_solver_;
355 IJK_Field_vector3_double terme_diffusion_mass_solver_;
356 IJK_Field_vector3_double rho_u_euler_av_prediction_champ_;
357 IJK_Field_vector3_double rho_du_euler_ap_prediction_champ_;
358 IJK_Field_vector3_double rho_u_euler_ap_projection_champ_;
359 IJK_Field_vector3_double rho_du_euler_ap_projection_champ_;
360 IJK_Field_vector3_double rho_u_euler_av_rho_mu_ind_champ_;
361 IJK_Field_vector3_double rho_u_euler_ap_rho_mu_ind_champ_;
362 IJK_Field_vector3_double terme_diffusion_local_;
363 IJK_Field_vector3_double terme_pression_local_;
364 IJK_Field_vector3_double terme_pression_in_ustar_local_;
365 IJK_Field_vector3_double d_v_diff_et_conv_;
366
383
384 // Field only needed for the option type_velocity_convection_form_== Nom("non_conservative_rhou")
385 IJK_Field_double div_rhou_;
386
387 // Temporary storage for the derivative
388 IJK_Field_vector3_double d_velocity_;
389 // Temporary storage for the fractional timestep in rk3 :
390 IJK_Field_vector3_double RK3_F_velocity_;
391
392
393 double pression_ap_proj_ = 0.;
396
400
401
402 double vol_bulle_monodisperse_ = -1; // Pour imposer le volume des bulles
403 double diam_bulle_monodisperse_ = -1; // Pour imposer le volume des bulles
404 ArrOfDouble vol_bulles_; // Le volume impose individuellement a chaque bulle.
406
407
408 // To work in pressure increment and potentially help the solver for high density ratios
409 IJK_Field_double d_pressure_;
410 // Only if pressure increment formulation AND RK3 time_scheme.
411 IJK_Field_double RK3_F_pressure_;
412
413 // Celui la est discretise sur le maillage etendu:
414 IJK_Field_vector3_double terme_source_interfaces_ft_;
415 IJK_Field_vector3_double terme_repulsion_interfaces_ft_;
416 IJK_Field_vector3_double terme_abs_repulsion_interfaces_ft_;
417
418 // Celui la est discretise sur le maillage ns:
419 IJK_Field_vector3_double terme_source_interfaces_ns_; // [ dt (rho u )/dt = N/m^3 ]
420 IJK_Field_vector3_double backup_terme_source_interfaces_ns_; // [ dt (rho u )/dt = N/m^3 ]
421 IJK_Field_vector3_double backup_terme_source_interfaces_ft_; // [ dt (rho u )/dt = N/m^3 ]
422 IJK_Field_vector3_double terme_repulsion_interfaces_ns_;
423 IJK_Field_vector3_double terme_abs_repulsion_interfaces_ns_;
424
425 // Pour l'option alternative du calcul de la diffusion :
426 IJK_Field_double unit_;
427 IJK_Field_vector3_double zero_field_ft_;
428 IJK_Field_vector3_double laplacien_velocity_;
429
430
431 // Booleen pour savoir si on a mis a jour l'indicatrice avec indicatrice next
432 // bool indicatrice_is_indicatrice_next_;
433 IJK_Field_double kappa_ft_;
434 IJK_Field_double kappa_ns_;
435
436 IJK_Field_double I_ns_;
437
444 TYPE_SURFACE_EFFICACE_FACE type_surface_efficace_face_ = TYPE_SURFACE_EFFICACE_FACE::NON_INITIALISE;
445 TYPE_SURFACE_EFFICACE_INTERFACE type_surface_efficace_interface_ = TYPE_SURFACE_EFFICACE_INTERFACE::NON_INITIALISE;
447
448 DoubleTab vitesses_translation_bulles_; // Vecteur de translation rigide pour chaque bulle
449 DoubleTab mean_bubble_rotation_vector_; // Vecteur de rotation rigide pour chaque bulle
450 DoubleTab centre_gravite_bulles_; // Position du centre de gravite pour chaque bulle (associee a la rotation)
452
453 IJK_Field_vector3_double velocity_ft_;
454
455 // Correcteur PID
456 double Kp_ = 0.;
457 double Kd_ = 0.;
458
459 // Nb de mailles sur lesquelles on applique le force upstream pour le shear perio
461
462 // Postpro sur les surfaces de controle
463 double delta_ = 0.;
464 double L_ = 0.;
465
466 // Postpro sur les volumes de controle
468
469 // Matrice non symetrique pour le shear perio
470 int NoSym_ = 0; // 0 -> On considere UNIQUEMENT la partie superieure de la matrice de pression (on suppose la partie inferieure = a la partie superieure) ET 1 -> On considere la relle forme de la matrice de pression
471
472
473 Nom expression_derivee_acceleration_ = "0"; // par defaut pas de terme d'acceleration
475 Noms expression_variable_source_; // on attend trois expressions
476 Nom expression_potential_phi_ = "??"; // source variable formulee en gradient
479 // terme source qdm pour pousser le fluide dans le canal (en m/s/s)
480 double terme_source_acceleration_ = 0.; // par defaut, zero
481 double terme_source_acceleration_z_ = 0.; // par defaut, zero
482
484
485 // Vecteurs de taille 3 a lire dans le jeu de donnees :
486 ArrOfDouble terme_source_correction_; // Valeur de la force de correction moyenne a appliquer
487 ArrOfInt correction_force_; // 3 flags d'activation de la correction ou non
488
489 // Storage for rhov for the evaluation of the acceleration source term :
490 IJK_Field_vector3_double rho_v_;
491 IJK_Field_vector3_double psi_velocity_; // for storage.
492 //ab-forcage-control-ecoulement-fin
493
494 IJK_Field_vector3_double variable_source_;
497 double facteur_variable_source_ = 1.; // ArrOfDouble? vecteur de taille 3 a lire dans le jeu de donnees
498
499 IJK_Field_double potential_phi_;
500
502
503 // Le jeu de donnees doit fournir soit des fichiers de reprise: ..
504 Nom fichier_reprise_vitesse_ = "??"; // par defaut, invalide
506
508
510
512};
513
514#endif /* Navier_Stokes_FTD_IJK_included */
Classe Champ_Inc_base.
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
Similar to Champs_compris_interface but for IJK scalar and vector fields.
std::tuple< Motcle, Entity, Nature_du_champ, bool > FieldInfo_t
Same as Champs_compris, but specialised for IJK fields and also supports quering for vectorial fields...
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
Definition Domaine_IJK.h:47
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
Definition Fluide_base.h:38
: class IJK_Interfaces
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
Definition Milieu_base.h:50
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
Operateur & operateur(int) override
FixedVector< Redistribute_Field, 3 > redistribute_to_splitting_ft_faces_
Vecteur3 calculer_grad_p_moyen(const IJK_Field_double &pression)
bool has_champ(const Motcle &nom) const override
const IJK_Field_double & get_rho_field() const
double get_vitesse_upstream() const
IJK_Field_vector3_double force_rappel_ft_
const IJK_Field_vector3_double & get_velocity_ft() const
IJK_Field_vector3_double rho_u_euler_av_rho_mu_ind_champ_
Fluide_Diphasique_IJK & milieu_ijk()
const Fluide_Diphasique_IJK & milieu_ijk() const
double calculer_true_moyenne_de_phase_vap(const IJK_Field_double &vx)
void initialise_velocity_from_file(const Nom &fichier_reprise_vitesse)
void calculer_terme_source_acceleration(IJK_Field_double &vx, const double time, const double timestep, const int rk_step)
IJK_Field_vector3_double rho_u_euler_ap_projection_champ_
Redistribute_Field redistribute_from_splitting_ft_elem_ghostz_min_
IJK_Field_vector3_double terme_repulsion_interfaces_ft_
void maj_indicatrice_rho_mu(const bool parcourir=true)
void get_redistribute_from_splitting_ft_faces(const IJK_Field_vector3_double &faces_ft, IJK_Field_vector3_double &faces_ns)
IJK_Field_vector3_double velocity_
int nombre_d_operateurs() const override
Probleme_FTD_IJK_base & probleme_ijk()
IJK_Field_vector3_double terme_pression_in_ustar_local_
Champs_compris_IJK_interface::FieldInfo_t FieldInfo_t
int get_improved_initial_pressure_guess() const
IJK_Field_vector3_double variable_source_
const Schema_Temps_IJK_base & schema_temps_ijk() const
OBS_PTR(Milieu_base) le_fluide_
IJK_Field_vector3_double terme_diffusion_mass_solver_
const IJK_Field_double & get_IJK_field(const Motcle &nom) override
Boundary_Conditions boundary_conditions_
FixedVector< Redistribute_Field, 3 > redistribute_from_splitting_ft_faces_
IJK_Field_vector3_double rho_u_euler_av_prediction_champ_
IJK_Field_vector3_double terme_repulsion_interfaces_ns_
Multigrille_Adrien poisson_solver_
OBS_PTR(IJK_Interfaces) interfaces_
IJK_Field_vector3_double terme_source_interfaces_ns_
const Operateur & operateur(int) const override
void rk3_sub_step(const int rk_step, const double total_timestep, const double fractionnal_timestep, const double time)
void set_fichier_reprise_vitesse(const Nom &prefix)
void calculer_terme_volumique(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, const IJK_Field_double &rho_, const IJK_Field_double &indica_, DoubleTab &S)
IJK_Field_vector3_double rho_v_
IJK_Field_vector3_double RK3_F_velocity_
const IJK_Field_double & get_pressure() const
bool has_champ_vectoriel(const Motcle &nom) const override
void get_noms_champs_postraitables(Noms &noms, Option opt=NONE) const override
void sauvegarder_equation(const Nom &, SFichier &) const
IJK_Field_vector3_double terme_pression_local_
void compute_add_external_forces(const int dir)
bool get_upstream_velocity_measured() const
int get_use_bubbles_velocities_from_interface() const
IJK_Field_double pressure_ghost_cells_
Redistribute_Field redistribute_from_splitting_ft_elem_ghostz_max_
IJK_Field_vector3_double velocity_ft_
const Milieu_base & milieu() const override
IJK_Field_vector3_double force_rappel_
IJK_Field_vector3_double terme_abs_repulsion_interfaces_ns_
double calculer_true_moyenne_de_phase_liq(const IJK_Field_double &vx)
void deplacer_interfaces(const double timestep, const int rk_step, ArrOfDouble &var_volume_par_bulle, const int first_step_interface_smoothing)
double get_rho_field_ijk(int i, int j, int k) const
void euler_explicit_update(const IJK_Field_double &dv, IJK_Field_double &v, const int k_layer) const
void calculer_vitesse_gauche(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, double &vx_moy, double &vy_moy, double &vz_moy)
Vecteur3 calculer_grad_p_over_rho_moyen(const IJK_Field_double &pression)
IJK_Field_vector3_double & get_velocity()
void calculer_terme_asservissement(double &ax, double &ay, double &az)
double get_nb_diam_upstream() const
void completer() override
Complete la construction (initialisation) des objets associes a l'equation.
void calculer_v_amont_bulle(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, const IJK_Field_double &wx, const IJK_Field_double &wy, const IJK_Field_double &wz, DoubleTab &v_amont_, DoubleTab &w_amont_, const DoubleTab &d1_amont_, const DoubleTab &d2_amont_, const DoubleTab &d3_amont_, DoubleTab &compteur_)
IJK_Field_vector3_double terme_abs_repulsion_interfaces_ft_
IJK_Field_vector3_double rho_du_euler_ap_prediction_champ_
double calculer_moyenne_de_phase_liq(const IJK_Field_double &vx)
Schema_Temps_IJK_base & schema_temps_ijk()
Operateur_IJK_faces_diff velocity_diffusion_op_
Champ_Inc_base & inconnue() override
IJK_Field_vector3_double terme_source_interfaces_ft_
void initialise_velocity_using_expression(const Noms &expression_vitesse_initiale)
Vecteur3 calculer_inv_rho_grad_p_moyen(const IJK_Field_double &inv_rho, const IJK_Field_double &pression)
const Boundary_Conditions & get_boundary_conditions() const
void compute_add_THI_force_sur_d_velocity(const IJK_Field_vector3_double &vitesse, const int time_iteration, const double dt, const double current_time, const Domaine_IJK &my_splitting, const int facteur)
TYPE_SURFACE_EFFICACE_INTERFACE type_surface_efficace_interface_
const IJK_Field_vector3_double & get_velocity() const
Redistribute_Field redistribute_to_splitting_ft_elem_
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base)&ref_champ) const override
void calculer_terme_S_z(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, const IJK_Field_double &p, DoubleTab &S, const int nz)
const IJK_Field_vector3_double & get_IJK_field_vector(const Motcle &nom) override
const IJK_Field_double & get_molecular_mu() const
const Champ_Inc_base & inconnue() const override
int & get_use_bubbles_velocities_from_barycentres()
IJK_Field_vector3_double backup_terme_source_interfaces_ns_
Redistribute_Field & redistrib_from_ft_elem()
Redistribute_Field redistribute_from_splitting_ft_elem_
void deplacer_interfaces_rk3(const double timestep, const int rk_step, ArrOfDouble &var_volume_par_bulle)
void discretiser() override
Discretise l'equation.
void compute_var_volume_par_bulle(ArrOfDouble &var_volume_par_bulle)
void compute_add_THI_force(const IJK_Field_vector3_double &vitesse, const int time_iteration, const double dt, const double current_time, const Domaine_IJK &my_splitting)
IJK_Field_vector3_double rho_du_euler_ap_projection_champ_
void euler_time_step(ArrOfDouble &var_volume_par_bulle)
IJK_Field_vector3_double terme_diffusion_local_
void calculer_terme_source_acceleration_z(IJK_Field_double &vz, const double time, const double timestep, const int rk_step)
void compute_correction_for_momentum_balance(const int rk_step)
IJK_Field_vector3_double d_velocity_
void calculer_dv(const double timestep, const double time, const int rk_step)
TYPE_SURFACE_EFFICACE_FACE type_surface_efficace_face_
void associer_interfaces(const IJK_Interfaces &inter)
void associer_pb_base(const Probleme_base &) override
S'associe au Probleme passe en parametre.
double calculer_moyenne_de_phase_vap(const IJK_Field_double &vx)
Redistribute_Field redistribute_from_splitting_ft_elem_ghostz_
void update_v_or_rhov(bool with_p=false)
void terme_source_gravite(IJK_Field_double &dv, int k_index, int dir) const
const IJK_Field_double & get_pressure_ghost_cells() const
void calculer_terme_S_y(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, const IJK_Field_double &p, DoubleTab &S, const int ny)
void associer_milieu_base(const Milieu_base &) override
IJK_Field_vector3_double terme_convection_mass_solver_
void write_check_etapes_et_termes(const int rk_step)
IJK_Field_vector3_double zero_field_ft_
Champs_compris_IJK champs_compris_
void redistribute_from_splitting_ft_elem(const IJK_Field_double &input_field, IJK_Field_double &output_field)
void fill_variable_source_and_potential_phi(const double time)
IJK_Field_vector3_double rho_u_euler_ap_rho_mu_ind_champ_
IJK_Field_vector3_double psi_velocity_
void redistribute_to_splitting_ft_elem(const IJK_Field_double &input_field, IJK_Field_double &output_field)
void calculer_vitesse_droite(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, double &vx_moy, double &vy_moy, double &vz_moy)
int preparer_calcul() override
Tout ce qui ne depend pas des autres problemes eventuels.
IJK_Field_vector3_double d_v_diff_et_conv_
IJK_Field_vector3_double laplacien_velocity_
Operateur_IJK_faces_conv velocity_convection_op_
void calculer_terme_S_x(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, const IJK_Field_double &p, DoubleTab &S, const int nx)
void calculer_vitesses_bulle(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, DoubleTab &u_bulles_, DoubleTab &compteur_vBulles_)
Redistribute_Field & redistrib_to_ft_elem()
IJK_Field_vector3_double backup_terme_source_interfaces_ft_
int get_use_bubbles_velocities_from_barycentres() const
void test_etapes_et_bilan_rho_u_euler(bool apres)
static void Fill_postprocessable_fields(std::vector< FieldInfo_t > &chps)
void set_param(Param &titi) const override
void calculer_base_amont_bulle(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, const DoubleTab &ubulles, DoubleTab &d1_amont_, DoubleTab &d2_amont_, DoubleTab &d3_amont_, DoubleTab &compteur_base_)
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
classe Operateur Classe generique de la hierarchie des operateurs.
Definition Operateur.h:39
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
Representation des donnees de la classe Parser.
Definition Parser.h:39
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
Definition SFichier.h:27
: class corrections_qdm