Input file for Plane Strain Analysis of Pipe Cross Section
/*
* =====================================================================
* Plane strain analysis of circular pipe cross section.
*
* Written By : Mark Austin Spring, 1998
* =====================================================================
*/
/* Define problem specific parameters */
NDimension = 2;
NDofPerNode = 2;
MaxNodesPerElement = 4;
StartMesh();
/* Generate grid of finite element nodes */
radius_min = 10.0 cm;
radius_max = 15.0 cm;
radius_incr = 0.5 cm;
angle_min = 0.0;
angle_max = PI/2;
angle_incr = PI/16;
node = 0;
angle = angle_min;
while( angle <= angle_max ) {
radius = radius_min;
while( radius <= radius_max ) {
node = node + 1;
x = radius*cos(angle);
y = radius*sin(angle);
if ( abs(x) <= 0.0000001 cm ) { x = 0.0 cm; }
if ( abs(y) <= 0.0000001 cm ) { y = 0.0 cm; }
AddNode(node, [ x, y]);
radius = radius + radius_incr;
}
angle = angle + angle_incr;
}
/* Attach elements to grid of nodes */
nodeno = 0; elmtno = 0;
for ( i = 0; i < 8; i = i + 1 ) {
nodeno = 11*i;
for ( j = 1; j <= 10; j = j + 1 ) {
nodeno = nodeno + 1;
elmtno = elmtno + 1;
AddElmt( elmtno, [ nodeno, nodeno + 1, nodeno + 12, nodeno + 11 ], "pipe" );
}
}
/* Define element, section and material properties */
ElementAttr("pipe") { type = "PLANE_STRAIN";
section = "pipesection";
material = "pipematerial"; }
SectionAttr("pipesection") { depth = 30 cm;
width = 30 cm; }
MaterialAttr("pipematerial") { poisson = 1/3;
E = 200 GPa; }
/* Setup boundary conditions */
for (ii = 1; ii <= 11; ii = ii + 1 ) {
FixNode( ii , [0,1] );
}
for (ii = 89; ii <= 99; ii = ii + 1 ) {
FixNode( ii , [1,0] );
}
/* Add point nodal loads to end of cantilever */
Fx = 0.0 kN; Fy = 3.0 kN;
NodeLoad( 88, [ Fx, -Fy ]);
NodeLoad( 99, [ Fx, -Fy ]);
/* Compile and print finite element mesh */
EndMesh();
PrintMesh();
/* Compute stiffness and external load matrices */
stiff = Stiff();
eload = ExternalLoad();
/* Solve static analysis problem */
displ = Solve(stiff, eload);
/* Print displacements in tidy format */
PrintDispl(displ);
/* Setup matrix for exptrapolation of stresses to nodal coordinates */
M = Zero([4,4]);
M[1][1] = (sqrt(3) + 1)^2;
M[1][2] = 2;
M[1][3] = (sqrt(3) - 1)^2;
M[1][4] = 2;
M[2][1] = 2;
M[2][2] = (sqrt(3) + 1)^2;
M[2][3] = 2;
M[2][4] = (sqrt(3) - 1)^2;
M[3][1] = (sqrt(3) - 1)^2;
M[3][2] = 2;
M[3][3] = (sqrt(3) + 1)^2;
M[3][4] = 2;
M[4][1] = 2;
M[4][2] = (sqrt(3) - 1)^2;
M[4][3] = 2;
M[4][4] = (sqrt(3) + 1)^2;
PrintMatrix(M);
T = Inverse((1/12)*M);
/* Systematically retrieve stresses from individual elements */
print "\n";
print "Element Stresses (sigma_xx at the nodal points)\n";
print "===============================================\n\n";
for( ii = 1; ii <= 80; ii = ii + 1 ) {
/* get stresses and extrapolate out to nodal coordinates */
actions = GetStress( [ii], displ );
extrap = T*[ actions[1][3];
actions[2][3];
actions[3][3];
actions[4][3] ];
/* map extrapolated stresses onto nodal coordinate system */
extrap = [ 0, 0, 1, 0;
0, 0, 0, 1;
1, 0, 0, 0;
0, 1, 0, 0 ] * extrap;
/* print extrapolated stresses in format for MATLAB plotting */
print ii;
print QDimenLess(extrap[1][1]);
print QDimenLess(extrap[2][1]);
print QDimenLess(extrap[3][1]);
print QDimenLess(extrap[4][1]);
print "\n";
}
quit;
Developed in February 1998 by Mark Austin
Last Modified February 21, 1998
Copyright © 1998, Mark Austin,
Department of Civil Engineering,
University of Maryland