/* * ================================================================== * Test input file for bridge design rule checking wsing 2D-beam * element and static analysis * * Written by: Wane-Jang Lin June 1995 * ================================================================== */ print "*** DEFINE PROBLEM SPECIFIC PARAMETERS \n\n"; NDimension = 2; NDofPerNode = 3; MaxNodesPerElement = 2; StartMesh(); div_no = 10; print "*** GENERATE GRID OF NODES FOR FE MODEL \n\n"; length = 56.70 ft; cov_dis = 10.35 ft; dL = length/div_no; x = 0 ft; y = 0 ft; for( i=1; x<=length ; i=i+1 ) { AddNode(i, [x, y]); x = x+dL; } print "*** ATTACH ELEMENTS TO GRID OF NODES \n\n"; elmt = 1; x = 0 ft; for( i=1; i<=div_no ; i=i+1 ) then { if( x(length-cov_dis) ) { AddElmt( elmt, [i, i+1], "girder1"); } else { AddElmt( elmt, [i, i+1], "girder2"); } elmt = elmt+1; x = x+dL; } print "*** DEFINE ELEMENT, SECTION AND MATERIAL PROPERTIES \n\n"; I1 = 17268.4 in^4; y1 = 29.40 in; area1 = 38.3 in^2; I2 = 25700.1 in^4; y2 = 27.31 in; area1 = 48.8 in^2; ElementAttr("girder1") { type = "FRAME_2D"; section = "no_cover"; material = "STEEL3"; } ElementAttr("girder2") { type = "FRAME_2D"; section = "cover"; material = "STEEL3"; } SectionAttr("no_cover") { Izz = I1; area = area1; depth = 33.09 in; width = 11.51 in; } SectionAttr("cover") { Izz = I2; area = area2; depth = 33.09 in; width = 11.51 in; } /* * ====================================== * Setup Boundary Conditions [dx, dy, rz] * ====================================== */ FixNode(1, [1, 1, 0]); FixNode(div_no+1, [0, 1, 0]); /* * ===================================== * Compile and Print Finite Element Mesh * ===================================== */ EndMesh(); PrintMesh(); SetUnitsType("US"); stiff = Stiff(); lu = Decompose(stiff); /* * ===================================== * Add Dead Nodal Loads [Fx, Fy, Mz] * ===================================== */ weight = 0.199 kips/ft + 0.868 kips/ft; load = weight*dL; for( i=2; i<=div_no; i=i+1 ) { NodeLoad( i, [0 kips, -load, 0 kips*ft]); } NodeLoad( 1, [0 kips, -load/2, 0 kips*ft]); NodeLoad( div_no+1, [0 kips, -load/2, 0 kips*ft]); eload = ExternalLoad(); displ = Substitution(lu, eload); max_displ_dead = GetDispl([div_no/2+1],displ); max_mom_dead = GetStress([div_no/2],displ); max_sh_dead = GetStress([1],displ); cover_mom_dead = GetStress([2],displ); PrintMatrix(max_displ_dead,max_mom_dead,max_sh_dead,cover_mom_dead); /* Get Moment Diagram */ moment_dead = Zero([ div_no+1 , 1 ]); for( i=1 ; i<=div_no ; i=i+1 ) { temp = GetStress([i],displ); if( i == 1 ) { moment_dead[1][1] = temp[1][3]; } moment_dead[i+1][1] = temp[2][3]; } PrintMatrix(moment_dead); /* Zero-out dead loadings */ for( i=2; i<=div_no; i=i+1 ) { NodeLoad( i, [0 kips, load, 0 kips*ft]); } NodeLoad( 1, [0 kips, load/2, 0 kips*ft]); NodeLoad( div_no+1, [0 kips, load/2, 0 kips*ft]); /* * ===================================== * Add Live Truck Load [Fx, Fy, Mz] * ===================================== */ step = div_no+1; influ_mid_mom = Zero([ step , 1 ]); influ_end_sh = Zero([ step , 1 ]); envelop_mom_live = Zero([ step , 1 ]); HS20 = 72 kips; mom_elmt = div_no/2; sh_elmt = 1; for( i=1 ; i<=step ; i=i+1 ) { NodeLoad( i, [0 kips, -HS20, 0 kips*ft] ); eload = ExternalLoad(); displ = Substitution( lu, eload ); mid_mom = GetStress( [mom_elmt], displ ); end_sh = GetStress( [sh_elmt], displ ); if( i == 1 ) then { mom_rang = GetStress( [i], displ ); } else { mom_rang = GetStress( [i-1], displ ); } /* Get moment influence line at the middle of span */ influ_mid_mom[i][1] = mid_mom[2][3]; /* Get Shear Influence line at the end support */ influ_end_sh[i][1] = end_sh[1][2]; /* Create envelope of moment influence line at the middle of span */ if( i == 1 ) then { envelop_mom_live[1][1] = mom_rang[1][3]; } else { envelop_mom_live[i][1] = mom_rang[2][3]; } if( i == mom_elmt+1 ) { max_displ_live = GetDispl([mom_elmt+1],displ); max_mom_live = GetStress([mom_elmt],displ); } if( i == sh_elmt ) { max_sh_live = GetStress([sh_elmt],displ); max_sh_live[1][2] = max_sh_live[1][2] + HS20; influ_end_sh[1][1] = HS20; } if( i == 3 ) { cover_mom_live = GetStress([2],displ); } NodeLoad( i, [0 kips, HS20, 0 kips*ft] ); } PrintMatrix(max_displ_live,max_mom_live,max_sh_live,cover_mom_live); PrintMatrix(influ_mid_mom, influ_end_sh, envelop_mom_live); /* * ============================ * Results for DL + (LL+Impact) * ============================ */ impact = 1 + 50/(56.7+125); print "\nimpact factor = ",impact,"\n"; max_displ = max_displ_dead + impact*max_displ_live; max_mom = max_mom_dead + impact*max_mom_live; max_sh = max_sh_dead + impact*max_sh_live; cover_mom = cover_mom_dead + impact*cover_mom_live; PrintMatrix(max_displ,max_mom,max_sh,cover_mom); /* * ========================================================= * WSD Code Checking for Deflections and Stress Requirements * ========================================================= */ print "\n\nSTART ASD CODE CHECKING::\n"; /* Deflection Checking */ if( -impact*max_displ_live[1][2] > (1/800)*length ) then { print "\n\tWarning: (LL+I) deflection exceeds 1/800 span\n"; } else { print "\n\tOK : (LL+I) deflection less than 1/800 span\n"; } /* Moment Stress Checking */ my_material = GetMaterial([1]); my_section = GetSection([1]); /* max stress without cover plate */ stress1 = cover_mom[2][3]*y1/I1; /* max stress with cover plate (in the middle of span) */ stress2 = max_mom[2][3]*y2/I2; if( stress1 > 0.55*my_material[3][1] ) then{ print "\n\tWarning : moment stress without cover plate larger than 0.55*Fy\n"; } else { if( stress2 > 0.55*my_material[3][1] ) then{ print "\n\tWarning : moment stress with cover plate larger than 0.55*Fy\n"; } else { print "\n\tOK : moment stress less than 0.55*Fy\n"; } } /* Shear Stress Checking */ shear = max_sh[1][2]/my_section[11][1]; if( shear > 0.33*my_material[3][1] ) then{ print "\n\tWarning : shear stress larger than 0.33*Fy\n"; } else { print "\n\tOK : shear stress less than 0.33*Fy\n"; } quit;
In this example, we check the analysis result with AASHTO WSD specification.
item [1] : The impact factor for live load is based on the formula AASHTO Eq. (3-1) I = 50/L+125 in which I = impact fraction (maximum 30 percent) and L = length in feet of the portion of the span.
item [2] : The deflection checking is based on AASHTO Art.10.6.2, the deflection due to service live load plus impact shall not exceed 1/800 of the span.
item [3] : The allowable stress is 0.55 X Fy for tension and compression member, 0.33 X Fy for shear in web.