#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];
}