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