Nektar++
Static Public Member Functions | Static Public Attributes | Protected Member Functions | Friends | List of all members
Nektar::EmpiricalPressureArea Class Reference

#include <EmpiricalPressureArea.h>

Inheritance diagram for Nektar::EmpiricalPressureArea:
[legend]

Static Public Member Functions

static PulseWavePressureAreaSharedPtr create (Array< OneD, MultiRegions::ExpListSharedPtr > &pVessel, const LibUtilities::SessionReaderSharedPtr &pSession)
 

Static Public Attributes

static std::string className
 

Protected Member Functions

 EmpiricalPressureArea (Array< OneD, MultiRegions::ExpListSharedPtr > pVessel, const LibUtilities::SessionReaderSharedPtr pSession)
 
 ~EmpiricalPressureArea () override=default
 
void v_GetPressure (NekDouble &P, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &dAUdx, const NekDouble &gamma=0, const NekDouble &alpha=0.5) override
 
void v_GetC (NekDouble &c, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5) override
 
void v_GetW1 (NekDouble &W1, const NekDouble &u, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5) override
 
void v_GetW2 (NekDouble &W2, const NekDouble &u, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5) override
 
void v_GetAFromChars (NekDouble &A, const NekDouble &W1, const NekDouble &W2, const NekDouble &beta, const NekDouble &A0, const NekDouble &alpha=0.5) override
 
void v_GetUFromChars (NekDouble &u, const NekDouble &W1, const NekDouble &W2) override
 
void v_GetCharIntegral (NekDouble &I, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5) override
 
void v_GetJacobianInverse (NekMatrix< NekDouble > &invJ, const Array< OneD, NekDouble > &Au, const Array< OneD, NekDouble > &uu, const Array< OneD, NekDouble > &beta, const Array< OneD, NekDouble > &A0, const Array< OneD, NekDouble > &alpha, const std::string &type) override
 
void GetKappa (NekDouble &kappa, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)
 
virtual void v_GetPressure (NekDouble &P, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &dAUdx, const NekDouble &gamma=0, const NekDouble &alpha=0.5)=0
 
virtual void v_GetC (NekDouble &c, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)=0
 
virtual void v_GetW1 (NekDouble &W1, const NekDouble &u, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)=0
 
virtual void v_GetW2 (NekDouble &W2, const NekDouble &u, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)=0
 
virtual void v_GetAFromChars (NekDouble &A, const NekDouble &W1, const NekDouble &W2, const NekDouble &beta, const NekDouble &A0, const NekDouble &alpha=0.5)=0
 
virtual void v_GetUFromChars (NekDouble &u, const NekDouble &W1, const NekDouble &W2)=0
 
virtual void v_GetCharIntegral (NekDouble &I, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)=0
 
virtual void v_GetJacobianInverse (NekMatrix< NekDouble > &invJ, const Array< OneD, NekDouble > &Au, const Array< OneD, NekDouble > &uu, const Array< OneD, NekDouble > &beta, const Array< OneD, NekDouble > &A0, const Array< OneD, NekDouble > &alpha, const std::string &type)=0
 

Friends

class MemoryManager< EmpiricalPressureArea >
 

Additional Inherited Members

- Public Member Functions inherited from Nektar::PulseWavePressureArea
 PulseWavePressureArea (Array< OneD, MultiRegions::ExpListSharedPtr > &pVessel, const LibUtilities::SessionReaderSharedPtr &pSession)
 
virtual ~PulseWavePressureArea ()=default
 
void GetPressure (NekDouble &P, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &dAUdx, const NekDouble &gamma=0, const NekDouble &alpha=0.5)
 
void GetC (NekDouble &c, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)
 
void GetW1 (NekDouble &W1, const NekDouble &u, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)
 
void GetW2 (NekDouble &W2, const NekDouble &u, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)
 
void GetAFromChars (NekDouble &A, const NekDouble &W1, const NekDouble &W2, const NekDouble &beta, const NekDouble &A0, const NekDouble &alpha=0.5)
 
void GetUFromChars (NekDouble &u, const NekDouble &W1, const NekDouble &W2)
 
void GetCharIntegral (NekDouble &I, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)
 
void GetJacobianInverse (NekMatrix< NekDouble > &invJ, const Array< OneD, NekDouble > &Au, const Array< OneD, NekDouble > &uu, const Array< OneD, NekDouble > &beta, const Array< OneD, NekDouble > &A0, const Array< OneD, NekDouble > &alpha, const std::string &type)
 
- Protected Attributes inherited from Nektar::PulseWavePressureArea
Array< OneD, MultiRegions::ExpListSharedPtrm_vessels
 
LibUtilities::SessionReaderSharedPtr m_session
 
NekDouble m_PExt
 
NekDouble m_rho
 

Detailed Description

Definition at line 52 of file EmpiricalPressureArea.h.

Constructor & Destructor Documentation

◆ EmpiricalPressureArea()

Nektar::EmpiricalPressureArea::EmpiricalPressureArea ( Array< OneD, MultiRegions::ExpListSharedPtr pVessel,
const LibUtilities::SessionReaderSharedPtr  pSession 
)
protected

Definition at line 46 of file EmpiricalPressureArea.cpp.

49 : PulseWavePressureArea(pVessel, pSession)
50{
51}
PulseWavePressureArea(Array< OneD, MultiRegions::ExpListSharedPtr > &pVessel, const LibUtilities::SessionReaderSharedPtr &pSession)

◆ ~EmpiricalPressureArea()

Nektar::EmpiricalPressureArea::~EmpiricalPressureArea ( )
overrideprotecteddefault

Member Function Documentation

◆ create()

static PulseWavePressureAreaSharedPtr Nektar::EmpiricalPressureArea::create ( Array< OneD, MultiRegions::ExpListSharedPtr > &  pVessel,
const LibUtilities::SessionReaderSharedPtr pSession 
)
inlinestatic

Definition at line 58 of file EmpiricalPressureArea.h.

61 {
63 pVessel, pSession);
64 }
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr().

◆ GetKappa()

void Nektar::EmpiricalPressureArea::GetKappa ( NekDouble kappa,
const NekDouble A,
const NekDouble A0,
const NekDouble alpha = 0.5 
)
protected

Definition at line 278 of file EmpiricalPressureArea.cpp.

281{
282 kappa = 1 - alpha * log(A / A0);
283}
scalarT< T > log(scalarT< T > in)
Definition: scalar.hpp:294

References tinysimd::log().

Referenced by v_GetC(), v_GetCharIntegral(), and v_GetPressure().

◆ v_GetAFromChars()

void Nektar::EmpiricalPressureArea::v_GetAFromChars ( NekDouble A,
const NekDouble W1,
const NekDouble W2,
const NekDouble beta,
const NekDouble A0,
const NekDouble alpha = 0.5 
)
overrideprotectedvirtual

Implements Nektar::PulseWavePressureArea.

Definition at line 97 of file EmpiricalPressureArea.cpp.

102{
103 NekDouble xi = (W1 - W2) * sqrt(m_rho / (8 * beta * sqrt(A0)));
104
105 A = A0 * exp(xi * (2 - alpha * xi));
106}
@ beta
Gauss Radau pinned at x=-1,.
Definition: PointsType.h:59
double NekDouble
scalarT< T > sqrt(scalarT< T > in)
Definition: scalar.hpp:285

References Nektar::LibUtilities::beta, Nektar::PulseWavePressureArea::m_rho, and tinysimd::sqrt().

◆ v_GetC()

void Nektar::EmpiricalPressureArea::v_GetC ( NekDouble c,
const NekDouble beta,
const NekDouble A,
const NekDouble A0,
const NekDouble alpha = 0.5 
)
overrideprotectedvirtual

Implements Nektar::PulseWavePressureArea.

Definition at line 67 of file EmpiricalPressureArea.cpp.

70{
71 NekDouble kappa = 0.0;
72 GetKappa(kappa, A, A0, alpha);
73
74 c = sqrt(beta * sqrt(A0) / (2 * m_rho * kappa)); // Elastic
75}
void GetKappa(NekDouble &kappa, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)

References Nektar::LibUtilities::beta, GetKappa(), Nektar::PulseWavePressureArea::m_rho, and tinysimd::sqrt().

◆ v_GetCharIntegral()

void Nektar::EmpiricalPressureArea::v_GetCharIntegral ( NekDouble I,
const NekDouble beta,
const NekDouble A,
const NekDouble A0,
const NekDouble alpha = 0.5 
)
overrideprotectedvirtual

Implements Nektar::PulseWavePressureArea.

Definition at line 114 of file EmpiricalPressureArea.cpp.

119{
120 NekDouble kappa = 0.0;
121 GetKappa(kappa, A, A0, alpha);
122
123 I = sqrt(2 * beta * sqrt(A0) / m_rho) * (1 - sqrt(kappa)) / alpha;
124}

References Nektar::LibUtilities::beta, GetKappa(), Nektar::PulseWavePressureArea::m_rho, and tinysimd::sqrt().

◆ v_GetJacobianInverse()

void Nektar::EmpiricalPressureArea::v_GetJacobianInverse ( NekMatrix< NekDouble > &  invJ,
const Array< OneD, NekDouble > &  Au,
const Array< OneD, NekDouble > &  uu,
const Array< OneD, NekDouble > &  beta,
const Array< OneD, NekDouble > &  A0,
const Array< OneD, NekDouble > &  alpha,
const std::string &  type 
)
overrideprotectedvirtual

Implements Nektar::PulseWavePressureArea.

Definition at line 126 of file EmpiricalPressureArea.cpp.

