Nektar++
|
Base class for unsteady solvers. More...
#include <PulseWaveSystem.h>
Public Member Functions | |
virtual | ~PulseWaveSystem () |
Destructor. More... | |
int | GetNdomains () |
Array< OneD, MultiRegions::ExpListSharedPtr > | UpdateVessels (void) |
void | CalcCharacteristicVariables (int omega) |
Public Member Functions inherited from Nektar::SolverUtils::UnsteadySystem | |
virtual SOLVER_UTILS_EXPORT | ~UnsteadySystem () |
Destructor. More... | |
SOLVER_UTILS_EXPORT NekDouble | GetTimeStep (const Array< OneD, const Array< OneD, NekDouble > > &inarray) |
Calculate the larger time-step mantaining the problem stable. More... | |
Public Member Functions inherited from Nektar::SolverUtils::EquationSystem | |
virtual SOLVER_UTILS_EXPORT | ~EquationSystem () |
Destructor. More... | |
SOLVER_UTILS_EXPORT void | SetUpTraceNormals (void) |
SOLVER_UTILS_EXPORT void | InitObject () |
Initialises the members of this object. More... | |
SOLVER_UTILS_EXPORT void | DoInitialise () |
Perform any initialisation necessary before solving the problem. More... | |
SOLVER_UTILS_EXPORT void | DoSolve () |
Solve the problem. More... | |
SOLVER_UTILS_EXPORT void | TransCoeffToPhys () |
Transform from coefficient to physical space. More... | |
SOLVER_UTILS_EXPORT void | TransPhysToCoeff () |
Transform from physical to coefficient space. More... | |
SOLVER_UTILS_EXPORT void | Output () |
Perform output operations after solve. More... | |
SOLVER_UTILS_EXPORT NekDouble | LinfError (unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray) |
Linf error computation. More... | |
SOLVER_UTILS_EXPORT std::string | GetSessionName () |
Get Session name. More... | |
template<class T > | |
boost::shared_ptr< T > | as () |
SOLVER_UTILS_EXPORT void | ResetSessionName (std::string newname) |
Reset Session name. More... | |
SOLVER_UTILS_EXPORT LibUtilities::SessionReaderSharedPtr | GetSession () |
Get Session name. More... | |
SOLVER_UTILS_EXPORT MultiRegions::ExpListSharedPtr | GetPressure () |
Get pressure field if available. More... | |
SOLVER_UTILS_EXPORT void | PrintSummary (std::ostream &out) |
Print a summary of parameters and solver characteristics. More... | |
SOLVER_UTILS_EXPORT void | SetLambda (NekDouble lambda) |
Set parameter m_lambda. More... | |
SOLVER_UTILS_EXPORT void | EvaluateFunction (Array< OneD, Array< OneD, NekDouble > > &pArray, std::string pFunctionName, const NekDouble pTime=0.0, const int domain=0) |
Evaluates a function as specified in the session file. More... | |
SOLVER_UTILS_EXPORT void | EvaluateFunction (std::vector< std::string > pFieldNames, Array< OneD, Array< OneD, NekDouble > > &pFields, const std::string &pName, const NekDouble &pTime=0.0, const int domain=0) |
Populate given fields with the function from session. More... | |
SOLVER_UTILS_EXPORT void | EvaluateFunction (std::vector< std::string > pFieldNames, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const std::string &pName, const NekDouble &pTime=0.0, const int domain=0) |
Populate given fields with the function from session. More... | |
SOLVER_UTILS_EXPORT void | EvaluateFunction (std::string pFieldName, Array< OneD, NekDouble > &pArray, const std::string &pFunctionName, const NekDouble &pTime=0.0, const int domain=0) |
SOLVER_UTILS_EXPORT std::string | DescribeFunction (std::string pFieldName, const std::string &pFunctionName, const int domain) |
Provide a description of a function for a given field name. More... | |
SOLVER_UTILS_EXPORT void | InitialiseBaseFlow (Array< OneD, Array< OneD, NekDouble > > &base) |
Perform initialisation of the base flow. More... | |
SOLVER_UTILS_EXPORT void | SetInitialConditions (NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0) |
Initialise the data in the dependent fields. More... | |
SOLVER_UTILS_EXPORT void | EvaluateExactSolution (int field, Array< OneD, NekDouble > &outfield, const NekDouble time) |
Evaluates an exact solution. More... | |
SOLVER_UTILS_EXPORT NekDouble | L2Error (unsigned int field, const Array< OneD, NekDouble > &exactsoln, bool Normalised=false) |
Compute the L2 error between fields and a given exact solution. More... | |
SOLVER_UTILS_EXPORT NekDouble | L2Error (unsigned int field, bool Normalised=false) |
Compute the L2 error of the fields. More... | |
SOLVER_UTILS_EXPORT Array < OneD, NekDouble > | ErrorExtraPoints (unsigned int field) |
Compute error (L2 and L_inf) over an larger set of quadrature points return [L2 Linf]. More... | |
SOLVER_UTILS_EXPORT void | WeakAdvectionGreensDivergenceForm (const Array< OneD, Array< OneD, NekDouble > > &F, Array< OneD, NekDouble > &outarray) |
Compute the inner product . More... | |
SOLVER_UTILS_EXPORT void | WeakAdvectionDivergenceForm (const Array< OneD, Array< OneD, NekDouble > > &F, Array< OneD, NekDouble > &outarray) |
Compute the inner product . More... | |
SOLVER_UTILS_EXPORT void | WeakAdvectionNonConservativeForm (const Array< OneD, Array< OneD, NekDouble > > &V, const Array< OneD, const NekDouble > &u, Array< OneD, NekDouble > &outarray, bool UseContCoeffs=false) |
Compute the inner product . More... | |
f SOLVER_UTILS_EXPORT void | AdvectionNonConservativeForm (const Array< OneD, Array< OneD, NekDouble > > &V, const Array< OneD, const NekDouble > &u, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wk=NullNekDouble1DArray) |
Compute the non-conservative advection. More... | |
SOLVER_UTILS_EXPORT void | WeakDGAdvection (const Array< OneD, Array< OneD, NekDouble > > &InField, Array< OneD, Array< OneD, NekDouble > > &OutField, bool NumericalFluxIncludesNormal=true, bool InFieldIsInPhysSpace=false, int nvariables=0) |
Calculate the weak discontinuous Galerkin advection. More... | |
SOLVER_UTILS_EXPORT void | WeakDGDiffusion (const Array< OneD, Array< OneD, NekDouble > > &InField, Array< OneD, Array< OneD, NekDouble > > &OutField, bool NumericalFluxIncludesNormal=true, bool InFieldIsInPhysSpace=false) |
Calculate weak DG Diffusion in the LDG form. More... | |
SOLVER_UTILS_EXPORT void | Checkpoint_Output (const int n) |
Write checkpoint file of m_fields. More... | |
SOLVER_UTILS_EXPORT void | Checkpoint_Output (const int n, MultiRegions::ExpListSharedPtr &field, std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables) |
Write checkpoint file of custom data fields. More... | |
SOLVER_UTILS_EXPORT void | Checkpoint_BaseFlow (const int n) |
Write base flow file of m_fields. More... | |
SOLVER_UTILS_EXPORT void | WriteFld (const std::string &outname) |
Write field data to the given filename. More... | |
SOLVER_UTILS_EXPORT void | WriteFld (const std::string &outname, MultiRegions::ExpListSharedPtr &field, std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables) |
Write input fields to the given filename. More... | |
SOLVER_UTILS_EXPORT void | ImportFld (const std::string &infile, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields) |
Input field data from the given file. More... | |
SOLVER_UTILS_EXPORT void | ImportFldToMultiDomains (const std::string &infile, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const int ndomains) |
Input field data from the given file to multiple domains. More... | |
SOLVER_UTILS_EXPORT void | ImportFld (const std::string &infile, std::vector< std::string > &fieldStr, Array< OneD, Array< OneD, NekDouble > > &coeffs) |
Output a field. Input field data into array from the given file. More... | |
SOLVER_UTILS_EXPORT void | ImportFld (const std::string &infile, MultiRegions::ExpListSharedPtr &pField, std::string &pFieldName) |
Output a field. Input field data into ExpList from the given file. More... | |
SOLVER_UTILS_EXPORT void | ScanForHistoryPoints () |
Builds map of which element holds each history point. More... | |
SOLVER_UTILS_EXPORT void | WriteHistoryData (std::ostream &out) |
Probe each history point and write to file. More... | |
SOLVER_UTILS_EXPORT void | SessionSummary (SummaryList &vSummary) |
Write out a session summary. More... | |
SOLVER_UTILS_EXPORT Array < OneD, MultiRegions::ExpListSharedPtr > & | UpdateFields () |
SOLVER_UTILS_EXPORT LibUtilities::FieldMetaDataMap & | UpdateFieldMetaDataMap () |
Get hold of FieldInfoMap so it can be updated. More... | |
SOLVER_UTILS_EXPORT NekDouble | GetFinalTime () |
Return final time. More... | |
SOLVER_UTILS_EXPORT int | GetNcoeffs () |
SOLVER_UTILS_EXPORT int | GetNcoeffs (const int eid) |
SOLVER_UTILS_EXPORT int | GetNumExpModes () |
SOLVER_UTILS_EXPORT const Array< OneD, int > | GetNumExpModesPerExp () |
SOLVER_UTILS_EXPORT int | GetNvariables () |
SOLVER_UTILS_EXPORT const std::string | GetVariable (unsigned int i) |
SOLVER_UTILS_EXPORT int | GetTraceTotPoints () |
SOLVER_UTILS_EXPORT int | GetTraceNpoints () |
SOLVER_UTILS_EXPORT int | GetExpSize () |
SOLVER_UTILS_EXPORT int | GetPhys_Offset (int n) |
SOLVER_UTILS_EXPORT int | GetCoeff_Offset (int n) |
SOLVER_UTILS_EXPORT int | GetTotPoints () |
SOLVER_UTILS_EXPORT int | GetTotPoints (int n) |
SOLVER_UTILS_EXPORT int | GetNpoints () |
SOLVER_UTILS_EXPORT int | GetNumElmVelocity () |
SOLVER_UTILS_EXPORT int | GetSteps () |
SOLVER_UTILS_EXPORT NekDouble | GetTimeStep () |
SOLVER_UTILS_EXPORT void | CopyFromPhysField (const int i, Array< OneD, NekDouble > &output) |
SOLVER_UTILS_EXPORT void | CopyToPhysField (const int i, Array< OneD, NekDouble > &output) |
SOLVER_UTILS_EXPORT void | SetSteps (const int steps) |
SOLVER_UTILS_EXPORT void | ZeroPhysFields () |
SOLVER_UTILS_EXPORT void | FwdTransFields () |
SOLVER_UTILS_EXPORT void | GetFluxVector (const int i, Array< OneD, Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, NekDouble > > &flux) |
SOLVER_UTILS_EXPORT void | GetFluxVector (const int i, Array< OneD, Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, NekDouble > > &fluxX, Array< OneD, Array< OneD, NekDouble > > &fluxY) |
SOLVER_UTILS_EXPORT void | GetFluxVector (const int i, const int j, Array< OneD, Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, NekDouble > > &flux) |
SOLVER_UTILS_EXPORT void | NumericalFlux (Array< OneD, Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, NekDouble > > &numflux) |
SOLVER_UTILS_EXPORT void | NumericalFlux (Array< OneD, Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, NekDouble > > &numfluxX, Array< OneD, Array< OneD, NekDouble > > &numfluxY) |
SOLVER_UTILS_EXPORT void | NumFluxforScalar (const Array< OneD, Array< OneD, NekDouble > > &ufield, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &uflux) |
SOLVER_UTILS_EXPORT void | NumFluxforVector (const Array< OneD, Array< OneD, NekDouble > > &ufield, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &qfield, Array< OneD, Array< OneD, NekDouble > > &qflux) |
SOLVER_UTILS_EXPORT void | SetModifiedBasis (const bool modbasis) |
SOLVER_UTILS_EXPORT int | NoCaseStringCompare (const string &s1, const string &s2) |
Perform a case-insensitive string comparison. More... | |
SOLVER_UTILS_EXPORT int | GetCheckpointNumber () |
SOLVER_UTILS_EXPORT void | SetCheckpointNumber (int num) |
SOLVER_UTILS_EXPORT int | GetCheckpointSteps () |
SOLVER_UTILS_EXPORT void | SetCheckpointSteps (int num) |
SOLVER_UTILS_EXPORT void | SetTime (const NekDouble time) |
SOLVER_UTILS_EXPORT void | SetInitialStep (const int step) |
SOLVER_UTILS_EXPORT void | SetBoundaryConditions (NekDouble time) |
Evaluates the boundary conditions at the given time. More... | |
virtual SOLVER_UTILS_EXPORT bool | v_NegatedOp () |
Virtual function to identify if operator is negated in DoSolve. More... | |
Protected Attributes | |
Array< OneD, MultiRegions::ExpListSharedPtr > | m_vessels |
int | m_nDomains |
int | m_currentDomain |
int | 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_trace_fwd_normal |
std::vector< std::vector < InterfacePointShPtr > > | m_vesselJcts |
std::vector< std::vector < InterfacePointShPtr > > | m_bifurcations |
std::vector< std::vector < InterfacePointShPtr > > | m_mergingJcts |
Protected Attributes inherited from Nektar::SolverUtils::UnsteadySystem | |
int | m_infosteps |
Number of time steps between outputting status information. More... | |
LibUtilities::TimeIntegrationWrapperSharedPtr | m_intScheme |
Wrapper to the time integration scheme. More... | |
LibUtilities::TimeIntegrationSchemeOperators | m_ode |
The time integration scheme operators to use. More... | |
LibUtilities::TimeIntegrationSolutionSharedPtr | m_intSoln |
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... | |
std::vector< int > | m_intVariables |
std::vector< FilterSharedPtr > | m_filters |
Protected Attributes inherited from Nektar::SolverUtils::EquationSystem | |
LibUtilities::CommSharedPtr | m_comm |
Communicator. More... | |
LibUtilities::SessionReaderSharedPtr | m_session |
The session reader. More... | |
LibUtilities::FieldIOSharedPtr | m_fld |
Field input/output. More... | |
map< std::string, Array< OneD, Array< OneD, float > > > | m_interpWeights |
Map of the interpolation weights for a specific filename. More... | |
map< std::string, Array< OneD, Array< OneD, unsigned int > > > | m_interpInds |
Map of the interpolation indices for a specific filename. More... | |
Array< OneD, MultiRegions::ExpListSharedPtr > | m_fields |
Array holding all dependent variables. More... | |
Array< OneD, MultiRegions::ExpListSharedPtr > | m_base |
Base fields. More... | |
Array< OneD, MultiRegions::ExpListSharedPtr > | m_derivedfields |
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_lambda |
Lambda constant in real system if one required. More... | |
std::set< std::string > | m_loadedFields |
NekDouble | m_checktime |
Time between checkpoints. More... | |
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_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_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, Array< OneD, Array< OneD, NekDouble > > > | m_gradtan |
1 x nvariable x nq More... | |
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > | m_tanbasis |
2 x m_spacedim x nq 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... | |
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... | |
int | m_NumMode |
Mode to use in case of single mode analysis. More... | |
Private Member Functions | |
void | SetUpDomainInterfaces (void) |
void | FillDataFromInterfacePoint (InterfacePointShPtr &I, const Array< OneD, const Array< OneD, NekDouble > > &field, NekDouble &A, NekDouble &u, NekDouble &beta, NekDouble &A_0) |
Additional Inherited Members | |
Public Attributes inherited from Nektar::SolverUtils::UnsteadySystem | |
NekDouble | m_cflSafetyFactor |
CFL safety factor (comprise between 0 to 1). More... | |
Protected Types inherited from Nektar::SolverUtils::EquationSystem | |
enum | HomogeneousType { eHomogeneous1D, eHomogeneous2D, eHomogeneous3D, eNotHomogeneous } |
Parameter for homogeneous expansions. More... | |
Base class for unsteady solvers.
Initialises the arterial subdomains in m_vessels and sets up all domain-linking conditions (bifurcations, junctions, merging flows). Detects the network structure and assigns boundary conditons. Also provides the underlying timestepping framework for pulse wave solvers including the general timestepping routines.
Definition at line 86 of file PulseWaveSystem.h.
|
virtual |
|
protected |
Initialises PulseWaveSystem class members.
Processes SolverInfo parameters from the session file and sets up timestepping-specific code.
m_Session | Session object to read parameters from. |
Definition at line 64 of file PulseWaveSystem.cpp.
|
protected |
Riemann Problem for Bifurcation.
Solves the Riemann problem at a bifurcation by assuming subsonic flow at both sides of the boundary and by applying conservation of mass and continuity of the total pressure The other 3 missing equations come from the characteristic variables. For further information see "Pulse WavePropagation in the human vascular system" Section 3.4.4
Definition at line 652 of file PulseWaveSystem.cpp.
References ASSERTL0, and m_rho.
Referenced by EnforceInterfaceConditions().
void Nektar::PulseWaveSystem::CalcCharacteristicVariables | ( | int | omega | ) |
Definition at line 1291 of file PulseWaveSystem.cpp.
References m_beta, m_rho, m_vessels, Vmath::Smul(), Vmath::Vadd(), Vmath::Vmul(), Vmath::Vsqrt(), and Vmath::Vsub().
|
protected |
Writes the .fld file at the end of the simulation. Similar to the normal v_Output however the Multidomain output has to be prepared.
Definition at line 1098 of file PulseWaveSystem.cpp.
References Nektar::SolverUtils::EquationSystem::m_sessionName, and WriteVessels().
Referenced by v_DoSolve().
|
protected |
Definition at line 563 of file PulseWaveSystem.cpp.
References BifurcationRiemann(), FillDataFromInterfacePoint(), JunctionRiemann(), m_bifurcations, m_mergingJcts, m_nVariables, m_vesselJcts, m_vessels, and MergingRiemann().
Referenced by Nektar::PulseWavePropagation::DoOdeRhs().
|
private |
Definition at line 537 of file PulseWaveSystem.cpp.
References m_A_0_trace, m_beta_trace, m_fieldPhysOffset, m_nVariables, m_vessels, and Nektar::NekMeshUtils::vert.
Referenced by EnforceInterfaceConditions().
|
inline |
Definition at line 92 of file PulseWaveSystem.h.
|
protected |
Riemann Problem for Junction.
Solves the Riemann problem at an interdomain junction by assuming subsonic flow at both sides of the boundary and by applying conservation of mass and continuity of the total pressure The other 2 missing equations come from the characteristic variables. For further information see "Pulse WavePropagation in the human vascular system" Section 3.4.
Definition at line 968 of file PulseWaveSystem.cpp.
References ASSERTL0, and m_rho.
Referenced by EnforceInterfaceConditions().
|
protected |
Links the subdomains.
|
protected |
Riemann Problem for Merging Flow.
Solves the Riemann problem at an merging flow condition by assuming subsonic flow at both sides of the boundary and by applying conservation of mass and continuity of the total pressure The other 3 missing equations come from the characteristic variables. For further information see "Pulse WavePropagation in the human vascular system" Section 3.4.4
Definition at line 811 of file PulseWaveSystem.cpp.
References ASSERTL0, and m_rho.
Referenced by EnforceInterfaceConditions().
Definition at line 262 of file PulseWaveSystem.cpp.
References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, Nektar::SpatialDomains::eDirichlet, Nektar::SpatialDomains::eNotDefined, ErrorUtil::ewarning, Nektar::iterator, m_bifurcations, m_mergingJcts, m_nDomains, m_nVariables, m_vesselJcts, m_vessels, and NEKERROR.
Referenced by v_InitObject().
|
inline |
Definition at line 97 of file PulseWaveSystem.h.
Sets up initial conditions.
Initialisation routine for multiple subdomain case. Sets the initial conditions for all arterial subdomains read from the inputfile. Sets the material properties and the A_0 area for all subdomains and fills the domain-linking boundary conditions with the initial values of their domain.
Reimplemented from Nektar::SolverUtils::UnsteadySystem.
Definition at line 427 of file PulseWaveSystem.cpp.
References Nektar::SolverUtils::EquationSystem::m_fields, m_nDomains, m_nVariables, Nektar::SolverUtils::EquationSystem::m_session, m_vessels, and Nektar::SolverUtils::EquationSystem::SetInitialConditions().
Solves an unsteady problem.
NEEDS Updating:
DoSolve routine for PulseWavePropagation with multiple subdomains taken from UnsteadySystem and modified for multidomain case. Initialises the time integration scheme (as specified in the session file), and perform the time integration. Within the timestepping loop the following is done: 1. Link all arterial segments according to the network structure, solve the Riemann problem between different arterial segments and assign the values to the boundary conditions (LinkSubdomains) 2. Every arterial segment is solved independentl for this timestep. This is done by handing the solution vector and the right hand side m_ode, which is the PulseWavePropagation class in this example over to the time integration scheme
Reimplemented from Nektar::SolverUtils::UnsteadySystem.
Definition at line 472 of file PulseWaveSystem.cpp.
References CheckPoint_Output(), Nektar::SolverUtils::EquationSystem::m_checksteps, Nektar::SolverUtils::EquationSystem::m_fields, Nektar::SolverUtils::UnsteadySystem::m_infosteps, Nektar::SolverUtils::UnsteadySystem::m_intScheme, Nektar::SolverUtils::UnsteadySystem::m_intSoln, m_nDomains, m_nVariables, Nektar::SolverUtils::UnsteadySystem::m_ode, Nektar::SolverUtils::EquationSystem::m_session, Nektar::SolverUtils::EquationSystem::m_steps, Nektar::SolverUtils::EquationSystem::m_time, Nektar::SolverUtils::EquationSystem::m_timestep, m_vessels, Nektar::Timer::Start(), Nektar::Timer::Stop(), Nektar::Timer::TimePerTest(), and Vmath::Vcopy().
|
protectedvirtual |
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
Gets the Material Properties of each arterial segment specified in the inputfile from section MaterialProperties
Also gets the Area at static equilibrium A_0 specified in the inputfile.
Having found these points also extract the values at the trace points and the normal direction consistent with the left adjacent definition of Fwd and Bwd
Reimplemented from Nektar::SolverUtils::UnsteadySystem.
Reimplemented in Nektar::PulseWavePropagation, and Nektar::PulseWaveSystemOutput.
Definition at line 85 of file PulseWaveSystem.cpp.
References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, Nektar::MultiRegions::eDiscontinuous, Nektar::SolverUtils::EquationSystem::EvaluateFunction(), Nektar::SolverUtils::EquationSystem::GetTraceTotPoints(), m_A_0, m_A_0_trace, m_beta, m_beta_trace, Nektar::SolverUtils::EquationSystem::m_checksteps, m_fieldPhysOffset, Nektar::SolverUtils::EquationSystem::m_fields, Nektar::SolverUtils::EquationSystem::m_fintime, Nektar::SolverUtils::EquationSystem::m_graph, Nektar::SolverUtils::UnsteadySystem::m_infosteps, m_nDomains, Nektar::SolverUtils::EquationSystem::m_NumQuadPointsError, m_nVariables, m_pext, Nektar::SolverUtils::EquationSystem::m_projectionType, m_rho, Nektar::SolverUtils::EquationSystem::m_session, Nektar::SolverUtils::EquationSystem::m_steps, Nektar::SolverUtils::EquationSystem::m_time, Nektar::SolverUtils::EquationSystem::m_timestep, m_trace_fwd_normal, m_upwindTypePulse, m_vessels, SetUpDomainInterfaces(), Nektar::SIZE_UpwindTypePulse, Nektar::UpwindTypeMapPulse, and Nektar::SolverUtils::EquationSystem::ZeroPhysFields().
Referenced by Nektar::PulseWaveSystemOutput::v_InitObject(), and Nektar::PulseWavePropagation::v_InitObject().
|
protectedvirtual |
Compute the L2 error between fields and a given exact solution.
Reimplemented from Nektar::SolverUtils::EquationSystem.
Definition at line 1157 of file PulseWaveSystem.cpp.
References ASSERTL0, Nektar::SolverUtils::EquationSystem::EvaluateFunction(), Nektar::SolverUtils::EquationSystem::GetNpoints(), Nektar::SolverUtils::EquationSystem::m_comm, m_nDomains, Nektar::SolverUtils::EquationSystem::m_NumQuadPointsError, m_nVariables, Nektar::SolverUtils::EquationSystem::m_session, Nektar::SolverUtils::EquationSystem::m_time, m_vessels, and Nektar::LibUtilities::ReduceSum.
|
protectedvirtual |
Compute the L_inf error between fields and a given exact solution.
Compute the error in the L_inf-norm
field | The field to compare. |
exactsoln | The exact solution to compare with. |
Reimplemented from Nektar::SolverUtils::EquationSystem.
Definition at line 1241 of file PulseWaveSystem.cpp.
References ASSERTL0, Nektar::SolverUtils::EquationSystem::EvaluateFunction(), Nektar::SolverUtils::EquationSystem::GetNpoints(), m_nDomains, Nektar::SolverUtils::EquationSystem::m_NumQuadPointsError, m_nVariables, Nektar::SolverUtils::EquationSystem::m_session, Nektar::SolverUtils::EquationSystem::m_time, and m_vessels.
Writes the .fld file at the end of the simulation. Similar to the normal v_Output however the Multidomain output has to be prepared.
Write the field data to file. The file is named according to the session name with the extension .fld appended.
Reimplemented from Nektar::SolverUtils::EquationSystem.
Definition at line 1082 of file PulseWaveSystem.cpp.
References Nektar::SolverUtils::EquationSystem::m_sessionName, and WriteVessels().
|
protected |
Write input fields to the given filename.
Writes the field data to a file with the given filename.
outname | Filename to write to. |
Definition at line 1111 of file PulseWaveSystem.cpp.
References Nektar::SolverUtils::EquationSystem::m_fieldMetaDataMap, m_nDomains, m_nVariables, Nektar::SolverUtils::EquationSystem::m_session, Nektar::SolverUtils::EquationSystem::m_time, m_vessels, and Nektar::LibUtilities::Write().
Referenced by CheckPoint_Output(), and v_Output().
Definition at line 119 of file PulseWaveSystem.h.
Referenced by Nektar::PulseWavePropagation::SetPulseWaveBoundaryConditions(), Nektar::PulseWavePropagation::v_GetFluxVector(), and v_InitObject().
Definition at line 120 of file PulseWaveSystem.h.
Referenced by FillDataFromInterfacePoint(), v_InitObject(), and Nektar::PulseWavePropagation::v_NumericalFlux().
Definition at line 121 of file PulseWaveSystem.h.
Referenced by CalcCharacteristicVariables(), Nektar::PulseWavePropagation::SetPulseWaveBoundaryConditions(), Nektar::PulseWavePropagation::v_GetFluxVector(), and v_InitObject().
Definition at line 122 of file PulseWaveSystem.h.
Referenced by FillDataFromInterfacePoint(), v_InitObject(), and Nektar::PulseWavePropagation::v_NumericalFlux().
|
protected |
Definition at line 127 of file PulseWaveSystem.h.
Referenced by EnforceInterfaceConditions(), and SetUpDomainInterfaces().
|
protected |
Definition at line 115 of file PulseWaveSystem.h.
|
protected |
Definition at line 107 of file PulseWaveSystem.h.
Referenced by Nektar::PulseWavePropagation::DoOdeRhs(), Nektar::PulseWavePropagation::v_GetFluxVector(), and Nektar::PulseWavePropagation::v_NumericalFlux().
Definition at line 111 of file PulseWaveSystem.h.
Referenced by FillDataFromInterfacePoint(), and v_InitObject().
|
protected |
Definition at line 128 of file PulseWaveSystem.h.
Referenced by EnforceInterfaceConditions(), and SetUpDomainInterfaces().
|
protected |
Definition at line 106 of file PulseWaveSystem.h.
Referenced by Nektar::PulseWavePropagation::DoOdeRhs(), Nektar::PulseWavePropagation::SetPulseWaveBoundaryConditions(), SetUpDomainInterfaces(), v_DoInitialise(), v_DoSolve(), v_InitObject(), v_L2Error(), v_LinfError(), and WriteVessels().
|
protected |
Definition at line 108 of file PulseWaveSystem.h.
Referenced by Nektar::PulseWavePropagation::DoOdeProjection(), Nektar::PulseWavePropagation::DoOdeRhs(), EnforceInterfaceConditions(), FillDataFromInterfacePoint(), SetUpDomainInterfaces(), v_DoInitialise(), v_DoSolve(), Nektar::PulseWavePropagation::v_GetFluxVector(), v_InitObject(), v_L2Error(), v_LinfError(), Nektar::PulseWavePropagation::v_NumericalFlux(), and WriteVessels().
|
protected |
Definition at line 113 of file PulseWaveSystem.h.
Referenced by Nektar::PulseWavePropagation::RiemannSolverUpwind(), Nektar::PulseWavePropagation::v_GetFluxVector(), and v_InitObject().
|
protected |
Definition at line 117 of file PulseWaveSystem.h.
|
protected |
Definition at line 112 of file PulseWaveSystem.h.
Referenced by BifurcationRiemann(), CalcCharacteristicVariables(), JunctionRiemann(), MergingRiemann(), Nektar::PulseWavePropagation::RiemannSolverUpwind(), Nektar::PulseWavePropagation::v_GetFluxVector(), and v_InitObject().
|
protected |
Definition at line 116 of file PulseWaveSystem.h.
Definition at line 123 of file PulseWaveSystem.h.
Referenced by v_InitObject(), and Nektar::PulseWavePropagation::v_NumericalFlux().
|
protected |
Definition at line 109 of file PulseWaveSystem.h.
Referenced by v_InitObject(), and Nektar::PulseWavePropagation::v_NumericalFlux().
|
protected |
Definition at line 126 of file PulseWaveSystem.h.
Referenced by EnforceInterfaceConditions(), and SetUpDomainInterfaces().
|
protected |
Definition at line 105 of file PulseWaveSystem.h.
Referenced by CalcCharacteristicVariables(), Nektar::PulseWavePropagation::DoOdeRhs(), EnforceInterfaceConditions(), FillDataFromInterfacePoint(), Nektar::PulseWavePropagation::SetPulseWaveBoundaryConditions(), SetUpDomainInterfaces(), v_DoInitialise(), v_DoSolve(), Nektar::PulseWavePropagation::v_GetFluxVector(), Nektar::PulseWavePropagation::v_InitObject(), v_InitObject(), v_L2Error(), v_LinfError(), Nektar::PulseWavePropagation::v_NumericalFlux(), and WriteVessels().