OpenSees Cloud
OpenSees AMI
Uniaxial Multi-Tool
Original Post - 09 Dec 2020 - Michael H. Scott
Visit Structural Analysis Is Simple on Substack.
Uniaxial, or one-dimensional, material models are the work horses of OpenSees. Originally developed for the truss element, these models have proliferated thanks to fiber section models. However, because they are simply scalar functions, UniaxialMaterial models can be used in several other contexts.
The calling function knows the context, not the UniaxialMaterial model, which only provides an output for a given input. Accordingly, the user has to input parameters to the UniaxialMaterial models that are consistent with the context.
"Multi Tools" by pennuja is licensed under CC BY 2.0
This post summarizes the contexts in which UniaxialMaterial models are used in OpenSees along with the interpretation of the model input and output.
A Truss element uses UniaxialMaterial models as stress-strain response. The material stress and tangent are multiplied by cross-section area to get force and stiffness. For linear-elastic response, use E in an ElasticMaterial, and for nonlinear response use, stress parameters, e.g., as shown below for HardeningMaterial, or for whatever uniaxial material model you like.
E = 29000.0 # Or whatever
Fy = 50.0
Hi = 0
Hk = 300.0
ops.uniaxialMaterial('Elastic',1,E)
ops.uniaxialMaterial('Hardening',2,E,Fy,Hi,Hk)
matTag = 1
A = 10.0
ops.element('truss',1,1,2,matTag,A)
Along the same lines, FiberSection objects use UniaxialMaterial models as stress-strain response. The material stress and tangent are multiplied by fiber area to get fiber force, which is summed over the section to get stress resultants (axial force and bending moment).
E = 29000.0 # Or whatever
Fy = 50.0
Hi = 0
Hk = 300.0
ops.uniaxialMaterial('Elastic',1,E)
ops.uniaxialMaterial('Hardening',2,E,Fy,Hi,Hk)
matTag = 2
ops.section('Fiber',1)
ops.patch('quadr',matTag,...)
A SectionAggregator uses UniaxialMaterial models as section force-deformation (stress resultant) response. There is no integration of the model response, i.e., no automatic multiplication by area, so the user has to input resultant quantities of section stiffness and force.
nu = 0.3
G = E/(2*(1+nu))
Tauy = Fy/3**0.5
As = 6.5 # Shear area
GA = G*As
Vy = Tauy*As
Hi = 0
Hk = 0.01*GA # Or whatever
ops.uniaxialMaterial('Elastic',3,GA)
ops.uniaxialMaterial('Hardening',4,GA,Vy,Hi,Hk)
matTag = 4
ops.section('Aggregator',3,'Vy',matTag,'-section',1)
A ZeroLength element uses UniaxialMaterial models as force-deformation and moment-rotation response, basically as springs. There is no integration of the model response, so the user has to input force (or moment) and stiffness.
k = 200000.0
Fy = 500
Hi = 0
Hk = 0.01*k # Or whatever
ops.uniaxialMaterial('Elastic',5,k)
ops.uniaxialMaterial('Hardening',6,k,Fy,Hi,Hk)
matTag = 5
ops.element('zeroLength',1,1,2,'-mat',matTag,'-dir',2,...)
The zero length elements are often used as moment-rotation springs in
concentrated plasticity beam elements where the interpretation is
(force*length)/radian. There are also a few variants on the zero length
element that use UniaxialMaterial models: twoNodeLink
and
flatSliderBearing
among others.
Most of the OpenSees documentation refers to UniaxialMaterial models as stress-strain relationships, but know that these models can do so much more! Also, be careful not to use a UniaxialMaterial in odd contexts, e.g., it wouldn’t make sense to use Concrete23 in a section aggregator or zero length element.