Analysis of trusses and other engineering structures with
Mathematica

A new Mathematica package solves computational problems involving engineering structures.

by Liudmila I. Zamiatina

This paper introduces the Mathematica Engineering Structures Package package for primary stress-deflection analysis of trusses and cables. The truss analysis is based on the principles of stiffness method. The cable analyses are described by simple differential equations. The Engineering Structures Package provides tools for graphical as well as computational analysis of structures. The concepts used in mathematical models make their way into a consistent and easy-to-understand design of the respective Mathematica objects. Once the objects instrumental for a description of a given problem are set up, the complete solution is then obtained by using one of the available unified solvers. The solvers are designed to produce symbolic solutions in simple cases and numeric solutions in more general cases.

Cables and trusses in constructions

Examples of cables in bridge construction range from the straw bridges across a river gorge in the Peruvian Andes (one of them extends more that 30.5 metes, and the Inca Indians rebuild it almost every year), to the famous Golden Gate Bridge (opened in 1937 with a total length 2824 meters and a main span of 1280 meters suspended from towers 227.4 meters high). Examples of truss type structures include the revolutionary new concept in the truss bridges sketched by Leonardo da Vinci. Recent innovations include the idea of using a truss tube structural system instead of a rigid frame structure for the John Hancock Center (built in Chicago in 1970)— an idea that reduced the high cost of a skyscraper.

In this paper the design and functions of the Engineering Structures Package are illustrated basically by applications to trusses and cables, but a brief outline of designs for frames and beams is also given.

Objectives

Engineering structures are built to support loads and transmit forces. A structure responds to the applied external factors by transmitting the loads and forces through its elements, and eventually applying them to the supports or foundations. To apply  this approach in describing the overall response of a structure, one needs to describe its internal state as well as its external action. We assume that the external part of the structure response is adequately described when the reaction forces and constraining moments at all structure supports are known. To describe the internal state, it is necessary to list all the internal forces and moments acting in the individual elements of the structure, as well as their deflections.

Idealization

The context of this paper and Engineering Structures is limited to methods of Linear Structural Analysis.  The basic assumptions are that all materials used are homogeneous, isotropic, linearly elastic; and all deflections are small compared to the geometrical dimensions of the respective structures. Certain assumptions are also made about the geometry of the structure. We assume that it is possible to represent it a set of individual linear elements. For instance, a truss consists of ideally connected bars. We typically represent bars as one-dimensional segments, therefore we should be able to disregard their width.  Ideal connections would be perfectly flexible frictionless hinges.

Free-body approach

This approach simplifies the treatment of supports and foundations of a given structure in an essential way. To be able to treat the support or foundation elements on a par with all other elements, we simply introduce appropriate reaction forces at the support points (plus, possibly, appropriate moments) and then treat the structure as "unsupported". This is done using the simple rule: force or moment acting in a certain direction is introduced whenever the structure's movements (i.e. displacement or rotation) in that direction are restrained by the support. The forces and moments thus introduced are formally described as Force or Moment objects.

Mathematica design for representation of structures

Cables, beams, trusses and frames are the structures dealt with in the Package.   Expressions describing either of these objects conform to the following general pattern: objectclass[geometry, materialproperties, loads, reactions]. In the spirit of Mathematica-naming conventions, the values for the objectclass are Truss, Frame, Beam, Cable and Chain. The geometry of the entire structure is defined in familiar terms:  Elements (for trusses and frames), BeamLength (for beams), Span, Sag and Height (for chains and cables).  Material properties and geometry of individual elements are given via ElasticityModulus, CrossSections, InertiaMoments. Both loads and reactions are described as Force or Moment objects.  Once a free body diagram for the given structure is selected, one can establish locations, directions, and patterns of the expected reactions. The complete list of these is then enclosed in the Reactions wrapper. The list of active forces, moments and distributed loads is enclosed in the Loads wrapper.

Plane and space structures

