44                                                 GeomObject* top_flag_pt,
    45                                                 GeomObject* bottom_flag_pt,
    46                                                 GeomObject* tip_flag_pt,
    49                                                 const double &flag_length,
    50                                                 const double &flag_height,
    51                                                 const double ¢re_x,
    52                                                 const double ¢re_y,
    54   Cylinder_pt(cylinder_pt), Top_flag_pt(top_flag_pt), 
    55   Bottom_flag_pt(bottom_flag_pt), Tip_flag_pt(tip_flag_pt), 
    56   Lx(flag_length), Ly(flag_height),
    57   Centre_x(centre_x),Centre_y(centre_y),A(a)
    71  p3[0] = 0.155596*length;
    75  p4[0] = 0.183596*length;
    79  p5[0] = 0.239596*length;
    83  p6[0] = 0.285123967*length;
    87  p7[0] = 0.433884298*length;
    91  p8[0] = 0.578512397*length;
    95  p9[0] = 0.789256198*length;
   103  p11[0] = 0.127596*length;
   104  p11[1] = 0.778024390*height;
   107  p12[0] = 0.155596*length;
   108  p12[1] = 0.778024390*height;
   111  p13[0] = 0.183596*length;
   112  p13[1] = 0.778024390*height;
   115  p14[0] = 0.211596*length;
   116  p14[1] = 0.778024390*height;
   119  p15[0] = 0.285123967*length;
   120  p15[1] = 0.625*height;
   123  p16[0] = 0.351239669*length;
   124  p16[1] = 0.625*height;
   135  p35[0] = 0.285123967*length;
   136  p35[1] = 0.350609756*height;
   139  p36[0] = 0.351239669*length;
   140  p36[1] = 0.350609756*height;
   143  p37[0] = 0.127596*length;
   144  p37[1] = 0.197585366*height;
   147  p38[0] =  0.155596*length;
   148  p38[1] = 0.197585366*height;
   151  p39[0] =  0.183596*length;
   152  p39[1] = 0.197585366*height;
   155  p40[0] = 0.211596*length;
   156  p40[1] = 0.197585366*height;
   167  p43[0] =  0.155596*length;
   171  p44[0] = 0.183596*length;
   175  p45[0] = 0.239596*length;
   179  p46[0] = 0.285123967*length;
   183  p47[0] = 0.433884298*length;
   187  p48[0] = 0.578512397*length;
   191  p49[0] = 0.789256198*length;
   213  Macro_element_pt.resize(31); 
   216  for (
unsigned i=0;i<31;i++)
   217   {Macro_element_pt[i]= 
new QMacroElement<2>(
this,i);}
   231                                                      const Vector<double> &s,
   236  using namespace QuadTreeNames;
   238 #ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES   241     "Order of function arguments has changed between versions 0.8 and 0.85",
   242     "CylinderWithFlagDomain::macro_element_boundary(...)",
   243     OOMPH_EXCEPTION_LOCATION);
   248  Vector<double> xi(1);
   251  Vector<double> point_on_circle(2);
   254  Vector<double> zeta(1);
   289  std::ostringstream error_message;
   301      xi[0] = 3.0*atan(1.0);
   307      xi[0] = -3.0*atan(1.0);
   317      xi[0] = 5.0*atan(1.0) - 2.0*atan(1.0)*0.5*(1.0+s[0]);
   322      error_message << 
"Direction is incorrect: " << direction << std::endl;
   323      throw OomphLibError(error_message.str(),
   324                          OOMPH_CURRENT_FUNCTION,
   325                          OOMPH_EXCEPTION_LOCATION);
   341      xi[0] = 3.0*atan(1.0) - atan(1.0)*0.5*(1.0+s[0]);
   346      xi[0] = 3.0*atan(1.0);
   356      error_message << 
"Direction is incorrect: " << direction << std::endl;
   357      throw OomphLibError(error_message.str(),
   358                          OOMPH_CURRENT_FUNCTION,
   359                          OOMPH_EXCEPTION_LOCATION);
   374      xi[0] = 2.0*atan(1.0) - atan(1.0)*0.5*(1.0+s[0]);
   389      error_message << 
"Direction is incorrect: " << direction << std::endl;
   390      throw OomphLibError(error_message.str(),
   391                          OOMPH_CURRENT_FUNCTION,
   392                          OOMPH_EXCEPTION_LOCATION);
   409      xi[0]= (1.+s[0])/2.*1./5.*
Lx;
   414      xi[0] = asin(
Ly/
A/2.) + 
   415       (atan(1.0)-asin(
Ly/
A/2.))*0.5*(1.0+s[0]);
   424      error_message << 
