getfem-commits
[Top][All Lists]
Advanced

[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);
 




reply via email to

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