'Factorization failed' warning for spring static analysis using displacement control

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

Moderators: silvia, selimgunay, Moderators

Post Reply
RabsEllie
Posts: 1
Joined: Mon Aug 14, 2023 9:09 am

'Factorization failed' warning for spring static analysis using displacement control

Post by RabsEllie » Wed Aug 23, 2023 6:31 am

Hi,

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()

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

Re: 'Factorization failed' warning for spring static analysis using displacement control

Post by mhscott » Wed Aug 23, 2023 7:28 am

You are hitting zero stiffness on your p-y curve (you have two points with same p values 4.61E+04, 4.61E+04) and the system of equations is singular.

Leonar
Posts: 6
Joined: Thu Mar 02, 2023 8:41 am
Contact:

Re: 'Factorization failed' warning for spring static analysis using displacement control

Post by Leonar » Sat Mar 02, 2024 2:12 pm

Did you solve it?

Post Reply