Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / var / da / da_radiance / da_get_innov_vector_radiance.inc
blob7588471cb7de978fcff8a5775459f8e2de8efd0b
1 subroutine da_get_innov_vector_radiance (it, grid, ob, iv)
3    !---------------------------------------------------------------------------
4    !  PURPOSE: Calculate innovation vector for radiance data.
5    !
6    !  METHOD:  d = y - H(x) - bc
7    !       1. obs BT - simulated BT
8    !       2. Bias correction
9    !       3. Radiances Quality Control
10    !
11    !  HISTORY: 10/24/2007 - Creation from da_get_innov_vector_crtm  Tom Auligne
12    !---------------------------------------------------------------------------
13    
14    implicit none
15    
16    integer, intent(in)            :: it       ! External iteration.
17    type(domain),   intent(in)     :: grid
18    type (y_type),  intent(inout)  :: ob       ! Observation structure.
19    type (iv_type), intent(inout)  :: iv       ! O-B structure.
21    integer                        :: inst
23    if(trace_use) call  da_trace_entry("da_get_innov_vector_radiance")
25    iv%instid(:)%info%n1 = iv%instid(:)%info%plocal(iv%time-1) + 1
26    iv%instid(:)%info%n2 = iv%instid(:)%info%plocal(iv%time)
28    !------------------------------------------------------------------------
29    ! [1.0] calculate components of innovation vector
30    !------------------------------------------------------------------------
31    if (rtm_option == rtm_option_rttov) then
32 #ifdef RTTOV
33       call da_get_innov_vector_rttov( it, grid, ob, iv )
35 #else
36       call da_error(__FILE__,__LINE__, &
37        (/"Must compile with $RTTOV option for radiances"/))
38 #endif
39    elseif (rtm_option == rtm_option_crtm) then
40 #ifdef CRTM
41       call da_get_innov_vector_crtm (it, grid, ob, iv )
42 #else
43       call da_error(__FILE__,__LINE__, &
44        (/"Must compile with $CRTM option for radiances"/))
45 #endif
46    else
47       call da_warning(__FILE__,__LINE__,(/"Unknown Radiative Transfer Model"/))
48    endif
50    !------------------------------------------------------------------------
51    ! [2.0] Perform (Variational) bias correction
52    !------------------------------------------------------------------------
53    if (use_varbc .or. freeze_varbc) then
54       call da_varbc_pred(iv)
55       !varbc coldstart can not be done here when num_fgat_time>1
56       !because da_varbc_coldstart uses all obs from all time slots
57    else if (biascorr) then
58       do inst = 1, iv%num_inst                 ! loop for sensor
59          write(unit=stdout,fmt='(A,A)') 'Performing bias correction for ', &
60             trim(iv%instid(inst)%rttovid_string)
61          call da_biascorr(inst,ob,iv)
62       end do                                   ! end loop for sensor
63    end if
65    if(trace_use) call  da_trace_exit("da_get_innov_vector_radiance")
67 end subroutine da_get_innov_vector_radiance