A truss is called a plane truss if all of its bars lie on one plane with loads and reactions acting in the same plane. The planar truss can be analyzed separately as a part of the total structural  system.   In many structures the individual constituents act independently of each other; the forces are transmitted between parts, but no additional interaction occurs. 
Since it is computationally easier to analyze planar structures, the specific truss analysis should be represented as a planar problem whenever possible to reduce the size of input data, three-dimensional coordinate transformation matrices and the structure stiffness  matrix. In cases where a structure  displays a genuinely three-dimensional behavior or load-transfer pattern, one has to use distinct  Mathematica functions for solving the space  trusses.

Plane trusses under loads

Truss description

In its Mathematica implementation, stress-deflection analysis of the plane and space trusses in static equilibrium  is based on the principles of stiffness method.  The package tools provide for computational as well as graphical analysis of the structures.

The description of the truss within the scope of the mathematical model include the description of truss geometry (as a set  node connected by the bars), cross sections areas of truss elements, Young's modulus of material, loads, and supports.  The Truss object is a collection of  subobjects describing its  Structure, Loads and Reactions.  The Structure object includes Elements, CrossSections, and ElasticityModulus parts. Let us illustrate this with an example. For instance, the truss shown on the Figure 1, with the  cross sectional  area  for each element equal to σ = 0.993 (in^2), Modulus of Elasticity equal to ϵ =  kips / (in^2), and length parameter equal to l = 144 in , is described in the appropriate coordinate system as follows:

Figure 1.  The loaded plane truss.

\(\(truss1 = 
	\ \ \ Truss[
		\ \ \ \ \ \ \ \ \ Structure[\ \ \ \ 
			\ \ \ \ \ \ \ \ \ \ \ \ \ {\ CrossSections[\ σ], 
              ElasticityModulus[ϵ], 
              Elements[\ 
					\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {{0, 
                    0}, {l, 0}}, {{l, 0}, {l, 
                    l}}, \ \ \ \ 
					\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {{l, l}, {0, l}}, {{0, l}, {0, 
                    0}}, 
					\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {{0, 
                    0}, {l, l}}, {{l, 0}, {0, 
                    l}}]}], \ \ \ \ \ 
		\ \ \ \ \ \ \ \ \ \ Loads[
            Force[{P, 0}, {l, l}]], 
		\ \ \ \ \ \ \ \ \ \ Reactions[
            Force[{r1, r2}, {0, 0}], \ 
            Force[{r3, r4}, {l, 0}]]];\)\)

The Elements part of the Truss object is a collection of node pairs given by the node coordinates and wrapped into Elements. Listing all connecting pairs (bars) is sufficient  for the purposes of the truss analysis, because the nodes and their connections are easily extracted from the set of bars. The key parameters for the matrix analysis of trusses are  CrossSections and ElasticityModulus. These are self-explanatory. These three simple objects are parts of the Structure object.  In more general cases the package provides for the analysis of the truss structures with different parameters for different truss elements.

An essential part of the basic truss data is the definition of the loads and the support  reactions. The reactions are considered as passive forces in the truss, while the loading forces are the active forces. To employ a suitable free -body diagram, we replace the supports by the appropriate reaction forces. It is convenient to describe both loads and reactions using the Force object . 

The first argument of Force gives the components of the force vector, and the second argument indicates the point (actually, node) of the force application. The node location coordinates and force components are likely to have different scales. Note that some or all force components can be symbols with no specific values assigned to them. Such components are treated as unknowns. Our structure solvers would attempt to solve for some or all of them.Typical examples of mixed force definitions would be an unknown horizontal force at the origin, Force[{x, 0},{0,0}], and an unknown vertical force at the origin, Force[{0,y},{0,0}]

The reactions generated by a support depend on its type, and according to the general principle the reaction force vector component appears in the direction in which the support  restrains the movement of the relative node. Thus in a plane truss, for example, a roller support restrains the movement in one direction, and a pinned support restrains the movement in two directions. Both supports allow the node to rotate and the corresponding reactions take the form of forces acting in the constrained directions. The sequence of vectors representing loads should be wrapped into the Loads object — the wrapper for the sequence of support reactions is Reactions.

The order of the individual objects in the description of Truss object does not matter. Neither does the order of objects in its Structure part.

Key functions

Once a truss is given as a collection of its elements, applied  loads, Young's moduli, and cross sectional areas of the truss elements, the unified truss solver generates the global force-displacement equations and produces the element forces in the bars, node deflections and reaction of supports. The unified solver  for the plane truss analysis  is SolveTruss. The output of this function gives the complete information about the plane truss structure under the acting loads. To get the result, one has to give specific numerical values for parameters and to apply the SolveTruss function.

The next calculation continues the previous example:

SolveTruss[
      truss1 /. {σ  ->  0.993, ϵ  ->   29000, 
           l  ->  144,  P  ->  50}]

In this case, the structure has extremely simple rectangular geometry. Therefore, all transformation  matrices  have simple coefficients and the problem is solved with complete symbolic data input. One has use the ParameterList option to distinguish the given symbolic parameters from unknown variables. (Symbolic mode demonstrates the dependency of parameters).

SolveTruss[truss1, δx,  δy,  Φ, 
        ParameterList  ->  {σ, ϵ, l , P}] // 
      DisplaySolution

As one can see, we renamed the element forces and deflections and applied the additional DisplaySolution function to print the results in two-dimensional form.  Note that in the second solution of truss1 we changed the names of output parameters (element forces and node deflections) as well.

To obtain the results symbolically, even for simple structures, can be useful for educational purposes.  Such a solution demonstrates how the given parameters were involved in the description of the truss at the stage of  problem setup and where these parameters appear in the output of the unified solver.  For instance, in the example above we can see that all parameters of the SolveTruss output depend on load P, and node deflections are directly proportional to the load P and length l, but inversely proportional to the cross-sectional area of the elements and Young's moduli.

The key functions in the visualization and graphics analysis of the plane trusses are the following: TrussStructurePlot, TrussReactionPlot, TrussDeflectionPlot.  Let us demonstrate a more elaborate example of the multi-element plane truss construction built by compact code written in Mathematica.

The standard Mathematica function GraphicsArray applied to a sequence of steps to build a 2D cross-cut  of an Eiffel tower-like structure: stage1, stage2, stage3, stage4, stage5 gives the following graph:

Show[GraphicsArray[{{stage1,  stage2, stage3, stage4, stage5}}]];

Describing the given truss by using Structure, Loads, Reactions as was shown above, 
we can solve the specified truss directly by applying the TrussReactionPlot function to the properly set Truss object.  Some special options were used below to obtain the graphical image of the Truss object called truss3.

TrussReactionPlot[truss3, 
                  ForceScale -> {.08, Automatic},
                  Forces -> True,
                  FontSize -> 6];

The blue arrow represents the load and the red arrows represent the reaction of supports.
As we can see, the truss is supported by the fixed supports applied at the foundation nodes of the structure, and the load is applied at the node that was chosen in the truss3 description.

If truss3 had been previously  solved using  SolveTruss, there is a way to reuse the solution in TrussReactionPlot without recomputing it.

Another graphical function in truss analysis is TrussDeflectionPlot. This function analyzes a truss or reuses the results of prior analysis, draws the initial and deformed trusses and specifies the values of element forces by the color of a deformed truss.  Options for this function allow the user to specify styles for representing the results of analysis and for drawing the truss.

