00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _COMPLEMENTIF_H_
00012 #define _COMPLEMENTIF_H_
00013
00014 #include "MayDay.H"
00015 #include "RealVect.H"
00016 #include "Vector.H"
00017
00018 #include "BaseIF.H"
00019
00020 #include "NamespaceHeader.H"
00021
00022
00023
00024
00025
00026
00027
00028
00029 class ComplementIF: public BaseIF
00030 {
00031 public:
00032
00033
00034
00035
00036
00037 ComplementIF(const BaseIF& a_impFunc,
00038 const bool& a_complement = true);
00039
00040
00041 ComplementIF(const ComplementIF& a_inputIF,
00042 const bool& a_complement = true);
00043
00044
00045 virtual ~ComplementIF();
00046
00047
00048
00049
00050
00051 virtual void GetParams(bool& a_complement) const;
00052
00053
00054
00055
00056
00057 virtual void SetParams(const bool& a_complement);
00058
00059
00060
00061
00062
00063 virtual Real value(const RealVect& a_point) const;
00064
00065
00066
00067
00068
00069 virtual Real value(const IndexTM<Real,GLOBALDIM>& a_point) const;
00070
00071
00072
00073
00074
00075
00076 virtual Real value(const IndexTM<int,GLOBALDIM> & a_partialDerivative,
00077 const IndexTM<Real,GLOBALDIM>& a_point) const;
00078
00079 virtual BaseIF* newImplicitFunction() const;
00080
00081 virtual bool fastIntersection(const RealVect& a_low, const RealVect& a_high) const
00082 {
00083 return m_impFunc->fastIntersection(a_low, a_high);
00084 }
00085
00086 virtual GeometryService::InOut InsideOutside(const RealVect& a_low, const RealVect& a_high) const;
00087
00088
00089
00090
00091
00092 virtual void boxLayoutChanged(const DisjointBoxLayout & a_newBoxLayout,
00093 const RealVect & a_dx)
00094 {
00095 m_impFunc->boxLayoutChanged(a_newBoxLayout,a_dx);
00096 }
00097
00098 protected:
00099 bool m_complement;
00100
00101 BaseIF* m_impFunc;
00102
00103 private:
00104 ComplementIF()
00105 {
00106 MayDay::Abort("ComplementIF uses strong construction");
00107 }
00108
00109 void operator=(const ComplementIF& a_inputIF)
00110 {
00111 MayDay::Abort("ComplementIF doesn't allow assignment");
00112 }
00113 };
00114
00115 #include "NamespaceFooter.H"
00116 #endif