22template<
typename VectorType>
30template<
typename ValueType>
38 : exec_(exp.exec_), temporalOperators_(exp.temporalOperators_),
39 spatialOperators_(exp.spatialOperators_)
45 for (
auto& op : temporalOperators_)
49 for (
auto& op : spatialOperators_)
65 for (
auto& op : spatialOperators_)
69 op.explicitOperation(source);
77 for (
auto& op : temporalOperators_)
81 op.explicitOperation(source, t, dt);
90 for (
auto& op : spatialOperators_)
94 op.implicitOperation(ls);
105 for (
auto& op : temporalOperators_)
109 op.implicitOperation(ls, t, dt);
119 std::tuple<la::SparsityPattern, la::LinearSystem<ValueType, localIdx>>
assemble(
127 auto ls = la::createEmptyLinearSystem<ValueType, localIdx>(mesh, sp);
158 temporalOperators_.push_back(oper);
163 for (
auto& oper : equation.temporalOperators_)
165 temporalOperators_.push_back(oper);
167 for (
auto& oper : equation.spatialOperators_)
169 spatialOperators_.push_back(oper);
177 return static_cast<localIdx>(temporalOperators_.size() + spatialOperators_.size());
183 return temporalOperators_;
188 return spatialOperators_;
201 std::vector<TemporalOperator<ValueType>> temporalOperators_;
203 std::vector<SpatialOperator<ValueType>> spatialOperators_;
206template<
typename ValueType>
207[[nodiscard]]
inline Expression<ValueType>
214template<
typename ValueType>
215[[nodiscard]]
inline Expression<ValueType>
222template<
typename leftOperator,
typename rightOperator>
223[[nodiscard]]
inline Expression<typename leftOperator::VectorValueType>
226 using ValueType =
typename leftOperator::VectorValueType;
233template<
typename ValueType>
249template<
typename ValueType>
250[[nodiscard]]
inline Expression<ValueType>
257template<
typename ValueType>
258[[nodiscard]]
inline Expression<ValueType>
265template<
typename leftOperator,
typename rightOperator>
266[[nodiscard]]
inline Expression<typename leftOperator::VectorValueType>
269 using ValueType =
typename leftOperator::VectorValueType;
A class representing a dictionary that stores key-value pairs.
Represents an unstructured mesh in NeoN.
A class to contain the data and executors for a field and define some basic operations.
A class that represents a coefficient for the NeoN dsl.
void assembleSpatialOperator(la::LinearSystem< ValueType, localIdx > &ls) const
const std::vector< TemporalOperator< ValueType > > & temporalOperators() const
Vector< ValueType > explicitOperation(localIdx nCells) const
void assembleTemporalOperator(la::LinearSystem< ValueType, localIdx > &ls, scalar t, scalar dt) const
Expression(const Executor &exec)
void addOperator(const TemporalOperator< ValueType > &oper)
void addExpression(const Expression &equation)
Vector< ValueType > explicitOperation(Vector< ValueType > &source, scalar t, scalar dt) const
const std::vector< SpatialOperator< ValueType > > & spatialOperators() const
std::vector< SpatialOperator< ValueType > > & spatialOperators()
std::tuple< la::SparsityPattern, la::LinearSystem< ValueType, localIdx > > assemble(const UnstructuredMesh &mesh, scalar t, scalar dt, std::span< const PostAssemblyBase< ValueType > > ps={}) const
void addOperator(const SpatialOperator< ValueType > &oper)
Vector< ValueType > explicitOperation(Vector< ValueType > &source) const
void assemble(scalar t, scalar dt, const la::SparsityPattern &sp, la::LinearSystem< ValueType, localIdx > &ls, std::span< const PostAssemblyBase< ValueType > > ps={}) const
Expression(const Expression &exp)
void read(const Dictionary &input)
const Executor & exec() const
std::vector< TemporalOperator< ValueType > > & temporalOperators()
A class representing a linear system of equations.
Expression< ValueType > operator+(Expression< ValueType > lhs, const Expression< ValueType > &rhs)
Coeff operator*(const Coeff &lhs, const Coeff &rhs)
Expression< ValueType > operator-(Expression< ValueType > lhs, const Expression< ValueType > &rhs)
std::variant< SerialExecutor, CPUExecutor, GPUExecutor > Executor
virtual ~PostAssemblyBase()=default
virtual void operator()(const la::SparsityPattern &, la::LinearSystem< VectorType, localIdx > &)