"Direction is incorrect: " << direction << std::endl;
   425      throw OomphLibError(error_message.str(),
   426                          OOMPH_CURRENT_FUNCTION,
   427                          OOMPH_EXCEPTION_LOCATION);
   438      xi[0]= (1.+s[0])/2.*1./5.*
Lx;
   449      xi[0] = -atan(1.0) + (atan(1.0)-asin(
Ly/
A/2.))*0.5*(1.0+s[0]);
   458      error_message << 
"Direction is incorrect: " << direction << std::endl;
   459      throw OomphLibError(error_message.str(),
   460                          OOMPH_CURRENT_FUNCTION,
   461                          OOMPH_EXCEPTION_LOCATION);
   472      xi[0] = 6*atan(1.0) + atan(1.0)*0.5*(1.0+s[0]);
   491      error_message << 
"Direction is incorrect: " << direction << std::endl;
   492      throw OomphLibError(error_message.str(),
   493                          OOMPH_CURRENT_FUNCTION,
   494                          OOMPH_EXCEPTION_LOCATION);
   505      xi[0] = 5.0*atan(1.0) + atan(1.0)*0.5*(1.0+s[0]);
   514      xi[0] = 5.0*atan(1.0);
   524      error_message << 
"Direction is incorrect: " << direction << std::endl;
   525      throw OomphLibError(error_message.str(),
   526                          OOMPH_CURRENT_FUNCTION,
   527                          OOMPH_EXCEPTION_LOCATION);
   554      error_message << 
"Direction is incorrect: " << direction << std::endl;
   555      throw OomphLibError(error_message.str(),
   556                          OOMPH_CURRENT_FUNCTION,
   557                          OOMPH_EXCEPTION_LOCATION);
   571      xi[0]=1./5.*
Lx+ (1.+s[0])/2.*1./5.*
Lx;
   584      error_message << 
"Direction is incorrect: " << direction << std::endl;
   585      throw OomphLibError(error_message.str(),
   586                          OOMPH_CURRENT_FUNCTION,
   587                          OOMPH_EXCEPTION_LOCATION);
   596      xi[0]= 1./5.*
Lx+(1.+s[0])/2.*1./5.*
Lx;
   613      error_message << 
"Direction is incorrect: " << direction << std::endl;
   614      throw OomphLibError(error_message.str(),
   615                          OOMPH_CURRENT_FUNCTION,
   616                          OOMPH_EXCEPTION_LOCATION);
   642      error_message << 
"Direction is incorrect: " << direction << std::endl;
   643      throw OomphLibError(error_message.str(),
   644                          OOMPH_CURRENT_FUNCTION,
   645                          OOMPH_EXCEPTION_LOCATION);
   670      error_message << 
"Direction is incorrect: " << direction << std::endl;
   671      throw OomphLibError(error_message.str(),
   672                          OOMPH_CURRENT_FUNCTION,
   673                          OOMPH_EXCEPTION_LOCATION);
   688      xi[0]=2./5.*
Lx+ (1.+s[0])/2.*1./5.*
Lx;
   701      error_message << 
"Direction is incorrect: " << direction << std::endl;
   702      throw OomphLibError(error_message.str(),
   703                          OOMPH_CURRENT_FUNCTION,
   704                          OOMPH_EXCEPTION_LOCATION);
   714      xi[0]= 2./5.*
Lx+(1.+s[0])/2.*1./5.*
Lx;
   731      error_message << 
"Direction is incorrect: " << direction << std::endl;
   732      throw OomphLibError(error_message.str(),
   733                          OOMPH_CURRENT_FUNCTION,
   734                          OOMPH_EXCEPTION_LOCATION);
   760      error_message << 
"Direction is incorrect: " << direction << std::endl;
   761      throw OomphLibError(error_message.str(),
   762                          OOMPH_CURRENT_FUNCTION,
   763                          OOMPH_EXCEPTION_LOCATION);
   789      error_message << 
"Direction is incorrect: " << direction << std::endl;
   790      throw OomphLibError(error_message.str(),
   791                          OOMPH_CURRENT_FUNCTION,
   792                          OOMPH_EXCEPTION_LOCATION);
   806      xi[0]=3./5.*
Lx+ (1.+s[0])/2.*1./5.*
Lx;
   819      error_message << 
"Direction is incorrect: " << direction << std::endl;
   820      throw OomphLibError(error_message.str(),
   821                          OOMPH_CURRENT_FUNCTION,
   822                          OOMPH_EXCEPTION_LOCATION);
   832      xi[0]= 3./5.*
Lx+(1.+s[0])/2.*1./5.*
Lx;
   849      error_message << 
"Direction is incorrect: " << direction << std::endl;
   850      throw OomphLibError(error_message.str(),
   851                          OOMPH_CURRENT_FUNCTION,
   852                          OOMPH_EXCEPTION_LOCATION);
   878      error_message << 
