UFO
ufo_rttovonedvarcheck_minimize_newton_mod Module Reference

Fortran module to perform newton steepest descent minimization. More...

Functions/Subroutines

subroutine, public ufo_rttovonedvarcheck_minimize_newton (self, ob, r_matrix, b_matrix, b_inv, b_sigma, local_geovals, hofxdiags, rttov_simobs, profile_index, onedvar_success)
 Get the jacobian used in the 1D-Var. More...
 
subroutine ufo_rttovonedvarcheck_newtonfewchans (DeltaBT, nChans, H_Matrix, H_Matrix_T, nprofelements, DeltaProfile, B_matrix, r_matrix, Status)
 Update the profile if newber of channels is less than number of elements in the profile. More...
 
subroutine ufo_rttovonedvarcheck_newtonmanychans (DeltaBT, nChans, H_Matrix, H_Matrix_T, nprofelements, DeltaProfile, B_inverse, r_matrix, Status)
 Update the profile if number of channels is more than number of elements in the profile. More...
 

Detailed Description

Fortran module to perform newton steepest descent minimization.

Function/Subroutine Documentation

◆ ufo_rttovonedvarcheck_minimize_newton()

subroutine, public ufo_rttovonedvarcheck_minimize_newton_mod::ufo_rttovonedvarcheck_minimize_newton ( type(ufo_rttovonedvarcheck), intent(inout)  self,
type(ufo_rttovonedvarcheck_ob), intent(inout)  ob,
type(ufo_rttovonedvarcheck_rsubmatrix), intent(in)  r_matrix,
real(kind_real), dimension(:,:), intent(in)  b_matrix,
real(kind_real), dimension(:,:), intent(in)  b_inv,
real(kind_real), dimension(:), intent(in)  b_sigma,
type(ufo_geovals), intent(inout)  local_geovals,
type(ufo_geovals), intent(inout)  hofxdiags,
type(ufo_radiancerttov), intent(inout)  rttov_simobs,
type(ufo_rttovonedvarcheck_profindex), intent(in)  profile_index,
logical, intent(out)  onedvar_success 
)

Get the jacobian used in the 1D-Var.

Heritage: Ops_SatRad_MinimizeNewton_RTTOV12.f90

Find the most probable atmospheric state vector by minimizing a cost function through a series of iterations. if a solution exists, the iterations will converge when the iterative increments are acceptably small. A limit on the total number of iterations allowed, is imposed.

Using the formulation given by Rodgers (1976) :

Delta_x = xn + (xb-xn).I' + Wn.(ym-y(xn) - H.(xb-xn))
where:
x is an atmospheric state vector, subscripted b=background,n=nth iteration
I' is a diagonal matrix with I'(J,J) = B_damped(J,J)/B_undamped(J,J) although, however, damping will no longer be used
Wn = B.Hn'.(Hn.B.Hn'+R)^-1
B is the background error covariance matrix
R is the combined forward model and ob error covariance matrix

Delta_x is checked for convergence after each iteration

The loop is exited with convergence if either of the following conditions are true, depending on whether UseJforConvergence is true or false

  1. if UseJforConvergence is true then the change in total cost function from one iteration to the next is sufficiently small to imply convergence
  2. if UseJforConvergence is false then the increments to the atmospheric state vector are sufficiently small to imply convergence at an acceptable solution
    Either of the following two conditions will cause the 1dvar to stop and exit with an error.
  3. The increments are sufficiently large to suppose a solution will not be found.
  4. The maximum number of allowed iterations has been reached. in most cases, one of the above criteria will have occurred.

References:

Rodgers, Retrieval of atmospheric temperature and composition from remote measurements of thermal radiation, Rev. Geophys.Sp.Phys. 14, 1976.

Eyre, inversion of cloudy satellite sounding radiances by nonlinear optimal estimation. I: Theory and simulation for TOVS,QJ,July 89.

Author
Met Office
Date
09/06/2020: Created
Parameters
[in,out]selfMain 1D-Var object
[in,out]obsatellite metadata
[in]r_matrixobservation error covariance
[in]b_matrixstate error covariance
[in]b_invinverse of the state error covariance
[in]b_sigmastandard deviations of the state error covariance diagonal
[in,out]local_geovalsmodel data at obs location
[in,out]hofxdiagsmodel data containing the jacobian
[in]profile_indexindex array for x vector
[out]onedvar_successconvergence flag

Definition at line 80 of file ufo_rttovonedvarcheck_minimize_newton_mod.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ufo_rttovonedvarcheck_newtonfewchans()

subroutine ufo_rttovonedvarcheck_minimize_newton_mod::ufo_rttovonedvarcheck_newtonfewchans ( real(kind_real), dimension(:), intent(in)  DeltaBT,
integer, intent(in)  nChans,
real(kind_real), dimension(:,:), intent(in)  H_Matrix,
real(kind_real), dimension(:,:), intent(in)  H_Matrix_T,
integer, intent(in)  nprofelements,
real(kind_real), dimension(:), intent(inout)  DeltaProfile,
real(kind_real), dimension(:,:), intent(in)  B_matrix,
type(ufo_rttovonedvarcheck_rsubmatrix), intent(in)  r_matrix,
integer, intent(out)  Status 
)
private

Update the profile if newber of channels is less than number of elements in the profile.

Heritage: Ops_SatRad_NewtonFewChans.f90

Updates the profile vector DeltaProfile according to Rodgers (1976), Eqn. 101:

x_(n+1) = xb + B.Hn'.Q
Q = U^-1.V
where:
x is an atmospheric state vector, subscripted b=background,n=nth iteration
U = (Hn.B.Hn'+R)
V = (ym-y(xn) - H.(xb-xn))
ym is the measurement vector (i.e. observed brightness temperatures)
y(xn) is the observation vector calculated for xn
ym and y(xn) are not used individually at all, hence these are input as a difference vector DeltaBT.
B is the background error covariance matrix
R is the combined forward model and ob error covariance matrix
H is the forward model gradient (w.r.t. xn) matrix
H' is the transpose of H

Q = U^-1.V is solved by Cholesky decomposition.

This routine should be used when:

  1. The length of the observation vector is less than the length of the state vector.

Note on input/output variable DeltaProfile:

On input, DeltaProfile is x(n-1)-xb.
in construction of variable v, the sign is reversed:
V = (ym-y(xn) + H.(xn-xb)) – see equation in description above.
On output, DeltaProfile is xn-xb and should be ADDED to the background profile

References:

Rodgers, Retrieval of atmospheric temperature and composition from remote measurements of thermal radiation, Rev. Geophys.Sp.Phys. 14, 1976.

Rodgers, inverse Methods for Atmospheres: Theory and Practice. World Scientific Publishing, 2000.

Author
Met Office
Date
09/06/2020: Created
Parameters
[in]deltabty-y(x)
[in]nchansnumber of channels
[in]h_matrixJacobian
[in]h_matrix_t(Jacobian)^T
[in]nprofelementsnumber of elements in x profile
[in,out]deltaprofilex-xb
[in]b_matrixstate error covariance
[in]r_matrixobservation error covariance
[out]statuscheck if Cholesky decomposition fails

Definition at line 509 of file ufo_rttovonedvarcheck_minimize_newton_mod.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ufo_rttovonedvarcheck_newtonmanychans()

subroutine ufo_rttovonedvarcheck_minimize_newton_mod::ufo_rttovonedvarcheck_newtonmanychans ( real(kind_real), dimension(:), intent(in)  DeltaBT,
integer, intent(in)  nChans,
real(kind_real), dimension(:,:), intent(in)  H_Matrix,
real(kind_real), dimension(:,:), intent(in)  H_Matrix_T,
integer, intent(in)  nprofelements,
real(kind_real), dimension(:), intent(inout)  DeltaProfile,
real(kind_real), dimension(:,:), intent(in)  B_inverse,
type(ufo_rttovonedvarcheck_rsubmatrix), intent(in)  r_matrix,
integer, intent(out)  Status 
)
private

Update the profile if number of channels is more than number of elements in the profile.

Heritage: Ops_SatRad_NewtonManyChans.f90

Updates the profile vector Delta_Profile according to Rodgers (1976), Eqn. 100, extended to allow for additional cost function terms.

x_(n+1) = xb + U^-1.V
where
U=(B^-1 + H^T R^-1 H + J2)
V=H^T R^-1 [(ym-y(x_n))+H(x_n-xb)] - J1
and
J_extra=J0+J1.(x-xb)+(x-xb)^T.J2.(x-xb) is the additional cost function
x is an atmospheric state vector, subscripted b=background,n=nth iteration
ym is the measurement vector (i.e. observed brightness temperatures)
y(xn) is the observation vector calculated for xn
ym and y(xn) are not used individually at all, hence these are input as a difference vector DeltaBT.
B is the background error covariance matrix
R is the combined forward model and ob error covariance matrix
H is the forward model gradient (w.r.t. xn) matrix
H' is the transpose of H

When J_extra is zero this is simply Rogers (1976), Eqn. 100.

U^-1.V is solved using Cholesky decomposition.

This routine should be used when:

  1. The length of the observation vector is greater than the length of the state vector

References:

Rodgers, Retrieval of atmospheric temperature and composition from remote measurements of thermal radiation, Rev. Geophys.Sp.Phys. 14, 1976.

Rodgers, inverse Methods for Atmospheres: Theory and Practice. World Scientific Publishing, 2000.

Author
Met Office
Date
09/06/2020: Created
Parameters
[in]deltabty-y(x)
[in]nchansnumber of channels
[in]h_matrixJacobian
[in]h_matrix_t(Jacobian)^T
[in]nprofelementsnumber of elements in profile vector
[in,out]deltaprofilex-xb
[in]b_inverseinverse state error covariance
[in]r_matrixobservation error covariance
[out]statuscheck if Cholesky decomposition fails

Definition at line 624 of file ufo_rttovonedvarcheck_minimize_newton_mod.f90.

Here is the call graph for this function:
Here is the caller graph for this function: