Friction damper cyclic loading
Moderators: silvia, selimgunay, Moderators
Friction damper cyclic loading
hello ,
I have problem with cyclic loading on my friction model. it is a simple friction damper model that i want to test by cylic load but after 0.04m it sholud turn back it continues til 0.08cm and then stops!!
here i write my model, please help me to find the problem.
#--set up------------
model basic -ndm 2 -ndf 3;
# nodes
# x y
node 1 0.0 0.0
node 2 0.0 0.0
node 3 2.0 0.0
node 4 4.0 0.0
#Boundary Condition
fix 1 1 1 1;
fix 4 1 1 0;
geomTransf Corotational 1
# Friction Hing
set Mf 700;
set Ef 1e15;
uniaxialMaterial Steel01 $matID $Mf $Ef 0.0
# Create the zero length element
element zeroLength $eleID $nodeR $nodeC -mat $matID -dir 6
equalDOF $nodeR $nodeC 1 2
# rigid part ---beam 23
set E 2.1e10;
set Er 1e20;
element elasticBeamColumn 23 2 3 13.2e-4 $Er 318e-16 1;;
#beam 34
element elasticBeamColumn 34 3 4 13.2e-4 $E 318e-16 1;
# Pattern Plain
pattern Plain 1 Linear {
load 3 0.0 1.0 0.0 0;
}
# Set up analysis parameters
constraints Transformation ;
numberer RCM ;
system BandGeneral ;
test EnergyIncr 1.e-6 25 0 ;
algorithm Newton ;
integrator DisplacementControl 3 2 0
analysis Static
foreach Dincr {+4.0E-5 -8.0E-5 +4.0E-5} {
integrator DisplacementControl 3 2 $Dincr
analyze 1000
}
I have problem with cyclic loading on my friction model. it is a simple friction damper model that i want to test by cylic load but after 0.04m it sholud turn back it continues til 0.08cm and then stops!!
here i write my model, please help me to find the problem.
#--set up------------
model basic -ndm 2 -ndf 3;
# nodes
# x y
node 1 0.0 0.0
node 2 0.0 0.0
node 3 2.0 0.0
node 4 4.0 0.0
#Boundary Condition
fix 1 1 1 1;
fix 4 1 1 0;
geomTransf Corotational 1
# Friction Hing
set Mf 700;
set Ef 1e15;
uniaxialMaterial Steel01 $matID $Mf $Ef 0.0
# Create the zero length element
element zeroLength $eleID $nodeR $nodeC -mat $matID -dir 6
equalDOF $nodeR $nodeC 1 2
# rigid part ---beam 23
set E 2.1e10;
set Er 1e20;
element elasticBeamColumn 23 2 3 13.2e-4 $Er 318e-16 1;;
#beam 34
element elasticBeamColumn 34 3 4 13.2e-4 $E 318e-16 1;
# Pattern Plain
pattern Plain 1 Linear {
load 3 0.0 1.0 0.0 0;
}
# Set up analysis parameters
constraints Transformation ;
numberer RCM ;
system BandGeneral ;
test EnergyIncr 1.e-6 25 0 ;
algorithm Newton ;
integrator DisplacementControl 3 2 0
analysis Static
foreach Dincr {+4.0E-5 -8.0E-5 +4.0E-5} {
integrator DisplacementControl 3 2 $Dincr
analyze 1000
}
Re: Friction damper cyclic loading
Replace load pattern and analysis objects with this:
# Pattern Plain
pattern Plain 1 Linear {
load 3 0.0 1.0 0.0;
}
# Set up analysis parameters
constraints Transformation ;
numberer RCM ;
system BandGeneral ;
test EnergyIncr 1.e-6 25 0 ;
algorithm Newton ;
foreach Dincr {+4.0E-5 -8.0E-5 +4.0E-5} {
integrator DisplacementControl 3 2 $Dincr
analysis Static
analyze 1000
}
# Pattern Plain
pattern Plain 1 Linear {
load 3 0.0 1.0 0.0;
}
# Set up analysis parameters
constraints Transformation ;
numberer RCM ;
system BandGeneral ;
test EnergyIncr 1.e-6 25 0 ;
algorithm Newton ;
foreach Dincr {+4.0E-5 -8.0E-5 +4.0E-5} {
integrator DisplacementControl 3 2 $Dincr
analysis Static
analyze 1000
}
Re: Friction damper cyclic loading
I replaced them as you said but it has converge error!!
I don't know what is wrong!?
I don't know what is wrong!?
Re: Friction damper cyclic loading
it's whole of error:
WARNING: CTestEnergyIncr::test() - failed to converge
after: 25 iterations
NewtnRaphson::solveCurrentStep() -the ConvergenceTest object failed in test()
StaticAnalysis::analyze() - the Algorithm failed at iteration: 0 with domain at
load factor -343.177
OpenSees > analyze failed, returned: -3 error flag
als it records the displacment till .o8 again!!!! it doesn't turn back!!!!!?
WARNING: CTestEnergyIncr::test() - failed to converge
after: 25 iterations
NewtnRaphson::solveCurrentStep() -the ConvergenceTest object failed in test()
StaticAnalysis::analyze() - the Algorithm failed at iteration: 0 with domain at
load factor -343.177
OpenSees > analyze failed, returned: -3 error flag
als it records the displacment till .o8 again!!!! it doesn't turn back!!!!!?
Re: Friction damper cyclic loading
Replace Steel01 with Steel02. Steel01 will not work with DisplacementControl integrator due to the sharp transition from elastic to plastic behavior.
Also replace the analysis objects with the ones below to better deal with the convergence problems.
# Set up analysis parameters
constraints Transformation ;
numberer RCM ;
system BandGeneral ;
test EnergyIncr 1.e-6 25 0 ;
algorithm Newton ;
foreach Dincr {+4.0E-5 -8.0E-5 +4.0E-5} {
integrator DisplacementControl 3 2 $Dincr
analysis Static
set ok 0
set currentStep 1
set nSteps 1000
while {$ok == 0 && $currentStep =< $nSteps} {
set ok [analyze 1]
if {$ok != 0} {
test NormDispIncr 1.0e-6 1000 1
algorithm ModifiedNewton –initial
set ok [analyze 1]
test NormDispIncr 1.0e-6 6 2
algorithm Newton
}
set currentStep [expr $currentStep+1]
}
}
Also replace the analysis objects with the ones below to better deal with the convergence problems.
# Set up analysis parameters
constraints Transformation ;
numberer RCM ;
system BandGeneral ;
test EnergyIncr 1.e-6 25 0 ;
algorithm Newton ;
foreach Dincr {+4.0E-5 -8.0E-5 +4.0E-5} {
integrator DisplacementControl 3 2 $Dincr
analysis Static
set ok 0
set currentStep 1
set nSteps 1000
while {$ok == 0 && $currentStep =< $nSteps} {
set ok [analyze 1]
if {$ok != 0} {
test NormDispIncr 1.0e-6 1000 1
algorithm ModifiedNewton –initial
set ok [analyze 1]
test NormDispIncr 1.0e-6 6 2
algorithm Newton
}
set currentStep [expr $currentStep+1]
}
}
Re: Friction damper cyclic loading
thank you very very much
Re: Friction damper cyclic loading
hello vesna,
I have convegence error in my cyclic loading when direction of displacement wnats to turn back.according this it doesn't turn back and continues until 8cm!!.so i have to change my convergence tolerence to 5e-1 that i think is very big number for tolerence! here is my cyclic part of code with changed tolerence :
foreach Dincr {+4.0E-3 -4.0E-3 -4.0E-3 +4.0E-3} {
integrator DisplacementControl 3 1 $Dincr;
analysis Static;
set ok 0;
set currentStep 1;
set nSteps 1000;
while {$ok == 0 && $currentStep <= $nSteps} {
set ok [analyze 1];
if {$ok != 0} {
test NormDispIncr 5.0e-1 1000 1;
algorithm ModifiedNewton #–initial
set ok [analyze 1];
test NormDispIncr 5.0e-1 6 2;
algorithm Newton;
}
set currentStep [expr $currentStep+1];
}
}
what is your idea about tolernece?
I have convegence error in my cyclic loading when direction of displacement wnats to turn back.according this it doesn't turn back and continues until 8cm!!.so i have to change my convergence tolerence to 5e-1 that i think is very big number for tolerence! here is my cyclic part of code with changed tolerence :
foreach Dincr {+4.0E-3 -4.0E-3 -4.0E-3 +4.0E-3} {
integrator DisplacementControl 3 1 $Dincr;
analysis Static;
set ok 0;
set currentStep 1;
set nSteps 1000;
while {$ok == 0 && $currentStep <= $nSteps} {
set ok [analyze 1];
if {$ok != 0} {
test NormDispIncr 5.0e-1 1000 1;
algorithm ModifiedNewton #–initial
set ok [analyze 1];
test NormDispIncr 5.0e-1 6 2;
algorithm Newton;
}
set currentStep [expr $currentStep+1];
}
}
what is your idea about tolernece?
Re: Friction damper cyclic loading
This tolerance is too big. The problem might be solved but the results will not be correct.
Would you please post your code so I can check it?
Would you please post your code so I can check it?
Re: Friction damper cyclic loading
Dear vesna,
thank you for your great helps. my code was long so i send it to your email(vesna AT berkely DOT edu)
thanks again
pkm
thank you for your great helps. my code was long so i send it to your email(vesna AT berkely DOT edu)
thanks again
pkm
Re: Friction damper cyclic loading
I have sent you the corrected file. It works now.
Re: Friction damper cyclic loading
Dear vesna,
thanks again for your previuos reply.
My code run successfully with your help. but unfortunatly when I want to test buckling in my code it stops in step1000 and doesn't turn back!!!
for the purpose of modeling the buckling I used gusset plate and geometric imperfection in my brace element as you suggested me to read from
" Patxi Uriz and Stephen A. Mahin ...". It was really useful.
I'm confused with these kind of errors!! I really don't know what I should do?!
Its error is saying :
failed to get compatible element forces and deformation for element...
the integrator failed in update
the algoritm failed in iteration
test failed to converge
thanks again for your previuos reply.
My code run successfully with your help. but unfortunatly when I want to test buckling in my code it stops in step1000 and doesn't turn back!!!
for the purpose of modeling the buckling I used gusset plate and geometric imperfection in my brace element as you suggested me to read from
" Patxi Uriz and Stephen A. Mahin ...". It was really useful.
I'm confused with these kind of errors!! I really don't know what I should do?!
Its error is saying :
failed to get compatible element forces and deformation for element...
the integrator failed in update
the algoritm failed in iteration
test failed to converge
Re: Friction damper cyclic loading
It is strange that it stops exactly after 1000 steps. It looks to me like there is a problem with your model rather than with the analysis. It looks like after you change the direction of loading, your model can not handle the load with the opposite direction of loading and then it fails. Try loading first in the opposite direction. First Dincr has to be negative.
Re: Friction damper cyclic loading
I cheched my code with these analysis :
1) constraints Transformation ;
numberer RCM ;
system BandGeneral ;
test EnergyIncr 1e-6 25 0 ;
algorithm Newton ;
integrator DisplacementControl 3 1 -0.01 ;
analysis Static ;
analyze 8000
It runs successfully.
2) constraints Transformation ;
numberer RCM ;
system BandGeneral ;
test EnergyIncr 1e-6 25 0 ;
algorithm Newton ;
set controlnode 3
set loaddirection 1
set currentDisp 0.0
foreach Dincr {-4E-3 +8E-3 -4E-3} {
integrator DisplacementControl $controlnode $loaddirection $Dincr
analysis Static
set nSteps 1000
if { $Dincr > 0 } {
set Dmax [expr $Dincr*$nSteps]
set ok 0
while {$ok == 0 && $currentDisp < $Dmax} {
set ok [analyze 1]
if {$ok != 0} {
puts " "
puts "Trying Newton with Initial Tangent .."
test NormDispIncr 1.0e-6 2000 0
algorithm Newton -initial
set ok [analyze 1]
test NormDispIncr 1.0e-6 6 2
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm Newton
}
set currentDisp [nodeDisp $controlnode $loaddirection]
}
} elseif { $Dincr < 0 } {
set Dmax [expr $Dincr*$nSteps/2]
set ok 0
while {$ok == 0 && $currentDisp > $Dmax} {
set ok [analyze 1]
if {$ok != 0} {
puts " "
puts "Trying Newton with Initial Tangent .."
test NormDispIncr 1.0e-6 2000 0
algorithm Newton -initial
set ok [analyze 1]
test NormDispIncr 1.0e-6 6 2
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm Newton
}
set currentDisp [nodeDisp $controlnode $loaddirection]
}
}
}
It fails in step 501!!!
2)constraints Transformation ;
numberer RCM ;
system BandGeneral ;
test EnergyIncr 1e-6 25 0 ;
algorithm Newton ;
set controlnode 3
set loaddirection 1
set currentDisp 0.0
foreach Dincr {4E-3 -8E-3 4E-3} {
integrator DisplacementControl $controlnode $loaddirection $Dincr
analysis Static
set nSteps 1000
if { $Dincr > 0 } {
set Dmax [expr $Dincr*$nSteps]
set ok 0
while {$ok == 0 && $currentDisp < $Dmax} {
set ok [analyze 1]
if {$ok != 0} {
puts " "
puts "Trying Newton with Initial Tangent .."
test NormDispIncr 1.0e-6 2000 0
algorithm Newton -initial
set ok [analyze 1]
test NormDispIncr 1.0e-6 6 2
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm Newton
}
set currentDisp [nodeDisp $controlnode $loaddirection]
}
} elseif { $Dincr < 0 } {
set Dmax [expr $Dincr*$nSteps/2]
set ok 0
while {$ok == 0 && $currentDisp > $Dmax} {
set ok [analyze 1]
if {$ok != 0} {
puts " "
puts "Trying Newton with Initial Tangent .."
test NormDispIncr 1.0e-6 2000 0
algorithm Newton -initial
set ok [analyze 1]
test NormDispIncr 1.0e-6 6 2
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm Newton
}
set currentDisp [nodeDisp $controlnode $loaddirection]
}
}
}
It fails in step 1000!!!!
What is wrong!!??
Do you still think my model has problem? if yes, why it runs in analysis(1) successfully?
It doesn't matter what is the value of Dincr, in mentioned steps it fails!?
1) constraints Transformation ;
numberer RCM ;
system BandGeneral ;
test EnergyIncr 1e-6 25 0 ;
algorithm Newton ;
integrator DisplacementControl 3 1 -0.01 ;
analysis Static ;
analyze 8000
It runs successfully.
2) constraints Transformation ;
numberer RCM ;
system BandGeneral ;
test EnergyIncr 1e-6 25 0 ;
algorithm Newton ;
set controlnode 3
set loaddirection 1
set currentDisp 0.0
foreach Dincr {-4E-3 +8E-3 -4E-3} {
integrator DisplacementControl $controlnode $loaddirection $Dincr
analysis Static
set nSteps 1000
if { $Dincr > 0 } {
set Dmax [expr $Dincr*$nSteps]
set ok 0
while {$ok == 0 && $currentDisp < $Dmax} {
set ok [analyze 1]
if {$ok != 0} {
puts " "
puts "Trying Newton with Initial Tangent .."
test NormDispIncr 1.0e-6 2000 0
algorithm Newton -initial
set ok [analyze 1]
test NormDispIncr 1.0e-6 6 2
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm Newton
}
set currentDisp [nodeDisp $controlnode $loaddirection]
}
} elseif { $Dincr < 0 } {
set Dmax [expr $Dincr*$nSteps/2]
set ok 0
while {$ok == 0 && $currentDisp > $Dmax} {
set ok [analyze 1]
if {$ok != 0} {
puts " "
puts "Trying Newton with Initial Tangent .."
test NormDispIncr 1.0e-6 2000 0
algorithm Newton -initial
set ok [analyze 1]
test NormDispIncr 1.0e-6 6 2
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm Newton
}
set currentDisp [nodeDisp $controlnode $loaddirection]
}
}
}
It fails in step 501!!!
2)constraints Transformation ;
numberer RCM ;
system BandGeneral ;
test EnergyIncr 1e-6 25 0 ;
algorithm Newton ;
set controlnode 3
set loaddirection 1
set currentDisp 0.0
foreach Dincr {4E-3 -8E-3 4E-3} {
integrator DisplacementControl $controlnode $loaddirection $Dincr
analysis Static
set nSteps 1000
if { $Dincr > 0 } {
set Dmax [expr $Dincr*$nSteps]
set ok 0
while {$ok == 0 && $currentDisp < $Dmax} {
set ok [analyze 1]
if {$ok != 0} {
puts " "
puts "Trying Newton with Initial Tangent .."
test NormDispIncr 1.0e-6 2000 0
algorithm Newton -initial
set ok [analyze 1]
test NormDispIncr 1.0e-6 6 2
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm Newton
}
set currentDisp [nodeDisp $controlnode $loaddirection]
}
} elseif { $Dincr < 0 } {
set Dmax [expr $Dincr*$nSteps/2]
set ok 0
while {$ok == 0 && $currentDisp > $Dmax} {
set ok [analyze 1]
if {$ok != 0} {
puts " "
puts "Trying Newton with Initial Tangent .."
test NormDispIncr 1.0e-6 2000 0
algorithm Newton -initial
set ok [analyze 1]
test NormDispIncr 1.0e-6 6 2
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm Newton
}
if {$ok != 0} {
puts " "
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm Newton
}
set currentDisp [nodeDisp $controlnode $loaddirection]
}
}
}
It fails in step 1000!!!!
What is wrong!!??
Do you still think my model has problem? if yes, why it runs in analysis(1) successfully?
It doesn't matter what is the value of Dincr, in mentioned steps it fails!?
Re: Friction damper cyclic loading
What is the difference between the cases 2 and 3?
Re: Friction damper cyclic loading
in case 2 direction of displacement in first 1000steps is negative ($Dincr=-4E-3) then in second 1000steps ($Dincr=+8E-3)
but in case 3 direction is first positive ($Dincr=+4E-3) then in second1000steps $Dincr=-8E-3
as you said I tried to check negative direction.
but in case 3 direction is first positive ($Dincr=+4E-3) then in second1000steps $Dincr=-8E-3
as you said I tried to check negative direction.