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 element tuple (alpha, F), where alpha is a numbers.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 element tuple (alpha, F), where alpha is a numbers.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.