running many integrators in one time step

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

Moderators: silvia, selimgunay, Moderators

Post Reply
aminasareh
Posts: 8
Joined: Sun Aug 30, 2009 11:53 am
Location: Missouri university of science and technology

running many integrators in one time step

Post by aminasareh »

Hi all

I have a cantilever column modeled and I want to apply 6 displacements in 6 directions at the free end of the column at once. The displacements are achieved from some other program in separate files (dispx.dat, dispy.dat,...). I have to get the reaction forces from opensees for the 6 directions and feed them back into the other program.
Now my problem is that all displacements have to be applied in one timestep and it seems that opensees cannot run many integrators in one analysis at once. I compared the answers with abaqus and hand calculations and I found out that opensees is giving wrong answers. This code is pretty easy but I'm sure that there is something wrong with running integrators at once. Does anyone have any idea how I can modify this code to get proper results for all six directions at on time step.

This is the code I'm using:

# Use a 3D model with 6 degrees of freedom
model basic -ndm 3 -ndf 6;


# Begin tower nodes
node 1 0.0 0.0 0.0;
node 2 0.0 0.0 0.876;
node 3 0.0 0.0 1.752;
node 4 0.0 0.0 2.628;
node 5 0.0 0.0 3.504;
node 6 0.0 0.0 4.38;
node 7 0.0 0.0 5.256;
node 8 0.0 0.0 6.132000000000001;
node 9 0.0 0.0 7.008000000000001;
node 10 0.0 0.0 7.884000000000001;
node 11 0.0 0.0 8.760000000000002;
node 12 0.0 0.0 9.636000000000001;
node 13 0.0 0.0 10.512;
node 14 0.0 0.0 11.388;
node 15 0.0 0.0 12.264;
node 16 0.0 0.0 13.139999999999999;
node 17 0.0 0.0 14.015999999999998;
node 18 0.0 0.0 14.891999999999998;
node 19 0.0 0.0 15.767999999999997;
node 20 0.0 0.0 16.644;
node 21 0.0 0.0 17.52;
node 22 0.0 0.0 18.396;
node 23 0.0 0.0 19.272000000000002;
node 24 0.0 0.0 20.148000000000003;

# Define the geometric transforms
geomTransf Linear 2000 1 0 0


# Begin tower elements
element elasticBeamColumn 1 1 2 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 2 2 3 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 3 3 4 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 4 4 5 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 5 5 6 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 6 6 7 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 7 7 8 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 8 8 9 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 9 9 10 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 10 10 11 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 11 11 12 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 12 12 13 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 13 13 14 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 14 14 15 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 15 15 16 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 16 16 17 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 17 17 18 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 18 18 19 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 19 19 20 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 20 20 21 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 21 21 22 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 22 22 23 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;
element elasticBeamColumn 23 23 24 0.6565745648230567 210000000.0 80769230.76923077 5.81960201389299 2.909801006946495 2.909801006946495 2000;

# Fix the base of the tower
fix 1 1 1 1 1 1 1

pattern Plain 1 Linear {

# Begin tower gravity
load 2 -0.0 -0.0 -48.52214835965947 0.0 0.0 0.0;
load 3 -0.0 -0.0 -48.34826018413288 0.0 0.0 0.0;
load 4 -0.0 -0.0 -48.174372008606085 0.0 0.0 0.0;
load 5 -0.0 -0.0 -48.000483833079294 0.0 0.0 0.0;
load 6 -0.0 -0.0 -47.8265956575525 0.0 0.0 0.0;
load 7 -0.0 -0.0 -47.6527074820255 0.0 0.0 0.0;
load 8 -0.0 -0.0 -47.47881930649891 0.0 0.0 0.0;
load 9 -0.0 -0.0 -47.30493113097232 0.0 0.0 0.0;
load 10 -0.0 -0.0 -47.13104295544553 0.0 0.0 0.0;
load 11 -0.0 -0.0 -45.57639498136299 0.0 0.0 0.0;
load 12 -0.0 -0.0 -44.02689924951799 0.0 0.0 0.0;
load 13 -0.0 -0.0 -43.863315558466695 0.0 0.0 0.0;
load 14 -0.0 -0.0 -43.699731867415714 0.0 0.0 0.0;
load 15 -0.0 -0.0 -43.536148176364726 0.0 0.0 0.0;
load 16 -0.0 -0.0 -43.372564485313646 0.0 0.0 0.0;
load 17 -0.0 -0.0 -43.20898079426246 0.0 0.0 0.0;
load 18 -0.0 -0.0 -43.04539710321127 0.0 0.0 0.0;
load 19 -0.0 -0.0 -42.881813412160184 0.0 0.0 0.0;
load 20 -0.0 -0.0 -42.718229721109196 0.0 0.0 0.0;
load 21 -0.0 -0.0 -41.88964999465035 0.0 0.0 0.0;
load 22 -0.0 -0.0 -41.063646389310264 0.0 0.0 0.0;
load 23 -0.0 -0.0 -40.90521494049704 0.0 0.0 0.0;
load 24 -0.0 -0.0 -40.746783491683814 0.0 0.0 0.0;

}

