35#ifndef NEKTAR_SOLVERUTILS_DRIVERPFASST_H
36#define NEKTAR_SOLVERUTILS_DRIVERPFASST_H
78 std::ostream &out = std::cout)
override;
100 const bool update =
false);
112 const size_t fineLevel,
SDCarray &out,
bool forced);
119 const size_t coarseLevel,
SDCarray &out);
127 void Correct(
const size_t coarseLevel,
129 const size_t fineLevel,
#define SOLVER_UTILS_EXPORT
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
Base class for the development of solvers.
void RestrictResidual(const size_t timeLevel)
void UpdateFirstQuadrature(const size_t timeLevel)
void InitialiseSDCScheme(void)
void AssertParameters(void)
void RestrictSolution(const size_t timeLevel)
Array< OneD, Array< OneD, NekDouble > > m_ImatFtoC
Array< OneD, Array< OneD, NekDouble > > m_ImatCtoF
void Restrict(const size_t fineLevel, const SDCarray &in, const size_t coarseLevel, SDCarray &out)
void ResidualEval(const NekDouble time, const size_t timeLevel, const size_t n)
SOLVER_UTILS_EXPORT ~DriverPFASST() override=default
Destructor.
static std::string className
Name of the class.
void InterpolateResidual(const size_t timeLevel)
void CorrectSolution(const size_t timeLevel)
void EvaluateSDCResidualNorm(const size_t timeLevel)
void IntegratedResidualEval(const size_t timeLevel)
void RunSweep(const NekDouble time, const size_t timeLevel, const bool update=false)
static DriverSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
Creates an instance of this class.
void Interpolate(const size_t coarseLevel, const SDCarray &in, const size_t fineLevel, SDCarray &out, bool forced)
void ComputeFASCorrection(const size_t timeLevel)
Array< OneD, SDCarray > m_solutionRest
void CorrectInitialResidual(const size_t timeLevel)
SOLVER_UTILS_EXPORT void v_Execute(std::ostream &out=std::cout) override
Virtual function for solve implementation.
void WriteOutput(const size_t step, const NekDouble time)
void CorrectInitialSolution(const size_t timeLevel)
Array< OneD, std::shared_ptr< LibUtilities::TimeIntegrationSchemeSDC > > m_SDCSolver
Array< OneD, SDCarray > m_correction
SOLVER_UTILS_EXPORT void v_InitObject(std::ostream &out=std::cout) override
Virtual function for initialisation implementation.
Array< OneD, SDCarray > m_storage
Array< OneD, SDCarray > m_integralRest
void Correct(const size_t coarseLevel, const Array< OneD, Array< OneD, NekDouble > > &in, const size_t fineLevel, Array< OneD, Array< OneD, NekDouble > > &out, bool forced)
Array< OneD, SDCarray > m_residualRest
void InterpolateSolution(const size_t timeLevel)
void PropagateQuadratureSolutionAndResidual(const size_t timeLevel, const size_t index)
SOLVER_UTILS_EXPORT DriverPFASST(const LibUtilities::SessionReaderSharedPtr pSession, const SpatialDomains::MeshGraphSharedPtr pGraph)
Constructor.
static std::string driverLookupId
void CorrectResidual(const size_t timeLevel)
Array< OneD, size_t > m_QuadPts
bool IsNotInitialCondition(const size_t n)
void ApplyWindowing(void)
void SetTimeInterpolator(void)
Base class for the development of parallel-in-time solvers.
void Interpolate(const Array< OneD, MultiRegions::ExpListSharedPtr > &infield, const Array< OneD, MultiRegions::ExpListSharedPtr > &outfield, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray)
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< Driver > DriverSharedPtr
A shared pointer to a Driver object.
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > SDCarray
std::shared_ptr< MeshGraph > MeshGraphSharedPtr