Input File for Three Dimensional Highway Bridge


/*
 *  ======================================================================
 *  Two Span Continuous Composite Beam (100-100ft) 
 * 
 *  This analysis assumes that the neutral axis of concrete deck coincides
 *  with the top girder flange.
 * 
 *  Written By : Wane-Jang Lin                              June-July 1995 
 *  ======================================================================
 */

print "*** DEFINE PROBLEM SPECIFIC PARAMETERS \n\n";

NDimension         = 3;
NDofPerNode        = 6;
MaxNodesPerElement = 4;

StartMesh();

print "*** GENERATE GRID OF NODES FOR FE MODEL \n\n";

girder   = 2;

span     = 100 ft;
spacing  = 8 ft + 4 in;
slab     = 7 in;
height   = 36.17 in - 1.1 in;
flange   = 12.03 in;

div_L    = 10;
div_S    = 4;
delta_L  = span/div_L;
delta_S  = spacing/div_S;
delta_f  = flange/2;
delta_h  = height/2;

section_no = 2*div_L + 1;
nodes_per_girder = 6;
nodes_per_section = nodes_per_girder*girder + (2*div_S+1) - girder;

node = 0;
x = 0 in;
for( i=1 ; i <= section_no ; i=i+1 ) {
   x  =  delta_L*(i-1);
   for( j=1 ; j <= girder ; j=j+1 ) {
       y    = -spacing/2 + spacing*(j-1);
       AddNode( node+1, [ x, (y-delta_f),  delta_h ] );
       AddNode( node+2, [ x,          y ,  delta_h ] );
       AddNode( node+3, [ x, (y+delta_f),  delta_h ] );
       AddNode( node+4, [ x, (y-delta_f), -delta_h ] );
       AddNode( node+5, [ x,          y , -delta_h ] );
       AddNode( node+6, [ x, (y+delta_f), -delta_h ] );
       node = node + nodes_per_girder;
   }
   yy = spacing/2;
   for( j=1 ; j<=(2*div_S+1) ; j=j+1 ) {
       y = -spacing + delta_S*(j-1);
       if( (y!=yy) && (y!=-yy) ) {
           node = node + 1;
           AddNode( node, [ x, y, delta_h ] );
       }
   }
}

print "*** ATTACH ELEMENTS TO GRID OF NODES \n\n";

elmtno = 0;
a = 0;
b = 0 + nodes_per_section;
for( i=1 ; i < section_no ; i=i+1 ) {
   for( j=1 ; j<=girder ; j=j+1 ) {
       AddElmt( elmtno+1, [ a+1, b+1, b+2, a+2 ],"girder_flange_attr" );
       AddElmt( elmtno+2, [ a+2, b+2, b+3, a+3 ],"girder_flange_attr" );
       AddElmt( elmtno+3, [ a+2, b+2, b+5, a+5 ],"girder_web_attr" );
       AddElmt( elmtno+4, [ a+4, b+4, b+5, a+5 ],"girder_flange_attr" );
       AddElmt( elmtno+5, [ a+5, b+5, b+6, a+6 ],"girder_flange_attr" );
       elmtno = elmtno + nodes_per_girder - 1;
       a = a + nodes_per_girder;
       b = b + nodes_per_girder;
   }
   a = a + 1;
   b = b + 1;
   for( j=1 ; j<=girder ; j=j+1 ) {
       AddElmt( elmtno+1, [   a,   b, b+1, a+1 ], "deck_attr" );
       c = b - (girder+1-j)*nodes_per_girder - 3*(j-1);
       d = a - (girder+1-j)*nodes_per_girder - 3*(j-1);
       AddElmt( elmtno+2, [ a+1, b+1,   c,   d ], "deck_attr" );
       a = d;
       b = c;
       AddElmt( elmtno+3, [   a,   b, b+1, a+1 ], "deck_attr" );
       AddElmt( elmtno+4, [ a+1, b+1, b+2, a+2 ], "deck_attr" );
       a = a + 2;
       b = b + 2;
       c = c + (girder+1-j)*nodes_per_girder + (3*j-2) + 1;
       d = d + (girder+1-j)*nodes_per_girder + (3*j-2) + 1;
       AddElmt( elmtno+5, [   a,   b,   c,   d ], "deck_attr" );
       AddElmt( elmtno+6, [   d,   c, c+1, d+1 ], "deck_attr" );
       elmtno = elmtno + 6;
       a = d + 1;
       b = c + 1;
   }
}

