Program: truss v0.05 beta
Date: 5-Apr-02
Platform: TI-89 graphing calculator, AMS 2.05
Language: TI-Basic
Author contact: beezaur@hotmail.com
Description: Solves 2-dimensional determinant/indeterminant trusses given material properties, restraints, joint loads, and specified displacements.
Copyright © 2002 R. Scott Pollock
This document contains the following sections:
I would like to thank the people who have helped me test this program, especially Larry Fasnacht. Their collective efforts caused me greatly improve reliability and the user interface. Work is not done on the program, but things are much better than when testing started. Thank you all for your help.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
The full text of the license is available at www.gnu.org and was included with this manual as gpl.txt .
Changed programs based on any version of truss shall not indicate that R. Scott Pollock is the sole author. In other words, give credit where credit is due, but do not give the impression that I am responsible for your work.
This program may contain flaws that cause it to give incorrect or misleading results. Under no circumstances should it be relied upon exclusively for engineering analysis or design. Checks should be made by proven methods. This program is by no means a substitute for formal training in the area of structural analysis. Formal engineering training is a prerequisite for interpretation of the program's results. Don't ever let this or any other program do your thinking for you!
This program is part of a broader project that aims to give the engineer a portable set of tools for doing tedious tasks while away from the desktop computer. Many free and commercial structural analysis programs exist for the computer, but not so many for handheld devices. truss is intended to help fill this gap and provide quick answers to common simple structural problems such as student work and the omnipresent "Uh, are you sure that will work?"
truss is a program that solves 2-D trusses under static loading using matrix methods. It can handle highly indeterminate trusses with up to about two dozen joints. Nodal displacements can also be specified in order to simulate support settlement, known deflection, etc. At present, no inclined supports are permitted, and non-nodal loads must be converted to equivalent nodal loads by hand.
Some basic information:
The program checks inputs to some extent, but making it "bad value-proof" would require too much code. It is left to the user to assure the validity of inputs. For example, it is possible to specify impossible truss geometries that would fall down if actually built. Please use the plot feature and your engineering training to check for these errors!
Joints with specified displacements or supports can be confusing. Please read the examples and experiment until you fully understand how the program interprets combinations of loads, supports, and displacements. I can't tell you how many bugs I chased that were actually my own careless inputs. Double check your data!
Remember: garbage in, garbage out!
Since this is a beta (test) release, bugs may exist. If you find and can verify one, please notify me so I can fix it. I don't want a buggy program any more than you do, probably less. Send a complete description of the inputs, your calculator and program version, mode settings, and the outputs to me via e-mail as listed above.
Revisions up to version 0.05 beta, 5-Apr-02:
This section assumes at least some experience with structural analysis software, or that you are impatient like me and want to get up and running quickly. Only the basics are covered here.
First, lay out your truss on paper and number everything, each type with its own numbering system. Make note of the properties of each section type you will be using and (x, y) coordinates of all the joints. Be sure to use consistent units, e.g. length and load units must match those used in E. Mixed units will yield incorrect results.
Details of the truss problem may be input in fits and spurts, i.e. a few members may be input which reference nonexistent nodes, then a few nodes and maybe a section or two, followed by more members. However, any discrepancies must be resolved before calculations are done or the analysis will fail.
Start the program and push [F2] [ENTER] [ENTER] to get to the node input screen. Simply type the (x, y) coordinates separated by a comma (no brackets or parentheses are needed) for each node and press [ENTER] to move to the next new node. Type [0] [ENTER] when done to "cancel" out of what you are doing, which works most places in the program. For inputs, [0] [ENTER] brings you back to the popup with the next item highlighted. Press [ENTER] to begin defining that item, or [7] (done) to get back to the main screen. Invalid inputs simply loop you back until you either enter a valid input or cancel out.
Sections: Relevant properties are cross-sectional area and Young's modulus (modulus of elasticity E). You may substitute dummy A and E values for a determinant truss, but invalid deflections will be calculated in that case. Avoid very large or small dummy values.
Members are be defined according to beginning (i) node, ending (j) node, and section type. It makes no difference which direction a member is defined.
Supports: The prompt asks of the support is fixed (restrained) in the x and y directions. Support fixity codes are 1 for fixed and 0 for free. For example, a support shown as 1,0,5 means that node 5 can move freely in the y direction, but will have no x-movement.
Joint (nodal) loads: Global coords are used here: negative y-loads act down, positive x-loads act to the right.
Specified displacement: Examples are support settlements or other measured deflections. Support restraints will override specified displacements. Say you have an totally restrained support at node 7 that settles 0.375 inches, specify the support as 1,0,7 and a displacement of 0,-0.375,7. If you have a node with specified displacements in both directions and want to examine the external forces there, define a support at the node as 0,0,(node #). In other words, define a "non"-support so that the external forces will be displayed. Also note that zero components of displacements are ignored - the zero in this case is truly a placeholder. If you actually want to restrain any node to zero movement in a direction, you have to define a support with a "1" value for that direction. See examples .
You may save your data to a global variable (a list) for later use by pressing [F1] [2] and typing a valid variable name. Existing files are not overwritten without confirmation.
If you forget any of the formats or what a plot symbol means, check the help feature with [F5] [2]. This is designed to jog your memory if you have not used the program for a while.
Say you are in a hurry and need to solve a simple 5-member triangular truss, 20 feet wide and 10 feet tall with a vertical member in the center. The members are structural steel with a cross-sectional area of 2 in2. A load is applied at the vertex which can be broken into two orthogonal loads of 30 kips down and 40 kips to the right. There are three supports; the the lower vertices of the triangle are completely fixed and the middle support is a roller. You make a quick sketch as shown below:
You can start solving the truss by entering the following nodes, using inches:
Follow this with the single section type from which all the members are made:
and then the members:
followed by the supports:
and the joint load (in lbs, since E was in psi):
There are no specified displacements. This is a good time to save the file if you want to avoid re-entering all that data for another load case or a different section. It is also a very good idea to check the geometry by plotting the truss, and double checking your inputs with the [F3] [2] choices.
Press [F4] [ENTER] to perform the calculations. This example takes a little more than 10 seconds. Results can be viewed for node displacements, member forces, and support reaction by pressing [F3] [4], [5], or [6]. Member forces are represented by C (compression) or T (tension) rather than trying to overcome various sign conventions. Stresses are given in parentheses ().
Last but not least is the plot of the deformed truss, [F3] [7].
A more elaborate example is shown here, which assumes very little experience with either structural statics problems or with the TI-89 calculator. Consider the following truss:
Its 13 members are made from two structural steel member types; exterior members are 4 in2 in cross-section while interior members are 3 in2. The middle support is assumed to have a settlement of 1.5 in. Three loads are applied, two 30 kip (a kip is 1000 lbs - a KIloPound) loads in the middle of each span at the bottom, and a 40 kip load at the upper right joint. The problem requires you to compare the internal member forces and external support reactions for the truss before settlement to those developed after settlement.
The first task is to define the various components of the problem as they are shown in the drawing. First the nodes are input into the program. Start the program by typing "truss()" on the command line. Do [F2] [3] to clear any other inputs if needed and [F2] [1] [1] to get to the node input screen. Since the section properties will be given in inches, and deflections will most likely be wanted in inches, inches will be used to define all locations and dimensions within the program. The origin will be arbitrarily placed at the lower left corner of the truss, but it could have been placed anywhere. Enter the following data for the 8 nodes:
Don't worry if you make a mistake. Remember the item number - it can be fixed later.
Now that all nodes are defined, press [0] [ENTER] to exit from the node inputs. This brings you back to the popup list that you went to nodes from, but now shows "2: section" as highlighted. Simply press [ENTER] to begin inputting the section types.
Always be sure that units match. Everything is in pounds and inches here, but kips and feet or Newtons and meters could have been used equally well. Young's modulus (modulus of elasticity E) is usually best left alone and other measurements converted. Areas were given, and it is assumed that you have memorized E for steel: 29x106 psi (it takes 29 million pounds to stretch a 1 in2 steel bar that is 1 inch long by another inch, or it would if steel could stretch that much). E and A are required for indeterminant structures because deformations affect their distribution of forces, but are not required to find forces in determinant structures. Substitute reasonable A and E values for a determinant truss, keeping in mind that A and E are still required for deflections. Avoid extremely large or small numbers since they cause problems in numerical methods. This structure is indeterminant, so the correct A and E are required. Enter the following section data for sections 1 and 2:
Now section one is 4 in2, section 2 is 3 in2 (both steel), and all nodes are defined. Members can be input by describing where they start (i node), where they stop (j node), and what they are made of (section). A member can be defined either direction with no effect on results. Enter the following after pressing [0] [ENTER] [ENTER]:
The supports will now be defined. A convention in structural analysis software is that restrained movements are represented by a "1" and unrestrained movements by "0". There are three supports for this truss. The first, support 1, happens to be at node 1, but the numbering schemes are not related. It has both directions restrained (usually drawn as a triangle), so "1" is assigned to both those movements. Support 2 is at node 3 and only restrains vertical, or y, movement (drawn as a roller). Support 2 would hold a "0" for x and "1" for y, except that the y restraint will be handled with a specified displacement instead. Support 2 then becomes unrestrained in both directions, as a free node would be, but is held motionless by the specified displacement. Specifying an unrestrained support at node 3 is actually a sort of bookkeeping trick that allows external forces to be tracked and later displayed. Practice with this and perhaps substitute the data in the quick example until the procedure becomes familiar. Support 3 is similar to support 1. Press [0] [ENTER] [ENTER] and input the following:
Three loads must be applied: downward 30 kip loads at nodes 2 and 4, and a downward 40 kip load at node 8. Note that downward loads point in the negative y direction and that kips are converted to pounds for the program. The loads can be defined by pressing [0] [ENTER] [ENTER] and entering the following:
Define the settlement by pressing [0] [ENTER] [ENTER] and creating a displacement. Settlements are assumed down, but displacements can be in any direction, hence the distinction here. A displacement works like a restrained support, except that the node is held to something other than its original location and does not cause the attendant reactions to be displayed. As mentioned above, specify a dummy support if you want to know the external forces (reactions) at a node with a specified displacement. Enter the following displacement to represent the settlement at node 3:
To illustrate the relationship between of loads (L), supports (S), and displacements (D), the following examples, all valid, are given at imaginary node 33 for some arbitrary structure:
L = -20,30,33; S = 0,1,33; D = (none) ... MISLEADING ... Upward load (30) applied directly to support.
L = -20,-56,33; S = 0,0,33; D = 0,0.125,33 ... MISLEADING ... Downward load (-56) applied directly to support, zero x-displacement says nothing about restraint (node is still free to move in x-direction).
L = (none); S = 1,1,33; D = 0.5,0.5,33 ... MISLEADING ... Displacement disregarded due to support.
L = 40,0,33; S = 0,0,33; D = 0,0.5 ... PROPER ... Node is unrestrained-x, restrained-y due to non-zero displacement, but will still display external reactions at 33 due to dummy support.
L = (none); S = 1,0,33; D = 0,-0.5,33 ... PROPER ... Node is completely restrained due to combination of support (x) and displacement (y). Any applied load would be applied directly to the support and has no bearing on the truss forces or deflections.
Step 3: Checking, editing, and files
The View tab [F3] allows examination of both inputs and results. Press [1] for how many of each input you have, or [2] to get to a menu of individual inputs. Then press any of [1] to [6] to view the actual inputs of each type.
[F3] [3] plots the truss. Members are simply lines drawn from node to node, but nodes may be drawn in several ways. Unrestrained nodes are circles. Nodes with specified displacements are shown as a circle off center in the direction of the displacement. Fully restrained supports are shown as # marks, and nodes restrained in one direction are shown as || or = marks. Partially restrained nodes can be thought of as tracks where the node is free to move between the lines. For example, || would represent a support where the node can move freely in the vertical direction (y), but cannot move horizontally (x). This would be specified as 1,0,(node number).
Suppose that while checking you discover an error in the inputs. Maybe member 9 was input as 7,3,2 when it should have been 6,3,2. This can be fixed by pressing [F2] [4] and choosing [3] to edit a member. You are then asked which of 13 members to edit. Type 9 and press [ENTER]. The existing values are displayed above the prompt for the new member. If for some reason you don't want to edit this member after all, just press [0] [ENTER] to cancel.
After all this work inputting and checking, it is wise to save the data to a variable that will be accessible at some later time. Do so by pressing [F1] [2] and typing some name, say "t1c1" for Truss 1, Case 1. If that variable already exists, you will be asked whether to overwrite it.
Since it would be a great inconvenience to re-enter all the data again for the case with no settlement, simply edit the present data and save it under a new name. Press [F2] [2] [6] and type 1 [ENTER] to remove displacement 1. You can verify that no displacements are present by pressing [F3] [1]. Notice that the name of the loaded file appears at the top of the screen, but that a reminder is given at the bottom that the program does not keep track of whether the file has been modified, as is the case here. Remember the relationship between specified displacements and supports. Support 2 will now have to be edited to include vertical restraint with [F2] [4] [4] [2] to become 0,1,3. Save the modified file as before with the name "t1c2" for Truss 1, Case 2.
Step 4: Calculations and results
Now all inputs have been made and double checked in both files. Calculations may be performed by loading the desired file and pressing [F4] [ENTER]. The calculation for either case of this truss should take a little less than one minute. Numerical results for free node displacements, member internal forces, and external support reactions are available by pressing [F3] [4], [5], or [6] respectively.
Node displacements are fairly straight-forward: values shown are deviations from the original position relative to the origin in global coordinates. For example, a deflection of -1.2,2.1 refers to a (vector) movement left 1.2 units and up 2.1 units in the 2-dimensional plane in which the truss was defined.
Below are deflections for the case with settlement, [F3] [4] ...
... and without ...
Member forces refer to internal forces (and stress), i.e. whether the member is in tension (T) or compression (C) and how much. If you have derived joint loads from member loads, remember to translate the results back into actual member forces.
It deserves special attention that impossible results may be obtained. The stress values were included for this reason. Most structural steels yield at either 36 or 50 ksi (kips per square inch, equal to 3.6E4 to 5.0E4 psi) and allowed values are much lower, so stresses near or above the yield point of your material should indicate severe problems. A real truss that is loaded to yielding will deform severely and possibly collapse, but the program knows nothing of yielding, strain hardening, or rupture. The actual forces in a yielded structure will be quite different than those modeled by the method used in this program, so all results should be considered invalid if any member reaches its yield stress.
Meber forces and stresses with settlement ...
... and without ...
Support reactions are displayed in the same basic manner as deflections, discussed above. They represent forces applied to the truss by the supports. Below are reactions with settlement (left) and without (right)
Last is probably the most satisfying part, the plot of the deformed truss. After all your work inputting data you can finally see your destructive power! Nodes and supports are automatically excluded for clarity, leaving only the members both before and after loading. It is usually quite easy to see what happens to the truss, especially where the largest deflections are.
To get back to the point and answer the original problem (compare the situations before and after settlement), things are really bad for the truss after the settlement. The reaction at node 3 goes from compression to tension, and several members are near their probable yield stresses. How can a support apply such a large tensile load? Perhaps the truss is well anchored to a heavy foundation which has become part of a small earthflow. In such a (not too uncommon) circumstance, a mere 1.5 inches is quite small. This should give you an appreciation for the destructive power of misbehaving soil. The forces generated by ground movement rapidly become extremely large.
Some example files are included with the truss zip file. They contain the data for the quick example (p23.89l) and the detailed example (t1c1.89l and t1c2.89l) along with a few others. The files are not needed to work the examples, and in fact are best not used since they skip important input techniques, but are included in case there are problems with entering the data or you are just curious and don't have much time after reading this horribly long manual. Simply send them to your calc in the same folder that truss resides in. Once you have started the program, any file can be loaded by choosing [F1] [1] and typing the name of the file as it appears in the calc. For example, p25.89l is loaded by typing "p25", not "p25.89l".
The goal with this version is to put out and test a functional version of a 2-D truss analysis program. Bugs will be aggressively worked out, so please report them if you find them! There may not be substantial enhancements to this program, but some things to consider are the following:
Bug fixes in this version will result in version changes below 1.0. Once truss is proven reliable, version 1.0 will be released.
A day without math is like a day without sunshine.