30 #ifndef OOMPH_RECTANGLE_WITH_HOLE_DOMAIN_HEADER    31 #define OOMPH_RECTANGLE_WITH_HOLE_DOMAIN_HEADER    35 #include "../generic/quadtree.h"    36 #include "../generic/geom_objects.h"    37 #include "../generic/macro_element.h"    38 #include "../generic/domain.h"    61                          const double &length) :
   103    Macro_element_pt.resize(4); 
   106    for (
unsigned i=0;i<4;i++)
   107     {Macro_element_pt[i]= 
new QMacroElement<2>(
this,i);}
   115   for (
unsigned i=0;i<4;i++){
delete Macro_element_pt[i];}
   122                          const double &s, Vector<double> &f)
   124    for(
unsigned i=0;i<2;i++)
   126      f[i] = left[i] + (right[i] - left[i])*0.5*(s+1.0);
   137                              const unsigned &direction,
   138                              const Vector<double> &s,
   142 #ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES   145     "Order of function arguments has changed between versions 0.8 and 0.85",
   146     "RectangleWithHoleDomain::macro_element_boundary(...)",
   147     OOMPH_EXCEPTION_LOCATION);
   151   Vector<double> xi(1);
   154   Vector<double> point_on_circle(2);
   156   using namespace QuadTreeNames;
   168       xi[0] = 3.0*atan(1.0);
   174       xi[0] = -3.0*atan(1.0);
   184       xi[0] = 5.0*atan(1.0) - 2.0*atan(1.0)*0.5*(1.0+s[0]);
   190       std::ostringstream error_stream;
   191       error_stream << 
"Direction is incorrect:  " << direction << std::endl;
   192       throw OomphLibError(error_stream.str(),
   193                           OOMPH_CURRENT_FUNCTION,
   194                           OOMPH_EXCEPTION_LOCATION);
   209       xi[0] = 3.0*atan(1.0) - 2.0*atan(1.0)*0.5*(1.0+s[0]);
   214       xi[0] = 3.0*atan(1.0);
   220       xi[0] = 1.0*atan(1.0);
   227       std::ostringstream error_stream;
   228       error_stream << 
"Direction is incorrect:  " << direction << std::endl;
   229       throw OomphLibError(error_stream.str(),
   230                           OOMPH_CURRENT_FUNCTION,
   231                           OOMPH_EXCEPTION_LOCATION);
   242       xi[0] = 1.0*atan(1.0);
   248       xi[0] = -1.0*atan(1.0);
   254       xi[0] = -atan(1.0) + 2.0*atan(1.0)*0.5*(1.0+s[0]);
   264       std::ostringstream error_stream;
   265       error_stream << 
"Direction is incorrect:  " << direction << std::endl;
   266       throw OomphLibError(error_stream.str(),
   267                           OOMPH_CURRENT_FUNCTION,
   268                           OOMPH_EXCEPTION_LOCATION);
   279       xi[0] = -3.0*atan(1.0) + 2.0*atan(1.0)*0.5*(1.0+s[0]);
   288       xi[0] = -3.0*atan(1.0);
   294       xi[0] = -1.0*atan(1.0);
   301       std::ostringstream error_stream;
   302       error_stream << 
"Direction is incorrect:  " << direction << std::endl;
   303       throw OomphLibError(error_stream.str(),
   304                           OOMPH_CURRENT_FUNCTION,
   305                           OOMPH_EXCEPTION_LOCATION);
   312     std::ostringstream error_stream;
   313     error_stream << 
"Wrong macro element number" << m << std::endl;
   314     throw OomphLibError(error_stream.str(),
   315                         OOMPH_CURRENT_FUNCTION,
   316                         OOMPH_EXCEPTION_LOCATION);
 Rectangular domain with circular whole. 
 
Vector< double > Lower_right
Lower 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...
 
Vector< double > Lower_mid_right
Where the "radial" line from circle meets lower boundary on right. 
 
Vector< double > Lower_left
Lower left corner of rectangle. 
 
~RectangleWithHoleDomain()
Destructor: Kill macro elements, why isn't this generic? 
 
Vector< double > Upper_mid_left
Where the "radial" line from circle meets upper boundary on left. 
 
Vector< double > Lower_mid_left
Where the "radial" line from circle meets lower boundary on left. 
 
Vector< double > Upper_right
Upper right corner of rectangle. 
 
Vector< double > Upper_left
Upper left corner of rectangle. 
 
Vector< double > Upper_mid_right
Where the "radial" line from circle meets upper boundary on right. 
 
GeomObject * Cylinder_pt
Pointer to geometric object that represents the central cylinder. 
 
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; . 
 
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...