next up previous contents
: 二次元 : 積分 : 積分点ごとの自然座標と重み係数   目次

実装

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



Hiroshi KAWAI 平成15年8月11日