26 #ifndef OOMPH_RECTANGLE_WITH_HOLE_DOMAIN_HEADER 
   27 #define OOMPH_RECTANGLE_WITH_HOLE_DOMAIN_HEADER 
   31 #include "../generic/quadtree.h" 
   32 #include "../generic/geom_objects.h" 
   33 #include "../generic/macro_element.h" 
   34 #include "../generic/domain.h" 
   91       Macro_element_pt.resize(4);
 
   94       for (
unsigned i = 0; i < 4; i++)
 
   96         Macro_element_pt[i] = 
new QMacroElement<2>(
this, i);
 
  107                             Vector<double> right,
 
  111       for (
unsigned i = 0; i < 2; i++)
 
  113         f[i] = left[i] + (right[i] - left[i]) * 0.5 * (s + 1.0);
 
  124                                 const unsigned& direction,
 
  125                                 const Vector<double>& s,
 
  128 #ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES 
  131         "Order of function arguments has changed between versions 0.8 and 0.85",
 
  132         "RectangleWithHoleDomain::macro_element_boundary(...)",
 
  133         OOMPH_EXCEPTION_LOCATION);
 
  137       Vector<double> xi(1);
 
  140       Vector<double> point_on_circle(2);
 
  142       using namespace QuadTreeNames;
 
  153               xi[0] = 3.0 * atan(1.0);
 
  159               xi[0] = -3.0 * atan(1.0);
 
  169               xi[0] = 5.0 * atan(1.0) - 2.0 * atan(1.0) * 0.5 * (1.0 + s[0]);
 
  175               std::ostringstream error_stream;
 
  176               error_stream << 
"Direction is incorrect:  " << direction
 
  178               throw OomphLibError(error_stream.str(),
 
  179                                   OOMPH_CURRENT_FUNCTION,
 
  180                                   OOMPH_EXCEPTION_LOCATION);
 
  195               xi[0] = 3.0 * atan(1.0) - 2.0 * atan(1.0) * 0.5 * (1.0 + s[0]);
 
  200               xi[0] = 3.0 * atan(1.0);
 
  206               xi[0] = 1.0 * atan(1.0);
 
  213               std::ostringstream error_stream;
 
  214               error_stream << 
"Direction is incorrect:  " << direction
 
  216               throw OomphLibError(error_stream.str(),
 
  217                                   OOMPH_CURRENT_FUNCTION,
 
  218                                   OOMPH_EXCEPTION_LOCATION);
 
  229               xi[0] = 1.0 * atan(1.0);
 
  235               xi[0] = -1.0 * atan(1.0);
 
  241               xi[0] = -atan(1.0) + 2.0 * atan(1.0) * 0.5 * (1.0 + s[0]);
 
  251               std::ostringstream error_stream;
 
  252               error_stream << 
"Direction is incorrect:  " << direction
 
  254               throw OomphLibError(error_stream.str(),
 
  255                                   OOMPH_CURRENT_FUNCTION,
 
  256                                   OOMPH_EXCEPTION_LOCATION);
 
  267               xi[0] = -3.0 * atan(1.0) + 2.0 * atan(1.0) * 0.5 * (1.0 + s[0]);
 
  276               xi[0] = -3.0 * atan(1.0);
 
  282               xi[0] = -1.0 * atan(1.0);
 
  289               std::ostringstream error_stream;
 
  290               error_stream << 
"Direction is incorrect:  " << direction
 
  292               throw OomphLibError(error_stream.str(),
 
  293                                   OOMPH_CURRENT_FUNCTION,
 
  294                                   OOMPH_EXCEPTION_LOCATION);
 
  301           std::ostringstream error_stream;
 
  302           error_stream << 
"Wrong macro element number" << m << std::endl;
 
  303           throw OomphLibError(error_stream.str(),
 
  304                               OOMPH_CURRENT_FUNCTION,
 
  305                               OOMPH_EXCEPTION_LOCATION);
 
Rectangular domain with circular whole.
Vector< double > Upper_mid_left
Where the "radial" line from circle meets upper boundary on left.
Vector< double > Upper_left
Upper left corner of rectangle.
Vector< double > Upper_right
Upper right corner of rectangle.
RectangleWithHoleDomain(GeomObject *cylinder_pt, const double &length)
Constructor. Pass pointer to geometric object that represents the cylinder, the length of the (square...
GeomObject * Cylinder_pt
Pointer to geometric object that represents the central cylinder.
void macro_element_boundary(const unsigned &time, const unsigned &m, const unsigned &direction, const Vector< double > &s, Vector< double > &f)
Parametrisation of macro element boundaries: f(s) is the position vector to macro-element m's boundar...
Vector< double > Lower_left
Lower left corner of rectangle.
void linear_interpolate(Vector< double > left, Vector< double > right, const double &s, Vector< double > &f)
Helper function to interpolate linearly between the "right" and "left" points; .
Vector< double > Lower_mid_right
Where the "radial" line from circle meets lower boundary on right.
Vector< double > Upper_mid_right
Where the "radial" line from circle meets upper boundary on right.
Vector< double > Lower_mid_left
Where the "radial" line from circle meets lower boundary on left.
Vector< double > Lower_right
Lower right corner of rectangle.
~RectangleWithHoleDomain()
Destructor: Empty; cleanup done in base class.
////////////////////////////////////////////////////////////////////// //////////////////////////////...