Chombo + EB  3.2
SmoothUnion.H
Go to the documentation of this file.
1 #ifdef CH_LANG_CC
2 /*
3  * _______ __
4  * / ___/ / ___ __ _ / / ___
5  * / /__/ _ \/ _ \/ V \/ _ \/ _ \
6  * \___/_//_/\___/_/_/_/_.__/\___/
8  */
9 #endif
10
11 #ifndef _SMOOTHUNION_H_
12 #define _SMOOTHUNION_H_
13
14 #include "MayDay.H"
15 #include "RealVect.H"
16 #include "Vector.H"
17
18 #include "BaseIF.H"
19
21
22 ///
23 /**
24  This implicit function is the maximum of two (of more) implicit
25  functions with which it is constructed. This results in an implicit
26  function whose interior is the intersection of the interiors of the given
27  implicit functions.
28  For the maximum, it uses the smooth absolute value Ae(a,b) \approx |a-b|
29  min(a,b) = 0.5*(a+b - | a-b |)
30 */
31 class SmoothUnion: public BaseIF
32 {
33 public:
34
35  ///
36  /**
37  Constructor specifying any number of implicit functions as inputs.
38  */
39  SmoothUnion(const Vector<BaseIF*>& a_impFuncs,
40  const Real & a_delta);
41
42  /// Destructor
43  virtual ~SmoothUnion();
44
45  ///
46  /**
47  Return the value of the function at a_point.
48  */
49  virtual Real value(const RealVect& a_point) const;
50
51  ///
52  virtual Real derivative(const IntVect& a_deriv,
53  const RealVect& a_point) const;
54
55
56  virtual BaseIF* newImplicitFunction() const;
57
58  //min(a,b) = 0.5*(a+b - | a-b |)
59  virtual Real smoothMin(const IntVect & a_deriv,
60  const RealVect & a_point,
61  const int & a_closestIF,
62  const int & a_nextClosestIF) const;
63
64  void findClosest(int & a_closestIF,
65  int & a_nextClosestIF,
66  int & a_numWithinDelta,
67  const RealVect & a_point) const;
68 protected:
69  int m_numFuncs; // number of implicit functions
70  Vector<BaseIF*> m_impFuncs; // implicit functions
71  Real m_delta ; //smoothing length scale
72
73 private:
75  {
76  MayDay::Abort("SmoothUnion uses strong construction");
77  }
78
79  SmoothUnion(const SmoothUnion& a_inputIF)
80  {
81  MayDay::Abort("SmoothUnion does not have copy construction");
82  }
83
84  void operator=(const SmoothUnion& a_inputIF)
85  {
86  MayDay::Abort("SmoothUnion doesn't allow assignment");
87  }
88 };
89
90 #include "NamespaceFooter.H"
91 #endif
virtual Real smoothMin(const IntVect &a_deriv, const RealVect &a_point, const int &a_closestIF, const int &a_nextClosestIF) const
void operator=(const SmoothUnion &a_inputIF)
Definition: SmoothUnion.H:84
void findClosest(int &a_closestIF, int &a_nextClosestIF, int &a_numWithinDelta, const RealVect &a_point) const
virtual BaseIF * newImplicitFunction() const
virtual Real value(const RealVect &a_point) const
Definition: BaseIF.H:32
double Real
Definition: REAL.H:33
SmoothUnion(const SmoothUnion &a_inputIF)
Definition: SmoothUnion.H:79
Definition: SmoothUnion.H:31
A Real vector in SpaceDim-dimensional space.
Definition: RealVect.H:41
SmoothUnion()
Definition: SmoothUnion.H:74
An integer Vector in SpaceDim-dimensional space.
Definition: CHArray.H:42
virtual Real derivative(const IntVect &a_deriv, const RealVect &a_point) const
return the partial derivative at the point
Vector< BaseIF * > m_impFuncs
Definition: SmoothUnion.H:70
int m_numFuncs
Definition: SmoothUnion.H:69
virtual ~SmoothUnion()
Destructor.
static void Abort(const char *const a_msg=m_nullString)
Print out message to cerr and exit via abort() (if serial) or MPI_Abort() (if parallel).
Real m_delta
Definition: SmoothUnion.H:71