OpenSees Cloud

OpenSees AMI

Multi-Linear Parallel

Original Post - 08 Sep 2024 - Michael H. Scott

Visit Structural Analysis Is Simple on Substack.


If you have used the ElasticPP uniaxial material in OpenSees, you may have wondered why the input for the yield point is the yield strain instead of the yield stress.

There’s actually a good reason the input is yield strain as opposed to yield stress. But first, a short back story is necessary in order to understand why.

The software Frank wrote for his Ph.D. dissertation, the software that would become known as G3 and then OpenSees, had a limited library of constitutive models. And by “limited” I mean only the Elastic, ElasticPP, and Parallel uniaxial material models. Concrete01 through Concrete23 and the sections and ND materials would come later–none of those models were necessary for domain decomposition and parallel computing.

Even though his focus was on high level algorithms, Frank still needed something nonlinear to look at load imbalance between processors. And with those three constitutive models, Frank could create truss models with arbitrary multi-linear stress-strain response.

For example, to get bilinear stress-strain response, you can put an elastic and elastic-perfectly-plastic (EPP) material in parallel. The elastic material has stiffness \(\alpha E\) while the EPP material has stiffness \((1-\alpha)E\) with the same yield strain as the target bilinear model.

Elastic + EPP = Bilinear

The code for this model is straightforward.

E = 29000 # Or whatever
alpha = 0.1
Fy = 60

epsy = Fy/E

ops.uniaxialMaterial('Elastic',1,alpha*E)
ops.uniaxialMaterial('ElasticPP',2,(1-alpha)*E,epsy)
ops.uniaxialMaterial('Parallel',3,1,2)

The stress-strain response due to white noise strain history is shown below. The behavior is bilinear with kinematic hardening.

Bilinear stress-strain response

If the input for the yield point of the ElasticPP model was yield stress instead of yield strain, you would have to input \((1-\alpha)F_y\) instead of \(\varepsilon_y\). No big deal.

But if you want to make a trilinear stress-strain relationship by putting an elastic material in parallel with two EPP materials, defining yield stresses gets more complicated. The expressions for yield stress are shown in the figure below.

Elastic + EPP + EPP = Trilinear

While the yield stress expressions are not that complicated–start from the elastic model then work your way backwards to the yield point on each EPP model–they are a potential source of error. But the yield strains of the EPP models are exactly the same as the strains in the target trilinear model.

Yeah, you still have to modify the stiffness of each EPP model, but would you rather modify one input per model or two? So, it’s good fortune that Frank decided to make the yield strain, not the yield stress, the input for the ElasticPP material model.

The trilinear stress-strain response is shown below for E=29000, Fy1=60, Fy2=65, and \(\varepsilon_{y2}=4\varepsilon_{y1}\) with \(\varepsilon_{y1}\)=Fy1/E. Like the bilinear case, the behavior is kinematic hardening.

Trilinear stress-strain response

You can also use the elastic and EPP models in parallel for force-deformation and moment-rotation relationships. Like all uniaxial materials, the concept is not limited to stress-strain, so do whatever.