Select Git revision
SphericalRaise.cpp
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);