Applying Cyclic Loading to ZeroLength Element

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

Moderators: silvia, selimgunay, Moderators

Post Reply
rgrosa
Posts: 6
Joined: Sat Jun 22, 2013 8:40 am
Location: University of Connecticut

Applying Cyclic Loading to ZeroLength Element

Post by rgrosa »

Hi all. I'm an undergrad student at UConn using OpenSees in research that I am doing. Ieventually want to model a 9-story frame using zero-length members and modified IMK bilin material and doing a series of analyses on the structure.

To understand how zero-length elements work, I wrote code that defined a single element with the IMK material and subjected it to cyclic loading as defined by AISC Seismic Provisions (which is the cyclic loading I will be applying to my full model):
(1) 6 cycles at θ = 0.00375 rad
(2) 6 cycles at θ = 0.005 rad
(3) 6 cycles at θ = 0.0075 rad
(4) 4 cycles at θ = 0.01 rad
(5) 2 cycles at θ = 0.015 rad
(6) 2 cycles at θ = 0.02 rad
(7) 2 cycles at θ = 0.03 rad
(8) 2 cycles at θ = 0.04 rad

I was expecting to obtain a graph in Microsoft Excel that looked as if it had a hysteretic response as most do in the examples that use the IMK material. However, I obtained a straight line.

Thinking my code may have been flawed, I searched the forums and found code that did exactly what mine did except it recorded in a different manner. This code was developed by vesna:


# ------------------------------------------------------------
# Rotational Spring (zeroLength element) with Bilin Materail
#-------------------------------------------------------------

# SET UP ----------------------------------------------------------------------------
wipe; # clear memory of all past model definitions
model BasicBuilder -ndm 2 -ndf 3; # Define the model builder, ndm=#dimension, ndf=#dofs

# nodal coordinates:
node 1 0 0; # node#, X, Y
node 2 0 0

# Single point constraints -- Boundary Conditions
fix 1 1 1 1; # node DX DY RZ
fix 2 1 1 0; # node DX DY RZ

# Define ELEMENTS -------------------------------------------------------------
# Material parameters
set matTagB 1

set K0 19246333.333
set as_Plus 0.0014
set My_Plus 109380.
set Lamda_S 5000.
set Lamda_C 5000.
set Lamda_A 5000.
set Lamda_K 5000.
set c_S 1.0
set c_C 1.0
set c_A 1.0
set c_K 1.0
set theta_p_Plus 0.02
set theta_pc_Plus 0.16
set Res_Pos 0.4
set theta_u_Plus 0.4
set D_Plus 1.0
uniaxialMaterial Bilin $matTagB $K0 $as_Plus $as_Plus $My_Plus [expr -$My_Plus] $Lamda_S $Lamda_C $Lamda_A $Lamda_K $c_S $c_C $c_A $c_K \ $theta_p_Plus $theta_p_Plus $theta_pc_Plus $theta_pc_Plus $Res_Pos $Res_Pos $theta_u_Plus $theta_u_Plus $D_Plus $D_Plus
# rotational hinge:
element zeroLength 1 1 2 -mat $matTagB -dir 6

# Create recorder
recorder Node -file Mphi.out -time -node 2 -dof 3 disp; # curvature (col 2)
recorder Element -file Moment.out -time -ele 1 force; # moment (col 7)

#Apply CYCLIC load
#------------------------------------
pattern Plain 1 Linear {
load 2 0.0 0.0 1.0;
}
# Set up analysis parameters
constraints Penalty 1.0e15 1.0e15 ;
numberer RCM ;
system BandGeneral ;
test EnergyIncr 1.e-6 25 0 ;
algorithm Newton ;

set controlnode 2
set loaddirection 3
set currentDisp 0.0
set ratio [expr 1./1000.]

