00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _MOLLIFYIF_H_
00012 #define _MOLLIFYIF_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 MollifyIF: public BaseIF
00030 {
00031 public:
00032
00033
00034
00035
00036
00037
00038 MollifyIF(const BaseIF& a_impFunc,
00039 const BaseIF& a_mollifier,
00040 const Real& a_min,
00041 const Real& a_max,
00042 const int& a_numPts);
00043
00044
00045 MollifyIF(const MollifyIF& a_inputIF);
00046
00047
00048 virtual ~MollifyIF();
00049
00050
00051
00052
00053
00054 virtual Real value(const RealVect& a_point) const;
00055
00056
00057
00058
00059
00060 virtual Real value(const IndexTM<Real,GLOBALDIM>& a_point) const;
00061
00062
00063
00064
00065
00066 virtual Real value(const IndexTM<int,GLOBALDIM> & a_partialDerivative,
00067 const IndexTM<Real,GLOBALDIM>& a_point) const;
00068
00069 virtual BaseIF* newImplicitFunction() const;
00070
00071
00072
00073
00074
00075 virtual void boxLayoutChanged(const DisjointBoxLayout & a_newBoxLayout,
00076 const RealVect & a_dx)
00077 {
00078 m_impFunc ->boxLayoutChanged(a_newBoxLayout,a_dx);
00079 m_mollifier->boxLayoutChanged(a_newBoxLayout,a_dx);
00080 }
00081
00082 protected:
00083 BaseIF* m_impFunc;
00084 BaseIF* m_mollifier;
00085
00086 Real m_min;
00087 Real m_max;
00088 int m_numPts;
00089
00090 Real m_dx;
00091 Real m_vol;
00092 Box m_sampleBox;
00093
00094
00095
00096
00097 mutable Real m_mollifierSum;
00098 mutable FArrayBox m_sampledMollifier;
00099
00100 private:
00101 MollifyIF()
00102 {
00103 MayDay::Abort("MollifyIF uses strong construction");
00104 }
00105
00106 void operator=(const MollifyIF& a_inputIF)
00107 {
00108 MayDay::Abort("MollifyIF doesn't allow assignment");
00109 }
00110 };
00111
00112 #include "NamespaceFooter.H"
00113 #endif