131{
132 // General formulation
133 if (type == "Bifurcation")
134 {
135 NekMatrix<NekDouble> J(6, 6);
136 Array<OneD, NekDouble> c(3);
137
138 for (int i = 0; i < 3; ++i)
139 {
140 GetC(c[i], beta[i], Au[i], A0[i], alpha[i]);
141 }
142
143 J.SetValue(0, 0, 1);
144 J.SetValue(0, 1, 0);
145 J.SetValue(0, 2, 0);
146 J.SetValue(0, 3, c[0] / Au[0]);
147 J.SetValue(0, 4, 0);
148 J.SetValue(0, 5, 0);
149
150 J.SetValue(1, 0, 0);
151 J.SetValue(1, 1, 1);
152 J.SetValue(1, 2, 0);
153 J.SetValue(1, 3, 0);
154 J.SetValue(1, 4, -c[1] / Au[1]);
155 J.SetValue(1, 5, 0);
156
157 J.SetValue(2, 0, 0);
158 J.SetValue(2, 1, 0);
159 J.SetValue(2, 2, 1);
160 J.SetValue(2, 3, 0);
161 J.SetValue(2, 4, 0);
162 J.SetValue(2, 5, -c[2] / Au[2]);
163
164 J.SetValue(3, 0, Au[0]);
165 J.SetValue(3, 1, -Au[1]);
166 J.SetValue(3, 2, -Au[2]);
167 J.SetValue(3, 3, uu[0]);
168 J.SetValue(3, 4, -uu[1]);
169 J.SetValue(3, 5, -uu[2]);
170
171 J.SetValue(4, 0, 2 * uu[0]);
172 J.SetValue(4, 1, -2 * uu[1]);
173 J.SetValue(4, 2, 0);
174 J.SetValue(4, 3, 2 * c[0] * c[0] / Au[0]);
175 J.SetValue(4, 4, -2 * c[1] * c[1] / Au[1]);
176 J.SetValue(4, 5, 0);
177
178 J.SetValue(5, 0, 2 * uu[0]);
179 J.SetValue(5, 1, 0);
180 J.SetValue(5, 2, -2 * uu[2]);
181 J.SetValue(5, 3, 2 * c[0] * c[0] / Au[0]);
182 J.SetValue(5, 4, 0);
183 J.SetValue(5, 5, -2 * c[2] * c[2] / Au[2]);
184
185 invJ = J;
186 invJ.Invert();
187 }
188 else if (type == "Merge")
189 {
190 NekMatrix<NekDouble> J(6, 6);
191 Array<OneD, NekDouble> c(3);
192
193 for (int i = 0; i < 3; ++i)
194 {
195 GetC(c[i], beta[i], Au[i], A0[i], alpha[i]);
196 }
197
198 J.SetValue(0, 0, 1);
199 J.SetValue(0, 1, 0);
200 J.SetValue(0, 2, 0);
201 J.SetValue(0, 3, -c[0] / Au[0]);
202 J.SetValue(0, 4, 0);
203 J.SetValue(0, 5, 0);
204
205 J.SetValue(1, 0, 0);
206 J.SetValue(1, 1, 1);
207 J.SetValue(1, 2, 0);
208 J.SetValue(1, 3, 0);
209 J.SetValue(1, 4, c[1] / Au[1]);
210 J.SetValue(1, 5, 0);
211
212 J.SetValue(2, 0, 0);
213 J.SetValue(2, 1, 0);
214 J.SetValue(2, 2, 1);
215 J.SetValue(2, 3, 0);
216 J.SetValue(2, 4, 0);
217 J.SetValue(2, 5, c[2] / Au[2]);
218
219 J.SetValue(3, 0, Au[0]);
220 J.SetValue(3, 1, -Au[1]);
221 J.SetValue(3, 2, -Au[2]);
222 J.SetValue(3, 3, uu[0]);
223 J.SetValue(3, 4, -uu[1]);
224 J.SetValue(3, 5, -uu[2]);
225
226 J.SetValue(4, 0, 2 * uu[0]);
227 J.SetValue(4, 1, -2 * uu[1]);
228 J.SetValue(4, 2, 0);
229 J.SetValue(4, 3, 2 * c[0] * c[0] / Au[0]);
230 J.SetValue(4, 4, -2 * c[1] * c[1] / Au[1]);
231 J.SetValue(4, 5, 0);
232
233 J.SetValue(5, 0, 2 * uu[0]);
234 J.SetValue(5, 1, 0);
235 J.SetValue(5, 2, -2 * uu[2]);
236 J.SetValue(5, 3, 2 * c[0] * c[0] / Au[0]);
237 J.SetValue(5, 4, 0);
238 J.SetValue(5, 5, -2 * c[2] * c[2] / Au[2]);
239
240 invJ = J;
241 invJ.Invert();
242 }
243 else if (type == "Interface")
244 {
245 NekMatrix<NekDouble> J(4, 4);
246 Array<OneD, NekDouble> c(2);
247
248 for (int i = 0; i < 2; ++i)
249 {
250 GetC(c[i], beta[i], Au[i], A0[i], alpha[i]);
251 }
252
253 J.SetValue(0, 0, 1);
254 J.SetValue(0, 1, 0);
255 J.SetValue(0, 2, c[0] / Au[0]);
256 J.SetValue(0, 3, 0);
257
258 J.SetValue(1, 0, 0);
259 J.SetValue(1, 1, 1);
260 J.SetValue(1, 2, 0);
261 J.SetValue(1, 3, -c[1] / Au[1]);
262
263 J.SetValue(2, 0, Au[0]);
264 J.SetValue(2, 1, -Au[1]);
265 J.SetValue(2, 2, uu[0]);
266 J.SetValue(2, 3, -uu[1]);
267
268 J.SetValue(3, 0, 2 * uu[0]);
269 J.SetValue(3, 1, -2 * uu[1]);
270 J.SetValue(3, 2, 2 * c[0] * c[0] / Au[0]);
271 J.SetValue(3, 3, -2 * c[1] * c[1] / Au[1]);
272
273 invJ = J;
274 invJ.Invert();
275 }
276}
void GetC(NekDouble &c, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)

