da_jo_and_grady_profiler.inc

References to this file elsewhere.
1 subroutine da_jo_and_grady_profiler( iv, re, jo, jo_grad_y)
2 
3    !-----------------------------------------------------------------------
4    ! Purpose: TBD
5    !-----------------------------------------------------------------------
6 
7    implicit none
8 
9    type(ob_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.
13 
14 
15    integer                      :: n, k
16 
17    jo % profiler_u = 0.0
18    jo % profiler_v = 0.0
19 
20    if (iv%num_profiler > 0) then
21       do n=1, iv%num_profiler
22          do k=1, iv%profiler(n)%info%levels
23             jo_grad_y%profiler(n)%u(k) = -re%profiler(n)%u(k) / &
24                                      ( iv%profiler(n)%u(k)%error * &
25                                         iv%profiler(n)%u(k)%error)
26             jo_grad_y%profiler(n)%v(k) = -re%profiler(n)%v(k) / &
27                                      ( iv%profiler(n)%v(k)%error * &
28                                         iv%profiler(n)%v(k)%error)
29          end do
30 
31          if (iv%profiler(n)%loc%proc_domain) then
32             do k=1, iv%profiler(n)%info%levels
33                jo % profiler_u = jo % profiler_u - &
34                          re%profiler(n)%u(k) * jo_grad_y%profiler(n)%u(k)
35                jo % profiler_v = jo % profiler_v - &
36                          re%profiler(n)%v(k) * jo_grad_y%profiler(n)%v(k)
37             end do
38          end if
39       end do
40       
41       jo % profiler_u = 0.5 * jo % profiler_u
42       jo % profiler_v = 0.5 * jo % profiler_v
43       
44    end if
45 
46 end subroutine da_jo_and_grady_profiler
47 
48