455 const Real z_surf = 0.0;
461 dse,
rrho,
rrho_i,
thv,
dz,
zt_grid,
zi_grid,
wpthlp_sfc,
wprtp_sfc,
upwp_sfc,
535 runtime_options.c_diag_3rd_mom = m_params.get<
double>(
"c_diag_3rd_mom");
545 const auto&
T_mid = get_field_out(
"T_mid").get_view<
Spack**>();
546 const auto&
p_mid = get_field_in(
"p_mid").get_view<
const Spack**>();
547 const auto&
p_int = get_field_in(
"p_int").get_view<
const Spack**>();
548 const auto& pseudo_density = get_field_in(
"pseudo_density").get_view<
const Spack**>();
549 const auto&
omega = get_field_in(
"omega").get_view<
const Spack**>();
551 const auto&
surf_evap = get_field_in(
"surf_evap").get_view<
const Real*>();
552 const auto&
surf_mom_flux = get_field_in(
"surf_mom_flux").get_view<
const Real**>();
553 const auto&
qtracers = get_group_out(
"turbulence_advected_tracers").m_monolithic_field->get_strided_view<
Spack***>();
554 const auto&
qc = get_field_out(
"qc").get_view<
Spack**>();
555 const auto&
qv = get_field_out(
"qv").get_view<
Spack**>();
556 const auto&
tke = get_field_out(
"tke").get_view<
Spack**>();
560 const auto&
tk = get_field_out(
"eddy_diff_mom").get_view<
Spack**>();
562 const auto&
phis = get_field_in(
"phis").get_view<
const Real*>();
588 const Real z_surf = 0.0;
591 if (run_type==RunType::Initial){
593 Kokkos::deep_copy(
tk,0.0);
594 Kokkos::deep_copy(
tke,0.0004);
602 dse,
rrho,
rrho_i,
thv,
dz,
zt_grid,
zi_grid,
wpthlp_sfc,
wprtp_sfc,
upwp_sfc,
vpwp_sfc,
610 input.pdel = pseudo_density;
634 output.pblh = get_field_out(
"pbl_height").get_view<
Real*>();
636 output.tkh = get_field_out(
"eddy_diff_heat").get_view<
Spack**>();
637 output.ustar = get_field_out(
"ustar").get_view<
Real*>();
638 output.obklen = get_field_out(
"obklen").get_view<
Real*>();
643 if (m_params.get<
bool>(
"extra_shoc_diags",
false)) {
663 #ifdef SCREAM_SHOC_SMALL_KERNELS
673 temporaries.ustar2 =
m_buffer.ustar2;
676 temporaries.rho_zt =
m_buffer.rho_zt;
677 temporaries.shoc_qv =
m_buffer.shoc_qv;
688 if (has_column_conservation_check()) {
689 const auto& vapor_flux = get_field_out(
"vapor_flux").get_view<
Real*>();
690 const auto& water_flux = get_field_out(
"water_flux").get_view<
Real*>();
691 const auto& ice_flux = get_field_out(
"ice_flux").get_view<
Real*>();
692 const auto& heat_flux = get_field_out(
"heat_flux").get_view<
Real*>();
694 vapor_flux, water_flux,
695 ice_flux, heat_flux);
699 using Interval = FieldWithinIntervalCheck;
700 using LowerBound = FieldLowerBoundCheck;
701 add_postcondition_check<Interval>(get_field_out(
"T_mid"),m_grid,100.0,500.0,
false);
702 add_postcondition_check<Interval>(get_field_out(
"qc"),m_grid,0.0,0.1,
false);
703 add_postcondition_check<Interval>(get_field_out(
"horiz_winds"),m_grid,-400.0,400.0,
false);
704 add_postcondition_check<LowerBound>(get_field_out(
"pbl_height"),m_grid,0);
705 add_postcondition_check<Interval>(get_field_out(
"cldfrac_liq"),m_grid,0.0,1.0,
false);
706 add_postcondition_check<LowerBound>(get_field_out(
"tke"),m_grid,0);
709 add_postcondition_check<Interval>(get_field_out(
"qv"),m_grid,0,0.2,
true);
712 const auto nlev_packs = ekat::npack<Spack>(
m_num_layers);
713 const auto nlevi_packs = ekat::npack<Spack>(
m_num_layers+1);
714 const int n_wind_slots = ekat::npack<Spack>(2)*Spack::n;
715 const int n_trac_slots = ekat::npack<Spack>(
m_num_tracers+3)*Spack::n;
716 const auto default_policy = ekat::ExeSpaceUtils<KT::ExeSpace>::get_default_team_policy(
m_num_cols, nlev_packs);
722 const auto s_pref_mid = ekat::scalarize(pref_mid);
723 const auto hyam = m_grid->get_geometry_data(
"hyam").get_view<
const Real*>();
724 const auto hybm = m_grid->get_geometry_data(
"hybm").get_view<
const Real*>();
725 const auto ps0 = C::P0;
726 const auto psref = ps0;
727 Kokkos::parallel_for(Kokkos::RangePolicy<>(0,
m_num_layers), KOKKOS_LAMBDA (
const int lev) {
728 s_pref_mid(lev) = ps0*hyam(lev) + psref*hybm(lev);
732 const int ntop_shoc = 0;
734 m_npbl = SHF::shoc_init(nbot_shoc,ntop_shoc,pref_mid);
738 view_1d cell_length(
"cell_length", ncols);
739 if (m_grid->has_geometry_data(
"dx_short")) {
741 auto dx = m_grid->get_geometry_data(
"dx_short").get_view<
const Real,Host>()();
742 Kokkos::deep_copy(cell_length, dx*1000);
744 const auto area = m_grid->get_geometry_data(
"area").get_view<
const Real*>();
745 const auto lat = m_grid->get_geometry_data(
"lat").get_view<
const Real*>();
746 Kokkos::parallel_for(ncols, KOKKOS_LAMBDA (
const int icol) {
750 cell_length(icol) = PF::calculate_dx_from_area(area(icol),lat(icol));;
753 input.dx = cell_length;
754 input.dy = cell_length;
amrex::Real Real
Definition: ERF_ShocInterface.H:16
SHOCPreprocess shoc_preprocess
Definition: ERF_ShocInterface.H:578
SHF::SHOCOutput output
Definition: ERF_ShocInterface.H:570
ekat::WorkspaceManager< Spack, KT::Device > workspace_mgr
Definition: ERF_ShocInterface.H:582
Int m_npbl
Definition: ERF_ShocInterface.H:537
SHF::SHOCInput input
Definition: ERF_ShocInterface.H:568
SHOCPostprocess shoc_postprocess
Definition: ERF_ShocInterface.H:579
typename SHF::Spack Spack
Definition: ERF_ShocInterface.H:40
SHF::SHOCInputOutput input_output
Definition: ERF_ShocInterface.H:569
Buffer m_buffer
Definition: ERF_ShocInterface.H:565
SHF::SHOCHistoryOutput history_output
Definition: ERF_ShocInterface.H:571
bool initialized
Definition: ERF_RRTMGP_Interface.cpp:24
uview_2d< Spack > w3
Definition: ERF_ShocInterface.H:492
uview_2d< Spack > qc_copy
Definition: ERF_ShocInterface.H:479
uview_2d< Spack > dse
Definition: ERF_ShocInterface.H:477
uview_1d< Real > upwp_sfc
Definition: ERF_ShocInterface.H:446
uview_2d< Spack > vw_sec
Definition: ERF_ShocInterface.H:491
uview_1d< Real > wpthlp_sfc
Definition: ERF_ShocInterface.H:444
uview_2d< Spack > thv
Definition: ERF_ShocInterface.H:468
uview_2d< Spack > wqls_sec
Definition: ERF_ShocInterface.H:493
uview_2d< Spack > wthl_sec
Definition: ERF_ShocInterface.H:487
uview_2d< Spack > thlm
Definition: ERF_ShocInterface.H:475
uview_2d< Spack > uw_sec
Definition: ERF_ShocInterface.H:490
uview_2d< Spack > z_mid
Definition: ERF_ShocInterface.H:464
uview_1d< Real > vpwp_sfc
Definition: ERF_ShocInterface.H:447
uview_2d< Spack > rrho
Definition: ERF_ShocInterface.H:466
uview_2d< Spack > wtke_sec
Definition: ERF_ShocInterface.H:489
uview_2d< Spack > rrho_i
Definition: ERF_ShocInterface.H:467
uview_2d< Spack > unused
Definition: ERF_ShocInterface.H:463
Spack * wsm_data
Definition: ERF_ShocInterface.H:504
uview_2d< Spack > wtracer_sfc
Definition: ERF_ShocInterface.H:472
uview_2d< Spack > inv_exner
Definition: ERF_ShocInterface.H:474
uview_2d< Spack > qwthl_sec
Definition: ERF_ShocInterface.H:486
uview_2d< Spack > qw
Definition: ERF_ShocInterface.H:476
uview_2d< Spack > brunt
Definition: ERF_ShocInterface.H:494
uview_2d< Spack > shoc_mix
Definition: ERF_ShocInterface.H:481
uview_2d< Spack > tke_copy
Definition: ERF_ShocInterface.H:478
uview_2d< Spack > isotropy
Definition: ERF_ShocInterface.H:482
uview_2d< Spack > zt_grid
Definition: ERF_ShocInterface.H:470
uview_2d< Spack > thl_sec
Definition: ERF_ShocInterface.H:484
uview_2d< Spack > wm_zt
Definition: ERF_ShocInterface.H:473
uview_2d< Spack > qw_sec
Definition: ERF_ShocInterface.H:485
uview_2d< Spack > wqw_sec
Definition: ERF_ShocInterface.H:488
uview_2d< Spack > z_int
Definition: ERF_ShocInterface.H:465
uview_2d< Spack > shoc_ql2
Definition: ERF_ShocInterface.H:480
uview_1d< Real > wprtp_sfc
Definition: ERF_ShocInterface.H:445
uview_2d< Spack > zi_grid
Definition: ERF_ShocInterface.H:471
uview_1d< Spack > pref_mid
Definition: ERF_ShocInterface.H:461
uview_2d< Spack > dz
Definition: ERF_ShocInterface.H:469
void set_variables(const int ncol_, const int nlev_, const view_2d_const &rrho_, const view_2d &qv_, const view_2d_const &qw_, const view_2d &qc_, const view_2d_const &qc_copy_, const view_2d &tke_, const view_2d_const &tke_copy_, const view_3d_strided &qtracers_, const view_2d_const &qc2_, const view_2d &cldfrac_liq_, const view_2d &inv_qc_relvar_, const view_2d &T_mid_, const view_2d_const &dse_, const view_2d_const &z_mid_, const view_1d_const phis_)
Definition: ERF_ShocInterface.H:386
void set_mass_and_energy_fluxes(const view_1d_const &surf_evap_, const view_1d_const &surf_sens_flux_, const view_1d &vapor_flux_, const view_1d &water_flux_, const view_1d &ice_flux_, const view_1d &heat_flux_)
Definition: ERF_ShocInterface.H:412
view_3d_strided qtracers
Definition: ERF_ShocInterface.H:222
view_2d thlm
Definition: ERF_ShocInterface.H:244
view_2d zt_grid
Definition: ERF_ShocInterface.H:235
view_2d inv_exner
Definition: ERF_ShocInterface.H:243
view_2d wm_zt
Definition: ERF_ShocInterface.H:242
view_2d wtracer_sfc
Definition: ERF_ShocInterface.H:241
view_1d wprtp_sfc
Definition: ERF_ShocInterface.H:238
view_2d qw
Definition: ERF_ShocInterface.H:245
view_1d upwp_sfc
Definition: ERF_ShocInterface.H:239
view_1d wpthlp_sfc
Definition: ERF_ShocInterface.H:237
view_1d vpwp_sfc
Definition: ERF_ShocInterface.H:240
view_2d shoc_s
Definition: ERF_ShocInterface.H:228
view_2d tke_copy
Definition: ERF_ShocInterface.H:230
view_2d zi_grid
Definition: ERF_ShocInterface.H:236
view_2d thv
Definition: ERF_ShocInterface.H:233
void set_variables(const int ncol_, const int nlev_, const Real z_surf_, const view_2d_const &T_mid_, const view_2d_const &p_mid_, const view_2d_const &p_int_, const view_2d_const &pseudo_density_, const view_2d_const &omega_, const view_1d_const &phis_, const view_1d_const &surf_sens_flux_, const view_1d_const &surf_evap_, const sview_2d_const &surf_mom_flux_, const view_3d_strided &qtracers_, const view_2d &qv_, const view_2d_const &qc_, const view_2d &qc_copy_, const view_2d &tke_, const view_2d &tke_copy_, const view_2d &z_mid_, const view_2d &z_int_, const view_2d &dse_, const view_2d &rrho_, const view_2d &rrho_i_, const view_2d &thv_, const view_2d &dz_, const view_2d &zt_grid_, const view_2d &zi_grid_, const view_1d &wpthlp_sfc_, const view_1d &wprtp_sfc_, const view_1d &upwp_sfc_, const view_1d &vpwp_sfc_, const view_2d &wtracer_sfc_, const view_2d &wm_zt_, const view_2d &inv_exner_, const view_2d &thlm_, const view_2d &qw_, const view_2d &cldfrac_liq_, const view_2d &cldfrac_liq_prev_)
Definition: ERF_ShocInterface.H:251