foreach DincrT {0.00375 -0.0075 0.00375 0.00375 -0.0075 0.00375 0.00375 -0.0075 0.00375 0.00375 -0.0075 0.00375 0.00375 -0.0075 0.00375 0.00375 -0.0075 0.00375 0.005 -0.01 0.005 0.005 -0.01 0.005 0.005 -0.01 0.005 0.005 -0.01 0.005 0.005 -0.01 0.005 0.005 -0.01 0.005 0.0075 -0.015 0.0075 0.0075 -0.015 0.0075 0.0075 -0.015 0.0075 0.0075 -0.015 0.0075 0.0075 -0.015 0.0075 0.0075 -0.015 0.0075 0.01 -0.02 0.01 0.01 -0.02 0.01 0.01 -0.02 0.01 0.01 -0.02 0.01 0.015 -0.03 0.015 0.015 -0.03 0.015 0.02 -0.04 0.02 0.02 -0.04 0.02 0.03 -0.06 0.03 0.03 -0.06 0.03 0.04 -0.08 0.04 0.04 -0.08 0.04} {
set nSteps 1000.0
set Dincr [expr $ratio*$DincrT/$nSteps]
integrator DisplacementControl $controlnode $loaddirection $Dincr
analysis Static
if { $Dincr > 0 } {
set Dmax [expr $Dincr*$nSteps]
set ok 0
while {$ok == 0 && $currentDisp < $Dmax} {
set ok [analyze 1]
if {$ok != 0} {
puts "Trying Newton with Initial Tangent .."
test NormDispIncr 1.0e-6 2000 0
algorithm Newton -initial
set ok [analyze 1]
test NormDispIncr 1.0e-6 6 0
algorithm Newton
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm Newton
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm Newton
}
set currentDisp [nodeDisp $controlnode $loaddirection]
}
} elseif { $Dincr < 0 } {
set Dmax [expr $Dincr*$nSteps/2]
set ok 0
while {$ok == 0 && $currentDisp > $Dmax} {
set ok [analyze 1]
if {$ok != 0} {
puts "Trying Newton with Initial Tangent .."
test NormDispIncr 1.0e-6 2000 0
algorithm Newton -initial
set ok [analyze 1]
test NormDispIncr 1.0e-6 6 0
algorithm Newton
}
if {$ok != 0} {
puts "Trying Broyden .."
algorithm Broyden 8
set ok [analyze 1 ]
algorithm Newton
}
if {$ok != 0} {
puts "Trying NewtonWithLineSearch .."
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm Newton
}
set currentDisp [nodeDisp $controlnode $loaddirection]
}
}
}

print -node 2





Plotting the data that this code yielded actually gave me the same graph as the code that I wrote myself (Which was a pretty cool confidence boost I have to admit!). However, it still wasn't what I was expecting. When I ran the code with less cycles (what vesna had in the original example that was posted), it gave what looked like a simple hysteretic response graph.

I was wondering if somebody could explain why it changes so drastically with the change of cycles. I'm still learning the concepts behind these phenomena so it is not obvious to me. If anybody could provide assistance or point me in the right direction, I'd greatly appreciate it!

Thanks, and apologies for the long post!
f.ribeiro
Posts: 17
Joined: Sun May 01, 2011 2:22 pm
Location: Nottingham, UK

Re: Applying Cyclic Loading to ZeroLength Element

Post by f.ribeiro »

With the code above I'm afraid you're not reaching the yield moment. Thus you are obtaining a linear elastic response and not the desired hysteretic curve. By symply increasing the "ratio" variable you would fix that. However, I am not sure what's the purpose of this variable as is. In the expression "set Dincr [expr $ratio*$DincrT/$nSteps]" it seems you are doing twice the same, i.e. dividing by 1000.

F. Ribeiro
rgrosa
Posts: 6
Joined: Sat Jun 22, 2013 8:40 am
Location: University of Connecticut

Re: Applying Cyclic Loading to ZeroLength Element

Post by rgrosa »

f.ribeiro wrote:
> With the code above I'm afraid you're not reaching the yield moment. Thus
> you are obtaining a linear elastic response and not the desired hysteretic
> curve. By symply increasing the "ratio" variable you would fix
> that. However, I am not sure what's the purpose of this variable as is. In
> the expression "set Dincr [expr $ratio*$DincrT/$nSteps]" it seems
> you are doing twice the same, i.e. dividing by 1000.
>
> F. Ribeiro

Thank you for the reply! I changed the ratio variable and got a pretty nice hysteretic curve. Much appreciated.
nparsaeifard
Posts: 22
Joined: Sun Jul 10, 2011 2:08 am

Re: Applying Cyclic Loading to ZeroLength Element

Post by nparsaeifard »

Dear rgrosa I want to apply cyclic displacement (with increasing amplitude at each cycle) to a column to obtain the buckling load of the column. I write the following code using your commands. Is it correct?
(The cyclic displacement is applied in y direction and the node No. of two ends of the column are 116 and 216)

