Example 11: Single storey building with shell elements (wall, foundation slab and superstructure slab) using r 3D Frame Analysis Library

Example 11: Single storey building with shell elements (wall, foundation slab and superstructure slab) using r 3D Frame Analysis Library

In this example, we will call the 3D Frame Library from a Visual Studio project and carry out the structural analysis of a simple building with a foundation slab, a wall and a superstructure slab. The beam and columns are modeled with frame elemtns and the slabs/wall with shell elements. We will first provide the geometry, material properties and loads and afterwards call the corresponding routine in order to obtain the results regarding the load cases and load combination.

analysis of building with foundation slab, wall and superstructure slab modeled as shells using 3D Frame Analysis Library for structural analysis

Sample beam with 3 differen load cases to analyze with 3D Frame Library (Metric units)

We will first create a new C# Windows Application project from Visual Studio and follow the following steps to carry out the structural analysis according the data provided. Please notice that we could use any other .NET compatible language and take the corresponding steps. The source code of all examples can be downloaded here.

Add a reference to 3D Frame Library

A reference to Frame 3D Library can easily be added by right clicking on the application project and selecting Add --> Reference.

Providing the data to 3D Frame Library using C#

New model definition

Model Model = new Model();
Model.LicenseInfo = LicenseInfo;

Definition of materials

//Create a new material for concrete
Material matConcrete = new Material();
matConcrete.Name = "Concrete";//Material name
matConcrete.Density = 2.5;//density in mass units/m3, for example tn/m3
matConcrete.G = 11538461;//shear modulus
matConcrete.E = 30000000;//elasticity modulus

Definition of cross section

//Create a cross section for frames
FrameElementSection ConcreteSection = new FrameElementSection();
ConcreteSection.Name = "Concrete section";//section name
ConcreteSection.A = 0.4 * 0.8;//section area
ConcreteSection.Iy = 0.4 * 0.8 * 0.8 * 0.8 / 12;//inertia moment about local y axis
ConcreteSection.Iz = 0.8 * 0.4 * 0.4 * 0.4 / 12;//inertia moment about local z axis
ConcreteSection.It = 0.0117248;//torsional constant
ConcreteSection.b = 0.40;//section height
ConcreteSection.h = 0.80;//section height

Definition of model geometry and loads

Frame3D.SuperNode n1, n2, n3, n4;
ShellSuperElementTriangular ssel1;
ShellSuperElementTriangular ssel2;

double soilStiffnessPerArea = 5000;

int i_nodes = 1;
//Create foundation nodes (these nodes will be used to create the shell elements of the foundation slab)
for (double x = 0; x <= 7; x += 1.0)
{
    for (double y = 0; y <= 8; y += 1.0)
    {
        Frame3D.SuperNode n = new Frame3D.SuperNode(i_nodes++, x, y, 0);
        n.dof1constraint = true;
        n.dof2constraint = true;
        n.Kdof3 = soilStiffnessPerArea;
        n.dof6constraint = true;
        Model.InputNodes.Add(n);
    }
}

//The foundation slab elements are created below. The thickness of the foundation is 0.5 m.
int i_elements = 1;
for (double y = 1; y <= 8; y += 1.0)
{
    for (double x = 1; x <= 7; x += 1.0)
    {
        double y12 = y - 1;
        double y34 = y;

        double x14 = x - 1;
        double x23 = x;

        n1 = Model.InputNodes.Find(p => p.x == x14 && p.y == y12 && p.z == 0);
        n2 = Model.InputNodes.Find(p => p.x == x23 && p.y == y12 && p.z == 0);
        n3 = Model.InputNodes.Find(p => p.x == x23 && p.y == y34 && p.z == 0);
        n4 = Model.InputNodes.Find(p => p.x == x14 && p.y == y34 && p.z == 0);

        //ssel = new ShellSuperElement(i_elements++, n1, n2, n3, n4, matConcrete);
        ssel1 = new ShellSuperElementTriangular(i_elements++, n1, n2, n3, matConcrete);
        ssel1.Thickness = 0.5;
        ssel1.Spring_Z_local_Stiffness_per_Area = soilStiffnessPerArea;
        Model.InputFiniteElements.Add(ssel1);
        ssel2 = new ShellSuperElementTriangular(i_elements++, n1, n3, n4, matConcrete);
        ssel2.Thickness = 0.5;
        ssel2.Spring_Z_local_Stiffness_per_Area = soilStiffnessPerArea;
        Model.InputFiniteElements.Add(ssel2);
    }
}

//The nodes of the story are created
Frame3D.SuperNode ns1 = new Frame3D.SuperNode(i_nodes++, 1, 1, 3);
Model.InputNodes.Add(ns1);

Frame3D.SuperNode ns2 = new Frame3D.SuperNode(i_nodes++, 6, 1, 3);
Model.InputNodes.Add(ns2);

Frame3D.SuperNode ns3 = new Frame3D.SuperNode(i_nodes++, 6, 7, 3);
Model.InputNodes.Add(ns3);

