Negative Eigen Value

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

Moderators: silvia, selimgunay, Moderators

Post Reply
IsmBaha
Posts: 140
Joined: Sun Nov 17, 2013 11:00 pm
Location: University of Arizona

Negative Eigen Value

Post by IsmBaha » Fri Mar 10, 2017 3:46 pm

Hello Frank,

I created a simple complete Elastic frame and when I do the eigen value analysis I am getting the first eigen value negative and other values positive, but even though they are positive they are too small to give large T2=3.03, T3=0.937.

I narrowed down the problem that it stems from when I define beams elasticbeamcolumn and put weak hinges at both ends (then I equadof them to the master nodes in directions 1 2).

Do you know why this would be happening? I am going to attach the example code below in the next message.

Baha

IsmBaha
Posts: 140
Joined: Sun Nov 17, 2013 11:00 pm
Location: University of Arizona

Re: Negative Eigen Value

Post by IsmBaha » Fri Mar 10, 2017 3:50 pm

# Remove existing model
wipe;
# Create ModelBuilder (with two-dimensions and 2 DOF/node)
model BasicBuilder -ndm 2 -ndf 3;
set TIME_start [clock clicks -milliseconds];
puts "Analysis started at: $TIME_start";
source DisplayPlane.tcl; # procedure for displaying a plane in model
source DisplayModel2D.tcl;
set Negligible 1e-9; # a very small number to avoid problems with zero

set fnn 9; #
set Nbay 5; #
set baywidth 9150.0; # mm
set H1_floor 5490.0; # mm
set H_typ 3960.0; # mm
set H_tot [expr $H1_floor + 8.0*$H_typ];


#################################################################################
## Create Nodes and Apply Masses
#################################################################################
## Apply Masses
set m_02_8_tot [expr 0.989]; #
set m_02intcol [expr ($m_02_8_tot/2.0) / (4.0+1.0)]; #

# Base Nodes:
node 100 [expr 0.0] 0.0;
node 200 [expr 1.0*$baywidth] 0.0;
node 300 [expr 2.0*$baywidth] 0.0;
node 400 [expr 3.0*$baywidth] 0.0;
node 500 [expr 4.0*$baywidth] 0.0;
node 600 [expr 5.0*$baywidth] 0.0;
node 700 [expr 6.0*$baywidth] 0.0;
# Supports
fix 100 1 1 0; # gravity frame
fix 200 1 1 1;
fix 300 1 1 1;
fix 400 1 1 1;
fix 500 1 1 1;
fix 600 1 1 0; # gravity frame
fix 700 1 1 0; # P-D column

for {set level 1} {$level <=[expr $fnn]} {incr level 1} {
set Y [expr $H1_floor+($level-1)*$H_typ];
node [expr 100+$level] [expr 0.0] $Y -mass [expr $m_02intcol/2.0] $Negligible $Negligible;
node [expr 200+$level] [expr 1.0*$baywidth] $Y -mass [expr $m_02intcol/1.0] $Negligible $Negligible;
node [expr 300+$level] [expr 2.0*$baywidth] $Y -mass [expr $m_02intcol/1.0] $Negligible $Negligible;
node [expr 400+$level] [expr 3.0*$baywidth] $Y -mass [expr $m_02intcol/1.0] $Negligible $Negligible;
node [expr 500+$level] [expr 4.0*$baywidth] $Y -mass [expr $m_02intcol/1.0] $Negligible $Negligible;
node [expr 600+$level] [expr 5.0*$baywidth] $Y -mass [expr $m_02intcol/2.0] $Negligible $Negligible;
node [expr 700+$level] [expr 6.0*$baywidth] $Y;
# P-Delta Column Weak-hinge nodes
node [expr 800+$level] [expr 6.0*$baywidth] $Y;
if {$level != $fnn} {node [expr 900+$level] [expr 6.0*$baywidth] $Y};
# BF middle nodes
node [expr 3000+$level] [expr 1.5*$baywidth] $Y;
node [expr 4000+$level] [expr 3.5*$baywidth] $Y;

# Frame Beam weak hinge nodes
set Avalue 0.0; # 3500, just a number to visually see numbers on screen
node [expr 1100+$level] [expr 0.0+$Avalue] $Y;
node [expr 1200+$level] [expr 1.0*$baywidth-$Avalue] $Y;
node [expr 1300+$level] [expr 1.0*$baywidth+$Avalue] $Y;
node [expr 1400+$level] [expr 2.0*$baywidth-$Avalue] $Y;
node [expr 1500+$level] [expr 2.0*$baywidth+$Avalue] $Y;
node [expr 1600+$level] [expr 3.0*$baywidth-$Avalue] $Y;
node [expr 1700+$level] [expr 3.0*$baywidth+$Avalue] $Y;
node [expr 1800+$level] [expr 4.0*$baywidth-$Avalue] $Y;
node [expr 1900+$level] [expr 4.0*$baywidth+$Avalue] $Y;
node [expr 2000+$level] [expr 5.0*$baywidth-$Avalue] $Y;
}
# DisplayModel2D NodeNumbers;
# return;
#################################################################################
# # Material Properties
#################################################################################
set E 200.0;
set Elas_mat 1;
uniaxialMaterial Elastic $Elas_mat $E;

