WARNING: CTestNormUnbalance::test() - failed to converge

Forum for OpenSees users to post questions, comments, etc. on the use of the OpenSees interpreter, OpenSees.exe

Moderators: silvia, selimgunay, Moderators

Post Reply
Toutant
Posts: 32
Joined: Mon Sep 09, 2013 10:33 am
Location: École Polytechnique de Montréal

WARNING: CTestNormUnbalance::test() - failed to converge

Post by Toutant »

Dear all,

I made a 3 stories CBF model in OpenSees. Beams are elastic but columns and braces are nonlinear (forceBeamColumn). My problem is when I run pushover analysis, braces on third floor are buckling and then when the braces on the second want to buckle I'm starting to see this error message:

WARNING: CTestNormUnbalance::test() - failed to converge but going on - current Norm: 0.0749704 (max: 0.001, Norm deltaX: 0)

OpenSees keeps sending the same message and the current Norm keep increasing. However if I change my braces to elasticBeamColumn there is no buckling and I'm not getting the convergence issue. That tells me that the issue is related to the braces, not the columns or the gussets or the beams. With that said, do you guys have any ideas why my braces are having convergence issues? What are the typical steps to follow in order to correct this problem?


Thanks.
fmk
Site Admin
Posts: 5884
Joined: Fri Jun 11, 2004 2:33 pm
Location: UC Berkeley
Contact:

Re: WARNING: CTestNormUnbalance::test() - failed to converge

Post by fmk »

i suggest removing the convergence test option that tells it t go on and try to do other things when it does fails to acheieve convergence in a particular step, e.g. initial stiffness iterations, smaller load steps, .... using the go to next step optin should be used as a last resort, and if it fails on subsequent steps you should definitly stop and throw the results away as the results are probably garbage.
Toutant
Posts: 32
Joined: Mon Sep 09, 2013 10:33 am
Location: École Polytechnique de Montréal

Re: WARNING: CTestNormUnbalance::test() - failed to converge

Post by Toutant »

Dear fmk,

When I remove the option that makes the analysis go on after failed test I got the follow error message:

WARNING: CTestNormUnbalance::test() - failed to converge
after: 10 iterations
NewtonLineSearch::solveCurrentStep() -the ConvergenceTest object failed in test()
StaticAnalysis::analyze() - the Algorithm failed at iteration: 0 with domain at load factor 293.737
OpenSees > analyze failed, returned: -3 error flag

I also tried using ModifiedNewton with initial stiffness iterations and I got an error in one of the column:

WARNING - ForceBeamColumn3d::update - failed to get compatible element forces & deformations for element: 110104(dW: << 9.19689e-005, dW0: 7527.32)

Finally, I tried increasing the number of steps but it did not work either:

WARNING: CTestNormUnbalance::test() - failed to converge
after: 10 iterations
NewtonLineSearch::solveCurrentStep() -the ConvergenceTest object failed in test()
StaticAnalysis::analyze() - the Algorithm failed at iteration: 0 with domain at load factor 293.499
OpenSees > analyze failed, returned: -3 error flag
Mhr
Posts: 2
Joined: Mon Jun 26, 2023 11:07 pm

WARNING: CTestNormUnbalance::test() - failed to converge

Post by Mhr »

Dear all
I am doing a simulation of a Spyder (Python 3.9).
An example is 'Dynamic Elastic Analysis of the plate which already analysis as static analysis by Lisa 8.0'. This file is saved as "Ptmesh10_CL.msh" from Lisa 8.0 and "Ptmesh10_CL.py" from Spyder.
The loading condition is Cyclic displacement-controlled static lateral loading.
The force-displacement graph ends in a straight line (elastic).
When I run this programming it gives an error.

========================================
WARNING: CTestNormUnbalance::test() - failed to converge
after: 25 iterations current Norm: 0.00191403 (max: 1e-06, Norm deltaX: 3.16653e-06)
NewtonRaphson::solveCurrentStep() -the ConvergenceTest object failed in test()
StaticAnalysis::analyze() - the Algorithm failed at step: 0 with a domain at load factor 0.16
OpenSees > analyze failed, returned: -3 error flag
====================================================
Need help, thank you in advance.

#####################################
Here is my Program
#####################################

