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

DoubleCylBL.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 _DoubleCylBL_H_
00029 #define _DoubleCylBL_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 DoubleCyl.
00043    It follows the BaseLocalGeometry base class.
00044    Returns C_z+sqrt (radius-(x-C_x)squared+(y-C_y)squared));
00045  */
00046 class DoubleCylBL: public BaseLevelSet
00047 {
00048 public:
00049 
00051   DoubleCylBL(const Real    a_radius[2],
00052               const Real     a_height[2],
00053               const RealVect a_center[2],
00054               const RealVect& a_origin,
00055               const int&      a_axis,
00056               const bool&     a_interior,
00057               const Real&     a_dx);
00058 
00060   virtual ~DoubleCylBL();
00061 
00062   
00063   /*
00064       Return true if every cell in region is regular at the
00065       refinement described by dx.
00066   */
00067   virtual bool isRegular(const Box&      a_region,
00068                          const Box&      a_domain,
00069                          const RealVect& a_origin,
00070                          const Real&     a_dx) const;
00071 
00073   /* 
00074       Return true if every cell in region is covered at the
00075       refinement described by dx.
00076   */
00077   virtual bool isCovered(const Box&      a_region,
00078                          const Box&      a_domain,
00079                          const RealVect& a_origin,
00080                          const Real&     a_dx) const;
00081 
00083   /*
00084      This returns the signed integer which  most closely
00085      represents the normal direction.  The first integer
00086      of the pair is of the interface at an irregular cell
00087      (which coordinate direction has the largest normal component). 
00088      This will only be called if the cell is irregular.
00089    */
00090   virtual pair<int, Side::LoHiSide> upDirection(const RealVect& a_midpt,const IntVect& a_iv) const; 
00091 
00093   
00094   //     Return the value at the dependent coordinate given the independent
00095   //  coordinates. Returns C_z+sqrt (radius-(x-C_x)squared+(y-C_y)squared));
00096   //  Where the center is (C_x,C_y,C_z)
00097   
00098   virtual Real localFuncValue(const RealVect& a_independentCoords, 
00099                               const int&      a_upDirection,
00100                               const IntVect&  a_iv, 
00101                               const Box&      a_domain, 
00102                               const RealVect& a_origin, 
00103                               const Real&     a_dx) const;  
00104   
00105   //   Return a newly allocated derived class.  The responsibility
00106   //  for deleting the memory is left to the calling function.
00107   
00108   virtual BaseLevelSet* new_baseLevelSet() const;   
00109  
00110 protected:
00111   Real LevelSurface(const RealVect& a_vec) const;
00112 
00113   RealVect m_center[2];
00114   Real     m_radius[2];
00115   Real     m_height[2];
00116   
00117   RealVect m_origin;
00118   int      m_axis;
00119   bool     m_interior;
00120   Real     m_dx;
00121   Real     m_dividingLine;
00122 private:
00123   DoubleCylBL()
00124   {
00125     MayDay::Error("DoubleCylBL uses strong construction");
00126   }
00127 
00128   DoubleCylBL(const DoubleCylBL& a_radius)
00129   {
00130     MayDay::Error("DoubleCylBaselevel disallows copy construction");
00131   }
00132 
00133   void operator=(const DoubleCylBL& a_radius)
00134   {
00135     MayDay::Error("DoubleCylBL disallows assignment");
00136   }
00137 };
00138 
00139 #endif

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