getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] (no subject)


From: Markus Bürg
Subject: [Getfem-commits] (no subject)
Date: Thu, 17 Aug 2017 05:48:59 -0400 (EDT)

branch: mb-transInversion
commit 030923a58c60f481a465a6615ea662d4d4087c59
Author: mb <address@hidden>
Date:   Thu Aug 17 11:48:54 2017 +0200

    Remove cvpts.
---
 src/bgeot_geotrans_inv.cc       | 16 +++++++++-------
 src/getfem/bgeot_geotrans_inv.h |  5 -----
 2 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/src/bgeot_geotrans_inv.cc b/src/bgeot_geotrans_inv.cc
index 132eeb3..9172f26 100644
--- a/src/bgeot_geotrans_inv.cc
+++ b/src/bgeot_geotrans_inv.cc
@@ -87,13 +87,13 @@ namespace bgeot
     geotrans_inv_convex_bfgs(geotrans_inv_convex &gic_, 
                             const base_node &xr) : gic(gic_), xreal(xr) {}
     scalar_type operator()(const base_node& x) const {
-      base_node r = gic.pgt->transform(x, gic.cvpts) - xreal;
+      base_node r = gic.pgt->transform(x, gic.G) - xreal;
       return gmm::vect_norm2_sqr(r)/2.;
     }
     void operator()(const base_node& x, base_small_vector& gr) const {
       gic.pgt->poly_vector_grad(x, gic.pc);
       gic.update_B();
-      base_node r = gic.pgt->transform(x, gic.cvpts) - xreal;
+      base_node r = gic.pgt->transform(x, gic.G) - xreal;
       gr.resize(x.size());
       gmm::mult(gmm::transposed(gic.K), r, gr); 
     }
@@ -105,15 +105,17 @@ namespace bgeot
   bool geotrans_inv_convex::invert_nonlin(const base_node& xreal,
                                  base_node& x, scalar_type IN_EPS,
                                  bool &converged, bool throw_except) {
+    using namespace gmm;
+
     converged = true;
     base_node xn(P), y, z,x0;
     /* find an initial guess */
-    x0 = (pgt->geometric_nodes())[0]; y = cvpts[0];  
+    x0 = (pgt->geometric_nodes())[0]; copy(mat_col(G, 0), y);  
     scalar_type d = gmm::vect_dist2_sqr(y, xreal);
     for (size_type j = 1; j < pgt->nb_points(); ++j) { 
-      scalar_type d2 = gmm::vect_dist2_sqr(cvpts[j], xreal);
+      scalar_type d2 = gmm::vect_dist2_sqr(mat_col(G, j), xreal);
       if (d2 < d)
-        { d = d2; x0 = pgt->geometric_nodes()[j]; y = cvpts[j]; }
+        { d = d2; x0 = pgt->geometric_nodes()[j]; copy(mat_col(G, j), y); }
     }
     x = x0;
 
@@ -132,7 +134,7 @@ namespace bgeot
       scalar_type newres;
       for (unsigned i=1; i<=256; i*=2) {
        z = x + xn / scalar_type(i);
-       y = pgt->transform(z, cvpts);
+       y = pgt->transform(z, G);
        
        rn = xreal - y; 
        
@@ -160,7 +162,7 @@ namespace bgeot
       gmm::iteration iter(EPS,0);
       x = x0;
       gmm::bfgs(b,b,x,10,iter);
-      rn = pgt->transform(x,cvpts) - xreal; 
+      rn = pgt->transform(x, G) - xreal; 
       
       if (pgt->convex_ref()->is_in(x) < IN_EPS &&
          (N==P && gmm::vect_norm2(rn) > IN_EPS)) {
diff --git a/src/getfem/bgeot_geotrans_inv.h b/src/getfem/bgeot_geotrans_inv.h
index 9195942..17cf465 100644
--- a/src/getfem/bgeot_geotrans_inv.h
+++ b/src/getfem/bgeot_geotrans_inv.h
@@ -64,8 +64,6 @@ namespace bgeot {
     size_type N, P;
     base_matrix G, pc, K, B, CS;
     pgeometric_trans pgt;
-    std::vector<base_node> cvpts; /* used only for non-linear geotrans
-                                 -- we should use the matrix a instead... */
     scalar_type EPS;
   public:
     const base_matrix &get_G() const { return G; }
@@ -145,9 +143,6 @@ namespace bgeot {
       }
       // computation of the pseudo inverse
       update_B();
-    } else { /* not much to precompute for non-linear geometric
-               transformations .. */
-      cvpts.assign(nodes.begin(), nodes.end());
     }
   }
 



reply via email to

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