Newmark Time Integration Verification

Problem Statement and Results

In this one element test, the base of the 2D element is fixed in both x and y directions. The top of the block is also fixed in the y direction and a sawtooth acceleration is applied in the x direction.

The prescribed acceleration is integrated in time using Newmark time integration. For and and timestep of 1.0 sec., the displacement and velocity are as given 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.51
2110
31.750.5-1

Figure 1: Acceleration, velocity and displacement values computed using NewmarkBeta 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"}>>>]
  [./TensorMechanics<<<{"href": "../../../../syntax/Kernels/TensorMechanics/index.html"}>>>]
     displacements<<<{"description": "The nonlinear displacement variables for the problem"}>>> = 'disp_x disp_y'
  [../]
[]

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

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

[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/newmark.i)