"Direction is incorrect: " << direction << std::endl;
   879      throw OomphLibError(error_message.str(),
   880                          OOMPH_CURRENT_FUNCTION,
   881                          OOMPH_EXCEPTION_LOCATION);
   895      xi[0]=4./5.*
Lx+ (1.+s[0])/2.*1./5.*
Lx;
   908      error_message << 
"Direction is incorrect: " << direction << std::endl;
   909      throw OomphLibError(error_message.str(),
   910                          OOMPH_CURRENT_FUNCTION,
   911                          OOMPH_EXCEPTION_LOCATION);
   921      xi[0]= 4./5.*
Lx+(1.+s[0])/2.*1./5.*
Lx;
   938      error_message << 
"Direction is incorrect: " << direction << std::endl;
   939      throw OomphLibError(error_message.str(),
   940                          OOMPH_CURRENT_FUNCTION,
   941                          OOMPH_EXCEPTION_LOCATION);
   967      error_message << 
"Direction is incorrect: " << direction << std::endl;
   968      throw OomphLibError(error_message.str(),
   969                          OOMPH_CURRENT_FUNCTION,
   970                          OOMPH_EXCEPTION_LOCATION);
   997      error_message << 
"Direction is incorrect: " << direction << std::endl;
   998      throw OomphLibError(error_message.str(),
   999                          OOMPH_CURRENT_FUNCTION,
  1000                          OOMPH_EXCEPTION_LOCATION);
  1026      error_message << 
"Direction is incorrect: " << direction << std::endl;
  1027      throw OomphLibError(error_message.str(),
  1028                          OOMPH_CURRENT_FUNCTION,
  1029                          OOMPH_EXCEPTION_LOCATION);
  1055      error_message << 
"Direction is incorrect: " << direction << std::endl;
  1056      throw OomphLibError(error_message.str(),
  1057                          OOMPH_CURRENT_FUNCTION,
  1058                          OOMPH_EXCEPTION_LOCATION);
  1084      error_message << 
"Direction is incorrect: " << direction << std::endl;
  1085      throw OomphLibError(error_message.str(),
  1086                          OOMPH_CURRENT_FUNCTION,
  1087                          OOMPH_EXCEPTION_LOCATION);
  1113      error_message << 
"Direction is incorrect: " << direction << std::endl;
  1114      throw OomphLibError(error_message.str(),
  1115                          OOMPH_CURRENT_FUNCTION,
  1116                          OOMPH_EXCEPTION_LOCATION);
  1142      error_message << 
"Direction is incorrect: " << direction << std::endl;
  1143      throw OomphLibError(error_message.str(),
  1144                          OOMPH_CURRENT_FUNCTION,
  1145                          OOMPH_EXCEPTION_LOCATION);
  1171      error_message << 
"Direction is incorrect: " << direction << std::endl;
  1172      throw OomphLibError(error_message.str(),
  1173                          OOMPH_CURRENT_FUNCTION,
  1174                          OOMPH_EXCEPTION_LOCATION);
  1200      error_message << 
"Direction is incorrect: " << direction << std::endl;
  1201      throw OomphLibError(error_message.str(),
  1202                          OOMPH_CURRENT_FUNCTION,
  1203                          OOMPH_EXCEPTION_LOCATION);
  1229      error_message << 
"Direction is incorrect: " << direction << std::endl;
  1230      throw OomphLibError(error_message.str(),
  1231                          OOMPH_CURRENT_FUNCTION,
  1232                          OOMPH_EXCEPTION_LOCATION);
  1239    error_message << 
"Wrong macro element number" << m << std::endl;
  1240    throw OomphLibError(error_message.str(),
  1241                        OOMPH_CURRENT_FUNCTION,
  1242                        OOMPH_EXCEPTION_LOCATION);
 
GeomObject * Tip_flag_pt
Pointer to geometric object that represents the tip of the flag. 
 
CylinderWithFlagDomain(Circle *cylinder_pt, GeomObject *top_flag_pt, GeomObject *bottom_flag_pt, GeomObject *tip_flag_pt, const double &length, const double &height, const double &flag_length, const double &flag_height, const double ¢re_x, const double ¢re_y, const double &a)
 
GeomObject * Top_flag_pt
Pointer to geometric object that represents the top of the flag. 
 
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...
 
GeomObject * Bottom_flag_pt
Pointer to geometric object that represents the bottom of the flag. 
 
void linear_interpolate(const Vector< double > &left, const Vector< double > &right, const double &s, Vector< double > &f)
Helper function to interpolate linearly between the "right" and "left" points; . 
 
Circle * Cylinder_pt
Pointer to geometric object that represents the central cylinder.