Consider the direct graphical deflection analysis of a truss structure in the following example. A Ferris wheel  in a fairground can be idealized as eight pin-ended spokes  of length 10.0 m attached symmetrically to a rigid rim and meeting at a central hub of negligible dimensions. The spokes are all of steel  and have the same cross-sectional area, equal to 5.00 (10^(-3)) (m^2). The loading on the wheel induces a total reactive force at the hub of 500. kN directed  at 30° to the vertical as shown. Taking the hub to be the single free joint in the structure,  calculate  the displacements of the hub relative to the rim and maximum forces  in the spokes. After describing this truss as truss4, we can use directly the TrussDeflectionPlot function to draw the truss and solve the problem.  The NodeLabel option allows the user to give any description of the truss nodes. 

The description label used below has the following form {{acoordinates, "A"}, ...}. The DeflectionCoefficient option  set up to m instructs the plotter to scale the deflections by the factor of m before drawing them. The default is 20. The Deflections option specifies whether the deflection values should also be printed beside the deflected elements  in the graph. (Default is False).

TrussDeflectionPlot[truss4,
                NodeLabel -> labels,
                DeflectionCoefficient -> 1000,
	            Deflections -> True,
                DisplayLegend -> True,               
                LegendPosition -> {-1.5,-1.}
                   ];

As we can see in the picture, the TrussDeflectionPlot function gives the range of the forces in the bars and deflections of the nodes.  Note that the nodes that do not experience deflections will have both zero deflection values and "fixed" qualifiers printed beside them.

All standard Mathematica options for Graphics can be also used to fine-tune the outputs of TrussReactionPlot and TrussDeflectionPlot. The latter also accepts all the options of the Mathematica Legend object.
The package uses consistent naming conventions for options across all the solvers and plotters, such as TrussDeflectionPlot, TrussDeflectionPlot3D, TrussReactionPlot, TrussReactionsPlot3D, TrussStructurePlot, TrusssStructurePlot3D,  FrameReactionsPlot, FrameDeflectionsPlot, FrameStructurePlot, etc.

A most attractive feature of the package is the graphical analysis of 3D trusses. First we have to note that 3D truss structures should be described by the same Truss object, but in this case all the points involved are three dimensional. The numerical, and in some cases, closed form symbolic solution could be obtained by using SolveTruss3D applied to the appropriate Truss object. The graphical solution or visualization could be done by TrussReactionPlot3D and TrussDeflectionPlot3D. There are only small differences between the plane and space truss analysis and graphical representations. The forces in the 3D case are represented by the colored points and printed values, and the bars in 3D can  be shown as prisms for better visibility. To demonstrate the geometry of the entire truss construction, the package has two auxiliary functions: TrussStructurePlot and TrussStructurePlot3D.  These functions can  be used at any stage of truss analysis.  To this end they accept the Elements, Structure, and Truss objects. Below we give the graphical image for space structure truss25 generated by TrussStructurePlot3D with the PrismaticBars option set to True.

TrussStructurePlot3D[truss25, 
                   NodeLabel -> labels,
                   FontColor -> RGBColor[1,1,1],
                   PrismaticBars -> True,
                   SpaceBarStyle -> {4, RGBColor[1,0,.2]},
                   ElementStyle -> {.15, GrayLevel[.9]},
                   Background -> RGBColor[0,0,0],
                   ViewPoint -> {10,7,-20}];

Changing the standard ViewPoint option, we can animate the observation of this structure from different points-of-view. In the figure below, the TrussReactionPlot3D function gives the direct analysis of support reactions for this structure. Here the blue point gives the applied load and the four yellow points represent the reactions of fixed supports. ViewPoint was also changed, and the nodes labels were dropped to demonstrate the options.

The deflection analysis for 3D trusses can be done by the TrussDeflectionPlot3D  function. As in the planar case, the element forces in the bars are represented on the graph by the color of the elements.  In addition to the specific options, the 3D truss plotters accept all the options allowed for the Mathematica Graphics and Graphics3D objects.  We will demonstrate how the different graphics objects in  Mathematica could be combined in the analysis of a space arch.  The two pictures below use the Graphics objects generated by the TrussReactionPlot3D and TrussDeflectionPlot3D functions used for analysis.  The standard Rectangle, Graphics and  Show commands are used to combine the images.  In the two pictures below, the left arcs show the applied forces at the different nodes by the blue points, and the support reactions are shown by the red points. On the right side of the pictures, the shapes of deflecting arch are shown, and by the bars' color the stress in the bars is indicated.

