Skip to content

Download MATLAB script

Plot steel and reinforced concrete fiber sections¤

This live script is written as a guided walkthrough for a post-processing workflow. It focuses on retrieving, organizing, and visualizing model or response data after an OpenSees analysis. Read the text cells first, then run each code cell in order so that the variables, model state, and recorded results are available for the later sections.

This function is primarily used to check section definitions.

This demo see also opsvis

1
2
3
clc; clear;
opsMAT = OpenSeesMatlab();
ops = opsMAT.opensees;
1
2
3
4
5
6
7
8
9
ops.wipe();
ops.model('basic', '-ndm', 2, '-ndf', 3);   % 2D frame

% For demonstration purposes only
ops.uniaxialMaterial('Elastic', 1, 1)
ops.uniaxialMaterial('Elastic', 2, 1)
ops.uniaxialMaterial('Elastic', 3, 1)
ops.uniaxialMaterial('Elastic', 4, 1)
ops.uniaxialMaterial('Elastic', 5, 1)

You need to set it to true to record fiber cross-section information.

1
opsMAT.pre.setSectionGeometryRecorder(true)

Then use the section-related commands normally:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
%% 1. Rotated steel shape
% Section tag = 1

ops.section('Fiber', 1, '-GJ', 1.0e6);

ops.patch('quad', 1, 4, 1, ...
     0.032,  0.317, ...
    -0.311,  0.067, ...
    -0.266,  0.005, ...
     0.077,  0.254);

ops.patch('quad', 1, 1, 4, ...
    -0.075,  0.144, ...
    -0.114,  0.116, ...
     0.075, -0.144, ...
     0.114, -0.116);

ops.patch('quad', 1, 4, 1, ...
     0.266, -0.005, ...
    -0.077, -0.254, ...
    -0.032, -0.317, ...
     0.311, -0.067);

%% 2. RC section
% Section tag = 2

Bcol = 0.711;
Hcol = Bcol;

c = 0.076;   % cover

y1col = Hcol / 2.0;
z1col = Bcol / 2.0;

y2col = 0.5 * (Hcol - 2 * c) / 3.0;

nFibZ = 1;
nFib = 20;
nFibCover = 2;
nFibCore = 16;
As9 = 0.0006446;

ops.section('Fiber', 2, '-GJ', 1.0e6);

% core
ops.patch('rect', 2, nFibCore, nFibZ, ...
    c - y1col, c - z1col, ...
    y1col - c, z1col - c);

% cover patches
ops.patch('rect', 3, nFib, nFibZ, ...
    -y1col, -z1col, ...
     y1col,  c - z1col);

ops.patch('rect', 3, nFib, nFibZ, ...
    -y1col,  z1col - c, ...
     y1col,  z1col);

ops.patch('rect', 3, nFibCover, nFibZ, ...
    -y1col,  c - z1col, ...
     c - y1col, z1col - c);

ops.patch('rect', 3, nFibCover, nFibZ, ...
     y1col - c, c - z1col, ...
     y1col,     z1col - c);

% reinforcement layers
ops.layer('straight', 4, 4, As9, ...
     y1col - c, z1col - c, ...
     y1col - c, c - z1col);

ops.layer('straight', 4, 2, As9, ...
     y2col, z1col - c, ...
     y2col, c - z1col);

ops.layer('straight', 4, 2, As9, ...
    -y2col, z1col - c, ...
    -y2col, c - z1col);

ops.layer('straight', 4, 4, As9, ...
     c - y1col, z1col - c, ...
     c - y1col, c - z1col);

%% 3. Circular cross-section
% Section tag = 3

nc1 = 8; nr1 = 3;
nc2 = 8; nr2 = 2;

ri1 = 0.1;  re1 = 0.2;
ri2 = 0.2;  re2 = 0.25;

a_beg = 0.0;
a_end = 360.0;

rbar3 = 0.225;
a_beg2 = 0.0;
a_end2 = 360.0;

ops.section('Fiber', 3, '-GJ', 1.0e6);

ops.patch('circ', 2, nc1, nr1, ...
    0.0, 0.0, ri1, re1, a_beg, a_end);

ops.patch('circ', 3, nc2, nr2, ...
    0.0, 0.0, ri2, re2, a_beg, a_end);

ops.layer('circ', 4, 6, As9, ...
    0.0, 0.0, rbar3, a_beg2, a_end2);
1
opsMAT.pre.plotSection(1);
figure_0.png
1
opsMAT.pre.plotSection(2);
figure_1.png
1
opsMAT.pre.plotSection(3);
figure_2.png
1
opsMAT.pre.setSectionGeometryRecorder(false)  % off