Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new capability for surface chemical DA #1348

Merged
merged 33 commits into from
Dec 29, 2020

Conversation

liujake
Copy link
Contributor

@liujake liujake commented Dec 28, 2020

TYPE: new feature

KEYWORDS: Chemical DA, Surface Observations, 3DVar, GENBE_2.0

SOURCE: Wei Sun (NCAR/MMM, CAS), Jake Liu (NCAR/MMM), Dan Chen (IUM, Beijing)

DESCRIPTION OF CHANGES:

  1. This PR adds the new capability for assimilating the surface chemical/aerosol observations (pm2.5, pm10, O3, NO2, SO2, CO) using 3DVar.

  2. Several new namelist parameters are defined in registry.var_chem under wrfvarchem. The setting of chemicda_opt only works for MOSAIC scheme. The inflation factors of chemical background errors work for both aerosol schemes, but they are only tested under the MOSAIC scheme.

&wrfvarchem
chem_cv_options= 10/20: control variables are 4 gas + 15/32 GOCART/MOSAIC (4bin) aerosol variables

chemicda_opt=1/2/3/4/5 # assimilate pm2.5/pm10/pm2.5+pm10/co+o3+so2+no2/6-species

var_scaling12=36xmax_outer_iterations, # inflation factors of chemical background errors.

len_scaling12=36xmax_outer_iterations, # inflation factors of chemical background errors.

use_chemic_surfobs = .true., # read in ob_chemsfc.ascii
/

  1. To compile 3DVar with chemical DA capability, set the environment variable "WRF_CHEM" as 1, then ./configure wrfda; compile all_wrfvar as usual. The executable remains da_wrfvar.exe.

  2. The chemical background error file be.dat needs to be generated using GENBE_2.0 on https://github.com/wrf-model/GENBE_2.0.

LIST OF MODIFIED FILES:
A Registry/Registry.wrfchemvar
M Registry/registry.var_chem
M compile
M external/RSL_LITE/gen_comms.c
M frame/module_domain.F
M frame/module_driver_constants.F
M share/mediation_integrate.F
M share/output_wrf.F
M tools/gen_allocs.c
M var/build/da.make
M var/build/depend.txt
A var/da/da_chem_sfc/da_ao_stats_chem_sfc.inc
A var/da/da_chem_sfc/da_calculate_grady_chem_sfc.inc
A var/da/da_chem_sfc/da_check_max_iv_chem_sfc.inc
A var/da/da_chem_sfc/da_chem_sfc.f90
A var/da/da_chem_sfc/da_get_innov_vector_chem_sfc.inc
A var/da/da_chem_sfc/da_jo_and_grady_chem_sfc.inc
A var/da/da_chem_sfc/da_jo_chem_sfc.inc
A var/da/da_chem_sfc/da_oi_stats_chem_sfc.inc
A var/da/da_chem_sfc/da_print_stats_chem_sfc.inc
A var/da/da_chem_sfc/da_residual_chem_sfc.inc
A var/da/da_chem_sfc/da_transform_xtoy_chem_sfc.inc
A var/da/da_chem_sfc/da_transform_xtoy_chem_sfc_adj.inc
M var/da/da_control/da_control.f90
A var/da/da_define_structures/da_allocate_observations_chem_sfc.inc
A var/da/da_define_structures/da_allocate_y_chem_sfc.inc
M var/da/da_define_structures/da_deallocate_background_errors.inc
A var/da/da_define_structures/da_deallocate_y_chem_sfc.inc
M var/da/da_define_structures/da_define_structures.f90
A var/da/da_define_structures/da_zero_xchem_type.inc
M var/da/da_main/da_solve.inc
M var/da/da_main/da_solve_init.inc
M var/da/da_main/da_update_firstguess.inc
M var/da/da_main/da_wrfvar_init2.inc
M var/da/da_main/da_wrfvar_top.f90
M var/da/da_minimisation/da_amat_mul.inc
M var/da/da_minimisation/da_calculate_gradj.inc
M var/da/da_minimisation/da_calculate_grady.inc
M var/da/da_minimisation/da_calculate_j.inc
M var/da/da_minimisation/da_calculate_residual.inc
M var/da/da_minimisation/da_dot_cv.inc
M var/da/da_minimisation/da_get_innov_vector.inc
M var/da/da_minimisation/da_get_var_diagnostics.inc
M var/da/da_minimisation/da_jo_and_grady.inc
M var/da/da_minimisation/da_minimisation.f90
M var/da/da_minimisation/da_minimise_cg.inc
M var/da/da_minimisation/da_minimise_lz.inc
M var/da/da_minimisation/da_sensitivity.inc
M var/da/da_minimisation/da_transform_vtoy.inc
M var/da/da_minimisation/da_transform_vtoy_adj.inc
M var/da/da_minimisation/da_write_diagnostics.inc
A var/da/da_obs/da_fill_obs_structures_chem_sfc.inc
M var/da/da_obs/da_obs.f90
M var/da/da_obs/da_transform_xtoy.inc
M var/da/da_obs/da_transform_xtoy_adj.inc
A var/da/da_obs_io/da_final_write_obs_chem_sfc.inc
A var/da/da_obs_io/da_final_write_obs_gas_sfc.inc
M var/da/da_obs_io/da_obs_io.f90
A var/da/da_obs_io/da_read_obs_chem_sfc.inc
M var/da/da_obs_io/da_read_omb_tmp.inc
A var/da/da_obs_io/da_scan_obs_chem_sfc.inc
A var/da/da_obs_io/da_write_obs_chem_sfc.inc
M var/da/da_par_util/da_cv_to_vv.inc
M var/da/da_par_util/da_par_util.f90
M var/da/da_par_util/da_vv_to_cv.inc
M var/da/da_setup_structures/da_rescale_background_errors.inc
M var/da/da_setup_structures/da_scale_background_errors.inc
M var/da/da_setup_structures/da_setup_background_errors.inc
M var/da/da_setup_structures/da_setup_be_regional.inc
M var/da/da_setup_structures/da_setup_cv.inc
M var/da/da_setup_structures/da_setup_firstguess.inc
M var/da/da_setup_structures/da_setup_firstguess_wrf.inc
M var/da/da_setup_structures/da_setup_obs_structures.inc
A var/da/da_setup_structures/da_setup_obs_structures_chem_sfc.inc
M var/da/da_setup_structures/da_setup_structures.f90
M var/da/da_statistics/da_analysis_stats.inc
M var/da/da_statistics/da_statistics.f90
M var/da/da_test/da_check.inc
A var/da/da_test/da_check_cvtovv_adjoint_chem.inc
M var/da/da_test/da_check_gradient.inc
A var/da/da_test/da_check_vchemtox_adjoint.inc
A var/da/da_test/da_check_vtox_adjoint_chem.inc
M var/da/da_test/da_test.f90
M var/da/da_transfer_model/da_transfer_model.f90
A var/da/da_transfer_model/da_transfer_wrftoxb_chem.inc
M var/da/da_transfer_model/da_transfer_xatoanalysis.inc
M var/da/da_transfer_model/da_transfer_xatowrf.inc
A var/da/da_vtox_transforms/da_transform_vchemtox.inc
A var/da/da_vtox_transforms/da_transform_vchemtox_adj.inc
M var/da/da_vtox_transforms/da_transform_vtovv.inc
M var/da/da_vtox_transforms/da_transform_vtovv_adj.inc
M var/da/da_vtox_transforms/da_transform_vtox.inc
M var/da/da_vtox_transforms/da_transform_vtox_adj.inc
M var/da/da_vtox_transforms/da_vtox_transforms.f90

TESTS CONDUCTED:

  1. WRFDA regression tests passed.
  2. New chemical DA is tested with 6 types of surface obs and 4-bin MOSAIC aerosol scheme.

RELEASE NOTE: Add new capability for assimilating surface pm2.5, pm10, O3, CO, NO2, SO2 using 3DVar.
Sun, W., Liu, Z., Chen, D., Zhao, P., and Chen, M., 2020: Development and application of the WRFDA-Chem three-dimensional variational (3DVAR) system: aiming to improve air quality forecasting and diagnose model deficiencies, Atmos. Chem. Phys., 20, 9311-9329.

weisunncar and others added 30 commits May 8, 2019 17:35
 Changes to be committed:
	modified:   Registry/registry.var
	modified:   Registry/registry.var_chem
	modified:   Registry/registry.var_chemplus
	deleted:    compile.log
	deleted:    compile_3dvar.log
	deleted:    foo_15627.c
	deleted:    runcompile.pbs
	modified:   var/build/depend.txt
	modified:   var/da/da_chem_sfc/da_ao_stats_chem_sfc.inc
	modified:   var/da/da_chem_sfc/da_chem_sfc.f90
	modified:   var/da/da_chem_sfc/da_get_innov_vector_chem_sfc.inc
	modified:   var/da/da_chem_sfc/da_oi_stats_chem_sfc.inc
	deleted:    var/da/da_chem_sfc/da_print_aostats_chem_sfc.inc
	modified:   var/da/da_chem_sfc/da_print_stats_chem_sfc.inc
	deleted:    var/da/da_chem_sfc/da_synop.f90
	modified:   var/da/da_chem_sfc/da_transform_xtoy_chem_sfc.inc
	modified:   var/da/da_chem_sfc/da_transform_xtoy_chem_sfc_adj.inc
	modified:   var/da/da_define_structures/da_deallocate_background_errors.inc
	modified:   var/da/da_main/da_solve.inc
	modified:   var/da/da_minimisation/da_minimisation.f90
	modified:   var/da/da_minimisation/da_write_diagnostics.inc
	new file:   var/da/da_obs_io/da_final_write_obs_gas_sfc.inc
	modified:   var/da/da_obs_io/da_obs_io.f90
	modified:   var/da/da_obs_io/da_read_obs_chem_sfc.inc
	modified:   var/da/da_obs_io/da_read_omb_tmp.inc
	modified:   var/da/da_obs_io/da_scan_obs_chem_sfc.inc
	modified:   var/da/da_obs_io/da_write_obs_chem_sfc.inc
	modified:   var/da/da_setup_structures/da_scale_background_errors.inc
	modified:   var/da/da_setup_structures/da_setup_be_regional.inc
	modified:   var/da/da_statistics/da_analysis_stats.inc
	modified:   var/da/da_transfer_model/da_transfer_model.f90
	modified:   var/da/da_transfer_model/da_transfer_xatowrf.inc
	modified:   var/da/da_vtox_transforms/da_transform_vtox.inc
	modified:   var/da/da_vtox_transforms/da_transform_vtox_adj.inc
 Conflicts:
	var/build/depend.txt
	var/da/da_define_structures/da_initialize_cv.inc
	var/da/da_main/da_solve.inc
	var/da/da_main/da_update_firstguess.inc
	var/da/da_main/da_wrfvar_top.f90
	var/da/da_minimisation/da_calculate_gradj.inc
	var/da/da_minimisation/da_minimisation.f90
	var/da/da_minimisation/da_minimise_cg.inc
	var/da/da_obs/da_obs.f90
	var/da/da_obs_io/da_obs_io.f90
	var/da/da_setup_structures/da_setup_be_regional.inc

	modified:   Registry/Registry.EM_COMMON
	modified:   Registry/Registry.EM_COMMON.var
	new file:   Registry/Registry.wrfchemvar
	new file:   Registry/registry.chemplus
	modified:   Registry/registry.dimspec
	modified:   Registry/registry.var
	modified:   Registry/registry.var_chem
	new file:   Registry/registry.var_chemplus
	new file:   chem/Makefile.temp ??
	new file:   chem/Makefile_org  ??
	modified:   compile
	modified:   external/RSL_LITE/gen_comms.c
	modified:   frame/module_domain.F
	modified:   frame/module_driver_constants.F
	modified:   share/mediation_integrate.F
	modified:   tools/gen_allocs.c
	new file:   var/build/Makefile
	modified:   var/build/da.make
	new file:   var/build/da.make.ori
	modified:   var/build/depend.txt
	new file:   var/build/depend.txt.ori
	modified:   var/da/da_4dvar/da_4dvar.f90
	modified:   var/da/da_4dvar/da_4dvar_io.inc
	modified:   var/da/da_4dvar/da_ad_model.inc
	new file:   var/da/da_4dvar/da_init_model_input.inc
	new file:   var/da/da_4dvar/da_init_model_output.inc
	new file:   var/da/da_4dvar/da_med_init_fgc.inc
	modified:   var/da/da_4dvar/da_nl_model.inc
	new file:   var/da/da_4dvar/da_set_run_hours.inc
	modified:   var/da/da_4dvar/da_tl_model.inc
	new file:   var/da/da_4dvar/kj_swap_test.inc
	new file:   var/da/da_chem/da_calculate_chem_forcing_ad.inc
	new file:   var/da/da_chem/da_calculate_grady_chem_acft.inc
	new file:   var/da/da_chem/da_calculate_grady_chem_surf.inc
	new file:   var/da/da_chem/da_calculate_w_chem.inc
	new file:   var/da/da_chem/da_check_max_iv_chem_acft.inc
	new file:   var/da/da_chem/da_check_max_iv_chem_surf.inc
	new file:   var/da/da_chem/da_chem.f90
	new file:   var/da/da_chem/da_chem_tools.f90
	new file:   var/da/da_chem/da_copy_chem_to_model.inc
	new file:   var/da/da_chem/da_dgn.inc
	new file:   var/da/da_chem/da_evaluate_j.inc
	new file:   var/da/da_chem/da_get_innov_vector_chem_acft.inc
	new file:   var/da/da_chem/da_get_innov_vector_chem_surf.inc
	new file:   var/da/da_chem/da_hdgn.inc
	new file:   var/da/da_chem/da_init_chem.inc
	new file:   var/da/da_chem/da_jo_and_grady_chem_acft.inc
	new file:   var/da/da_chem/da_jo_and_grady_chem_surf.inc
	new file:   var/da/da_chem/da_residual_chem_acft.inc
	new file:   var/da/da_chem/da_residual_chem_surf.inc
	new file:   var/da/da_chem/da_retrieve_chem_hx.inc
	new file:   var/da/da_chem/da_write_obs_chem.inc
	new file:   var/da/da_chem_sfc/da_ao_stats_chem_sfc.inc
	new file:   var/da/da_chem_sfc/da_calculate_grady_chem_sfc.inc
	new file:   var/da/da_chem_sfc/da_check_max_iv_chem_sfc.inc
	new file:   var/da/da_chem_sfc/da_chem_sfc.f90
	new file:   var/da/da_chem_sfc/da_get_innov_vector_chem_sfc.inc
	new file:   var/da/da_chem_sfc/da_jo_and_grady_chem_sfc.inc
	new file:   var/da/da_chem_sfc/da_jo_chem_sfc.inc
	new file:   var/da/da_chem_sfc/da_oi_stats_chem_sfc.inc
	new file:   var/da/da_chem_sfc/da_print_stats_chem_sfc.inc
	new file:   var/da/da_chem_sfc/da_residual_chem_sfc.inc
	new file:   var/da/da_chem_sfc/da_transform_xtoy_chem_sfc.inc
	new file:   var/da/da_chem_sfc/da_transform_xtoy_chem_sfc_adj.inc
	modified:   var/da/da_control/da_control.f90
	new file:   var/da/da_define_structures/da_allocate_background_errors_chem.inc
	new file:   var/da/da_define_structures/da_allocate_observations_chem.inc
	new file:   var/da/da_define_structures/da_allocate_observations_chem_sfc.inc
	new file:   var/da/da_define_structures/da_allocate_y_chem.inc
	new file:   var/da/da_define_structures/da_allocate_y_chem_sfc.inc
	modified:   var/da/da_define_structures/da_deallocate_background_errors.inc
	modified:   var/da/da_define_structures/da_deallocate_observations.inc
	new file:   var/da/da_define_structures/da_deallocate_y_chem_sfc.inc
	modified:   var/da/da_define_structures/da_define_structures.f90
	new file:   var/da/da_define_structures/da_zero_xch_type.inc
	new file:   var/da/da_define_structures/da_zero_xchem_type.inc
	modified:   var/da/da_main/da_solve.inc
	modified:   var/da/da_main/da_solve_init.inc
	modified:   var/da/da_main/da_update_firstguess.inc
	modified:   var/da/da_main/da_wrfvar_init2.inc
	modified:   var/da/da_main/da_wrfvar_top.f90
	modified:   var/da/da_minimisation/da_amat_mul.inc
	new file:   var/da/da_minimisation/da_calculate_aminusb.inc
	modified:   var/da/da_minimisation/da_calculate_gradj.inc
	modified:   var/da/da_minimisation/da_calculate_grady.inc
	modified:   var/da/da_minimisation/da_calculate_j.inc
	modified:   var/da/da_minimisation/da_calculate_residual.inc
	modified:   var/da/da_minimisation/da_dot_cv.inc
	modified:   var/da/da_minimisation/da_get_innov_vector.inc
	modified:   var/da/da_minimisation/da_get_var_diagnostics.inc
	modified:   var/da/da_minimisation/da_jo_and_grady.inc
	modified:   var/da/da_minimisation/da_minimisation.f90
	modified:   var/da/da_minimisation/da_minimise_cg.inc
	modified:   var/da/da_minimisation/da_minimise_lz.inc
	modified:   var/da/da_minimisation/da_sensitivity.inc
	modified:   var/da/da_minimisation/da_swap_xtraj.inc
	modified:   var/da/da_minimisation/da_transform_vtod_wpec.inc
	modified:   var/da/da_minimisation/da_transform_vtoy.inc
	modified:   var/da/da_minimisation/da_transform_vtoy_adj.inc
	modified:   var/da/da_minimisation/da_write_diagnostics.inc
	new file:   var/da/da_obs/da_fill_obs_structures_chem.inc
	new file:   var/da/da_obs/da_fill_obs_structures_chem_sfc.inc
	modified:   var/da/da_obs/da_obs.f90
	new file:   var/da/da_obs/da_store_obs_grid_info_acft.inc
	modified:   var/da/da_obs/da_transform_xtoy.inc
	modified:   var/da/da_obs/da_transform_xtoy_adj.inc
	new file:   var/da/da_obs_io/da_final_write_obs_chem.inc
	new file:   var/da/da_obs_io/da_final_write_obs_chem_sfc.inc
	new file:   var/da/da_obs_io/da_final_write_obs_gas_sfc.inc
	modified:   var/da/da_obs_io/da_obs_io.f90
	new file:   var/da/da_obs_io/da_read_obs_chem.inc
	new file:   var/da/da_obs_io/da_read_obs_chem_sfc.inc
	modified:   var/da/da_obs_io/da_read_omb_tmp.inc
	new file:   var/da/da_obs_io/da_scan_obs_chem_sfc.inc
	new file:   var/da/da_obs_io/da_write_obs_chem_sfc.inc
	modified:   var/da/da_par_util/da_cv_to_global.inc
	modified:   var/da/da_par_util/da_cv_to_vv.inc
	new file:   var/da/da_par_util/da_cv_to_vv_chem.inc
	modified:   var/da/da_par_util/da_par_util.f90
	modified:   var/da/da_par_util/da_vv_to_cv.inc
	new file:   var/da/da_par_util/da_vv_to_cv_chem.inc
	modified:   var/da/da_setup_structures/da_scale_background_errors.inc
	modified:   var/da/da_setup_structures/da_setup_background_errors.inc
	new file:   var/da/da_setup_structures/da_setup_be_chem.inc
	new file:   var/da/da_setup_structures/da_setup_be_chem_conc.inc
	modified:   var/da/da_setup_structures/da_setup_be_regional.inc
	modified:   var/da/da_setup_structures/da_setup_cv.inc
	modified:   var/da/da_setup_structures/da_setup_firstguess.inc
	modified:   var/da/da_setup_structures/da_setup_firstguess_wrf.inc
	modified:   var/da/da_setup_structures/da_setup_obs_interp_wts.inc
	modified:   var/da/da_setup_structures/da_setup_obs_structures.inc
	new file:   var/da/da_setup_structures/da_setup_obs_structures_chem.inc
	new file:   var/da/da_setup_structures/da_setup_obs_structures_chem_sfc.inc
	modified:   var/da/da_setup_structures/da_setup_structures.f90
	modified:   var/da/da_statistics/da_analysis_stats.inc
	modified:   var/da/da_statistics/da_statistics.f90
	modified:   var/da/da_test/da_check.inc
	modified:   var/da/da_test/da_check_cvtovv_adjoint.inc
	new file:   var/da/da_test/da_check_cvtovv_adjoint_chem.inc
	modified:   var/da/da_test/da_check_gradient.inc
	new file:   var/da/da_test/da_check_vchemtox_adjoint.inc
	new file:   var/da/da_test/da_check_vtox_adjoint_chem.inc
	modified:   var/da/da_test/da_test.f90
	modified:   var/da/da_tools/da_llxy.inc
	modified:   var/da/da_transfer_model/da_transfer_model.f90
	new file:   var/da/da_transfer_model/da_transfer_wrftltoy_chem.inc
	new file:   var/da/da_transfer_model/da_transfer_wrftltoy_chem_adj.inc
	new file:   var/da/da_transfer_model/da_transfer_wrftoxb_chem.inc
	new file:   var/da/da_transfer_model/da_transfer_wrftoxb_gocart.inc
	modified:   var/da/da_transfer_model/da_transfer_xatoanalysis.inc
	modified:   var/da/da_transfer_model/da_transfer_xatowrf.inc
	new file:   var/da/da_transfer_model/da_transfer_xatowrf_temp.inc
	modified:   var/da/da_transfer_model/da_transfer_xatowrftl.inc
	modified:   var/da/da_transfer_model/da_transfer_xatowrftl_adj.inc
	modified:   var/da/da_update_bc/da_update_bc.f90
	new file:   var/da/da_vtox_transforms/da_transform_vchemtox.inc
	new file:   var/da/da_vtox_transforms/da_transform_vchemtox_adj.inc
	new file:   var/da/da_vtox_transforms/da_transform_vchtox.inc
	new file:   var/da/da_vtox_transforms/da_transform_vchtox_adj.inc
	modified:   var/da/da_vtox_transforms/da_transform_vtovv.inc
	modified:   var/da/da_vtox_transforms/da_transform_vtovv_adj.inc
	modified:   var/da/da_vtox_transforms/da_transform_vtox.inc
	modified:   var/da/da_vtox_transforms/da_transform_vtox_adj.inc
	modified:   var/da/da_vtox_transforms/da_vtox_transforms.f90
	modified:   var/external/crtm_2.3.0/libsrc/make.dependencies ??
	modified:   var/build/depend.txt
	modified:   var/da/da_main/da_wrfvar_top.f90
	modified:   var/da/da_setup_structures/da_setup_be_chem_conc.inc
	deleted:    var/build/da.make.ori
	deleted:    var/build/depend.txt.ori
 Remove 4DVAR-related changes, recover to 4dvar in 'develop' branch. Compiled still Ok.
	modified:   var/build/depend.txt
	modified:   var/da/da_4dvar/da_4dvar.f90
	modified:   var/da/da_4dvar/da_4dvar_io.inc
	modified:   var/da/da_4dvar/da_ad_model.inc
	deleted:    var/da/da_4dvar/da_init_model_input.inc
	deleted:    var/da/da_4dvar/da_init_model_output.inc
	deleted:    var/da/da_4dvar/da_med_init_fgc.inc
	modified:   var/da/da_4dvar/da_nl_model.inc
	deleted:    var/da/da_4dvar/da_set_run_hours.inc
	modified:   var/da/da_4dvar/da_tl_model.inc
	deleted:    var/da/da_4dvar/kj_swap_test.inc
	modified:   var/da/da_chem/da_chem_tools.f90
	modified:   var/da/da_chem/da_evaluate_j.inc
 Remove JJ's code and related calls
	modified:   var/build/depend.txt
	deleted:    var/da/da_chem/da_calculate_chem_forcing_ad.inc
	deleted:    var/da/da_chem/da_calculate_grady_chem_acft.inc
	deleted:    var/da/da_chem/da_calculate_grady_chem_surf.inc
	deleted:    var/da/da_chem/da_calculate_w_chem.inc
	deleted:    var/da/da_chem/da_check_max_iv_chem_acft.inc
	deleted:    var/da/da_chem/da_check_max_iv_chem_surf.inc
	deleted:    var/da/da_chem/da_chem.f90
	deleted:    var/da/da_chem/da_chem_tools.f90
	deleted:    var/da/da_chem/da_copy_chem_to_model.inc
	deleted:    var/da/da_chem/da_dgn.inc
	deleted:    var/da/da_chem/da_evaluate_j.inc
	deleted:    var/da/da_chem/da_get_innov_vector_chem_acft.inc
	deleted:    var/da/da_chem/da_get_innov_vector_chem_surf.inc
	deleted:    var/da/da_chem/da_hdgn.inc
	deleted:    var/da/da_chem/da_init_chem.inc
	deleted:    var/da/da_chem/da_jo_and_grady_chem_acft.inc
	deleted:    var/da/da_chem/da_jo_and_grady_chem_surf.inc
	deleted:    var/da/da_chem/da_residual_chem_acft.inc
	deleted:    var/da/da_chem/da_residual_chem_surf.inc
	deleted:    var/da/da_chem/da_retrieve_chem_hx.inc
	deleted:    var/da/da_chem/da_write_obs_chem.inc
	modified:   var/da/da_control/da_control.f90
	deleted:    var/da/da_define_structures/da_allocate_background_errors_chem.inc
	deleted:    var/da/da_define_structures/da_allocate_observations_chem.inc
	deleted:    var/da/da_define_structures/da_allocate_y_chem.inc
	modified:   var/da/da_define_structures/da_deallocate_background_errors.inc
	modified:   var/da/da_define_structures/da_deallocate_observations.inc
	modified:   var/da/da_define_structures/da_define_structures.f90
	deleted:    var/da/da_define_structures/da_zero_xch_type.inc
	deleted:    var/da/da_minimisation/da_calculate_aminusb.inc
	modified:   var/da/da_minimisation/da_calculate_gradj.inc
	modified:   var/da/da_minimisation/da_calculate_grady.inc
	modified:   var/da/da_minimisation/da_calculate_j.inc
	modified:   var/da/da_minimisation/da_calculate_residual.inc
	modified:   var/da/da_minimisation/da_dot_cv.inc
	modified:   var/da/da_minimisation/da_get_innov_vector.inc
	modified:   var/da/da_minimisation/da_get_var_diagnostics.inc
	modified:   var/da/da_minimisation/da_jo_and_grady.inc
	modified:   var/da/da_minimisation/da_minimisation.f90
	modified:   var/da/da_minimisation/da_minimise_cg.inc
	modified:   var/da/da_minimisation/da_minimise_lz.inc
	modified:   var/da/da_minimisation/da_sensitivity.inc
	modified:   var/da/da_minimisation/da_swap_xtraj.inc
	modified:   var/da/da_minimisation/da_transform_vtoy.inc
	modified:   var/da/da_minimisation/da_transform_vtoy_adj.inc
	modified:   var/da/da_minimisation/da_write_diagnostics.inc
	deleted:    var/da/da_obs/da_fill_obs_structures_chem.inc
	modified:   var/da/da_obs/da_obs.f90
	deleted:    var/da/da_obs/da_store_obs_grid_info_acft.inc
	modified:   var/da/da_obs/da_transform_xtoy_adj.inc
	deleted:    var/da/da_obs_io/da_final_write_obs_chem.inc
	modified:   var/da/da_obs_io/da_obs_io.f90
	deleted:    var/da/da_obs_io/da_read_obs_chem.inc
	modified:   var/da/da_par_util/da_cv_to_global.inc
	modified:   var/da/da_par_util/da_cv_to_vv.inc
	modified:   var/da/da_par_util/da_par_util.f90
	modified:   var/da/da_par_util/da_vv_to_cv.inc
	modified:   var/da/da_setup_structures/da_setup_background_errors.inc
	deleted:    var/da/da_setup_structures/da_setup_be_chem.inc
	deleted:    var/da/da_setup_structures/da_setup_be_chem_conc.inc
	modified:   var/da/da_setup_structures/da_setup_cv.inc
	modified:   var/da/da_setup_structures/da_setup_firstguess_wrf.inc
	modified:   var/da/da_setup_structures/da_setup_obs_interp_wts.inc
	modified:   var/da/da_setup_structures/da_setup_obs_structures.inc
	deleted:    var/da/da_setup_structures/da_setup_obs_structures_chem.inc
	modified:   var/da/da_setup_structures/da_setup_structures.f90
	modified:   var/da/da_test/da_check_cvtovv_adjoint.inc
	modified:   var/da/da_tools/da_llxy.inc
	modified:   var/da/da_transfer_model/da_transfer_model.f90
	deleted:    var/da/da_transfer_model/da_transfer_wrftltoy_chem.inc
	deleted:    var/da/da_transfer_model/da_transfer_wrftltoy_chem_adj.inc
	deleted:    var/da/da_transfer_model/da_transfer_wrftoxb_chem.inc
	modified:   var/da/da_transfer_model/da_transfer_xatoanalysis.inc
	modified:   var/da/da_transfer_model/da_transfer_xatowrf.inc
	deleted:    var/da/da_transfer_model/da_transfer_xatowrf_temp.inc
	modified:   var/da/da_transfer_model/da_transfer_xatowrftl.inc
	modified:   var/da/da_transfer_model/da_transfer_xatowrftl_adj.inc
	deleted:    var/da/da_vtox_transforms/da_transform_vchtox.inc
	deleted:    var/da/da_vtox_transforms/da_transform_vchtox_adj.inc
	modified:   var/da/da_vtox_transforms/da_transform_vtovv.inc
	modified:   var/da/da_vtox_transforms/da_transform_vtovv_adj.inc
	modified:   var/da/da_vtox_transforms/da_transform_vtox.inc
	modified:   var/da/da_vtox_transforms/da_transform_vtox_adj.inc
	modified:   var/da/da_vtox_transforms/da_vtox_transforms.f90
 Further clean-up and Enable compilation again
	modified:   Registry/Registry.EM_COMMON
	modified:   Registry/Registry.EM_COMMON.var
	modified:   Registry/registry.var
	modified:   frame/module_driver_constants.F
	modified:   var/build/da.make
	modified:   var/build/depend.txt
	modified:   var/da/da_chem_sfc/da_chem_sfc.f90
	modified:   var/da/da_main/da_solve.inc
	modified:   var/da/da_main/da_wrfvar_top.f90
	modified:   var/da/da_minimisation/da_calculate_j.inc
	modified:   var/da/da_minimisation/da_dot_cv.inc
	modified:   var/da/da_minimisation/da_sensitivity.inc
	modified:   var/da/da_obs/da_obs.f90
	modified:   var/da/da_obs/da_transform_xtoy_adj.inc
	modified:   var/da/da_par_util/da_par_util.f90
	modified:   var/da/da_par_util/da_vv_to_cv_chem.inc
	modified:   var/da/da_setup_structures/da_setup_structures.f90
 further clean-up, compiled OK
	modified:   Registry/registry.dimspec
	modified:   frame/module_domain.F
	modified:   tools/gen_allocs.c
	modified:   var/da/da_define_structures/da_define_structures.f90
	modified:   var/da/da_main/da_solve.inc
	modified:   var/da/da_main/da_update_firstguess.inc
	modified:   var/da/da_main/da_wrfvar_top.f90
	modified:   var/da/da_minimisation/da_amat_mul.inc
	modified:   var/da/da_minimisation/da_calculate_j.inc
	modified:   var/da/da_minimisation/da_dot_cv.inc
	modified:   var/da/da_minimisation/da_minimisation.f90
	modified:   var/da/da_minimisation/da_sensitivity.inc
	modified:   var/da/da_obs/da_obs.f90
	modified:   var/da/da_setup_structures/da_setup_background_errors.inc
	modified:   var/da/da_setup_structures/da_setup_firstguess_wrf.inc
	modified:   var/da/da_setup_structures/da_setup_structures.f90
	modified:   var/da/da_test/da_check_gradient.inc
	modified:   var/da/da_transfer_model/da_transfer_model.f90
	modified:   var/da/da_update_bc/da_update_bc.f90
	modified:   var/da/da_vtox_transforms/da_vtox_transforms.f90
 Further clean-up: move necessary variables from registry.var_chemplus to registry.var_chem
	modified:   Registry/Registry.wrfchemvar
	deleted:    Registry/registry.chemplus
	modified:   Registry/registry.var_chem
	deleted:    Registry/registry.var_chemplus
	modified:   var/da/da_chem_sfc/da_chem_sfc.f90
	modified:   var/da/da_main/da_wrfvar_top.f90
	modified:   var/da/da_obs_io/da_obs_io.f90
	modified:   Registry/Registry.wrfchemvar
	modified:   share/output_wrf.F
	modified:   var/build/depend.txt
	modified:   var/da/da_obs_io/da_read_omb_tmp.inc
	modified:   var/da/da_par_util/da_cv_to_vv.inc
	deleted:    var/da/da_par_util/da_cv_to_vv_chem.inc
	modified:   var/da/da_par_util/da_par_util.f90
	modified:   var/da/da_par_util/da_vv_to_cv.inc
	deleted:    var/da/da_par_util/da_vv_to_cv_chem.inc
	modified:   var/da/da_setup_structures/da_scale_background_errors.inc
	modified:   var/da/da_setup_structures/da_setup_background_errors.inc
	modified:   var/da/da_setup_structures/da_setup_be_regional.inc
	modified:   var/da/da_setup_structures/da_setup_firstguess_wrf.inc
	modified:   var/da/da_setup_structures/da_setup_obs_structures.inc
	modified:   var/da/da_statistics/da_analysis_stats.inc
	modified:   var/da/da_test/da_check.inc
	modified:   var/da/da_test/da_test.f90
	modified:   var/da/da_transfer_model/da_transfer_xatoanalysis.inc
	modified:   var/da/da_transfer_model/da_transfer_xatowrf.inc
	modified:   var/da/da_vtox_transforms/da_transform_vtovv.inc
	modified:   var/da/da_vtox_transforms/da_transform_vtovv_adj.inc
	modified:   var/da/da_vtox_transforms/da_vtox_transforms.f90
	modified:   Registry/registry.var
	modified:   Registry/registry.var_chem
	modified:   Registry/registry.var
	modified:   Registry/registry.var_chem
	modified:   var/build/depend.txt
	modified:   var/da/da_main/da_wrfvar_top.f90
	modified:   var/da/da_setup_structures/da_setup_firstguess_wrf.inc
	modified:   var/da/da_transfer_model/da_transfer_model.f90
	renamed:    var/da/da_transfer_model/da_transfer_wrftoxb_gocart.inc -> var/da/da_transfer_model/da_transfer_wrftoxb_chem.inc
	modified:   var/da/da_transfer_model/da_transfer_xatoanalysis.inc
	modified:   Registry/registry.var_chem
	modified:   var/da/da_main/da_wrfvar_top.f90
	modified:   Registry/registry.var_chem
	modified:   Registry/registry.var_chem
	modified:   var/da/da_main/da_solve.inc
	modified:   var/da/da_main/da_wrfvar_top.f90
	modified:   var/da/da_minimisation/da_calculate_gradj.inc
	modified:   var/da/da_minimisation/da_calculate_j.inc
	modified:   var/da/da_minimisation/da_minimise_lz.inc
	modified:   var/da/da_minimisation/da_transform_vtod_wpec.inc
	modified:   var/da/da_minimisation/da_transform_vtoy.inc
	modified:   var/da/da_obs_io/da_read_omb_tmp.inc
	modified:   var/da/da_par_util/da_cv_to_vv.inc
	modified:   var/da/da_setup_structures/da_setup_background_errors.inc
	modified:   var/da/da_setup_structures/da_setup_cv.inc
	modified:   var/da/da_statistics/da_analysis_stats.inc
	modified:   var/da/da_test/da_check_cvtovv_adjoint.inc
	modified:   var/da/da_transfer_model/da_transfer_model.f90
	modified:   var/da/da_transfer_model/da_transfer_xatoanalysis.inc
	modified:   var/da/da_transfer_model/da_transfer_xatowrf.inc
	modified:   var/da/da_setup_structures/da_rescale_background_errors.inc
	modified:   var/da/da_setup_structures/da_scale_background_errors.inc
	modified:   var/da/da_setup_structures/da_setup_be_regional.inc
	modified:   var/da/da_setup_structures/da_setup_be_regional.inc
	modified:   Registry/registry.var_chem
	modified:   var/da/da_setup_structures/da_scale_background_errors.inc
	modified:   var/da/da_setup_structures/da_setup_be_regional.inc
@liujake liujake requested review from a team as code owners December 28, 2020 03:12
@liujake liujake changed the title Add new capability for surface chemical observations Add new capability for surface chemical DA Dec 28, 2020
@liujake liujake requested a review from weisunncar December 28, 2020 03:13
@liujake
Copy link
Contributor Author

liujake commented Dec 28, 2020

@davegill This PR should have no impact on model side, but you may like to take some quick look at a few files outside ~var/.
M compile
M external/RSL_LITE/gen_comms.c
M frame/module_domain.F
M frame/module_driver_constants.F
M share/mediation_integrate.F
M share/output_wrf.F
M tools/gen_allocs.c

@liujake
Copy link
Contributor Author

liujake commented Dec 28, 2020

@davegill Looks like jenkins autotest will be invoked every time when PR message is edited. This seems to be unnecessary. Is this the behavior by design?

@davegill
Copy link
Contributor

@liujake
Jake,
A full regression test should not be undertaken for each unimportant change (modify the name of the PR, change a PR commit message, add a label, etc). There may be about 1 minute where github is checking with the various associated testing pieces, but it should come back fairly quickly for these types of unimportant modifications.

	modified:   var/da/da_control/da_control.f90
	modified:   var/da/da_par_util/da_vv_to_cv.inc
	modified:   var/da/da_setup_structures/da_setup_obs_structures.inc
	modified:   var/da/da_transfer_model/da_transfer_xatowrf.inc
@liujake liujake merged commit a271d9a into wrf-model:develop Dec 29, 2020
@liujake liujake deleted the wrfdav43_chemda_noJJcode branch April 11, 2022 15:56
vlakshmanan-scala pushed a commit to scala-computing/WRF that referenced this pull request Apr 4, 2024
TYPE: new feature

KEYWORDS: Chemical DA, Surface Observations, 3DVar, GENBE_2.0

SOURCE: Wei Sun (NCAR/MMM, CAS), Jake Liu (NCAR/MMM), Dan Chen (IUM, Beijing)

DESCRIPTION OF CHANGES:
1. This PR adds the new capability for assimilating the surface chemical/aerosol observations (pm2.5, pm10, O3, NO2, SO2, CO) using 3DVar. 

2. Several new namelist parameters are defined in registry.var_chem under wrfvarchem. The setting of chemicda_opt only works for MOSAIC scheme. The inflation factors of chemical background errors work for both aerosol schemes, but they are only tested under the MOSAIC scheme.
 
&wrfvarchem
chem_cv_options= 10/20: control variables are 4 gas + 15/32 GOCART/MOSAIC (4bin) aerosol variables

chemicda_opt=1/2/3/4/5 # assimilate pm2.5/pm10/pm2.5+pm10/co+o3+so2+no2/6-species
 
var_scaling12=36xmax_outer_iterations, # inflation factors of chemical background errors.

len_scaling12=36xmax_outer_iterations, # inflation factors of chemical background errors.

use_chemic_surfobs = .true., # read in ob_chemsfc.ascii
 /

3. To compile 3DVar with chemical DA capability, set the environment variable "WRF_CHEM" as 1, then ./configure wrfda; compile all_wrfvar as usual. The executable remains da_wrfvar.exe.

4. The chemical background error file be.dat needs to be generated using GENBE_2.0 on https://github.com/wrf-model/GENBE_2.0.

LIST OF MODIFIED FILES:
A       Registry/Registry.wrfchemvar
M       Registry/registry.var_chem
M       compile
M       external/RSL_LITE/gen_comms.c
M       frame/module_domain.F
M       frame/module_driver_constants.F
M       share/mediation_integrate.F
M       share/output_wrf.F
M       tools/gen_allocs.c
M       var/build/da.make
M       var/build/depend.txt
A       var/da/da_chem_sfc/da_ao_stats_chem_sfc.inc
A       var/da/da_chem_sfc/da_calculate_grady_chem_sfc.inc
A       var/da/da_chem_sfc/da_check_max_iv_chem_sfc.inc
A       var/da/da_chem_sfc/da_chem_sfc.f90
A       var/da/da_chem_sfc/da_get_innov_vector_chem_sfc.inc
A       var/da/da_chem_sfc/da_jo_and_grady_chem_sfc.inc
A       var/da/da_chem_sfc/da_jo_chem_sfc.inc
A       var/da/da_chem_sfc/da_oi_stats_chem_sfc.inc
A       var/da/da_chem_sfc/da_print_stats_chem_sfc.inc
A       var/da/da_chem_sfc/da_residual_chem_sfc.inc
A       var/da/da_chem_sfc/da_transform_xtoy_chem_sfc.inc
A       var/da/da_chem_sfc/da_transform_xtoy_chem_sfc_adj.inc
M       var/da/da_control/da_control.f90
A       var/da/da_define_structures/da_allocate_observations_chem_sfc.inc
A       var/da/da_define_structures/da_allocate_y_chem_sfc.inc
M       var/da/da_define_structures/da_deallocate_background_errors.inc
A       var/da/da_define_structures/da_deallocate_y_chem_sfc.inc
M       var/da/da_define_structures/da_define_structures.f90
A       var/da/da_define_structures/da_zero_xchem_type.inc
M       var/da/da_main/da_solve.inc
M       var/da/da_main/da_solve_init.inc
M       var/da/da_main/da_update_firstguess.inc
M       var/da/da_main/da_wrfvar_init2.inc
M       var/da/da_main/da_wrfvar_top.f90
M       var/da/da_minimisation/da_amat_mul.inc
M       var/da/da_minimisation/da_calculate_gradj.inc
M       var/da/da_minimisation/da_calculate_grady.inc
M       var/da/da_minimisation/da_calculate_j.inc
M       var/da/da_minimisation/da_calculate_residual.inc
M       var/da/da_minimisation/da_dot_cv.inc
M       var/da/da_minimisation/da_get_innov_vector.inc
M       var/da/da_minimisation/da_get_var_diagnostics.inc
M       var/da/da_minimisation/da_jo_and_grady.inc
M       var/da/da_minimisation/da_minimisation.f90
M       var/da/da_minimisation/da_minimise_cg.inc
M       var/da/da_minimisation/da_minimise_lz.inc
M       var/da/da_minimisation/da_sensitivity.inc
M       var/da/da_minimisation/da_transform_vtoy.inc
M       var/da/da_minimisation/da_transform_vtoy_adj.inc
M       var/da/da_minimisation/da_write_diagnostics.inc
A       var/da/da_obs/da_fill_obs_structures_chem_sfc.inc
M       var/da/da_obs/da_obs.f90
M       var/da/da_obs/da_transform_xtoy.inc
M       var/da/da_obs/da_transform_xtoy_adj.inc
A       var/da/da_obs_io/da_final_write_obs_chem_sfc.inc
A       var/da/da_obs_io/da_final_write_obs_gas_sfc.inc
M       var/da/da_obs_io/da_obs_io.f90
A       var/da/da_obs_io/da_read_obs_chem_sfc.inc
M       var/da/da_obs_io/da_read_omb_tmp.inc
A       var/da/da_obs_io/da_scan_obs_chem_sfc.inc
A       var/da/da_obs_io/da_write_obs_chem_sfc.inc
M       var/da/da_par_util/da_cv_to_vv.inc
M       var/da/da_par_util/da_par_util.f90
M       var/da/da_par_util/da_vv_to_cv.inc
M       var/da/da_setup_structures/da_rescale_background_errors.inc
M       var/da/da_setup_structures/da_scale_background_errors.inc
M       var/da/da_setup_structures/da_setup_background_errors.inc
M       var/da/da_setup_structures/da_setup_be_regional.inc
M       var/da/da_setup_structures/da_setup_cv.inc
M       var/da/da_setup_structures/da_setup_firstguess.inc
M       var/da/da_setup_structures/da_setup_firstguess_wrf.inc
M       var/da/da_setup_structures/da_setup_obs_structures.inc
A       var/da/da_setup_structures/da_setup_obs_structures_chem_sfc.inc
M       var/da/da_setup_structures/da_setup_structures.f90
M       var/da/da_statistics/da_analysis_stats.inc
M       var/da/da_statistics/da_statistics.f90
M       var/da/da_test/da_check.inc
A       var/da/da_test/da_check_cvtovv_adjoint_chem.inc
M       var/da/da_test/da_check_gradient.inc
A       var/da/da_test/da_check_vchemtox_adjoint.inc
A       var/da/da_test/da_check_vtox_adjoint_chem.inc
M       var/da/da_test/da_test.f90
M       var/da/da_transfer_model/da_transfer_model.f90
A       var/da/da_transfer_model/da_transfer_wrftoxb_chem.inc
M       var/da/da_transfer_model/da_transfer_xatoanalysis.inc
M       var/da/da_transfer_model/da_transfer_xatowrf.inc
A       var/da/da_vtox_transforms/da_transform_vchemtox.inc
A       var/da/da_vtox_transforms/da_transform_vchemtox_adj.inc
M       var/da/da_vtox_transforms/da_transform_vtovv.inc
M       var/da/da_vtox_transforms/da_transform_vtovv_adj.inc
M       var/da/da_vtox_transforms/da_transform_vtox.inc
M       var/da/da_vtox_transforms/da_transform_vtox_adj.inc
M       var/da/da_vtox_transforms/da_vtox_transforms.f90

TESTS CONDUCTED: 
1. WRFDA regression tests passed.
2. New chemical DA is tested with 6 types of surface obs and 4-bin MOSAIC aerosol scheme.

RELEASE NOTE: Add new capability for assimilating surface pm2.5, pm10, O3, CO, NO2, SO2 using 3DVar.
Sun, W., Liu, Z., Chen, D., Zhao, P., and Chen, M., 2020: Development and application of the WRFDA-Chem three-dimensional variational (3DVAR) system: aiming to improve air quality forecasting and diagnose model deficiencies, Atmos. Chem. Phys., 20, 9311-9329.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants