diff --git a/Master/mct_driver.h b/Master/mct_driver.h index c14c51872..c7ffbde87 100755 --- a/Master/mct_driver.h +++ b/Master/mct_driver.h @@ -590,6 +590,8 @@ END IF # endif # ifdef WRF_COUPLING + WRITE (stdout,84) MyRank + 84 FORMAT (/,' osipov mct_coupler - Rank before finalize_ocn2atm_coupling ' ,i5.5) IF (roms_exit.eq.NoError) THEN CALL finalize_ocn2atm_coupling ELSE @@ -604,8 +606,15 @@ ! Terminates all the mpi-processing and coupling. !----------------------------------------------------------------------- ! + + WRITE (stdout,85) MyRank + 85 FORMAT (/,' osipov mct_coupler - Rank before mpi_barrier ' ,i5.5) CALL mpi_barrier (MPI_COMM_WORLD, MyError) + WRITE (stdout,86) MyRank + 86 FORMAT (/,' osipov mct_coupler - Rank before MCTWorld_clean ' ,i5.5) CALL MCTWorld_clean () + WRITE (stdout,87) MyRank + 87 FORMAT (/,' osipov mct_coupler - Rank before mpi_finalize ' ,i5.5) CALL mpi_finalize (MyError) STOP diff --git a/WRF/Registry/registry.chem b/WRF/Registry/registry.chem index 70586eae7..3f108e1b0 100755 --- a/WRF/Registry/registry.chem +++ b/WRF/Registry/registry.chem @@ -699,9 +699,11 @@ state real erup_beg ij misc 1 - i{13} "ERUP_ state real erup_end ij misc 1 - i{13} "ERUP_END" "END TIME OF ERUPTION" "?" # # following used for output to look at all kinds of stuff -state real dep_vel_o3 ij misc 1 - - "DEP_VEL" "deposition velocities for o3" "?" +# TODO: osipov nc name for dep_vel_o3 conflicts with dep_vel (general array) +state real dep_vel_o3 ij misc 1 - - "DEP_VEL_O3" "deposition velocities for o3" "?" state real cu_co_ten ikj misc 1 - - "CU_CO_TEN" "CONV. TRANSPORT FOR CO" "?" + # Tendency diagnostics for chemistry (chemdiag) # # Currently index references to chem array is done within the code and requires @@ -1130,6 +1132,13 @@ state real uvrad ij misc 1 - - "uv_ state real tcosz ij misc 1 - - "TCOSZ " "daily average cossza" "?" state real ttday ij misc 1 - - "TTDAY " "" "?" +# osipov aerosol ph, can't use the name pH because it is taken by the "pertubation height" +# instead of ph I used the full name denoting the "potential of hydrogen" +state real pot_hyd_ph ikj misc 1 - rh "potential_of_hydrogen_pH" "aerosol potential of hydrogen (pH)" "" +# osipov flag to activate the effect of the dust crustal material on thermodynamics +rconfig logical do_crustal namelist,chem 1 .false. rh "activates the effects of crustal material" "true activates cations from dust" "" +rconfig real crustal_mobility namelist,chem max_domains 0.05 rh "mobility of the dust cations" "" "" + #soa diagnostic state real tsoa ikj misc 1 - r "TSOA" "soa dry mass" "ug m^-3" state real bsoa ikj misc 1 - r "BSOA" "bsoa dry mass" "ug m^-3" @@ -3887,6 +3896,11 @@ rconfig real emiss_ash_hgt namelist,chem 1 0. # additional namelist variables to control deposition of the organic condensable vapors rconfig real depo_fact namelist,chem max_domains 0.25 rh "deposition factor for SOA vapors" "" "" +# osipov parametrize fine and coarse dust fraction in the emitted size distribution (for GOCART). NOTE: that coarse mode is derived as 1 - dust_i_fraction +rconfig real dust_i_fraction namelist,chem max_domains 0.001 rh "fraction of the emitted dust allocated to the accumulation mode" "" "" +# osipov multiplicative parameter to tune dust emissions (dust emissions *= dust_emis_sensitivity) +rconfig real dust_emis_sensitivity namelist,chem max_domains 1.0 rh "multiplicative parameter to tune overall dust emissions" "" "" + # track input rconfig integer track_chem_num namelist,chem 1 0 - "number of track chem requested" "" "" @@ -3904,8 +3918,8 @@ rconfig integer mosaic_aerchem_optaa namelist,chem 1 rconfig real af_lambda_start namelist,chem max_domains 200. rh "start wavelength for AF output" "nm" "" rconfig real af_lambda_end namelist,chem max_domains 340. rh "end wavelength for AF output" "nm" "" # Control for ISORROPIA in MADE/SORGAM schemes -rconfig logical do_isorropia namelist,chem 1 .false. rh "flag to use ISORROPIA" -rconfig logical do_n2o5het namelsit,chem 1 .false. rh "flag to do n2o5 heterogenous chemistry via chlorine pathway" +rconfig logical do_isorropia namelist,chem 1 .false. rh "flag to use ISORROPIA" "" "" +rconfig logical do_n2o5het namelist,chem 1 .false. rh "flag to do n2o5 heterogenous chemistry via chlorine pathway" "" "" # CHEMISTRY PACKAGE DEFINITIONS # diff --git a/WRF/arch/postamble b/WRF/arch/postamble index e3bf72200..d5fde4ed2 100755 --- a/WRF/arch/postamble +++ b/WRF/arch/postamble @@ -84,7 +84,7 @@ io_only: esmf_time CONFIGURE_WRFIO_NF CONFIGURE_WRFIO_NFPAR CONFIGURE_WRFIO_PNF ## jcw CPP = /usr/bin/cpp -P -traditional -CFLAGS_LOCAL += -DNCEP_DEBUG_GLOBALSTDOUT -DNCEP_DEBUG_MULTIDIR +# CFLAGS_LOCAL += -DNCEP_DEBUG_GLOBALSTDOUT -DNCEP_DEBUG_MULTIDIR # osipov disable to split the rsls into individual files diff --git a/WRF/chem/KPP/mechanisms/racm_soa_vbs_het/racm_soa_vbs_het.tuv.jmap b/WRF/chem/KPP/mechanisms/racm_soa_vbs_het/racm_soa_vbs_het.tuv.jmap new file mode 100644 index 000000000..609190c2a --- /dev/null +++ b/WRF/chem/KPP/mechanisms/racm_soa_vbs_het/racm_soa_vbs_het.tuv.jmap @@ -0,0 +1,14 @@ +o31d : j_o1d +o33p : j_o3p +no2 : j_no2 +n2o5 : j_n2o5_b +hno3 : j_hno3 +no3o : j_no3_a +hno4 : j_hno4 +ch3o2h : j_ch3ooh +ch2or : j_ch2o_r +ch2om : j_ch2o_m +h2o2 : j_h2o2 +ch3cho : j_ch3cho_a + j_ch3cho_b + j_ch3cho_c +ch3cocho : j_mgly +pan : j_pan_a + j_pan_b diff --git a/WRF/chem/Makefile b/WRF/chem/Makefile index 9bf3acd38..4c11cf2cc 100755 --- a/WRF/chem/Makefile +++ b/WRF/chem/Makefile @@ -1,3 +1,8 @@ +# +# MANUAL CHANGES TO THIS FILE WILL BE LOST +# ... EDIT Makefile_org INSTEAD ... +# this file was written by gen_kpp.c + # # Changing this file requires mods to # WRFV3_top/chem/KPP/util/wkc/change_chem_Makefile.c @@ -56,6 +61,217 @@ MODULES = \ module_data_soa_vbs_het.o \ module_data_sorgam.o \ module_data_sorgam_vbs.o \ + module_kpp_racm_Integr.o \ + module_kpp_racm_Precision.o \ + module_kpp_racm_Parameters.o \ + module_kpp_racm_Jacobian.o \ + module_kpp_racm_JacobianSP.o \ + module_kpp_racm_Update_Rconst.o \ + module_kpp_racm_interface.o \ + module_kpp_racm_esrlsorg_Integr.o \ + module_kpp_racm_esrlsorg_Precision.o \ + module_kpp_racm_esrlsorg_Parameters.o \ + module_kpp_racm_esrlsorg_Jacobian.o \ + module_kpp_racm_esrlsorg_JacobianSP.o \ + module_kpp_racm_esrlsorg_Update_Rconst.o \ + module_kpp_racm_esrlsorg_interface.o \ + module_kpp_cb05_sorg_aq_Integr.o \ + module_kpp_cb05_sorg_aq_Precision.o \ + module_kpp_cb05_sorg_aq_Parameters.o \ + module_kpp_cb05_sorg_aq_Jacobian.o \ + module_kpp_cb05_sorg_aq_JacobianSP.o \ + module_kpp_cb05_sorg_aq_Update_Rconst.o \ + module_kpp_cb05_sorg_aq_interface.o \ + module_kpp_racm_mim_Integr.o \ + module_kpp_racm_mim_Precision.o \ + module_kpp_racm_mim_Parameters.o \ + module_kpp_racm_mim_Jacobian.o \ + module_kpp_racm_mim_JacobianSP.o \ + module_kpp_racm_mim_Update_Rconst.o \ + module_kpp_racm_mim_interface.o \ + module_kpp_crimech_Integr.o \ + module_kpp_crimech_Precision.o \ + module_kpp_crimech_Parameters.o \ + module_kpp_crimech_Jacobian.o \ + module_kpp_crimech_JacobianSP.o \ + module_kpp_crimech_Update_Rconst.o \ + module_kpp_crimech_interface.o \ + module_kpp_racm_soa_vbs_het_Integr.o \ + module_kpp_racm_soa_vbs_het_Precision.o \ + module_kpp_racm_soa_vbs_het_Parameters.o \ + module_kpp_racm_soa_vbs_het_Jacobian.o \ + module_kpp_racm_soa_vbs_het_JacobianSP.o \ + module_kpp_racm_soa_vbs_het_Update_Rconst.o \ + module_kpp_racm_soa_vbs_het_interface.o \ + module_kpp_cri_mosaic_8bin_aq_Integr.o \ + module_kpp_cri_mosaic_8bin_aq_Precision.o \ + module_kpp_cri_mosaic_8bin_aq_Parameters.o \ + module_kpp_cri_mosaic_8bin_aq_Jacobian.o \ + module_kpp_cri_mosaic_8bin_aq_JacobianSP.o \ + module_kpp_cri_mosaic_8bin_aq_Update_Rconst.o \ + module_kpp_cri_mosaic_8bin_aq_interface.o \ + module_kpp_mozart_mosaic_4bin_aq_Integr.o \ + module_kpp_mozart_mosaic_4bin_aq_Precision.o \ + module_kpp_mozart_mosaic_4bin_aq_Parameters.o \ + module_kpp_mozart_mosaic_4bin_aq_Jacobian.o \ + module_kpp_mozart_mosaic_4bin_aq_JacobianSP.o \ + module_kpp_mozart_mosaic_4bin_aq_Update_Rconst.o \ + module_kpp_mozart_mosaic_4bin_aq_interface.o \ + module_kpp_cri_mosaic_4bin_aq_Integr.o \ + module_kpp_cri_mosaic_4bin_aq_Precision.o \ + module_kpp_cri_mosaic_4bin_aq_Parameters.o \ + module_kpp_cri_mosaic_4bin_aq_Jacobian.o \ + module_kpp_cri_mosaic_4bin_aq_JacobianSP.o \ + module_kpp_cri_mosaic_4bin_aq_Update_Rconst.o \ + module_kpp_cri_mosaic_4bin_aq_interface.o \ + module_kpp_saprc99_mosaic_8bin_vbs2_aq_Integr.o \ + module_kpp_saprc99_mosaic_8bin_vbs2_aq_Precision.o \ + module_kpp_saprc99_mosaic_8bin_vbs2_aq_Parameters.o \ + module_kpp_saprc99_mosaic_8bin_vbs2_aq_Jacobian.o \ + module_kpp_saprc99_mosaic_8bin_vbs2_aq_JacobianSP.o \ + module_kpp_saprc99_mosaic_8bin_vbs2_aq_Update_Rconst.o \ + module_kpp_saprc99_mosaic_8bin_vbs2_aq_interface.o \ + module_kpp_racm_soa_vbs_aqchem_Integr.o \ + module_kpp_racm_soa_vbs_aqchem_Precision.o \ + module_kpp_racm_soa_vbs_aqchem_Parameters.o \ + module_kpp_racm_soa_vbs_aqchem_Jacobian.o \ + module_kpp_racm_soa_vbs_aqchem_JacobianSP.o \ + module_kpp_racm_soa_vbs_aqchem_Update_Rconst.o \ + module_kpp_racm_soa_vbs_aqchem_interface.o \ + module_kpp_mozcart_Integr.o \ + module_kpp_mozcart_Precision.o \ + module_kpp_mozcart_Parameters.o \ + module_kpp_mozcart_Jacobian.o \ + module_kpp_mozcart_JacobianSP.o \ + module_kpp_mozcart_Update_Rconst.o \ + module_kpp_mozcart_interface.o \ + module_kpp_cbmz_bb_Integr.o \ + module_kpp_cbmz_bb_Precision.o \ + module_kpp_cbmz_bb_Parameters.o \ + module_kpp_cbmz_bb_Jacobian.o \ + module_kpp_cbmz_bb_JacobianSP.o \ + module_kpp_cbmz_bb_Update_Rconst.o \ + module_kpp_cbmz_bb_interface.o \ + module_kpp_racm_soa_vbs_Integr.o \ + module_kpp_racm_soa_vbs_Precision.o \ + module_kpp_racm_soa_vbs_Parameters.o \ + module_kpp_racm_soa_vbs_Jacobian.o \ + module_kpp_racm_soa_vbs_JacobianSP.o \ + module_kpp_racm_soa_vbs_Update_Rconst.o \ + module_kpp_racm_soa_vbs_interface.o \ + module_kpp_cbm4_Integr.o \ + module_kpp_cbm4_Precision.o \ + module_kpp_cbm4_Parameters.o \ + module_kpp_cbm4_Jacobian.o \ + module_kpp_cbm4_JacobianSP.o \ + module_kpp_cbm4_Update_Rconst.o \ + module_kpp_cbm4_interface.o \ + module_kpp_racmsorg_Integr.o \ + module_kpp_racmsorg_Precision.o \ + module_kpp_racmsorg_Parameters.o \ + module_kpp_racmsorg_Jacobian.o \ + module_kpp_racmsorg_JacobianSP.o \ + module_kpp_racmsorg_Update_Rconst.o \ + module_kpp_racmsorg_interface.o \ + module_kpp_radm2_Integr.o \ + module_kpp_radm2_Precision.o \ + module_kpp_radm2_Parameters.o \ + module_kpp_radm2_Jacobian.o \ + module_kpp_radm2_JacobianSP.o \ + module_kpp_radm2_Update_Rconst.o \ + module_kpp_radm2_interface.o \ + module_kpp_saprc99_Integr.o \ + module_kpp_saprc99_Precision.o \ + module_kpp_saprc99_Parameters.o \ + module_kpp_saprc99_Jacobian.o \ + module_kpp_saprc99_JacobianSP.o \ + module_kpp_saprc99_Update_Rconst.o \ + module_kpp_saprc99_interface.o \ + module_kpp_mozart_mosaic_4bin_Integr.o \ + module_kpp_mozart_mosaic_4bin_Precision.o \ + module_kpp_mozart_mosaic_4bin_Parameters.o \ + module_kpp_mozart_mosaic_4bin_Jacobian.o \ + module_kpp_mozart_mosaic_4bin_JacobianSP.o \ + module_kpp_mozart_mosaic_4bin_Update_Rconst.o \ + module_kpp_mozart_mosaic_4bin_interface.o \ + module_kpp_radm2sorg_Integr.o \ + module_kpp_radm2sorg_Precision.o \ + module_kpp_radm2sorg_Parameters.o \ + module_kpp_radm2sorg_Jacobian.o \ + module_kpp_radm2sorg_JacobianSP.o \ + module_kpp_radm2sorg_Update_Rconst.o \ + module_kpp_radm2sorg_interface.o \ + module_kpp_racm_esrlsorg_aqchem_Integr.o \ + module_kpp_racm_esrlsorg_aqchem_Precision.o \ + module_kpp_racm_esrlsorg_aqchem_Parameters.o \ + module_kpp_racm_esrlsorg_aqchem_Jacobian.o \ + module_kpp_racm_esrlsorg_aqchem_JacobianSP.o \ + module_kpp_racm_esrlsorg_aqchem_Update_Rconst.o \ + module_kpp_racm_esrlsorg_aqchem_interface.o \ + module_kpp_t1_mozcart_Integr.o \ + module_kpp_t1_mozcart_Precision.o \ + module_kpp_t1_mozcart_Parameters.o \ + module_kpp_t1_mozcart_Jacobian.o \ + module_kpp_t1_mozcart_JacobianSP.o \ + module_kpp_t1_mozcart_Update_Rconst.o \ + module_kpp_t1_mozcart_interface.o \ + module_kpp_mozart_Integr.o \ + module_kpp_mozart_Precision.o \ + module_kpp_mozart_Parameters.o \ + module_kpp_mozart_Jacobian.o \ + module_kpp_mozart_JacobianSP.o \ + module_kpp_mozart_Update_Rconst.o \ + module_kpp_mozart_interface.o \ + module_kpp_racmpm_Integr.o \ + module_kpp_racmpm_Precision.o \ + module_kpp_racmpm_Parameters.o \ + module_kpp_racmpm_Jacobian.o \ + module_kpp_racmpm_JacobianSP.o \ + module_kpp_racmpm_Update_Rconst.o \ + module_kpp_racmpm_interface.o \ + module_kpp_nmhc9_Integr.o \ + module_kpp_nmhc9_Precision.o \ + module_kpp_nmhc9_Parameters.o \ + module_kpp_nmhc9_Jacobian.o \ + module_kpp_nmhc9_JacobianSP.o \ + module_kpp_nmhc9_Update_Rconst.o \ + module_kpp_nmhc9_interface.o \ + module_kpp_cbmz_mosaic_Integr.o \ + module_kpp_cbmz_mosaic_Precision.o \ + module_kpp_cbmz_mosaic_Parameters.o \ + module_kpp_cbmz_mosaic_Jacobian.o \ + module_kpp_cbmz_mosaic_JacobianSP.o \ + module_kpp_cbmz_mosaic_Update_Rconst.o \ + module_kpp_cbmz_mosaic_interface.o \ + module_kpp_saprc99_mosaic_4bin_vbs2_Integr.o \ + module_kpp_saprc99_mosaic_4bin_vbs2_Precision.o \ + module_kpp_saprc99_mosaic_4bin_vbs2_Parameters.o \ + module_kpp_saprc99_mosaic_4bin_vbs2_Jacobian.o \ + module_kpp_saprc99_mosaic_4bin_vbs2_JacobianSP.o \ + module_kpp_saprc99_mosaic_4bin_vbs2_Update_Rconst.o \ + module_kpp_saprc99_mosaic_4bin_vbs2_interface.o \ + module_kpp_racmsorg_aqchem_Integr.o \ + module_kpp_racmsorg_aqchem_Precision.o \ + module_kpp_racmsorg_aqchem_Parameters.o \ + module_kpp_racmsorg_aqchem_Jacobian.o \ + module_kpp_racmsorg_aqchem_JacobianSP.o \ + module_kpp_racmsorg_aqchem_Update_Rconst.o \ + module_kpp_racmsorg_aqchem_interface.o \ + module_kpp_cb05_sorg_vbs_aq_Integr.o \ + module_kpp_cb05_sorg_vbs_aq_Precision.o \ + module_kpp_cb05_sorg_vbs_aq_Parameters.o \ + module_kpp_cb05_sorg_vbs_aq_Jacobian.o \ + module_kpp_cb05_sorg_vbs_aq_JacobianSP.o \ + module_kpp_cb05_sorg_vbs_aq_Update_Rconst.o \ + module_kpp_cb05_sorg_vbs_aq_interface.o \ + module_kpp_gocartracm_Integr.o \ + module_kpp_gocartracm_Precision.o \ + module_kpp_gocartracm_Parameters.o \ + module_kpp_gocartracm_Jacobian.o \ + module_kpp_gocartracm_JacobianSP.o \ + module_kpp_gocartracm_Update_Rconst.o \ + module_kpp_gocartracm_interface.o \ + module_wkppc_constants.o \ module_ftuv_subs.o \ module_ghg_fluxes.o \ module_gocart_drydep.o \ @@ -197,6 +413,7 @@ MODULES = \ module_isorev.o OBJS = \ + kpp_mechanism_driver.o \ chemics_init.o \ chem_driver.o \ cloudchem_driver.o \ @@ -226,6 +443,318 @@ clean: @ echo 'use the clean script' # DEPENDENCIES : only dependencies after this line (don't remove the word DEPENDENCIES) +module_kpp_racm_Parameters.o: module_kpp_racm_Precision.o + +module_kpp_racm_Update_Rconst.o: module_kpp_racm_Parameters.o + +module_kpp_racm_Jacobian.o: module_kpp_racm_Parameters.o module_kpp_racm_JacobianSP.o + +module_kpp_racm_Integr.o: module_kpp_racm_Parameters.o module_kpp_racm_Jacobian.o module_kpp_racm_JacobianSP.o module_kpp_racm_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racm_interface.o: module_kpp_racm_Parameters.o module_kpp_racm_Precision.o module_kpp_racm_Integr.o module_kpp_racm_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racm_esrlsorg_Parameters.o: module_kpp_racm_esrlsorg_Precision.o + +module_kpp_racm_esrlsorg_Update_Rconst.o: module_kpp_racm_esrlsorg_Parameters.o + +module_kpp_racm_esrlsorg_Jacobian.o: module_kpp_racm_esrlsorg_Parameters.o module_kpp_racm_esrlsorg_JacobianSP.o + +module_kpp_racm_esrlsorg_Integr.o: module_kpp_racm_esrlsorg_Parameters.o module_kpp_racm_esrlsorg_Jacobian.o module_kpp_racm_esrlsorg_JacobianSP.o module_kpp_racm_esrlsorg_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racm_esrlsorg_interface.o: module_kpp_racm_esrlsorg_Parameters.o module_kpp_racm_esrlsorg_Precision.o module_kpp_racm_esrlsorg_Integr.o module_kpp_racm_esrlsorg_Update_Rconst.o module_wkppc_constants.o + +module_kpp_cb05_sorg_aq_Parameters.o: module_kpp_cb05_sorg_aq_Precision.o + +module_kpp_cb05_sorg_aq_Update_Rconst.o: module_kpp_cb05_sorg_aq_Parameters.o + +module_kpp_cb05_sorg_aq_Jacobian.o: module_kpp_cb05_sorg_aq_Parameters.o module_kpp_cb05_sorg_aq_JacobianSP.o + +module_kpp_cb05_sorg_aq_Integr.o: module_kpp_cb05_sorg_aq_Parameters.o module_kpp_cb05_sorg_aq_Jacobian.o module_kpp_cb05_sorg_aq_JacobianSP.o module_kpp_cb05_sorg_aq_Update_Rconst.o module_wkppc_constants.o + +module_kpp_cb05_sorg_aq_interface.o: module_kpp_cb05_sorg_aq_Parameters.o module_kpp_cb05_sorg_aq_Precision.o module_kpp_cb05_sorg_aq_Integr.o module_kpp_cb05_sorg_aq_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racm_mim_Parameters.o: module_kpp_racm_mim_Precision.o + +module_kpp_racm_mim_Update_Rconst.o: module_kpp_racm_mim_Parameters.o + +module_kpp_racm_mim_Jacobian.o: module_kpp_racm_mim_Parameters.o module_kpp_racm_mim_JacobianSP.o + +module_kpp_racm_mim_Integr.o: module_kpp_racm_mim_Parameters.o module_kpp_racm_mim_Jacobian.o module_kpp_racm_mim_JacobianSP.o module_kpp_racm_mim_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racm_mim_interface.o: module_kpp_racm_mim_Parameters.o module_kpp_racm_mim_Precision.o module_kpp_racm_mim_Integr.o module_kpp_racm_mim_Update_Rconst.o module_wkppc_constants.o + +module_kpp_crimech_Parameters.o: module_kpp_crimech_Precision.o + +module_kpp_crimech_Update_Rconst.o: module_kpp_crimech_Parameters.o + +module_kpp_crimech_Jacobian.o: module_kpp_crimech_Parameters.o module_kpp_crimech_JacobianSP.o + +module_kpp_crimech_Integr.o: module_kpp_crimech_Parameters.o module_kpp_crimech_Jacobian.o module_kpp_crimech_JacobianSP.o module_kpp_crimech_Update_Rconst.o module_wkppc_constants.o + +module_kpp_crimech_interface.o: module_kpp_crimech_Parameters.o module_kpp_crimech_Precision.o module_kpp_crimech_Integr.o module_kpp_crimech_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racm_soa_vbs_het_Parameters.o: module_kpp_racm_soa_vbs_het_Precision.o + +module_kpp_racm_soa_vbs_het_Update_Rconst.o: module_kpp_racm_soa_vbs_het_Parameters.o + +module_kpp_racm_soa_vbs_het_Jacobian.o: module_kpp_racm_soa_vbs_het_Parameters.o module_kpp_racm_soa_vbs_het_JacobianSP.o + +module_kpp_racm_soa_vbs_het_Integr.o: module_kpp_racm_soa_vbs_het_Parameters.o module_kpp_racm_soa_vbs_het_Jacobian.o module_kpp_racm_soa_vbs_het_JacobianSP.o module_kpp_racm_soa_vbs_het_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racm_soa_vbs_het_interface.o: module_kpp_racm_soa_vbs_het_Parameters.o module_kpp_racm_soa_vbs_het_Precision.o module_kpp_racm_soa_vbs_het_Integr.o module_kpp_racm_soa_vbs_het_Update_Rconst.o module_wkppc_constants.o + +module_kpp_cri_mosaic_8bin_aq_Parameters.o: module_kpp_cri_mosaic_8bin_aq_Precision.o + +module_kpp_cri_mosaic_8bin_aq_Update_Rconst.o: module_kpp_cri_mosaic_8bin_aq_Parameters.o + +module_kpp_cri_mosaic_8bin_aq_Jacobian.o: module_kpp_cri_mosaic_8bin_aq_Parameters.o module_kpp_cri_mosaic_8bin_aq_JacobianSP.o + +module_kpp_cri_mosaic_8bin_aq_Integr.o: module_kpp_cri_mosaic_8bin_aq_Parameters.o module_kpp_cri_mosaic_8bin_aq_Jacobian.o module_kpp_cri_mosaic_8bin_aq_JacobianSP.o module_kpp_cri_mosaic_8bin_aq_Update_Rconst.o module_wkppc_constants.o + +module_kpp_cri_mosaic_8bin_aq_interface.o: module_kpp_cri_mosaic_8bin_aq_Parameters.o module_kpp_cri_mosaic_8bin_aq_Precision.o module_kpp_cri_mosaic_8bin_aq_Integr.o module_kpp_cri_mosaic_8bin_aq_Update_Rconst.o module_wkppc_constants.o + +module_kpp_mozart_mosaic_4bin_aq_Parameters.o: module_kpp_mozart_mosaic_4bin_aq_Precision.o + +module_kpp_mozart_mosaic_4bin_aq_Update_Rconst.o: module_kpp_mozart_mosaic_4bin_aq_Parameters.o + +module_kpp_mozart_mosaic_4bin_aq_Jacobian.o: module_kpp_mozart_mosaic_4bin_aq_Parameters.o module_kpp_mozart_mosaic_4bin_aq_JacobianSP.o + +module_kpp_mozart_mosaic_4bin_aq_Integr.o: module_kpp_mozart_mosaic_4bin_aq_Parameters.o module_kpp_mozart_mosaic_4bin_aq_Jacobian.o module_kpp_mozart_mosaic_4bin_aq_JacobianSP.o module_kpp_mozart_mosaic_4bin_aq_Update_Rconst.o module_wkppc_constants.o + +module_kpp_mozart_mosaic_4bin_aq_interface.o: module_kpp_mozart_mosaic_4bin_aq_Parameters.o module_kpp_mozart_mosaic_4bin_aq_Precision.o module_kpp_mozart_mosaic_4bin_aq_Integr.o module_kpp_mozart_mosaic_4bin_aq_Update_Rconst.o module_wkppc_constants.o + +module_kpp_cri_mosaic_4bin_aq_Parameters.o: module_kpp_cri_mosaic_4bin_aq_Precision.o + +module_kpp_cri_mosaic_4bin_aq_Update_Rconst.o: module_kpp_cri_mosaic_4bin_aq_Parameters.o + +module_kpp_cri_mosaic_4bin_aq_Jacobian.o: module_kpp_cri_mosaic_4bin_aq_Parameters.o module_kpp_cri_mosaic_4bin_aq_JacobianSP.o + +module_kpp_cri_mosaic_4bin_aq_Integr.o: module_kpp_cri_mosaic_4bin_aq_Parameters.o module_kpp_cri_mosaic_4bin_aq_Jacobian.o module_kpp_cri_mosaic_4bin_aq_JacobianSP.o module_kpp_cri_mosaic_4bin_aq_Update_Rconst.o module_wkppc_constants.o + +module_kpp_cri_mosaic_4bin_aq_interface.o: module_kpp_cri_mosaic_4bin_aq_Parameters.o module_kpp_cri_mosaic_4bin_aq_Precision.o module_kpp_cri_mosaic_4bin_aq_Integr.o module_kpp_cri_mosaic_4bin_aq_Update_Rconst.o module_wkppc_constants.o + +module_kpp_saprc99_mosaic_8bin_vbs2_aq_Parameters.o: module_kpp_saprc99_mosaic_8bin_vbs2_aq_Precision.o + +module_kpp_saprc99_mosaic_8bin_vbs2_aq_Update_Rconst.o: module_kpp_saprc99_mosaic_8bin_vbs2_aq_Parameters.o + +module_kpp_saprc99_mosaic_8bin_vbs2_aq_Jacobian.o: module_kpp_saprc99_mosaic_8bin_vbs2_aq_Parameters.o module_kpp_saprc99_mosaic_8bin_vbs2_aq_JacobianSP.o + +module_kpp_saprc99_mosaic_8bin_vbs2_aq_Integr.o: module_kpp_saprc99_mosaic_8bin_vbs2_aq_Parameters.o module_kpp_saprc99_mosaic_8bin_vbs2_aq_Jacobian.o module_kpp_saprc99_mosaic_8bin_vbs2_aq_JacobianSP.o module_kpp_saprc99_mosaic_8bin_vbs2_aq_Update_Rconst.o module_wkppc_constants.o + +module_kpp_saprc99_mosaic_8bin_vbs2_aq_interface.o: module_kpp_saprc99_mosaic_8bin_vbs2_aq_Parameters.o module_kpp_saprc99_mosaic_8bin_vbs2_aq_Precision.o module_kpp_saprc99_mosaic_8bin_vbs2_aq_Integr.o module_kpp_saprc99_mosaic_8bin_vbs2_aq_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racm_soa_vbs_aqchem_Parameters.o: module_kpp_racm_soa_vbs_aqchem_Precision.o + +module_kpp_racm_soa_vbs_aqchem_Update_Rconst.o: module_kpp_racm_soa_vbs_aqchem_Parameters.o + +module_kpp_racm_soa_vbs_aqchem_Jacobian.o: module_kpp_racm_soa_vbs_aqchem_Parameters.o module_kpp_racm_soa_vbs_aqchem_JacobianSP.o + +module_kpp_racm_soa_vbs_aqchem_Integr.o: module_kpp_racm_soa_vbs_aqchem_Parameters.o module_kpp_racm_soa_vbs_aqchem_Jacobian.o module_kpp_racm_soa_vbs_aqchem_JacobianSP.o module_kpp_racm_soa_vbs_aqchem_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racm_soa_vbs_aqchem_interface.o: module_kpp_racm_soa_vbs_aqchem_Parameters.o module_kpp_racm_soa_vbs_aqchem_Precision.o module_kpp_racm_soa_vbs_aqchem_Integr.o module_kpp_racm_soa_vbs_aqchem_Update_Rconst.o module_wkppc_constants.o + +module_kpp_mozcart_Parameters.o: module_kpp_mozcart_Precision.o + +module_kpp_mozcart_Update_Rconst.o: module_kpp_mozcart_Parameters.o + +module_kpp_mozcart_Jacobian.o: module_kpp_mozcart_Parameters.o module_kpp_mozcart_JacobianSP.o + +module_kpp_mozcart_Integr.o: module_kpp_mozcart_Parameters.o module_kpp_mozcart_Jacobian.o module_kpp_mozcart_JacobianSP.o module_kpp_mozcart_Update_Rconst.o module_wkppc_constants.o + +module_kpp_mozcart_interface.o: module_kpp_mozcart_Parameters.o module_kpp_mozcart_Precision.o module_kpp_mozcart_Integr.o module_kpp_mozcart_Update_Rconst.o module_wkppc_constants.o + +module_kpp_cbmz_bb_Parameters.o: module_kpp_cbmz_bb_Precision.o + +module_kpp_cbmz_bb_Update_Rconst.o: module_kpp_cbmz_bb_Parameters.o + +module_kpp_cbmz_bb_Jacobian.o: module_kpp_cbmz_bb_Parameters.o module_kpp_cbmz_bb_JacobianSP.o + +module_kpp_cbmz_bb_Integr.o: module_kpp_cbmz_bb_Parameters.o module_kpp_cbmz_bb_Jacobian.o module_kpp_cbmz_bb_JacobianSP.o module_kpp_cbmz_bb_Update_Rconst.o module_wkppc_constants.o + +module_kpp_cbmz_bb_interface.o: module_kpp_cbmz_bb_Parameters.o module_kpp_cbmz_bb_Precision.o module_kpp_cbmz_bb_Integr.o module_kpp_cbmz_bb_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racm_soa_vbs_Parameters.o: module_kpp_racm_soa_vbs_Precision.o + +module_kpp_racm_soa_vbs_Update_Rconst.o: module_kpp_racm_soa_vbs_Parameters.o + +module_kpp_racm_soa_vbs_Jacobian.o: module_kpp_racm_soa_vbs_Parameters.o module_kpp_racm_soa_vbs_JacobianSP.o + +module_kpp_racm_soa_vbs_Integr.o: module_kpp_racm_soa_vbs_Parameters.o module_kpp_racm_soa_vbs_Jacobian.o module_kpp_racm_soa_vbs_JacobianSP.o module_kpp_racm_soa_vbs_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racm_soa_vbs_interface.o: module_kpp_racm_soa_vbs_Parameters.o module_kpp_racm_soa_vbs_Precision.o module_kpp_racm_soa_vbs_Integr.o module_kpp_racm_soa_vbs_Update_Rconst.o module_wkppc_constants.o + +module_kpp_cbm4_Parameters.o: module_kpp_cbm4_Precision.o + +module_kpp_cbm4_Update_Rconst.o: module_kpp_cbm4_Parameters.o + +module_kpp_cbm4_Jacobian.o: module_kpp_cbm4_Parameters.o module_kpp_cbm4_JacobianSP.o + +module_kpp_cbm4_Integr.o: module_kpp_cbm4_Parameters.o module_kpp_cbm4_Jacobian.o module_kpp_cbm4_JacobianSP.o module_kpp_cbm4_Update_Rconst.o module_wkppc_constants.o + +module_kpp_cbm4_interface.o: module_kpp_cbm4_Parameters.o module_kpp_cbm4_Precision.o module_kpp_cbm4_Integr.o module_kpp_cbm4_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racmsorg_Parameters.o: module_kpp_racmsorg_Precision.o + +module_kpp_racmsorg_Update_Rconst.o: module_kpp_racmsorg_Parameters.o + +module_kpp_racmsorg_Jacobian.o: module_kpp_racmsorg_Parameters.o module_kpp_racmsorg_JacobianSP.o + +module_kpp_racmsorg_Integr.o: module_kpp_racmsorg_Parameters.o module_kpp_racmsorg_Jacobian.o module_kpp_racmsorg_JacobianSP.o module_kpp_racmsorg_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racmsorg_interface.o: module_kpp_racmsorg_Parameters.o module_kpp_racmsorg_Precision.o module_kpp_racmsorg_Integr.o module_kpp_racmsorg_Update_Rconst.o module_wkppc_constants.o + +module_kpp_radm2_Parameters.o: module_kpp_radm2_Precision.o + +module_kpp_radm2_Update_Rconst.o: module_kpp_radm2_Parameters.o + +module_kpp_radm2_Jacobian.o: module_kpp_radm2_Parameters.o module_kpp_radm2_JacobianSP.o + +module_kpp_radm2_Integr.o: module_kpp_radm2_Parameters.o module_kpp_radm2_Jacobian.o module_kpp_radm2_JacobianSP.o module_kpp_radm2_Update_Rconst.o module_wkppc_constants.o + +module_kpp_radm2_interface.o: module_kpp_radm2_Parameters.o module_kpp_radm2_Precision.o module_kpp_radm2_Integr.o module_kpp_radm2_Update_Rconst.o module_wkppc_constants.o + +module_kpp_saprc99_Parameters.o: module_kpp_saprc99_Precision.o + +module_kpp_saprc99_Update_Rconst.o: module_kpp_saprc99_Parameters.o + +module_kpp_saprc99_Jacobian.o: module_kpp_saprc99_Parameters.o module_kpp_saprc99_JacobianSP.o + +module_kpp_saprc99_Integr.o: module_kpp_saprc99_Parameters.o module_kpp_saprc99_Jacobian.o module_kpp_saprc99_JacobianSP.o module_kpp_saprc99_Update_Rconst.o module_wkppc_constants.o + +module_kpp_saprc99_interface.o: module_kpp_saprc99_Parameters.o module_kpp_saprc99_Precision.o module_kpp_saprc99_Integr.o module_kpp_saprc99_Update_Rconst.o module_wkppc_constants.o + +module_kpp_mozart_mosaic_4bin_Parameters.o: module_kpp_mozart_mosaic_4bin_Precision.o + +module_kpp_mozart_mosaic_4bin_Update_Rconst.o: module_kpp_mozart_mosaic_4bin_Parameters.o + +module_kpp_mozart_mosaic_4bin_Jacobian.o: module_kpp_mozart_mosaic_4bin_Parameters.o module_kpp_mozart_mosaic_4bin_JacobianSP.o + +module_kpp_mozart_mosaic_4bin_Integr.o: module_kpp_mozart_mosaic_4bin_Parameters.o module_kpp_mozart_mosaic_4bin_Jacobian.o module_kpp_mozart_mosaic_4bin_JacobianSP.o module_kpp_mozart_mosaic_4bin_Update_Rconst.o module_wkppc_constants.o + +module_kpp_mozart_mosaic_4bin_interface.o: module_kpp_mozart_mosaic_4bin_Parameters.o module_kpp_mozart_mosaic_4bin_Precision.o module_kpp_mozart_mosaic_4bin_Integr.o module_kpp_mozart_mosaic_4bin_Update_Rconst.o module_wkppc_constants.o + +module_kpp_radm2sorg_Parameters.o: module_kpp_radm2sorg_Precision.o + +module_kpp_radm2sorg_Update_Rconst.o: module_kpp_radm2sorg_Parameters.o + +module_kpp_radm2sorg_Jacobian.o: module_kpp_radm2sorg_Parameters.o module_kpp_radm2sorg_JacobianSP.o + +module_kpp_radm2sorg_Integr.o: module_kpp_radm2sorg_Parameters.o module_kpp_radm2sorg_Jacobian.o module_kpp_radm2sorg_JacobianSP.o module_kpp_radm2sorg_Update_Rconst.o module_wkppc_constants.o + +module_kpp_radm2sorg_interface.o: module_kpp_radm2sorg_Parameters.o module_kpp_radm2sorg_Precision.o module_kpp_radm2sorg_Integr.o module_kpp_radm2sorg_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racm_esrlsorg_aqchem_Parameters.o: module_kpp_racm_esrlsorg_aqchem_Precision.o + +module_kpp_racm_esrlsorg_aqchem_Update_Rconst.o: module_kpp_racm_esrlsorg_aqchem_Parameters.o + +module_kpp_racm_esrlsorg_aqchem_Jacobian.o: module_kpp_racm_esrlsorg_aqchem_Parameters.o module_kpp_racm_esrlsorg_aqchem_JacobianSP.o + +module_kpp_racm_esrlsorg_aqchem_Integr.o: module_kpp_racm_esrlsorg_aqchem_Parameters.o module_kpp_racm_esrlsorg_aqchem_Jacobian.o module_kpp_racm_esrlsorg_aqchem_JacobianSP.o module_kpp_racm_esrlsorg_aqchem_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racm_esrlsorg_aqchem_interface.o: module_kpp_racm_esrlsorg_aqchem_Parameters.o module_kpp_racm_esrlsorg_aqchem_Precision.o module_kpp_racm_esrlsorg_aqchem_Integr.o module_kpp_racm_esrlsorg_aqchem_Update_Rconst.o module_wkppc_constants.o + +module_kpp_t1_mozcart_Parameters.o: module_kpp_t1_mozcart_Precision.o + +module_kpp_t1_mozcart_Update_Rconst.o: module_kpp_t1_mozcart_Parameters.o + +module_kpp_t1_mozcart_Jacobian.o: module_kpp_t1_mozcart_Parameters.o module_kpp_t1_mozcart_JacobianSP.o + +module_kpp_t1_mozcart_Integr.o: module_kpp_t1_mozcart_Parameters.o module_kpp_t1_mozcart_Jacobian.o module_kpp_t1_mozcart_JacobianSP.o module_kpp_t1_mozcart_Update_Rconst.o module_wkppc_constants.o + +module_kpp_t1_mozcart_interface.o: module_kpp_t1_mozcart_Parameters.o module_kpp_t1_mozcart_Precision.o module_kpp_t1_mozcart_Integr.o module_kpp_t1_mozcart_Update_Rconst.o module_wkppc_constants.o + +module_kpp_mozart_Parameters.o: module_kpp_mozart_Precision.o + +module_kpp_mozart_Update_Rconst.o: module_kpp_mozart_Parameters.o + +module_kpp_mozart_Jacobian.o: module_kpp_mozart_Parameters.o module_kpp_mozart_JacobianSP.o + +module_kpp_mozart_Integr.o: module_kpp_mozart_Parameters.o module_kpp_mozart_Jacobian.o module_kpp_mozart_JacobianSP.o module_kpp_mozart_Update_Rconst.o module_wkppc_constants.o + +module_kpp_mozart_interface.o: module_kpp_mozart_Parameters.o module_kpp_mozart_Precision.o module_kpp_mozart_Integr.o module_kpp_mozart_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racmpm_Parameters.o: module_kpp_racmpm_Precision.o + +module_kpp_racmpm_Update_Rconst.o: module_kpp_racmpm_Parameters.o + +module_kpp_racmpm_Jacobian.o: module_kpp_racmpm_Parameters.o module_kpp_racmpm_JacobianSP.o + +module_kpp_racmpm_Integr.o: module_kpp_racmpm_Parameters.o module_kpp_racmpm_Jacobian.o module_kpp_racmpm_JacobianSP.o module_kpp_racmpm_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racmpm_interface.o: module_kpp_racmpm_Parameters.o module_kpp_racmpm_Precision.o module_kpp_racmpm_Integr.o module_kpp_racmpm_Update_Rconst.o module_wkppc_constants.o + +module_kpp_nmhc9_Parameters.o: module_kpp_nmhc9_Precision.o + +module_kpp_nmhc9_Update_Rconst.o: module_kpp_nmhc9_Parameters.o + +module_kpp_nmhc9_Jacobian.o: module_kpp_nmhc9_Parameters.o module_kpp_nmhc9_JacobianSP.o + +module_kpp_nmhc9_Integr.o: module_kpp_nmhc9_Parameters.o module_kpp_nmhc9_Jacobian.o module_kpp_nmhc9_JacobianSP.o module_kpp_nmhc9_Update_Rconst.o module_wkppc_constants.o + +module_kpp_nmhc9_interface.o: module_kpp_nmhc9_Parameters.o module_kpp_nmhc9_Precision.o module_kpp_nmhc9_Integr.o module_kpp_nmhc9_Update_Rconst.o module_wkppc_constants.o + +module_kpp_cbmz_mosaic_Parameters.o: module_kpp_cbmz_mosaic_Precision.o + +module_kpp_cbmz_mosaic_Update_Rconst.o: module_kpp_cbmz_mosaic_Parameters.o + +module_kpp_cbmz_mosaic_Jacobian.o: module_kpp_cbmz_mosaic_Parameters.o module_kpp_cbmz_mosaic_JacobianSP.o + +module_kpp_cbmz_mosaic_Integr.o: module_kpp_cbmz_mosaic_Parameters.o module_kpp_cbmz_mosaic_Jacobian.o module_kpp_cbmz_mosaic_JacobianSP.o module_kpp_cbmz_mosaic_Update_Rconst.o module_wkppc_constants.o + +module_kpp_cbmz_mosaic_interface.o: module_kpp_cbmz_mosaic_Parameters.o module_kpp_cbmz_mosaic_Precision.o module_kpp_cbmz_mosaic_Integr.o module_kpp_cbmz_mosaic_Update_Rconst.o module_wkppc_constants.o + +module_kpp_saprc99_mosaic_4bin_vbs2_Parameters.o: module_kpp_saprc99_mosaic_4bin_vbs2_Precision.o + +module_kpp_saprc99_mosaic_4bin_vbs2_Update_Rconst.o: module_kpp_saprc99_mosaic_4bin_vbs2_Parameters.o + +module_kpp_saprc99_mosaic_4bin_vbs2_Jacobian.o: module_kpp_saprc99_mosaic_4bin_vbs2_Parameters.o module_kpp_saprc99_mosaic_4bin_vbs2_JacobianSP.o + +module_kpp_saprc99_mosaic_4bin_vbs2_Integr.o: module_kpp_saprc99_mosaic_4bin_vbs2_Parameters.o module_kpp_saprc99_mosaic_4bin_vbs2_Jacobian.o module_kpp_saprc99_mosaic_4bin_vbs2_JacobianSP.o module_kpp_saprc99_mosaic_4bin_vbs2_Update_Rconst.o module_wkppc_constants.o + +module_kpp_saprc99_mosaic_4bin_vbs2_interface.o: module_kpp_saprc99_mosaic_4bin_vbs2_Parameters.o module_kpp_saprc99_mosaic_4bin_vbs2_Precision.o module_kpp_saprc99_mosaic_4bin_vbs2_Integr.o module_kpp_saprc99_mosaic_4bin_vbs2_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racmsorg_aqchem_Parameters.o: module_kpp_racmsorg_aqchem_Precision.o + +module_kpp_racmsorg_aqchem_Update_Rconst.o: module_kpp_racmsorg_aqchem_Parameters.o + +module_kpp_racmsorg_aqchem_Jacobian.o: module_kpp_racmsorg_aqchem_Parameters.o module_kpp_racmsorg_aqchem_JacobianSP.o + +module_kpp_racmsorg_aqchem_Integr.o: module_kpp_racmsorg_aqchem_Parameters.o module_kpp_racmsorg_aqchem_Jacobian.o module_kpp_racmsorg_aqchem_JacobianSP.o module_kpp_racmsorg_aqchem_Update_Rconst.o module_wkppc_constants.o + +module_kpp_racmsorg_aqchem_interface.o: module_kpp_racmsorg_aqchem_Parameters.o module_kpp_racmsorg_aqchem_Precision.o module_kpp_racmsorg_aqchem_Integr.o module_kpp_racmsorg_aqchem_Update_Rconst.o module_wkppc_constants.o + +module_kpp_cb05_sorg_vbs_aq_Parameters.o: module_kpp_cb05_sorg_vbs_aq_Precision.o + +module_kpp_cb05_sorg_vbs_aq_Update_Rconst.o: module_kpp_cb05_sorg_vbs_aq_Parameters.o + +module_kpp_cb05_sorg_vbs_aq_Jacobian.o: module_kpp_cb05_sorg_vbs_aq_Parameters.o module_kpp_cb05_sorg_vbs_aq_JacobianSP.o + +module_kpp_cb05_sorg_vbs_aq_Integr.o: module_kpp_cb05_sorg_vbs_aq_Parameters.o module_kpp_cb05_sorg_vbs_aq_Jacobian.o module_kpp_cb05_sorg_vbs_aq_JacobianSP.o module_kpp_cb05_sorg_vbs_aq_Update_Rconst.o module_wkppc_constants.o + +module_kpp_cb05_sorg_vbs_aq_interface.o: module_kpp_cb05_sorg_vbs_aq_Parameters.o module_kpp_cb05_sorg_vbs_aq_Precision.o module_kpp_cb05_sorg_vbs_aq_Integr.o module_kpp_cb05_sorg_vbs_aq_Update_Rconst.o module_wkppc_constants.o + +module_kpp_gocartracm_Parameters.o: module_kpp_gocartracm_Precision.o + +module_kpp_gocartracm_Update_Rconst.o: module_kpp_gocartracm_Parameters.o + +module_kpp_gocartracm_Jacobian.o: module_kpp_gocartracm_Parameters.o module_kpp_gocartracm_JacobianSP.o + +module_kpp_gocartracm_Integr.o: module_kpp_gocartracm_Parameters.o module_kpp_gocartracm_Jacobian.o module_kpp_gocartracm_JacobianSP.o module_kpp_gocartracm_Update_Rconst.o module_wkppc_constants.o + +module_kpp_gocartracm_interface.o: module_kpp_gocartracm_Parameters.o module_kpp_gocartracm_Precision.o module_kpp_gocartracm_Integr.o module_kpp_gocartracm_Update_Rconst.o module_wkppc_constants.o + +module_wkkpc_constants.o: + +kpp_mechanism_driver.o: module_kpp_racm_interface.o module_kpp_racm_esrlsorg_interface.o module_kpp_cb05_sorg_aq_interface.o \ + module_kpp_racm_mim_interface.o module_kpp_crimech_interface.o module_kpp_racm_soa_vbs_het_interface.o \ + module_kpp_cri_mosaic_8bin_aq_interface.o module_kpp_mozart_mosaic_4bin_aq_interface.o module_kpp_cri_mosaic_4bin_aq_interface.o \ + module_kpp_saprc99_mosaic_8bin_vbs2_aq_interface.o module_kpp_racm_soa_vbs_aqchem_interface.o \ + module_kpp_mozcart_interface.o module_kpp_cbmz_bb_interface.o module_kpp_racm_soa_vbs_interface.o \ + module_kpp_cbm4_interface.o module_kpp_racmsorg_interface.o module_kpp_radm2_interface.o module_kpp_saprc99_interface.o \ + module_kpp_mozart_mosaic_4bin_interface.o module_kpp_radm2sorg_interface.o module_kpp_racm_esrlsorg_aqchem_interface.o \ + module_kpp_t1_mozcart_interface.o module_kpp_mozart_interface.o module_kpp_racmpm_interface.o \ + module_kpp_nmhc9_interface.o module_kpp_cbmz_mosaic_interface.o module_kpp_saprc99_mosaic_4bin_vbs2_interface.o \ + module_kpp_racmsorg_aqchem_interface.o module_kpp_cb05_sorg_vbs_aq_interface.o module_kpp_gocartracm_interface.o include depend.chem diff --git a/WRF/chem/aerosol_driver.F b/WRF/chem/aerosol_driver.F index 92b424d7f..a395ea0b8 100755 --- a/WRF/chem/aerosol_driver.F +++ b/WRF/chem/aerosol_driver.F @@ -16,6 +16,7 @@ SUBROUTINE aerosols_driver (id,curr_secs,ktau,dtstep,ktauc, & vdrog3, vdrog3_vbs,brch_ratio,dgnum,dgnumwet,wetdens_ap, & del_h2so4_gasprod,dvmrdt_sv13d,dvmrcwdt_sv13d, & is_CAMMGMP_used, &!BSINGH:01/31/2013: Added is_CAMMGMP_used for cam_mam_aerchem_driver + ph, & ! osipov, ph ph_aer01, ph_aer02, ph_aer03, ph_aer04, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & @@ -142,7 +143,9 @@ SUBROUTINE aerosols_driver (id,curr_secs,ktau,dtstep,ktauc, & INTENT(INOUT ) :: & gamn2o5,cn2o5,kn2o5,yclno2,snu,sac, & h2oaj,h2oai,nu3,ac3,cor3,asulf,ahno3,anh3,cvaro1,cvaro2, & - cvalk1,cvole1,cvapi1,cvapi2,cvlim1,cvlim2,brch_ratio + cvalk1,cvole1,cvapi1,cvapi2,cvlim1,cvlim2,brch_ratio, & + ph ! osipov, aerosol ph + REAL, DIMENSION( ims:ime, kms:kme, jms:jme, ntot_amode_cam_mam ), & INTENT(INOUT ) :: & @@ -330,12 +333,12 @@ SUBROUTINE aerosols_driver (id,curr_secs,ktau,dtstep,ktauc, & enddo enddo enddo - call soa_vbs_het_driver ( id,ktauc,dtstepc,t_phy,moist,aerwrf,p8w,t8w, & + call soa_vbs_het_driver ( id,config_flags,ktauc,dtstepc,t_phy,moist,aerwrf,p8w,t8w, & ! osipov alt,p_phy,chem,rho_phy,dz8w,rh,z,z_at_w, & gamn2o5,cn2o5,kn2o5,yclno2,snu,sac, & h2oaj,h2oai,nu3,ac3,cor3,asulf,ahno3,anh3, & vcsulf_old,vdrog3_vbs, & - config_flags%kemit,brch_ratio, & + config_flags%kemit,brch_ratio,ph, & ! osipov, ph config_flags%do_isorropia, & config_flags%do_n2o5het, & ids,ide, jds,jde, kds,kde, & diff --git a/WRF/chem/chem_driver.F b/WRF/chem/chem_driver.F index 4c8268df1..894733e7f 100755 --- a/WRF/chem/chem_driver.F +++ b/WRF/chem/chem_driver.F @@ -1578,6 +1578,7 @@ end SUBROUTINE sum_pm_driver vdrog3,vdrog3_vbs,grid%br_rto,grid%dgnum4d,grid%dgnumwet4d,wetdens_ap, & del_h2so4_gasprod,grid%dvmrdt_sv13d,grid%dvmrcwdt_sv13d, & grid%is_CAMMGMP_used, & + grid%pot_hyd_ph, & ! osipov, ph grid%ph_aer01, grid%ph_aer02, grid%ph_aer03, grid%ph_aer04, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & diff --git a/WRF/chem/chemics_init.F b/WRF/chem/chemics_init.F index 59f054688..97c7a025f 100755 --- a/WRF/chem/chemics_init.F +++ b/WRF/chem/chemics_init.F @@ -37,6 +37,7 @@ subroutine chem_init (id,chem,emis_ant,scalar,dt,bioemdt,photdt,chemdt,stepbioe, USE module_mozcart_wetscav, only : wetscav_mozcart_init USE module_aerosols_sorgam USE module_aerosols_soa_vbs, only: aerosols_soa_vbs_init + USE module_aerosols_soa_vbs_het, only: aerosols_soa_vbs_het_init USE module_aerosols_sorgam_vbs, only: aerosols_sorgam_vbs_init USE module_dep_simple USE module_data_gocart_dust @@ -303,6 +304,10 @@ subroutine chem_init (id,chem,emis_ant,scalar,dt,bioemdt,photdt,chemdt,stepbioe, if (config_flags%chem_opt /= mozart_mosaic_4bin_kpp .and. & config_flags%chem_opt /= mozart_mosaic_4bin_aq_kpp .and. & config_flags%chem_opt /= mozcart_kpp .and. & + ! osipov TODO: TUV is not compatible with chem_opt 106, produces too low OH + ! To make it work, I've added the tuv.map from Ravan Ahmadov & Jordan Schnell + ! config_flags%chem_opt /= radm2sorg_kpp .and. & + config_flags%chem_opt /= racm_soa_vbs_het_kpp .and. & config_flags%chem_opt /= t1_mozcart_kpp) THEN write(message_txt,'(''--- ERROR: chem_opt '',i3,'' not setup for TUV photolysis at this time'')') & config_flags%chem_opt @@ -426,6 +431,12 @@ subroutine chem_init (id,chem,emis_ant,scalar,dt,bioemdt,photdt,chemdt,stepbioe, call wrf_error_fatal( trim(message_txt) ) endif + ! osipov check that ddflx & ddlen has correct dim size (chem_opt=106 and such) + if ( config_flags%diagnostic_dep .EQ. 1 .AND. config_flags%ne_area .LT. num_chem ) then + write(message_txt,'(''ERROR: SORGAM diagnostic_dep 1 requires ne_area('',i6,'') >= num_chem('',i6,'')'')') config_flags%ne_area,num_chem + call wrf_error_fatal( trim(message_txt) ) + endif + IF ( config_flags%chem_opt == 0 .AND. config_flags%aer_ra_feedback .NE. 0 ) THEN ! config_flags%aer_ra_feedback = 0 call wrf_error_fatal(" ERROR: CHEM_INIT: FOR CHEM_OPT = 0, AER_RA_FEEDBACK MUST = 0 ") @@ -1847,7 +1858,7 @@ subroutine chem_init (id,chem,emis_ant,scalar,dt,bioemdt,photdt,chemdt,stepbioe, endif endif chem(its:ite,kts:min(kte,kde-1),jts:jte,:)=max(chem(its:ite,kts:min(kte,kde-1),jts:jte,:),epsilc) - CASE (RACM_SOA_VBS_KPP,RACM_SOA_VBS_AQCHEM_KPP,RACM_SOA_VBS_HET_KPP) + CASE (RACM_SOA_VBS_KPP,RACM_SOA_VBS_AQCHEM_KPP) CALL wrf_debug(15,'call MADE/SOA_VBS aerosols initialization') call aerosols_soa_vbs_init(chem,convfac,z_at_w, & @@ -1859,8 +1870,37 @@ subroutine chem_init (id,chem,emis_ant,scalar,dt,bioemdt,photdt,chemdt,stepbioe, !!!TUCCELLA (BUG, before it was called in module_aerosols_soa_vbs.F) ! initialize pointers used by aerosol-cloud-interaction routines - call aerosols_soa_vbs_init_aercld_ptrs( & - num_chem, is_aerosol, config_flags ) + call aerosols_soa_vbs_init_aercld_ptrs(num_chem, is_aerosol, config_flags ) + +!...Convert aerosols to mixing ratio + if( .NOT. config_flags%restart ) then + if(config_flags%chem_in_opt == 0 .and. num_chem.gt.numgas)then + do l=numgas+1,num_chem + do j=jts,jte + do k=kts,kte + kk = min(k,kde-1) + do i=its,ite + chem(i,k,j,l)=chem(i,kk,j,l)*alt(i,kk,j) + enddo + enddo + enddo + enddo + endif + endif + chem(its:ite,kts:min(kte,kde-1),jts:jte,:)=max(chem(its:ite,kts:min(kte,kde-1),jts:jte,:),epsilc) + CASE (RACM_SOA_VBS_HET_KPP) + CALL wrf_debug(15,'call MADE/SOA_VBS aerosols initialization') + + call aerosols_soa_vbs_het_init(chem,convfac,z_at_w, & + pm2_5_dry,pm2_5_water,pm2_5_dry_ec, & + chem_in_opt,config_flags%aer_ic_opt,is_aerosol, & + ids,ide, jds,jde, kds,kde, & + ims,ime, jms,jme, kms,kme, & + its,ite, jts,jte, kts,kte, config_flags ) + +!!!TUCCELLA (BUG, before it was called in module_aerosols_soa_vbs.F) + ! initialize pointers used by aerosol-cloud-interaction routines + call aerosols_soa_vbs_init_aercld_ptrs(num_chem, is_aerosol, config_flags ) !...Convert aerosols to mixing ratio if( .NOT. config_flags%restart ) then diff --git a/WRF/chem/dry_dep_driver.F b/WRF/chem/dry_dep_driver.F index b5c2f6650..bd45e523e 100755 --- a/WRF/chem/dry_dep_driver.F +++ b/WRF/chem/dry_dep_driver.F @@ -204,6 +204,9 @@ subroutine dry_dep_driver(id,curr_secs,ktau,dtstep,config_flags, & integer :: k_a, k_c, kmax, m_mam real, dimension( its:ite, jts:jte ) :: frac_removed + ! osipov add temproray aerosol indexer for for-loop + integer :: p_aer + ! .. ! .. Intrinsic Functions .. @@ -373,6 +376,26 @@ subroutine dry_dep_driver(id,curr_secs,ktau,dtstep,config_flags, & enddo endif +! +! osipovs, add the deposition diagnostics for RADM2 SORGAM cases +! //TODO: check carefully the list of tracers, should match the registry.chem +! +! osipov debug this code should be removed +!# if 0 + if( config_flags%diagnostic_chem == DEPVEL1 .and. & + config_flags%chem_opt == RADM2SORG_KPP ) then + do j = jts,jte + dvel(its:ite,1,j,p_dvel_o3) = m2cm*ddvel(its:ite,j,p_o3) + dvel(its:ite,1,j,p_dvel_no) = m2cm*ddvel(its:ite,j,p_no) + dvel(its:ite,1,j,p_dvel_no2) = m2cm*ddvel(its:ite,j,p_no2) + dvel(its:ite,1,j,p_dvel_nh3) = m2cm*ddvel(its:ite,j,p_nh3) + dvel(its:ite,1,j,p_dvel_so2) = m2cm*ddvel(its:ite,j,p_so2) + dvel(its:ite,1,j,p_dvel_so4) = m2cm*ddvel(its:ite,j,p_sulf) + dvel(its:ite,1,j,p_dvel_hno3) = m2cm*ddvel(its:ite,j,p_hno3) + enddo + endif +!# endif + ELSEIF ( config_flags%chem_opt == GOCART_SIMPLE ) then call wesely_driver(id,ktau,dtstep, & config_flags,current_month, & @@ -449,7 +472,7 @@ subroutine dry_dep_driver(id,curr_secs,ktau,dtstep,config_flags, & if( config_flags%diagnostic_dep == 1) then do i = its, ite do j = jts, jte - ddflx(i, j,1:numgas)=ddflx(i,j,1:numgas)+chem(i,kts,j,1:numgas)*p_phy(i,kts,j)/(RSI*t_phy(i,kts,j))*ddvel(i,j,1:numgas)*dtstep*1.E-6 + ddflx(i,j,1:numgas)=ddflx(i,j,1:numgas)+chem(i,kts,j,1:numgas)*p_phy(i,kts,j)/(RSI*t_phy(i,kts,j))*ddvel(i,j,1:numgas)*dtstep*1.E-6 enddo enddo end if @@ -630,6 +653,25 @@ subroutine dry_dep_driver(id,curr_secs,ktau,dtstep,config_flags, & end if end if + ! osipov, Add deposition diags for sorgam case. Calculations for gases are above + if( config_flags%diagnostic_dep == 1 .and. & + config_flags%chem_opt == RACM_SOA_VBS_HET_KPP) then + ! diags for the surface level + k=kts + ! osipov, in principle this can be shorted via ddvel(:,:,numgas+1:num_chem) + ! print *,'osipov numgas=',numgas, ' num_chem=', num_chem, ' p_soila=', p_soila + do p_aer = numgas+1, num_chem ! borrow variable from mam + ddflx(its:ite,jts:jte,p_aer)=ddflx(its:ite,jts:jte,p_aer)+chem(its:ite,k,jts:jte,p_aer)/alt(its:ite,k,jts:jte)*ddvel(its:ite,jts:jte,p_aer)*dtstep + enddo + ! or do everything by hand, see module_aerosols_sorgam.F +! ddflx(i,j,p_so4aj)=ddflx(i,j,p_so4aj)+chem(i,k,j,p_so4aj)/alt(i,k,j)*ddvel(i,j,VSO4AJ)*dtstep +! ddflx(i,j,p_so4ai)=ddflx(i,j,p_so4ai)+chem(i,k,j,p_so4ai)/alt(i,k,j)*ddvel(i,j,VSO4AI)*dtstepn of MPI call statistics, +! ... +! ddflx(i,j,p_nu0)=ddflx(i,j,p_nu0)+chem(i,k,j,p_nu0)/alt(i,k,j)*ddvel(i,j,VNU0)*dtstep +! ddflx(i,j,p_ac0)=ddflx(i,j,p_ac0)+chem(i,k,j,p_ac0)/alt(i,k,j)*ddvel(i,j,VAC0)*dtstep +! ddflx(i,j,p_corn)=ddflx(i,j,p_corn)+chem(i,k,j,p_corn)/alt(i,k,j)*ddvel(i,j,VCORN)*dtstep + end if + !For MAM aersols dry deposition if ((aer_mech_id == 4)) then do m_mam = 1, num_chem diff --git a/WRF/chem/emissions_driver.F b/WRF/chem/emissions_driver.F index 9c4c8cb1a..0a93574d4 100755 --- a/WRF/chem/emissions_driver.F +++ b/WRF/chem/emissions_driver.F @@ -101,6 +101,7 @@ subroutine emissions_driver(id,ktau,dtstep,DX, & USE module_plumerise1 USE module_aerosols_sorgam_vbs, only: sorgam_vbs_addemiss USE module_aerosols_soa_vbs, only: soa_vbs_addemiss + USE module_aerosols_soa_vbs_het, only: soa_vbs_het_addemiss USE module_ghg_fluxes USE module_lightning_nox_driver USE module_cam_mam_addemiss, only: cam_mam_addemiss @@ -1556,9 +1557,25 @@ subroutine emissions_driver(id,ktau,dtstep,DX, & its,ite, jts,jte, kts,kte ) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - CASE (RACM_SOA_VBS_KPP,RACM_SOA_VBS_AQCHEM_KPP,RACM_SOA_VBS_HET_KPP) + CASE (RACM_SOA_VBS_KPP,RACM_SOA_VBS_AQCHEM_KPP) call wrf_debug(15,'emissions_driver calling soa_vbs_addemiss') - call soa_vbs_addemiss( id, dtstep, u10, v10, alt, dz8w, xland, chem, & + call soa_vbs_addemiss(id, dtstep, u10, v10, alt, dz8w, xland, chem, & + ebu, & + slai,ust,smois,ivgtyp,isltyp, & + emis_ant,dust_emiss_active, & + seasalt_emiss_active,config_flags%kemit, & + config_flags%biomass_burn_opt, & + config_flags%num_soil_layers,config_flags%emiss_opt, & + config_flags%dust_opt, & + ktau,p8w,u_phy,v_phy,rho_phy,g,dx,erod, & + ids,ide, jds,jde, kds,kde, & + ims,ime, jms,jme, kms,kme, & + its,ite, jts,jte, kts,kte ) + CASE (RACM_SOA_VBS_HET_KPP) + call wrf_debug(15,'emissions_driver calling soa_vbs_het_addemiss') + ! osipov config_flags + call soa_vbs_het_addemiss(config_flags, & + id, dtstep, u10, v10, alt, dz8w, xland, chem, & ebu, & slai,ust,smois,ivgtyp,isltyp, & emis_ant,dust_emiss_active, & diff --git a/WRF/chem/module_aerosols_soa_vbs.F b/WRF/chem/module_aerosols_soa_vbs.F index 491410f85..3882dbebd 100755 --- a/WRF/chem/module_aerosols_soa_vbs.F +++ b/WRF/chem/module_aerosols_soa_vbs.F @@ -74,7 +74,7 @@ SUBROUTINE soa_vbs_driver ( id,ktau,dtstep,t_phy,moist,aerwrf,p8w, & h2oaj,h2oai,nu3,ac3,cor3,asulf,ahno3,anh3 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), & - INTENT(INOUT ) :: brch_ratio + INTENT(INOUT ) :: brch_ratio ! cvasoa1,cvasoa2, & ! cvasoa3,cvasoa4,cvbsoa1,cvbsoa2,cvbsoa3,cvbsoa4 @@ -1520,7 +1520,7 @@ SUBROUTINE aeroproc(blksize,nspcsda,numcells,layer,cblk,dt,blkta,blkprs, & ! if(blkta(1).ge.233.15.and.blkrh(1).ge.0.1 .and. do_isorropia )then ! CALL eql3(blksize,nspcsda,numcells,cblk,blkta,blkrh) if (blkta(1).ge.233.15.and.blkrh(1).ge.0.1 )then - CALL eql4(blksize,nspcsda,numcells,cblk,blkta,blkrh) + CALL eql4(blksize,nspcsda,numcells,cblk,blkta,blkrh) endif ! if ( do_n2o5het ) then ! CALL n2o5het(blksize,nspcsda,numcells,dt,cblk,blkta,blkrh,dgnuc,dgacc,dgcor,igrid,jgrid,kgrid) @@ -3499,7 +3499,7 @@ SUBROUTINE nuclcond(blksize,nspcsda,numcells,cblk,dt,layer,blkta,blkprs, & !TYPE (grid_config_rec_type), INTENT (in) :: config_flags -! dimension of arrays +! dimension of arrays INTEGER blksize INTEGER layer ! number of species in CBLK @@ -4794,7 +4794,7 @@ SUBROUTINE rpmmod3(nspcsda,blksize,layer,dtsec,pres,temp,relhum, & INTEGER nspcsda ! number of species in CBLK ciarev02 - REAL cblk(blksize,nspcsda) + REAL cblk(blksize,nspcsda) ! *** Meteorological information in blocked arays: @@ -4804,7 +4804,7 @@ SUBROUTINE rpmmod3(nspcsda,blksize,layer,dtsec,pres,temp,relhum, & REAL blkta(blksize) ! Air temperature [ K ] REAL blkprs(blksize) ! Air pressure in [ Pa ] REAL blkdens(blksize) ! Air density [ kg m^-3 ] - REAL blkrh(blksize) + REAL blkrh(blksize) ! *** Chemical production rates [ ug m**-3 s -1 ] : @@ -6681,8 +6681,8 @@ SUBROUTINE soa_vbs_addemiss( id, dtstep, u10, v10, alt, dz8w, xland, chem, end if ! dust_opt changed to 13 since it conflicts with gocart/afwa if( dust_opt == 13 ) then - !czhao -------------------------- - call soa_vbs_dust_gocartemis( & + !czhao -------------------------- + call soa_vbs_dust_gocartemis( & ktau,dtstep,num_soil_layers,alt,u_phy, & v_phy,chem,rho_phy,dz8w,smois,u10,v10,p8w,erod, & ivgtyp,isltyp,xland,dx,g, & diff --git a/WRF/chem/module_aerosols_soa_vbs_het.F b/WRF/chem/module_aerosols_soa_vbs_het.F index ca7c90059..2232010cc 100755 --- a/WRF/chem/module_aerosols_soa_vbs_het.F +++ b/WRF/chem/module_aerosols_soa_vbs_het.F @@ -42,7 +42,7 @@ MODULE module_aerosols_soa_vbs_het CONTAINS - SUBROUTINE soa_vbs_het_driver ( id,ktau,dtstep,t_phy,moist,aerwrf,p8w, & + SUBROUTINE soa_vbs_het_driver ( id,config_flags,ktau,dtstep,t_phy,moist,aerwrf,p8w, & t8w,alt,p_phy,chem,rho_phy,dz8w,rh,z,z_at_w, & !liqy gamn2o5,cn2o5,kn2o5,yclno2,snu,sac, & @@ -50,13 +50,13 @@ SUBROUTINE soa_vbs_het_driver ( id,ktau,dtstep,t_phy,moist,aerwrf,p8w, & h2oaj,h2oai,nu3,ac3,cor3,asulf,ahno3,anh3, & vcsulf_old, & vdrog3, & - kemit,brch_ratio,do_isorropia,do_n2o5het, & + kemit,brch_ratio,ph,do_isorropia,do_n2o5het, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) -! USE module_configure, only: grid_config_rec_type -! TYPE (grid_config_rec_type), INTENT (in) :: config_flags + USE module_configure, only: grid_config_rec_type + TYPE (grid_config_rec_type), INTENT (in) :: config_flags INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & @@ -79,7 +79,7 @@ SUBROUTINE soa_vbs_het_driver ( id,ktau,dtstep,t_phy,moist,aerwrf,p8w, & h2oaj,h2oai,nu3,ac3,cor3,asulf,ahno3,anh3 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), & - INTENT(INOUT ) :: brch_ratio + INTENT(INOUT ) :: brch_ratio, ph ! osipov, ph ! cvasoa1,cvasoa2, & ! cvasoa3,cvasoa4,cvbsoa1,cvbsoa2,cvbsoa3,cvbsoa4 @@ -349,6 +349,7 @@ SUBROUTINE soa_vbs_het_driver ( id,ktau,dtstep,t_phy,moist,aerwrf,p8w, & cblk(1,VAC3 ) = max(epsilc,ac3(i,k,j)) cblk(1,VCOR3 ) = max(epsilc,cor3(i,k,j)) + cblk(1,vph ) = max(epsilc,ph(i,k,j)) ! osipov, use min(20, ph) here? !liqy cblk(1,vgamn2o5) = max(epsilc,gamn2o5(i,k,j)) cblk(1,vcn2o5) = max(epsilc,cn2o5(i,k,j)) @@ -416,7 +417,8 @@ SUBROUTINE soa_vbs_het_driver ( id,ktau,dtstep,t_phy,moist,aerwrf,p8w, & CALL rpmmod3(nspcsda,blksize,k,dtstep,10.*p(k),t(k),rh0(k),nitrate_in,nh3_in, & vsulf_in,so4rat_in,drog_in,ldrog_vbs,ncv,nacv,eeci_in,eecj_in, & eorgi_in,eorgj_in,epm25i,epm25j,epmcoarse,soilrat_in,cblk,i,j,k,brrto, & - do_isorropia,do_n2o5het ) + do_isorropia,do_n2o5het, & + config_flags%do_crustal,config_flags%crustal_mobility) ! osipov crustal effects ! calculation of brch_ratio brch_ratio(i,k,j)= brrto @@ -497,6 +499,8 @@ SUBROUTINE soa_vbs_het_driver ( id,ktau,dtstep,t_phy,moist,aerwrf,p8w, & nu3(i,k,j) = cblk(1,VNU3 ) ac3(i,k,j) = cblk(1,VAC3 ) cor3(i,k,j) = cblk(1,VCOR3 ) + + ph(i,k,j)= cblk(1,vph) ! osipov, ph !liqy gamn2o5(i,k,j)= cblk(1,vgamn2o5) cn2o5(i,k,j) = cblk(1,vcn2o5) @@ -1414,7 +1418,8 @@ SUBROUTINE aeroproc(blksize,nspcsda,numcells,layer,cblk,dt,blkta,blkprs, & epm25j,eorgi,eorgj,eeci,eecj,epmcoarse,esoil,eseas,xlm,amu,dgnuc, & dgacc,dgcor,pmassn,pmassa,pmassc,pdensn,pdensa,pdensc,knnuc,knacc, & kncor,fconcn,fconca,fconcn_org,fconca_org,dmdt,dndt,cgrn3,cgra3,urn00, & - ura00,brna01,c30,deltaso4a,igrid,jgrid,kgrid,brrto,do_isorropia,do_n2o5het) + ura00,brna01,c30,deltaso4a,igrid,jgrid,kgrid,brrto,do_isorropia,do_n2o5het, & + do_crustal,crustal_mobility) ! osipov do_crustal !USE module_configure, only: grid_config_rec_type !TYPE (grid_config_rec_type), INTENT (in) :: config_flags @@ -1585,11 +1590,15 @@ SUBROUTINE aeroproc(blksize,nspcsda,numcells,layer,cblk,dt,blkta,blkprs, & PARAMETER (unit=20) integer igrid,jgrid,kgrid,isorop + ! osipov namelist switch + logical do_crustal + real crustal_mobility + ! *** get water, ammonium and nitrate content: ! for now, don't call if temp is below -40C (humidity ! for this wrf version is already limited to 10 percent) if(blkta(1).ge.233.15.and.blkrh(1).ge.0.1 .and. do_isorropia )then - CALL eql3(blksize,nspcsda,numcells,cblk,blkta,blkrh) + CALL eql3(blksize,nspcsda,numcells,cblk,blkta,blkrh,do_crustal,crustal_mobility) else if (blkta(1).ge.233.15.and.blkrh(1).ge.0.1 .and. (.not. do_isorropia) )then CALL eql4(blksize,nspcsda,numcells,cblk,blkta,blkrh) endif @@ -2923,7 +2932,7 @@ END SUBROUTINE cubic !liqy ! Calculate the aerosol chemical speciation and water content. ! cubic - SUBROUTINE eql3(blksize,nspcsda,numcells,cblk,blkta,blkrh) + SUBROUTINE eql3(blksize,nspcsda,numcells,cblk,blkta,blkrh,do_crustal,crustal_mobility) ! osipov !*********************************************************************** !** DESCRIPTION: ! Calculates the distribution of ammonia/ammonium, nitric acid/nitrate, @@ -2937,6 +2946,7 @@ SUBROUTINE eql3(blksize,nspcsda,numcells,cblk,blkta,blkrh) ! and collect met variable stmt funcs in one include fil ! Revised 7/26/96 by FSB to use block concept. ! Revise 12/1896 to do do i-mode calculation. +! Revised 16/07/2021 osipov added ph !********************************************************************** ! IMPLICIT NONE @@ -2952,6 +2962,7 @@ SUBROUTINE eql3(blksize,nspcsda,numcells,cblk,blkta,blkrh) ! main array of variables REAL blkta(blksize) ! Air temperature [ K ] REAL blkrh(blksize) ! Fractional relative humidity + REAL HPLUSTEMP ! osipov ph, ! AEROPH: Temporary variable for pH (hotp 8/11/09) INTEGER lcell ! loop counter ! air temperature @@ -3046,6 +3057,13 @@ SUBROUTINE eql3(blksize,nspcsda,numcells,cblk,blkta,blkrh) character*5 zone integer*4 values(8) + ! osipov, temp + real fracna, fracca, frack, fracmg ! osipov fractions for the crustal species + real fracsoila ! the fraction of the dust (dust = emission - crustal) + + ! osipov, dust crustal effects + logical do_crustal ! acticates the effects + real crustal_mobility ! fraction of the dust cations that are mobilized DO lcell = 1,numcells ! equilibrium for the fine mode. @@ -3058,7 +3076,7 @@ SUBROUTINE eql3(blksize,nspcsda,numcells,cblk,blkta,blkrh) WI(1) = DBLE(((cblk(lcell,vnaaj) + cblk(lcell,vnaai)) & /22.99)*1.e-6) ! sodium - WI(2) = DBLE( & + WI(2) = DBLE( & ! osipov, h2so4 is missing here! add vsulf ((cblk(lcell,vso4aj) + cblk(lcell,vso4ai)) & /96.061)*1.e-6) ! sulfate @@ -3083,6 +3101,22 @@ SUBROUTINE eql3(blksize,nspcsda,numcells,cblk,blkta,blkrh) WI(8) = DBLE((cblk(lcell,vmgaj) + cblk(lcell,vmgai)) & /24.305*1.e-6) !magnesium + ! osipov include the effect of crustal material from dust. Emissions are only implemented for MOSAIC + fracna = 0.0236 + fracca = 0.0385 + frack = 0.0214 + fracmg = 0.022 + fracsoila=1.0-fracna-fracca-frack-fracmg + ! Temporarily solution + + if (do_crustal) then + ! should include the dust from accumulation mode, vp25aj, but it is mixed with primary aerosols + ! I prescribed 0 fraction for j-dust in the namelist, so ignore for now (only c-dust) + WI(1) = WI(1)+DBLE(((cblk(lcell,vsoila)*crustal_mobility*fracna)/22.99)*1.e-6) ! sodium + WI(6) = WI(6)+DBLE((cblk(lcell,vsoila)*crustal_mobility*fracca) /40.078*1.e-6) !calcium + WI(7) = WI(7)+DBLE((cblk(lcell,vsoila)*crustal_mobility*frack) /39.098*1.e-6) !potassium + WI(8) = WI(8)+DBLE((cblk(lcell,vsoila)*crustal_mobility*fracmg) /24.305*1.e-6) !magnesium + endif CNTRL(1) = DBLE(0.) ! 0=FORWARD PROBLEM, 1=REVERSE PROBLEM CNTRL(2) = DBLE(1.) ! 0=SOLID+LIQUID AEROSOL, 1=METASTABLE @@ -3106,6 +3140,16 @@ SUBROUTINE eql3(blksize,nspcsda,numcells,cblk,blkta,blkrh) aca = real(wt(6)*DBLE(40.078)*1.D6) ak = real(wt(7)*DBLE(39.098)*1.D6) amg = real(wt(8)*DBLE(24.305)*1.D6) + + !osipov compute pH + if (OTHER(1) .ge. 0.5) THEN ! e.g. 1 is dry, 0 is wet + cblk(lcell,vph) = 20.0 ! Aerosol is dry so HPLUSTEMP and PH are undefined, force ph to 20 + ELSE + HPLUSTEMP = AERLIQ(1) / AERLIQ(8) * 1.0e+3 / 18.0 + ! Use SAFELOG10 to prevent NAN + cblk(lcell,vph)=-1.0*LOG10(HPLUSTEMP) ! SAFELOG10 would be better + ENDIF + !**************************************************************************** !**************************************************************************** ! *** the following is an interim procedure. Assume the i-mode has the @@ -3122,11 +3166,13 @@ SUBROUTINE eql3(blksize,nspcsda,numcells,cblk,blkta,blkrh) cblk(lcell,vh2oai) = fraci*ah2o cblk(lcell,vnh4ai) = fraci*anh4 cblk(lcell,vno3ai) = fraci*ano3 - cblk(lcell,vnaai) = fraci*ana cblk(lcell,vclai) = fraci*acl - cblk(lcell,vcaai) = fraci*aca - cblk(lcell,vkai) = fraci*ak - cblk(lcell,vmgai) = fraci*amg + if (.not. do_crustal) then ! default behaviour + cblk(lcell,vnaai) = fraci*ana ! osipov do not update concentrations for now, they do not change TODO: fix me properly + cblk(lcell,vcaai) = fraci*aca + cblk(lcell,vkai) = fraci*ak + cblk(lcell,vmgai) = fraci*amg + endif ! *** update accumulation mode: cblk(lcell,vso4aj) = fracj*aso4 @@ -3134,11 +3180,13 @@ SUBROUTINE eql3(blksize,nspcsda,numcells,cblk,blkta,blkrh) cblk(lcell,vh2oaj) = fracj*ah2o cblk(lcell,vnh4aj) = fracj*anh4 cblk(lcell,vno3aj) = fracj*ano3 - cblk(lcell,vnaaj) = fracj*ana cblk(lcell,vclaj) = fracj*acl - cblk(lcell,vcaaj) = fracj*aca - cblk(lcell,vkaj) = fracj*ak - cblk(lcell,vmgaj) = fracj*amg + if (.not. do_crustal) then ! default behaviour + cblk(lcell,vnaaj) = fracj*ana ! osipov do not update concentrations for now, they do not change TODO: fix me properly + cblk(lcell,vcaaj) = fracj*aca + cblk(lcell,vkaj) = fracj*ak + cblk(lcell,vmgaj) = fracj*amg + endif ! *** update gas / vapor phase cblk(lcell,vnh3) = gnh3 @@ -5137,7 +5185,8 @@ END SUBROUTINE rpmares_old SUBROUTINE rpmmod3(nspcsda,blksize,layer,dtsec,pres,temp,relhum, & nitrate_in,nh3_in,vsulf_in,so4rat_in,drog_in,ldrog_vbs,ncv, & nacv,eeci_in,eecj_in,eorgi_in,eorgj_in,epm25i,epm25j,epmcoarse, & - soilrat_in,cblk,igrid,jgrid,kgrid,brrto,do_isorropia,do_n2o5het) + soilrat_in,cblk,igrid,jgrid,kgrid,brrto,do_isorropia,do_n2o5het, & + do_crustal,crustal_mobility) ! osipov do_crustal !USE module_configure, only: grid_config_rec_type !TYPE (grid_config_rec_type), INTENT (in) :: config_flags @@ -5368,6 +5417,9 @@ SUBROUTINE rpmmod3(nspcsda,blksize,layer,dtsec,pres,temp,relhum, & INTEGER ii, iimap(8) DATA iimap/1, 2, 18, 19, 21, 22, 23, 24/ + logical do_crustal ! osipov + real crustal_mobility ! osipov + ! begin body of program box ! *** Set up files and other info @@ -5463,7 +5515,8 @@ SUBROUTINE rpmmod3(nspcsda,blksize,layer,dtsec,pres,temp,relhum, & nacv,epm25i,epm25j,eorgi,eorgj,eeci,eecj,epmcoarse,esoil,eseas,xlm, & amu,dgnuc,dgacc,dgcor,pmassn,pmassa,pmassc,pdensn,pdensa,pdensc,knnuc, & knacc,kncor,fconcn,fconca,fconcn_org,fconca_org,dmdt,dndt,cgrn3,cgra3, & - urn00,ura00,brna01,brna31,deltaso4a,igrid,jgrid,kgrid,brrto,do_isorropia,do_n2o5het) + urn00,ura00,brna01,brna31,deltaso4a,igrid,jgrid,kgrid,brrto,do_isorropia,do_n2o5het, & + do_crustal,crustal_mobility) ! osipov do_crustal ! *** write output ! WRITE(UNIT,*) ' AFTER AEROPROC ' @@ -6593,7 +6646,7 @@ SUBROUTINE VDVG_2( BLKSIZE, NSPCSDA, NUMCELLS, & END SUBROUTINE VDVG_2 !------------------------------------------------------------------------------ -SUBROUTINE aerosols_soa_vbs_init(chem,convfac,z_at_w, & +SUBROUTINE aerosols_soa_vbs_het_init(chem,convfac,z_at_w, & pm2_5_dry,pm2_5_water,pm2_5_dry_ec, & chem_in_opt,aer_ic_opt, is_aerosol, & ids,ide, jds,jde, kds,kde, & @@ -6812,7 +6865,7 @@ SUBROUTINE aerosols_soa_vbs_init(chem,convfac,z_at_w, ! chem, zz, i,k,j, ims,ime,jms,jme,kms,kme ) else call wrf_error_fatal( & - "aerosols_soa_vbs_init: unable to parse aer_ic_opt" ) + "aerosols_soa_vbs_het_init: unable to parse aer_ic_opt" ) end if !... i-mode @@ -6861,10 +6914,11 @@ SUBROUTINE aerosols_soa_vbs_init(chem,convfac,z_at_w, enddo return - END SUBROUTINE aerosols_soa_vbs_init + END SUBROUTINE aerosols_soa_vbs_het_init ! -SUBROUTINE soa_vbs_addemiss( id, dtstep, u10, v10, alt, dz8w, xland, chem, & +SUBROUTINE soa_vbs_het_addemiss( config_flags, & + id, dtstep, u10, v10, alt, dz8w, xland, chem, & ebu, & slai,ust,smois,ivgtyp,isltyp, & emis_ant,dust_emiss_active, & @@ -6881,6 +6935,9 @@ SUBROUTINE soa_vbs_addemiss( id, dtstep, u10, v10, alt, dz8w, xland, chem, !------------------------------------------------------------------------ USE module_state_description, only: num_chem +! osipov + USE module_configure, only: grid_config_rec_type + TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags INTEGER, INTENT(IN ) :: seasalt_emiss_active,kemit,emissopt, & dust_emiss_active,num_soil_layers,id, & @@ -7150,6 +7207,7 @@ SUBROUTINE soa_vbs_addemiss( id, dtstep, u10, v10, alt, dz8w, xland, chem, if( dust_opt == 13 ) then !czhao -------------------------- call soa_vbs_dust_gocartemis( & + config_flags, & ktau,dtstep,num_soil_layers,alt,u_phy, & v_phy,chem,rho_phy,dz8w,smois,u10,v10,p8w,erod, & ivgtyp,isltyp,xland,dx,g, & @@ -7158,7 +7216,7 @@ SUBROUTINE soa_vbs_addemiss( id, dtstep, u10, v10, alt, dz8w, xland, chem, its,ite, jts,jte, kts,kte ) end if -END SUBROUTINE soa_vbs_addemiss +END SUBROUTINE soa_vbs_het_addemiss !------------------------------------------------------------------------ SUBROUTINE soa_vbs_seasalt_emiss( & @@ -7674,7 +7732,9 @@ END subroutine soa_vbs_dust_emiss !==================================================================================== !add another dust emission scheme following GOCART mechanism --czhao 09/17/2009 !==================================================================================== - subroutine soa_vbs_dust_gocartemis (ktau,dt,num_soil_layers,alt,u_phy, & +! osipov add config + subroutine soa_vbs_dust_gocartemis (config_flags, & + ktau,dt,num_soil_layers,alt,u_phy, & v_phy,chem,rho_phy,dz8w,smois,u10,v10,p8w,erod, & ivgtyp,isltyp,xland,dx,g, & ids,ide, jds,jde, kds,kde, & @@ -7687,6 +7747,9 @@ subroutine soa_vbs_dust_gocartemis (ktau,dt,num_soil_layers,alt,u_phy, & USE module_data_mosaic_asect IMPLICIT NONE + ! osipov, parametrize i/c dust fraction + TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags + INTEGER, INTENT(IN ) :: ktau, num_soil_layers, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & @@ -7728,9 +7791,21 @@ subroutine soa_vbs_dust_gocartemis (ktau,dt,num_soil_layers,alt,u_phy, & real dttt real soilfacj,rhosoilj,rhosoilc real totalemis,accfrac,corfrac,rscale1,rscale2 - + real fracna, fracca, frack, fracmg ! osipov fractions for the crustal species + real fracsoila ! the fraction of the dust (dust = emission - crustal) + accfrac=0.07 ! assign 7% to accumulation mode corfrac=0.93 ! assign 93% to coarse mode + ! osipov, adjust the mass distribution following AQABA campaign + accfrac=0.001 + corfrac=0.999 ! assign all to coarse mode + ! osipov use namelist to prescribe the value + ! TODO: check that dust_i_fraction is valid, i.e. in [0,1] + accfrac=config_flags%dust_i_fraction + corfrac = 1.0-accfrac +! write(22,*) 'accfrac=', accfrac +! write(22,*) 'corfrac=', corfrac + rscale1=1.00 ! to account for the dust larger than 10um in radius rscale2=1.02 ! to account for the dust larger than 10um in radius accfrac=accfrac*rscale1 @@ -7774,7 +7849,7 @@ subroutine soa_vbs_dust_gocartemis (ktau,dt,num_soil_layers,alt,u_phy, & call soa_vbs_source_du( nmx, dt,i,j, & erodin, ilwi, dxy, w10m, gwet, airden, airmas, & - bems,start_month,g) + bems,start_month,g,config_flags%dust_emis_sensitivity) ! osipov, add parameter to tune emissions !bems: kg/timestep/cell !sum up the dust emission from 0.1-10 um in radius @@ -7785,13 +7860,31 @@ subroutine soa_vbs_dust_gocartemis (ktau,dt,num_soil_layers,alt,u_phy, & jdustemis = totalemis*accfrac ! accumulation mode cdustemis = totalemis*corfrac ! coarse mode + ! osipov include the crustal / dust speciation. Previously only implemented for MOSAIC + fracna = 0.0236 + fracca = 0.0385 + frack = 0.0214 + fracmg = 0.022 + fracsoila=1.0-fracna-fracca-frack-fracmg + ! osipov We don't have the coarse mode for crustal species + ! Assume for now and put crustal material into j mode + ! IMPORTANT: DO NOT BREAK conservative properties + + ! turn off for now + fracsoila=1.0 cdustcon = sum(bems(1:5))*corfrac/airmas ! kg/kg-dryair cdustcon = cdustcon * converi ! ug/kg-dryair jdustcon = sum(bems(1:5))*accfrac/airmas ! kg/kg-dryair jdustcon = jdustcon * converi ! ug/kg-dryair - chem(i,k,j,p_p25j)=chem(i,k,j,p_p25j) + jdustcon - chem(i,k,j,p_soila)=chem(i,k,j,p_soila) + cdustcon + chem(i,k,j,p_p25j)=chem(i,k,j,p_p25j) + jdustcon*fracsoila + chem(i,k,j,p_soila)=chem(i,k,j,p_soila) + cdustcon*fracsoila + +! chem(i,k,j,p_naaj)=chem(i,k,j,p_naaj) + jdustcon*fracsoila +! chem(i,k,j,p_caaj)=chem(i,k,j,p_caaj) + cdustcon*fracsoila +! chem(i,k,j,p_kaj)=chem(i,k,j,p_kaj) + jdustcon*fracsoila +! chem(i,k,j,p_mgaj)=chem(i,k,j,p_mgaj) + cdustcon*fracsoila + ! czhao doing dust number emission following pm10 ! use soilfacj for accumulation mode because GOCART assign a less dense dust in @@ -7807,7 +7900,7 @@ end subroutine soa_vbs_dust_gocartemis SUBROUTINE soa_vbs_source_du( nmx, dt1,i,j, & erod, ilwi, dxy, w10m, gwet, airden, airmas, & - bems,month,g0) + bems,month,g0,dust_emis_sensitivity) ! **************************************************************************** ! * Evaluate the source of each dust particles size classes (kg/m3) @@ -7845,15 +7938,22 @@ SUBROUTINE soa_vbs_source_du( nmx, dt1,i,j, & REAL*8 :: den(nmx), diam(nmx) REAL*8 :: tsrc, u_ts0, cw, u_ts, dsrc, srce REAL, intent(in) :: g0 + REAL, intent(in) :: dust_emis_sensitivity REAL :: rhoa, g,dt1 INTEGER :: i, j, n, m, k ! default is 1 ug s2 m-5 == 1.e-9 kg s2 m-5 !ch_dust(:,:)=0.8D-9 ! ch_dust is defined here instead of in the chemics_ini.F if with SOA_VBS -czhao ch_dust(:,:)=1.0D-9 ! default - !ch_dust(:,:)=0.65D-9 ! ch_dust is tuned to match MODIS and AERONET measurements over Sahara + !ch_dust(:,:)=0.65D-9 ! ch_dust is tuned to match MODIS and AERONET measurements over Sahara !ch_dust(:,:)=1.0D-9*0.36 ! ch_dust is scaled to soa_vbs total dust emission + ! osipov scale default emissions using namelist + ch_dust(:,:) = ch_dust(:,:) * dust_emis_sensitivity + + !write(22,*) 'dust_emis_sensitivity=',dust_emis_sensitivity + !write(22,*) 'ch_dust=',ch_dust + ! executable statemenst DO n = 1, nmx ! Threshold velocity as a function of the dust density and the diameter from Bagnold (1941) diff --git a/WRF/chem/module_aerosols_sorgam_vbs.F b/WRF/chem/module_aerosols_sorgam_vbs.F index 227ba4a64..eecb7b53a 100755 --- a/WRF/chem/module_aerosols_sorgam_vbs.F +++ b/WRF/chem/module_aerosols_sorgam_vbs.F @@ -2818,8 +2818,7 @@ SUBROUTINE eql3(blksize,nspcsda,numcells,cblk,blkta,blkrh,igrid,jgrid,kgrid) ! WRITE(20,*) ' IN EQL 3 ' ! Fraction of dry sulfate mass in j-mode - DO lcell = 1, & - numcells + DO lcell = 1, numcells ! *** Fetch temperature, fractional relative humidity, and ! air density diff --git a/WRF/chem/module_data_soa_vbs_het.F b/WRF/chem/module_data_soa_vbs_het.F index 088c1c5b0..69e832c64 100755 --- a/WRF/chem/module_data_soa_vbs_het.F +++ b/WRF/chem/module_data_soa_vbs_het.F @@ -38,7 +38,7 @@ MODULE module_data_soa_vbs_het INTEGER laerdvc, lnonaerdvc, l1ae, laero, imodes, aspec !liqy - PARAMETER (laerdvc=46,lnonaerdvc=17+lspcv) + PARAMETER (laerdvc=46,lnonaerdvc=18+lspcv) ! osipov, add aerosol ph !liqy-20140912 ! PARAMETER (laerdvc=39,lnonaerdvc=8+lspcv) PARAMETER (l1ae=laerdvc+lnonaerdvc) @@ -337,6 +337,9 @@ MODULE module_data_soa_vbs_het !liqy-20140912 !----------------------------------------------------------------------------- +!osipov, aerosol ph +INTEGER, PARAMETER :: vph=72 + ! *** set up species dimension and indices for sedimentation ! velocity array VSED diff --git a/WRF/chem/module_mosaic_addemiss.F b/WRF/chem/module_mosaic_addemiss.F index 0681ac36f..ef25ac444 100755 --- a/WRF/chem/module_mosaic_addemiss.F +++ b/WRF/chem/module_mosaic_addemiss.F @@ -1006,6 +1006,8 @@ subroutine seasalt_emitfactors_1bin( ireduce_smallr_emit, & !c !c uses bubble emissions formula (eqn 5a) from !c Gong et al. [JGR, 1997, p 3805-3818] +!c https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/96JD02953 +!c https://doi.org/10.1029/96JD02953 !c !c *** for rdry < rdry_star, this formula overpredicts emissions. !c A strictly ad hoc correction is applied to the formula, @@ -1018,8 +1020,7 @@ subroutine seasalt_emitfactors_1bin( ireduce_smallr_emit, & !c subr arguments integer ireduce_smallr_emit - real dpdrylo_cm, dpdryhi_cm, & - emitfact_numb, emitfact_surf, emitfact_mass + real dpdrylo_cm, dpdryhi_cm, emitfact_numb, emitfact_surf, emitfact_mass !c local variables integer isub_bin, nsub_bin diff --git a/WRF/chem/module_optical_averaging.F b/WRF/chem/module_optical_averaging.F index 5b7403b77..ca3586f90 100755 --- a/WRF/chem/module_optical_averaging.F +++ b/WRF/chem/module_optical_averaging.F @@ -418,6 +418,22 @@ subroutine optical_averaging(id,curr_secs,dtstep,config_flags, & !!$ enddo !!$ endif !!$ 888 format(i3,9e12.5) +! osipov debug Mie calculations +#ifdef MIE_DEBUG + if(id.eq.1.and.iclm.eq.121.and.jclm.eq.255) then + print*,'jdf printout 1' + do isize = 1, nbin_o + write(*,888) isize,number_bin_col(isize,1), & + radius_wet_col(isize,1),radius_core_col(isize,1), & + real(swrefindx_col(isize,1,1)), & + imag(swrefindx_col(isize,1,1)), & + real(swrefindx_core_col(isize,1,1)), & + imag(swrefindx_core_col(isize,1,1)),dz(1) + enddo + endif + 888 format(i3,9e12.5) +#endif + ! ! Initialize LW vars as not all options compute it lwtauaer(:,:)=1.e-20 @@ -525,6 +541,24 @@ subroutine optical_averaging(id,curr_secs,dtstep,config_flags, & !!$ write(*,889) l7(1,1),l7(2,1),l7(3,1),l7(4,1) !!$ endif !!$ 889 format(4e12.5) +! osipov, debug Mie +#ifdef MIE_DEBUG + if(id.eq.1.and.iclm.eq.121.and.jclm.eq.255) then + write(*,889) swsizeaer(1,1),swsizeaer(2,1),swsizeaer(3,1),swsizeaer(4,1) + write(*,889) swextaer(1,1),swextaer(2,1),swextaer(3,1),swextaer(4,1) + write(*,889) swwaer(1,1),swwaer(2,1),swwaer(3,1),swwaer(4,1) + write(*,889) swgaer(1,1),swgaer(2,1),swgaer(3,1),swgaer(4,1) + write(*,889) swtauaer(1,1),swtauaer(2,1),swtauaer(3,1),swtauaer(4,1) + write(*,889) swbscoef(1,1),swbscoef(2,1),swbscoef(3,1),swbscoef(4,1) + write(*,889) l2(1,1),l2(2,1),l2(3,1),l2(4,1) + write(*,889) l3(1,1),l3(2,1),l3(3,1),l3(4,1) + write(*,889) l4(1,1),l4(2,1),l4(3,1),l4(4,1) + write(*,889) l5(1,1),l5(2,1),l5(3,1),l5(4,1) + write(*,889) l6(1,1),l6(2,1),l6(3,1),l6(4,1) + write(*,889) l7(1,1),l7(2,1),l7(3,1),l7(4,1) + endif + 889 format(4e12.5) +#endif enddo enddo ! @@ -1147,7 +1181,7 @@ subroutine optical_prep_modal(nbin_o, chem, alt, & dlo_um=0.0390625 dhi_um=10.0 drydens=1.8 - iflag=2 + iflag=3 ! osipov, new iflag is setup to compute factors for normalized input duma=1.0 dgmin=1.0e-07 ! in (cm) dtemp=dlo_um @@ -1689,15 +1723,13 @@ end subroutine optical_prep_modal ! RACM_SOA_VBS_KPP aerosol model ! This subroutine computes volume-averaged refractive index and wet radius -! needed -! by the mie calculations. Aerosol number is also passed into the mie -! calculations -! in terms of other units. +! needed by the mie calculations. Aerosol number is also passed into the mie +! calculations in terms of other units. ! subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & ! h2oai, h2oaj, refindx, radius_wet, number_bin, & ! radius_core, refindx_core, refindx_shell, & - h2oai, h2oaj, radius_core,radius_wet, number_bin, & + h2oai, h2oaj, radius_core, radius_wet, number_bin, & swrefindx, swrefindx_core, swrefindx_shell, & lwrefindx, lwrefindx_core, lwrefindx_shell, & ids,ide, jds,jde, kds,kde, & @@ -1815,7 +1847,7 @@ subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & dlo_um=0.0390625 dhi_um=10.0 drydens=1.8 - iflag=2 + iflag=3 ! osipov, new iflag is setup to compute factors for normalized input duma=1.0 dgmin=1.0e-07 ! in (cm) dtemp=dlo_um @@ -2052,7 +2084,7 @@ subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & l=lptr_asoa1_aer(isize,itype,iphase) if (l .ge. p1st) mass_asoa1j= chem(i,k,j,l)*conv1a l=lptr_asoa2_aer(isize,itype,iphase) -if (l .ge. p1st) mass_asoa2j= chem(i,k,j,l)*conv1a + if (l .ge. p1st) mass_asoa2j= chem(i,k,j,l)*conv1a l=lptr_asoa3_aer(isize,itype,iphase) if (l .ge. p1st) mass_asoa3j= chem(i,k,j,l)*conv1a l=lptr_asoa4_aer(isize,itype,iphase) @@ -2150,6 +2182,7 @@ subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & l=numptr_aer(isize,itype,iphase) if (l .ge. p1st) num_ac= chem(i,k,j,l)*conv1b + ! TODO: osipov, K (potassium) is missing here vol_ai = (mass_so4i/dens_so4) + (mass_no3i/dens_no3) + & (mass_nh4i/dens_nh4) + (mass_oini/dens_oin) + & @@ -2189,18 +2222,33 @@ subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & ss2=exp(ss1*ss1*36.0/8.0) ss3=(sixpi*vol_ai/(num_ai*ss2))**0.3333333 dgnum_um=amax1(dgmin,ss3)*1.0e+04 +#ifdef MIE_DEBUG + if(i.eq.121.and.j.eq.255.and.k.eq.1) then + print*,'osipov dgnum_um i', dgnum_um + endif +#endif call sect02(dgnum_um,sginin,drydens,iflag,duma,nbin_o,dlo_um,dhi_um, & xnum_secti,xmas_secti) ss1=alog(sginia) ss2=exp(ss1*ss1*36.0/8.0) ss3=(sixpi*vol_aj/(num_aj*ss2))**0.3333333 dgnum_um=amax1(dgmin,ss3)*1.0e+04 +#ifdef MIE_DEBUG + if(i.eq.121.and.j.eq.255.and.k.eq.1) then + print*,'osipov dgnum_um j', dgnum_um + endif +#endif call sect02(dgnum_um,sginia,drydens,iflag,duma,nbin_o,dlo_um,dhi_um, & xnum_sectj,xmas_sectj) ss1=alog(sginic) ss2=exp(ss1*ss1*36.0/8.0) ss3=(sixpi*vol_ac/(num_ac*ss2))**0.3333333 dgnum_um=amax1(dgmin,ss3)*1.0e+04 +#ifdef MIE_DEBUG + if(i.eq.121.and.j.eq.255.and.k.eq.1) then + print*,'osipov dgnum_um c', dgnum_um + endif +#endif call sect02(dgnum_um,sginic,drydens,iflag,duma,nbin_o,dlo_um,dhi_um, & xnum_sectc,xmas_sectc) @@ -2214,6 +2262,8 @@ subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & !jdfcz mass_dust= mass_dusti*xmas_secti(isize) + mass_dustj*xmas_sectj(isize) !+ & !jdfcz mass_soil*xmas_sectc(isize) +!osipov coarse dust mass (soil) was lost resulting in the wrong wet radius and size parameter for Mie + mass_dust = mass_soil*xmas_sectc(isize) !mass_oc = (mass_pai+mass_aro1i+mass_aro2i+mass_alk1i+mass_ole1i+ & ! mass_ba1i+mass_ba2i+mass_ba3i+mass_ba4i)*xmas_secti(isize) ! + & @@ -2232,6 +2282,8 @@ subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & vol_nh4 = mass_nh4 / dens_nh4 vol_oin = mass_oin / dens_oin !jdfcz vol_dust = mass_dust / dens_dust +! osipov, fix the missing soila + vol_dust = mass_dust / dens_dust vol_oc = mass_oc / dens_oc vol_bc = mass_bc / dens_bc vol_na = mass_na / dens_na @@ -2250,17 +2302,34 @@ subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & !!$ print*,'cl ',mass_cl,vol_cl !!$ print*,'h2o',mass_h2o,vol_h2o !!$ endif +! osipov debug Mie calculations +#ifdef MIE_DEBUG + if(i.eq.121.and.j.eq.255.and.k.eq.1) then + print*,'osipov print composition bin',isize + print*,'so4',mass_so4,vol_so4 + print*,'no3',mass_no3,vol_no3 + print*,'nh4',mass_nh4,vol_nh4 + print*,'oin',mass_oin,vol_oin + print*,'dust',mass_dust,vol_dust + print*,'oc ',mass_oc,vol_oc + print*,'bc ',mass_bc,vol_bc + print*,'na ',mass_na,vol_na + print*,'cl ',mass_cl,vol_cl + print*,'h2o',mass_h2o,vol_h2o + endif +#endif mass_dry_a = mass_so4 + mass_no3 + mass_nh4 + mass_oin + & -!jdfcz mass_oc + mass_bc + mass_na + mass_cl + mass_dust - mass_oc + mass_bc + mass_na + mass_cl +! osipov bring back (uncomment) the coarse dust + mass_oc + mass_bc + mass_na + mass_cl + mass_dust +! mass_oc + mass_bc + mass_na + mass_cl mass_wet_a = mass_dry_a + mass_h2o vol_dry_a = vol_so4 + vol_no3 + vol_nh4 + vol_oin + & -!jdfcz vol_oc + vol_bc + vol_na + vol_cl + vol_dust - vol_oc + vol_bc + vol_na + vol_cl +! osipov bring back (uncomment) the coarse dust + vol_oc + vol_bc + vol_na + vol_cl + vol_dust +! vol_oc + vol_bc + vol_na + vol_cl vol_wet_a = vol_dry_a + vol_h2o vol_shell = vol_wet_a - vol_bc - !num_a = vol_wet_a / - !(0.52359877*xdia_cm(isize)*xdia_cm(isize)*xdia_cm(isize)) + !num_a = vol_wet_a /(0.52359877*xdia_cm(isize)*xdia_cm(isize)*xdia_cm(isize)) !czhao num_a = num_ai*xnum_secti(isize)+num_aj*xnum_sectj(isize)+num_ac*xnum_sectc(isize) @@ -2274,10 +2343,11 @@ subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & !jdf (ref_index_oin * mass_oin / dens_oin) + & !jdfcz (swref_index_dust(ns) * mass_dust / dens_dust) + & (swref_index_dust(ns) * mass_oin / dens_dust) + & +! osipov coarse dust (oin is dust from p25j, this is soila contribution) + (swref_index_dust(ns) * mass_dust / dens_dust) + & (swref_index_oc(ns) * mass_oc / dens_oc) + & (ref_index_bc * mass_bc / dens_bc) + & - -(swref_index_nacl(ns) * mass_na / dens_na) + & + (swref_index_nacl(ns) * mass_na / dens_na) + & (swref_index_nacl(ns) * mass_cl / dens_cl) + & (swref_index_h2o(ns) * mass_h2o / dens_h2o) ! @@ -2301,6 +2371,8 @@ subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & !jdf (ref_index_oin * mass_oin / dens_oin) + & !jdfcz (swref_index_dust(ns) * mass_dust / dens_dust) + & (swref_index_dust(ns) * mass_oin / dens_dust) + & +! osipov coarse dust (oin is dust from p25j, this is soila contribution) + (swref_index_dust(ns) * mass_dust / dens_dust) + & (swref_index_oc(ns) * mass_oc / dens_oc) + & (swref_index_nacl(ns) * mass_na / dens_na) + & (swref_index_nacl(ns) * mass_cl / dens_cl) + & @@ -2314,7 +2386,7 @@ subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & swrefindx_core(i,k,j,isize,ns) = ref_index_bc swrefindx_shell(i,k,j,isize,ns) = ref_index_oin elseif(num_a .lt. 1.e-20 .or. vol_shell .lt. 1.0e-20) then -swrefindx(i,k,j,isize,ns) = (1.5,0.0) + swrefindx(i,k,j,isize,ns) = (1.5,0.0) radius_wet(i,k,j,isize) =dlo_um*1.0e-4/2.0 number_bin(i,k,j,isize) =num_a radius_core(i,k,j,isize) =0.0 @@ -2340,6 +2412,8 @@ subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & !jdf (ref_index_oin * mass_oin / dens_oin) + & !jdfcz (lwref_index_dust(ns) * mass_dust / dens_dust) + & (lwref_index_dust(ns) * mass_oin / dens_dust) + & +! osipov coarse dust (oin is dust from p25j, this is soila contribution) + (lwref_index_dust(ns) * mass_dust / dens_dust) + & (lwref_index_oc(ns) * mass_oc / dens_oc) + & (ref_index_bc * mass_bc / dens_bc) + & (lwref_index_nacl(ns) * mass_na / dens_na) + & @@ -2351,7 +2425,7 @@ subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & ! IF(num_a .lt. 1.0e-20 .or. vol_wet_a .lt. 1.0e-20) then dp_dry_a = xdia_cm(isize) -dp_wet_a = xdia_cm(isize) + dp_wet_a = xdia_cm(isize) dp_bc_a = xdia_cm(isize) ri_ave_a = 0.0 ri_dum = 0.0 @@ -2366,6 +2440,8 @@ subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & !jdf (ref_index_oin * mass_oin / dens_oin) + & !jdfcz (lwref_index_dust(ns) * mass_dust / dens_dust) + & (lwref_index_dust(ns) * mass_oin / dens_dust) + & +! osipov coarse dust (oin is dust from p25j, this is soila contribution) + (lwref_index_dust(ns) * mass_dust / dens_dust) + & (lwref_index_oc(ns) * mass_oc / dens_oc) + & (lwref_index_nacl(ns) * mass_na / dens_na) + & (lwref_index_nacl(ns) * mass_cl / dens_cl) + & @@ -2395,6 +2471,41 @@ subroutine optical_prep_modal_soa_vbs(nbin_o, chem, alt, & endif enddo ! ns longwave +! osipov debug Mie calculations +#ifdef MIE_DEBUG + if(i.eq.121.and.j.eq.255.and.k.eq.1) then + print*,' ' + print*,'osipov printout moments for bin', isize + print*,'vol_a ijc', vol_ai,vol_aj,vol_ac + print*,'num_a ijc', num_ai,num_aj,num_ac + print*,'xmas_ ijc', xmas_secti(isize),xmas_sectj(isize),xmas_sectc(isize) + print*,'xnum_ ijc', xnum_secti(isize),xnum_sectj(isize),xnum_sectc(isize) + print*,'r_wet[cm] radius_wet[cm]', dp_wet_a/2.0,radius_wet(i,k,j,isize) + print*,'vol_wet, vol_dry, vol_h2o', vol_wet_a,vol_dry_a,vol_h2o + print*,'num_a', num_a + print*,'ri real, ri, imag, core real, core imag', & + real(swrefindx(i,k,j,isize,ns)), & + imag(swrefindx(i,k,j,isize,ns)), & + real(swrefindx_core(i,k,j,isize,ns)), & + imag(swrefindx_core(i,k,j,isize,ns)) + + print*,'osipov printout components ' + print*,'jdf print bin ',isize + print*,'so4 ',mass_so4,vol_so4 + print*,'no3 ',mass_no3,vol_no3 + print*,'nh4 ',mass_nh4,vol_nh4 + print*,'oin ',mass_oin,vol_oin + print*,'dust',mass_dust,vol_dust + print*,'oc ',mass_oc,vol_oc + print*,'bc ',mass_bc,vol_bc + print*,'na ',mass_na,vol_na + print*,'cl ',mass_cl,vol_cl + print*,'h2o ',mass_h2o,vol_h2o + endif + 890 format(i3,4e12.5) + 891 format(5e12.5) +#endif + ! refr=real(refindx(i,k,j,isize)) enddo !isize @@ -2521,7 +2632,7 @@ subroutine optical_prep_modal_vbs(nbin_o, chem, alt, & dlo_um=0.0390625 dhi_um=10.0 drydens=1.8 - iflag=2 + iflag=3 ! osipov, new iflag is setup to compute factors for normalized input duma=1.0 dgmin=1.0e-07 ! in (cm) dtemp=dlo_um @@ -3149,7 +3260,7 @@ subroutine optical_prep_mam(nbin_o, chem, alt, & dlo_um=0.0390625 dhi_um=10.0 drydens=1.8 - iflag=2 + iflag=3 ! osipov, new iflag is setup to compute factors for normalized input duma=1.0 dgmin=1.0e-07 ! in (cm) dtemp=dlo_um @@ -3673,7 +3784,7 @@ subroutine optical_prep_gocart(nbin_o, chem, alt,relhum, & dlo_um=0.0390625 dhi_um=10.0 drydens=1.8 - iflag=2 + iflag=3 ! osipov, new iflag is setup to compute factors for normalized input duma=1.0 dgmin=1.0e-07 ! in (cm) dtemp=dlo_um @@ -4762,6 +4873,14 @@ subroutine mieaer( & pext=pext+ch(nc)*cext(nc) enddo pext=exp(pext) + +! osipov, debug Mie +#ifdef MIE_DEBUG + if(id.eq.1.and.iclm.eq.121.and.jclm.eq.255.and.klevel.eq.1) then + print*, 'osipov m,nbin_a,pext,wl,rwet,xrad' + print*, m,nbin_a,pext,wavmidsw(ns),radius_wet_col(m,klevel)*10**4,xrad + endif +#endif ! JCB 2004/02/09 -- for scattering efficiency pscat=0.5*cscat(1) @@ -6845,6 +6964,14 @@ subroutine sect02(dgnum_um,sigmag,drydens,iflag,duma,nbin,dlo_um,dhi_um, & ! ! user specifies a single log-normal mode and a set of section boundaries ! prog calculates mass and number for each section +! +! osipov +! Logic depends on iflag +! iflag==1: user provided 0th moment & sg, dg. Other moments will be derived +! iflag==2: user provided mass (m3), m0 will be derived +! iflag==3: user needs just coefficients, assume that both m0 and m3 equal to 1, ignore duma +! +! #TODO: iflag needs to be changed in all other optical_prep*, where they use duma=1 ! implicit none REAL, DIMENSION(nbin), INTENT(OUT) :: xnum_sect, xmas_sect @@ -6859,26 +6986,37 @@ subroutine sect02(dgnum_um,sigmag,drydens,iflag,duma,nbin,dlo_um,dhi_um, & ! real erfc_num_recipes real pi parameter (pi = 3.1415926536) -! + +! osipov +! original code was designed to compute the mapped concentration for different input parameter duma +! iflag 1 is for m0 or number concentration +! iflag 2 is for m3 or mass concentration +! remaining parameter were derived +! czhao needed only scaling factors when both m0 and m3 are normalized to 1 (broke the iflag2 case) +! We are going to fix original code and dedicate iflag 3 for the normalized input if (iflag .le. 1) then xntot = duma - else + else if (iflag.eq.2) then xmtot = duma - xntot = duma !czhao + else + xvtot = 1.0 + xmtot = 1.0 + xntot = 1.0 end if ! compute total volume and number for mode -! dgnum = dgnum_um*1.0e-4 -! sx = log( sigmag ) -! x0 = log( dgnum ) -! x3 = x0 + 3.*sx*sx -! dstar = dgnum * exp(1.5*sx*sx) -! if (iflag .le. 1) then -! xvtot = xntot*(pi/6.0)*dstar*dstar*dstar -! xmtot = xvtot*drydens*1.0e12 -! else -! xvtot = xmtot/(drydens*1.0e12) -! xntot = xvtot/((pi/6.0)*dstar*dstar*dstar) -! end if + dgnum = dgnum_um*1.0e-4 + sx = log( sigmag ) + x0 = log( dgnum ) + x3 = x0 + 3.*sx*sx + dstar = dgnum * exp(1.5*sx*sx) + if (iflag .le. 1) then + xvtot = xntot*(pi/6.0)*dstar*dstar*dstar + xmtot = xvtot*drydens*1.0e12 + else if (iflag.eq.2) then + xvtot = xmtot/(drydens*1.0e12) + xntot = xvtot/((pi/6.0)*dstar*dstar*dstar) +! else ! do nothing + end if ! compute section boundaries dlo = dlo_um*1.0e-4 dhi = dhi_um*1.0e-4 @@ -6907,12 +7045,11 @@ subroutine sect02(dgnum_um,sigmag,drydens,iflag,duma,nbin,dlo_um,dhi_um, & sumnum = 0. summas = 0. ! write(22,*) -! write(22,*) 'dgnum_um, sigmag = ', dgnum_um, sigmag -! write(22,*) 'drydens =', drydens -! write(22,*) 'ntot (#/cm3), mtot (ug/m3) = ', xntot, xmtot +! write(22,*) 'dgnum_um, sigmag, iflag = ', dgnum_um, sigmag, iflag +! write(22,*) 'drydens, dstar (cm) =', drydens, dstar +! write(22,*) 'ntot (#/cm3), mtot (ug/m3), vtot (cm3/cm3) = ', xntot, xmtot, xvtot ! write(22,9220) -!9220 format( / & -! ' n dlo(um) dhi(um) number mass' / ) +!9220 format( / ' n dlo(um) dhi(um) number mass' / ) !9225 format( i3, 2f10.6, 2(1pe13.4) ) !9230 format( / 'sum over all sections ', 2(1pe13.4) ) !9231 format( 'modal totals ', 2(1pe13.4) ) @@ -7069,10 +7206,12 @@ subroutine mieaer_sc( & real ratio ! real,save ::rmin,rmax ! min, max aerosol size bin -! data rmin /0.005e-04/ ! rmin in cm, 5e-3 microns min allowable size -! data rmax /50.0e-04/ ! rmax in cm. 50 microns, big particle, max allowable size - data rmin /0.010e-04/ ! rmin in cm, 5e-3 microns min allowable size - data rmax /7.0e-04/ ! rmax in cm. 50 microns, big particle, max allowable size +! data rmin /0.005e-04/ ! rmin in cm, 5e-3 microns min allowable size + data rmin /0.010e-04/ ! rmin in cm, 10e-3 microns min allowable size + +! osipov, bring max size back to 50 instead of 7 +! data rmax /7.0e-04/ ! rmax in cm. 7 microns, big particle, max allowable size + data rmax /50.0e-04/ ! rmax in cm. 50 microns, big particle, max allowable size ! diagnostic declarations integer, save :: kcallmieaer2 data kcallmieaer2 / 0 / @@ -7196,6 +7335,15 @@ subroutine mieaer_sc( & ! write(6,*)qextc,qscatc,gscac,extc,scatc ! write(6,*) ! + +! osipov, debug Mie +#ifdef MIE_DEBUG + if(id.eq.1.and.iclm.eq.121.and.jclm.eq.255.and.klevel.eq.1) then + print*, 'osipov mieaer_sc qextc,extc,vlambc,dp_wet_a*10**4' + print*, qextc,extc,vlambc,dp_wet_a*10**4 + endif +#endif + weighte=extc*1.0e-08 ! extinction cross section, converted to cm^2 weights=scatc*1.0e-08 ! scattering cross section, converted to cm^2 tauaer(ns,klevel)=tauaer(ns,klevel)+weighte* & diff --git a/WRF/chem/module_phot_tuv.F b/WRF/chem/module_phot_tuv.F index f37d167a6..cd084f3dc 100755 --- a/WRF/chem/module_phot_tuv.F +++ b/WRF/chem/module_phot_tuv.F @@ -1,3 +1,4 @@ +! TODO: osipov comment back !#define SW_DEBUG module module_phot_tuv @@ -187,7 +188,7 @@ subroutine tuv_driver( & real :: delz_top real(kind=8) :: xtime, xhour real :: max_tauaer - real :: Dobson(2) + real :: Dobson(3) real :: xsect(nwave) real :: wrk(nwave), wrk_lam(nwave) ! real :: tlev(kts-1:kte) @@ -278,7 +279,7 @@ subroutine tuv_driver( & ims, ime, jms, jme ) #ifdef SW_DEBUG - if( myproc == 6 ) then + if( myproc == 209 ) then write(*,'(''tuv_drvr: its,jts = '',2i5)') its,jts minndx(:) = minloc( zen_angle(its:ite,jts:jte) ) write(*,'(''tuv_drvr: min zen_angle ndx = '',2i5)') minndx(:) @@ -390,13 +391,15 @@ subroutine tuv_driver( & do j = jts,jte long_loop : & do i = its,ite -#ifdef SW_DEBUG - tuv_diags = i == minndx(1) .and. j == minndx(2) -#endif do n = 1,nj tuv_prate(:,n) = 0. end do zenith = zen_angle(i,j) + +#ifdef SW_DEBUG +! tuv_diags = i == minndx(1) .and. j == minndx(2) + tuv_diags = i == minndx(1) .and. j == minndx(2) .and. zenith < 10. ! osipov, get diags close to local noon +#endif !--------------------------------------------------------------------- ! if night, skip radiative field calculation !--------------------------------------------------------------------- @@ -634,32 +637,51 @@ subroutine tuv_driver( & if( tuv_diags ) then Dobson(1) = sum( o3col(ktsm1:ktem1) )/2.687e16 Dobson(2) = o3col(kte)/2.687e16 - write(*,'(''tuv_drvr: o3col = '',1p,2g15.8)') Dobson(:) + Dobson(3) = sum( o3col(ktsm1:n_tuv_z) )/2.687e16 ! this should be the entire ozone column + write(*,'(''tuv_drvr: o3col = '',1p,3g15.8)') Dobson(:) + write(*,'(''tuv_drvr: tauaer1..4col = '',1p,4g15.8)') sum(tauaer300(ktsm1:ktem1)), sum(tauaer400(ktsm1:ktem1)), sum(tauaer600(ktsm1:ktem1)), sum(tauaer999(ktsm1:ktem1)) + write(*,*) 'dtaer col is below' + write(*,*) sum(dtaer(ktsm1:ktem1, :), 1) open(unit=33,file='wrfchm_inp') write(33,*) nlev write(33,*) kte + write(33,*) n_tuv_z + write(33,*) 'tuv_z is below' write(33,*) tuv_z(ktsm1:n_tuv_z) + write(33,*) 'tlev is below' write(33,*) tlev(ktsm1:n_tuv_z) + write(33,*) 'o3col is below' write(33,*) o3col(ktsm1:n_tuv_z-1) + write(33,*) 'so2col is below' write(33,*) so2col(ktsm1:n_tuv_z-1) + write(33,*) 'no2col is below' write(33,*) no2col(ktsm1:n_tuv_z-1) + write(33,*) 'dens_air is below' write(33,*) dens_air(ktsm1:n_tuv_z) + write(33,*) 'aircol is below' write(33,*) aircol(ktsm1:n_tuv_z-1) + write(33,*) 'dtaer is below' do wn = 1,nwave + write(33,'(''nwave and wl are ''2F10.2)') wn, wl(wn) write(33,*) dtaer(ktsm1:n_tuv_z-1,wn) end do + write(33,*) 'omaer is below' do wn = 1,nwave write(33,*) omaer(ktsm1:n_tuv_z-1,wn) end do + write(33,*) 'gaer is below' do wn = 1,nwave write(33,*) gaer(ktsm1:n_tuv_z-1,wn) end do + write(33,*) 'dtcld is below' do wn = 1,nwave write(33,*) dtcld(ktsm1:n_tuv_z-1,wn) end do + write(33,*) 'omcld is below' do wn = 1,nwave write(33,*) omcld(ktsm1:n_tuv_z-1,wn) end do + write(33,*) 'gcld is below' do wn = 1,nwave write(33,*) gcld(ktsm1:n_tuv_z-1,wn) end do @@ -669,18 +691,22 @@ subroutine tuv_driver( & close( 33 ) open(unit=33,file='WRF-TUV.flx.out' ) + write(33,*) 'dir_fld' do n = nlambda_start,nwave write(33,*) dir_fld(kts:kte,n) end do write(33,*) ' ' + write(33,*) 'dwn_fld' do n = nlambda_start,nwave write(33,*) dwn_fld(kts:kte,n) end do write(33,*) ' ' + write(33,*) 'up_fld' do n = nlambda_start,nwave write(33,*) up_fld(kts:kte,n) end do write(33,*) ' ' + write(33,*) 'rad_fld_tpose' do n = nlambda_start,nwave write(33,*) rad_fld_tpose(kts:kte,n) end do @@ -743,12 +769,12 @@ subroutine tuv_driver( & end do rate_loop #ifdef SW_DEBUG - if( myproc == 6 ) then + if( myproc == 209 ) then if( tuv_diags ) then open(unit=33,file='WRF-TUV.j.out' ) do n = 1,nj select case( n ) - case( 2:4,7:10,12:13 ) + case( 1:4,7:10,12:13 ) ! case( 2:4,7:10,12:13 ) # osipov do k = kts,kte,5 write(33,'(1p,5g15.7)') tuv_prate(k:min(k+4,kte),n)/m2s end do diff --git a/WRF/chem/module_subs_tuv.F b/WRF/chem/module_subs_tuv.F index d15c5680d..03633bda9 100755 --- a/WRF/chem/module_subs_tuv.F +++ b/WRF/chem/module_subs_tuv.F @@ -481,6 +481,16 @@ subroutine setaer( nlambda_start, wc, tauaer300, tauaer400, & if( tauaer300(k) > thresh .and. tauaer999(k) > thresh ) then ang = log(tauaer300(k)/tauaer999(k))/log(0.999/0.3) dtaer(k,wn) = tauaer400(k)*(0.4/(wc(wn)*1.e-3))**ang + ! TODO: osipov do the clean up +! #ifdef SW_DEBUG +! if( tuv_diags ) then +! print *, 'TUV debug tauaer' ! osipov +! print *, tauaer300(k), tauaer400(k), tauaer600(k), tauaer999(k) +! print *, 'TUV debug and dtaer' ! osipov +! print *, ang, dtaer(k,wn) +! print *, 'TUV debug dtaer -ae, dtaer l0=600' ! osipov +! print *, tauaer400(k)*((wc(wn)*1.e-3)/0.4)**ang, tauaer600(k)*(600./wc(wn))**ang +! #endif !----------------------------------------------------------------------------- ! ssa - use linear interpolation/extrapolation !----------------------------------------------------------------------------- diff --git a/WRF/chem/optical_driver.F b/WRF/chem/optical_driver.F index 81af457c7..917b5e9ba 100755 --- a/WRF/chem/optical_driver.F +++ b/WRF/chem/optical_driver.F @@ -199,7 +199,7 @@ SUBROUTINE optical_driver(id,curr_secs,dtstep,config_flags,haveaer,& ! 'jdf ', its, ite, jts, jte, kts, kte ! call peg_message( lunerr, msg ) - !BSINGH(PNNL)- The followingvariables had an undefined behavior at the boundaries. + !BSINGH(PNNL)- The following variables had an undefined behavior at the boundaries. tauaersw(:,:,:,:) = inf extaersw(:,:,:,:) = inf gaersw(:,:,:,:) = inf diff --git a/WRF/frame/module_io_quilt_old.F b/WRF/frame/module_io_quilt_old.F index fda03aa91..e6bf5469d 100755 --- a/WRF/frame/module_io_quilt_old.F +++ b/WRF/frame/module_io_quilt_old.F @@ -703,7 +703,9 @@ SUBROUTINE quilt CALL mpi_finalize(ierr) #endif #if defined WRF_COUPLING - CALL mpi_barrier (mpi_comm_local, ierr) + CALL mpi_barrier (MPI_COMM_WORLD, ierr) ! call global comm, not local + ! the MCTWorld_clean call is probaly needed in between + CALL mpi_finalize(ierr) #endif #if ( DA_CORE != 1 ) END IF @@ -1708,8 +1710,15 @@ SUBROUTINE quilt_pnc #ifdef GRIB2 CALL ext_gr2_ioexit( Status ) #endif - CALL wrf_message ( 'I/O QUILT SERVERS DONE' ) - CALL mpi_finalize(ierr) + CALL wrf_message ( 'I/O QUILT SERVERS DONE (PNC)' ) +#if !defined WRF_COUPLING + CALL mpi_finalize(ierr) +#endif +#if defined WRF_COUPLING + CALL mpi_barrier (MPI_COMM_WORLD, ierr) ! call global comm, not local + ! the MCTWorld_clean call is probaly needed in between + CALL mpi_finalize(ierr) +#endif STOP ELSE WRITE(mess,*)'Possible 32-bit overflow on output server. Try larger nio_tasks_per_group in namelist.' diff --git a/makefile b/makefile index 6dae4400f..e7447f5a0 100755 --- a/makefile +++ b/makefile @@ -735,7 +735,7 @@ ifdef USE_WRF cd $(WRF_DIR); ls; \ echo " "; echo " "; \ echo "Compiling wrf"; \ - ./compile em_real; \ + ./compile -j 32 em_real; \ echo ""; \ echo "-------- Finished compiling WRF ------------" ifndef USE_ROMS