Hi all,
I want to simulate the Coulomb friction between two nodes. Below you can find an example of 1DOF system with a initial displacement (1.5 m) and after that free vibration. Following theory ( see e.g. Chopra book) at each cycle the displacement should have a linear decrease, and finaly a permanent displacement when the peak is lower than (mu*N/k). In my case I don't have a linear decrease. Do you have some suggestions?
Thanks,
Andrea
*****************************************************************
wipe;
source Units.tcl
model basic -ndm 2 -ndf 2
set dispSeries "Linear -factor 1.50"
node 1 0.0 0.0
node 2 0.0 0.0
set M 1.0
mass 2 $M 0.0
set nEig 1
fix 1 1 1
set K 30.
uniaxialMaterial Elastic 1 $K
set matTag 1
set eleTag 1
set dirTag 1
element zeroLength $eleTag 1 2 -mat $matTag -dir $dirTag
#---------------------------------------------------------------------------------------
#CONTACT ELEMENT
model basic -ndm 2 -ndf 2;
node 3 0. 0.
node 4 0. 0.
equalDOF 1 3 1 2
equalDOF 2 4 1 2
set mu1 0.1
set normalX 0
set normalY 1
set Kn 1.0e+8
set Kt 1.0e+8;
element zeroLengthContact2D 2 4 3 $Kn $Kt $mu1 -normal $normalX $normalY
#---------------------------------------------------------------------------------------
set IDnode 2
set IDdir 1
recorder Node -file Spostamento.out -time -node $IDnode -dof $IDdir disp; #Relative quantity
set Lambda [eigen -fullGenLapack $nEig]
puts "\nEigenvalues at start of transient:"
puts "Lambda\t Omega\t Period" ;# Neat-looking header
foreach Lambda $Lambda {
if {$Lambda > 0.0} {
set Omega [expr {pow($Lambda,0.5)}]
set Period [expr 2*$PI/$Omega]
puts "$Lambda\t $Omega\t $Period"
}
}
#---------------------------------------------------------------------------------------
#GRAVITY LOADS
set N -15.;
pattern Plain 4 Linear {
load 4 0. $N
}
set u_F [expr -$N*$mu1/$K]
puts $u_F
algorithm Linear
system BandSPD
pattern MultipleSupport 1 {
#groundMotion 1 Series -disp $dispSeries
groundMotion 1 Plain -disp $dispSeries
#imposedSupportMotion 2 1 1
imposedMotion 2 1 1
}
integrator LoadControl 1
numberer RCM
constraints Penalty 1e16 1e16
analysis Static
analyze 1
remove loadPattern 1
# Set up analysis parameters
source LibAnalysisDynamicParameters.tcl
set TmaxAnalysis [expr 10. *$sec]; # Maximum duration of ground-motion analysis
set DtAnalysis [expr 0.001*$sec]; # Time-step Dt for lateral analysis
rayleigh 0.00 0. 0. 0.;
# integrator Newmark 0.5 0.25
# analysis Transient
# analyze 1000 0.01
set Tol 1.e-6
set Nsteps [expr int($TmaxAnalysis/$DtAnalysis)];
set ok [analyze $Nsteps $DtAnalysis]; # Actually perform analysis; returns ok=0 if analysis was successful
if {$ok != 0} { ; # Analysis was not successful.
# --------------------------------------------------------------------------------------------------
# Change some analysis parameters to achieve convergence
# Performance is slower inside this loop
# Time-controlled analysis
set ok 0;
set controlTime [getTime];
while {$controlTime < $TmaxAnalysis && $ok == 0} {
set controlTime [getTime]
set ok [analyze 1 $DtAnalysis]
if {$ok != 0} {
puts "Trying Newton with Initial Tangent .."
test NormDispIncr $Tol 1000 0
algorithm Newton -initial
set ok [analyze 1 $DtAnalysis]
test $testTypeDynamic $TolDynamic $maxNumIterDynamic 0
algorithm $algorithmTypeDynamic
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 $DtAnalysis]
algorithm $algorithmTypeDynamic
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch .8
set ok [analyze 1 $DtAnalysis]
algorithm $algorithmTypeDynamic
}
}
}; # end if ok !0
Coulomb friction
Moderators: silvia, selimgunay, Moderators
Coulomb friction
Scientists study the world as it is; engineers create the world that never has been.
Re: Coulomb friction
Now I have a linear decrease of the amplitude, but when the restoring force is lower than the friction forces there are vibrations (with constant amplitude) instead to have a constant residual displacement. Someone can help me? Thanks
Below there is an update of the code:
wipe;
source Units.tcl
model basic -ndm 2 -ndf 2
set dispSeries "Linear -factor 0.005"
node 1 0.0 0.0
node 2 0.0 0.0
set M 0.1
set nEig 1
fix 1 1 1
set K 1000
set matTag 1
uniaxialMaterial Elastic $matTag $K
set eleTag 1
set dirTag 1
element zeroLength $eleTag 1 2 -mat $matTag -dir $dirTag
#---------------------------------------------------------------------------------------
#CONTACT ELEMENT
# model basic -ndm 2 -ndf 2;
node 3 0. 0.
node 4 0. 0.
equalDOF 1 3 1 2
equalDOF 2 4 1 2
set mu1 0.10
set normalX 0
set normalY 1
set Kn 1.0e+10
set Kt $K
element zeroLengthContact2D 2 4 3 $Kn $Kt $mu1 -normal $normalX $normalY
#---------------------------------------------------------------------------------------
mass 4 $M 0.0
set IDnode 4
set IDdir 1
recorder Node -file Spostamento.out -time -node $IDnode -dof $IDdir disp;
recorder Element -file Forza.out -ele 1 force
# recorder Node -file Forza.out -node 4 -dof 1 reaction;
set Lambda [eigen -fullGenLapack $nEig]
puts "\nEigenvalues at start of transient:"
puts "Lambda\t Omega\t Period" ;# Neat-looking header
foreach Lambda $Lambda {
if {$Lambda > 0.0} {
set Omega [expr {pow($Lambda,0.5)}]
set Period [expr 2*$PI/$Omega]
puts "$Lambda\t $Omega\t $Period"
}
}
#---------------------------------------------------------------------------------------
#GRAVITY LOADS
set N [expr -1.*$M*$g];
pattern Plain 4 Linear {
load 4 0. $N
}
set u_F [expr -$N*$mu1/$K]; #Soglia di spostamento finale
set u_C [expr 4*$u_F];
puts "Displacement reduction: $u_C"
puts "Displacement threshold: $u_F"
algorithm Linear
system BandSPD
pattern MultipleSupport 1 {
#groundMotion 1 Series -disp $dispSeries
groundMotion 1 Plain -disp $dispSeries
#imposedSupportMotion 2 1 1
imposedMotion 2 1 1
}
integrator LoadControl 1
numberer RCM
constraints Transformation;#Penalty 1e16 1e16
analysis Static
analyze 1
remove loadPattern 1
# Set up analysis parameters
source LibAnalysisDynamicParameters.tcl
set TmaxAnalysis [expr 1*[lindex $Data_input 4]]; # Maximum duration of ground-motion analysis
set DtAnalysis [expr $TmaxAnalysis/3000.]; # Time-step Dt for lateral analysis
rayleigh 0. 0. 0. 0.;
# integrator Newmark 0.5 0.25
# analysis Transient
# analyze 1000 0.01
set Tol 1.e-6
set Nsteps [expr int($TmaxAnalysis/$DtAnalysis)];
set ok [analyze $Nsteps $DtAnalysis]; # Actually perform analysis; returns ok=0 if analysis was successful
if {$ok != 0} { ; # Analysis was not successful.
# --------------------------------------------------------------------------------------------------
# Change some analysis parameters to achieve convergence
# Performance is slower inside this loop
# Time-controlled analysis
set ok 0;
set controlTime [getTime];
while {$controlTime < $TmaxAnalysis && $ok == 0} {
set controlTime [getTime]
set ok [analyze 1 $DtAnalysis]
if {$ok != 0} {
puts "Trying Newton with Initial Tangent .."
test NormDispIncr $Tol 1000 0
algorithm Newton -initial
set ok [analyze 1 $DtAnalysis]
test $testTypeDynamic $TolDynamic $maxNumIterDynamic 0
algorithm $algorithmTypeDynamic
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 $DtAnalysis]
algorithm $algorithmTypeDynamic
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch .8
set ok [analyze 1 $DtAnalysis]
algorithm $algorithmTypeDynamic
}
}
}; # end if ok !0
Below there is an update of the code:
wipe;
source Units.tcl
model basic -ndm 2 -ndf 2
set dispSeries "Linear -factor 0.005"
node 1 0.0 0.0
node 2 0.0 0.0
set M 0.1
set nEig 1
fix 1 1 1
set K 1000
set matTag 1
uniaxialMaterial Elastic $matTag $K
set eleTag 1
set dirTag 1
element zeroLength $eleTag 1 2 -mat $matTag -dir $dirTag
#---------------------------------------------------------------------------------------
#CONTACT ELEMENT
# model basic -ndm 2 -ndf 2;
node 3 0. 0.
node 4 0. 0.
equalDOF 1 3 1 2
equalDOF 2 4 1 2
set mu1 0.10
set normalX 0
set normalY 1
set Kn 1.0e+10
set Kt $K
element zeroLengthContact2D 2 4 3 $Kn $Kt $mu1 -normal $normalX $normalY
#---------------------------------------------------------------------------------------
mass 4 $M 0.0
set IDnode 4
set IDdir 1
recorder Node -file Spostamento.out -time -node $IDnode -dof $IDdir disp;
recorder Element -file Forza.out -ele 1 force
# recorder Node -file Forza.out -node 4 -dof 1 reaction;
set Lambda [eigen -fullGenLapack $nEig]
puts "\nEigenvalues at start of transient:"
puts "Lambda\t Omega\t Period" ;# Neat-looking header
foreach Lambda $Lambda {
if {$Lambda > 0.0} {
set Omega [expr {pow($Lambda,0.5)}]
set Period [expr 2*$PI/$Omega]
puts "$Lambda\t $Omega\t $Period"
}
}
#---------------------------------------------------------------------------------------
#GRAVITY LOADS
set N [expr -1.*$M*$g];
pattern Plain 4 Linear {
load 4 0. $N
}
set u_F [expr -$N*$mu1/$K]; #Soglia di spostamento finale
set u_C [expr 4*$u_F];
puts "Displacement reduction: $u_C"
puts "Displacement threshold: $u_F"
algorithm Linear
system BandSPD
pattern MultipleSupport 1 {
#groundMotion 1 Series -disp $dispSeries
groundMotion 1 Plain -disp $dispSeries
#imposedSupportMotion 2 1 1
imposedMotion 2 1 1
}
integrator LoadControl 1
numberer RCM
constraints Transformation;#Penalty 1e16 1e16
analysis Static
analyze 1
remove loadPattern 1
# Set up analysis parameters
source LibAnalysisDynamicParameters.tcl
set TmaxAnalysis [expr 1*[lindex $Data_input 4]]; # Maximum duration of ground-motion analysis
set DtAnalysis [expr $TmaxAnalysis/3000.]; # Time-step Dt for lateral analysis
rayleigh 0. 0. 0. 0.;
# integrator Newmark 0.5 0.25
# analysis Transient
# analyze 1000 0.01
set Tol 1.e-6
set Nsteps [expr int($TmaxAnalysis/$DtAnalysis)];
set ok [analyze $Nsteps $DtAnalysis]; # Actually perform analysis; returns ok=0 if analysis was successful
if {$ok != 0} { ; # Analysis was not successful.
# --------------------------------------------------------------------------------------------------
# Change some analysis parameters to achieve convergence
# Performance is slower inside this loop
# Time-controlled analysis
set ok 0;
set controlTime [getTime];
while {$controlTime < $TmaxAnalysis && $ok == 0} {
set controlTime [getTime]
set ok [analyze 1 $DtAnalysis]
if {$ok != 0} {
puts "Trying Newton with Initial Tangent .."
test NormDispIncr $Tol 1000 0
algorithm Newton -initial
set ok [analyze 1 $DtAnalysis]
test $testTypeDynamic $TolDynamic $maxNumIterDynamic 0
algorithm $algorithmTypeDynamic
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 $DtAnalysis]
algorithm $algorithmTypeDynamic
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch .8
set ok [analyze 1 $DtAnalysis]
algorithm $algorithmTypeDynamic
}
}
}; # end if ok !0
Scientists study the world as it is; engineers create the world that never has been.