If you created a large strain version of the input, try and convert it to use MOOSE's automatic differentiation system. A few places to look at:

Here is the converted input:

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

[Mesh<<<{"href": "../../../../syntax/Mesh/index.html"}>>>]
  [generated]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 10
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 10
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = 2
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = 1
  []
[]

[Physics<<<{"href": "../../../../syntax/Physics/index.html"}>>>/SolidMechanics<<<{"href": "../../../../syntax/Physics/SolidMechanics/index.html"}>>>/QuasiStatic<<<{"href": "../../../../syntax/Physics/SolidMechanics/QuasiStatic/index.html"}>>>]
  [all]
    add_variables<<<{"description": "Add the displacement variables"}>>> = true
    # we added this in the first exercise problem
    strain<<<{"description": "Strain formulation"}>>> = FINITE
    # enable the use of automatic differentiation objects
    use_automatic_differentiation<<<{"description": "Flag to use automatic differentiation (AD) objects when possible"}>>> = true
  []
[]

[BCs<<<{"href": "../../../../syntax/BCs/index.html"}>>>]
  [bottom_x]
    # we use the AD version of this boundary condition here...
    type = ADDirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../../source/bcs/ADDirichletBC.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"}>>> = bottom
    value<<<{"description": "Value of the BC"}>>> = 0
  []
  [bottom_y]
    # ...and here
    type = ADDirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../../source/bcs/ADDirichletBC.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"}>>> = bottom
    value<<<{"description": "Value of the BC"}>>> = 0
  []
  [Pressure<<<{"href": "../../../../syntax/BCs/Pressure/index.html"}>>>]
    [top]
      boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = top
      function<<<{"description": "The function that describes the pressure"}>>> = 1e7*t
      # make the action add AD versions of the boundary condition objects
      use_automatic_differentiation<<<{"description": "Flag to use automatic differentiation (AD) objects when possible"}>>> = true
    []
  []
[]

[Materials<<<{"href": "../../../../syntax/Materials/index.html"}>>>]
  [elasticity]
    type = ADComputeIsotropicElasticityTensor<<<{"description": "Compute a constant isotropic elasticity tensor.", "href": "../../../../source/materials/ComputeIsotropicElasticityTensor.html"}>>>
    youngs_modulus<<<{"description": "Young's modulus of the material."}>>> = 1e9
    poissons_ratio<<<{"description": "Poisson's ratio for the material."}>>> = 0.3
  []
  [stress]
    type = ADComputeFiniteStrainElasticStress<<<{"description": "Compute stress using elasticity for finite strains", "href": "../../../../source/materials/ADComputeFiniteStrainElasticStress.html"}>>>
  []
[]

[Executioner<<<{"href": "../../../../syntax/Executioner/index.html"}>>>]
  type = Transient
  # MOOSE automatically sets up SMP/full=true with NEWTON
  solve_type = NEWTON
  petsc_options_iname = '-pc_type'
  petsc_options_value = 'lu'
  end_time = 5
  dt = 1
[]

[Outputs<<<{"href": "../../../../syntax/Outputs/index.html"}>>>]
  exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
[]
(moose/modules/solid_mechanics/tutorials/introduction/mech_step02a.i)

Input file

SolidMechanics QuasiStatic Physics

Adding use_automatic_differentiation = true here causes the action to build the automatic differentiation (AD) enabled versions of the materials, kernels, and output objects it sets up.

BCs

We replaced DirichletBC with the AD-enabled ADDirichletBC object. Note that in general it is fine to mix AD and non-AD objects, although you might then end up with a less than perfect Jacobian. Also keep in mind that you cannot use AD and non-AD versions of material properties (such as the stiffness tensor or the strain) interchangeably. If an object requests an AD property you need to use the AD-enabled version of the material to provide it.

In the Pressure action we also supplied use_automatic_differentiation = true to have the action build the AD-enabled versions of the individual boundary condition objects that act on the displacement variables in the problem.

Materials

As mentioned above, when using AD-enabled kernels (added through the quasi static physics syntax), we must supply them with AD-enabled material properties. That's why we select the AD-enabled objects to compute stiffness tensor and stress. (The AD-enabled strain calculator is automatically added by the quasi-static physics.)

Note that in the first exercise we switched to a large strain formulation. In case you didn't make that change use ADComputeLinearElasticStress here and make sure you do not have strain = FINITE in the quasi-static physics.

Executioner

We select Newton as the solve type. MOOSE actually sets up the appropriate preconditioning block for us automatically in this case, which is why we removed it from the input file here.

What did you observe when you ran the converted example?

You should see a substantial reduction in linear iterations. This is an indication that the new Jacobian matrix generated by automatic differentiation is more accurate than the hand coded Jacobians in the non-AD version.

Rerun the problem again with a Young's modulus of 1e8.

Again each non-linear iteration converges with just two linear iterations, but the problem is still exhibiting a lot of non-linear steps and even some cut time steps due to the nonlinearity of the large deformation formulation.