da_calculate_grady_polaramv.inc

References to this file elsewhere.
1 subroutine da_calculate_grady_polaramv(iv, re, jo_grad_y)
2 
3    !-------------------------------------------------------------------------
4    ! Purpose: Calculates Gradient of Polar AMVs  Obs.          
5    !-------------------------------------------------------------------------
6 
7    implicit none
8 
9 
10    type (ob_type), intent(in)     :: iv          ! Innovation vector.
11    type (y_type),  intent(inout)  :: re          ! Residual vector.
12    type (y_type),  intent(inout)  :: jo_grad_y   ! Grad_y(Jo)
13 
14    integer                      :: n , k
15 
16    if (iv%num_polaramv > 0) then
17       do n=1, iv%num_polaramv
18          do k=1, iv%polaramv(n)%info%levels
19             if (iv%polaramv(n)%u(k)%qc < obs_qc_pointer) then
20                re%polaramv(n)%u(k) = 0.0
21             end if
22             if (iv%polaramv(n)%v(k)%qc < obs_qc_pointer) then
23                re%polaramv(n)%v(k) = 0.0
24             end if
25 
26             jo_grad_y%polaramv(n)%u(k) = -re%polaramv(n)%u(k) / &
27                                     (iv%polaramv(n)%u(k)%error * &
28                                       iv%polaramv(n)%u(k)%error)
29             jo_grad_y%polaramv(n)%v(k) = -re%polaramv(n)%v(k) / &
30                                     (iv%polaramv(n)%v(k)%error * &
31                                       iv%polaramv(n)%v(k)%error)
32          end do
33       end do
34    end if
35 
36 end subroutine da_calculate_grady_polaramv
37 
38