Skip to content
Snippets Groups Projects
Select Git revision
  • 07070da8458b307f08234cdc4843ef7a0c4aaa74
  • master default
  • cgnsUnstructured
  • partitioning
  • poppler
  • HighOrderBLCurving
  • gmsh_3_0_4
  • gmsh_3_0_3
  • gmsh_3_0_2
  • gmsh_3_0_1
  • gmsh_3_0_0
  • gmsh_2_16_0
  • gmsh_2_15_0
  • gmsh_2_14_1
  • gmsh_2_14_0
  • gmsh_2_13_2
  • gmsh_2_13_1
  • gmsh_2_12_0
  • gmsh_2_11_0
  • gmsh_2_10_1
  • gmsh_2_10_0
  • gmsh_2_9_3
  • gmsh_2_9_2
  • gmsh_2_9_1
  • gmsh_2_9_0
  • gmsh_2_8_6
26 results

FunctionSpaceScalar.cpp

Blame
  • Forked from gmsh / gmsh
    Source project has a limited visibility.
    Integration3D.cpp 119.60 KiB
    #ifndef INTEGRATION3D_CC
    #define INTEGRATION3D_CC
    
    #include "Integration3D.h"
    #include "recurCut.h"
    #include "../../Numeric/Gauss.h"
    
    #define ZERO_LS_TOL  1.e-7
    #define EQUALITY_TOL 1.e-15
    
    // cross product
    inline void cross(const double *v1, const double *v2, double *v) {
      v[0] = v1[1] * v2[2] - v2[1] * v1[2];
      v[1] = v2[0] * v1[2] - v1[0] * v2[2];
      v[2] = v1[0] * v2[1] - v2[0] * v1[1];
    }
    // dot product
    inline double dot(const double *v1, const double *v2) {
      return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
    }
    // norm
    inline double norm(const double *v) {
      return sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
    }
    // substract
    inline void vec (const double *x1, const double *x2, double *v) {
      v[0] = x2[0] - x1[0]; v[1] = x2[1] - x1[1]; v[2] = x2[2] - x1[2];
    }
    inline void vec (const DI_Point &p1, const DI_Point &p2, double *v) {
      v[0] = p2.x() - p1.x(); v[1] = p2.y() - p1.y(); v[2] = p2.z() - p1.z();
    }
    inline double sq2 (const double a) {return a * a;}
    
    // determinant
    inline double det3(double d11, double d12, double d13,
                       double d21, double d22, double d23,
                       double d31, double d32, double d33) {
      return d11 * (d22 * d33 - d23 * d32) - d21 * (d12 * d33 - d13 * d32) + d31 * (d12 * d23 - d13 * d22);
    }
    inline double det4 (double d11, double d12, double d13, double d14,
                        double d21, double d22, double d23, double d24,
                        double d31, double d32, double d33, double d34,
                        double d41, double d42, double d43, double d44) {
      return d11 * det3(d22, d23, d24, d32, d33, d34, d42, d43, d44)
           - d21 * det3(d12, d13, d14, d32, d33, d34, d42, d43, d44)
           + d31 * det3(d12, d13, d14, d22, d23, d24, d42, d43, d44)
           - d41 * det3(d12, d13, d14, d22, d23, d24, d32, d33, d34);
    }
    
    // distance
    inline double distance(const DI_Point &p1, const DI_Point &p2) {
      return sqrt((p1.x() - p2.x()) * (p1.x() - p2.x())
                + (p1.y() - p2.y()) * (p1.y() - p2.y())
                + (p1.z() - p2.z()) * (p1.z() - p2.z()));
    }
    inline double distance(const DI_CuttingPoint &p1, const DI_CuttingPoint &p2) {
      return sqrt((p1.x() - p2.x()) * (p1.x() - p2.x())
                + (p1.y() - p2.y()) * (p1.y() - p2.y())
                + (p1.z() - p2.z()) * (p1.z() - p2.z()));
    }
    
    // middle of 2 points
    inline DI_Point middle (const DI_Point &p1, const DI_Point &p2) {
      return DI_Point ((p1.x() + p2.x()) / 2, (p1.y() + p2.y()) / 2, (p1.z() + p2.z()) / 2);
    }
    inline DI_Point middle (const DI_Point &p1, const DI_Point &p2, const DI_Element *e, const std::vector<const gLevelset *> RPNi) {
      return DI_Point ((p1.x() + p2.x()) / 2, (p1.y() + p2.y()) / 2, (p1.z() + p2.z()) / 2, e, RPNi);
    }
    
    // barycentre