From: Wolfgang Bangerth Date: Thu, 24 Aug 2017 19:02:37 +0000 (-0600) Subject: Update the LinearAlgebra implementations to use VectorMemory::Pointer. X-Git-Tag: v9.0.0-rc1~1173^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d239b136dce11e92687739ac7be0e0c6f82f9a1;p=dealii.git Update the LinearAlgebra implementations to use VectorMemory::Pointer. This facilitates automatic memory allocation cleanup. --- diff --git a/include/deal.II/lac/block_linear_operator.h b/include/deal.II/lac/block_linear_operator.h index 60fa0775dc..2fcc737cf5 100644 --- a/include/deal.II/lac/block_linear_operator.h +++ b/include/deal.II/lac/block_linear_operator.h @@ -758,8 +758,8 @@ block_forward_substitution(const BlockLinearOperator vector_memory; - typename Range::BlockType *tmp = vector_memory.alloc(); + static GrowingVectorMemory vector_memory; + typename VectorMemory::Pointer tmp (vector_memory); diagonal_inverse.block(0, 0).vmult_add(v.block(0), u.block(0)); @@ -773,8 +773,6 @@ block_forward_substitution(const BlockLinearOperator & ExcDimensionMismatch(diagonal_inverse.n_block_cols(), m)); Assert(v.n_blocks() == m, ExcDimensionMismatch(v.n_blocks(), m)); Assert(u.n_blocks() == m, ExcDimensionMismatch(u.n_blocks(), m)); - static GrowingVectorMemory vector_memory; - typename Range::BlockType *tmp = vector_memory.alloc(); + static GrowingVectorMemory vector_memory; + typename VectorMemory::Pointer tmp (vector_memory); if (m == 0) return; @@ -885,8 +883,6 @@ block_back_substitution(const BlockLinearOperator & *tmp *= -1.; diagonal_inverse.block(i, i).vmult_add(v.block(i),*tmp); } - - vector_memory.free(tmp); }; return return_op; diff --git a/include/deal.II/lac/linear_operator.h b/include/deal.II/lac/linear_operator.h index c0fd4d54da..afa1273802 100644 --- a/include/deal.II/lac/linear_operator.h +++ b/include/deal.II/lac/linear_operator.h @@ -582,44 +582,40 @@ operator*(const LinearOperator &first_op, { static GrowingVectorMemory vector_memory; - Intermediate *i = vector_memory.alloc(); + typename VectorMemory::Pointer i (vector_memory); second_op.reinit_range_vector(*i, /*bool omit_zeroing_entries =*/ true); second_op.vmult(*i, u); first_op.vmult(v, *i); - vector_memory.free(i); }; return_op.vmult_add = [first_op, second_op](Range &v, const Domain &u) { static GrowingVectorMemory vector_memory; - Intermediate *i = vector_memory.alloc(); + typename VectorMemory::Pointer i (vector_memory); second_op.reinit_range_vector(*i, /*bool omit_zeroing_entries =*/ true); second_op.vmult(*i, u); first_op.vmult_add(v, *i); - vector_memory.free(i); }; return_op.Tvmult = [first_op, second_op](Domain &v, const Range &u) { static GrowingVectorMemory vector_memory; - Intermediate *i = vector_memory.alloc(); + typename VectorMemory::Pointer i (vector_memory); first_op.reinit_domain_vector(*i, /*bool omit_zeroing_entries =*/ true); first_op.Tvmult(*i, u); second_op.Tvmult(v, *i); - vector_memory.free(i); }; return_op.Tvmult_add = [first_op, second_op](Domain &v, const Range &u) { static GrowingVectorMemory vector_memory; - Intermediate *i = vector_memory.alloc(); + typename VectorMemory::Pointer i (vector_memory); first_op.reinit_domain_vector(*i, /*bool omit_zeroing_entries =*/ true); first_op.Tvmult(*i, u); second_op.Tvmult_add(v, *i); - vector_memory.free(i); }; return return_op; @@ -701,11 +697,10 @@ inverse_operator(const LinearOperator &op, { static GrowingVectorMemory vector_memory; - Range *v2 = vector_memory.alloc(); + typename VectorMemory::Pointer v2 (vector_memory); op.reinit_range_vector(*v2, /*bool omit_zeroing_entries =*/ false); solver.solve(op, *v2, u, preconditioner); v += *v2; - vector_memory.free(v2); }; return_op.Tvmult = [op, &solver, &preconditioner](Range &v, const Domain &u) @@ -719,11 +714,10 @@ inverse_operator(const LinearOperator &op, { static GrowingVectorMemory vector_memory; - Range *v2 = vector_memory.alloc(); + typename VectorMemory::Pointer v2 (vector_memory); op.reinit_range_vector(*v2, /*bool omit_zeroing_entries =*/ false); solver.solve(transpose_operator(op), *v2, u, preconditioner); v += *v2; - vector_memory.free(v2); }; return return_op; @@ -1041,7 +1035,7 @@ namespace { static GrowingVectorMemory vector_memory; - Range *i = vector_memory.alloc(); + typename VectorMemory::Pointer i (vector_memory); i->reinit(v, /*bool omit_zeroing_entries =*/true); function(*i, u); @@ -1050,8 +1044,6 @@ namespace v += *i; else v = *i; - - vector_memory.free(i); }