gemseo.mda.base_parallel_mda_settings module#

Base settings class for parallel MDA algorithms.

Settings BaseParallelMDASettings(*, coupling_structure=None, linear_solver=LinearSolver.DEFAULT, linear_solver_settings=None, linear_solver_tolerance=1e-12, log_convergence=False, max_mda_iter=20, name='', tolerance=1e-06, use_lu_fact=False, warm_start=False, acceleration_method=AccelerationMethod.NONE, over_relaxation_factor=1.0, n_processes=2, use_threading=True)[source]#

Bases: BaseMDASolverSettings

The settings for the MDA algorithms that can be run in parallel.

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

Parameters:
  • coupling_structure (CouplingStructure | None)

  • linear_solver (LinearSolver) --

    By default it is set to "DEFAULT".

  • linear_solver_settings (Mapping[str, Any] | BaseLinearSolverSettings)

  • linear_solver_tolerance (Annotated[float, Ge(ge=0)]) --

    By default it is set to 1e-12.

  • log_convergence (bool) --

    By default it is set to False.

  • max_mda_iter (Annotated[int, Ge(ge=0)]) --

    By default it is set to 20.

  • name (str) --

    By default it is set to "".

  • tolerance (Annotated[float, Ge(ge=0)]) --

    By default it is set to 1e-06.

  • use_lu_fact (bool) --

    By default it is set to False.

  • warm_start (bool) --

    By default it is set to False.

  • acceleration_method (AccelerationMethod) --

    By default it is set to "NoTransformation".

  • over_relaxation_factor (Annotated[float, Le(le=2.0), Ge(ge=0)]) --

    By default it is set to 1.0.

  • n_processes (Annotated[int, Gt(gt=0)]) --

    By default it is set to 2.

  • use_threading (bool) --

    By default it is set to True.

Return type:

None

n_processes: PositiveInt = 2#

The number of threads/processes.

Threads if use_threading, processes otherwise.

Constraints:
  • gt = 0

use_threading: bool = True#

Whether to use threads instead of processes to parallelize the execution.

Processes will copy (serialize) the disciplines, while threads will share the memory. If one wants to execute the same discipline multiple times, then multiprocessing should be preferred.