IES VisualAnalysis User's Guide
Example: Catenary Arch

Requires: Advanced Level

“As hangs a flexible cable so, inverted, stand the touching pieces of an arch.” ~ Robert Hooke

Catenary Arch
Copy Code
//Builds an arch with an inverted catenary shape
//Scripts can be useful when you need to generate complex geometry

DeleteAll();

//inputs
SetUnits("Kips & Inches");
var a = 240.0; //arch height
var n = 48; //number of member elements
var section = "Rectangle 5 x 5";
var material = "Concrete (F'c = 4 ksi)";

var xend = a * Math.Log(2 + Math.Sqrt(3));
var length = 2.0 * a * Math.Sinh(xend / a);
var seg = length / n;

string prevNode = null;
for(var i = 0; i <= n; i++)
{
    //calc the distance along the arch
    var s = i * seg;
    
    //calc the x coordinate of this node
    var s_a = (s - 0.5*length)/a;
    var x = a * Math.Log(s_a + Math.Sqrt(s_a * s_a + 1));
    
    //calc the y coordinate of this node
    var y = -a * Math.Cosh(x/a) + 2 * a;
    
    //add the node
    var node = AddNode(x, y);
    
    //support the node
    if(i == 0 || i == n)
    {
        //pin the ends
        Pin(node);
    }
    else
    {
        //all others support DZ
        Support(node, false, false, true, false, false, false); 
    }
    
    //if this isn't the first node, add the member
    //between this node and the previous one
    if(prevNode != null)
    {
        AddMember($"M{i}", prevNode, node, section, material);
    }
    //the current node becomes the previous node
    //for the next iteration
    prevNode = node;
}