From: Alexander Grayver Date: Thu, 14 May 2020 09:25:39 +0000 (+0200) Subject: Fix python FunctionManifold X-Git-Tag: v9.2.0-rc2~10^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F10212%2Fhead;p=dealii.git Fix python FunctionManifold --- diff --git a/contrib/python-bindings/tests/manifold_wrapper.py b/contrib/python-bindings/tests/manifold_wrapper.py index b595ff39ec..947af53915 100644 --- a/contrib/python-bindings/tests/manifold_wrapper.py +++ b/contrib/python-bindings/tests/manifold_wrapper.py @@ -71,7 +71,7 @@ class TestManifoldWrapperFunction(unittest.TestCase): def setUp(self): self.manifold_1 = Manifold(dim = 2, spacedim = 2) - self.manifold_1.create_function("x^2;y^2", "sqrt(x);sqrt(y)") + self.manifold_1.create_function_string("x^2;y^2", "sqrt(x);sqrt(y)") self.manifold_2 = Manifold(dim = 2, spacedim = 2) self.manifold_2.create_function(lambda p: [p[0]**2., p[1]**2.],\ @@ -85,7 +85,7 @@ class TestManifoldWrapperFunction(unittest.TestCase): p_center = Point([0., 0., 0.]) self.triangulation.generate_hyper_cube() self.triangulation.reset_manifold(number = 0) - self.triangulation.set_manifold(number = 0, manifold = self.manifold_2) + self.triangulation.set_manifold(number = 0, manifold = self.manifold_1) for cell in self.triangulation.active_cells(): cell.set_all_manifold_ids(0) diff --git a/include/deal.II/grid/manifold_lib.h b/include/deal.II/grid/manifold_lib.h index e8c9143fe7..eaa7ce1543 100644 --- a/include/deal.II/grid/manifold_lib.h +++ b/include/deal.II/grid/manifold_lib.h @@ -601,6 +601,10 @@ public: * * The tolerance argument is used in debug mode to actually check that the * two functions are one the inverse of the other. + * + * Note: the object constructed in this way stores pointers to the + * push_forward and pull_back functions. Therefore, one must guarantee that + * the function objects are destroyed only after the constructed manifold. */ FunctionManifold( const Function & push_forward_function, @@ -620,8 +624,8 @@ public: * std_cxx14::make_unique(...)); */ FunctionManifold( - std::unique_ptr> push_forward_function, - std::unique_ptr> pull_back_function, + std::unique_ptr> push_forward, + std::unique_ptr> pull_back, const Tensor<1, chartdim> & periodicity = Tensor<1, chartdim>(), const double tolerance = 1e-10); diff --git a/source/grid/manifold_lib.cc b/source/grid/manifold_lib.cc index 69dc4c7404..aeda26cef0 100644 --- a/source/grid/manifold_lib.cc +++ b/source/grid/manifold_lib.cc @@ -1378,14 +1378,14 @@ FunctionManifold::FunctionManifold( template FunctionManifold::FunctionManifold( - std::unique_ptr> push_forward_function, - std::unique_ptr> pull_back_function, + std::unique_ptr> push_forward, + std::unique_ptr> pull_back, const Tensor<1, chartdim> & periodicity, const double tolerance) : ChartManifold(periodicity) , const_map() - , push_forward_function(push_forward_function.release()) - , pull_back_function(pull_back_function.release()) + , push_forward_function(push_forward.release()) + , pull_back_function(pull_back.release()) , tolerance(tolerance) , owns_pointers(true) , finite_difference_step(0) @@ -1473,8 +1473,6 @@ FunctionManifold::clone() const } else { - Assert(owns_pointers == false, ExcNotImplemented()); - return std_cxx14::make_unique>( *push_forward_function, *pull_back_function,