ParMooN
 All Classes Functions Variables Friends Pages
NF_S_Q_Q2_2D.h
1 /* 21 quadrature points + 4 vertex values */
2 static double NF_S_Q_Q2_2D_Xi[] =
3  { -0.77459666924148337703585307995647992, 0,
4  0.77459666924148337703585307995647992,
5 
6  1, 1, 1,
7 
8  0.77459666924148337703585307995647992, 0,
9  -0.77459666924148337703585307995647992,
10 
11  -1, -1, -1,
12 
13  -0.77459666924148337703585307995647992, 0,
14  0.77459666924148337703585307995647992,
15 
16  -0.77459666924148337703585307995647992, 0,
17  0.77459666924148337703585307995647992,
18 
19  -0.77459666924148337703585307995647992, 0,
20  0.77459666924148337703585307995647992,
21 
22  -1,1,1,-1
23  };
24 
25 static double NF_S_Q_Q2_2D_Eta[] =
26  { -1, -1, -1,
27 
28  -0.77459666924148337703585307995647992, 0,
29  0.77459666924148337703585307995647992,
30 
31  1, 1, 1,
32 
33  0.77459666924148337703585307995647992, 0,
34  -0.77459666924148337703585307995647992,
35 
36  -0.77459666924148337703585307995647992,
37  -0.77459666924148337703585307995647992,
38  -0.77459666924148337703585307995647992,
39 
40  0,0,0,
41 
42  0.77459666924148337703585307995647992,
43  0.77459666924148337703585307995647992,
44  0.77459666924148337703585307995647992,
45 
46  -1,-1,1,1
47  };
48 
49 /* not used */
50 static double NF_S_Q_Q2_2D_T[] =
51  { -1, -0.77459666924148337703585307995647992, 0,
52  0.77459666924148337703585307995647992, 1 };
53 
54 void NF_S_Q_Q2_2D_EvalAll(TCollection *Coll, TBaseCell *Cell, double *PointValues, double *Functionals)
55 {
56  double f0,f1,f2,f3,f4,f5,f6,f7,f8;
57  static double weights[3] = { 0.5555555555555555555555555555555556,
58  0.88888888888888888888888888888888889,
59  0.5555555555555555555555555555555556 };
60  /* vertex values */
61  f0 = PointValues[21];
62  f1 = PointValues[22];
63  f2 = PointValues[23];
64  f3 = PointValues[24];
65 
66  /* line integrals */
67  f4 = ( weights[0]*PointValues[0]
68  +weights[1]*PointValues[1]
69  +weights[2]*PointValues[2]) * 0.5;
70  f5 = ( weights[0]*PointValues[3]
71  +weights[1]*PointValues[4]
72  +weights[2]*PointValues[5]) * 0.5;
73  f6 = ( weights[0]*PointValues[6]
74  +weights[1]*PointValues[7]
75  +weights[2]*PointValues[8]) * 0.5;
76  f7 = ( weights[0]*PointValues[9]
77  +weights[1]*PointValues[10]
78  +weights[2]*PointValues[11]) * 0.5;
79 
80  /* cell integral */
81  f8 = ( weights[0]*weights[0]*PointValues[12]
82  +weights[1]*weights[0]*PointValues[13]
83  +weights[2]*weights[0]*PointValues[14]
84  +weights[0]*weights[1]*PointValues[15]
85  +weights[1]*weights[1]*PointValues[16]
86  +weights[2]*weights[1]*PointValues[17]
87  +weights[0]*weights[2]*PointValues[18]
88  +weights[1]*weights[2]*PointValues[19]
89  +weights[2]*weights[2]*PointValues[20])*0.25;
90 
91  /* basis transformation */
92  Functionals[0]=f0;
93  Functionals[2]=f1;
94  Functionals[8]=f2;
95  Functionals[6]=f3;
96  Functionals[1]=-0.25*(f0+f1)+1.5*f4;
97  Functionals[5]=-0.25*(f1+f2)+1.5*f5;
98  Functionals[7]=-0.25*(f2+f3)+1.5*f6;
99  Functionals[3]=-0.25*(f0+f3)+1.5*f7;
100  Functionals[4]=0.0625*(f0+f1+f2+f3)-0.375*(f4+f5+f6+f7)
101  +2.25*f8;
102 
103  /*
104  Functionals[0]=f0;
105  Functionals[2]=f1;
106  Functionals[8]=f2;
107  Functionals[6]=f3;
108  Functionals[1]=0.125*(f0+f1)+0.75*f4;
109  Functionals[5]=0.125*(f1+f2)+0.75*f5;
110  Functionals[7]=0.125*(f2+f3)+0.75*f6;
111  Functionals[3]=0.125*(f0+f3)+0.75*f7;
112  Functionals[4]=0.015625*(f0+f1+f2+f3)+0.09375*(f4+f5+f6+f7)
113  +0.5625*f8;
114  */
115  /*
116  cout<<"f"<<endl;
117  cout<<f0<<" "<<f1<<" "<<f2<<endl;
118  cout<<f3<<" "<<f4<<" "<<f5<<endl;
119  cout<<f6<<" "<<f7<<" "<<f8<<endl<<endl;
120  cout<<"Functionals"<<endl;
121 
122  cout<<Functionals[0]<<" "<<Functionals[1]<<" "<<Functionals[2]<<endl;
123  cout<<Functionals[3]<<" "<<Functionals[4]<<" "<<Functionals[5]<<endl;
124  cout<<Functionals[6]<<" "<<Functionals[7]<<" "<<Functionals[8]<<endl<<endl;
125  */
126 
127 }
128 
129 /* not used */
130 void NF_S_Q_Q2_2D_EvalEdge(TCollection *Coll, TBaseCell *Cell, int Joint, double *PointValues, double *Functionals)
131 {
132  static double weights[3] = { 0.5555555555555555555555555555555556,
133  0.88888888888888888888888888888888889,
134  0.5555555555555555555555555555555556 };
135  double s;
136 
137  s =( weights[0]*PointValues[1]
138  +weights[1]*PointValues[2]
139  +weights[2]*PointValues[3])*0.5;
140 
141  Functionals[0] = PointValues[0];
142  Functionals[1] = -0.25*(PointValues[0]+PointValues[4])
143  +1.5*s;
144  Functionals[2] = PointValues[4];
145 }
146 
147 /*
148  TNodalFunctional2D(NodalFunctional2D id,
149  int n_allfunctionals, int n_edgefunctionals,
150  int n_pointsall, int n_pointsedge,
151  double *xi, double *eta, double *t,
152  DoubleFunctVect *evalall,
153  DoubleFunctVect *evaledge);
154 */
155 
156 TNodalFunctional2D *NF_S_Q_Q2_2D_Obj = new TNodalFunctional2D
157  (NF_S_Q_Q2_2D, 9, 3, 25, 5, NF_S_Q_Q2_2D_Xi, NF_S_Q_Q2_2D_Eta,
158  NF_S_Q_Q2_2D_T, NF_S_Q_Q2_2D_EvalAll, NF_S_Q_Q2_2D_EvalEdge);
store cells in an array, used by cell iterators
Definition: Collection.h:18
Definition: NodalFunctional2D.h:20
information for finite element data structure
Definition: BaseCell.h:25