Pārlūkot izejas kodu

make quad_rule public

Dhairya Malhotra 6 gadi atpakaļ
vecāks
revīzija
5fb655f1d6
1 mainītis faili ar 34 papildinājumiem un 34 dzēšanām
  1. 34 34
      include/sctl/cheb_utils.hpp

+ 34 - 34
include/sctl/cheb_utils.hpp

@@ -1001,40 +1001,6 @@ template <class ValueType, class Derived> class BasisInterface {
     }
   }
 
- private:
-  BasisInterface() {
-    void (*EvalBasis1D)(Integer, const Vector<ValueType>&, Vector<ValueType>&) = Derived::EvalBasis1D;
-    void (*Nodes1D)(Integer, Vector<ValueType>&) = Derived::Nodes1D;
-  }
-
-  static void cheb_nodes_1d(Integer order, Vector<ValueType>& nodes) {
-    if (nodes.Dim() != order) nodes.ReInit(order);
-    for (Integer i = 0; i < order; i++) {
-      nodes[i] = -cos<ValueType>((i + (ValueType)0.5) * const_pi<ValueType>() / order) * (ValueType)0.5 + (ValueType)0.5;
-    }
-  }
-
-  static void cheb_basis_1d(Integer order, const Vector<ValueType>& x, Vector<ValueType>& y) {
-    Integer n = x.Dim();
-    if (y.Dim() != order * n) y.ReInit(order * n);
-
-    if (order > 0) {
-      for (Long i = 0; i < n; i++) {
-        y[i] = 1.0;
-      }
-    }
-    if (order > 1) {
-      for (Long i = 0; i < n; i++) {
-        y[i + n] = x[i] * 2 - 1;
-      }
-    }
-    for (Integer i = 2; i < order; i++) {
-      for (Long j = 0; j < n; j++) {
-        y[i * n + j] = 2 * y[n + j] * y[i * n - 1 * n + j] - y[i * n - 2 * n + j];
-      }
-    }
-  }
-
   static void quad_rule(Integer order, Vector<ValueType>& x, Vector<ValueType>& w) {
     static Vector<Vector<ValueType>> x_lst(10000);
     static Vector<Vector<ValueType>> w_lst(x_lst.Dim());
@@ -1096,6 +1062,40 @@ template <class ValueType, class Derived> class BasisInterface {
     quad_rule(order, x, w);
   }
 
+ private:
+  BasisInterface() {
+    void (*EvalBasis1D)(Integer, const Vector<ValueType>&, Vector<ValueType>&) = Derived::EvalBasis1D;
+    void (*Nodes1D)(Integer, Vector<ValueType>&) = Derived::Nodes1D;
+  }
+
+  static void cheb_nodes_1d(Integer order, Vector<ValueType>& nodes) {
+    if (nodes.Dim() != order) nodes.ReInit(order);
+    for (Integer i = 0; i < order; i++) {
+      nodes[i] = -cos<ValueType>((i + (ValueType)0.5) * const_pi<ValueType>() / order) * (ValueType)0.5 + (ValueType)0.5;
+    }
+  }
+
+  static void cheb_basis_1d(Integer order, const Vector<ValueType>& x, Vector<ValueType>& y) {
+    Integer n = x.Dim();
+    if (y.Dim() != order * n) y.ReInit(order * n);
+
+    if (order > 0) {
+      for (Long i = 0; i < n; i++) {
+        y[i] = 1.0;
+      }
+    }
+    if (order > 1) {
+      for (Long i = 0; i < n; i++) {
+        y[i + n] = x[i] * 2 - 1;
+      }
+    }
+    for (Integer i = 2; i < order; i++) {
+      for (Long j = 0; j < n; j++) {
+        y[i * n + j] = 2 * y[n + j] * y[i * n - 1 * n + j] - y[i * n - 2 * n + j];
+      }
+    }
+  }
+
   static ValueType machine_eps() {
     ValueType eps = 1.0;
     while (eps + (ValueType)1.0 > 1.0) eps *= 0.5;