38 #include <boost/core/ignore_unused.hpp>
48 RegisterCreatorFunction(
"UnsteadyReactionDiffusion",
49 UnsteadyReactionDiffusion::create);
51 UnsteadyReactionDiffusion::UnsteadyReactionDiffusion(
66 "Reaction-diffusion requires an implicit-explicit timestepping"
67 " (e.g. IMEXOrder2)");
69 "Reaction-diffusion requires use of continuous Galerkin"
105 for (
int i = 0; i < outarray.size(); ++i)
107 Vmath::Zero(outarray[i].size(), &outarray[i][0], 1);
114 x->Apply(
m_fields, inarray, outarray, time);
131 int nvariables = inarray.size();
136 for(i = 0; i < nvariables; ++i)
138 m_fields[i]->FwdTrans(inarray[i], coeffs);
139 m_fields[i]->BwdTrans_IterPerExp(coeffs, outarray[i]);
152 boost::ignore_unused(time);
156 int nvariables = inarray.size();
157 int npoints =
m_fields[0]->GetNpoints();
163 for (
int i = 0; i < nvariables; ++i)
167 inarray[i], 1, outarray[i], 1);
171 outarray[i],
m_fields[i]->UpdateCoeffs(), factors);
#define ASSERTL0(condition, msg)
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 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.
static SOLVER_UTILS_EXPORT std::vector< ForcingSharedPtr > Load(const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< EquationSystem > &pEquation, const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const unsigned int &pNumForcingFields=0)
Base class for unsteady solvers.
LibUtilities::TimeIntegrationSchemeOperators m_ode
The time integration scheme operators to use.
LibUtilities::TimeIntegrationSchemeSharedPtr m_intScheme
Wrapper to the time integration scheme.
virtual SOLVER_UTILS_EXPORT void v_InitObject()
Init object for UnsteadySystem class.
virtual void v_InitObject()
Initialisation object for the unsteady reaction-diffusion problem.
std::vector< SolverUtils::ForcingSharedPtr > m_forcing
Forcing terms.
void DoOdeRhs(const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble time)
Compute the right-hand side for the unsteady reaction 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.
virtual ~UnsteadyReactionDiffusion()
Destructor.
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.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
@ eIMEX
Implicit Explicit General Linear Method.
EquationSystemFactory & GetEquationSystemFactory()
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 Zero(int n, T *x, const int incx)
Zero vector.