Truss Element Modeling Stayed Cable

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

Moderators: silvia, selimgunay, Moderators

Post Reply
xwjshs
Posts: 46
Joined: Sun Apr 19, 2009 2:00 am
Location: Tongji University

Truss Element Modeling Stayed Cable

Post by xwjshs »

Hi, everybody

the model is about cable-stayed bridge. each stayed-cable is divided into multi-segments in model and using a truss element to model every segment. all truss elements are same material parameter for each stayed-cable such as elastic modulus and pretension.

then, the model is run. but the warning as following:

{
WARNING BandGenLinLapackSolver::solve() -LAPACK routine returned 688
WARNING NewtonLineSearch::solveCurrentStep() -the LinearSysOfEqn failed in solve
()
StaticAnalysis::analyze() - the Algorithm failed at iteration: 0 with domain at
load factor 0.1
OpenSees > analyze failed, returned: -3 error flag
Static Analysis of Model Done

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
}

finally,my question is each stayed-cable can't be divided into multi-truss elements? if can, what cause the error?

of course, if each stayed cable is divided into a truss element and the result will be right.

thank u.
vesna
Posts: 3033
Joined: Tue May 23, 2006 11:23 am
Location: UC Berkeley

Post by vesna »

If you divide the cable into multi-segments and model them with the truss elements you will run into stability problem. This is no way to go.

You can model the segments with the beam-column elements where the end segments should have pin at one end.
Last edited by vesna on Wed Nov 17, 2010 9:59 am, edited 1 time in total.
xwjshs
Posts: 46
Joined: Sun Apr 19, 2009 2:00 am
Location: Tongji University

Post by xwjshs »

[quote="vesna"]If you divide the cable into multi-segments and model them with the truss elements you will run into stability problem. This is no way to go.

You can model the segments with the beam-column elements where the end segments should have pin et one end.[/quote]

vesna , thank your replying and i will try it.
xwjshs
Posts: 46
Joined: Sun Apr 19, 2009 2:00 am
Location: Tongji University

Post by xwjshs »

[quote="xwjshs"][quote="vesna"]If you divide the cable into multi-segments and model them with the truss elements you will run into stability problem. This is no way to go.

You can model the segments with the beam-column elements where the end segments should have pin et one end.[/quote]

vesna, running is right when modelling the segments with the beam-column elements, but how to apply the prestress/prestrain for the beam-column element?

thank u.

the scripts are as following:
# ------------------------------
# Start of model generation
# ------------------------------

# Create ModelBuilder (with two-dimensions and 2 DOF/node)
wipe;
model BasicBuilder -ndm 3 -ndf 6

# Create nodes & add to Domain - command: node nodeId xCrd yCrd
set CoordX 100;
set TrussNodeNum 11;
set TrussEleNum 10;

# Constructing node
for {set i 1} {$i <=$TrussNodeNum} {incr i 1} {
node $i [expr ($i-1)*$CoordX/$TrussEleNum] 0.0 0.0
}

# Set the boundary conditions - command: fix nodeID xResrnt? yRestrnt?
fixX 0 1 1 1 1 1 1
fixX $CoordX 1 1 1 1 1 1

# Define materials for truss elements
# -----------------------------------
set IDmatTagCable 1;
set CableFy 335e3;
set CableEx 2.0e8;
uniaxialMaterial Steel02 $IDmatTagCable $CableFy $CableEx 0.01 15 0.925 0.15 0. 0. 0. 0. 0.3

# Define elements
# ---------------
# Create truss elements - command: element truss trussID node1 node2 A matID
set CableArea 0.01;
set transfTagTruss 1;
geomTransf Linear $transfTagTruss 0 0 -1;

for {set i 1} {$i <=$TrussEleNum} {incr i 1} {
element elasticBeamColumn $i $i [expr $i+1] $CableArea $CableEx $CableEx 0.01 0.001 0.001 $transfTagTruss
}

#for {set i 1} {$i <=$TrussEleNum} {incr i 1} {
# element truss $i $i [expr $i+1] $CableArea $IDmatTagCable
#}

# Define loads
# ------------
# Create a Plain load pattern with a linear TimeSeries

