形状関数の微分を自然座標で評価する関数は 以下のようになる。 これは、全節点の形状関数について一度に計算される。
/* 形状関数の自然座標についての微分 */ void WH_Fem__Shape3D__Hexa20N__whP_N_whV_xi_arrayIn (double whV_xi[3], double OUT__whP_N_whV_xi_arrayIn[20][3]) /* 入力引数: whV_xi はベクトルで、自然座標 出力引数: OUT__whP_N_whV_xi_arrayIn はベクトルの節点配列で、 形状関数の自然座標に関する微分 */ { double xi = whV_xi[0]; double eta = whV_xi[1]; double zeta = whV_xi[2]; OUT__whP_N_whV_xi_arrayIn[0][0] = 0.125 * (1.0 - eta) * (1.0 - zeta) * (1.0 + 2.0 * xi + eta + zeta); OUT__whP_N_whV_xi_arrayIn[1][0] = -0.125 * (1.0 - eta) * (1.0 - zeta) * (1.0 - 2.0 * xi + eta + zeta); OUT__whP_N_whV_xi_arrayIn[2][0] = -0.125 * (1.0 + eta) * (1.0 - zeta) * (1.0 - 2.0 * xi - eta + zeta); OUT__whP_N_whV_xi_arrayIn[3][0] = 0.125 * (1.0 + eta) * (1.0 - zeta) * (1.0 + 2.0 * xi - eta + zeta); OUT__whP_N_whV_xi_arrayIn[4][0] = 0.125 * (1.0 - eta) * (1.0 + zeta) * (1.0 + 2.0 * xi + eta - zeta); OUT__whP_N_whV_xi_arrayIn[5][0] = -0.125 * (1.0 - eta) * (1.0 + zeta) * (1.0 - 2.0 * xi + eta - zeta); OUT__whP_N_whV_xi_arrayIn[6][0] = -0.125 * (1.0 + eta) * (1.0 + zeta) * (1.0 - 2.0 * xi - eta - zeta); OUT__whP_N_whV_xi_arrayIn[7][0] = 0.125 * (1.0 + eta) * (1.0 + zeta) * (1.0 + 2.0 * xi - eta - zeta); OUT__whP_N_whV_xi_arrayIn[8][0] = -0.5 * xi (1.0 - eta) * (1.0 - zeta); OUT__whP_N_whV_xi_arrayIn[9][0] = 0.25 * (1.0 - eta * eta) * (1.0 - zeta); OUT__whP_N_whV_xi_arrayIn[10][0] = -0.5 * xi * (1.0 + eta) * (1.0 - zeta); OUT__whP_N_whV_xi_arrayIn[11][0] = -0.25 * (1.0 - eta * eta) * (1.0 - zeta); OUT__whP_N_whV_xi_arrayIn[12][0] = -0.25 * (1.0 - zeta * zeta) * (1.0 - eta); OUT__whP_N_whV_xi_arrayIn[13][0] = 0.25 * (1.0 - zeta * zeta) * (1.0 - eta); OUT__whP_N_whV_xi_arrayIn[14][0] = 0.25 * (1.0 - zeta * zeta) * (1.0 + eta); OUT__whP_N_whV_xi_arrayIn[15][0] = -0.25 * (1.0 - zeta * zeta) * (1.0 + eta); OUT__whP_N_whV_xi_arrayIn[16][0] = -0.5 * xi * (1.0 - eta) * (1.0 + zeta); OUT__whP_N_whV_xi_arrayIn[17][0] = 0.25 * (1.0 - eta * eta) * (1.0 + zeta); OUT__whP_N_whV_xi_arrayIn[18][0] = -0.5 * xi * (1.0 + eta) * (1.0 + zeta); OUT__whP_N_whV_xi_arrayIn[19][0] = -0.25 * (1.0 - eta * eta) * (1.0 + zeta); OUT__whP_N_whV_xi_arrayIn[0][1] = 0.125 * (1.0 - zeta) * (1.0 - xi) * (1.0 + xi + 2.0 * eta + zeta); OUT__whP_N_whV_xi_arrayIn[1][1] = 0.125 * (1.0 - zeta) * (1.0 + xi) * (1.0 - xi + 2.0 * eta + zeta); OUT__whP_N_whV_xi_arrayIn[2][1] = -0.125 * (1.0 - zeta) * (1.0 + xi) * (1.0 - xi - 2.0 * eta + zeta); OUT__whP_N_whV_xi_arrayIn[3][1] = -0.125 * (1.0 - zeta) * (1.0 - xi) * (1.0 + xi - 2.0 * eta + zeta); OUT__whP_N_whV_xi_arrayIn[4][1] = 0.125 * (1.0 + zeta) * (1.0 - xi) * (1.0 + xi + 2.0 * eta - zeta); OUT__whP_N_whV_xi_arrayIn[5][1] = 0.125 * (1.0 + zeta) * (1.0 + xi) * (1.0 - xi + 2.0 * eta - zeta); OUT__whP_N_whV_xi_arrayIn[6][1] = -0.125 * (1.0 + zeta) * (1.0 + xi) * (1.0 - xi - 2.0 * eta - zeta); OUT__whP_N_whV_xi_arrayIn[7][1] = -0.125 * (1.0 + zeta) * (1.0 - xi) * (1.0 + xi - 2.0 * eta - zeta); OUT__whP_N_whV_xi_arrayIn[8][1] = -0.25 * (1.0 - xi * xi) * (1.0 - zeta); OUT__whP_N_whV_xi_arrayIn[9][1] = -0.5 * eta * (1.0 - zeta) * (1.0 + xi); OUT__whP_N_whV_xi_arrayIn[10][1] = 0.25 * (1.0 - xi * xi) * (1.0 - zeta); OUT__whP_N_whV_xi_arrayIn[11][1] = -0.5 * eta * (1.0 - zeta) * (1.0 - xi); OUT__whP_N_whV_xi_arrayIn[12][1] = -0.25 * (1.0 - zeta * zeta) * (1.0 - xi); OUT__whP_N_whV_xi_arrayIn[13][1] = -0.25 * (1.0 - zeta * zeta) * (1.0 + xi); OUT__whP_N_whV_xi_arrayIn[14][1] = 0.25 * (1.0 - zeta * zeta) * (1.0 + xi); OUT__whP_N_whV_xi_arrayIn[15][1] = 0.25 * (1.0 - zeta * zeta) * (1.0 - xi); OUT__whP_N_whV_xi_arrayIn[16][1] = -0.25 * (1.0 - xi * xi) * (1.0 + zeta); OUT__whP_N_whV_xi_arrayIn[17][1] = -0.5 * eta * (1.0 + zeta) * (1.0 + xi); OUT__whP_N_whV_xi_arrayIn[18][1] = 0.25 * (1.0 - xi * xi) * (1.0 + zeta); OUT__whP_N_whV_xi_arrayIn[19][1] = -0.5 * eta * (1.0 + zeta) * (1.0 - xi); OUT__whP_N_whV_xi_arrayIn[0][2] = 0.125 * (1.0 - xi) * (1.0 - eta) * (1.0 + xi + eta + 2.0 * zeta); OUT__whP_N_whV_xi_arrayIn[1][2] = 0.125 * (1.0 + xi) * (1.0 - eta) * (1.0 - xi + eta + 2.0 * zeta); OUT__whP_N_whV_xi_arrayIn[2][2] = 0.125 * (1.0 + xi) * (1.0 + eta) * (1.0 - xi - eta + 2.0 * zeta); OUT__whP_N_whV_xi_arrayIn[3][2] = 0.125 * (1.0 - xi) * (1.0 + eta) * (1.0 + xi - eta + 2.0 * zeta); OUT__whP_N_whV_xi_arrayIn[4][2] = -0.125 * (1.0 - xi) * (1.0 - eta) * (1.0 + xi + eta - 2.0 * zeta); OUT__whP_N_whV_xi_arrayIn[5][2] = -0.125 * (1.0 + xi) * (1.0 - eta) * (1.0 - xi + eta - 2.0 * zeta); OUT__whP_N_whV_xi_arrayIn[6][2] = -0.125 * (1.0 + xi) * (1.0 + eta) * (1.0 - xi - eta - 2.0 * zeta); OUT__whP_N_whV_xi_arrayIn[7][2] = -0.125 * (1.0 - xi) * (1.0 + eta) * (1.0 + xi - eta - 2.0 * zeta); OUT__whP_N_whV_xi_arrayIn[8][2] = -0.25 * (1.0 - xi * xi) * (1.0 - eta); OUT__whP_N_whV_xi_arrayIn[9][2] = -0.25 * (1.0 - eta * eta) * (1.0 + xi); OUT__whP_N_whV_xi_arrayIn[10][2] = -0.25 * (1.0 - xi * xi) * (1.0 + eta); OUT__whP_N_whV_xi_arrayIn[11][2] = -0.25 * (1.0 - eta * eta) * (1.0 - xi); OUT__whP_N_whV_xi_arrayIn[12][2] = -0.5 * zeta * (1.0 - xi) * (1.0 - eta); OUT__whP_N_whV_xi_arrayIn[13][2] = -0.5 * zeta * (1.0 + xi) * (1.0 - eta); OUT__whP_N_whV_xi_arrayIn[14][2] = -0.5 * zeta * (1.0 + xi) * (1.0 + eta); OUT__whP_N_whV_xi_arrayIn[15][2] = -0.5 * zeta * (1.0 - xi) * (1.0 + eta); OUT__whP_N_whV_xi_arrayIn[16][2] = 0.25 * (1.0 - xi * xi) * (1.0 - eta); OUT__whP_N_whV_xi_arrayIn[17][2] = 0.25 * (1.0 - eta * eta) * (1.0 + xi); OUT__whP_N_whV_xi_arrayIn[18][2] = 0.25 * (1.0 - xi * xi) * (1.0 + eta); OUT__whP_N_whV_xi_arrayIn[19][2] = 0.25 * (1.0 - eta * eta) * (1.0 - xi); }