1 subroutine da_jo_and_grady_metar(iv, re, jo, jo_grad_y)
3 !-----------------------------------------------------------------------
5 !-----------------------------------------------------------------------
9 type (iv_type), intent(in) :: iv ! Innovation vector.
10 type (y_type), intent(in) :: re ! Residual vector.
11 type (y_type), intent(inout) :: jo_grad_y ! Grad_y(Jo)
12 type(jo_type), intent(inout) :: jo ! Obs cost function.
16 if (trace_use_dull) call da_trace_entry("da_jo_and_grady_metar")
25 if (iv%info(metar)%nlocal > 0) then
26 do n=1, iv%info(metar)%nlocal
27 jo_grad_y%metar(n)%u = -re%metar(n)%u / &
28 (iv%metar(n)%u%error * iv%metar(n)%u%error)
29 jo_grad_y%metar(n)%v = -re%metar(n)%v / &
30 (iv%metar(n)%v%error * iv%metar(n)%v%error)
31 jo_grad_y%metar(n)%t = -re%metar(n)%t / &
32 (iv%metar(n)%t%error * iv%metar(n)%t%error)
33 jo_grad_y%metar(n)%p = -re%metar(n)%p / &
34 (iv%metar(n)%p%error * iv%metar(n)%p%error)
35 jo_grad_y%metar(n)%q = -re%metar(n)%q / &
36 (iv%metar(n)%q%error * iv%metar(n)%q%error)
38 if (iv%info(metar)%proc_domain(1,n)) then
39 jo % metar_u = jo % metar_u - re%metar(n)%u * jo_grad_y%metar(n)%u
40 jo % metar_v = jo % metar_v - re%metar(n)%v * jo_grad_y%metar(n)%v
41 jo % metar_t = jo % metar_t - re%metar(n)%t * jo_grad_y%metar(n)%t
42 jo % metar_p = jo % metar_p - re%metar(n)%p * jo_grad_y%metar(n)%p
43 jo % metar_q = jo % metar_q - re%metar(n)%q * jo_grad_y%metar(n)%q
47 jo % metar_u = 0.5 * jo % metar_u
48 jo % metar_v = 0.5 * jo % metar_v
49 jo % metar_t = 0.5 * jo % metar_t
50 jo % metar_p = 0.5 * jo % metar_p
51 jo % metar_q = 0.5 * jo % metar_q
54 if (trace_use_dull) call da_trace_exit("da_jo_and_grady_metar")
56 end subroutine da_jo_and_grady_metar