File: SElement.h

package info (click to toggle)
gmsh 4.7.1%2Bds1-5
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 95,484 kB
  • sloc: cpp: 566,747; ansic: 150,384; yacc: 7,198; python: 6,130; java: 3,486; lisp: 622; lex: 621; makefile: 613; perl: 571; sh: 439; xml: 415; javascript: 113; pascal: 35; modula3: 32
file content (66 lines) | stat: -rw-r--r-- 2,171 bytes parent folder | download
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