Skip to content
Snippets Groups Projects
Commit 89317b9c authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

draw serendip pyramids as linear ones for now

parent 05d79704
Branches
Tags
No related merge requests found
......@@ -37,13 +37,16 @@ MPyramidN::~MPyramidN() {}
int MPyramidN::getNumEdgesRep(bool curved)
{
return curved ? 8 * CTX::instance()->mesh.numSubEdges : 8;
// FIXME: remove !getIsAssimilatedSerendipity() when serendip are implemented
return (curved && !getIsAssimilatedSerendipity()) ?
8 * CTX::instance()->mesh.numSubEdges : 8;
}
void MPyramidN::getEdgeRep(bool curved, int num,
double *x, double *y, double *z, SVector3 *n)
{
if (curved) {
// FIXME: remove !getIsAssimilatedSerendipity() when serendip are implemented
if (curved && !getIsAssimilatedSerendipity()) {
int numSubEdges = CTX::instance()->mesh.numSubEdges;
static double pp[5][3] = {{-1,-1,0},{1,-1,0},{1,1,0},{-1,1,0},{0,0,1}};
static int ed [8][2] = {{0,1},{0,3},{0,4},{1,2},{1,4},{2,3},{2,4},{3,4}};
......@@ -79,7 +82,9 @@ void MPyramidN::getEdgeRep(bool curved, int num,
int MPyramidN::getNumFacesRep(bool curved)
{
return curved ? 6 * gmsh_SQU(CTX::instance()->mesh.numSubEdges) : 6;
// FIXME: remove !getIsAssimilatedSerendipity() when serendip are implemented
return (curved && !getIsAssimilatedSerendipity()) ?
6 * gmsh_SQU(CTX::instance()->mesh.numSubEdges) : 6;
}
static void _myGetFaceRep(MPyramid *pyr, int num, double *x, double *y, double *z,
......@@ -321,6 +326,8 @@ static void _myGetFaceRep(MPyramid *pyr, int num, double *x, double *y, double *
void MPyramidN::getFaceRep(bool curved, int num,
double *x, double *y, double *z, SVector3 *n)
{
if (curved) _myGetFaceRep(this, num, x, y, z, n, CTX::instance()->mesh.numSubEdges);
// FIXME: remove !getIsAssimilatedSerendipity() when serendip are implemented
if (curved && !getIsAssimilatedSerendipity())
_myGetFaceRep(this, num, x, y, z, n, CTX::instance()->mesh.numSubEdges);
else MPyramid::getFaceRep(false, num, x, y, z, n);
}
......@@ -75,7 +75,8 @@ class MPyramid : public MElement {
return MEdge(_v[edges_pyramid(num, 0)], _v[edges_pyramid(num, 1)]);
}
virtual int getNumEdgesRep(bool curved){ return 8; }
virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z,
SVector3 *n)
{
static const int f[8] = {0, 1, 1, 2, 0, 3, 2, 3};
MEdge e(getEdge(num));
......@@ -97,7 +98,8 @@ class MPyramid : public MElement {
return MFace(_v[0], _v[3], _v[2], _v[1]);
}
virtual int getNumFacesRep(bool curved){ return 6; }
virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z,
SVector3 *n)
{
static const int f[6][3] = {
{0, 1, 4},
......@@ -230,7 +232,6 @@ class MPyramidN : public MPyramid {
for (unsigned int i = 0; i < _vs.size(); i++) _vs[i]->setPolynomialOrder(_order);
getFunctionSpace(order);
}
MPyramidN(const std::vector<MVertex*> &v, char order, int num=0, int part=0)
: MPyramid(v[0], v[1], v[2], v[3], v[4], num, part), _order(order)
{
......@@ -238,13 +239,14 @@ class MPyramidN : public MPyramid {
for (unsigned int i = 0; i < _vs.size(); i++) _vs[i]->setPolynomialOrder(_order);
getFunctionSpace(order);
}
~MPyramidN();
virtual int getPolynomialOrder() const { return _order; }
virtual int getNumVertices() const { return 5 + _vs.size(); }
virtual MVertex *getVertex(int num){ return num < 5 ? _v[num] : _vs[num - 5]; }
virtual const MVertex *getVertex(int num) const{ return num < 5 ? _v[num] : _vs[num - 5]; }
virtual const MVertex *getVertex(int num) const
{
return num < 5 ? _v[num] : _vs[num - 5];
}
virtual int getNumEdgeVertices() const { return 8 * (_order - 1); }
virtual int getNumFaceVertices() const
{
......@@ -319,20 +321,22 @@ class MPyramidN : public MPyramid {
}
virtual void reverse()
{
/* MVertex *tmp;
/*
MVertex *tmp;
tmp = _v[1]; _v[1] = _v[2]; _v[2] = tmp;
std::vector<MVertex*> inv(_vs.size());
std::vector<int> reverseIndices = _getReverseIndices(_order);
for (unsigned int i = 0; i< _vs.size(); i++)
inv[i] = _vs[reverseIndices[i + 4] - 4];
_vs = inv;*/
_vs = inv;
*/
Msg::Error("Reverse not implemented yet for MPyramidN");
}
virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n);
virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z,
SVector3 *n);
virtual int getNumEdgesRep(bool curved);
virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n);
virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z,
SVector3 *n);
virtual int getNumFacesRep(bool curved);
virtual void getNode(int num, double &u, double &v, double &w) const
{
......
......@@ -7,12 +7,9 @@
#define PYRAMIDALBASIS_H
#include "fullMatrix.h"
#include "nodalBasis.h"
#include "BergotBasis.h"
class pyramidalBasis: public nodalBasis
{
private:
......@@ -37,6 +34,4 @@ class pyramidalBasis: public nodalBasis
virtual int getNumShapeFunctions() const;
};
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment