16#include <Verifier_Simplexes.h>
24template <
typename _SIZE_>
31template <
typename _SIZE_>
39template <
typename _SIZE_>
58template <
typename _SIZE_>
64 ArrOfDouble lengths(3);
68 for (
int_t cell=0; cell<nb_cells; ++cell)
70 const int_t s0 = cells(cell,0),
75 const double x0 = nodes(s0,0);
76 const double x1 = nodes(s1,0);
77 const double x2 = nodes(s2,0);
78 const double x3 = nodes(s3,0);
80 const double y0 = nodes(s0,1);
81 const double y1 = nodes(s1,1);
82 const double y2 = nodes(s2,1);
83 const double y3 = nodes(s3,1);
85 const double z0 = nodes(s0,2);
86 const double z1 = nodes(s1,2);
87 const double z2 = nodes(s2,2);
88 const double z3 = nodes(s3,2);
90 const double x01 = 0.5 * (x0+x1);
91 const double x02 = 0.5 * (x0+x2);
92 const double x03 = 0.5 * (x0+x3);
93 const double x12 = 0.5 * (x1+x2);
94 const double x13 = 0.5 * (x1+x3);
95 const double x23 = 0.5 * (x2+x3);
97 const double y01 = 0.5 * (y0+y1);
98 const double y02 = 0.5 * (y0+y2);
99 const double y03 = 0.5 * (y0+y3);
100 const double y12 = 0.5 * (y1+y2);
101 const double y13 = 0.5 * (y1+y3);
102 const double y23 = 0.5 * (y2+y3);
104 const double z01 = 0.5 * (z0+z1);
105 const double z02 = 0.5 * (z0+z2);
106 const double z03 = 0.5 * (z0+z3);
107 const double z12 = 0.5 * (z1+z2);
108 const double z13 = 0.5 * (z1+z3);
109 const double z23 = 0.5 * (z2+z3);
111 lengths[0] = (x23-x01)*(x23-x01) + (y23-y01)*(y23-y01) + (z23-z01)*(z23-z01);
112 lengths[1] = (x13-x02)*(x13-x02) + (y13-y02)*(y13-y02) + (z13-z02)*(z13-z02);
113 lengths[2] = (x12-x03)*(x12-x03) + (y12-y03)*(y12-y03) + (z12-z03)*(z12-z03);
115 const int_t id = imin_array(lengths);
119 if (lengths[0] < lengths[1])
123 Cerr <<
"Error in Verifier_Simplexes_32_64.cpp 'check_internal_diagonal_for_tetrahedron()'" << finl;
124 Cerr <<
" The following cells have a bad internal diagonal :" << finl;
126 Cerr << cell << finl;
136 if (lengths[2] < lengths[1])
140 Cerr <<
"Error in Verifier_Simplexes_32_64.cpp 'check_internal_diagonal_for_tetrahedron()'" << finl;
141 Cerr <<
" The following cells have a bad internal diagonal :" << finl;
143 Cerr << cell << finl;
151 Cerr <<
"Error in Verifier_Simplexes_32_64.cpp 'check_internal_diagonal_for_tetrahedron()'" << finl;
152 Cerr <<
" The following cells have a bad internal diagonal :" << finl;
154 Cerr << cell << finl;
163template <
typename _SIZE_>
168 Motcles understood_keywords(2);
169 understood_keywords[0] =
"Triangle";
170 understood_keywords[1] =
"Tetraedre";
172 int rank = understood_keywords.
search(cell_type);
182 Cerr <<
"Error in Verifier_Simplexes_32_64.cpp 'check_internal_diagonal()'" << finl;
183 Cerr <<
" Unknown cell type : " << cell_type << finl;
184 Cerr <<
" Verifier_Simplexes_32_64 can only check Triangles and Tetrahedrons" << finl;
189template <
typename _SIZE_>
197 for (
int_t cell=0; cell<nb_cells; ++cell)
199 const int_t s0 = cells(cell,0),
203 const double x0 = nodes(s0,0);
204 const double x1 = nodes(s1,0);
205 const double x2 = nodes(s2,0);
207 const double y0 = nodes(s0,1);
208 const double y1 = nodes(s1,1);
209 const double y2 = nodes(s2,1);
211 const double area = 0.5 * ((x1-x0)*(y2-y0) - (x2-x0)*(y1-y0));
216 Cerr <<
"Error in Verifier_Simplexes_32_64.cpp 'check_positive_volumes_for_triangle()'" << finl;
217 Cerr <<
" The following cells have a negative orientation :" << finl;
219 Cerr << cell << finl;
227template <
typename _SIZE_>
235 for (
int_t cell=0; cell<nb_cells; ++cell)
237 const int_t s0 = cells(cell,0),
242 const double x0 = nodes(s0,0);
243 const double x1 = nodes(s1,0);
244 const double x2 = nodes(s2,0);
245 const double x3 = nodes(s3,0);
247 const double y0 = nodes(s0,1);
248 const double y1 = nodes(s1,1);
249 const double y2 = nodes(s2,1);
250 const double y3 = nodes(s3,1);
252 const double z0 = nodes(s0,2);
253 const double z1 = nodes(s1,2);
254 const double z2 = nodes(s2,2);
255 const double z3 = nodes(s3,2);
257 const double volume = (1./6.) * ( (x1-x0) * (y2-y0) * (z3-z0) +
258 (x2-x0) * (y3-y0) * (z1-z0) +
259 (x3-x0) * (y1-y0) * (z2-z0) -
260 (z1-z0) * (y2-y0) * (x3-x0) -
261 (x2-x0) * (z3-z0) * (y1-y0) -
262 (y3-y0) * (x1-x0) * (z2-z0) );
268 Cerr <<
"Error in Verifier_Simplexes_32_64.cpp 'check_positive_volumes_for_tetrahedron()'" << finl;
269 Cerr <<
" The following cells have a negative orientation :" << finl;
271 Cerr << cell << finl;
279template <
typename _SIZE_>
284 Motcles understood_keywords(2);
285 understood_keywords[0] =
"Triangle";
286 understood_keywords[1] =
"Tetraedre";
288 int rank = understood_keywords.
search(cell_type);
298 Cerr <<
"Error in Verifier_Simplexes_32_64.cpp 'check_positive_volumes()'" << finl;
299 Cerr <<
" Unknown cell type : " << cell_type << finl;
300 Cerr <<
" Verifier_Simplexes_32_64 can only check Triangles and Tetrahedrons" << finl;
305template <
typename _SIZE_>
310 Impl_::check_internal_diagonal(domain);
311 Impl_::check_positive_volumes(domain);
314template <
typename _SIZE_>
classe Domaine_32_64 un Domaine est un maillage compose d'un ensemble d'elements geometriques de meme...
DoubleTab_t & les_sommets()
Class defining operators and methods for all reading operation in an input flow (file,...
static void check_internal_diagonal_for_triangle(Domaine_t &domain)
static void check_positive_volumes_for_tetrahedron(Domaine_t &domain)
Domaine_32_64< _SIZE_ > Domaine_t
DoubleTab_T< _SIZE_ > DoubleTab_t
static void check_positive_volumes(Domaine_t &domain)
static void check_internal_diagonal(Domaine_t &domain)
IntTab_T< _SIZE_ > IntTab_t
static void check_internal_diagonal_for_tetrahedron(Domaine_t &domain)
static void check_positive_volumes_for_triangle(Domaine_t &domain)
classe Interprete_geometrique_base .
void associer_domaine(Nom &nom_dom)
Domaine_t & domaine(int i=0)
Un tableau d'objets de la classe Motcle.
int search(const Motcle &t) const
class Nom Une chaine de caractere pour nommer les objets de TRUST
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.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
_SIZE_ dimension(int d) const
: class Verifier_Simplexes
Entree & interpreter_(Entree &is) override
static void check_domain(Domaine_t &domain)
Domaine_32_64< _SIZE_ > Domaine_t