144 lines
3.6 KiB
Text
144 lines
3.6 KiB
Text
|
|
# Eigen analysis of a two-storey one-bay frame; Example 10.5 from "Dynamics of Structures" book by Anil Chopra
|
||
|
|
|
||
|
|
# units: kips, in, sec
|
||
|
|
|
||
|
|
# Vesna Terzic, 2010
|
||
|
|
|
||
|
|
#delete all previosly constructed objects
|
||
|
|
wipe;
|
||
|
|
|
||
|
|
#set input variables
|
||
|
|
#--------------------
|
||
|
|
|
||
|
|
#mass
|
||
|
|
set m [expr 100.0/386.0]
|
||
|
|
|
||
|
|
#number of modes
|
||
|
|
set numModes 2
|
||
|
|
|
||
|
|
#material
|
||
|
|
set A 63.41
|
||
|
|
set I 320.0
|
||
|
|
set E 29000.0
|
||
|
|
|
||
|
|
#geometry
|
||
|
|
set L 240.
|
||
|
|
set h 120.
|
||
|
|
|
||
|
|
# 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;
|
||
|
|
|
||
|
|
# 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 $A $E [expr 2.*$I] $TransfTag;
|
||
|
|
element elasticBeamColumn 2 3 5 $A $E $I $TransfTag;
|
||
|
|
element elasticBeamColumn 3 2 4 $A $E [expr 2.*$I] $TransfTag;
|
||
|
|
element elasticBeamColumn 4 4 6 $A $E $I $TransfTag;
|
||
|
|
# beams
|
||
|
|
element elasticBeamColumn 5 3 4 $A $E [expr 2.*$I] $TransfTag;
|
||
|
|
element elasticBeamColumn 6 5 6 $A $E $I $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
|
||
|
|
|
||
|
|
# record the eigenvectors
|
||
|
|
#------------------------
|
||
|
|
record
|
||
|
|
|
||
|
|
# 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
|
||
|
|
|
||
|
|
# 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}] ]"
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|