Added: Class for immersed boundary through a scalar function
This commit is contained in:
parent
00934a726f
commit
c6add776c7
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include "IBGeometries.h"
|
#include "IBGeometries.h"
|
||||||
#include "ElementBlock.h"
|
#include "ElementBlock.h"
|
||||||
|
#include "Function.h"
|
||||||
|
|
||||||
|
|
||||||
Oval2D::Oval2D (double r, double x0, double y0, double x1, double y1)
|
Oval2D::Oval2D (double r, double x0, double y0, double x1, double y1)
|
||||||
@ -143,8 +144,7 @@ ElementBlock* PerforatedPlate2D::tesselate () const
|
|||||||
|
|
||||||
PerforatedPlate2D::~PerforatedPlate2D ()
|
PerforatedPlate2D::~PerforatedPlate2D ()
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < holes.size(); i++)
|
for (Hole2D* h : holes) delete h;
|
||||||
delete holes[i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -160,3 +160,24 @@ void PerforatedPlate2D::addHole (double r,
|
|||||||
{
|
{
|
||||||
holes.push_back(new Oval2D(r,x0,y0,x1,y1));
|
holes.push_back(new Oval2D(r,x0,y0,x1,y1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GeoFunc2D::GeoFunc2D (RealFunc* f, double p, double eps)
|
||||||
|
{
|
||||||
|
myAlpha = f;
|
||||||
|
myExponent = p;
|
||||||
|
threshold = eps;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GeoFunc2D::~GeoFunc2D ()
|
||||||
|
{
|
||||||
|
delete myAlpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
double GeoFunc2D::Alpha (double X, double Y, double Z) const
|
||||||
|
{
|
||||||
|
double value = myAlpha ? pow((*myAlpha)(Vec3(X,Y,Z)),myExponent) : 0.0;
|
||||||
|
return value < threshold ? 0.0 : 1.0;
|
||||||
|
}
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
#include "ImmersedBoundaries.h"
|
#include "ImmersedBoundaries.h"
|
||||||
|
|
||||||
|
class RealFunc;
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Class representing the perforated plate benchmark.
|
\brief Class representing the perforated plate benchmark.
|
||||||
@ -70,7 +72,7 @@ public:
|
|||||||
virtual ~Oval2D() {}
|
virtual ~Oval2D() {}
|
||||||
|
|
||||||
//! \brief Performs the inside-outside test for the perforated plate object.
|
//! \brief Performs the inside-outside test for the perforated plate object.
|
||||||
virtual double Alpha(double X, double Y, double = 0.0) const;
|
virtual double Alpha(double X, double Y, double) const;
|
||||||
|
|
||||||
//! \brief Creates a finite element model of the geometry for visualization.
|
//! \brief Creates a finite element model of the geometry for visualization.
|
||||||
virtual ElementBlock* tesselate() const;
|
virtual ElementBlock* tesselate() const;
|
||||||
@ -93,7 +95,7 @@ public:
|
|||||||
//! \brief Default constructor.
|
//! \brief Default constructor.
|
||||||
PerforatedPlate2D() {}
|
PerforatedPlate2D() {}
|
||||||
//! \brief Constructor creating a single hole.
|
//! \brief Constructor creating a single hole.
|
||||||
explicit PerforatedPlate2D(Hole2D* hole) { holes.resize(1,hole); }
|
explicit PerforatedPlate2D(Hole2D* hole) : holes({hole}) { }
|
||||||
//! \brief The destructor deletes the holes.
|
//! \brief The destructor deletes the holes.
|
||||||
virtual ~PerforatedPlate2D();
|
virtual ~PerforatedPlate2D();
|
||||||
|
|
||||||
@ -103,7 +105,7 @@ public:
|
|||||||
void addHole(double r, double x0, double y0, double x1, double y1);
|
void addHole(double r, double x0, double y0, double x1, double y1);
|
||||||
|
|
||||||
//! \brief Performs the inside-outside test for the perforated plate object.
|
//! \brief Performs the inside-outside test for the perforated plate object.
|
||||||
virtual double Alpha(double X, double Y, double = 0.0) const;
|
virtual double Alpha(double X, double Y, double) const;
|
||||||
|
|
||||||
//! \brief Creates a finite element model of the geometry for visualization.
|
//! \brief Creates a finite element model of the geometry for visualization.
|
||||||
virtual ElementBlock* tesselate() const;
|
virtual ElementBlock* tesselate() const;
|
||||||
@ -112,4 +114,26 @@ private:
|
|||||||
std::vector<Hole2D*> holes; //!< The holes that perforate the plate
|
std::vector<Hole2D*> holes; //!< The holes that perforate the plate
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Class describing the immersed boundary as a scalar function.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class GeoFunc2D : public Immersed::Geometry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//! \brief Default constructor.
|
||||||
|
explicit GeoFunc2D(RealFunc* f = nullptr, double p = 1.0, double eps = 0.5);
|
||||||
|
//! \brief The destructor deletes the function.
|
||||||
|
virtual ~GeoFunc2D();
|
||||||
|
|
||||||
|
//! \brief Performs the inside-outside test for the geometric object.
|
||||||
|
virtual double Alpha(double X, double Y, double Z) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
RealFunc* myAlpha; //!< Function describing the inside-outside state
|
||||||
|
double myExponent; //!< The exponent to apply on the \a myAlpha function
|
||||||
|
double threshold; //!< Inside/outside threshold
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user