From c5ccca467263de10858d7d3f407d76d772c54fc9 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Mon, 25 Sep 2017 18:35:52 -0600 Subject: [PATCH] Avoid raw pointers in SUNDIALS IDA interfaces. --- source/sundials/ida.cc | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/source/sundials/ida.cc b/source/sundials/ida.cc index 830ee4baff..e7b2591628 100644 --- a/source/sundials/ida.cc +++ b/source/sundials/ida.cc @@ -51,13 +51,13 @@ namespace SUNDIALS IDA &solver = *static_cast *>(user_data); GrowingVectorMemory mem; - VectorType *src_yy = mem.alloc(); + typename VectorMemory::Pointer src_yy(mem); solver.reinit_vector(*src_yy); - VectorType *src_yp = mem.alloc(); + typename VectorMemory::Pointer src_yp(mem); solver.reinit_vector(*src_yp); - VectorType *residual = mem.alloc(); + typename VectorMemory::Pointer residual(mem); solver.reinit_vector(*residual); copy(*src_yy, yy); @@ -67,10 +67,6 @@ namespace SUNDIALS copy(rr, *residual); - mem.free(src_yy); - mem.free(src_yp); - mem.free(residual); - return err; } @@ -92,10 +88,10 @@ namespace SUNDIALS IDA &solver = *static_cast *>(IDA_mem->ida_user_data); GrowingVectorMemory mem; - VectorType *src_yy = mem.alloc(); + typename VectorMemory::Pointer src_yy(mem); solver.reinit_vector(*src_yy); - VectorType *src_yp = mem.alloc(); + typename VectorMemory::Pointer src_yp(mem); solver.reinit_vector(*src_yp); copy(*src_yy, yy); @@ -106,9 +102,6 @@ namespace SUNDIALS *src_yp, IDA_mem->ida_cj); - mem.free(src_yy); - mem.free(src_yp); - return err; } @@ -128,10 +121,10 @@ namespace SUNDIALS IDA &solver = *static_cast *>(IDA_mem->ida_user_data); GrowingVectorMemory mem; - VectorType *src = mem.alloc(); + typename VectorMemory::Pointer src(mem); solver.reinit_vector(*src); - VectorType *dst = mem.alloc(); + typename VectorMemory::Pointer dst(mem); solver.reinit_vector(*dst); copy(*src, b); @@ -139,9 +132,6 @@ namespace SUNDIALS int err = solver.solve_jacobian_system(*src,*dst); copy(b, *dst); - mem.free(src); - mem.free(dst); - return err; } @@ -490,10 +480,9 @@ namespace SUNDIALS differential_components = [&]() ->IndexSet { GrowingVectorMemory mem; - auto v = mem.alloc(); + typename VectorMemory::Pointer v(mem); reinit_vector(*v); - unsigned int size = v->size(); - mem.free(v); + const unsigned int size = v->size(); return complete_index_set(size); }; -- 2.39.5