<HTML> <BODY BGCOLOR=#ccccdd LINK=#0000aa VLINK=#0000ff ALINK=#ff0000 ><BASE TARGET="bottom_target"><PRE>
<A NAME='DA_CALCULATE_RESIDUAL'><A href='../../html_code/minimisation/da_calculate_residual.inc.html#DA_CALCULATE_RESIDUAL' TARGET='top_target'><IMG SRC="../../gif/bar_red.gif" border=0></A>

subroutine da_calculate_residual(iv, y, re) 3,29

   !-----------------------------------------------------------------------
   ! Purpose: Calculate residuals
   !-----------------------------------------------------------------------

   implicit none
      
   type (iv_type), intent(inout)     :: iv     ! Innovation vector (O-B).
   type (y_type),  intent(in)        :: y      ! y = H (xa)
   type (y_type),  intent(inout)     :: re     ! Residual (O-A).

   integer    :: np_available, np_obs_used, np_missing, np_bad_data 

   if (trace_use) call da_trace_entry("da_calculate_residual")
      
   np_available = 0
   np_obs_used  = 0
   np_missing   = 0
   np_bad_data  = 0

   !-------------------------------------------------------------------------
   ! [1.0] (O-A) = (O-B) - H x~:
   !-------------------------------------------------------------------------

   if (iv%info(sound)%nlocal &gt; 0) &amp;
      call da_residual_sound(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(sonde_sfc)%nlocal &gt; 0) &amp;
      call da_residual_sonde_sfc(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(mtgirs)%nlocal &gt; 0) &amp; 
      call da_residual_mtgirs(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(tamdar)%nlocal &gt; 0)  &amp;   
      call da_residual_tamdar(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(tamdar_sfc)%nlocal &gt; 0)  &amp;   
      call da_residual_tamdar_sfc(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(synop)%nlocal &gt; 0) &amp;
      call da_residual_synop(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(geoamv)%nlocal &gt; 0) &amp;
      call da_residual_geoamv(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(polaramv)%nlocal &gt; 0) &amp;
      call da_residual_polaramv(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(airep)%nlocal &gt; 0) &amp;
      call da_residual_airep(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(metar)%nlocal &gt; 0) &amp;
      call da_residual_metar(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(ships)%nlocal &gt; 0) &amp;
      call da_residual_ships(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(gpspw)%nlocal &gt; 0) &amp;
      call da_residual_gpspw(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(gpsref)%nlocal &gt; 0) &amp;
      call da_residual_gpsref(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(ssmi_tb)%nlocal &gt; 0) &amp;
      call da_residual_ssmi_tb(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(ssmi_rv)%nlocal &gt; 0) &amp;
      call da_residual_ssmi_rv(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if ( iv%info(ssmt2)%nlocal &gt; 0) &amp;
      call da_residual_ssmt1(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(ssmt2)%nlocal &gt; 0) &amp;
      call da_residual_ssmt2(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(pilot)%nlocal &gt; 0) &amp;
      call da_residual_pilot(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(bogus)%nlocal &gt; 0) &amp;
      call da_residual_bogus(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(satem)%nlocal &gt; 0) &amp;
      call da_residual_satem(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (num_pseudo &gt; 0) &amp;
      call da_residual_pseudo(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(qscat)%nlocal &gt; 0) &amp;
      call da_residual_qscat(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(radar)%nlocal &gt; 0) &amp;
      call da_residual_radar(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(profiler)%nlocal &gt; 0) &amp;
      call da_residual_profiler(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (iv%info(buoy)%nlocal &gt; 0) &amp;
      call da_residual_buoy(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

    if (iv%info(rain)%nlocal &gt; 0) &amp;
      call da_residual_rain(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

#if defined(RTTOV) || defined(CRTM)
   if (iv%num_inst &gt; 0) &amp;
      call da_residual_rad(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
#endif

   if (iv%info(airsr)%nlocal &gt; 0) &amp;
      call da_residual_airsr(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)

   if (trace_use) call da_trace_exit("da_calculate_residual")

end subroutine da_calculate_residual