27 #ifndef OOMPH_QUARTER_CIRCLE_SECTOR_DOMAIN_HEADER
28 #define OOMPH_QUARTER_CIRCLE_SECTOR_DOMAIN_HEADER
31 #include "../generic/quadtree.h"
32 #include "../generic/domain.h"
33 #include "../generic/geom_objects.h"
49 const double& fract_mid,
54 Wall_pt(boundary_geom_object_pt),
61 Macro_element_pt.resize(nmacro);
64 for (
unsigned i = 0; i < nmacro; i++)
66 Macro_element_pt[i] =
new QMacroElement<2>(
this, i);
113 const unsigned& i_macro,
114 const unsigned& i_direct,
115 const Vector<double>& s,
149 const Vector<double>& zeta,
154 const Vector<double>& zeta,
159 const Vector<double>& zeta,
164 const Vector<double>& zeta,
169 const Vector<double>& zeta,
174 const Vector<double>& zeta,
179 const Vector<double>& zeta,
184 const Vector<double>& zeta,
189 const Vector<double>& zeta,
194 const Vector<double>& zeta,
199 const Vector<double>& zeta,
204 const Vector<double>& zeta,
221 const unsigned& imacro,
222 const unsigned& idirect,
223 const Vector<double>& s,
226 #ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES
229 "Order of function arguments has changed between versions 0.8 and 0.85",
230 "QuarterCircleSectorDomain::macro_element_boundary(...)",
231 OOMPH_EXCEPTION_LOCATION);
238 using namespace QuadTreeNames;
248 else if (idirect == S)
252 else if (idirect == W)
256 else if (idirect == E)
262 std::ostringstream error_stream;
263 error_stream <<
"idirect is " << idirect <<
" not one of N, S, E, W"
266 throw OomphLibError(error_stream.str(),
267 OOMPH_CURRENT_FUNCTION,
268 OOMPH_EXCEPTION_LOCATION);
281 else if (idirect == S)
285 else if (idirect == W)
289 else if (idirect == E)
295 std::ostringstream error_stream;
296 error_stream <<
"idirect is " << idirect <<
" not one of N, S, E, W"
299 throw OomphLibError(error_stream.str(),
300 OOMPH_CURRENT_FUNCTION,
301 OOMPH_EXCEPTION_LOCATION);
314 else if (idirect == S)
318 else if (idirect == W)
322 else if (idirect == E)
328 std::ostringstream error_stream;
329 error_stream <<
"idirect is " << idirect <<
" not one of N, S, E, W"
332 throw OomphLibError(error_stream.str(),
333 OOMPH_CURRENT_FUNCTION,
334 OOMPH_EXCEPTION_LOCATION);
342 std::ostringstream error_stream;
343 error_stream <<
"Wrong imacro " << imacro << std::endl;
346 error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
355 const Vector<double>& s,
371 const Vector<double>& s,
377 Vector<double> r_top(2);
380 Wall_pt->position(t, x, r_top);
383 f[1] = 0.5 * r_top[1] * (1.0 +
s_squashed(0.5 * (s[0] + 1.0)));
391 const Vector<double>& s,
397 Vector<double> r_top(2);
400 Wall_pt->position(t, x, r_top);
404 Vector<double> r_bot(2);
407 Wall_pt->position(t, x, r_bot);
409 f[0] = 0.5 * r_bot[0] * 0.5 * (s[0] + 1.0);
410 f[1] = 0.5 * r_top[1];
418 const Vector<double>& s,
424 Vector<double> r_top(2);
427 Wall_pt->position(t, x, r_top);
430 Vector<double> r_bot(2);
433 Wall_pt->position(t, x, r_bot);
436 Vector<double> r_half(2);
439 Wall_pt->position(t, x, r_half);
441 f[0] = 0.5 * (r_bot[0] +
s_squashed(0.5 * (s[0] + 1.0)) *
442 (2.0 * r_half[0] - r_bot[0]));
443 f[1] = 0.5 * (r_top[1] +
s_squashed(0.5 * (s[0] + 1.0)) *
444 (2.0 * r_half[1] - r_top[1]));
452 const Vector<double>& s,
462 const Vector<double>& s,
468 Vector<double> r_top(2);
471 Wall_pt->position(t, x, r_top);
474 Vector<double> r_bot(2);
477 Wall_pt->position(t, x, r_bot);
479 f[0] = 0.5 * r_bot[0];
480 f[1] = 0.5 * r_top[1] * 0.5 * (s[0] + 1.0);
487 const Vector<double>& s,
493 Vector<double> r_bot(2);
495 Wall_pt->position(t, x, r_bot);
498 f[0] = 0.5 * r_bot[0] * (1.0 +
s_squashed(0.5 * (s[0] + 1.0)));
506 const Vector<double>& s,
522 const Vector<double>& s,
533 const Vector<double>& s,
544 const Vector<double>& s,
550 Vector<double> r_bot(2);
552 Wall_pt->position(t, x, r_bot);
554 f[0] = 0.5 * r_bot[0] * 0.5 * (s[0] + 1.0);
563 const Vector<double>& s,
569 Vector<double> r_top(2);
571 Wall_pt->position(t, x, r_top);
574 f[1] = 0.5 * r_top[1] * 0.5 * (s[0] + 1.0);
Circular sector as domain. Domain is bounded by curved boundary which is represented by a GeomObject....
void r_top_left_S(const unsigned &t, const Vector< double > &zeta, Vector< double > &f)
Boundary of top left macro element zeta .
QuarterCircleSectorDomain(const QuarterCircleSectorDomain &)=delete
Broken copy constructor.
void r_centr_N(const unsigned &t, const Vector< double > &zeta, Vector< double > &f)
Boundary of central box macro element zeta .
void r_centr_W(const unsigned &t, const Vector< double > &zeta, Vector< double > &f)
Boundary of central box macro element zeta .
void r_bot_right_S(const unsigned &t, const Vector< double > &zeta, Vector< double > &f)
Boundary of bottom right macro element zeta .
GeomObject * Wall_pt
Pointer to geometric object that represents the curved wall.
double s_squashed(const double &s)
Function that squashes the outer two macro elements towards the wall by mapping the input value of th...
double(* BLSquashFctPt)(const double &s)
Typedef for function pointer for function that squashes the outer two macro elements towards the wall...
void operator=(const QuarterCircleSectorDomain &)=delete
Broken assignment operator.
void r_top_left_W(const unsigned &t, const Vector< double > &zeta, Vector< double > &f)
Boundary of top left macro element zeta .
void r_bot_right_W(const unsigned &t, const Vector< double > &zeta, Vector< double > &f)
Boundary of bottom right macro element zeta .
void r_top_left_E(const unsigned &t, const Vector< double > &zeta, Vector< double > &f)
Boundary of top left macro element zeta .
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=...
void r_centr_S(const unsigned &t, const Vector< double > &zeta, Vector< double > &f)
Boundary of central box macro element zeta .
double Xi_hi
Upper limit for the (1D) coordinates along the wall.
void r_bot_right_E(const unsigned &t, const Vector< double > &zeta, Vector< double > &f)
Boundary of bottom right macro element zeta .
QuarterCircleSectorDomain(GeomObject *boundary_geom_object_pt, const double &xi_lo, const double &fract_mid, const double &xi_hi)
Constructor: Pass boundary object and start and end coordinates and fraction along boundary object wh...
BLSquashFctPt & bl_squash_fct_pt()
Function pointer for function that squashes the outer two macro elements towards the wall by mapping ...
void r_bot_right_N(const unsigned &t, const Vector< double > &zeta, Vector< double > &f)
Boundary of bottom right macro element zeta .
static double default_BL_squash_fct(const double &s)
Default for function that squashes the outer two macro elements towards the wall by mapping the input...
double Fract_mid
Fraction along wall where outer ring is to be divided.
void r_centr_E(const unsigned &t, const Vector< double > &zeta, Vector< double > &f)
Boundary of central box macro element zeta .
BLSquashFctPt BL_squash_fct_pt
Function pointer for function that squashes the outer two macro elements towards the wall by mapping ...
~QuarterCircleSectorDomain()
Destructor: empty; cleanup done in base class.
void r_top_left_N(const unsigned &t, const Vector< double > &zeta, Vector< double > &f)
Boundary of top left macro element zeta .
double Xi_lo
Lower limit for the (1D) coordinates along the wall.
////////////////////////////////////////////////////////////////////// //////////////////////////////...