3 !---------------------------------------------------------------------------
4 ! Purpose: Collection of routines associated with minimisation.
5 !---------------------------------------------------------------------------
7 use module_configure
, only
: grid_config_rec_type
8 use module_dm
, only
: wrf_dm_sum_real
9 use module_domain
, only
: domain
, ep_type
, vp_type
10 use module_state_description
, only
: dyn_em
,dyn_em_tl
,dyn_em_ad
,p_g_qv
13 ! use mpi, only : mpi_barrier
16 use da_airep
, only
: da_calculate_grady_airep
, da_ao_stats_airep
, &
17 da_oi_stats_airep
, da_get_innov_vector_airep
, da_residual_airep
, &
19 use da_airsr
, only
: da_calculate_grady_airsr
, da_ao_stats_airsr
, &
20 da_oi_stats_airsr
, da_get_innov_vector_airsr
, da_residual_airsr
, &
22 use da_bogus
, only
: da_calculate_grady_bogus
, da_ao_stats_bogus
, &
23 da_oi_stats_bogus
, da_get_innov_vector_bogus
, da_residual_bogus
, &
25 use da_buoy
, only
: da_calculate_grady_buoy
, da_ao_stats_buoy
, &
26 da_oi_stats_buoy
,da_get_innov_vector_buoy
, da_residual_buoy
, &
28 use da_control
, only
: trace_use
,var4d_coupling_disk_simul
, &
29 var4d
, rootproc
,jcdfi_use
,jcdfi_io
,var4d_coupling
,ierr
,comm
,num_fgat_time
, &
30 stdout
, eps
, stats_unit
, test_dm_exact
, global
, multi_inc
, &
31 calculate_cg_cost_fn
,anal_type_randomcv
,cv_size_domain
,je_factor
, &
32 jb_factor
,ntmax
,omb_add_noise
,write_iv_rad_ascii
,use_obs_errfac
, &
33 rtm_option
,rtm_option_rttov
, rtm_option_crtm
, anal_type_verify
, &
34 write_filtered_rad
,omb_set_rand
,use_rad
,var_scaling2
,var_scaling1
, &
35 var_scaling4
,var_scaling5
,var_scaling3
, jo_unit
, &
36 print_detail_grad
,omb_set_rand
,grad_unit
,cost_unit
, &
37 cv_size_domain_je
,cv_size_domain_jb
, num_pseudo
, cv_options
, &
38 sound
, mtgirs
, sonde_sfc
, synop
, profiler
, gpsref
, gpspw
, polaramv
, geoamv
, ships
, metar
, &
39 satem
, radar
, ssmi_rv
, ssmi_tb
, ssmt1
, ssmt2
, airsr
, pilot
, airep
,tamdar
, tamdar_sfc
, &
40 bogus
, buoy
, qscat
,pseudo
, radiance
, monitor_on
, max_ext_its
, use_crtm_kmatrix
, &
41 precondition_cg
, precondition_factor
, cv_size_domain_jp
, use_varbc
, varbc_factor
, &
42 num_procs
, myproc
, use_gpspwobs
, use_gpsztdobs
, pseudo_var
, num_pseudo
, &
43 num_ob_indexes
, num_ob_vars
, npres_print
, pptop
, ppbot
, qcstat_conv_unit
, &
44 orthonorm_gradient
, its
, ite
, jts
, jte
, kte
, ids
, ide
, jds
, jde
, &
45 use_satcv
, sensitivity_option
, print_detail_outerloop
46 use da_define_structures
, only
: iv_type
, y_type
, j_type
, be_type
, &
47 xbx_type
, jo_type
, da_allocate_y
,da_zero_x
,da_zero_y
,da_deallocate_y
, &
49 use da_obs
, only
: da_transform_xtoy_adj
,da_transform_xtoy
, &
50 da_add_noise_to_ob
,da_random_omb_all
, da_obs_sensitivity
51 use da_geoamv
, only
: da_calculate_grady_geoamv
, da_ao_stats_geoamv
, &
52 da_oi_stats_geoamv
, da_get_innov_vector_geoamv
,da_residual_geoamv
, &
53 da_jo_and_grady_geoamv
54 use da_gpspw
, only
: da_calculate_grady_gpspw
, da_ao_stats_gpspw
, &
55 da_oi_stats_gpspw
, da_get_innov_vector_gpspw
, da_residual_gpspw
, &
56 da_jo_and_grady_gpspw
, da_get_innov_vector_gpsztd
57 use da_gpsref
, only
: da_calculate_grady_gpsref
, da_ao_stats_gpsref
, &
58 da_oi_stats_gpsref
, da_get_innov_vector_gpsref
, da_residual_gpsref
, &
59 da_jo_and_grady_gpsref
60 use da_obs_io
, only
: da_final_write_y
, da_write_y
, da_final_write_obs
, &
61 da_write_obs
,da_write_obs_etkf
,da_write_noise_to_ob
, da_use_obs_errfac
, &
62 da_write_iv_for_multi_inc
, da_read_iv_for_multi_inc
63 use da_metar
, only
: da_calculate_grady_metar
, da_ao_stats_metar
, &
64 da_oi_stats_metar
, da_get_innov_vector_metar
, da_residual_metar
, &
66 use da_pilot
, only
: da_calculate_grady_pilot
, da_ao_stats_pilot
, &
67 da_oi_stats_pilot
, da_get_innov_vector_pilot
, da_residual_pilot
, &
69 use da_par_util
, only
: da_system
,da_cv_to_global
70 use da_par_util1
, only
: da_proc_sum_real
,da_proc_sum_ints
71 use da_polaramv
, only
: da_calculate_grady_polaramv
, da_ao_stats_polaramv
, &
72 da_oi_stats_polaramv
, da_get_innov_vector_polaramv
, da_residual_polaramv
, &
73 da_jo_and_grady_polaramv
74 use da_profiler
, only
: da_calculate_grady_profiler
, da_ao_stats_profiler
, &
75 da_oi_stats_profiler
,da_get_innov_vector_profiler
, da_residual_profiler
, &
76 da_jo_and_grady_profiler
77 use da_pseudo
, only
: da_calculate_grady_pseudo
, da_ao_stats_pseudo
, &
78 da_oi_stats_pseudo
, da_get_innov_vector_pseudo
, da_residual_pseudo
, &
79 da_jo_and_grady_pseudo
80 use da_qscat
, only
: da_calculate_grady_qscat
, da_ao_stats_qscat
, &
81 da_oi_stats_qscat
, da_get_innov_vector_qscat
, da_residual_qscat
, &
83 use da_mtgirs
, only
: da_calculate_grady_mtgirs
, &
84 da_ao_stats_mtgirs
, da_oi_stats_mtgirs
,da_oi_stats_mtgirs
, &
85 da_get_innov_vector_mtgirs
, &
86 da_jo_and_grady_mtgirs
, da_residual_mtgirs
87 use da_tamdar
, only
: da_calculate_grady_tamdar
, &
88 da_ao_stats_tamdar
, da_oi_stats_tamdar
,da_oi_stats_tamdar
, &
89 da_get_innov_vector_tamdar
, &
90 da_jo_and_grady_tamdar
, da_residual_tamdar
, &
91 da_calculate_grady_tamdar_sfc
, &
92 da_ao_stats_tamdar_sfc
, da_oi_stats_tamdar_sfc
,da_oi_stats_tamdar_sfc
, &
93 da_get_innov_vector_tamdar_sfc
, &
94 da_jo_and_grady_tamdar_sfc
, da_residual_tamdar_sfc
96 #
if defined(RTTOV
) ||
defined(CRTM
)
97 use da_radiance
, only
: da_calculate_grady_rad
, da_write_filtered_rad
, &
98 da_get_innov_vector_radiance
, satinfo
99 use da_radiance1
, only
: da_ao_stats_rad
,da_oi_stats_rad
, &
100 da_write_iv_rad_ascii
,da_residual_rad
,da_jo_and_grady_rad
102 use da_radar
, only
: da_calculate_grady_radar
, da_ao_stats_radar
, &
103 da_oi_stats_radar
, da_get_innov_vector_radar
, da_residual_radar
, &
104 da_jo_and_grady_radar
105 use da_reporting
, only
: da_message
, da_warning
, da_error
106 use da_satem
, only
: da_calculate_grady_satem
, da_ao_stats_satem
, &
107 da_oi_stats_satem
, da_get_innov_vector_satem
, da_residual_satem
, &
108 da_jo_and_grady_satem
109 use da_ships
, only
: da_calculate_grady_ships
, da_ao_stats_ships
, &
110 da_oi_stats_ships
, da_get_innov_vector_ships
, da_residual_ships
, &
111 da_jo_and_grady_ships
112 use da_sound
, only
: da_calculate_grady_sound
,da_calculate_grady_sonde_sfc
, &
113 da_ao_stats_sound
, da_oi_stats_sound
,da_oi_stats_sound
, &
114 da_oi_stats_sonde_sfc
,da_ao_stats_sonde_sfc
,da_get_innov_vector_sound
, &
115 da_get_innov_vector_sonde_sfc
,da_jo_and_grady_sound
, da_residual_sound
, &
116 da_jo_and_grady_sound
,da_jo_and_grady_sonde_sfc
,da_residual_sonde_sfc
117 use da_ssmi
, only
: da_calculate_grady_ssmi_tb
,da_calculate_grady_ssmi_rv
,da_calculate_grady_ssmt1
, &
118 da_calculate_grady_ssmt2
, da_ao_stats_ssmi_tb
,da_ao_stats_ssmt2
, &
119 da_ao_stats_ssmt2
, da_oi_stats_ssmt1
, da_oi_stats_ssmt2
, &
120 da_oi_stats_ssmi_tb
,da_oi_stats_ssmi_rv
,da_ao_stats_ssmt1
,da_get_innov_vector_ssmi_tb
, &
121 da_get_innov_vector_ssmi_rv
, da_residual_ssmi_rv
, da_residual_ssmi_tb
, &
122 da_get_innov_vector_ssmt1
,da_get_innov_vector_ssmt2
, &
123 da_jo_and_grady_ssmt1
, da_jo_and_grady_ssmt2
,da_jo_and_grady_ssmi_tb
, &
124 da_jo_and_grady_ssmi_rv
, &
125 da_residual_ssmt1
,da_residual_ssmt2
, da_ao_stats_ssmi_rv
126 use da_synop
, only
: da_calculate_grady_synop
, da_ao_stats_synop
, &
127 da_oi_stats_synop
, da_get_innov_vector_synop
, da_residual_synop
, &
128 da_jo_and_grady_synop
129 use da_statistics
, only
: da_analysis_stats
, da_print_qcstat
130 use da_tools_serial
, only
: da_get_unit
,da_free_unit
131 use da_tracing
, only
: da_trace_entry
, da_trace_exit
,da_trace
132 use da_transfer_model
, only
: da_transfer_wrftltoxa
,da_transfer_xatowrftl
, &
133 da_transfer_xatowrftl_adj
,da_setup_firstguess
,da_transfer_wrftltoxa_adj
134 #
if defined(RTTOV
) ||
defined(CRTM
)
135 use da_varbc
, only
: da_varbc_tl
,da_varbc_adj
137 use da_vtox_transforms
, only
: da_transform_vtox
,da_transform_vtox_adj
,da_transform_xtoxa
,da_transform_xtoxa_adj
138 use da_wrf_interfaces
, only
: wrf_dm_bcast_real
, wrf_get_dm_communicator
139 use da_wrfvar_io
, only
: da_med_initialdata_input
140 use module_symbols_util
, only
: wrfu_finalize
141 use da_lapack
, only
: dsteqr
145 private
:: da_dot
, da_dot_cv
149 #
include "da_calculate_j.inc"
150 #
include "da_calculate_gradj.inc"
151 #
include "da_jo_and_grady.inc"
152 #
include "da_calculate_residual.inc"
153 #
include "da_get_var_diagnostics.inc"
154 #
include "da_get_innov_vector.inc"
155 #
include "da_dot.inc"
156 #
include "da_dot_cv.inc"
157 #
include "da_write_diagnostics.inc"
158 #
include "da_minimise_cg.inc"
159 #
include "da_minimise_lz.inc"
160 #
include "da_calculate_grady.inc"
161 #
include "da_transform_vtoy.inc"
162 #
include "da_transform_vtoy_adj.inc"
163 #
include "da_adjoint_sensitivity.inc"
164 #
include "da_sensitivity.inc"
165 end module da_minimisation