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.
t | Displacement | Velocity | Acceleration |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 0.25 | 0.473 | 0.591 |
2 | 0.871| 0.785 | 0.241 | |
3 | 1.467 | 0.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)