00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _INTERSECTIONIF_H_
00012 #define _INTERSECTIONIF_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 IntersectionIF: public BaseIF
00030 {
00031 public:
00032
00033
00034
00035
00036 IntersectionIF(const BaseIF& a_impFunc1,
00037 const BaseIF& a_impFunc2);
00038
00039
00040
00041
00042
00043 IntersectionIF(const Vector<BaseIF*>& a_impFuncs);
00044
00045
00046 IntersectionIF(const IntersectionIF& a_inputIF);
00047
00048
00049 virtual ~IntersectionIF();
00050
00051
00052
00053
00054
00055 virtual Real value(const RealVect& a_point) const;
00056
00057 virtual Real value(const IndexTM<Real,GLOBALDIM>& a_point) const;
00058
00059 virtual Real value(const IndexTM<int,GLOBALDIM> & a_partialDerivative,
00060 const IndexTM<Real,GLOBALDIM>& a_point) const;
00061
00062 virtual BaseIF* newImplicitFunction() const;
00063
00064 void findClosest(const IndexTM<Real,GLOBALDIM>& a_point,int& closestIF) const;
00065
00066 virtual bool fastIntersection(const RealVect& a_low,
00067 const RealVect& a_high) const ;
00068
00069
00070 virtual GeometryService::InOut InsideOutside(const RealVect& a_low,
00071 const RealVect& a_high) const ;
00072
00073
00074
00075
00076
00077 virtual void boxLayoutChanged(const DisjointBoxLayout & a_newBoxLayout,
00078 const RealVect & a_dx)
00079 {
00080 for (int i = 0; i < m_numFuncs; i++)
00081 {
00082 m_impFuncs[i]->boxLayoutChanged(a_newBoxLayout,a_dx);
00083 }
00084 }
00085
00086 protected:
00087 int m_numFuncs;
00088 Vector<BaseIF*> m_impFuncs;
00089
00090 private:
00091 IntersectionIF()
00092 {
00093 MayDay::Abort("IntersectionIF uses strong construction");
00094 }
00095
00096 void operator=(const IntersectionIF& a_inputIF)
00097 {
00098 MayDay::Abort("IntersectionIF doesn't allow assignment");
00099 }
00100 };
00101
00102 #include "NamespaceFooter.H"
00103 #endif