Qz Material Response

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

Moderators: silvia, selimgunay, Moderators

Post Reply
shongwailew
Posts: 2
Joined: Sun Mar 26, 2017 8:20 pm
Location: The University of Auckland

Qz Material Response

Post by shongwailew » Mon Jan 11, 2021 4:04 pm

Hi,

I am using Qz Material and trying to get material response but the response is not as expected. I am wondering if there if anything wrong with the code or the material? Appreciate your help. Thank you.

import openseespy.opensees as op
import matplotlib.pyplot as plt

op.wipe()

# Create 3 dimensional, 3 DOF domain
op.model('basic','-ndm', 2, '-ndf', 2)

# Define Nodes
op.node(1, 0.0, 0.0)
op.node(2, 0.0, 0.0)

# Define Constraints
op.fix(1, 1, 1)
op.fix(2, 1, 0)

# Define Qz Material
qult = 52920476.6
z50 = 0.0075
op.uniaxialMaterial('QzSimple1', 1, 2, qult, z50)
op.element('zeroLength', 1, 1, 2, '-mat', 1, '-dir', 2)

# Define Loading
op.timeSeries('Linear', 1)
op.pattern('Plain', 1, 1)
op.load(2, 0.0, 10.0)

# Define Analysis Commands
op.system('BandGeneral')
op.constraints('Transformation')
op.numberer('Plain')
op.test('NormDispIncr', 1.0e-12, 10)
op.algorithm('Newton', '-initial')
dU = 0.0001
op.integrator('DisplacementControl', 2, 2, dU)
op.analysis('Static')

# Define Analysis Parameters
maxU = 0.25 * 50
currentDisp = 0.0
ok = 0

currentDisp_list = list()
currentReaction_list = list()
currentForce_list = list()

# Analyze
while ok == 0 and currentDisp < maxU:

ok = op.analyze(1)

if ok != 0:
print("Analysis failed")
break

# Record and Print Output
currentDisp = op.nodeDisp(2, 2) / z50
op.reactions()
currentReaction = op.nodeReaction(1, 2)
currentForce = op.eleForce(1, 2) / qult
print(currentDisp, currentReaction)
currentDisp_list.append(currentDisp)
currentReaction_list.append(-currentReaction)
currentForce_list.append(-currentForce)

# Plot Figure
plt.figure()
plt.plot(currentDisp_list, currentForce_list, label='qz Material')
plt.xlabel('z / z50')
plt.ylabel('Q / Qult')
plt.legend(loc='best')
plt.show


print("Finish")

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

Re: Qz Material Response

Post by mhscott » Mon Jan 11, 2021 6:41 pm

You will have to provide more details on what you expect and what you're getting from the model.

shongwailew
Posts: 2
Joined: Sun Mar 26, 2017 8:20 pm
Location: The University of Auckland

Re: Qz Material Response

Post by shongwailew » Tue Jan 12, 2021 1:03 pm

Hi, sorry, please find the response from the model in the following plot.

https://drive.google.com/file/d/1ngTahL ... sp=sharing

I am getting a linear response. The response shows that the z/z50 ratio has reached 12 but Q/Qult ratio is 0.012, which is not as expected. I am expecting a nonlinear response with a much steeper initial slope as shown in https://opensees.berkeley.edu/wiki/inde ... 1_Material for Piles in Sand (qzType = 2) Vijayvergiya (1997)

SumeetSinha
Posts: 3
Joined: Thu Jun 11, 2020 4:32 pm

Re: Qz Material Response

Post by SumeetSinha » Mon Jan 18, 2021 9:06 pm

Hi Shong,

Qz material model is similar to a contact element. The material has a finite stiffness when it is in contact, while a suction pressure acts when there is a gap. While using this material with a zero-length element, the direction of the contact vector is important.

In line 21, while defining the zero length element,

Code: Select all

op.element('zeroLength', 1, 1, 2, '-mat', 1, '-dir', 2)
The contact vector is wrongly defined. As a result, when you apply a load, it experiences suction. Ideally, the reaction should be zero (an unstable condition), However, I think, the material has a default +ve suction pressure implemented for stability. I tried to set it zero, but still, it has the same response.

The problem can be fixed in the following ways :

a) change the order of the nodes while defining the zerolength element

Code: Select all

op.element('zeroLength', 1, 2, 1, '-mat', 1, '-dir', 2)
b) keep the same node order but define the orientation of the element (see the documentation https://opensees.berkeley.edu/wiki/inde ... th_Element)

Code: Select all

orientation = [-1,0,0,0,-1,0]
op.element('zeroLength', 1, 1, 2, '-mat', 1, '-dir', 2,'-orient',*orientation)
Thanks
Sumeet

Post Reply