Merge remote-tracking branch 'origin/release-v4.5.2'
[WRF.git] / var / da / da_par_util / da_par_util.f90
blobe557f27cfcfb9af7e45cfb36c09548a091d2e362
1 module da_par_util
3 !---------------------------------------------------------------------------
4 ! Purpose: Routines for local-to-global and global-to-local grid operations.
6 ! METHOD: RSL/MPI.
7 !---------------------------------------------------------------------------
9 use da_control, only: use_rf
10 #if (WRF_CHEM != 1)
11 use module_domain, only : domain, xpose_type
12 #else
13 use module_domain, only : domain, xpose_type, xchem_type
14 #endif
16 #ifdef DM_PARALLEL
17 use module_dm, only : local_communicator_x, &
18 local_communicator_y, ntasks_x, ntasks_y, data_order_xyz
19 use da_par_util1, only : true_mpi_real, true_mpi_complex
20 ! use mpi, only : mpi_2double_precision, mpi_status_size, &
21 ! mpi_integer, mpi_maxloc, mpi_status_size, &
22 ! mpi_minloc, mpi_sum
23 #else
24 use da_reporting, only : message
25 #endif
27 #if (WRF_CHEM == 1)
28 use module_state_description, only : num_chem, PARAM_FIRST_SCALAR
29 #endif
31 use da_define_structures, only : be_subtype, &
32 x_type, vp_type, residual_synop_type, residual_sound_type, iv_type, &
33 y_type, count_obs_number_type, maxmin_field_type
35 use da_control, only : trace_use,num_ob_indexes, myproc, root, comm, ierr, &
36 rootproc, num_procs, stdout, print_detail_parallel, its,ite, jts, jte, &
37 kts,kte,ids,ide,jds,jde,kds,kde,ims,ime,jms,jme,kms,kme,ips,ipe,jps,jpe, &
38 kps, kpe, grid_stagger, grid_ordering, trace_use_dull, &
39 sound, synop, pilot, satem, geoamv, polaramv, airep, gpspw, gpsref, &
40 metar, ships, ssmi_rv, ssmi_tb, ssmt1, ssmt2, qscat, profiler, buoy, bogus, &
41 pseudo, radar, radiance, airsr, sonde_sfc, trace_use_frequent, &
42 its_int,ite_int,jts_int,jte_int,kts_int,kte_int, &
43 ims_int,ime_int,jms_int,jme_int,kms_int,kme_int, &
44 ids_int,ide_int,jds_int,jde_int,kds_int,kde_int, &
45 ips_int,ipe_int,jps_int,jpe_int,kps_int,kpe_int, &
46 anal_type_hybrid_dual_res
47 use da_reporting, only : da_error
48 use da_tracing, only : da_trace_entry, da_trace_exit
49 use da_wrf_interfaces, only : &
50 wrf_dm_xpose_z2x, wrf_dm_xpose_x2y, wrf_dm_xpose_y2x, wrf_dm_xpose_x2z, &
51 wrf_dm_xpose_z2y, wrf_dm_xpose_y2z, wrf_patch_to_global_real, wrf_debug, &
52 wrf_dm_bcast_integer, wrf_dm_bcast_real
54 implicit none
56 #ifdef DM_PARALLEL
57 include 'mpif.h'
58 #endif
60 #include "da_generic_typedefs.inc"
62 interface da_patch_to_global
63 module procedure da_patch_to_global_2d
64 module procedure da_patch_to_global_3d
65 end interface
67 contains
69 #include "da_cv_to_vv.inc"
70 #include "da_vv_to_cv.inc"
71 #include "da_alloc_and_copy_be_arrays.inc"
72 #include "da_copy_dims.inc"
73 #include "da_copy_tile_dims.inc"
74 #include "da_pack_count_obs.inc"
75 #include "da_unpack_count_obs.inc"
76 #include "da_transpose_x2y.inc"
77 #include "da_transpose_y2x.inc"
78 #include "da_transpose_z2x.inc"
79 #include "da_transpose_x2z.inc"
80 #include "da_transpose_y2z.inc"
81 #include "da_transpose_z2y.inc"
82 #include "da_transpose_x2y_v2.inc"
83 #include "da_transpose_y2x_v2.inc"
85 #include "da_cv_to_global.inc"
86 #include "da_patch_to_global_2d.inc"
87 #include "da_patch_to_global_3d.inc"
88 #include "da_generic_methods.inc"
89 #include "da_deallocate_global_sonde_sfc.inc"
90 #include "da_deallocate_global_sound.inc"
91 #include "da_deallocate_global_synop.inc"
92 #include "da_generic_boilerplate.inc"
93 #include "da_y_facade_to_global.inc"
94 #include "da_system.inc"
96 #include "da_patch_to_global_dual_res.inc"
98 #ifdef DM_PARALLEL
99 #include "da_proc_stats_combine.inc"
100 #include "da_proc_maxmin_combine.inc"
101 #else
102 #include "da_wrf_dm_interface.inc"
103 #endif
105 end module da_par_util