#define MAX_LINE_ORDER 6 #define MAX_LINE_POINTS 6 static int Line__nPoints[MAX_LINE_ORDER] = { 1, 2, 3, 4, 5, 6 }; static double Line__xi_Ip [MAX_LINE_ORDER][MAX_LINE_POINTS] = { { 0.0 }, { -0.577350296189626, 0.577350296189626 }, { -0.774596669241483, 0.0, 0.774596669241483 }, { -0.861136311594053, -0.339981043584856, 0.339981043584856, 0.861136311594053 }, { -0.906179845938664, -0.538469310105683, 0.0, 0.538469310105683, 0.906179845938664 }, { -0.932469514203152, -0.661209386466265, -0.238619186083197, 0.238619186083197, 0.661209386466265, 0.932469514203152 } }; static double Line__w_Ip [MAX_LINE_ORDER][MAX_LINE_POINTS] = { { 2.0 }, { 1.0, 1.0 }, { 0.555555555555556, 0.888888888888889, 0.555555555555556 }, { 0.347854845137454, 0.652145154862546, 0.652145154862546, 0.347854845137454 }, { 0.236926885056189, 0.478628670499366, 0.568888888888889, 0.478628670499366, 0.236926885056189 }, { 0.171324492379170, 0.360761573048139, 0.467913934572691, 0.467913934572691, 0.360761573048139, 0.171324492379170 } }; /* 領域での積分点数 */ void WH_Fem__NumInt__Gauss1D__nPoints (int order, int *OUT__nPoints) /* 入力引数: order は整数で、ガウス積分の次数 出力引数: OUT__nPoints は整数で、積分点数 */ { assert(0 < order); assert(order <= MAX_LINE_ORDER); *OUT__nPoints = Line__nPoints[order - 1]; } /* 領域での積分点の自然座標 */ void WH_Fem__NumInt__Gauss1D__xi_Ip (int order, int Ip, double *OUT__xi_Ip) /* 入力引数: order は整数で、ガウス積分の次数 Ip は整数で、積分点ID 出力引数: OUT__xi_Ip はスカラーで、自然座標 */ { assert(0 < order); assert(order <= MAX_LINE_ORDER); assert(0 <= Ip); assert(Ip < Line__nPoints[order - 1]); *OUT__xi_Ip = Line__xi_Ip[order - 1][Ip]; } /* 領域での積分点の重み係数 */ void WH_Fem__NumInt__Gauss1D__w_Ip (int order, int Ip, double *OUT__w_Ip) /* 入力引数: order は整数で、ガウス積分の次数 Ip は整数で、積分点ID 出力引数: OUT__w_Ip はスカラーで、重み係数 */ { assert(0 < order); assert(order <= MAX_LINE_ORDER); assert(0 <= Ip); assert(Ip < Line__nPoints[order - 1]); *OUT__w_Ip = Line__w_Ip[order - 1][Ip]; }