changeset 9600:e106e1d1c083 octave-forge

Saved some computations. onebasisfunder__ is to be done as in the M-file
author rafavzqz
date Thu, 08 Mar 2012 16:21:23 +0000
parents 4855cc2231ca
children 3f9bfc8db45d
files extra/nurbs/src/tbasisfun.cc
diffstat 1 files changed, 12 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/extra/nurbs/src/tbasisfun.cc	Thu Mar 08 16:14:36 2012 +0000
+++ b/extra/nurbs/src/tbasisfun.cc	Thu Mar 08 16:21:23 2012 +0000
@@ -150,11 +150,13 @@
       Cell C = args(2).cell_value ();
       RowVector U = C(0).row_vector_value (true, true);
       RowVector V = C(1).row_vector_value (true, true);
+      double Nu, Nv;
     
       for (octave_idx_type ii=0; ii<u.cols (); ii++)
         {
-          N(ii) = onebasisfun__ (u(0, ii), octave_idx_type(p(0)), U) *
-            onebasisfun__ (u(1, ii), octave_idx_type(p(1)), V);
+          Nu = onebasisfun__ (u(0, ii), octave_idx_type(p(0)), U);
+          Nv = onebasisfun__ (u(1, ii), octave_idx_type(p(1)), V);
+          N(ii) = Nu * Nv;
 	//std::cout << "N=" << N(ii) << "\n\n\n";
         }
 
@@ -163,9 +165,9 @@
         for (octave_idx_type ii=0; ii<u.cols (); ii++)
           {
             Nder(0,ii) = onebasisfunder__ (u(0, ii), octave_idx_type(p(0)), U) *
-              onebasisfun__ (u(1, ii), octave_idx_type(p(1)), V);
-            Nder(1,ii) = onebasisfun__ (u(0, ii), octave_idx_type(p(0)), U) *
-              onebasisfunder__ (u(1, ii), octave_idx_type(p(1)), V);
+              Nv;
+            Nder(1,ii) = onebasisfunder__ (u(1, ii), octave_idx_type(p(1)), V) *
+	      Nu;
 	//std::cout << "N=" << N(ii) << "\n\n\n";
           }
         retval(1) = Nder;
@@ -176,23 +178,21 @@
       RowVector U = C(0).row_vector_value (true, true);
       RowVector V = C(1).row_vector_value (true, true);
       RowVector W = C(2).row_vector_value (true, true);
+      double Nu, Nv, Nw;
     
       for (octave_idx_type ii=0; ii<u.cols (); ii++)
         {
-          N(ii) = onebasisfun__ (u(0, ii), octave_idx_type(p(0)), U) *
-            onebasisfun__ (u(1, ii), octave_idx_type(p(1)), V) *
-            onebasisfun__ (u(2, ii), octave_idx_type(p(2)), W);
+          Nu = onebasisfun__ (u(0, ii), octave_idx_type(p(0)), U);
+          Nv = onebasisfun__ (u(1, ii), octave_idx_type(p(1)), V);
+          Nw = onebasisfun__ (u(2, ii), octave_idx_type(p(2)), W);
+          N(ii) = Nu * Nv * Nw;
 	//std::cout << "N=" << N(ii) << "\n\n\n";
         }
 
       if (nargout == 2) {
         Matrix Nder (3, u.cols());
-        double Nu, Nv, Nw;
         for (octave_idx_type ii=0; ii<u.cols (); ii++)
           {
-            Nu = onebasisfun__ (u(0, ii), octave_idx_type(p(0)), U);
-            Nv = onebasisfun__ (u(1, ii), octave_idx_type(p(1)), V);
-            Nw = onebasisfun__ (u(2, ii), octave_idx_type(p(2)), W);
             Nder(0,ii) = onebasisfunder__ (u(0, ii), octave_idx_type(p(0)), U) *
               Nv * Nw;
             Nder(1,ii) = onebasisfunder__ (u(1, ii), octave_idx_type(p(1)), V) *