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 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.
The static analysis used to perform the gravity load analysis is
modified to use the
DisplacementControl
integrator.
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
inches.
60
analysis steps are performed in this new analysis.
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 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 be of type Newmark with a and .
The integrator will add some stiffness proportional damping to the system, the damping term will be based on the last committed stifness of the elements, i.e. with .
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
status = gravity_analysis(model)
if status != ops.successful:
print(f"Gravity analysis FAILED ({status = })\n")
status = pushover_analysis(model)
# Print a message to indicate if analysis successful or not
if status != ops.successful:
print(f"Pushover analysis FAILED ({status = })\n")
# Print the state at node 3
model.print("node", 3)
if __name__ == "__main__":
main()