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;
216 for (
unsigned i=0;
i<31;
i++)
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);
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;
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;
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;
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;
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;
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;
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;
526 OOMPH_CURRENT_FUNCTION,
527 OOMPH_EXCEPTION_LOCATION);
554 error_message <<
"Direction is incorrect: " << direction << std::endl;
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;
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;
615 OOMPH_CURRENT_FUNCTION,
616 OOMPH_EXCEPTION_LOCATION);
642 error_message <<
"Direction is incorrect: " << direction << std::endl;
644 OOMPH_CURRENT_FUNCTION,
645 OOMPH_EXCEPTION_LOCATION);
670 error_message <<
"Direction is incorrect: " << direction << std::endl;
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;
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;
733 OOMPH_CURRENT_FUNCTION,
734 OOMPH_EXCEPTION_LOCATION);
760 error_message <<
"Direction is incorrect: " << direction << std::endl;
762 OOMPH_CURRENT_FUNCTION,
763 OOMPH_EXCEPTION_LOCATION);
789 error_message <<
"Direction is incorrect: " << direction << std::endl;
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;
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;
851 OOMPH_CURRENT_FUNCTION,
852 OOMPH_EXCEPTION_LOCATION);
878 error_message <<
"Direction is incorrect: " << direction << std::endl;
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;
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;
940 OOMPH_CURRENT_FUNCTION,
941 OOMPH_EXCEPTION_LOCATION);
967 error_message <<
"Direction is incorrect: " << direction << std::endl;
969 OOMPH_CURRENT_FUNCTION,
970 OOMPH_EXCEPTION_LOCATION);
997 error_message <<
"Direction is incorrect: " << direction << std::endl;
999 OOMPH_CURRENT_FUNCTION,
1000 OOMPH_EXCEPTION_LOCATION);
1026 error_message <<
"Direction is incorrect: " << direction << std::endl;
1028 OOMPH_CURRENT_FUNCTION,
1029 OOMPH_EXCEPTION_LOCATION);
1055 error_message <<
"Direction is incorrect: " << direction << std::endl;
1057 OOMPH_CURRENT_FUNCTION,
1058 OOMPH_EXCEPTION_LOCATION);
1084 error_message <<
"Direction is incorrect: " << direction << std::endl;
1086 OOMPH_CURRENT_FUNCTION,
1087 OOMPH_EXCEPTION_LOCATION);
1113 error_message <<
"Direction is incorrect: " << direction << std::endl;
1115 OOMPH_CURRENT_FUNCTION,
1116 OOMPH_EXCEPTION_LOCATION);
1142 error_message <<
"Direction is incorrect: " << direction << std::endl;
1144 OOMPH_CURRENT_FUNCTION,
1145 OOMPH_EXCEPTION_LOCATION);
1171 error_message <<
"Direction is incorrect: " << direction << std::endl;
1173 OOMPH_CURRENT_FUNCTION,
1174 OOMPH_EXCEPTION_LOCATION);
1200 error_message <<
"Direction is incorrect: " << direction << std::endl;
1202 OOMPH_CURRENT_FUNCTION,
1203 OOMPH_EXCEPTION_LOCATION);
1229 error_message <<
"Direction is incorrect: " << direction << std::endl;
1231 OOMPH_CURRENT_FUNCTION,
1232 OOMPH_EXCEPTION_LOCATION);
1239 error_message <<
"Wrong macro element number" << m << std::endl;
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)
Vector< MacroElement * > Macro_element_pt
Vector of pointers to macro elements.
GeomObject * Top_flag_pt
Pointer to geometric object that represents the top of the flag.
virtual void position(const Vector< double > &zeta, Vector< double > &r) const =0
Parametrised position on object at current time: r(zeta).
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; .
void position(const Vector< double > &zeta, Vector< double > &r) const
Position Vector at Lagrangian coordinate zeta.
Circle * Cylinder_pt
Pointer to geometric object that represents the central cylinder.