00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _PolarBL_H_
00030 #define _PolarBL_H_
00031
00032 #include "MayDay.H"
00033 #include "LoHiSide.H"
00034 #include "IntVect.H"
00035 #include "RealVect.H"
00036 #include "BaseLevelSet.H"
00037 #include "REAL.H"
00038 #include "BoxIterator.H"
00039 using std::pair;
00040
00042
00043
00044
00045
00046
00047 class PolarBL: public BaseLevelSet
00048 {
00049 public:
00050
00052 PolarBL(const Real& a_coeffA,
00053 const Real& a_coeffB,
00054 const Real& a_coeffC,
00055 const RealVect& a_center,
00056 const bool& a_insideRegular,
00057 const Real& a_dx);
00058
00060 virtual ~PolarBL();
00061
00062
00063
00064
00065
00066
00067 virtual bool isRegular(const Box& region,
00068 const Box& domain,
00069 const RealVect& origin,
00070 const Real& dx) const;
00071
00073
00074
00075
00076
00077 virtual bool isCovered(const Box& region,
00078 const Box& domain,
00079 const RealVect& origin,
00080 const Real& dx) const;
00081
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 virtual
00093 pair<int, Side::LoHiSide> upDirection(const RealVect& midPt,const IntVect& a_iv) const;
00094
00096
00097
00098
00099
00100
00101
00102 virtual Real localFuncValue(const RealVect& a_independentCoords,
00103 const int& a_upDirection,
00104 const IntVect& a_iv,
00105 const Box& a_domain,
00106 const RealVect& a_origin,
00107 const Real& a_dx) const;
00108
00109
00110
00111
00112
00113
00114 virtual
00115 BaseLevelSet* new_baseLevelSet() const;
00116
00117 virtual Real maxabs(const RealVect& vec)const;
00118
00119 virtual Real magnitude(const RealVect& vec)const;
00120
00121 virtual Real star(const RealVect& vec)const;
00122 virtual Real starX(const RealVect& vec)const;
00123 virtual Real starY(const RealVect& vec)const;
00124 virtual Real star(const Real x, Real y)const;
00125 protected:
00126 Real m_coeffA;
00127 Real m_coeffB;
00128 Real m_coeffC;
00129 RealVect m_center;
00130 bool m_insideRegular;
00131 Real m_dx;
00132
00133
00134 private:
00136 PolarBL()
00137 {
00138 MayDay::Error("PolarBL uses strong construction");
00139 }
00140 PolarBL(const PolarBL& a_center)
00141 {
00142 MayDay::Error("PolarBL disallows copy construction");
00143 }
00144 void operator=(const PolarBL& a_center)
00145 {
00146 MayDay::Error("PolarBL disallows assignment");
00147 }
00148
00149 };
00150 #endif