00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef _PolynomialDelta_H_
00033 #define _PolynomialDelta_H_
00034
00035 #include "REAL.H"
00036 #include "DiscreteDeltaFn.H"
00037 #include "Vector.H"
00038
00039 #define NUM_POLY_COEFFS 6
00040
00042
00046 class PolynomialDelta : public DiscreteDeltaFn
00047 {
00048 public:
00050 PolynomialDelta();
00051
00053 PolynomialDelta(Real a_epsilon);
00054
00056 virtual ~PolynomialDelta();
00057
00059 virtual void define(Real a_epsilon);
00060
00062 virtual Real epsilon() const {return m_epsilon;};
00063
00065 virtual DiscreteDeltaFn* clone() const;
00066
00068 virtual Real evaluateDelta(Real a_radius) const;
00069
00071 virtual Real integralDelta(Real a_radius) const;
00072
00074 virtual Real computeK(RealVect& a_radius, int a_idir, int a_jdir) const;
00075
00077
00080 virtual void sumForce(FArrayBox& a_sum,
00081 const RealVect& a_force,
00082 const Box& a_box,
00083 const RealVect& a_position,
00084 const RealVect& a_origin,
00085 Real a_dx) const;
00086
00087
00089
00094 virtual void sumForce(FArrayBox& a_sum,
00095 const RealVect& a_force,
00096 const Box& a_box,
00097 int a_dir,
00098 int a_destComp,
00099 const RealVect& a_position,
00100 const RealVect& a_origin,
00101 Real a_dx) const;
00102
00103
00105 virtual Real computeLapDelta(Real a_radius) const;
00106
00108 void setCoeffs(const Vector<Real>& a_coeffs);
00109
00110 void setCoeff(Real a_coeff, int n);
00111
00112 const Real* getCoeffs() const;
00113
00114 int numCoeffs() const { return m_numCoeffs;};
00115
00116 protected:
00117
00119 Real m_coeffs[NUM_POLY_COEFFS];
00120
00122 int m_numCoeffs;
00123
00125 Real m_epsilon;
00126
00128 Real m_factor;
00129
00130
00131 void setDefaultValues();
00132
00133
00134 void defineFactor();
00135
00136 };
00137
00138
00139
00140 #endif