getfem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Getfem-commits] r5264 - in /trunk/getfem/src: getfem/getfem_generic_ass


From: logari81
Subject: [Getfem-commits] r5264 - in /trunk/getfem/src: getfem/getfem_generic_assembly.h getfem_generic_assembly.cc
Date: Tue, 29 Mar 2016 10:35:31 -0000

Author: logari81
Date: Tue Mar 29 12:35:29 2016
New Revision: 5264

URL: http://svn.gna.org/viewcvs/getfem?rev=5264&view=rev
Log:
simplification in ga_workspace class and replace occurences of 'new' with 
'std::make_shared'

Modified:
    trunk/getfem/src/getfem/getfem_generic_assembly.h
    trunk/getfem/src/getfem_generic_assembly.cc

Modified: trunk/getfem/src/getfem/getfem_generic_assembly.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/getfem_generic_assembly.h?rev=5264&r1=5263&r2=5264&view=diff
==============================================================================
--- trunk/getfem/src/getfem/getfem_generic_assembly.h   (original)
+++ trunk/getfem/src/getfem/getfem_generic_assembly.h   Tue Mar 29 12:35:29 2016
@@ -213,70 +213,30 @@
                   const std::string &expr, size_type add_derivative_order = 2,
                   bool scalar_expr = true);
 
-    struct sparse_matrix_ptr {
-      std::shared_ptr<model_real_sparse_matrix> ptr;
-      model_real_sparse_matrix &operator()() { return *ptr; }
-      const model_real_sparse_matrix &operator()() const { return *ptr; }
-      void resize(size_type nb)
-      { if (ptr.use_count()) { gmm::clear(*ptr); gmm::resize(*ptr, nb, nb); } }
-      void set_matrix(model_real_sparse_matrix &M) {
-        ptr = std::shared_ptr<model_real_sparse_matrix>
-          (std::shared_ptr<model_real_sparse_matrix>(), &M);
-      }
-      sparse_matrix_ptr()
-        : ptr(std::make_shared<model_real_sparse_matrix>(2,2)) {}
-      sparse_matrix_ptr(const sparse_matrix_ptr &smp): ptr(smp.ptr) {
-        if (ptr.use_count())
-          ptr=std::make_shared<model_real_sparse_matrix>(smp());
-      }
-      sparse_matrix_ptr &operator =(const sparse_matrix_ptr &smp) {
-        ptr = smp.ptr;
-        if (ptr.use_count())
-          ptr=std::make_shared<model_real_sparse_matrix>(smp());
-        return *this;
-      }
-    };
-
-    struct base_vector_ptr {
-      std::shared_ptr<base_vector> ptr;
-      base_vector &operator()() { return *ptr; }
-      const base_vector &operator()() const { return *ptr; }
-      void resize(size_type nb)
-      { if (ptr.use_count()) { gmm::clear(*ptr); gmm::resize(*ptr, nb);} }
-      void set_vector(base_vector &vector) {
-        ptr = std::shared_ptr<base_vector>(std::shared_ptr<base_vector>(),
-                                           &vector);
-      }
-      base_vector_ptr(): ptr(std::make_shared<base_vector>(2)) {}
-      base_vector_ptr(const base_vector_ptr &smp): ptr(smp.ptr)
-      { if (ptr.use_count()) ptr=std::make_shared<base_vector>(smp()); }
-      base_vector_ptr &operator =(const base_vector_ptr &smp) {
-        ptr = smp.ptr;
-        if (ptr.use_count())
-          ptr = std::make_shared<base_vector>(smp());
-        return *this;
-      }
-    };
-
-    sparse_matrix_ptr K;
+
+    std::shared_ptr<model_real_sparse_matrix> K;
     model_real_sparse_matrix unreduced_K;
-    base_vector_ptr V;
+    std::shared_ptr<base_vector> V;
     base_vector unreduced_V;
     scalar_type E;
     base_tensor assemb_t;
 
   public:
 
-    const model_real_sparse_matrix &assembled_matrix() const { return K();}
-    model_real_sparse_matrix &assembled_matrix() { return K(); }
+    const model_real_sparse_matrix &assembled_matrix() const { return *K;}
+    model_real_sparse_matrix &assembled_matrix() { return *K; }
     scalar_type &assembled_potential() { return E; }
     const scalar_type &assembled_potential() const { return E; }
