diff --git a/src/octave/duneevaluate.cc b/src/octave/duneevaluate.cc index caf566894b162d8923691b9b2279d21dd94a4e3d..d1f4830d582025b329026e6483e31820485550c0 100644 --- a/src/octave/duneevaluate.cc +++ b/src/octave/duneevaluate.cc @@ -4,6 +4,8 @@ #include "config.h" #endif +#include <dune/common/shared_ptr.hh> + #include <dune/tectonic/octave/duneoctave.hh> #include <dune/tectonic/samplefunctional.hh> @@ -25,22 +27,25 @@ Evaluate x -> 1/2<Ax,x> - <b,x> + H(|x|) at each point y that is a column vector Functional::SmallVector b; Dune::octaveToDune<dim>(args(1).vector_value(), b); - Dune::SampleFunction<100> f_steep; - Dune::SampleFunction<2> f_sample; + Dune::shared_ptr<Functional::NonlinearityType const> phi; charNDArray bar = args(2).char_array_value(); - Dune::NiceFunction *foo; switch (bar(0)) { - case 'S': - foo = &f_steep; + case 'S': { + Dune::NiceFunction const *pre_f = new Dune::SampleFunction<100>(); + Dune::shared_ptr<Dune::NiceFunction const> f(pre_f); + phi = Dune::make_shared<Functional::NonlinearityType const>(f); break; - case 's': - foo = &f_sample; + } + case 's': { + Dune::NiceFunction const *pre_f = new Dune::SampleFunction<2>(); + Dune::shared_ptr<Dune::NiceFunction const> f(pre_f); + phi = Dune::make_shared<Functional::NonlinearityType const>(f); break; + } default: assert(false); } - Dune::LocalNonlinearity<dim> phi(*foo); Functional J(A, b, phi); Matrix points(args(3).matrix_value()); diff --git a/src/octave/duneminimise.cc b/src/octave/duneminimise.cc index 0370664f81d9b6dc2475d7a44981e7bc5692029f..17da877e47b5e91c266dee554b0945e8dadb6631 100644 --- a/src/octave/duneminimise.cc +++ b/src/octave/duneminimise.cc @@ -4,6 +4,8 @@ #include "config.h" #endif +#include <dune/common/shared_ptr.hh> + #include <dune/tectonic/octave/duneoctave.hh> #include <dune/tectonic/samplefunctional.hh> @@ -25,22 +27,25 @@ Make a minimisation step of x -> 1/2<Ax,x> - <b,x> + H(|x|) using DUNE starting Functional::SmallVector b; Dune::octaveToDune<dim>(args(1).vector_value(), b); - Dune::SampleFunction<100> f_steep; - Dune::SampleFunction<2> f_sample; + Dune::shared_ptr<Functional::NonlinearityType const> phi; charNDArray bar = args(2).char_array_value(); - Dune::NiceFunction *foo; switch (bar(0)) { - case 'S': - foo = &f_steep; + case 'S': { + Dune::NiceFunction const *pre_f = new Dune::SampleFunction<100>(); + Dune::shared_ptr<Dune::NiceFunction const> f(pre_f); + phi = Dune::make_shared<Functional::NonlinearityType const>(f); break; - case 's': - foo = &f_sample; + } + case 's': { + Dune::NiceFunction const *pre_f = new Dune::SampleFunction<2>(); + Dune::shared_ptr<Dune::NiceFunction const> f(pre_f); + phi = Dune::make_shared<Functional::NonlinearityType const>(f); break; + } default: assert(false); } - Dune::LocalNonlinearity<dim> phi(*foo); Functional J(A, b, phi); ColumnVector start_octave(args(3).vector_value());