1 subroutine da_calculate_residual(iv, y, re)
3 !-----------------------------------------------------------------------
4 ! Purpose: Calculate residuals
5 !-----------------------------------------------------------------------
9 type (iv_type), intent(inout) :: iv ! Innovation vector (O-B).
10 type (y_type), intent(in) :: y ! y = H (xa)
11 type (y_type), intent(inout) :: re ! Residual (O-A).
13 integer :: np_available, np_obs_used, np_missing, np_bad_data
15 if (trace_use) call da_trace_entry("da_calculate_residual")
22 !-------------------------------------------------------------------------
23 ! [1.0] (O-A) = (O-B) - H x~:
24 !-------------------------------------------------------------------------
26 if (iv%info(sound)%nlocal > 0) then
27 call da_residual_sound(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
28 call da_residual_sonde_sfc(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
31 if (iv%info(mtgirs)%nlocal > 0) &
32 call da_residual_mtgirs(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
34 if (iv%info(tamdar)%nlocal > 0) then
35 call da_residual_tamdar(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
36 call da_residual_tamdar_sfc(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
38 if (iv%info(synop)%nlocal > 0) &
39 call da_residual_synop(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
41 if (iv%info(geoamv)%nlocal > 0) &
42 call da_residual_geoamv(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
44 if (iv%info(polaramv)%nlocal > 0) &
45 call da_residual_polaramv(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
47 if (iv%info(airep)%nlocal > 0) &
48 call da_residual_airep(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
50 if (iv%info(metar)%nlocal > 0) &
51 call da_residual_metar(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
53 if (iv%info(ships)%nlocal > 0) &
54 call da_residual_ships(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
56 if (iv%info(gpspw)%nlocal > 0) &
57 call da_residual_gpspw(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
59 if (iv%info(gpsref)%nlocal > 0) &
60 call da_residual_gpsref(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
62 if (iv%info(ssmi_tb)%nlocal > 0) &
63 call da_residual_ssmi_tb(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
65 if (iv%info(ssmi_rv)%nlocal > 0) &
66 call da_residual_ssmi_rv(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
68 if ( iv%info(ssmt2)%nlocal > 0) &
69 call da_residual_ssmt1(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
71 if (iv%info(ssmt2)%nlocal > 0) &
72 call da_residual_ssmt2(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
74 if (iv%info(pilot)%nlocal > 0) &
75 call da_residual_pilot(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
77 if (iv%info(bogus)%nlocal > 0) &
78 call da_residual_bogus(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
80 if (iv%info(satem)%nlocal > 0) &
81 call da_residual_satem(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
84 call da_residual_pseudo(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
86 if (iv%info(qscat)%nlocal > 0) &
87 call da_residual_qscat(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
89 if (iv%info(radar)%nlocal > 0) &
90 call da_residual_radar(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
92 if (iv%info(profiler)%nlocal > 0) &
93 call da_residual_profiler(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
95 if (iv%info(buoy)%nlocal > 0) &
96 call da_residual_buoy(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
98 #if defined(RTTOV) || defined(CRTM)
99 if (iv%num_inst > 0) &
100 call da_residual_rad(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
103 if (iv%info(airsr)%nlocal > 0) &
104 call da_residual_airsr(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
106 if (trace_use) call da_trace_exit("da_calculate_residual")
108 end subroutine da_calculate_residual