jacobi module¶
A Jacobi algorithm for solving MDAs.
- class gemseo.mda.jacobi.MDAJacobi(disciplines, max_mda_iter=10, name=None, n_processes=2, acceleration='m2d', tolerance=1e-06, linear_solver_tolerance=1e-12, use_threading=True, warm_start=False, use_lu_fact=False, grammar_type=GrammarType.JSON, coupling_structure=None, log_convergence=False, linear_solver='DEFAULT', linear_solver_options=None)[source]
Bases:
MDA
Perform an MDA analysis using a Jacobi algorithm.
This algorithm is an iterative technique to solve the linear system:
\[Ax = b\]by decomposing the matrix \(A\) into the sum of a diagonal matrix \(D\) and the reminder \(R\).
The new iterate is given by:
\[x_{k+1} = D^{-1}(b-Rx_k)\]Initialize self. See help(type(self)) for accurate signature.
- Parameters:
disciplines (Sequence[MDODiscipline]) – The disciplines from which to compute the MDA.
max_mda_iter (int) –
The maximum iterations number for the MDA algorithm.
By default it is set to 10.
name (str | None) – The name to be given to the MDA. If None, use the name of the class.
n_processes (int) –
The maximum simultaneous number of threads, if
use_threading
is True, or processes otherwise, used to parallelize the execution.By default it is set to 2.
acceleration (str) –
The type of acceleration to be used to extrapolate the residuals and save CPU time by reusing the information from the last iterations, either
None
,"m2d"
, or"secant"
,"m2d"
is faster but uses the 2 last iterations.By default it is set to “m2d”.
tolerance (float) –
The tolerance of the iterative direct coupling solver; the norm of the current residuals divided by initial residuals norm shall be lower than the tolerance to stop iterating.
By default it is set to 1e-06.
linear_solver_tolerance (float) –
The tolerance of the linear solver in the adjoint equation.
By default it is set to 1e-12.
use_threading (bool) –
Whether to use threads instead of processes to parallelize the execution; multiprocessing will copy (serialize) all the disciplines, while threading will share all the memory. This is important to note if you want to execute the same discipline multiple times, you shall use multiprocessing.
By default it is set to True.
warm_start (bool) –
Whether the second iteration and ongoing start from the previous coupling solution.
By default it is set to False.
use_lu_fact (bool) –
Whether to store a LU factorization of the matrix when using adjoint/forward differentiation. to solve faster multiple RHS problem.
By default it is set to False.
grammar_type (MDODiscipline.GrammarType) –
The type of the input and output grammars.
By default it is set to “JSONGrammar”.
coupling_structure (MDOCouplingStructure | None) – The coupling structure to be used by the MDA. If None, it is created from disciplines.
log_convergence (bool) –
Whether to log the MDA convergence, expressed in terms of normed residuals.
By default it is set to False.
linear_solver (str) –
The name of the linear solver.
By default it is set to “DEFAULT”.
linear_solver_options (Mapping[str, Any]) – The options passed to the linear solver factory.
- execute_all_disciplines(input_local_data)[source]
Execute all the disciplines.
- get_expected_workflow()[source]
Return the expected execution sequence.
This method is used for the XDSM representation.
The default expected execution sequence is the execution of the discipline itself.
See also
MDOFormulation.get_expected_workflow
- Returns:
The expected execution sequence.
- Return type:
- M2D_ACCELERATION = 'm2d'
- SECANT_ACCELERATION = 'secant'
- assembly: JacobianAssembly
- cache: AbstractCache | None
The cache containing one or several executions of the discipline according to the cache policy.
- coupling_structure: MDOCouplingStructure
The coupling structure to be used by the MDA.
- data_processor: DataProcessor
A tool to pre- and post-process discipline data.
- exec_for_lin: bool
Whether the last execution was due to a linearization.
- input_grammar: BaseGrammar
The input grammar.
- jac: dict[str, dict[str, ndarray]]
The Jacobians of the outputs wrt inputs.
The structure is
{output: {input: matrix}}
.
- lin_cache_tol_fact: float
The tolerance factor to cache the Jacobian.
- linear_solver: str
The name of the linear solver.
- linear_solver_tolerance: float
The tolerance of the linear solver in the adjoint equation.
- matrix_type: JacobianAssembly.JacobianType
The type of the matrix.
- max_mda_iter: int
The maximum iterations number for the MDA algorithm.
- name: str
The name of the discipline.
- normed_residual: float
The normed residual.
- output_grammar: BaseGrammar
The output grammar.
- re_exec_policy: ReExecutionPolicy
The policy to re-execute the same discipline.
- reset_history_each_run: bool
Whether to reset the history of MDA residuals before each run.
- residual_variables: Mapping[str, str]
The output variables mapping to their inputs, to be considered as residuals; they shall be equal to zero.
- run_solves_residuals: bool
Whether the run method shall solve the residuals.
- scaling: ResidualScaling
The scaling method applied to MDA residuals for convergence monitoring.
- tolerance: float
The tolerance of the iterative direct coupling solver.
- use_lu_fact: bool
Whether to store a LU factorization of the matrix.
- warm_start: bool
Whether the second iteration and ongoing start from the previous solution.