ParMooN
 All Classes Functions Variables Friends Pages
NF_N_T_P3_2D.h
1 static double NF_N_T_P3_2D_Xi[19] =
2  {
3  0.069431844202973712388026755553,
4  0.330009478207571867598667120449,
5  0.669990521792428132401332879551,
6  0.930568155797026287611973244447,
7  0.930568155797026287611973244447,
8  0.669990521792428132401332879551,
9  0.330009478207571867598667120449,
10  0.069431844202973712388026755553,
11  0, 0, 0, 0,
12 
13  0.3333333333333333,
14  0.7974269853530873, 0.1012865073234563,
15  0.1012865073234563,
16  0.05971587178976982, 0.4701420641051151,
17  0.4701420641051151
18  };
19 
20 static double NF_N_T_P3_2D_Eta[19] =
21  {
22  0, 0, 0, 0,
23  0.069431844202973712388026755553,
24  0.330009478207571867598667120449,
25  0.669990521792428132401332879551,
26  0.930568155797026287611973244447,
27  0.930568155797026287611973244447,
28  0.669990521792428132401332879551,
29  0.330009478207571867598667120449,
30  0.069431844202973712388026755553,
31 
32  0.3333333333333333,
33  0.1012865073234563, 0.7974269853530873,
34  0.1012865073234563,
35  0.4701420641051151, 0.4701420641051151,
36  0.05971587178976982
37  };
38 
39 static double NF_N_T_P3_2D_T[4] =
40  {
41  -0.861136311594052575223946488893,
42  -0.339981043584856264802665759103,
43  0.339981043584856264802665759103,
44  0.861136311594052575223946488893
45  };
46 
47 static double NF_N_T_P3_2D_EdgeWeight0[4] = {
48  0.1739274225687269286865319745,
49  0.3260725774312730713134680255,
50  0.3260725774312730713134680255,
51  0.1739274225687269286865319745 };
52 
53 static double NF_N_T_P3_2D_EdgeWeight1[4] = {
54  -0.4493256574676810538434880055,
55  -0.3325754854784642078819958520,
56  0.3325754854784642078819958520,
57  0.4493256574676810538434880055 };
58 
59 static double NF_N_T_P3_2D_EdgeWeight2[4] = {
60  0.532508042018911499194276175,
61  -0.532508042018911499194276175,
62  -0.532508042018911499194276175,
63  0.532508042018911499194276175 };
64 
65 static double NF_N_T_P3_2D_CellWeight0[7] = {
66  0.225,
67  0.0382678191976911531218063401284,
68  0.0382678191976911531218063401284,
69  0.3012819032390987693198956466394,
70  0.18673218080230856483484009381144,
71  0.0237180967609008544430214777564,
72  0.18673218080230856483484009381144,
73  };
74 
75 static double NF_N_T_P3_2D_CellWeight1[7] = {
76  0.225,
77  0.3012819032390987315381414831913,
78  0.0382678191976911153400521766803,
79  0.0382678191976911153400521766803,
80  0.02371809676090086238667064506676,
81  0.1867321808023085727784892611218,
82  0.1867321808023085727784892611218 };
83 
84 
85 static double NF_N_T_P3_2D_CellWeight2[7] = {
86  0.225,
87  0.0382678191976911153400521766803,
88  0.3012819032390987315381414831913,
89  0.0382678191976911153400521766803,
90  0.1867321808023085727784892611218,
91  0.1867321808023085727784892611218,
92  0.02371809676090086238667064506676 };
93 
94 void NF_N_T_P3_2D_EvalAll(TCollection *Coll, TBaseCell *Cell, double *PointValues,
95  double *Functionals)
96 {
97  int OwnNum, NeighNum;
98  TBaseCell *neigh;
99 
100  Functionals[0] = ( NF_N_T_P3_2D_EdgeWeight0[0]*PointValues[0]
101  +NF_N_T_P3_2D_EdgeWeight0[1]*PointValues[1]
102  +NF_N_T_P3_2D_EdgeWeight0[2]*PointValues[2]
103  +NF_N_T_P3_2D_EdgeWeight0[3]*PointValues[3]);
104  Functionals[1] = ( NF_N_T_P3_2D_EdgeWeight0[0]*PointValues[4]
105  +NF_N_T_P3_2D_EdgeWeight0[1]*PointValues[5]
106  +NF_N_T_P3_2D_EdgeWeight0[2]*PointValues[6]
107  +NF_N_T_P3_2D_EdgeWeight0[3]*PointValues[7]);
108  Functionals[2] = ( NF_N_T_P3_2D_EdgeWeight0[0]*PointValues[8]
109  +NF_N_T_P3_2D_EdgeWeight0[1]*PointValues[9]
110  +NF_N_T_P3_2D_EdgeWeight0[2]*PointValues[10]
111  +NF_N_T_P3_2D_EdgeWeight0[3]*PointValues[11]);
112 
113  Functionals[3] = ( NF_N_T_P3_2D_EdgeWeight1[0]*PointValues[0]
114  +NF_N_T_P3_2D_EdgeWeight1[1]*PointValues[1]
115  +NF_N_T_P3_2D_EdgeWeight1[2]*PointValues[2]
116  +NF_N_T_P3_2D_EdgeWeight1[3]*PointValues[3]);
117  Functionals[4] = ( NF_N_T_P3_2D_EdgeWeight1[0]*PointValues[4]
118  +NF_N_T_P3_2D_EdgeWeight1[1]*PointValues[5]
119  +NF_N_T_P3_2D_EdgeWeight1[2]*PointValues[6]
120  +NF_N_T_P3_2D_EdgeWeight1[3]*PointValues[7]);
121  Functionals[5] = ( NF_N_T_P3_2D_EdgeWeight1[0]*PointValues[8]
122  +NF_N_T_P3_2D_EdgeWeight1[1]*PointValues[9]
123  +NF_N_T_P3_2D_EdgeWeight1[2]*PointValues[10]
124  +NF_N_T_P3_2D_EdgeWeight1[3]*PointValues[11]);
125 
126  Functionals[6] = ( NF_N_T_P3_2D_EdgeWeight2[0]*PointValues[0]
127  +NF_N_T_P3_2D_EdgeWeight2[1]*PointValues[1]
128  +NF_N_T_P3_2D_EdgeWeight2[2]*PointValues[2]
129  +NF_N_T_P3_2D_EdgeWeight2[3]*PointValues[3]);
130  Functionals[7] = ( NF_N_T_P3_2D_EdgeWeight2[0]*PointValues[4]
131  +NF_N_T_P3_2D_EdgeWeight2[1]*PointValues[5]
132  +NF_N_T_P3_2D_EdgeWeight2[2]*PointValues[6]
133  +NF_N_T_P3_2D_EdgeWeight2[3]*PointValues[7]);
134  Functionals[8] = ( NF_N_T_P3_2D_EdgeWeight2[0]*PointValues[8]
135  +NF_N_T_P3_2D_EdgeWeight2[1]*PointValues[9]
136  +NF_N_T_P3_2D_EdgeWeight2[2]*PointValues[10]
137  +NF_N_T_P3_2D_EdgeWeight2[3]*PointValues[11]);
138 
139  Functionals[9] =( NF_N_T_P3_2D_CellWeight0[0]*PointValues[12]
140  +NF_N_T_P3_2D_CellWeight0[1]*PointValues[13]
141  +NF_N_T_P3_2D_CellWeight0[2]*PointValues[14]
142  +NF_N_T_P3_2D_CellWeight0[3]*PointValues[15]
143  +NF_N_T_P3_2D_CellWeight0[4]*PointValues[16]
144  +NF_N_T_P3_2D_CellWeight0[5]*PointValues[17]
145  +NF_N_T_P3_2D_CellWeight0[6]*PointValues[18] );
146  Functionals[10]=( NF_N_T_P3_2D_CellWeight1[0]*PointValues[12]
147  +NF_N_T_P3_2D_CellWeight1[1]*PointValues[13]
148  +NF_N_T_P3_2D_CellWeight1[2]*PointValues[14]
149  +NF_N_T_P3_2D_CellWeight1[3]*PointValues[15]
150  +NF_N_T_P3_2D_CellWeight1[4]*PointValues[16]
151  +NF_N_T_P3_2D_CellWeight1[5]*PointValues[17]
152  +NF_N_T_P3_2D_CellWeight1[6]*PointValues[18] );
153  Functionals[11]=( NF_N_T_P3_2D_CellWeight2[0]*PointValues[12]
154  +NF_N_T_P3_2D_CellWeight2[1]*PointValues[13]
155  +NF_N_T_P3_2D_CellWeight2[2]*PointValues[14]
156  +NF_N_T_P3_2D_CellWeight2[3]*PointValues[15]
157  +NF_N_T_P3_2D_CellWeight2[4]*PointValues[16]
158  +NF_N_T_P3_2D_CellWeight2[5]*PointValues[17]
159  +NF_N_T_P3_2D_CellWeight2[6]*PointValues[18] );
160 
161  /*
162  if(Cell)
163  {
164  if(Cell->GetVertex(0) > Cell->GetVertex(1))
165  Functionals[3] = -Functionals[3];
166  if(Cell->GetVertex(1) > Cell->GetVertex(2))
167  Functionals[4] = -Functionals[4];
168  if(Cell->GetVertex(2) > Cell->GetVertex(0))
169  Functionals[5] = -Functionals[5];
170  }
171  */
172 
173  if(Cell)
174  {
175  OwnNum = Coll->GetIndex(Cell);
176 
177  neigh = Cell->GetJoint(0)->GetNeighbour(Cell);
178  if(neigh)
179  {
180  NeighNum = Coll->GetIndex(neigh);
181  if(NeighNum < OwnNum)
182  Functionals[3] = -Functionals[3];
183  } // endif neigh
184 
185  neigh = Cell->GetJoint(1)->GetNeighbour(Cell);
186  if(neigh)
187  {
188  NeighNum = Coll->GetIndex(neigh);
189  if(NeighNum < OwnNum)
190  Functionals[ 4] = -Functionals[ 4];
191  } // endif neigh
192 
193  neigh = Cell->GetJoint(2)->GetNeighbour(Cell);
194  if(neigh)
195  {
196  NeighNum = Coll->GetIndex(neigh);
197  if(NeighNum < OwnNum)
198  Functionals[ 5] = -Functionals[ 5];
199  } // endif neigh
200  } // endif Cell
201 }
202 
203 void NF_N_T_P3_2D_EvalEdge(TCollection *Coll, TBaseCell *Cell, int Joint,
204  double *PointValues, double *Functionals)
205 {
206  int OwnNum, NeighNum;
207  TBaseCell *neigh;
208 
209  Functionals[0] = ( NF_N_T_P3_2D_EdgeWeight0[0]*PointValues[0]
210  +NF_N_T_P3_2D_EdgeWeight0[1]*PointValues[1]
211  +NF_N_T_P3_2D_EdgeWeight0[2]*PointValues[2]
212  +NF_N_T_P3_2D_EdgeWeight0[3]*PointValues[3]);
213  Functionals[1] = ( NF_N_T_P3_2D_EdgeWeight1[0]*PointValues[0]
214  +NF_N_T_P3_2D_EdgeWeight1[1]*PointValues[1]
215  +NF_N_T_P3_2D_EdgeWeight1[2]*PointValues[2]
216  +NF_N_T_P3_2D_EdgeWeight1[3]*PointValues[3]);
217  Functionals[2] = ( NF_N_T_P3_2D_EdgeWeight2[0]*PointValues[0]
218  +NF_N_T_P3_2D_EdgeWeight2[1]*PointValues[1]
219  +NF_N_T_P3_2D_EdgeWeight2[2]*PointValues[2]
220  +NF_N_T_P3_2D_EdgeWeight2[3]*PointValues[3]);
221 
222  if(Joint != -1)
223  {
224  // if(Cell->GetVertex(Joint) > Cell->GetVertex((Joint+1)%3))
225  // Functionals[1] = -Functionals[1];
226  // /*
227  neigh = Cell->GetJoint(Joint)->GetNeighbour(Cell);
228  if(neigh)
229  {
230  OwnNum = Coll->GetIndex(Cell);
231  NeighNum = Coll->GetIndex(neigh);
232  if(NeighNum < OwnNum)
233  Functionals[1] = -Functionals[1];
234  } // endif neigh
235  // */
236  }
237 }
238 
239 /*
240  TNodalFunctional2D(NodalFunctional2D id,
241  int n_allfunctionals, int n_edgefunctionals,
242  int n_pointsall, int n_pointsedge,
243  double *xi, double *eta, double *t,
244  DoubleFunctVect *evalall,
245  DoubleFunctVect *evaledge);
246 */
247 
248 TNodalFunctional2D *NF_N_T_P3_2D_Obj = new TNodalFunctional2D
249  (NF_N_T_P3_2D, 12, 3, 19, 4, NF_N_T_P3_2D_Xi, NF_N_T_P3_2D_Eta,
250  NF_N_T_P3_2D_T, NF_N_T_P3_2D_EvalAll, NF_N_T_P3_2D_EvalEdge);
store cells in an array, used by cell iterators
Definition: Collection.h:18
Definition: NodalFunctional2D.h:20
int GetIndex(TBaseCell *cell)
return Index of cell in Cells-array
Definition: Collection.C:115
TJoint * GetJoint(int J_i)
return the pointer to face with number i
Definition: BaseCell.h:175
TBaseCell * GetNeighbour(TBaseCell *Me) const
Definition: Joint.C:57
information for finite element data structure
Definition: BaseCell.h:25