27 #ifndef OOMPH_FULL_CIRCLE_DOMAIN_HEADER
28 #define OOMPH_FULL_CIRCLE_DOMAIN_HEADER
31 #include "../generic/quadtree.h"
32 #include "../generic/domain.h"
33 #include "../generic/geom_objects.h"
78 const Vector<double>& theta_positions,
79 const Vector<double>& radius_box)
85 const unsigned n_macro = 5;
86 Macro_element_pt.resize(n_macro);
89 for (
unsigned i = 0; i < n_macro; i++)
91 Macro_element_pt[i] =
new QMacroElement<2>(
this, i);
111 const unsigned& i_macro,
112 const unsigned& i_direct,
113 const Vector<double>& s,
134 const Vector<double>& high,
139 for (
unsigned i = 0; i < 2; i++)
141 f[i] = low[i] + (high[i] - low[i]) * 0.5 * (s + 1.0);
158 const unsigned& imacro,
159 const unsigned& idirect,
160 const Vector<double>& s,
163 using namespace QuadTreeNames;
166 Vector<Vector<double>> Box(4);
168 Vector<Vector<double>> Wall(4);
171 Vector<double> zeta(2);
174 for (
unsigned j = 0; j < 4; j++)
184 Area_pt->position(t, zeta, Box[j]);
188 Area_pt->position(t, zeta, Wall[j]);
192 const double pi = MathematicalConstants::Pi;
224 std::ostringstream error_stream;
225 error_stream <<
"idirect is " << idirect <<
" not one of N, S, E, W"
228 throw OomphLibError(error_stream.str(),
229 OOMPH_CURRENT_FUNCTION,
230 OOMPH_EXCEPTION_LOCATION);
269 std::ostringstream error_stream;
270 error_stream <<
"idirect is " << idirect <<
" not one of N, S, E, W"
273 throw OomphLibError(error_stream.str(),
274 OOMPH_CURRENT_FUNCTION,
275 OOMPH_EXCEPTION_LOCATION);
314 std::ostringstream error_stream;
315 error_stream <<
"idirect is " << idirect <<
" not one of N, S, W, E"
318 throw OomphLibError(error_stream.str(),
319 OOMPH_CURRENT_FUNCTION,
320 OOMPH_EXCEPTION_LOCATION);
357 std::ostringstream error_stream;
358 error_stream <<
"idirect is " << idirect <<
" not one of N, S, E, W"
361 throw OomphLibError(error_stream.str(),
362 OOMPH_CURRENT_FUNCTION,
363 OOMPH_EXCEPTION_LOCATION);
403 std::ostringstream error_stream;
404 error_stream <<
"idirect is " << idirect <<
" not one of N, S, W, E"
407 throw OomphLibError(error_stream.str(),
408 OOMPH_CURRENT_FUNCTION,
409 OOMPH_EXCEPTION_LOCATION);
416 std::ostringstream error_stream;
417 error_stream <<
"Wrong imacro " << imacro << std::endl;
419 error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
Topologically circular domain, e.g. a tube cross section. The entire domain must be defined by a Geom...
FullCircleDomain(const FullCircleDomain &)=delete
Broken copy constructor.
FullCircleDomain(GeomObject *area_geom_object_pt, const Vector< double > &theta_positions, const Vector< double > &radius_box)
Constructor: Pass geometric object; the theta locations marking the division between the elements of ...
GeomObject * Area_pt
Pointer to geometric object that represents the domain.
void lin_interpolate(const Vector< double > &low, const Vector< double > &high, const double &s, Vector< double > &f)
A very little linear interpolation helper. Interpolate from the low point to the high point using the...
void macro_element_boundary(const unsigned &t, const unsigned &i_macro, const unsigned &i_direct, const Vector< double > &s, Vector< double > &f)
Vector representation of the i_macro-th macro element boundary i_direct (N/S/W/E) at time level t (t=...
Vector< double > Radius_box
Storage for the fraction of the radius at which the central box should be located corresponding to th...
void operator=(const FullCircleDomain &)=delete
Broken assignment operator.
Vector< double > Theta_positions
Storage for the dividing lines on the boundary starting from the lower left and proceeding anticlockw...
~FullCircleDomain()
Destructor: Empty; cleanup done in base class.
////////////////////////////////////////////////////////////////////// //////////////////////////////...