shear wall reversed cyclic 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
dapkraken
Posts: 15
Joined: Thu Aug 23, 2007 5:22 pm

shear wall reversed cyclic analysis

Post by dapkraken »

Dear Frank or Vesna,

I am having problems with a model of a shear wall that has problems converging to a solution when unloading and reloading in opposite direction (i.e., passing through zero) in a reversed cyclic analysis. I don't see why? and what combination for the analysis parameters for the displacement control integrator to set so that it does not stops. Here it is the code and also the complete model is in the following url: http://tinyurl.com/on4j4xc

Please, I would appreciate your help.
BEsts
David Padilla-Llano
PhD Candidate
Virginia Tech

# -------------------------------- #
#CYCLIC ANALYSIS PARAMETERS
constraints Transformation;
numberer RCM;
system UmfPack;
test NormDispIncr 1.0e-8 1000 0;
algorithm KrylovNewton;

# Read Displacement File into Vector
set fid [open $filename r]; #assign a channel to the file
set rowslst [split [read $fid] \n]; #make a list of lines
close $fid;
set i 0;
foreach rw $rowslst {
if {[llength $rw] == 0} {
continue;
} else {
set dispVect($i) $rw;
incr i;
}
}
set NumSteps $i;

# Analyse using Reversed Cyclic Routine
set ok 0;
set minDincr 1e-20;
set reduceBy 20;
set count 0;

for {set i 0} { ($i < $NumSteps) && ($ok == 0) } {incr i} {
set dispP [expr $dispVect($i)];
set currentDisp [nodeDisp $ControlNode $dofControlNode];
set nextDisp $dispP;
set dispIncr [expr $nextDisp - $currentDisp];

if {abs($dispIncr)<$minDincr} {set dispIncr $minDincr};
integrator DisplacementControl $ControlNode $dofControlNode $dispIncr;
analysis $analysisTypeStatic;
set ok [analyze 1];

while {$ok != 0} {
if {abs($dispIncr)<$minDincr} {set dispIncr $minDincr}
# Quartering the StepSize
set dispIncr [expr $dispIncr/4.0];
puts "The StepSize is QUARTERED: $dispIncr";
integrator DisplacementControl $ControlNode $dofControlNode $dispIncr

# Run with first supstepping
for {set j 1} {($j <= 4) && ($ok == 0)} {incr j} {
set ok [analyze 1];
# Try other Solvers if failed
if {$ok != 0} {source A6_12_Algorithms.tcl};
}

# If failed again try subStepping a bit more
if {$ok != 0} {
puts "SubStepping some more ... drastically I'd say";
set ok 0;
integrator DisplacementControl $ControlNode $dofControlNode [expr $dispIncr/$reduceBy];
analysis $analysisTypeStatic;
for {set j 1} { ($j <= $reduceBy) && ($ok == 0) } {incr j} {
set ok [analyze 1];
if {$ok != 0} {source A6_12_Algorithms.tcl};
if {$ok != 0} {
set ok 0;
test $testTypeStatic $TolStatic [expr $maxNumIterStatic/10] $printFlagStatic;
integrator DisplacementControl $ControlNode $dofControlNode [expr $dispIncr/(2*$reduceBy)];
analysis $analysisTypeStatic;
for {set jj 1} {($jj <= [expr 2*$reduceBy]) && ($ok == 0)} {incr jj} {
set ok [analyze 1]
if {$ok != 0} {source A6_12_Algorithms.tcl}
}
}
}
test $testTypeStatic $TolStatic $maxNumIterStatic $printFlagStatic;
integrator DisplacementControl $ControlNode $dofControlNode $dispIncr;
analysis $analysisTypeStatic;
}
# If stuck in loop quit the loop and move on
set count [expr $count + 1]
if {$count == 500} {set ok 0}
}
puts [format "Disp=%.4f %s" [nodeDisp $ControlNode $dofControlNode] "in."]
puts $DispFile [format "%12.8f" [nodeDisp $ControlNode $dofControlNode]];
}
set fmt1 "%s Analysis: CtrlNode %.3i, dof %.1i, Disp=%.4f %s"; # format for screen/file output of DONE/PROBLEM analysis
if {$ok != 0 } {
puts [format $fmt1 "PROBLEM" $ControlNode $dofControlNode [nodeDisp $ControlNode $dofControlNode] "in."]
} else {
puts [format $fmt1 "DONE" $ControlNode $dofControlNode [nodeDisp $ControlNode $dofControlNode] "in."]
}
Post Reply