16#include <Quadrangle_VEF.h>
19#include <Polygon_geom_tools.h>
38static int faces_sommets_quadra[4][2] =
48template <
typename _SIZE_>
55template <
typename _SIZE_>
66template <
typename _SIZE_>
70 static Nom nom=
"VOXEL8";
85template <
typename _SIZE_>
89 const Domaine_t& domaine=mon_dom.valeur();
91 int_t som0 = domaine.sommet_elem(element,0);
92 int_t som1 = domaine.sommet_elem(element,1);
93 int_t som2 = domaine.sommet_elem(element,2);
94 int_t som3 = domaine.sommet_elem(element,3);
97 if( (est_egal(dom.
coord(som0,0),pos[0]) && est_egal(dom.
coord(som0,1),pos[1]))
98 || (est_egal(dom.
coord(som1,0),pos[0]) && est_egal(dom.
coord(som1,1),pos[1]))
99 || (est_egal(dom.
coord(som2,0),pos[0]) && est_egal(dom.
coord(som2,1),pos[1]))
100 || (est_egal(dom.
coord(som3,0),pos[0]) && est_egal(dom.
coord(som3,1),pos[1])) )
102 double prod,p0,p1,p2,p3;
112 p0 = (pos[0]-dom.
coord(som0,0))*(pos[1]-dom.
coord(som1,1))
113 - (pos[1]-dom.
coord(som0,1))*(pos[0]-dom.
coord(som1,0));
116 p1 = (pos[0]-dom.
coord(som1,0))*(pos[1]-dom.
coord(som3,1))
117 - (pos[1]-dom.
coord(som1,1))*(pos[0]-dom.
coord(som3,0));
120 p2 = (pos[0]-dom.
coord(som3,0))*(pos[1]-dom.
coord(som2,1))
121 - (pos[1]-dom.
coord(som3,1))*(pos[0]-dom.
coord(som2,0));
124 p3 = (pos[0]-dom.
coord(som2,0))*(pos[1]-dom.
coord(som0,1))
125 - (pos[1]-dom.
coord(som2,1))*(pos[0]-dom.
coord(som0,0));
128 if ((p0>-epsilon) && (p1>-epsilon) && (p2>-epsilon) && (p3>-epsilon))
143template <
typename _SIZE_>
146 const Domaine_t& domaine=mon_dom.valeur();
147 if((domaine.sommet_elem(element,0)==som[0])&&
148 (domaine.sommet_elem(element,1)==som[1])&&
149 (domaine.sommet_elem(element,2)==som[2])&&
150 (domaine.sommet_elem(element,3)==som[3]))
160template <
typename _SIZE_>
163 const Domaine_t& domaine = mon_dom.valeur();
164 const DoubleTab_t& coord = domaine.coord_sommets();
165 const int_t size_tot = domaine.nb_elem_tot();
168 for (
int_t num_poly = 0; num_poly < size_tot; num_poly++)
170 const int_t S0 = domaine.sommet_elem(num_poly,0);
171 const int_t S1 = domaine.sommet_elem(num_poly,1);
172 const int_t S2 = domaine.sommet_elem(num_poly,2);
173 const int_t S3 = domaine.sommet_elem(num_poly,3);
174 const int_t S[4] = { S0, S1, S2, S3 };
178 static const int ord[4] = {0, 1, 3, 2};
180 const auto index_of = [&](
int i) ->
int_t {
return S[ ord[i] ]; };
184 volumes[num_poly] = geom.
area_;
186 volumes[num_poly] = 2.0 * M_PI * std::fabs(geom.
moment_r_);
193template <
typename _SIZE_>
203 const int_t nb_elem=domaine.nb_elem();
204 for (num_poly=0; num_poly<nb_elem; num_poly++)
206 for(
int i=0; i<4; i++)
207 S[i] = elem(num_poly,i);
213 for (
int i=1; i<4; i++)
214 for (
int dir=0; dir<2; dir++)
215 v(i-1,dir)=coord(S[i],dir)-coord(S[0],dir);
216 ArrOfDouble prod_(3);
218 for (
int op=0; op<3; op++)
220 DoubleTab prod_v(3,3);
221 for (
int i=0; i<3; i++)
225 prod_v(i,2)=v(op,0)*v(i,1)-v(op,1)*v(i,0);
245 for (
int dir=0; dir<3; dir++)
246 prod+=(prod_v(i1,dir)*prod_v(i2,dir));
266 int_t tmp=elem(num_poly,i2b);
267 elem(num_poly,i2b)=elem(num_poly,i3);
268 elem(num_poly,i3)=tmp;
269 Cerr <<
"Permutation of local nodes "<<i2b<<
" and "<<i3<<
" on the element " <<num_poly<<
" prod "<<prod_<<finl;
278template <
typename _SIZE_>
281 faces_som_local.
resize(4,2);
282 for (
int i=0; i<4; i++)
283 for (
int j=0; j<2; j++)
284 faces_som_local(i,j) = faces_sommets_quadra[i][j];
double coord(int_t i, int j) const
Classe Elem_geom_base Cette classe est la classe de base pour la definition d'elements.
Class defining operators and methods for all reading operation in an input flow (file,...
class Nom Une chaine de caractere pour nommer les objets de TRUST
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
static double precision_geom
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Classe Quadrangle_VEF Cette classe represente l'element geometrique Quadrangle_VEF.
DoubleVect_T< _SIZE_ > DoubleVect_t
void reordonner() override
Reordonne.
void calculer_volumes(DoubleVect_t &vols) const override
Calcule les volumes des elements du domaine associe.
DoubleTab_T< _SIZE_ > DoubleTab_t
IntTab_T< _SIZE_ > IntTab_t
SmallArrOfTID_T< _SIZE_ > SmallArrOfTID_t
const Nom & nom_lml() const override
Renvoie le nom LML d'un Quadrangle_VEF = "GOLGOTH24".
int get_tab_faces_sommets_locaux(IntTab &faces_som_local) const override
voir ElemGeomBase::get_tab_faces_sommets_locaux
Domaine_32_64< _SIZE_ > Domaine_t
int contient(const ArrOfDouble &pos, int_t elem) const override
Renvoie 1 si l'element ielem du domaine associe a l'element geometrique contient le point.
Classe de base des flux de sortie.
_SIZE_ size_array() const
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ size_totale() const