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"    87             const Vector<double> ¢reline_limits,
    88             const Vector<double> &theta_positions,  
    89             const Vector<double> &radius_box,                    
    90             const unsigned& nlayer) :
    96    const unsigned n_macro=5*nlayer;
    97    Macro_element_pt.resize(n_macro);
   100    for (
unsigned i=0;i<n_macro;i++)
   102      Macro_element_pt[i]=
new QMacroElement<3>(
this,i);
   109    BrokenCopy::broken_copy(
"TubeDomain");
   115    BrokenCopy::broken_assign(
"TubeDomain");
   122    for (
unsigned i=0;i<5*
Nlayer;i++)
   124      delete Macro_element_pt[i];
   134                              const unsigned& i_macro,
   135                              const unsigned& i_direct,
   136                              const Vector<double>& s,
   164                       const Vector<double> &high,
   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,
   194 const Vector<double>& s,
   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);
   213    Vector<Vector<Vector<double> > > Box(2);
   216    Vector<double> zeta_centre(2);
   218    Vector<double> zeta(3);
   221    for(
unsigned i=0;i<2;i++)
   232      zeta[0] = zeta_centre[i];
   235      for(
unsigned j=0;j<4;j++)
   250    Vector<double> pos_1(3), pos_2(3);
   252    const double pi = MathematicalConstants::Pi;
   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
 
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. 
 
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 operator=(const TubeDomain &)
Broken assignment operator. 
 
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.