How can period in nonlinear dynamic analysis?
Moderators: silvia, selimgunay, Moderators
-
- Posts: 72
- Joined: Fri Jul 10, 2009 3:05 am
- Location: Griffith University
Re: How can period in nonlinear dynamic analysis?
Actually, I just can calculate the period at the beginning and at the end of pushover analysis. Would you please help me how to calculate the period at each step during the pushover analysis?
Re: How can period in nonlinear dynamic analysis?
Put your pushover analysis in a loop and compute eigenvalues in the loop
for {set i 1} {$i <= $Nsteps} {incr i} {
set ok [analyze 1]
if {$ok < 0} {
break
}
puts [eigen $numModes]
}
for {set i 1} {$i <= $Nsteps} {incr i} {
set ok [analyze 1]
if {$ok < 0} {
break
}
puts [eigen $numModes]
}
-
- Posts: 72
- Joined: Fri Jul 10, 2009 3:05 am
- Location: Griffith University
Re: How can period in nonlinear dynamic analysis?
Dear mhscott,
Thanks for your kind attention. I put pushover analysis in a loop but got irrational results.
The following is my pushover algorithm:
set Fj5 [expr 5000*$N];
set Fj4 [expr 4000*$N];
set Fj3 [expr 3000*$N];
set Fj2 [expr 2000*$N];
set Fj1 [expr 1000*$N];
set Dmax [expr 0.05*$LBuilding ]; # maximum displacement of pushover. push to 10% drift.
set Dincr [expr 0.001*$LBuilding ]; # displacement increment. you want this to be small, but not too small to slow analysis
# -- STATIC PUSHOVER/CYCLIC ANALYSIS
# create load pattern for lateral pushover load coefficient when using linear load pattern
pattern Plain 200 Linear { # define load pattern
load 5 $Fj1 0 0
load 9 $Fj2 0 0
load 13 $Fj3 0 0
load 17 $Fj4 0 0
load 21 $Fj5 0 0
}; # end load pattern
# ----------- set up analysis parameters
set Tol 1.0e-4; # convergence tolerance for test
constraints Transformation; # how it handles boundary conditions
numberer RCM; # renumber dof's to minimize band-width (optimization), if you want to
system BandGeneral ; # how to store and solve the system of equations in the analysis (large model: try UmfPack)
test NormDispIncr $Tol 20 ; # determine if convergence has been achieved at the end of an iteration step
algorithm Newton ; # use Newton's solution algorithm: updates tangent stiffness at every iteration
integrator DisplacementControl $IDctrlNode $IDctrlDOF $Dincr;
analysis Static
# --------------------------------- perform Static Pushover Analysis
set Nsteps [expr int($Dmax/$Dincr)]; # number of pushover analysis steps
set fmt1 "%s Pushover analysis: CtrlNode %.3i, dof %.1i, Disp=%.4f %s"; # format for screen/file output of DONE/PROBLEM analysis
for {set i 1} {$i <= $Nsteps} {incr i} {
set ok [analyze 1]
if {$ok != 0} {
# if analysis fails, we try some other stuff, performance is slower inside this loop
set Dstep 0.0;
set ok 0
while {$Dstep <= 1.0 && $ok == 0} {
set controlDisp [nodeDisp $IDctrlNode $IDctrlDOF ]
set Dstep [expr $controlDisp/$Dmax]
set ok [analyze 1 ]
# if analysis fails, we try some other stuff
# performance is slower inside this loop global maxNumIterStatic; # max no. of iterations performed before "failure to converge" is ret'd
if {$ok != 0} {
puts "Trying Newton with Initial Tangent .."
test NormDispIncr $Tol 2000 0
algorithm Newton -initial
set ok [analyze 1]
test NormDispIncr $Tol 500 0
algorithm Newton
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm Newton
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm Newton
}
}; # end while loop
}; # end if ok !0
if {$ok != 0 } {
puts [format $fmt1 "PROBLEM" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] "milimeter"]
} else {
puts [format $fmt1 "DONE" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] "milimeter" ]
}
puts [eigen 1]
}
# -----------------------------------------------------------------------------------------------------
Thanks for your kind attention. I put pushover analysis in a loop but got irrational results.
The following is my pushover algorithm:
set Fj5 [expr 5000*$N];
set Fj4 [expr 4000*$N];
set Fj3 [expr 3000*$N];
set Fj2 [expr 2000*$N];
set Fj1 [expr 1000*$N];
set Dmax [expr 0.05*$LBuilding ]; # maximum displacement of pushover. push to 10% drift.
set Dincr [expr 0.001*$LBuilding ]; # displacement increment. you want this to be small, but not too small to slow analysis
# -- STATIC PUSHOVER/CYCLIC ANALYSIS
# create load pattern for lateral pushover load coefficient when using linear load pattern
pattern Plain 200 Linear { # define load pattern
load 5 $Fj1 0 0
load 9 $Fj2 0 0
load 13 $Fj3 0 0
load 17 $Fj4 0 0
load 21 $Fj5 0 0
}; # end load pattern
# ----------- set up analysis parameters
set Tol 1.0e-4; # convergence tolerance for test
constraints Transformation; # how it handles boundary conditions
numberer RCM; # renumber dof's to minimize band-width (optimization), if you want to
system BandGeneral ; # how to store and solve the system of equations in the analysis (large model: try UmfPack)
test NormDispIncr $Tol 20 ; # determine if convergence has been achieved at the end of an iteration step
algorithm Newton ; # use Newton's solution algorithm: updates tangent stiffness at every iteration
integrator DisplacementControl $IDctrlNode $IDctrlDOF $Dincr;
analysis Static
# --------------------------------- perform Static Pushover Analysis
set Nsteps [expr int($Dmax/$Dincr)]; # number of pushover analysis steps
set fmt1 "%s Pushover analysis: CtrlNode %.3i, dof %.1i, Disp=%.4f %s"; # format for screen/file output of DONE/PROBLEM analysis
for {set i 1} {$i <= $Nsteps} {incr i} {
set ok [analyze 1]
if {$ok != 0} {
# if analysis fails, we try some other stuff, performance is slower inside this loop
set Dstep 0.0;
set ok 0
while {$Dstep <= 1.0 && $ok == 0} {
set controlDisp [nodeDisp $IDctrlNode $IDctrlDOF ]
set Dstep [expr $controlDisp/$Dmax]
set ok [analyze 1 ]
# if analysis fails, we try some other stuff
# performance is slower inside this loop global maxNumIterStatic; # max no. of iterations performed before "failure to converge" is ret'd
if {$ok != 0} {
puts "Trying Newton with Initial Tangent .."
test NormDispIncr $Tol 2000 0
algorithm Newton -initial
set ok [analyze 1]
test NormDispIncr $Tol 500 0
algorithm Newton
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm Newton
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm Newton
}
}; # end while loop
}; # end if ok !0
if {$ok != 0 } {
puts [format $fmt1 "PROBLEM" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] "milimeter"]
} else {
puts [format $fmt1 "DONE" $IDctrlNode $IDctrlDOF [nodeDisp $IDctrlNode $IDctrlDOF] "milimeter" ]
}
puts [eigen 1]
}
# -----------------------------------------------------------------------------------------------------