Fire Load Pattern in more recent versions

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

Moderators: silvia, selimgunay, Moderators

Post Reply
mcoar
Posts: 4
Joined: Thu Sep 21, 2017 7:06 am
Location: Princeton University

Fire Load Pattern in more recent versions

Post by mcoar » Sat Apr 11, 2020 11:27 am

Hi everyone, I am having trouble getting the Fire pattern to run successfully in OpenSees. I've tried a lot of variations in input files and syntax, but no luck. If anyone would be able to help me I would be very grateful - I'm trying to crank out some results for a paper before my thesis defense. I put my current working code and input file formats below. The model will run, but my recorders are showing force and moment results of the form y = mx, when the input temperatures are not linear.
Thanks!

I am using OpenSees version 3.2.0, tcl86t.dll, Windows 10 Pro, 64-bit.
I am using a combination of Cypress and Atom editors.
I am plotting results with MATLAB 16B.

Current version:
# define model
model basic -ndm 2 -ndf 3

# --------------------------------------------------------------------------------------------------------------
# N O D E S
# --------------------------------------------------------------------------------------------------------------
node 1 0. 0.
node 2 0. 0.4425
node 3 0. 0.885
node 4 0. 1.3275
node 5 0. 1.77
node 6 0. 2.2125
node 7 0. 2.655
node 8 0. 3.0975
node 9 0. 3.54

# --------------------------------------------------------------------------------------------------------------
# R E S T R A I N T S
# --------------------------------------------------------------------------------------------------------------
# fix $NodeTag x-transl y-transl z-rot
fix 1 1 1 1
fix 9 1 0 1

# --------------------------------------------------------------------------------------------------------------
# D I S P L A C E M E N T - B A S E D B E A M - C O L U M N E L E M E N T S
# --------------------------------------------------------------------------------------------------------------
# Geometric Transformation
set transfTag 1
geomTransf Linear $transfTag

# Sections Definition used by dispBeamColumn Elements
# (if they have not already been defined on this model domain)
set matTag 1
set Fy 250e+06; # [Pa] = [N/m2] = 1e-6 [N/mm2] = 1e-6 [MPa]
# uniaxialMaterial('Steel02Thermal',matTag, 500000, 2e+05, 0.15, 20, 0.925, 0.15, 0., 1., 0., 1., 0.)
uniaxialMaterial Steel01Thermal $matTag 210.e+9 250.e+6 0.01
# uniaxialMaterial('Steel01', matTag, 2.e11, 2.e11, 0.01)
set sectTag 314
set d 17.19
set bf 16.235
set tf 2.283
set tw 1.5625
Wsection $sectTag $matTag $matTag $matTag $d $bf $tf $tw 8 1 1 4
puts "a W section has been loaded"

# Beam integration

# Displacement-Based Beam Column Element Definition
# element dispBeamColumn $eleTag $iNode $jNode $numIntgrPts $secTag $transfTag <-mass $massDens>
set np 3

element dispBeamColumnThermal 1 1 2 $np $sectTag $transfTag -mass 0
element dispBeamColumnThermal 2 2 3 $np $sectTag $transfTag -mass 0
element dispBeamColumnThermal 3 3 4 $np $sectTag $transfTag -mass 0
element dispBeamColumnThermal 4 4 5 $np $sectTag $transfTag -mass 0
element dispBeamColumnThermal 5 5 6 $np $sectTag $transfTag -mass 0
element dispBeamColumnThermal 6 6 7 $np $sectTag $transfTag -mass 0
element dispBeamColumnThermal 7 7 8 $np $sectTag $transfTag -mass 0
element dispBeamColumnThermal 8 8 9 $np $sectTag $transfTag -mass 0
puts "Running analysis"

# --------------------------------------------------------------------------------------------------------------
# R E C O R D E R S
# --------------------------------------------------------------------------------------------------------------

recorder Node -file node25.out -time -node 2 5 -dof 1 disp
recorder Node -file node9.out -time -node 9 -dof 2 disp
recorder Element -file el148.out -time -ele 1 4 8 force
logFile "1MP.log"

