Analytical Verification of The I-Soil Constitutive Model

Introduction

MASTODON employs a nonlinear hysteretic constitutive model for soils called I-Soil (Numanoglu (2017)). The general theory for this model is described in the MASTODON Theory Manual. This page outlines procedures for the analytical verification of the different parameters involved in the MASTODON implementation of I-Soil. MASTODON is capable of generating stress-strain backbone curves for soils using different material models. Currently, these models are User-defined, Darendeli, and General Quadratic/Hyperbolic (GQ/H). It is also possible to model the dependency on pressure of many soils, which affects both the stiffness and the strength of a soil. Comparisons between analytical solutions and the results from test files created in MASTODON are presented below for all backbone curve types and the parameters which control both stiffness and strength pressure dependency.

Problem Statement

A single hexahedral element with dimensions of 1 meter x 1 meter x 1 meter was used for all verifications presented in this report. The back surface () of the element was fixed in all three principal directions and special boundary conditions were enforced to ensure the element deformed in perfect shear (see Periodic Boundary Conditions). The ramp displacement shown in Figure 1 was applied to the front surface () in the X direction.

Figure 1: Plot of the ramp displacement boundary condition applied to the element's front surface.

The Newmark-beta time integration scheme, with and , was used to solve the equation of motion for the element. The theory behind the Newmark-beta method is described here. A graphical rendering of an example displacement of the element computed using Newmark's method with I-Soil is shown in Figure 2.

Figure 2: Sample deflected shape of the 1 meter x 1 meter x 1 meter element used in all tests.

The resulting strains and stresses were assumed to be constant throughout the element. Material properties and other parameters which are specific to a given test are described in their respective sections of this report.

User-defined Backbone Curve

A procedure to verify the ability of the user-defined backbone curve to control the stress-strain behavior of the element is presented in this section. The soil was assigned a density of 2000 kg/m3 and a Poisson's ratio of 0.3. The backbone curve was defined as shown in Figure 3.

Figure 3: The user-defined backbone curve input into MASTODON to control the stress-strain behavior of the soil using I-Soil.

To investigate the behavior of the user-defined backbone curve, it was assumed that the element had zero initial stresses, no self weight (i.e., zero gravity), and undamped vibration.

Results

The hysteresis stress-strain curve in the ZX plane is shown in Figure 4.

Figure 4: Plot of the element hysteresis stress-strain curve in the ZX plane over the duration of the simulation.

Since the engineering strain in the ZX plane, , is equal to two times the tensor shear strain, , it was necessary to multiply the strains output by MOOSE TensorMechanics by two to get the shear stresses, , which correspond to those defined in Figure 3. Next, the engineering shear stress-strain curve was superimposed over those points in Figure 3, as shown in Figure 5. The backbone curve was obtained in MOOSE by sampling the data during the initial load cycle, i.e., from 3 seconds to 4 seconds (see Problem Statement). It is clear from Figure 5 that the user-defined backbone curve was consistent with the MASTODON one.

Figure 5: The user-defined backbone curve and the engineering shear stress-strain curve in the ZX plane output by MASTODON during the initial loading cycle (from 3 seconds to 4 seconds).

Since the maximum stress in the user-defined backbone curve of 3805 Pa was exceeded during the solve, it can be seen in Figure 5 that the soil continues to deform without any additional shear stress.

Complete Input File

# One element test to test the user-defined  backbone curve.
# The back surface of the element (z=0) is fixed and the front surface (z=1)
# is moved by applying a cyclic preset displacement.

# This test is identical to HYS_data_file.i except that the element was assumed
# to have zero initial stresses, no self-weight (i.e., zero gravity), and
# undamped vibration.

# The resulting backbone curve is identical to the one provided as input.

[Mesh<<<{"href": "../../../../syntax/Mesh/index.html"}>>>]
  type = GeneratedMesh # Can generate simple lines, rectangles and rectangular prisms
  dim = 3 # Dimension of the mesh
  nx = 1 # Number of elements in the x direction
  ny = 1 # Number of elements in the y direction
  nz = 1 # Number of elements in the z direction
  xmin = 0.0
  xmax = 1
  ymin = 0.0
  ymax = 1
  zmin = 0.0
  zmax = 1
[]

[GlobalParams<<<{"href": "../../../../syntax/GlobalParams/index.html"}>>>]
  displacements = 'disp_x disp_y disp_z'
  use_displaced_mesh = false
[]

[Variables<<<{"href": "../../../../syntax/Variables/index.html"}>>>]
  [./disp_x]
  [../]
  [./disp_y]
  [../]
  [./disp_z]
  [../]
[]

[AuxVariables<<<{"href": "../../../../syntax/AuxVariables/index.html"}>>>]
  [./vel_x]
  [../]
  [./accel_x]
  [../]
  [./vel_y]
  [../]
  [./accel_y]
  [../]
  [./vel_z]
  [../]
  [./accel_z]
  [../]
  [./stress_xy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_yz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_zx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_xy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_yz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_zx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_xx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_yy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_zz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_xx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_yy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_zz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./layer_id]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
[]

[Kernels<<<{"href": "../../../../syntax/Kernels/index.html"}>>>]
  [./DynamicTensorMechanics<<<{"href": "../../../../syntax/Kernels/DynamicTensorMechanics/index.html"}>>>]
    displacements<<<{"description": "The nonlinear displacement variables for the problem"}>>> = 'disp_x disp_y disp_z'
    #use_displaced_mesh = false
  [../]
  [./inertia_x]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.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
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
    #use_displaced_mesh = false
  [../]
  [./inertia_y]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.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
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
    #use_displaced_mesh = false
  [../]
  [./inertia_z]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
    velocity<<<{"description": "velocity variable"}>>> = vel_z
    acceleration<<<{"description": "acceleration variable"}>>> = accel_z
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
    #use_displaced_mesh = false
  [../]
[]

[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
  [../]
  [./stress_xy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./stress_yz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_yz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./stress_zx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_zx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./strain_xy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./strain_yz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_yz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./strain_zx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_zx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./stress_xx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./stress_yy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_yy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./stress_zz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_zz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./strain_xx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_xx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./strain_yy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> =total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_yy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./strain_zz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_zz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./layers]
    type = UniformLayerAuxKernel<<<{"description": "Computes an AuxVariable for representing a layered structure in an arbitrary direction.", "href": "../../../../source/auxkernels/UniformLayerAuxKernel.html"}>>>
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = layer_id
    interfaces<<<{"description": "A list of layer interface locations to apply across the domain in the specified direction."}>>> = '2.0'
    direction<<<{"description": "The direction to apply layering."}>>> = '0 0 1'
    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."}>>> = initial
  [../]
[]

[BCs<<<{"href": "../../../../syntax/BCs/index.html"}>>>]
  [./x_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./y_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./z_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./Periodic<<<{"href": "../../../../syntax/BCs/Periodic/index.html"}>>>]
    [./x_dir]
      variable<<<{"description": "Variable for the periodic boundary condition"}>>> = 'disp_x disp_y disp_z'
      primary<<<{"description": "Boundary ID associated with the primary boundary."}>>> = '4'
      secondary<<<{"description": "Boundary ID associated with the secondary boundary."}>>> = '2'
      translation<<<{"description": "Vector that translates coordinates on the primary boundary to coordinates on the secondary boundary."}>>> = '1.0 0.0 0.0'
    [../]
    [./y_dir]
      variable<<<{"description": "Variable for the periodic boundary condition"}>>> = 'disp_x disp_y disp_z'
      primary<<<{"description": "Boundary ID associated with the primary boundary."}>>> = '1'
      secondary<<<{"description": "Boundary ID associated with the secondary boundary."}>>> = '3'
      translation<<<{"description": "Vector that translates coordinates on the primary boundary to coordinates on the secondary boundary."}>>> = '0.0 1.0 0.0'
    [../]
  [../]
  [./top_x]
    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"}>>> = 5
    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
    velocity<<<{"description": "The velocity variable."}>>> = vel_x
    acceleration<<<{"description": "The acceleration variable."}>>> = accel_x
    function<<<{"description": "Function describing the displacement."}>>> = top_disp
  [../]
[]

[Functions<<<{"href": "../../../../syntax/Functions/index.html"}>>>]
  [./top_disp]
    type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../../source/functions/PiecewiseLinear.html"}>>>
    data_file<<<{"description": "File holding CSV data"}>>> = Displacement2.csv
    format<<<{"description": "Format of csv data file that is in either in columns or rows"}>>> = columns
  [../]
[]

[Materials<<<{"href": "../../../../syntax/Materials/index.html"}>>>]
  [./I_Soil<<<{"href": "../../../../syntax/Materials/I_Soil/index.html"}>>>]
    [./soil_1]
      layer_variable<<<{"description": "The auxvariable providing the soil layer identification."}>>> = layer_id
      layer_ids<<<{"description": "Vector of layer ids that map one-to-one to the rest of the soil layer parameters provided as input."}>>> = '0'
      soil_type<<<{"description": "This parameter determines the type of backbone curve used. Use 'user_defined' for a user defined backbone curve provided in a data file, 'darendeli' if the backbone curve is to be determined using Darandeli equations, 'gqh' if the backbone curve is determined using the GQ/H approach and 'thin_layer' if the soil is being used to simulate a thin-layer friction interface."}>>> = 'user_defined'
      backbone_curve_files<<<{"description": "The vector of file names of the files containing stress-strain backbone curves for the different soil layers. The size of the vector should be same as the size of layer_ids. All files should contain the same number of stress-strain points. Headers are not expected and it is assumed that the first column corresponds to strain values and the second column corresponds to the stress values. Additionally, two segments of a backbone curve cannot have the same slope."}>>> = 'stress_strain_darendeli.csv'
      poissons_ratio<<<{"description": "Poissons's ratio for the soil layers. The size of the vector should be same as the size of layer_ids."}>>> = '0.3'
      initial_shear_modulus<<<{"description": "The initial shear modulus of the soil layers."}>>> = '19571500'
      block<<<{"description": "The blocks where this material model is applied."}>>> = 0
      density<<<{"description": "Vector of density values that map one-to-one with the number 'layer_ids' parameter."}>>> = '2000'
    [../]
  [../]
[]

[Preconditioning<<<{"href": "../../../../syntax/Preconditioning/index.html"}>>>]
  [./andy]
    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 = PJFNK
  nl_abs_tol = 1e-11
  nl_rel_tol = 1e-11
  start_time = 0
  end_time = 8
  dt = 0.01
  timestep_tolerance = 1e-6
  petsc_options = '-snes_ksp_ew'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
[]

[Postprocessors<<<{"href": "../../../../syntax/Postprocessors/index.html"}>>>]
  [./_dt]
    type = TimestepSize<<<{"description": "Reports the timestep size", "href": "../../../../source/postprocessors/TimestepSize.html"}>>>
  [../]
  [./disp_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_x
  [../]
  [./disp_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_y
  [../]
  [./disp_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_z
  [../]
  [./vel_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_x
  [../]
  [./vel_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_y
  [../]
  [./vel_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_z
  [../]
  [./accel_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_x
  [../]
  [./accel_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_y
  [../]
  [./accel_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_z
  [../]
  [./stress_xy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_xy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_yz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_yz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_zx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_zx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_xy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_xy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_yz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_yz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_zx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_zx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./gamma_zx_el] # engineering shear strain
    type = ScalePostprocessor<<<{"description": "Scales a post-processor by a value", "href": "../../../../source/postprocessors/ScalePostprocessor.html"}>>>
    value<<<{"description": "The postprocessor to be scaled"}>>> = strain_zx_el
    scaling_factor<<<{"description": "The scaling factor"}>>> = 2
  [../]
  [./stress_xx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_xx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_yy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_yy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_zz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_zz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_xx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_xx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_yy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_yy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_zz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_zz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
[]

[Outputs<<<{"href": "../../../../syntax/Mastodon/Outputs/index.html"}>>>]
  exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
  csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
[]
(test/tests/materials/isoil/HYS_data_file_verification.i)

Darendeli Material Model

A procedure to analytically verify the automatically generated backbone curve using the Darendeli type material model is presented in this section. The element was assigned the properties listed in Table 1.

Table 1: Soil Properties.

PropertySymbolValue
Density2 Mg/m3
Overconsolidation Ratio1
Plasticity Index0
Initial Shear Modulus20,000 kPa
Reference (Confining) Pressure6.07286 kPa

To investigate the behavior of the Darendeli backbone curve, it was assumed that the element had zero initial stresses, no self weight (i.e., zero gravity), and undamped vibration.

For the Darendeli (2001) material model, the shear stress-strain backbone curve is described by the following equation:

(1)

where the reference shear strain, , is related to the reference pressure by

(2)

Eq. (2) requires that be in atmospheric pressure units. It is important to note that, in the current implementation of the MASTODON code, must be input in units of kPa, and that the code handles the conversion to atmospheric units. Also, note that Eq. (2) results in percent strain.

Eq. (1) was sampled at shear strain points, . In MASTODON, the sample strains are equally spaced between 1.0e-06 and 0.1 within the log-space to better capture backbone curvature at lower strains, i.e., the sample points are given by

Results

The hysteresis stress-strain curve in the ZX plane is shown in Figure 6.

Figure 6: Plot of the element hysteresis stress-strain curve in the ZX plane over the duration of the simulation.

Since the engineering strain in the ZX plane, , is equal to two times the tensor shear strain, , it was necessary to multiply the strains output by MOOSE TensorMechanics by two to get the shear stresses, , which correspond to those determined by Eq. (1). Next, the engineering shear stress-strain curve was superimposed over the 100 points, calculated by hand with Eq. (1), as shown in Figure 7. The backbone curve was obtained in MOOSE by sampling the data during the initial load cycle, i.e., from 3 seconds to 4 seconds (see Problem Statement). It is clear from Figure 7 that the analytical solution of the Darendeli model was consistent with the MASTODON one.

Figure 7: The analytical Darendeli backbone curve sampled at 100 points and the engineering shear stress-strain curve in the ZX plane output by MASTODON during the initial loading cycle (from 3 seconds to 4 seconds).

Complete Input File

# One element test to test the auto-generated Darendeli backbone curve.
# The back surface of the element (z=0) is fixed and the front surface (z=1)
# is moved by applying a cyclic preset displacement.

# This test is identical to HYS_darendeli.i except that the element was assumed
# to have zero initial stresses, no self-weight (i.e., zero gravity), and
# undamped vibration. Also, the backbone curve was generated using 100 points
# instead of 10 to increase smoothness.

# The resulting backbone curve was verified against the analytical solution.

[Mesh<<<{"href": "../../../../syntax/Mesh/index.html"}>>>]
  type = GeneratedMesh # Can generate simple lines, rectangles and rectangular prisms
  dim = 3 # Dimension of the mesh
  nx = 1 # Number of elements in the x direction
  ny = 1 # Number of elements in the y direction
  nz = 1 # Number of elements in the z direction
  xmin = 0.0
  xmax = 1
  ymin = 0.0
  ymax = 1
  zmin = 0.0
  zmax = 1
[]

[GlobalParams<<<{"href": "../../../../syntax/GlobalParams/index.html"}>>>]
  displacements = 'disp_x disp_y disp_z'
  use_displaced_mesh = false
[]

[Variables<<<{"href": "../../../../syntax/Variables/index.html"}>>>]
  [./disp_x]
  [../]
  [./disp_y]
  [../]
  [./disp_z]
  [../]
[]

[AuxVariables<<<{"href": "../../../../syntax/AuxVariables/index.html"}>>>]
  [./vel_x]
  [../]
  [./accel_x]
  [../]
  [./vel_y]
  [../]
  [./accel_y]
  [../]
  [./vel_z]
  [../]
  [./accel_z]
  [../]
  [./stress_xy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_yz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_zx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_xy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_yz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_zx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_xx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_yy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_zz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_xx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_yy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_zz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./layer_id]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
[]

[Kernels<<<{"href": "../../../../syntax/Kernels/index.html"}>>>]
  [./DynamicTensorMechanics<<<{"href": "../../../../syntax/Kernels/DynamicTensorMechanics/index.html"}>>>]
    displacements<<<{"description": "The nonlinear displacement variables for the problem"}>>> = 'disp_x disp_y disp_z'
  [../]
  [./inertia_x]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.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
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
  [../]
  [./inertia_y]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.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
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
  [../]
  [./inertia_z]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
    velocity<<<{"description": "velocity variable"}>>> = vel_z
    acceleration<<<{"description": "acceleration variable"}>>> = accel_z
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
  [../]
[]

[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
  [../]
  [./stress_xy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./stress_yz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_yz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./stress_zx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_zx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./strain_xy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./strain_yz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_yz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./strain_zx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_zx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./stress_xx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./stress_yy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_yy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./stress_zz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_zz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./strain_xx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_xx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./strain_yy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> =total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_yy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./strain_zz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_zz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./layer]
    type = UniformLayerAuxKernel<<<{"description": "Computes an AuxVariable for representing a layered structure in an arbitrary direction.", "href": "../../../../source/auxkernels/UniformLayerAuxKernel.html"}>>>
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = layer_id
    interfaces<<<{"description": "A list of layer interface locations to apply across the domain in the specified direction."}>>> = '2.0'
    direction<<<{"description": "The direction to apply layering."}>>> = '0 0 1'
    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."}>>> = initial
  [../]
[]

[BCs<<<{"href": "../../../../syntax/BCs/index.html"}>>>]
  [./x_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./y_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./z_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./Periodic<<<{"href": "../../../../syntax/BCs/Periodic/index.html"}>>>]
    [./x_dir]
      variable<<<{"description": "Variable for the periodic boundary condition"}>>> = 'disp_x disp_y disp_z'
      primary<<<{"description": "Boundary ID associated with the primary boundary."}>>> = '4'
      secondary<<<{"description": "Boundary ID associated with the secondary boundary."}>>> = '2'
      translation<<<{"description": "Vector that translates coordinates on the primary boundary to coordinates on the secondary boundary."}>>> = '1.0 0.0 0.0'
    [../]
    [./y_dir]
      variable<<<{"description": "Variable for the periodic boundary condition"}>>> = 'disp_x disp_y disp_z'
      primary<<<{"description": "Boundary ID associated with the primary boundary."}>>> = '1'
      secondary<<<{"description": "Boundary ID associated with the secondary boundary."}>>> = '3'
      translation<<<{"description": "Vector that translates coordinates on the primary boundary to coordinates on the secondary boundary."}>>> = '0.0 1.0 0.0'
    [../]
  [../]
  [./top_x]
    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"}>>> = 5
    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
    velocity<<<{"description": "The velocity variable."}>>> = vel_x
    acceleration<<<{"description": "The acceleration variable."}>>> = accel_x
    function<<<{"description": "Function describing the displacement."}>>> = top_disp
  [../]
[]

[Functions<<<{"href": "../../../../syntax/Functions/index.html"}>>>]
  [./top_disp]
    type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../../source/functions/PiecewiseLinear.html"}>>>
    data_file<<<{"description": "File holding CSV data"}>>> = Displacement2.csv
    format<<<{"description": "Format of csv data file that is in either in columns or rows"}>>> = columns
  [../]
[]

[Materials<<<{"href": "../../../../syntax/Materials/index.html"}>>>]
  [./I_Soil<<<{"href": "../../../../syntax/Materials/I_Soil/index.html"}>>>]
    [./soil_1]
      soil_type<<<{"description": "This parameter determines the type of backbone curve used. Use 'user_defined' for a user defined backbone curve provided in a data file, 'darendeli' if the backbone curve is to be determined using Darandeli equations, 'gqh' if the backbone curve is determined using the GQ/H approach and 'thin_layer' if the soil is being used to simulate a thin-layer friction interface."}>>> = 'darendeli'
      layer_variable<<<{"description": "The auxvariable providing the soil layer identification."}>>> = layer_id
      layer_ids<<<{"description": "Vector of layer ids that map one-to-one to the rest of the soil layer parameters provided as input."}>>> = '0'
      over_consolidation_ratio<<<{"description": "The over consolidation ratio of the soil layers. Required for Darandeli backbone curve."}>>> = '1'
      plasticity_index<<<{"description": "The plasticity index of the soil layers. Required for Darandeli backbone curve."}>>> = '0'
      initial_shear_modulus<<<{"description": "The initial shear modulus of the soil layers."}>>> = '20000'
      number_of_points<<<{"description": "The total number of data points in which the backbone curve needs to be split for all soil layers (required for Darandeli or GQ/H type backbone curves)."}>>> = 100
      poissons_ratio<<<{"description": "Poissons's ratio for the soil layers. The size of the vector should be same as the size of layer_ids."}>>> = '0.3'
      block<<<{"description": "The blocks where this material model is applied."}>>> = 0
      density<<<{"description": "Vector of density values that map one-to-one with the number 'layer_ids' parameter."}>>> = '2'
      p_ref<<<{"description": "The reference pressure at which the parameters are defined for each soil layer. If 'soil_type = darendeli', then the reference pressure must be input in kilopascals."}>>> = '6.07286'
    [../]
  [../]
[]

[Preconditioning<<<{"href": "../../../../syntax/Preconditioning/index.html"}>>>]
  [./andy]
    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 = PJFNK
  nl_abs_tol = 1e-11
  nl_rel_tol = 1e-11
  start_time = 0
  end_time = 8
  dt = 0.01
  timestep_tolerance = 1e-6
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
[]

[Postprocessors<<<{"href": "../../../../syntax/Postprocessors/index.html"}>>>]
  [./_dt]
    type = TimestepSize<<<{"description": "Reports the timestep size", "href": "../../../../source/postprocessors/TimestepSize.html"}>>>
  [../]
  [./disp_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_x
  [../]
  [./disp_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_y
  [../]
  [./disp_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_z
  [../]
  [./vel_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_x
  [../]
  [./vel_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_y
  [../]
  [./vel_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_z
  [../]
  [./accel_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_x
  [../]
  [./accel_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_y
  [../]
  [./accel_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_z
  [../]
  [./stress_xy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_xy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_yz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_yz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_zx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_zx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_xy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_xy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_yz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_yz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_zx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_zx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./gamma_zx_el] # engineering shear strain
    type = ScalePostprocessor<<<{"description": "Scales a post-processor by a value", "href": "../../../../source/postprocessors/ScalePostprocessor.html"}>>>
    value<<<{"description": "The postprocessor to be scaled"}>>> = strain_zx_el
    scaling_factor<<<{"description": "The scaling factor"}>>> = 2
  [../]
  [./stress_xx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_xx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_yy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_yy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_zz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_zz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_xx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_xx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_yy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_yy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_zz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_zz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
[]

[Outputs<<<{"href": "../../../../syntax/Mastodon/Outputs/index.html"}>>>]
  exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
  csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
[]
(test/tests/materials/isoil/HYS_darendeli_verification.i)

GQ/H Material Model

A procedure to analytically verify the automatically generated backbone curve using the General Quadratic/Hyperbolic (GQ/H) type material model is presented in this section. The element was assigned the properties listed in Table 2.

Table 2: Soil Properties.

PropertySymbolValue
Density2,000 kg/m3
Maximum Shear Modulus2.0e+07 Pa
Poisson's Ratio0.3
Maximum Shear Stress7,500 Pa
GQ/H Curve Fitting Parameters-2.28
-5.54
1.0
1.0
0.99

To investigate the behavior of the GQ/H backbone curve, it was assumed that the element had zero initial stresses, no self weight (i.e., zero gravity), and undamped vibration.

Groholski et al. (2016) proposed a curve fitting scheme to describe the following hyperbolic relationship between the normalized shear stress and shear strain:

(3)

The coefficient is a model-fitting function described by the following equation:

(4)

The general solution of Eq. (3) yields the backbone curve. For the special case where , the solution is given by

(5)

The GQ/H model also encompasses the special case where . For this case, MASTODON employs the KZ hyperbolic model described in Groholski et al. (2016), i.e,

(6)

The reference strain, , used in both Eq. (5) and Eq. (6) is given by

Eq. (4) and Eq. (5) were sampled at shear strain points, (Eq. (6) did not apply for this problem since , computed by Eq. (4), was never zero). In MASTODON, the sample strains are equally spaced between 1.0e-06 and 0.1 within the log-space to better capture backbone curvature at lower strains, i.e., the sample points are given by

Results

The hysteresis stress-strain curve in the ZX plane is shown in Figure 8.

Figure 8: Plot of the element hysteresis stress-strain curve in the ZX plane over the duration of the simulation.

Since the engineering strain in the ZX plane, , is equal to two times the tensor shear strain, , it was necessary to multiply the strains output by MOOSE TensorMechanics by two to get the shear stresses, , which correspond to those determined by Eq. (5). Next, the engineering shear stress-strain curve was superimposed over the 100 points, calculated by hand with Eq. (4) and Eq. (5), as shown in Figure 9. The backbone curve was obtained in MOOSE by sampling the data during the initial load cycle, i.e., from 3 seconds to 4 seconds (see Problem Statement). It is clear from Figure 9 that the analytical solution of the GQ/H model was consistent with the MASTODON one.

Figure 9: The analytical GQH backbone curve sampled at 100 points and the engineering shear stress-strain curve in the ZX plane output by MASTODON during the initial loading cycle (from 3 seconds to 4 seconds).

Complete Input File

# One element test to test the auto-generated GQ/H backbone curve.
# The back surface of the element (z=0) is fixed and the front surface (z=1)
# is moved by applying a cyclic preset displacement.

# This test is identical to HYS_GQH.i except that the element was assumed to
# have zero initial stresses, no self-weight (i.e., zero gravity), and
# undamped vibration. Also, the backbone curve was generated using 100 points
# instead of 10 to increase smoothness.

# The resulting backbone curve was verified against the analytical solution.

[Mesh<<<{"href": "../../../../syntax/Mesh/index.html"}>>>]
  type = GeneratedMesh # Can generate simple lines, rectangles and rectangular prisms
  dim = 3 # Dimension of the mesh
  nx = 1 # Number of elements in the x direction
  ny = 1 # Number of elements in the y direction
  nz = 1 # Number of elements in the z direction
  xmin = 0.0
  xmax = 1
  ymin = 0.0
  ymax = 1
  zmin = 0.0
  zmax = 1
[]

[GlobalParams<<<{"href": "../../../../syntax/GlobalParams/index.html"}>>>]
  displacements = 'disp_x disp_y disp_z'
  use_displaced_mesh = false
[]

[Variables<<<{"href": "../../../../syntax/Variables/index.html"}>>>]
  [./disp_x]
  [../]
  [./disp_y]
  [../]
  [./disp_z]
  [../]
[]

[AuxVariables<<<{"href": "../../../../syntax/AuxVariables/index.html"}>>>]
  [./vel_x]
  [../]
  [./accel_x]
  [../]
  [./vel_y]
  [../]
  [./accel_y]
  [../]
  [./vel_z]
  [../]
  [./accel_z]
  [../]
  [./stress_xy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_yz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_zx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_xy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_yz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_zx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_xx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_yy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_zz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_xx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_yy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_zz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./layer_id]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
[]

[Kernels<<<{"href": "../../../../syntax/Kernels/index.html"}>>>]
  [./DynamicTensorMechanics<<<{"href": "../../../../syntax/Kernels/DynamicTensorMechanics/index.html"}>>>]
    displacements<<<{"description": "The nonlinear displacement variables for the problem"}>>> = 'disp_x disp_y disp_z'
  [../]
  [./inertia_x]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.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
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
  [../]
  [./inertia_y]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.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
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
  [../]
  [./inertia_z]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
    velocity<<<{"description": "velocity variable"}>>> = vel_z
    acceleration<<<{"description": "acceleration variable"}>>> = accel_z
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
  [../]
[]

[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
  [../]
  [./stress_xy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./stress_yz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_yz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./stress_zx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_zx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./strain_xy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./strain_yz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_yz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./strain_zx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_zx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./stress_xx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./stress_yy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_yy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./stress_zz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_zz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./strain_xx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_xx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./strain_yy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> =total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_yy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./strain_zz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_zz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./layer]
    type = UniformLayerAuxKernel<<<{"description": "Computes an AuxVariable for representing a layered structure in an arbitrary direction.", "href": "../../../../source/auxkernels/UniformLayerAuxKernel.html"}>>>
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = layer_id
    interfaces<<<{"description": "A list of layer interface locations to apply across the domain in the specified direction."}>>> = '2.0'
    direction<<<{"description": "The direction to apply layering."}>>> = '0 0 1'
    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."}>>> = initial
  [../]
[]

[BCs<<<{"href": "../../../../syntax/BCs/index.html"}>>>]
  [./x_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./y_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./z_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./Periodic<<<{"href": "../../../../syntax/BCs/Periodic/index.html"}>>>]
    [./x_dir]
      variable<<<{"description": "Variable for the periodic boundary condition"}>>> = 'disp_x disp_y disp_z'
      primary<<<{"description": "Boundary ID associated with the primary boundary."}>>> = '4'
      secondary<<<{"description": "Boundary ID associated with the secondary boundary."}>>> = '2'
      translation<<<{"description": "Vector that translates coordinates on the primary boundary to coordinates on the secondary boundary."}>>> = '1.0 0.0 0.0'
    [../]
    [./y_dir]
      variable<<<{"description": "Variable for the periodic boundary condition"}>>> = 'disp_x disp_y disp_z'
      primary<<<{"description": "Boundary ID associated with the primary boundary."}>>> = '1'
      secondary<<<{"description": "Boundary ID associated with the secondary boundary."}>>> = '3'
      translation<<<{"description": "Vector that translates coordinates on the primary boundary to coordinates on the secondary boundary."}>>> = '0.0 1.0 0.0'
    [../]
  [../]
  [./top_x]
    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"}>>> = 5
    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
    velocity<<<{"description": "The velocity variable."}>>> = vel_x
    acceleration<<<{"description": "The acceleration variable."}>>> = accel_x
    function<<<{"description": "Function describing the displacement."}>>> = top_disp
  [../]
[]

[Functions<<<{"href": "../../../../syntax/Functions/index.html"}>>>]
  [./top_disp]
    type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../../source/functions/PiecewiseLinear.html"}>>>
    data_file<<<{"description": "File holding CSV data"}>>> = Displacement2.csv
    format<<<{"description": "Format of csv data file that is in either in columns or rows"}>>> = columns
  [../]
[]

[Materials<<<{"href": "../../../../syntax/Materials/index.html"}>>>]
  [./I_Soil<<<{"href": "../../../../syntax/Materials/I_Soil/index.html"}>>>]
    [./soil_1]
      soil_type<<<{"description": "This parameter determines the type of backbone curve used. Use 'user_defined' for a user defined backbone curve provided in a data file, 'darendeli' if the backbone curve is to be determined using Darandeli equations, 'gqh' if the backbone curve is determined using the GQ/H approach and 'thin_layer' if the soil is being used to simulate a thin-layer friction interface."}>>> = 'gqh'
      layer_variable<<<{"description": "The auxvariable providing the soil layer identification."}>>> = layer_id
      layer_ids<<<{"description": "Vector of layer ids that map one-to-one to the rest of the soil layer parameters provided as input."}>>> = '0'
      theta_1<<<{"description": "The curve fit coefficient for GQ/H modelfor each soil layer."}>>> = '-2.28'
      theta_2<<<{"description": "The curve fit coefficient for GQ/H modelfor each soil layer."}>>> = '-5.54'
      theta_3<<<{"description": "The curve fit coefficient for GQ/H modelfor each soil layer."}>>> = '1.0'
      theta_4<<<{"description": "The curve fit coefficient for GQ/H modelfor each soil layer."}>>> = '1.0'
      theta_5<<<{"description": "The curve fit coefficient for GQ/H modelfor each soil layer."}>>> = '0.99'
      taumax<<<{"description": "The ultimate shear strength of the soil layers. Required for GQ/H model"}>>> = '7500'
      initial_shear_modulus<<<{"description": "The initial shear modulus of the soil layers."}>>> = '20000000'
      number_of_points<<<{"description": "The total number of data points in which the backbone curve needs to be split for all soil layers (required for Darandeli or GQ/H type backbone curves)."}>>> = 100
      poissons_ratio<<<{"description": "Poissons's ratio for the soil layers. The size of the vector should be same as the size of layer_ids."}>>> = '0.3'
      block<<<{"description": "The blocks where this material model is applied."}>>> = 0
      density<<<{"description": "Vector of density values that map one-to-one with the number 'layer_ids' parameter."}>>> = '2000'
    [../]
  [../]
[]

[Preconditioning<<<{"href": "../../../../syntax/Preconditioning/index.html"}>>>]
  [./andy]
    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 = PJFNK
  nl_abs_tol = 1e-11
  nl_rel_tol = 1e-11
  start_time = 0
  end_time = 8
  dt = 0.01
  timestep_tolerance = 1e-6
  petsc_options = '-snes_ksp_ew'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
[]

[Postprocessors<<<{"href": "../../../../syntax/Postprocessors/index.html"}>>>]
  [./_dt]
    type = TimestepSize<<<{"description": "Reports the timestep size", "href": "../../../../source/postprocessors/TimestepSize.html"}>>>
  [../]
  [./disp_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_x
  [../]
  [./disp_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_y
  [../]
  [./disp_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_z
  [../]
  [./vel_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_x
  [../]
  [./vel_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_y
  [../]
  [./vel_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_z
  [../]
  [./accel_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_x
  [../]
  [./accel_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_y
  [../]
  [./accel_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_z
  [../]
  [./stress_xy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_xy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_yz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_yz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_zx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_zx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_xy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_xy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_yz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_yz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_zx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_zx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./gamma_zx_el] # engineering shear strain
    type = ScalePostprocessor<<<{"description": "Scales a post-processor by a value", "href": "../../../../source/postprocessors/ScalePostprocessor.html"}>>>
    value<<<{"description": "The postprocessor to be scaled"}>>> = strain_zx_el
    scaling_factor<<<{"description": "The scaling factor"}>>> = 2
  [../]
  [./stress_xx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_xx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_yy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_yy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_zz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_zz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_xx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_xx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_yy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_yy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_zz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_zz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
[]

[Outputs<<<{"href": "../../../../syntax/Mastodon/Outputs/index.html"}>>>]
  exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
  csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
[]
(test/tests/materials/isoil/HYS_GQH_verification.i)

Pressure Dependency

A procedure to verify the ability to vary the shear yield strength and the shear modulus to account for the pressure dependent stress-strain behavior of soils is presented in this section. This discussion is split into three subsections: Pressure Dependent Strength, Pressure Dependent Stiffness, and Pressure Dependent Strength and Stiffness. In all cases, the element was assigned the properties listed in Table 3.

Table 3: Soil Properties.

PropertySymbolValue
Density2000 kg/m3
Poisson's Ratio0.3
Mass-proportional Damping7.854
Stiffness-proportional Damping6.366e-05

The backbone curve was defined as shown in Figure 10.

Figure 10: The user-defined backbone curve input into MASTODON to control the stress-strain behavior of the soil using I-Soil.

To conserve dynamic equilibrium in the first time-step, the element was initialized with the following state of stress, which corresponds to three times the acceleration of gravity, i.e., (see Initial Stresses for more information on stress initialization):

Then a body force equal to three times the force of gravity was applied thereby increasing the vertical pressure experienced by the element. Finally a ramp displacement was applied in the manner described in Problem Statement.

I-Soil is capable of varying the shear yield strength and the shear modulus as a function of engineering strain, , mean effective stress, , a specified reference pressure, , and a tension pressure cutoff value, . Assuming positive compression, MASTODON computes the mean effective stress as

(Numanoglu (2017)) provided the following formula to model pressure dependent shear strength using I-Soil:

(7)

where is the unmodified shear strength determined from the backbone curve and , , and are pressure dependent strength coefficients. The formula to model pressure dependent shear modulus is as follows:

(8)

where is the unmodified shear modulus determined from the backbone curve and is a pressure dependent stiffness coefficient. In all tests presented in this section, the tensile cutoff value was set to -1 Pa.

Pressure Dependent Strength

The five cases described in Table 4 were used to investigate the behavior of Eq. (7) with varying parameters, , , , and . In all cases, the pressure dependent stiffness parameter, , was set to zero. Therefore, Eq. (8) was anomalously canceled in these models.

Table 4: Five combinations of , , , and used to investigate their effect on Eq. (7).

Case No.
10016072.86 Pa
20106072.86 Pa
31006072.86 Pa
401029430 Pa
501042043 Pa

Results

The engineering shear stress-strain backbone curve results for Cases 1, 2, and 3 are presented in Figure 11, and those for Cases 2, 4, and 5 are presented in Figure 12. Both figures show their results along with the user-defined backbone curve shown in Figure 10. The backbone curves were obtained in MOOSE by sampling the data during the initial load cycle, i.e., from 3 seconds to 4 seconds (see Problem Statement). It can be seen in Figure 11 and Figure 12 that MASTODON effectively modifies the shear strength. In some cases, stiffness changes on those strain increments for which the mean effective stress exceeds can also be observed in these two figures, even though . This is reasoned by the fact that, at a constant rate of strain, a change in strength of a material naturally (and numerically) leads to one in stiffness.

Figure 11: The user-defined backbone curve and the engineering shear stress-strain curve in the ZX plane output by MASTODON during the initial loading cycle (from 3 seconds to 4 seconds) for for pressure dependent strength Cases 1, 2, and 3.

Figure 12: The user-defined backbone curve and the engineering shear stress-strain curve in the ZX plane output by MASTODON during the initial loading cycle (from 3 seconds to 4 seconds) for pressure dependent strength Cases 2, 4, and 5.

Qualitative Analysis: Since setting and causes the shear strength to increase in proportion to , while setting and causes it to increase in proportion to , Figure 11 shows that Case 1 is significantly stronger than Case 2. Also, since setting while setting the others to zero causes the right-hand-side of Eq. (7) to be equal to unity, Figure 11 shows that Case 3 is practically equivalent to the original backbone curve (the slight discrepancy arises from the presence of initial stresses, the tensile cutoff value, , and the application of the body force). Cases 4 and 5 are essentially Case 2 except with different values, hence, Case 2 was included in Figure 12 for comparison. This plot shows that setting the reference pressure equal to the applied vertical pressure (Case 4) causes the shear strength to remain virtually unmodified, while setting it lower (Case 2) causes the shear strength to increase and setting it higher (Case 5) causes the shear strength to decrease. These observations made from each of the five cases are arithmetically consistent with Eq. (7).

Complete Input File

# One element test to check pressure dependent strength calcualtion.

# The element is first intialized with stresses corresponding to acceleration due to gravity (g).
# Then a body force equal to 3 * g is applied to the element thereby increasing the pressure experienced
# by the element. The element is then sheared by moving the front surface (z = 0) in the x direction.

# The stength of the resulting stress-strain can be varied with pressure dependent stength parameters,
# a0, a1, and a2, and with p_ref. Setting b_exp = 0 assures that MASTODON does not directly modify the
# backbone stiffness. Although, a change in strength naturally leads to one in stiffness.

# Five combinations of the parameters a_0, a_1, a_2, and p_ref were tested using this input file,
# but only one case can be used at a time.

[Mesh<<<{"href": "../../../../syntax/Mesh/index.html"}>>>]
  type = GeneratedMesh # Can generate simple lines, rectangles and rectangular prisms
  dim = 3 # Dimension of the mesh
  nx = 1 # Number of elements in the x direction
  ny = 1 # Number of elements in the y direction
  nz = 1 # Number of elements in the z direction
  xmin = 0.0
  xmax = 1
  ymin = 0.0
  ymax = 1
  zmin = 0.0
  zmax = 1
[]

[GlobalParams<<<{"href": "../../../../syntax/GlobalParams/index.html"}>>>]
  displacements = 'disp_x disp_y disp_z'
  use_displaced_mesh = false
[]

[Variables<<<{"href": "../../../../syntax/Variables/index.html"}>>>]
  [./disp_x]
  [../]
  [./disp_y]
  [../]
  [./disp_z]
  [../]
[]

[AuxVariables<<<{"href": "../../../../syntax/AuxVariables/index.html"}>>>]
  [./vel_x]
  [../]
  [./accel_x]
  [../]
  [./vel_y]
  [../]
  [./accel_y]
  [../]
  [./vel_z]
  [../]
  [./accel_z]
  [../]
  [./stress_xy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_yz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_zx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_xy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_yz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_zx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_xx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_yy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_zz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_xx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_yy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_zz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./layer_id]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
[]

[Kernels<<<{"href": "../../../../syntax/Kernels/index.html"}>>>]
  [./DynamicTensorMechanics<<<{"href": "../../../../syntax/Kernels/DynamicTensorMechanics/index.html"}>>>]
    displacements<<<{"description": "The nonlinear displacement variables for the problem"}>>> = 'disp_x disp_y disp_z'
    stiffness_damping_coefficient<<<{"description": "Name of material property or a constant real number defining stiffness Rayleigh parameter (zeta)."}>>> = 0.00006366
  [../]
  [./inertia_x]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.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
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
    eta<<<{"description": "Name of material property or a constant real number defining the eta parameter for the Rayleigh damping."}>>> = 7.854
  [../]
  [./inertia_y]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.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
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
    eta<<<{"description": "Name of material property or a constant real number defining the eta parameter for the Rayleigh damping."}>>> = 7.854
  [../]
  [./inertia_z]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
    velocity<<<{"description": "velocity variable"}>>> = vel_z
    acceleration<<<{"description": "acceleration variable"}>>> = accel_z
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
    eta<<<{"description": "Name of material property or a constant real number defining the eta parameter for the Rayleigh damping."}>>> = 7.854
  [../]
  [./gravity]
    type = Gravity<<<{"description": "Apply gravity. Value is in units of acceleration.", "href": "../../../../source/kernels/Gravity.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
    value<<<{"description": "Value multiplied against the residual, e.g. gravitational acceleration"}>>> = -29.43
  [../]
[]

[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
  [../]
  [./stress_xy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./stress_yz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_yz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./stress_zx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_zx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./strain_xy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./strain_yz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_yz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./strain_zx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_zx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./stress_xx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./stress_yy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_yy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./stress_zz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_zz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./strain_xx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_xx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./strain_yy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> =total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_yy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./strain_zz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_zz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./layer]
    type = UniformLayerAuxKernel<<<{"description": "Computes an AuxVariable for representing a layered structure in an arbitrary direction.", "href": "../../../../source/auxkernels/UniformLayerAuxKernel.html"}>>>
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = layer_id
    interfaces<<<{"description": "A list of layer interface locations to apply across the domain in the specified direction."}>>> = '2.0'
    direction<<<{"description": "The direction to apply layering."}>>> = '0 0 1'
    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."}>>> = initial
  [../]
[]

[BCs<<<{"href": "../../../../syntax/BCs/index.html"}>>>]
  [./x_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./y_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./z_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./Periodic<<<{"href": "../../../../syntax/BCs/Periodic/index.html"}>>>]
    [./x_dir]
      variable<<<{"description": "Variable for the periodic boundary condition"}>>> = 'disp_x disp_y disp_z'
      primary<<<{"description": "Boundary ID associated with the primary boundary."}>>> = '4'
      secondary<<<{"description": "Boundary ID associated with the secondary boundary."}>>> = '2'
      translation<<<{"description": "Vector that translates coordinates on the primary boundary to coordinates on the secondary boundary."}>>> = '1.0 0.0 0.0'
    [../]
    [./y_dir]
      variable<<<{"description": "Variable for the periodic boundary condition"}>>> = 'disp_x disp_y disp_z'
      primary<<<{"description": "Boundary ID associated with the primary boundary."}>>> = '1'
      secondary<<<{"description": "Boundary ID associated with the secondary boundary."}>>> = '3'
      translation<<<{"description": "Vector that translates coordinates on the primary boundary to coordinates on the secondary boundary."}>>> = '0.0 1.0 0.0'
    [../]
  [../]
  [./top_x]
    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"}>>> = 5
    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
    velocity<<<{"description": "The velocity variable."}>>> = vel_x
    acceleration<<<{"description": "The acceleration variable."}>>> = accel_x
    function<<<{"description": "Function describing the displacement."}>>> = top_disp
  [../]
[]

[Functions<<<{"href": "../../../../syntax/Functions/index.html"}>>>]
  [./top_disp]
    type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../../source/functions/PiecewiseLinear.html"}>>>
    data_file<<<{"description": "File holding CSV data"}>>> = Displacement2.csv
    format<<<{"description": "Format of csv data file that is in either in columns or rows"}>>> = columns
  [../]
[]

[Materials<<<{"href": "../../../../syntax/Materials/index.html"}>>>]
  [./I_Soil<<<{"href": "../../../../syntax/Materials/I_Soil/index.html"}>>>]
    [./soil_1]
      soil_type<<<{"description": "This parameter determines the type of backbone curve used. Use 'user_defined' for a user defined backbone curve provided in a data file, 'darendeli' if the backbone curve is to be determined using Darandeli equations, 'gqh' if the backbone curve is determined using the GQ/H approach and 'thin_layer' if the soil is being used to simulate a thin-layer friction interface."}>>> = 'user_defined'
      layer_variable<<<{"description": "The auxvariable providing the soil layer identification."}>>> = layer_id
      layer_ids<<<{"description": "Vector of layer ids that map one-to-one to the rest of the soil layer parameters provided as input."}>>> = '0'
      backbone_curve_files<<<{"description": "The vector of file names of the files containing stress-strain backbone curves for the different soil layers. The size of the vector should be same as the size of layer_ids. All files should contain the same number of stress-strain points. Headers are not expected and it is assumed that the first column corresponds to strain values and the second column corresponds to the stress values. Additionally, two segments of a backbone curve cannot have the same slope."}>>> = 'stress_strain20.csv'
      poissons_ratio<<<{"description": "Poissons's ratio for the soil layers. The size of the vector should be same as the size of layer_ids."}>>> = '0.3'
      block<<<{"description": "The blocks where this material model is applied."}>>> = 0
      initial_soil_stress<<<{"description": "The function values for the initial stress distribution. 9 function names have to be provided corresponding to stress_xx, stress_xy, stress_xz, stress_yx, stress_yy, stress_yz, stress_zx, stress_zy, stress_zz. Each function can be a function of space."}>>> = '-12613 0 0  0 -12613 0  0 0 -29430'
      pressure_dependency<<<{"description": "Set to true to turn on pressure dependent stiffness and yield strength calculation."}>>> = true
      b_exp<<<{"description": "The exponential factors for pressure dependent stiffness for all the soil layers."}>>> = 0.0
      tension_pressure_cut_off<<<{"description": "The tension cut-off for all the soil layers. If the pressure becomes lower than this value, then the stiffness of the soil reduces to zero. A negative pressure indicates tension. The default value is -1.0 for all the soil layers."}>>> = -1
      density<<<{"description": "Vector of density values that map one-to-one with the number 'layer_ids' parameter."}>>> = '2000'
      initial_shear_modulus<<<{"description": "The initial shear modulus of the soil layers."}>>> = '19683812.98'

      ## Case 1
      a0<<<{"description": "The first coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1 = 0 and a2=0 for one soil layer, then the yield strength of that layer is independent of pressure."}>>> = 0
      a1<<<{"description": "The second coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1 = 0, a2 = 0 for one soil layer, then the yield strength of that layer is independent of pressure."}>>> = 0
      a2<<<{"description": "The third coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1=0 and a2=0 for one soil layer, then the yield strength of that layer is independent of pressure."}>>> = 1
      p_ref<<<{"description": "The reference pressure at which the parameters are defined for each soil layer. If 'soil_type = darendeli', then the reference pressure must be input in kilopascals."}>>> = 6072.86

      ## Case 2
      #a0 = 0
      #a1 = 1
      #a2 = 0
      #p_ref = 6072.86

      ## Case 3
      #a0 = 1
      #a1 = 0
      #a2 = 0
      #p_ref = 6072.86

      ## Case 4
      #a0 = 0
      #a1 = 1
      #a2 = 0
      #p_ref = 29430

      ## Case 5
      #a0 = 0
      #a1 = 1
      #a2 = 0
      #p_ref = 42043
    [../]
  [../]
[]

[Preconditioning<<<{"href": "../../../../syntax/Preconditioning/index.html"}>>>]
  [./andy]
    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 = PJFNK
  nl_abs_tol = 1e-11
  nl_rel_tol = 1e-11
  start_time = 0
  end_time = 8.0
  dt = 0.01
  timestep_tolerance = 1e-6
  petsc_options = '-snes_ksp_ew'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
[]

[Postprocessors<<<{"href": "../../../../syntax/Postprocessors/index.html"}>>>]
  [./_dt]
    type = TimestepSize<<<{"description": "Reports the timestep size", "href": "../../../../source/postprocessors/TimestepSize.html"}>>>
  [../]
  [./disp_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_x
  [../]
  [./disp_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_y
  [../]
  [./disp_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_z
  [../]
  [./vel_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_x
  [../]
  [./vel_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_y
  [../]
  [./vel_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_z
  [../]
  [./accel_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_x
  [../]
  [./accel_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_y
  [../]
  [./accel_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_z
  [../]
  [./stress_xy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_xy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_yz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_yz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_zx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_zx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_xy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_xy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_yz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_yz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_zx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_zx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./gamma_zx_el]
    type = ScalePostprocessor<<<{"description": "Scales a post-processor by a value", "href": "../../../../source/postprocessors/ScalePostprocessor.html"}>>>
    value<<<{"description": "The postprocessor to be scaled"}>>> = strain_zx_el
    scaling_factor<<<{"description": "The scaling factor"}>>> = 2
  [../]
  [./stress_xx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_xx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_yy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_yy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_zz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_zz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_xx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_xx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_yy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_yy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_zz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_zz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./mean_stress]
    type = LinearCombinationPostprocessor<<<{"description": "Computes a linear combination between an arbitrary number of post-processors", "href": "../../../../source/postprocessors/LinearCombinationPostprocessor.html"}>>>
    pp_names<<<{"description": "List of post-processors"}>>> = 'stress_xx_el stress_yy_el stress_zz_el'
    pp_coefs<<<{"description": "List of linear combination coefficients for each post-processor"}>>> = '-0.3333 -0.3333 -0.3333'
  [../]
[]

[Outputs<<<{"href": "../../../../syntax/Mastodon/Outputs/index.html"}>>>]
  exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
  csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
  perf_graph<<<{"description": "Enable printing of the performance graph to the screen (Console)"}>>> = false
[]
(test/tests/materials/isoil/HYS_pressure_dependent_strength.i)

Pressure Dependent Stiffness

The three cases described in Table 5 were used to investigate the behavior of Eq. (8) with different values for the parameter . In all cases, was set to 6072.86 Pa. and the pressure dependent strength parameters were set to the following: , , and . Therefore, Eq. (7) was anomalously canceled in these models.

Table 5: Three different values of used to investigate its effect on Eq. (8).

Case No.
11.0
20.5
30.0

Results

The engineering shear stress-strain backbone curve results for all cases are presented in Figure 13. The results are shown along with the user-defined backbone curve shown in Figure 10. The backbone curves were obtained in MOOSE by sampling the data during the initial load cycle, i.e., from 3 seconds to 4 seconds (see Problem Statement). It can be seen in Figure 13 that MASTODON effectively modifies the shear modulus. For reasons similar to why the curves shown in Figure 11 and Figure 12 exhibit stiffness changes, strength changes, particularly at the lower strains of Case 1 and Case 2, can also be observed in this figure, even though , , and . However, the ultimate shear strength at which the material completely fails, which corresponds to the maximum stress value defined by the backbone curve (Figure 10), remains the same.

Figure 13: The user-defined backbone curve and the engineering shear stress-strain curve in the ZX plane output by MASTODON during the initial loading cycle (from 3 seconds to 4 seconds) for the pressure dependent stiffness cases.

Qualitative Analysis: Figure 13 shows that Case 1 results in a greater stiffness increase than Case 2. Also, since Eq. (8) results in when , Case 3 is practically equivalent to the original backbone curve (the slight discrepancy arises from the presence of initial stresses, the tensile cutoff value, , and the application of the body force). These observations made from each of the three cases are arithmetically consistent with Eq. (8).

Complete Input File

# One element test to check pressure dependent stiffness calcualtion.

# The element is first intialized with stresses corresponding to acceleration due to gravity (g).
# Then a body force equal to 3 * g is applied to the element thereby increasing the pressure experienced
# by the element. The element is then sheared by moving the front surface (z = 0) in the x direction.

# The resulting stress-strain curve is stiffer due to the increase in pressure but the maximum/ultimate shear
# stress at which the material completely fails still remains the same.

# Three different values of the parameter b_exp were tested using this input file, but only one case
# case can be used at a time.

[Mesh<<<{"href": "../../../../syntax/Mesh/index.html"}>>>]
  type = GeneratedMesh # Can generate simple lines, rectangles and rectangular prisms
  dim = 3 # Dimension of the mesh
  nx = 1 # Number of elements in the x direction
  ny = 1 # Number of elements in the y direction
  nz = 1 # Number of elements in the z direction
  xmin = 0.0
  xmax = 1
  ymin = 0.0
  ymax = 1
  zmin = 0.0
  zmax = 1
[]

[GlobalParams<<<{"href": "../../../../syntax/GlobalParams/index.html"}>>>]
  displacements = 'disp_x disp_y disp_z'
  use_displaced_mesh = false
[]

[Variables<<<{"href": "../../../../syntax/Variables/index.html"}>>>]
  [./disp_x]
  [../]
  [./disp_y]
  [../]
  [./disp_z]
  [../]
[]

[AuxVariables<<<{"href": "../../../../syntax/AuxVariables/index.html"}>>>]
  [./vel_x]
  [../]
  [./accel_x]
  [../]
  [./vel_y]
  [../]
  [./accel_y]
  [../]
  [./vel_z]
  [../]
  [./accel_z]
  [../]
  [./stress_xy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_yz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_zx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_xy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_yz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_zx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_xx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_yy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_zz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_xx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_yy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_zz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./layer_id]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
[]

[Kernels<<<{"href": "../../../../syntax/Kernels/index.html"}>>>]
  [./DynamicTensorMechanics<<<{"href": "../../../../syntax/Kernels/DynamicTensorMechanics/index.html"}>>>]
    displacements<<<{"description": "The nonlinear displacement variables for the problem"}>>> = 'disp_x disp_y disp_z'
    stiffness_damping_coefficient<<<{"description": "Name of material property or a constant real number defining stiffness Rayleigh parameter (zeta)."}>>> = 0.00006366
  [../]
  [./inertia_x]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.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
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
    eta<<<{"description": "Name of material property or a constant real number defining the eta parameter for the Rayleigh damping."}>>> = 7.854
  [../]
  [./inertia_y]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.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
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
    eta<<<{"description": "Name of material property or a constant real number defining the eta parameter for the Rayleigh damping."}>>> = 7.854
  [../]
  [./inertia_z]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
    velocity<<<{"description": "velocity variable"}>>> = vel_z
    acceleration<<<{"description": "acceleration variable"}>>> = accel_z
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
    eta<<<{"description": "Name of material property or a constant real number defining the eta parameter for the Rayleigh damping."}>>> = 7.854
  [../]
  [./gravity]
    type = Gravity<<<{"description": "Apply gravity. Value is in units of acceleration.", "href": "../../../../source/kernels/Gravity.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
    value<<<{"description": "Value multiplied against the residual, e.g. gravitational acceleration"}>>> = -29.43
  [../]
[]

[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
  [../]
  [./stress_xy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./stress_yz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_yz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./stress_zx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_zx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./strain_xy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./strain_yz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_yz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./strain_zx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_zx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./stress_xx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./stress_yy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_yy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./stress_zz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_zz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./strain_xx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_xx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./strain_yy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> =total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_yy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./strain_zz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_zz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./layer]
    type = UniformLayerAuxKernel<<<{"description": "Computes an AuxVariable for representing a layered structure in an arbitrary direction.", "href": "../../../../source/auxkernels/UniformLayerAuxKernel.html"}>>>
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = layer_id
    interfaces<<<{"description": "A list of layer interface locations to apply across the domain in the specified direction."}>>> = '2.0'
    direction<<<{"description": "The direction to apply layering."}>>> = '0 0 1'
    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."}>>> = initial
  [../]
[]

[BCs<<<{"href": "../../../../syntax/BCs/index.html"}>>>]
  [./x_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./y_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./z_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./Periodic<<<{"href": "../../../../syntax/BCs/Periodic/index.html"}>>>]
    [./x_dir]
      variable<<<{"description": "Variable for the periodic boundary condition"}>>> = 'disp_x disp_y disp_z'
      primary<<<{"description": "Boundary ID associated with the primary boundary."}>>> = '4'
      secondary<<<{"description": "Boundary ID associated with the secondary boundary."}>>> = '2'
      translation<<<{"description": "Vector that translates coordinates on the primary boundary to coordinates on the secondary boundary."}>>> = '1.0 0.0 0.0'
    [../]
    [./y_dir]
      variable<<<{"description": "Variable for the periodic boundary condition"}>>> = 'disp_x disp_y disp_z'
      primary<<<{"description": "Boundary ID associated with the primary boundary."}>>> = '1'
      secondary<<<{"description": "Boundary ID associated with the secondary boundary."}>>> = '3'
      translation<<<{"description": "Vector that translates coordinates on the primary boundary to coordinates on the secondary boundary."}>>> = '0.0 1.0 0.0'
    [../]
  [../]
  [./top_x]
    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"}>>> = 5
    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
    velocity<<<{"description": "The velocity variable."}>>> = vel_x
    acceleration<<<{"description": "The acceleration variable."}>>> = accel_x
    function<<<{"description": "Function describing the displacement."}>>> = top_disp
  [../]
[]

[Functions<<<{"href": "../../../../syntax/Functions/index.html"}>>>]
  [./top_disp]
    type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../../source/functions/PiecewiseLinear.html"}>>>
    data_file<<<{"description": "File holding CSV data"}>>> = Displacement2.csv
    format<<<{"description": "Format of csv data file that is in either in columns or rows"}>>> = columns
  [../]
[]

[Materials<<<{"href": "../../../../syntax/Materials/index.html"}>>>]
  [./I_Soil<<<{"href": "../../../../syntax/Materials/I_Soil/index.html"}>>>]
    [./soil_1]
      soil_type<<<{"description": "This parameter determines the type of backbone curve used. Use 'user_defined' for a user defined backbone curve provided in a data file, 'darendeli' if the backbone curve is to be determined using Darandeli equations, 'gqh' if the backbone curve is determined using the GQ/H approach and 'thin_layer' if the soil is being used to simulate a thin-layer friction interface."}>>> = 'user_defined'
      layer_variable<<<{"description": "The auxvariable providing the soil layer identification."}>>> = layer_id
      layer_ids<<<{"description": "Vector of layer ids that map one-to-one to the rest of the soil layer parameters provided as input."}>>> = '0'
      backbone_curve_files<<<{"description": "The vector of file names of the files containing stress-strain backbone curves for the different soil layers. The size of the vector should be same as the size of layer_ids. All files should contain the same number of stress-strain points. Headers are not expected and it is assumed that the first column corresponds to strain values and the second column corresponds to the stress values. Additionally, two segments of a backbone curve cannot have the same slope."}>>> = 'stress_strain20.csv'
      poissons_ratio<<<{"description": "Poissons's ratio for the soil layers. The size of the vector should be same as the size of layer_ids."}>>> = '0.3'
      block<<<{"description": "The blocks where this material model is applied."}>>> = 0
      initial_soil_stress<<<{"description": "The function values for the initial stress distribution. 9 function names have to be provided corresponding to stress_xx, stress_xy, stress_xz, stress_yx, stress_yy, stress_yz, stress_zx, stress_zy, stress_zz. Each function can be a function of space."}>>> = '-12613 0 0  0 -12613 0  0 0 -29430'
      pressure_dependency<<<{"description": "Set to true to turn on pressure dependent stiffness and yield strength calculation."}>>> = true
      #b_exp = 1.0 # Case 1
      b_exp<<<{"description": "The exponential factors for pressure dependent stiffness for all the soil layers."}>>> = 0.5 # Case 2
      #b_exp = 0.0 # Case 3
      p_ref<<<{"description": "The reference pressure at which the parameters are defined for each soil layer. If 'soil_type = darendeli', then the reference pressure must be input in kilopascals."}>>> = 6072.86
      initial_shear_modulus<<<{"description": "The initial shear modulus of the soil layers."}>>> = '19683812.98'
      tension_pressure_cut_off<<<{"description": "The tension cut-off for all the soil layers. If the pressure becomes lower than this value, then the stiffness of the soil reduces to zero. A negative pressure indicates tension. The default value is -1.0 for all the soil layers."}>>> = -1
      a0<<<{"description": "The first coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1 = 0 and a2=0 for one soil layer, then the yield strength of that layer is independent of pressure."}>>> = 1
      a1<<<{"description": "The second coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1 = 0, a2 = 0 for one soil layer, then the yield strength of that layer is independent of pressure."}>>> = 0
      a2<<<{"description": "The third coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1=0 and a2=0 for one soil layer, then the yield strength of that layer is independent of pressure."}>>> = 0
      density<<<{"description": "Vector of density values that map one-to-one with the number 'layer_ids' parameter."}>>> = '2000'
    [../]
  [../]
[]

[Preconditioning<<<{"href": "../../../../syntax/Preconditioning/index.html"}>>>]
  [./andy]
    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 = PJFNK
  nl_abs_tol = 1e-11
  nl_rel_tol = 1e-11
  start_time = 0
  end_time = 8.0
  dt = 0.01
  timestep_tolerance = 1e-6
  petsc_options = '-snes_ksp_ew'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
[]

[Postprocessors<<<{"href": "../../../../syntax/Postprocessors/index.html"}>>>]
  [./_dt]
    type = TimestepSize<<<{"description": "Reports the timestep size", "href": "../../../../source/postprocessors/TimestepSize.html"}>>>
  [../]
  [./disp_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_x
  [../]
  [./disp_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_y
  [../]
  [./disp_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_z
  [../]
  [./vel_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_x
  [../]
  [./vel_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_y
  [../]
  [./vel_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_z
  [../]
  [./accel_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_x
  [../]
  [./accel_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_y
  [../]
  [./accel_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_z
  [../]
  [./stress_xy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_xy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_yz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_yz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_zx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_zx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_xy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_xy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_yz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_yz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_zx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_zx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./gamma_zx_el]
    type = ScalePostprocessor<<<{"description": "Scales a post-processor by a value", "href": "../../../../source/postprocessors/ScalePostprocessor.html"}>>>
    value<<<{"description": "The postprocessor to be scaled"}>>> = strain_zx_el
    scaling_factor<<<{"description": "The scaling factor"}>>> = 2
  [../]
  [./stress_xx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_xx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_yy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_yy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_zz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_zz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_xx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_xx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_yy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_yy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_zz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_zz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./mean_stress]
    type = LinearCombinationPostprocessor<<<{"description": "Computes a linear combination between an arbitrary number of post-processors", "href": "../../../../source/postprocessors/LinearCombinationPostprocessor.html"}>>>
    pp_names<<<{"description": "List of post-processors"}>>> = 'stress_xx_el stress_yy_el stress_zz_el'
    pp_coefs<<<{"description": "List of linear combination coefficients for each post-processor"}>>> = '-0.3333 -0.3333 -0.3333'
  [../]
[]

[Outputs<<<{"href": "../../../../syntax/Mastodon/Outputs/index.html"}>>>]
  exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
  csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
  perf_graph<<<{"description": "Enable printing of the performance graph to the screen (Console)"}>>> = false
[]
(test/tests/materials/isoil/HYS_pressure_dependent_stiffness.i)

Pressure Dependent Strength and Stiffness

The two cases described in Table 6 were used to simultaneously investigate the behavior of both Eq. (7) and Eq. (8) with varying parameters, and , while setting and for both cases. These cases should cause both the shear strength and the shear modulus of the element to be modified. In both cases, was set to 6072.86 Pa.

Table 6: Two combinations of , , , and used to investigate their simultaneous effect on both Eq. (7) and Eq. (8).

Case No.
10010.5
20100.5

Results

The engineering shear stress-strain backbone curve results for both cases are presented in Figure 14. The results are shown along with the user-defined backbone curve shown in Figure 10. The backbone curves were obtained in MOOSE by sampling the data during the initial load cycle, i.e., from 3 seconds to 4 seconds (see Problem Statement). It can be seen in Figure 14 that MASTODON effectively modifies both the strength and stiffness for a particular strain increment. Specifically, one should compare the curve shown in this figure to those in Figure 11, Figure 12, and Figure 13.

Figure 14: The user-defined backbone curve and the engineering shear stress-strain curve in the ZX plane output by MASTODON during the initial loading cycle (from 3 seconds to 4 seconds) for the simultaneous strength and stiffness pressure dependency cases.

Qualitative Analysis: Figure 14 shows that Case 1 results in a greater shear strength increase than Case 2, but their shear modulus increases are equivalent since both used . Note that Case 1 and Case 2 shown in Figure 14 have equal shear strengths to Case 1 and Case 2 shown in Figure 11, but the former cases are stiffer than the latter. These observations made from each of the two cases are arithmetically consistent with Eq. (7) and Eq. (8).

Complete Input File

# One element test to check pressure dependent stiffness and yield strength calcualtion.

# The element is first intialized with stresses corresponding to acceleration due to gravity (g).
# Then a body force equal to 3 * g is applied to the element thereby increasing the pressure experienced
# by the element. The element is then sheared by moving the front surface (z = 0) in the x direction.

# The resulting stress-strain curve is stiffer due to the increase in pressure and also the maximum/ultimate shear
# stress at which the material completely fails is also higher due to the yield strength pressure correction.

# Two combinations of the parameters a_0, a_1, and a_2 were tested using this input file, but only
# one case can be used at a time.

[Mesh<<<{"href": "../../../../syntax/Mesh/index.html"}>>>]
  type = GeneratedMesh # Can generate simple lines, rectangles and rectangular prisms
  dim = 3 # Dimension of the mesh
  nx = 1 # Number of elements in the x direction
  ny = 1 # Number of elements in the y direction
  nz = 1 # Number of elements in the z direction
  xmin = 0.0
  xmax = 1
  ymin = 0.0
  ymax = 1
  zmin = 0.0
  zmax = 1
[]

[GlobalParams<<<{"href": "../../../../syntax/GlobalParams/index.html"}>>>]
  displacements = 'disp_x disp_y disp_z'
  use_displaced_mesh = false
[]

[Variables<<<{"href": "../../../../syntax/Variables/index.html"}>>>]
  [./disp_x]
  [../]
  [./disp_y]
  [../]
  [./disp_z]
  [../]
[]

[AuxVariables<<<{"href": "../../../../syntax/AuxVariables/index.html"}>>>]
  [./vel_x]
  [../]
  [./accel_x]
  [../]
  [./vel_y]
  [../]
  [./accel_y]
  [../]
  [./vel_z]
  [../]
  [./accel_z]
  [../]
  [./stress_xy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_yz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_zx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_xy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_yz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_zx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_xx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_yy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./stress_zz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_xx]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_yy]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./strain_zz]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
  [./layer_id]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  [../]
[]

[Kernels<<<{"href": "../../../../syntax/Kernels/index.html"}>>>]
  [./DynamicTensorMechanics<<<{"href": "../../../../syntax/Kernels/DynamicTensorMechanics/index.html"}>>>]
    displacements<<<{"description": "The nonlinear displacement variables for the problem"}>>> = 'disp_x disp_y disp_z'
    stiffness_damping_coefficient<<<{"description": "Name of material property or a constant real number defining stiffness Rayleigh parameter (zeta)."}>>> = 0.00006366
  [../]
  [./inertia_x]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.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
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
    eta<<<{"description": "Name of material property or a constant real number defining the eta parameter for the Rayleigh damping."}>>> = 7.854
  [../]
  [./inertia_y]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.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
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
    eta<<<{"description": "Name of material property or a constant real number defining the eta parameter for the Rayleigh damping."}>>> = 7.854
  [../]
  [./inertia_z]
    type = InertialForce<<<{"description": "Calculates the residual for the inertial force ($M \\cdot acceleration$) and the contribution of mass dependent Rayleigh damping and HHT time  integration scheme ($\\eta \\cdot M \\cdot ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)", "href": "../../../../source/kernels/InertialForce.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
    velocity<<<{"description": "velocity variable"}>>> = vel_z
    acceleration<<<{"description": "acceleration variable"}>>> = accel_z
    beta<<<{"description": "beta parameter for Newmark Time integration"}>>> = 0.25
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.5
    eta<<<{"description": "Name of material property or a constant real number defining the eta parameter for the Rayleigh damping."}>>> = 7.854
  [../]
  [./gravity]
    type = Gravity<<<{"description": "Apply gravity. Value is in units of acceleration.", "href": "../../../../source/kernels/Gravity.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
    value<<<{"description": "Value multiplied against the residual, e.g. gravitational acceleration"}>>> = -29.43
  [../]
[]

[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
  [../]
  [./stress_xy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./stress_yz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_yz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./stress_zx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_zx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./strain_xy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./strain_yz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_yz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./strain_zx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_zx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./stress_xx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_xx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./stress_yy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_yy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./stress_zz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = stress
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = stress_zz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./strain_xx]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_xx
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 0
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 0
  [../]
  [./strain_yy]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> =total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_yy
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 1
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 1
  [../]
  [./strain_zz]
    type = RankTwoAux<<<{"description": "Access a component of a RankTwoTensor", "href": "../../../../source/auxkernels/RankTwoAux.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material tensor name"}>>> = total_strain
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = strain_zz
    index_i<<<{"description": "The index i of ij for the tensor to output (0, 1, 2)"}>>> = 2
    index_j<<<{"description": "The index j of ij for the tensor to output (0, 1, 2)"}>>> = 2
  [../]
  [./layer]
    type = UniformLayerAuxKernel<<<{"description": "Computes an AuxVariable for representing a layered structure in an arbitrary direction.", "href": "../../../../source/auxkernels/UniformLayerAuxKernel.html"}>>>
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = layer_id
    interfaces<<<{"description": "A list of layer interface locations to apply across the domain in the specified direction."}>>> = '2.0'
    direction<<<{"description": "The direction to apply layering."}>>> = '0 0 1'
    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."}>>> = 'initial'
  [../]
[]

[BCs<<<{"href": "../../../../syntax/BCs/index.html"}>>>]
  [./x_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./y_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./z_bot]
    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"}>>> = 0
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
  [./Periodic<<<{"href": "../../../../syntax/BCs/Periodic/index.html"}>>>]
    [./x_dir]
      variable<<<{"description": "Variable for the periodic boundary condition"}>>> = 'disp_x disp_y disp_z'
      primary<<<{"description": "Boundary ID associated with the primary boundary."}>>> = '4'
      secondary<<<{"description": "Boundary ID associated with the secondary boundary."}>>> = '2'
      translation<<<{"description": "Vector that translates coordinates on the primary boundary to coordinates on the secondary boundary."}>>> = '1.0 0.0 0.0'
    [../]
    [./y_dir]
      variable<<<{"description": "Variable for the periodic boundary condition"}>>> = 'disp_x disp_y disp_z'
      primary<<<{"description": "Boundary ID associated with the primary boundary."}>>> = '1'
      secondary<<<{"description": "Boundary ID associated with the secondary boundary."}>>> = '3'
      translation<<<{"description": "Vector that translates coordinates on the primary boundary to coordinates on the secondary boundary."}>>> = '0.0 1.0 0.0'
    [../]
  [../]
  [./top_x]
    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"}>>> = 5
    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
    velocity<<<{"description": "The velocity variable."}>>> = vel_x
    acceleration<<<{"description": "The acceleration variable."}>>> = accel_x
    function<<<{"description": "Function describing the displacement."}>>> = top_disp
  [../]
[]

[Functions<<<{"href": "../../../../syntax/Functions/index.html"}>>>]
  [./top_disp]
    type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../../source/functions/PiecewiseLinear.html"}>>>
    data_file<<<{"description": "File holding CSV data"}>>> = Displacement2.csv
    format<<<{"description": "Format of csv data file that is in either in columns or rows"}>>> = columns
  [../]
[]

[Materials<<<{"href": "../../../../syntax/Materials/index.html"}>>>]
  [./I_Soil<<<{"href": "../../../../syntax/Materials/I_Soil/index.html"}>>>]
    [./soil_1]
      soil_type<<<{"description": "This parameter determines the type of backbone curve used. Use 'user_defined' for a user defined backbone curve provided in a data file, 'darendeli' if the backbone curve is to be determined using Darandeli equations, 'gqh' if the backbone curve is determined using the GQ/H approach and 'thin_layer' if the soil is being used to simulate a thin-layer friction interface."}>>> = 'user_defined'
      layer_variable<<<{"description": "The auxvariable providing the soil layer identification."}>>> = layer_id
      layer_ids<<<{"description": "Vector of layer ids that map one-to-one to the rest of the soil layer parameters provided as input."}>>> = '0'
      backbone_curve_files<<<{"description": "The vector of file names of the files containing stress-strain backbone curves for the different soil layers. The size of the vector should be same as the size of layer_ids. All files should contain the same number of stress-strain points. Headers are not expected and it is assumed that the first column corresponds to strain values and the second column corresponds to the stress values. Additionally, two segments of a backbone curve cannot have the same slope."}>>> = 'stress_strain20.csv'
      poissons_ratio<<<{"description": "Poissons's ratio for the soil layers. The size of the vector should be same as the size of layer_ids."}>>> = '0.3'
      block<<<{"description": "The blocks where this material model is applied."}>>> = 0
      initial_soil_stress<<<{"description": "The function values for the initial stress distribution. 9 function names have to be provided corresponding to stress_xx, stress_xy, stress_xz, stress_yx, stress_yy, stress_yz, stress_zx, stress_zy, stress_zz. Each function can be a function of space."}>>> = '-12613 0 0  0 -12613 0  0 0 -29430'
      pressure_dependency<<<{"description": "Set to true to turn on pressure dependent stiffness and yield strength calculation."}>>> = true
      b_exp<<<{"description": "The exponential factors for pressure dependent stiffness for all the soil layers."}>>> = 0.5
      p_ref<<<{"description": "The reference pressure at which the parameters are defined for each soil layer. If 'soil_type = darendeli', then the reference pressure must be input in kilopascals."}>>> = 6072.86
      tension_pressure_cut_off<<<{"description": "The tension cut-off for all the soil layers. If the pressure becomes lower than this value, then the stiffness of the soil reduces to zero. A negative pressure indicates tension. The default value is -1.0 for all the soil layers."}>>> = -1
      density<<<{"description": "Vector of density values that map one-to-one with the number 'layer_ids' parameter."}>>> = '2000'
      initial_shear_modulus<<<{"description": "The initial shear modulus of the soil layers."}>>> = '19683812.98'

      # Case 1
      a0<<<{"description": "The first coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1 = 0 and a2=0 for one soil layer, then the yield strength of that layer is independent of pressure."}>>> = 0
      a1<<<{"description": "The second coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1 = 0, a2 = 0 for one soil layer, then the yield strength of that layer is independent of pressure."}>>> = 0
      a2<<<{"description": "The third coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1=0 and a2=0 for one soil layer, then the yield strength of that layer is independent of pressure."}>>> = 1

      # Case 2
      #a0 = 0
      #a1 = 1
      #a2 = 0
    [../]
  [../]
[]

[Preconditioning<<<{"href": "../../../../syntax/Preconditioning/index.html"}>>>]
  [./andy]
    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 = PJFNK
  nl_abs_tol = 1e-11
  nl_rel_tol = 1e-11
  start_time = 0
  end_time = 10
  dt = 0.05
  timestep_tolerance = 1e-6
  petsc_options = '-snes_ksp_ew'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
[]

[Postprocessors<<<{"href": "../../../../syntax/Postprocessors/index.html"}>>>]
  [./_dt]
    type = TimestepSize<<<{"description": "Reports the timestep size", "href": "../../../../source/postprocessors/TimestepSize.html"}>>>
  [../]
  [./disp_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_x
  [../]
  [./disp_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_y
  [../]
  [./disp_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = disp_z
  [../]
  [./vel_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_x
  [../]
  [./vel_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_y
  [../]
  [./vel_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = vel_z
  [../]
  [./accel_6x]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_x
  [../]
  [./accel_6y]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_y
  [../]
  [./accel_6z]
    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"}>>> = 6
    variable<<<{"description": "The variable to be monitored"}>>> = accel_z
  [../]
  [./stress_xy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_xy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_yz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_yz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_zx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_zx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_xy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_xy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_yz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_yz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_zx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_zx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_xx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_xx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_yy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_yy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./stress_zz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_zz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_xx_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_xx
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_yy_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_yy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
  [./strain_zz_el]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "../../../../source/postprocessors/ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = strain_zz
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 0
  [../]
[]

[Outputs<<<{"href": "../../../../syntax/Mastodon/Outputs/index.html"}>>>]
  [./out]
    type = Exodus<<<{"description": "Object for output data in the Exodus format", "href": "../../../../source/outputs/Exodus.html"}>>>
    hide<<<{"description": "A list of the variables and postprocessors that should NOT be output to the Exodus file (may include Variables, ScalarVariables, and Postprocessor names)."}>>> = 'vel_x vel_y vel_z accel_x accel_y accel_z'
  [../]
  csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
  perf_graph<<<{"description": "Enable printing of the performance graph to the screen (Console)"}>>> = false
[]
(test/tests/materials/isoil/HYS_stiffness_and_strength_pressure_dependency.i)

References

  1. M. B. Darendeli. Development of a new family of normalized modulus reduction and material damping curves. PhD dissertation, University of Texas at Austin, 2001.[BibTeX]
  2. D. Groholski, Y. Hashash, B. Kim, M. Musgrove, J. Harmon, and J. Stewart. Simplified model for small-strain nonlinearity and strength in 1d seismic site response analysis. Journal of Geotechnical and Geoenvironmental Engineering, 2016.[BibTeX]
  3. O. A. Numanoglu. Phd in progress. University of Illinois at Urbana-Champaign, 2017.[BibTeX]