16#include <Transport_Marqueur_FT.h>
17#include <Probleme_base.h>
18#include <Schema_Temps_base.h>
19#include <Discretisation_base.h>
21#include <Fluide_Incompressible.h>
22#include <Champ_Uniforme.h>
23#include <Fluide_Diphasique.h>
24#include <Domaine_VF.h>
25#include <Source_Reaction_Particules.h>
27#include <Sous_Domaine.h>
28#include <Source_Masse_Ajoutee.h>
29#include <communications.h>
93 const Navier_Stokes_std& eq_ns = ref_cast(Navier_Stokes_std,
probleme().equation(0));
94 const Milieu_base& mil = eq_ns.
milieu();
103 if (sub_type(Source_Masse_Ajoutee,itr.valeur()))
108 Cerr<<
"Implicite option cannot be used if there is no added weight source term."<<finl;
134 param.
ajouter_condition(
"(value_of_contribution_one_way_eq_0)_or_(value_of_contribution_one_way_eq_1)",
"contribution_one_way must be set to 0 or 1");
137 param.
ajouter_condition(
"(value_of_implicite_eq_0)_or_(value_of_implicite_eq_1)",
"implicite must be set to 0 or 1");
143 if (mot==
"methode_transport")
146 if (motlu==
"vitesse_interpolee")
148 else if (motlu==
"vitesse_particules")
152 Cerr<<
"The keyword "<<motlu<<
" is not recognized as a calculation method "<<finl;
153 Cerr<<
"of the velocity particles."<<finl;
158 else if (mot==
"methode_couplage")
163 else if (motlu==
"one_way_coupling")
165 else if (motlu==
"two_way_coupling")
172 Source& source_particule=les_sources_ns.add(source_part);
173 Cerr <<
"Creation of the Force Particule term for the two_way_coupling case."<< finl;
174 Nom type_so =
"Two_Way_Coupling";
176 if (
Motcle(disc)==
"VEFPreP1b")
179 Cerr<<
"type_so = "<<type_so<<finl;
181 source_particule->associer_eqn(eq_ns);
187 Cerr<<
"The keyword "<<motlu<<
" is not recognized as a fluid/particles coupling method."<<finl;
192 else if (mot==
"injection")
197 else if (mot==
"transformation_bulles")
266 Cerr<<
"Transformation of bubbles into particles can be selected"<<finl;
267 Cerr<<
"only for two phases calculation."<<finl;
292 fieldname =
"CHAMP_BIDON";
300 1 , nb_valeurs_temps,
303 champ_bidon_->associer_eqn(*
this);
307 const Domaine& domaine = un_domaine_dis.
domaine();
320 const Domaine& domaine = le_dom_dis->domaine();
337 const ArrOfInt& som_init_inject = ens_points_inject.
som_init_util();
400 for (
int i=0; i<
nb_it_; i++)
446 if (sup_ou_egal(temps,t_debut_integr))
451 const double delta_t = probleme_base_->schema_temps().pas_de_temps();
453 deplacement *= delta_t;
481 gradient.calculer(champ_pression.
valeurs(), champ_grad_p->valeurs());
482 le_solveur_masse_ns.
appliquer(champ_grad_p->valeurs());
485 const DoubleTab& pos = ens_points.
sommets();
492 for (
int i = 0; i < nb_pos_tot; i++)
494 const int num_elem = elem[i];
507 for (
int i = 0; i < nb_pos_tot; i++)
511 for (
int j = 0; j < dim; j++)
519 for (
int i = 0; i < nb_pos_tot; i++)
523 for (
int j = 0; j < dim; j++)
557 Cerr <<
"Error for method calculer_proprietes_fluide_pos_particules\n";
575 les_positions.
resize(nb_pos_tot, dim);
576 les_elements.
resize(nb_pos_tot);
579 for (
int i = 0; i < nb_pos_tot; i++)
581 const int num_elem = elem[i];
584 for (
int j = 0; j < dim; j++)
585 les_positions(nb_positions, j) = pos(i, j);
586 les_elements(nb_positions) = num_elem;
594 double rho = champ_masse_vol.
valeurs()(0,0);
654 injection(maillage_transfo,proprietes_transfo);
674 const Equation_base& eqn_hydraulique = probleme_base_->equation(0);
685 ArrOfInt flags_compos_a_supprimer;
704 Cerr<<
"Particles transformation can be activated only for a Fluide_Diphasique medium."<<finl;
721 const DoubleTab& indic,
722 ArrOfDouble& volumes,
723 DoubleTab& positions)
727 const DoubleVect& vol_elem = zvf.
volumes();
728 const DoubleTab& xp_elem = zvf.
xp();
732 volumes.
resize_array(nb_compo, RESIZE_OPTIONS::NOCOPY_NOINIT);
733 positions.
resize(nb_compo, dim, RESIZE_OPTIONS::NOCOPY_NOINIT);
738 for (
int elem=0; elem<nb_elem; elem++)
740 const int num_group = num_compo(elem);
744 const double v = indic_phase * vol_elem(elem);
745 volumes[num_group] += v;
746 for (
int j=0; j<dim; j++)
747 positions(num_group,j) += xp_elem(elem,j) * v;
754 for (
int num_group=0; num_group<nb_compo; num_group++)
756 const double inv_v = 1. / volumes[num_group];
757 for (
int j=0; j<dim; j++)
758 positions(num_group,j) *= inv_v;
772 const DoubleTab& positions,
773 ArrOfInt& flags_compo_a_supprimer)
776 const Domaine& domaine_geom = zvf.
domaine();
777 const DoubleVect& volume_elem = zvf.
volumes();
785 flags_compo_a_supprimer.
resize_array(nb_compo, RESIZE_OPTIONS::NOCOPY_NOINIT);
786 flags_compo_a_supprimer = 0;
789 const int nb_elem = domaine_geom.
nb_elem();
790 ArrOfBit flag_sous_domaine(nb_elem);
791 flag_sous_domaine = 0;
794 for (
int i_sous_domaine = 0; i_sous_domaine < nb_sous_domaines; i_sous_domaine++)
797 const int nb_elem_sous_domaine = sous_domaine.
nb_elem_tot();
798 for (
int i = 0; i < nb_elem_sous_domaine; i++)
800 const int ielem = sous_domaine[i];
803 flag_sous_domaine.
setbit(sous_domaine[i]);
809 const double volume_max = 4. / 3. * M_PI * pow(
diametre_min_ * 0.5, 3);
811 for (
int i = 0; i < nb_compo; i++)
817 const int num_elem = elems[i];
818 if (num_elem >= 0 && num_elem < nb_elem)
821 if (flag_sous_domaine[num_elem])
826 const double volume_local_max =
beta_transfo_ / 6. * volume_elem[num_elem];
827 const double v = volumes[i];
830 if (v < volume_max || v < volume_local_max)
831 flags_compo_a_supprimer[i] = 1;
854 const ArrOfInt& flags_compos_a_supprimer,
855 const DoubleTab& positions,
856 const ArrOfDouble& volumes)
861 double rho_val = rho(0,0);
866 for (
int i = 0; i < nb_compo; i++)
867 if (flags_compos_a_supprimer[i])
871 const Domaine& domaine = le_dom_dis->domaine();
874 DoubleTab& soms_tmp = ens_points.
sommets_lu();
877 DoubleTab& dv_tmp = propri.
delta_v();
882 soms_tmp.
resize(size_new,dim);
883 vitesse_tmp.
resize(size_new,dim);
884 dv_tmp.
resize(size_new,dim);
885 temp_tmp.
resize(size_new,1);
886 mvol_tmp.
resize(size_new,1);
887 vol_tmp.
resize(size_new,1);
888 diam_tmp.
resize(size_new,1);
891 for (
int i = 0; i<nb_compo; i++)
893 if (flags_compos_a_supprimer[i]>0)
895 for (
int j=0; j<dim; j++)
897 soms_tmp(compt,j) = positions(i,j);
898 vitesse_tmp(compt,j) = 0.;
899 dv_tmp(compt,j) = 0.;
901 temp_tmp(compt,0) = 273.;
902 mvol_tmp(compt,0) = rho_val;
903 vol_tmp(compt,0) = volumes[i];
904 diam_tmp(compt,0) = pow(volumes[i]*3./(4.*M_PI), 1./3) * 2.;
932 const Equation_base& eqn_hydraulique = probleme_base_->equation(0);
946 DoubleTabFT d2(deplacement);
953 for (
int i = 0; i < n; i++)
955 for (
int j = 0; j < dim; j++)
957 const double depl2 = d2(i,j);
958 deplacement(i,j) -= depl2;
967 deplacement = vitesse_p;
987 for (
int i=n_deb; i<n_fin; i++)
988 for (
int j=0; j<dim; j++)
993 for (
int i=n_deb; i<n_fin; i++)
994 for (
int j=0; j<dim; j++)
1014 for (
int i=0; i<nb_particules; i++)
1015 for (
int j=0; j<dim; j++)
1020 for (
int i=0; i<nb_particules; i++)
1021 for (
int j=0; j<dim; j++)
1025 for (
int i=0; i<nb_particules; i++)
1026 for (
int j=0; j<dim; j++)
1041 const DoubleTab& pos = maillage.
sommets();
1044 const int nb_pos_tot = pos.
dimension(0);
1050 double x = 0.,y= 0.,z= 0.;
1052 for (
int som = 0; som < nb_pos_tot; som++)
1054 const int num_elem = elem[som];
1063 face_bord = som_face[som];
1077 const int som,
int& face_bord,
1079 DoubleTab& vitesse_p)
1083 const DoubleTab& cg_faces = domaine_vf.
xv();
1084 DoubleTab vecteur_base(dim,dim);
1085 DoubleVect vit_base1(dim);
1089 for (
int j=0; j<dim; j++)
1091 norme = sqrt(norme);
1092 if (!est_egal(norme,0.))
1094 for (
int j=0; j<dim; j++)
1095 vecteur_base(0,j) = domaine_vf.
face_normales(face_bord,j)/norme;
1099 Cerr<<
"Problem encountered wih the norme calculation for the method "<<finl;
1100 Cerr<<
"Maillage_FT_Disc::modifier_proprietes_particules"<<finl;
1105 vecteur_base(1,0) = x-cg_faces(face_bord,0);
1106 vecteur_base(1,1) = y-cg_faces(face_bord,1);
1108 vecteur_base(1,2) = z-cg_faces(face_bord,2);
1110 for (
int j=0; j<dim; j++)
1111 norme += vecteur_base(1,j)*vecteur_base(1,j);
1112 norme = sqrt(norme);
1113 if (!est_egal(norme,0.))
1115 for (
int j=0; j<dim; j++)
1116 vecteur_base(1,j) = vecteur_base(1,j)/norme;
1120 Cerr<<
"Problem encountered wih the tan1 norme calculation for the method"<<finl;
1121 Cerr<<
"Maillage_FT_Disc::modifier_proprietes_particules"<<finl;
1128 vecteur_base(2,0)=vecteur_base(0,1)*vecteur_base(1,2)-vecteur_base(0,2)*vecteur_base(1,1);
1129 vecteur_base(2,1)=vecteur_base(0,2)*vecteur_base(1,0)-vecteur_base(0,0)*vecteur_base(1,2);
1130 vecteur_base(2,2)=vecteur_base(0,0)*vecteur_base(1,1)-vecteur_base(0,1)*vecteur_base(1,0);
1134 for (
int j=0; j<dim; j++)
1136 for (
int k=0; k<dim; k++)
1137 vit_base1(j) += vitesse_p(som,k)*vecteur_base(j,k);
1142 vit_base1(0) *= -1.;
1145 for (
int j=0; j<dim; j++)
1147 vitesse_p(som,j) = 0.;
1148 for (
int k=0; k<dim; k++)
1149 vitesse_p(som,j) += vit_base1(k)*vecteur_base(k,j);
1158 int skip_facettes = 1;
1169 if (
mp_sum(nb_particules))
1173 DoubleTab& delta_vit_som = proprietes.
delta_v();
1196 if (
mp_sum(nb_particules))
1201 DoubleTab& delta_vit_som = proprietes.
delta_v();
1222 noms_compris.add(
"densite_particules");
1223 noms_compris.add(
"volume_particules");
1224 if (opt==DESCRIPTION)
1225 Cerr<<
" Transport_Marqueur_FT : "<< noms_compris <<finl;
1227 nom.add(noms_compris);
1233 if (motlu ==
"densite_particules")
1235 if (!densite_particules_)
1241 Nom nom=
"densite_particules";
1242 Nom unite=
"sans_dimension";
1243 discr.
discretiser_champ(
"champ_elem",un_domaine_dis,nom,unite,1,temps,densite_particules_);
1248 if (motlu ==
"volume_particules")
1250 if (!volume_particules_)
1256 Nom nom=
"volume_particules";
1257 Nom unite=
"sans_dimension";
1258 discr.
discretiser_champ(
"champ_elem",un_domaine_dis,nom,unite,1,temps,volume_particules_);
1266 if (nom ==
"densite_particules" || nom ==
"volume_particules")
1280 if (nom ==
"densite_particules" || nom ==
"volume_particules")
1291 if (nom ==
"densite_particules")
1295 DoubleTab& val_densite = ch_densite.
valeurs();
1301 if (nom ==
"volume_particules")
1305 DoubleTab& val_vol = ch_vol.
valeurs();
1316 throw std::runtime_error(std::string(
"Field ") + nom.
getString() + std::string(
" not found !"));
1326 const ArrOfInt& sommet_elem = ens_points.
sommet_elem();
1330 for (
int som=0; som<nb_som; som++)
1332 elem = sommet_elem[som];
1333 val_densite(elem) += 1.;
1347 const ArrOfInt& sommet_elem = ens_points.
sommet_elem();
1355 for (
int som=0; som<nb_som; som++)
1357 elem = sommet_elem[som];
1358 val_volume(elem) += volume_part(som, 0);
1365inline void remplissage(
const DoubleTab& tab, DoubleTab *ftab)
1369 ftab->
resize(nb_noeuds, nb_compo);
1370 for (
int som=0 ; som<nb_noeuds ; som++)
1371 for (
int k=0 ; k<nb_compo ; k++)
1372 (*ftab)(som,k) = tab(som,k);
1388 const Motcle som =
"sommets";
1389 const Motcle elem =
"elements";
1390 const Motcle bi =
"elements et sommets";
1392 int proprietes_postraitables=1;
1399 proprietes_postraitables=0;
1401 if (proprietes_postraitables)
1403 Motcles les_champs(nb_champs);
1406 les_champs[1] =
"vitesse";
1407 if (proprietes_postraitables)
1409 les_champs[2] =
"delta_v";
1410 les_champs[3] =
"temperature";
1411 les_champs[4] =
"masse_volumique";
1412 les_champs[5] =
"diametre";
1413 les_champs[6] =
"volume";
1416 Motcles localisations(nb_champs);
1418 localisations[0] = bi;
1420 for (
int i=1; i<nb_champs; i++)
1421 localisations[i] = som;
1424 int rang=les_champs.
search(champ);
1428 Cerr<<
"The real fields to be post-processed are :"<<finl;
1429 for (
int i=1 ; i<nb_champs ; i++)
1431 Cerr <<
" Fields("<<i<<
") : "<< les_champs[i] <<
" # Localisations : " << localisations[i] << finl;
1440 else if (! (localisations[rang]==bi
1456 DoubleTabFT vitesse;
1458 remplissage(vitesse, ftab);
1490 Cerr <<
"Error for the method Transport_Marqueur_FT::get_champ_post_FT" << finl;
void setbit(int_t i) const
Met le bit e a 1.
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
virtual DoubleTab & valeurs()=0
classe Champ_base Cette classe est la base de la hierarchie des champs.
virtual double changer_temps(const double t)
Fixe le temps auquel se situe le champ.
virtual DoubleTab & valeur_aux_elems(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &valeurs) const
provoque une erreur ! doit etre surchargee par les classes derivees
virtual bool has_champ(const Motcle &nom, OBS_PTR(Champ_base)&ref_champ) const =0
: class Desc_Structure_FT
classe Discretisation_base Cette classe represente un schema de discretisation en espace,...
void discretiser_champ(const Motcle &directive, const Domaine_dis_base &z, const Nom &nom, const Nom &unite, int nb_comp, int nb_pas_dt, double temps, OWN_PTR(Champ_Inc_base)&champ, const Nom &sous_type=NOM_VIDE) const
const Sous_Domaine_t & ss_domaine(int i) const
SmallArrOfTID_t & chercher_elements(const DoubleTab &pos, SmallArrOfTID_t &elem, int reel=0) const
Recherche des elements contenant les points dont les coordonnees sont specifiees.
virtual double face_normales(int face, int comp) const
double xv(int num_face, int k) const
double volumes(int i) const
double xp(int num_elem, int k) const
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
void associer_domaine(const Domaine &domaine)
const DoubleTab & sommets_lu() const
Class defining operators and methods for all reading operation in an input flow (file,...
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
virtual void set_param(Param &titi) const override
const Nom & le_nom() const override
Renvoie le nom de l'equation.
virtual const Milieu_base & milieu() const =0
Sources & sources()
Renvoie les termes sources asssocies a l'equation.
Solveur_Masse_base & solv_masse()
Renvoie le solveur de masse associe a l'equation.
virtual const Champ_Inc_base & inconnue() const =0
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
void initialise_residu(int=0)
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
void creer_champ(const Motcle &motlu) override
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
virtual bool initTimeStep(double dt)
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
Champs_compris champs_compris_
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
const Fluide_Incompressible & fluide_phase(int la_phase) const
classe Fluide_Incompressible Cette classe represente un d'un fluide incompressible ainsi que
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
const Champ_Don_base & viscosite_dynamique() const
: class Maillage_FT_Disc Cette classe decrit un maillage:
void transporter_simple(const DoubleTab &deplacement)
void nettoyer_noeuds_virtuels_et_frontieres()
void preparer_tableau_avant_transport(ArrOfDouble &tableau, const Desc_Structure_FT &descripteur) const
Prepare un tableau de donnees aux sommets ou aux facettes pour conserver les valeurs apres transport.
int nb_sommets() const
renvoie le nombre de sommets (reels et virtuels) (egal a sommets().
const DoubleTab & sommets() const
renvoie le tableau des sommets (reels et virtuels) dimension(0) = nombre de sommets,
void associer_equation_transport(const Equation_base &equation) override
on remplit refequation_transport_, schema_comm_domaine_ desc_sommets_.comm_group_ et desc_facettes_....
void update_tableau_apres_transport(ArrOfDouble &tableau, int nb_elements, const Desc_Structure_FT &descripteur) const
Voir preparer_tableau_avant_transport.
int sommet_ligne_contact(int i) const
const Desc_Structure_FT & desc_sommets() const
renvoie le descripteur des sommets (espace_distant/virtuel)
virtual void ajouter_maillage(const Maillage_FT_Disc &maillage_tmp, int skip_facettes=0)
double changer_temps(double t)
return temps_physique_ = t
const ArrOfInt & som_init_util() const
return som_init_util_
void nettoyer_phase(const Nom &nom_eq, const int phase)
const ArrOfInt & sommet_face_bord() const
pour postraitement, renvoie sommet_face_bord_
const ArrOfInt & sommet_elem() const
pour postraitement, renvoie sommet_elem_
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
virtual const Champ_base & masse_volumique() const
Renvoie la masse volumique du milieu.
virtual int a_gravite() const
Renvoie 1 si la gravite a ete initialisee.
virtual const Champ_Don_base & gravite() const
Renvoie la gravite du milieu si elle a ete associe provoque une erreur sinon.
Une chaine de caractere (Nom) en majuscules.
Un tableau d'objets de la classe Motcle.
int search(const Motcle &t) const
virtual const Champ_base * get_delta_vitesse_interface() const
Si le champ de vitesse est discontinu (calcul avec changement de phase), renvoie un pointeur vers le ...
const Milieu_base & milieu() const override
int is_terme_gravite_rhog() const
classe Navier_Stokes_std Cette classe porte les termes de l'equation de la dynamique
const Milieu_base & milieu() const override
Renvoie le milieu physique de l'equation (le Fluide_base upcaste en Milieu_base).
const Champ_Inc_base & inconnue() const override
Renvoie la vitesse (champ inconnue de l'equation) (version const).
Operateur_Grad & operateur_gradient()
Renvoie l'operateur de calcul du gradient associe a l'equation.
Champ_Inc_base & grad_P()
Champ_Inc_base & pression()
class Nom Une chaine de caractere pour nommer les objets de TRUST
const std::string & getString() const
Un tableau de chaine de caracteres (VECT(Nom)).
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.
Classe Operateur_Grad Classe generique de la hierarchie des operateurs calculant le gradient.
Helper class to factorize the readOn method of Objet_U classes.
void ajouter_condition(const char *condition, const char *message, const char *name=0)
Declare a post-read logical condition that must hold on the parameter values.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
void ajouter_non_std(const char *keyword, const Objet_U *value, Param::Nature nat=Param::OPTIONAL)
Register a keyword handled by Objet_U::lire_motcle_non_standard.
int lire_avec_accolades_depuis(Entree &is)
Parse the parameter block { ... } from is.
static const char *const demande_description
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
const Discretisation_base & discretisation() const
Renvoie la discretisation associee au probleme.
const Schema_Temps_base & schema_temps() const
Renvoie le schema en temps associe au probleme.
virtual const Equation_base & equation(int) const =0
static void mp_max_for_each_item(TRUSTArray< _TYPE_ > &x, int n=-1)
static void mp_sum_for_each_item(TRUSTArray< _TYPE_ > &x, int n=-1)
static double mp_sum(double)
Calcule la somme de x sur tous les processeurs du groupe courant.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe qui porte les proprietes de particules.
DoubleTab & masse_vol_particules()
void fixer_nb_particules(const int nb_part)
DoubleTab & vitesse_particules()
void nettoyer(const ArrOfInt &som_utilises)
int nb_particules() const
DoubleTab & diametre_particules()
void ajouter_proprietes(const Proprietes_part_vol &proprietes_tmp)
DoubleTab & volume_particules()
DoubleTab & temperature_particules()
double temps_courant() const
Renvoie le temps courant.
double pas_temps_min() const
Renvoie le pas de temps minimum.
double temps_init() const
Renvoie le temps initial.
virtual int nb_valeurs_temporelles() const =0
classe Solveur_Masse_base Represente la matrice de masse d'une equation.
virtual DoubleTab & appliquer(DoubleTab &) const
renvoie appliquer_impl(x/coeffient_temporelle) si on a un coefficient temporel sinon renvoie applique...
Classe de base des flux de sortie.
Classe Source_Reaction_Particules Calcul du terme source a ajouter dans Navier_Stokes pour prendre en...
void associer_eq_marqueur(const Equation_base &equation)
classe Source Classe generique de la hierarchie des sources, un objet Source peut
void typer_direct(const Nom &)
class Sources Sources represente une liste de Source.
int_t nb_elem_tot() const
_SIZE_ size_array() const
void resize_array(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension(int d) const
void resize(_SIZE_, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")
Milieu_base & milieu() override
void update_indicatrice_normale_distance()
Updates normals and distances to interface, then updates indicatrice.
virtual double suppression_interfaces(const IntVect &num_compo, const ArrOfInt &flags_compo_a_supprimer)
void parcourir_maillage()
void calculer_scalaire_interpole(const Champ_base &ch_scal, const Maillage_FT_Disc &, DoubleTab &ch_scal_noeuds, int nv_calc) const
DoubleTab & deplacement_som()
const Proprietes_part_vol & proprietes_particules() const
const Champ_base & get_indicatrice() override
getter champ variables_internes_->indicatrice_cache a partir de la position des interfaces.
Transport_Interfaces_FT_Disc()
constructeur par defaut
void discretiser() override
Discretisation des champs: - indicatrice_ : champ scalaire discretise aux elements.
const Maillage_FT_Disc & maillage_inject() const
virtual void calculer_vitesse_transport_interpolee(const Champ_base &champ_vitesse, const Maillage_FT_Disc &m, DoubleTab &vitesse_noeuds, int nv_calc) const
const Probleme_base & get_probleme_base() const
const Proprietes_part_vol & proprietes_inject() const
const Maillage_FT_Disc & maillage_interface() const
IntVect & vecteur_elements()
OBS_PTR(Probleme_base) probleme_base_
virtual int calculer_composantes_connexes_pour_suppression(IntVect &num_compo)
DoubleTab & tableaux_positions()
void transformer_particules()
int linject(double temps) const
void creer_champ(const Motcle &motlu) override
DoubleTab visco_dyn_fluide_som_
int sauvegarder(Sortie &) const override
On sauvegarde l'inconnue, puis les sources sur un flot de sortie.
int get_champ_post_FT(const Motcle &champ, Postraitement_base::Localisation loc, DoubleTab *ftab=0) const override
Cherche le champ discret aux interfaces dont le nom est "champ", et verifie qu'il peut etre postraite...
int ltransfo(double temps) const
int reprendre(Entree &) override
On reprend l'inconnue a partir d'un flot d'entree.
Methode_couplage methode_couplage_
void mettre_a_jour(double temps) override
La valeur de l'inconnue sur le pas de temps a ete calculee.
void calcul_proprietes_geometriques(const IntVect &num_compo, const int nb_compo_glob, const DoubleTab &indic, ArrOfDouble &volumes, DoubleTab &positions)
void construction_ensemble_proprietes(const IntVect &num_compo, const int nb_compo, Maillage_FT_Disc &ens_points, Proprietes_part_vol &propri, const ArrOfInt &flags_compos_a_supprimer, const DoubleTab &positions, const ArrOfDouble &volumes)
const DoubleTab & calculer_valeurs_densite(DoubleTab &val_densite) const
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
Entree & lire_transformation(Entree &is)
void calcul_vitesse_p(DoubleTab &deplacement) const
Entree & lire_injection(Entree &is)
DoubleTab vit_fluide_som_
void injecter(double temps)
const Champ_Inc_base & inconnue() const override
OWN_PTR(Champ_Fonc_base) densite_particules_
const double & temps_debut_integration() const
void completer() override
Complete la construction (initialisation) des objets : maillage_interface et proprietes_particules_.
void integrer_ensemble_lagrange(const double temps) override
void discretiser() override
Discretisation des champs: - indicatrice_ : champ scalaire discretise aux elements.
void update_tableaux_apres_transport(Maillage_FT_Disc &maillage, Proprietes_part_vol &proprietes)
DoubleTab rho_fluide_som_
int preparer_calcul() override
Tout ce qui ne depend pas des autres problemes eventuels.
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
void update_delta_v(int n_deb, int n_fin, const Maillage_FT_Disc &ens_points, int calc=1)
void transformation(Maillage_FT_Disc &maillage, Proprietes_part_vol &proprietes)
const Champ_base & get_champ(const Motcle &nom) const override
bool initTimeStep(double dt) override
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
Entree & lire_cond_init(Entree &is) override
Lecture des conditions initiales dans un flot d'entree.
void calculer_proprietes_fluide_pos_particules(const Maillage_FT_Disc &ens_points)
Entree & lire_cl(Entree &) override
Lecture des conditions limites sur un flot d'entree.
void transformer(double temps)
const DoubleTab & calculer_valeurs_volumes(DoubleTab &val_volume) const
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
double t_derniere_transfo_
void ajouter_points(const Maillage_FT_Disc &maillage_inject)
void preparer_tableaux_avant_transport(Maillage_FT_Disc &maillage, Proprietes_part_vol &proprietes)
void detection_groupes_a_supprimer(const ArrOfDouble &volumes, const DoubleTab &positions, ArrOfInt &flags_compo_a_supprimer)
double t_derniere_inject_
void resoudre_edo(DoubleTab &vitesse_p, DoubleTab &source_stockage, const double delta_t)
static void appliquer_reflexion_vitesse(const double x, const double y, const double z, const int som, int &face_bord, const Domaine_VF &domaine_vf, DoubleTab &vitesse)
DoubleTab source_stockage_
void injection(const Maillage_FT_Disc &maill_inject, const Proprietes_part_vol &propr_inject)
void set_param(Param &titi) const override
Methode_calcul_vp methode_calcul_vp_