Migrating from v2.0.0 to v2.1.0

Input file changes

New top-level sections

  • [Schedulers] is now a recognized top-level section.

  • [EquationSystems] is now a recognized top-level section.

Migration to EquationSystems (NonlinearSystem)

The biggest implicit-model migration is that nonlinear systems are now first-class objects under [EquationSystems].

In v2.0.0, ImplicitUpdate referenced a model directly:

[Models]
  [model]
    type = ImplicitUpdate
    implicit_model = 'system'
    solver = 'newton'
  []
[]

In v2.1.0, define the nonlinear system explicitly and reference it from ImplicitUpdate:

[EquationSystems]
  [eq_sys]
    type = NonlinearSystem
    model = 'system'
  []
[]

[Models]
  [model]
    type = ImplicitUpdate
    equation_system = 'eq_sys'
    solver = 'newton'
  []
[]

So the migration is:

  • implicit_model (on ImplicitUpdate) → move that model reference into a dedicated [EquationSystems] block.

  • ImplicitUpdate now points to equation_system.

type = NonlinearSystem resolves to the model-backed nonlinear-system implementation, which interprets:

  • input state as unknowns,

  • output residual as residual equations,

  • (residual, state) derivatives as the Jacobian.

Nonlinear solvers now reference a linear solver

In v2.1.0, nonlinear solvers accept a linear_solver option that selects the linear algebra backend for each Newton iteration. When omitted, the solver defaults to DenseLU.

[Solvers]
  [newton]
    type = Newton
    abs_tol = 1e-10
    rel_tol = 1e-8
    max_its = 50
    linear_solver = 'lu'   # optional; DenseLU is used when absent
  []
  [lu]
    type = DenseLU
  []
[]

This linear_solver link controls how each nonlinear iteration solves the linearized system, which was previously internal to the nonlinear solver implementation.

Settings defaults / keys changed

[Settings] changed substantially in v2.1.0:

  • buffer_name_separator default changed from "." to "_".

  • parameter_name_separator default changed from "." to "_".

  • New options: require_double_precision, additional_libraries, disable_jit.

  • Removed: default_floating_point_type, default_integer_type, default_device, machine_precision, tolerance, tighter_tolerance, interop_threads, intraop_threads.

Binary utility changes

runner was replaced by dedicated tools.

v2.0.0 command

v2.1.0 replacement

runner input.i driver

neml2-run input.i driver

New in v2.1.0: neml2-inspect input.i model for wiring inspection, and neml2-syntax for catalog browsing.

Note: neml2-diagnose and neml2-time that shipped with v2.1.0 were removed in the v3 rewrite. See Migrating from v2.x to v3.0 for the current tool set.

Build system and integration

  • CMake minimum changed to 3.26.

  • cmake-variants.yaml workflow was replaced by CMakePresets.json.

  • CMake config-package integration: find_package(neml2 CONFIG), link target neml2::neml2.

  • pkg-config integration is supported (neml2.pc).

  • Python build backend moved from setuptools+custom setup.py to scikit-build-core.

See Migrating from v2.x to v3.0 for subsequent build-system changes introduced in the v3 rewrite.