[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] r5172 - /trunk/getfem/interface/src/
From: |
Yves . Renard |
Subject: |
[Getfem-commits] r5172 - /trunk/getfem/interface/src/ |
Date: |
Wed, 09 Dec 2015 19:15:42 -0000 |
Author: renard
Date: Wed Dec 9 20:15:41 2015
New Revision: 5172
URL: http://svn.gna.org/viewcvs/getfem?rev=5172&view=rev
Log:
propagating simplification
Modified:
trunk/getfem/interface/src/getfemint.cc
trunk/getfem/interface/src/getfemint.h
trunk/getfem/interface/src/getfemint_gsparse.h
trunk/getfem/interface/src/getfemint_precond.h
trunk/getfem/interface/src/gf_precond.cc
trunk/getfem/interface/src/gf_spmat.cc
trunk/getfem/interface/src/gf_spmat_get.cc
Modified: trunk/getfem/interface/src/getfemint.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/getfemint.cc?rev=5172&r1=5171&r2=5172&view=diff
==============================================================================
--- trunk/getfem/interface/src/getfemint.cc (original)
+++ trunk/getfem/interface/src/getfemint.cc Wed Dec 9 20:15:41 2015
@@ -749,32 +749,39 @@
return bn;
}
- // /* get a (native only) sparse matrix */
- // void
- // mexarg_in::to_sparse(gf_real_sparse_csc_const_ref& M) {
- // if (gfi_array_get_class(arg) != GFI_SPARSE) {
- // THROW_BADARG("Argument " << argnum << " was expected to be a sparse
matrix");
- // }
- // if (is_complex()) {
- // THROW_BADARG("Argument " << argnum << " cannot be a complex sparse
matrix");
- // }
- // assert(gfi_array_get_ndim(arg)==2);
- // M = gf_real_sparse_csc_const_ref(gfi_sparse_get_pr(arg),
gfi_sparse_get_ir(arg), gfi_sparse_get_jc(arg),
- //
gfi_array_get_dim(arg)[0],gfi_array_get_dim(arg)[1]);
- // }
-
- // void
- // mexarg_in::to_sparse(gf_cplx_sparse_csc_const_ref& M) {
- // if (gfi_array_get_class(arg) != GFI_SPARSE) {
- // THROW_BADARG("Argument " << argnum << " was expected to be a sparse
matrix");
- // }
- // if (!is_complex()) {
- // THROW_BADARG("Argument " << argnum << " cannot be a real sparse
matrix");
- // }
- // assert(gfi_array_get_ndim(arg)==2);
- // M = gf_cplx_sparse_csc_const_ref((complex_type*)gfi_sparse_get_pr(arg),
gfi_sparse_get_ir(arg), gfi_sparse_get_jc(arg),
- //
gfi_array_get_dim(arg)[0],gfi_array_get_dim(arg)[1]);
- // }
+ /* get a (native only) sparse matrix */
+ void mexarg_in::to_sparse(gf_real_sparse_csc_const_ref& M) {
+ if (gfi_array_get_class(arg) != GFI_SPARSE) {
+ THROW_BADARG("Argument " << argnum <<
+ " was expected to be a sparse matrix");
+ }
+ if (is_complex()) {
+ THROW_BADARG("Argument " << argnum <<
+ " cannot be a complex sparse matrix");
+ }
+ assert(gfi_array_get_ndim(arg)==2);
+ M = gf_real_sparse_csc_const_ref(gfi_sparse_get_pr(arg),
+ gfi_sparse_get_ir(arg),
+ gfi_sparse_get_jc(arg),
+ gfi_array_get_dim(arg)[0],
+ gfi_array_get_dim(arg)[1]);
+ }
+
+ void mexarg_in::to_sparse(gf_cplx_sparse_csc_const_ref& M) {
+ if (gfi_array_get_class(arg) != GFI_SPARSE) {
+ THROW_BADARG("Argument " << argnum <<
+ " was expected to be a sparse matrix");
+ }
+ if (!is_complex()) {
+ THROW_BADARG("Argument " << argnum << " cannot be a real sparse matrix");
+ }
+ assert(gfi_array_get_ndim(arg)==2);
+ M = gf_cplx_sparse_csc_const_ref((complex_type*)gfi_sparse_get_pr(arg),
+ gfi_sparse_get_ir(arg),
+ gfi_sparse_get_jc(arg),
+ gfi_array_get_dim(arg)[0],
+ gfi_array_get_dim(arg)[1]);
+ }
/* get a (native or getfem) sparse matrix */
std::shared_ptr<gsparse> mexarg_in::to_sparse() {
@@ -783,11 +790,11 @@
} else {
id_type id,cid;
to_object_id(&id,&cid);
- if (cid != GSPARSE_CLASS_ID)
+ if (cid != SPMAT_CLASS_ID)
THROW_BADARG("Argument " << argnum <<
" was expected to be a sparse matrix");
auto gsp=workspace2().shared_pointer(id,name_of_getfemint_class_id(cid));
- auto gsp2= const_pointer_cast<gsparse>
+ auto gsp2= std::const_pointer_cast<gsparse>
(std::dynamic_pointer_cast<const gsparse>(gsp));
GMM_ASSERT1(gsp2.get(), "Internal error");
return gsp2;
@@ -911,8 +918,8 @@
}
if (fmt == USE_GSPARSE) {
auto gsp = std::make_shared<gsparse>();
- gsp.swap(M);
- store_poly_object(gsp);
+ gsp->swap(M);
+ store_spmat_object(gsp);
} else {
M.to_csc();
size_type nnz = M.nnz();
Modified: trunk/getfem/interface/src/getfemint.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/getfemint.h?rev=5172&r1=5171&r2=5172&view=diff
==============================================================================
--- trunk/getfem/interface/src/getfemint.h (original)
+++ trunk/getfem/interface/src/getfemint.h Wed Dec 9 20:15:41 2015
@@ -543,8 +543,8 @@
sub_index to_sub_index();
getfem::base_node to_base_node() { return to_base_node(-1); }
getfem::base_node to_base_node(int expected_dim);
- // void to_sparse(gf_real_sparse_csc_const_ref& M);
- // void to_sparse(gf_cplx_sparse_csc_const_ref& M);
+ void to_sparse(gf_real_sparse_csc_const_ref& M);
+ void to_sparse(gf_cplx_sparse_csc_const_ref& M);
std::shared_ptr<gsparse> to_sparse();
mexarg_in &check_trailing_dimension(int expected_dim);
Modified: trunk/getfem/interface/src/getfemint_gsparse.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/getfemint_gsparse.h?rev=5172&r1=5171&r2=5172&view=diff
==============================================================================
--- trunk/getfem/interface/src/getfemint_gsparse.h (original)
+++ trunk/getfem/interface/src/getfemint_gsparse.h Wed Dec 9 20:15:41 2015
@@ -129,6 +129,7 @@
void to_wsc();
void to_csc();
void to_complex();
+ size_type memsize() const { return 0; /* TODO ! */ }
size_type ncols() const;
size_type nrows() const;
size_type nnz() const;
Modified: trunk/getfem/interface/src/getfemint_precond.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/getfemint_precond.h?rev=5172&r1=5171&r2=5172&view=diff
==============================================================================
--- trunk/getfem/interface/src/getfemint_precond.h (original)
+++ trunk/getfem/interface/src/getfemint_precond.h Wed Dec 9 20:15:41 2015
@@ -48,9 +48,9 @@
struct gprecond_base {
size_type nrows_, ncols_;
enum { IDENTITY, DIAG, ILDLT, ILDLTT, ILU, ILUT, SUPERLU, SPMAT } type;
- getfemint_gsparse *gsp;
- size_type nrows(void) const { return gsp ? gsp->sparse().nrows() : nrows_;
}
- size_type ncols(void) const { return gsp ? gsp->sparse().ncols() : ncols_;
}
+ gsparse *gsp;
+ size_type nrows(void) const { return gsp ? gsp->nrows() : nrows_; }
+ size_type ncols(void) const { return gsp ? gsp->ncols() : ncols_; }
void set_dimensions(size_type m, size_type n) { nrows_ = m; ncols_ = n; }
gprecond_base() : nrows_(0), ncols_(0), type(IDENTITY), gsp(0) {}
const char *name() const {
@@ -79,7 +79,7 @@
//typedef enum { REAL, COMPLEX } value_type;
gsparse::value_type v;
- bool is_complex() { if (p.get() && p->gsp) return
p->gsp->sparse().is_complex();
+ bool is_complex() { if (p.get() && p->gsp) return p->gsp->is_complex();
else return v == gsparse::COMPLEX; }
gprecond<scalar_type> &precond(scalar_type) {
GMM_ASSERT1(!is_complex(), "cannot use a COMPLEX preconditionner with
REAL data");
@@ -170,7 +170,7 @@
else
precond.superlu->solve(w,v,gmm::SuperLU_factor<T>::LU_TRANSP);
break;
case getfemint::gprecond_base::SPMAT:
- precond.gsp->sparse().mult_or_transposed_mult(v, w, !do_mult);
+ precond.gsp->mult_or_transposed_mult(v, w, !do_mult);
break;
}
}
Modified: trunk/getfem/interface/src/gf_precond.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/gf_precond.cc?rev=5172&r1=5171&r2=5172&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_precond.cc (original)
+++ trunk/getfem/interface/src/gf_precond.cc Wed Dec 9 20:15:41 2015
@@ -95,12 +95,12 @@
}
static void
-precond_spmat(getfemint_gsparse *gsp, mexargs_out& out) {
+precond_spmat(gsparse *gsp, mexargs_out& out) {
getfemint_precond *precond = new getfemint_precond(gsparse::REAL);
out.pop().from_object_id(workspace().push_object(precond), PRECOND_CLASS_ID);
precond->precond(scalar_type()).type = gprecond_base::SPMAT;
precond->precond(scalar_type()).gsp = gsp;
- workspace().set_dependance(precond, gsp);
+ // workspace().set_dependance(precond, gsp);
}
/address@hidden
@@ -238,20 +238,23 @@
Preconditionner given explicitely by a sparse address@hidden/
sub_command
("spmat", 1, 1, 0, 1,
- getfemint_gsparse *ggsp = 0;
- if (in.front().is_gsparse()) {
- ggsp = in.pop().to_getfemint_gsparse();
+ gsparse *ggsp = 0;
+ if (is_spmat_object(in.front())) {
+ ggsp = to_spmat_object(in.pop());
} else {
- ggsp = new getfemint_gsparse();
+ auto gsp = std::make_shared<gsparse>();
+ ggsp = gsp.get();
std::shared_ptr<gsparse> src = in.pop().to_sparse();
if (src->is_complex()) {
- ggsp->sparse().allocate(src->nrows(), src->ncols(), src->storage(),
complex_type());
- gmm::copy(src->csc(complex_type()),
ggsp->sparse().csc_w(complex_type()));
+ ggsp->allocate(src->nrows(), src->ncols(), src->storage(),
+ complex_type());
+ gmm::copy(src->csc(complex_type()), ggsp->csc_w(complex_type()));
} else {
- ggsp->sparse().allocate(src->nrows(), src->ncols(), src->storage(),
scalar_type());
- gmm::copy(src->csc(scalar_type()),
ggsp->sparse().csc_w(scalar_type()));
+ ggsp->allocate(src->nrows(), src->ncols(), src->storage(),
+ scalar_type());
+ gmm::copy(src->csc(scalar_type()), ggsp->csc_w(scalar_type()));
}
- workspace().push_object(ggsp);
+ store_spmat_object(gsp);
}
precond_spmat(ggsp, out);
);
Modified: trunk/getfem/interface/src/gf_spmat.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/gf_spmat.cc?rev=5172&r1=5171&r2=5172&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_spmat.cc (original)
+++ trunk/getfem/interface/src/gf_spmat.cc Wed Dec 9 20:15:41 2015
@@ -201,7 +201,7 @@
will return a 40x5 address@hidden/
sub_command
("copy", 1, 3, 0, 1,
- gsparse *A = to_spmat_object(in.pop());
+ std::shared_ptr<gsparse> A = in.pop().to_sparse();
if (!A->is_complex()) {
copy_spmat(*A, *gsp, in, scalar_type());
} else {
@@ -225,8 +225,8 @@
may have to use ``SPMAT:SET('to_complex')`` @*/
sub_command
("mult", 2, 2, 0, 1,
- gsparse *A = to_spmat_object(in.pop());
- gsparse *B = to_spmat_object(in.pop());
+ std::shared_ptr<gsparse> A = in.pop().to_sparse();
+ std::shared_ptr<gsparse> B = in.pop().to_sparse();
size_type m = A->nrows(); size_type n = B->ncols();
if (A->is_complex() != B->is_complex())
@@ -268,8 +268,8 @@
Adding a real matrix with a complex matrix is address@hidden/
sub_command
("add", 2, 2, 0, 1,
- gsparse *A = to_spmat_object(in.pop());
- gsparse *B = to_spmat_object(in.pop());
+ std::shared_ptr<gsparse> A = in.pop().to_sparse();
+ std::shared_ptr<gsparse> B = in.pop().to_sparse();
size_type m = A->nrows(); size_type n = A->ncols();
if (A->is_complex() != B->is_complex()) {
gsp->cplx_wsc(new gsparse::t_wscmat_c(m,n));
Modified: trunk/getfem/interface/src/gf_spmat_get.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/gf_spmat_get.cc?rev=5172&r1=5171&r2=5172&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_spmat_get.cc (original)
+++ trunk/getfem/interface/src/gf_spmat_get.cc Wed Dec 9 20:15:41 2015
@@ -400,7 +400,8 @@
if (m_in.narg() < 2) THROW_BADARG( "Wrong number of input arguments");
- gsparse &gsp = *(to_spmat_object(m_in.pop()));
+ std::shared_ptr<gsparse> pgsp = m_in.pop().to_sparse();
+ gsparse &gsp = *pgsp;
std::string init_cmd = m_in.pop().to_string();
std::string cmd = cmd_normalize(init_cmd);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r5172 - /trunk/getfem/interface/src/,
Yves . Renard <=