OpenSees Cloud

OpenSees AMI

Concrete02 with Control of the Initial Stiffness

Original Post - 06 Nov 2021 - Michael H. Scott

Visit Structural Analysis Is Simple on Substack.


Although they have the same compressive envelope, Concrete02 offers more features than Concrete01–tension strength, tension stiffening, and compressive unloading/reloading loops. However, one thing Concrete02 (and Concrete01) lacks is control over the initial stiffness, which is fixed at \(E_c=2f'_c/\varepsilon_{c0}\).

To overcome this limitation with Concrete02, Nasser Marafi created Concrete02IS (Concrete02 with control of the Initial Stiffness) and merged the model in 2018 with the main OpenSees branch. Thanks, Nasser, for pushing your contribution back upstream!

Unfortunately, the Concrete02IS model is not documented, which explains some of the back and forth in this pull request from 2020. We figured out eventually that Concrete02IS was exactly what the author of the pull request wanted in the first place. That would not have been the first, or last, unnecessary duplication of an OpenSees uniaxial material.

The input initial stiffness for Concrete02IS comes at the start of the argument list, followed by the standard Concrete02 inputs.

# Input lam, ft, Ets
ops.uniaxialMaterial('Concrete02',  1,   -fc,-epsc0,-fcu,-epscu,lam,ft,Ets)
ops.uniaxialMaterial('Concrete02IS',2,Ec,-fc,-epsc0,-fcu,-epscu,lam,ft,Ets)

# With default lam, ft, Ets
ops.uniaxialMaterial('Concrete02',  3,   -fc,-epsc0,-fcu,-epscu)
ops.uniaxialMaterial('Concrete02IS',4,Ec,-fc,-epsc0,-fcu,-epscu)

The compressive stress-strain loops for Concrete02IS with f’c=4000 psi, \(\varepsilon_{c0}\)=0.002, f’cu=1000 psi, and \(\varepsilon_{cu}\)=0.006 are shown below for \(E_c=2f'_c/\varepsilon_{c0}\)=4000 ksi (the same initial stiffness as Concrete02).

Comparison of Concrete02 and Concrete02IS

Concrete02IS gives a slightly different ascending branch of the backbone because Concrete02IS uses the Popovics equation whereas Concrete02 uses the Hognestad parabola. However, the unloading and reloading behavior is the same between the two models.

Comparisons of Concrete02IS and Concrete02 are shown below using a range of initial stiffnesses for Concrete02IS:

Concrete02IS with various initial stiffnesses

As shown in the cyclic stress-strain response, the input initial stiffness affects the unloading/reloading loops in compression. I am not sure if this is the intended behavior, but this is the stress-strain response that the Concrete02IS model generates.

If you are screaming on the inside that the cyclic response of Concrete02IS should be different, let me know. Based on the source code, I believe it would be an easy change.