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