00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _SIMPLEELLIPSOIDIF_H_
00012 #define _SIMPLEELLIPSOIDIF_H_
00013
00014 #include "MayDay.H"
00015 #include "RealVect.H"
00016
00017 #include "BaseIF.H"
00018
00019 #include "NamespaceHeader.H"
00020
00021
00022
00023
00024
00025
00026
00027
00028 class SimpleEllipsoidIF: public BaseIF
00029 {
00030 public:
00031
00032
00033
00034
00035 SimpleEllipsoidIF(const RealVect& a_ABE,
00036 const RealVect& a_X0,
00037 const Real & a_R,
00038 const bool & a_inside)
00039 {
00040 m_ABE= a_ABE;
00041 m_X0= a_X0;
00042 m_R= a_R;
00043 m_inside= a_inside;
00044
00045 for(int idir = 0; idir < SpaceDim; idir++)
00046 {
00047 CH_assert(a_ABE[idir] > 1.e-10);
00048 m_A2[idir] = a_ABE[idir]*a_ABE[idir];
00049 }
00050 }
00051
00052
00053 virtual ~SimpleEllipsoidIF()
00054 {
00055 }
00056
00057 virtual Real value(const IndexTM<int,SpaceDim> & a_partialDerivative,
00058 const IndexTM<Real,SpaceDim>& a_point) const;
00059
00060 virtual Real value(const RealVect& a_point) const;
00061
00062 virtual Real value(const IndexTM<Real,SpaceDim>& a_point) const;
00063
00064 virtual BaseIF* newImplicitFunction() const
00065 {
00066 SimpleEllipsoidIF* SimpleEllipsoidPtr = new SimpleEllipsoidIF(m_ABE,m_X0, m_R, m_inside);
00067 return static_cast<BaseIF*>(SimpleEllipsoidPtr);
00068 }
00069
00070 protected:
00071 RealVect m_ABE;
00072 RealVect m_X0;
00073 Real m_R;
00074 bool m_inside;
00075 RealVect m_A2;
00076
00077 private:
00078 SimpleEllipsoidIF();
00079
00080 };
00081
00082 #include "NamespaceFooter.H"
00083 #endif