Merge remote-tracking branch 'origin/release-v4.5.2'
[WRF.git] / var / da / da_radar / da_jo_and_grady_radar.inc
blob372066629099b8066279071f78f4a948dea79ede
1 subroutine da_jo_and_grady_radar(iv, re, jo, jo_grad_y)
3    !-----------------------------------------------------------------------
4    ! Purpose: TBD
5    !-----------------------------------------------------------------------
7    implicit none
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.
14    integer :: n, k
16    if (trace_use) call da_trace_entry("da_jo_and_grady_radar")
18    jo % radar_rv = 0.0
19    jo % radar_rf = 0.0
20    jo % radar_rrn = 0.0
21    jo % radar_rsn = 0.0
22    jo % radar_rgr = 0.0
23    jo % radar_rqv = 0.0 
25    do n=1, iv%info(radar)%nlocal
26       do k=1, iv%info(radar)%levels(n)
27          if (use_radar_rv) then
28             jo_grad_y%radar(n)%rv(k) = -re%radar(n)%rv(k) / (iv%radar(n)%rv(k)%error * iv%radar(n)%rv(k)%error) 
29          end if
31          if (use_radar_rf) then
32             jo_grad_y%radar(n)%rf(k) = -re%radar(n)%rf(k) / (iv%radar(n)%rf(k)%error * iv%radar(n)%rf(k)%error) 
33          end if
35          if (use_radar_rhv) then
36             jo_grad_y%radar(n)%rrn(k) = -re%radar(n)%rrn(k) / (iv%radar(n)%rrn(k)%error * iv%radar(n)%rrn(k)%error) 
37             jo_grad_y%radar(n)%rsn(k) = -re%radar(n)%rsn(k) / (iv%radar(n)%rsn(k)%error * iv%radar(n)%rsn(k)%error) 
38             jo_grad_y%radar(n)%rgr(k) = -re%radar(n)%rgr(k) / (iv%radar(n)%rgr(k)%error * iv%radar(n)%rgr(k)%error) 
39          end if
41          if (use_radar_rqv) then
42             jo_grad_y%radar(n)%rqv(k) = -re%radar(n)%rqv(k) / (iv%radar(n)%rqv(k)%error * iv%radar(n)%rqv(k)%error) 
43          end if
44       end do
46       if (iv%info(radar)%proc_domain(1,n)) then
47          do k=1, iv%info(radar)%levels(n)
48             if (use_radar_rv) then
49                jo % radar_rv = jo % radar_rv - re%radar(n)%rv(k) * jo_grad_y%radar(n)%rv(k)
50             end if
52             if (use_radar_rf) then
53                jo % radar_rf = jo % radar_rf - re%radar(n)%rf(k) * jo_grad_y%radar(n)%rf(k)
54             end if
55        
56             if (use_radar_rhv) then
57                jo % radar_rrn = jo % radar_rrn - re%radar(n)%rrn(k) * jo_grad_y%radar(n)%rrn(k)
58                jo % radar_rsn = jo % radar_rsn - re%radar(n)%rsn(k) * jo_grad_y%radar(n)%rsn(k)
59                jo % radar_rgr = jo % radar_rgr - re%radar(n)%rgr(k) * jo_grad_y%radar(n)%rgr(k)
60             end if
62             if (use_radar_rqv) then
63                jo % radar_rqv = jo % radar_rqv - re%radar(n)%rqv(k) * jo_grad_y%radar(n)%rqv(k)
64             end if
65          end do
66       end if
67    end do
68       
69    jo % radar_rv = 0.5 * jo % radar_rv
70    jo % radar_rf = 0.5 * jo % radar_rf
71    jo % radar_rrn= 0.5 * jo % radar_rrn
72    jo % radar_rsn= 0.5 * jo % radar_rsn
73    jo % radar_rgr= 0.5 * jo % radar_rgr
74    jo % radar_rqv= 0.5 * jo % radar_rqv
76    if (trace_use) call da_trace_exit("da_jo_and_grady_radar")
78 end subroutine da_jo_and_grady_radar