46        "Beta law pressure area relationship for the arterial system");
 
   65    boost::ignore_unused(alpha);
 
   68        gamma * dAUdx / 
sqrt(
A); 
 
   75    boost::ignore_unused(A0, alpha);
 
   84    boost::ignore_unused(alpha);
 
   96    boost::ignore_unused(alpha);
 
  110    boost::ignore_unused(alpha);
 
  126    boost::ignore_unused(alpha);
 
  143                                            const std::string &type)
 
  154    if (type == 
"Bifurcation")
 
  160        for (
int i = 0; i < 3; ++i)
 
  162            GetC(c[i], 
beta[i], Au[i], A0[i], alpha[i]);
 
  165        k    = c[0] * Au[1] * c[2] + Au[0] * c[2] * c[1] + Au[2] * c[0] * c[1];
 
  166        K[0] = (c[0] - uu[0]) * k;
 
  167        K[1] = (c[1] + uu[1]) * k;
 
  168        K[2] = (c[2] + uu[2]) * k;
 
  171                      (-c[1] * uu[0] * c[2] * Au[0] +
 
  172                       Au[2] * c[1] * c[0] * c[0] +
 
  173                       Au[1] * c[0] * c[0] * c[2]) /
 
  175        invJ.SetValue(0, 1, Au[1] * (c[1] - uu[1]) * c[0] * c[2] / K[0]);
 
  176        invJ.SetValue(0, 2, Au[2] * (c[2] - uu[2]) * c[0] * c[1] / K[0]);
 
  177        invJ.SetValue(0, 3, c[0] * c[1] * c[2] / K[0]);
 
  178        invJ.SetValue(0, 4, -0.5 * c[0] * Au[1] * c[2] / K[0]);
 
  179        invJ.SetValue(0, 5, -0.5 * Au[2] * c[0] * c[1] / K[0]);
 
  181        invJ.SetValue(1, 0, Au[0] * (c[0] + uu[0]) * c[1] * c[2] / K[1]);
 
  183                      (c[0] * uu[1] * c[2] * Au[1] +
 
  184                       Au[2] * c[0] * c[1] * c[1] +
 
  185                       c[2] * c[1] * c[1] * Au[0]) /
 
  187        invJ.SetValue(1, 2, -Au[2] * (c[2] - uu[2]) * c[0] * c[1] / K[1]);
 
  188        invJ.SetValue(1, 3, -c[0] * c[1] * c[2] / K[1]);
 
  189        invJ.SetValue(1, 4, -0.5 * (c[0] * Au[2] + Au[0] * c[2]) * c[1] / K[1]);
 
  190        invJ.SetValue(1, 5, 0.5 * Au[2] * c[0] * c[1] / K[1]);
 
  192        invJ.SetValue(2, 0, Au[0] * (c[0] + uu[0]) * c[1] * c[2] / K[2]);
 
  193        invJ.SetValue(2, 1, -Au[1] * (c[1] - uu[1]) * c[0] * c[2] / K[2]);
 
  195                      (c[0] * c[1] * uu[2] * Au[2] +
 
  196                       c[0] * Au[1] * c[2] * c[2] +
 
  197                       c[1] * c[2] * c[2] * Au[0]) /
 
  199        invJ.SetValue(2, 3, -c[0] * c[1] * c[2] / K[2]);
 
  200        invJ.SetValue(2, 4, 0.5 * c[0] * Au[1] * c[2] / K[2]);
 
  201        invJ.SetValue(2, 5, -0.5 * (Au[1] * c[0] + c[1] * Au[0]) * c[2] / K[2]);
 
  205                          (Au[0] * c[2] * c[1] - uu[0] * c[2] * Au[1] -
 
  206                           uu[0] * c[1] * Au[2]) /
 
  208        invJ.SetValue(3, 1, -Au[0] * Au[1] * (c[1] - uu[1]) * c[2] / K[0]);
 
  209        invJ.SetValue(3, 2, -Au[0] * Au[2] * (c[2] - uu[2]) * c[1] / K[0]);
 
  210        invJ.SetValue(3, 3, -Au[0] * c[2] * c[1] / K[0]);
 
  211        invJ.SetValue(3, 4, 0.5 * Au[0] * Au[1] * c[2] / K[0]);
 
  212        invJ.SetValue(3, 5, 0.5 * Au[0] * c[1] * Au[2] / K[0]);
 
  214        invJ.SetValue(4, 0, Au[0] * Au[1] * (c[0] + uu[0]) * c[2] / K[1]);
 
  217                          (c[0] * Au[1] * c[2] + c[0] * uu[1] * Au[2] +
 
  218                           c[2] * uu[1] * Au[0]) /
 
  220        invJ.SetValue(4, 2, -Au[2] * Au[1] * (c[2] - uu[2]) * c[0] / K[1]);
 
  221        invJ.SetValue(4, 3, -c[0] * Au[1] * c[2] / K[1]);
 
  223                      -0.5 * Au[1] * (c[0] * Au[2] + Au[0] * c[2]) / K[1]);
 
  224        invJ.SetValue(4, 5, 0.5 * Au[2] * Au[1] * c[0] / K[1]);
 
  226        invJ.SetValue(5, 0, Au[0] * Au[2] * (c[0] + uu[0]) * c[1] / K[2]);
 
  227        invJ.SetValue(5, 1, -Au[2] * Au[1] * (c[1] - uu[1]) * c[0] / K[2]);
 
  230                          (Au[2] * c[0] * c[1] + c[0] * uu[2] * Au[1] +
 
  231                           c[1] * uu[2] * Au[0]) /
 
  233        invJ.SetValue(5, 3, -Au[2] * c[0] * c[1] / K[2]);
 
  234        invJ.SetValue(5, 4, 0.5 * Au[2] * Au[1] * c[0] / K[2]);
 
  236                      -0.5 * Au[2] * (Au[1] * c[0] + c[1] * Au[0]) / K[2]);
 
  238    else if (type == 
"Merge")
 
  244        for (
int i = 0; i < 3; ++i)
 
  246            GetC(c[i], 
beta[i], Au[i], A0[i], alpha[i]);
 
  249        k    = c[0] * Au[1] * c[2] + Au[0] * c[2] * c[1] + Au[2] * c[0] * c[1];
 
  250        K[0] = (c[0] - uu[0]) * k;
 
  251        K[1] = (c[1] + uu[1]) * k;
 
  252        K[2] = (c[2] + uu[2]) * k;
 
  255                      (-c[1] * uu[0] * c[2] * Au[0] +
 
  256                       Au[2] * c[1] * c[0] * c[0] +
 
  257                       Au[1] * c[0] * c[0] * c[2]) /
 
  259        invJ.SetValue(0, 1, Au[1] * (c[1] - uu[1]) * c[0] * c[2] / K[0]);
 
  260        invJ.SetValue(0, 2, Au[2] * (c[2] - uu[2]) * c[0] * c[1] / K[0]);
 
  261        invJ.SetValue(0, 3, c[0] * c[1] * c[2] / K[0]);
 
  262        invJ.SetValue(0, 4, -0.5 * c[0] * Au[1] * c[2] / K[0]);
 
  263        invJ.SetValue(0, 5, -0.5 * Au[2] * c[0] * c[1] / K[0]);
 
  265        invJ.SetValue(1, 0, Au[0] * (c[0] + uu[0]) * c[1] * c[2] / K[1]);
 
  267                      (c[0] * uu[1] * c[2] * Au[1] +
 
  268                       Au[2] * c[0] * c[1] * c[1] +
 
  269                       c[2] * c[1] * c[1] * Au[0]) /
 
  271        invJ.SetValue(1, 2, -Au[2] * (c[2] - uu[2]) * c[0] * c[1] / K[1]);
 
  272        invJ.SetValue(1, 3, -c[0] * c[1] * c[2] / K[1]);
 
  273        invJ.SetValue(1, 4, -0.5 * (c[0] * Au[2] + Au[0] * c[2]) * c[1] / K[1]);
 
  274        invJ.SetValue(1, 5, 0.5 * Au[2] * c[0] * c[1] / K[1]);
 
  276        invJ.SetValue(2, 0, Au[0] * (c[0] - uu[0]) * c[1] * c[2] / K[2]);
 
  277        invJ.SetValue(2, 1, -Au[1] * (c[1] + uu[1]) * c[0] * c[2] / K[2]);
 
  279                      -(c[0] * uu[2] * c[1] * Au[2] -
 
  280                        Au[1] * c[0] * c[2] * c[2] -
 
  281                        c[1] * c[2] * c[2] * Au[0]) /
 
  283        invJ.SetValue(2, 3, -c[0] * c[1] * c[2] / K[2]);
 
  284        invJ.SetValue(2, 4, -0.5 * Au[1] * c[0] * c[2] / K[2]);
 
  285        invJ.SetValue(2, 5, 0.5 * (Au[1] * c[0] + Au[0] * c[1]) * c[2] / K[2]);
 
  289                          (Au[0] * c[2] * c[1] + uu[0] * c[2] * Au[1] +
 
  290                           uu[0] * c[1] * Au[2]) /
 
  292        invJ.SetValue(3, 1, Au[0] * Au[1] * (c[1] + uu[1]) * c[2] / K[0]);
 
  294        invJ.SetValue(3, 2, -Au[0] * Au[2] * (c[2] - uu[2]) * c[1] / K[0]);
 
  295        invJ.SetValue(3, 3, -Au[0] * c[2] * c[1] / K[0]);
 
  296        invJ.SetValue(3, 4, 0.5 * Au[0] * Au[1] * c[2] / K[0]);
 
  297        invJ.SetValue(3, 5, 0.5 * Au[0] * c[1] * Au[2] / K[0]);
 
  299        invJ.SetValue(4, 0, Au[0] * Au[1] * (c[0] + uu[0]) * c[2] / K[1]);
 
  302                          (c[0] * Au[1] * c[2] + c[0] * uu[1] * Au[2] +
 
  303                           c[2] * uu[1] * Au[0]) /
 
  305        invJ.SetValue(4, 2, -Au[2] * Au[1] * (c[2] - uu[2]) * c[0] / K[1]);
 
  306        invJ.SetValue(4, 3, -c[0] * Au[1] * c[2] / K[1]);
 
  308                      -0.5 * Au[1] * (c[0] * Au[2] + Au[0] * c[2]) / K[1]);
 
  309        invJ.SetValue(4, 5, 0.5 * Au[2] * Au[1] * c[0] / K[1]);
 
  311        invJ.SetValue(5, 0, Au[0] * Au[2] * (c[0] + uu[0]) * c[1] / K[2]);
 
  312        invJ.SetValue(5, 1, -Au[2] * Au[1] * (c[1] - uu[1]) * c[0] / K[2]);
 
  315                          (Au[2] * c[0] * c[1] + c[0] * uu[2] * Au[1] +
 
  316                           c[1] * uu[2] * Au[0]) /
 
  318        invJ.SetValue(5, 3, -Au[2] * c[0] * c[1] / K[2]);
 
  319        invJ.SetValue(5, 4, 0.5 * Au[2] * Au[1] * c[0] / K[2]);
 
  321                      -0.5 * Au[2] * (Au[1] * c[0] + c[1] * Au[0]) / K[2]);
 
  323    else if (type == 
"Interface")
 
  329        for (
int i = 0; i < 2; ++i)
 
  331            GetC(c[i], 
beta[i], Au[i], A0[i], alpha[i]);
 
  334        k    = (c[0] * Au[1] + Au[0] * c[1]);
 
  335        K[0] = (c[0] + uu[0]) * k;
 
  336        K[1] = (c[1] + uu[1]) * k;
 
  339                      (Au[1] * c[0] * c[0] - c[1] * uu[0] * Au[0]) / K[0]);
 
  340        invJ.SetValue(0, 1, Au[1] * (c[1] - uu[1]) * c[0] / K[0]);
 
  341        invJ.SetValue(0, 2, c[0] * c[1] / K[0]);
 
  342        invJ.SetValue(0, 3, -0.5 * c[0] * Au[1] / K[0]);
 
  344        invJ.SetValue(1, 0, Au[0] * (c[0] + uu[0]) * c[1] / K[1]);
 
  346                      (c[0] * uu[1] * Au[1] + c[1] * c[1] * Au[0]) / K[1]);
 
  347        invJ.SetValue(1, 2, -c[0] * c[1] / K[1]);
 
  348        invJ.SetValue(1, 3, -0.5 * Au[0] * c[1] / K[1]);
 
  350        invJ.SetValue(2, 0, Au[0] * (Au[0] * c[1] - uu[0] * Au[1]) / K[0]);
 
  351        invJ.SetValue(2, 1, -Au[0] * Au[1] * (c[1] - uu[1]) / K[0]);
 
  352        invJ.SetValue(2, 2, -Au[0] * c[1] / K[0]);
 
  353        invJ.SetValue(2, 3, 0.5 * Au[1] * Au[0] / K[0]);
 
  355        invJ.SetValue(3, 0, Au[0] * Au[1] * (c[0] + uu[0]) / K[1]);
 
  356        invJ.SetValue(3, 1, -Au[1] * (c[0] * Au[1] + uu[1] * Au[0]) / K[1]);
 
  357        invJ.SetValue(3, 2, -c[0] * Au[1] / K[1]);
 
  358        invJ.SetValue(3, 3, -0.5 * Au[1] * Au[0] / K[1]);
 
virtual ~BetaPressureArea()
 
BetaPressureArea(Array< OneD, MultiRegions::ExpListSharedPtr > pVessel, const LibUtilities::SessionReaderSharedPtr pSession)
 
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_GetCharIntegral(NekDouble &I, 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)
 
static std::string className
 
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_GetUFromChars(NekDouble &u, const NekDouble &W1, const NekDouble &W2) 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_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
 
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_GetAFromChars(NekDouble &A, const NekDouble &W1, const NekDouble &W2, const NekDouble &beta, const NekDouble &A0, const NekDouble &alpha=0.5) override
 
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
 
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)
 
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)