da_minimisation.f90

References to this file elsewhere.
1 module da_minimisation
2 
3    !---------------------------------------------------------------------------
4    ! Purpose: Collection of routines associated with minimisation. 
5    !---------------------------------------------------------------------------
6 
7    use module_configure, only : grid_config_rec_type,nl_set_dyn_opt
8    use module_dm, only : wrf_dm_sum_real
9    use module_domain, only : domain, xpose_type, x_type, ep_type, vp_type, &
10       xb_type
11    use module_state_description, only : dyn_em,dyn_em_tl
12 
13 !#ifdef DM_PARALLEL
14 !   use mpi, only : mpi_barrier
15 !#endif
16 
17    use da_airep, only : da_calculate_grady_airep, da_ao_stats_airep, &
18       da_oi_stats_airep, da_get_innov_vector_airep, da_residual_airep, &
19       da_jo_and_grady_airep
20    use da_airsr , only : da_calculate_grady_airsr, da_ao_stats_airsr, &
21       da_oi_stats_airsr, da_get_innov_vector_airsr, da_residual_airsr, &
22       da_jo_and_grady_airsr
23    use da_bogus, only : da_calculate_grady_bogus, da_ao_stats_bogus, &
24       da_oi_stats_bogus, da_get_innov_vector_bogus, da_residual_bogus, &
25       da_jo_and_grady_bogus
26    use da_buoy , only : da_calculate_grady_buoy, da_ao_stats_buoy, &
27       da_oi_stats_buoy,da_get_innov_vector_buoy, da_residual_buoy, &
28       da_jo_and_grady_buoy
29    use da_control, only : trace_use,var4d_coupling_disk_simul, &
30       var4d, rootproc,jcdfi_use,var4d_coupling,ierr,comm,num_fgat_time, &
31       stdout, eps, stats_unit, testing_dm_exact, global, &
32       calculate_cg_cost_fn,anal_type_randomcv,cv_size_domain,je_factor, &
33       jb_factor,ntmax,omb_add_noise,write_iv_rad_ascii,use_obs_errfac, &
34       rtm_option,rtm_option_rttov, rtm_option_crtm, &
35       write_filtered_rad,omb_set_rand, num_airsr_tot,jo_unit,num_airep_tot, &
36       num_buoy_tot,num_geoamv_tot,num_gpsref_tot,num_pilot_tot, &
37       num_polaramv_tot,num_radiance_tot,num_qscat_tot,num_profiler_tot, &
38       num_metar_tot,num_gpspw_tot,num_bogus_tot,num_sound_tot,num_ssmi_tot, &
39       num_ships_tot,num_ssmt2_tot,use_rad,var_scaling2,var_scaling1, &
40       num_synop_tot,var_scaling4,var_scaling5,var_scaling3,num_ssmt1_tot, &
41       num_satem_tot,print_detail_grad,omb_set_rand,grad_unit,cost_unit, &
42       cv_size_domain_je,cv_size_domain_jb, monitor_on
43 #ifdef CRTM
44    use da_crtm, only : da_get_innov_vector_crtm
45                        !da_get_innov_vector_crtmk
46 #endif
47    use da_define_structures, only : ob_type, y_type, j_type, be_type, &
48       xbx_type, jo_type, da_allocate_y,da_zero_x,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
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
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_noise_to_ob, da_use_obs_errfac
62    use da_metar, only : da_calculate_grady_metar, da_ao_stats_metar, &
63       da_oi_stats_metar, da_get_innov_vector_metar, da_residual_metar, &
64       da_jo_and_grady_metar
65    use da_pilot, only : da_calculate_grady_pilot, da_ao_stats_pilot, &
66       da_oi_stats_pilot, da_get_innov_vector_pilot, da_residual_pilot, &
67       da_jo_and_grady_pilot
68    use da_par_util, only : da_system,da_cv_to_global
69    use da_par_util1, only : da_proc_sum_real,da_proc_sum_ints
70    use da_polaramv, only : da_calculate_grady_polaramv, da_ao_stats_polaramv, &
71       da_oi_stats_polaramv, da_get_innov_vector_polaramv, da_residual_polaramv, &
72       da_jo_and_grady_polaramv
73    use da_profiler, only : da_calculate_grady_profiler, da_ao_stats_profiler, &
74       da_oi_stats_profiler,da_get_innov_vector_profiler, da_residual_profiler, &
75       da_jo_and_grady_profiler
76    use da_pseudo, only : da_calculate_grady_pseudo, da_ao_stats_pseudo, &
77       da_oi_stats_pseudo, da_get_innov_vector_pseudo, da_residual_pseudo, &
78       da_jo_and_grady_pseudo
79    use da_qscat, only : da_calculate_grady_qscat, da_ao_stats_qscat, &
80       da_oi_stats_qscat, da_get_innov_vector_qscat, da_residual_qscat, &
81       da_jo_and_grady_qscat
82    use da_radiance, only : da_calculate_grady_rad, da_write_filtered_rad
83    use da_radiance1, only : da_ao_stats_rad,da_oi_stats_rad, &
84       da_write_iv_rad_ascii,da_residual_rad,da_jo_and_grady_rad
85    use da_radar, only :  da_calculate_grady_radar, da_ao_stats_radar, &
86       da_oi_stats_radar, da_get_innov_vector_radar, da_residual_radar, &
87       da_jo_and_grady_radar
88    use da_reporting, only : da_message, da_warning
89    use da_rttov, only : da_get_innov_vector_rttov
90    use da_satem, only : da_calculate_grady_satem, da_ao_stats_satem, &
91       da_oi_stats_satem, da_get_innov_vector_satem, da_residual_satem, &
92       da_jo_and_grady_satem
93    use da_ships, only : da_calculate_grady_ships, da_ao_stats_ships, &
94       da_oi_stats_ships, da_get_innov_vector_ships, da_residual_ships, &
95       da_jo_and_grady_ships
96    use da_sound, only : da_calculate_grady_sound,da_calculate_grady_sonde_sfc, &
97       da_ao_stats_sound, da_oi_stats_sound,da_oi_stats_sound, &
98       da_oi_stats_sonde_sfc,da_ao_stats_sonde_sfc,da_get_innov_vector_sound, &
99       da_get_innov_vector_sonde_sfc,da_jo_and_grady_sound, da_residual_sound, &
100       da_jo_and_grady_sound,da_jo_and_grady_sonde_sfc,da_residual_sonde_sfc
101    use da_ssmi, only : da_calculate_grady_ssmi,da_calculate_grady_ssmt1, &
102       da_calculate_grady_ssmt2, da_ao_stats_ssmi,da_ao_stats_ssmt2, &
103       da_ao_stats_ssmt2, da_oi_stats_ssmt1, da_oi_stats_ssmt2, &
104       da_oi_stats_ssmi,da_ao_stats_ssmt1,da_get_innov_vector_ssmi, &
105       da_get_innov_vector_ssmt1,da_get_innov_vector_ssmt2, da_residual_ssmi, &
106       da_jo_and_grady_ssmt1, da_jo_and_grady_ssmt2,da_jo_and_grady_ssmi, &
107       da_residual_ssmt1,da_residual_ssmt2
108    use da_synop, only : da_calculate_grady_synop, da_ao_stats_synop, &
109       da_oi_stats_synop, da_get_innov_vector_synop, da_residual_synop, &
110       da_jo_and_grady_synop
111    use da_statistics, only : da_analysis_stats
112    use da_tools1, only : da_get_unit,da_free_unit
113    use da_tracing, only : da_trace_entry, da_trace_exit,da_trace
114    use da_transfer_model, only : da_transfer_wrftltoxa,da_transfer_xatowrftl, &
115       da_transfer_xatowrftl_adj,da_setup_firstguess,da_transfer_wrftltoxa_adj
116    use da_vtox_transforms, only : da_transform_vtox,da_transform_vtox_adj
117    use da_wrf_interfaces, only : wrf_dm_bcast_real, wrf_get_dm_communicator
118    use da_wrfvar_io, only : da_med_initialdata_input
119 
120    implicit none
121 
122    private :: da_dot, da_dot_cv
123 
124 contains
125       
126 #include "da_calculate_j.inc"
127 #include "da_jo_and_grady.inc"
128 #include "da_calculate_residual.inc"
129 #include "da_get_var_diagnostics.inc"
130 #include "da_get_innov_vector.inc"
131 #include "da_dot.inc"
132 #include "da_dot_cv.inc"
133 #include "da_write_diagnostics.inc"
134 #include "da_minimise_cg.inc"
135 #include "da_calculate_grady.inc"
136 #include "da_transform_vtoy.inc"
137 #include "da_transform_vtoy_adj.inc"
138 
139 end module da_minimisation