# very low stiffness material for pin connections
set Weak_mat 3;
uniaxialMaterial Elastic $Weak_mat 1.0e-20;


#################################################################################
# # Element Sections
#################################################################################

# Column Sections
set A_Col_1FB 94838.52; # mm^2
set I_Col_1FB [expr 3417260004.176]; # mm^4


# Beam Sections
set A_Beam_S12 30322.52; # mm^2
set I_Beam_S12 4062418713.856; # mm^4

# Rigid P-delta column
set A_rig_PDel 1.0e8; # mm2
set I_rig_PDel 1.0e12; # mm4

#################################################################################
# # Coordinate transformation
#################################################################################
set PDeltaTransf 1; # for beams and Columns
geomTransf PDelta $PDeltaTransf;
set IDTransf_brace 2; # for braces
geomTransf Corotational $IDTransf_brace;


#################################################################################
# # Create Elements
#################################################################################

for {set level 1} {$level <= $fnn} {incr level 1} {

## COLUMNS
##########################################################################################################################
element elasticBeamColumn [expr 1100+$level] [expr 100+$level-1] [expr 100+$level] $A_Col_1FB $E $I_Col_1FB $PDeltaTransf;
element elasticBeamColumn [expr 1200+$level] [expr 200+$level-1] [expr 200+$level] $A_Col_1FB $E $I_Col_1FB $PDeltaTransf;
element elasticBeamColumn [expr 1300+$level] [expr 300+$level-1] [expr 300+$level] $A_Col_1FB $E $I_Col_1FB $PDeltaTransf;
element elasticBeamColumn [expr 1400+$level] [expr 400+$level-1] [expr 400+$level] $A_Col_1FB $E $I_Col_1FB $PDeltaTransf;
element elasticBeamColumn [expr 1500+$level] [expr 500+$level-1] [expr 500+$level] $A_Col_1FB $E $I_Col_1FB $PDeltaTransf;
element elasticBeamColumn [expr 1600+$level] [expr 600+$level-1] [expr 600+$level] $A_Col_1FB $E $I_Col_1FB $PDeltaTransf;
##########################################################################################################################


## Rigid P-delta column and Trusses to connnect to Frame
##########################################################################################################################
if {$level == 1} {
element elasticBeamColumn [expr 1700+$level] [expr 700+$level-1] [expr 800+$level] $A_rig_PDel $E $I_rig_PDel $PDeltaTransf;
} else {
element elasticBeamColumn [expr 1700+$level] [expr 900+$level-1] [expr 800+$level] $A_rig_PDel $E $I_rig_PDel $PDeltaTransf;
}
element zeroLength [expr 2900+$level] [expr 800+$level] [expr 700+$level] -mat $Weak_mat -dir 6;
if {$level != $fnn} {element zeroLength [expr 3000+$level] [expr 900+$level] [expr 700+$level] -mat $Weak_mat -dir 6};
equalDOF [expr 700+$level] [expr 800+$level] 1 2;
if {$level != $fnn} {equalDOF [expr 700+$level] [expr 900+$level] 1 2};
# element truss 11501 11 12 $ArigidT $matID_RT;
element truss [expr 2800+$level] [expr 600+$level] [expr 700+$level] $A_rig_PDel $Elas_mat;
##########################################################################################################################


## BEAMS & their weak hinges
##########################################################################################################################
element elasticBeamColumn [expr 2100+$level] [expr 1100+$level] [expr 1200+$level] $A_Beam_S12 $E $I_Beam_S12 $PDeltaTransf;
element elasticBeamColumn [expr 2200+$level] [expr 1300+$level] [expr 3000+$level] $A_Beam_S12 $E $I_Beam_S12 $PDeltaTransf;
element elasticBeamColumn [expr 2300+$level] [expr 3000+$level] [expr 1400+$level] $A_Beam_S12 $E $I_Beam_S12 $PDeltaTransf;
element elasticBeamColumn [expr 2400+$level] [expr 1500+$level] [expr 1600+$level] $A_Beam_S12 $E $I_Beam_S12 $PDeltaTransf;
element elasticBeamColumn [expr 2500+$level] [expr 1700+$level] [expr 4000+$level] $A_Beam_S12 $E $I_Beam_S12 $PDeltaTransf;
element elasticBeamColumn [expr 2600+$level] [expr 4000+$level] [expr 1800+$level] $A_Beam_S12 $E $I_Beam_S12 $PDeltaTransf;
element elasticBeamColumn [expr 2700+$level] [expr 1900+$level] [expr 2000+$level] $A_Beam_S12 $E $I_Beam_S12 $PDeltaTransf;
# Weak Hinges of beams
element zeroLength [expr 6000+$level] [expr 100+$level] [expr 1100+$level] -mat $Weak_mat -dir 6;
element zeroLength [expr 6100+$level] [expr 1200+$level] [expr 200+$level] -mat $Weak_mat -dir 6;
element zeroLength [expr 6200+$level] [expr 200+$level] [expr 1300+$level] -mat $Weak_mat -dir 6;
element zeroLength [expr 6300+$level] [expr 1400+$level] [expr 300+$level] -mat $Weak_mat -dir 6;
element zeroLength [expr 6400+$level] [expr 300+$level] [expr 1500+$level] -mat $Weak_mat -dir 6;
element zeroLength [expr 6500+$level] [expr 1600+$level] [expr 400+$level] -mat $Weak_mat -dir 6;
element zeroLength [expr 6600+$level] [expr 400+$level] [expr 1700+$level] -mat $Weak_mat -dir 6;
element zeroLength [expr 6700+$level] [expr 1800+$level] [expr 500+$level] -mat $Weak_mat -dir 6;
element zeroLength [expr 6800+$level] [expr 500+$level] [expr 1900+$level] -mat $Weak_mat -dir 6;
element zeroLength [expr 6900+$level] [expr 2000+$level] [expr 600+$level] -mat $Weak_mat -dir 6;
# Constrain hinges to frame nodes horizontaly and verticaly so that rotationally will be pinned
equalDOF [expr 100+$level] [expr 1100+$level] 1 2;
equalDOF [expr 200+$level] [expr 1200+$level] 1 2;
equalDOF [expr 200+$level] [expr 1300+$level] 1 2;
equalDOF [expr 300+$level] [expr 1400+$level] 1 2;
equalDOF [expr 300+$level] [expr 1500+$level] 1 2;
equalDOF [expr 400+$level] [expr 1600+$level] 1 2;
equalDOF [expr 400+$level] [expr 1700+$level] 1 2;
equalDOF [expr 500+$level] [expr 1800+$level] 1 2;
equalDOF [expr 500+$level] [expr 1900+$level] 1 2;
equalDOF [expr 600+$level] [expr 2000+$level] 1 2;
##########################################################################################################################


## RIGID DIAPHRAGM
##################################################################################
## I am not sure about making this in the middle of the BF girder nodes too ??????
# constrain beam-column joints in a floor to have the same lateral displacement using the "equalDOF" command
equalDOF [expr 100+$level] [expr 200+$level] 1;
equalDOF [expr 100+$level] [expr 3000+$level] 1;
equalDOF [expr 100+$level] [expr 300+$level] 1;
equalDOF [expr 100+$level] [expr 400+$level] 1;
equalDOF [expr 100+$level] [expr 4000+$level] 1;
equalDOF [expr 100+$level] [expr 500+$level] 1;
equalDOF [expr 100+$level] [expr 600+$level] 1;
equalDOF [expr 100+$level] [expr 700+$level] 1;
##################################################################################
}
#
# DisplayModel2D NodeNumbers;
# return;



##########################################################################################################################
# LOADS
##########################################################################################################################
set W_halfFloor [expr 9702.09/2.0]; # 9702.09 kN is one whole floor weight (need to use half weight b/c I am modeling half structure)
set w_dist_02_8 [expr $W_halfFloor *(1.0/5.0) / ($baywidth * $Nbay)]; # kN/mm, on all beams 201-to-205
set W_cons_PDelCol [expr $W_halfFloor *(4.0/5.0)]; # kN, on P-Delta Column
# Uniformly dist loads on frame beams
pattern Plain 1 Constant {
for {set level 1} {$level <= $fnn} {incr level 1} {
eleLoad -ele [expr 2100+$level] -type -beamUniform -$w_dist_02_8 0.0;
eleLoad -ele [expr 2200+$level] -type -beamUniform -$w_dist_02_8 0.0;
eleLoad -ele [expr 2300+$level] -type -beamUniform -$w_dist_02_8 0.0;
eleLoad -ele [expr 2400+$level] -type -beamUniform -$w_dist_02_8 0.0;
eleLoad -ele [expr 2500+$level] -type -beamUniform -$w_dist_02_8 0.0;
eleLoad -ele [expr 2600+$level] -type -beamUniform -$w_dist_02_8 0.0;
eleLoad -ele [expr 2700+$level] -type -beamUniform -$w_dist_02_8 0.0;
}
}
# Load On P-Delta Column
pattern Plain 2 Constant {
for {set level 1} {$level <= $fnn} {incr level 1} {
# load $nodeID 0.0 [expr -$Load0] 0.0;
load [expr 700+$level] 0.0 -$W_cons_PDelCol 0.0;
}
}
# DisplayModel2D NodeNumbers;
# return;




