diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc index b296fdcd43de74bb54f8709e3e1494f3c161be83..984eb1bc906d06bb1087022d224b67a662e076a4 100644 --- a/src/one-body-sample.cc +++ b/src/one-body-sample.cc @@ -228,7 +228,9 @@ int main(int argc, char *argv[]) { std::fill(normalStress.begin(), normalStress.end(), parset.get<double>("boundary.friction.normalstress")); - Dune::GlobalNonlinearity<dim> *myGlobalNonlinearity; + typedef Dune::shared_ptr<Dune::GlobalNonlinearity<dim>> + globalNonlinearityPtr; + globalNonlinearityPtr myGlobalNonlinearity; std::string const friction_model = parset.get<std::string>("boundary.friction.model"); @@ -243,12 +245,13 @@ int main(int argc, char *argv[]) { std::fill(eta.begin(), eta.end(), parset.get<double>("boundary.friction.eta")); - myGlobalNonlinearity = new Dune::GlobalRuinaNonlinearity<dim>( - nodalIntegrals, a, mu, eta, normalStress); - } else if (friction_model == std::string("Laursen")) { myGlobalNonlinearity = + globalNonlinearityPtr(new Dune::GlobalRuinaNonlinearity<dim>( + nodalIntegrals, a, mu, eta, normalStress)); + } else if (friction_model == std::string("Laursen")) { + myGlobalNonlinearity = globalNonlinearityPtr( new Dune::GlobalLaursenNonlinearity<dim, Dune::LinearFunction>( - mu, normalStress, nodalIntegrals); + mu, normalStress, nodalIntegrals)); } else { assert(false); } @@ -264,7 +267,6 @@ int main(int argc, char *argv[]) { solver_tolerance, &energyNorm, Solver::QUIET); solver.solve(); - free(myGlobalNonlinearity); } auto *displacement =