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

SphericalRaise.cpp

Blame
  • Forked from gmsh / gmsh
    Source project has a limited visibility.
    nodalBasis.cpp 21.91 KiB
    // Gmsh - Copyright (C) 1997-2014 C. Geuzaine, J.-F. Remacle
    //
    // See the LICENSE.txt file for license information. Please report all
    // bugs and problems to the public mailing list <gmsh@geuz.org>.
    
    #include <limits>
    #include <cmath>
    #include <algorithm>
    #include "nodalBasis.h"
    #include "BasisFactory.h"
    #include "pointsGenerators.h"
    
    namespace ClosureGen {
      inline double pow2(double x)
      {
        return x * x;
      }
    
      void rotateHex(int iFace, int iRot, int iSign, double uI, double vI,
                     double &uO, double &vO, double &wO)
      {
        if (iSign<0){
          double tmp=uI;
          uI=vI;
          vI=tmp;
        }
        for (int i=0; i < iRot; i++){
          double tmp=uI;
          uI=-vI;
          vI=tmp;
        }
        switch (iFace) {
          case 0: uO = vI; vO = uI; wO=-1; break;
          case 1: uO = uI; vO = -1; wO=vI; break;
          case 2: uO =-1;  vO = vI; wO=uI; break;
          case 3: uO = 1;  vO = uI; wO=vI; break;
          case 4: uO =-uI; vO = 1;  wO=vI; break;
          case 5: uO =uI;  vO = vI; wO=1; break;
        }
      }
    
      void rotateHexFull(int iFace, int iRot, int iSign, double uI, double vI,
                         double wI, double &uO, double &vO, double &wO)
      {
        switch (iFace) {
          case 0: uO = uI; vO = vI; wO = wI; break;
          case 1: uO = wI; vO = uI; wO = vI; break;
          case 2: uO = vI; vO = wI; wO = uI; break;
          case 3: uO = wI; vO = vI; wO =-uI; break;
          case 4: uO = wI; vO =-uI; wO =-vI; break;
          case 5: uO = vI; vO = uI; wO =-wI; break;
        }
        for (int i = 0; i < iRot; i++){
          double tmp = uO;
          uO = -vO;
          vO = tmp;
        }
        if (iSign<0){
          double tmp = uO;
          uO = vO;
          vO = tmp;
        }
      }
    
      void generate1dVertexClosure(nodalBasis::clCont &closure, int order)
      {
        closure.clear();
        closure.resize(2);
        closure[0].push_back(0);
        closure[1].push_back(order == 0 ? 0 : 1);