31 #ifndef OOMPH_TUBE_DOMAIN_HEADER 32 #define OOMPH_TUBE_DOMAIN_HEADER 35 #include "../generic/quadtree.h" 36 #include "../generic/domain.h" 37 #include "../generic/geom_objects.h" 90 const unsigned& nlayer) :
96 const unsigned n_macro=5*nlayer;
100 for (
unsigned i=0;
i<n_macro;
i++)
134 const unsigned& i_macro,
135 const unsigned& i_direct,
169 for(
unsigned i=0;
i<3;
i++)
171 f[
i] = low[
i] + (high[
i] - low[
i])*0.5*(s+1.0);
192 const unsigned& imacro,
193 const unsigned& idirect,
198 using namespace OcTreeNames;
200 #ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES 203 "Order of function arguments has changed between versions 0.8 and 0.85",
204 "TubeDomain::macro_element_boundary(...)",
205 OOMPH_EXCEPTION_LOCATION);
209 unsigned ilayer=unsigned(imacro/5);
221 for(
unsigned i=0;
i<2;
i++)
232 zeta[0] = zeta_centre[
i];
235 for(
unsigned j=0;j<4;j++)
268 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
287 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
306 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
324 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
359 std::ostringstream error_stream;
360 error_stream <<
"idirect is " << idirect
361 <<
" not one of L, R, D, U, B, F" << std::endl;
365 OOMPH_CURRENT_FUNCTION,
366 OOMPH_EXCEPTION_LOCATION);
381 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
397 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
413 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
424 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
441 zeta[0] = zeta_centre[0];
457 zeta[0] = zeta_centre[1];
474 std::ostringstream error_stream;
475 error_stream <<
"idirect is " << idirect
476 <<
" not one of L, R, D, U, B, F" << std::endl;
480 OOMPH_CURRENT_FUNCTION,
481 OOMPH_EXCEPTION_LOCATION);
497 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
514 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
524 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
540 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
556 zeta[0] = zeta_centre[0];
571 zeta[0] = zeta_centre[1];
586 std::ostringstream error_stream;
587 error_stream <<
"idirect is " << idirect
588 <<
" not one of L, R, D, U, B, F" << std::endl;
592 OOMPH_CURRENT_FUNCTION,
593 OOMPH_EXCEPTION_LOCATION);
606 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
623 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
642 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
660 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
670 zeta[0] = zeta_centre[0];
686 zeta[0] = zeta_centre[1];
702 std::ostringstream error_stream;
703 error_stream <<
"idirect is " << idirect
704 <<
" not one of L, R, D, U, B, F" << std::endl;
708 OOMPH_CURRENT_FUNCTION,
709 OOMPH_EXCEPTION_LOCATION);
725 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
738 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
756 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
774 zeta[0] = zeta_centre[0] + (zeta_centre[1] - zeta_centre[0])
791 zeta[0] = zeta_centre[0];
808 zeta[0] = zeta_centre[1];
823 std::ostringstream error_stream;
824 error_stream <<
"idirect is " << idirect
825 <<
" not one of L, R, D, U, B, F" << std::endl;
829 OOMPH_CURRENT_FUNCTION,
830 OOMPH_EXCEPTION_LOCATION);
837 std::ostringstream error_stream;
838 error_stream <<
"Wrong imacro " << imacro << std::endl;
841 OOMPH_CURRENT_FUNCTION,
842 OOMPH_EXCEPTION_LOCATION);
Vector< double > Radius_box
void broken_copy(const std::string &class_name)
Issue error message and terminate execution.
Vector< double > Centreline_limits
Storage for the limits of the centreline coordinate.
void lin_interpolate(const Vector< double > &low, const Vector< double > &high, const double &s, Vector< double > &f)
A very little linear interpolation helper. Interpolate from the low point to the high point using the...
TubeDomain(const TubeDomain &)
Broken copy constructor.
const double Pi
50 digits from maple
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).
Tube as a domain. The entire domain must be defined by a GeomObject with the following convention: ze...
~TubeDomain()
Destructor: Kill all macro elements.
void macro_element_boundary(const unsigned &t, const unsigned &i_macro, const unsigned &i_direct, const Vector< double > &s, Vector< double > &f)
Vector representation of the i_macro-th macro element boundary i_direct (L/R/D/U/B/F) at time level t...
TubeDomain(GeomObject *volume_geom_object_pt, const Vector< double > ¢reline_limits, const Vector< double > &theta_positions, const Vector< double > &radius_box, const unsigned &nlayer)
Constructor: Pass geometric object; start and end limit of the centreline coordinate; the theta locat...
void broken_assign(const std::string &class_name)
Issue error message and terminate execution.
void operator=(const TubeDomain &)
Broken assignment operator.
Base class for Domains with curvilinear and/or time-dependent boundaries. Domain boundaries are typic...
Vector< double > Theta_positions
Storage for the dividing lines on the boundary starting from the lower left and proceeding anticlockw...
unsigned Nlayer
Number of axial layers.
GeomObject * Volume_pt
Pointer to geometric object that represents the domain.