# -*- coding: utf-8 -*-
"""
Created on Tue Jun 20 13:24:06 2023

@author: Harun
"""

import pandas as pd #pandas as pd
from openseespy.opensees import *

import numpy as np
import matplotlib.pyplot as plt
import vfo.vfo as vfo


#------------------------------------------

#Data Read

#------------------------------------------

df = pd.read_csv("Ptmesh10_CL.msh" ) #df = pd.read_csv("Enter file name here")

#Align the data.
y=df.iloc[:,0].apply(lambda x: pd.Series(x.split()))

#Replace with (nan to 0)
y=y.fillna(int(0))


# ------------------------------
# Start of model generation
# -----------------------------

# Model initialization
wipe()

#Definition of the model
model('basic', '-ndm', 2, '-ndf', 2)

# Define units
# Units (mm & N)

# Define the plate properties
length = 660.0 #mm
width = 200.0 #mm
young_modulus = 205000.0 #N/mm2
poisons_ratio = 0.30


Nsteps = 1000
Px = -1000 #N > Load applied on node in the x-direction
Py = 0.0 #N > Load applied on node in the y-direction

#--------------------------------------------------------------------------
# Define nodes and boundary conditions
#--------------------------------------------------------------------------
c=0 # Initialize the counter
xmax=0 # Initialize the maximum value
for a in range(int(y.iloc[3,0])): # Loop through the rows of the y dataframe, starting at row 4
c=c+1 # Increment the counter
d =y.iloc[a+4,1] # Get the value of the d column for the current row
e =y.iloc[a+4,2] # Get the value of the e column for the current row
node(c, float(d), float(e)) # Create a new node with the values of c, d, and e
if float(d)>xmax: # If the value of d is greater than xmax
xmax=float(d) # Set xmax to the value of d
if float(d)== 0.0: # If the value of d is equal to 0
fix(c, 1,1) # Call the fix() function to set the node's x and y values to 1
# print(c) # Print the node's ID
else: # Otherwise
fix(c, 0,0) # Call the fix() function to set the node's x and y values to 0


# # Define the geometric material nonlinearity
nDMaterial('J2Plasticity', 1, 170, 78846, 325, 490, 0.50, 0.01)

# Definition of a component
m=0
for q in range(int(y.iloc[int(c)+6,0])):
m=m+1
f=int(y.iloc[c+7+q,3])
g=int(y.iloc[c+7+q,4])
h=int(y.iloc[c+7+q,5])
i=int(y.iloc[c+7+q,6])
element("quad",m,int(f),int(g),int(h),int(i),10,"PlaneStress",1)


#Model Display
#vfo.plot_model()

#Definition of time-dependent load factors
timeSeries("Linear", 1)

# Define load pattern
pattern("Plain", 1, 1)

# Definition of nodal load
rr=0
for a in range(int(y.iloc[3,0])):
rr=rr+1
yy=y.iloc[a+4,1]
if float(yy)== xmax:
load(rr, Px, 0.0)

# ------------------------------
# Define Analysis conditions
# ------------------------------



# create SOE
system("FullGeneral")
#system("BandSPD")

# create DOF number
numberer("RCM")

# create a constraint handler
constraints("Plain")

# create integrator
integrator("LoadControl", 1.0/Nsteps)

# create algorithm
algorithm("Newton")

# create test
#test('NormUnbalance', 1e-4, 10)

# create an analysis object
analysis("Static")

# perform the analysis
analyze(1)


# ------------------------------
# Finally perform the analysis
# ------------------------------

# perform the analysis
data = np.zeros((Nsteps+1,2))
for j in range(Nsteps):
analyze(1)
data[j+1,0] = nodeDisp(6,1)
data[j+1,1] = getLoadFactor(1)*Px

# Plot the load-displacement curve
plt.plot(data[:,0], data[:,1])#Define analysis conditions
plt.xlabel('Displacement')
plt.ylabel('Load')
plt.show()

################################################################
Ptmesh10.msh file is here..................

https://drive.google.com/file/d/1QXLi5W ... sp=sharing
Mhr
Posts: 2
Joined: Mon Jun 26, 2023 11:07 pm

Re: WARNING: CTestNormUnbalance::test() - failed to converge

Post by Mhr »

Post Reply