ParMooN
 All Classes Functions Variables Friends Pages
BF_N_T_RT3_2D.h
1 // ***********************************************************************
2 // Rt3 Raviart-Thomas vector element, nonconforming , 2D
3 // History: 14.11.2011 implementation (Ulrich)
4 // ***********************************************************************
5 
6 // base function values
7 // vector function, orthonormal to edges,
8 // functions 1,2,3, and 4 are orthogonal to edge 1
9 // functions 5,6,7, and 8 are orthogonal to edge 2
10 // functions 9,10,11 and 12 are orthogonal to edge 3
11 // functions 13-24 correspond to inner degrees of freedom
12 
13 
14 
15 // using Tschebyscheff-points on edges and integral evaluation for inner dofs
16 /*
17 static double N_T_RT3_2D_CM[576] = {
18 0,0,0,0,0,0,0,0,0.0497280918,-0.1670446595,0.3741514407,-1.256834873,0,0,0,0,0,0,0,0,0,0,0,0,
19 -1.256834873,0.3741514407,-0.1670446595,0.0497280918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
20 2.6961250602,-2.52628215,1.1878058183,-0.3576488861,-2.0157577137,-4.6155203575,-2.7414985076,-0.6272190295,0.9026900364,-2.9507171575,5.8039145414,15.2441120117,959.999850477,239.999878705,-3359.99941479,-1199.99939544,-2999.99938051,-839.999575904,2687.99950731,1175.99944094,2183.99948729,671.999671036,4871.99886724,1847.9990078,
21 7.1964575485,-10.760659485,5.1038052355,-1.5396032991,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
22 0,0,0,0,0,0,0,0,-1.5396032991,5.1038052355,-10.760659485,7.1964575485,0,0,0,0,0,0,0,0,0,0,0,0,
23 15.2441126478,5.8039152581,-2.9507178226,0.9026901393,-0.6272187423,-2.7414984178,-4.6155214422,-2.0157581471,-0.3576489023,1.1878062501,-2.526283306,2.6961251733,239.999878705,959.999921284,-839.999497586,-2999.99954256,-1199.99955298,-3359.99975681,671.999560352,2183.99954903,1175.9996564,2687.99983083,1847.99912745,4871.99930965,
24 -13.4408740975,22.9134001087,-13.8624397677,4.3899148065,17.3915345979,32.1838204833,9.6955546716,0.7290682663,-1.8538500229,8.3833557061,-37.9939172756,-49.5355860221,-4319.99926526,-1079.99937629,18143.9971574,6911.99695323,11231.9968882,3023.9977918,-16127.9976268,-7559.99721269,-7055.99739401,-2015.99827017,-22679.9943731,-9071.99494618,
25 -12.0128295015,25.001535905,-19.3446816555,6.355975252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
26 0,0,0,0,0,0,0,0,6.355975252,-19.3446816555,25.001535905,-12.0128295015,0,0,0,0,0,0,0,0,0,0,0,0,
27 -49.535589882,-37.993920021,8.3833591153,-1.85385062,0.7290670913,9.6955553491,32.1838266444,17.3915367731,4.3899147604,-13.8624415551,22.9134060685,-13.4408754677,-1079.99945461,-4319.99967809,3023.99771348,11231.9980257,6911.99804946,18143.9990512,-2015.99798426,-7055.99801554,-7559.99853535,-16127.9993728,-9071.9961265,-22679.9970884,
28 -21.6485073208,-0.3537179919,6.344375338,-2.3421501422,1.5005709913,18.7117322933,29.9558695008,9.8318067601,-6.4908688506,13.2351071694,47.8589145738,-54.6031487276,-3239.99925922,-2159.99947426,9071.99700531,7775.9971922,16415.9971392,9071.99825329,-6047.99741951,-6047.99731441,-15119.9977233,-8063.99869958,-22175.9945908,-15119.9955747,
29 -54.6031497756,47.8589089185,13.2351100445,-6.4908691319,9.831804689,29.9558658003,18.7117351103,1.5005729539,-2.3421497192,6.3443722236,-0.3537130379,-21.648505523,-2159.99924592,-3239.99942126,9071.99697257,16415.9969724,7775.99703015,9071.99805904,-8063.99740314,-15119.9971354,-6047.9976071,-6047.99854133,-15119.9944301,-22175.9952012,
30 20.4917120808,-43.871385699,35.9517993121,-12.5721274915,-38.9525699754,-57.8215988573,-7.5477166152,-0.6780818962,1.4279367326,-4.5048809436,61.6950080758,60.3819330711,6047.99892209,1511.99905794,-28223.9958621,-11087.9954536,-13607.9953669,-3527.9966398,26879.9965656,13103.9958689,7559.99609101,2015.99735262,31247.9916805,12599.9924085,
31 6.1229349178,-14.7820725202,14.7820725202,-6.1229349178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
32 65.2219788559,-57.559297595,-21.6366414105,13.9739593285,-9.7660681988,-103.643914369,-90.4514840183,-6.1384669593,11.8919212015,-65.4360528313,-53.3578721268,106.9019914,9071.99764319,6047.99822298,-31751.9905713,-30239.9907895,-40319.9906991,-21167.9939787,24191.9919297,27215.991308,33263.9924883,16127.9954386,69551.9826361,51407.985289,
33 51.5980216235,-85.3686593995,29.9314980583,3.839138519,-31.3420874369,-59.6197977687,-13.6691129239,-0.3689681116,1.2105452645,-11.3869879545,30.0176529366,43.1587851208,4535.99885572,3023.99904662,-21167.9955144,-19655.9952523,-12095.9952731,-7055.9966824,20159.9962166,21167.9956117,7559.99608636,4031.99743179,27215.9913539,22679.9922533,
34 43.1587901931,30.0176581472,-11.3869930715,1.2105461405,-0.3689659212,-13.6691123986,-59.619806197,-31.3420907756,3.8391384747,29.9315013174,-85.3686686804,51.5980227281,3023.9990632,4535.99941321,-7055.99612262,-12095.9966029,-19655.9965634,-21167.9981734,4031.99660819,7559.99664615,21167.9973639,20159.9987201,22679.9933007,27215.994855,
35 106.901997484,-53.3578567265,-65.4360624481,11.8919225296,-6.1384611614,-90.4514762564,-103.643926597,-9.7660747107,13.9739583912,-21.6366327251,-57.5593147766,65.2219761705,6047.99778375,9071.99840519,-21167.9910039,-40319.99142,-30239.9915009,-31751.9947584,16127.9922252,33263.9917748,27215.993263,24191.99613,51407.9838567,69551.9865912,
36 0,0,0,0,0,0,0,0,-6.1229349178,14.7820725202,-14.7820725202,6.1229349178,0,0,0,0,0,0,0,0,0,0,0,0,
37 60.3819394153,61.6950113561,-4.504886082,1.4279376813,-0.6780803907,-7.5477186737,-57.8216086606,-38.9525732051,-12.5721272986,35.9518016123,-43.8713946904,20.4917148613,1511.99924694,6047.99958764,-3527.99681503,-13607.9973534,-11087.9973652,-28223.9988364,2015.9971774,7559.99729917,13103.9980571,26879.9992693,12599.9946986,31247.9961697,
38 -9.7966911354,23.6513123997,-23.6513168034,9.7966964441,24.8336279643,29.8791472908,0.7607051107,0.5265045675,-0.526504838,-0.7607129455,-29.8791567823,-24.8336241876,-2687.99950731,-671.999560351,13439.9981195,5375.99789583,5375.99785916,1343.9984239,-13439.9984461,-6719.99809712,-2687.99818429,-671.99875349,-13439.9961747,-5375.99647016,
39 -46.3734130301,67.155343744,-3.7985909136,-16.9833386765,13.6170265979,104.023037857,51.2532848599,-0.8933976798,-2.4729100204,48.9711624946,14.385594316,-60.8838383738,-6047.99830817,-4031.99867648,24191.9932776,24191.9932573,24191.9932287,12095.9954655,-20159.9942718,-24191.9936881,-18143.9944813,-8063.99653222,-48383.987458,-36287.9891455,
40 -60.8838439839,14.3855844704,48.9711695917,-2.472911145,-0.8934014671,51.2532811484,104.023048093,13.6170313936,-16.983338218,-3.79859661,67.1553566661,-46.373412515,-4031.99849509,-6047.99896605,12095.9938451,24191.9943132,24191.994332,24191.9966577,-8063.99465445,-18143.9944946,-24191.9955612,-20159.9975692,-36287.9891322,-48383.991209,
41 -24.833627308,-29.8791580339,-0.7607105512,-0.5265052925,0.5265039499,0.7607064019,29.8791520178,24.8336294523,9.7966963135,-23.651317748,23.6513165874,-9.7966926587,-671.999671036,-2687.99983083,1343.99859913,5375.9988703,5375.99886875,13439.9995419,-671.998753491,-2687.99883267,-6719.9991782,-13439.9997274,-5375.99769956,-13439.998391
42 };
43 */
44 
45 // using Tschebyscheff-points on edges and point evaluation for inner dofs
46 static double N_T_RT3_2D_CM[576] = {
47 0,0,0,0,0,0,0,0,0.0497280918,-0.1670446595,0.3741514407,-1.256834873,0,0,0,0,0,0,0,0,0,0,0,0,
48 -1.256834873,0.3741514407,-0.1670446595,0.0497280918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
49 1.256834873,-0.3741514407,0.1670446595,-0.0497280918,-0.0497280918,-0.0066093107,-0.0066093107,-0.0497280918,-0.0497280918,1.4016777947,-7.5060269516,38.1145111188,39.2291783077,1.5521467647,-1.3065629649,-0.41923777,0.2416238679,0.1736539702,-7.6152070247,-0.41923777,0.1157893837,0.05169564,1.4082871054,0.1736539702,
50 7.1964575485,-10.760659485,5.1038052355,-1.5396032991,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
51 0,0,0,0,0,0,0,0,-1.5396032991,5.1038052355,-10.760659485,7.1964575485,0,0,0,0,0,0,0,0,0,0,0,0,
52 38.1145111188,-7.5060269516,1.4016777947,-0.0497280918,-0.0497280918,-0.0066093107,-0.0066093107,-0.0497280918,-0.0497280918,0.1670446595,-0.3741514407,1.256834873,1.5521467647,39.2291783077,-0.41923777,-7.6152070247,0.1736539702,1.4082871054,-0.41923777,-1.3065629649,0.05169564,0.1157893837,0.1736539702,0.2416238679,
53 -7.1964575485,10.760659485,-5.1038052355,1.5396032991,1.5396032991,0.1950670054,0.1736539702,0,0,-1.2346331353,19.1047216123,-176.645103929,-208.200570523,-8.2376908178,37.3887670347,11.9969597597,-7.3729037399,-5.2988722409,22.0677107437,1.2148872395,-3.1580561368,-1.4099542448,-1.4082871054,-0.1736539702,
54 -12.0128295015,25.001535905,-19.3446816555,6.355975252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
55 0,0,0,0,0,0,0,0,6.355975252,-19.3446816555,25.001535905,-12.0128295015,0,0,0,0,0,0,0,0,0,0,0,0,
56 -176.645103929,19.1047216123,-1.2346331353,-0,-0,0.1736539702,0.1950670054,1.5396032991,1.5396032991,-5.1038052355,10.760659485,-7.1964575485,-8.2376908178,-208.200570523,1.2148872395,22.0677107437,-0.1736539702,-1.4082871054,11.9969597597,37.3887670347,-1.4099542448,-3.1580561368,-5.2988722409,-7.3729037399,
57 -36.8576762458,7.131875511,-1.2346331353,0,-0,0.1736539702,0.1950670054,1.5396032991,1.5396032991,-41.5427320052,207.801426268,-167.798297562,-170.52353898,-45.9147223609,2.8988953876,8.4108564942,-0.1736539702,-1.4082871054,210.721734691,12.8842849546,-3.093962393,-1.4740479886,-41.7377990105,-5.3668421386,
58 -167.798297562,207.801426268,-41.5427320052,1.5396032991,1.5396032991,0.1950670054,0.1736539702,0,0,-1.2346331353,7.131875511,-36.8576762458,-45.9147223609,-170.52353898,12.8842849546,210.721734691,-5.3668421386,-41.7377990105,8.4108564942,2.8988953876,-1.4740479886,-3.093962393,-1.4082871054,-0.1736539702,
59 12.0128295015,-25.001535905,19.3446816555,-6.355975252,-6.355975252,-0.5626091353,0,-0,-0,0,-11.9728461013,262.915717764,323.723321045,12.808478971,-82.1508311903,-26.3597945099,27.6992031609,19.9072907909,-14.452503719,-0.7956494695,3.042266753,1.3582586049,0,0,
60 6.1229349178,-14.7820725202,14.7820725202,-6.1229349178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
61 160.601840014,-197.040766783,36.4389267697,0,-0,-5.1252182707,-5.1252182707,0,-0,36.4389267697,-511.617029813,475.178103043,549.261141653,190.439008788,-79.2082568811,-232.003153829,5.1252182707,41.5641450404,-590.825286694,-34.9623870454,84.3334751518,40.0876053161,41.5641450404,5.1252182707,
62 160.641823414,-278.727099294,124.441251132,-6.355975252,-6.355975252,-0.5626091353,0,-0,-0,0,-11.9728461013,139.787427683,175.094327133,161.437472883,-50.86427659,-280.085357899,21.9133523922,125.003860267,-14.452503719,-0.7956494695,3.042266753,1.3582586049,0,0,
63 139.787427683,-11.9728461013,-0,0,0,-0,-0.5626091353,-6.355975252,-6.355975252,124.441251132,-278.727099294,160.641823414,161.437472883,175.094327133,-0.7956494695,-14.452503719,-0,-0,-280.085357899,-50.86427659,1.3582586049,3.042266753,125.003860267,21.9133523922,
64 475.178103043,-511.617029813,36.4389267697,0,0,-5.1252182707,-5.1252182707,-0,-0,36.4389267697,-197.040766783,160.601840014,190.439008788,549.261141653,-34.9623870454,-590.825286694,5.1252182707,41.5641450404,-232.003153829,-79.2082568811,40.0876053161,84.3334751518,41.5641450404,5.1252182707,
65 0,-0,0,-0,0,-0,0,-0,-6.1229349178,14.7820725202,-14.7820725202,6.1229349178,-0,0,-0,-0,0,0,0,-0,0,0,-0,0,
66 262.915717764,-11.9728461013,-0,0,0,-0,-0.5626091353,-6.355975252,-6.355975252,19.3446816555,-25.001535905,12.0128295015,12.808478971,323.723321045,-0.7956494695,-14.452503719,0,0,-26.3597945099,-82.1508311903,1.3582586049,3.042266753,19.9072907909,27.6992031609,
67 -6.1229349178,14.7820725202,-14.7820725202,6.1229349178,6.1229349178,-0,-0,0,0,-0,0,-123.128290081,-154.75192883,-6.1229349178,46.0686271205,14.7820725202,-20.5679232889,-14.7820725202,-0,0,0,0,-0,-0,
68 -148.628993912,253.725563389,-105.096569476,0,-0,14.7820725202,-0,0,0,-0,314.576263029,-314.576263029,-379.727140303,-169.53400135,79.9329497939,289.412643347,-14.7820725202,-119.878641997,379.727140303,20.905007438,-79.9329497939,-35.6870799582,-0,-0,
69 -314.576263029,314.576263029,0,-0,0,0,14.7820725202,0,0,-105.096569476,253.725563389,-148.628993912,-169.53400135,-379.727140303,20.905007438,379.727140303,-0,0,289.412643347,79.9329497939,-35.6870799582,-79.9329497939,-119.878641997,-14.7820725202,
70 -123.128290081,-0,0,-0,0,0,0,6.1229349178,6.1229349178,-14.7820725202,14.7820725202,-6.1229349178,-6.1229349178,-154.75192883,0,0,-0,-0,14.7820725202,46.0686271205,0,0,-14.7820725202,-20.5679232889
71 };
72 
73 
74 static void N_T_RT3_2D_Funct(double xi, double eta, double *values)
75 {
76  int nBF = 24; // number of basis functions
77  // monomials x-component and y-component
78  double mon_x[24]={1,0,xi,0,eta, 0,
79  xi*xi,0,eta*eta,0,xi*eta,0,
80  xi*xi*xi, 0, xi*xi*eta, 0, xi*eta*eta, 0, eta*eta*eta,0,
81  xi*xi*xi*xi, xi*xi*xi*eta, xi*xi*eta*eta, xi*eta*eta*eta};
82  double mon_y[24]={0,1,0,xi,0,eta,
83  0, xi*xi, 0, eta*eta, 0,xi*eta,
84  0,xi*xi*xi, 0, xi*xi*eta,0,xi*eta*eta,0,eta*eta*eta,
85  xi*xi*xi*eta, xi*xi*eta*eta,xi*eta*eta*eta, eta*eta*eta*eta };
86 
87  memset(values, 0.0, 2*nBF*SizeOfDouble); // 2 is the space dimension
88  for(int i=0; i<nBF; i++)
89  {
90  for(int j=0; j<nBF; j++)
91  {
92  values[i ] += N_T_RT3_2D_CM[i+j*nBF]*mon_x[j];
93  values[i+nBF] += N_T_RT3_2D_CM[i+j*nBF]*mon_y[j];
94  }
95  }
96 }
97 
98 // values of the derivatives in xi direction
99 static void N_T_RT3_2D_DeriveXi(double xi, double eta, double *values)
100 {
101  int nBF = 24; // number of basis functions
102  // monomials x-component and y-component
103  double mon_x[24]={0,0,1,0,0, 0,
104  2*xi,0,0,0,eta,0,
105  3*xi*xi, 0, 2*xi*eta, 0, eta*eta, 0, 0,0,
106  4*xi*xi*xi, 3*xi*xi*eta, 2*xi*eta*eta, eta*eta*eta};
107  double mon_y[24]={0,0,0,1,0,0,
108  0, 2*xi, 0, 0, 0,eta,
109  0,3*xi*xi, 0, 2*xi*eta,0,eta*eta,0,0,
110  3*xi*xi*eta, 2*xi*eta*eta,eta*eta*eta, 0};
111 
112  memset(values, 0.0, 2*nBF*SizeOfDouble); // 2 is the space dimension
113  for(int i=0; i<nBF; i++)
114  {
115  for(int j=0; j<nBF; j++)
116  {
117  values[i ] += N_T_RT3_2D_CM[i+j*nBF]*mon_x[j];
118  values[i+nBF] += N_T_RT3_2D_CM[i+j*nBF]*mon_y[j];
119  }
120  }
121 }
122 
123 // values of the derivatives in eta direction
124 static void N_T_RT3_2D_DeriveEta(double xi, double eta, double *values)
125 {
126  int nBF = 24; // number of basis functions
127  // monomials x-component and y-component
128  double mon_x[24]={0,0,0,0,1, 0,
129  0,0,2*eta,0,xi,0,
130  0, 0, xi*xi, 0, 2*xi*eta, 0, 3*eta*eta,0,
131  0, xi*xi*xi, 2*xi*xi*eta, 3*xi*eta*eta};
132  double mon_y[24]={0,0,0,0,0,1,
133  0, 0, 0, 2*eta, 0,xi,
134  0,0, 0, xi*xi,0,2*xi*eta,0,3*eta*eta,
135  xi*xi*xi, 2*xi*xi*eta,3*xi*eta*eta, 4*eta*eta*eta };
136 
137  memset(values, 0.0, 2*nBF*SizeOfDouble); // 2 is the space dimension
138  for(int i=0; i<nBF; i++)
139  {
140  for(int j=0; j<nBF; j++)
141  {
142  values[i ] += N_T_RT3_2D_CM[i+j*nBF]*mon_x[j];
143  values[i+nBF] += N_T_RT3_2D_CM[i+j*nBF]*mon_y[j];
144  }
145  }
146 }
147 
148 // values of derivatives in xi-xi direction
149 static void N_T_RT3_2D_DeriveXiXi(double xi, double eta, double *values)
150 {
151  int nBF = 24; // number of basis functions
152  // monomials x-component and y-component
153  double mon_x[24]={0,0,0,0,0, 0,
154  2,0,0,0,0,0,
155  6*xi, 0, 2*eta, 0, 0, 0, 0,0,
156  12*xi*xi, 6*xi*eta, 2*eta*eta, };
157  double mon_y[24]={0,0,0,0,0,0,
158  0, 2, 0, 0, 0,0,
159  0,6*xi, 0, 2*eta,0,0,0,0,
160  6*xi*eta, 2*eta*eta,0, 0};
161 
162  memset(values, 0.0, 2*nBF*SizeOfDouble); // 2 is the space dimension
163  for(int i=0; i<nBF; i++)
164  {
165  for(int j=0; j<nBF; j++)
166  {
167  values[i ] += N_T_RT3_2D_CM[i+j*nBF]*mon_x[j];
168  values[i+nBF] += N_T_RT3_2D_CM[i+j*nBF]*mon_y[j];
169  }
170  }
171 }
172 
173 // values of derivatives in eta-eta direction
174 static void N_T_RT3_2D_DeriveEtaEta(double xi, double eta, double *values)
175 {
176  int nBF = 24; // number of basis functions
177  // monomials x-component and y-component
178  double mon_x[24]={0,0,0,0,0, 0,
179  0,0,2,0,0,0,
180  0, 0, 0, 0, 2*eta, 0, 6*eta,0,
181  0, 0, 2*xi*xi, 6*xi*eta};
182  double mon_y[24]={0,0,0,0,0,0,
183  0, 0, 0, 2, 0,0,
184  0,0, 0, 0,0,2*xi,0,6*eta,
185  0, 2*xi*xi,6*xi*eta, 12*eta*eta };
186 
187  memset(values, 0.0, 2*nBF*SizeOfDouble); // 2 is the space dimension
188  for(int i=0; i<nBF; i++)
189  {
190  for(int j=0; j<nBF; j++)
191  {
192  values[i ] += N_T_RT3_2D_CM[i+j*nBF]*mon_x[j];
193  values[i+nBF] += N_T_RT3_2D_CM[i+j*nBF]*mon_y[j];
194  }
195  }
196 }
197 
198 // values of derivatives in xi-eta direction
199 static void N_T_RT3_2D_DeriveXiEta(double xi, double eta, double *values)
200 {
201  int nBF = 24; // number of basis functions
202  // monomials x-component and y-component
203  double mon_x[24]={0,0,0,0,0,0,
204  0,0,0,0,1,0,
205  0, 0, 2*xi, 0, 2*eta, 0, 0,0,
206  0, 3*xi*xi, 4*xi*eta, 3*eta*eta};
207  double mon_y[24]={0,0,0,0,0,0,
208  0, 0, 0, 0, 0,1,
209  0,0, 0, 2*xi,0,2*eta,0,0,
210  3*xi*xi, 4*xi*eta,3*eta*eta, 0};
211 
212  memset(values, 0.0, 2*nBF*SizeOfDouble); // 2 is the space dimension
213  for(int i=0; i<nBF; i++)
214  {
215  for(int j=0; j<nBF; j++)
216  {
217  values[i ] += N_T_RT3_2D_CM[i+j*nBF]*mon_x[j];
218  values[i+nBF] += N_T_RT3_2D_CM[i+j*nBF]*mon_y[j];
219  }
220  }
221 }
222 
223 // ***********************************************************************
224 
225 TBaseFunct2D *BF_N_T_RT3_2D_Obj = new TBaseFunct2D
226  (24, BF_N_T_RT3_2D, BFUnitTriangle,
227  N_T_RT3_2D_Funct, N_T_RT3_2D_DeriveXi,
228  N_T_RT3_2D_DeriveEta, N_T_RT3_2D_DeriveXiXi,
229  N_T_RT3_2D_DeriveXiEta, N_T_RT3_2D_DeriveEtaEta, 4, 3,
230  0, NULL, 2);
Definition: BaseFunct2D.h:27