Seismo-VLAB  1.3
An Open-Source Finite Element Software for Meso-Scale Simulations

Background

The FIB3DLINESECTION (or FIB2DLINESECTION) class creates a fiber line Section class that have different behavior at each Fiber. In general, a Fib2DLineSection or Fib3DLineSection can represent the geometry of any cross section.

FiberRectangular.png

The section properties are:

  • Area properties: \(A = \sum_{k=1}^{n_f} A_k\)
  • Inertia properties: \(I_{22} = \sum_{k=1}^{n_f} A_k \left( x_3^k - \bar{x}_3 \right)^2 \,, \; I_{33} = \sum_{k=1}^{n_f} A_k \left( x_2^k - \bar{x}_2 \right)^2\)
  • Geometric center from bottom left corner (point of reference): \(\bar{x}_3 = \displaystyle{\frac{ \sum_{k=1}^{n_f} A_k\,E_k\, x_3^k}{\sum_{k=1}^{n_f} A_k\,E_k}}\), and \(\bar{x}_2 = \displaystyle{\frac{ \sum_{k=1}^{n_f} A_k\,E_k\, x_2^k}{\sum_{k=1}^{n_f} A_k\,E_k}}\)

REFERENCE:

  • Dae Hung Kang, Gary Haussmann, and Victor Saouma. "An Optimized Computational Environment for Real Time Hybrid Simulation" (draft), Department of Civil Environmental and Architectural Engineering University of Colorado, August 31, 2009
  • Fabio F. Taucer, Enrico Spacone, and Filip C. Filippou. "A Fiber Beam-Column Element for Seismic Response Analysis of Reinforced Concrete Structures", Report No. UCB/EERC-91/17 Earthquake Engineering Research Center College of Engineering University of California, Berkeley, December 1991.

Pre-Analysis

The python Pre-Analysis in the 01-Pre_Process/Method/Attach.py file provides with an interface to create a general fiber section. For example the Patch and Layer allow to construct any general section geometry.

  • Define a RECTANGULAR PATCH using the following dictionary structure,

    "patch": {
          "Tag": {
              'name' : 'RECTANGULAR',
              'fiber' : int,
              'nfibz' : int,
              'nfiby' : int,
              'coords' : [[z1,y1],[z2,y2]]
          }
    }
    

    where 'fiber' is the fiber identifier the patch is made of, 'coords' is a list with the coordinates of the lower-left corner and the upper-right corner, 'nfibz' and 'nfiby' the number of fibers in \(x_3\) and \(x_2\) respectively.

    Example

    Create the reinforced concrete layers showed in figure above
    patch = {
    '1': {'name': 'RECTANGULAR', 'fiber': 1, 'nfibz': 5,'nfiby': 30, 'coords': [[z1,y1],[z2,y2]]},
    '2': {'name': 'RECTANGULAR', 'fiber': 2, 'nfibz': 3,'nfiby': 5, 'coords': [[z3,y3],[z4,y4]]},
    '3': {'name': 'RECTANGULAR', 'fiber': 2, 'nfibz': 3,'nfiby': 5, 'coords': [[z5,y5],[z6,y6]]}
    }

  • Define a CIRCULAR PATCH using the following dictionary structure,
    "patch": {
          "Tag": {
              'name' : 'CIRCULAR',
              'fiber' : int,
              'nfibr' : int,
              'nfibt' : int,
              'center' : [zc, yc],
              'coords' : [[r1,t1],[r2,t2]]
          }
    }
    
    where 'fiber' is the fiber identifier the patch is made of, 'coords' is a list with the coordinates of the lower-left corner and the upper-right corner, 'nfibr' and 'nfibt' the number of fibers in radial and angular direction respectively.
  • Define a LINE LAYER using the following dictionary structure,

    "layer": {
          "Tag": {
              'name' : 'LINE',
              'fiber': int,
              'nfib' : int,
              'area' : double,
              'coords' : [[z1,y1],[z2,y2]]
          }
    }
    

    where 'fiber' is the fiber identifier the layer is made of, 'coords' is a list with the coordinates of the initial and end points of the line, 'nfib' the number of fibers layers along the line.

    Example

    Create the steel layers showed in figure above
    layer = {
    '1': {'name': 'LINE', 'fiber': 3, 'nfib': 3, 'area': 1.0, 'coords': [[z1,y1],[z2,y1]]},
    '2': {'name': 'LINE', 'fiber': 3, 'nfib': 2, 'area': 1.0, 'coords': [[z1,y2],[z2,y2]]},
    '3': {'name': 'LINE', 'fiber': 3, 'nfib': 2, 'area': 1.0, 'coords': [[z1,y3],[z2,y3]]},
    '4': {'name': 'LINE', 'fiber': 3, 'nfib': 3, 'area': 1.0, 'coords': [[z1,y4],[z2,y4]]}
    }

  • Define a ARCH LAYER using the following dictionary structure,
    "layer": {
          "Tag": {
              'name' : 'ARCH',
              'fiber': int,
              'nfib' : int,
              'area' : double,
              'radius': double,
              'angle' : [t1,t2],
              'center' : [zc, yc]
          }
    }
    
    where 'fiber' is the fiber identifier the layer is made of, 'coords' is a list with the coordinates of the initial and end points of the line, 'nfib' the number of fibers layers along the line.

This information is then used to create a Fib2DLineSection or Fib3DLineSection section using json format as follows:

  • addSection(tag, name='Fib3DLineSection', model='Fiber', attributes):

    • tag : The identifier of this section, i.e., tag > -1
    • name : Seismo-VLAB section class name
    • model : model of the section, i.e., model=plain,fiber
    • attributes : Specific properties for the created section, for example
      • 'h' : is the hight of the inscribed rectangle that contains the section.
      • 'b' : is the width of the inscribed rectangle that contains the section.
      • 'kappa2' : is the cross section shear factor (As2/A) along x2 local axis.
      • 'kappa3' : is the cross section shear factor (As3/A) along x3 local axis.
      • 'patch' : is dictionary that contains the patches that form the section.
      • 'layer' : is dictionary that contains the layers that form the section.
      • 'ip' : is the section insertion point.
      • 'theta' : is The section rotation angle about axis 1.

    Example

    A FIB3DLINESECTION section can be defined using the python interface as follows:
    SVL.addSection(tag=1, name='Lin2DRectangular', model='Plain', attributes={'b': 0.25, 'h': 0.75, 'patch': patch, 'layer': layer})

    Application
    Please refer to the D24-DY_WideFlange_Linear_Fiber_Section_Frame2.py or D25-DY_WideFlange_NonLinear_Fiber_Section_Frame2.py files located at 03-Validations/01-Debugging/ to see an example on how to define a Fib3DLineSection section.

On the contrary, the 01-Pre_Process/Method/Remove.py file provides with an interface to depopulate the Entities dictionary. For example, to remove an already define Section, use:

  • delSection(tag):
    • tag : The identifier of the section to be removed, i.e., tag > -1

Run-Analysis

The C++ Run-Analysis in the 02-Run_Process/03-Sections/01-Plain/Lin3DRectangular.cpp file provides the class implementation. A Lin3DRectangular section is created using the built-in json parse-structure provided in the Driver.hpp. A Lin3DRectangular is defined inside the "Sections" json field indicating its "Tag" as follows,

  • {
        "Sections": {
            "Tag": {
                "name" : "FIB3DLINESECTION",
                "model" : "FIBER",
                "attributes": {
                    "zi": [ ],
                    "yi": [ ],
                    "Ai": [ ],
                    "fiber": [ ],
                    "kappa2": double,
                    "kappa3": double,
                    "ip": int,
                    "theta": double
                }
            }
        }
    }
    
    Variable Description
    Tag Unique Section object identifier.
    zi Vector with the \(x_3\) coordinate of each fiber.
    yi Vector with the \(x_2\) coordinate of each fiber.
    Ai Vector with the area of each fiber.
    kappa2 Cross section shear factor along x2 local axis
    kappa3 Cross section shear factor along x2 local axis
    ip The insertion point, see Insertion Point.
    theta The section rotation angle, see Local Axes.
    fiber Vector of identifier of each fiber.

    Attention
    The stress/strain coordinates at Section::GetStrainAt() or Section::GetStressAt() must be refereed to the point of reference shown in figure, and it will return the fiber that is closest to it.
    If stress/strain are evaluated outside the section domain, the response is zero.
    If not specified ip=10 and theta=0.0
    Example

    A FIB3DLINESECTION section of height 0.75, width 0.25 and made of fiber 1 and discretized in three areas is defined:
    { "Sections": { "1": { "name" : "FIB3DLINESECTION", "model": "FIBER", "attributes": { "h" : 0.75, "b" : 0.25, "zi" : [0.125, 0.125, 0.125], "yi" : [0.125, 0.375, 0.625], "Ai" : [0.0625, 0.0625, 0.0625], "fiber": [1,1,1] } } } }