References Nektar::LibUtilities::beta, and Nektar::PulseWavePressureArea::GetC().

◆ v_GetPressure()

void Nektar::EmpiricalPressureArea::v_GetPressure ( NekDouble P,
const NekDouble beta,
const NekDouble A,
const NekDouble A0,
const NekDouble dAUdx,
const NekDouble gamma = 0,
const NekDouble alpha = 0.5 
)
overrideprotectedvirtual

Implements Nektar::PulseWavePressureArea.

Definition at line 53 of file EmpiricalPressureArea.cpp.

59{
60 NekDouble kappa = 0.0;
61 GetKappa(kappa, A, A0, alpha);
62
63 P = m_PExt - beta * sqrt(A0) * log(kappa) / (2 * alpha) -
64 gamma * dAUdx / sqrt(A); // Viscoelasticity
65}
@ P
Monomial polynomials .
Definition: BasisType.h:62

References Nektar::LibUtilities::beta, GetKappa(), tinysimd::log(), Nektar::PulseWavePressureArea::m_PExt, Nektar::LibUtilities::P, and tinysimd::sqrt().

◆ v_GetUFromChars()

void Nektar::EmpiricalPressureArea::v_GetUFromChars ( NekDouble u,
const NekDouble W1,
const NekDouble W2 
)
overrideprotectedvirtual

Implements Nektar::PulseWavePressureArea.

Definition at line 108 of file EmpiricalPressureArea.cpp.

110{
111 u = (W1 + W2) / 2;
112}

◆ v_GetW1()

void Nektar::EmpiricalPressureArea::v_GetW1 ( NekDouble W1,
const NekDouble u,
const NekDouble beta,
const NekDouble A,
const NekDouble A0,
const NekDouble alpha = 0.5 
)
overrideprotectedvirtual

Implements Nektar::PulseWavePressureArea.

Definition at line 77 of file EmpiricalPressureArea.cpp.

80{
81 NekDouble I = 0.0;
82 GetCharIntegral(I, beta, A, A0, alpha);
83
84 W1 = u + I; // Elastic and assumes u0 = 0
85}
void GetCharIntegral(NekDouble &I, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)

References Nektar::LibUtilities::beta, and Nektar::PulseWavePressureArea::GetCharIntegral().

◆ v_GetW2()

void Nektar::EmpiricalPressureArea::v_GetW2 ( NekDouble W2,
const NekDouble u,
const NekDouble beta,
const NekDouble A,
const NekDouble A0,
const NekDouble alpha = 0.5 
)
overrideprotectedvirtual

Implements Nektar::PulseWavePressureArea.

Definition at line 87 of file EmpiricalPressureArea.cpp.

90{
91 NekDouble I = 0.0;
92 GetCharIntegral(I, beta, A, A0, alpha);
93
94 W2 = u - I; // Elastic and assumes u0 = 0
95}

References Nektar::LibUtilities::beta, and Nektar::PulseWavePressureArea::GetCharIntegral().

Friends And Related Function Documentation

◆ MemoryManager< EmpiricalPressureArea >

friend class MemoryManager< EmpiricalPressureArea >
friend

Definition at line 49 of file EmpiricalPressureArea.h.

Member Data Documentation

◆ className

std::string Nektar::EmpiricalPressureArea::className
static
Initial value:
=
"Empirical pressure area relationship for the arterial system")
static PulseWavePressureAreaSharedPtr create(Array< OneD, MultiRegions::ExpListSharedPtr > &pVessel, const LibUtilities::SessionReaderSharedPtr &pSession)
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
PressureAreaFactory & GetPressureAreaFactory()

Definition at line 67 of file EmpiricalPressureArea.h.