Skip to content
Snippets Groups Projects
Commit c7725ec6 authored by Elias Pipping's avatar Elias Pipping Committed by Elias Pipping
Browse files

Populate restrictions: on demand -> construction

parent 64b2b29a
No related branches found
No related tags found
No related merge requests found
......@@ -26,55 +26,30 @@ class GlobalRuinaNonlinearity
GlobalRuinaNonlinearity(dataptr nodalIntegrals, dataptr a, dataptr mu,
dataptr eta, dataptr normalStress, dataptr b,
dataptr state, dataptr L, double h)
: nodalIntegrals(nodalIntegrals),
a(a),
mu(mu),
eta(eta),
normalStress(normalStress),
b(b),
state(state),
L(L),
h(h),
trivialNonlinearity(
new LocalNonlinearity<dim>(make_shared<TrivialFunction const>())),
restrictions(nodalIntegrals->size()) // TODO: can we get the size from
// another place?
{
for (auto &x : restrictions)
x = shared_ptr<LocalNonlinearity<dim> const>();
// TODO: can we get the size from another place?
: restrictions(nodalIntegrals->size()) {
auto trivialNonlinearity = make_shared<LocalNonlinearity<dim> const>(
make_shared<TrivialFunction const>());
for (size_t i = 0; i < restrictions.size(); ++i) {
restrictions[i] =
(*nodalIntegrals)[i] == 0
? trivialNonlinearity
: make_shared<LocalNonlinearity<dim> const>(
make_shared<RuinaFunction const>(
(*nodalIntegrals)[i], (*a)[i], (*mu)[i], (*eta)[i],
(*normalStress)[i], (*b)[i], (*state)[i], (*L)[i], h));
}
}
/*
Return a restriction of the outer function to the i'th node.
*/
virtual shared_ptr<LocalNonlinearity<dim> const> restriction(int i) const {
if ((*nodalIntegrals)[i] == 0)
return trivialNonlinearity;
if (restrictions[i] != nullptr)
return restrictions[i];
auto const func = make_shared<RuinaFunction const>(
(*nodalIntegrals)[i], (*a)[i], (*mu)[i], (*eta)[i], (*normalStress)[i],
(*b)[i], (*state)[i], (*L)[i], h);
restrictions[i] = make_shared<LocalNonlinearity<dim> const>(func);
return restrictions[i];
}
private:
dataptr nodalIntegrals;
dataptr a;
dataptr mu;
dataptr eta;
dataptr normalStress;
dataptr b;
dataptr state;
dataptr L;
double const h;
shared_ptr<LocalNonlinearity<dim> const> const trivialNonlinearity;
std::vector<shared_ptr<LocalNonlinearity<dim> const>> mutable restrictions;
std::vector<shared_ptr<LocalNonlinearity<dim> const>> restrictions;
};
}
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment