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

#include <PowerPressureArea.h>

Inheritance diagram for Nektar::PowerPressureArea:
[legend]

Public Member Functions

 PowerPressureArea (Array< OneD, MultiRegions::ExpListSharedPtr > pVessel, const LibUtilities::SessionReaderSharedPtr pSession)
 
virtual ~PowerPressureArea ()
 
- Public Member Functions inherited from Nektar::PulseWavePressureArea
 PulseWavePressureArea (Array< OneD, MultiRegions::ExpListSharedPtr > &pVessel, const LibUtilities::SessionReaderSharedPtr &pSession)
 
virtual ~PulseWavePressureArea ()
 
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)
 

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

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) override
 
virtual void v_GetC (NekDouble &c, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5) override
 
virtual void v_GetW1 (NekDouble &W1, const NekDouble &u, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5) override
 
virtual void v_GetW2 (NekDouble &W2, const NekDouble &u, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5) override
 
virtual void v_GetAFromChars (NekDouble &A, const NekDouble &W1, const NekDouble &W2, const NekDouble &beta, const NekDouble &A0, const NekDouble &alpha=0.5) override
 
virtual void v_GetUFromChars (NekDouble &u, const NekDouble &W1, const NekDouble &W2) override
 
virtual void v_GetCharIntegral (NekDouble &I, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5) override
 
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) override
 
void GetC0 (NekDouble &c0, const NekDouble &beta, const NekDouble &A0)
 
void GetB (NekDouble &b, const NekDouble &c0)
 
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
 

Private Attributes

NekDouble P_Collapse
 

Additional Inherited Members

- 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 PowerPressureArea.h.

Constructor & Destructor Documentation

◆ PowerPressureArea()

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

Definition at line 47 of file PowerPressureArea.cpp.

50 : PulseWavePressureArea(pVessel, pSession)
51{
52 m_session->LoadParameter("P_Collapse", P_Collapse,
53 -13.3322); // -10mmHg converted to kg / (cm s^2)
54}
LibUtilities::SessionReaderSharedPtr m_session
PulseWavePressureArea(Array< OneD, MultiRegions::ExpListSharedPtr > &pVessel, const LibUtilities::SessionReaderSharedPtr &pSession)

References Nektar::PulseWavePressureArea::m_session, and P_Collapse.

◆ ~PowerPressureArea()

Nektar::PowerPressureArea::~PowerPressureArea ( )
virtual

Definition at line 56 of file PowerPressureArea.cpp.

57{
58}

Member Function Documentation

◆ create()

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

Definition at line 56 of file PowerPressureArea.h.

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

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

◆ GetB()

void Nektar::PowerPressureArea::GetB ( NekDouble b,
const NekDouble c0 
)
protected

◆ GetC0()

void Nektar::PowerPressureArea::GetC0 ( NekDouble c0,
const NekDouble beta,
const NekDouble A0 
)
protected

Definition at line 309 of file PowerPressureArea.cpp.

311{
312 // Reference c0 from the beta law
313 c0 = sqrt(beta * sqrt(A0) / (2 * m_rho));
314
315 /*
316 // Empirical approximation from Olufsen et al (1999)
317 NekDouble k1 = 3E3;
318 NekDouble k2 = -9;
319 NekDouble k3 = 337;
320 NekDouble PI = 3.14159265359;
321
322 NekDouble R0 = sqrt(A0 / PI);
323
324 c0 = sqrt(2 / (3 * m_rho) * (k1 * exp(k2 * R0) + k3));
325 */
326}
@ beta
Gauss Radau pinned at x=-1,.
Definition: PointsType.h:61
scalarT< T > sqrt(scalarT< T > in)
Definition: scalar.hpp:294

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

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

◆ v_GetAFromChars()

void Nektar::PowerPressureArea::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 115 of file PowerPressureArea.cpp.

120{
121 boost::ignore_unused(alpha);
122
123 NekDouble c0 = 0.0;
124 GetC0(c0, beta, A0);
125
126 NekDouble b = 0.0;
127 GetB(b, c0);
128
129 A = A0 * pow(((b / (8 * c0)) * (W1 - W2) + 1), 4 / b);
130}
void GetC0(NekDouble &c0, const NekDouble &beta, const NekDouble &A0)
void GetB(NekDouble &b, const NekDouble &c0)
double NekDouble

References Nektar::LibUtilities::beta, GetB(), and GetC0().

◆ v_GetC()

void Nektar::PowerPressureArea::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 80 of file PowerPressureArea.cpp.

83{
84 boost::ignore_unused(alpha);
85
86 NekDouble c0 = 0.0;
87 GetC0(c0, beta, A0);
88
89 NekDouble b = 0.0;
90 GetB(b, c0);
91
92 c = c0 * pow((A / A0), b / 4); // Elastic
93}

References Nektar::LibUtilities::beta, GetB(), and GetC0().

◆ v_GetCharIntegral()

void Nektar::PowerPressureArea::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 138 of file PowerPressureArea.cpp.

142{
143 boost::ignore_unused(alpha);
144
145 NekDouble c = 0.0;
146 NekDouble c0 = 0.0;
147
148 GetC0(c0, beta, A0);
149 GetC(c, beta, A, A0);
150
151 NekDouble b = 0.0;
152 GetB(b, c0);
153
154 I = (4 / b) * (c - c0);
155}
void GetC(NekDouble &c, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)

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

◆ v_GetJacobianInverse()

void Nektar::PowerPressureArea::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 157 of file PowerPressureArea.cpp.

162{
163 // General formulation
164 if (type == "Bifurcation")
165 {
166 NekMatrix<NekDouble> J(6, 6);
167 Array<OneD, NekDouble> c(3);
168
169 for (int i = 0; i < 3; ++i)
170 {
171 GetC(c[i], beta[i], Au[i], A0[i], alpha[i]);
172 }
173
174 J.SetValue(0, 0, 1);
175 J.SetValue(0, 1, 0);
176 J.SetValue(0, 2, 0);
177 J.SetValue(0, 3, c[0] / Au[0]);
178 J.SetValue(0, 4, 0);
179 J.SetValue(0, 5, 0);
180
181 J.SetValue(1, 0, 0);
182 J.SetValue(1, 1, 1);
183 J.SetValue(1, 2, 0);
184 J.SetValue(1, 3, 0);
185 J.SetValue(1, 4, -c[1] / Au[1]);
186 J.SetValue(1, 5, 0);
187
188 J.SetValue(2, 0, 0);
189 J.SetValue(2, 1, 0);
190 J.SetValue(2, 2, 1);
191 J.SetValue(2, 3, 0);
192 J.SetValue(2, 4, 0);
193 J.SetValue(2, 5, -c[2] / Au[2]);
194
195 J.SetValue(3, 0, Au[0]);
196 J.SetValue(3, 1, -Au[1]);
197 J.SetValue(3, 2, -Au[2]);
198 J.SetValue(3, 3, uu[0]);
199 J.SetValue(3, 4, -uu[1]);
200 J.SetValue(3, 5, -uu[2]);
201
202 J.SetValue(4, 0, 2 * uu[0]);
203 J.SetValue(4, 1, -2 * uu[1]);
204 J.SetValue(4, 2, 0);
205 J.SetValue(4, 3, 2 * c[0] * c[0] / Au[0]);
206 J.SetValue(4, 4, -2 * c[1] * c[1] / Au[1]);
207 J.SetValue(4, 5, 0);
208
209 J.SetValue(5, 0, 2 * uu[0]);
210 J.SetValue(5, 1, 0);
211 J.SetValue(5, 2, -2 * uu[2]);
212 J.SetValue(5, 3, 2 * c[0] * c[0] / Au[0]);
213 J.SetValue(5, 4, 0);
214 J.SetValue(5, 5, -2 * c[2] * c[2] / Au[2]);
215
216 invJ = J;
217 invJ.Invert();
218 }
219 else if (type == "Merge")
220 {
221 NekMatrix<NekDouble> J(6, 6);
222 Array<OneD, NekDouble> c(3);
223
224 for (int i = 0; i < 3; ++i)
225 {
226 GetC(c[i], beta[i], Au[i], A0[i], alpha[i]);
227 }
228
229 J.SetValue(0, 0, 1);
230 J.SetValue(0, 1, 0);
231 J.SetValue(0, 2, 0);
232 J.SetValue(0, 3, -c[0] / Au[0]);
233 J.SetValue(0, 4, 0);
234 J.SetValue(0, 5, 0);
235
236 J.SetValue(1, 0, 0);
237 J.SetValue(1, 1, 1);
238 J.SetValue(1, 2, 0);
239 J.SetValue(1, 3, 0);
240 J.SetValue(1, 4, c[1] / Au[1]);
241 J.SetValue(1, 5, 0);
242
243 J.SetValue(2, 0, 0);
244 J.SetValue(2, 1, 0);
245 J.SetValue(2, 2, 1);
246 J.SetValue(2, 3, 0);
247 J.SetValue(2, 4, 0);
248 J.SetValue(2, 5, c[2] / Au[2]);
249
250 J.SetValue(3, 0, Au[0]);
251 J.SetValue(3, 1, -Au[1]);
252 J.SetValue(3, 2, -Au[2]);
253 J.SetValue(3, 3, uu[0]);
254 J.SetValue(3, 4, -uu[1]);
255 J.SetValue(3, 5, -uu[2]);
256
257 J.SetValue(4, 0, 2 * uu[0]);
258 J.SetValue(4, 1, -2 * uu[1]);
259 J.SetValue(4, 2, 0);
260 J.SetValue(4, 3, 2 * c[0] * c[0] / Au[0]);
261 J.SetValue(4, 4, -2 * c[1] * c[1] / Au[1]);
262 J.SetValue(4, 5, 0);
263
264 J.SetValue(5, 0, 2 * uu[0]);
265 J.SetValue(5, 1, 0);
266 J.SetValue(5, 2, -2 * uu[2]);
267 J.SetValue(5, 3, 2 * c[0] * c[0] / Au[0]);
268 J.SetValue(5, 4, 0);
269 J.SetValue(5, 5, -2 * c[2] * c[2] / Au[2]);
270
271 invJ = J;
272 invJ.Invert();
273 }
274 else if (type == "Interface")
275 {
276 NekMatrix<NekDouble> J(4, 4);
277 Array<OneD, NekDouble> c(2);
278
279 for (int i = 0; i < 2; ++i)
280 {
281 GetC(c[i], beta[i], Au[i], A0[i], alpha[i]);
282 }
283
284 J.SetValue(0, 0, 1);
285 J.SetValue(0, 1, 0);
286 J.SetValue(0, 2, c[0] / Au[0]);
287 J.SetValue(0, 3, 0);
288
289 J.SetValue(1, 0, 0);
290 J.SetValue(1, 1, 1);
291 J.SetValue(1, 2, 0);
292 J.SetValue(1, 3, -c[1] / Au[1]);
293
294 J.SetValue(2, 0, Au[0]);
295 J.SetValue(2, 1, -Au[1]);
296 J.SetValue(2, 2, uu[0]);
297 J.SetValue(2, 3, -uu[1]);
298
299 J.SetValue(3, 0, 2 * uu[0]);
300 J.SetValue(3, 1, -2 * uu[1]);
301 J.SetValue(3, 2, 2 * c[0] * c[0] / Au[0]);
302 J.SetValue(3, 3, -2 * c[1] * c[1] / Au[1]);
303
304 invJ = J;
305 invJ.Invert();
306 }
307}

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

