ParMooN
 All Classes Functions Variables Friends Pages
BF_D_T_P2_3D.h
1 // ***********************************************************************
2 // P2 element, discontinuous, 3D Tetrahedra
3 //
4 // Author: Markus Wolff
5 //
6 // ***********************************************************************
7 
8 static double D_T_P2_3D_CM[100] = {
9  600,-1800,-1800,-1800,1260,2520,2520,1260,2520,1260,
10  -1800,8640,4320,4320,-7560,-10080,-10080,-2520,-5040,-2520,
11  -1800,4320,8640,4320,-2520,-10080,-5040,-7560,-10080,-2520,
12  -1800,4320,4320,8640,-2520,-5040,-10080,-2520,-10080,-7560,
13  1260,-7560,-2520,-2520,7560,7560,7560,1260,2520,1260,
14  2520,-10080,-10080,-5040,7560,20160,10080,7560,10080,2520,
15  2520,-10080,-5040,-10080,7560,10080,20160,2520,10080,7560,
16  1260,-2520,-7560,-2520,1260,7560,2520,7560,7560,1260,
17  2520,-5040,-10080,-10080,2520,10080,10080,7560,20160,7560,
18  1260,-2520,-2520,-7560,1260,2520,7560,1260,7560,7560
19 };
20 
21 static void D_T_P2_3D_Funct(double xi, double eta, double zeta,
22  double *values)
23 {
24  int nBF = 10; // number of basis functions
25  double mon[]={1,xi,eta,zeta,xi*xi,xi*eta,xi*zeta,
26  eta*eta,eta*zeta,zeta*zeta};
27  memset(values, 0.0, nBF*SizeOfDouble);
28  for(int i=0; i<nBF; i++)
29  {
30  for(int j=0; j<nBF; j++)
31  {
32  values[i] += D_T_P2_3D_CM[i+j*nBF]*mon[j];
33 
34  }
35  }
36 }
37 
38 static void D_T_P2_3D_DeriveXi(double xi, double eta, double zeta,
39  double *values)
40 {
41  int nBF = 10; // number of basis functions
42  double mon[]={0,1,0,0,2*xi,eta,zeta,
43  0,0,0};
44  memset(values, 0.0, nBF*SizeOfDouble);
45  for(int i=0; i<nBF; i++)
46  {
47  for(int j=0; j<nBF; j++)
48  {
49  values[i] += D_T_P2_3D_CM[i+j*nBF]*mon[j];
50 
51  }
52  }
53 }
54 
55 static void D_T_P2_3D_DeriveEta(double xi, double eta, double zeta,
56  double *values)
57 {
58  int nBF = 10; // number of basis functions
59  double mon[]={0,0,1,0,0,xi,0,
60  2*eta,zeta,0};
61  memset(values, 0.0, nBF*SizeOfDouble);
62  for(int i=0; i<nBF; i++)
63  {
64  for(int j=0; j<nBF; j++)
65  {
66  values[i] += D_T_P2_3D_CM[i+j*nBF]*mon[j];
67 
68  }
69  }
70 }
71 
72 static void D_T_P2_3D_DeriveZeta(double xi, double eta, double zeta,
73  double *values)
74 {
75  int nBF = 10; // number of basis functions
76  double mon[]={0,0,0,1,0,0,xi,
77  0,eta,2*zeta};
78  memset(values, 0.0, nBF*SizeOfDouble);
79  for(int i=0; i<nBF; i++)
80  {
81  for(int j=0; j<nBF; j++)
82  {
83  values[i] += D_T_P2_3D_CM[i+j*nBF]*mon[j];
84 
85  }
86  }
87 }
88 
89 static void D_T_P2_3D_DeriveXiXi(double xi, double eta, double zeta,
90  double *values)
91 {
92  int nBF = 10; // number of basis functions
93  double mon[]={0,0,0,0,2,0,0,
94  0,0,0};
95  memset(values, 0.0, nBF*SizeOfDouble);
96  for(int i=0; i<nBF; i++)
97  {
98  for(int j=0; j<nBF; j++)
99  {
100  values[i] += D_T_P2_3D_CM[i+j*nBF]*mon[j];
101 
102  }
103  }
104 }
105 
106 static void D_T_P2_3D_DeriveXiEta(double xi, double eta, double zeta,
107  double *values)
108 {
109  int nBF = 10; // number of basis functions
110  double mon[]={0,0,0,0,0,1,0,
111  0,0,0};
112  memset(values, 0.0, nBF*SizeOfDouble);
113  for(int i=0; i<nBF; i++)
114  {
115  for(int j=0; j<nBF; j++)
116  {
117  values[i] += D_T_P2_3D_CM[i+j*nBF]*mon[j];
118 
119  }
120  }
121 }
122 
123 static void D_T_P2_3D_DeriveXiZeta(double xi, double eta, double zeta,
124  double *values)
125 {
126  int nBF = 10; // number of basis functions
127  double mon[]={0,0,0,0,0,0,1,
128  0,0,0};
129  memset(values, 0.0, nBF*SizeOfDouble);
130  for(int i=0; i<nBF; i++)
131  {
132  for(int j=0; j<nBF; j++)
133  {
134  values[i] += D_T_P2_3D_CM[i+j*nBF]*mon[j];
135 
136  }
137  }
138 }
139 
140 static void D_T_P2_3D_DeriveEtaEta(double xi, double eta, double zeta,
141  double *values)
142 {
143  int nBF = 10; // number of basis functions
144  double mon[]={0,0,0,0,0,0,0,
145  2,0,0};
146  memset(values, 0.0, nBF*SizeOfDouble);
147  for(int i=0; i<nBF; i++)
148  {
149  for(int j=0; j<nBF; j++)
150  {
151  values[i] += D_T_P2_3D_CM[i+j*nBF]*mon[j];
152 
153  }
154  }
155 }
156 
157 static void D_T_P2_3D_DeriveEtaZeta(double xi, double eta, double zeta,
158  double *values)
159 {
160  int nBF = 10; // number of basis functions
161  double mon[]={0,0,0,0,0,0,0,
162  0,1,0};
163  memset(values, 0.0, nBF*SizeOfDouble);
164  for(int i=0; i<nBF; i++)
165  {
166  for(int j=0; j<nBF; j++)
167  {
168  values[i] += D_T_P2_3D_CM[i+j*nBF]*mon[j];
169 
170  }
171  }
172 }
173 
174 static void D_T_P2_3D_DeriveZetaZeta(double xi, double eta, double zeta,
175  double *values)
176 {
177  int nBF = 10; // number of basis functions
178  double mon[]={0,0,0,0,0,0,0,
179  0,0,2};
180  memset(values, 0.0, nBF*SizeOfDouble);
181  for(int i=0; i<nBF; i++)
182  {
183  for(int j=0; j<nBF; j++)
184  {
185  values[i] += D_T_P2_3D_CM[i+j*nBF]*mon[j];
186 
187  }
188  }
189 }
190 
191 TBaseFunct3D *BF_D_T_P2_3D_Obj =
192 new TBaseFunct3D(10, BF_D_T_P2_3D, BFUnitTetrahedron,
193  D_T_P2_3D_Funct, D_T_P2_3D_DeriveXi,
194  D_T_P2_3D_DeriveEta, D_T_P2_3D_DeriveZeta,
195  D_T_P2_3D_DeriveXiXi, D_T_P2_3D_DeriveXiEta,
196  D_T_P2_3D_DeriveXiZeta, D_T_P2_3D_DeriveEtaEta,
197  D_T_P2_3D_DeriveEtaZeta, D_T_P2_3D_DeriveZetaZeta,
198  2, 1,
199  0, NULL);
Definition: BaseFunct3D.h:27