da_calculate_residual.inc
References to this file elsewhere.
1 subroutine da_calculate_residual(iv, y, re)
2
3 !-----------------------------------------------------------------------
4 ! Purpose: Calculate residuals
5 !-----------------------------------------------------------------------
6
7 implicit none
8
9 type (iv_type), intent(in) :: 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).
12
13 integer :: np_available, np_obs_used, np_missing, np_bad_data
14
15 if (trace_use) call da_trace_entry("da_calculate_residual")
16
17 np_available = 0
18 np_obs_used = 0
19 np_missing = 0
20 np_bad_data = 0
21
22 !-------------------------------------------------------------------------
23 ! [1.0] (O-A) = (O-B) - H x~:
24 !-------------------------------------------------------------------------
25
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)
29 end if
30
31 if (iv%info(synop)%nlocal > 0) &
32 call da_residual_synop(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
33
34 if (iv%info(geoamv)%nlocal > 0) &
35 call da_residual_geoamv(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
36
37 if (iv%info(polaramv)%nlocal > 0) &
38 call da_residual_polaramv(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
39
40 if (iv%info(airep)%nlocal > 0) &
41 call da_residual_airep(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
42
43 if (iv%info(metar)%nlocal > 0) &
44 call da_residual_metar(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
45
46 if (iv%info(ships)%nlocal > 0) &
47 call da_residual_ships(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
48
49 if (iv%info(gpspw)%nlocal > 0) &
50 call da_residual_gpspw(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
51
52 if (iv%info(gpsref)%nlocal > 0) &
53 call da_residual_gpsref(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
54
55 if (iv%info(ssmi_tb)%nlocal > 0) &
56 call da_residual_ssmi_tb(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
57
58 if (iv%info(ssmi_rv)%nlocal > 0) &
59 call da_residual_ssmi_rv(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
60
61 if ( iv%info(ssmt2)%nlocal > 0) &
62 call da_residual_ssmt1(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
63
64 if (iv%info(ssmt2)%nlocal > 0) &
65 call da_residual_ssmt2(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
66
67 if (iv%info(pilot)%nlocal > 0) &
68 call da_residual_pilot(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
69
70 if (iv%info(bogus)%nlocal > 0) &
71 call da_residual_bogus(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
72
73 if (iv%info(satem)%nlocal > 0) &
74 call da_residual_satem(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
75
76 if (num_pseudo > 0) &
77 call da_residual_pseudo(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
78
79 if (iv%info(qscat)%nlocal > 0) &
80 call da_residual_qscat(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
81
82 if (iv%info(radar)%nlocal > 0) &
83 call da_residual_radar(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
84
85 if (iv%info(profiler)%nlocal > 0) &
86 call da_residual_profiler(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
87
88 if (iv%info(buoy)%nlocal > 0) &
89 call da_residual_buoy(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
90
91 if (iv%num_inst > 0) &
92 call da_residual_rad(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
93
94 if (iv%info(airsr)%nlocal > 0) &
95 call da_residual_airsr(iv, y, re, np_missing, np_bad_data, np_obs_used, np_available)
96
97 if (trace_use) call da_trace_exit("da_calculate_residual")
98
99 end subroutine da_calculate_residual
100
101