-    const base_vector &assembled_vector() const { return V(); }
-    base_vector &assembled_vector() { return V(); }
-    void set_assembled_matrix(model_real_sparse_matrix &K_)
-    { K.set_matrix(K_); }
-    void set_assembled_vector(base_vector &V_)
-    { V.set_vector(V_); }
+    const base_vector &assembled_vector() const { return *V; }
+    base_vector &assembled_vector() { return *V; }
+    void set_assembled_matrix(model_real_sparse_matrix &K_) {
+      K = std::shared_ptr<model_real_sparse_matrix>
+          (std::shared_ptr<model_real_sparse_matrix>(), &K_);
+    }
+    void set_assembled_vector(base_vector &V_) {
+      V = std::shared_ptr<base_vector>
+          (std::shared_ptr<base_vector>(), &V_);
+    }
     base_tensor &assembled_tensor() { return assemb_t; }
     const base_tensor &assembled_tensor() const { return assemb_t; }
 

Modified: trunk/getfem/src/getfem_generic_assembly.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_generic_assembly.cc?rev=5264&r1=5263&r2=5264&view=diff
==============================================================================
--- trunk/getfem/src/getfem_generic_assembly.cc (original)
+++ trunk/getfem/src/getfem_generic_assembly.cc Tue Mar 29 12:35:29 2016
@@ -5214,6 +5214,11 @@
   //=========================================================================
 
   void ga_workspace::init() {
+    // allocate own storage for K an V to be used unless/until external
+    // storage is provided with set_assembled_matrix/vector
+    K = std::make_shared<model_real_sparse_matrix>(2,2);
+    V = std::make_shared<base_vector>(2);
+    // add default transformations
     add_interpolate_transformation
       ("neighbour_elt", interpolate_transformation_neighbour_instance());
   }
@@ -5783,12 +5788,20 @@
     GA_TOCTIC("Compile time");
 
     if (order == 2) {
-      K.resize(max_dof);
-      gmm::clear(unreduced_K); gmm::resize(unreduced_K, ndof, ndof);
+      if (K.use_count()) {
+        gmm::clear(*K);
+        gmm::resize(*K, max_dof, max_dof);
+      }
+      gmm::clear(unreduced_K);
+      gmm::resize(unreduced_K, ndof, ndof);
     }
     if (order == 1) {
-      V.resize(max_dof);
-      gmm::clear(unreduced_V); gmm::resize(unreduced_V, ndof);
+      if (V.use_count()) {
+        gmm::clear(*V);
+        gmm::resize(*V, max_dof);
+      }
+      gmm::clear(unreduced_V);
+      gmm::resize(unreduced_V, ndof);
     }
     E = 0;
     GA_TOCTIC("Init time");
@@ -5820,7 +5833,7 @@
                 gmm::mult_add(gmm::transposed(mf->extension_matrix()),
                               gmm::sub_vector(unreduced_V,
                                               gis.var_intervals[vname]),
-                              gmm::sub_vector(V(),
+                              gmm::sub_vector(*V,
                                               interval_of_variable(vname)));
                 vars_vec_done.insert(vname);
               }
@@ -5855,17 +5868,17 @@
                       gmm::mult(gmm::transposed(mf1->extension_matrix()),
                                 gmm::sub_matrix(unreduced_K, uI1, uI2), aux);
                       gmm::mult(aux, mf2->extension_matrix(), M);
-                      gmm::add(M, gmm::sub_matrix(K(), I1, I2));
+                      gmm::add(M, gmm::sub_matrix(*K, I1, I2));
                     } else if (mf1 && mf1->is_reduced()) {
                       model_real_sparse_matrix M(I1.size(), I2.size());
                       gmm::mult(gmm::transposed(mf1->extension_matrix()),
                                 gmm::sub_matrix(unreduced_K, uI1, uI2), M);
-                      gmm::add(M, gmm::sub_matrix(K(), I1, I2));
+                      gmm::add(M, gmm::sub_matrix(*K, I1, I2));
                     } else {
                       model_real_row_sparse_matrix M(I1.size(), I2.size());
                       gmm::mult(gmm::sub_matrix(unreduced_K, uI1, uI2),
                                 mf2->extension_matrix(), M);
-                      gmm::add(M, gmm::sub_matrix(K(), I1, I2));
+                      gmm::add(M, gmm::sub_matrix(*K, I1, I2));
                     }
                     vars_mat_done.insert(p);
                   }
@@ -11619,7 +11632,7 @@
   (model &md, const std::string &name, const mesh &sm, const mesh &tm,
    const std::string &expr) {
     pinterpolate_transformation
-      p(new interpolate_transformation_expression(sm, tm, expr));
+      p = std::make_shared<interpolate_transformation_expression>(sm, tm, 
expr);
     md.add_interpolate_transformation(name, p);
   }
 
@@ -11627,7 +11640,7 @@
   (ga_workspace &workspace, const std::string &name, const mesh &sm,
    const mesh &tm, const std::string &expr) {
     pinterpolate_transformation
-      p(new interpolate_transformation_expression(sm, tm, expr));
+      p = std::make_shared<interpolate_transformation_expression>(sm, tm, 
expr);
     workspace.add_interpolate_transformation(name, p);
   }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]