#------------------------------------------------------------------------------
# L O A D S
# -----------------------------------------------------------------------------

# Loads - Gravity Pattern
set Ag 0.0595483; # [m2]
set Py [expr $Ag*$Fy]; # N - yield strength of column
set P [expr 0.25*$Py]; # N - 1/4 yield strength of column applied at top node
set patternTag 200
puts -$P
pattern Plain $patternTag Linear {
eleLoad -range 1 8 -type -beamThermal $Tbottom [expr -$d/2] $Ttop [expr $d/2]
load 9 0. [expr -$P] 0.
}

# Loads - Thermal Pattern

set Path1 "Series -fileTime time.txt -filePath Tplate1.txt"
set Path2 "Series -fileTime time.txt -filePath Tplate2.txt"
set Path3 "Series -fileTime time.txt -filePath Tplate3.txt"

set Path1a "Series -time {0 7 1000} -values {0 0 1}"
set Path2a "Series -time {0 7 1000} -values {0 0 1}"
set Path3a "Series -time {0 7 1000} -values {0 0 1}"

pattern Fire 6 $Path1a $Path1a $Path2a $Path2a $Path2a $Path2a $Path2a $Path3a $Path3a {
set Tbeam 1000.0
set Dbeam [expr $d/2]; # These values are essentially setting two thermal loads paths in each flange and 4 in the web
set offset [expr (0.99*$tf)]
set interval [expr ($Dbeam-$tf)/2]

eleLoad -ele 1 -type -beamThermal $Tbeam -$Dbeam $Tbeam [expr (-$Dbeam+$offset)] $Tbeam [expr (-$Dbeam+$tf)] $Tbeam [expr (-$Dbeam+$tf)+$interval] $Tbeam 0.0 $Tbeam [expr ($Dbeam-$tf)-$interval] $Tbeam [expr ($Dbeam-$tf)] $Tbeam [expr ($Dbeam-$offset)] $Tbeam $Dbeam;
eleLoad -ele 2 -type -beamThermal $Tbeam -$Dbeam $Tbeam [expr (-$Dbeam+$offset)] $Tbeam [expr (-$Dbeam+$tf)] $Tbeam [expr (-$Dbeam+$tf)+$interval] $Tbeam 0.0 $Tbeam [expr ($Dbeam-$tf)-$interval] $Tbeam [expr ($Dbeam-$tf)] $Tbeam [expr ($Dbeam-$offset)] $Tbeam $Dbeam;
eleLoad -ele 3 -type -beamThermal $Tbeam -$Dbeam $Tbeam [expr (-$Dbeam+$offset)] $Tbeam [expr (-$Dbeam+$tf)] $Tbeam [expr (-$Dbeam+$tf)+$interval] $Tbeam 0.0 $Tbeam [expr ($Dbeam-$tf)-$interval] $Tbeam [expr ($Dbeam-$tf)] $Tbeam [expr ($Dbeam-$offset)] $Tbeam $Dbeam;
eleLoad -ele 4 -type -beamThermal $Tbeam -$Dbeam $Tbeam [expr (-$Dbeam+$offset)] $Tbeam [expr (-$Dbeam+$tf)] $Tbeam [expr (-$Dbeam+$tf)+$interval] $Tbeam 0.0 $Tbeam [expr ($Dbeam-$tf)-$interval] $Tbeam [expr ($Dbeam-$tf)] $Tbeam [expr ($Dbeam-$offset)] $Tbeam $Dbeam;
eleLoad -ele 5 -type -beamThermal $Tbeam -$Dbeam $Tbeam [expr (-$Dbeam+$offset)] $Tbeam [expr (-$Dbeam+$tf)] $Tbeam [expr (-$Dbeam+$tf)+$interval] $Tbeam 0.0 $Tbeam [expr ($Dbeam-$tf)-$interval] $Tbeam [expr ($Dbeam-$tf)] $Tbeam [expr ($Dbeam-$offset)] $Tbeam $Dbeam;
eleLoad -ele 6 -type -beamThermal $Tbeam -$Dbeam $Tbeam [expr (-$Dbeam+$offset)] $Tbeam [expr (-$Dbeam+$tf)] $Tbeam [expr (-$Dbeam+$tf)+$interval] $Tbeam 0.0 $Tbeam [expr ($Dbeam-$tf)-$interval] $Tbeam [expr ($Dbeam-$tf)] $Tbeam [expr ($Dbeam-$offset)] $Tbeam $Dbeam;
eleLoad -ele 7 -type -beamThermal $Tbeam -$Dbeam $Tbeam [expr (-$Dbeam+$offset)] $Tbeam [expr (-$Dbeam+$tf)] $Tbeam [expr (-$Dbeam+$tf)+$interval] $Tbeam 0.0 $Tbeam [expr ($Dbeam-$tf)-$interval] $Tbeam [expr ($Dbeam-$tf)] $Tbeam [expr ($Dbeam-$offset)] $Tbeam $Dbeam;
eleLoad -ele 8 -type -beamThermal $Tbeam -$Dbeam $Tbeam [expr (-$Dbeam+$offset)] $Tbeam [expr (-$Dbeam+$tf)] $Tbeam [expr (-$Dbeam+$tf)+$interval] $Tbeam 0.0 $Tbeam [expr ($Dbeam-$tf)-$interval] $Tbeam [expr ($Dbeam-$tf)] $Tbeam [expr ($Dbeam-$offset)] $Tbeam $Dbeam;
}

