Skip to content
Snippets Groups Projects
Commit eaafa238 authored by Dmitri Naumov's avatar Dmitri Naumov
Browse files

[PL] Infrastructure for setInitialConditions().

Some processes might require setup of the initial
conditions dependent variables in local assemblers.
The new interface allows such implementations.
parent 5dafe2c7
No related branches found
No related tags found
No related merge requests found
...@@ -78,6 +78,16 @@ void LocalAssemblerInterface::computeSecondaryVariable( ...@@ -78,6 +78,16 @@ void LocalAssemblerInterface::computeSecondaryVariable(
computeSecondaryVariableConcrete(t, local_x); computeSecondaryVariableConcrete(t, local_x);
} }
void LocalAssemblerInterface::setInitialConditions(
std::size_t const mesh_item_id,
NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x)
{
auto const indices = NumLib::getIndices(mesh_item_id, dof_table);
auto const local_x = x.get(indices);
setInitialConditionsConcrete(local_x);
}
void LocalAssemblerInterface::preTimestep( void LocalAssemblerInterface::preTimestep(
std::size_t const mesh_item_id, std::size_t const mesh_item_id,
NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x, NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x,
......
...@@ -34,6 +34,10 @@ class LocalAssemblerInterface ...@@ -34,6 +34,10 @@ class LocalAssemblerInterface
public: public:
virtual ~LocalAssemblerInterface() = default; virtual ~LocalAssemblerInterface() = default;
virtual void setInitialConditions(
std::size_t const mesh_item_id,
NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x);
virtual void preAssemble(double const /*t*/, virtual void preAssemble(double const /*t*/,
std::vector<double> const& /*local_x*/){}; std::vector<double> const& /*local_x*/){};
...@@ -96,6 +100,11 @@ public: ...@@ -96,6 +100,11 @@ public:
} }
private: private:
virtual void setInitialConditionsConcrete(
std::vector<double> const& /*local_x*/)
{
}
virtual void preTimestepConcrete(std::vector<double> const& /*local_x*/, virtual void preTimestepConcrete(std::vector<double> const& /*local_x*/,
double const /*t*/, double const /*dt*/) double const /*t*/, double const /*dt*/)
{ {
......
...@@ -121,6 +121,7 @@ void Process::setInitialConditions(const int process_id, double const t, ...@@ -121,6 +121,7 @@ void Process::setInitialConditions(const int process_id, double const t,
variable_id < per_process_variables.size(); variable_id < per_process_variables.size();
variable_id++) variable_id++)
{ {
MathLib::LinAlg::setLocalAccessibleVector(x);
SpatialPosition pos; SpatialPosition pos;
auto const& pv = per_process_variables[variable_id]; auto const& pv = per_process_variables[variable_id];
...@@ -163,6 +164,7 @@ void Process::setInitialConditions(const int process_id, double const t, ...@@ -163,6 +164,7 @@ void Process::setInitialConditions(const int process_id, double const t,
} }
} }
} }
setInitialConditionsConcreteProcess(x);
} }
MathLib::MatrixSpecifications Process::getMatrixSpecifications( MathLib::MatrixSpecifications Process::getMatrixSpecifications(
......
...@@ -176,6 +176,10 @@ private: ...@@ -176,6 +176,10 @@ private:
/// processes. It is called by initialize(). /// processes. It is called by initialize().
virtual void initializeBoundaryConditions(); virtual void initializeBoundaryConditions();
virtual void setInitialConditionsConcreteProcess(GlobalVector const& /*x*/)
{
}
virtual void preAssembleConcreteProcess(const double /*t*/, virtual void preAssembleConcreteProcess(const double /*t*/,
GlobalVector const& /*x*/) GlobalVector const& /*x*/)
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment