00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _HYPERSPHEREIF_H_
00012 #define _HYPERSPHEREIF_H_
00013
00014 #include "MayDay.H"
00015 #include "IndexTM.H"
00016 #include "Notation.H"
00017 #include "BaseIF.H"
00018 #include "NamespaceHeader.H"
00019
00020
00021
00022
00023
00024 class HyperSphereIF: public BaseIF
00025 {
00026 public:
00027
00028
00029
00030
00031
00032 HyperSphereIF(const Real & a_radius,
00033 const IndexTM<Real,GLOBALDIM>& a_center,
00034 const bool & a_inside);
00035
00036
00037 HyperSphereIF(const HyperSphereIF& a_inputIF);
00038
00039
00040 virtual ~HyperSphereIF();
00041
00042
00043
00044
00045 virtual void GetParams(Real & a_radius,
00046 IndexTM<Real,GLOBALDIM>& a_center,
00047 bool & a_inside) const;
00048
00049
00050
00051
00052
00053 virtual void SetParams(const Real & a_radius,
00054 const IndexTM<Real,GLOBALDIM>& a_center,
00055 const bool & a_inside);
00056
00057
00058
00059
00060
00061
00062 virtual Real value(const IndexTM<int,GLOBALDIM> & a_partialDerivative,
00063 const IndexTM<Real,GLOBALDIM>& a_point) const;
00064
00065 virtual Real value(const RealVect& a_point) const;
00066
00067 virtual Real value(const IndexTM<Real,GLOBALDIM>& a_point) const;
00068
00069 virtual IndexTM<Real,GLOBALDIM> normal(const IndexTM<Real,GLOBALDIM>& a_point) const ;
00070
00071 virtual Vector<IndexTM<Real,GLOBALDIM> > gradNormal(const IndexTM<Real,GLOBALDIM>& a_point) const;
00072
00073 virtual BaseIF* newImplicitFunction() const;
00074
00075 protected:
00076 Real m_radius;
00077 IndexTM<Real,GLOBALDIM> m_center;
00078 bool m_inside;
00079 Real m_radius2;
00080
00081 private:
00082 HyperSphereIF()
00083 {
00084 MayDay::Abort("HyperSphereIF uses strong construction");
00085 }
00086
00087 void operator=(const HyperSphereIF& a_inputIF)
00088 {
00089 MayDay::Abort("HyperSphereIF doesn't allow assignment");
00090 }
00091 };
00092
00093 #include "NamespaceFooter.H"
00094 #endif