Seismo-VLAB  1.3
An Open-Source Finite Element Software for Meso-Scale Simulations
Dynamic user-defined wave load

Background

The domain reduction method (DRM) is a modular two-step finite element methodology for transmitting ground motion in heterogeneous media. In this method, the model is first divided into an auxiliary problem that simulates the source and propagation without the localized features. The outputs of such problem are then used in order to derive effective forces and then applied to a second model which now contains the localized features.

DRM_Domain.png

In the figure the seismic region with two neighboring surfaces \(\Gamma_\textrm{NS}\) and \(\Gamma_\textrm{e}\) on which effective nodal forces \(P_\textrm{eff}\) defined as

\[ P_{\textrm{eff}} = \begin{bmatrix} P_\textrm{i}^\textrm{R} \\ P_\textrm{b}^\textrm{R} \\ P_\textrm{e}^\textrm{R} \end{bmatrix} = \begin{bmatrix} 0 \\ -\mathbf{M}_{be}^{\Omega_\textrm{F}} \, \ddot{u}_\textrm{e}^\textrm{B} - \mathbf{C}_{be}^{\Omega_\textrm{F}} \, \dot{u}_\textrm{e}^\textrm{B} - \mathbf{K}_{be}^{\Omega_\textrm{F}} \, u_\textrm{e}^\textrm{B} \\ \mathbf{M}_{eb}^{\Omega_\textrm{F}} \, \ddot{u}_\textrm{b}^\textrm{B} + \mathbf{C}_{eb}^{\Omega_\textrm{F}} \, \dot{u}_\textrm{b}^\textrm{B} + \mathbf{K}_{eb}^{\Omega_\textrm{F}} \, u_\textrm{b}^\textrm{B} \end{bmatrix} \, , \]

are to be applied. These forces are equivalent to and replace the original seismic forces \(P_\textrm{e}^R\) , which act in the vicinity of the causative fault. The DRM is achieved in SVL by defining either PLANE WAVE LOAD or GENERAL WAVE LOAD, the forces \(P_\textrm{i}^\textrm{R}\), \(P_\textrm{b}^\textrm{R}\), and \(P_\textrm{e}^\textrm{R}\) are computed internally, provided with the fields \(u_\textrm{e}^\textrm{B}\), \(\dot{u}_\textrm{b}^\textrm{B}\), and \(\ddot{u}_\textrm{b}^\textrm{B}\).

Currently, SVL allows to generate simple pattern of waves. SV, P, and Rayleigh waves can be generated in linear elastic layered media using the PLANE WAVE LOAD function. This will generate automatically the displacement, velocity and acceleration fields required for the DRM layer or elements.

REFERENCE:

  • Jacobo Bielak, Kostas Loukakis, Yoshiaki Hisada, and Chiaki Yoshimura. "Domain reduction method for three-dimensional earthquake modeling in localized regions, part I: theory". Bulletin of the Seismological Society of America, 93:817–824, 2003.

Pre-Analysis

The python Pre-Analysis in the 01-Pre_Process/Method/Attach.py file provides with an interface to create a GENERAL WAVE LOAD. This function can be used to create any type of wave field. For example, to create a Dynamic user-defined wave load using json format, use:

  • addLoad(tag, name, attributes):

    • tag : The identifier of this load, i.e., tag > -1
    • name : The Seismo-VLAB load class name, in this case 'ElementLoad'.
    • attributes : Specific properties for the created load.
      • 'fun' : The function identifier
      • 'list' : The identifier of the elements (DRM) where this load acts upon
      • 'type' : The type of element load, in this case 'GeneralWave'.

    The files name must be provided as name.$.ext, where $ represents the Node identifier, and ext the extension of the file. This file contains on the header 3 numbers: nt number of time steps, nc the number of time history columns (in 2D = 6, in 3D = 9), a boolean number (0 or 1) to denote the node is interior or exterior respectively. Then, the time series values follow, for 2D is arranged as \((u_x,u_y,v_x,v_y,a_x,a_y)\), and for 3D is arranged as \((u_x, u_y, u_z,v_x,v_y,v_z, a_x,a_y,a_z)\). See Figure below for more details.

    GeneralWave.png

    Example

    A GENERAL WAVE LOAD acting on elements 1,2,3,4,5 can be defined using the python interface as follows:
    SVL.addLoad(tag=1, name='ElementLoad', attributes={'fun': 1, 'type': 'GeneralWave', 'list': [1,2,3,4,5]})

    Application
    Please refer to the A02-DY_Lin_2DGeneralHorizontalPlaneWaveDRM_ElasticPStrain_Quad4.py file located at 03-Validations/02-Performance/ to see an example on how a GENERAL WAVE LOAD and its DYNAMIC FUNCTION (and structure of the input file) are defined.

The python Pre-Analysis in the 01-Pre_Process/Method/Attach.py file also provide an interface to create a PLANE WAVE LOAD for homogeneous layered media. In this particular case, the PLANE WAVE LOAD options is designed to compute the domain reduction fields (linear elastic) for a planar wave provided with a time series. This can be done using json format, use:

  • addFunction(tag, name, attributes):

    • tag : The identifier of this load, i.e., tag > -1
    • name : The Seismo-VLAB load class name, in this case 'TimeSeries'
    • attributes : Specific properties for the created load, for example
      • 'material' The array of material identifiers for each layer
      • 'layer' The array of soil thickness for each layer
      • 'file' The name of the input file to be loaded, see format below
      • 'df' The frequency discretization
      • 'CutOffFrequency' The maximum value of frequency to consider
      • 'option' The type of wave: 'P' (Compressive), 'SV' (Shear), 'RH' (Rayleigh)
      • 'theta' The vertical angle of incidence with respect to the vertical axis, 'theta' = 0 (vertical propagating)
      • 'phi' The horizontal angle of propagation (only required for 3D).

    The structure of the input file, required to be specified in function with identifier attributes['fun'], is as follows:

    PlaneWave.png

    Example

    A PLANE WAVE LOAD for 2 layers of material 1,2 with interfaces at 0, -20, can be defined using the python interface as follows:
    SVL.addFunction(tag=1, name='TimeSeries', attributes={'material': [1,2], 'layer': [0.0, -20], 'file': DRM.txt, 'option': 'SV', 'theta': 35, 'phi': 0.0})
    SVL.addLoad(tag=1, name='ElementLoad', attributes={'fun': 1, 'type': 'PlaneWave', 'list': [1,2,3,4,5]})

    Application
    Please refer to the B01-DY_Lin_2D_Incline_DRM_Fixed_Boundary_Elastic_Tria3.py file located at 03-Validations/02-Performance/ to see an example on how a PLANE WAVE LOAD and its DYNAMIC FUNCTION are defined.

Please refer to SVL/01-Pre_Process/Core/PlaneWave.py for more details in declarations and implementation aspects.

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 Load, use:

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

Now, to remove a already defined function, use:

  • delFunction(tag):
    • tag : The identifier of the function to be removed, i.e., tag > -1
Note
The PLANE WAVE LOAD is generated internally in the Pre-Analysis using the following functions:
  • GenerateDRMFiles():
    This function writes (generates) the DRM input files to be used in the Run-Analysis. The function writes the input information regarding displacement, velocity and acceleration at each DRM node.
  • WriteDRMFile():
    This function writes the nodal DRM information to a *.drm file. The structure of the generated file (for a 2D case) is as follows:
    GeneralWave.png

  • ParseDRMFile():
    This function parses the DRM file for plane-wave provided in the SVL.Entities['Functions']. The routine reads the displacement, velocity, or acceleration input signal depending on the option = ALL,DISP,VEL,ACCEL provided (at the header) by the user. The structure of the generated file is as follows:
    PlaneWave.png

    In addition, there are several functions that are defined to handle different wave patterns:
  • RHbackground2Dfield():
    This function generates the 2D DRM field for a Rayleigh wave in a homogeneous layered media at a particular node. This file has the implementation on how the Rayleigh wave displacements, velocities, and acceleration fields are computed.
  • RHbackground3Dfield():
    This function generates the 3D DRM field for a Rayleigh wave in a homogeneous layered media at a particular node. This file has the implementation on how the Rayleigh wave displacements, velocities, and acceleration fields are computed.
  • PSVbackground2Dfield():
    This function generates the 2D DRM field for a compressive or shear wave (P, SV) in a homogeneous layered media at a particular node. This file has the implementation on how the wave displacements, velocities, and acceleration fields are computed.
  • PSVbackground3Dfield():
    This function generates the 3D DRM field for a compressive or shear wave (P, SV) in a homogeneous layered half-space at a particular node. This file has the implementation on how the shear wave displacements, velocities, and acceleration fields are computed.
  • SHbackground3Dfield():
    This function generates the 3D DRM field for a shear wave (SH) in a homogeneous layered half-space at a particular node. This file has the implementation on how the shear wave displacements, velocities, and acceleration fields are computed.

Run-Analysis

The C++ Run-Analysis in the 02-Run_Process/05-Loads/Load.cpp file provides the class implementation. A STATIC/DYNAMIC SUPPORT MOTION LOAD is defined inside the "Loads" json field indicating its "Tag" as follows,

  • {
        "Loads": {
            "Tag": {
                "name" : "ELEMENTLOAD",
                "attributes": {
                    "name": "TIMESERIES",
                    "type": "GENERALWAVE",
                    "file": str,
                    "list": [ ]
                }
            }
        }
    }
    
    Variable Description
    Tag Unique load object identifier.
    file Represents the full path where the DRM files are located.
    list List of Element identifiers where the general wave pattern is applied.

    Attention
    The file path must contain a generic name, for example "DRMForces$.txt", so that the keyword "$" can be replaced by the Node identifier.
    The PLANE WAVE LOAD is treated as a GENERAL WAVE LOAD, since the Pre-Analysis creates all the files required for this purpose.
    Example

    A 3D GENERAL WAVE LOAD applied on elements 1, 11, 16, 21, 26 whose files are loaded at DRM/DRMForces$.txt:
    { "Loads": { "1": { "name" : "ELEMENTLOAD", "attributes": { "name": "TIMESERIES", "type": "GENERALWAVE", "file": "/full/path/to/folder/DRM/DRMForces$.txt", "list": [1,6,16,21,26] } } } }