51 const std::weak_ptr<EquationSystem> &pEquation)
52 : m_session(pSession), m_equ(pEquation)
58 const unsigned int &pNumForcingFields,
const TiXmlElement *pForce)
73 v_Apply(fields, inarray, outarray, time);
89 boost::ignore_unused(fields, time);
90 if (&inarray != &outarray)
92 int nvar = std::min(inarray.size(), outarray.size());
93 for (
int i = 0; i < nvar; ++i)
95 if (&inarray[i] != &outarray[i])
97 int np = std::min(inarray[i].size(), outarray[i].size());
122 const std::weak_ptr<EquationSystem> &pEquation,
124 const unsigned int &pNumForcingFields)
126 vector<ForcingSharedPtr> vForceList;
128 if (!pSession->DefinesElement(
"Nektar/Forcing"))
133 TiXmlElement *vForcing = pSession->GetElement(
"Nektar/Forcing");
136 unsigned int vNumForcingFields = pNumForcingFields;
137 if (!pNumForcingFields)
139 vNumForcingFields = pFields.size();
142 TiXmlElement *vForce = vForcing->FirstChildElement(
"FORCE");
145 string vType = vForce->Attribute(
"TYPE");
147 TiXmlElement *vForceParam = vForce;
149 vForceParam, pSession->GetTimeLevel(),
false);
151 vType, pSession, pEquation, pFields, vNumForcingFields,
154 vForce = vForce->NextSiblingElement(
"FORCE");
175 ASSERTL0(pSession->DefinesFunction(pFunctionName),
176 "Function '" + pFunctionName +
"' does not exist.");
179 pSession->GetFunction(pFunctionName, pFieldName);
191 pEqn->Evaluate(x0, x0, x0, pTime, pArray);
207 pSession, pFields[0], pName, pCache);
224 boost::ignore_unused(fields, inarray, outarray, time);
225 ASSERTL0(
false,
"v_ApplyCoeff not defined");
#define ASSERTL0(condition, msg)
Provides a generic Factory class.
static void GetXMLElementTimeLevel(TiXmlElement *&element, const size_t timeLevel, const bool disableCheck=true)
Get XML elment time level (Parallel-in-Time)
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
virtual SOLVER_UTILS_EXPORT void v_Apply(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble &time)=0
virtual SOLVER_UTILS_EXPORT void v_PreApply(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble &time)
Array< OneD, Array< OneD, NekDouble > > m_Forcing
Evaluated forcing function.
virtual SOLVER_UTILS_EXPORT void v_InitObject(const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const unsigned int &pNumForcingFields, const TiXmlElement *pForce)=0
SOLVER_UTILS_EXPORT void Apply(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble &time)
Apply the forcing.
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)
SOLVER_UTILS_EXPORT void InitObject(const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const unsigned int &pNumForcingFields, const TiXmlElement *pForce)
Initialise the forcing object.
SOLVER_UTILS_EXPORT Array< OneD, Array< OneD, NekDouble > > & UpdateForces()
SOLVER_UTILS_EXPORT void ApplyCoeff(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble &time)
Apply the forcing.
SOLVER_UTILS_EXPORT const Array< OneD, const Array< OneD, NekDouble > > & GetForces()
std::map< std::string, SolverUtils::SessionFunctionSharedPtr > m_sessionFunctions
Map of known SessionFunctions.
SOLVER_UTILS_EXPORT void EvaluateTimeFunction(LibUtilities::SessionReaderSharedPtr pSession, std::string pFieldName, Array< OneD, NekDouble > &pArray, const std::string &pFunctionName, NekDouble pTime=NekDouble(0))
SOLVER_UTILS_EXPORT void PreApply(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble &time)
Change the advection velocity before applying the forcing. For example, subtracting the frame velocit...
SOLVER_UTILS_EXPORT SessionFunctionSharedPtr GetFunction(const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const LibUtilities::SessionReaderSharedPtr &pSession, std::string pName, bool pCache=false)
Get a SessionFunction by name.
SOLVER_UTILS_EXPORT Forcing(const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< EquationSystem > &pEquation)
Constructor.
virtual SOLVER_UTILS_EXPORT void v_ApplyCoeff(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble &time)
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< Equation > EquationSharedPtr
ForcingFactory & GetForcingFactory()
Declaration of the forcing factory singleton.
std::shared_ptr< SessionFunction > SessionFunctionSharedPtr
The above copyright notice and this permission notice shall be included.
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)