diff --git a/NumLib/Fem/ShapeFunction/ShapeQuad9-impl.h b/NumLib/Fem/ShapeFunction/ShapeQuad9-impl.h index d6509dcba0e218102065ccdf33f07801db50906e..afcaed7a261729b4d490a5a1fb92bc4977e8f7e7 100644 --- a/NumLib/Fem/ShapeFunction/ShapeQuad9-impl.h +++ b/NumLib/Fem/ShapeFunction/ShapeQuad9-impl.h @@ -9,44 +9,42 @@ namespace NumLib { - template <class T_X, class T_N> -void ShapeQuad9::computeShapeFunction(const T_X &r, T_N &N) +void ShapeQuad9::computeShapeFunction(const T_X& r, T_N& N) { - N[8] = (1.0 - r[0] * r[0]) * ( 1.0 - r[1] * r[1]); - N[7] = 0.5 * (1.0 - r[1] * r[1]) * (1.0 + r[0]) - 0.5 * N[8]; - N[6] = 0.5 * (1.0 - r[0] * r[0]) * (1.0 - r[1]) - 0.5 * N[8]; - N[5] = 0.5 * (1.0 - r[1] * r[1]) * (1.0 - r[0]) - 0.5 * N[8]; - N[4] = 0.5 * (1.0 - r[0] * r[0]) * (1.0 + r[1]) - 0.5 * N[8]; - N[3] = 0.25 * (1.0 + r[0]) * (1.0 - r[1]) - 0.5 * N[6] - 0.5 * N[7] - 0.25 * N[8]; - N[2] = 0.25 * (1.0 - r[0]) * (1.0 - r[1]) - 0.5 * N[5] - 0.5 * N[6] - 0.25 * N[8]; - N[1] = 0.25 * (1.0 - r[0]) * (1.0 + r[1]) - 0.5 * N[4] - 0.5 * N[5] - 0.25 * N[8]; - N[0] = 0.25 * (1.0 + r[0]) * (1.0 + r[1]) - 0.5 * N[4] - 0.5 * N[7] - 0.25 * N[8]; + N[0] = r[0] * (r[0] + 1) * r[1] * (r[1] + 1) / 4; + N[1] = r[0] * (r[0] - 1) * r[1] * (r[1] + 1) / 4; + N[2] = r[0] * (r[0] - 1) * r[1] * (r[1] - 1) / 4; + N[3] = r[0] * (r[0] + 1) * r[1] * (r[1] - 1) / 4; + N[4] = r[1] * (r[1] + 1) * (1 - r[0] * r[0]) / 2; + N[5] = r[0] * (r[0] - 1) * (1 - r[1] * r[1]) / 2; + N[6] = r[1] * (r[1] - 1) * (1 - r[0] * r[0]) / 2; + N[7] = r[0] * (r[0] + 1) * (1 - r[1] * r[1]) / 2; + N[8] = (1 - r[0] * r[0]) * (1 - r[1] * r[1]); } template <class T_X, class T_N> -void ShapeQuad9::computeGradShapeFunction(const T_X &r, T_N &dNdr) +void ShapeQuad9::computeGradShapeFunction(const T_X& r, T_N& dNdr) { - dNdr[8] = -2.0 * r[0] * (1.0 - r[1] * r[1]); - dNdr[7] = +0.5 * (1.0 - r[1] * r[1]) - 0.5 * dNdr[8]; - dNdr[6] = -1.0 * r[0] * (1.0 - r[1]) - 0.5 * dNdr[8]; - dNdr[5] = -dNdr[7]; - dNdr[4] = -1.0 * r[0] * (1.0 + r[1]) - 0.5 * dNdr[8]; - dNdr[3] = +0.25 * (1 - r[1]) - 0.5 * dNdr[6] - 0.5 * dNdr[7] - 0.25 * dNdr[8]; - dNdr[2] = -0.25 * (1 - r[1]) - 0.5 * dNdr[5] - 0.5 * dNdr[6] - 0.25 * dNdr[8]; - dNdr[1] = -0.25 * (1 + r[1]) - 0.5 * dNdr[4] - 0.5 * dNdr[5] - 0.25 * dNdr[8]; - dNdr[0] = +0.25 * (1 + r[1]) - 0.5 * dNdr[4] - 0.5 * dNdr[7] - 0.25 * dNdr[8]; + dNdr[0] = (r[0] + 0.5) * r[1] * (r[1] + 1) / 2; + dNdr[1] = (r[0] - 0.5) * r[1] * (r[1] + 1) / 2; + dNdr[2] = (r[0] - 0.5) * r[1] * (r[1] - 1) / 2; + dNdr[3] = (r[0] + 0.5) * r[1] * (r[1] - 1) / 2; + dNdr[4] = -r[0] * r[1] * (1 + r[1]); + dNdr[5] = (1 - r[1] * r[1]) * (r[0] - 0.5); + dNdr[6] = r[0] * r[1] * (1 - r[1]); + dNdr[7] = (1 - r[1] * r[1]) * (r[0] + 0.5); + dNdr[8] = 2 * r[0] * (r[1] * r[1] - 1); - dNdr[17] = -2.0 * r[1] * (1.0 - r[0] * r[0]); - dNdr[16] = -1.0 * r[1] * (1.0 + r[0]) - 0.5 * dNdr[17]; - dNdr[15] = -0.5 * (1.0 - r[0] * r[0]) - 0.5 * dNdr[17]; - dNdr[14] = -1.0 * r[1] * (1.0 - r[0]) - 0.5 * dNdr[17]; - dNdr[13] = -dNdr[15]; - dNdr[12] = -0.25 * (1 + r[0]) - 0.5 * dNdr[15] - 0.5 * dNdr[16] - 0.25 * dNdr[17]; - dNdr[11] = -0.25 * (1 - r[0]) - 0.5 * dNdr[14] - 0.5 * dNdr[15] - 0.25 * dNdr[17]; - dNdr[10] = +0.25 * (1 - r[0]) - 0.5 * dNdr[13] - 0.5 * dNdr[14] - 0.25 * dNdr[17]; - dNdr[9] = +0.25 * (1 + r[0]) - 0.5 * dNdr[13] - 0.5 * dNdr[16] - 0.25 * dNdr[17]; + dNdr[10] = (r[1] + 0.5) * r[0] * (r[0] - 1) / 2; + dNdr[11] = (r[1] - 0.5) * r[0] * (r[0] - 1) / 2; + dNdr[12] = (r[1] - 0.5) * r[0] * (r[0] + 1) / 2; + dNdr[13] = (1 - r[0] * r[0]) * (r[1] + 0.5); + dNdr[14] = r[0] * r[1] * (1 - r[0]); + dNdr[15] = (1 - r[0] * r[0]) * (r[1] - 0.5); + dNdr[16] = -r[0] * r[1] * (1 + r[0]); + dNdr[17] = 2 * r[1] * (r[0] * r[0] - 1); + dNdr[9] = (r[1] + 0.5) * r[0] * (r[0] + 1) / 2; } - }