Skip to content
Snippets Groups Projects
Commit eb9d7091 authored by Christoph Lehmann's avatar Christoph Lehmann
Browse files

[PL] added time to secondary varaibles

parent ad730c2d
No related branches found
No related tags found
No related merge requests found
......@@ -32,11 +32,12 @@ SecondaryVariableFunctions CachedSecondaryVariable::getExtrapolator()
{
// TODO copied from makeExtrapolator()
auto const eval_residuals = [this](
const double t,
GlobalVector const& x,
NumLib::LocalToGlobalIndexMap const& dof_table,
std::unique_ptr<GlobalVector> & /*result_cache*/
) -> GlobalVector const& {
_extrapolator.calculateResiduals(1, *_extrapolatables, x, dof_table);
_extrapolator.calculateResiduals(1, *_extrapolatables, t, x, dof_table);
return _extrapolator.getElementResiduals();
};
return {1, BaseLib::easyBind(&CachedSecondaryVariable::evalField, this),
......@@ -44,6 +45,7 @@ SecondaryVariableFunctions CachedSecondaryVariable::getExtrapolator()
}
GlobalVector const& CachedSecondaryVariable::evalField(
const double t,
GlobalVector const& x,
NumLib::LocalToGlobalIndexMap const& dof_table,
std::unique_ptr<GlobalVector>& /*result_cache*/
......@@ -62,8 +64,10 @@ GlobalVector const& CachedSecondaryVariable::evalFieldNoArgs() const
return _cached_nodal_values;
}
DBUG("Recomputing %s.", _internal_variable_name.c_str());
// TODO fix
const double t = 0.0;
_extrapolator.extrapolate(
1, *_extrapolatables, *_current_solution, *_dof_table);
1, *_extrapolatables, t, *_current_solution, *_dof_table);
auto const& nodal_values = _extrapolator.getNodalValues();
MathLib::LinAlg::copy(nodal_values, _cached_nodal_values);
_needs_recomputation = false;
......
......@@ -69,6 +69,7 @@ private:
//! Computes the secondary Variable.
GlobalVector const& evalField(
const double t,
GlobalVector const& x,
NumLib::LocalToGlobalIndexMap const& dof_table,
std::unique_ptr<GlobalVector>& /*result_cache*/
......
......@@ -28,6 +28,7 @@ GlobalVectorFromNamedFunction::GlobalVectorFromNamedFunction(
}
GlobalVector const& GlobalVectorFromNamedFunction::call(
const double /*t*/,
GlobalVector const& x,
NumLib::LocalToGlobalIndexMap const& dof_table,
std::unique_ptr<GlobalVector>& result)
......
......@@ -42,7 +42,7 @@ public:
//! The signature of this method matches
//! SecondaryVariableFunctions::Function, i.e., this method can be used to
//! compute a secondary variable.
GlobalVector const& call(GlobalVector const& x,
GlobalVector const& call(const double t, GlobalVector const& x,
NumLib::LocalToGlobalIndexMap const& dof_table,
std::unique_ptr<GlobalVector>& result);
......
......@@ -37,6 +37,7 @@ struct SecondaryVariableFunctions final
* is stored somewhere else.
*/
using Function = std::function<GlobalVector const&(
const double t,
GlobalVector const& x,
NumLib::LocalToGlobalIndexMap const& dof_table,
std::unique_ptr<GlobalVector>& result_cache)>;
......@@ -51,19 +52,21 @@ struct SecondaryVariableFunctions final
eval_residuals(std::forward<F2>(eval_residuals_))
{
// Used to detect nasty implicit conversions.
static_assert(std::is_same<GlobalVector const&,
typename std::result_of<F1(
GlobalVector const&, NumLib::LocalToGlobalIndexMap const&,
std::unique_ptr<GlobalVector>&
)>::type>::value,
static_assert(
std::is_same<GlobalVector const&,
typename std::result_of<F1(
double const, GlobalVector const&,
NumLib::LocalToGlobalIndexMap const&,
std::unique_ptr<GlobalVector>&)>::type>::value,
"The function eval_field_ does not return a const reference"
" to a GlobalVector");
static_assert(std::is_same<GlobalVector const&,
typename std::result_of<F2(
GlobalVector const&, NumLib::LocalToGlobalIndexMap const&,
std::unique_ptr<GlobalVector>&
)>::type>::value,
static_assert(
std::is_same<GlobalVector const&,
typename std::result_of<F2(
double const, GlobalVector const&,
NumLib::LocalToGlobalIndexMap const&,
std::unique_ptr<GlobalVector>&)>::type>::value,
"The function eval_residuals_ does not return a const reference"
" to a GlobalVector");
}
......@@ -75,11 +78,12 @@ struct SecondaryVariableFunctions final
eval_field(std::forward<F1>(eval_field_))
{
// Used to detect nasty implicit conversions.
static_assert(std::is_same<GlobalVector const&,
typename std::result_of<F1(
GlobalVector const&, NumLib::LocalToGlobalIndexMap const&,
std::unique_ptr<GlobalVector>&
)>::type>::value,
static_assert(
std::is_same<GlobalVector const&,
typename std::result_of<F1(
double const, GlobalVector const&,
NumLib::LocalToGlobalIndexMap const&,
std::unique_ptr<GlobalVector>&)>::type>::value,
"The function eval_field_ does not return a const reference"
" to a GlobalVector");
}
......@@ -158,26 +162,29 @@ SecondaryVariableFunctions makeExtrapolator(
{
auto const eval_field = [num_components, &extrapolator, &local_assemblers,
integration_point_values_method](
const double t,
GlobalVector const& x,
NumLib::LocalToGlobalIndexMap const& dof_table,
std::unique_ptr<GlobalVector> & /*result_cache*/
) -> GlobalVector const& {
auto const extrapolatables = NumLib::makeExtrapolatable(
local_assemblers, integration_point_values_method);
extrapolator.extrapolate(num_components, extrapolatables, x, dof_table);
extrapolator.extrapolate(num_components, extrapolatables, t, x,
dof_table);
return extrapolator.getNodalValues();
};
auto const eval_residuals = [num_components, &extrapolator,
&local_assemblers,
integration_point_values_method](
const double t,
GlobalVector const& x,
NumLib::LocalToGlobalIndexMap const& dof_table,
std::unique_ptr<GlobalVector> & /*result_cache*/
) -> GlobalVector const& {
auto const extrapolatables = NumLib::makeExtrapolatable(
local_assemblers, integration_point_values_method);
extrapolator.calculateResiduals(num_components, extrapolatables, x,
extrapolator.calculateResiduals(num_components, extrapolatables, t, x,
dof_table);
return extrapolator.getElementResiduals();
};
......
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