1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
// Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
//
// See the LICENSE.txt file for license information. Please report all
// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
#ifndef SELEMENT_H
#define SELEMENT_H
#include "MElement.h"
#include "simpleFunction.h"
// A solver element.
// FIXME: this will change in the future (the base SElement should no
// contain anything except the MElement). More advanced solvers will
// derive and/or add containers for additional storage
class SElement {
private:
// the underlying mesh element
MElement *_e;
// store discrete function space and other data here
// ...
static simpleFunction<double> *_enrichement_s, *_enrichement_t;
// gradient of functions (possibly enriched)
void nodalFunctions(double u, double v, double w, double s[],
simpleFunction<double> *_enrichement);
void gradNodalFunctions(double u, double v, double w, double invjac[3][3],
double grad[][3],
simpleFunction<double> *_enrichment);
public:
SElement(MElement *e) : _e(e) {}
~SElement() {}
MElement *getMeshElement() const { return _e; }
static void setShapeEnrichement(simpleFunction<double> *f)
{
_enrichement_s = f;
}
static void setTestEnrichement(simpleFunction<double> *f)
{
_enrichement_t = f;
}
static const simpleFunction<double> *getShapeEnrichement()
{
return _enrichement_s;
}
static const simpleFunction<double> *getTestEnrichement()
{
return _enrichement_t;
}
int getNumNodalShapeFunctions() const;
inline MVertex *getVertex(int i) const
{
return _e->getParent() ? _e->getParent()->getVertex(i) : _e->getVertex(i);
}
int getNumNodalTestFunctions() const;
void nodalShapeFunctions(double u, double v, double w, double s[]);
void gradNodalShapeFunctions(double u, double v, double w,
double invjac[3][3], double grad[][3]);
void nodalTestFunctions(double u, double v, double w, double s[]);
void gradNodalTestFunctions(double u, double v, double w, double invjac[3][3],
double grad[][3]);
};
#endif
|