◆ v_GetPressure()

void Nektar::PowerPressureArea::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 60 of file PowerPressureArea.cpp.

65{
66 boost::ignore_unused(alpha);
67
68 NekDouble c0 = 0.0;
69 GetC0(c0, beta, A0);
70
71 NekDouble b = 0.0;
72 GetB(b, c0);
73
74 P = m_PExt +
75 (2 * m_rho * c0 * c0 / b) *
76 (pow((A / A0), b / 2) - 1) // Power law by Smith/Canic/Mynard
77 - A0 * gamma * dAUdx / (A * sqrt(A)); // Viscoelasticity
78}
@ P
Monomial polynomials .
Definition: BasisType.h:64

References Nektar::LibUtilities::beta, GetB(), GetC0(), Nektar::PulseWavePressureArea::m_PExt, Nektar::PulseWavePressureArea::m_rho, Nektar::LibUtilities::P, and tinysimd::sqrt().

◆ v_GetUFromChars()

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

Implements Nektar::PulseWavePressureArea.

Definition at line 132 of file PowerPressureArea.cpp.

134{
135 u = (W1 + W2) / 2;
136}

◆ v_GetW1()

void Nektar::PowerPressureArea::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 95 of file PowerPressureArea.cpp.

98{
99 NekDouble I = 0.0;
100 GetCharIntegral(I, beta, A, A0, alpha);
101
102 W1 = u + I; // Elastic and assumes u0 = 0
103}
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::PowerPressureArea::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 105 of file PowerPressureArea.cpp.

108{
109 NekDouble I = 0.0;
110 GetCharIntegral(I, beta, A, A0, alpha);
111
112 W2 = u - I; // Elastic and assumes u0 = 0
113}

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

Member Data Documentation

◆ className

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

Definition at line 65 of file PowerPressureArea.h.

◆ P_Collapse

NekDouble Nektar::PowerPressureArea::P_Collapse
private

Definition at line 118 of file PowerPressureArea.h.

Referenced by GetB(), and PowerPressureArea().