Implicit Linear and Nonlinear Schemes - geomechanics/mpm GitHub Wiki

Overall Structure

The overall structure of the JSON file to run the implicit linear and nonlinear schemes is generally similar to the explicit scheme. The main differences of the input settings will be highlighted in the following sections.

Mesh

The structure of the mesh object is the same as in the explicit explicit scheme other than the kinematic boundary conditions.

Boundary Conditions

{

    "mesh":{
        "boundary_conditions":{
            "displacement_constraints": [
                {
                    "nset_id": 1,
                    "dir": 1,
                    "displacement": 0.0
                }, 
                {
                    "file": "displacement_constraints_inputs.txt",
                }
            ]
        }
    },

}

Only displacement boundary condition is supported for implicit MPM.

For nodal displacement constraints:

  • "nset_id" and "pset_id" correspond to defined sets within the entity sets JSON file.
  • "dir" is the direction of the constraint (0|1|2).
  • "displacement" is the specified velocity in declared direction.
  • Nodal displacement constraints can be input as a .txt file with each row corresponding to an individual constraint.

Analysis

The major difference between the implicit and the explicit schemes is located at the analysis object defined at the input JSON file.

{

    "analysis": {
        "type": "MPMImplicit2D",
        "mpm_scheme": "newmark",
        "scheme_settings": {
            "nonlinear": true,
            "quasi_static": false,
            "beta": 0.25,
            "gamma": 0.50,
            "max_iteration": 10,
            "displacement_tolerance": 1.0e-10,
            "residual_tolerance": 1.0e-10,
            "relative_residual_tolerance": 1.0e-6,
            "verbosity": 0
        },
        "linear_solver": {
            "assembler_type": "EigenImplicit2D",
            "solver_settings": [
            {
                "dof": "displacement",
                "solver_type": "KrylovPETSC",
                "sub_solver_type": "cg",
                "preconditioner_type": "none",
                "max_iter": 1000,
                "tolerance": 1E-9,
                "abs_tolerance": 1E-9,
                "verbosity": 0
            }]
        },
        "dt": 1.0e-5,
        "nsteps": 1001,
        "locate_particles": true,
        "nload_balance_steps": 100,
        "uuid": "output-name-000",
        "resume": {
            "resume": false,
            "uuid": "output-name-000",
            "step": 100
        }
    }

}

The following objects follow the description written in the explicit scheme:

  • "dt" is the time step.
  • "nsteps" is the total number of steps.
  • "locate_particles" flag is set false to allow simulation to continue if material points leave the mesh domain.
  • "nload_balance_steps" is optional to redefine the dynamic load balancing; default is every 1000 steps.
  • "uuid" is the analysis name.
  • "resume" is the option to resume the simulation from a specific time step.

Type

Supported types:

Analysis Description
MPMImplicit2D implicit 2D MPM
MPMImplicit3D implicit 3D MPM

Scheme

Supported schemes:

Schemes Description
newmark Newmark's time integration.

In addition to specifying the scheme used, user can also specify the "scheme_settings" option to change the default parameter considered in the simulation.

  • "nonlinear" is used to specify the linear (false) and nonlinear scheme (true). The default setting is true.
  • "quasi_static" is used to include or exclude the inertia force in the momentum balance. The default setting is false, i.e. dynamic condition is considered.
  • "beta" and "gamma" are the Newmark's parameter. The default values are 0.25 and 0.50, respectively.

If the "nonlinear" setting above is set as true, then additional settings can be modified:

  • "max_iteration" is the maximum number of Newton-Raphson iteration allowed. The default value is 20.
  • "displacement_tolerance" is the tolerance controlling the allowable magnitude of displacement norm. The default value is 1.0e-10.
  • "residual_tolerance" is the tolerance controlling the allowable magnitude of residual norm, i.e. R=Ax-b. The default value is 1.0e-10.
  • "relative_residual_tolerance" is the residual norm normalized with the residual norm at the first iteration. The default value is 1.0e-6.
  • "verbosity" is to control how much information is outputed in the console. The default value is 0.

Linear Solver

The "linear_solver" option is used to control the type of assembler and linear solver needed to solve the momentum equation implicitly.

  • "assembler_type" should be "EigenImplicit2D" or "EigenImplicit3D" for 2D or 3D simulation.
  • "solver_settings" contains all necessary settings to solve the linear equation Ax=b.
  • "dof" is the name of degrees of freedom. "displacement" must be specified for the implicit MPM scheme.
  • "solver_type" is the name of the linear solver library used. Options available are:
Analysis Description
DirectEigen Direct solver of Eigen Library
IterativeEigen Iterative solver of Eigen Library
KrylovPETSC Iterative solver of PETSc Library
  • "sub_solver_type" is the name of the linear solver within the selected library.
  • "preconditioner_type" is the name of used preconditioner.
  • "max_iter" is the maximum number of iterations for the iterative linear solver.
  • "tolerance" is the relative residual tolerance.
  • "abs_tolerance" is the absolute tolerance.
  • "div_tolerance" is the divergence tolerance.
  • "verbosity" is to control how much information is output in the console. The default value is 0.