[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);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r5264 - in /trunk/getfem/src: getfem/getfem_generic_assembly.h getfem_generic_assembly.cc,
logari81 <=