48        "Pulse Wave Propagation equation.");
 
   79    if (
m_session->DefinesSolverInfo(
"PressureArea"))
 
   97        ASSERTL0(
false, 
"Implicit Pulse Wave Propagation not set up.");
 
  102    std::string riemName;
 
  108            riemName = 
"UpwindPulse";
 
  113            ASSERTL0(
false, 
"populate switch statement for upwind flux");
 
  165    for (
size_t omega = 0; omega < 
m_nDomains; ++omega)
 
  174            physarray[i] = inarray[i] + cnt; 
 
  175            out[i]       = outarray[i] + cnt;
 
  201    if (inarray != outarray)
 
  205            Vmath::Vcopy(inarray[i].size(), inarray[i], 1, outarray[i], 1);
 
  237            for (
size_t j = 0; j < 2; ++j)
 
  241                if (j < vessel[0]->GetBndConditions().size())
 
  243                    BCType = vessel[0]->GetBndConditions()[j]->GetUserDefined();
 
  247                if (BCType.empty() || BCType == 
"Interface")
 
  249                    BCType = 
"NoUserDefined";
 
  256                if (BCType == 
"Q-inflow")
 
  258                    vessel[0]->GetBndConditions()[j]->SetIsTimeDependent(
true);
 
  260                else if (BCType == 
"A-inflow")
 
  262                    vessel[0]->GetBndConditions()[j]->SetIsTimeDependent(
true);
 
  264                else if (BCType == 
"U-inflow")
 
  266                    vessel[1]->GetBndConditions()[j]->SetIsTimeDependent(
true);
 
  268                else if (BCType == 
"RCR-terminal")
 
  270                    vessel[0]->GetBndConditions()[j]->SetIsTimeDependent(
true);
 
  283        for (
size_t n = 0; n < 2; ++n)
 
  289        offset += 
m_vessels[2 * omega]->GetTotPoints();
 
  317    for (
size_t j = 0; j < nq; ++j)
 
  319        flux[0][0][j] = physfield[0][j] * physfield[1][j];
 
  325    m_fields[0]->PhysDeriv(flux[0][0], dAUdx);
 
  327    for (
size_t j = 0; j < nq; ++j)
 
  329        if ((j == 0) || (j == nq - 1))
 
  331            viscoelasticGradient = dAUdx[j];
 
  335            viscoelasticGradient = (dAUdx[j] + dAUdx[j + 1]) / 2;
 
  339                                    physfield[0][j], 
m_A_0[domain][j],
 
  340                                    viscoelasticGradient, 
m_gamma[domain][j],
 
  343        flux[1][0][j] = physfield[1][j] * physfield[1][j] / 2 +
 
  363        for (
size_t j = 0; j < nq; ++j)
 
  366                                 physfield[0][counter + j], 
m_A_0[domain][j],
 
  369                                  m_beta[domain][j], physfield[0][counter + j],
 
  372                                  m_beta[domain][j], physfield[0][counter + j],
 
#define ASSERTL0(condition, msg)
 
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
 
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
 
void DefineProjection(FuncPointerT func, ObjectPointerT obj)
 
void DefineOdeRhs(FuncPointerT func, ObjectPointerT obj)
 
void AccumulateRegion(std::string, int iolevel=0)
Accumulate elapsed time for a region.
 
Array< OneD, NekDouble > & GetAlpha()
 
void v_InitObject(bool DeclareField=false) override
Init object for UnsteadySystem class.
 
SolverUtils::RiemannSolverSharedPtr m_riemannSolver
 
PulseWavePropagation(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 
SolverUtils::AdvectionSharedPtr m_advObject
 
void SetPulseWaveBoundaryConditions(const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble time)
 
void DoOdeProjection(const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble time)
 
Array< OneD, PulseWaveBoundarySharedPtr > m_Boundary
 
Array< OneD, NekDouble > & GetN()
 
Array< OneD, NekDouble > & GetA0()
 
void GetFluxVector(const Array< OneD, Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &flux)
DG Pulse Wave Propagation routines:
 
void v_GenerateSummary(SolverUtils::SummaryList &s) override
 
void DoOdeRhs(const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble time)
 
Array< OneD, NekDouble > & GetBeta()
 
static EquationSystemSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
Creates an instance of this class.
 
static std::string className
Name of class.
 
Base class for unsteady solvers.
 
Array< OneD, Array< OneD, NekDouble > > m_A_0
 
Array< OneD, Array< OneD, NekDouble > > m_beta_trace
 
Array< OneD, Array< OneD, NekDouble > > m_W2
 
Array< OneD, Array< OneD, NekDouble > > m_trace_fwd_normal
 
PulseWavePressureAreaSharedPtr m_pressureArea
 
Array< OneD, Array< OneD, NekDouble > > m_W1
 
void v_InitObject(bool DeclareField=false) override
 
Array< OneD, Array< OneD, NekDouble > > m_alpha_trace
 
UpwindTypePulse m_upwindTypePulse
 
Array< OneD, Array< OneD, NekDouble > > m_A_0_trace
 
Array< OneD, Array< OneD, NekDouble > > m_pressure
 
Array< OneD, Array< OneD, NekDouble > > m_gamma
 
Array< OneD, Array< OneD, NekDouble > > m_alpha
 
Array< OneD, Array< OneD, NekDouble > > m_PWV
 
Array< OneD, MultiRegions::ExpListSharedPtr > m_vessels
 
void EnforceInterfaceConditions(const Array< OneD, const Array< OneD, NekDouble > > &fields)
 
Array< OneD, Array< OneD, NekDouble > > m_beta
 
int m_spacedim
Spatial dimension (>= expansion dim).
 
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array holding all dependent variables.
 
LibUtilities::SessionReaderSharedPtr m_session
The session reader.
 
SOLVER_UTILS_EXPORT void SetBoundaryConditions(NekDouble time)
Evaluates the boundary conditions at the given time.
 
LibUtilities::TimeIntegrationSchemeOperators m_ode
The time integration scheme operators to use.
 
bool m_explicitAdvection
Indicates if explicit or implicit treatment of advection is used.
 
SOLVER_UTILS_EXPORT void v_GenerateSummary(SummaryList &s) override
Print a summary of time stepping parameters.
 
std::shared_ptr< SessionReader > SessionReaderSharedPtr
 
AdvectionFactory & GetAdvectionFactory()
Gets the factory for initialising advection objects.
 
std::vector< std::pair< std::string, std::string > > SummaryList
 
EquationSystemFactory & GetEquationSystemFactory()
 
RiemannSolverFactory & GetRiemannSolverFactory()
 
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
 
PressureAreaFactory & GetPressureAreaFactory()
 
@ eUpwindPulse
simple upwinding scheme
 
BoundaryFactory & GetBoundaryFactory()
 
void Neg(int n, T *x, const int incx)
Negate x = -x.
 
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)