pattern Plain 1 "Linear" {
# Create the nodal load - command: load nodeID xForce yForce
load 2 0 -50 0 0 0 0
load 6 0 -50 0 0 0 0
}

# ------------------------------
# End of model generation
# ------------------------------

# ------------------------------
# Start of analysis generation
# ------------------------------

# Gravity-analysis parameters -- load-controlled static analysis
set Tol 1.0e-8;
set NstepGravity 10;
set DGravity [expr 1./$NstepGravity]; # first load increment;

constraints Plain;
numberer RCM;
system UmfPack;
test NormDispIncr $Tol 6 ;
algorithm Newton;
integrator LoadControl $DGravity;
analysis Static;
analyze $NstepGravity;

# Print the current state at node 4 and at all elements

print node [expr ($TrussNodeNum+1)/2]
vesna
Posts: 3033
Joined: Tue May 23, 2006 11:23 am
Location: UC Berkeley

Post by vesna »

xwjshs
Posts: 46
Joined: Sun Apr 19, 2009 2:00 am
Location: Tongji University

Post by xwjshs »

vesna,thank u your rplying.

using the command(uniaxialMaterial InitStressMaterial) can't apply the initial stress/strain for elastic beam-column element because there isn't IDmatTag term in elastic element, isn't?


Or please help me to solve and offer some suggestions for the question as following:

the cable will be divided into multi-segments and the pretension/stress of the cable will also be considered at the same time. how to carry out in OS.

thank u.
xwjshs
Posts: 46
Joined: Sun Apr 19, 2009 2:00 am
Location: Tongji University

Post by xwjshs »

vesna,thank u your rplying.

using the command(uniaxialMaterial InitStressMaterial) can't apply the initial stress/strain for elastic beam-column element because there isn't IDmatTag term in elastic element, isn't?


Or please help me to solve and offer some suggestions for the question as following:

the cable will be divided into multi-segments and the pretension/stress of the cable will also be considered at the same time. how to carry out in OS.
vesna
Posts: 3033
Joined: Tue May 23, 2006 11:23 am
Location: UC Berkeley

Post by vesna »

