diff --git a/.gitmodules b/.gitmodules index 43ca2f80db..047ef89334 100644 --- a/.gitmodules +++ b/.gitmodules @@ -28,10 +28,10 @@ [submodule "atmos_phys"] path = src/atmos_phys - url = https://github.com/ESCOMP/atmospheric_physics - fxtag = atmos_phys0_21_002 + url = https://github.com/nusbaume/atmospheric_physics + fxtag = 2b7ecfa3 fxrequired = AlwaysRequired - fxDONOTUSEurl = https://github.com/ESCOMP/atmospheric_physics + fxDONOTUSEurl = https://github.com/nusbaume/atmospheric_physics [submodule "cam-sima"] path = src/utils/cam-sima diff --git a/bld/build-namelist b/bld/build-namelist index d23e72cfc9..6a0410704b 100755 --- a/bld/build-namelist +++ b/bld/build-namelist @@ -5313,7 +5313,8 @@ sub check_snapshot_settings { # cam7 physpkg push(@validList_ac, ("'chem_emissions'", "'clubb_tend_cam'", - "'microp_section'")); + "'microp_section'", + "'pumas_tend'")); if ($use_subcol_microp =~ /$TRUE/io) { push (@validList_bc, ("'microp_driver_tend_subcol'")); } @@ -5354,7 +5355,8 @@ sub check_snapshot_settings { } else { push (@validList_bc, ("'macrop_driver_tend'")); } - push (@validList_bc, ("'microp_section'")); + push (@validList_bc, ("'microp_section'", + "'pumas_tend'")); if ($use_subcol_microp =~ /$TRUE/io) { push (@validList_bc, ("'microp_driver_tend_subcol'")); } diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml index 284e89793a..d0c982cd73 100644 --- a/bld/namelist_files/namelist_definition.xml +++ b/bld/namelist_files/namelist_definition.xml @@ -3699,7 +3699,7 @@ the dynamics core. Very experimental. Causes advance_clubb_core to run in ascending mode, where the surface is at k=1, which is opposite -of the descending cam grid. This is mainly a testing/debugging option - it requires an expensive +of the descending cam grid. This is mainly a testing/debugging option - it requires an expensive data flipping step and should not change answers significantly. @@ -3979,7 +3979,7 @@ Valid values: 0 (no grid adaptation), 1 (use Lscale and wp2) -Selects which algorithm the fill_holes routine uses to correct +Selects which algorithm the fill_holes routine uses to correct below threshold values in field solutions. 0: off - Skip the mass conservative hole filling step, rely on blunt clipping 1: global - Fast but minimally local, most methods use this as a fallback step @@ -4211,7 +4211,7 @@ calculated by down-gradient diffusion. -Flag to implement the nontraditional Coriolis terms in the +Flag to implement the nontraditional Coriolis terms in the prognostic equations of w'w', u'w', and u'u. @@ -5735,7 +5735,7 @@ Default: + group="phys_ctl_nl" valid_values="pumas_tend,chem_emissions,aoa_tracers_timestep_tend,co2_cycle_set_ptend,chem_timestep_tend,orographic_form_drag_stress,vertical_diffusion_section,aero_model_drydep,gw_tend,qbo_relax,iondrag_calc_section,physics_dme_adjust,physics_dme_adjust,dadadj_tend,convect_deep_tend,convect_shallow_tend,convect_diagnostics_calc,macrop_driver_tend,clubb_tend_cam,microp_section,microp_driver_tend_subcol,aero_model_wetdep,radiation_tend,held_suarez_tend,kessler_tend,thatcher_jablonowski_precip_tend,rk_stratiform_tend,rayleigh_friction_tend,user_set" > Name of parameterization to take snapshot before running user_set is used when a user inserts a call to cam_snapshot_all_outfld using cam_snapshot_before_num as the first argument. @@ -5743,7 +5743,7 @@ Default: Unused + group="phys_ctl_nl" valid_values="pumas_tend,chem_emissions,aoa_tracers_timestep_tend,co2_cycle_set_ptend,chem_timestep_tend,orographic_form_drag_stress,vertical_diffusion_section,aero_model_drydep,gw_tend,qbo_relax,iondrag_calc_section,physics_dme_adjust,physics_dme_adjust,dadadj_tend,convect_deep_tend,convect_shallow_tend,convect_diagnostics_calc,macrop_driver_tend,clubb_tend_cam,microp_section,microp_driver_tend_subcol,aero_model_wetdep,radiation_tend,held_suarez_tend,kessler_tend,thatcher_jablonowski_precip_tend,rk_stratiform_tend,rayleigh_friction_tend,user_set" > Name of parameterization to take snapshot after running user_set is used when a user inserts a call to cam_snapshot_all_outfld using cam_snapshot_after_num as the first argument. diff --git a/src/physics/cam/physpkg.F90 b/src/physics/cam/physpkg.F90 index 27790526e5..77e1990da4 100644 --- a/src/physics/cam/physpkg.F90 +++ b/src/physics/cam/physpkg.F90 @@ -2813,6 +2813,10 @@ subroutine tphysbc (ztodt, state, & call microp_aero_run(state, ptend_aero, cld_macmic_ztodt, pbuf) call t_stopf('microp_aero_run') + if (trim(cam_take_snapshot_before) == "pumas_tend") then + call cam_snapshot_all_outfld_tphysbc(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + end if call t_startf('microp_tend') if (use_subcol_microp) then @@ -2904,12 +2908,20 @@ subroutine tphysbc (ztodt, state, & (trim(cam_take_snapshot_before) == trim(cam_take_snapshot_after))) then call cam_snapshot_ptend_outfld(ptend, lchnk) end if + if ( (trim(cam_take_snapshot_after) == "pumas_tend") .and. & + (trim(cam_take_snapshot_before) == trim(cam_take_snapshot_after))) then + call cam_snapshot_ptend_outfld(ptend, lchnk) + end if call physics_update (state, ptend, ztodt, tend) if (trim(cam_take_snapshot_after) == "microp_section") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if + if (trim(cam_take_snapshot_after) == "pumas_tend") then + call cam_snapshot_all_outfld_tphysbc(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + end if call check_energy_cam_chng(state, tend, "microp_tend", nstep, ztodt, & zero, prec_str(:ncol)/cld_macmic_num_steps, & diff --git a/src/physics/cam7/micro_pumas_cam.F90 b/src/physics/cam7/micro_pumas_cam.F90 index 00731a3ef5..83ec67c6c5 100644 --- a/src/physics/cam7/micro_pumas_cam.F90 +++ b/src/physics/cam7/micro_pumas_cam.F90 @@ -2474,7 +2474,9 @@ subroutine micro_pumas_cam_tend(state, ptend, dtime, pbuf) tnd_qsnow(:ncol,top_lev:), tnd_nsnow(:ncol,top_lev:), & re_ice(:ncol,top_lev:), & frzimm(:ncol,top_lev:), frzcnt(:ncol,top_lev:), & - frzdep(:ncol,top_lev:), rate1cld(:ncol,top_lev:), & + frzdep(:ncol,top_lev:), & + micro_mg_warm_rain, & + rate1cld(:ncol,top_lev:), & tlat(:ncol,top_lev:), qvlat(:ncol,top_lev:), & qcten(:ncol,top_lev:), qiten(:ncol,top_lev:), & ncten(:ncol,top_lev:), niten(:ncol,top_lev:), & diff --git a/src/physics/cam7/physpkg.F90 b/src/physics/cam7/physpkg.F90 index ae1620787a..f0eaf1a519 100644 --- a/src/physics/cam7/physpkg.F90 +++ b/src/physics/cam7/physpkg.F90 @@ -1841,13 +1841,18 @@ subroutine tphysac (ztodt, cam_in, & call cam_snapshot_all_outfld_tphysac(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & fh2o, surfric, obklen, flx_heat, cmfmc, dlf, det_s, det_ice, net_flx) end if - call t_startf('microp_aero_run') call microp_aero_run(state, ptend_aero, cld_macmic_ztodt, pbuf) call t_stopf('microp_aero_run') call t_startf('microp_tend') + if (trim(cam_take_snapshot_before) == "pumas_tend") then + call cam_snapshot_all_outfld_tphysac(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & + fh2o, surfric, obklen, flx_heat, cmfmc, dlf, det_s, det_ice, net_flx) + end if + + if (use_subcol_microp) then if (trim(cam_take_snapshot_before) == "microp_driver_tend_subcol") then @@ -1900,12 +1905,20 @@ subroutine tphysac (ztodt, cam_in, & (trim(cam_take_snapshot_before) == trim(cam_take_snapshot_after))) then call cam_snapshot_ptend_outfld(ptend, lchnk) end if + if ( (trim(cam_take_snapshot_after) == "pumas_tend") .and. & + (trim(cam_take_snapshot_before) == trim(cam_take_snapshot_after))) then + call cam_snapshot_ptend_outfld(ptend, lchnk) + end if call physics_update (state_sc, ptend_sc, ztodt, tend_sc) if (trim(cam_take_snapshot_after) == "microp_driver_tend_subcol") then call cam_snapshot_all_outfld_tphysac(cam_snapshot_after_num, state_sc, tend_sc, cam_in, cam_out, pbuf, & fh2o, surfric, obklen, flx_heat, cmfmc, dlf, det_s, det_ice, net_flx) end if + if (trim(cam_take_snapshot_after) == "pumas_tend") then + call cam_snapshot_all_outfld_tphysac(cam_snapshot_after_num, state_sc, tend_sc, cam_in, cam_out, pbuf, & + fh2o, surfric, obklen, flx_heat, cmfmc, dlf, det_s, det_ice, net_flx) + end if call check_energy_cam_chng(state_sc, tend_sc, "microp_tend_subcol", & nstep, ztodt, zero_sc, & @@ -1932,12 +1945,20 @@ subroutine tphysac (ztodt, cam_in, & (trim(cam_take_snapshot_before) == trim(cam_take_snapshot_after))) then call cam_snapshot_ptend_outfld(ptend, lchnk) end if + if ( (trim(cam_take_snapshot_after) == "pumas_tend") .and. & + (trim(cam_take_snapshot_before) == trim(cam_take_snapshot_after))) then + call cam_snapshot_ptend_outfld(ptend, lchnk) + end if call physics_update (state, ptend, ztodt, tend) if (trim(cam_take_snapshot_after) == "microp_section") then call cam_snapshot_all_outfld_tphysac(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & fh2o, surfric, obklen, flx_heat, cmfmc, dlf, det_s, det_ice, net_flx) end if + if (trim(cam_take_snapshot_after) == "pumas_tend") then + call cam_snapshot_all_outfld_tphysac(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & + fh2o, surfric, obklen, flx_heat, cmfmc, dlf, det_s, det_ice, net_flx) + end if call check_energy_cam_chng(state, tend, "microp_tend", nstep, ztodt, & zero, prec_str(:ncol)/cld_macmic_num_steps, &