Skip to content

Instantly share code, notes, and snippets.

@w1th0utnam3
Created June 17, 2018 13:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save w1th0utnam3/749d7fdad0a3c82213a1fc48f7be06f9 to your computer and use it in GitHub Desktop.
Save w1th0utnam3/749d7fdad0a3c82213a1fc48f7be06f9 to your computer and use it in GitHub Desktop.
tabulate_tensor function generated by FFC with default parameters for Laplace with P2(Tetrahedron) elements
void tabulate_tensor_A(
double* restrict A,
const double* const* w,
const double* restrict coordinate_dofs,
int cell_orientation)
{
// Precomputed values of basis functions and precomputations
// FE* dimensions: [entities][points][dofs]
// PI* dimensions: [entities][dofs][dofs] or [entities][dofs]
// PM* dimensions: [entities][dofs][dofs]
alignas(32) static const double FE9_C0_D001_Q4[1][1][2] = { { { -1.0, 1.0 } } };
// Unstructured piecewise computations
const double J_c4 = coordinate_dofs[1] * FE9_C0_D001_Q4[0][0][0] + coordinate_dofs[7] * FE9_C0_D001_Q4[0][0][1];
const double J_c8 = coordinate_dofs[2] * FE9_C0_D001_Q4[0][0][0] + coordinate_dofs[11] * FE9_C0_D001_Q4[0][0][1];
const double J_c5 = coordinate_dofs[1] * FE9_C0_D001_Q4[0][0][0] + coordinate_dofs[10] * FE9_C0_D001_Q4[0][0][1];
const double J_c7 = coordinate_dofs[2] * FE9_C0_D001_Q4[0][0][0] + coordinate_dofs[8] * FE9_C0_D001_Q4[0][0][1];
const double J_c0 = coordinate_dofs[0] * FE9_C0_D001_Q4[0][0][0] + coordinate_dofs[3] * FE9_C0_D001_Q4[0][0][1];
const double J_c1 = coordinate_dofs[0] * FE9_C0_D001_Q4[0][0][0] + coordinate_dofs[6] * FE9_C0_D001_Q4[0][0][1];
const double J_c6 = coordinate_dofs[2] * FE9_C0_D001_Q4[0][0][0] + coordinate_dofs[5] * FE9_C0_D001_Q4[0][0][1];
const double J_c3 = coordinate_dofs[1] * FE9_C0_D001_Q4[0][0][0] + coordinate_dofs[4] * FE9_C0_D001_Q4[0][0][1];
const double J_c2 = coordinate_dofs[0] * FE9_C0_D001_Q4[0][0][0] + coordinate_dofs[9] * FE9_C0_D001_Q4[0][0][1];
alignas(32) double sp[80];
sp[0] = J_c4 * J_c8;
sp[1] = J_c5 * J_c7;
sp[2] = sp[0] + -1 * sp[1];
sp[3] = J_c0 * sp[2];
sp[4] = J_c5 * J_c6;
sp[5] = J_c3 * J_c8;
sp[6] = sp[4] + -1 * sp[5];
sp[7] = J_c1 * sp[6];
sp[8] = sp[3] + sp[7];
sp[9] = J_c3 * J_c7;
sp[10] = J_c4 * J_c6;
sp[11] = sp[9] + -1 * sp[10];
sp[12] = J_c2 * sp[11];
sp[13] = sp[8] + sp[12];
sp[14] = sp[2] / sp[13];
sp[15] = J_c3 * (-1 * J_c8);
sp[16] = sp[4] + sp[15];
sp[17] = sp[16] / sp[13];
sp[18] = sp[11] / sp[13];
sp[19] = sp[14] * sp[14];
sp[20] = sp[14] * sp[17];
sp[21] = sp[18] * sp[14];
sp[22] = sp[17] * sp[17];
sp[23] = sp[18] * sp[17];
sp[24] = sp[18] * sp[18];
sp[25] = J_c2 * J_c7;
sp[26] = J_c8 * (-1 * J_c1);
sp[27] = sp[25] + sp[26];
sp[28] = sp[27] / sp[13];
sp[29] = J_c0 * J_c8;
sp[30] = J_c6 * (-1 * J_c2);
sp[31] = sp[29] + sp[30];
sp[32] = sp[31] / sp[13];
sp[33] = J_c1 * J_c6;
sp[34] = J_c0 * J_c7;
sp[35] = sp[33] + -1 * sp[34];
sp[36] = sp[35] / sp[13];
sp[37] = sp[28] * sp[28];
sp[38] = sp[28] * sp[32];
sp[39] = sp[28] * sp[36];
sp[40] = sp[32] * sp[32];
sp[41] = sp[32] * sp[36];
sp[42] = sp[36] * sp[36];
sp[43] = sp[37] + sp[19];
sp[44] = sp[38] + sp[20];
sp[45] = sp[39] + sp[21];
sp[46] = sp[40] + sp[22];
sp[47] = sp[41] + sp[23];
sp[48] = sp[24] + sp[42];
sp[49] = J_c1 * J_c5;
sp[50] = J_c2 * J_c4;
sp[51] = sp[49] + -1 * sp[50];
sp[52] = sp[51] / sp[13];
sp[53] = J_c2 * J_c3;
sp[54] = J_c0 * J_c5;
sp[55] = sp[53] + -1 * sp[54];
sp[56] = sp[55] / sp[13];
sp[57] = J_c0 * J_c4;
sp[58] = J_c1 * J_c3;
sp[59] = sp[57] + -1 * sp[58];
sp[60] = sp[59] / sp[13];
sp[61] = sp[52] * sp[52];
sp[62] = sp[52] * sp[56];
sp[63] = sp[60] * sp[52];
sp[64] = sp[56] * sp[56];
sp[65] = sp[60] * sp[56];
sp[66] = sp[60] * sp[60];
sp[67] = sp[43] + sp[61];
sp[68] = sp[44] + sp[62];
sp[69] = sp[45] + sp[63];
sp[70] = sp[46] + sp[64];
sp[71] = sp[47] + sp[65];
sp[72] = sp[48] + sp[66];
sp[73] = fabs(sp[13]);
sp[74] = sp[67] * sp[73];
sp[75] = sp[68] * sp[73];
sp[76] = sp[69] * sp[73];
sp[77] = sp[70] * sp[73];
sp[78] = sp[71] * sp[73];
sp[79] = sp[72] * sp[73];
A[0] = 0.1 * sp[74] + 0.1000000000000001 * sp[75] + 0.1 * sp[76] + 0.1000000000000001 * sp[75] + 0.1000000000000001 * sp[77] + 0.1000000000000001 * sp[78] + 0.1 * sp[76] + 0.1000000000000001 * sp[78] + 0.1000000000000001 * sp[79];
A[1] = 0.03333333333333325 * sp[74] + 0.03333333333333331 * sp[75] + 0.0333333333333333 * sp[76];
A[2] = 0.03333333333333339 * sp[75] + 0.03333333333333336 * sp[77] + 0.03333333333333338 * sp[78];
A[3] = 0.03333333333333338 * sp[76] + 0.03333333333333338 * sp[78] + 0.03333333333333335 * sp[79];
A[4] = 0.03333333333333456 * sp[75] + 0.03333333333333452 * sp[76] + 0.03333333333333455 * sp[77] + 0.03333333333333449 * sp[78] + 0.03333333333333448 * sp[78] + 0.03333333333333443 * sp[79];
A[5] = 0.03333333333333458 * sp[74] + 0.03333333333333457 * sp[76] + 0.03333333333333457 * sp[75] + 0.03333333333333462 * sp[78] + 0.03333333333333448 * sp[76] + 0.03333333333333455 * sp[79];
A[6] = 0.03333333333333456 * sp[74] + 0.0333333333333345 * sp[75] + 0.03333333333333453 * sp[75] + 0.03333333333333455 * sp[77] + 0.03333333333333448 * sp[76] + 0.03333333333333447 * sp[78];
A[7] = -0.03333333333333456 * sp[74] + -0.03333333333333456 * sp[75] + -0.1333333333333331 * sp[76] + -0.03333333333333455 * sp[75] + -0.03333333333333456 * sp[77] + -0.1333333333333331 * sp[78] + -0.03333333333333446 * sp[76] + -0.03333333333333448 * sp[78] + -0.1333333333333331 * sp[79];
A[8] = -0.03333333333333457 * sp[74] + -0.1333333333333331 * sp[75] + -0.03333333333333455 * sp[76] + -0.03333333333333455 * sp[75] + -0.1333333333333331 * sp[77] + -0.03333333333333451 * sp[78] + -0.0333333333333345 * sp[76] + -0.1333333333333331 * sp[78] + -0.03333333333333447 * sp[79];
A[9] = -0.133333333333333 * sp[74] + -0.03333333333333444 * sp[75] + -0.03333333333333448 * sp[76] + -0.1333333333333331 * sp[75] + -0.03333333333333451 * sp[77] + -0.03333333333333454 * sp[78] + -0.1333333333333331 * sp[76] + -0.03333333333333442 * sp[78] + -0.03333333333333445 * sp[79];
A[10] = 0.03333333333333325 * sp[74] + 0.03333333333333331 * sp[75] + 0.0333333333333333 * sp[76];
A[11] = 0.09999999999999999 * sp[74];
A[12] = -0.03333333333333337 * sp[75];
A[13] = -0.03333333333333335 * sp[76];
A[14] = -0.03333333333333321 * sp[75] + -0.03333333333333317 * sp[76];
A[15] = -0.03333333333333322 * sp[74] + 0.1000000000000002 * sp[76];
A[16] = -0.03333333333333324 * sp[74] + 0.1000000000000002 * sp[75];
A[17] = 0.0333333333333332 * sp[74] + 0.0333333333333332 * sp[75];
A[18] = 0.03333333333333325 * sp[74] + 0.03333333333333321 * sp[76];
A[19] = -0.1333333333333336 * sp[74] + -0.1000000000000001 * sp[75] + -0.1000000000000002 * sp[76];
A[20] = 0.03333333333333339 * sp[75] + 0.03333333333333336 * sp[77] + 0.03333333333333338 * sp[78];
A[21] = -0.03333333333333337 * sp[75];
A[22] = 0.09999999999999991 * sp[77];
A[23] = -0.03333333333333333 * sp[78];
A[24] = -0.03333333333333342 * sp[77] + 0.09999999999999998 * sp[78];
A[25] = -0.03333333333333344 * sp[75] + -0.03333333333333351 * sp[78];
A[26] = 0.09999999999999989 * sp[75] + -0.03333333333333333 * sp[77];
A[27] = 0.03333333333333342 * sp[75] + 0.03333333333333342 * sp[77];
A[28] = -0.09999999999999992 * sp[75] + -0.1333333333333336 * sp[77] + -0.09999999999999988 * sp[78];
A[29] = 0.03333333333333344 * sp[77] + 0.03333333333333351 * sp[78];
A[30] = 0.03333333333333338 * sp[76] + 0.03333333333333338 * sp[78] + 0.03333333333333335 * sp[79];
A[31] = -0.03333333333333335 * sp[76];
A[32] = -0.03333333333333333 * sp[78];
A[33] = 0.1000000000000002 * sp[79];
A[34] = 0.09999999999999985 * sp[78] + -0.03333333333333392 * sp[79];
A[35] = 0.09999999999999991 * sp[76] + -0.0333333333333336 * sp[79];
A[36] = -0.03333333333333373 * sp[76] + -0.03333333333333385 * sp[78];
A[37] = -0.09999999999999985 * sp[76] + -0.09999999999999985 * sp[78] + -0.1333333333333338 * sp[79];
A[38] = 0.03333333333333374 * sp[76] + 0.03333333333333374 * sp[79];
A[39] = 0.03333333333333369 * sp[78] + 0.0333333333333336 * sp[79];
A[40] = 0.03333333333333456 * sp[75] + 0.03333333333333455 * sp[77] + 0.03333333333333448 * sp[78] + 0.03333333333333452 * sp[76] + 0.03333333333333449 * sp[78] + 0.03333333333333443 * sp[79];
A[41] = -0.03333333333333321 * sp[75] + -0.03333333333333317 * sp[76];
A[42] = -0.03333333333333342 * sp[77] + 0.09999999999999998 * sp[78];
A[43] = 0.09999999999999985 * sp[78] + -0.03333333333333392 * sp[79];
A[44] = 0.2666666666666679 * sp[77] + 0.1333333333333341 * sp[78] + 0.1333333333333341 * sp[78] + 0.266666666666668 * sp[79];
A[45] = 0.2666666666666679 * sp[75] + 0.1333333333333353 * sp[78] + 0.1333333333333341 * sp[76] + 0.1333333333333352 * sp[79];
A[46] = 0.1333333333333342 * sp[75] + 0.1333333333333348 * sp[77] + 0.2666666666666678 * sp[76] + 0.1333333333333352 * sp[78];
A[47] = -0.2666666666666678 * sp[75] + -0.2666666666666678 * sp[77] + -0.1333333333333344 * sp[78] + -0.133333333333334 * sp[76] + -0.133333333333334 * sp[78];
A[48] = -0.1333333333333343 * sp[75] + -0.1333333333333341 * sp[78] + -0.2666666666666679 * sp[76] + -0.1333333333333345 * sp[78] + -0.2666666666666678 * sp[79];
A[49] = -0.1333333333333342 * sp[77] + -0.1333333333333343 * sp[78] + -0.1333333333333343 * sp[78] + -0.1333333333333342 * sp[79];
A[50] = 0.03333333333333458 * sp[74] + 0.03333333333333457 * sp[75] + 0.03333333333333448 * sp[76] + 0.03333333333333457 * sp[76] + 0.03333333333333462 * sp[78] + 0.03333333333333455 * sp[79];
A[51] = -0.03333333333333322 * sp[74] + 0.1000000000000002 * sp[76];
A[52] = -0.03333333333333344 * sp[75] + -0.03333333333333351 * sp[78];
A[53] = 0.09999999999999991 * sp[76] + -0.0333333333333336 * sp[79];
A[54] = 0.2666666666666679 * sp[75] + 0.1333333333333341 * sp[76] + 0.1333333333333353 * sp[78] + 0.1333333333333352 * sp[79];
A[55] = 0.2666666666666679 * sp[74] + 0.1333333333333353 * sp[76] + 0.1333333333333353 * sp[76] + 0.2666666666666696 * sp[79];
A[56] = 0.1333333333333342 * sp[74] + 0.1333333333333348 * sp[75] + 0.1333333333333351 * sp[76] + 0.2666666666666695 * sp[78];
A[57] = -0.2666666666666678 * sp[74] + -0.2666666666666678 * sp[75] + -0.1333333333333345 * sp[76] + -0.1333333333333352 * sp[76] + -0.1333333333333352 * sp[78];
A[58] = -0.1333333333333342 * sp[74] + -0.1333333333333341 * sp[76] + -0.1333333333333352 * sp[76] + -0.133333333333335 * sp[79];
A[59] = -0.1333333333333342 * sp[75] + -0.1333333333333342 * sp[76] + -0.1333333333333344 * sp[76] + -0.2666666666666685 * sp[78] + -0.2666666666666686 * sp[79];
A[60] = 0.03333333333333456 * sp[74] + 0.03333333333333453 * sp[75] + 0.03333333333333448 * sp[76] + 0.0333333333333345 * sp[75] + 0.03333333333333455 * sp[77] + 0.03333333333333447 * sp[78];
A[61] = -0.03333333333333324 * sp[74] + 0.1000000000000002 * sp[75];
A[62] = 0.09999999999999989 * sp[75] + -0.03333333333333333 * sp[77];
A[63] = -0.03333333333333373 * sp[76] + -0.03333333333333385 * sp[78];
A[64] = 0.1333333333333342 * sp[75] + 0.2666666666666678 * sp[76] + 0.1333333333333348 * sp[77] + 0.1333333333333352 * sp[78];
A[65] = 0.1333333333333342 * sp[74] + 0.1333333333333351 * sp[76] + 0.1333333333333348 * sp[75] + 0.2666666666666695 * sp[78];
A[66] = 0.2666666666666677 * sp[74] + 0.1333333333333351 * sp[75] + 0.1333333333333351 * sp[75] + 0.2666666666666693 * sp[77];
A[67] = -0.1333333333333341 * sp[74] + -0.1333333333333342 * sp[75] + -0.1333333333333347 * sp[75] + -0.1333333333333348 * sp[77];
A[68] = -0.2666666666666678 * sp[74] + -0.1333333333333344 * sp[75] + -0.2666666666666676 * sp[76] + -0.1333333333333352 * sp[75] + -0.133333333333335 * sp[78];
A[69] = -0.1333333333333342 * sp[75] + -0.1333333333333341 * sp[76] + -0.1333333333333344 * sp[75] + -0.2666666666666683 * sp[77] + -0.2666666666666683 * sp[78];
A[70] = -0.03333333333333456 * sp[74] + -0.03333333333333455 * sp[75] + -0.03333333333333446 * sp[76] + -0.03333333333333456 * sp[75] + -0.03333333333333456 * sp[77] + -0.03333333333333448 * sp[78] + -0.1333333333333331 * sp[76] + -0.1333333333333331 * sp[78] + -0.1333333333333331 * sp[79];
A[71] = 0.0333333333333332 * sp[74] + 0.0333333333333332 * sp[75];
A[72] = 0.03333333333333342 * sp[75] + 0.03333333333333342 * sp[77];
A[73] = -0.09999999999999985 * sp[76] + -0.09999999999999985 * sp[78] + -0.1333333333333338 * sp[79];
A[74] = -0.2666666666666678 * sp[75] + -0.133333333333334 * sp[76] + -0.2666666666666678 * sp[77] + -0.133333333333334 * sp[78] + -0.1333333333333344 * sp[78];
A[75] = -0.2666666666666678 * sp[74] + -0.1333333333333352 * sp[76] + -0.2666666666666678 * sp[75] + -0.1333333333333352 * sp[78] + -0.1333333333333345 * sp[76];
A[76] = -0.1333333333333341 * sp[74] + -0.1333333333333347 * sp[75] + -0.1333333333333342 * sp[75] + -0.1333333333333348 * sp[77];
A[77] = 0.2666666666666677 * sp[74] + 0.2666666666666677 * sp[75] + 0.1333333333333344 * sp[76] + 0.2666666666666677 * sp[75] + 0.2666666666666677 * sp[77] + 0.1333333333333344 * sp[78] + 0.1333333333333344 * sp[76] + 0.1333333333333344 * sp[78] + 0.2666666666666668 * sp[79];
A[78] = 0.1333333333333342 * sp[74] + 0.133333333333334 * sp[76] + 0.1333333333333342 * sp[75] + 0.1333333333333341 * sp[78] + 0.1333333333333322 * sp[78];
A[79] = 0.1333333333333341 * sp[75] + 0.1333333333333342 * sp[76] + 0.1333333333333341 * sp[77] + 0.1333333333333342 * sp[78] + 0.1333333333333322 * sp[76];
A[80] = -0.03333333333333457 * sp[74] + -0.03333333333333455 * sp[75] + -0.0333333333333345 * sp[76] + -0.1333333333333331 * sp[75] + -0.1333333333333331 * sp[77] + -0.1333333333333331 * sp[78] + -0.03333333333333455 * sp[76] + -0.03333333333333451 * sp[78] + -0.03333333333333447 * sp[79];
A[81] = 0.03333333333333325 * sp[74] + 0.03333333333333321 * sp[76];
A[82] = -0.09999999999999992 * sp[75] + -0.1333333333333336 * sp[77] + -0.09999999999999988 * sp[78];
A[83] = 0.03333333333333374 * sp[76] + 0.03333333333333374 * sp[79];
A[84] = -0.1333333333333343 * sp[75] + -0.2666666666666679 * sp[76] + -0.1333333333333345 * sp[78] + -0.1333333333333341 * sp[78] + -0.2666666666666678 * sp[79];
A[85] = -0.1333333333333342 * sp[74] + -0.1333333333333352 * sp[76] + -0.1333333333333341 * sp[76] + -0.133333333333335 * sp[79];
A[86] = -0.2666666666666678 * sp[74] + -0.1333333333333352 * sp[75] + -0.1333333333333344 * sp[75] + -0.2666666666666676 * sp[76] + -0.133333333333335 * sp[78];
A[87] = 0.1333333333333342 * sp[74] + 0.1333333333333342 * sp[75] + 0.1333333333333322 * sp[78] + 0.133333333333334 * sp[76] + 0.1333333333333341 * sp[78];
A[88] = 0.2666666666666679 * sp[74] + 0.1333333333333345 * sp[75] + 0.2666666666666677 * sp[76] + 0.1333333333333345 * sp[75] + 0.2666666666666669 * sp[77] + 0.1333333333333344 * sp[78] + 0.2666666666666677 * sp[76] + 0.1333333333333344 * sp[78] + 0.2666666666666675 * sp[79];
A[89] = 0.1333333333333342 * sp[75] + 0.1333333333333341 * sp[76] + 0.1333333333333322 * sp[75] + 0.1333333333333341 * sp[78] + 0.133333333333334 * sp[79];
A[90] = -0.133333333333333 * sp[74] + -0.1333333333333331 * sp[75] + -0.1333333333333331 * sp[76] + -0.03333333333333444 * sp[75] + -0.03333333333333451 * sp[77] + -0.03333333333333442 * sp[78] + -0.03333333333333448 * sp[76] + -0.03333333333333454 * sp[78] + -0.03333333333333445 * sp[79];
A[91] = -0.1333333333333336 * sp[74] + -0.1000000000000001 * sp[75] + -0.1000000000000002 * sp[76];
A[92] = 0.03333333333333344 * sp[77] + 0.03333333333333351 * sp[78];
A[93] = 0.03333333333333369 * sp[78] + 0.0333333333333336 * sp[79];
A[94] = -0.1333333333333342 * sp[77] + -0.1333333333333343 * sp[78] + -0.1333333333333343 * sp[78] + -0.1333333333333342 * sp[79];
A[95] = -0.1333333333333344 * sp[76] + -0.1333333333333342 * sp[75] + -0.2666666666666685 * sp[78] + -0.1333333333333342 * sp[76] + -0.2666666666666686 * sp[79];
A[96] = -0.1333333333333344 * sp[75] + -0.1333333333333342 * sp[75] + -0.2666666666666683 * sp[77] + -0.1333333333333341 * sp[76] + -0.2666666666666683 * sp[78];
A[97] = 0.1333333333333322 * sp[76] + 0.1333333333333341 * sp[75] + 0.1333333333333341 * sp[77] + 0.1333333333333342 * sp[76] + 0.1333333333333342 * sp[78];
A[98] = 0.1333333333333322 * sp[75] + 0.1333333333333342 * sp[75] + 0.1333333333333341 * sp[78] + 0.1333333333333341 * sp[76] + 0.133333333333334 * sp[79];
A[99] = 0.2666666666666666 * sp[74] + 0.1333333333333342 * sp[75] + 0.1333333333333342 * sp[76] + 0.1333333333333342 * sp[75] + 0.2666666666666674 * sp[77] + 0.2666666666666674 * sp[78] + 0.1333333333333342 * sp[76] + 0.2666666666666674 * sp[78] + 0.2666666666666674 * sp[79];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment