Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion Registry/registry.var
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,8 @@ rconfig integer num_fgat_time namelist,wrfvar3 1 1 - "num
rconfig logical thin_conv namelist,wrfvar4 1 .true. - "thin_conv" "" ""
rconfig logical thin_conv_ascii namelist,wrfvar4 1 .false. - "thin_conv_ascii" "" ""
rconfig integer thin_conv_opt namelist,wrfvar4 num_ob_indexes 1 - "thin_conv_opt" "" "0=no thinning, >0:thinning on"
rconfig real thin_mesh_conv namelist,wrfvar4 num_ob_indexes 20.0 - "thin_mesh_conv" "" ""
rconfig real thin_mesh_conv namelist,wrfvar4 num_ob_indexes 20.0 - "thin_mesh_conv" "horizontal thinning mesh" "km"
rconfig real thin_mesh_vert_conv namelist,wrfvar4 num_ob_indexes 100.0 - "thin_mesh_vert_conv" "vertical thinning mesh" "hPa"
rconfig logical thin_rainobs namelist,wrfvar4 1 .true. - "thin_rainobs" "" ""
rconfig logical use_synopobs namelist,wrfvar4 1 .true. - "use_synopobs" "" ""
rconfig logical use_shipsobs namelist,wrfvar4 1 .true. - "use_shipsobs" "" ""
Expand All @@ -148,6 +149,7 @@ rconfig logical use_pilotobs namelist,wrfvar4 1 .true. - "use
rconfig logical use_airepobs namelist,wrfvar4 1 .true. - "use_airepobs" "" ""
rconfig logical use_geoamvobs namelist,wrfvar4 1 .true. - "use_geoamvobs" "" ""
rconfig logical use_polaramvobs namelist,wrfvar4 1 .true. - "use_polaramvobs" "" ""
rconfig logical use_satwnd_bufr namelist,wrfvar4 1 .true. - "use_satwnd_bufr" "if reading from satwnd.bufr" ""
rconfig logical use_bogusobs namelist,wrfvar4 1 .true. - "use_bogusobs" "" ""
rconfig logical use_buoyobs namelist,wrfvar4 1 .true. - "use_buoyobs" "" ""
rconfig logical use_profilerobs namelist,wrfvar4 1 .true. - "use_profilerobs" "" ""
Expand Down Expand Up @@ -528,6 +530,8 @@ rconfig real gpsref_qc_pcnt_h2 namelist,obs_opt 1 25000.0 - "gp
rconfig real gpsref_qc_pcnt_below namelist,obs_opt 1 0.05 - "gpsref_qc_pcnt_below" "error percentage threshold below" ""
rconfig real gpsref_qc_pcnt_middle namelist,obs_opt 1 0.04 - "gpsref_qc_pcnt_middle" "error percentage threshold middle" ""
rconfig real gpsref_qc_pcnt_above namelist,obs_opt 1 0.10 - "gpsref_qc_pcnt_above" "error percentage threshold above" ""
rconfig integer uv_error_opt namelist,obs_opt num_ob_indexes 3 - "uv_error_opt" "" "1: single uv_error_val, 2: from table, 3: from ob input"
rconfig real uv_error_val namelist,obs_opt num_ob_indexes 2.5 - "uv_error_val" "" "m/s"
rconfig logical jcdfi_use namelist,perturbation 1 .false. - "jcdfi_use" "JcDFI on/off" ""
rconfig integer jcdfi_diag namelist,perturbation 1 1 - "jcdfi_diag" "JcDFI diag. on/off" ""
rconfig real jcdfi_penalty namelist,perturbation 1 10. - "jcdfi_penalty" "Penalty parameter for JcDF" ""
Expand Down
52 changes: 46 additions & 6 deletions var/README.namelist
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,26 @@ Description of WRFDA namelist variables, defined in Registry/registry.var
; data are "thinned" within thinning routine, however,
; thin_conv can be set to .false. for debugging purpose.
thin_conv_ascii = .false. ; .true.: thinning for ob_format=2 (ASCII) observations
thin_mesh_conv (max_instruments) = 20.0 ; km, size of thinning mesh boxes for conventional (non-radiance)
thin_conv_opt (num_ob_indexes) = 1 ; when thin_conv=true or thin_conv_ascii=true, each ob type
; can set its thin_conv_opt.
; the index/order of each ob type follows the definition in
; WRFDA/var/da/da_control/da_control.f90
; when thin_conv=false or thin_conv_ascii=false, WRFDA sets thin_conv_opt(:)=0
; 0: no thinning
; 1: thinning is on, keep one ob within a thinning box
; 2: keep multiple obs within a thinning box, only applies to use_satwnd_bufr (polaramv)
; 3: superob in horizontal, only applies to use_satwnd_bufr (polaramv)
; 4: superob in horizontal and vertical (need to set also thin_mesh_vert_conv),
; only applies to use_satwnd_bufr (polaramv)
thin_mesh_conv (num_ob_indexes) = 20.0 ; km, size of horizontal thinning mesh boxes for conventional (non-radiance)
; observations. Each observation type can set its thinning mesh and
; the index/order follows the definition in
; WRFDA/var/da/da_control/da_control.f90
thin_mesh_vert_conv(num_ob_indexes) = 100.0 ; hPa, size of vertical thinning mesh boxes for conventional (non-radiance)
; observations. Each observation type can set its thinning mesh and
; the index/order of each ob type follows the definition in
; WRFDA/var/da/da_control/da_control.f90
; only used when thin_conv_opt=4 and only implemented for use_satwnd_bufr (polaramv)
; use_xxxobs - .true.: assimilate xxx obs if available
; .false.: do not assimilate xxx obs even if available
use_synopobs = .true.
Expand All @@ -103,6 +119,10 @@ Description of WRFDA namelist variables, defined in Registry/registry.var
use_airepobs = .true.
use_geoamvobs = .true.
use_polaramvobs = .true.
use_satwnd_bufr = .true. ; when ob_format=1 and satwnd.bufr exists in the working directory
; satellite AMVs are read in from satwnd.bufr and processed as polaramv
; this is to add additional AMVs that are not included in prepBUFR
; AMVs from prepBUFR are processed as geoamv in WRFDA
use_bogusobs = .true.
use_buoyobs = .true.
use_profilerobs = .true.
Expand Down Expand Up @@ -228,11 +248,11 @@ Description of WRFDA namelist variables, defined in Registry/registry.var
; control variable 5 is unbalanced surface pressure for cv_options=5 and 6.
; control variable 5 is surface pressure for cv_options=7.
var_scaling6 (max_outer_iterations) = 1.0 ; cloud liquid water
var_scaling6 (max_outer_iterations) = 1.0 ; rain water
var_scaling6 (max_outer_iterations) = 1.0 ; ice water
var_scaling6 (max_outer_iterations) = 1.0 ; snow
var_scaling6 (max_outer_iterations) = 1.0 ; grauple
var_scaling6 (max_outer_iterations) = 1.0 ; vertical velocity
var_scaling7 (max_outer_iterations) = 1.0 ; rain water
var_scaling8 (max_outer_iterations) = 1.0 ; ice water
var_scaling9 (max_outer_iterations) = 1.0 ; snow
var_scaling10(max_outer_iterations) = 1.0 ; graupel
var_scaling11(max_outer_iterations) = 1.0 ; vertical velocity
; see the above description about the meaning of control variables 1-5.
len_scaling1 (max_outer_iterations) = 1.0 ; tuning factor of scale-length for control variable 1.
len_scaling2 (max_outer_iterations) = 1.0 ; tuning factor of scale-length for control variable 2.
Expand Down Expand Up @@ -582,6 +602,26 @@ Description of WRFDA namelist variables, defined in Registry/registry.var
gpsro_drift = 1 ; horizontal drifting for GPSRO. 0=no drift, 1=drift
gpseph_opt = 1 ; 0: local operator variant, 1: non-local
gpseph_loadbalance = .true. ;
write_iv_gpsref = .false. ; switch to write out RO_Innov_ files
; the following gpsref_qc settings are used in da_qc_gpsref.inc
gpsref_qc_dndz_opt = 1 ; 0: off, 1: on (default)
gpsref_qc_dndz2_opt = 1 ; 0: off, 1: on (default)
gpsref_qc_dndz_thresh = -50.0
gpsref_qc_dndz2_thresh = 100.0
gpsref_qc_gsi_opt = 1 ; 0: off, 1: on (default)
gpsref_qc_pcnt_opt = 1 ; 0: off, 1: on (default)
gpsref_qc_pcnt_h1 = 7000.0
gpsref_qc_pcnt_h2 = 25000.0
gpsref_qc_pcnt_below = 0.05
gpsref_qc_pcnt_middle = 0.04
gpsref_qc_pcnt_above = 0.10
; uv_error_opt and uv_error_opt are only used by use_satwnd_bufr (polaramv)
uv_error_opt (num_ob_indexes) = 3 ; 1: single uv_error_val
; 2: from external obs error table (same format as used in GSI)
; 3: from ob input
; when ob errors are not available from ob input and obs_errtable,
; WRFDA uses uv_error_val from namelist (below) for use_satwnd_bufr (polaramv).
uv_error_val (num_ob_indexes) = 2.5 ; m/s, uv observation error
/
&perturbation ; settings related to the 4D-Var penalty term option, which controls the
; high-frequency gravity waves using a digital filter.
Expand Down
2 changes: 1 addition & 1 deletion var/build/depend.txt
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ da_mtgirs.o : da_mtgirs.f90 da_calculate_grady_mtgirs.inc da_get_innov_vector_mt
da_netcdf_interface.o : da_netcdf_interface.f90 da_atotime.inc da_get_bdytimestr_cdf.inc da_get_bdyfrq.inc da_put_att_cdf.inc da_get_att_cdf.inc da_put_var_2d_int_cdf.inc da_get_var_2d_int_cdf.inc da_put_var_2d_real_cdf.inc da_put_var_3d_real_cdf.inc da_get_var_2d_real_cdf.inc da_get_var_3d_real_cdf.inc da_get_gl_att_real_cdf.inc da_get_gl_att_int_cdf.inc da_get_dims_cdf.inc da_get_times_cdf.inc da_get_var_1d_real_cdf.inc
da_obs.o : da_obs.f90 da_grid_definitions.o da_set_obs_missing.inc da_obs_sensitivity.inc da_count_filtered_obs.inc da_store_obs_grid_info_rad.inc da_store_obs_grid_info.inc da_random_omb_all.inc da_fill_obs_structures.inc da_fill_obs_structures_rain.inc da_fill_obs_structures_radar.inc da_check_missing.inc da_add_noise_to_ob.inc da_transform_xtoy_adj.inc da_transform_xtoy.inc da_obs_proc_station.inc module_dm.o da_tracing.o da_tools.o da_tools_serial.o da_synop.o da_ssmi.o da_tamdar.o da_mtgirs.o da_sound.o da_ships.o da_satem.o da_rttov.o da_reporting.o da_rain.o da_radar.o da_qscat.o da_pseudo.o da_profiler.o da_polaramv.o da_pilot.o da_physics.o da_metar.o da_gpsref.o da_gpspw.o da_geoamv.o da_crtm.o da_control.o da_buoy.o da_bogus.o da_airsr.o da_airep.o module_domain.o da_define_structures.o da_gpseph.o module_state_description.o da_fill_obs_structures_chem_sfc.inc da_chem_sfc.o
da_chem_sfc.o: da_chem_sfc.f90 da_jo_and_grady_chem_sfc.inc da_jo_chem_sfc.inc da_residual_chem_sfc.inc da_transform_xtoy_chem_sfc.inc da_transform_xtoy_chem_sfc_adj.inc da_get_innov_vector_chem_sfc.inc da_check_max_iv_chem_sfc.inc da_calculate_grady_chem_sfc.inc da_interpolation.o module_dm.o module_domain.o da_control.o da_reporting.o da_tools_serial.o da_tools.o da_define_structures.o da_obs.o da_define_structures.o da_ao_stats_chem_sfc.inc da_oi_stats_chem_sfc.inc da_print_stats_chem_sfc.inc
da_obs_io.o : da_obs_io.f90 da_grid_definitions.o da_final_write_modified_filtered_obs.inc da_final_write_filtered_obs.inc da_write_noise_to_ob.inc da_read_omb_tmp.inc da_read_rand_unit.inc da_read_y_unit.inc da_final_write_y.inc da_final_write_obs.inc da_read_obs_bufrgpsro.inc da_read_obs_bufr.inc da_write_y.inc da_write_modified_filtered_obs.inc da_write_filtered_obs.inc da_write_obs_etkf.inc da_search_obs.inc da_read_iv_for_multi_inc.inc da_write_iv_for_multi_inc.inc da_write_obs.inc da_use_obs_errfac.inc da_read_errfac.inc da_read_obs_rain.inc da_scan_obs_rain.inc da_scan_obs_radar.inc da_read_obs_radar.inc da_scan_obs_ascii.inc da_read_obs_ascii.inc da_par_util.o gsi_thinning.o module_radiance.o da_tracing.o da_tools_serial.o da_tools.o da_reporting.o da_physics.o da_par_util1.o da_obs.o da_grid_definitions.o da_define_structures.o da_control.o module_domain.o da_read_lsac_util.inc da_read_obs_lsac.inc da_scan_obs_lsac.inc da_netcdf_interface.o da_gpseph.o da_read_obs_bufrgpsro_eph.inc da_read_obs_chem_sfc.inc da_scan_obs_chem_sfc.inc da_write_obs_chem_sfc.inc da_final_write_obs_chem_sfc.inc da_final_write_obs_gas_sfc.inc
da_obs_io.o : da_obs_io.f90 da_grid_definitions.o da_final_write_modified_filtered_obs.inc da_final_write_filtered_obs.inc da_write_noise_to_ob.inc da_read_omb_tmp.inc da_read_rand_unit.inc da_read_y_unit.inc da_final_write_y.inc da_final_write_obs.inc da_read_obs_bufrgpsro.inc da_read_obs_bufr.inc da_write_y.inc da_write_modified_filtered_obs.inc da_write_filtered_obs.inc da_write_obs_etkf.inc da_search_obs.inc da_read_iv_for_multi_inc.inc da_write_iv_for_multi_inc.inc da_write_obs.inc da_use_obs_errfac.inc da_read_errfac.inc da_read_obs_rain.inc da_scan_obs_rain.inc da_scan_obs_radar.inc da_read_obs_radar.inc da_scan_obs_ascii.inc da_read_obs_ascii.inc da_par_util.o gsi_thinning.o module_radiance.o da_tracing.o da_tools_serial.o da_tools.o da_reporting.o da_physics.o da_par_util1.o da_obs.o da_grid_definitions.o da_define_structures.o da_control.o module_domain.o da_read_lsac_util.inc da_read_obs_lsac.inc da_scan_obs_lsac.inc da_netcdf_interface.o da_gpseph.o da_read_obs_bufrgpsro_eph.inc da_read_obs_chem_sfc.inc da_scan_obs_chem_sfc.inc da_write_obs_chem_sfc.inc da_final_write_obs_chem_sfc.inc da_final_write_obs_gas_sfc.inc da_read_obs_bufr_satwnd.inc
da_par_util.o : da_par_util.f90 da_proc_maxmin_combine.inc da_proc_stats_combine.inc da_system.inc da_y_facade_to_global.inc da_generic_boilerplate.inc da_deallocate_global_synop.inc da_deallocate_global_sound.inc da_deallocate_global_sonde_sfc.inc da_generic_methods.inc da_patch_to_global_3d.inc da_patch_to_global_dual_res.inc da_patch_to_global_2d.inc da_cv_to_global.inc da_transpose_y2x_v2.inc da_transpose_x2y_v2.inc da_transpose_z2y.inc da_transpose_y2z.inc da_transpose_x2z.inc da_transpose_z2x.inc da_transpose_y2x.inc da_transpose_x2y.inc da_unpack_count_obs.inc da_pack_count_obs.inc da_copy_tile_dims.inc da_copy_dims.inc da_alloc_and_copy_be_arrays.inc da_vv_to_cv.inc da_cv_to_vv.inc da_generic_typedefs.inc da_wrf_interfaces.o da_tracing.o da_reporting.o da_define_structures.o da_par_util1.o module_dm.o module_domain.o da_control.o
da_par_util1.o : da_par_util1.f90 da_proc_sum_real.inc da_proc_sum_ints.inc da_proc_sum_int.inc da_control.o module_state_description.o
da_physics.o : da_physics.f90 da_uv_to_sd_lin.inc da_uv_to_sd_adj.inc da_integrat_dz.inc da_wdt.inc da_filter_adj.inc da_filter.inc da_evapo_lin.inc da_condens_lin.inc da_condens_adj.inc da_moist_phys_lin.inc da_moist_phys_adj.inc da_sfc_pre_adj.inc da_sfc_pre_lin.inc da_sfc_pre.inc da_transform_xtowtq_adj.inc da_transform_xtowtq.inc da_transform_xtopsfc_adj.inc da_transform_xtopsfc.inc da_sfc_wtq_adj.inc da_sfc_wtq_lin.inc da_sfc_wtq.inc da_julian_day.inc da_roughness_from_lanu.inc da_get_q_error.inc da_check_rh_simple.inc da_check_rh.inc da_transform_xtogpsref_lin.inc da_transform_xtogpsref_adj.inc da_transform_xtogpsref.inc da_transform_xtotpw_adj.inc da_transform_xtotpw.inc da_transform_xtoztd_adj.inc da_transform_xtoztd_lin.inc da_transform_xtoztd.inc da_tv_profile_tl.inc da_thickness_tl.inc da_find_layer_adj.inc da_thickness.inc da_tv_profile_adj.inc da_find_layer.inc da_thickness_adj.inc da_find_layer_tl.inc da_tv_profile.inc da_tpq_to_slp_adj.inc da_tpq_to_slp_lin.inc da_wrf_tpq_2_slp.inc da_tpq_to_slp.inc da_trh_to_td.inc da_tp_to_qs_lin1.inc da_tp_to_qs_lin.inc da_tp_to_qs_adj1.inc da_tp_to_qs_adj.inc da_tp_to_qs1.inc da_tp_to_qs.inc da_tprh_to_q_lin1.inc da_tprh_to_q_lin.inc da_tprh_to_q_adj1.inc da_tprh_to_q_adj.inc da_tpq_to_rh_lin1.inc da_tpq_to_rh_lin.inc da_tpq_to_rh.inc da_pt_to_rho_lin.inc da_pt_to_rho_adj.inc da_uvprho_to_w_adj.inc da_uvprho_to_w_lin.inc da_prho_to_t_lin.inc da_prho_to_t_adj.inc da_wrf_interfaces.o da_reporting.o da_dynamics.o da_interpolation.o da_tracing.o da_par_util.o da_define_structures.o da_control.o module_comm_dm.o module_dm.o module_domain.o da_grid_definitions.o da_gpseph.o
Expand Down
8 changes: 7 additions & 1 deletion var/da/da_control/da_control.f90
Original file line number Diff line number Diff line change
Expand Up @@ -690,6 +690,12 @@ module da_control

logical, allocatable :: fgat_rain_flags(:)

integer, parameter :: no_thin = 0
integer, parameter :: no_thin = 0 ! no thinning
integer, parameter :: thin_single = 1 ! keep one ob within a thinning box
integer, parameter :: thin_multi = 2 ! keep multiple obs within a thinning box
integer, parameter :: thin_superob = 3 ! superob in 2-D thinning boxes
integer, parameter :: thin_superob_hv = 4 ! superob in horizontal and vertical

integer, parameter :: error_opt_nml = 1 ! ob error specified in namelist

end module da_control
8 changes: 7 additions & 1 deletion var/da/da_obs_io/da_obs_io.f90
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ module da_obs_io
lsac_use_u, lsac_use_v, lsac_use_t, lsac_use_q, lsac_u_error, lsac_v_error, lsac_t_error, lsac_q_error, &
gpsro_drift, max_gpseph_input, use_gpsephobs, gpseph, gpseph_loadbalance, kds, kde, kts, kte, &
use_radar_rhv, use_radar_rqv, use_radar_rf, use_radar_rv, multi_inc, &
thin_conv_opt, no_thin
thin_conv_opt, no_thin, thin_single, thin_multi, thin_superob, thin_superob_hv, &
thin_mesh_vert_conv, use_satwnd_bufr, uv_error_opt, uv_error_val, error_opt_nml

use da_wrf_interfaces, only : wrf_dm_bcast_integer, wrf_dm_bcast_real

Expand Down Expand Up @@ -86,6 +87,10 @@ module da_obs_io
include 'mpif.h'
#endif

! array to hold observation error table
! (300,33,6) ! 300 ob types, 33 levels (rows), 6 variables (columns)
real, allocatable :: oetab(:,:,:)

contains

#include "da_read_obs_ascii.inc"
Expand Down Expand Up @@ -125,5 +130,6 @@ module da_obs_io
#include "da_read_lsac_util.inc"
#include "da_read_obs_lsac.inc"
#include "da_scan_obs_lsac.inc"
#include "da_read_obs_bufr_satwnd.inc"

end module da_obs_io
30 changes: 2 additions & 28 deletions var/da/da_obs_io/da_read_obs_bufr.inc
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ subroutine da_read_obs_bufr (iv)

logical :: use_errtable
integer :: junit, itype, ivar
real :: oetab(300,33,6) ! 300 ob types, 33 levels (rows), 6 variables (columns)
real :: err_uv, err_t, err_p, err_q, err_pw, coef
integer :: ibufr
integer :: num_outside_all, num_outside_time, num_thinned,num_p,numbufr
Expand Down Expand Up @@ -199,29 +198,6 @@ bufrfile: do ibufr=1,numbufr
cycle bufrfile
end if
end if
! open observation error table if provided.
call da_get_unit(junit)
open (unit=junit, file='obs_errtable', form='formatted', status='old', &
iostat=iost)
if ( iost /= 0 ) then
use_errtable = .false.
call da_free_unit(junit)
else
use_errtable = .true.
write(unit=message(1),fmt='(A)') &
"obs_errtable file is found. Will use user-provided obs errors."
call da_message(message(1:1))
end if
if ( use_errtable ) then
read_loop: do
read (junit,'(1x,i3)',iostat=iost) itype
if ( iost /=0 ) exit read_loop
do k = 1, 33
read (junit,'(1x,6e12.5)',iostat=iost) (oetab(itype,k,ivar),ivar=1,6)
if ( iost /=0 ) exit read_loop
end do
end do read_loop
end if

hdstr='SID XOB YOB DHR TYP ELV T29'
obstr='POB QOB TOB ZOB UOB VOB PWO CAT' ! observation
Expand All @@ -246,6 +222,8 @@ bufrfile: do ibufr=1,numbufr
write(unit=message(1),fmt='(a,i10)') 'BUFR file date is: ', idate
call da_message(message(1:1))

! oetab(300,33,6) processed in da_setup_obs_structures_bufr.inc
use_errtable = allocated(oetab)

! 2.0 read data
! scan reports first
Expand Down Expand Up @@ -1152,10 +1130,6 @@ bufrfile: do ibufr=1,numbufr

call closbf(iunit)
close(iunit)
if ( use_errtable ) then
close(junit)
call da_free_unit(junit)
end if

end do bufrfile

Expand Down
Loading