ParMooN
 All Classes Functions Variables Friends Pages
BF_N_T_P2_2D.h
1 // ***********************************************************************
2 // P2 element, nonconforming, 2D
3 // ***********************************************************************
4 
5 // base function values
6 static void N_T_P2_2D_Funct(double xi, double eta, double *values)
7 {
8  double t1, t2, t3, t5, t6, t7, t8, t9, t12, t14, t15, t18, t19;
9  double t24, t29, t31, t32;
10 
11  t1 = 6.0*eta;
12  t2 = eta*eta;
13  t3 = 6.0*t2;
14  t5 = 6.0*xi;
15  t6 = xi*xi;
16  t7 = 6.0*t6;
17  t8 = xi*eta;
18  t9 = 12.0*t8;
19  t12 = 4.0/3.0*xi;
20  t14 = 4.0*t8;
21  t15 = 2.0*t2;
22  t18 = 10.0/3.0*t8*(xi-eta);
23  t19 = 1.0-xi-eta;
24  t24 = 10.0/3.0*eta*t19*(2.0*eta-1.0+xi);
25  t29 = 10.0/3.0*t19*xi*(1.0-2.0*xi-eta);
26  t31 = 4.0/3.0*eta;
27  t32 = 2.0*t6;
28 
29  values[0] = 1.0-t1+t3;
30  values[1] = 1.0-t5-t1+t7+t9+t3;
31  values[2] = 1.0-t5+t7;
32  values[3] = -2.0/3.0+t12+8.0/3.0*eta-t14-t15-t18-t24-t29;
33  values[4] = t12-t31-t32+t15-t18-t24-t29;
34  values[5] = 2.0/3.0-8.0/3.0*xi-t31+t32+t14-t18-t24-t29;
35  values[6] = -2.0+12.0*xi+12.0*eta-12.0*t6-t9-12.0*t2;
36 }
37 
38 // values of the derivatives in xi direction
39 static void N_T_P2_2D_DeriveXi(double xi, double eta, double *values)
40 {
41  double t1, t2, t5, t8, t10, t14, t15, t17, t19, t21, t23, t25, t27;
42 
43  t1 = 12.0*xi;
44  t2 = 12.0*eta;
45  t5 = 4.0*eta;
46  t8 = 10.0/3.0*eta*(xi-eta);
47  t10 = 10.0/3.0*xi*eta;
48  t14 = 10.0/3.0*eta*(2.0*eta-1.0+xi);
49  t15 = 1.0-xi-eta;
50  t17 = 10.0/3.0*eta*t15;
51  t19 = 1.0-2.0*xi-eta;
52  t21 = 10.0/3.0*xi*t19;
53  t23 = 10.0/3.0*t15*t19;
54  t25 = 20.0/3.0*t15*xi;
55  t27 = 4.0*xi;
56 
57  values[0] = 0.0;
58  values[1] = -6.0+t1+t2;
59  values[2] = -6.0+t1;
60  values[3] = 4.0/3.0-t5-t8-t10+t14-t17+t21-t23+t25;
61  values[4] = 4.0/3.0-t27-t8-t10+t14-t17+t21-t23+t25;
62  values[5] = -8.0/3.0+t27+t5-t8-t10+t14-t17+t21-t23+t25;
63  values[6] = 12.0-24.0*xi-t2;
64 }
65 
66 // values of the derivatives in eta direction
67 static void N_T_P2_2D_DeriveEta(double xi, double eta, double *values)
68 {
69  double t1, t3, t5, t6, t9, t11, t12, t14, t16, t18, t20, t24, t26;
70 
71  t1 = 12.0*eta;
72  t3 = 12.0*xi;
73  t5 = 4.0*xi;
74  t6 = 4.0*eta;
75  t9 = 10.0/3.0*xi*(xi-eta);
76  t11 = 10.0/3.0*xi*eta;
77  t12 = 1.0-xi-eta;
78  t14 = 2.0*eta-1.0+xi;
79  t16 = 10.0/3.0*t12*t14;
80  t18 = 10.0/3.0*eta*t14;
81  t20 = 20.0/3.0*eta*t12;
82  t24 = 10.0/3.0*xi*(1.0-2.0*xi-eta);
83  t26 = 10.0/3.0*t12*xi;
84 
85  values[0] = -6.0+t1;
86  values[1] = -6.0+t3+t1;
87  values[2] = 0.0;
88  values[3] = 8.0/3.0-t5-t6-t9+t11-t16+t18-t20+t24+t26;
89  values[4] = -4.0/3.0+t6-t9+t11-t16+t18-t20+t24+t26;
90  values[5] = -4.0/3.0+t5-t9+t11-t16+t18-t20+t24+t26;
91  values[6] = 12.0-t3-24.0*eta;
92 }
93 
94 // values of derivatives in xi-xi direction
95 static void N_T_P2_2D_DeriveXiXi(double xi, double eta, double *values)
96 {
97  double t1, t2;
98 
99  t1 = 20.0*eta;
100  t2 = 40.0*xi;
101 
102  values[0] = 0.0;
103  values[1] = 12.0;
104  values[2] = 12.0;
105  values[3] = -t1+20.0-t2;
106  values[4] = 16.0-t1-t2;
107  values[5] = 24.0-t1-t2;
108  values[6] = -24.0;
109 }
110 
111 // values of derivatives in eta-eta direction
112 static void N_T_P2_2D_DeriveXiEta(double xi, double eta, double *values)
113 {
114  double t1, t2;
115 
116  t1 = 20.0*xi;
117  t2 = 20.0*eta;
118 
119  values[0] = 0.0;
120  values[1] = 12.0;
121  values[2] = 0.0;
122  values[3] = -4.0-t1+t2;
123  values[4] = -20.0*xi+20.0*eta;
124  values[5] = 4.0-t1+t2;
125  values[6] = -12.0;
126 }
127 
128 // values of derivatives in xi-eta direction
129 static void N_T_P2_2D_DeriveEtaEta(double xi, double eta, double *values)
130 {
131  double t1, t2;
132 
133  t1 = 20.0*xi;
134  t2 = 40.0*eta;
135 
136  values[0] = 12.0;
137  values[1] = 12.0;
138  values[2] = 0.0;
139  values[3] = -24.0+t1+t2;
140  values[4] = -16.0+t1+t2;
141  values[5] = t1-20.0+t2;
142  values[6] = -24.0;
143 }
144 
145 static int N_T_P2_2D_ChangeJ0[1] = { 3 };
146 static int N_T_P2_2D_ChangeJ1[1] = { 4 };
147 static int N_T_P2_2D_ChangeJ2[1] = { 5 };
148 
149 static int *N_T_P2_2D_Change[3] = { N_T_P2_2D_ChangeJ0, N_T_P2_2D_ChangeJ1,
150  N_T_P2_2D_ChangeJ2 };
151 
152 // ***********************************************************************
153 
154 TBaseFunct2D *BF_N_T_P2_2D_Obj = new TBaseFunct2D
155  (7, BF_N_T_P2_2D, BFUnitTriangle,
156  N_T_P2_2D_Funct, N_T_P2_2D_DeriveXi,
157  N_T_P2_2D_DeriveEta, N_T_P2_2D_DeriveXiXi,
158  N_T_P2_2D_DeriveXiEta, N_T_P2_2D_DeriveEtaEta, 3, 2,
159  1, N_T_P2_2D_Change);
Definition: BaseFunct2D.h:27