da_write_diagnostics.inc
References to this file elsewhere.
1 subroutine da_write_diagnostics(grid, ob, iv, re, y, j)
2
3 !---------------------------------------------------------------------------
4 ! Purpose: Output data assmiilation diagnostics
5 !---------------------------------------------------------------------------
6
7 implicit none
8
9 type (domain), intent(in) :: grid
10 type (y_type), intent(in) :: ob ! Observation structure.
11 type (iv_type), intent(inout) :: iv ! innovation vector.
12 type (y_type), intent(inout) :: re ! residual vector.
13 type (y_type), intent(in) :: y ! y = H(x_inc) structure.
14 type (j_type), intent(inout) :: j ! Cost function.
15
16 if (trace_use) call da_trace_entry("da_write_diagnostics")
17
18 iv%nstats(:) = 0
19
20 !---------------------------------------------------------------------------
21 ! [1.0] Calculate innovation vector (O-B) statistics:
22 !---------------------------------------------------------------------------
23
24 if (iv%info(sound)%ntotal > 0) then
25 call da_oi_stats_sound (stats_unit, iv)
26 call da_oi_stats_sonde_sfc (stats_unit, iv)
27 end if
28 if (iv%info(synop)%ntotal > 0) call da_oi_stats_synop (stats_unit, iv)
29 if (iv%info(geoamv)%ntotal > 0) call da_oi_stats_geoamv (stats_unit, iv)
30 if (iv%info(polaramv)%ntotal > 0) call da_oi_stats_polaramv (stats_unit, iv)
31 if (iv%info(airep)%ntotal > 0) call da_oi_stats_airep (stats_unit, iv)
32 if (iv%info(pilot)%ntotal > 0) call da_oi_stats_pilot (stats_unit, iv)
33 if (iv%info(metar)%ntotal > 0) call da_oi_stats_metar (stats_unit, iv)
34 if (iv%info(ships)%ntotal > 0) call da_oi_stats_ships (stats_unit, iv)
35 if (iv%info(gpspw)%ntotal > 0) call da_oi_stats_gpspw (stats_unit, iv)
36 if (iv%info(gpsref)%ntotal > 0) call da_oi_stats_gpsref (stats_unit, iv)
37 if (iv%info(ssmi_tb)%ntotal > 0) call da_oi_stats_ssmi_tb (stats_unit, iv)
38 if (iv%info(ssmi_rv)%ntotal > 0) call da_oi_stats_ssmi_rv (stats_unit, iv)
39 if (iv%info(satem)%ntotal > 0) call da_oi_stats_satem (stats_unit, iv)
40 if (iv%info(ssmt1)%ntotal > 0) call da_oi_stats_ssmt1 (stats_unit, iv)
41 if (iv%info(ssmt2)%ntotal > 0) call da_oi_stats_ssmt2 (stats_unit, iv)
42 if (iv%info(qscat)%ntotal > 0) call da_oi_stats_qscat (stats_unit, iv)
43 if (iv%info(profiler)%ntotal > 0) call da_oi_stats_profiler (stats_unit, iv)
44 if (iv%info(buoy)%ntotal > 0) call da_oi_stats_buoy (stats_unit, iv)
45 if (iv%info(radar)%ntotal > 0) call da_oi_stats_radar (stats_unit, iv)
46 if (iv%info(bogus)%ntotal > 0) call da_oi_stats_bogus (stats_unit, iv)
47 if (iv%info(airsr)%ntotal > 0) call da_oi_stats_airsr (stats_unit, iv)
48
49 if (iv%num_inst > 0) call da_oi_stats_rad (stats_unit, iv)
50
51 if (num_pseudo > 0) call da_oi_stats_pseudo (stats_unit, iv)
52
53 !---- ----------------------------------------------------------------------
54 ! [2.0] Calculate residual vector (O-A) statistics:
55 !---------------------------------------------------------------------------
56
57 if (iv%info(sound)%ntotal > 0) then
58 call da_ao_stats_sound (stats_unit, iv, re)
59 call da_ao_stats_sonde_sfc (stats_unit, iv, re)
60 end if
61 if (iv%info(synop)%ntotal > 0) call da_ao_stats_synop (stats_unit, iv, re)
62 if (iv%info(geoamv)%ntotal > 0) call da_ao_stats_geoamv (stats_unit, iv, re)
63 if (iv%info(polaramv)%ntotal > 0) call da_ao_stats_polaramv (stats_unit, iv, re)
64 if (iv%info(airep)%ntotal > 0) call da_ao_stats_airep (stats_unit, iv, re)
65 if (iv%info(pilot)%ntotal > 0) call da_ao_stats_pilot (stats_unit, iv, re)
66 if (iv%info(metar)%ntotal > 0) call da_ao_stats_metar (stats_unit, iv, re)
67 if (iv%info(ships)%ntotal > 0) call da_ao_stats_ships (stats_unit, iv, re)
68 if (iv%info(gpspw)%ntotal > 0) call da_ao_stats_gpspw (stats_unit, iv, re)
69 if (iv%info(gpsref)%ntotal > 0) call da_ao_stats_gpsref (stats_unit, iv, re)
70 if (iv%info(ssmi_tb)%ntotal > 0) call da_ao_stats_ssmi_tb (stats_unit, iv, re)
71 if (iv%info(ssmi_rv)%ntotal > 0) call da_ao_stats_ssmi_rv (stats_unit, iv, re)
72 if (iv%info(satem)%ntotal > 0) call da_ao_stats_satem (stats_unit, iv, re)
73 if (iv%info(ssmt1)%ntotal > 0) call da_ao_stats_ssmt1 (stats_unit, iv, re)
74 if (iv%info(ssmt2)%ntotal > 0) call da_ao_stats_ssmt2 (stats_unit, iv, re)
75 if (iv%info(qscat)%ntotal > 0) call da_ao_stats_qscat (stats_unit, iv, re)
76 if (iv%info(profiler)%ntotal > 0) call da_ao_stats_profiler (stats_unit, iv, re)
77 if (iv%info(buoy)%ntotal > 0) call da_ao_stats_buoy (stats_unit, iv, re)
78 if (iv%info(radar)%ntotal > 0) call da_ao_stats_radar (stats_unit, iv, re)
79 if (iv%info(bogus)%ntotal > 0) call da_ao_stats_bogus (stats_unit, iv, re)
80 if (iv%info(airsr)%ntotal > 0) call da_ao_stats_airsr (stats_unit, iv, re)
81
82 if (iv%num_inst > 0) call da_ao_stats_rad (stats_unit, iv, re)
83
84 if (num_pseudo > 0) call da_ao_stats_pseudo (stats_unit, iv, re)
85
86 !---------------------------------------------------------------------------
87 ! [3.0] Calculate analysis increment (A-B) statistics:
88 !---------------------------------------------------------------------------
89
90 call da_analysis_stats (grid, stats_unit)
91
92 !---------------------------------------------------------------------------
93 ! [4.0] Write VAR diagnostic :
94 !------------------------------------------------------------------------------
95
96 call da_get_var_diagnostics (iv, j)
97
98 !---- -------------------------------------------------------------------------
99 ! [5.0] Write observation data (O, O-B, O-A, y=hx'):
100 !------------------------------------------------------------------------------
101
102 call da_write_obs(ob, iv, re)
103
104 ! Write ETKF observation files if required (note - 1PE only at present):
105 if (anal_type_verify) then
106 call da_write_obs_etkf(ob, iv, re)
107 end if
108
109 call da_final_write_obs(iv)
110
111 call da_write_y(iv, y)
112
113 call da_final_write_y(iv)
114
115 if (trace_use) call da_trace_exit("da_write_diagnostics")
116
117 end subroutine da_write_diagnostics
118
119