# Begin tower nodal masss
mass 2 4.946192493339395 4.946192493339395 4.946192493339395 0.0 0.0 0.0;
mass 3 4.928466889310181 4.928466889310181 4.928466889310181 0.0 0.0 0.0;
mass 4 4.910741285280946 4.910741285280946 4.910741285280946 0.0 0.0 0.0;
mass 5 4.893015681251712 4.893015681251712 4.893015681251712 0.0 0.0 0.0;
mass 6 4.875290077222477 4.875290077222477 4.875290077222477 0.0 0.0 0.0;
mass 7 4.857564473193221 4.857564473193221 4.857564473193221 0.0 0.0 0.0;
mass 8 4.839838869164007 4.839838869164007 4.839838869164007 0.0 0.0 0.0;
mass 9 4.822113265134793 4.822113265134793 4.822113265134793 0.0 0.0 0.0;
mass 10 4.804387661105558 4.804387661105558 4.804387661105558 0.0 0.0 0.0;
mass 11 4.645911822768908 4.645911822768908 4.645911822768908 0.0 0.0 0.0;
mass 12 4.487961187514576 4.487961187514576 4.487961187514576 0.0 0.0 0.0;
mass 13 4.47128598965002 4.47128598965002 4.47128598965002 0.0 0.0 0.0;
mass 14 4.454610791785496 4.454610791785496 4.454610791785496 0.0 0.0 0.0;
mass 15 4.437935593920971 4.437935593920971 4.437935593920971 0.0 0.0 0.0;
mass 16 4.421260396056437 4.421260396056437 4.421260396056437 0.0 0.0 0.0;
mass 17 4.404585198191891 4.404585198191891 4.404585198191891 0.0 0.0 0.0;
mass 18 4.387910000327347 4.387910000327347 4.387910000327347 0.0 0.0 0.0;
mass 19 4.371234802462812 4.371234802462812 4.371234802462812 0.0 0.0 0.0;
mass 20 4.354559604598287 4.354559604598287 4.354559604598287 0.0 0.0 0.0;
mass 21 4.270096839413899 4.270096839413899 4.270096839413899 0.0 0.0 0.0;
mass 22 4.185896675770669 4.185896675770669 4.185896675770669 0.0 0.0 0.0;
mass 23 4.169746680988485 4.169746680988485 4.169746680988485 0.0 0.0 0.0;
mass 24 4.153596686206301 4.153596686206301 4.153596686206301 0.0 0.0 0.0;

recorder Node -file PtfmXMotionFn.dat -node 1 -dof 1 reaction;
recorder Node -file PtfmYMotionFn.dat -node 1 -dof 2 reaction;
recorder Node -file PtfmZMotionFn.dat -node 1 -dof 3 reaction;
recorder Node -file PtfmXMotionMn.dat -node 1 -dof 4 reaction;
recorder Node -file PtfmYMotionMn.dat -node 1 -dof 5 reaction;
recorder Node -file PtfmZMotionMn.dat -node 1 -dof 6 reaction;

# Analyze gravity loading

constraints Plain; # how it handles boundary conditions
numberer Plain; # renumber dof's to minimize band-width
# (optimization), if you want to
system BandGeneral; # how to store and solve the system of
# equations in the analysis
test NormDispIncr 1.0e-12 40 0;
# determine if convergence has been achieved
# at the end of an iteration step
algorithm Newton; # use Newton's solution algorithm: updates
# tangent stiffness at every iteration
integrator LoadControl 1; # determine the next time step for an analysis,
# apply gravity in 10 steps
analysis Static; # define type of analysis static or transient
analyze 1; # perform gravity analysis

puts "gravity Analysis Completed"
wipeAnalysis
loadConst -time 0.0; # hold gravity constant and restart time

#-------------------------------------------
set IDloadTag1 1000;
set Factor1 1
set Factor2 1


set file1 [open "dispX.dat" r]
set DispSeries_1 [expr [read $file1]*$Factor1]
close $file1
set file2 [open "dispY.dat" r]
set DispSeries_2 [expr [read $file2]*$Factor1]
close $file2
set file3 [open "dispZ.dat" r]
set DispSeries_3 [expr [read $file3]*$Factor1]
close $file3
set file4 [open "rotX.dat" r]
set DispSeries_4 [expr [read $file4]*$Factor2]
close $file4
set file5 [open "rotY.dat" r]
set DispSeries_5 [expr [read $file5]*$Factor2]
close $file5
set file6 [open "rotZ.dat" r]
set DispSeries_6 [expr [read $file6]*$Factor2]
close $file6

puts "displacement x from FAST = $DispSeries_1"
puts "displacement y from FAST = $DispSeries_2"
puts "displacement z from FAST = $DispSeries_3"
puts "rotation x from FAST = $DispSeries_4"
puts "rotation y from FAST = $DispSeries_5"
puts "rotation z from FAST = $DispSeries_6"



pattern Plain $IDloadTag1 "Constant" {
load 24 1.0 1.0 1.0 1.0 1.0 1.0
}

system SparseGeneral -piv;
test NormDispIncr 1.0e-12 40 0;
numberer Plain
constraints Plain
algorithm Newton
integrator DisplacementControl 24 1 $DispSeries_1
integrator DisplacementControl 24 2 $DispSeries_2
integrator DisplacementControl 24 3 $DispSeries_3
integrator DisplacementControl 24 4 $DispSeries_4
integrator DisplacementControl 24 5 $DispSeries_5
integrator DisplacementControl 24 6 $DispSeries_6
analysis Static
analyze 1;
puts "Static Analysis Completed"

wipe
M.A.Asareh
vesna
Posts: 3033
Joined: Tue May 23, 2006 11:23 am
Location: UC Berkeley

Re: running many integrators in one time step

Post by vesna »

The way you were doing the analysis would not do what you wanted. Replace this part of your code:

pattern Plain $IDloadTag1 "Constant" {
load 24 1.0 1.0 1.0 1.0 1.0 1.0
}

system SparseGeneral -piv;
test NormDispIncr 1.0e-12 40 0;
numberer Plain
constraints Plain
algorithm Newton
integrator DisplacementControl 24 1 $DispSeries_1
integrator DisplacementControl 24 2 $DispSeries_2
integrator DisplacementControl 24 3 $DispSeries_3
integrator DisplacementControl 24 4 $DispSeries_4
integrator DisplacementControl 24 5 $DispSeries_5
integrator DisplacementControl 24 6 $DispSeries_6
analysis Static
analyze 1;
puts "Static Analysis Completed"
wipe

with this one:

set dt 0.05; #define time interval
set numSteps 1000; #define number of points in the data file
timeSeries Path 1 -dt $dt -filePath dispX.dat -factor $Factor1
timeSeries Path 2 -dt $dt -filePath dispY.dat -factor $Factor1
timeSeries Path 3 -dt $dt -filePath dispZ.dat -factor $Factor1
timeSeries Path 4 -dt $dt -filePath rotX.dat -factor $Factor2
timeSeries Path 5 -dt $dt -filePath rotY.dat -factor $Factor2
timeSeries Path 6 -dt $dt -filePath rotZ.dat -factor $Factor2

pattern Plain 11 1 {
sp 24 1 1.0
}

pattern Plain 12 2 {
sp 24 2 1.0
}

pattern Plain 13 3 {
sp 24 3 1.0
}

pattern Plain 14 4 {
sp 24 4 1.0
}

pattern Plain 15 5 {
sp 24 5 1.0
}

pattern Plain 16 6 {
sp 24 6 1.0
}

system SparseGeneral -piv;
test NormDispIncr 1.0e-12 40 0;
numberer Plain
constraints Plain
algorithm Newton
integrator LoadControl $dt
analysis Static
analyze $numSteps;
puts "Static Analysis Completed"

wipe
aminasareh
Posts: 8
Joined: Sun Aug 30, 2009 11:53 am
Location: Missouri university of science and technology

Re: running many integrators in one time step

Post by aminasareh »

Thank you for your reply. I changed my code as you said, But it is not working. The constrain handler does not accept "plain". I changed it to other constrains but I'm still getting zero for all the outputs. I only have one value in the files "dispx", "dispY"... and I only need one value to be in the output files of opensees, because opensees is being read by another program in every timestep, and the other program is reading opensees outputs for each timestep.
If this is the correct way of applying displacements please let me know why it's not working. Have you tried running it? Because maybe I'm doing something wrong.
M.A.Asareh
aminasareh
Posts: 8
Joined: Sun Aug 30, 2009 11:53 am
Location: Missouri university of science and technology

Re: running many integrators in one time step

Post by aminasareh »

Thanks for your help. I got it now. It's working properly like this:


wipe;
# Unit ---------------------------------------------------------------------
# Force : KN
# Length: m
# --------------------------------------------------------------------------

