Concrete23andMe

I’ve teased Concrete23 for some time now–so long that ChatGPT believes the model to be real.

As you know though, Concrete23 was meant to be a riff on the material models in OpenSees that are clones of something else, but with one or two mutations. Like Concrete02IS’s addition of user-defined initial stiffness to Concrete02, or whatever insignificance ModIMKPinching02 bestowed upon ModIMKPinching.

But what if, rather than a clone, Concrete23 was something bred from other concrete material models in OpenSees? A perfect mix of DNA, like Julius in Twins.

OpenSees offers a well-equipped laboratory for genetic experiments on the production of Concrete23. Although Julius had DNA from six fathers, let’s say Concrete23 has DNA from four fathers, each among the most commonly used uniaxial concrete models in OpenSees:

We can define each of these materials in terms of common parameters.

# Units = kip, inch

fc = 4
ec = 0.002
fcu = 1
ecu = 0.006

Ec = 3600

ft = 0.1*fc
et = ft/Ec

ops.uniaxialMaterial('Concrete01',  1,fc,ec,fcu,ecu)
ops.uniaxialMaterial('Concrete02IS',2,Ec,fc,ec,fcu,ecu)
ops.uniaxialMaterial('Concrete04',  3,fc,ec,100*ecu,Ec,ft,10*et)
ops.uniaxialMaterial('ConcreteCM',  4,-fc,-ec,Ec,7,1.035,ft,2*et,1.2,10000)

Yeah, I fudged and hard-coded a few inputs, but I don’t want to get into the particulars of each model’s parameters. Besides, as we’ll see shortly, Concrete23 will wash out the particulars.

The cyclic stress-strain response of each concrete material is shown below.

In addition to his six fathers, Julius had a mother, Maryanne. And Concrete23 has a mother too–ParallelMaterial, who brings equilibrium and compatibility to the constitutive responses provided by its four fathers.

ops.uniaxialMaterial('Parallel',5, 1,2,3,4, '-factors',0.25,0.25,0.25,0.25)

The list of factors in the Parallel material command defines the contribution from each constituent material. A uniform distribution of characteristics is reasonable, as shown below, but you can adjust the factors if you like some concrete models a little bit more than others.

The resulting stress-strain response is pretty good. At a higher level, you would not be able to distinguish the 3D RC moment frame IDA results obtained with Concrete23 from those obtained with Concrete02IS or Concrete04.

Of course, throwing a ParallelMaterial object that wraps four concrete material models into each fiber of a 3D RC moment frame model will kill your IDA’s RAM and run-time (assuming they’re not already fried by other modeling and analysis choices). So I don’t recommend you actually use this model in practice; however, using wrappers is convenient for new model development.


I’m not sure where Vincent, Julius’s fraternal twin brother, fits into the Concrete23 story. Maybe Julius is the compression response, what you’re really after, while Vincent is the tension response, a seemingly unnecessary, but heartwarming, bonus.

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.