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

  1. S. Mazzoni, McKenna. F, Scott. M. H, and Fenves. G. L. Opensees: open system for earthquake engineering simulation. 2009.[BibTeX]