38 #include <boost/core/ignore_unused.hpp> 47 RegisterCreatorFunction(
"UnsteadyReactionDiffusion",
48 UnsteadyReactionDiffusion::create);
50 UnsteadyReactionDiffusion::UnsteadyReactionDiffusion(
65 "Reaction-diffusion requires an implicit-explicit timestepping" 66 " (e.g. IMEXOrder2)");
68 "Reaction-diffusion requires use of continuous Galerkin" 104 for (
int i = 0; i < outarray.num_elements(); ++i)
106 Vmath::Zero(outarray[i].num_elements(), &outarray[i][0], 1);
113 x->Apply(
m_fields, inarray, outarray, time);
130 int nvariables = inarray.num_elements();
135 for(i = 0; i < nvariables; ++i)
137 m_fields[i]->FwdTrans(inarray[i], coeffs);
138 m_fields[i]->BwdTrans_IterPerExp(coeffs, outarray[i]);
151 boost::ignore_unused(time);
155 int nvariables = inarray.num_elements();
156 int npoints =
m_fields[0]->GetNpoints();
162 for (
int i = 0; i < nvariables; ++i)
166 inarray[i], 1, outarray[i], 1);
virtual void v_InitObject()
Initialisation object for the unsteady reaction-diffusion problem.
#define ASSERTL0(condition, msg)
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
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.
void DefineImplicitSolve(FuncPointerT func, ObjectPointerT obj)
LibUtilities::TimeIntegrationSchemeOperators m_ode
The time integration scheme operators to use.
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.
std::vector< SolverUtils::ForcingSharedPtr > m_forcing
Forcing terms.
enum MultiRegions::ProjectionType m_projectionType
Type of projection; e.g continuous or discontinuous.
std::map< ConstFactorType, NekDouble > ConstFactorMap
Implicit Explicit General Linear Method.
void DefineProjection(FuncPointerT func, ObjectPointerT obj)
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
void DefineOdeRhs(FuncPointerT func, ObjectPointerT obj)
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.
virtual SOLVER_UTILS_EXPORT void v_InitObject()
Init object for UnsteadySystem class.
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.
EquationSystemFactory & GetEquationSystemFactory()
SOLVER_UTILS_EXPORT void SetBoundaryConditions(NekDouble time)
Evaluates the boundary conditions at the given time.
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array holding all dependent variables.
LibUtilities::SessionReaderSharedPtr m_session
The session reader.
SOLVER_UTILS_EXPORT int GetNcoeffs()
LibUtilities::TimeIntegrationWrapperSharedPtr m_intScheme
Wrapper to the time integration scheme.
void Zero(int n, T *x, const int incx)
Zero vector.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
static FlagList NullFlagList
An empty flag list.