Yes, you can not apply it directly to elastic beam-column element but you can combine InitStressMaterial and Elastic uniaxial material and assign it to Section Agregator (http://opensees.berkeley.edu/wiki/index ... Aggregator). Once you have the section defined assign it to dispBeamColumn element and you will get what you need.

When you are defining a section make sure to have assigned uniaxial materials to P and Mz if in 2D and P, Mz, and My when in 3D. Also make sure to have enough number of elements along the length of the cable. To find the optimal number of elements increase the number of elements slowly until there is no significant change in the results.
xwjshs
Posts: 46
Joined: Sun Apr 19, 2009 2:00 am
Location: Tongji University

Post by xwjshs »

vesna, thank your suggestion, but i don't successfully run it.
would you check this scripts for me?
thank u very much.

# ------------------------------
# Start of model generation
# ------------------------------

# Create ModelBuilder (with Three-dimensions and 6 DOF/node)
wipe;
model BasicBuilder -ndm 3 -ndf 6
set dataDir Data;
file mkdir $dataDir;

# Create nodes & add to Domain - command: node nodeId xCrd yCrd zCrd
set CoordX 100;
set CableNodeNum 11;
set CableEleNum 10;

# Creating node
for {set i 1} {$i <=$CableNodeNum} {incr i 1} {
node $i [expr ($i-1)*$CoordX/$CableEleNum] 0.0 0.0
}

# Set the boundary conditions - command: fix nodeID xResrnt? yRestrnt?
fixX 0 1 1 1 1 1 1
fixX $CoordX 1 1 1 1 1 1

# Define materials for cable elements
# -----------------------------------
set IDmatTagCable1 1;
set IDmatTagCable2 101;
set CableFy 335e3;
set CableEx 2.0e8;
set InitStress 1.0e5;

uniaxialMaterial Elastic $IDmatTagCable1 $CableEx;
uniaxialMaterial InitStressMaterial $IDmatTagCable2 $IDmatTagCable1 $InitStress;

# Define section for cable
# -----------------------------------
set SecTagCable1 1;
set SecTagCable2 101;
set DiamCable 0.01;

section fiberSec $SecTagCable1 {; # Define the fiber section
patch circ $IDmatTagCable1 2 2 0.0 0.0 0.0 [expr $DiamCable/2] 0 360; # Define the four core patches
}; # end of fibersection definition

section aggregator $SecTagCable2 $IDmatTagCable1 $IDmatTagCable2 P Mz My -section $SecTagCable1;

# Define elements
# ---------------
# Create cable elements - command: element cable cableID node1 node2 A matID
set CableArea 0.01;
set NumIntgrPts 3;
set transfTagCable 1;
geomTransf PDelta $transfTagCable 0 0 -1;

#element dispBeamColumn $eleTag $iNode $jNode $numIntgrPts $secTag $transfTag
for {set i 1} {$i <=$CableEleNum} {incr i 1} {
element dispBeamColumn $i $i [expr $i+1] $NumIntgrPts $SecTagCable2 $transfTagCable;
}

# Define loads
# ------------
# Create a Plain load pattern with a linear TimeSeries

pattern Plain 1 "Linear" {
# Create the nodal load - command: load nodeID xForce yForce
#load 2 0 -50 0 0 0 0
load 6 0 -50 0 0 0 0
# applying pretension of cable element-----------------------------
for {set i 1} {$i <=$CableEleNum} {incr i 1} {
eleLoad -ele $i -type -beamUniform 0. 0. 100;
}
}

# Outputting Recorder
for {set i 1} {$i <=$CableNodeNum} {incr i 1} {
recorder Node -file $dataDir/DFree$i.out -time -node $i -dof 1 2 3 4 5 6 disp; # displacements of free node
}
recorder Node -file $dataDir/RBase.out -time -node 1 $CableNodeNum -dof 1 2 3 4 5 6 reaction; # support reaction

for {set i 1} {$i <=$CableEleNum} {incr i 1} {
recorder Element -file $dataDir/globalForceEle$i.out -time -ele $i globalForce
recorder Element -file $dataDir/localForceEle$i.out -time -ele $i localForce


}

# ------------------------------
# End of model generation
# ------------------------------

# ------------------------------
# Start of analysis generation
# ------------------------------

# Gravity-analysis parameters -- load-controlled static analysis
set Tol 1.0e-8;
set NstepGravity 10;
set DGravity [expr 1./$NstepGravity]; # first load increment;

constraints Plain;
numberer RCM;
system UmfPack;
test NormDispIncr $Tol 6 ;
algorithm Newton;
integrator LoadControl $DGravity;
analysis Static;
analyze $NstepGravity;

# Print the current state at node 4 and at all elements

print node [expr ($CableNodeNum+1)/2]

print ele 1
print ele $CableEleNum
vesna
Posts: 3033
Joined: Tue May 23, 2006 11:23 am
Location: UC Berkeley

Re: Truss Element Modeling Stayed Cable

Post by vesna »

Here is the corrected file. Look at the way I defined the section. I also changed the load to the tension load. The cable has negligible bending stiffness, so it is the best to test the cable model by exposing it to the tension load.

# ------------------------------
# Start of model generation
# ------------------------------

# Create ModelBuilder (with Three-dimensions and 6 DOF/node)
wipe;
model BasicBuilder -ndm 3 -ndf 6
set dataDir Data;
file mkdir $dataDir;

# Create nodes & add to Domain - command: node nodeId xCrd yCrd zCrd
set CoordX 100;
set CableNodeNum 11;
set CableEleNum 10;

# Creating node
for {set i 1} {$i <=$CableNodeNum} {incr i 1} {
node $i [expr ($i-1)*$CoordX/$CableEleNum] 0.0 0.0
}

# Set the boundary conditions - command: fix nodeID xResrnt? yRestrnt?
#fixX 0 1 1 1 1 1 1
#fixX $CoordX 1 1 1 1 1 1

fix 1 1 1 1 1 1 1
fix $CableNodeNum 0 1 1 1 1 1

# Define materials for cable elements
# -----------------------------------
set IDmatTagCable1 1;
set IDmatTagCable2 101;
set IDmatTagCable3 1001;
set IDmatTagCable4 1002;
#set CableFy 335e3;
set CableEx 2.0e8;
set InitStress 1.0e5;
set DiamCable 0.01;
set r [expr $DiamCable/2.0]; #cable radius
set A [expr $r**2*3.14]; #cable area
set I [expr $r**4*3.14/4.0]
set EI [expr $CableEx*$I]
set AE [expr $CableEx*$A]
set GJ 1.0e5;

uniaxialMaterial Elastic $IDmatTagCable1 $AE;
uniaxialMaterial InitStressMaterial $IDmatTagCable2 $IDmatTagCable1 [expr $InitStress*$A];
uniaxialMaterial Elastic $IDmatTagCable3 $EI
uniaxialMaterial Elastic $IDmatTagCable4 $GJ
puts "material defined"

# Define section for cable
# -----------------------------------
set SecTagCable1 1;
set SecTagCable2 101;

#two ways to define the section
#option 1
#section Uniaxial $SecTagCable1 $IDmatTagCable2 P
#section Aggregate $SecTagCable2 $IDmatTagCable3 Mz $IDmatTagCable3 My $IDmatTagCable4 T -section $SecTagCable1

#option 2
section Aggregator $SecTagCable2 $IDmatTagCable2 P $IDmatTagCable3 Mz $IDmatTagCable3 My $IDmatTagCable4 T

# section Fiber $SecTagCable1 {; # Define the fiber section
# patch circ $IDmatTagCable2 2 2 0.0 0.0 0.0 [expr $DiamCable/2] 0 360; # Define the four core patches
# }; # end of fibersection definition

puts "section defined"

# Define elements
# ---------------
# Create cable elements - command: element cable cableID node1 node2 A matID
#set CableArea 0.01;
set NumIntgrPts 3;
set transfTagCable 1;
geomTransf PDelta $transfTagCable 0 0 -1;

#element dispBeamColumn $eleTag $iNode $jNode $numIntgrPts $secTag $transfTag
for {set i 1} {$i <=$CableEleNum} {incr i 1} {
element dispBeamColumn $i $i [expr $i+1] $NumIntgrPts $SecTagCable2 $transfTagCable;
}
puts "model generated"

# Define loads
# ------------
# Create a Plain load pattern with a linear TimeSeries

pattern Plain 1 "Linear" {
# Create the nodal load - command: load nodeID xForce yForce
#load 2 0 -50 0 0 0 0
#load 6 0 -50 0 0 0 0
load $CableNodeNum 50. 0. 0. 0. 0. 0.
# applying pretension of cable element-----------------------------
# for {set i 1} {$i <=$CableEleNum} {incr i 1} {
# eleLoad -ele $i -type -beamUniform 0. 0. 100.;
# }
}

# Outputting Recorder
for {set i 1} {$i <=$CableNodeNum} {incr i 1} {
recorder Node -file $dataDir/DFree$i.out -time -node $i -dof 1 2 3 4 5 6 disp; # displacements of free node
}
recorder Node -file $dataDir/RBase.out -time -node 1 $CableNodeNum -dof 1 2 3 4 5 6 reaction; # support reaction

for {set i 1} {$i <=$CableEleNum} {incr i 1} {
recorder Element -file $dataDir/globalForceEle$i.out -time -ele $i globalForce
recorder Element -file $dataDir/localForceEle$i.out -time -ele $i localForce


}

# ------------------------------
# End of model generation
# ------------------------------

# ------------------------------
# Start of analysis generation
# ------------------------------

# Gravity-analysis parameters -- load-controlled static analysis
set Tol 1.0e-8;
set NstepGravity 10;
set DGravity [expr 1./$NstepGravity]; # first load increment;

constraints Plain;
numberer RCM;
system BandGeneral
#system UmfPack;
test NormDispIncr $Tol 6;
algorithm Newton;
integrator LoadControl $DGravity;
analysis Static;
analyze $NstepGravity;

# Print the current state at node 4 and at all elements

#print node [expr ($CableNodeNum+1)/2]

print node $CableNodeNum

print ele 1
print ele $CableEleNum
Post Reply