Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
Functions | |
void | get_signs_for_node_local_coord_hex (int node_id, double &sign_y1, double &sign_y2, double &sign_y3) |
void | initialize (int n=2, int m=4, int dim=2, int tri=0) |
void | get_gauss_pts_and_weight () |
void | get_tri_rule_pts_and_weight () |
void | calculate_shape_function_2d_tri () |
void | calculate_shape_function_2d_quad () |
void | get_shape_func (double shape_function[], double dndy1_at_gauss_pts[], double dndy2_at_gauss_ptsp[], double gauss_weight[]) |
void | get_shape_func (double shape_function[], double dndy1_at_gauss_pts[], double dndy2_at_gauss_pts[], double dndy3_at_gauss_pts[], double gauss_weight[]) |
void | calculate_derivative_at_nodes (double dndy1_at_nodes[][maxNumberNodes], double dndy2_at_nodes[][maxNumberNodes]) |
void | calculate_shape_function_3d_hex () |
void | calculate_derivative_at_nodes_3d (double dndy1_at_nodes[][maxNumberNodes], double dndy2_at_nodes[][maxNumberNodes], double dndy3_at_nodes[][maxNumberNodes]) |
void | calculate_derivative_at_nodes_2d_tri (double dndy1_at_nodes[][maxNumberNodes], double dndy2_at_nodes[][maxNumberNodes]) |
void | calculate_shape_function_3d_tet () |
void | get_tet_rule_pts_and_weight () |
void | calculate_derivative_at_nodes_3d_tet (double dndy1_at_nodes[][maxNumberNodes], double dndy2_at_nodes[][maxNumberNodes], double dndy3_at_nodes[][maxNumberNodes]) |
void | get_node_local_coord_tet (int node_id, double &y1, double &y2, double &y3, double &y4) |
void GaussIntegration::calculate_derivative_at_nodes | ( | double | dndy1_at_nodes[][maxNumberNodes], |
double | dndy2_at_nodes[][maxNumberNodes] | ||
) |
Definition at line 340 of file V_GaussIntegration.cpp.
References numberNodes.
Referenced by v_quad_distortion().
{ double y1 = 0., y2 = 0.; int i; for( i = 0; i < numberNodes; i++ ) { switch( i ) { case 0: y1 = -1.; y2 = -1.; break; case 1: y1 = 1.; y2 = -1.; break; case 2: y1 = 1.; y2 = 1.; break; case 3: y1 = -1.; y2 = 1.; break; // midside nodes if there is any case 4: y1 = 0.; y2 = -1.; break; case 5: y1 = 1.; y2 = 0.; break; case 6: y1 = 0.; y2 = 1.; break; case 7: y1 = -1.; y2 = 0.; break; } switch( numberNodes ) { case 4: // dn_i/dy1 evaluated at node i dndy1_at_nodes[i][0] = -0.25 * ( 1 - y2 ); dndy1_at_nodes[i][1] = 0.25 * ( 1 - y2 ); dndy1_at_nodes[i][2] = 0.25 * ( 1 + y2 ); dndy1_at_nodes[i][3] = -0.25 * ( 1 + y2 ); // dn_i/dy2 evaluated at node i dndy2_at_nodes[i][0] = -0.25 * ( 1 - y1 ); dndy2_at_nodes[i][1] = -0.25 * ( 1 + y1 ); dndy2_at_nodes[i][2] = 0.25 * ( 1 + y1 ); dndy2_at_nodes[i][3] = 0.25 * ( 1 - y1 ); break; case 8: dndy1_at_nodes[i][0] = 0.25 * ( 1 - y2 ) * ( 2.0 * y1 + y2 ); dndy1_at_nodes[i][1] = 0.25 * ( 1 - y2 ) * ( 2.0 * y1 - y2 ); dndy1_at_nodes[i][2] = 0.25 * ( 1 + y2 ) * ( 2.0 * y1 + y2 ); dndy1_at_nodes[i][3] = 0.25 * ( 1 + y2 ) * ( 2.0 * y1 - y2 ); dndy1_at_nodes[i][4] = -y1 * ( 1 - y2 ); dndy1_at_nodes[i][5] = 0.5 * ( 1 - y2 * y2 ); dndy1_at_nodes[i][6] = -y1 * ( 1 + y2 ); dndy1_at_nodes[i][7] = -0.5 * ( 1 - y2 * y2 ); dndy2_at_nodes[i][0] = 0.25 * ( 1 - y1 ) * ( 2.0 * y2 + y1 ); dndy2_at_nodes[i][1] = 0.25 * ( 1 + y1 ) * ( 2.0 * y2 - y1 ); dndy2_at_nodes[i][2] = 0.25 * ( 1 + y1 ) * ( 2.0 * y2 + y1 ); dndy2_at_nodes[i][3] = 0.25 * ( 1 - y1 ) * ( 2.0 * y2 - y1 ); dndy2_at_nodes[i][4] = -0.5 * ( 1 - y1 * y1 ); dndy2_at_nodes[i][5] = -y2 * ( 1 + y1 ); dndy2_at_nodes[i][6] = 0.5 * ( 1 - y1 * y1 ); dndy2_at_nodes[i][7] = -y2 * ( 1 - y1 ); break; } } }
void GaussIntegration::calculate_derivative_at_nodes_2d_tri | ( | double | dndy1_at_nodes[][maxNumberNodes], |
double | dndy2_at_nodes[][maxNumberNodes] | ||
) |
Definition at line 706 of file V_GaussIntegration.cpp.
References numberNodes.
Referenced by v_tri_distortion().
{ double y1 = 0., y2 = 0., y3; int i; for( i = 0; i < numberNodes; i++ ) { switch( i ) { case 0: y1 = 1.; y2 = 0.; break; case 1: y1 = 0.; y2 = 1.; break; case 2: y1 = 0.; y2 = 0.; break; case 3: y1 = 0.5; y2 = 0.5; break; case 4: y1 = 0.; y2 = 0.5; break; case 5: y1 = 0.5; y2 = 0.0; break; } y3 = 1. - y1 - y2; dndy1_at_nodes[i][0] = 4 * y1 - 1.; dndy1_at_nodes[i][1] = 0; dndy1_at_nodes[i][2] = 1 - 4. * y3; dndy1_at_nodes[i][3] = 4. * y2; dndy1_at_nodes[i][4] = -4. * y2; dndy1_at_nodes[i][5] = 4. * ( 1 - 2 * y1 - y2 ); dndy2_at_nodes[i][0] = 0.0; dndy2_at_nodes[i][1] = 4. * y2 - 1.; dndy2_at_nodes[i][2] = 1 - 4. * y3; dndy2_at_nodes[i][3] = 4. * y1; dndy2_at_nodes[i][4] = 4. * ( 1 - y1 - 2. * y2 ); dndy2_at_nodes[i][5] = -4. * y1; } }
void GaussIntegration::calculate_derivative_at_nodes_3d | ( | double | dndy1_at_nodes[][maxNumberNodes], |
double | dndy2_at_nodes[][maxNumberNodes], | ||
double | dndy3_at_nodes[][maxNumberNodes] | ||
) |
Definition at line 431 of file V_GaussIntegration.cpp.
References get_signs_for_node_local_coord_hex(), and numberNodes.
Referenced by v_hex_distortion().
{ double y1, y2, y3, sign_node_y1, sign_node_y2, sign_node_y3; double y1_term, y2_term, y3_term, y123_temp; int node_id, node_id_2; for( node_id = 0; node_id < numberNodes; node_id++ ) { get_signs_for_node_local_coord_hex( node_id, y1, y2, y3 ); switch( numberNodes ) { case 8: for( node_id_2 = 0; node_id_2 < numberNodes; node_id_2++ ) { get_signs_for_node_local_coord_hex( node_id_2, sign_node_y1, sign_node_y2, sign_node_y3 ); y1_term = 1 + sign_node_y1 * y1; y2_term = 1 + sign_node_y2 * y2; y3_term = 1 + sign_node_y3 * y3; dndy1_at_nodes[node_id][node_id_2] = 0.125 * sign_node_y1 * y2_term * y3_term; dndy2_at_nodes[node_id][node_id_2] = 0.125 * sign_node_y2 * y1_term * y3_term; dndy3_at_nodes[node_id][node_id_2] = 0.125 * sign_node_y3 * y1_term * y2_term; } break; case 20: for( node_id_2 = 0; node_id_2 < numberNodes; node_id_2++ ) { get_signs_for_node_local_coord_hex( node_id_2, sign_node_y1, sign_node_y2, sign_node_y3 ); y1_term = 1 + sign_node_y1 * y1; y2_term = 1 + sign_node_y2 * y2; y3_term = 1 + sign_node_y3 * y3; y123_temp = sign_node_y1 * y1 + sign_node_y2 * y2 + sign_node_y3 * y3 - 2.; switch( node_id_2 ) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: { dndy1_at_nodes[node_id][node_id_2] = 0.125 * sign_node_y1 * y2_term * y3_term * y123_temp + 0.125 * y1_term * y2_term * y3_term * sign_node_y1; dndy2_at_nodes[node_id][node_id_2] = 0.125 * sign_node_y2 * y1_term * y3_term * y123_temp + 0.125 * y1_term * y2_term * y3_term * sign_node_y2; dndy3_at_nodes[node_id][node_id_2] = 0.125 * sign_node_y3 * y1_term * y2_term * y123_temp + 0.125 * y1_term * y2_term * y3_term * sign_node_y3; break; } case 8: case 10: case 16: case 18: { dndy1_at_nodes[node_id][node_id_2] = -0.5 * y1 * y2_term * y3_term; dndy2_at_nodes[node_id][node_id_2] = 0.25 * ( 1 - y1 * y1 ) * sign_node_y2 * y3_term; dndy3_at_nodes[node_id][node_id_2] = 0.25 * ( 1 - y1 * y1 ) * y2_term * sign_node_y3; break; } case 9: case 11: case 17: case 19: { dndy1_at_nodes[node_id][node_id_2] = 0.25 * ( 1 - y2 * y2 ) * sign_node_y1 * y3_term; dndy2_at_nodes[node_id][node_id_2] = -0.5 * y2 * y1_term * y3_term; dndy3_at_nodes[node_id][node_id_2] = 0.25 * ( 1 - y2 * y2 ) * y1_term * sign_node_y3; break; } case 12: case 13: case 14: case 15: { dndy1_at_nodes[node_id][node_id_2] = 0.25 * ( 1 - y3 * y3 ) * sign_node_y1 * y2_term; dndy2_at_nodes[node_id][node_id_2] = 0.25 * ( 1 - y3 * y3 ) * y1_term * sign_node_y2; dndy3_at_nodes[node_id][node_id_2] = -0.5 * y3 * y1_term * y2_term; break; } } } break; } } }
void GaussIntegration::calculate_derivative_at_nodes_3d_tet | ( | double | dndy1_at_nodes[][maxNumberNodes], |
double | dndy2_at_nodes[][maxNumberNodes], | ||
double | dndy3_at_nodes[][maxNumberNodes] | ||
) |
Definition at line 915 of file V_GaussIntegration.cpp.
References get_node_local_coord_tet(), and numberNodes.
Referenced by v_tet_distortion().
{ double y1, y2, y3, y4; int i; switch( numberNodes ) { case 10: { for( i = 0; i < numberNodes; i++ ) { get_node_local_coord_tet( i, y1, y2, y3, y4 ); dndy1_at_nodes[i][0] = 1 - 4 * y4; dndy1_at_nodes[i][1] = 4 * y1 - 1.; dndy1_at_nodes[i][2] = 0; dndy1_at_nodes[i][3] = 0; dndy1_at_nodes[i][4] = 4. * ( y4 - y1 ); dndy1_at_nodes[i][5] = 4. * y2; dndy1_at_nodes[i][6] = -4. * y2; dndy1_at_nodes[i][7] = -4. * y3; dndy1_at_nodes[i][8] = 4. * y3; dndy1_at_nodes[i][9] = 0; dndy2_at_nodes[i][0] = 1 - 4 * y4; dndy2_at_nodes[i][1] = 0; dndy2_at_nodes[i][2] = 4. * y2 - 1.; dndy2_at_nodes[i][3] = 0; dndy2_at_nodes[i][4] = -4. * y1; dndy2_at_nodes[i][5] = 4. * y1; dndy2_at_nodes[i][6] = 4. * ( y4 - y2 ); dndy2_at_nodes[i][7] = -4. * y3; dndy2_at_nodes[i][8] = 0.; dndy2_at_nodes[i][9] = 4. * y3; dndy3_at_nodes[i][0] = 1 - 4 * y4; dndy3_at_nodes[i][1] = 0; dndy3_at_nodes[i][2] = 0; dndy3_at_nodes[i][3] = 4. * y3 - 1.; dndy3_at_nodes[i][4] = -4. * y1; dndy3_at_nodes[i][5] = 0; dndy3_at_nodes[i][6] = -4. * y2; dndy3_at_nodes[i][7] = 4. * ( y4 - y3 ); dndy3_at_nodes[i][8] = 4. * y1; dndy3_at_nodes[i][9] = 4. * y2; } break; } case 4: { for( i = 0; i < numberNodes; i++ ) { get_node_local_coord_tet( i, y1, y2, y3, y4 ); dndy1_at_nodes[i][0] = -1.; dndy1_at_nodes[i][1] = 1; dndy1_at_nodes[i][2] = 0; dndy1_at_nodes[i][3] = 0; dndy2_at_nodes[i][0] = -1.; dndy2_at_nodes[i][1] = 0; dndy2_at_nodes[i][2] = 1; dndy2_at_nodes[i][3] = 0; dndy3_at_nodes[i][0] = -1.; dndy3_at_nodes[i][1] = 0; dndy3_at_nodes[i][2] = 0; dndy3_at_nodes[i][3] = 1; } break; } } }
Definition at line 141 of file V_GaussIntegration.cpp.
References get_gauss_pts_and_weight(), and numberGaussPoints.
Referenced by v_quad_distortion().
{ int ife = 0, i, j; double y1, y2; get_gauss_pts_and_weight(); switch( numberNodes ) { case 4: for( i = 0; i < numberGaussPoints; i++ ) { for( j = 0; j < numberGaussPoints; j++ ) { y1 = gaussPointY[i]; y2 = gaussPointY[j]; shapeFunction[ife][0] = 0.25 * ( 1 - y1 ) * ( 1 - y2 ); shapeFunction[ife][1] = 0.25 * ( 1 + y1 ) * ( 1 - y2 ); shapeFunction[ife][2] = 0.25 * ( 1 + y1 ) * ( 1 + y2 ); shapeFunction[ife][3] = 0.25 * ( 1 - y1 ) * ( 1 + y2 ); dndy1GaussPts[ife][0] = -0.25 * ( 1 - y2 ); dndy1GaussPts[ife][1] = 0.25 * ( 1 - y2 ); dndy1GaussPts[ife][2] = 0.25 * ( 1 + y2 ); dndy1GaussPts[ife][3] = -0.25 * ( 1 + y2 ); dndy2GaussPts[ife][0] = -0.25 * ( 1 - y1 ); dndy2GaussPts[ife][1] = -0.25 * ( 1 + y1 ); dndy2GaussPts[ife][2] = 0.25 * ( 1 + y1 ); dndy2GaussPts[ife][3] = 0.25 * ( 1 - y1 ); totalGaussWeight[ife] = gaussWeight[i] * gaussWeight[j]; ife++; } } break; case 8: for( i = 0; i < numberGaussPoints; i++ ) { for( j = 0; j < numberGaussPoints; j++ ) { y1 = gaussPointY[i]; y2 = gaussPointY[j]; shapeFunction[ife][0] = 0.25 * ( 1 - y1 ) * ( 1 - y2 ) * ( -y1 - y2 - 1 ); shapeFunction[ife][1] = 0.25 * ( 1 + y1 ) * ( 1 - y2 ) * ( y1 - y2 - 1 ); shapeFunction[ife][2] = 0.25 * ( 1 + y1 ) * ( 1 + y2 ) * ( y1 + y2 - 1 ); shapeFunction[ife][3] = 0.25 * ( 1 - y1 ) * ( 1 + y2 ) * ( -y1 + y2 - 1 ); shapeFunction[ife][4] = 0.5 * ( 1 - y1 * y1 ) * ( 1 - y2 ); shapeFunction[ife][5] = 0.5 * ( 1 - y2 * y2 ) * ( 1 + y1 ); shapeFunction[ife][6] = 0.5 * ( 1 - y1 * y1 ) * ( 1 + y2 ); shapeFunction[ife][7] = 0.5 * ( 1 - y2 * y2 ) * ( 1 - y1 ); dndy1GaussPts[ife][0] = 0.25 * ( 1 - y2 ) * ( 2.0 * y1 + y2 ); dndy1GaussPts[ife][1] = 0.25 * ( 1 - y2 ) * ( 2.0 * y1 - y2 ); dndy1GaussPts[ife][2] = 0.25 * ( 1 + y2 ) * ( 2.0 * y1 + y2 ); dndy1GaussPts[ife][3] = 0.25 * ( 1 + y2 ) * ( 2.0 * y1 - y2 ); dndy1GaussPts[ife][4] = -y1 * ( 1 - y2 ); dndy1GaussPts[ife][5] = 0.5 * ( 1 - y2 * y2 ); dndy1GaussPts[ife][6] = -y1 * ( 1 + y2 ); dndy1GaussPts[ife][7] = -0.5 * ( 1 - y2 * y2 ); dndy2GaussPts[ife][0] = 0.25 * ( 1 - y1 ) * ( 2.0 * y2 + y1 ); dndy2GaussPts[ife][1] = 0.25 * ( 1 + y1 ) * ( 2.0 * y2 - y1 ); dndy2GaussPts[ife][2] = 0.25 * ( 1 + y1 ) * ( 2.0 * y2 + y1 ); dndy2GaussPts[ife][3] = 0.25 * ( 1 - y1 ) * ( 2.0 * y2 - y1 ); dndy2GaussPts[ife][4] = -0.5 * ( 1 - y1 * y1 ); dndy2GaussPts[ife][5] = -y2 * ( 1 + y1 ); dndy2GaussPts[ife][6] = 0.5 * ( 1 - y1 * y1 ); dndy2GaussPts[ife][7] = -y2 * ( 1 - y1 ); totalGaussWeight[ife] = gaussWeight[i] * gaussWeight[j]; ife++; } } break; } }
Definition at line 668 of file V_GaussIntegration.cpp.
References get_tri_rule_pts_and_weight(), and totalNumberGaussPts.
Referenced by v_tri_distortion().
{ int ife; double y1, y2, y3; get_tri_rule_pts_and_weight(); for( ife = 0; ife < totalNumberGaussPts; ife++ ) { y1 = y1Area[ife]; y2 = y2Area[ife]; y3 = 1.0 - y1 - y2; shapeFunction[ife][0] = y1 * ( 2. * y1 - 1. ); shapeFunction[ife][1] = y2 * ( 2. * y2 - 1. ); shapeFunction[ife][2] = y3 * ( 2. * y3 - 1. ); shapeFunction[ife][3] = 4. * y1 * y2; shapeFunction[ife][4] = 4. * y2 * y3; shapeFunction[ife][5] = 4. * y1 * y3; dndy1GaussPts[ife][0] = 4 * y1 - 1.; dndy1GaussPts[ife][1] = 0; dndy1GaussPts[ife][2] = 1 - 4. * y3; dndy1GaussPts[ife][3] = 4. * y2; dndy1GaussPts[ife][4] = -4. * y2; dndy1GaussPts[ife][5] = 4. * ( 1 - 2 * y1 - y2 ); dndy2GaussPts[ife][0] = 0.0; dndy2GaussPts[ife][1] = 4. * y2 - 1.; dndy2GaussPts[ife][2] = 1 - 4. * y3; dndy2GaussPts[ife][3] = 4. * y1; dndy2GaussPts[ife][4] = 4. * ( 1 - y1 - 2. * y2 ); dndy2GaussPts[ife][5] = -4. * y1; } }
Definition at line 220 of file V_GaussIntegration.cpp.
References get_gauss_pts_and_weight(), get_signs_for_node_local_coord_hex(), numberGaussPoints, and numberNodes.
Referenced by v_hex_distortion().
{ int ife = 0, i, j, k, node_id; double y1, y2, y3, sign_node_y1, sign_node_y2, sign_node_y3; double y1_term, y2_term, y3_term, y123_temp; get_gauss_pts_and_weight(); switch( numberNodes ) { case 8: for( i = 0; i < numberGaussPoints; i++ ) { for( j = 0; j < numberGaussPoints; j++ ) { for( k = 0; k < numberGaussPoints; k++ ) { y1 = gaussPointY[i]; y2 = gaussPointY[j]; y3 = gaussPointY[k]; for( node_id = 0; node_id < numberNodes; node_id++ ) { get_signs_for_node_local_coord_hex( node_id, sign_node_y1, sign_node_y2, sign_node_y3 ); y1_term = 1 + sign_node_y1 * y1; y2_term = 1 + sign_node_y2 * y2; y3_term = 1 + sign_node_y3 * y3; shapeFunction[ife][node_id] = 0.125 * y1_term * y2_term * y3_term; dndy1GaussPts[ife][node_id] = 0.125 * sign_node_y1 * y2_term * y3_term; dndy2GaussPts[ife][node_id] = 0.125 * sign_node_y2 * y1_term * y3_term; dndy3GaussPts[ife][node_id] = 0.125 * sign_node_y3 * y1_term * y2_term; } totalGaussWeight[ife] = gaussWeight[i] * gaussWeight[j] * gaussWeight[k]; ife++; } } } break; case 20: for( i = 0; i < numberGaussPoints; i++ ) { for( j = 0; j < numberGaussPoints; j++ ) { for( k = 0; k < numberGaussPoints; k++ ) { y1 = gaussPointY[i]; y2 = gaussPointY[j]; y3 = gaussPointY[k]; for( node_id = 0; node_id < numberNodes; node_id++ ) { get_signs_for_node_local_coord_hex( node_id, sign_node_y1, sign_node_y2, sign_node_y3 ); y1_term = 1 + sign_node_y1 * y1; y2_term = 1 + sign_node_y2 * y2; y3_term = 1 + sign_node_y3 * y3; y123_temp = sign_node_y1 * y1 + sign_node_y2 * y2 + sign_node_y3 * y3 - 2.; switch( node_id ) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: { shapeFunction[ife][node_id] = 0.125 * y1_term * y2_term * y3_term * y123_temp; dndy1GaussPts[ife][node_id] = 0.125 * sign_node_y1 * y123_temp * y2_term * y3_term + 0.125 * y1_term * y2_term * y3_term * sign_node_y1; dndy2GaussPts[ife][node_id] = 0.125 * sign_node_y2 * y1_term * y3_term * y123_temp + 0.125 * y1_term * y2_term * y3_term * sign_node_y2; dndy3GaussPts[ife][node_id] = 0.125 * sign_node_y3 * y1_term * y2_term * y123_temp + 0.125 * y1_term * y2_term * y3_term * sign_node_y3; break; } case 8: case 10: case 16: case 18: { shapeFunction[ife][node_id] = 0.25 * ( 1 - y1 * y1 ) * y2_term * y3_term; dndy1GaussPts[ife][node_id] = -0.5 * y1 * y2_term * y3_term; dndy2GaussPts[ife][node_id] = 0.25 * ( 1 - y1 * y1 ) * sign_node_y2 * y3_term; dndy3GaussPts[ife][node_id] = 0.25 * ( 1 - y1 * y1 ) * y2_term * sign_node_y3; break; } case 9: case 11: case 17: case 19: { shapeFunction[ife][node_id] = 0.25 * ( 1 - y2 * y2 ) * y1_term * y3_term; dndy1GaussPts[ife][node_id] = 0.25 * ( 1 - y2 * y2 ) * sign_node_y1 * y3_term; dndy2GaussPts[ife][node_id] = -0.5 * y2 * y1_term * y3_term; dndy3GaussPts[ife][node_id] = 0.25 * ( 1 - y2 * y2 ) * y1_term * sign_node_y3; break; } case 12: case 13: case 14: case 15: { shapeFunction[ife][node_id] = 0.25 * ( 1 - y3 * y3 ) * y1_term * y2_term; dndy1GaussPts[ife][node_id] = 0.25 * ( 1 - y3 * y3 ) * sign_node_y1 * y2_term; dndy2GaussPts[ife][node_id] = 0.25 * ( 1 - y3 * y3 ) * y1_term * sign_node_y2; dndy3GaussPts[ife][node_id] = -0.5 * y3 * y1_term * y2_term; break; } } } totalGaussWeight[ife] = gaussWeight[i] * gaussWeight[j] * gaussWeight[k]; ife++; } } } break; } }
Definition at line 809 of file V_GaussIntegration.cpp.
References get_tet_rule_pts_and_weight(), and totalNumberGaussPts.
Referenced by v_tet_distortion().
{ int ife; double y1, y2, y3, y4; get_tet_rule_pts_and_weight(); switch( numberNodes ) { case 10: // 10 nodes quadratic tet { for( ife = 0; ife < totalNumberGaussPts; ife++ ) { // y1,y2,y3,y4 are the volume coordinates y1 = y1Volume[ife]; y2 = y2Volume[ife]; y3 = y3Volume[ife]; y4 = y4Volume[ife]; // shape function is the same as in ABAQUS // it is different from that in all the FEA book // in which node is the first node // here at node 1 y4=1 shapeFunction[ife][0] = y4 * ( 2. * y4 - 1. ); shapeFunction[ife][1] = y1 * ( 2. * y1 - 1. ); shapeFunction[ife][2] = y2 * ( 2. * y2 - 1. ); shapeFunction[ife][3] = y3 * ( 2. * y3 - 1. ); shapeFunction[ife][4] = 4. * y1 * y4; shapeFunction[ife][5] = 4. * y1 * y2; shapeFunction[ife][6] = 4. * y2 * y4; shapeFunction[ife][7] = 4. * y3 * y4; shapeFunction[ife][8] = 4. * y1 * y3; shapeFunction[ife][9] = 4. * y2 * y3; dndy1GaussPts[ife][0] = 1 - 4 * y4; dndy1GaussPts[ife][1] = 4 * y1 - 1.; dndy1GaussPts[ife][2] = 0; dndy1GaussPts[ife][3] = 0; dndy1GaussPts[ife][4] = 4. * ( y4 - y1 ); dndy1GaussPts[ife][5] = 4. * y2; dndy1GaussPts[ife][6] = -4. * y2; dndy1GaussPts[ife][7] = -4. * y3; dndy1GaussPts[ife][8] = 4. * y3; dndy1GaussPts[ife][9] = 0; dndy2GaussPts[ife][0] = 1 - 4 * y4; dndy2GaussPts[ife][1] = 0; dndy2GaussPts[ife][2] = 4. * y2 - 1.; dndy2GaussPts[ife][3] = 0; dndy2GaussPts[ife][4] = -4. * y1; dndy2GaussPts[ife][5] = 4. * y1; dndy2GaussPts[ife][6] = 4. * ( y4 - y2 ); dndy2GaussPts[ife][7] = -4. * y3; dndy2GaussPts[ife][8] = 0.; dndy2GaussPts[ife][9] = 4. * y3; dndy3GaussPts[ife][0] = 1 - 4 * y4; dndy3GaussPts[ife][1] = 0; dndy3GaussPts[ife][2] = 0; dndy3GaussPts[ife][3] = 4. * y3 - 1.; dndy3GaussPts[ife][4] = -4. * y1; dndy3GaussPts[ife][5] = 0; dndy3GaussPts[ife][6] = -4. * y2; dndy3GaussPts[ife][7] = 4. * ( y4 - y3 ); dndy3GaussPts[ife][8] = 4. * y1; dndy3GaussPts[ife][9] = 4. * y2; } break; } case 4: // four node linear tet for debug purpose { for( ife = 0; ife < totalNumberGaussPts; ife++ ) { y1 = y1Volume[ife]; y2 = y2Volume[ife]; y3 = y3Volume[ife]; y4 = y4Volume[ife]; shapeFunction[ife][0] = y4; shapeFunction[ife][1] = y1; shapeFunction[ife][2] = y2; shapeFunction[ife][3] = y3; dndy1GaussPts[ife][0] = -1.; dndy1GaussPts[ife][1] = 1; dndy1GaussPts[ife][2] = 0; dndy1GaussPts[ife][3] = 0; dndy2GaussPts[ife][0] = -1.; dndy2GaussPts[ife][1] = 0; dndy2GaussPts[ife][2] = 1; dndy2GaussPts[ife][3] = 0; dndy3GaussPts[ife][0] = -1.; dndy3GaussPts[ife][1] = 0; dndy3GaussPts[ife][2] = 0; dndy3GaussPts[ife][3] = 1; } break; } } }
Definition at line 115 of file V_GaussIntegration.cpp.
Referenced by calculate_shape_function_2d_quad(), and calculate_shape_function_3d_hex().
{ switch( numberGaussPoints ) { case 1: gaussPointY[0] = 0.0; gaussWeight[0] = 2.0; break; case 2: gaussPointY[0] = -0.577350269189626; gaussPointY[1] = 0.577350269189626; gaussWeight[0] = 1.0; gaussWeight[1] = 1.0; break; case 3: gaussPointY[0] = -0.774596669241483; gaussPointY[1] = 0.0; gaussPointY[2] = 0.774596669241483; gaussWeight[0] = 0.555555555555555; gaussWeight[1] = 0.888888888888889; gaussWeight[2] = 0.555555555555555; break; } }
void GaussIntegration::get_node_local_coord_tet | ( | int | node_id, |
double & | y1, | ||
double & | y2, | ||
double & | y3, | ||
double & | y4 | ||
) |
Definition at line 990 of file V_GaussIntegration.cpp.
Referenced by calculate_derivative_at_nodes_3d_tet().
{ switch( node_id ) { case 0: y1 = 0.; y2 = 0.; y3 = 0.; y4 = 1.; break; case 1: y1 = 1.; y2 = 0.; y3 = 0.; y4 = 0.; break; case 2: y1 = 0.; y2 = 1.; y3 = 0.; y4 = 0.; break; case 3: y1 = 0.; y2 = 0.; y3 = 1.; y4 = 0.; break; case 4: y1 = 0.5; y2 = 0.; y3 = 0.; y4 = 0.5; break; case 5: y1 = 0.5; y2 = 0.5; y3 = 0.; y4 = 0.; break; case 6: y1 = 0.; y2 = 0.5; y3 = 0.; y4 = 0.5; break; case 7: y1 = 0.; y2 = 0.0; y3 = 0.5; y4 = 0.5; break; case 8: y1 = 0.5; y2 = 0.; y3 = 0.5; y4 = 0.0; break; case 9: y1 = 0.; y2 = 0.5; y3 = 0.5; y4 = 0.; break; } }
void GaussIntegration::get_shape_func | ( | double | shape_function[], |
double | dndy1_at_gauss_pts[], | ||
double | dndy2_at_gauss_ptsp[], | ||
double | gauss_weight[] | ||
) |
Definition at line 73 of file V_GaussIntegration.cpp.
References maxNumberNodes, numberNodes, and totalNumberGaussPts.
Referenced by v_hex_distortion(), v_quad_distortion(), v_tet_distortion(), and v_tri_distortion().
{ int i, j; for( i = 0; i < totalNumberGaussPts; i++ ) { for( j = 0; j < numberNodes; j++ ) { shape_function[i * maxNumberNodes + j] = shapeFunction[i][j]; dndy1_at_gauss_pts[i * maxNumberNodes + j] = dndy1GaussPts[i][j]; dndy2_at_gauss_pts[i * maxNumberNodes + j] = dndy2GaussPts[i][j]; } } for( i = 0; i < totalNumberGaussPts; i++ ) gauss_weight[i] = totalGaussWeight[i]; }
void GaussIntegration::get_shape_func | ( | double | shape_function[], |
double | dndy1_at_gauss_pts[], | ||
double | dndy2_at_gauss_pts[], | ||
double | dndy3_at_gauss_pts[], | ||
double | gauss_weight[] | ||
) |
Definition at line 93 of file V_GaussIntegration.cpp.
References maxNumberNodes, numberNodes, and totalNumberGaussPts.
{ int i, j; for( i = 0; i < totalNumberGaussPts; i++ ) { for( j = 0; j < numberNodes; j++ ) { shape_function[i * maxNumberNodes + j] = shapeFunction[i][j]; dndy1_at_gauss_pts[i * maxNumberNodes + j] = dndy1GaussPts[i][j]; dndy2_at_gauss_pts[i * maxNumberNodes + j] = dndy2GaussPts[i][j]; dndy3_at_gauss_pts[i * maxNumberNodes + j] = dndy3GaussPts[i][j]; } } for( i = 0; i < totalNumberGaussPts; i++ ) gauss_weight[i] = totalGaussWeight[i]; }
void GaussIntegration::get_signs_for_node_local_coord_hex | ( | int | node_id, |
double & | sign_y1, | ||
double & | sign_y2, | ||
double & | sign_y3 | ||
) |
Definition at line 520 of file V_GaussIntegration.cpp.
Referenced by calculate_derivative_at_nodes_3d(), and calculate_shape_function_3d_hex().
{ switch( node_id ) { case 0: sign_node_y1 = -1.; sign_node_y2 = -1.; sign_node_y3 = -1.; break; case 1: sign_node_y1 = 1.; sign_node_y2 = -1.; sign_node_y3 = -1.; break; case 2: sign_node_y1 = 1.; sign_node_y2 = 1.; sign_node_y3 = -1.; break; case 3: sign_node_y1 = -1.; sign_node_y2 = 1.; sign_node_y3 = -1.; break; case 4: sign_node_y1 = -1.; sign_node_y2 = -1.; sign_node_y3 = 1.; break; case 5: sign_node_y1 = 1.; sign_node_y2 = -1.; sign_node_y3 = 1.; break; case 6: sign_node_y1 = 1.; sign_node_y2 = 1.; sign_node_y3 = 1.; break; case 7: sign_node_y1 = -1.; sign_node_y2 = 1.; sign_node_y3 = 1.; break; case 8: sign_node_y1 = 0; sign_node_y2 = -1.; sign_node_y3 = -1.; break; case 9: sign_node_y1 = 1.; sign_node_y2 = 0; sign_node_y3 = -1.; break; case 10: sign_node_y1 = 0; sign_node_y2 = 1.; sign_node_y3 = -1.; break; case 11: sign_node_y1 = -1.; sign_node_y2 = 0.; sign_node_y3 = -1.; break; case 12: sign_node_y1 = -1.; sign_node_y2 = -1.; sign_node_y3 = 0.; break; case 13: sign_node_y1 = 1.; sign_node_y2 = -1.; sign_node_y3 = 0.; break; case 14: sign_node_y1 = 1.; sign_node_y2 = 1.; sign_node_y3 = 0.; break; case 15: sign_node_y1 = -1.; sign_node_y2 = 1.; sign_node_y3 = 0.; break; case 16: sign_node_y1 = 0; sign_node_y2 = -1.; sign_node_y3 = 1.; break; case 17: sign_node_y1 = 1.; sign_node_y2 = 0; sign_node_y3 = 1.; break; case 18: sign_node_y1 = 0; sign_node_y2 = 1.; sign_node_y3 = 1.; break; case 19: sign_node_y1 = -1.; sign_node_y2 = 0.; sign_node_y3 = 1.; break; } }
Definition at line 760 of file V_GaussIntegration.cpp.
Referenced by calculate_shape_function_3d_tet().
{ // get tetrahedron rule integration points and weight double a, b; switch( numberGaussPoints ) { case 1: // 1 integration point formula, degree of precision 1 y1Volume[0] = 0.25; y2Volume[0] = 0.25; y3Volume[0] = 0.25; y4Volume[0] = 0.25; totalGaussWeight[0] = 1.; break; case 4: // 4 integration points formula, degree of precision 2 a = 0.58541020; b = 0.13819660; y1Volume[0] = a; y2Volume[0] = b; y3Volume[0] = b; y4Volume[0] = b; y1Volume[1] = b; y2Volume[1] = a; y3Volume[1] = b; y4Volume[1] = b; y1Volume[2] = b; y2Volume[2] = b; y3Volume[2] = a; y4Volume[2] = b; y1Volume[3] = b; y2Volume[3] = b; y3Volume[3] = b; y4Volume[3] = a; int i; for( i = 0; i < 4; i++ ) { totalGaussWeight[i] = 0.25; } break; } }
Definition at line 630 of file V_GaussIntegration.cpp.
Referenced by calculate_shape_function_2d_tri().
{ // get triangular rule integration points and weight switch( numberGaussPoints ) { case 6: y1Area[0] = 0.09157621; y2Area[0] = 0.09157621; y1Area[1] = 0.09157621; y2Area[1] = 0.8168476; y1Area[2] = 0.8168476; y2Area[2] = 0.09157621; y1Area[3] = 0.4459485; y2Area[3] = 0.4459485; y1Area[4] = 0.4459485; y2Area[4] = 0.1081030; y1Area[5] = 0.1081030; y2Area[5] = 0.4459485; int i; for( i = 0; i < 3; i++ ) { totalGaussWeight[i] = 0.06348067; } for( i = 3; i < 6; i++ ) { totalGaussWeight[i] = 0.1289694; } break; } }
void GaussIntegration::initialize | ( | int | n = 2 , |
int | m = 4 , |
||
int | dim = 2 , |
||
int | tri = 0 |
||
) |
Definition at line 50 of file V_GaussIntegration.cpp.
References dim, and numberGaussPoints.
Referenced by moab::Core::Core(), v_hex_distortion(), v_quad_distortion(), v_tet_distortion(), and v_tri_distortion().
{ numberGaussPoints = n; numberNodes = m; numberDims = dim; if( tri == 1 ) // triangular element { if( numberDims == 2 ) totalNumberGaussPts = numberGaussPoints; else if( numberDims == 3 ) totalNumberGaussPts = numberGaussPoints; } else if( tri == 0 ) { if( numberDims == 2 ) totalNumberGaussPts = numberGaussPoints * numberGaussPoints; else if( numberDims == 3 ) totalNumberGaussPts = numberGaussPoints * numberGaussPoints * numberGaussPoints; } }