How to: Static analysis with displacement in multiple DOFs

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

Moderators: silvia, selimgunay, Moderators

Post Reply
Diegoh
Posts: 4
Joined: Mon Dec 02, 2019 5:34 am

How to: Static analysis with displacement in multiple DOFs

Post by Diegoh » Sat Sep 23, 2023 7:31 am

Hello,

I am trying to simulate a column loaded axially with a constant axial force, and with 2 lateral loads (in the X and Z directions) and with an imposed top rotation along the Z-direction.
The load controlled axial load is fine, however, I have some problems when trying to add the 3 different displacement in displacement control (I need displacement control because the response exhibits softening). I have tried creating 3 different load patterns for each imposed displacement, as shown here:

while {$okTot == 0 && $i < $LoopLength} {

set index [expr $i]

#Lateral load X
pattern Plain [expr $LoopLength+$i] Linear {
load 2 1.0 0.0 0.0 0.0 0.0 0.0;
}

# We need to relative deformation of the loading protocol
# Subtract dUi+1 - dUi
set D1X [lindex $lateralDispX $index];
set D2X [lindex $lateralDispX $index-1];
#set dU1 [expr ($D1-$D2)*$L];
set dU1X [expr ($D1X-$D2X)];

# Create Nsteps from Amplitude to Amplitude
set dUX [expr ($dU1X)/$NSteps]

# Displacement Control Integrator
integrator DisplacementControl $CtrlNode $CtrlDOFLatX $dUX
puts "increment = [expr {$i}] / [expr {$LoopLength}] - Lateral X load";

set ok1 [ analyze $NSteps]

loadConst -time 0.0


# Lateral load Z
if {$ok1==0} {
pattern Plain [expr 2*$LoopLength+$i] Linear {
load 2 0.0 0.0 1.0 0.0 0.0 0.0;
}

# We need to relative deformation of the loading protocol
# Subtract dUi+1 - dUi
set D1Z [lindex $lateralDispZ $index];
set D2Z [lindex $lateralDispZ $index-1];
#set dU1 [expr ($D1-$D2)*$L];
set dU1Z [expr ($D1Z-$D2Z)];

# Create Nsteps from Amplitude to Amplitude
set dUZ [expr ($dU1Z)/$NSteps]

# Displacement Control Integrator
integrator DisplacementControl $CtrlNode $CtrlDOFLatZ $dUZ
puts "increment = [expr {$i}] / [expr {$LoopLength}] - Lateral Z load";

set ok2 [ analyze $NSteps]

loadConst -time 0.0
} else {
set ok2 1;
}


# Lateral rotation
if {$ok1==0 && $ok2==0} {
pattern Plain [expr 3*$LoopLength+$i] Linear {
load 2 0.0 0.0 0.0 0.0 0.0 1.0;
}

# We need to relative deformation of the loading protocol
# Subtract dUi+1 - dUi
set theta1Z [lindex $topRotation $index];
set theta2Z [lindex $topRotation $index-1];
#set dU1 [expr ($D1-$D2)*$L];
set dtheta1Z [expr ($theta1Z-$theta2Z)];

# Create Nsteps from Amplitude to Amplitude
set dthetaZ [expr ($dtheta1Z)/$NSteps]

# Displacement Control Integrator
integrator DisplacementControl $CtrlNode $CtrlDOFRotZ $dthetaZ
puts "increment = [expr {$i}] / [expr {$LoopLength}] - Rot Z load";

set ok3 [ analyze $NSteps]

loadConst -time 0.0

} else {
set ok3 1;
}


set okTot [expr $ok1 + $ok2 +$ok3]

set i [expr $i + 1 ]

}

However, the problem is that at each index i, the lateral displacement and the rotation in the z direction do not correspond to the one I want to impose. Because a displacement in the z direction creates a rotation in the z direction and vice-versa.

Can anyone help me with this? I appreciate it

Post Reply