next up previous contents
: 三角形 : 稜線上の法線方向成分指定の積分 : 実装   目次

実装のテンプレート

要素 $Ie$ 境界稜線 $Iedge$ において、 法線方向成分がスカラー関数 $ {}^{t} f$ であるベクトル量を数値積分する 関数のテンプレートは、以下のようになる。

/* 稜線上の法線方向成分指定の積分:二次元ボリューム */
void WH_Fem__Isoparam2D__Volume__int_l_Iedge_f_whV_n_whD_l__TEMPLATE
(WH_Fem__Shape2DType shapeType,
 WH_Fem__Element2DType elementType,
 int nNodes,
 double whV_x_arrayIn[/* nNodes */][2],
 int Iedge,
 double a,
 double OUT__int_l_Iedge_f_whV_n_whD_l[2])
/*
  入力引数:
    shapeType は要素形状のタイプ
    elementType は要素のタイプ
    nNodes は整数で、要素節点数
    whV_x_arrayIn はベクトルの節点配列で、位置(節点座標)
    Iedge は整数で、要素辺ID
    a はスカラーで、厚み
  出力引数:
    OUT__int_l_Iedge_f_whV_n_whD_l はベクトルで、
      スカラー値を法線方向成分としたベクトルの積分値
*/
{
  int order;
  int nPoints;
  int Ip;
 
  /***********************************************/
  /* このテンプレートの利用者は、ここを書き直す  */   
  /***********************************************/
  /* 関数 f の多項式の次数を2とする。*/
  order = 2;   

  WH_Tensor2D__assign_whV_OUT_whV
    (WH_Tensor2D__whV_O,
     OUT__int_l_Iedge_f_whV_n_whD_l);

  /* 次数 order に対応する積分点数 nPoints を得る  */   
  WH_Fem__NumInt__Gauss2D__nPoints_Iedge 
    (shapeType, order, Iedge,
     &nPoints);
  for (Ip = 0; Ip < nPoints; Ip++) {
    double whV_xi_Ip[2];
    double w_Ip;
    double whP_N_whV_xi_arrayIn[6][2];
    double whPt_whV_x_whV_xi[2][2];
    double whV_J_l[2];
    double f;
    double whV_tmp[2];
    
    /* 積分点 Ip の自然座標 whV_xi_Ip を得る  */   
    WH_Fem__NumInt__Gauss2D__whV_xi_IedgeIp
      (shapeType, order, Iedge, Ip,
       whV_xi_Ip);

    /* 積分点 Ip の重み係数 w_Ip を得る  */   
    WH_Fem__NumInt__Gauss2D__w_IedgeIp
      (shapeType, order, Iedge, Ip,
       &w_Ip);

    /* 変換子 whV_J_lを計算する  */   
    WH_Fem__Shape2D__whP_N_whV_xi_arrayIn
      (shapeType, nNodes, whV_xi_Ip,
       whP_N_whV_xi_arrayIn);
    WH_Fem__Isoparam2D__Volume__whPt_whV_x_whV_xi
      (nNodes, whP_N_whV_xi_arrayIn, whV_x_arrayIn,
       whPt_whV_x_whV_xi);
    WH_Fem__Isoparam2D__Volume__whV_J_l_Iedge
      (shapeType, Iedge, whPt_whV_x_whV_xi, a,
       whV_J_l);

    /***********************************************/
    /* このテンプレートの利用者は、ここを書き直す  */   
    /***********************************************/
    /* スカラー値 f を自然座標 whV_xi_Ip で評価する  */   
    /* 例   f = 1.0  の場合 ( whV_xi_Ip は無視 )  */   
    f = 1.0;

    WH_Tensor2D__s_mul_whV_OUT_whV
      (f * w_Ip, whV_J_l, 
       whV_tmp);
    WH_Tensor2D__whV_add_whV_OUT_whV
      (OUT__int_l_Iedge_f_whV_n_whD_l, whV_tmp,
       OUT__int_l_Iedge_f_whV_n_whD_l);
  }
}



Hiroshi KAWAI 平成15年8月11日