45 "Power law pressure area relationship for the arterial system");
66 boost::ignore_unused(alpha);
75 (2 *
m_rho * c0 * c0 / b) *
76 (pow((
A / A0), b / 2) - 1)
77 - A0 * gamma * dAUdx / (
A *
sqrt(
A));
84 boost::ignore_unused(alpha);
92 c = c0 * pow((
A / A0), b / 4);
121 boost::ignore_unused(alpha);
129 A = A0 * pow(((b / (8 * c0)) * (W1 - W2) + 1), 4 / b);
143 boost::ignore_unused(alpha);
154 I = (4 / b) * (c - c0);
161 const std::string &type)
164 if (type ==
"Bifurcation")
169 for (
int i = 0; i < 3; ++i)
171 GetC(c[i],
beta[i], Au[i], A0[i], alpha[i]);
177 J.SetValue(0, 3, c[0] / Au[0]);
185 J.SetValue(1, 4, -c[1] / Au[1]);
193 J.SetValue(2, 5, -c[2] / Au[2]);
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]);
202 J.SetValue(4, 0, 2 * uu[0]);
203 J.SetValue(4, 1, -2 * uu[1]);
205 J.SetValue(4, 3, 2 * c[0] * c[0] / Au[0]);
206 J.SetValue(4, 4, -2 * c[1] * c[1] / Au[1]);
209 J.SetValue(5, 0, 2 * uu[0]);
211 J.SetValue(5, 2, -2 * uu[2]);
212 J.SetValue(5, 3, 2 * c[0] * c[0] / Au[0]);
214 J.SetValue(5, 5, -2 * c[2] * c[2] / Au[2]);
219 else if (type ==
"Merge")
224 for (
int i = 0; i < 3; ++i)
226 GetC(c[i],
beta[i], Au[i], A0[i], alpha[i]);
232 J.SetValue(0, 3, -c[0] / Au[0]);
240 J.SetValue(1, 4, c[1] / Au[1]);
248 J.SetValue(2, 5, c[2] / Au[2]);
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]);
257 J.SetValue(4, 0, 2 * uu[0]);
258 J.SetValue(4, 1, -2 * uu[1]);
260 J.SetValue(4, 3, 2 * c[0] * c[0] / Au[0]);
261 J.SetValue(4, 4, -2 * c[1] * c[1] / Au[1]);
264 J.SetValue(5, 0, 2 * uu[0]);
266 J.SetValue(5, 2, -2 * uu[2]);
267 J.SetValue(5, 3, 2 * c[0] * c[0] / Au[0]);
269 J.SetValue(5, 5, -2 * c[2] * c[2] / Au[2]);
274 else if (type ==
"Interface")
279 for (
int i = 0; i < 2; ++i)
281 GetC(c[i],
beta[i], Au[i], A0[i], alpha[i]);
286 J.SetValue(0, 2, c[0] / Au[0]);
292 J.SetValue(1, 3, -c[1] / Au[1]);
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]);
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]);
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
virtual void v_GetCharIntegral(NekDouble &I, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5) override
void GetC0(NekDouble &c0, const NekDouble &beta, const NekDouble &A0)
virtual void v_GetUFromChars(NekDouble &u, const NekDouble &W1, const NekDouble &W2) override
PowerPressureArea(Array< OneD, MultiRegions::ExpListSharedPtr > pVessel, const LibUtilities::SessionReaderSharedPtr pSession)
virtual void v_GetW2(NekDouble &W2, const NekDouble &u, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5) override
static std::string className
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_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 GetB(NekDouble &b, const NekDouble &c0)
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_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
static PulseWavePressureAreaSharedPtr create(Array< OneD, MultiRegions::ExpListSharedPtr > &pVessel, const LibUtilities::SessionReaderSharedPtr &pSession)
virtual ~PowerPressureArea()
void GetCharIntegral(NekDouble &I, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)
void GetC(NekDouble &c, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)
LibUtilities::SessionReaderSharedPtr m_session
std::shared_ptr< SessionReader > SessionReaderSharedPtr
@ beta
Gauss Radau pinned at x=-1,.
@ P
Monomial polynomials .
The above copyright notice and this permission notice shall be included.
PressureAreaFactory & GetPressureAreaFactory()
scalarT< T > sqrt(scalarT< T > in)