# ----------------------------------------------------------------------
# Analysis options
# -------------------------------------------------------------------
set nstep 3000
set incrtemp [expr 1./$nstep]
system BandGeneral
numberer Plain
constraints Plain
integrator LoadControl $incrtemp
test NormDispIncr 1e-6 100
algorithm Newton
analysis Static
set ok [analyze $nstep]

set disp5 [nodeDisp 5 1]
set disp2 [nodeDisp 2 1]
set disp9 [nodeDisp 9 2]

puts "node 2: $disp2, node 5: $disp5, node 9 vert: $disp9"

set f4 [eleResponse 4 force]
puts "forces 4: $f4"
___________________________________________________________________________________________________________
My input files look like this:
Tplate1.txt
_______________________
20.0
21.74
27.881
40.626
63.597
93.549
123.51
153.62
183.98
214.67
245.72 etc.

time.txt
___________________________
0.0
60.0
120.0
180.0
240.0
300.0
360.0
420.0
480.0
540.0
600.0
660.0
720.0 etc.

time.txt and Tplate1,2,3.txt are the same length.
____________________________________________________________________________________________


I have also tried the following input for thermal loads:
pattern Plain 30 Linear {
set Tbeam 1.0
set Dbeam [expr $d/2]
set offset [expr (0.99*$tf)]
set interval [expr ($Dbeam-$tf)/2]

eleLoad -ele 2 -type -beamThermal -source temperature.txt -$Dbeam [expr (-$Dbeam+$offset)] [expr (-$Dbeam+$tf)] [expr (-$Dbeam+$tf)+$interval] 0.0 [expr ($Dbeam-$tf)-$interval] [expr ($Dbeam-$tf)] [expr ($Dbeam-$offset)] $Dbeam;
eleLoad -ele 1 -type -beamThermal -source temperature.txt -$Dbeam [expr (-$Dbeam+$offset)] [expr (-$Dbeam+$tf)] [expr (-$Dbeam+$tf)+$interval] 0.0 [expr ($Dbeam-$tf)-$interval] [expr ($Dbeam-$tf)] [expr ($Dbeam-$offset)] $Dbeam;
eleLoad -ele 3 -type -beamThermal -source temperature.txt -$Dbeam [expr (-$Dbeam+$offset)] [expr (-$Dbeam+$tf)] [expr (-$Dbeam+$tf)+$interval] 0.0 [expr ($Dbeam-$tf)-$interval] [expr ($Dbeam-$tf)] [expr ($Dbeam-$offset)] $Dbeam;
eleLoad -ele 4 -type -beamThermal -source temperature.txt -$Dbeam [expr (-$Dbeam+$offset)] [expr (-$Dbeam+$tf)] [expr (-$Dbeam+$tf)+$interval] 0.0 [expr ($Dbeam-$tf)-$interval] [expr ($Dbeam-$tf)] [expr ($Dbeam-$offset)] $Dbeam;
eleLoad -ele 5 -type -beamThermal -source temperature.txt -$Dbeam [expr (-$Dbeam+$offset)] [expr (-$Dbeam+$tf)] [expr (-$Dbeam+$tf)+$interval] 0.0 [expr ($Dbeam-$tf)-$interval] [expr ($Dbeam-$tf)] [expr ($Dbeam-$offset)] $Dbeam;
eleLoad -ele 6 -type -beamThermal -source temperature.txt -$Dbeam [expr (-$Dbeam+$offset)] [expr (-$Dbeam+$tf)] [expr (-$Dbeam+$tf)+$interval] 0.0 [expr ($Dbeam-$tf)-$interval] [expr ($Dbeam-$tf)] [expr ($Dbeam-$offset)] $Dbeam;
eleLoad -ele 7 -type -beamThermal -source temperature.txt -$Dbeam [expr (-$Dbeam+$offset)] [expr (-$Dbeam+$tf)] [expr (-$Dbeam+$tf)+$interval] 0.0 [expr ($Dbeam-$tf)-$interval] [expr ($Dbeam-$tf)] [expr ($Dbeam-$offset)] $Dbeam;
eleLoad -ele 8 -type -beamThermal -source temperature.txt -$Dbeam [expr (-$Dbeam+$offset)] [expr (-$Dbeam+$tf)] [expr (-$Dbeam+$tf)+$interval] 0.0 [expr ($Dbeam-$tf)-$interval] [expr ($Dbeam-$tf)] [expr ($Dbeam-$offset)] $Dbeam;
}

