ParMooN
 All Classes Functions Variables Friends Pages
BF_C_Q_UL2SE_2D.h
1 // ***********************************************************************
2 // Q2 element with bubbles, conforming, 2D
3 // ***********************************************************************
4 
5 // base function values
6 static void C_Q_UL2SE_2D_Funct(double xi, double eta, double *values)
7 {
8  double t1, t3, t4, t5, t7, t8, t9, t13, t17;
9 
10  t1 = xi*eta;
11  t3 = xi*xi;
12  t4 = 1.0-t3;
13  t5 = (1.0-eta)*t4;
14  t7 = eta*eta;
15  t8 = 1.0-t7;
16  t9 = (1.0-xi)*t8;
17  t13 = (1.0+xi)*t8;
18  t17 = (1.0+eta)*t4;
19 
20  values[0] = 1.0/4.0-xi/4.0-eta/4.0+t1/4.0-t5/4.0-t9/4.0;
21  values[1] = t5/2.0;
22  values[2] = 1.0/4.0+xi/4.0-eta/4.0-t1/4.0-t5/4.0-t13/4.0;
23  values[3] = t13/2.0;
24  values[4] = 1.0/4.0+xi/4.0+eta/4.0+t1/4.0-t17/4.0-t13/4.0;
25  values[5] = t17/2.0;
26  values[6] = 1.0/4.0-xi/4.0+eta/4.0-t1/4.0-t17/4.0-t9/4.0;
27  values[7] = t9/2.0;
28 }
29 
30 // values of the derivatives in xi direction
31 static void C_Q_UL2SE_2D_DeriveXi(double xi, double eta, double *values)
32 {
33  double t1, t3, t4, t5, t6, t9, t11, t12;
34 
35  t1 = eta/4.0;
36  t3 = (1.0-eta)*xi;
37  t4 = t3/2.0;
38  t5 = eta*eta;
39  t6 = t5/4.0;
40  t9 = 1.0-t5;
41  t11 = (1.0+eta)*xi;
42  t12 = t11/2.0;
43 
44  values[0] = t1+t4-t6;
45  values[1] = -t3;
46  values[2] = -t1+t4+t6;
47  values[3] = t9/2.0;
48  values[4] = t1+t12+t6;
49  values[5] = -t11;
50  values[6] = -t1+t12-t6;
51  values[7] = -t9/2.0;
52 }
53 
54 // values of the derivatives in eta direction
55 static void C_Q_UL2SE_2D_DeriveEta(double xi, double eta, double *values)
56 {
57  double t1, t2, t3, t5, t6, t8, t10, t11;
58 
59  t1 = xi/4.0;
60  t2 = xi*xi;
61  t3 = t2/4.0;
62  t5 = (1.0-xi)*eta;
63  t6 = t5/2.0;
64  t8 = -1.0+t2;
65  t10 = (1.0+xi)*eta;
66  t11 = t10/2.0;
67 
68  values[0] = t1-t3+t6;
69  values[1] = t8/2.0;
70  values[2] = -t1-t3+t11;
71  values[3] = -t10;
72  values[4] = t1+t3+t11;
73  values[5] = -t8/2.0;
74  values[6] = -t1+t3+t6;
75  values[7] = -t5;
76 }
77 
78 // values of the derivatives in xi-xi direction
79 static void C_Q_UL2SE_2D_DeriveXiXi(double xi, double eta, double *values)
80 {
81  double t1, t2;
82 
83  t1 = 1.0-eta;
84  t2 = 1.0+eta;
85 
86  values[0] = t1/2.0;
87  values[1] = -t1;
88  values[2] = t1/2.0;
89  values[3] = 0.0;
90  values[4] = t2/2.0;
91  values[5] = -t2;
92  values[6] = t2/2.0;
93  values[7] = 0.0;
94 }
95 
96 // values of the derivatives in xi-eta direction
97 static void C_Q_UL2SE_2D_DeriveXiEta(double xi, double eta, double *values)
98 {
99  double t1, t2;
100 
101  t1 = xi/2.0;
102  t2 = eta/2.0;
103 
104  values[0] = 1.0/4.0-t1-t2;
105  values[1] = xi;
106  values[2] = -1.0/4.0-t1+t2;
107  values[3] = -eta;
108  values[4] = 1.0/4.0+t1+t2;
109  values[5] = -xi;
110  values[6] = -1.0/4.0+t1-t2;
111  values[7] = eta;
112 }
113 
114 // values of the derivatives in eta-eta direction
115 static void C_Q_UL2SE_2D_DeriveEtaEta(double xi, double eta, double *values)
116 {
117  double t1, t2;
118 
119  t1 = 1.0-xi;
120  t2 = 1.0+xi;
121 
122  values[0] = t1/2.0;
123  values[1] = 0.0;
124  values[2] = t2/2.0;
125  values[3] = -t2;
126  values[4] = t2/2.0;
127  values[5] = 0.0;
128  values[6] = t1/2.0;
129  values[7] = -t1;
130 }
131 
132 // ***********************************************************************
133 
134 TBaseFunct2D *BF_C_Q_UL2SE_2D_Obj = new TBaseFunct2D
135  (8, BF_C_Q_UL2SE_2D, BFUnitSquare,
136  C_Q_UL2SE_2D_Funct, C_Q_UL2SE_2D_DeriveXi,
137  C_Q_UL2SE_2D_DeriveEta, C_Q_UL2SE_2D_DeriveXiXi,
138  C_Q_UL2SE_2D_DeriveXiEta, C_Q_UL2SE_2D_DeriveEtaEta, 2, 2,
139  0, NULL);
Definition: BaseFunct2D.h:27