tlm_adjoint.markers
Module Contents
- class tlm_adjoint.markers.ControlsMarker(M)
Represents
\[m = m_\text{input},\]where \(m\) is the control and \(m_\text{input}\) the input value for the control. The forward residual is defined
\[\mathcal{F} \left( m \right) = m - m_\text{input}.\]- Parameters:
M – A variable or a
Sequence
of variables defining the control \(m\). May be static.
- adjoint_jacobian_solve(adj_X, nl_deps, B)
Compute an adjoint solution.
- Parameters:
adj_X – Either None, or a variable or
Sequence
of variables defining the initial guess for an iterative solve. May be modified or returned.nl_deps – A
Sequence
of variables defining values for non-linear dependencies. Should not be modified.B – The right-hand-side. A variable or
Sequence
of variables storing the value of the right-hand-side. May be modified or returned.
- Returns:
A variable or
Sequence
of variables storing the value of the adjoint solution. May return None to indicate a value of zero.
- class tlm_adjoint.markers.FunctionalMarker(J)
Represents
\[J_\text{output} = J,\]where \(J\) is the functional and \(J_\text{output}\) is the output value for the functional. The forward residual is defined
\[\mathcal{F} \left( J_\text{output}, J \right) = J_\text{output} - J.\]- Parameters:
J – A variable defining the functional \(J\).
- adjoint_derivative_action(nl_deps, dep_index, adj_x)
Return the action of the adjoint of a derivative of the forward residual on the adjoint solution. This is the negative of an adjoint right-hand-side term.
- Parameters:
nl_deps – A
Sequence
of variables defining values for non-linear dependencies. Should not be modified.dep_index – An
int
. The derivative is defined by differentiation of the forward residual with respect to self.dependencies()[dep_index].adj_X – The adjoint solution. A variable or a
Sequence
of variables. Should not be modified.
- Returns:
The action of the adjoint of a derivative on the adjoint solution. Will be passed to
subtract_adjoint_derivative_action()
, and valid types depend upon the adjoint variable type. Typically this will be a variable, or a two elementtuple
(alpha, F), where alpha is anumbers.Complex
and F a variable, with the value defined by the product of alpha and F.
- adjoint_jacobian_solve(adj_x, nl_deps, b)
Compute an adjoint solution.
- Parameters:
adj_X – Either None, or a variable or
Sequence
of variables defining the initial guess for an iterative solve. May be modified or returned.nl_deps – A
Sequence
of variables defining values for non-linear dependencies. Should not be modified.B – The right-hand-side. A variable or
Sequence
of variables storing the value of the right-hand-side. May be modified or returned.
- Returns:
A variable or
Sequence
of variables storing the value of the adjoint solution. May return None to indicate a value of zero.
- class tlm_adjoint.markers.AdjointActionMarker(J, X, adj_X)
Represents
\[J_\text{output} = \lambda_x^* x,\]with forward residual
\[\mathcal{F} \left( J_\text{output}, x \right) = J_\text{output} - \lambda_x^* x.\]Note that \(\lambda_x\) is not treated as a dependency.
Can be used to initialize an adjoint calculation, and compute adjoint Jacobian actions, via the construction
start_manager() X = forward(M) with paused_manager(): adj_X = ... J = Float(name="J") AdjointRHSMarker(J, X, adj_X).solve() stop_manager() # Compute the action of the adjoint of the Jacobian on the direction # defined by adj_X dJ = compute_gradient(J, M)
- Parameters:
J – A variable defining the functional \(J\).
X – A variable or
Sequence
of variables defining \(x\).adj_X – A variable or
Sequence
of variables defining \(\lambda_x\).
- forward_solve(x, deps=None)
Compute the forward solution.
Can assume that the currently active
EquationManager
is paused.- Parameters:
X – A variable or a
Sequence
of variables storing the solution. May define an initial guess, and should be set by this method.deps – A
tuple
of variables, defining values for dependencies. Only the elements corresponding to X may be modified. self.dependencies() should be used if not supplied.
- adjoint_derivative_action(nl_deps, dep_index, adj_x)
Return the action of the adjoint of a derivative of the forward residual on the adjoint solution. This is the negative of an adjoint right-hand-side term.
- Parameters:
nl_deps – A
Sequence
of variables defining values for non-linear dependencies. Should not be modified.dep_index – An
int
. The derivative is defined by differentiation of the forward residual with respect to self.dependencies()[dep_index].adj_X – The adjoint solution. A variable or a
Sequence
of variables. Should not be modified.
- Returns:
The action of the adjoint of a derivative on the adjoint solution. Will be passed to
subtract_adjoint_derivative_action()
, and valid types depend upon the adjoint variable type. Typically this will be a variable, or a two elementtuple
(alpha, F), where alpha is anumbers.Complex
and F a variable, with the value defined by the product of alpha and F.
- adjoint_jacobian_solve(adj_x, nl_deps, b)
Compute an adjoint solution.
- Parameters:
adj_X – Either None, or a variable or
Sequence
of variables defining the initial guess for an iterative solve. May be modified or returned.nl_deps – A
Sequence
of variables defining values for non-linear dependencies. Should not be modified.B – The right-hand-side. A variable or
Sequence
of variables storing the value of the right-hand-side. May be modified or returned.
- Returns:
A variable or
Sequence
of variables storing the value of the adjoint solution. May return None to indicate a value of zero.
- tangent_linear(tlm_map)
Derive an
Equation
corresponding to a tangent-linear operation.- Parameters:
tlm_map – A
TangentLinearMap
storing values for tangent-linear variables.- Returns:
An
Equation
, corresponding to the tangent-linear operation.