Some checks failed
CI / lint (push) Has been cancelled
CI / test (macos-latest, 3.10) (push) Has been cancelled
CI / test (macos-latest, 3.11) (push) Has been cancelled
CI / test (macos-latest, 3.12) (push) Has been cancelled
CI / test (ubuntu-latest, 3.10) (push) Has been cancelled
CI / test (ubuntu-latest, 3.11) (push) Has been cancelled
CI / test (ubuntu-latest, 3.12) (push) Has been cancelled
CI / test (windows-latest, 3.10) (push) Has been cancelled
CI / test (windows-latest, 3.11) (push) Has been cancelled
CI / test (windows-latest, 3.12) (push) Has been cancelled
167 lines
4 KiB
Text
167 lines
4 KiB
Text
# Eigen analysis of a two-storey shear frame; Example 10.4 from "Dynamics of Structures" book by Anil Chopra - using equalDOF and very high Ib
|
|
|
|
# units: in, kips
|
|
|
|
wipe
|
|
|
|
#input
|
|
set m [expr 100.0/386.0]
|
|
set numModes 2
|
|
|
|
#material
|
|
set Ac 63.41
|
|
set Ic 320.0
|
|
set E 30000.0
|
|
set Ib 10e+12
|
|
set Ab 63.41
|
|
|
|
#geometry
|
|
set L 288.
|
|
set h 144.
|
|
|
|
# create data directory
|
|
file mkdir modes;
|
|
|
|
# define the model
|
|
#---------------------------------
|
|
#model builder
|
|
model BasicBuilder -ndm 2 -ndf 3
|
|
|
|
# nodal coordinates:
|
|
node 1 0. 0. ;
|
|
node 2 $L 0. ;
|
|
node 3 0. $h ;
|
|
node 4 $L $h ;
|
|
node 5 0. [expr 2*$h];
|
|
node 6 $L [expr 2*$h];
|
|
|
|
# Single point constraints -- Boundary Conditions
|
|
fix 1 1 1 1;
|
|
fix 2 1 1 1;
|
|
|
|
# MP constraints
|
|
equalDOF 3 4 2 3
|
|
equalDOF 5 6 2 3
|
|
|
|
# assign mass
|
|
mass 3 $m 0. 0. ;
|
|
mass 4 $m 0. 0. ;
|
|
mass 5 [expr $m/2.] 0. 0. ;
|
|
mass 6 [expr $m/2.] 0. 0. ;
|
|
|
|
# define geometric transformation:
|
|
set TransfTag 1;
|
|
geomTransf Linear $TransfTag ;
|
|
|
|
# define elements:
|
|
# columns
|
|
element elasticBeamColumn 1 1 3 $Ac $E [expr 2.*$Ic] $TransfTag;
|
|
element elasticBeamColumn 2 3 5 $Ac $E $Ic $TransfTag;
|
|
element elasticBeamColumn 3 2 4 $Ac $E [expr 2.*$Ic] $TransfTag;
|
|
element elasticBeamColumn 4 4 6 $Ac $E $Ic $TransfTag;
|
|
# beams
|
|
element elasticBeamColumn 5 3 4 $Ab $E $Ib $TransfTag;
|
|
element elasticBeamColumn 6 5 6 $Ab $E $Ib $TransfTag;
|
|
|
|
# record eigenvectors
|
|
#----------------------
|
|
for { set k 1 } { $k <= $numModes } { incr k } {
|
|
recorder Node -file [format "modes/mode%i.out" $k] -nodeRange 1 6 -dof 1 2 3 "eigen $k"
|
|
}
|
|
|
|
# perform eigen analysis
|
|
#-----------------------------
|
|
set lambda [eigen $numModes];
|
|
|
|
# calculate frequencies and periods of the structure
|
|
#---------------------------------------------------
|
|
set omega {}
|
|
set f {}
|
|
set T {}
|
|
set pi 3.141593
|
|
|
|
foreach lam $lambda {
|
|
lappend omega [expr sqrt($lam)]
|
|
lappend f [expr sqrt($lam)/(2*$pi)]
|
|
lappend T [expr (2*$pi)/sqrt($lam)]
|
|
}
|
|
|
|
puts "periods are $T"
|
|
|
|
# write the output file cosisting of periods
|
|
#--------------------------------------------
|
|
set period "modes/Periods.txt"
|
|
set Periods [open $period "w"]
|
|
foreach t $T {
|
|
puts $Periods " $t"
|
|
}
|
|
close $Periods
|
|
|
|
|
|
# create display for mode shapes
|
|
#---------------------------------
|
|
# $windowTitle $xLoc $yLoc $xPixels $yPixels
|
|
recorder display "Mode Shape 1" 10 10 500 500 -wipe
|
|
prp $h $h 1; # projection reference point (prp); defines the center of projection (viewer eye)
|
|
vup 0 1 0; # view-up vector (vup)
|
|
vpn 0 0 1; # view-plane normal (vpn)
|
|
viewWindow -200 200 -200 200; # coordiantes of the window relative to prp
|
|
display -1 5 20; # the 1st arg. is the tag for display mode (ex. -1 is for the first mode shape)
|
|
# the 2nd arg. is magnification factor for nodes, the 3rd arg. is magnif. factor of deformed shape
|
|
recorder display "Mode Shape 2" 10 510 500 500 -wipe
|
|
prp $h $h 1;
|
|
vup 0 1 0;
|
|
vpn 0 0 1;
|
|
viewWindow -200 200 -200 200
|
|
display -2 5 20
|
|
|
|
|
|
# Run a one step gravity load with no loading (to record eigenvectors)
|
|
#-----------------------------------------------------------------------
|
|
integrator LoadControl 0 1 0 0
|
|
|
|
# Convergence test
|
|
# tolerance maxIter displayCode
|
|
test EnergyIncr 1.0e-10 100 0
|
|
|
|
# Solution algorithm
|
|
algorithm Newton
|
|
|
|
# DOF numberer
|
|
numberer RCM
|
|
|
|
# Constraint handler
|
|
constraints Transformation
|
|
|
|
|
|
# System of equations solver
|
|
system ProfileSPD
|
|
|
|
analysis Static
|
|
set res [analyze 1]
|
|
if {$res < 0} {
|
|
puts "Modal analysis failed"
|
|
}
|
|
|
|
# get values of eigenvectors for translational DOFs
|
|
#---------------------------------------------------
|
|
set f11 [nodeEigenvector 3 1 1]
|
|
set f21 [nodeEigenvector 5 1 1]
|
|
set f12 [nodeEigenvector 3 2 1]
|
|
set f22 [nodeEigenvector 5 2 1]
|
|
puts "eigenvector 1: [list [expr {$f11/$f21}] [expr {$f21/$f21}] ]"
|
|
puts "eigenvector 2: [list [expr {$f12/$f22}] [expr {$f22/$f22}] ]"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|