# --------------------------------------------------------------------------
# Reading source files
# --------------------------------------------------------------------------
source weccblade_nodes.tcl;
puts "Reading nodal coordinates done!"
source weccblade_nodal_mass.tcl;
puts "Reading lumped masses done!"
source weccblade_constraints.tcl;
puts "Reading boundary conditions done!"
source weccblade_elements.tcl;
puts "Reading elements done!"
source weccblade_gravity.tcl;
puts "Reading gravity loads done!"

# --------------------------------------------------------------------------
# Analyze gravity loading
# --------------------------------------------------------------------------

constraints Plain; # how it handles boundary conditions
numberer Plain; # renumber dof's to minimize band-width
system BandGeneral; # how to store and solve the system of
test NormDispIncr 1.0e-12 40 0;
algorithm Newton; # use Newton's solution algorithm: updates
integrator LoadControl 1; # determine the next time step for an analysis,
analysis Static; # define type of analysis static or transient
analyze 1; # perform gravity analysis
puts "gravity Analysis Completed"
wipeAnalysis
loadConst -time 0.0; # hold gravity constant and restart time


# --------------------------------------------------------------------------
# Static Analysis (displacement as loading
# --------------------------------------------------------------------------

set Factor1 1
set Factor2 0.017453293

#------------- Getting displacements from FAST----------------------------


set file1 [open "dispX.dat" r]
set DispSeries_1 [expr [read $file1]*$Factor1]
close $file1
set file2 [open "dispY.dat" r]
set DispSeries_2 [expr [read $file2]*$Factor1]
close $file2
set file3 [open "dispZ.dat" r]
set DispSeries_3 [expr [read $file3]*$Factor1]
close $file3
set file4 [open "rotX.dat" r]
set DispSeries_4 [expr [read $file4]*$Factor2]
close $file4
set file5 [open "rotY.dat" r]
set DispSeries_5 [expr [read $file5]*$Factor2]
close $file5
set file6 [open "rotZ.dat" r]
set DispSeries_6 [expr [read $file6]*$Factor2]
close $file6

puts "displacement x from FAST = $DispSeries_1"
puts "displacement y from FAST = $DispSeries_2"
puts "displacement z from FAST = $DispSeries_3"
puts "rotation x from FAST = $DispSeries_4"
puts "rotation y from FAST = $DispSeries_5"
puts "rotation z from FAST = $DispSeries_6"

set dt 1; #define time interval
set numSteps 1; #define number of points in the data file


#------------- defining load patterns ----------------------------

pattern Plain 11 "Constant" {
sp 24 1 $DispSeries_1
}

pattern Plain 12 "Constant" {
sp 24 2 $DispSeries_2
}

pattern Plain 13 "Constant" {
sp 24 3 $DispSeries_3
}

pattern Plain 14 "Constant" {
sp 24 4 $DispSeries_4
}

pattern Plain 15 "Constant" {
sp 24 5 $DispSeries_5
}

pattern Plain 16 "Constant" {
sp 24 6 $DispSeries_6
}

puts "reading forces!"
recorder Element -file forces.dat -ele 23 globalForce;




#------------- Running analysis ----------------------------
system SparseGeneral -piv;
test NormDispIncr 1.0e-12 40 0;
numberer Plain
constraints Transformation
algorithm Newton
integrator LoadControl $dt
analysis Static
analyze $numSteps;
puts "Static Analysis Completed"
wipe

#------------- Making output files for FAST ----------------------------


set file11 [open forces.dat r]; #assign a channel to the file
set source [read $file11]
regsub -all -- {[[:space:]]+} $source " " source
set elmlst [split $source]; #make a list of elements on each line
set j 0
foreach elm $elmlst {
set A($j) $elm; # assuming array is named "A"
incr j
}
close $file11
set fid1 [open PtfmXMotionFn.dat w]; #assign a channel to the file
puts $fid1 "$A(0)"
close $fid1
set fid2 [open PtfmYMotionFn.dat w]; #assign a channel to the file
puts $fid2 "$A(1)"
close $fid2
set fid3 [open PtfmZMotionFn.dat w]; #assign a channel to the file
puts $fid3 "$A(2)"
close $fid3
set fid4 [open PtfmXMotionMn.dat w]; #assign a channel to the file
puts $fid4 "$A(3)"
close $fid4
set fid5 [open PtfmYMotionMn.dat w]; #assign a channel to the file
puts $fid5 "$A(4)"
close $fid5
set fid6 [open PtfmZMotionMn.dat w]; #assign a channel to the file
puts $fid6 "$A(5)"
close $fid6
M.A.Asareh
vesna
Posts: 3033
Joined: Tue May 23, 2006 11:23 am
Location: UC Berkeley

Re: running many integrators in one time step

Post by vesna »

I did not realize your input files have only one data. I'm glad you solved your problem.
Post Reply