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