Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

'ElasticMultiLinear' material is returning a linear p(force)-y(displacement) curve #291

Closed
SaaSGun opened this issue Jul 10, 2023 · 2 comments

Comments

@SaaSGun
Copy link

SaaSGun commented Jul 10, 2023

Opensees verison == 3.3.0.1.1
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.

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)

comparison

@mhscott
Copy link
Collaborator

mhscott commented Jul 10, 2023

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.

Closing issue. The repo is for documentation, not modelling issues or possible bugs.

@mhscott mhscott closed this as completed Jul 10, 2023
@SaaSGun
Copy link
Author

SaaSGun commented Jul 10, 2023

Hi, thankyou for your reply. I will use two DOFs with a different material model.

cheers!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants