Hilber-Hughes-Taylor (HHT) Time Integration Verification

Problem Statement and Results

In this one element test, the base and top of the 2D element is fixed in y direction. An acceleration is prescribed at the base of the element in the x direction.

HHT time integration is used to obtain the displacement, velocity and acceleration at the top of the element. The equation of motion is

the and are column vectors that contain the acceleration and displacement in the x-direction of the top and bottom node, respectively. The row of the mass matrix () that corresponds to the top node is computed as , where is the density, is the area, and is the length. The row of the stiffness matrix that corresponds to the top node is , where is Young's modulus.

Solving the above equation analytically for , , and gives the results in Table 1. The interactive results shown in Figure 1 compare the analytical result ("previous") with the result computed from MASTODON for this problem ("current").

Table 1: Analytical displacement, acceleration, and velocity in the x-direction.

tDisplacementVelocityAcceleration
0000
10.250.4730.591
20.871| 0.7850.241
31.4670.439-0.493

Figure 1: Acceleration, velocity and displacement values computed using HHT integration in MASTODON

Complete Input File

[Mesh<<<{"href": "../../../../syntax/Mesh/index.html"}>>>]
  type = GeneratedMesh
  dim = 2
  nx = 1
  ny = 1
  xmin = 0.0
  xmax = 1.0
  ymin = 0.0
  ymax = 1.0
[]

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

[AuxVariables<<<{"href": "../../../../syntax/AuxVariables/index.html"}>>>]
  [./vel_x]
  [../]
  [./accel_x]
  [../]
[]

[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'
     hht_alpha<<<{"description": "alpha parameter for mass dependent numerical damping induced by HHT time integration scheme"}>>> = -0.3
  [../]
  [./interia_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.4225
    gamma<<<{"description": "gamma parameter for Newmark Time integration"}>>> = 0.8
  [../]
[]

[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.4225
    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.8
    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
  [../]
[]

[BCs<<<{"href": "../../../../syntax/BCs/index.html"}>>>]
  [./fixed_base_x]
    type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../../source/bcs/DirichletBC.html"}>>>
    value<<<{"description": "Value of the BC"}>>> = 0.0
    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"}>>> = bottom
  [../]
  [./fixed_base_y]
    type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../../source/bcs/DirichletBC.html"}>>>
    value<<<{"description": "Value of the BC"}>>> = 0.0
    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"}>>> = bottom
  [../]
  [./top_x]
    type = PresetAcceleration<<<{"description": "Prescribe acceleration on a given boundary in a given direction", "href": "../../../../source/bcs/PresetAcceleration.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"}>>> = top
    function<<<{"description": "Function describing the velocity."}>>> = acceleration_top
    beta<<<{"description": "beta parameter for Newmark time integration."}>>> = 0.25
    acceleration<<<{"description": "The acceleration variable."}>>> = accel_x
    velocity<<<{"description": "The velocity variable."}>>> = vel_x
  [../]
  [./top_y]
    type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../../source/bcs/DirichletBC.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_y
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = top
    value<<<{"description": "Value of the BC"}>>> = 0.0
  [../]
[]

[Functions<<<{"href": "../../../../syntax/Functions/index.html"}>>>]
  [./acceleration_top]
    type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../../source/functions/PiecewiseLinear.html"}>>>
    x<<<{"description": "The abscissa values"}>>> = '0.0 1.0 2.0 3.0'
    y<<<{"description": "The ordinate values"}>>> = '0.0 1.0 0.0 -1.0'
  [../]
[../]

[Materials<<<{"href": "../../../../syntax/Materials/index.html"}>>>]
  [./elasticity_tensor]
    type = ComputeIsotropicElasticityTensor<<<{"description": "Compute a constant isotropic elasticity tensor.", "href": "../../../../source/materials/ComputeIsotropicElasticityTensor.html"}>>>
    poissons_ratio<<<{"description": "Poisson's ratio for the material."}>>> = 0.3
    youngs_modulus<<<{"description": "Young's modulus of the material."}>>> = 1e9
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 0
  [../]
  [./strain]
    type = ComputeIncrementalSmallStrain<<<{"description": "Compute a strain increment and rotation increment for small strains.", "href": "../../../../source/materials/ComputeIncrementalStrain.html"}>>>
    displacements<<<{"description": "The displacements appropriate for the simulation geometry and coordinate system"}>>> = 'disp_x disp_y'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 0
  [../]
  [./stress]
    type = ComputeFiniteStrainElasticStress<<<{"description": "Compute stress using elasticity for finite strains", "href": "../../../../source/materials/ComputeFiniteStrainElasticStress.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 0
  [../]
  [./density]
    type = GenericConstantMaterial<<<{"description": "Declares material properties based on names and values prescribed by input parameters.", "href": "../../../../source/materials/GenericConstantMaterial.html"}>>>
    prop_names<<<{"description": "The names of the properties this material will have"}>>> = 'density'
    prop_values<<<{"description": "The values associated with the named properties"}>>> = '2000.0'
  [../]
[../]

[Executioner<<<{"href": "../../../../syntax/Executioner/index.html"}>>>]
  type = Transient
  start_time = 0.0
  end_time = 3.0
  dt = 1.0
[]

[Postprocessors<<<{"href": "../../../../syntax/Postprocessors/index.html"}>>>]
  [./disp_x]
    type = PointValue<<<{"description": "Compute the value of a variable at a specified location", "href": "../../../../source/postprocessors/PointValue.html"}>>>
    point<<<{"description": "The physical point where the solution will be evaluated."}>>> = '1.0 1.0 0.0'
    variable<<<{"description": "The name of the variable that this postprocessor operates on."}>>> = disp_x
  [../]
  [./vel_x]
    type = PointValue<<<{"description": "Compute the value of a variable at a specified location", "href": "../../../../source/postprocessors/PointValue.html"}>>>
    point<<<{"description": "The physical point where the solution will be evaluated."}>>> = '1.0 1.0 0.0'
    variable<<<{"description": "The name of the variable that this postprocessor operates on."}>>> = vel_x
  [../]
  [./accel_x]
    type = PointValue<<<{"description": "Compute the value of a variable at a specified location", "href": "../../../../source/postprocessors/PointValue.html"}>>>
    point<<<{"description": "The physical point where the solution will be evaluated."}>>> = '1.0 1.0 0.0'
    variable<<<{"description": "The name of the variable that this postprocessor operates on."}>>> = accel_x
  [../]
[]

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