21#include "rheolef/geo.h"
22#include "rheolef/geo_domain.h"
23#include "rheolef/rheostream.h"
24#include "rheolef/iorheo.h"
25#include "rheolef/space_numbering.h"
39 const point_basic<T>& a,
40 const point_basic<T>& b,
41 const point_basic<T>& c)
43 return vect2d(b-a, c-a)/2.0;
49 const point_basic<T>& a,
50 const point_basic<T>& b,
51 const point_basic<T>& c,
52 const point_basic<T>&
d)
54 return mixt(b-a, c-a,
d-a)/6;
60 const point_basic<T>& a0,
61 const point_basic<T>& a1,
62 const point_basic<T>& a2,
63 const point_basic<T>& a3,
64 const point_basic<T>& a4,
65 const point_basic<T>& a5,
70 meas1 = meas_T (a0, a1, a2, a3);
71 meas2 = meas_T (a1, a2, a3, a4);
72 meas3 = meas_T (a2, a3, a4, a5);
77check_element (
const geo_element& K,
const disarray<point_basic<T>,sequential>&
p,
bool verbose =
false)
79 std::cerr << std::setprecision(std::numeric_limits<T>::digits10);
81 switch (K.variant()) {
85 T meas =
p[K[1]][0] -
p[K[0]][0];
87 if (verbose && !orient) {
88 warning_macro(
"meas(K)="<<meas<<
": invalid negative orientation for element K.dis_ie="<<K.dis_ie());
93 T meas = meas_t (
p[K[0]],
p[K[1]],
p[K[2]]);
95 if (verbose && !orient) {
96 warning_macro(
"meas(K)="<<meas<<
": invalid negative orientation for element K.dis_ie="<<K.dis_ie());
101 T meas1 = meas_t (
p[K[0]],
p[K[1]],
p[K[2]]);
102 T meas2 = meas_t (
p[K[0]],
p[K[2]],
p[K[3]]);
103 orient = (meas1 > 0 && meas2 > 0);
104 if (verbose && !orient) {
105 warning_macro(
"meas(K)="<<meas1<<
"+"<<meas2<<
": invalid negative orientation for element K.dis_ie="<<K.dis_ie());
110 T meas = meas_T (
p[K[0]],
p[K[1]],
p[K[2]],
p[K[3]]);
112 if (verbose && !orient) {
113 warning_macro(
"meas(K)="<<meas<<
": invalid negative orientation for element K.dis_ie="<<K.dis_ie());
118 T meas1, meas2, meas3;
119 meas_P (
p[K[0]],
p[K[1]],
p[K[2]],
p[K[3]],
p[K[4]],
p[K[5]], meas1, meas2, meas3);
120 orient = (meas1 > 0 && meas2 > 0 && meas3 > 0);
121 if (verbose && !orient) {
123 <<
": invalid negative orientation for element K.dis_ie="<<K.dis_ie());
128 T meas1, meas2, meas3, meas4, meas5, meas6;
129 meas_P (
p[K[0]],
p[K[1]],
p[K[2]],
p[K[4]],
p[K[5]],
p[K[6]], meas1, meas2, meas3);
130 meas_P (
p[K[0]],
p[K[2]],
p[K[3]],
p[K[4]],
p[K[6]],
p[K[7]], meas4, meas5, meas6);
131 orient = (meas1 > 0 && meas2 > 0 && meas3 > 0 && meas4 > 0 && meas5 > 0 && meas6 > 0);
132 if (verbose && !orient) {
134 <<
"+"<<meas4<<
"+"<<meas5<<
"+"<<meas6
135 <<
": invalid negative orientation for element K.dis_ie="<<K.dis_ie());
140 error_macro (
"unexpected element variant `"<<K.variant()<<
"'");
142 bool is_convex =
true;
143 return (orient && is_convex);
152 if (base::_dimension != base::_gs._map_dimension)
return true;
154 for (
const_iterator iter = begin(base::_gs._map_dimension), last = end(base::_gs._map_dimension); iter != last; iter++) {
156 status = status && check_element (K, base::_node, verbose);
160#ifdef _RHEOLEF_HAVE_MPI
173#ifdef _RHEOLEF_HAVE_MPI
see the geo_element page for the full documentation
base::const_iterator const_iterator
sequential mesh representation
static const variant_type H
static const variant_type q
static const variant_type e
static const variant_type p
static const variant_type T
static const variant_type P
static const variant_type t
#define error_macro(message)
#define warning_macro(message)
This file is part of Rheolef.
T mixt(const point_basic< T > &u, const point_basic< T > &v, const point_basic< T > &w)
T vect2d(const point_basic< T > &v, const point_basic< T > &w)