I am running a static analysis using displacement control on a multilinear SDOF spring. When I run the script below, I get the graphical output desired. https://drive.google.com/file/d/1P_QAx7 ... sp=sharing
However, I also get 100s of lines of a WARNING message in my terminal. 'WARNING BandGenLinLapackSolver::solve() -factorization failed, matrix singular U(i,i) = 0, i= 0' https://drive.google.com/file/d/1bIfIob ... sp=sharing
I have tried quite a few settings, but can't seem to get rid of this warning message. If anyone has any idea how to get rid of this warning, that would be much appreciated!!
Code: Select all
import matplotlib.pyplot as plt
import openseespy.opensees as ops
p_y_sigma = [5.08E+02, 8.58E+02, 1.28E+03, 1.64E+03,2.61E+03,
4.13E+03, 7.57E+03,1.21E+04, 1.59E+04, 1.94E+04, 2.83E+04,
3.58E+04, 4.61E+04, 4.61E+04, 4.61E+04/2]
p_y_epsilon = [0.0008, 0.0016, 0.0028, 0.004, 0.008, 0.016, 0.04, 0.08, 0.12, 0.16,
0.28, 0.4, 0.8, 1.2, 1.4]
load = 4500
#assert load < max(p_y_sigma)
ops.wipe()
ops.model('Basic', '-ndm', 1, '-ndf', 1)
ops.node(1, *[0])
ops.fix(1, *[1])
ops.node(2 , *[0])
multilinear_mat_tag = 1
sigma_eps = []
multilinear_mat_tag = 1
for i in range(0, len(p_y_sigma)):
sigma_eps.append(float(p_y_epsilon[i]))
sigma_eps.append(float(p_y_sigma[i]))
ops.uniaxialMaterial('MultiLinear', multilinear_mat_tag, *sigma_eps)
ops.element('zeroLength', 1, *[1, 2], '-mat', *[1], '-dir', *[1])
ops.timeSeries("Linear", 1)
ops.pattern("Plain", 1 ,1)
ops.load(2, *[load])
ops.recorder('Node', '-file', 'recorder.txt', '-node', *[2], '-dof', 1, 'disp')
ops.recorder('Node', '-file', 'recorder2.txt', '-node', *[1], '-dof', 1, 'reaction')
maxDisp = max(p_y_epsilon)
incr = 0.001
Nsteps = maxDisp/0.001
ops.constraints("Plain")
ops.numberer("Plain")
Tol = 1.0e-10
maxNumIter = 10
ops.test('EnergyIncr', Tol, maxNumIter)
ops.algorithm("ModifiedNewton", '-initial')
ops.system("BandGeneral")
ops.integrator("DisplacementControl", 2, 1, incr)
ops.analysis("Static")
Tol = 1.0e-10
maxNumIter = 10
# perform the analysis
ops.analyze(Nsteps)
ops.wipe()
disp = []
file = open('recorder.txt', 'r')
for line in file.readlines():
disp.append(line)
file.close()
disp = [float(i) for i in disp]
force = []
file = open('recorder2.txt', 'r')
for line in file.readlines():
force.append(line)
file.close()
force = [abs(float(i)) for i in force]
fig, ax = plt.subplots()
ax.plot(disp, force, c= [0,0,1], alpha=1.0, linewidth=4)
ax.plot(p_y_epsilon, p_y_sigma, '--', c= [1,0,0], alpha=1.0, linewidth=4)
ax.legend(['OpenSees', 'Input'])
plt.xlabel('Displacement [m]')
plt.ylabel('Force [kN/m]')
plt.show()