Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

TiltedCylinderBL.H

Go to the documentation of this file.
00001 /* _______              __
00002   / ___/ /  ___  __ _  / /  ___
00003  / /__/ _ \/ _ \/  ' \/ _ \/ _ \
00004  \___/_//_/\___/_/_/_/_.__/\___/ 
00005 */
00006 //
00007 // This software is copyright (C) by the Lawrence Berkeley
00008 // National Laboratory.  Permission is granted to reproduce
00009 // this software for non-commercial purposes provided that
00010 // this notice is left intact.
00011 // 
00012 // It is acknowledged that the U.S. Government has rights to
00013 // this software under Contract DE-AC03-765F00098 between
00014 // the U.S.  Department of Energy and the University of
00015 // California.
00016 //
00017 // This software is provided as a professional and academic
00018 // contribution for joint exchange. Thus it is experimental,
00019 // is provided ``as is'', with no warranties of any kind
00020 // whatsoever, no support, no promise of updates, or printed
00021 // documentation. By using this software, you acknowledge
00022 // that the Lawrence Berkeley National Laboratory and
00023 // Regents of the University of California shall have no
00024 // liability with respect to the infringement of other
00025 // copyrights by any part of this software.
00026 //
00027 
00028 #ifndef _TiltedCylinderBL_H_
00029 #define _TiltedCylinderBL_H_
00030 
00031 #include "MayDay.H"
00032 #include "LoHiSide.H"
00033 #include "IntVect.H"
00034 #include "RealVect.H"
00035 #include "BaseLevelSet.H"
00036 #include "REAL.H"
00037 #include "BoxIterator.H"
00038 using std::pair;
00039 
00041 /*
00042    This is the workshop class for a TiltedCylinder.
00043    It follows the BaseLocalGeometry base class.
00044    the center goes through the lower left corner of the domain
00045    Returns C_z+sqrt (radius-(x-C_x)squared+(y-C_y)squared));
00046  */
00047 class TiltedCylinderBL: public BaseLevelSet
00048 {
00049 public:
00050 
00052   TiltedCylinderBL(const Real&     a_radius,
00053                    const RealVect& a_axisDir,
00054                    const Real&     a_dx);
00055 
00057   virtual ~TiltedCylinderBL();
00058 
00059   
00060   /*
00061       Return true if every cell in region is regular at the
00062       refinement described by dx.
00063   */
00064   virtual bool isRegular(const Box&      a_region,
00065                          const Box&      a_domain,
00066                          const RealVect& a_origin,
00067                          const Real&     a_dx) const;
00068 
00070   /* 
00071       Return true if every cell in region is covered at the
00072       refinement described by dx.
00073   */
00074   virtual bool isCovered(const Box&      a_region,
00075                          const Box&      a_domain,
00076                          const RealVect& a_origin,
00077                          const Real&     a_dx) const;
00078 
00080   /*
00081      This returns the signed integer which  most closely
00082      represents the normal direction.  The first integer
00083      of the pair is of the interface at an irregular cell
00084      (which coordinate direction has the largest normal component). 
00085      This will only be called if the cell is irregular.
00086    */
00087   virtual pair<int, Side::LoHiSide> upDirection(const RealVect& a_midpt,const IntVect& a_iv) const; 
00088 
00090   
00091   //     Return the value at the dependent coordinate given the independent
00092   //  coordinates. Returns C_z+sqrt (radius-(x-C_x)squared+(y-C_y)squared));
00093   //  Where the center is (C_x,C_y,C_z)
00094   
00095   virtual Real localFuncValue(const RealVect& a_independentCoords, 
00096                               const int&      a_upDirection,
00097                               const IntVect&  a_iv, 
00098                               const Box&      a_domain, 
00099                               const RealVect& a_origin, 
00100                               const Real&     a_dx) const;  
00101   
00102   //   Return a newly allocated derived class.  The responsibility
00103   //  for deleting the memory is left to the calling function.
00104   
00105   virtual BaseLevelSet* new_baseLevelSet() const;   
00106  
00107   RealVect getCenterPt(const RealVect& a_vec) const;
00108 
00109 protected:
00110   Real LevelSurface(const RealVect& a_vec) const;
00111 
00112   RealVect m_center;
00113   RealVect m_axis;
00114   Real     m_radius;
00115   Real     m_dx;
00116   RealVect m_ellipseCoeffs;
00117   int      m_primaryAxisDir;
00118   Tuple<int, CH_SPACEDIM-1>  m_tanDirs;
00119   
00120 private:
00121   TiltedCylinderBL()
00122   {
00123     MayDay::Error("TiltedCylinderBL uses strong construction");
00124   }
00125 
00126   TiltedCylinderBL(const TiltedCylinderBL& a_radius)
00127   {
00128     MayDay::Error("TiltedCylinderBL disallows copy construction");
00129   }
00130 
00131   void operator=(const TiltedCylinderBL& a_radius)
00132   {
00133     MayDay::Error("TiltedCylinderBL disallows assignment");
00134   }
00135 };
00136 
00137 #endif

Generated on Wed Apr 16 14:31:05 2003 for EBChombo by doxygen1.2.16