📄 poisson3d_3.h
字号:
const double scalings_z_1 = scalings_z_0*(0.5 - 0.5*z); const double scalings_z_2 = scalings_z_1*(0.5 - 0.5*z); const double scalings_z_3 = scalings_z_2*(0.5 - 0.5*z); // 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.66666666666667*x*psitilde_a_2 - 0.666666666666667*psitilde_a_1; // 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.111111111111111*psitilde_bs_0_1 + 1.66666666666667*y*psitilde_bs_0_1 - 0.555555555555556*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_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_2_0 = 1; const double psitilde_bs_2_1 = 3.5*y + 2.5; const double psitilde_bs_3_0 = 1; // Compute psitilde_cs const double psitilde_cs_00_0 = 1; const double psitilde_cs_00_1 = 2*z + 1; const double psitilde_cs_00_2 = 0.3125*psitilde_cs_00_1 + 1.875*z*psitilde_cs_00_1 - 0.5625*psitilde_cs_00_0; const double psitilde_cs_00_3 = 0.155555555555556*psitilde_cs_00_2 + 1.86666666666667*z*psitilde_cs_00_2 - 0.711111111111111*psitilde_cs_00_1; const double psitilde_cs_01_0 = 1; const double psitilde_cs_01_1 = 3*z + 2; const double psitilde_cs_01_2 = 0.777777777777778*psitilde_cs_01_1 + 2.33333333333333*z*psitilde_cs_01_1 - 0.555555555555556*psitilde_cs_01_0; const double psitilde_cs_02_0 = 1; const double psitilde_cs_02_1 = 4*z + 3; const double psitilde_cs_03_0 = 1; const double psitilde_cs_10_0 = 1; const double psitilde_cs_10_1 = 3*z + 2; const double psitilde_cs_10_2 = 0.777777777777778*psitilde_cs_10_1 + 2.33333333333333*z*psitilde_cs_10_1 - 0.555555555555556*psitilde_cs_10_0; const double psitilde_cs_11_0 = 1; const double psitilde_cs_11_1 = 4*z + 3; const double psitilde_cs_12_0 = 1; const double psitilde_cs_20_0 = 1; const double psitilde_cs_20_1 = 4*z + 3; const double psitilde_cs_21_0 = 1; const double psitilde_cs_30_0 = 1; // Compute basisvalues const double basisvalue0 = 0.866025403784439*psitilde_a_0*scalings_y_0*psitilde_bs_0_0*scalings_z_0*psitilde_cs_00_0; const double basisvalue1 = 2.73861278752583*psitilde_a_1*scalings_y_1*psitilde_bs_1_0*scalings_z_1*psitilde_cs_10_0; const double basisvalue2 = 1.58113883008419*psitilde_a_0*scalings_y_0*psitilde_bs_0_1*scalings_z_1*psitilde_cs_01_0; const double basisvalue3 = 1.11803398874989*psitilde_a_0*scalings_y_0*psitilde_bs_0_0*scalings_z_0*psitilde_cs_00_1; const double basisvalue4 = 5.1234753829798*psitilde_a_2*scalings_y_2*psitilde_bs_2_0*scalings_z_2*psitilde_cs_20_0; const double basisvalue5 = 3.96862696659689*psitilde_a_1*scalings_y_1*psitilde_bs_1_1*scalings_z_2*psitilde_cs_11_0; const double basisvalue6 = 2.29128784747792*psitilde_a_0*scalings_y_0*psitilde_bs_0_2*scalings_z_2*psitilde_cs_02_0; const double basisvalue7 = 3.24037034920393*psitilde_a_1*scalings_y_1*psitilde_bs_1_0*scalings_z_1*psitilde_cs_10_1; const double basisvalue8 = 1.87082869338697*psitilde_a_0*scalings_y_0*psitilde_bs_0_1*scalings_z_1*psitilde_cs_01_1; const double basisvalue9 = 1.3228756555323*psitilde_a_0*scalings_y_0*psitilde_bs_0_0*scalings_z_0*psitilde_cs_00_2; const double basisvalue10 = 7.93725393319377*psitilde_a_3*scalings_y_3*psitilde_bs_3_0*scalings_z_3*psitilde_cs_30_0; const double basisvalue11 = 6.70820393249937*psitilde_a_2*scalings_y_2*psitilde_bs_2_1*scalings_z_3*psitilde_cs_21_0; const double basisvalue12 = 5.19615242270663*psitilde_a_1*scalings_y_1*psitilde_bs_1_2*scalings_z_3*psitilde_cs_12_0; const double basisvalue13 = 3*psitilde_a_0*scalings_y_0*psitilde_bs_0_3*scalings_z_3*psitilde_cs_03_0; const double basisvalue14 = 5.80947501931113*psitilde_a_2*scalings_y_2*psitilde_bs_2_0*scalings_z_2*psitilde_cs_20_1; const double basisvalue15 = 4.5*psitilde_a_1*scalings_y_1*psitilde_bs_1_1*scalings_z_2*psitilde_cs_11_1; const double basisvalue16 = 2.59807621135332*psitilde_a_0*scalings_y_0*psitilde_bs_0_2*scalings_z_2*psitilde_cs_02_1; const double basisvalue17 = 3.67423461417477*psitilde_a_1*scalings_y_1*psitilde_bs_1_0*scalings_z_1*psitilde_cs_10_2; const double basisvalue18 = 2.12132034355964*psitilde_a_0*scalings_y_0*psitilde_bs_0_1*scalings_z_1*psitilde_cs_01_2; const double basisvalue19 = 1.5*psitilde_a_0*scalings_y_0*psitilde_bs_0_0*scalings_z_0*psitilde_cs_00_3; // Table(s) of coefficients const static double coefficients0[20][20] = \ {{0.0288675134594814, 0.0130410132739325, 0.00752923252421041, 0.00532397137499948, 0.018298126367785, 0.014173667737846, 0.00818317088384972, 0.0115727512471569, 0.00668153104781061, 0.00472455591261533, -0.028347335475692, -0.0239578711874977, -0.0185576872239523, -0.0107142857142857, -0.0207481250689683, -0.0160714285714286, -0.00927884361197612, -0.0131222664791956, -0.00757614408414158, -0.00535714285714285}, {0.0288675134594812, -0.0130410132739326, 0.00752923252421044, 0.00532397137499954, 0.018298126367785, -0.014173667737846, 0.00818317088384973, -0.0115727512471569, 0.00668153104781061, 0.00472455591261533, 0.028347335475692, -0.0239578711874977, 0.0185576872239523, -0.0107142857142857, -0.0207481250689683, 0.0160714285714286, -0.00927884361197613, 0.0131222664791956, -0.00757614408414159, -0.00535714285714286}, {0.0288675134594813, 0, -0.0150584650484208, 0.00532397137499948, 0, 0, 0.0245495126515491, 0, -0.0133630620956212, 0.00472455591261533, 0, 0, 0, 0.0428571428571429, 0, 0, -0.0278365308359284, 0, 0.0151522881682832, -0.00535714285714285}, {0.0288675134594813, 0, 0, -0.0159719141249985, 0, 0, 0, 0, 0, 0.028347335475692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0535714285714286}, {0, 0, 0.112938487863156, -0.063887656499994, 0, 0, 0.0736485379546474, 0, 0.0267261241912425, -0.0236227795630767, 0, 0, 0, 0, 0, 0, 0.0649519052838329, 0, -0.0606091526731326, 0.0267857142857143}, {0, 0, -0.0225876975726313, 0.127775312999988, 0, 0, 0, 0, 0.0668153104781061, 0.0472455591261534, 0, 0, 0, 0, 0, 0, 0, 0, 0.0757614408414158, -0.0535714285714286}, {0, 0.0978075995544939, -0.0564692439315782, -0.063887656499994, 0.054894379103355, -0.0425210032135381, 0.0245495126515492, 0.0231455024943138, -0.0133630620956212, -0.0236227795630767, 0, 0, 0, 0, 0.0484122918275927, -0.0375, 0.021650635094611, -0.0524890659167824, 0.0303045763365663, 0.0267857142857143}, {0, -0.0195615199108988, 0.0112938487863156, 0.127775312999988, 0, 0, 0, 0.0578637562357845, -0.0334076552390531, 0.0472455591261534, 0, 0, 0, 0, 0, 0, 0, 0.065611332395978, -0.0378807204207079, -0.0535714285714286}, {0, 0.0978075995544939, -0.0790569415042095, -0.031943828249997, 0.054894379103355, 0.014173667737846, -0.0245495126515492, -0.0462910049886276, 0.0133630620956212, 0.0236227795630767, 0, 0.0479157423749955, -0.0618589574131742, 0.0428571428571429, -0.00691604168965609, -0.0160714285714286, 0.0154647393532935, 0.00874817765279706, 0, -0.00535714285714287}, {0, -0.0195615199108988, 0.124232336649472, -0.031943828249997, 0, 0.0566946709513841, 0.0245495126515492, -0.0115727512471569, -0.0467707173346743, 0.0236227795630767, 0, 0, 0.0618589574131742, -0.0642857142857143, 0, -0.0214285714285714, 0.00927884361197612, 0.00437408882639853, 0.00757614408414158, -0.00535714285714286}, {0, -0.097807599554494, -0.0564692439315782, -0.063887656499994, 0.054894379103355, 0.0425210032135381, 0.0245495126515492, -0.0231455024943138, -0.0133630620956212, -0.0236227795630767, 0, 0, 0, 0, 0.0484122918275927, 0.0375, 0.021650635094611, 0.0524890659167824, 0.0303045763365663, 0.0267857142857143}, {0, 0.0195615199108988, 0.0112938487863157, 0.127775312999988, 0, 0, 0, -0.0578637562357845, -0.033407655239053, 0.0472455591261534, 0, 0, 0, 0, 0, 0, 0, -0.065611332395978, -0.0378807204207079, -0.0535714285714286}, {0, -0.097807599554494, -0.0790569415042095, -0.031943828249997, 0.054894379103355, -0.014173667737846, -0.0245495126515491, 0.0462910049886276, 0.0133630620956212, 0.0236227795630767, 0, 0.0479157423749955, 0.0618589574131742, 0.0428571428571429, -0.0069160416896561, 0.0160714285714286, 0.0154647393532935, -0.00874817765279706, 0, -0.00535714285714286}, {0, 0.0195615199108988, 0.124232336649472, -0.031943828249997, 0, -0.0566946709513841, 0.0245495126515492, 0.0115727512471569, -0.0467707173346743, 0.0236227795630767, 0, 0, -0.0618589574131742, -0.0642857142857143, 0, 0.0214285714285714, 0.00927884361197614, -0.00437408882639853, 0.00757614408414158, -0.00535714285714286}, {0, -0.117369119465393, -0.0451753951452625, -0.031943828249997, -0.018298126367785, 0.0425210032135381, 0.0409158544192486, 0.0347182537414707, 0.033407655239053, 0.0236227795630767, 0.0850420064270761, 0.0239578711874977, -0.00618589574131741, -0.0107142857142857, 0.0207481250689683, -0.00535714285714285, -0.00927884361197612, -0.00437408882639851, -0.00757614408414159, -0.00535714285714287}, {0, 0.117369119465393, -0.0451753951452626, -0.031943828249997, -0.018298126367785, -0.0425210032135381, 0.0409158544192486, -0.0347182537414707, 0.0334076552390531, 0.0236227795630767, -0.0850420064270761, 0.0239578711874977, 0.0061858957413174, -0.0107142857142857, 0.0207481250689683, 0.00535714285714285, -0.00927884361197612, 0.00437408882639851, -0.00757614408414159, -0.00535714285714285}, {0.259807621135332, 0.117369119465393, 0.0677630927178939, 0.0479157423749955, 0, 0.0850420064270761, -0.0736485379546474, 0.0694365074829414, 0.0400891862868636, -0.0992156741649222, 0, 0, 0, 0, 0, 0.075, -0.0649519052838329, -0.0262445329583912, -0.0151522881682832, 0.0267857142857143}, {0.259807621135332, -0.117369119465393, 0.0677630927178938, 0.0479157423749955, 0, -0.0850420064270761, -0.0736485379546474, -0.0694365074829413, 0.0400891862868636, -0.0992156741649222, 0, 0, 0, 0, 0, -0.075, -0.0649519052838329, 0.0262445329583912, -0.0151522881682832, 0.0267857142857143}, {0.259807621135332, 0, -0.135526185435788, 0.0479157423749955, -0.10978875820671, 0, 0.0245495126515491, 0, -0.0801783725737273, -0.0992156741649221, 0, 0, 0, 0, -0.0968245836551854, 0, 0.021650635094611, 0, 0.0303045763365663, 0.0267857142857143}, {0.259807621135332, 0, 0, -0.143747227124986, -0.10978875820671, 0, -0.122747563257746, 0, 0, 0.0425210032135381, 0, -0.095831484749991, 0, 0.0428571428571429, 0.0138320833793122, 0, 0.0154647393532935, 0, 0, -0.00535714285714286}}; // Extract relevant coefficients const double coeff0_0 = coefficients0[dof][0]; const double coeff0_1 = coefficients0[dof][1]; const double coeff0_2 = coefficients0[dof][2]; const double coeff0_3 = coefficients0[dof][3]; const double coeff0_4 = coefficients0[dof][4]; const double coeff0_5 = coefficients0[dof][5]; const double coeff0_6 = coefficients0[dof][6]; const double coeff0_7 = coefficients0[dof][7]; const double coeff0_8 = coefficients0[dof][8]; const double coeff0_9 = coefficients0[dof][9]; const double coeff0_10 = coefficients0[dof][10]; const double coeff0_11 = coefficients0[dof][11]; const double coeff0_12 = coefficients0[dof][12]; const double coeff0_13 = coefficients0[dof][13]; const double coeff0_14 = coefficients0[dof][14]; const double coeff0_15 = coefficients0[dof][15]; const double coeff0_16 = coefficients0[dof][16]; const double coeff0_17 = coefficients0[dof][17]; const double coeff0_18 = coefficients0[dof][18]; const double coeff0_19 = coefficients0[dof][19]; // Compute value(s) *values = coeff0_0*basisvalue0 + coeff0_1*basisvalue1 + coeff0_2*basisvalue2 + coeff0_3*basisvalue3 + coeff0_4*basisvalue4 + coeff0_5*basisvalue5 + coeff0_6*basisvalue6 + coeff0_7*basisvalue7 + coeff0_8*basisvalue8 + coeff0_9*basisvalue9 + coeff0_10*basisvalue10 + coeff0_11*basisvalue11 + coeff0_12*basisvalue12 + coeff0_13*basisvalue13 + coeff0_14*basisvalue14 + coeff0_15*basisvalue15 + coeff0_16*basisvalue16 + coeff0_17*basisvalue17 + coeff0_18*basisvalue18 + coeff0_19*basisvalue19; } /// Evaluate all basis functions at given point in cell virtual void evaluate_basis_all(double* values, const double* coordinates, const ufc::cell& c) const { throw std::runtime_error("The vectorised version of evaluate_basis() is not yet implemented."); } /// Evaluate order n derivatives of basis function i at given point in cell virtual void evaluate_basis_derivatives(unsigned int i, unsigned int n, double* values, const double* coordinates, const ufc::cell& c) const { // Extract vertex coordinates const double * const * element_coordinates = c.coordinates; // Compute Jacobian of affine map from reference cell const double J_00 = element_coordinates[1][0] - element_coordinates[0][0]; const double J_01 = element_coordinates[2][0] - element_coordinates[0][0]; const double J_02 = element_coordinates[3][0] - element_coordinates[0][0]; const double J_10 = element_coordinates[1][1] - element_coordinates[0][1]; const double J_11 = element_coordinates[2][1] - element_coordinates[0][1]; const double J_12 = element_coordinates[3][1] - element_coordinates[0][1]; const double J_20 = element_coordinates[1][2] - element_coordinates[0][2];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -