Nonlinear Fluid Viscous Damper
ComputeFVDamperElasticity
material is used to simulate the hysteretic response of a nonlinear fluid viscous damper (FVD) and is used with two-node link type elements in MASTODON. For each subdomain (that may contain multiple link elements), the material properties are defined by creating the material block, ComputeFVDamperElasticity
, and the kernel block, StressDivergenceDamper
. Sample information is shown in the input file below.
[Kernels<<<{"href": "../../../syntax/Kernels/index.html"}>>>]
[./lr_disp_x]
type = StressDivergenceDamper<<<{"description": "Kernel for two-noded nonlinear fluid viscous damper element", "href": "../../../source/kernels/StressDivergenceDamper.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = '0'
displacements<<<{"description": "The displacement variables for Damper."}>>> = 'disp_x disp_y disp_z'
component<<<{"description": "An integer corresponding to the direction the variable this kernel acts in. (0 for x, 1 for y, 2 for z)."}>>> = 0
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_x
save_in<<<{"description": "The name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)"}>>> = reaction_x
[../]
[./lr_disp_y]
type = StressDivergenceDamper<<<{"description": "Kernel for two-noded nonlinear fluid viscous damper element", "href": "../../../source/kernels/StressDivergenceDamper.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = '0'
displacements<<<{"description": "The displacement variables for Damper."}>>> = 'disp_x disp_y disp_z'
component<<<{"description": "An integer corresponding to the direction the variable this kernel acts in. (0 for x, 1 for y, 2 for z)."}>>> = 1
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_y
save_in<<<{"description": "The name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)"}>>> = reaction_y
[../]
[./lr_disp_z]
type = StressDivergenceDamper<<<{"description": "Kernel for two-noded nonlinear fluid viscous damper element", "href": "../../../source/kernels/StressDivergenceDamper.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = '0'
displacements<<<{"description": "The displacement variables for Damper."}>>> = 'disp_x disp_y disp_z'
component<<<{"description": "An integer corresponding to the direction the variable this kernel acts in. (0 for x, 1 for y, 2 for z)."}>>> = 2
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
save_in<<<{"description": "The name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)"}>>> = reaction_z
[../]
[]
[AuxKernels<<<{"href": "../../../syntax/AuxKernels/index.html"}>>>]
[./accel_x]
type = NewmarkAccelAux<<<{"description": "Computes the current acceleration using the Newmark method.", "href": "../../../source/auxkernels/NewmarkAccelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = accel_x
displacement<<<{"description": "displacement variable"}>>> = disp_x
velocity<<<{"description": "velocity variable"}>>> = vel_x
beta<<<{"description": "beta parameter for Newmark method"}>>> = 0.25
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./vel_x]
type = NewmarkVelAux<<<{"description": "Calculates the current velocity using Newmark method.", "href": "../../../source/auxkernels/NewmarkVelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = vel_x
acceleration<<<{"description": "acceleration variable"}>>> = accel_x
gamma<<<{"description": "gamma parameter for Newmark method"}>>> = 0.5
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./accel_y]
type = NewmarkAccelAux<<<{"description": "Computes the current acceleration using the Newmark method.", "href": "../../../source/auxkernels/NewmarkAccelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = accel_y
displacement<<<{"description": "displacement variable"}>>> = disp_y
velocity<<<{"description": "velocity variable"}>>> = vel_y
beta<<<{"description": "beta parameter for Newmark method"}>>> = 0.25
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./vel_y]
type = NewmarkVelAux<<<{"description": "Calculates the current velocity using Newmark method.", "href": "../../../source/auxkernels/NewmarkVelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = vel_y
acceleration<<<{"description": "acceleration variable"}>>> = accel_y
gamma<<<{"description": "gamma parameter for Newmark method"}>>> = 0.5
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./accel_z]
type = NewmarkAccelAux<<<{"description": "Computes the current acceleration using the Newmark method.", "href": "../../../source/auxkernels/NewmarkAccelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = accel_z
displacement<<<{"description": "displacement variable"}>>> = disp_z
velocity<<<{"description": "velocity variable"}>>> = vel_z
beta<<<{"description": "beta parameter for Newmark method"}>>> = 0.25
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./vel_z]
type = NewmarkVelAux<<<{"description": "Calculates the current velocity using Newmark method.", "href": "../../../source/auxkernels/NewmarkVelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = vel_z
acceleration<<<{"description": "acceleration variable"}>>> = accel_z
gamma<<<{"description": "gamma parameter for Newmark method"}>>> = 0.5
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[]
[Materials<<<{"href": "../../../syntax/Materials/index.html"}>>>]
[./elasticity]
type = ComputeFVDamperElasticity<<<{"description": "Compute the deformations, forces and the stiffness matrix corresponding to a two-node nonlinear fluid viscous damper element.", "href": "../../../source/materials/ComputeFVDamperElasticity.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 0
y_orientation<<<{"description": "Orientation of the y direction along with Ky is provided. This should be perpendicular to the axis of the Damper."}>>> = '0.0 1.0 0.0'
displacements<<<{"description": "The displacement variables appropriate for the simulation of geometry and coordinate system."}>>> = 'disp_x disp_y disp_z'
cd<<<{"description": "Damping co-efficient."}>>> = 2226502
alpha<<<{"description": "Velocity exponent of the damper."}>>> = 0.3
k<<<{"description": "Axial stiffness of the damper assembly."}>>> =300000000
gamma<<<{"description": "Gamma parameter of Newmark algorithm."}>>> = 0.5
beta<<<{"description": "Beta parameter of Newmark algorithm."}>>> = 0.25
[../]
[]
[BCs<<<{"href": "../../../syntax/BCs/index.html"}>>>]
[./fixx0]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_x
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
value<<<{"description": "Value of the BC"}>>> = 0.0
[../]
[./fixy0]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_y
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
value<<<{"description": "Value of the BC"}>>> = 0.0
[../]
[./fixz0]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
value<<<{"description": "Value of the BC"}>>> = 0.0
[../]
[./disp_x_1]
type = PresetDisplacement<<<{"description": "Prescribe the displacement on a given boundary in a given direction.", "href": "../../../source/bcs/PresetDisplacement.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = right
function<<<{"description": "Function describing the displacement."}>>> = displacement
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_x
beta<<<{"description": "beta parameter for Newmark time integration."}>>> = 0.25
acceleration<<<{"description": "The acceleration variable."}>>> = accel_x
velocity<<<{"description": "The velocity variable."}>>> = vel_x
[../]
[]
[Functions<<<{"href": "../../../syntax/Functions/index.html"}>>>]
[./displacement]
type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../source/functions/PiecewiseLinear.html"}>>>
data_file<<<{"description": "File holding CSV data"}>>> = disp_axial.csv
format<<<{"description": "Format of csv data file that is in either in columns or rows"}>>> = columns
[../]
[]
[Preconditioning<<<{"href": "../../../syntax/Preconditioning/index.html"}>>>]
[./smp]
type = SMP<<<{"description": "Single matrix preconditioner (SMP) builds a preconditioner using user defined off-diagonal parts of the Jacobian.", "href": "../../../source/preconditioners/SingleMatrixPreconditioner.html"}>>>
full<<<{"description": "Set to true if you want the full set of couplings between variables simply for convenience so you don't have to set every off_diag_row and off_diag_column combination."}>>> = true
[../]
[]
[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
type = Transient
solve_type = NEWTON
line_search = none
nl_rel_tol = 1e-8
nl_abs_tol = 1e-8
start_time = -0.02
end_time = 2
dt = 0.0025
dtmin = 0.00001
timestep_tolerance = 1e-6
[]
(test/tests/materials/fv_damper/fv_damper_axial.i)A description of each of the input parameters is provided in the syntax description. Additionally, the response of the nonlinear FVD to static and seismic loading is demonstrated in the examples described below. Analysis results are compared with verified and validated numerical models implemented in the open source finite element package, OpenSees (Mazzoni et al. (2009)).
Response to static loading
The input file below performs the analysis of a nonlinear FVD subjected to a cyclic loading in the axial direction. A sinusoidal displacement shown in Figure 1, with increasing amplitude of 12, 24 and 36 mm, at a frequency of 0.5Hz is applied to the top node of the damper in the axial direction, and the bottom node is restrained in all three degrees-of-freedom.
# Test for Damper in Axial (Sinewave loading)
[Mesh<<<{"href": "../../../syntax/Mesh/index.html"}>>>]
type = GeneratedMesh
xmin = 0
xmax = 1
nx = 1
dim = 1
displacements<<<{"description": "The variables corresponding to the x y z displacements of the mesh. If this is provided then the displacements will be taken into account during the computation. Creation of the displaced mesh can be suppressed even if this is set by setting 'use_displaced_mesh = false'."}>>> = 'disp_x disp_y disp_z'
[]
[Variables<<<{"href": "../../../syntax/Variables/index.html"}>>>]
[./disp_x]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./disp_y]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./disp_z]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[]
[AuxVariables<<<{"href": "../../../syntax/AuxVariables/index.html"}>>>]
[./vel_x]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./vel_y]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./vel_z]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./accel_x]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./accel_y]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./accel_z]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./reaction_x]
[../]
[./reaction_y]
[../]
[./reaction_z]
[../]
[]
[Kernels<<<{"href": "../../../syntax/Kernels/index.html"}>>>]
[./lr_disp_x]
type = StressDivergenceDamper<<<{"description": "Kernel for two-noded nonlinear fluid viscous damper element", "href": "../../../source/kernels/StressDivergenceDamper.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = '0'
displacements<<<{"description": "The displacement variables for Damper."}>>> = 'disp_x disp_y disp_z'
component<<<{"description": "An integer corresponding to the direction the variable this kernel acts in. (0 for x, 1 for y, 2 for z)."}>>> = 0
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_x
save_in<<<{"description": "The name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)"}>>> = reaction_x
[../]
[./lr_disp_y]
type = StressDivergenceDamper<<<{"description": "Kernel for two-noded nonlinear fluid viscous damper element", "href": "../../../source/kernels/StressDivergenceDamper.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = '0'
displacements<<<{"description": "The displacement variables for Damper."}>>> = 'disp_x disp_y disp_z'
component<<<{"description": "An integer corresponding to the direction the variable this kernel acts in. (0 for x, 1 for y, 2 for z)."}>>> = 1
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_y
save_in<<<{"description": "The name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)"}>>> = reaction_y
[../]
[./lr_disp_z]
type = StressDivergenceDamper<<<{"description": "Kernel for two-noded nonlinear fluid viscous damper element", "href": "../../../source/kernels/StressDivergenceDamper.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = '0'
displacements<<<{"description": "The displacement variables for Damper."}>>> = 'disp_x disp_y disp_z'
component<<<{"description": "An integer corresponding to the direction the variable this kernel acts in. (0 for x, 1 for y, 2 for z)."}>>> = 2
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
save_in<<<{"description": "The name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)"}>>> = reaction_z
[../]
[]
[AuxKernels<<<{"href": "../../../syntax/AuxKernels/index.html"}>>>]
[./accel_x]
type = NewmarkAccelAux<<<{"description": "Computes the current acceleration using the Newmark method.", "href": "../../../source/auxkernels/NewmarkAccelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = accel_x
displacement<<<{"description": "displacement variable"}>>> = disp_x
velocity<<<{"description": "velocity variable"}>>> = vel_x
beta<<<{"description": "beta parameter for Newmark method"}>>> = 0.25
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./vel_x]
type = NewmarkVelAux<<<{"description": "Calculates the current velocity using Newmark method.", "href": "../../../source/auxkernels/NewmarkVelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = vel_x
acceleration<<<{"description": "acceleration variable"}>>> = accel_x
gamma<<<{"description": "gamma parameter for Newmark method"}>>> = 0.5
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./accel_y]
type = NewmarkAccelAux<<<{"description": "Computes the current acceleration using the Newmark method.", "href": "../../../source/auxkernels/NewmarkAccelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = accel_y
displacement<<<{"description": "displacement variable"}>>> = disp_y
velocity<<<{"description": "velocity variable"}>>> = vel_y
beta<<<{"description": "beta parameter for Newmark method"}>>> = 0.25
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./vel_y]
type = NewmarkVelAux<<<{"description": "Calculates the current velocity using Newmark method.", "href": "../../../source/auxkernels/NewmarkVelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = vel_y
acceleration<<<{"description": "acceleration variable"}>>> = accel_y
gamma<<<{"description": "gamma parameter for Newmark method"}>>> = 0.5
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./accel_z]
type = NewmarkAccelAux<<<{"description": "Computes the current acceleration using the Newmark method.", "href": "../../../source/auxkernels/NewmarkAccelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = accel_z
displacement<<<{"description": "displacement variable"}>>> = disp_z
velocity<<<{"description": "velocity variable"}>>> = vel_z
beta<<<{"description": "beta parameter for Newmark method"}>>> = 0.25
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./vel_z]
type = NewmarkVelAux<<<{"description": "Calculates the current velocity using Newmark method.", "href": "../../../source/auxkernels/NewmarkVelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = vel_z
acceleration<<<{"description": "acceleration variable"}>>> = accel_z
gamma<<<{"description": "gamma parameter for Newmark method"}>>> = 0.5
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[]
[Materials<<<{"href": "../../../syntax/Materials/index.html"}>>>]
[./elasticity]
type = ComputeFVDamperElasticity<<<{"description": "Compute the deformations, forces and the stiffness matrix corresponding to a two-node nonlinear fluid viscous damper element.", "href": "../../../source/materials/ComputeFVDamperElasticity.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 0
y_orientation<<<{"description": "Orientation of the y direction along with Ky is provided. This should be perpendicular to the axis of the Damper."}>>> = '0.0 1.0 0.0'
displacements<<<{"description": "The displacement variables appropriate for the simulation of geometry and coordinate system."}>>> = 'disp_x disp_y disp_z'
cd<<<{"description": "Damping co-efficient."}>>> = 2226502
alpha<<<{"description": "Velocity exponent of the damper."}>>> = 0.3
k<<<{"description": "Axial stiffness of the damper assembly."}>>> =300000000
gamma<<<{"description": "Gamma parameter of Newmark algorithm."}>>> = 0.5
beta<<<{"description": "Beta parameter of Newmark algorithm."}>>> = 0.25
[../]
[]
[BCs<<<{"href": "../../../syntax/BCs/index.html"}>>>]
[./fixx0]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_x
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
value<<<{"description": "Value of the BC"}>>> = 0.0
[../]
[./fixy0]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_y
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
value<<<{"description": "Value of the BC"}>>> = 0.0
[../]
[./fixz0]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
value<<<{"description": "Value of the BC"}>>> = 0.0
[../]
[./disp_x_1]
type = PresetDisplacement<<<{"description": "Prescribe the displacement on a given boundary in a given direction.", "href": "../../../source/bcs/PresetDisplacement.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = right
function<<<{"description": "Function describing the displacement."}>>> = displacement
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_x
beta<<<{"description": "beta parameter for Newmark time integration."}>>> = 0.25
acceleration<<<{"description": "The acceleration variable."}>>> = accel_x
velocity<<<{"description": "The velocity variable."}>>> = vel_x
[../]
[]
[Functions<<<{"href": "../../../syntax/Functions/index.html"}>>>]
[./displacement]
type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../source/functions/PiecewiseLinear.html"}>>>
data_file<<<{"description": "File holding CSV data"}>>> = disp_axial.csv
format<<<{"description": "Format of csv data file that is in either in columns or rows"}>>> = columns
[../]
[]
[Preconditioning<<<{"href": "../../../syntax/Preconditioning/index.html"}>>>]
[./smp]
type = SMP<<<{"description": "Single matrix preconditioner (SMP) builds a preconditioner using user defined off-diagonal parts of the Jacobian.", "href": "../../../source/preconditioners/SingleMatrixPreconditioner.html"}>>>
full<<<{"description": "Set to true if you want the full set of couplings between variables simply for convenience so you don't have to set every off_diag_row and off_diag_column combination."}>>> = true
[../]
[]
[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
type = Transient
solve_type = NEWTON
line_search = none
nl_rel_tol = 1e-8
nl_abs_tol = 1e-8
start_time = -0.02
end_time = 2
dt = 0.0025
dtmin = 0.00001
timestep_tolerance = 1e-6
[]
[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
[./disp_x]
type = NodalVariableValue<<<{"description": "Outputs values of a nodal variable at a particular location", "href": "../../../source/postprocessors/NodalVariableValue.html"}>>>
nodeid<<<{"description": "The ID of the node where we monitor"}>>> = 1
variable<<<{"description": "The variable to be monitored"}>>> = disp_x
[../]
[./vel_x]
type = NodalVariableValue<<<{"description": "Outputs values of a nodal variable at a particular location", "href": "../../../source/postprocessors/NodalVariableValue.html"}>>>
nodeid<<<{"description": "The ID of the node where we monitor"}>>> = 1
variable<<<{"description": "The variable to be monitored"}>>> = vel_x
[../]
[./accel_x]
type = NodalVariableValue<<<{"description": "Outputs values of a nodal variable at a particular location", "href": "../../../source/postprocessors/NodalVariableValue.html"}>>>
nodeid<<<{"description": "The ID of the node where we monitor"}>>> = 1
variable<<<{"description": "The variable to be monitored"}>>> = accel_x
[../]
[./reaction_x]
type = NodalSum<<<{"description": "Computes the sum of all of the nodal values of the specified variable. Note: This object sets the default \"unique_node_execute\" flag to true to avoid double counting nodes between shared blocks.", "href": "../../../source/postprocessors/NodalSum.html"}>>>
variable<<<{"description": "The name of the variable that this postprocessor operates on"}>>> = reaction_x
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = left
[../]
[]
[Outputs<<<{"href": "../../../syntax/Mastodon/Outputs/index.html"}>>>]
csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
interval = 2
perf_graph<<<{"description": "Enable printing of the performance graph to the screen (Console)"}>>> = true
[]
(test/tests/materials/fv_damper/fv_damper_axial.i)
Figure 1: Displacement loading history along the axial direction of the damper.
Four test cases are run for varying and , and the axial stiffness () of the damper is held constant.The values presented below are in SI units. The response of the nonlinear FVD element to this prescribed cyclic loading in the axial direction is shown in Figure 2

Figure 2: Axial response of the nonlinear FVD to the prescribed cyclic loading for varying and .
Response to seismic loading
The input file below, demonstrates the seismic response a single bay portal frame installed with a diagonal nonlinear FVD element. The beam-columns are modeled using Euler-Bernoulli beam formulation and are assumed to behave linear elastic. A total mass of 50 tons is lumped at the floor level nodes to simulate the reactive mass. LineElementMaster is used to simplify the input file syntax for creating beam and column elements. The mesh adopted for beam and column elements is identified in Figure 3.
# Test for a protal frame installed with a diagonal Fluid Viscous Damper element
# The mesh for the geometry is imported from exodus file "fv_damper_frame.e"
# Beam-column elements are modeled as Euler-Bernouli beam elements
# Dimesnions
# columns
# E = 20e9, G = 100e9, A = 9e-2, Iy = Iz = 6.75e-4
# Beams
# E = 20e9, G = 100e9, A = 9e-2, Iy = Iz = 6.75e-1 (I_beam = 1000*I_Column to simulate rigid beam)
[Mesh<<<{"href": "../../../syntax/Mesh/index.html"}>>>]
type = FileMesh
file = 'fv_damper_frame.e'
[]
[Variables<<<{"href": "../../../syntax/Variables/index.html"}>>>]
[./disp_x]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./disp_y]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./disp_z]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./rot_x]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
block = '1 2'
[../]
[./rot_y]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
block = '1 2'
[../]
[./rot_z]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
block = '1 2'
[../]
[]
[AuxVariables<<<{"href": "../../../syntax/AuxVariables/index.html"}>>>]
[./vel_x]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./vel_y]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./vel_z]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./accel_x]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./accel_y]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./accel_z]
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
[../]
[./reaction_x]
block = '1 2 3'
[../]
[./reaction_y]
block = '1 2 3'
[../]
[./reaction_z]
block = '1 2 3'
[../]
[./reaction_xx]
block = '1 2 3'
[../]
[./reaction_yy]
block = '1 2 3'
[../]
[./reaction_zz]
block = '1 2 3'
[../]
[]
[AuxKernels<<<{"href": "../../../syntax/AuxKernels/index.html"}>>>]
[./accel_x]
type = NewmarkAccelAux<<<{"description": "Computes the current acceleration using the Newmark method.", "href": "../../../source/auxkernels/NewmarkAccelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = accel_x
displacement<<<{"description": "displacement variable"}>>> = disp_x
velocity<<<{"description": "velocity variable"}>>> = vel_x
beta<<<{"description": "beta parameter for Newmark method"}>>> = 0.25
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./vel_x]
type = NewmarkVelAux<<<{"description": "Calculates the current velocity using Newmark method.", "href": "../../../source/auxkernels/NewmarkVelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = vel_x
acceleration<<<{"description": "acceleration variable"}>>> = accel_x
gamma<<<{"description": "gamma parameter for Newmark method"}>>> = 0.5
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./accel_y]
type = NewmarkAccelAux<<<{"description": "Computes the current acceleration using the Newmark method.", "href": "../../../source/auxkernels/NewmarkAccelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = accel_y
displacement<<<{"description": "displacement variable"}>>> = disp_y
velocity<<<{"description": "velocity variable"}>>> = vel_y
beta<<<{"description": "beta parameter for Newmark method"}>>> = 0.25
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./vel_y]
type = NewmarkVelAux<<<{"description": "Calculates the current velocity using Newmark method.", "href": "../../../source/auxkernels/NewmarkVelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = vel_y
acceleration<<<{"description": "acceleration variable"}>>> = accel_y
gamma<<<{"description": "gamma parameter for Newmark method"}>>> = 0.5
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./accel_z]
type = NewmarkAccelAux<<<{"description": "Computes the current acceleration using the Newmark method.", "href": "../../../source/auxkernels/NewmarkAccelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = accel_z
displacement<<<{"description": "displacement variable"}>>> = disp_z
velocity<<<{"description": "velocity variable"}>>> = vel_z
beta<<<{"description": "beta parameter for Newmark method"}>>> = 0.25
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[./vel_z]
type = NewmarkVelAux<<<{"description": "Calculates the current velocity using Newmark method.", "href": "../../../source/auxkernels/NewmarkVelAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = vel_z
acceleration<<<{"description": "acceleration variable"}>>> = accel_z
gamma<<<{"description": "gamma parameter for Newmark method"}>>> = 0.5
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
[../]
[]
[Kernels<<<{"href": "../../../syntax/Kernels/index.html"}>>>]
[./damper_disp_x]
type = StressDivergenceDamper<<<{"description": "Kernel for two-noded nonlinear fluid viscous damper element", "href": "../../../source/kernels/StressDivergenceDamper.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = '3'
displacements<<<{"description": "The displacement variables for Damper."}>>> = 'disp_x disp_y disp_z'
component<<<{"description": "An integer corresponding to the direction the variable this kernel acts in. (0 for x, 1 for y, 2 for z)."}>>> = 0
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_x
save_in<<<{"description": "The name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)"}>>> = reaction_x
[../]
[./damper_disp_y]
type = StressDivergenceDamper<<<{"description": "Kernel for two-noded nonlinear fluid viscous damper element", "href": "../../../source/kernels/StressDivergenceDamper.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = '3'
displacements<<<{"description": "The displacement variables for Damper."}>>> = 'disp_x disp_y disp_z'
component<<<{"description": "An integer corresponding to the direction the variable this kernel acts in. (0 for x, 1 for y, 2 for z)."}>>> = 1
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_y
save_in<<<{"description": "The name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)"}>>> = reaction_y
[../]
[./damper_disp_z]
type = StressDivergenceDamper<<<{"description": "Kernel for two-noded nonlinear fluid viscous damper element", "href": "../../../source/kernels/StressDivergenceDamper.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = '3'
displacements<<<{"description": "The displacement variables for Damper."}>>> = 'disp_x disp_y disp_z'
component<<<{"description": "An integer corresponding to the direction the variable this kernel acts in. (0 for x, 1 for y, 2 for z)."}>>> = 2
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
save_in<<<{"description": "The name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)"}>>> = reaction_z
[../]
[]
[NodalKernels<<<{"href": "../../../syntax/NodalKernels/index.html"}>>>]
[./x_inertial]
type = NodalTranslationalInertia<<<{"description": "Computes the inertial forces and mass proportional damping terms corresponding to nodal mass.", "href": "../../../source/nodalkernels/NodalTranslationalInertia.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_x
velocity<<<{"description": "velocity variable"}>>> = vel_x
acceleration<<<{"description": "acceleration variable"}>>> = accel_x
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = '2 3'
beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
mass<<<{"description": "Mass associated with the node"}>>> = 25000
alpha<<<{"description": "Alpha parameter for mass dependent numerical damping induced by HHT time integration scheme"}>>> = 0
eta<<<{"description": "Constant real number defining the eta parameter for Rayleigh damping."}>>> = 0
[../]
[./y_inertial]
type = NodalTranslationalInertia<<<{"description": "Computes the inertial forces and mass proportional damping terms corresponding to nodal mass.", "href": "../../../source/nodalkernels/NodalTranslationalInertia.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_y
velocity<<<{"description": "velocity variable"}>>> = vel_y
acceleration<<<{"description": "acceleration variable"}>>> = accel_y
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = '2 3'
beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
mass<<<{"description": "Mass associated with the node"}>>> = 25000
alpha<<<{"description": "Alpha parameter for mass dependent numerical damping induced by HHT time integration scheme"}>>> = 0
eta<<<{"description": "Constant real number defining the eta parameter for Rayleigh damping."}>>> = 0
[../]
[./z_inertial]
type = NodalTranslationalInertia<<<{"description": "Computes the inertial forces and mass proportional damping terms corresponding to nodal mass.", "href": "../../../source/nodalkernels/NodalTranslationalInertia.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_y
velocity<<<{"description": "velocity variable"}>>> = vel_y
acceleration<<<{"description": "acceleration variable"}>>> = accel_y
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = '2 3'
beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
mass<<<{"description": "Mass associated with the node"}>>> = 25000
alpha<<<{"description": "Alpha parameter for mass dependent numerical damping induced by HHT time integration scheme"}>>> = 0
eta<<<{"description": "Constant real number defining the eta parameter for Rayleigh damping."}>>> = 0
[../]
[]
[Physics<<<{"href": "../../../syntax/Physics/index.html"}>>>/SolidMechanics<<<{"href": "../../../syntax/Physics/SolidMechanics/index.html"}>>>/LineElement<<<{"href": "../../../syntax/Physics/SolidMechanics/LineElement/index.html"}>>>/QuasiStatic<<<{"href": "../../../syntax/Physics/SolidMechanics/LineElement/QuasiStatic/index.html"}>>>]
displacements<<<{"description": "The nonlinear displacement variables for the problem"}>>> = 'disp_x disp_y disp_z'
rotations<<<{"description": "The rotations appropriate for the simulation geometry and coordinate system"}>>> = 'rot_x rot_y rot_z'
velocities<<<{"description": "Translational velocity variables"}>>> = 'vel_x vel_y vel_z'
accelerations<<<{"description": "Translational acceleration variables"}>>> = 'accel_x accel_y accel_z'
rotational_velocities<<<{"description": "Rotational velocity variables"}>>> = 'rot_vel_x rot_vel_y rot_vel_z'
rotational_accelerations<<<{"description": "Rotational acceleration variables"}>>> = 'rot_accel_x rot_accel_y rot_accel_z'
save_in<<<{"description": "The displacement and rotational residuals"}>>> = 'reaction_x reaction_y reaction_z'
beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25 # Newmark time integration parameter
gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5 # Newmark time integration parameter
# parameters for 5% Rayleigh damping
zeta<<<{"description": "Name of material property or a constant real number defining the zeta parameter for stiffness proportional Rayleigh damping."}>>> = 0 # stiffness proportional damping
eta<<<{"description": "Name of material property or a constant real number defining the eta parameter for mass proportional Rayleigh damping."}>>> = 0 # Mass proportional Rayleigh damping
[./block_1]
block<<<{"description": "The list of ids of the blocks (subdomain) that the stress divergence, inertia kernels and materials will be applied to"}>>> = 1
area<<<{"description": "Cross-section area of the beam. Can be supplied as either a number or a variable name."}>>> = 9e-2
Iy<<<{"description": "Second moment of area of the beam about y axis. Can be supplied as either a number or a variable name."}>>> = 6.75e-4
Iz<<<{"description": "Second moment of area of the beam about z axis. Can be supplied as either a number or a variable name."}>>> = 6.75e-4
y_orientation<<<{"description": "Orientation of the y direction along which Iyy is provided. This should be perpendicular to the axis of the beam."}>>> = '0.0 0.0 1.0'
[../]
[./block_2]
block<<<{"description": "The list of ids of the blocks (subdomain) that the stress divergence, inertia kernels and materials will be applied to"}>>> = 2
area<<<{"description": "Cross-section area of the beam. Can be supplied as either a number or a variable name."}>>> = 9e-2
Iy<<<{"description": "Second moment of area of the beam about y axis. Can be supplied as either a number or a variable name."}>>> = 6.75e-1
Iz<<<{"description": "Second moment of area of the beam about z axis. Can be supplied as either a number or a variable name."}>>> = 6.75e-1
y_orientation<<<{"description": "Orientation of the y direction along which Iyy is provided. This should be perpendicular to the axis of the beam."}>>> = '0.0 1.0 0.0'
[../]
[]
[Materials<<<{"href": "../../../syntax/Materials/index.html"}>>>]
[./elasticity_beamcolumn]
type = ComputeElasticityBeam<<<{"description": "Computes the equivalent of the elasticity tensor for the beam element, which are vectors of material translational and flexural stiffness.", "href": "../../../source/materials/ComputeElasticityBeam.html"}>>>
youngs_modulus<<<{"description": "Young's modulus of the material. Can be supplied as either a number or a variable name."}>>> = 20e9
poissons_ratio<<<{"description": "Poisson's ratio of the material. Can be supplied as either a number or a variable name."}>>> = -0.9
shear_coefficient<<<{"description": "Scale factor for the shear modulus. Can be supplied as either a number or a variable name."}>>> = 1
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = '1 2'
[../]
[./stress_beam]
type = ComputeBeamResultants<<<{"description": "Compute forces and moments using elasticity", "href": "../../../source/materials/ComputeBeamResultants.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = '1 2'
[../]
[./elasticity_damper]
type = ComputeFVDamperElasticity<<<{"description": "Compute the deformations, forces and the stiffness matrix corresponding to a two-node nonlinear fluid viscous damper element.", "href": "../../../source/materials/ComputeFVDamperElasticity.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = '3'
y_orientation<<<{"description": "Orientation of the y direction along with Ky is provided. This should be perpendicular to the axis of the Damper."}>>> = '-0.5144 0.85749 0'
displacements<<<{"description": "The displacement variables appropriate for the simulation of geometry and coordinate system."}>>> = 'disp_x disp_y disp_z'
cd<<<{"description": "Damping co-efficient."}>>> = 232764
alpha<<<{"description": "Velocity exponent of the damper."}>>> = 0.35
k<<<{"description": "Axial stiffness of the damper assembly."}>>> = 25000000
gamma<<<{"description": "Gamma parameter of Newmark algorithm."}>>> = 0.5
beta<<<{"description": "Beta parameter of Newmark algorithm."}>>> = 0.25
[../]
[]
[BCs<<<{"href": "../../../syntax/BCs/index.html"}>>>]
[./base_accel_x]
type = PresetAcceleration<<<{"description": "Prescribe acceleration on a given boundary in a given direction", "href": "../../../source/bcs/PresetAcceleration.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 1
function<<<{"description": "Function describing the velocity."}>>> = acceleration_x
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_x
beta<<<{"description": "beta parameter for Newmark time integration."}>>> = 0.25
acceleration<<<{"description": "The acceleration variable."}>>> = 'accel_x'
velocity<<<{"description": "The velocity variable."}>>> = 'vel_x'
[../]
[./fix_y]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_y
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 1
value<<<{"description": "Value of the BC"}>>> = 0.0
[../]
[./fix_z]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 1
value<<<{"description": "Value of the BC"}>>> = 0.0
[../]
[./fix_rot_x]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = rot_x
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 1
value<<<{"description": "Value of the BC"}>>> = 0.0
[../]
[./fix_rot_y]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = rot_y
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 1
value<<<{"description": "Value of the BC"}>>> = 0.0
[../]
[./fix_rot_z]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = rot_z
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 1
value<<<{"description": "Value of the BC"}>>> = 0.0
[../]
[]
[Functions<<<{"href": "../../../syntax/Functions/index.html"}>>>]
[./acceleration_x]
type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../source/functions/PiecewiseLinear.html"}>>>
data_file<<<{"description": "File holding CSV data"}>>> = acceleration.csv
format<<<{"description": "Format of csv data file that is in either in columns or rows"}>>> = columns
[../]
[]
[Preconditioning<<<{"href": "../../../syntax/Preconditioning/index.html"}>>>]
[./smp]
type = SMP<<<{"description": "Single matrix preconditioner (SMP) builds a preconditioner using user defined off-diagonal parts of the Jacobian.", "href": "../../../source/preconditioners/SingleMatrixPreconditioner.html"}>>>
full<<<{"description": "Set to true if you want the full set of couplings between variables simply for convenience so you don't have to set every off_diag_row and off_diag_column combination."}>>> = true
[../]
[]
[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
type = Transient
solve_type = NEWTON
line_search = none
nl_rel_tol = 1e-8
nl_abs_tol = 1e-8
start_time = 0
end_time = 0.2
dt = 0.0005
dtmin = 0.000001
timestep_tolerance = 1e-6
[]
[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
# For basicdisp and basicforce postprocessors, divide the output values
# by a scale factor equal to 'length of the damper element; (5.83 for this
# problem). Becasue the object 'ElementIntegralMaterialProperty', calculates
# the material property value integrating over the element length.
[./basicdisp]
type = ElementIntegralMaterialProperty<<<{"description": "Compute the integral of the material property over the domain", "href": "../../../source/postprocessors/ElementIntegralMaterialProperty.html"}>>>
mat_prop<<<{"description": "The name of the material property"}>>> = basic_deformation
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = '3'
[../]
[./basicforce]
type = ElementIntegralMaterialProperty<<<{"description": "Compute the integral of the material property over the domain", "href": "../../../source/postprocessors/ElementIntegralMaterialProperty.html"}>>>
mat_prop<<<{"description": "The name of the material property"}>>> = basic_force
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = '3'
[../]
[./disp_bottom_right]
type = PointValue<<<{"description": "Compute the value of a variable at a specified location", "href": "../../../source/postprocessors/PointValue.html"}>>>
variable<<<{"description": "The name of the variable that this postprocessor operates on."}>>> = disp_x
point<<<{"description": "The physical point where the solution will be evaluated."}>>> = '5 0 0'
[../]
[./disp_top_right]
type = PointValue<<<{"description": "Compute the value of a variable at a specified location", "href": "../../../source/postprocessors/PointValue.html"}>>>
variable<<<{"description": "The name of the variable that this postprocessor operates on."}>>> = disp_x
point<<<{"description": "The physical point where the solution will be evaluated."}>>> = '5 3 0'
[../]
[]
[Outputs<<<{"href": "../../../syntax/Mastodon/Outputs/index.html"}>>>]
csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
perf_graph<<<{"description": "Enable printing of the performance graph to the screen (Console)"}>>> = true
interval = 10
[]
(test/tests/materials/fv_damper/fv_damper_seismic_frame.i)
Figure 3: Mesh geometry for the portal frame installed with a diagonal nonlinear FVD element.
The ground acceleration is applied at the bottom nodes of the frame using PresetAcceleration
boundary condition. The hysteretic response of the nonlinear FVD to the prescribed seismic loading is shown in Figure 4. The response is benchmarked using the results obtained from OpenSees.

Figure 4: Nonlinear hysteretic response of the nonlinear FVD element to the prescribed seismic loading.
References
- S. Mazzoni, McKenna. F, Scott. M. H, and Fenves. G. L.
Opensees: open system for earthquake engineering simulation.
2009.[BibTeX]