16#ifndef FT_Field_included
17#define FT_Field_included
22#include <Domaine_IJK.h>
24#include <Operator_FT_Disc.h>
25#include <Descripteur_FT.h>
44 Point2D(
double xVal,
double yVal) :
x(xVal),
y(yVal) {}
67 std::cout <<
"Point2D(" <<
x <<
", " <<
y <<
")" << std::endl;
84 Point3D(
double xVal,
double yVal,
double zVal) :
x(xVal),
y(yVal),
z(zVal) {}
88 return std::sqrt(
x*
x +
y*
y +
z*
z) ;
123 std::cout <<
"Point3D(" <<
x <<
", " <<
y <<
", " <<
z <<
")" << std::endl;
132 if (
x != rhs.
x)
return x < rhs.
x;
133 if (
y != rhs.
y)
return y < rhs.
y;
160 Declare_instanciable_sans_constructeur(
FT_Field ) ;
162 int nb_sommet_change_ = 0;
163 DoubleTab sommet_bouge_ ;
167 IntTab indice_global_to_local_final_;
171 DoubleTab triangle_initiaux_ ;
172 DoubleTab normale_facette_initiale_;
173 DoubleTab normale_facette_finale_;
174 DoubleTab triangle_finaux_ ;
175 DoubleTab Surfactant_facette_initiale_ ;
176 IntTab indice_facette_finaux_ ;
177 bool variable_intensive_=
false;
178 bool disable_surfactant_=
true;
179 double Taylor_test_ = 0.;
180 int disable_marangoni_source_term_ = 0;
181 int print_debug_surfactant_ = 0;
182 int only_remaillage_ = 0;
183 int patch_conservation_surfactant_locale_ = 0;
184 int patch_conservation_surfactant_globale_ = 0;
185 int check_triangle_duplicata_ = 0;
186 double Diff_coeff_surfactant_ = 0. ;
187 double Concentration_surfactant_init_ = 0. ;
188 double Surfactant_theoric_case_=0. ;
191 double mean_surfactant_ = 0.;
192 double mean_surface_ = 0.;
193 DoubleTab facettes_sommets_full_compo_;
194 DoubleTab liste_sommets_et_deplacements_;
195 IntTab compo_transmises_a_envoyer_;
196 ArrOfInt compo_connexe_sommets_;
197 ArrOfInt proc_numero_;
198 ArrOfInt proc_deja_echange_;
199 ArrOfInt sorted_index_;
200 int nb_compo_a_envoyer_max_ = 0;
201 int nb_proc_echange_=0;
202 int index_local_Ft_field_ = 0;
239 const Maillage_FT_IJK& mesh,
const DoubleTab& liste_sommets_avant_deplacement,
const DoubleTab& liste_sommets_apres_deplacement,
const ArrOfInt& compo_connexe_sommets_deplace);
267 void Calculate_Facette_Intersection_Area(DoubleTab& Surface_fa7init, DoubleTab& Surface_fa7fin, DoubleTab& Surface_intersection, vector<Point3D> points_fa7_originale, vector<Point3D> points_fa7_finale, IntTab points_triangle_originaux, IntTab points_triangle_finaux, IntTab& normale_triangle_originaux, IntTab& normale_triangle_finaux);
269 double polygonArea(
const std::vector<Point2D>& vertices);
275 void powerIteration(
const double cov[3][3],
double eigenVector[3],
double& eigenValue);
297 copy.disable_surfactant_=disable_surfactant_;
303 first_element_source);
340 return only_remaillage_;
353 return disable_surfactant_;
357 return disable_marangoni_source_term_;
362 disable_surfactant_ = disable_surfactant;
367 return compo_connexe_sommets_;
380 ArrOfDouble Grad_dir_FT_field_Array;
381 Grad_dir_FT_field_Array.
resize(nbsom);
382 for (
int som=0 ; som<nbsom ; som++)
386 return Grad_dir_FT_field_Array;
403 ArrOfDouble Grad_dir;
405 for (
int som=0 ; som<nbsom ; som++)
415 ArrOfDouble Grad_dir;
417 for (
int som=0 ; som<nbsom ; som++)
429 return sommet_bouge_;
433 return facettes_sommets_full_compo_;
437 return liste_sommets_et_deplacements_;
441 return sorted_index_;
446 return triangle_finaux_.dimension(0);
450 return triangle_initiaux_.dimension(0);
454 normale_facette_initiale_.resize(0, 3, RESIZE_OPTIONS::NOCOPY_NOINIT);
455 normale_facette_finale_.resize(0, 3, RESIZE_OPTIONS::NOCOPY_NOINIT);
456 triangle_initiaux_.resize(0, 3, 3, RESIZE_OPTIONS::NOCOPY_NOINIT);
457 triangle_finaux_.resize(0, 3, 3, RESIZE_OPTIONS::NOCOPY_NOINIT);
458 Surfactant_facette_initiale_.resize(0, RESIZE_OPTIONS::NOCOPY_NOINIT);
459 indice_facette_finaux_.resize(0, RESIZE_OPTIONS::NOCOPY_NOINIT);
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
void update_gradient_laplacien_FT(const Maillage_FT_IJK &mesh)
void reinit_remeshing_table()
ArrOfDouble get_FT_field_Array_non_const()
ArrOfDouble get_Grad_FT_field_Array(int dir) const
double intersectionArea(Point2D t1[3], Point2D t2[3])
Point2D projectPointToPlane(const Point3D &point, const Point3D ¢roid, const array< double, 3 > &eigenVector1, const array< double, 3 > &eigenVector2)
void exchange_data(int pe_send_, int pe_recv_, const Maillage_FT_IJK &mesh, const DoubleTab &liste_sommets_avant_deplacement, const DoubleTab &liste_sommets_apres_deplacement, const ArrOfInt &compo_connexe_sommets_deplace)
Operator_FT_Disc OpFTDisc_
void passer_variable_intensive(const Maillage_FT_IJK &mesh)
void completer_compo_connexe_partielle(const Maillage_FT_IJK &mesh, const Domaine_IJK &splitting, const DoubleTab &liste_sommets_apres_deplacement, const DoubleTab &liste_sommets_avant_deplacement, const ArrOfInt &compo_connexe_sommets_deplace)
DoubleTab & get_liste_sommets_et_deplacements_non_const()
double polygonArea(const std::vector< Point2D > &vertices)
Point3D crossProduct(const Point3D &u, const Point3D &v)
void copy_FT_Field(FT_Field copy)
ArrOfDouble get_FT_field_Array_sommets() const
void remailler_FT_Field(Maillage_FT_IJK &mesh)
DoubleTab get_interfacial_source_term_sommets() const
ArrOfDouble FT_field_Array_
double norme(const Point3D &pt)
void sortAndTrackIndices(const std::vector< double > &arr, std::vector< size_t > &indices)
Operator_FT_Disc get_OpFTDisc() const
void powerIteration(const double cov[3][3], double eigenVector[3], double &eigenValue)
int orientation_triangle(const Point3D &normale, const array< double, 3 > &eigenVector1, const array< double, 3 > &eigenVector2)
ArrOfDouble sigma_sommets_
double & operator()(int index)
ArrOfDouble FT_field_Array_sommets_
DoubleTab update_sigma_and_interfacial_source_term_sommet(const Maillage_FT_IJK &mesh, const Domaine_IJK &splitting, bool compute_interfacial_source, bool use_tryggvason_formulation)
void initialize(const Maillage_FT_IJK &mesh, const DoubleTab ¢re_mass)
int get_nb_triangle_finaux()
const ArrOfInt get_sorted_index()
int get_only_remaillage() const
double det(const Point2D &a, const Point2D &b, const Point2D &c)
ArrOfDouble check_conservation(const Maillage_FT_IJK &mesh)
double magnitude(const Point3D &v)
void correction_conservation_globale(const Maillage_FT_IJK &mesh, const ArrOfDouble &surfactant_avant_remaillage, const ArrOfDouble &surfactant_apres_remaillage)
std::vector< Point3D > removeDuplicates(std::vector< Point3D > &points)
void set_tolerance_point_identique(double longueur_cara_fa7)
double & operator[](int index)
ArrOfDouble get_sigma_sommets() const
void exchange_compo_connexe(int pe_send_, int pe_recv_, const Maillage_FT_IJK &mesh)
ArrOfInt get_compo_connexe_sommets() const
void Calculate_Facette_Intersection_Area(DoubleTab &Surface_fa7init, DoubleTab &Surface_fa7fin, DoubleTab &Surface_intersection, vector< Point3D > points_fa7_originale, vector< Point3D > points_fa7_finale, IntTab points_triangle_originaux, IntTab points_triangle_finaux, IntTab &normale_triangle_originaux, IntTab &normale_triangle_finaux)
void set_field_facettes(ArrOfDouble field)
void echange_espace_virtuel(const Maillage_FT_Disc &mesh)
ArrOfDouble sigma_facettes_
DoubleTab Grad_FT_field_Array_
void preparer_tableau_avant_transport()
ArrOfDouble get_interfacial_source_term_sommets_non_const(int dir)
void passer_variable_extensive(const Maillage_FT_IJK &mesh)
void nettoyer_espace_virtuel_facette(const Maillage_FT_IJK &mesh)
DoubleTab interfacial_source_term_sommet_
vector< pair< double, array< double, 3 > > > Main_2D_plane_eigenvectors(vector< Point3D > points)
void computeCovarianceMatrix(const vector< Point3D > &points, const Point3D ¢roid, double cov[3][3])
bool isPointInTriangle(const Point2D &pt, const Point2D &v1, const Point2D &v2, const Point2D &v3)
void champ_sommet_from_facettes(const ArrOfInt &compo_connexe_facettes, const Maillage_FT_IJK &mesh)
void set_disable_surfactant(bool disable_surfactant)
Point3D calculer_normale_apres_deplacement(const int fa, const int somfa7, const Vecteur3 pos_apres_dep)
Point3D computeCentroid(const vector< Point3D > &points)
void update_Field_sommets(const Maillage_FT_IJK &FTmesh, const ArrOfDouble &Field_facettes, ArrOfDouble &field_sommet)
void set_field_sommets(ArrOfDouble field)
ArrOfDouble get_Laplacian_FT_field_Array() const
double scalarProduct(const Point3D &u, const Point3D &v)
bool lineIntersection(const Point2D &a, const Point2D &b, const Point2D &c, const Point2D &d, Point2D &intersection)
void update_tableau_apres_transport()
void sauvegarder_triangle(const Maillage_FT_IJK &mesh, const int i, const int avant_apres_remaillage)
ArrOfDouble get_interfacial_source_term_sommets(int dir) const
void update_FT_Field_local_from_full_compo(const Maillage_FT_IJK &mesh)
void calculer_volume_bulles(ArrOfDouble &volumes, DoubleTab ¢re_gravite, const Maillage_FT_IJK &mesh) const
double triangleArea3D(const Point3D &A, const Point3D &B, const Point3D &C)
double triangleArea(const Point2D &p1, const Point2D &p2, const Point2D &p3)
void echanger_triangles(Maillage_FT_IJK &mesh)
bool is_compo_in_proc(const int compo_connexe, const int pe_send)
bool sauv_num_pe_echange(int pe)
void resize_array(int index)
int get_nb_triangle_initiaux()
ArrOfDouble get_sigma_facettes() const
ArrOfDouble get_FT_field_Array() const
int get_disable_marangoni_source_term() const
ArrOfDouble Laplacian_FT_field_Array_
void dimensionner_remaillage_FT_Field(Maillage_FT_IJK &mesh, const ArrOfIntFT &table_old_new)
void inject_array(const FT_Field &source, int nb_elements, int first_element_dest, int first_element_source)
DoubleTab get_sommet_bouge() const
void avancer_en_temps(const Maillage_FT_IJK &mesh, const double time_step)
bool get_disable_surfactant() const
DoubleTab & get_facettes_sommets_full_compo_non_const()
double get_tolerance_point_identique()
: class Maillage_FT_Disc Cette classe decrit un maillage:
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
bool operator==(const Point2D &rhs)
Point2D(const Point2D &pt)
void operator=(const Point2D &pt)
Point2D(double xVal, double yVal)
void operator=(const Point3D &pt)
Point3D operator-(const Point3D &other) const
bool operator==(const Point3D &rhs) const
Point3D operator+(const Point3D &other) const
Point3D(const Point3D &pt)
Point3D operator/(const double &other) const
bool operator<(const Point3D &rhs) const
Point3D(double xVal, double yVal, double zVal)
void resize(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
triangle(Point3D xVal, Point3D yVal, Point3D zVal)
bool operator==(const triangle &rhs)