40 #include <boost/core/ignore_unused.hpp>
46 string UnsteadyDiffusion::className =
48 "UnsteadyDiffusion", UnsteadyDiffusion::create);
50 UnsteadyDiffusion::UnsteadyDiffusion(
67 m_session->MatchSolverInfo(
"SpectralVanishingViscosity",
"True",
76 int npoints =
m_fields[0]->GetNpoints();
103 m_session->LoadSolverInfo(
"DiffusionType", diffName,
"LDG");
117 ASSERTL0(
false,
"Explicit Galerkin diffusion not set up.");
165 boost::ignore_unused(time);
168 int nVariables = inarray.size();
186 int nvariables = inarray.size();
196 for (i = 0; i < nvariables; ++i)
207 for (i = 0; i < nvariables; ++i)
209 m_fields[i]->FwdTrans(inarray[i], coeffs);
210 m_fields[i]->BwdTrans(coeffs, outarray[i]);
216 ASSERTL0(
false,
"Unknown projection scheme");
230 boost::ignore_unused(time);
234 int nvariables = inarray.size();
235 int npoints =
m_fields[0]->GetNpoints();
249 for (
int i = 0; i < nvariables; ++i)
273 boost::ignore_unused(inarray);
275 unsigned int nDim = qfield.size();
276 unsigned int nConvectiveFields = qfield[0].size();
277 unsigned int nPts = qfield[0][0].size();
279 for (
unsigned int j = 0; j < nDim; ++j)
281 for (
unsigned int i = 0; i < nConvectiveFields; ++i)
#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 DefineImplicitSolve(FuncPointerT func, ObjectPointerT obj)
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array holding all dependent variables.
LibUtilities::SessionReaderSharedPtr m_session
The session reader.
SOLVER_UTILS_EXPORT int GetNpoints()
SOLVER_UTILS_EXPORT int GetNcoeffs()
enum MultiRegions::ProjectionType m_projectionType
Type of projection; e.g continuous or discontinuous.
SOLVER_UTILS_EXPORT void SetBoundaryConditions(NekDouble time)
Evaluates the boundary conditions at the given time.
Base class for unsteady solvers.
LibUtilities::TimeIntegrationSchemeOperators m_ode
The time integration scheme operators to use.
bool m_explicitDiffusion
Indicates if explicit or implicit treatment of diffusion is used.
virtual SOLVER_UTILS_EXPORT void v_GenerateSummary(SummaryList &s) override
Print a summary of time stepping parameters.
virtual SOLVER_UTILS_EXPORT void v_InitObject(bool DeclareField=true) override
Init object for UnsteadySystem class.
bool m_homoInitialFwd
Flag to determine if simulation should start in homogeneous forward transformed state.
NekDouble m_sVVCutoffRatio
void DoImplicitSolve(const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, NekDouble time, NekDouble lambda)
Implicit solution of the unsteady diffusion problem.
virtual void v_GenerateSummary(SummaryList &s) override
Print a summary of time stepping parameters.
StdRegions::VarCoeffMap m_varcoeff
virtual void v_InitObject(bool DeclareFields=true) override
Initialisation object for the unsteady diffusion problem.
void GetFluxVector(const Array< OneD, Array< OneD, NekDouble >> &inarray, const Array< OneD, Array< OneD, Array< OneD, NekDouble >>> &qfield, Array< OneD, Array< OneD, Array< OneD, NekDouble >>> &viscousTensor)
Return the flux vector for the unsteady diffusion problem.
void DoOdeProjection(const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time)
Compute the projection for the unsteady diffusion problem.
void DoOdeRhs(const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time)
virtual ~UnsteadyDiffusion()
Destructor.
SolverUtils::DiffusionSharedPtr m_diffusion
std::shared_ptr< SessionReader > SessionReaderSharedPtr
@ eMixed_CG_Discontinuous
std::vector< std::pair< std::string, std::string > > SummaryList
DiffusionFactory & GetDiffusionFactory()
EquationSystemFactory & GetEquationSystemFactory()
void AddSummaryItem(SummaryList &l, const std::string &name, const std::string &value)
Adds a summary item to the summary info list.
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
std::map< ConstFactorType, NekDouble > ConstFactorMap
The above copyright notice and this permission notice shall be included.
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)