print "*** DEFINE ELEMENT, SECTION AND MATERIAL PROPERTIES \n\n";

ElementAttr("girder_flange_attr") { type     = "SHELL_4NQ";
                                    section  = "girder_flange";
                                    material = "STEEL3";
                                  }
ElementAttr("girder_web_attr")    { type     = "SHELL_4NQ";
                                    section  = "girder_web";
                                    material = "STEEL3";
                                  }
ElementAttr("deck_attr")   { type     = "SHELL_4NQ";
                             section  = "deck";
                             material = "concrete";
                           }

SectionAttr("girder_flange")      { thickness = 1.100 in; }
SectionAttr("girder_web")         { thickness = 0.680 in; }
SectionAttr("deck")        { thickness = 7 in; }
MaterialAttr("concrete")   { poisson   = 0.3;
                             yield     = 0.85*(4000 psi);
                             E         = (29000 ksi)/8;
                           }

print "*** SET UP BOUNDARY CONDITIONS \n\n";

/* [a] hinged support  */
bc_hs = [ 1, 1, 1, 1, 0, 0 ];

/* [b] roller support  */
bc_rs = [ 0, 1, 1, 1, 0, 0 ];

for ( i=1 ; i<=girder ; i=i+1 ) {
     node = nodes_per_girder*(i-1) + 5;
     FixNode(node, bc_hs);
     node = node + div_L*nodes_per_section;
     FixNode(node, bc_rs);
     node = node + div_L*nodes_per_section;
     FixNode(node, bc_rs);
}

print "*** SPECIFY EXTERNALLY APPLIED POINT LOADS \n\n";

slab_load     = (150 lbf/ft^3)*slab;
girder_weight = 170 lbf/ft;

Fx = 0 lbf;    Fy = 0 lbf;
Mx = 0 lbf*in; My = 0 lbf*in; Mz = 0 lbf*in;

/* [1] load for corner nodes of deck  */

Fz = -slab_load*delta_L/2*delta_S/2;
nodal_load = [Fx, Fy, Fz, Mx, My, Mz];
     node = nodes_per_girder*girder + 1;
     NodeLoad(node, nodal_load);
     node = node + nodes_per_section*(section_no-1);
     NodeLoad(node, nodal_load);
     node = node + 2*div_S - girder;
     NodeLoad(node, nodal_load);
     node = node - nodes_per_section*(section_no-1);
     NodeLoad(node, nodal_load);

/* [2.1] load for edge nodes along x-direction  */

Fz = -slab_load*delta_L*delta_S/2;
nodal_load = [Fx, Fy, Fz, Mx, My, Mz];
node = nodes_per_section + nodes_per_girder*girder + 1;
for( i=2 ; i < section_no ; i=i+1 ) {
     NodeLoad(node, nodal_load);
     NodeLoad((node+2*div_S-girder), nodal_load);
     node = node + nodes_per_section;
}

/* [2.2] load for edge nodes along y-direction  */

/* node 16 */
Fz = -slab_load*delta_L/2*delta_S;
nodal_load = [Fx, Fy, Fz, Mx, My, Mz];
     node = nodes_per_girder*girder + div_S;
     NodeLoad(node, nodal_load);
     node = node + nodes_per_section*(section_no-1);
     NodeLoad(node, nodal_load);

/* node 14, 15, 17, 18 */

Fz = -slab_load*delta_L/2*(delta_S-delta_f/2);
nodal_load = [Fx, Fy, Fz, Mx, My, Mz];
node = nodes_per_girder*girder + 1;
for( i=1 ; i<=2 ; i=i+1 ) {
     NodeLoad(node+1, nodal_load);
     NodeLoad(node+2, nodal_load);
     NodeLoad(node+4, nodal_load);
     NodeLoad(node+5, nodal_load);
     node = node + nodes_per_section*(section_no-1);
}

/* node 1, 3, 7, 9 */

