Nonlinear analysis of a concrete portal frame.
This set of examples investigates the nonlinear analysis of a reinforced concrete frame. The nonlinear beam column element with a fiber discretization of the cross section is used in the model. The investigation is adapted from the work of McKenna and Scott (2001).
The function create_portal
creates a model representing the portal
frame in the figure above.
The model consists of four nodes, two
nonlinear beam-column elements modeling the columns and an
elastic beam element to model the girder.
For the column elements a section, identical to the section used in Example 2,
is created using steel and concrete fibers.
Define a cross section for the columns, following the procedure from the moment-curvature example
We now implement a function called gravity_analysis
which takes the instance of Model
returned by create_portal
,
and proceeds to impose gravity loads and perform a static analysis.
Its use will look like:
Inside the function, a single load pattern with a Linear
time series is created and two vertical nodal loads are added acting at nodes 3
and 4
:
The model contains material non-linearities, so a solution algorithm of type Newton
is used.
For this nonlinear problem, the gravity loads are applied incrementally until the full load is applied.
To achieve this, a LoadControl
integrator is used which advances the solution with
an increment of 0.1
at each load step.
To achieve the full gravity load, 10 load steps are performed.
At end of analysis, the state at nodes 3 and 4 is printed. The state of element 1 is also reported.
After performing the gravity load analysis on the model, the time in the
domain is reset to 0.0
and the current value of all loads acting are held constant.
A new load pattern with a linear time series and horizontal loads acting at nodes 3
and 4
is then added to the model.
For the Pushover analysis we will use a
DisplacementControl
strategy.
In displacement control we specify a incremental displacement dU
that we would like to see at a nodal DOF and the strategy iterates to
determine what the pseudo-time (load factor if using a linear time
series) is required to impose that incremental displacement.
For this example, at each new step in the analysis the integrator will determine
the load increment necessary to increment the horizontal displacement at
node 3 by 0.1 in.
dU = 0.1
model.integrator("DisplacementControl", 3, 1, dU, 1, dU, dU)
At each new analysis step the integrator will determine the load increment necessary to increment the horizontal displacement at node 3
by 0.1
inches.
As the example is nonlinear and nonlinear models do not always
converge the analysis is carried out inside a while loop. The loop will
either result in the model reaching it’s target displacement or it will
fail to do so. At each step a single analysis step is performed. If the
analysis step fails using standard Newton solution algorithm, another
strategy using initial stiffness iterations will be attempted.
For this analysis the nodal displacements at node 3
will be
stored in the variable u
for post-processing.
At the end of the analysis, the state of node 3 is printed to the screen.
A plot of the load-displacement relationship at node 3 is shown in the figure below.
The concrete frame which has undergone the gravity load analysis is now subjected to an earthquake load.
After performing the gravity load analysis, the time in the domain is
reset to 0.0
and the time series for all active loads is set to constant.
This prevents the gravity load from being scaled with each
step of the dynamic analysis.
Mass terms are added to nodes 3 and 4. A new uniform excitation load pattern is created.
The rayleigh
method is used to add stiffness proportional damping to the system.
The damping term will be based on the last committed stifness of the
elements, i.e.
with
.
The excitation acts in the
horizontal direction and reads the acceleration record and time interval
from the file ARL360.g3
. The file ARL360.g3
is created from the
PEER Strong Motion Database
record
ARL360.at2
using the Tcl procedure ReadSMDFile
contained in the file
ReadSMDFile.tcl
.
The static analysis and its components are first deleted so that a new transient analysis procedure can be defined.
The integrator for this analysis will use the Newmark method with and .
Once all the components of an analysis are defined, the Analysis object
itself is created. For this problem a Transient analysis is used.
2000
time steps are performed with a time step of 0.01
.
In addition to the transient analysis, two eigenvalue evaluations are performed. The first is performed after the gravity analysis and the second after the transient analysis.
For this analysis the nodal displacenments at Nodes 3 and 4 will be
stored in the file nodeTransient.out
for post-processing. In addition
the section forces and deformations for the section at the base of
column 1 will also be stored in two seperate files.
The results of the eigenvalue analysis will be displayed on the screen.
The two eigenvalues for the eigenvalue analysis are printed to the terminal. The state of node 3 at the end of the analysis is also printed.
Element response quantities can be used to generate the moment-curvature time history of the base section of column 1 as shown below.
Summarizing, we now have the following functions:
Function | Description |
---|---|
create_portal |
Creates a model of a portal frame |
gravity_analysis |
Performs a gravity analysis on a model |
pushover_analysis |
Performs a pushover analysis on a model |
transient_analysis |
Performs a transient analysis on a model |
A complete analysis may look as follows:
def main():
# Create the model
model = create_portal()
# Perform analysis under gravity loads
gravity_analysis(model)
# Perform transient analysis
pushover_analysis(model)
# Print the state at node 3
model.print("node", 3)
if __name__ == "__main__":
main()