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