Technical Notes and Examples
Technical Notes and Examples
Contents
Introduction ............................................................................................................................. 4 Basic theoretical background ................................................................................................... 5 Skyline storage scheme ........................................................................................................ 5 Coordinate systems .............................................................................................................. 7 Global system ................................................................................................................... 7 Element local system ........................................................................................................ 7 Node local system ............................................................................................................ 7 Degrees of freedom .............................................................................................................. 9 Load combination ................................................................................................................... 10 Rigid diaphragm constrained .................................................................................................. 11 The frame element ................................................................................................................. 14 Equations in Local Coordinate System ................................................................................ 14 Equations in Global Coordinate System.............................................................................. 15 Frame element end releases .............................................................................................. 19 Unstable End Releases........................................................................................................ 20 Introduction to Dynamic Analysis ........................................................................................... 21 Response Spectrum Analysis .............................................................................................. 23 Example problems for Frame3D library .................................................................................. 24 Example 1: Load case and combination definitions ............................................................ 24 Example 2: Element local coordinate system (skew member) ........................................... 28 Example 3: Node local coordinate system (skew support) ................................................. 31 Example 4: Spring supports ................................................................................................ 33 Example 5: Partial (semi-rigid) member releases ............................................................... 35 Example 6: Rigid offsets...................................................................................................... 39 Example 7: Simple 3D building with rigid floor diaphragms and Response Spectrum Analysis............................................................................................................................... 42 Example 8: Beam under uniform and large axial load (P- effect) ..................................... 50 Example 9: Column under shear and large axial load (P- effect) ...................................... 53
Introduction
The finite element method (FEM) (sometimes referred to as finite element analysis) is a numerical technique for finding approximate solutions of partial differential equations (PDE) as well as of integral equations. The solution approach is based either on eliminating the differential equation completely (steady state problems), or rendering the PDE into an approximating system of ordinary differential equations, which are then numerically integrated using standard techniques such as Euler's method, Runge-Kutta, etc. In solving partial differential equations, the primary challenge is to create an equation that approximates the equation to be studied, but is numerically stable, meaning that errors in the input data and intermediate calculations do not accumulate and cause the resulting output to be meaningless. There are many ways of doing this, all with advantages and disadvantages. The Finite Element Method is a good choice for solving partial differential equations over complex domains (like cars and oil pipelines), when the domain changes (as during a solid state reaction with a moving boundary), when the desired precision varies over the entire domain, or when the solution lacks smoothness. ENGISSOL, as a leader company in finite element programming, has launched many finite element libraries which are continuously enriched by new contemporary arithmetic techniques and optimized in order to come up to any complex engineering simulation. Among these libraries, ENGISSOLs R&D department has created a commercial library which can perform 3D finite element analysis for frames and buildings very easily with great accuracy and reliability. This library has been developed in the modern programming environment of MS Visual Studio 2008 and is compatible with almost every programming interface. The integration of Frame3D to a programming interface can result into a complete, high quality and competitive finite element application. The scope of this paper is to provide theoretical and also practical information about the librarys assumptions, as well as a comprehensive description of the adapted methods and algorithms. Reference to finite element analysis theory will be made if necessary. In any case, the reader is advised to refer to a general finite element book in order to get familiar enough with the philosophy of the finite element method and particularly Frame3D library. Furthermore, reference to the librarys classes, objects, methods etc will be made if needed.
Frame3D library uses this storage technique at all cases where symmetric and positive defined matrices are to be stored, in order to minimize computer memory usage and accelerate the solution speed as much as possible.
Coordinate systems
Three different coordinate systems are available in Frame3D library. The global system and two local ones, the element local and node local system. It has to be noted that these three coordinate systems result into more flexibility and ease in creating the structural model, since data as loads, boundary conditions etc can be defined at the desired system, whereas analysis results are obtained in each corresponding coordinate system.
Global system The global coordinate system remains constant for each element, node and generally the complete model. Element local system For each element (frame etc), a local system is assigned by rotating the global one according to followings: Local x axis is defined from elements starting to its ending node Local y axis is defined by an auxiliary point that lies on the plane that is formed by the local x and y element axes Local z axis is defined as perpendicular to x and y local axes, so that a right hand side coordinate system is formed.
Node local system Generally the local system of a node matches the global system unless otherwise defined. Local system of a node is defined the same way as the element local system. Model data and corresponding coordinate system Nodal loads Node local system
Frame 3D Library Technical Notes & Examples Node local system Node local system Node local system Element local and global system (as specified) Element local system Global system Element local system Global system Global system
Nodal reactions Nodal displacements Prescribed displacements Member loads Member end releases Response spectrum excitation (ground motion direction) Member internal forces and displacements Diaphragm loads Diaphragm displacements
Degrees of freedom
Frame3D library features 6 degrees of freedom per node as indicated below. Each degree of freedom can be fully or partially (by springs) constrained. Furthermore, in case of frame elements, each set of degrees of freedom can be released unless a mechanism is formed. The ability of partial releases is also available in Frame3D.
Load combination
The following load combination types are supported in Frame3D library: Linear Add: All load case results are multiplied by their scale factor and added together. Envelope. A max/min Envelope of the defined load cases is evaluated for each frame output segment and object joint. The load cases that give the maximum and minimum components are used for this combo. Therefore the load Combo holds two values for each output segment and joint. Absolute Add: The absolute of the individual load case results are summed and positive and negative values are automatically produced for each output segment and joint. SRSS: The Square Root Sum of the Squares calculation is performed on the load cases and positive and negative values are automatically produced for each output segment and joint. CQC: The Complete Quadratic Combination is used in case of coupled modes combination. Modes are generally coupled in ordinary building structures so this method is used as an improvement on SRSS.
It should be noted that in case of Modal analysis, only one of the last two combination methods (SRSS, CQC) can be used, since the remaining do not have a meaning when combining dynamic modes.
10
The diaphragm, or the physical floor system in the real structure, can have any number of columns and beams connected to it. At the end of each member, at the diaphragm level, six degrees of freedom exist for a three-dimensional structure before introduction of constraints. Field measurements have verified for a large number of building-type structures that the in plane deformations in the floor systems are small compared to the inter-story horizontal displacements. Hence, it has become common practice to assume that the inplane motion of all points on the floor diaphragm move as a rigid body. Therefore, the inplane displacements of the diaphragm can be expressed in terms of two displacements, (m) ux(m) and uy(m), and a rotation about the z-axis, uz(m). In the case of static loading, the location of the master node (m) can be at any location on the diaphragm. However, for the case of dynamic earthquake loading, the master node must be located at the center of mass of each floor if a diagonal mass matrix is to be used. Frame3D library automatically calculates the location of the master node based on the center of mass of the constraint nodes. As a result of this rigid diaphragm approximation, the following compatibility equations must be satisfied for joints attached to the diaphragm: ux(i) = ux(m) y(i) uz(m) uy(i) = uY(m) + x(i) uz(m) uz(i) = uz(m) Or in matrix form, the displacement transformation is:
11
If displacements are eliminated by the application of constraint equations, the loads associated with those displacements must also be transformed to the master node. From simple statics the loads applied at joint i can be moved to the master node m by the following equilibrium equations: Rx(mi) = Rx(i) Ry(mi) = Ry(i) Rz(mi) = Rz(i) y(i) Rx(i) + x(i) Ry(i) Or in matrix form the load transformation is:
Again, one notes that the force transformation matrix is the transpose of the displacement transformation matrix. The total load applied at the master point will be the sum of the contributions from all slave nodes, or: () =
( ) =
() ()
Now, consider a vertical column connected between joint i at level m and joint j at level m+1, as shown below. Note that the location of the master node can be different for each level.
It is apparent that the displacement transformation matrix for the column is given by
12
Or in symbolic form: D=Bu The displacement transformation matrix is 12 by 14 if the z-rotations are retained as independent displacements. The new 14 by 14 stiffness matrix, with respect to the master and slave reference systems at both levels, is given by: K = BT k B, where k is the initial 12 by 12 global stiffness matrix for the column.
13
The element matrices can be obtained by a similar process of obtaining the matrices of the truss element in space and that of beam elements, and adding them together. Because of the huge matrices involved, the details will not be shown herein, but the stiffness matrix is listed here as follows, and can be easily confirmed simply by inspection:
14
where Iy and Iz are the second moment of area (or moment of inertia) of the cross-section of the beam with respect to the y and z axes, respectively. Note that the fourth DOF is related to the torsional deformation. The development of a torsional element of a bar is very much the same as that for a truss element. The only difference is that the axial deformation is replaced by the torsional angular deformation, and axial force is replaced by torque. Therefore, in the resultant stiffness matrix, the element tensile stiffness AE/l e is replaced by the element torsional stiffness GJ/le, where G is the shear modules and J is the polar moment of inertia of the cross-section of the bar. The mass matrix is also shown as follows:
Where
in which Ix is the second moment of area (or moment of inertia) of the cross-section of the beam with respect to the x axis. 2 =
15
in the x, y and z directions, and three rotational components with respect to the x, y and z axes. They are numbered sequentially by d1d12 corresponding to the physical deformations as defined by Eq. (6.16). The displacement at a global node should also have three translational components in the X, Y and Z directions, and three rotational components with respect to the X, Y and Z axes. They are numbered sequentially by D6 i5,D6i4, . . . , and D6i for the ith node, as shown in Figure below. The same sign convention applies to node j. The coordinate transformation gives the relationship between the displacement vector de based on the local coordinate system and the displacement vector De for the same element but based on the global coordinate system:
de = T De, where
16
in which
where lk, mk and nk (k = x, y, z) are direction cosines defined by lx = cos(x,X), mx = cos(x, Y ), nx = cos(x,Z) ly = cos(y,X), my = cos(y, Y ), ny = cos(y,Z) lz = cos(z,X), mz = cos(z, Y ), nz = cos(z,Z) To define these direction cosines, the position and the three-dimensional orientation of the frame element have to be defined first. With nodes 1 and 2, the location of the element is fixed on the local coordinate frame, and the orientation of the element has also been fixed in the x direction. However, the local coordinate frame can still rotate about the axis of the beam. One more additional point in the local coordinate has to be defined. This point can be chosen anywhere in the local x Y plane, but not on the x-axis. Therefore, node 3 is chosen, as shown in Figure 6.6.The position vectors _ V1, _ V2 and _ V3 can be expressed as
where Xk, Yk and Zk (k = 1, 2, 3) are the coordinates for node k, and , , are unit vectors along X, Y and Z axes. We now define
17
Vectors (2 -1 ) and (3 -1 ) can thus be obtained using above equations as follows: 2 -1 = X21 + Y21 + Z21 3 -1 = X31 + Y31 + Z31 The length of the frame element can be obtained by = 2 = 2 1 =
2 2 2 21 + 21 + 21
= cos , = = = cos , = =
It now can be seen that the direction of z axis can be defined by the cross product of vectors (2 1 ) and (3 1 ). Hence a unit vector along z axis can be expressed as: = (2 1 )x(3 1 ) (2 1 )x(3 1 )
Since y axis is perpendicular to both x axis and z axis, the unit vector along y axis can be obtained by cross product = x Using the transformation matrix, T, the matrices for space frame elements in the global coordinate system can be obtained as: Ke = TT ke T Me = TT me T Fe = TT fe
18
=
=1
If we know a specific value of fn is zero because of a release, the corresponding displacement un can be written as:
1
=
=1
12
= +1
Therefore, by substitution of last equation into the other eleven equilibrium equations, the unknown un can be eliminated and the corresponding row and column set to zero. Or: = + The terms fn = rn0 and the new stiffness and load terms are equal to: = =
This procedure can be repeatedly applied to the element equilibrium equations for all releases. After the other displacements associated with the element have been found from a solution of the global equilibrium equations, the displacements associated with the releases can be calculated from Equation (4.31) in reverse order from the order in which the displacements were eliminated. The repeated application of these simple numerical equations is defined as static condensation or partial Gauss elimination.
19
20
+ + = =
=1
()
All possible types of time-dependent loading, including wind, wave and seismic, can be represented by a sum of J space vectors fj , which are not a function of time, and J time functions g(t)j. For the dynamic solution of arbitrary structural systems, however, the elimination of the massless displacement is, in general, not numerically efficient because the stiffness matrix loses its sparsity. Therefore, Frame3D library does not use static condensation to retain the sparseness of the stiffness matrix. The fundamental mathematical method that is used to solve the equilibrity equations is the separation of variables. This approach assumes the solution can be expressed in the following form: u(t) = Y(t) Where is an Nd by N matrix containing N spatial vectors that are not a function of time, and Y(t) is a vector containing N functions of time. Before solution, we require that the space functions satisfy the following mass and stiffness orthogonality conditions: = =2 where I is a diagonal unit matrix and 2 is a diagonal matrix in which the diagonal terms are n2 .The term n has the units of radians per second and may or may not be a free vibration frequencies. It should be noted that the fundamentals of mathematics place no restrictions on those vectors, other than the orthogonality properties. Each space function vector, n, is always normalized so that the Generalized Mass is equal to one, or nT M n = 1.0. The above equations yield to:
+ +
=
=1
()
where pj = T fj are defined as the modal participation factors for load function j. The term pnj is associated with the nth mode. Note that there is one set of N modal participation factors for each spatial load condition fj . For all real structures, the N by N matrix d is not diagonal; however, to uncouple the modal equations, it is necessary to assume classical
21
damping where there is no coupling between modes. Therefore, the diagonal terms of the modal damping are defined by: dnn = 2 n n where n is defined as the ratio of the damping in mode n to the critical damping of the model. A typical uncoupled modal equation for linear structural systems is of the following form:
+ 2
=
=1
()
+ 2
+ 2
= () + () + ()
where the three-directional modal participation factors, or in this case earthquake excitation factors, are defined by p nj = -nT Mj in which j is equal to x, y or z and n is the mode number.
22
23
//New model definition Model Model = new Model(); //-------MATERIAL DEFINITION------//Create a new material for concrete Material matConcrete = new Material(); matConcrete.Name = "Concrete";//Material name matConcrete.Density = 2.5e-3;//density in mass units/m3, for example tn/m3 matConcrete.G = 11538461;//shear modulus matConcrete.E = 30000000;//elasticity modulus //-------SECTIONS DEFINITION------//Create a new beam section of dimensions 40cmx80xm FrameElementSection secBeam40_80 = new FrameElementSection(); secBeam40_80.Name = "Beam40/80";//section name secBeam40_80.A = 0.4 * 0.8;//section area secBeam40_80.Iy = 0.4 * 0.8 * 0.8 * 0.8 / 12;//inertia moment about local y axis secBeam40_80.Iz = 0.8 * 0.4 * 0.4 * 0.4 / 12;//inertia moment about local z axis secBeam40_80.It = 0.0117248;//torsional constant secBeam40_80.h = 0.80;//section height //-------MODEL GEOMETRY AND LOADS DEFINITION------//Create node n1 Frame3D.SuperNode n1 = new Frame3D.SuperNode(1, 0, 0, 0);
24
n1.dof1constraint = true;//delete n1.dof2constraint = true;//translational constraint in at local system of node n1.dof3constraint = true;//translational constraint in at local system of node n1.dof4constraint = true;//rotational constraint in at local system of node n1.dof5constraint = true;//rotational constraint in at local system of node Model.InputNodes.Add(n1); //Create node n2 Frame3D.SuperNode n2 = new Frame3D.SuperNode(2, 5, 0, 0); n2.dof1constraint = true;//translational constraint in at local system of node n2.dof2constraint = true;//translational constraint in at local system of node n2.dof3constraint = true;//translational constraint in at local system of node n2.dof4constraint = true;//rotational constraint in at local system of node n2.dof5constraint = true;//rotational constraint in at local system of node Model.InputNodes.Add(n2);
//Create frame element 1 //Note that the 4th argument specifies the auxiliary point that lies in the xy plane that is formed by the x and y axes in the local element system FrameSuperElement el1 = new FrameSuperElement(1, n1, n2, new Geometry.XYZ(0, 0, 1), matConcrete, secBeam40_80, new MemberReleases(), new MemberReleases(), false, false, 0, 0); LinearLoadCaseForSuperFrameElement lc1 = new LinearLoadCaseForSuperFrameElement("lc1", LoadCaseType.DEAD); lc1.UniformLoad.UniformLoadsY.Add(new SuperUniformLoad(0, 1, -10, -10, LoadDefinitionFromStartingNode.Relatively, LoadCordinateSystem.Global)); lc1.PointLoad.PointLoadsY.Add(new SuperPointLoad(3.5, 50, LoadDefinitionFromStartingNode.Absolutely, LoadCordinateSystem.Global)); el1.LinearLoadCasesList.Add(lc1); LinearLoadCaseForSuperFrameElement lc2 = new LinearLoadCaseForSuperFrameElement("lc2", LoadCaseType.LIVE); lc2.UniformLoad.UniformLoadsY.Add(new SuperUniformLoad(0, 1, -5, -5, LoadDefinitionFromStartingNode.Relatively, LoadCordinateSystem.Global)); el1.LinearLoadCasesList.Add(lc2); LinearLoadCaseForSuperFrameElement lc3 = new LinearLoadCaseForSuperFrameElement("lc3", LoadCaseType.LIVE); lc3.UniformLoad.UniformLoadsY.Add(new SuperUniformLoad(0, 1, -1, -1, LoadDefinitionFromStartingNode.Relatively, LoadCordinateSystem.Global)); el1.LinearLoadCasesList.Add(lc3); Model.InputFiniteElements.Add(el1); //-------SOLUTION PHASE-------
25
Model.Solve(); //-------OBTAIN RESULTS------double[] Min, Max;//The combination results will be saved in these arrays //Note that the definition of two arrays for minimum and maximum combination results is required //For combination type "ADD", Min and Max values are always equal //Reactions (All are defined in the node local system) //Rections for load case lc1 n1.GetReactionsForLoadCase("lc1", out Min, out Max, 0); double n1_Rty_lc1 = Max[1]; n2.GetReactionsForLoadCase("lc1", out Min, out Max, 0); double n2_Rty_lc1 = Max[1]; //Rections for load case lc2 n1.GetReactionsForLoadCase("lc2", out Min, out Max, 0); double n1_Rty_lc2 = Max[1]; n2.GetReactionsForLoadCase("lc2", out Min, out Max, 0); double n2_Rty_lc2 = Max[1]; //Rections for load case lc13 n1.GetReactionsForLoadCase("lc3", out Min, out Max, 0); double n1_Rty_lc3 = Max[1]; n2.GetReactionsForLoadCase("lc3", out Min, out Max, 0); double n2_Rty_lc3 = Max[1]; //Node Displacements (All are defined in the node local system) //Note that constained degrees of freedom have zero displacements n1.GetNodalDisplacementsForLoadCase("lc1", out Min, out Max, 0); double[] n1_Disp = Max; n2.GetNodalDisplacementsForLoadCase("lc1", out Min, out Max, 0); double[] n2_Disp = Max; //Element internal forces and displacements el1.GetInternalForcesForLoadCase(0, "lc1", out Min, out Max, 0); //Internal forces at the start of the member double[] forces_along_member_left = Max; el1.GetInternalForcesForLoadCase(2.5, "lc1", out Min, out Max, 0);//Internal forces at the middle of the member double[] forces_along_member_middle = Max; el1.GetInternalForcesForLoadCase(5, "lc1", out Min, out Max, 0);//Internal forces at the end of the member double[] forces_along_member_right = Max; el1.GetDisplacementsForLoadCase(0, "lc1", out Min, out Max, 0); //Internal displacements at the start of the member double[] disps_along_member_left = Max; el1.GetDisplacementsForLoadCase(2.5, "lc1", out Min, out Max, 0);//Internal displacements at the middle of the member double[] disps_along_member_middle = Max;
26
el1.GetDisplacementsForLoadCase(5, "lc1", out Min, out Max, 0);//Internal displacements at the end of the member double[] disps_along_member_right = Max; //Creation of a load combination //Note that load combinations can also be defined after analysis has been completed //A load combination for 2.00 lc1 - 0.5 lc2 is created, as follows: LoadCombination LCombo = new LoadCombination("combination", ComboType.ADD); LCombo.InputLoadCasesWithFactorOrCombos.Add(new LoadCaseWithFactor("lc1", 2)); LCombo.InputLoadCasesWithFactorOrCombos.Add(new LoadCaseWithFactor("lc2", -0.5)); //All result data can be now obtained for the combination in the same way as for the load cases //for example, get first node reactions: n1.GetReactionsForLoadCombination(LCombo, out Min, out Max, 0);//step number is only needed in time history analysis, so we can here use 0
27
//New model definition Model Model = new Model(); //-------MATERIAL DEFINITION------//Create a new material for concrete Material matConcrete = new Material(); matConcrete.Name = "Concrete";//Material name matConcrete.Density = 2.5e-3;//density in mass units/m3, for example tn/m3 matConcrete.G = 11538461;//shear modulus matConcrete.E = 30000000;//elasticity modulus //-------SECTIONS DEFINITION------//Create a new beam section of dimensions 40cmx80xm FrameElementSection secBeam40_80 = new FrameElementSection(); secBeam40_80.Name = "Beam40/80";//section name secBeam40_80.A = 0.4 * 0.8;//section area secBeam40_80.Iy = 0.4 * 0.8 * 0.8 * 0.8 / 12;//inertia moment about local y axis secBeam40_80.Iz = 0.8 * 0.4 * 0.4 * 0.4 / 12;//inertia moment about local z axis secBeam40_80.It = 0.0117248;//torsional constant secBeam40_80.h = 0.80;//section height //-------MODEL GEOMETRY AND LOADS DEFINITION------//Create node n1 Frame3D.SuperNode n1 = new Frame3D.SuperNode(1, 0, 0, 0); n1.dof2constraint = true;//translational constraint in at local system of node n1.dof3constraint = true;//translational constraint in at local system of node n1.dof4constraint = true;//rotational constraint in at local system of node n1.dof5constraint = true;//rotational constraint in at local system of node Model.InputNodes.Add(n1); //Create node n2
28
Frame3D.SuperNode n2 = new Frame3D.SuperNode(2, 5, 0, 0); n2.dof1constraint = true;//translational constraint in at local system of node n2.dof2constraint = true;//translational constraint in at local system of node n2.dof3constraint = true;//translational constraint in at local system of node n2.dof4constraint = true;//rotational constraint in at local system of node n2.dof5constraint = true;//rotational constraint in at local system of node Model.InputNodes.Add(n2);
//Create frame element 1 //Note the definition of the auxiliary point: Geometry.XYZ(0, Math.Tan(30/180*Math.PI), 1) //It shows that the frame will be inserted properly (rotated about its longitudinal axis) FrameSuperElement el1 = new FrameSuperElement(1, n1, n2, new Geometry.XYZ(0, Math.Tan(30.0 / 180 * Math.PI), 1), matConcrete, secBeam40_80, new MemberReleases(), new MemberReleases(), false, false, 0, 0); LinearLoadCaseForSuperFrameElement lc1 = new LinearLoadCaseForSuperFrameElement("lc1", LoadCaseType.DEAD); lc1.UniformLoad.UniformLoadsY.Add(new SuperUniformLoad(0, 1, -10, -10, LoadDefinitionFromStartingNode.Relatively, LoadCordinateSystem.Global)); el1.LinearLoadCasesList.Add(lc1); Model.InputFiniteElements.Add(el1); //-------SOLUTION PHASE------Model.Solve(); //-------OBTAIN RESULTS------double[] Min, Max; //Reactions //Rections for load case lc1 n1.GetReactionsForLoadCase("lc1", out Min,out Max, 0); double[] n1_R_lc1 = Max; n2.GetReactionsForLoadCase("lc1", out Min,out Max, 0); double[] n2_R_lc1 =Max; //Note that element forces are now different, shear force acts on both y and z directions in element local system el1.GetInternalForcesForLoadCase(0, "lc1", out Min,out Max,0);//Internal forces at the start of the member double[] forces_along_member_left = Max; el1.GetInternalForcesForLoadCase(2.5, "lc1", out Min,out Max,0);//Internal forces at the middle of the member double[] forces_along_member_middle =Max; el1.GetInternalForcesForLoadCase(5, "lc1", out Min, out Max, 0);//Internal forces at the end of the member double[] forces_along_member_right = Max;
29
el1.GetDisplacementsForLoadCase(0, "lc1", out Min, out Max, 0);//Internal displacements at the start of the member double[] disps_along_member_left = Max; el1.GetDisplacementsForLoadCase(2.5, "lc1", out Min, out Max, 0);//Internal displacements at the middle of the member double[] disps_along_member_middle = Max; el1.GetDisplacementsForLoadCase(5, "lc1", out Min, out Max, 0);//Internal displacements at the end of the member double[] disps_along_member_right = Max;
30
//New model definition Model Model = new Model(); //-------MATERIAL DEFINITION------//Create a new material for concrete Material matConcrete = new Material(); matConcrete.Name = "Concrete";//Material name matConcrete.Density = 2.5e-3;//density in mass units/m3, for example tn/m3 matConcrete.G = 11538461;//shear modulus matConcrete.E = 30000000;//elasticity modulus //-------SECTIONS DEFINITION------//Create a new beam section of dimensions 40cmx80xm FrameElementSection secBeam40_80 = new FrameElementSection(); secBeam40_80.Name = "Beam40/80";//section name secBeam40_80.A = 0.4 * 0.8;//section area secBeam40_80.Iy = 0.4 * 0.8 * 0.8 * 0.8 / 12;//inertia moment about local y axis secBeam40_80.Iz = 0.8 * 0.4 * 0.4 * 0.4 / 12;//inertia moment about local z axis secBeam40_80.It = 0.0117248;//torsional constant secBeam40_80.h = 0.80;//section height //-------MODEL GEOMETRY AND LOADS DEFINITION------//Create node n1, the local coordinate system of the node is assigned, which means that it is different from the default global system. //In order to define the new system, a new LocalCoordinateSystem is passed in the corresponding constructor of SuperNode object //The first two point of this constructor define the local x axis of the node system and the third one defines the coordinates of an auxiliary //point that lies in local XY plane Frame3D.SuperNode n1 = new Frame3D.SuperNode(1, 0, 0, 0, new LocalCoordinateSystem(new Geometry.XYZ(0, 0, 0), new
31
Geometry.XYZ(1, Math.Tan(-Math.PI / 6), 0), new Geometry.XYZ(1, Math.Tan(60.0 / 180 * Math.PI), 0))); n1.dof2constraint = true;//translational constraint in direction y at local system (which was defined previously) of node n1.dof3constraint = true;//translational constraint in direction z at local system of node n1.dof4constraint = true;//rotational constraint in direction x at local system of node n1.dof5constraint = true;//rotational constraint in direction y at local system of node Model.InputNodes.Add(n1); //Create node n2 Frame3D.SuperNode n2 = new Frame3D.SuperNode(2, 5, 0, 0); n2.dof1constraint = true;//translational constraint in at local system of node n2.dof2constraint = true;//translational constraint in at local system of node n2.dof3constraint = true;//translational constraint in at local system of node n2.dof4constraint = true;//rotational constraint in at local system of node n2.dof5constraint = true;//rotational constraint in at local system of node Model.InputNodes.Add(n2);
//Create frame element 1 FrameSuperElement el1 = new FrameSuperElement(1, n1, n2, new Geometry.XYZ(0, 0, 1), matConcrete, secBeam40_80, new MemberReleases(), new MemberReleases(), false, false, 0, 0); LinearLoadCaseForSuperFrameElement lc1 = new LinearLoadCaseForSuperFrameElement("lc1", LoadCaseType.DEAD); lc1.UniformLoad.UniformLoadsY.Add(new SuperUniformLoad(0, 1, -10, -10, LoadDefinitionFromStartingNode.Relatively, LoadCordinateSystem.Global)); el1.LinearLoadCasesList.Add(lc1); Model.InputFiniteElements.Add(el1); //-------SOLUTION PHASE------Model.Solve(); //-------OBTAIN RESULTS------double[] Min, Max; //Support reactions (Note that they are defined in the node local system) n1.GetReactionsForLoadCase("lc1",out Min,out Max,0); double n1_Rty_lc1 = Max[1]; n2.GetReactionsForLoadCase("lc1", out Min, out Max, 0);//Axial force is acting on the element because of the skew support at node 1 double n2_Rtx_lc1 = Max[0]; n2.GetReactionsForLoadCase("lc1", out Min, out Max, 0); double n2_Rty_lc1 =Max[1];
32
//New model definition Model Model = new Model(); //-------MATERIAL DEFINITION------//Create a new material for concrete Material matConcrete = new Material(); matConcrete.Name = "Concrete";//Material name matConcrete.Density = 2.5e-3;//density in mass units/m3, for example tn/m3 matConcrete.G = 11538461;//shear modulus matConcrete.E = 30000000;//elasticity modulus //-------SECTIONS DEFINITION------//Create a new beam section of dimensions 40cmx80xm FrameElementSection secBeam40_80 = new FrameElementSection(); secBeam40_80.Name = "Beam40/80";//section name secBeam40_80.A = 0.4 * 0.8;//section area secBeam40_80.Iy = 0.4 * 0.8 * 0.8 * 0.8 / 12;//inertia moment about local y axis secBeam40_80.Iz = 0.8 * 0.4 * 0.4 * 0.4 / 12;//inertia moment about local z axis secBeam40_80.It = 0.0117248;//torsional constant secBeam40_80.h = 0.80;//section height //-------MODEL GEOMETRY AND LOADS DEFINITION------//Create node n1 Frame3D.SuperNode n1 = new Frame3D.SuperNode(1, 0, 0, 0); n1.dof3constraint = true;//translational constraint in direction z at local system of node n1.dof4constraint = true;//rotational constraint in direction x at local system of node n1.dof5constraint = true;//rotational constraint in direction y at local system of node n1.Kdof2 = 5000;//Translational spring constant of partial support at y direction of local node system (units: force/length, for example kN/m)
33
n1.Kdof6 = 30000;//Rotational spring constant of partial support about z direction of local node system (units: moment/rotation, for example kNm/rad) Model.InputNodes.Add(n1); //Create node n2 Frame3D.SuperNode n2 = new Frame3D.SuperNode(2, 5, 0, 0); n2.dof1constraint = true;//translational constraint in at local system of node n2.dof2constraint = true;//translational constraint in at local system of node n2.dof3constraint = true;//translational constraint in at local system of node n2.dof4constraint = true;//rotational constraint in at local system of node n2.dof5constraint = true;//rotational constraint in at local system of node n2.dof6constraint = true;//rotational constraint in at local system of node Model.InputNodes.Add(n2);
//Create frame element 1 FrameSuperElement el1 = new FrameSuperElement(1, n1, n2, new Geometry.XYZ(0, 0, 1), matConcrete, secBeam40_80, new MemberReleases(), new MemberReleases(), false, false, 0, 0); LinearLoadCaseForSuperFrameElement lc1 = new LinearLoadCaseForSuperFrameElement("lc1", LoadCaseType.DEAD); lc1.UniformLoad.UniformLoadsY.Add(new SuperUniformLoad(0, 1, -10, -10, LoadDefinitionFromStartingNode.Relatively, LoadCordinateSystem.Global)); el1.LinearLoadCasesList.Add(lc1); Model.InputFiniteElements.Add(el1); //-------SOLUTION PHASE------Model.Solve(); //-------OBTAIN RESULTS------double[] Min, Max; //Spring reactions can be obtained from the corresponding Method, as follows //Spring reactions, as node reactions, as reported in the node local system n1.GetSpringReactionsForLoadCase("lc1",out Min,out Max,0); double n1_Rty_lc1 =Max[1]; n1.GetSpringReactionsForLoadCase("lc1", out Min, out Max, 0); double n1_Rrz_lc1 = Max[5]; n2.GetReactionsForLoadCase("lc1", out Min, out Max, 0); double n2_Rty_lc1 = Max[1]; n2.GetReactionsForLoadCase("lc1", out Min, out Max, 0); double n2_Rzz_lc1 = Max[5];
34
//New model definition Model Model = new Model(); //-------MATERIAL DEFINITION------//Create a new material for concrete Material matConcrete = new Material(); matConcrete.Name = "Concrete";//Material name matConcrete.Density = 2.5e-3;//density in mass units/m3, for example tn/m3 matConcrete.G = 11538461;//shear modulus matConcrete.E = 30000000;//elasticity modulus //-------SECTIONS DEFINITION------//Create a new beam section of dimensions 30cmx70xm FrameElementSection secBeam30_70 = new FrameElementSection(); secBeam30_70.Name = "Beam30/70";//section name secBeam30_70.A = 0.3 * 0.7;//section area secBeam30_70.Iy = 0.3 * 0.7 * 0.7 * 0.7 / 12;//inertia moment about local y axis secBeam30_70.Iz = 0.8 * 0.3 * 0.3 * 0.3 / 12;//inertia moment about local z axis secBeam30_70.It = 4.347e-3;//torsional constant secBeam30_70.h = 0.70;//section height
35
//Create a new beam section of dimensions 50cmx50xm FrameElementSection secColumn50_50 = new FrameElementSection(); secColumn50_50.Name = "Column50/50"; //section name secColumn50_50.A = 0.5 * 0.5;//section area secColumn50_50.Iy = 0.5 * 0.5 * 0.5 * 0.5 / 12;//inertia moment about local y axis secColumn50_50.Iz = 0.5 * 0.5 * 0.5 * 0.5 / 12;//inertia moment about local z axis secColumn50_50.It = 8.8125e-3; secColumn50_50.h = 0.50;//section height //-------MODEL GEOMETRY AND LOADS DEFINITION------//Create node n1 Frame3D.SuperNode n1 = new Frame3D.SuperNode(1, 0, 0, 0); n1.dof1constraint = true;//translational constraint in at local system of node n1.dof2constraint = true;//translational constraint in at local system of node n1.dof3constraint = true;//translational constraint in at local system of node n1.dof4constraint = true;//rotational constraint in at local system of node n1.dof5constraint = true;//rotational constraint in at local system of node n1.dof6constraint = true;//rotational constraint in at local system of node Model.InputNodes.Add(n1); //Create node n2 Frame3D.SuperNode n2 = new Frame3D.SuperNode(2, 0, 4, 0); Model.InputNodes.Add(n2); //Create node n3 Frame3D.SuperNode n3 = new Frame3D.SuperNode(3, 5, 4, 0); Model.InputNodes.Add(n3); //Create node n4 Frame3D.SuperNode n4 = new Frame3D.SuperNode(4, 5, 0, 0); n4.dof1constraint = true;//translational constraint in at local system of node n4.dof2constraint = true;//translational constraint in at local system of node n4.dof3constraint = true;//translational constraint in at local system of node n4.dof4constraint = true;//rotational constraint in at local system of node n4.dof5constraint = true;//rotational constraint in at local system of node n4.dof6constraint = true;//rotational constraint in at local system of node Model.InputNodes.Add(n4);
//Create frame element 1 FrameSuperElement el1 = new FrameSuperElement(1, n1, n2, new Geometry.XYZ(0, 0, 1), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el1);
36
//Create a MemberRelases object. Release are defined in element local coordinate system. MemberReleases PartialRelease = new MemberReleases(); PartialRelease.Name = "Partial bending release";//Name of the object PartialRelease.rz = true;//Release the rotational degree of freedom about z axis (in element local coordinate system) PartialRelease.krz = 10000;//Assign a spring stiffness (units in moment/rotations, for example kNm/rad) //Note that the corresponding degree of freedom should be first released in order to define afterwards a partial stiffness constant //In case of full release we should have given PartialRelease.krz = 0; //Create frame element 2. Note that the proper release object (Partial Releases is passed in the constructor) FrameSuperElement el2 = new FrameSuperElement(2, n2, n3, new Geometry.XYZ(0, 4, 1), matConcrete, secBeam30_70, PartialRelease, PartialRelease, false, false, 0, 0); LinearLoadCaseForSuperFrameElement lc1 = new LinearLoadCaseForSuperFrameElement("lc1", LoadCaseType.DEAD); lc1.UniformLoad.UniformLoadsY.Add(new SuperUniformLoad(0, 1, -10, -10, LoadDefinitionFromStartingNode.Relatively, LoadCordinateSystem.Global)); el2.LinearLoadCasesList.Add(lc1); Model.InputFiniteElements.Add(el2); //Create frame element 3 FrameSuperElement el3 = new FrameSuperElement(3, n4, n3, new Geometry.XYZ(5, 0, 1), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el3); //-------SOLUTION PHASE------Model.Solve(); //-------OBTAIN RESULTS------double[] Min, Max; //Support reactions n1.GetReactionsForLoadCase("lc1", double n1_Rtx_lc1 =Max[0]; n1.GetReactionsForLoadCase("lc1", double n1_Rty_lc1 = Max[1]; n4.GetReactionsForLoadCase("lc1", double n4_Rtx_lc1 = Max[0]; n4.GetReactionsForLoadCase("lc1", double n4_Rty_lc1 = Max[1]; out Min, out Max, 0); out Min, out Max, 0); out Min, out Max, 0); out Min, out Max, 0);
//Rotations at nodes 2 and 3 (in local node system) n2.GetNodalDisplacementsForLoadCase("lc1", out Min, out Max, 0);//negative rotation double n2_Rrz_lc1 = Max[5];//negative rotation n3.GetNodalDisplacementsForLoadCase("lc1", out Min, out Max, 0);//the same rotation, but positive
37
38
//New model definition Model Model = new Model(); //-------MATERIAL DEFINITION------//Create a new material for concrete Material matConcrete = new Material(); matConcrete.Name = "Concrete";//Material name matConcrete.Density = 2.5e-3;//density in mass units/m3, for example tn/m3 matConcrete.G = 11538461;//shear modulus matConcrete.E = 30000000;//elasticity modulus //-------SECTIONS DEFINITION------//Create a new beam section of dimensions 30cmx70xm FrameElementSection secBeam30_70 = new FrameElementSection(); secBeam30_70.Name = "Beam30/70";//section name secBeam30_70.A = 0.3 * 0.7;//section area secBeam30_70.Iy = 0.3 * 0.7 * 0.7 * 0.7 / 12;//inertia moment about local y axis secBeam30_70.Iz = 0.8 * 0.3 * 0.3 * 0.3 / 12;//inertia moment about local z axis secBeam30_70.It = 4.347e-3;//torsional constant
39
secBeam30_70.h = 0.70;//section height //Create a new beam section of dimensions 50cmx50xm FrameElementSection secColumn50_50 = new FrameElementSection(); secColumn50_50.Name = "Column50/50"; //section name secColumn50_50.A = 0.5 * 0.5;//section area secColumn50_50.Iy = 0.5 * 0.5 * 0.5 * 0.5 / 12;//inertia moment about local y axis secColumn50_50.Iz = 0.5 * 0.5 * 0.5 * 0.5 / 12;//inertia moment about local z axis secColumn50_50.It = 8.8125e-3; secColumn50_50.h = 0.50;//section height //-------MODEL GEOMETRY AND LOADS DEFINITION------//Create node n1 Frame3D.SuperNode n1 = new Frame3D.SuperNode(1, 0, 0, 0); n1.dof1constraint = true;//translational constraint in at local system of node n1.dof2constraint = true;//translational constraint in at local system of node n1.dof3constraint = true;//translational constraint in at local system of node n1.dof4constraint = true;//rotational constraint in at local system of node n1.dof5constraint = true;//rotational constraint in at local system of node n1.dof6constraint = true;//rotational constraint in at local system of node Model.InputNodes.Add(n1); //Create node n2 Frame3D.SuperNode n2 = new Frame3D.SuperNode(2, 0, 4, 0); Model.InputNodes.Add(n2); //Create node n3 Frame3D.SuperNode n3 = new Frame3D.SuperNode(3, 5, 4, 0); Model.InputNodes.Add(n3); //Create node n4 Frame3D.SuperNode n4 = new Frame3D.SuperNode(4, 5, 0, 0); n4.dof1constraint = true;//translational constraint in at local system of node n4.dof2constraint = true;//translational constraint in at local system of node n4.dof3constraint = true;//translational constraint in at local system of node n4.dof4constraint = true;//rotational constraint in at local system of node n4.dof5constraint = true;//rotational constraint in at local system of node n4.dof6constraint = true;//rotational constraint in at local system of node Model.InputNodes.Add(n4);
//Create frame element 1 FrameSuperElement el1 = new FrameSuperElement(1, n1, n2, new Geometry.XYZ(0, 0, 1), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); el1.RigidOffsetEndDx = 0.35;
40
Model.InputFiniteElements.Add(el1); //Create frame element 2. Note that the proper release object (Partial Releases is passed in the constructor) FrameSuperElement el2 = new FrameSuperElement(2, n2, n3, new Geometry.XYZ(0, 4, 1), matConcrete, secBeam30_70, new MemberReleases(), new MemberReleases(), false, false, 0, 0); el2.RigidOffsetStartDx = 0.25; el2.RigidOffsetEndDx = 0.25; LinearLoadCaseForSuperFrameElement lc1 = new LinearLoadCaseForSuperFrameElement("lc1", LoadCaseType.DEAD); lc1.UniformLoad.UniformLoadsY.Add(new SuperUniformLoad(0, 1, -10, -10, LoadDefinitionFromStartingNode.Relatively, LoadCordinateSystem.Global)); el2.LinearLoadCasesList.Add(lc1); Model.InputFiniteElements.Add(el2); //Create frame element 3 FrameSuperElement el3 = new FrameSuperElement(3, n4, n3, new Geometry.XYZ(5, 0, 1), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); el3.RigidOffsetEndDx = 0.35; Model.InputFiniteElements.Add(el3); //-------SOLUTION PHASE------Model.Solve(); //-------OBTAIN RESULTS------double[] Min, Max; //Support reactions n1.GetReactionsForLoadCase("lc1",out Min,out Max,0); double n1_Rtx_lc1 = Max[0]; n1.GetReactionsForLoadCase("lc1", out Min, out Max, 0); double n1_Rty_lc1 = Max[1]; n4.GetReactionsForLoadCase("lc1", out Min, out Max, 0); double n4_Rtx_lc1 = Max[0]; n4.GetReactionsForLoadCase("lc1", out Min, out Max, 0); double n4_Rty_lc1 = Max[1]; //Rotations at nodes 2 and 3 (in local node system) n2.GetNodalDisplacementsForLoadCase("lc1", out Min, out Max, 0); //negative rotation double n2_Rrz_lc1 = Max[5];//negative rotation n3.GetNodalDisplacementsForLoadCase("lc1", out Min, out Max, 0); ;//the same rotation, but positive double n3_Rrz_lc1 = Max[5];//the same rotation, but positive
41
Example 7: Simple 3D building with rigid floor diaphragms and Response Spectrum Analysis
42
//New model definition Model Model = new Model(); //-------MATERIAL DEFINITION------//Create a new material for concrete Material matConcrete = new Material(); matConcrete.Name = "Concrete";//Material name matConcrete.Density = 2.5e-3;//density in mass units/m3, for example tn/m3 matConcrete.G = 11538461;//shear modulus matConcrete.E = 30000000;//elasticity modulus //-------SECTIONS DEFINITION------//Create a new beam section of dimensions 30cmx70xm FrameElementSection secBeam30_70 = new FrameElementSection(); secBeam30_70.Name = "Beam30/70";//section name secBeam30_70.A = 0.3 * 0.7;//section area secBeam30_70.Iy = 0.3 * 0.7 * 0.7 * 0.7 / 12;//inertia moment about local y axis secBeam30_70.Iz = 0.8 * 0.3 * 0.3 * 0.3 / 12;//inertia moment about local z axis secBeam30_70.It = 4.347e-3;//torsional constant secBeam30_70.h = 0.70;//section height //Create a new beam section of dimensions 50cmx50xm FrameElementSection secColumn50_50 = new FrameElementSection(); secColumn50_50.Name = "Column50/50"; //section name secColumn50_50.A = 0.5 * 0.5;//section area secColumn50_50.Iy = 0.5 * 0.5 * 0.5 * 0.5 / 12;//inertia moment about local y axis secColumn50_50.Iz = 0.5 * 0.5 * 0.5 * 0.5 / 12;//inertia moment about local z axis secColumn50_50.It = 8.8125e-3; secColumn50_50.h = 0.50;//section height //-------MODEL GEOMETRY AND LOADS DEFINITION------//Create node n1 Frame3D.SuperNode n1 = new Frame3D.SuperNode(1, 0, 0, 0); n1.dof1constraint = true;//translational constraint in at local system of node n1.dof2constraint = true;//translational constraint in at local system of node n1.dof3constraint = true;//translational constraint in at local system of node n1.dof4constraint = true;//rotational constraint in at local system of node n1.dof5constraint = true;//rotational constraint in at local system of node n1.dof6constraint = true;//rotational constraint in at local system of node Model.InputNodes.Add(n1);
//Create node n2 Frame3D.SuperNode n2 = new Frame3D.SuperNode(2, 5, 0, 0); n2.dof1constraint = true;//translational constraint in direction x at local system of node
43
n2.dof2constraint = true;//translational constraint in direction y at local system of node n2.dof3constraint = true;//translational constraint in direction z at local system of node n2.dof4constraint = true;//rotational constraint in direction x at local system of node n2.dof5constraint = true;//rotational constraint in direction y at local system of node n2.dof6constraint = true;//rotational constraint in direction z at local system of node Model.InputNodes.Add(n2); //Create node n3 Frame3D.SuperNode n3 = new Frame3D.SuperNode(3, 0, 6, 0); n3.dof1constraint = true;//translational constraint in at local system of node n3.dof2constraint = true;//translational constraint in at local system of node n3.dof3constraint = true;//translational constraint in at local system of node n3.dof4constraint = true;//rotational constraint in at local system of node n3.dof5constraint = true;//rotational constraint in at local system of node n3.dof6constraint = true;//rotational constraint in at local system of node Model.InputNodes.Add(n3); //Create node n4 Frame3D.SuperNode n4 = new Frame3D.SuperNode(4, 5, 6, 0); n4.dof1constraint = true;//translational constraint in at local system of node n4.dof2constraint = true;//translational constraint in at local system of node n4.dof3constraint = true;//translational constraint in at local system of node n4.dof4constraint = true;//rotational constraint in at local system of node n4.dof5constraint = true;//rotational constraint in at local system of node n4.dof6constraint = true;//rotational constraint in at local system of node Model.InputNodes.Add(n4); //Create node n5 Frame3D.SuperNode n5 = new Frame3D.SuperNode(5, 0, 0, 3); Model.InputNodes.Add(n5); //Create node n6 Frame3D.SuperNode n6 = new Frame3D.SuperNode(6, 5, 0, 3); Model.InputNodes.Add(n6); //Create node n7 Frame3D.SuperNode n7 = new Frame3D.SuperNode(7, 0, 6, 3); Model.InputNodes.Add(n7); //Create node n8 Frame3D.SuperNode n8 = new Frame3D.SuperNode(8, 5, 6, 3); Model.InputNodes.Add(n8); //Create node n9
44
Frame3D.SuperNode n9 = new Frame3D.SuperNode(9, 0, 0, 6); Model.InputNodes.Add(n9); //Create node n10 Frame3D.SuperNode n10 = new Frame3D.SuperNode(10, 5, 0, 6); Model.InputNodes.Add(n10); //Create node n11 Frame3D.SuperNode n11 = new Frame3D.SuperNode(11, 0, 6, 6); Model.InputNodes.Add(n11); //Create node n12 Frame3D.SuperNode n12 = new Frame3D.SuperNode(12, 5, 6, 6); Model.InputNodes.Add(n12); //Create frame elements (Note the definition of the auxiliary point which is different for each frame in order to correclty place it //It is reminded that auxiliary point is only only used to define the rotation of the frame element about its longitudinal axis //This point should not belong to the longitudinal axis of the element. In such case, arithmetic errors would occur. //Create first story columns FrameSuperElement el1 = new FrameSuperElement(1, new Geometry.XYZ(0, 1, 0), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el1); FrameSuperElement el2 = new FrameSuperElement(2, new Geometry.XYZ(5, 1, 0), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el2); FrameSuperElement el3 = new FrameSuperElement(3, new Geometry.XYZ(5, 7, 0), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el3); FrameSuperElement el4 = new FrameSuperElement(4, new Geometry.XYZ(0, 7, 0), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el4); //Create first story beams FrameSuperElement el5 = new FrameSuperElement(5, n5, n6, new Geometry.XYZ(0, 1, 3), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el5); FrameSuperElement el6 = new FrameSuperElement(6, n6, n8, new Geometry.XYZ(4, 0, 3), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el6); n1, n5,
n2, n6,
n4, n8,
n3, n7,
45
FrameSuperElement el7 = new FrameSuperElement(7, n7, n8, new Geometry.XYZ(0, 7, 3), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el7); FrameSuperElement el8 = new FrameSuperElement(8, n5, n7, new Geometry.XYZ(-1, 0, 3), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el8); //Create second story columns FrameSuperElement el13 = new FrameSuperElement(13, n9, n10, new Geometry.XYZ(0, 1, 3), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el13); FrameSuperElement el14 = new FrameSuperElement(14, n10, n12, new Geometry.XYZ(4, 0, 3), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el14); FrameSuperElement el15 = new FrameSuperElement(15, n11, n12, new Geometry.XYZ(0, 7, 3), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el15); FrameSuperElement el16 = new FrameSuperElement(16, n9, n11, new Geometry.XYZ(-1, 0, 3), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el16); //Create second story beams FrameSuperElement el9 = new FrameSuperElement(9, n5, n9, new Geometry.XYZ(0, 1, 3), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el9); FrameSuperElement el10 = new FrameSuperElement(10, n6, n10, new Geometry.XYZ(5, 1, 3), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el10); FrameSuperElement el11 = new FrameSuperElement(11, n8, n12, new Geometry.XYZ(5, 7, 3), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el11); FrameSuperElement el12 = new FrameSuperElement(12, n7, n11, new Geometry.XYZ(0, 7, 3), matConcrete, secColumn50_50, new MemberReleases(), new MemberReleases(), false, false, 0, 0); Model.InputFiniteElements.Add(el12); //Create a list of Geometry.XY objects with the boundary points of the floor diaphragms //A polygon is then internally defined and all points that liew it it or on its edges will be assumed to be restarined by the diaphragm List<Geometry.XY> Pts = new List<Geometry.XY>(); //Points should be given anti-clockwise //Points are given in plan view (x-y) //Points (if more than 3) should lie on the same plane Pts.Add(new Geometry.XY(0, 0)); Pts.Add(new Geometry.XY(5, 0)); Pts.Add(new Geometry.XY(5, 6)); Pts.Add(new Geometry.XY(0, 6));
46
//Create a load case than specifies the mass source for the diaphragm //This load case only defines the mass for the diaphragm and is only needed in dynamic analysis. //Vertical static loads are not taken into account from this load case. //If a diaphragm is loaded, the corresponding mass load case should be assigned. Then the diaphragm mass will be considered for the dynamic analysis //A load case for the perimetric beams should then manually be created, which will distribute the diaphragm loads to the frames. This is not made automatically by the library LinearLoadCaseForFloorDiaphragm Mass = new LinearLoadCaseForFloorDiaphragm("mass source", LoadCaseType.OTHER); //Floor diaphragm definition. Note that the 3rd argument specifies the z-coordinate of diaphragm //Floor diaphragm is defined in xy plane only. Global Z axis is always perpendicular to the plane that the diaphragm points define FloorDiaphragm fd1 = new FloorDiaphragm(1, Pts, 3); LinearLoadCaseForFloorDiaphragm mass_fd1 = new LinearLoadCaseForFloorDiaphragm("mass source", LoadCaseType.DEAD); mass_fd1.pz = 5;//units in force/area, for example kN/m2, positive direction = gravity fd1.LinearLoadCasesList.Add(mass_fd1); Model.FloorDiaphragms.Add(fd1); FloorDiaphragm fd2 = new FloorDiaphragm(2, Pts, 6); LinearLoadCaseForFloorDiaphragm mass_fd2 = new LinearLoadCaseForFloorDiaphragm("mass source", LoadCaseType.DEAD); mass_fd2.pz = 2;//units in force/area, for example kN/m2, positive direction = gravity fd2.LinearLoadCasesList.Add(mass_fd2); Model.FloorDiaphragms.Add(fd2); //Define a load combination for the mass for the diaphragms (for example DEAD+0.5LIVE etc) LoadCombination MassCombo = new LoadCombination("mass combo", ComboType.ADD); MassCombo.InputLoadCasesWithFactorOrCombos.Add(new LoadCaseWithFactor("mass source", 1.0)); Model.MassSourceCombination = MassCombo; //Specify how mass is going to be calculated GeneralData.IncludeAdditionalMassesInMassSource = true; GeneralData.IncludeLoadsInMassSource = true; GeneralData.IncludeSelfWeightInMassSource = true; //Create a response spectrum function ResponseSpectrumFunction RSFunction = new ResponseSpectrumFunction("RS function"); RSFunction.RS_T = new double[] { 0, 0.15, 0.50, 1.20 };//T (time) values of point of the spectrum (in sec) RSFunction.RS_A = new double[] { 0, 5.5, 5.5, 1.0 };//A (spectral acceleration) values of points in spectrum (in length/sec2, for example m/sec2) //Create a response spectrum case and specify the application direction and the modal combination rule (SRSS or CQC)
47
ResponseSpectrumCase RSCase = new ResponseSpectrumCase("RScase", GroundMotionDirection.UX, ModeComboType.CQC); RSCase.DiaphragmEccentricityRatio = 0.05;//Specify diaphragm eccentricity ratio (usually 5%-10%). This value will produce a torsional about the global Z coordinate at the center of mass of each diaphragm. RSCase.RSFunction = RSFunction;//Assign the previously defined response spectrum Model.ResponseSpectrumCases.Add(RSCase);//Add to model Model.NrOfModesToFind = 6; //-------SOLUTION PHASE------Model.Solve(); //-------OBTAIN RESULTS------//Effective mass ratio calculation: double Effmx = Model.TotalEffectiveMassUX;//mass excited in x direction double Effmy = Model.TotalEffectiveMassUY;//mass excited in y direction double Massmx = Model.TotalMassUX;//total lateral mass in x direction double Massmy = Model.TotalMassUY;//total lateral mass in y direction double ratio_mass_x = Effmx / Massmx;//>90% of the total mass is excited by the response spectrum analysis double ratio_mass_y = Effmy / Massmy;//>90% of the total mass is excited by the response spectrum analysis //Reactions (Note that all results are now envelopes beacuse they came from a dynamic analysis) double[] Min1, Max1; double[] Min2, Max2; double[] Min3, Max3; double[] Min4, Max4; n1.GetReactionsForLoadCase(RSCase.name, out Min1, out Max1, 0); n2.GetReactionsForLoadCase(RSCase.name, out Min2, out Max2, 0); n3.GetReactionsForLoadCase(RSCase.name, out Min3, out Max3, 0); n4.GetReactionsForLoadCase(RSCase.name, out Min4, out Max4, 0); //Modal information double[,] Modes = Model.Modes;//each rows represents each degree of freedom, each column represents the corresponding modal displacements //Periods double[] Periods = Model.Periods;//each entry represents the period of the corresponding node //Element 2 (el2) internal forces for response spectrum case double[] Min, Max;
48
49
Example 8: Beam under uniform and large axial load (P- effect)
//New model definition Model Model = new Model(); //-------MATERIAL DEFINITION------//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 //-------SECTIONS DEFINITION------//Create a new beam section of dimensions 30cmx70xm FrameElementSection secCol050_50 = new FrameElementSection(); secCol050_50.Name = "Beam50/50";//section name secCol050_50.A = 0.5 * 0.5;//section area secCol050_50.Iy = 0.5 * 0.5 * 0.5 * 0.5 / 12;//inertia moment about local y axis secCol050_50.Iz = 0.5 * 0.5 * 0.5 * 0.5 / 12;//inertia moment about local z axis secCol050_50.It = 4.347e-3;//torsional constant secCol050_50.h = 0.5;//section height //-------MODEL GEOMETRY AND LOADS DEFINITION------//First node creation Frame3D.SuperNode n1 = new Frame3D.SuperNode(1, 0, 0, 0); //Application of supports (fixed conditions out of plane) n1.dof1constraint = true; n1.dof2constraint = true; n1.dof3constraint = true; n1.dof4constraint = true; n1.dof5constraint = false; n1.dof6constraint = true; Model.InputNodes.Add(n1); //Second node creation Frame3D.SuperNode n2 = new Frame3D.SuperNode(2, 5, 0, 0); //Application of supports (fixed conditions out of plane) n2.dof1constraint = false; n2.dof2constraint = true;
50
n2.dof3constraint = true; n2.dof4constraint = true; n2.dof5constraint = false; n2.dof6constraint = true; //Load case creation for horizontal load acting at right node LinearLoadCaseForSuperNode L = new LinearLoadCaseForSuperNode("L", LoadCaseType.OTHER); L.Px = -1000; n2.LinearLoadCasesList.Add(L); Model.InputNodes.Add(n2); //Frame element creation FrameSuperElement el1 = new FrameSuperElement(1, n1, n2, new Geometry.XYZ(0, 1, 0), matConcrete, secCol050_50, new MemberReleases(), new MemberReleases(), false, false); //Load case creation for uniform vertical load on frame element LinearLoadCaseForSuperFrameElement load1 = new LinearLoadCaseForSuperFrameElement("L", LoadCaseType.OTHER); load1.UniformLoad.UniformLoadsZ.Add(new SuperUniformLoad(0, 1, -10, -10, LoadDefinitionFromStartingNode.Relatively, LoadCordinateSystem.Local)); el1.LinearLoadCasesList.Add(load1); Model.InputFiniteElements.Add(el1); //Creation of a geometric non linear case that includes all load cases defined as "L" GeometricNonLinearCase NLcase = new GeometricNonLinearCase("NL"); //Analysis parameters: NLcase.LoadSteps = 50;//50 load steps NLcase.IterationsPerLoadStep = 30;//maximum 30 iteration per load step NLcase.ConvergenceTolerance = 1e-12;//convergence tolerance in terms of force //It will include the loads that have been defined as "L" NLcase.InputLoadCasesWithFactorOrCombos.Add(new LoadCaseWithFactor("L", 1)); //Definition of stiffness matrix update mode NLcase.UpdateStiffnessMethod = GeometricNonLinearCase.UpdateStiffnessMatrixMethod.AfterEachIteration InLoadStep; NLcase.SaveResultsAtEachLoadStep = true;//Results will be saved at all intermediate load steps Model.GeometricNonLinearCases.Add(NLcase); //-------SOLUTION PHASE------Model.Solve(); //-------OBTAIN RESULTS------double[] Min, Max; for (int loadStep = 1; loadStep <= NLcase.LoadSteps; loadStep++) { //Get deflection at the middle of the beam at each load step
51
el1.GetDisplacementsForLoadCase(2.5, "NL", out Min,out Max, loadStep); double Deflection = Min[2]; //Get bending moment at the middle of the beam at each load step el1.GetInternalForcesForLoadCase(2.5, "NL",out Min,out Max, loadStep); double SpanMoment = Min[4]; }
52
Example 9: Column under shear and large axial load (P- effect)
//New model definition Model Model = new Model(); //-------MATERIAL DEFINITION------//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 //-------SECTIONS DEFINITION------//Create a new beam section of dimensions 30cmx70xm FrameElementSection secCol050_50 = new FrameElementSection(); secCol050_50.Name = "Column50/50";//section name secCol050_50.A = 0.5 * 0.5;//section area secCol050_50.Iy = 0.5 * 0.5 * 0.5 * 0.5 / 12;//inertia moment about local y axis
53
secCol050_50.Iz = 0.5 * 0.5 * 0.5 * 0.5 / 12;//inertia moment about local z axis secCol050_50.It = 4.347e-3;//torsional constant secCol050_50.h = 0.5;//section height //-------MODEL GEOMETRY AND LOADS DEFINITION------//First node creation Frame3D.SuperNode n1 = new Frame3D.SuperNode(1, 0, 0, 0); //Application of supports (fixed conditions out of plane) n1.dof1constraint = true; n1.dof2constraint = true; n1.dof3constraint = true; n1.dof4constraint = true; n1.dof5constraint = true; n1.dof6constraint = true; Model.InputNodes.Add(n1); //Second node creation Frame3D.SuperNode n2 = new Frame3D.SuperNode(2, 0, 0, 5); //Application of supports (fixed conditions out of plane) n2.dof1constraint = false; n2.dof2constraint = true; n2.dof3constraint = false; n2.dof4constraint = true; n2.dof5constraint = false; n2.dof6constraint = true; //Load case creation for horizontal and vertical load acting at top node LinearLoadCaseForSuperNode L = new LinearLoadCaseForSuperNode("L", LoadCaseType.OTHER); L.Px = 100; L.Pz = -1000; n2.LinearLoadCasesList.Add(L); Model.InputNodes.Add(n2); //Frame element creation FrameSuperElement el1 = new FrameSuperElement(1, n1, n2, new Geometry.XYZ(0, 1, 0), matConcrete, secCol050_50, new MemberReleases(), new MemberReleases(), false, false); Model.InputFiniteElements.Add(el1); //Creation of a geometric non linear case GeometricNonLinearCase NLcase = new GeometricNonLinearCase("NL"); //Analysis parameters: NLcase.LoadSteps = 50;//50 load steps NLcase.IterationsPerLoadStep = 30;//maximum 30 iteration per load step NLcase.ConvergenceTolerance = 1e-12;//convergence tolerance in terms of force //It will include the loads that have been defined as "L" NLcase.InputLoadCasesWithFactorOrCombos.Add(new LoadCaseWithFactor("L", 1)); //Definition of stiffness matrix update mode NLcase.UpdateStiffnessMethod = GeometricNonLinearCase.UpdateStiffnessMatrixMethod.AfterEachIteration InLoadStep; NLcase.SaveResultsAtEachLoadStep = true;//Results will be saved at all intermediate load steps Model.GeometricNonLinearCases.Add(NLcase);
54
//-------SOLUTION PHASE------Model.Solve(); //-------OBTAIN RESULTS------double[] Min, Max; for (int loadStep = 1; loadStep <= NLcase.LoadSteps; loadStep++) { //Get horizontal displacement of top node of the column at each load step n2.GetNodalDisplacementsForLoadCase("NL", out Min, out Max, loadStep); double horDisplacement = Min[0]; //Get bending moment at the base of the column at each load step el1.GetInternalForcesForLoadCase(0, "NL", out Min, out Max, loadStep); double BaseMoment = Min[4]; }
55