Nektar++
|
#include <PulseWavePropagation.h>
Static Public Member Functions | |
static EquationSystemSharedPtr | create (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph) |
Creates an instance of this class. More... | |
Static Public Attributes | |
static std::string | className |
Name of class. More... | |
![]() | |
static std::string | cmdSetStartTime |
static std::string | cmdSetStartChkNum |
Protected Member Functions | |
PulseWavePropagation (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph) | |
void | DoOdeRhs (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) |
void | SetPulseWaveBoundaryConditions (const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time) |
virtual void | v_InitObject (bool DeclareField=false) override |
void | GetFluxVector (const Array< OneD, Array< OneD, NekDouble >> &physfield, Array< OneD, Array< OneD, Array< OneD, NekDouble >>> &flux) |
DG Pulse Wave Propagation routines: More... | |
virtual void | v_GenerateSummary (SolverUtils::SummaryList &s) override |
![]() | |
PulseWaveSystem (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph) | |
Initialises PulseWaveSystem class members. More... | |
virtual void | v_DoInitialise () override |
Sets up initial conditions. More... | |
virtual void | v_DoSolve () override |
Solves an unsteady problem. More... | |
void | LinkSubdomains (Array< OneD, Array< OneD, Array< OneD, NekDouble >>> &fields) |
Links the subdomains. More... | |
void | BifurcationRiemann (Array< OneD, NekDouble > &Au, Array< OneD, NekDouble > &uu, Array< OneD, NekDouble > &beta, Array< OneD, NekDouble > &A_0, Array< OneD, NekDouble > &alpha) |
Riemann Problem for Bifurcation. More... | |
void | MergingRiemann (Array< OneD, NekDouble > &Au, Array< OneD, NekDouble > &uu, Array< OneD, NekDouble > &beta, Array< OneD, NekDouble > &A_0, Array< OneD, NekDouble > &alpha) |
Riemann Problem for Merging Flow. More... | |
void | InterfaceRiemann (Array< OneD, NekDouble > &Au, Array< OneD, NekDouble > &uu, Array< OneD, NekDouble > &beta, Array< OneD, NekDouble > &A_0, Array< OneD, NekDouble > &alpha) |
Riemann Problem for Interface/Junction. More... | |
virtual void | v_Output (void) override |
void | CheckPoint_Output (const int n) |
virtual NekDouble | v_L2Error (unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray, bool Normalised=false) override |
Compute the L2 error between fields and a given exact solution. More... | |
virtual NekDouble | v_LinfError (unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray) override |
Compute the L_inf error between fields and a given exact solution. More... | |
void | WriteVessels (const std::string &outname) |
Write input fields to the given filename. More... | |
void | EnforceInterfaceConditions (const Array< OneD, const Array< OneD, NekDouble >> &fields) |
![]() | |
SOLVER_UTILS_EXPORT | UnsteadySystem (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph) |
Initialises UnsteadySystem class members. More... | |
SOLVER_UTILS_EXPORT NekDouble | MaxTimeStepEstimator () |
Get the maximum timestep estimator for cfl control. More... | |
virtual SOLVER_UTILS_EXPORT NekDouble | v_GetTimeStep (const Array< OneD, const Array< OneD, NekDouble >> &inarray) |
Return the timestep to be used for the next step in the time-marching loop. More... | |
virtual SOLVER_UTILS_EXPORT bool | v_PreIntegrate (int step) |
virtual SOLVER_UTILS_EXPORT bool | v_PostIntegrate (int step) |
virtual SOLVER_UTILS_EXPORT bool | v_RequireFwdTrans () |
virtual SOLVER_UTILS_EXPORT void | v_SteadyStateResidual (int step, Array< OneD, NekDouble > &L2) |
SOLVER_UTILS_EXPORT void | CheckForRestartTime (NekDouble &time, int &nchk) |
SOLVER_UTILS_EXPORT void | SVVVarDiffCoeff (const Array< OneD, Array< OneD, NekDouble >> vel, StdRegions::VarCoeffMap &varCoeffMap) |
Evaluate the SVV diffusion coefficient according to Moura's paper where it should proportional to h time velocity. More... | |
virtual SOLVER_UTILS_EXPORT bool | v_UpdateTimeStepCheck () |
SOLVER_UTILS_EXPORT void | DoDummyProjection (const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time) |
Perform dummy projection. More... | |
![]() | |
SOLVER_UTILS_EXPORT | EquationSystem (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph) |
Initialises EquationSystem class members. More... | |
virtual SOLVER_UTILS_EXPORT void | v_TransCoeffToPhys () |
Virtual function for transformation to physical space. More... | |
virtual SOLVER_UTILS_EXPORT void | v_TransPhysToCoeff () |
Virtual function for transformation to coefficient space. More... | |
virtual SOLVER_UTILS_EXPORT void | v_SetInitialConditions (NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0) |
virtual SOLVER_UTILS_EXPORT void | v_EvaluateExactSolution (unsigned int field, Array< OneD, NekDouble > &outfield, const NekDouble time) |
virtual SOLVER_UTILS_EXPORT MultiRegions::ExpListSharedPtr | v_GetPressure (void) |
virtual SOLVER_UTILS_EXPORT void | v_ExtraFldOutput (std::vector< Array< OneD, NekDouble >> &fieldcoeffs, std::vector< std::string > &variables) |
Protected Attributes | |
SolverUtils::RiemannSolverSharedPtr | m_riemannSolver |
SolverUtils::AdvectionSharedPtr | m_advObject |
Array< OneD, PulseWaveBoundarySharedPtr > | m_Boundary |
![]() | |
Array< OneD, MultiRegions::ExpListSharedPtr > | m_vessels |
size_t | m_nDomains |
size_t | m_currentDomain |
size_t | m_nVariables |
UpwindTypePulse | m_upwindTypePulse |
Array< OneD, int > | m_fieldPhysOffset |
NekDouble | m_rho |
NekDouble | m_pext |
NekDouble | m_C |
NekDouble | m_RT |
NekDouble | m_pout |
Array< OneD, Array< OneD, NekDouble > > | m_A_0 |
Array< OneD, Array< OneD, NekDouble > > | m_A_0_trace |
Array< OneD, Array< OneD, NekDouble > > | m_beta |
Array< OneD, Array< OneD, NekDouble > > | m_beta_trace |
Array< OneD, Array< OneD, NekDouble > > | m_gamma |
Array< OneD, Array< OneD, NekDouble > > | m_alpha |
Array< OneD, Array< OneD, NekDouble > > | m_alpha_trace |
Array< OneD, Array< OneD, NekDouble > > | m_trace_fwd_normal |
std::map< int, SpatialDomains::CompositeMap > | m_domain |
std::vector< int > | m_domOrder |
Array< OneD, Array< OneD, NekDouble > > | m_pressure |
PulseWavePressureAreaSharedPtr | m_pressureArea |
bool | extraFields = false |
Array< OneD, Array< OneD, NekDouble > > | m_PWV |
Array< OneD, Array< OneD, NekDouble > > | m_W1 |
Array< OneD, Array< OneD, NekDouble > > | m_W2 |
std::vector< std::vector< InterfacePointShPtr > > | m_vesselIntfcs |
std::vector< std::vector< InterfacePointShPtr > > | m_bifurcations |
std::vector< std::vector< InterfacePointShPtr > > | m_mergingJcts |
![]() | |
int | m_abortSteps |
Number of steps between checks for abort conditions. More... | |
int | m_filtersInfosteps |
Number of time steps between outputting filters information. More... | |
int | m_nanSteps |
LibUtilities::TimeIntegrationSchemeSharedPtr | m_intScheme |
Wrapper to the time integration scheme. More... | |
LibUtilities::TimeIntegrationSchemeOperators | m_ode |
The time integration scheme operators to use. More... | |
NekDouble | m_epsilon |
bool | m_explicitDiffusion |
Indicates if explicit or implicit treatment of diffusion is used. More... | |
bool | m_explicitAdvection |
Indicates if explicit or implicit treatment of advection is used. More... | |
bool | m_explicitReaction |
Indicates if explicit or implicit treatment of reaction is used. More... | |
bool | m_homoInitialFwd |
Flag to determine if simulation should start in homogeneous forward transformed state. More... | |
NekDouble | m_steadyStateTol |
Tolerance to which steady state should be evaluated at. More... | |
int | m_steadyStateSteps |
Check for steady state at step interval. More... | |
NekDouble | m_steadyStateRes = 1.0 |
NekDouble | m_steadyStateRes0 = 1.0 |
Array< OneD, Array< OneD, NekDouble > > | m_previousSolution |
Storage for previous solution for steady-state check. More... | |
std::ofstream | m_errFile |
std::vector< int > | m_intVariables |
std::vector< std::pair< std::string, FilterSharedPtr > > | m_filters |
NekDouble | m_filterTimeWarning |
Number of time steps between outputting status information. More... | |
NekDouble | m_TimeIntegLambda = 0.0 |
coefff of spacial derivatives(rhs or m_F in GLM) in calculating the residual of the whole equation(used in unsteady time integrations) More... | |
bool | m_flagImplicitItsStatistics |
bool | m_flagImplicitSolver = false |
Array< OneD, NekDouble > | m_magnitdEstimat |
estimate the magnitude of each conserved varibles More... | |
Array< OneD, NekDouble > | m_locTimeStep |
local time step(notice only for jfnk other see m_cflSafetyFactor) More... | |
NekDouble | m_inArrayNorm = -1.0 |
int | m_TotLinItePerStep = 0 |
int | m_StagesPerStep = 1 |
bool | m_flagUpdatePreconMat |
int | m_maxLinItePerNewton |
int | m_TotNewtonIts = 0 |
int | m_TotLinIts = 0 |
int | m_TotImpStages = 0 |
bool | m_CalcPhysicalAV = true |
flag to update artificial viscosity More... | |
![]() | |
LibUtilities::CommSharedPtr | m_comm |
Communicator. More... | |
bool | m_verbose |
LibUtilities::SessionReaderSharedPtr | m_session |
The session reader. More... | |
std::map< std::string, SolverUtils::SessionFunctionSharedPtr > | m_sessionFunctions |
Map of known SessionFunctions. More... | |
LibUtilities::FieldIOSharedPtr | m_fld |
Field input/output. More... | |
Array< OneD, MultiRegions::ExpListSharedPtr > | m_fields |
Array holding all dependent variables. More... | |
SpatialDomains::BoundaryConditionsSharedPtr | m_boundaryConditions |
Pointer to boundary conditions object. More... | |
SpatialDomains::MeshGraphSharedPtr | m_graph |
Pointer to graph defining mesh. More... | |
std::string | m_sessionName |
Name of the session. More... | |
NekDouble | m_time |
Current time of simulation. More... | |
int | m_initialStep |
Number of the step where the simulation should begin. More... | |
NekDouble | m_fintime |
Finish time of the simulation. More... | |
NekDouble | m_timestep |
Time step size. More... | |
NekDouble | m_timestepMax = -1.0 |
Time step size. More... | |
NekDouble | m_lambda |
Lambda constant in real system if one required. More... | |
NekDouble | m_checktime |
Time between checkpoints. More... | |
NekDouble | m_lastCheckTime |
NekDouble | m_TimeIncrementFactor |
int | m_nchk |
Number of checkpoints written so far. More... | |
int | m_steps |
Number of steps to take. More... | |
int | m_checksteps |
Number of steps between checkpoints. More... | |
int | m_infosteps |
Number of time steps between outputting status information. More... | |
int | m_pararealIter |
Number of parareal time iteration. More... | |
int | m_spacedim |
Spatial dimension (>= expansion dim). More... | |
int | m_expdim |
Expansion dimension. More... | |
bool | m_singleMode |
Flag to determine if single homogeneous mode is used. More... | |
bool | m_halfMode |
Flag to determine if half homogeneous mode is used. More... | |
bool | m_multipleModes |
Flag to determine if use multiple homogenenous modes are used. More... | |
bool | m_useFFT |
Flag to determine if FFT is used for homogeneous transform. More... | |
bool | m_useInitialCondition |
Flag to determine if IC are used. More... | |
bool | m_homogen_dealiasing |
Flag to determine if dealiasing is used for homogeneous simulations. More... | |
bool | m_specHP_dealiasing |
Flag to determine if dealisising is usde for the Spectral/hp element discretisation. More... | |
enum MultiRegions::ProjectionType | m_projectionType |
Type of projection; e.g continuous or discontinuous. More... | |
Array< OneD, Array< OneD, NekDouble > > | m_traceNormals |
Array holding trace normals for DG simulations in the forwards direction. More... | |
Array< OneD, bool > | m_checkIfSystemSingular |
Flag to indicate if the fields should be checked for singularity. More... | |
LibUtilities::FieldMetaDataMap | m_fieldMetaDataMap |
Map to identify relevant solver info to dump in output fields. More... | |
Array< OneD, NekDouble > | m_movingFrameVelsxyz |
Moving frame of reference velocities. More... | |
Array< OneD, NekDouble > | m_movingFrameTheta |
Moving frame of reference angles with respect to the. More... | |
boost::numeric::ublas::matrix< NekDouble > | m_movingFrameProjMat |
Projection matrix for transformation between inertial and moving. More... | |
int | m_NumQuadPointsError |
Number of Quadrature points used to work out the error. More... | |
enum HomogeneousType | m_HomogeneousType |
NekDouble | m_LhomX |
physical length in X direction (if homogeneous) More... | |
NekDouble | m_LhomY |
physical length in Y direction (if homogeneous) More... | |
NekDouble | m_LhomZ |
physical length in Z direction (if homogeneous) More... | |
int | m_npointsX |
number of points in X direction (if homogeneous) More... | |
int | m_npointsY |
number of points in Y direction (if homogeneous) More... | |
int | m_npointsZ |
number of points in Z direction (if homogeneous) More... | |
int | m_HomoDirec |
number of homogenous directions More... | |
Friends | |
class | MemoryManager< PulseWavePropagation > |
Additional Inherited Members | |
![]() | |
NekDouble | m_cflSafetyFactor |
CFL safety factor (comprise between 0 to 1). More... | |
NekDouble | m_cflNonAcoustic |
NekDouble | m_CFLGrowth |
CFL growth rate. More... | |
NekDouble | m_CFLEnd |
maximun cfl in cfl growth More... | |
![]() | |
enum | HomogeneousType { eHomogeneous1D , eHomogeneous2D , eHomogeneous3D , eNotHomogeneous } |
Parameter for homogeneous expansions. More... | |
![]() | |
static std::string | equationSystemTypeLookupIds [] |
Set up the routines based on the weak formulation from "Computational Modelling of 1D blood flow with variable mechanical properties" by S. J. Sherwin et al. The weak formulation (1) reads: \( \sum_{e=1}^{N_{el}} \left[ \left( \frac{\partial \mathbf{U}^{\delta} }{\partial t} , \mathbf{\psi}^{\delta} \right)_{\Omega_e} - \left( \frac{\partial \mathbf{F(\mathbf{U})}^{\delta} } {\partial x}, \mathbf{\psi}^{\delta} \right)_{\Omega_e} + \left[ \mathbf{\psi}^{\delta} \cdot \{ \mathbf{F}^u - \mathbf{F}(\mathbf{U}^{\delta}) \} \right]_{x_e^l}^{x_eû} \right] = 0 \)
Definition at line 50 of file PulseWavePropagation.h.
|
virtual |
Definition at line 138 of file PulseWavePropagation.cpp.
|
protected |
Definition at line 65 of file PulseWavePropagation.cpp.
|
inlinestatic |
Creates an instance of this class.
Definition at line 56 of file PulseWavePropagation.h.
References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), and CellMLToNektar.cellml_metadata::p.
|
protected |
Definition at line 203 of file PulseWavePropagation.cpp.
References Nektar::PulseWaveSystem::m_nVariables, and Vmath::Vcopy().
Referenced by v_InitObject().
|
protected |
Computes the right hand side of (1). The RHS is everything except the term that contains the time derivative \(\frac{\partial \mathbf{U}}{\partial t}\). In case of a Discontinuous Galerkin projection, m_advObject->Advect will be called
Definition at line 150 of file PulseWavePropagation.cpp.
References Nektar::LibUtilities::Timer::AccumulateRegion(), Nektar::PulseWaveSystem::EnforceInterfaceConditions(), m_advObject, Nektar::PulseWaveSystem::m_currentDomain, Nektar::SolverUtils::EquationSystem::m_fields, Nektar::PulseWaveSystem::m_nDomains, Nektar::PulseWaveSystem::m_nVariables, Nektar::SolverUtils::EquationSystem::m_spacedim, Nektar::PulseWaveSystem::m_vessels, Vmath::Neg(), SetPulseWaveBoundaryConditions(), Nektar::LibUtilities::Timer::Start(), and Nektar::LibUtilities::Timer::Stop().
Referenced by v_InitObject().
Definition at line 387 of file PulseWavePropagation.cpp.
References Nektar::PulseWaveSystem::m_A_0_trace, and Nektar::PulseWaveSystem::m_currentDomain.
Referenced by v_InitObject().
Definition at line 397 of file PulseWavePropagation.cpp.
References Nektar::PulseWaveSystem::m_alpha_trace, and Nektar::PulseWaveSystem::m_currentDomain.
Referenced by v_InitObject().
Definition at line 392 of file PulseWavePropagation.cpp.
References Nektar::PulseWaveSystem::m_beta_trace, and Nektar::PulseWaveSystem::m_currentDomain.
Referenced by v_InitObject().
NekDouble Nektar::PulseWavePropagation::GetDomains | ( | ) |
Definition at line 412 of file PulseWavePropagation.cpp.
References Nektar::PulseWaveSystem::m_nDomains.
Referenced by v_InitObject().
|
protected |
DG Pulse Wave Propagation routines:
Calculates the second term of the weak form (1): \( \left( \frac{\partial \mathbf{F(\mathbf{U})}^{\delta} }{\partial x}, \mathbf{\psi}^{\delta} \right)_{\Omega_e} \) The variables of the system are $\mathbf{U} = [A,u]^T$ physfield[0] = A physfield[1] = u flux[0] = F[0] = A*u flux[1] = F[1] = u^2/2 + p/rho
Definition at line 311 of file PulseWavePropagation.cpp.
References Nektar::LibUtilities::Timer::AccumulateRegion(), Nektar::PulseWaveSystem::extraFields, Nektar::PulseWaveSystem::m_A_0, Nektar::PulseWaveSystem::m_alpha, Nektar::PulseWaveSystem::m_beta, Nektar::PulseWaveSystem::m_currentDomain, Nektar::SolverUtils::EquationSystem::m_fields, Nektar::PulseWaveSystem::m_gamma, Nektar::PulseWaveSystem::m_nVariables, Nektar::PulseWaveSystem::m_pressure, Nektar::PulseWaveSystem::m_pressureArea, Nektar::PulseWaveSystem::m_PWV, Nektar::PulseWaveSystem::m_rho, Nektar::SolverUtils::EquationSystem::m_session, Nektar::PulseWaveSystem::m_vessels, Nektar::PulseWaveSystem::m_W1, Nektar::PulseWaveSystem::m_W2, Nektar::LibUtilities::Timer::Start(), and Nektar::LibUtilities::Timer::Stop().
Referenced by v_InitObject().
Definition at line 402 of file PulseWavePropagation.cpp.
References Nektar::PulseWaveSystem::m_currentDomain, and Nektar::PulseWaveSystem::m_trace_fwd_normal.
Referenced by v_InitObject().
NekDouble Nektar::PulseWavePropagation::GetRho | ( | ) |
Definition at line 407 of file PulseWavePropagation.cpp.
References Nektar::PulseWaveSystem::m_rho.
Referenced by v_InitObject().
|
protected |
Does the projection between ... space and the ... space. Also checks for
Q-inflow boundary conditions at the inflow of the current arterial segment and applies the Q-inflow if specified
Definition at line 221 of file PulseWavePropagation.cpp.
References Nektar::LibUtilities::Timer::AccumulateRegion(), Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::CreateInstance(), Nektar::GetBoundaryFactory(), Nektar::PulseWaveSystem::m_A_0, Nektar::PulseWaveSystem::m_alpha, Nektar::PulseWaveSystem::m_beta, m_Boundary, Nektar::PulseWaveSystem::m_nDomains, Nektar::PulseWaveSystem::m_pressureArea, Nektar::SolverUtils::EquationSystem::m_session, Nektar::PulseWaveSystem::m_vessels, Nektar::SolverUtils::EquationSystem::SetBoundaryConditions(), Nektar::LibUtilities::Timer::Start(), and Nektar::LibUtilities::Timer::Stop().
Referenced by DoOdeRhs().
|
overrideprotectedvirtual |
Print summary routine, calls virtual routine reimplemented in UnsteadySystem
Reimplemented from Nektar::SolverUtils::UnsteadySystem.
Definition at line 421 of file PulseWavePropagation.cpp.
References Nektar::SolverUtils::UnsteadySystem::v_GenerateSummary().
|
overrideprotectedvirtual |
Initialisation routine for multidomain solver. Sets up the expansions for every arterial segment (m_vessels) and for one complete field m_outfield which is needed to write the postprocessing output. Also determines which upwind strategy is used (currently only upwinding scheme available) and reads blodd flow specific parameters from the inputfile
Reimplemented from Nektar::PulseWaveSystem.
Definition at line 72 of file PulseWavePropagation.cpp.
References ASSERTL0, Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::CreateInstance(), Nektar::LibUtilities::TimeIntegrationSchemeOperators::DefineOdeRhs(), Nektar::LibUtilities::TimeIntegrationSchemeOperators::DefineProjection(), DoOdeProjection(), DoOdeRhs(), Nektar::eUpwindPulse, GetA0(), Nektar::SolverUtils::GetAdvectionFactory(), GetAlpha(), GetBeta(), GetDomains(), GetFluxVector(), GetN(), Nektar::GetPressureAreaFactory(), GetRho(), Nektar::SolverUtils::GetRiemannSolverFactory(), m_advObject, Nektar::SolverUtils::UnsteadySystem::m_explicitAdvection, Nektar::SolverUtils::EquationSystem::m_fields, Nektar::SolverUtils::UnsteadySystem::m_ode, Nektar::PulseWaveSystem::m_pressureArea, m_riemannSolver, Nektar::SolverUtils::EquationSystem::m_session, Nektar::PulseWaveSystem::m_upwindTypePulse, Nektar::PulseWaveSystem::m_vessels, and Nektar::PulseWaveSystem::v_InitObject().
|
friend |
Definition at line 1 of file PulseWavePropagation.h.
|
static |
Name of class.
Definition at line 68 of file PulseWavePropagation.h.
|
protected |
Definition at line 103 of file PulseWavePropagation.h.
Referenced by DoOdeRhs(), and v_InitObject().
|
protected |
Definition at line 105 of file PulseWavePropagation.h.
Referenced by SetPulseWaveBoundaryConditions().
|
protected |
Definition at line 102 of file PulseWavePropagation.h.
Referenced by v_InitObject().