Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_distFcnElement.H
Go to the documentation of this file.
1#ifndef AMREX_DISTFCNELEMENT_H_
2#define AMREX_DISTFCNELEMENT_H_
3#include <AMReX_Config.H>
4
5#include <AMReX_RealVect.H>
6#include <AMReX.H>
7#include <AMReX_Vector.H>
8
15namespace amrex {
16
18class distFcnElement2d { // NOLINT(cppcoreguidelines-special-member-functions)
19 public:
21 distFcnElement2d() = default;
22 virtual ~distFcnElement2d() = default;
23
24 [[nodiscard]] virtual distFcnElement2d* newDistFcnElement2d() const = 0;
25
26 [[nodiscard]] virtual amrex::Real cpdist(amrex::RealVect pt, amrex::RealVect& cp) const = 0;
27 [[nodiscard]] virtual amrex::Real cpside(amrex::RealVect pt, amrex::RealVect& cp) const = 0;
29 static int solve_thomas (const std::vector<amrex::Real> &a,
30 std::vector<amrex::Real> &b,
31 const std::vector<amrex::Real> &c,
32 std::vector<amrex::Real> &d,
33 std::vector<amrex::Real> &X);
34};
35
36
38class LineDistFcnElement2d: public distFcnElement2d { // NOLINT(cppcoreguidelines-special-member-functions)
39 public:
41 ~LineDistFcnElement2d() override = default;
42
43 [[nodiscard]] distFcnElement2d* newDistFcnElement2d() const override;
44
45 void set_control_points(std::vector<amrex::RealVect> pts);
46
47 [[nodiscard]] amrex::Real cpdist(amrex::RealVect pt, amrex::RealVect& cp) const override;
48 [[nodiscard]] amrex::Real cpside(amrex::RealVect pt, amrex::RealVect& cp) const override;
49
51
52 protected:
57 amrex::Real& dist);
58
59 private:
60 std::vector<amrex::Real> control_points_x;
61 std::vector<amrex::Real> control_points_y;
62
63
64};
65
66
68class SplineDistFcnElement2d: public distFcnElement2d { // NOLINT(cppcoreguidelines-special-member-functions)
69 public:
71 ~SplineDistFcnElement2d() override = default;
72
73 [[nodiscard]] distFcnElement2d* newDistFcnElement2d() const override;
74
75
76 void set_control_points(std::vector<amrex::RealVect> pts);
78
79 void print_control_points() const;
80 void print_spline() const;
81
82 void calc_D(bool clamped_bc = false);
83
84 [[nodiscard]] amrex::Real cpdist(amrex::RealVect pt, amrex::RealVect& cp) const override;
85 [[nodiscard]] amrex::Real cpside(amrex::RealVect pt, amrex::RealVect& cp) const override;
86
87 protected:
90 static void dxbydt(amrex::Real t, amrex::Real y0, amrex::Real y1,
92 amrex::Real& d2yf);
93
96 amrex::Real Dx0, amrex::Real Dx1,
98 amrex::Real Dy0, amrex::Real Dy1,
101
104 amrex::Real Dx0, amrex::Real Dx1,
106 amrex::Real Dy0, amrex::Real Dy1,
107 amrex::Real& t,
108 amrex::RealVect& spt);
109
110 private:
111 std::vector<amrex::Real> control_points_x;
112 std::vector<amrex::Real> control_points_y;
113
114 amrex::RealVect bc_pt_start;
115 amrex::RealVect bc_pt_end;
116
117 std::vector<amrex::Real> Dx;
118 std::vector<amrex::Real> Dy;
119};
120
121}
122
123#endif
Runtime initialization/finalization helpers and global diagnostics.
Distance function defined by a polyline.
Definition AMReX_distFcnElement.H:38
amrex::Real cpside(amrex::RealVect pt, amrex::RealVect &cp) const override
Definition AMReX_distFcnElement.cpp:358
distFcnElement2d * newDistFcnElement2d() const override
Definition AMReX_distFcnElement.cpp:451
static void single_seg_cpdist(amrex::RealVect pt, amrex::Real x0, amrex::Real x1, amrex::Real y0, amrex::Real y1, amrex::RealVect &cp, amrex::Real &dist)
Definition AMReX_distFcnElement.cpp:417
void set_control_points(std::vector< amrex::RealVect > pts)
Definition AMReX_distFcnElement.cpp:410
~LineDistFcnElement2d() override=default
void print_control_points()
Definition AMReX_distFcnElement.cpp:443
amrex::Real cpdist(amrex::RealVect pt, amrex::RealVect &cp) const override
Definition AMReX_distFcnElement.cpp:338
Distance function defined by a cubic spline.
Definition AMReX_distFcnElement.H:68
distFcnElement2d * newDistFcnElement2d() const override
Definition AMReX_distFcnElement.cpp:43
static amrex::Real dist(amrex::RealVect pt, amrex::Real x0, amrex::Real x1, amrex::Real Dx0, amrex::Real Dx1, amrex::Real y0, amrex::Real y1, amrex::Real Dy0, amrex::Real Dy1, amrex::Real &t, amrex::RealVect &spt)
Definition AMReX_distFcnElement.cpp:64
static void single_spline_cpdist(amrex::RealVect pt, amrex::Real x0, amrex::Real x1, amrex::Real Dx0, amrex::Real Dx1, amrex::Real y0, amrex::Real y1, amrex::Real Dy0, amrex::Real Dy1, amrex::Real &t, amrex::RealVect &cp, amrex::Real &dist)
Definition AMReX_distFcnElement.cpp:171
amrex::Real cpside(amrex::RealVect pt, amrex::RealVect &cp) const override
Definition AMReX_distFcnElement.cpp:107
void print_control_points() const
Definition AMReX_distFcnElement.cpp:304
void set_control_points(std::vector< amrex::RealVect > pts)
Definition AMReX_distFcnElement.cpp:289
amrex::Real cpdist(amrex::RealVect pt, amrex::RealVect &cp) const override
Definition AMReX_distFcnElement.cpp:85
void print_spline() const
Definition AMReX_distFcnElement.cpp:316
~SplineDistFcnElement2d() override=default
static void dxbydt(amrex::Real t, amrex::Real y0, amrex::Real y1, amrex::Real D0, amrex::Real D1, amrex::Real &dyf, amrex::Real &d2yf)
Definition AMReX_distFcnElement.cpp:212
void calc_D(bool clamped_bc=false)
Definition AMReX_distFcnElement.cpp:226
static amrex::Real eval(amrex::Real t, amrex::Real y0, amrex::Real y1, amrex::Real D0, amrex::Real D1)
Definition AMReX_distFcnElement.cpp:54
void set_bc_points(amrex::RealVect start, amrex::RealVect end)
Definition AMReX_distFcnElement.cpp:297
Abstract base for 2-D distance-function elements.
Definition AMReX_distFcnElement.H:18
virtual ~distFcnElement2d()=default
virtual amrex::Real cpdist(amrex::RealVect pt, amrex::RealVect &cp) const =0
virtual distFcnElement2d * newDistFcnElement2d() const =0
static int solve_thomas(const std::vector< amrex::Real > &a, std::vector< amrex::Real > &b, const std::vector< amrex::Real > &c, std::vector< amrex::Real > &d, std::vector< amrex::Real > &X)
Tridiagonal solver. Note that b and d are eliminated in place.
Definition AMReX_distFcnElement.cpp:9
distFcnElement2d()=default
Constructor.
virtual amrex::Real cpside(amrex::RealVect pt, amrex::RealVect &cp) const =0
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:80
Definition AMReX_Amr.cpp:50
__host__ __device__ Dim3 end(BoxND< dim > const &box) noexcept
Return the iterator end coordinate of box as Dim3.
Definition AMReX_Box.H:2257