pattern Plain 1 Linear {
load 216 0.0 1.0 0 0 0 0;
}
# Set up analysis parameters
constraints Transformation ;
numberer RCM ;
system UmfPack ;
test NormDispIncr 0.01 100 0;
algorithm Newton ;

set controlnode 216
set loaddirection 2
set currentDisp 0.0
set ratio [expr 1./1000.]

foreach DincrT {0.0000375 -0.000075 0.0000375 0.0000375 -0.000075 0.0000375 0.0000375 -0.000075 0.0000375 0.0000375 -0.000075 0.0000375 0.0000375 -0.000075 0.0000375 0.0000375 -0.000075 0.0000375 0.00005 -0.0001 0.00005 0.00005 -0.0001 0.00005 0.00005 -0.0001 0.00005 0.00005 -0.0001 0.00005 0.00005 -0.0001 0.00005 0.00005 -0.0001 0.00005 0.000075 -0.00015 0.000075 0.000075 -0.00015 0.000075 0.000075 -0.00015 0.000075 0.000075 -0.00015 0.000075 0.000075 -0.00015 0.000075 0.000075 -0.00015 0.000075 0.0001 -0.0002 0.0001 0.0001 -0.0002 0.0001 0.0001 -0.0002 0.0001 0.0001 -0.0002 0.0001 0.00015 -0.0003 0.00015 0.00015 -0.0003 0.00015 0.0002 -0.0004 0.0002 0.0002 -0.0004 0.0002 0.0003 -0.0006 0.0003 0.0003 -0.0006 0.0003 0.0004 -0.0008 0.0004 0.0004 -0.0008 0.0004} {

recorder Node -file Data/deformation_node216.txt -node 216 -dof 2 deformation
recorder Node -file Data/reaction_node116.txt -node 116 -dof 2 reaction


set nSteps 1
set Dincr [expr $ratio*$DincrT/$nSteps]
integrator DisplacementControl $controlnode $loaddirection $Dincr
analysis Static
if { $Dincr > 0 } {
set Dmax [expr $Dincr*$nSteps]
set ok 0
while {$ok == 0 && $currentDisp < $Dmax} {
set ok [analyze 1]
if {$ok != 0} {
}
} elseif { $Dincr < 0 } {
set Dmax [expr $Dincr*$nSteps/2]
set ok 0
while {$ok == 0 && $currentDisp > $Dmax} {
set ok [analyze 1]
if {$ok != 0} {
}

set currentDisp [nodeDisp $controlnode $loaddirection]

}
}
}
Looking forward to your guidance
Thank you
rgrosa
Posts: 6
Joined: Sat Jun 22, 2013 8:40 am
Location: University of Connecticut

Re: Applying Cyclic Loading to ZeroLength Element

Post by rgrosa »

nparsaeifard,

I compared your code to mine and they look similar. I am not an expert at using OpenSees though. Based on my limited knowledge, I think it looks correct except I think the recorders need to be modified. However, I would seek another confirmation from somebody that has better credentials than me. I'm still learning the ins and outs of OpenSees myself and would not want to lead you down the wrong path. Best of luck! :)
nparsaeifard
Posts: 22
Joined: Sun Jul 10, 2011 2:08 am

Re: Applying Cyclic Loading to ZeroLength Element

Post by nparsaeifard »

Dear rgrosa
Thank you very much for your concern
bailiagng
Posts: 6
Joined: Sun Oct 27, 2013 2:56 am
Location: Lanzhou University Of Technology

The use of "uniaxialMaterial Bilin"

Post by bailiagng »

Hello everuone!
Can the uniaxialMaterial Bilin be used in element dispBeamColumn ? The section of element is defined in fiber .
I am looking forwad your kind help!
fmk
Site Admin
Posts: 5884
Joined: Fri Jun 11, 2004 2:33 pm
Location: UC Berkeley
Contact:

Re: Applying Cyclic Loading to ZeroLength Element

Post by fmk »

you could! though it is not usual to do so (as it is set up for moment-rotation use in a zeroLength element when modeling hinge at element end). just remember that as a fiber in a fiber section in a dispBeamColumn it is being asked for stress and tangent given the strain (not moment given rotation) and so you would have to specify your input parameters accordingly.
bailiagng
Posts: 6
Joined: Sun Oct 27, 2013 2:56 am
Location: Lanzhou University Of Technology

Re: Applying Cyclic Loading to ZeroLength Element

Post by bailiagng »

Thank you very much, fmk .
You are really as kind as you look !
Post Reply