Coulomb friction

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

Moderators: silvia, selimgunay, Moderators

Post Reply
andrett7
Posts: 118
Joined: Fri Dec 04, 2009 5:23 am
Location: Politecnico di Milano

Coulomb friction

Post by andrett7 »

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
Scientists study the world as it is; engineers create the world that never has been.
andrett7
Posts: 118
Joined: Fri Dec 04, 2009 5:23 am
Location: Politecnico di Milano

Re: Coulomb friction

Post by andrett7 »

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
Scientists study the world as it is; engineers create the world that never has been.
Post Reply