\(\(\(Show[
            Graphics[{Rectangle[{\(-9\), 0}, {0, 
                    9}, #[\([1]\)]], 
		\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Rectangle[{0, 0}, {9, 
                    9}, #[\([2]\)]]}], 
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Background\  -> \ 
              GrayLevel[ .9]] &\) /@ 
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {{ArchReactions1, 
            ArchDeflections1}, 
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 	\ \ {ArchReactions2, \ ArchDeflections2}};\)\)

More sophisticated image composition is presented in the figure below. The graphics images of initial and deflecting arches are obtained by TrussDeflectionPlot3D, the separate graphics image Bird is used to show the view point, and in the small rectangular only the deflecting arch is shown from the point-of-view where the bird is located.  In general, graphical objects coming from different sources can be easily combined in Mathematica environment to form a collated image.

Initial strains in plane structures

The package allows analysis not only of the loaded structures, but also the plane trusses subject to misfits, thermal changes, and fabrication errors, as well as substructuring in the truss and frame analysis.

The same unified  SolveTruss function analyzes the truss structures subject to the misfits, thermal changes in the elements, and fabrication errors. This general category of problems can be solved as initial-force problems in the context of equations [Sack 1989].  In these cases one has to add to the description of the Truss object the appropriate part InitialStrains or Misfits.

We return to  the first example, but now in addition to the acting force, the element that connected the nodes 1 and 2 is heated  100°F above the temperature of the other elements. We find the nodal displacements, the reaction forces, and the element forces. Assume  α = 6.5 10^-6 in/(in°F).

truss2 = 
        Append[truss1, 
          InitialStrains[{{{0, l}, {0, 
                  0}},  δ,  α}]];

We have to add the numerical values for the unknown parameters to solve the problem numerically. The same unified function SolveTruss gives the solution.

\(SolveTruss[
        truss2 /. 
          
{α\  -> \ 6.5\ 10\^\(-6\), \ δ\  -> 100, 
            σ\  -> \ 0.993, ϵ\  -> \ \ 29000, \ 
            l\  -> \ 144, \ P\  -> \ 50}, δx, \ δy, \ 
        Φ] // \ DisplaySolution\)

The same graphical functions TrussReactionPlot and TrussDeflectionPlot will analyze and plot the structures subject to thermal change and misfits as usual. For instance, below we consider a truss that has four bars intersecting at one point, the other ends of the bars having fixed supports on a vertical wall. Point a has coordinates {0,0}. The points at the walls from top to bottom have coordinates: b = {4,4}, c = {4,3}, d = {4,0}, e = {4,-4}. 

We find the nodal displacements and maximum element forces for the truss, if element ac is fabricated 5 mm too short.  The modulus of elasticity for all bars is equal to 200 GPa and the cross-sectional areas for the bars are as follows A(ab)  = A(ae)  =  1131(mm^2), A(ac)  = 500 (mm^2), and A(ad)  =  400 (mm^2). [Sack 1989].  The direct solution by the graphics function gives the following picture.

If the element {a,c} is constructed 5 mm too short, it means that this element will be in tension, Element forces are necessary to constrain the members so that nodal displacements are zero when the element experiences the initial strain. This line of thought suggests the use of the  InitialStrains object. The change in the length is equal to δ = -.005 (measured in meters)and the strain per unit of the length is equal to α = 1/L, where L is the length of the element.

Calculate the length of this truss element and determine the initial strain as follows:

rl =  {α  -> - .005,  δ -> 
            (1/((L = (Sqrt[Dot])[(c - a), (c - a)])))};
strain1  =  
        InitialStrains[{{a, c},  δ,  α} ] /. 
          rl;

The expression strain1 is included in the description of truss10 as well as Structure and Reactions objects.

\(\(TrussDeflectionPlot[truss10, 
	\ \ \ \ \ \ \ \ \ \ \ 
      NodeLabel\  -> \ labels, DeflectionCoefficient\  -> \ 500, 

      \ \ \ \ \ \ \ \ \ \ \ \ \ 
      ElementStyle\  -> \ {.07, GrayLevel[.667]}, 

      \ \ \ \ \ \ \ \ \ \ \ 	DisplayLegend\  -> \ True, \ 
      LegendPosition\  -> \ {\(-.6\), \(-.9\)}, 

      \ \ \ \ \ \ \ \ \ \ 	\ Deflections -> \ True, \ 
      BarStyle\  -> \ {.005, GrayLevel[0.5]}]; \)\)

The depicted values of deflection of nodes on the wall are {0,0}. This emphasizes the fact that these nodes have the fixed supports. The deflection of node a is multiplied by the coefficient 500 before being plotted. The maximum element force appears in the bar {a,c} and its value is depicted on the force diagram. The flexible choices for option values allow the program to attain maximum clarity and visual quality for structure images.

Substructuring in trusses

Some structures are too large to be analyzed as a single system, and they can be investigated only after division into a number of smaller units or substructures. With the smaller problem sizes, faster, more convenient and more reliable solutions are obtained. The response of the total system is established by synthesizing the individual substructural   responses in a systematic fashion. In substructuring, the nodes are grouped into interior nodes and interface nodes, then the behavior of the structure of both is analyzed.

Even though the output of the unified SolveTruss function gives the reactions of supports and the deflections only at the interface nodes, the geometry of the entire structure  is involved in considering a calculation. SolveTruss solves the problem by substructural analysis only when the description of truss structure includes the InterfaceNodes object . The following examples illustrate the usage of InterfaceNodes.

This structure is taken from the examples library of the package. It is simply the foundation of a two-dimensional tower (called truss23 in the example library)—the intermediate stage of building that structure. This structure has 20 nodes, but  let us assume that for some reason the responses at five of these nodes—the ones with numbers 2, 9, 11, 12, 19—are more important to us than the rest. The following shows the InterfaceNodes object listing the nodes of importance added to the truss23 definition:

truss23 = Truss[InterfaceNodes["9","2","11","12","19"]/.
                               StructureNames[elements23], 
                reactions23, loads23, structure23];

SolveTruss gives the deflections of interfaces and support reactions.

truss23//SolveTruss

To find support reactions graphically, use TrussReactionPlot instead:

TrussReactionPlot[truss23, 
          ElementStyle -> {.002, RGBColor[.5,0,.5]},
          NodeSize -> .02, Forces -> True, FontSize -> 9];

An overview of frames and beams

The package solves not only truss but also plane prismatic frames. For this reason the Frame object is introduced in Mathematica, and an additional simple object, InertiaMoments, is used for the purpose of frame analysis. The frames solved in the package can be loaded, subject to thermal changes, and can be defined as axially rigid or inextensible. The substructuring in the frames is implemented in the package as well. The similar graphical functions FrameReactionPlot and FrameDeflectionPlot could be used for graphical analysis, or just for visualization. 

Many modern bridges have structural elements described as beams and cables. The package gives a complete analysis of straight Euler-Bernoulli beams in static equilibrium.

For illustration purposes,  let us give a picture of one beam, described in terms of a Beam object and plotted by BeamReactionPlot with the option SolvedStructure set to False.

Figure 2.  The loaded Euler-Bernoulli beam.

The SolveBeam function gives the complete solution of this beam, but the beam analysis has the additional graphical functions ShearPlot, BendingMomentPlot, SlopePlot, and DeflectionPlot.  The SolveBeam function could be used in symbolic mode as well as in numeric.

This functions take the solution of the given beam and visualize the result, or take the Beam object and draw the respective solution.  In the figure below, the SlopePlot and DeflectionPlot functions analyze the slope and deflections of the centroid axis of the beam shown above.

{SlopePlot[#, LineThickness -> .02],
 DeflectionPlot[#, LineThickness -> .02]}&/@{beam1};

Coplanar cables

There are no special graphical functions for the analysis of coplanar cables in the package, but there is a wealth of symbolic computation, because cable analysis is based on the principles of double integration. There are two types of cables.  In suspension bridges we find a coplanar arrangement,  in which a cable supports a large load but  the weight of the cable itself may often be considered negligible (the so called parabolic case). In transmission lines the principal factor is the weight of the cable itself (the so called catenary case). In this package we consider both parabolic and catenary cases. Once a cable structure  is given by its span and sag  loads, the function for cable analysis generates an equation for the cable curve, gives a value of cable length, an equation for tension as the function of the horizontal coordinate (or of the cable length itself), and the horizontal coordinate of the left support for asymmetric cable.

All components in the descriptions of the cable structures are represented by the objects specifically designed for these  purpose and are described in familiar terms. The following objects:  Span, Sag, and Height, provide the description of the geometry of symmetrical and asymmetrical cable structures. A Mathematica pure function is a reasonably good tool for describing distributed loading for cables, and that is what is used in the underlying design in the package.  As we already mentioned, within this package a cable with the loading distributed along the horizontal coordinate will be described as a Cable object. The cables with loading distributed along the cable length are represented by the Chain object. The unified SolveCable function and other functions can handle numeric, and in many cases, symbolic solutions for cables and chains.

As an example let us find the shape of a cable stretched between two points on the same  level. The cable has forces l meter apart with sag f meters, and it is subject  to a loading of c Newton/Meters distributed in the horizontal direction.

Figure 3.  Parabolic symmetric cable with symbolic data input.

This is the case of a symmetric cable with a uniform loading. The data is given symbolically (i.e., by symbols that do not have numerical values).

First,  we solve this problem without units of measure.  The description  of the symmetric cable consists  of three arguments — span, sag, and  loading.  Loading should be given by a Function object .

The object Cable is combined by the simple objects Span, Sag, and Loads.

cable1  =  
        Cable[Span[l Meter],  Sag[f Meter], 
          Loads[Function[x,  c] (Newton/Meter)]];

Use SolveCable for cable analysis  to obtain the complete information about the cable. The second  argument for SolveCable specifies the  name of coordinate  to be used in the result. 

This second argument of the function SolveCable provides the name for the horizontal coordinate .

solution1 = SolveCable[cable1, x]

Notice that Figure3 was plotted by the CableStructurePlot function, and the following settings of the options were used:

\(CableStructurePlot[
      cable1, 
\ \ \ \ \ \ \ 	CableLabel\  -> \ {"l Meter", "f Meter", \*""c (Newton/Meter)""}, \ \ \ \ \ \ 
	\ \ \ \ \ \ \ Background\  -> \ RGBColor[ .9,  .9, 1]\ ]\)

Figure 4 and Figure 5 were reproduced by CableStructurePlot as well.

The input data for the functions in the Engineering Structures package for asymmetric cables should be numeric. (The following example shows the characteristic usage of numeric data in asymmetric case).

Find the maximum tension.of the cable carrying a horizontally distributed load of 3 kg/m . It is stretched between two supports not at the same level. The left side of a cable is mounted at an elevation 10 m below the right side. The sag, measured from the left support,  is 10 m. The span  is equal to 200 m. (Similar to the problem 6.9 ,  W.G. McLean&E.W.Nelson,   Engineering mechanics  )

Figure  4.  Parabolic asymmetric uniformly loaded cable.

Alternatively we can solve the problem as dimensionless. Here we have an asymmetric cable. As usual we assume that the higher end is the right one.

To describe the asymmetric cable write consecutively span, sag, loading and the fourth parameter height:

cable2 = Cable[Height[10], Span[300], Sag[10], Loads[Function[x,3]]];

To solve for tension:

tension2 = CableTension[cable2, x]

To illustrate the problem graphically, we find the left support of the cable:

lowestsupport = CableLowestSupport[cable2]

When plotting the cable tension, remember to indicate the range for the variable along the horizontal axis:

Plot[tension2,{x, -124.264, 175.736},
         PlotLabel -> "Cable tension",
         Frame -> True,
         GridLines -> Automatic,
         PlotStyle -> {Thickness[.02], RGBColor[1,0,0]}];

Consider an example involving an asymmetric chain. The lowest support in our model is located at the left end. Conventionally the origin of the corresponding coordinate system is located at the lowest point of the chain.

A cable having a weight density of 3 Newton/Meter is stretched between two supports not at the same level. The height is 8 meters, span is equal to 100 meters, with  sag equal to 10 meters. Determine the maximum tension. (Similar to Problem 6.9, McLean and Nelson 1988)

Figure  5. Asymmetric uniform loaded chain.

The description of the asymmetric chain consists of four arguments - span, sag, loading, and height.

chain1 = Chain[Span[101 Meter],
               Loads[Function[s, 4 9.806] Newton/Meter], 
               Height[9 Meter], Sag[11 Meter]];

SolveCable[chain1, x]

Note, that in this case the tension is given as a function of the chain length. To emphasize this fact, we choose the variable s that varies along the length of the chain from the lowest point to the end.

tension1 = CableTension[chain1, x]

To analyze the maximum of tension,  first draw the curve of the chain. The maximum tension occurs at the highest end of the chain.

Plot[tension1/. Newton -> 1, {x, -42.888, 57.112},
     PlotLabel -> "Chain shape", AspectRatio -> .4,
     Frame -> True, GridLines -> Automatic, 
     PlotStyle -> {{Thickness[.02], RGBColor[0,0,1], Dashing[{0.05}]}}];

Conclusion

Why Mathematica? The Mathematica language provides a convenient object-encapsulation model, similar to that of advanced object-oriented languages, but Mathematica's object encapsulation is simpler to use, because it is very graphical and very flexible (being interpreted as opposed to compiled).   Another important advantage is the availability of the extremely powerful mathematical library that can be used easily and seamlessly in any Mathematica package.
The numeric results, once obtained, can be easily put into a variety of graphical formats and plotted using either two-dimensional or three-dimensional graphical primitives available in Mathematica.  These factors provide for easy and robust implementations of the required engineering functionality.

Along with that, the Mathematica front end allows for rapid design and easy customization of simple user interfaces complete with buttons, palettes and mathematical symbols. 

The last, but not the least motivation for using Mathematica, is the ability to embed all of the above into  high quality Notebook documents, so that the manuals, guides and help files coexist in the same electronic workspace with the functional packages and engineering models.

Acknowledgment

I am grateful to all employees of Wolfram Research with whom I had the privilege to discuss this project on its different stages.

References

Egor E. Popov. Engineering Mechanics of solids. Prentice Hall. 1990
W.G.McLean, E.W.Nelson Engineering mechanics. McGray-Hill,Inc. 1988
William A.Nash Statics and Mechanics of Materials. McGraw-Hill. 1992
Ronald L. Sack. Matrix Structural Analysis. PWS-KENT Publishing Company. 1989
Tung Au, Paul Christiano. Structural Analysis.Prentice-Hall, Inc. 1987

ABOUT THE AUTHOR

Liudmila I. Zamiatina received an M.Sc.degree in Applied Mechanics from Moscow State University. Currently she is with the Applications Department of Wolfram Research.

Liudmila I. Zamiatina
Wolfram Research
100 Trade Center Drive
Champaign, IL
liudmilaz@wolfram.com

ELECTRONIC SUBSCRIPTIONS

Included in the distribution for each electronic subscription is the file Trusses.nb containing Mathematica code for the material described in this article.