16#ifndef Domaine_VDF_included
17#define Domaine_VDF_included
23#include <Domaine_VF.h>
82 inline double h_x()
const;
83 inline double h_y()
const;
84 inline double h_z()
const;
86 inline int Qdm(
int num_arete,
int )
const;
92 inline double dist_face(
int ,
int ,
int k)
const;
93 inline double dist_norm(
int num_face)
const override;
108 inline double dist_elem(
int ,
int ,
int )
const;
110 inline double dim_elem(
int ,
int )
const;
111 inline double dim_face(
int ,
int )
const;
112 inline double delta_C(
int )
const;
120 inline const IntVect&
orientation()
const override;
127 inline IntTab&
Qdm();
128 inline const IntTab&
Qdm()
const;
145 IntVect orientation_;
149 int nb_faces_X_ = -1;
150 int nb_faces_Y_ = -1;
151 int nb_faces_Z_ = -1;
153 int nb_aretes_joint_ = -1;
154 int nb_aretes_coin_ = -1;
155 int nb_aretes_bord_ = -1;
156 int nb_aretes_mixtes_ = -1;
157 int nb_aretes_internes_ = -1;
161 double h_x_ = 1.e30 , h_y_ = 1.e30 ,h_z_ = 1.e30;
166 void genere_aretes();
168 void remplir_face_normales();
227 return Qdm_(num_arete,i);
293 return orientation_[i];
310 return xv_(fac2,k) -
xv_(fac1,k);
326 return xv_(fac2,k) -
xv_(fac1,k);
329 double d_teta =
xv_(fac2,1) -
xv_(fac1,1);
332 return d_teta*
xv_(fac1,0);
350 int k = orientation_[num_face];
351 return (
xp_(n2,k) -
xp_(n1,k));
366 int k = orientation_[num_face];
369 dist =
xp_(n2,k) -
xp_(n1,k);
372 double d_teta =
xp_(n2,1) -
xp_(n1,1);
375 dist = d_teta*
xp_(n1,0);
395 int k = orientation_[num_face];
397 return (
xv_(num_face,k) -
xp_(n1,k));
399 return (
xp_(n2,k) -
xv_(num_face,k));
415 int k = orientation_[num_face];
419 dist =
xv_(num_face,k) -
xp_(n1,k);
422 double d_teta =
xv_(num_face,1) -
xp_(n1,1);
425 dist = d_teta*
xp_(n1,0);
428 dist =
xp_(n2,k) -
xv_(num_face,k);
431 double d_teta =
xp_(n2,1) -
xv_(num_face,1);
434 dist = d_teta*
xp_(n2,0);
452 assert ( (orientation_[n1]==orientation_[n2]) );
453 if ( (
axi!=1) || (k!=1) )
454 dist =
xv_(n2,k) -
xv_(n1,k);
457 d_teta =
xv_(n2,1) -
xv_(n1,1);
460 dist = d_teta*
xv_(n1,0);
479 int k = orientation_[num_face];
480 if ((n1!=-1) && (n2!=-1))
482 if ( (k!=1) || (
axi!=1) )
483 dist =
xp_(n2,k) -
xp_(n1,k);
486 d_teta =
xp_(n2,1) -
xp_(n1,1);
489 dist = d_teta*
xp_(n1,0);
494 if ( (k!=1) || (
axi!=1) )
495 dist = (
xv_(num_face,k) -
xp_(n1,k));
498 d_teta =
xv_(num_face,1) -
xp_(n1,1);
501 dist = d_teta*
xp_(n1,0);
506 if ( (k!=1) || (
axi!=1) )
507 dist = (
xp_(n2,k) -
xv_(num_face,k));
510 d_teta =
xp_(n2,1) -
xv_(num_face,1);
513 dist = d_teta*
xp_(n2,0);
524 return nb_aretes_joint_;
532 return nb_aretes_coin_;
540 return nb_aretes_joint_;
548 return nb_aretes_bord_;
556 return nb_aretes_joint_+ nb_aretes_coin_;
564 return nb_aretes_mixtes_;
572 return nb_aretes_ - nb_aretes_mixtes_ - nb_aretes_internes_;
580 return nb_aretes_internes_;
596 return nb_aretes_ - nb_aretes_internes_;
628 return xp_(n2,k)-
xp_(n1,k);
665 return pow(dist,1./3.);
673 int k=orientation_[num_face];
698 int face_conj=-2,face,elem_bis=-2;
709 if ((elem==-1) || (elem_bis==-1))
722 assert(face_conj!=-2);
767 int ori = orientation_(face);
780 int ori = orientation_[num_face];
781 return xv_(num_face,ori) -
xp_(n0,ori);
792 int ori = orientation_[num_face];
793 return xp_(n1,ori) -
xv_(num_face,ori);
804 int ori = orientation_[num_face];
807 dist =
xv_(num_face,ori) -
xp_(n0,ori);
810 double d_teta =
xv_(num_face,1) -
xp_(n0,1);
813 dist = d_teta*
xp_(n0,0);
826 int ori = orientation_[num_face];
829 dist =
xp_(n1,ori) -
xv_(num_face,ori);
832 double d_teta =
xp_(n1,1) -
xv_(num_face,1);
835 dist = d_teta*
xp_(n1,0);
844 int k = orientation_[num_face];
845 return (
xp_(n2,k) + l -
xp_(n1,k));
850 int ori = orientation_[num_face];
851 double dist =
xv_(num_face,ori) -
xp_(n0,ori);
860 int ori = orientation_[num_face];
861 double dist =
xp_(n1,ori) -
xv_(num_face,ori);
870 const Domaine& le_domaine =
domaine();
872 double dist= std::fabs(coord_sommets(
face_sommets(fac1,1),k)-
xv_(fac1,k));
873 dist += std::fabs(
xv_(fac2,k) - coord_sommets(
face_sommets(fac2,0),k));
class Conds_lim This class represents a vector of boundary conditions.
const DoubleTab_t & coord_sommets() const
class Domaine_Cl_dis_base Domaine_Cl_dis_base objects represent discretized boundary conditions
int nb_aretes_coin() const
void compute_sort_key(Faces &, IntTab &sort_key) override
Override. Compute sorting key so that internal faces are sorted by their orientation first (X,...
double dist_norm(int num_face) const override
Returns the normal distance for an internal face (Cartesian coordinates).
double dist_norm_bord_axi(int num_face) const
Returns the normal distance for a boundary face (cylindrical coordinates).
IntVect & orientation()
inline double Domaine_VDF::porosite_face(int i) const {
double delta_C(int) const
Faces * creer_faces() override
Returns a newly allocated Faces_VDF object.
int nb_aretes_joint() const
void prepare_elem_non_std(Faces &) override
double dist_face_period(int, int, int) const
double dim_elem(int, int) const
std::map< std::array< int, 2 >, int > virt_e_map
void creer_elements_fictifs(const Domaine_Cl_dis_base &) override
Fills the face_voisins_fictifs_ array. Does NOT create fictitious elements.
int premiere_arete_bord() const
double distance_face(int, int, int k) const
Returns the distance between the centers of two same-orientation faces.
void discretiser() override
Calls Domaine_VF::discretiser(), computes element gravity centers,.
int premiere_arete_coin() const
int face_bord_amont(int, int, int) const
Returns the neighboring face, accounting for the possibility that it may be a boundary face.
double dist_face_elem1_period(int, int, double) const override
double dist_face_elem0(int, int) const override
Returns the distance between the center of a face and the center of face_voisins(face,...
int nb_aretes_internes() const
int premiere_arete_interne() const
double dist_face_elem1_axi(int, int) const
Returns the distance between the center of a face and the center of face_voisins(face,...
int nb_aretes_bord() const
int nb_aretes_mixtes() const
double dim_face(int, int) const
void modifier_pour_Cl(const Conds_lim &cl) override
double dist_face(int, int, int k) const
Returns the distance between two face centers in direction k (Cartesian only).
double dist_face_elem0_axi(int, int) const
Returns the distance between the center of a face and the center of face_voisins(face,...
double dist_elem_period(int, int, int) const
double dist_norm_period(int, double) const
int amont_amont(int, int) const
double dist_face_axi(int, int, int k) const
Returns the distance between two face centers in direction k (cylindrical coordinates).
int face_amont_conj(int, int, int) const
void init_virt_e_map() const
void renumber_faces(Faces &les_faces, IntTab &sort_key) override
Override to also renumber orientation_ member.
int premiere_arete_mixte() const
double dist_norm_axi(int num_face) const
Returns the normal distance for an internal face (cylindrical coordinates).
double dist_face_elem1(int, int) const override
Returns the distance between the center of a face and the center of face_voisins(face,...
double distance_normale(int num_face) const
Returns the normal distance for any face (cylindrical or Cartesian coordinates).
void calculer_volumes_entrelaces()
Fills the staggered volumes (volumes entrelaces).
int elem_voisin(int, int, int) const
double dist_norm_bord(int num_face) const override
Returns the normal distance for a boundary face (Cartesian coordinates).
double dist_face_elem0_period(int, int, double) const override
int face_amont_princ(int, int) const
virtual DoubleTab & face_normales()
double dist_elem(int, int, int) const
virtual const DoubleVect & face_surfaces() const
IntTab & face_sommets() override
Returns the face/vertex connectivity array.
virtual double face_normales(int face, int comp) const
IntTab & elem_faces()
Returns the element/face connectivity array.
int nb_faces_bord() const
Returns the number of faces on which boundary conditions are applied:
const Domaine & domaine() const
class Nom: a character string for naming TRUST objects.