Skip to content
Snippets Groups Projects
Select Git revision
  • a53e31e99bcd73ff53087fa273a6bb1ded8e1d0d
  • 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

nodalBasis.cpp

Blame
  • Forked from gmsh / gmsh
    Source project has a limited visibility.
    Numeric.cpp 36.88 KiB
    // Gmsh - Copyright (C) 1997-2012 C. Geuzaine, J.-F. Remacle
    //
    // See the LICENSE.txt file for license information. Please report all
    // bugs and problems to <gmsh@geuz.org>.
    
    #include "GmshConfig.h"
    #include "GmshMessage.h"
    #include "Numeric.h"
    
    #define SQU(a)      ((a)*(a))
    
    double myatan2(double a, double b)
    {
      if(a == 0.0 && b == 0)
        return 0.0;
      return atan2(a, b);
    }
    
    double myasin(double a)
    {
      if(a <= -1.)
        return -M_PI / 2.;
      else if(a >= 1.)
        return M_PI / 2.;
      else
        return asin(a);
    }
    
    double myacos(double a)
    {
      if(a <= -1.)
        return M_PI;
      else if(a >= 1.)
        return 0.;
      else
        return acos(a);
    }
    
    void matvec(double mat[3][3], double vec[3], double res[3])
    {
      res[0] = mat[0][0] * vec[0] + mat[0][1] * vec[1] + mat[0][2] * vec[2];
      res[1] = mat[1][0] * vec[0] + mat[1][1] * vec[1] + mat[1][2] * vec[2];
      res[2] = mat[2][0] * vec[0] + mat[2][1] * vec[1] + mat[2][2] * vec[2];
    }
    
    void matmat(double mat1[3][3], double mat2[3][3], double res[3][3])
    {
      res[0][0] = mat1[0][0]*mat2[0][0] + mat1[0][1]*mat2[1][0] + mat1[0][2]*mat2[2][0];
      res[0][1] = mat1[0][0]*mat2[0][1] + mat1[0][1]*mat2[1][1] + mat1[0][2]*mat2[2][1];
      res[0][2] = mat1[0][0]*mat2[0][2] + mat1[0][1]*mat2[1][2] + mat1[0][2]*mat2[2][2];
      res[1][0] = mat1[1][0]*mat2[0][0] + mat1[1][1]*mat2[1][0] + mat1[1][2]*mat2[2][0];
      res[1][1] = mat1[1][0]*mat2[0][1] + mat1[1][1]*mat2[1][1] + mat1[1][2]*mat2[2][1];
      res[1][2] = mat1[1][0]*mat2[0][2] + mat1[1][1]*mat2[1][2] + mat1[1][2]*mat2[2][2];
      res[2][0] = mat1[2][0]*mat2[0][0] + mat1[2][1]*mat2[1][0] + mat1[2][2]*mat2[2][0];
      res[2][1] = mat1[2][0]*mat2[0][1] + mat1[2][1]*mat2[1][1] + mat1[2][2]*mat2[2][1];
      res[2][2] = mat1[2][0]*mat2[0][2] + mat1[2][1]*mat2[1][2] + mat1[2][2]*mat2[2][2];
    }
    
    void normal3points(double x0, double y0, double z0,
                       double x1, double y1, double z1,
                       double x2, double y2, double z2,
                       double n[3])
    {
      double t1[3] = {x1 - x0, y1 - y0, z1 - z0};
      double t2[3] = {x2 - x0, y2 - y0, z2 - z0};
      prodve(t1, t2, n);
      norme(n);
    }
    
    void normal2points(double x0, double y0, double z0,