]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Avoid raw pointers in SUNDIALS IDA interfaces. 5153/head
authorWolfgang Bangerth <bangerth@colostate.edu>
Tue, 26 Sep 2017 00:35:52 +0000 (18:35 -0600)
committerWolfgang Bangerth <bangerth@colostate.edu>
Tue, 26 Sep 2017 00:35:52 +0000 (18:35 -0600)
source/sundials/ida.cc

index 830ee4baff32a8f65ba6c5d80a93471957c7bdfe..e7b259162884f29be629a0b91d01facdcbe897c0 100644 (file)
@@ -51,13 +51,13 @@ namespace SUNDIALS
       IDA<VectorType> &solver = *static_cast<IDA<VectorType> *>(user_data);
       GrowingVectorMemory<VectorType> mem;
 
-      VectorType *src_yy = mem.alloc();
+      typename VectorMemory<VectorType>::Pointer src_yy(mem);
       solver.reinit_vector(*src_yy);
 
-      VectorType *src_yp = mem.alloc();
+      typename VectorMemory<VectorType>::Pointer src_yp(mem);
       solver.reinit_vector(*src_yp);
 
-      VectorType *residual = mem.alloc();
+      typename VectorMemory<VectorType>::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<VectorType> &solver = *static_cast<IDA<VectorType> *>(IDA_mem->ida_user_data);
       GrowingVectorMemory<VectorType> mem;
 
-      VectorType *src_yy = mem.alloc();
+      typename VectorMemory<VectorType>::Pointer src_yy(mem);
       solver.reinit_vector(*src_yy);
 
-      VectorType *src_yp = mem.alloc();
+      typename VectorMemory<VectorType>::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<VectorType> &solver = *static_cast<IDA<VectorType> *>(IDA_mem->ida_user_data);
       GrowingVectorMemory<VectorType> mem;
 
-      VectorType *src = mem.alloc();
+      typename VectorMemory<VectorType>::Pointer src(mem);
       solver.reinit_vector(*src);
 
-      VectorType *dst = mem.alloc();
+      typename VectorMemory<VectorType>::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<VectorType> mem;
-      auto v = mem.alloc();
+      typename VectorMemory<VectorType>::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);
     };
 

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.