File: miniBasis.cpp

package info (click to toggle)
gmsh 4.8.4%2Bds2-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 87,812 kB
  • sloc: cpp: 378,014; ansic: 99,669; yacc: 7,216; python: 6,680; java: 3,486; lisp: 659; lex: 621; perl: 571; makefile: 470; sh: 440; xml: 415; javascript: 113; pascal: 35; modula3: 32
file content (149 lines) | stat: -rw-r--r-- 3,593 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
// Gmsh - Copyright (C) 1997-2021 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.

#include "miniBasis.h"
#include "BasisFactory.h"

miniBasisTri::miniBasisTri()
{
  type = MSH_TRI_MINI;
  parentType = TYPE_TRI;
  order = 3;
  dimension = 2;
  numFaces = 3;
  serendip = false;
  const nodalBasis &p1 = *BasisFactory::getNodalBasis(MSH_TRI_3);
  closures = p1.closures;
  fullClosures = p1.fullClosures;
  for(size_t i = 0; i < fullClosures.size(); ++i) {
    fullClosures[i].push_back(3);
  }
  closureRef = p1.closureRef;
  points = p1.points;
  points.resize(4, 2);
  points(0, 0) = 0.;
  points(0, 1) = 0.;
  points(1, 0) = 1.;
  points(1, 1) = 0.;
  points(2, 0) = 0.;
  points(2, 1) = 1.;
  points(3, 0) = 1. / 3;
  points(3, 1) = 1. / 3;
  /*
  monomials :
    0 : 1
    1 : x
    2 : y
    3 : xy
    4 : x²y
    5 : xy²
  fs :
    0 : 1 -1 -1  0  0  0 : 1 - x - y
    1 : 1  0  0  0  0  0 : x
    2 : 0  1  0  0  0  0 : y
    3 : 0  0  0  1 -1 -1 : xy - x²y - xy² = (1 - x - y) x y
  */
  monomials.resize(6, 2);
  monomials(0, 0) = 0.;
  monomials(0, 1) = 0.;
  monomials(1, 0) = 1.;
  monomials(1, 1) = 0.;
  monomials(2, 0) = 0.;
  monomials(2, 1) = 1.;
  monomials(3, 0) = 1.;
  monomials(3, 1) = 1.;
  monomials(4, 0) = 2.;
  monomials(4, 1) = 1.;
  monomials(5, 0) = 1.;
  monomials(5, 1) = 2.;
  coefficients.resize(4, 6);
  coefficients.setAll(0.);
  coefficients(0, 0) = 1.;
  coefficients(0, 1) = -1.;
  coefficients(0, 2) = -1.;
  coefficients(1, 1) = 1.;
  coefficients(2, 2) = 1.;
  coefficients(3, 3) = 1.;
  coefficients(3, 4) = -1.;
  coefficients(3, 5) = -1.;
}

miniBasisTet::miniBasisTet()
{
  type = MSH_TET_MINI;
  parentType = TYPE_TET;
  order = 3;
  dimension = 3;
  numFaces = 4;
  serendip = false;
  const nodalBasis &p1 = *BasisFactory::getNodalBasis(MSH_TET_4);
  closures = p1.closures;
  fullClosures = p1.fullClosures;
  for(size_t i = 0; i < fullClosures.size(); ++i) {
    fullClosures[i].push_back(4);
  }
  closureRef = p1.closureRef;
  points.resize(5, 3);
  for(int i = 0; i < 4; ++i)
    for(int j = 0; j < 3; ++j) points(i, j) = p1.points(i, j);
  points(4, 0) = points(4, 1) = points(4, 2) = 1. / 4;

  /*
  monomials :
    0 : 1
    1 : x
    2 : y
    3 : z
    4 : xyz
    5 : x²yz
    6 : xy²z
    7 : xyz²
  sf :
    0 : 1 -1 -1 -1  0  0  0  0 : 1 - x - y - z
    1 : 0  1  0  0  0  0  0  0 : x
    2 : 0  0  1  0  0  0  0  0 : y
    3 : 0  0  0  1  0  0  0  0 : z
    4 : 0  0  0  0  1 -1 -1 -1 : xyz - x²yz - xy²z - xyz² = (1 - x - y - z) x y
  z
  */
  monomials.resize(8, 3);
  monomials(0, 0) = 0.;
  monomials(0, 1) = 0.;
  monomials(0, 2) = 0.;
  monomials(1, 0) = 1.;
  monomials(1, 1) = 0.;
  monomials(1, 2) = 0.;
  monomials(2, 0) = 0.;
  monomials(2, 1) = 1.;
  monomials(2, 2) = 0.;
  monomials(3, 0) = 0.;
  monomials(3, 1) = 0.;
  monomials(3, 2) = 1.;
  monomials(4, 0) = 1.;
  monomials(4, 1) = 1.;
  monomials(4, 2) = 1.;
  monomials(5, 0) = 2.;
  monomials(5, 1) = 1.;
  monomials(5, 2) = 1.;
  monomials(6, 0) = 1.;
  monomials(6, 1) = 2.;
  monomials(6, 2) = 1.;
  monomials(7, 0) = 1.;
  monomials(7, 1) = 1.;
  monomials(7, 2) = 2.;
  coefficients.resize(5, 8);
  coefficients.setAll(0.);
  coefficients(0, 0) = 1.;
  coefficients(0, 1) = -1.;
  coefficients(0, 2) = -1.;
  coefficients(0, 3) = -1.;
  coefficients(1, 1) = 1.;
  coefficients(2, 2) = 1.;
  coefficients(3, 3) = 1.;
  coefficients(4, 4) = 1.;
  coefficients(4, 5) = -1.;
  coefficients(4, 6) = -1.;
  coefficients(4, 7) = -1.;
}