16#ifndef Domaine_VDF_included
17#define Domaine_VDF_included
23#include <Domaine_VF.h>
85 inline double h_x()
const;
86 inline double h_y()
const;
87 inline double h_z()
const;
89 inline int Qdm(
int num_arete,
int )
const;
95 inline double dist_face(
int ,
int ,
int k)
const;
96 inline double dist_norm(
int num_face)
const override;
111 inline double dist_elem(
int ,
int ,
int )
const;
113 inline double dim_elem(
int ,
int )
const;
114 inline double dim_face(
int ,
int )
const;
115 inline double delta_C(
int )
const;
123 inline const IntVect&
orientation()
const override;
130 inline IntTab&
Qdm();
131 inline const IntTab&
Qdm()
const;
148 IntVect orientation_;
152 int nb_faces_X_ = -1;
153 int nb_faces_Y_ = -1;
154 int nb_faces_Z_ = -1;
156 int nb_aretes_joint_ = -1;
157 int nb_aretes_coin_ = -1;
158 int nb_aretes_bord_ = -1;
159 int nb_aretes_mixtes_ = -1;
160 int nb_aretes_internes_ = -1;
166 double h_x_ = 1.e30 , h_y_ = 1.e30 ,h_z_ = 1.e30;
172 void genere_aretes();
174 void remplir_face_normales();
233 return Qdm_(num_arete,i);
299 return orientation_[i];
312 return xv_(fac2,k) -
xv_(fac1,k);
324 return xv_(fac2,k) -
xv_(fac1,k);
327 double d_teta =
xv_(fac2,1) -
xv_(fac1,1);
330 return d_teta*
xv_(fac1,0);
346 int k = orientation_[num_face];
347 return (
xp_(n2,k) -
xp_(n1,k));
360 int k = orientation_[num_face];
363 dist =
xp_(n2,k) -
xp_(n1,k);
366 double d_teta =
xp_(n2,1) -
xp_(n1,1);
369 dist = d_teta*
xp_(n1,0);
387 int k = orientation_[num_face];
389 return (
xv_(num_face,k) -
xp_(n1,k));
391 return (
xp_(n2,k) -
xv_(num_face,k));
405 int k = orientation_[num_face];
409 dist =
xv_(num_face,k) -
xp_(n1,k);
412 double d_teta =
xv_(num_face,1) -
xp_(n1,1);
415 dist = d_teta*
xp_(n1,0);
418 dist =
xp_(n2,k) -
xv_(num_face,k);
421 double d_teta =
xp_(n2,1) -
xv_(num_face,1);
424 dist = d_teta*
xp_(n2,0);
438 assert ( (orientation_[n1]==orientation_[n2]) );
439 if ( (
axi!=1) || (k!=1) )
440 dist =
xv_(n2,k) -
xv_(n1,k);
443 d_teta =
xv_(n2,1) -
xv_(n1,1);
446 dist = d_teta*
xv_(n1,0);
463 int k = orientation_[num_face];
464 if ((n1!=-1) && (n2!=-1))
466 if ( (k!=1) || (
axi!=1) )
467 dist =
xp_(n2,k) -
xp_(n1,k);
470 d_teta =
xp_(n2,1) -
xp_(n1,1);
473 dist = d_teta*
xp_(n1,0);
478 if ( (k!=1) || (
axi!=1) )
479 dist = (
xv_(num_face,k) -
xp_(n1,k));
482 d_teta =
xv_(num_face,1) -
xp_(n1,1);
485 dist = d_teta*
xp_(n1,0);
490 if ( (k!=1) || (
axi!=1) )
491 dist = (
xp_(n2,k) -
xv_(num_face,k));
494 d_teta =
xp_(n2,1) -
xv_(num_face,1);
497 dist = d_teta*
xp_(n2,0);
508 return nb_aretes_joint_;
516 return nb_aretes_coin_;
524 return nb_aretes_joint_;
532 return nb_aretes_bord_;
540 return nb_aretes_joint_+ nb_aretes_coin_;
548 return nb_aretes_mixtes_;
556 return nb_aretes_ - nb_aretes_mixtes_ - nb_aretes_internes_;
564 return nb_aretes_internes_;
580 return nb_aretes_ - nb_aretes_internes_;
612 return xp_(n2,k)-
xp_(n1,k);
649 return pow(dist,1./3.);
657 int k=orientation_[num_face];
682 int face_conj=-2,face,elem_bis=-2;
693 if ((elem==-1) || (elem_bis==-1))
706 assert(face_conj!=-2);
747 int ori = orientation_(face);
759 int ori = orientation_[num_face];
760 return xv_(num_face,ori) -
xp_(n0,ori);
770 int ori = orientation_[num_face];
771 return xp_(n1,ori) -
xv_(num_face,ori);
781 int ori = orientation_[num_face];
784 dist =
xv_(num_face,ori) -
xp_(n0,ori);
787 double d_teta =
xv_(num_face,1) -
xp_(n0,1);
790 dist = d_teta*
xp_(n0,0);
802 int ori = orientation_[num_face];
805 dist =
xp_(n1,ori) -
xv_(num_face,ori);
808 double d_teta =
xp_(n1,1) -
xv_(num_face,1);
811 dist = d_teta*
xp_(n1,0);
820 int k = orientation_[num_face];
821 return (
xp_(n2,k) + l -
xp_(n1,k));
826 int ori = orientation_[num_face];
827 double dist =
xv_(num_face,ori) -
xp_(n0,ori);
836 int ori = orientation_[num_face];
837 double dist =
xp_(n1,ori) -
xv_(num_face,ori);
846 const Domaine& le_domaine =
domaine();
848 double dist= std::fabs(coord_sommets(
face_sommets(fac1,1),k)-
xv_(fac1,k));
849 dist += std::fabs(
xv_(fac2,k) - coord_sommets(
face_sommets(fac2,0),k));
classe Conds_lim Cette classe represente un vecteur de conditions aux limites.
const DoubleTab_t & coord_sommets() const
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
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
double dist_norm_bord_axi(int num_face) const
IntVect & orientation()
inline double Domaine_VDF::porosite_face(int i) const {
double delta_C(int) const
Faces * creer_faces() override
renvoie un Faces_VDF* !
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
remplit le tableau face_voisins_fictifs_ ne CREE PAS d elts fictifs!!!
int premiere_arete_bord() const
double distance_face(int, int, int k) const
void discretiser() override
appel a Domaine_VF::discretiser() calcul des centres de gravite des elements
int premiere_arete_coin() const
int face_bord_amont(int, int, int) const
Determine la face voisine de notre face en prevoyant que cette derniere puisse etre de type bord.
double dist_face_elem1_period(int, int, double) const override
double dist_face_elem0(int, int) const override
Fonction de calcul utilisable uniquement en coordonnees cartesiennes de la distance entre le centre d...
int nb_aretes_internes() const
int premiere_arete_interne() const
double dist_face_elem1_axi(int, int) const
Fonction de calcul utilisable uniquement en coordonnees cylindriques de la distance entre le centre d...
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
double dist_face_elem0_axi(int, int) const
Fonction de calcul utilisable uniquement en coordonnees cylindriques de la distance entre le centre d...
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
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
double dist_face_elem1(int, int) const override
Fonction de calcul utilisable uniquement en coordonnees cartesiennes de la distance entre le centre d...
double distance_normale(int num_face) const
void calculer_volumes_entrelaces()
remplissage des volumes entrelaces
int elem_voisin(int, int, int) const
double dist_norm_bord(int num_face) const override
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
renvoie le tableau de connectivite faces/sommets.
virtual double face_normales(int face, int comp) const
IntTab & elem_faces()
renvoie le tableau de connectivite element/faces
int nb_faces_bord() const
renvoie le nombre de faces sur lesquelles sont appliquees les conditions limites :
const Domaine & domaine() const
class Nom Une chaine de caractere pour nommer les objets de TRUST