📄 p5tri.h
字号:
for (unsigned int j = 0; j < 1*num_derivatives; j++) values[j] = 0; // Map degree of freedom to element degree of freedom const unsigned int dof = i; // Generate scalings const double scalings_y_0 = 1; const double scalings_y_1 = scalings_y_0*(0.5 - 0.5*y); const double scalings_y_2 = scalings_y_1*(0.5 - 0.5*y); const double scalings_y_3 = scalings_y_2*(0.5 - 0.5*y); const double scalings_y_4 = scalings_y_3*(0.5 - 0.5*y); const double scalings_y_5 = scalings_y_4*(0.5 - 0.5*y); // Compute psitilde_a const double psitilde_a_0 = 1; const double psitilde_a_1 = x; const double psitilde_a_2 = 1.5*x*psitilde_a_1 - 0.5*psitilde_a_0; const double psitilde_a_3 = 1.666666667*x*psitilde_a_2 - 0.6666666667*psitilde_a_1; const double psitilde_a_4 = 1.75*x*psitilde_a_3 - 0.75*psitilde_a_2; const double psitilde_a_5 = 1.8*x*psitilde_a_4 - 0.8*psitilde_a_3; // Compute psitilde_bs const double psitilde_bs_0_0 = 1; const double psitilde_bs_0_1 = 1.5*y + 0.5; const double psitilde_bs_0_2 = 0.1111111111*psitilde_bs_0_1 + 1.666666667*y*psitilde_bs_0_1 - 0.5555555556*psitilde_bs_0_0; const double psitilde_bs_0_3 = 0.05*psitilde_bs_0_2 + 1.75*y*psitilde_bs_0_2 - 0.7*psitilde_bs_0_1; const double psitilde_bs_0_4 = 0.02857142857*psitilde_bs_0_3 + 1.8*y*psitilde_bs_0_3 - 0.7714285714*psitilde_bs_0_2; const double psitilde_bs_0_5 = 0.01851851852*psitilde_bs_0_4 + 1.833333333*y*psitilde_bs_0_4 - 0.8148148148*psitilde_bs_0_3; const double psitilde_bs_1_0 = 1; const double psitilde_bs_1_1 = 2.5*y + 1.5; const double psitilde_bs_1_2 = 0.54*psitilde_bs_1_1 + 2.1*y*psitilde_bs_1_1 - 0.56*psitilde_bs_1_0; const double psitilde_bs_1_3 = 0.2857142857*psitilde_bs_1_2 + 2*y*psitilde_bs_1_2 - 0.7142857143*psitilde_bs_1_1; const double psitilde_bs_1_4 = 0.1785714286*psitilde_bs_1_3 + 1.964285714*y*psitilde_bs_1_3 - 0.7857142857*psitilde_bs_1_2; const double psitilde_bs_2_0 = 1; const double psitilde_bs_2_1 = 3.5*y + 2.5; const double psitilde_bs_2_2 = 1.020408163*psitilde_bs_2_1 + 2.571428571*y*psitilde_bs_2_1 - 0.5510204082*psitilde_bs_2_0; const double psitilde_bs_2_3 = 0.5787037037*psitilde_bs_2_2 + 2.291666667*y*psitilde_bs_2_2 - 0.712962963*psitilde_bs_2_1; const double psitilde_bs_3_0 = 1; const double psitilde_bs_3_1 = 4.5*y + 3.5; const double psitilde_bs_3_2 = 1.512345679*psitilde_bs_3_1 + 3.055555556*y*psitilde_bs_3_1 - 0.5432098765*psitilde_bs_3_0; const double psitilde_bs_4_0 = 1; const double psitilde_bs_4_1 = 5.5*y + 4.5; const double psitilde_bs_5_0 = 1; // Compute basisvalues const double basisvalue0 = 0.7071067812*psitilde_a_0*scalings_y_0*psitilde_bs_0_0; const double basisvalue1 = 1.732050808*psitilde_a_1*scalings_y_1*psitilde_bs_1_0; const double basisvalue2 = psitilde_a_0*scalings_y_0*psitilde_bs_0_1; const double basisvalue3 = 2.738612788*psitilde_a_2*scalings_y_2*psitilde_bs_2_0; const double basisvalue4 = 2.121320344*psitilde_a_1*scalings_y_1*psitilde_bs_1_1; const double basisvalue5 = 1.224744871*psitilde_a_0*scalings_y_0*psitilde_bs_0_2; const double basisvalue6 = 3.741657387*psitilde_a_3*scalings_y_3*psitilde_bs_3_0; const double basisvalue7 = 3.16227766*psitilde_a_2*scalings_y_2*psitilde_bs_2_1; const double basisvalue8 = 2.449489743*psitilde_a_1*scalings_y_1*psitilde_bs_1_2; const double basisvalue9 = 1.414213562*psitilde_a_0*scalings_y_0*psitilde_bs_0_3; const double basisvalue10 = 4.74341649*psitilde_a_4*scalings_y_4*psitilde_bs_4_0; const double basisvalue11 = 4.183300133*psitilde_a_3*scalings_y_3*psitilde_bs_3_1; const double basisvalue12 = 3.535533906*psitilde_a_2*scalings_y_2*psitilde_bs_2_2; const double basisvalue13 = 2.738612788*psitilde_a_1*scalings_y_1*psitilde_bs_1_3; const double basisvalue14 = 1.58113883*psitilde_a_0*scalings_y_0*psitilde_bs_0_4; const double basisvalue15 = 5.744562647*psitilde_a_5*scalings_y_5*psitilde_bs_5_0; const double basisvalue16 = 5.196152423*psitilde_a_4*scalings_y_4*psitilde_bs_4_1; const double basisvalue17 = 4.582575695*psitilde_a_3*scalings_y_3*psitilde_bs_3_2; const double basisvalue18 = 3.872983346*psitilde_a_2*scalings_y_2*psitilde_bs_2_3; const double basisvalue19 = 3*psitilde_a_1*scalings_y_1*psitilde_bs_1_4; const double basisvalue20 = 1.732050808*psitilde_a_0*scalings_y_0*psitilde_bs_0_5; // Table(s) of coefficients const static double coefficients0[21][21] = \ {{0.0154328861, -0.009450674049, -0.005456349206, 0.03018753073, 0.02338316075, 0.01350027416, -0.02319976058, -0.01960737637, -0.01518780842, -0.008768685283, 0.02138986513, 0.0188640879, 0.01594306415, 0.01234944439, 0.007129955042, -0.01798917576, -0.01627182171, -0.01435039787, -0.01212829982, -0.009394540645, -0.00542394057}, {0.0154328861, 0.009450674049, -0.005456349206, 0.03018753073, -0.02338316075, 0.01350027416, 0.02319976058, -0.01960737637, 0.01518780842, -0.008768685283, 0.02138986513, -0.0188640879, 0.01594306415, -0.01234944439, 0.007129955042, 0.01798917576, -0.01627182171, 0.01435039787, -0.01212829982, 0.009394540645, -0.00542394057}, {0.0154328861, 0, 0.01091269841, 0, 0, 0.04050082247, 0, 0, 0, 0.03507474113, 0, 0, 0, 0, 0.03564977521, 0, 0, 0, 0, 0, 0.03254364342}, {0.03507474113, 0.1260089873, -0.08432539683, 0.1018829162, -0.02864437192, 0.002025041123, 0.07733253528, -0.02614316849, 0, 0.005845790188, 0.03564977521, 0.0125760586, -0.0385290717, 0.04425217572, -0.02970814601, 0, 0.03254364342, -0.05166143235, 0.05821583914, -0.05260942761, 0.03254364342}, {0.03507474113, -0.03293416714, 0.1215277778, -0.01132032402, 0.07541069343, -0.02227545236, 0, 0.1045726739, -0.1012520562, 0.05845790188, 0, 0.0565922637, -0.009300120754, -0.04013569426, 0.04159140441, 0, 0, 0.05166143235, -0.1018777185, 0.1183712121, -0.08135910855}, {0.03507474113, 0.08877905925, -0.08928571429, 0.03018753073, 0.04325884739, -0.05940120628, 0, 0.02614316849, 0.1012520562, -0.1169158038, 0, 0, 0.07440096603, -0.03087361097, -0.0118832584, 0, 0, 0, 0.06791847899, -0.131523569, 0.1084788114}, {0.03507474113, -0.01002344217, 0.1512896825, 0, 0.05027379562, 0.09315189167, 0, 0, 0.05062602808, 0.06430369207, 0, 0, 0, 0.0720384256, -0.02376651681, 0, 0, 0, 0, 0.06576178451, -0.08135910855}, {0.03507474113, -0.1260089873, -0.08432539683, 0.1018829162, 0.02864437192, 0.002025041123, -0.07733253528, -0.02614316849, 0, 0.005845790188, 0.03564977521, -0.0125760586, -0.0385290717, -0.04425217572, -0.02970814601, 0, 0.03254364342, 0.05166143235, 0.05821583914, 0.05260942761, 0.03254364342}, {0.03507474113, 0.03293416714, 0.1215277778, -0.01132032402, -0.07541069343, -0.02227545236, 0, 0.1045726739, 0.1012520562, 0.05845790188, 0, -0.0565922637, -0.009300120754, 0.04013569426, 0.04159140441, 0, 0, -0.05166143235, -0.1018777185, -0.1183712121, -0.08135910855}, {0.03507474113, -0.08877905925, -0.08928571429, 0.03018753073, -0.04325884739, -0.05940120628, 0, 0.02614316849, -0.1012520562, -0.1169158038, 0, 0, 0.07440096603, 0.03087361097, -0.0118832584, 0, 0, 0, 0.06791847899, 0.131523569, 0.1084788114}, {0.03507474113, 0.01002344217, 0.1512896825, 0, -0.05027379562, 0.09315189167, 0, 0, -0.05062602808, 0.06430369207, 0, 0, 0, -0.0720384256, -0.02376651681, 0, 0, 0, 0, -0.06576178451, -0.08135910855}, {0.03507474113, -0.1360324295, -0.06696428571, 0.03697972514, 0.07891816754, 0.06007621999, -0.007733253528, -0.04575054485, -0.05568863089, -0.03799763622, -0.06416959538, -0.0125760586, 0.01727165283, 0.02778624987, 0.02020153929, 0.08994587878, 0.04881546513, 0.02009055702, 0.002425659964, -0.005636724387, -0.00542394057}, {0.03507474113, 0.1217132264, -0.03224206349, -0.06716725587, -0.03215184604, 0.02767556202, 0.1391985635, 0.06535792122, -0.01012520562, -0.02922895094, 0.04277973025, -0.0565922637, -0.03321471698, 0.009262083291, 0.02020153929, -0.1798917576, -0.03254364342, 0.0114803183, 0.009702639856, -0.001878908129, -0.00542394057}, {0.03507474113, -0.1217132264, -0.03224206349, -0.06716725587, 0.03215184604, 0.02767556202, -0.1391985635, 0.06535792122, 0.01012520562, -0.02922895094, 0.04277973025, 0.0565922637, -0.03321471698, -0.009262083291, 0.02020153929, 0.1798917576, -0.03254364342, -0.0114803183, 0.009702639856, 0.001878908129, -0.00542394057}, {0.03507474113, 0.1360324295, -0.06696428571, 0.03697972514, -0.07891816754, 0.06007621999, 0.007733253528, -0.04575054485, 0.05568863089, -0.03799763622, -0.06416959538, 0.0125760586, 0.01727165283, -0.02778624987, 0.02020153929, -0.08994587878, 0.04881546513, -0.02009055702, 0.002425659964, 0.005636724387, -0.00542394057}, {0.280597929, -0.2147880466, -0.1240079365, 0.09056259218, 0.1169158038, 0, 0.1546650706, 0.07842950546, 0.1012520562, 0.08184106264, -0.1425991008, 0.0251521172, -0.0318861283, -0.107028518, -0.09506606722, 0, -0.1301745737, -0.1033228647, -0.02910791957, 0.0263047138, 0.03254364342}, {0.03507474113, 0, -0.1240079365, -0.3848910168, 0, 0.1012520562, 0, -0.1045726739, 0, 0.04676632151, 0.2138986513, 0, 0.1408304, 0, -0.09506606722, 0, 0.1952618605, 0, -0.05821583914, 0, 0.03254364342}, {0.280597929, 0.2147880466, -0.1240079365, 0.09056259218, -0.1169158038, 0, -0.1546650706, 0.07842950546, -0.1012520562, 0.08184106264, -0.1425991008, -0.0251521172, -0.0318861283, 0.107028518, -0.09506606722, 0, -0.1301745737, 0.1033228647, -0.02910791957, -0.0263047138, 0.03254364342}, {0.03507474113, -0.1073940233, 0.06200396825, 0.01132032402, -0.3069039849, -0.2531301404, 0, -0.1045726739, 0, 0.04676632151, 0, 0.1697767911, 0.009300120754, 0.126581805, 0.1723072468, 0, 0, 0.154984297, 0.1018777185, -0.03945707071, -0.08135910855}, {0.03507474113, 0.1073940233, 0.06200396825, 0.01132032402, 0.3069039849, -0.2531301404, 0, -0.1045726739, 0, 0.04676632151, 0, -0.1697767911, 0.009300120754, -0.126581805, 0.1723072468, 0, 0, -0.154984297, 0.1018777185, 0.03945707071, -0.08135910855}, {0.280597929, 0, 0.248015873, -0.06037506145, 0, 0.1350027416, 0, -0.05228633697, 0, -0.2104484468, 0, 0, -0.1488019321, 0, -0.1425991008, 0, 0, 0, -0.135836958, 0, 0.1084788114}}; // Interesting (new) part // Tables of derivatives of the polynomial base (transpose) const static double dmats0[21][21] = \ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {4.898979486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 9.486832981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {4, 0, 7.071067812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {5.291502622, 0, -2.993325909, 13.66260102, 0, 0.6110100927, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 4.38178046, 0, 0, 12.52198067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {3.464101615, 0, 7.838367177, 0, 0, 8.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 10.95445115, 0, 0, -3.83325939, 0, 17.74823935, 0, 0.5532833352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {4.732863826, 0, 3.346640106, 4.364357805, 0, -5.074680379, 0, 17.00840129, 0, 1.521277659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 2.449489743, 0, 0, 9.142857143, 0, 0, 0, 14.84614978, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {3.098386677, 0, 7.668115805, 0, 0, 10.73312629, 0, 0, 0, 9.295160031, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {5.416025603, 0, -4.376809635, 15.73213272, 0, 2.010178183, 0, -4.036867139, 0, -0.5158119622, 21.79908255, 0, 0.4513354669, 0, 0.05766953055, 0, 0, 0, 0, 0, 0}, {0, 6.857142857, 0, 0, 9.972922524, 0, 4.320493799, 0, -7.273098321, 0, 0, 21.25401923, 0, 1.49078804, 0, 0, 0, 0, 0, 0, 0}, {4.320493799, 0, 5.935526614, 1.792842914, 0, -0.3207134903, 0, 9.200874125, 0, -5.966396199, 0, 0, 19.80226325, 0, 2.530240384, 0, 0, 0, 0, 0, 0}, {0, 1.533303756, 0, 0, 6.337932451, 0, 0, 0, 13.55261854, 0, 0, 0, 0, 16.66751699, 0, 0, 0, 0, 0, 0, 0}, {2.828427125, 0, 7.314285714, 0, 0, 11.33763824, 0, 0, 0, 12.92995257, 0, 0, 0, 0, 9.938586932, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}; const static double dmats1[21][21] = \ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {2.449489743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {4.242640687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {2.581988897, 4.74341649, -0.9128709292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {2, 6.123724357, 3.535533906, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {-2.309401077, 0, 8.164965809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {2.645751311, 5.184592559, -1.496662955, 6.831300511, -1.058300524, 0.3055050463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {2.236067977, 2.19089023, 2.529822128, 8.082903769, 6.260990337, -1.807392228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1.732050808, -5.091168825, 3.919183588, 0, 9.699484522, 4.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {5, 0, -2.828427125, 0, 0, 12.12435565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {2.683281573, 5.477225575, -1.897366596, 7.42307489, -1.916629695, 0.6639400022, 8.874119675, -1.071428571, 0.2766416676, -0.09583148475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {2.366431913, 2.898275349, 1.673320053, 2.182178902, 5.747048932, -2.53734019, 10.0623059, 8.504200643, -2.195775164, 0.7606388293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {2, 1.224744871, 3.535533906, -7.377111136, 4.571428571, 1.649572198, 0, 11.49977817, 7.42307489, -2.571428571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1.549193338, 6.640783086, 3.834057903, 0, -6.196773354, 5.366563146, 0, 0, 13.41640786, 4.647580015, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {-3.577708764, 0, 8.854377448, 0, 0, -3.098386677, 0, 0, 0, 16.09968944, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {2.708012802, 5.685642498, -2.188404818, 7.866066361, -2.611298059, 1.005089091, 9.552971227, -2.018433569, 0.6700593943, -0.2579059811, 10.89954127, -1.068054653, 0.2256677335, -0.07491491773, 0.02883476528, 0, 0, 0, 0, 0, 0}, {2.449489743, 3.428571429, 0.9897433186, 3.049339172, 4.986461262, -2.72741187, 2.160246899, 8.346248495, -3.63654916, 1.516350793, 12.04989627, 10.62700961, -2.245365598, 0.7453940199, -0.286902292, 0, 0, 0, 0, 0, 0}, {2.160246899, 1.81422947, 2.967763307, 0.896421457, 5.416047584, -0.1603567451, -9.525793444, 4.600437062, 5.345224838, -2.983198099, 0, 13.38877363, 9.901131623, -3.286878676, 1.265120192, 0, 0, 0, 0, 0, 0}, {1.825741858, 0.766651878, 3.836097791, 8.636804256, 3.168966226, 3.659207007, 0, -8.748177653, 6.776309272, 0.521640531, 0, 0, 15.06237033, 8.333758493, -3.207665139, 0, 0, 0, 0, 0, 0}, {1.414213562, -6.730254567, 3.657142857, 0, 9.455027817, 5.668819119, 0, 0, -6.998542122, 6.464976285, 0, 0, 0, 17.21413752, 4.969293466, 0, 0, 0, 0, 0, 0}, {5.715476066, 0, -4.618802154, 0, 0, 12.72792206, 0, 0, 0, -3.265986324, 0, 0, 0, 0, 20.08316044, 0, 0, 0, 0, 0, 0}}; // Compute reference derivatives // Declare pointer to array of derivatives on FIAT element double *derivatives = new double [num_derivatives]; // Declare coefficients double coeff0_0 = 0; double coeff0_1 = 0; double coeff0_2 = 0; double coeff0_3 = 0; double coeff0_4 = 0; double coeff0_5 = 0; double coeff0_6 = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -