error in displacement-based adaptive pushover analysis

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

Moderators: silvia, selimgunay, Moderators

Post Reply
aminamini
Posts: 24
Joined: Thu Jun 06, 2013 10:14 am
Location: SUT

error in displacement-based adaptive pushover analysis

Post by aminamini »

Hi

I have a question about an adaptive displacement-based pushover analysis. as you know, in an adaptive pushover procedure an eigen analysis should be done in each step to compute the lateral load pattern. then, the structure is pushed by this pattern. I have used recorders to extract the modal shapes for each mode. therefore, I can calculate the new displacement-based load pattern for the next step of the pushover analysis. but there is an error in recording the shape vectors. can anyone help me where is my wrong?

here is my script:

#
source Gravity.txt;

set sp1 0;
set sp2 0;
set sp3 0;
set sp4 0;
set sp5 0;
set sp6 0;
set sp7 0;
set sp8 0;
set sp9 0;
set sp10 0;

set spost [list 0 0 0 0 0 0 0 0 0 0]
set canaleAVal [open Autoval.out w]

set inc 0.001

for {set i 1} {$i<270} {incr i 1} {

puts " step number : $i ";

##### Recording the shape vectors of the first three modes

recorder Node -file def_modo_1.out -node 5 9 13 17 21 25 29 33 37 41 -dof 1 "eigen 1"

recorder Node -file def_modo_2.out -node 5 9 13 17 21 25 29 33 37 41 -dof 1 "eigen 2"

recorder Node -file def_modo_3.out -node 5 9 13 17 21 25 29 33 37 41 -dof 1 "eigen 3"


system BandGeneral;
constraints Transformation;
numberer RCM;
test EnergyIncr 1.0e-8 1000
algorithm KrylovNewton -initial
integrator LoadControl $inc 1 $inc $inc
analysis Static

# Definition of Lateral Displacements
set y [expr $i + 10000]
pattern Plain $y Linear {
sp 5 1 $sp1
sp 9 1 $sp2
sp 13 1 $sp3
sp 17 1 $sp4
sp 21 1 $sp5
sp 25 1 $sp6
sp 29 1 $sp7
sp 33 1 $sp8
sp 37 1 $sp9
sp 41 1 $sp10

sp 6 1 $sp1
sp 10 1 $sp2
sp 14 1 $sp3
sp 18 1 $sp4
sp 22 1 $sp5
sp 26 1 $sp6
sp 30 1 $sp7
sp 34 1 $sp8
sp 38 1 $sp9
sp 42 1 $sp10

sp 7 1 $sp1
sp 11 1 $sp2
sp 15 1 $sp3
sp 19 1 $sp4
sp 23 1 $sp5
sp 27 1 $sp6
sp 31 1 $sp7
sp 35 1 $sp8
sp 39 1 $sp9
sp 43 1 $sp10

sp 8 1 $sp1
sp 12 1 $sp2
sp 16 1 $sp3
sp 20 1 $sp4
sp 24 1 $sp5
sp 28 1 $sp6
sp 32 1 $sp7
sp 36 1 $sp8
sp 40 1 $sp9
sp 44 1 $sp10
}

set ok [analyze 1]
if {$ok != 0} {
set ok 0;
puts "\n Try ModifiedNewton algorithm... \n"
algorithm ModifiedNewton -initial
test EnergyIncr 1.0e-6 1000 0
set ok [analyze 1]
algorithm Newton -initial
if {$ok == 0} {
puts "\n ... ModifiedNewton succeed \n"
}
}
if {$ok != 0} {
puts "\n Try Newton algorithm by a initial tangente... \n"
algorithm Newton
test EnergyIncr 1.0e-6 100 0
set ok [analyze 1]
algorithm Newton -initial
if {$ok == 0} {
puts "\n ...Newton algorithm by a initial tangente esucceed \n"
}
}
if {$ok != 0} {
puts "\n Try KrylovNewton.. \n"
algorithm KrylovNewton
test EnergyIncr 1.0e-6 50 0
set ok [analyze 1]
algorithm Newton -initial
if {$ok == 0} {
puts "\n ...Broyden algorithm succeed \n"
}
}
if {$ok != 0} {
puts "\n Try NewtonLineSearch algorithm... \n"
algorithm NewtonLineSearch 0.8
test EnergyIncr 1.0e-8 100 0
set ok [analyze 1]
algorithm Newton -initial
if {$ok == 0} {
puts "\n ...NewtonLineSearch algorithm succeed \n"
}
}
if {$ok != 0} {
puts "\n Try Broyden algorithm... \n"
algorithm Broyden
test EnergyIncr 1.0e-6 50 0
set ok [analyze 1]
algorithm Newton -initial
if {$ok == 0} {
puts "\n ...Broyden algorithm succeed \n"
}
}


set d1 [nodeDisp 5 1];
set d2 [nodeDisp 9 1];
set d3 [nodeDisp 13 1];
set d4 [nodeDisp 17 1];
set d5 [nodeDisp 21 1];
set d6 [nodeDisp 25 1];
set d7 [nodeDisp 29 1];
set d8 [nodeDisp 33 1];
set d9 [nodeDisp 37 1];
set d10 [nodeDisp 41 1];

puts " Top Disp : $d10 ";

wipeAnalysis
remove loadPattern $y
set autoval [eigen 3]
puts $canaleAVal $autoval


# (j-Number of modes, k-Number of Story)
# Calculation of gamma and alpha
for {set j 1} {$j<=3} {incr j 1} {
set snum 0
set sden 0
for {set k 1} {$k<=10} {incr k 1} {
set h [expr $k-1]
set dkjj [lindex [gets [open def_modo_$j.out]] $h]
set dkjg [lindex [gets [open def_modo_$j.out]] 9]
set dkj [expr $dkjj/$dkjg]

set cont [expr $k*10+$j]
set phi{$cont} $dkj
set dqkj [expr pow ($dkj,2)]
set M 5440
set snum [expr $snum + $M*$dkj]
set sden [expr $sden + $M*$dqkj]
}

set gamma$j [expr $snum/$sden]
set alpha$j [expr $snum*$snum/$sden/54400]
}


for {set k 0} {$k<10} {incr k 1} {
set somdeltakj 0
for {set j 0} {$j<2} {incr j 1} {
set n [expr $j+1];
set alphaj [set alpha$n]
set gammaj [set gamma$n];
set cont [expr ($k+1)*10+($j+1)]
set dkj [set phi{$cont}]
set omegaqj [lindex $autoval $j]
set omegaj [expr sqrt ($omegaqj)]

# Period relative to the j-th mode of vibration
set Tj [expr (6.2832)/$omegaj]
set Ttemp [expr $Tj*100];
set Trnd [expr round($Ttemp)];
set Tj [expr $Trnd/100.];
puts "Tj : $Tj"
#################### Calculation of spectral displacements
set p 400
set Ts{0} 0
set MSH [open "Sd.txt" "r"];

for {set s 1} {$s <= $p} {incr s 1} {
gets $MSH line;
set Ts{$s} [lindex $line 0];
set A{$s} [lindex $line 1];
}

for {set s 0} {$s <= $p} {incr s 1} {
set h [expr $s-1]
if {$s==0} {set h 0}

if {[set Ts{$s}] == $Tj} {
set Saj [set A{$s}];
set s [expr $p+1];
} elseif {$Tj>[set Ts{$h}] && $Tj<[set Ts{$s}]} {
set Saj [expr [set A{$h}]+(([set A{$s}]-[set A{$h}])/([set Ts{$s}]-[set Ts{$h}]))*($Tj-[set Ts{$h}])];
set s [expr $p+1];
} elseif {$Tj>=4.01} {
set Saj [expr [set A{$p}]*16./pow($Tj,2)]
set s [expr $p+1];
}
}
set Sdj [expr $Saj]
close $MSH;

####################################
# Calculation of the spectral shifts
if {$j==0} {set sss $alphaj}

if {$j==1} {set alphaj [expr 1-$sss]}

#puts "$alphaj"
set deltakj [expr $alphaj*$dkj*$Sdj]
set somdeltakj [expr $deltakj+$somdeltakj]
}

set deltak $somdeltakj
lset spost $k $deltak
}

puts "ssssssssss $spost"

# Normalization of the movements according to the maximum

set spostmax [lindex [lsort -real $spost] end]
for {set k 0} {$k<10} {incr k 1} {
set Dk [lindex $spost $k]
set Dnk [expr $Dk/$spostmax]
lset spost $k $Dnk
set j [expr $k+1]
set sp$j $Dnk
}


set spTeor1 [expr $d1 + $sp1*$inc];
set spTeor2 [expr $d2 + $sp2*$inc];
set spTeor3 [expr $d3 + $sp3*$inc];
set spTeor4 [expr $d4 + $sp4*$inc];
set spTeor5 [expr $d5 + $sp5*$inc];
set spTeor6 [expr $d6 + $sp6*$inc];
set spTeor7 [expr $d7 + $sp7*$inc];
set spTeor8 [expr $d8 + $sp8*$inc];
set spTeor9 [expr $d9 + $sp9*$inc];
set spTeor10 [expr $d10 + $sp10*$inc];

set isucc [expr $i+1];


set sp1 [expr $spTeor1/$inc/$isucc]
set sp2 [expr $spTeor2/$inc/$isucc]
set sp3 [expr $spTeor3/$inc/$isucc]
set sp4 [expr $spTeor4/$inc/$isucc]
set sp5 [expr $spTeor5/$inc/$isucc]
set sp6 [expr $spTeor6/$inc/$isucc]
set sp7 [expr $spTeor7/$inc/$isucc]
set sp8 [expr $spTeor8/$inc/$isucc]
set sp9 [expr $spTeor9/$inc/$isucc]
set sp10 [expr $spTeor10/$inc/$isucc]

}
fmk
Site Admin
Posts: 5884
Joined: Fri Jun 11, 2004 2:33 pm
Location: UC Berkeley
Contact:

Re: error in displacement-based adaptive pushover analysis

Post by fmk »

if the problem is with the files not being written to, use the nodeEigenvector command to get the eigenvectors directly w/o having to go through the file system.
aminamini
Posts: 24
Joined: Thu Jun 06, 2013 10:14 am
Location: SUT

Re: error in displacement-based adaptive pushover analysis

Post by aminamini »

Thanks Dear fmk for your answer
It's solved.
Post Reply