12 use kinds,
only: kind_real
13 use missing_values_mod,
only: missing_value
22 x, & ! current est. of soln
23 xb, & ! background vector
37 INTEGER,
INTENT(IN) :: nstate
38 INTEGER,
INTENT(IN) :: nobs
39 REAL(kind_real),
INTENT(IN) :: x(:)
40 REAL(kind_real),
INTENT(IN) :: xb(:)
41 REAL(kind_real),
INTENT(IN) :: yobs(:)
42 REAL(kind_real),
INTENT(IN) :: ycalc(:)
43 REAL(kind_real),
INTENT(IN) :: bm1(:,:)
44 REAL(kind_real),
INTENT(IN) :: om1(:,:)
45 REAL(kind_real),
INTENT(IN) :: kmat(:,:)
46 REAL(kind_real),
INTENT(OUT) :: dj_dx(:)
47 REAL(kind_real),
INTENT(OUT) :: d2j_dx2(:,:)
48 REAL(kind_real),
INTENT(OUT) :: diag_d2j(:)
51 CHARACTER(len=*),
PARAMETER :: routinename =
"Ops_GPSRO_eval_derivs_BA"
53 REAL(kind_real) :: dx(nstate)
54 REAL(kind_real) :: dy(nobs)
55 REAL(kind_real) :: bdx(nstate)
56 REAL(kind_real) :: ko(nstate,nobs)
68 dy(:) = yobs(:) - ycalc(:)
72 WHERE (abs(dy(:)) > 1.0)
80 bdx(:) = matmul(bm1(:,:), dx(:))
84 ko(:,:) = matmul(transpose(kmat(:,:)), om1(:,:))
88 dj_dx(:) = matmul(ko(:,:), dy(:)) - bdx(:)
96 d2j_dx2(:,:) = matmul(ko(:,:), kmat(:,:)) + bm1(:,:)
102 diag_d2j(i) = d2j_dx2(i,i)
Evaluate the 1st and 2nd deriv. of the cost function.
subroutine, public ops_gpsro_eval_derivs_ba(Nstate, Nobs, x, xb, yobs, ycalc, BM1, OM1, Kmat, dJ_dx, d2J_dx2, diag_d2J)