Fz = -slab_load*delta_L/2*delta_S/2;
nodal_load = [Fx, Fy, Fz, Mx, My, Mz];
node = 0;
for( i=1 ; i<=2 ; i=i+1 ) {
     NodeLoad(node+1, nodal_load);
     NodeLoad(node+3, nodal_load);
     NodeLoad(node+7, nodal_load);
     NodeLoad(node+9, nodal_load);
     node = node + nodes_per_section*(section_no-1);
}

/* node 2, 8 */

Fz = -slab_load*delta_L/2*delta_f;
nodal_load = [Fx, Fy, Fz, Mx, My, Mz];
node = 0;
for( i=1 ; i<=2 ; i=i+1 ) {
     NodeLoad(node+2, nodal_load);
     NodeLoad(node+8, nodal_load);
     node = node + nodes_per_section*(section_no-1);
}

/* [3] load for middle nodes  */

/* node 35... */

Fz = -slab_load*delta_L*delta_S;
nodal_load = [Fx, Fy, Fz, Mx, My, Mz];
node = nodes_per_girder*girder + div_S;
for( i=2 ; i < section_no ; i=i+1 ) {
     node = node + nodes_per_section;
     NodeLoad(node, nodal_load);
}

/* node 33, 34, 36, 37... */

Fz = -slab_load*delta_L*(delta_S-delta_f/2);
nodal_load = [Fx, Fy, Fz, Mx, My, Mz];
node = nodes_per_girder*girder + 1;
for( i=2 ; i < section_no ; i=i+1 ) {
     node = node + nodes_per_section;
     NodeLoad(node+1, nodal_load);
     NodeLoad(node+2, nodal_load);
     NodeLoad(node+4, nodal_load);
     NodeLoad(node+5, nodal_load);
}

/* node 20, 22, 26, 28... */

Fz = -slab_load*delta_L*delta_S/2;
nodal_load = [Fx, Fy, Fz, Mx, My, Mz];
node = 0;
for( i=2 ; i < section_no ; i=i+1 ) {
     node = node + nodes_per_section;
     NodeLoad(node+1, nodal_load);
     NodeLoad(node+3, nodal_load);
     NodeLoad(node+7, nodal_load);
     NodeLoad(node+9, nodal_load);
}

/* node 21, 27... */

Fz = -slab_load*delta_L*delta_f;
nodal_load = [Fx, Fy, Fz, Mx, My, Mz];
node = 0;
for( i=2 ; i < section_no ; i=i+1 ) {
     node = node + nodes_per_section;
     NodeLoad(node+2, nodal_load);
     NodeLoad(node+8, nodal_load);
}

/* [4] load for girder weight */

/* end node 2, 8 */

Fz = -girder_weight*delta_L/2;
nodal_load = [Fx, Fy, Fz, Mx, My, Mz];
node = 0;
for( i=1 ; i <= 2 ; i=i+1 ) {
     NodeLoad(node+2, nodal_load);
     NodeLoad(node+8, nodal_load);
     node = node + nodes_per_section*(section_no-1);
}

/* middle node 21, 27... */

Fz = -girder_weight*delta_L;
nodal_load = [Fx, Fy, Fz, Mx, My, Mz];
node = 0;
for( i=2 ; i < section_no ; i=i+1 ) {
     node = node + nodes_per_section;
     NodeLoad(node+2, nodal_load);
     NodeLoad(node+8, nodal_load);
}

/* 
 *  ===================================== 
 *  Compile and Print Finite Element Mesh
 *  ===================================== 
 */ 

EndMesh();
PrintMesh();

/* 
 *  =================================== 
 *  Compute Mass and Stiffness Matrices
 *  =================================== 
 */ 

print "\n*** COMPUTE AND PRINT STIFFNESS AND EXTERNAL LOAD MATRICES \n\n";

SetUnitsType("US");

eload = ExternalLoad();
stiff = Stiff();

/* 
 *  ======================= 
 *  Static Analysis Problem 
 *  ======================= 
 */ 

print "\n*** STATIC ANALYSIS PROBLEM \n\n";

displ  = Solve( stiff, eload);

PrintDispl(displ);
PrintStress(displ);
quit;


Developed in September 1996 by Wane-Jang Lin and Mark Austin
Last Modified September 28, 1996
Copyright © 1996, Wane-Jang Lin and Mark Austin, Department of Civil Engineering, University of Maryland