43 const double& flag_length,
44 const double& flag_height,
45 const double& centre_x,
46 const double& centre_y,
48 : Cylinder_pt(cylinder_pt),
49 Top_flag_pt(top_flag_pt),
50 Bottom_flag_pt(bottom_flag_pt),
51 Tip_flag_pt(tip_flag_pt),
70 p3[0] = 0.155596 * length;
74 p4[0] = 0.183596 * length;
78 p5[0] = 0.239596 * length;
82 p6[0] = 0.285123967 * length;
86 p7[0] = 0.433884298 * length;
90 p8[0] = 0.578512397 * length;
94 p9[0] = 0.789256198 * length;
102 p11[0] = 0.127596 * length;
103 p11[1] = 0.778024390 * height;
106 p12[0] = 0.155596 * length;
107 p12[1] = 0.778024390 * height;
110 p13[0] = 0.183596 * length;
111 p13[1] = 0.778024390 * height;
114 p14[0] = 0.211596 * length;
115 p14[1] = 0.778024390 * height;
118 p15[0] = 0.285123967 * length;
119 p15[1] = 0.625 * height;
122 p16[0] = 0.351239669 * length;
123 p16[1] = 0.625 * height;
134 p35[0] = 0.285123967 * length;
135 p35[1] = 0.350609756 * height;
138 p36[0] = 0.351239669 * length;
139 p36[1] = 0.350609756 * height;
142 p37[0] = 0.127596 * length;
143 p37[1] = 0.197585366 * height;
146 p38[0] = 0.155596 * length;
147 p38[1] = 0.197585366 * height;
150 p39[0] = 0.183596 * length;
151 p39[1] = 0.197585366 * height;
154 p40[0] = 0.211596 * length;
155 p40[1] = 0.197585366 * height;
166 p43[0] = 0.155596 * length;
170 p44[0] = 0.183596 * length;
174 p45[0] = 0.239596 * length;
178 p46[0] = 0.285123967 * length;
182 p47[0] = 0.433884298 * length;
186 p48[0] = 0.578512397 * length;
190 p49[0] = 0.789256198 * length;
214 for (
unsigned i = 0;
i < 31;
i++)
229 const unsigned& direction,
234 using namespace QuadTreeNames;
236 #ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES
239 "Order of function arguments has changed between versions 0.8 and 0.85",
240 "CylinderWithFlagDomain::macro_element_boundary(...)",
241 OOMPH_EXCEPTION_LOCATION);
256 zeta[0] = 1. / 5. *
Lx;
259 zeta[0] = 2. / 5. *
Lx;
262 zeta[0] = 3. / 5. *
Lx;
265 zeta[0] = 4. / 5. *
Lx;
271 zeta[0] = 1. / 5. *
Lx;
274 zeta[0] = 2. / 5. *
Lx;
277 zeta[0] = 3. / 5. *
Lx;
280 zeta[0] = 4. / 5. *
Lx;
287 std::ostringstream error_message;
298 xi[0] = 3.0 * atan(1.0);
304 xi[0] = -3.0 * atan(1.0);
314 xi[0] = 5.0 * atan(1.0) - 2.0 * atan(1.0) * 0.5 * (1.0 +
s[0]);
319 error_message <<
"Direction is incorrect: " << direction
322 OOMPH_CURRENT_FUNCTION,
323 OOMPH_EXCEPTION_LOCATION);
338 xi[0] = 3.0 * atan(1.0) - atan(1.0) * 0.5 * (1.0 +
s[0]);
343 xi[0] = 3.0 * atan(1.0);
353 error_message <<
"Direction is incorrect: " << direction
356 OOMPH_CURRENT_FUNCTION,
357 OOMPH_EXCEPTION_LOCATION);
372 xi[0] = 2.0 * atan(1.0) - atan(1.0) * 0.5 * (1.0 +
s[0]);
387 error_message <<
"Direction is incorrect: " << direction
390 OOMPH_CURRENT_FUNCTION,
391 OOMPH_EXCEPTION_LOCATION);
408 xi[0] = (1. +
s[0]) / 2. * 1. / 5. *
Lx;
413 xi[0] = asin(
Ly /
A / 2.) +
414 (atan(1.0) - asin(
Ly /
A / 2.)) * 0.5 * (1.0 +
s[0]);
423 error_message <<
"Direction is incorrect: " << direction
426 OOMPH_CURRENT_FUNCTION,
427 OOMPH_EXCEPTION_LOCATION);
438 xi[0] = (1. +
s[0]) / 2. * 1. / 5. *
Lx;
450 -atan(1.0) + (atan(1.0) - asin(
Ly /
A / 2.)) * 0.5 * (1.0 +
s[0]);
459 error_message <<
"Direction is incorrect: " << direction
462 OOMPH_CURRENT_FUNCTION,
463 OOMPH_EXCEPTION_LOCATION);
474 xi[0] = 6 * atan(1.0) + atan(1.0) * 0.5 * (1.0 +
s[0]);
493 error_message <<
"Direction is incorrect: " << direction
496 OOMPH_CURRENT_FUNCTION,
497 OOMPH_EXCEPTION_LOCATION);
508 xi[0] = 5.0 * atan(1.0) + atan(1.0) * 0.5 * (1.0 +
s[0]);
517 xi[0] = 5.0 * atan(1.0);
527 error_message <<
"Direction is incorrect: " << direction
530 OOMPH_CURRENT_FUNCTION,
531 OOMPH_EXCEPTION_LOCATION);
558 error_message <<
"Direction is incorrect: " << direction
561 OOMPH_CURRENT_FUNCTION,
562 OOMPH_EXCEPTION_LOCATION);
576 xi[0] = 1. / 5. *
Lx + (1. +
s[0]) / 2. * 1. / 5. *
Lx;
589 error_message <<
"Direction is incorrect: " << direction
592 OOMPH_CURRENT_FUNCTION,
593 OOMPH_EXCEPTION_LOCATION);
602 xi[0] = 1. / 5. *
Lx + (1. +
s[0]) / 2. * 1. / 5. *
Lx;
619 error_message <<
"Direction is incorrect: " << direction
622 OOMPH_CURRENT_FUNCTION,
623 OOMPH_EXCEPTION_LOCATION);
649 error_message <<
"Direction is incorrect: " << direction
652 OOMPH_CURRENT_FUNCTION,
653 OOMPH_EXCEPTION_LOCATION);
678 error_message <<
"Direction is incorrect: " << direction
681 OOMPH_CURRENT_FUNCTION,
682 OOMPH_EXCEPTION_LOCATION);
697 xi[0] = 2. / 5. *
Lx + (1. +
s[0]) / 2. * 1. / 5. *
Lx;
710 error_message <<
"Direction is incorrect: " << direction
713 OOMPH_CURRENT_FUNCTION,
714 OOMPH_EXCEPTION_LOCATION);
724 xi[0] = 2. / 5. *
Lx + (1. +
s[0]) / 2. * 1. / 5. *
Lx;
741 error_message <<
"Direction is incorrect: " << direction
744 OOMPH_CURRENT_FUNCTION,
745 OOMPH_EXCEPTION_LOCATION);
771 error_message <<
"Direction is incorrect: " << direction
774 OOMPH_CURRENT_FUNCTION,
775 OOMPH_EXCEPTION_LOCATION);
801 error_message <<
"Direction is incorrect: " << direction
804 OOMPH_CURRENT_FUNCTION,
805 OOMPH_EXCEPTION_LOCATION);
819 xi[0] = 3. / 5. *
Lx + (1. +
s[0]) / 2. * 1. / 5. *
Lx;
832 error_message <<
"Direction is incorrect: " << direction
835 OOMPH_CURRENT_FUNCTION,
836 OOMPH_EXCEPTION_LOCATION);
846 xi[0] = 3. / 5. *
Lx + (1. +
s[0]) / 2. * 1. / 5. *
Lx;
863 error_message <<
"Direction is incorrect: " << direction
866 OOMPH_CURRENT_FUNCTION,
867 OOMPH_EXCEPTION_LOCATION);
893 error_message <<
"Direction is incorrect: " << direction
896 OOMPH_CURRENT_FUNCTION,
897 OOMPH_EXCEPTION_LOCATION);
911 xi[0] = 4. / 5. *
Lx + (1. +
s[0]) / 2. * 1. / 5. *
Lx;
924 error_message <<
"Direction is incorrect: " << direction
927 OOMPH_CURRENT_FUNCTION,
928 OOMPH_EXCEPTION_LOCATION);
938 xi[0] = 4. / 5. *
Lx + (1. +
s[0]) / 2. * 1. / 5. *
Lx;
955 error_message <<
"Direction is incorrect: " << direction
958 OOMPH_CURRENT_FUNCTION,
959 OOMPH_EXCEPTION_LOCATION);
985 error_message <<
"Direction is incorrect: " << direction
988 OOMPH_CURRENT_FUNCTION,
989 OOMPH_EXCEPTION_LOCATION);
1007 xi[0] =
s[0] *
Ly / 2.;
1016 error_message <<
"Direction is incorrect: " << direction
1019 OOMPH_CURRENT_FUNCTION,
1020 OOMPH_EXCEPTION_LOCATION);
1046 error_message <<
"Direction is incorrect: " << direction
1049 OOMPH_CURRENT_FUNCTION,
1050 OOMPH_EXCEPTION_LOCATION);
1076 error_message <<
"Direction is incorrect: " << direction
1079 OOMPH_CURRENT_FUNCTION,
1080 OOMPH_EXCEPTION_LOCATION);
1106 error_message <<
"Direction is incorrect: " << direction
1109 OOMPH_CURRENT_FUNCTION,
1110 OOMPH_EXCEPTION_LOCATION);
1136 error_message <<
"Direction is incorrect: " << direction
1139 OOMPH_CURRENT_FUNCTION,
1140 OOMPH_EXCEPTION_LOCATION);
1166 error_message <<
"Direction is incorrect: " << direction
1169 OOMPH_CURRENT_FUNCTION,
1170 OOMPH_EXCEPTION_LOCATION);
1196 error_message <<
"Direction is incorrect: " << direction
1199 OOMPH_CURRENT_FUNCTION,
1200 OOMPH_EXCEPTION_LOCATION);
1226 error_message <<
"Direction is incorrect: " << direction
1229 OOMPH_CURRENT_FUNCTION,
1230 OOMPH_EXCEPTION_LOCATION);
1256 error_message <<
"Direction is incorrect: " << direction
1259 OOMPH_CURRENT_FUNCTION,
1260 OOMPH_EXCEPTION_LOCATION);
1267 error_message <<
"Wrong macro element number" << m << std::endl;
1269 OOMPH_CURRENT_FUNCTION,
1270 OOMPH_EXCEPTION_LOCATION);
////////////////////////////////////////////////////////////////////
void position(const Vector< double > &zeta, Vector< double > &r) const
Position Vector at Lagrangian coordinate zeta.
GeomObject * Tip_flag_pt
Pointer to geometric object that represents the tip 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 * Top_flag_pt
Pointer to geometric object that represents the top 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; .
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)
Constructor. Pass the pointers to the GeomObjects that parametrise the cylinder, the three edges of t...
GeomObject * Bottom_flag_pt
Pointer to geometric object that represents the bottom of the flag.
Circle * Cylinder_pt
Pointer to geometric object that represents the central cylinder.
Vector< MacroElement * > Macro_element_pt
Vector of pointers to macro elements.
/////////////////////////////////////////////////////////////////////
virtual void position(const Vector< double > &zeta, Vector< double > &r) const =0
Parametrised position on object at current time: r(zeta).
An OomphLibError object which should be thrown when an run-time error is encountered....
An OomphLibWarning object which should be created as a temporary object to issue a warning....
QMacroElement specialised to 2 spatial dimensions.
//////////////////////////////////////////////////////////////////// ////////////////////////////////...