Modelling soil spring using ElasticMultiLinear unixial material

Forum for asking and answering questions related to use of the OpenSeesPy module

Moderators: silvia, selimgunay, Moderators

Post Reply
indiacivilengg
Posts: 1
Joined: Mon Jan 16, 2012 9:05 am

Modelling soil spring using ElasticMultiLinear unixial material

Post by indiacivilengg » Tue Jul 11, 2023 2:42 am

Opensees verison == 3.3.0.1.1
Issue: p-y curve is linear, instead of multilinear

Hi,

I have created a simple spring model (one end fixed, other end free). A gradually increasing force was applied at the free end. Reaction and Displacements obtained were plotted. The material of the spring is defined as uniaxial Multi-Linear. Was expecting a multi-linear p-y plot. But the result is only a linear plot.

Please see the code snippet below, to recreate the model and analysis.

My question is -> Why am i getting a linear plot even though my material model is multilinear? And what can i do to get the multi-linear plot from this spring example. Thanks.

Code: Select all

import openseespy.opensees as op

p-y values used for defining u1, f1 for ElasticMultiLinear material model
p = [0, 10599.12, 18293.92, 22678.72, 24839.90, 25828.98, 26266.23, 26456.58, 26538.88, 26574.36]  # units = N/m2
p_force = [item * 8 * 0.5 for item in p]
y = [0, 0.012, 0.025, 0.038, 0.050, 0.063, 0.075, 0.088, 0.10, 0.113]

# Defining u and f for ElasticMultiLinear material model
u = y
f = p

# cleaning existing stuff
op.wipe()

# spring nodes created with 1 dim, 1 dof
op.model('basic', '-ndm', 1, '-ndf', 1)  # 1DOF because spring is in X-direction only.

op.node(1, 0.0)  # spring node 1 # this will be connected to pile node
op.node(100 + 1, 0.0)  # spring node 2 # this node will be fixed

# adding DOFs to these spring nodes (i.e. spring nodes created above)
op.fix(1, 0)  # restraint for spring node 1
op.fix(100 + 1, 1)  # restraint for spring node 2


# create spring material objects
op.uniaxialMaterial('ElasticMultiLinear', 2, 0.0, '-strain', *u, '-stress', *f)


# create zero length element for springs - adding spring '1001' between spring node '1' and '101'
op.element('zeroLength', 1000 + 1, 1, 100 + 1, '-mat', 2, '-dir', 1, 3)

# create pile nodes
op.model('basic', '-ndm', 1, '-ndf', 1)
op.node(200 + 1, 0.0)

# fixing DOF at pile node - cfixity at pile head (location of loading)
op.fix(200 + 1, 0)  # this pile nodes is kept free to move along X-direction, as force is applied on this pile node

#  define equal dof between pile and spring nodes
op.equalDOF(200 + 1, 1, 1)

# create recorders
timeStep = 1

# record displacements at pile nodes
op.recorder('Node', '-file', 'pileDisp.out', '-time', '-dT', timeStep, '-nodeRange', 201, 200 + 1, '-dof', 1, 'disp')

# record reaction force in the p-y springs
op.recorder('Node', '-file', 'reaction.out', '-time', '-dT', timeStep, '-nodeRange', 1, 1, '-dof', 1, 'reaction')

# record element forces in pile elements
op.recorder('Element', '-file', 'pileForce.out', '-time', '-dT', timeStep, '-eleRange', 201, 200 + 1,
            'globalForce')

# create loading
op.setTime(0.0)

# apply point load at the pile node
values = [0.0, 0.01, 1.0, 1.0]
time = [0.0, 0.01, 100, 150]  # when load = 300000

node_tag = 200 + 1
load_values = [100000]

op.timeSeries('Path', 1, '-values', *values, '-time', *time, '-factor', 1.0)

op.pattern('Plain', 10, 1)
op.load(node_tag, *load_values)

# create and run analysis
op.integrator('LoadControl', 0.05)
op.numberer('RCM')
op.system('SparseGeneral')
op.constraints('Transformation')
op.test('NormDispIncr', 1e-5, 20, 1)
op.algorithm('Newton')
op.analysis('Static')

print("Starting Load Application...")
op.analyze(15000)
The attached image shows the plot created from output of this script (plotted in orange, plotted reaction vs pile displacement) and the original p-force vs y is plotted in blue (multilinear)

Image

mhscott
Posts: 874
Joined: Tue Jul 06, 2004 3:38 pm
Location: Corvallis, Oregon USA
Contact:

Re: Modelling soil spring using ElasticMultiLinear unixial material

Post by mhscott » Wed Jul 12, 2023 5:39 am

Try other materials or use only two nodes and no equalDOFs. I suspect the issue is not the material model but rather the model you've defined.

Post Reply