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.
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:
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):
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.
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):
The structure of the input file, required to be specified in function with identifier attributes['fun'], is as follows:
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:
Now, to remove a already defined function, use:
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. |
file
path must contain a generic name, for example "DRMForces$.txt", so that the keyword "$" can be replaced by the Node identifier. 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] } } } }