Frame3D.SuperNode ns4 = new Frame3D.SuperNode(i_nodes++, 1, 7, 3);
Model.InputNodes.Add(ns4);


//The following two nodes belong to the vertical wall at elevation z=1.00 and z=2.00
Frame3D.SuperNode nsw1_z1 = new Frame3D.SuperNode(i_nodes++, 2, 1, 1);
Model.InputNodes.Add(nsw1_z1);
Frame3D.SuperNode nsw2_z1 = new Frame3D.SuperNode(i_nodes++, 3, 1, 1);
Model.InputNodes.Add(nsw2_z1);

Frame3D.SuperNode nsw1_z2 = new Frame3D.SuperNode(i_nodes++, 2, 1, 2);
Model.InputNodes.Add(nsw1_z2);
Frame3D.SuperNode nsw2_z2 = new Frame3D.SuperNode(i_nodes++, 3, 1, 2);
Model.InputNodes.Add(nsw2_z2);


//The shell elements of the wall are created. (the wall has a thickness of 0.25 m)
n1 = Model.InputNodes.Find(p => p.x == 2 && p.y == 1 && p.z == 0);
n2 = Model.InputNodes.Find(p => p.x == 3 && p.y == 1 && p.z == 0);
n3 = Model.InputNodes.Find(p => p.x == 2 && p.y == 1 && p.z == 1);
n4 = Model.InputNodes.Find(p => p.x == 3 && p.y == 1 && p.z == 1);
ssel1 = new ShellSuperElementTriangular(i_elements++, n1, n2, n3, matConcrete);
ssel1.Thickness = 0.25;
Model.InputFiniteElements.Add(ssel1);
ssel2 = new ShellSuperElementTriangular(i_elements++, n1, n3, n4, matConcrete);
ssel2.Thickness = 0.25;
Model.InputFiniteElements.Add(ssel2);

n1 = Model.InputNodes.Find(p => p.x == 2 && p.y == 1 && p.z == 1);
n2 = Model.InputNodes.Find(p => p.x == 3 && p.y == 1 && p.z == 1);
n3 = Model.InputNodes.Find(p => p.x == 2 && p.y == 1 && p.z == 2);
n4 = Model.InputNodes.Find(p => p.x == 3 && p.y == 1 && p.z == 2);
ssel1 = new ShellSuperElementTriangular(i_elements++, n1, n2, n3, matConcrete);
ssel1.Thickness = 0.25;
Model.InputFiniteElements.Add(ssel1);
ssel2 = new ShellSuperElementTriangular(i_elements++, n1, n3, n4, matConcrete);
ssel2.Thickness = 0.25;
Model.InputFiniteElements.Add(ssel2);

n1 = Model.InputNodes.Find(p => p.x == 2 && p.y == 1 && p.z == 2);
n2 = Model.InputNodes.Find(p => p.x == 3 && p.y == 1 && p.z == 2);
//The upper wall joints are created here:
n3 = new SuperNode(i_nodes++, 2, 1, 3);
LinearLoadCaseForSuperNode llcsn = new LinearLoadCaseForSuperNode("lc1", LoadCaseType.DEAD);
llcsn.Pz = -100;
n3.LinearLoadCasesList.Add(llcsn);

Model.InputNodes.Add(n3);
n4 = new SuperNode(i_nodes++, 3, 1, 3);
Model.InputNodes.Add(n4);
ssel1 = new ShellSuperElementTriangular(i_elements++, n1, n2, n3, matConcrete);
ssel1.Thickness = 0.25;
Model.InputFiniteElements.Add(ssel1);
ssel2 = new ShellSuperElementTriangular(i_elements++, n1, n3, n4, matConcrete);
ssel2.Thickness = 0.25;
Model.InputFiniteElements.Add(ssel2);

//The columns are created below
Frame3D.FrameSuperElement c1 = new FrameSuperElement(i_elements++, Model.InputNodes[10], ns1, new Geometry.XYZ(1, 2, 0), matConcrete, ConcreteSection, new MemberReleases(), new MemberReleases(), true, false);
Model.InputFiniteElements.Add(c1);

Frame3D.FrameSuperElement c2 = new FrameSuperElement(i_elements++, Model.InputNodes[55], ns2, new Geometry.XYZ(6, 2, 0), matConcrete, ConcreteSection, new MemberReleases(), new MemberReleases(), true, false);
Model.InputFiniteElements.Add(c2);

Frame3D.FrameSuperElement c3 = new FrameSuperElement(i_elements++, Model.InputNodes[61], ns3, new Geometry.XYZ(6, 8, 0), matConcrete, ConcreteSection, new MemberReleases(), new MemberReleases(), true, false);
Model.InputFiniteElements.Add(c3);

Frame3D.FrameSuperElement c4 = new FrameSuperElement(i_elements++, Model.InputNodes[16], ns4, new Geometry.XYZ(1, 8, 0), matConcrete, ConcreteSection, new MemberReleases(), new MemberReleases(), true, false);
Model.InputFiniteElements.Add(c4);

//Create beams
LinearLoadCaseForSuperFrameElement beamLoad = new LinearLoadCaseForSuperFrameElement("lc1", LoadCaseType.DEAD);
beamLoad.UniformLoad.UniformLoadsZ.Add(new FrameSuperUniformLoad(0, 1, -10, -10, LoadDefinitionFromStartingNode.Relatively, LoadCordinateSystem.Global));
//Beam starts from column c1 and ends at column c2. It also intersects the wall. Thus it is modelled using 3 parts.
Frame3D.FrameSuperElement b1a = new FrameSuperElement(i_elements++, ns1, n3, new Geometry.XYZ(1, 2, 3), matConcrete, ConcreteSection, new MemberReleases(), new MemberReleases(), true, false);
b1a.LinearLoadCasesList.Add(beamLoad);
Model.InputFiniteElements.Add(b1a);
Frame3D.FrameSuperElement b1b = new FrameSuperElement(i_elements++, n3, n4, new Geometry.XYZ(1, 2, 3), matConcrete, ConcreteSection, new MemberReleases(), new MemberReleases(), true, false);
b1b.LinearLoadCasesList.Add(beamLoad);
Model.InputFiniteElements.Add(b1b);
Frame3D.FrameSuperElement b1c = new FrameSuperElement(i_elements++, n4, ns2, new Geometry.XYZ(1, 2, 3), matConcrete, ConcreteSection, new MemberReleases(), new MemberReleases(), true, false);
b1c.LinearLoadCasesList.Add(beamLoad);
Model.InputFiniteElements.Add(b1c);

Frame3D.FrameSuperElement b2 = new FrameSuperElement(i_elements++, ns2, ns3, new Geometry.XYZ(5, 0, 3), matConcrete, ConcreteSection, new MemberReleases(), new MemberReleases(), true, false);
b2.LinearLoadCasesList.Add(beamLoad);
Model.InputFiniteElements.Add(b2);

Frame3D.FrameSuperElement b3 = new FrameSuperElement(i_elements++, ns3, ns4, new Geometry.XYZ(6, 8, 3), matConcrete, ConcreteSection, new MemberReleases(), new MemberReleases(), true, false);
b3.LinearLoadCasesList.Add(beamLoad);
Model.InputFiniteElements.Add(b3);

Frame3D.FrameSuperElement b4 = new FrameSuperElement(i_elements++, ns4, ns1, new Geometry.XYZ(0, 7, 3), matConcrete, ConcreteSection, new MemberReleases(), new MemberReleases(), true, false);
b4.LinearLoadCasesList.Add(beamLoad);
Model.InputFiniteElements.Add(b4);

//Add loads to beams
LinearLoadCaseForSuperFrameElement llcsfe = new LinearLoadCaseForSuperFrameElement("lc1", LoadCaseType.DEAD);
llcsfe.UniformLoad.UniformLoadsZ.Add(new FrameSuperUniformLoad(0, 1, -10, -10, LoadDefinitionFromStartingNode.Relatively, LoadCordinateSystem.Global));
b1a.LinearLoadCasesList.Add(llcsfe);
b1b.LinearLoadCasesList.Add(llcsfe);
b1c.LinearLoadCasesList.Add(llcsfe);
b2.LinearLoadCasesList.Add(llcsfe);
b3.LinearLoadCasesList.Add(llcsfe);
b4.LinearLoadCasesList.Add(llcsfe);

Call the solution method

Model.Solve();

Obtain the analysis results

double[] Min, Max;

//Beam forces
b1a.GetInternalForcesForLoadCase(0, "lc1", out Min, out Max, 1);

//Foundation deflection at wall base x=3, y=1, z=0
SuperNode nf = Model.InputNodes.Find(p => p.x == 3 && p.y == 1 && p.z == 0);
nf.GetNodalDisplacementsForLoadCase("lc1", out Min, out Max, 1);

//Estimation of soil stress at wall base
double soilStress = -soilStiffnessPerArea * Min[2];


//Get stresses at the base of wall (stresses of sheels are reported in the local coordinate system!!)
((ShellSuperElementTriangular)Model.InputFiniteElements.Find(p => ((ShellSuperElementTriangular)p).Node3.z == 1)).GetInternalStressesForLoadCase(0, 0, 0.125, CoordinateSystem.Local,0, "lc1", out Min, out Max, 1);

//Get forces at selected node (Fx,Fy,Fz,Mx,My,Mz are reported on the local or global coordinate system)
((ShellSuperElementTriangular)Model.InputFiniteElements.Find(p => ((ShellSuperElementTriangular)p).Node3.z == 1)).GetInternalForcesForLoadCase(ShellTriangularResultsLocation.Point1, CoordinateSystem.Global, "lc1", out Min, out Max, 1);

Have any questions? Do not hesitate to contact us!

Contact  us ›

2018 - 2024 © Engissol Ltd.- Structural Engineering Software All Rights Reserved. Developed by TotalWeb®
To top