diff --git a/dune/tectonic/globalruinanonlinearity.hh b/dune/tectonic/globalruinanonlinearity.hh index 7269676ad8956dedb0d70c1089733ef75fa6bba8..101fd0396d4bbe05aa8bcc8ebec4d6ded94548e4 100644 --- a/dune/tectonic/globalruinanonlinearity.hh +++ b/dune/tectonic/globalruinanonlinearity.hh @@ -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