00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _UNIONIF_H_
00012 #define _UNIONIF_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 UnionIF: public BaseIF
00030 {
00031 public:
00032
00033
00034
00035
00036 UnionIF(const BaseIF& a_impFunc1,
00037 const BaseIF& a_impFunc2);
00038
00039
00040
00041
00042
00043 UnionIF(const Vector<BaseIF*>& a_impFuncs);
00044
00045
00046 UnionIF(const UnionIF& a_inputIF);
00047
00048
00049 virtual ~UnionIF();
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 virtual GeometryService::InOut InsideOutside(const RealVect& a_low,
00070 const RealVect& a_high) const ;
00071
00072
00073
00074
00075
00076 virtual void boxLayoutChanged(const DisjointBoxLayout & a_newBoxLayout,
00077 const RealVect & a_dx)
00078 {
00079 for (int i = 0; i < m_numFuncs; i++)
00080 {
00081 m_impFuncs[i]->boxLayoutChanged(a_newBoxLayout,a_dx);
00082 }
00083 }
00084
00085 protected:
00086 int m_numFuncs;
00087 Vector<BaseIF*> m_impFuncs;
00088
00089 private:
00090 UnionIF()
00091 {
00092 MayDay::Abort("UnionIF uses strong construction");
00093 }
00094
00095 void operator=(const UnionIF& a_inputIF)
00096 {
00097 MayDay::Abort("UnionIF doesn't allow assignment");
00098 }
00099 };
00100
00101 #include "NamespaceFooter.H"
00102 #endif