###########################################################################################
# Display the model
###########################################################################################
recorder display "Model" 10 10 300 700 -wipe
prp 0 0 50
vup 0 1 0
vpn 0 0 1
set amplify 100;
display 1 2 $amplify; #display 1 2 10
###########################################################################################




########################################################################
# Gravity-analysis: load-controlled static analysis
########################################################################
set Tol 1.0e-6;
constraints Plain;
numberer RCM;
system BandGeneral; # large model: try UmfPack)
test NormDispIncr $Tol 6; # determine if convergence has been achieved at the end of an iteration step
algorithm Newton;
set NstepGravity 100; # apply gravity in 10 steps
set DGravity [expr 1.0/$NstepGravity]; # load increment
integrator LoadControl $DGravity; # determine the next time step for an analysis
analysis Static;
analyze $NstepGravity;

# check reactions
reactions;
set Rxn1 [nodeReaction 100];
set Rxn2 [nodeReaction 200];
set Rxn3 [nodeReaction 300];
set Rxn4 [nodeReaction 400];
set Rxn5 [nodeReaction 500];
set Rxn6 [nodeReaction 600];
set Rxn7 [nodeReaction 700];
set LoadOnFrame [expr [lindex $Rxn1 1]+[lindex $Rxn2 1]+[lindex $Rxn3 1]+[lindex $Rxn4 1]+[lindex $Rxn5 1]+[lindex $Rxn6 1]];
set TotalAxial [expr $LoadOnFrame+[lindex $Rxn7 1]];
puts "TotalInput= [expr $fnn*$W_halfFloor] kN; P-DealCol input= [expr $fnn*$W_cons_PDelCol] kN; Load on Frame= [expr $fnn*$W_halfFloor *(1.0/5.0)]"
puts "Response Total= $TotalAxial kN; P-DealCol resp= [lindex $Rxn7 1] kN; Load on FrameResp = $LoadOnFrame";
puts "Gravity Analysis is Done"


set Disp_3001 [nodeDisp [expr 3001]];
set Disp_3009 [nodeDisp [expr 3009]];
set Disp_4001 [nodeDisp [expr 4001]];
set Disp_4009 [nodeDisp [expr 4009]];

puts "Disp_3001 = $Disp_3001"
puts "Disp_3009 = $Disp_3009"
puts "Disp_4001 = $Disp_4001"
puts "Disp_4009 = $Disp_4009"

# maintain constant gravity loads and reset time to zero
loadConst -time 0.0
puts "Model Built"
###########################################################################################

# DisplayModel2D NodeNumbers;
# puts "here"
# return;

set pi [expr 2.0*asin(1.0)];
set lambdaN [eigen $fnn];

puts "lambdaN= $lambdaN"

set lambdaN [eigen -fullGenLapack $fnn]

IsmBaha
Posts: 140
Joined: Sun Nov 17, 2013 11:00 pm
Location: University of Arizona

Re: Negative Eigen Value

Post by IsmBaha » Fri Mar 10, 2017 11:54 pm

Looks like the model is lacking constraints, when I change the end conditions of the beams I defined or add more elements, the eigvalues gets back to normal.

Post Reply