Where the input file looks like:
temperature.txt
___________________________
0.0 20.000 20.000 20.000 20.000 20.000 20.000 20.000 20.000 20.000
60.0 21.740 21.740 22.527 22.527 22.527 22.527 22.527 20.948 20.948
120.0 27.881 27.881 31.373 31.373 31.373 31.373 31.373 24.309 24.309
180.0 40.626 40.626 49.515 49.515 49.515 49.515 49.515 31.344 31.344
240.0 63.597 63.597 81.798 81.798 81.798 81.798 81.798 44.165 44.165
300.0 93.549 93.549 123.050 123.050 123.050 123.050 123.050 61.185 61.185
360.0 123.510 123.510 163.270 163.270 163.270 163.270 163.270 78.581 78.581
420.0 153.620 153.620 202.870 202.870 202.870 202.870 202.870 96.363 96.363
480.0 183.980 183.980 242.120 242.120 242.120 242.120 242.120 114.540 114.540
540.0 214.670 214.670 281.150 281.150 281.150 281.150 281.150 133.140 133.140
600.0 245.720 245.720 320.010 320.010 320.010 320.010 320.010 152.150 152.150
660.0 277.150 277.150 358.670 358.670 358.670 358.670 358.670 171.610 171.610 etc.

But the results are the same.
_____________________________________________________________

If you're the brave soul willing to help me, here is my MATLAB plotting script in case you would like visual results.
% Plot TCL output
clear
clc

cd 'C:\Users\Lab User\OneDrive\Documents\OpenSees\thermalExamples\1MP'
data = load('el148.out');
iter = data(:,1);
figure(1);clf
hold on; grid off
for i = 2:size(data,2)
plot(iter,data(:,i))
end

tempdata = load('Tplate1.txt')
td2 = load('Tplate2.txt')
td3 = load('Tplate3.txt')
figure(2);clf
hold on
plot(tempdata)
plot(td2)
plot(td3)

Any help would be appreciated. Thank you!

Post Reply