ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
SHOCInterface::SHOCPostprocess Struct Reference

#include <ERF_ShocInterface.H>

Collaboration diagram for SHOCInterface::SHOCPostprocess:

Public Member Functions

 SHOCPostprocess ()=default
 
KOKKOS_INLINE_FUNCTION void operator() (const Kokkos::TeamPolicy< KT::ExeSpace >::member_type &team) const
 
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_)
 
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_)
 

Public Attributes

int ncol
 
int nlev
 
view_2d_const rrho
 
view_2d qv
 
view_2d qc
 
view_2d tke
 
view_2d_const tke_copy
 
view_2d_const qc_copy
 
view_2d_const qw
 
view_3d_strided qtracers
 
view_2d_const qc2
 
view_2d cldfrac_liq
 
view_2d inv_qc_relvar
 
view_2d T_mid
 
view_2d_const dse
 
view_2d_const z_mid
 
view_1d_const phis
 
bool compute_mass_and_energy_fluxes = false
 
view_1d_const surf_evap
 
view_1d_const surf_sens_flux
 
view_1d vapor_flux
 
view_1d water_flux
 
view_1d ice_flux
 
view_1d heat_flux
 

Constructor & Destructor Documentation

◆ SHOCPostprocess()

SHOCInterface::SHOCPostprocess::SHOCPostprocess ( )
default

Member Function Documentation

◆ operator()()

KOKKOS_INLINE_FUNCTION void SHOCInterface::SHOCPostprocess::operator() ( const Kokkos::TeamPolicy< KT::ExeSpace >::member_type &  team) const
inline
319  {
320  const int i = team.league_rank();
321 
322  const Real inv_qc_relvar_max = 10;
323  const Real inv_qc_relvar_min = 0.001;
324 
325  const int nlev_packs = ekat::npack<Spack>(nlev);
326  Kokkos::parallel_for(Kokkos::TeamVectorRange(team, nlev_packs), [&] (const Int& k)
327  {
328  // See comment in SHOCPreprocess::operator() about the necessity of *_copy views
329  tke(i,k) = tke_copy(i,k);
330  qc(i,k) = qc_copy(i,k);
331 
332  qv(i,k) = qw(i,k) - qc(i,k);
333 
334  cldfrac_liq(i,k) = ekat::min(cldfrac_liq(i,k), 1);
335 
336  //P3 uses inv_qc_relvar, P3 is using dry mmrs, but
337  //wet<->dry conversion is a constant factor that cancels out in mean(qc)^2/mean(qc'*qc').
338  inv_qc_relvar(i,k) = 1;
339  const auto condition = (qc(i,k) != 0 && qc2(i,k) != 0);
340  if (condition.any()) {
341  inv_qc_relvar(i,k).set(condition,
342  ekat::min(inv_qc_relvar_max,
343  ekat::max(inv_qc_relvar_min,
344  ekat::square(qc(i,k))/qc2(i,k))));
345  }
346 
347  // Temperature
348  const Spack dse_ik(dse(i,k));
349  const Spack z_mid_ik(z_mid(i,k));
350  const Real phis_i(phis(i));
351  T_mid(i,k) = PF::calculate_temperature_from_dse(dse_ik,z_mid_ik,phis_i);
352 
353  });
354 
355  // If necessary, set appropriate boundary fluxes for energy and mass conservation checks.
356  // Any boundary fluxes not included in SHOC interface are set to 0.
358  vapor_flux(i) = surf_evap(i);
359  water_flux(i) = 0.0;
360  ice_flux(i) = 0.0;
361  heat_flux(i) = surf_sens_flux(i);
362  }
363  } // operator
int Int
Definition: ERF_ShocInterface.H:17
amrex::Real Real
Definition: ERF_ShocInterface.H:16
typename SHF::Spack Spack
Definition: ERF_ShocInterface.H:40
view_1d_const surf_sens_flux
Definition: ERF_ShocInterface.H:379
view_1d ice_flux
Definition: ERF_ShocInterface.H:382
view_1d vapor_flux
Definition: ERF_ShocInterface.H:380
view_1d_const phis
Definition: ERF_ShocInterface.H:376
int nlev
Definition: ERF_ShocInterface.H:366
view_1d heat_flux
Definition: ERF_ShocInterface.H:383
view_2d cldfrac_liq
Definition: ERF_ShocInterface.H:372
view_2d_const qw
Definition: ERF_ShocInterface.H:369
bool compute_mass_and_energy_fluxes
Definition: ERF_ShocInterface.H:377
view_1d water_flux
Definition: ERF_ShocInterface.H:381
view_1d_const surf_evap
Definition: ERF_ShocInterface.H:378
view_2d_const qc_copy
Definition: ERF_ShocInterface.H:369
view_2d_const z_mid
Definition: ERF_ShocInterface.H:375
view_2d_const dse
Definition: ERF_ShocInterface.H:375
view_2d tke
Definition: ERF_ShocInterface.H:368
view_2d T_mid
Definition: ERF_ShocInterface.H:374
view_2d inv_qc_relvar
Definition: ERF_ShocInterface.H:373
view_2d qc
Definition: ERF_ShocInterface.H:368
view_2d qv
Definition: ERF_ShocInterface.H:368
view_2d_const qc2
Definition: ERF_ShocInterface.H:371
view_2d_const tke_copy
Definition: ERF_ShocInterface.H:369

◆ set_mass_and_energy_fluxes()

void SHOCInterface::SHOCPostprocess::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_ 
)
inline
415  {
417  surf_evap = surf_evap_;
418  surf_sens_flux = surf_sens_flux_;
419  vapor_flux = vapor_flux_;
420  water_flux = water_flux_;
421  ice_flux = ice_flux_;
422  heat_flux = heat_flux_;
423  }

◆ set_variables()

void SHOCInterface::SHOCPostprocess::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_ 
)
inline
392  {
393  ncol = ncol_;
394  nlev = nlev_;
395  rrho = rrho_;
396  qv = qv_;
397  qw = qw_;
398  qc = qc_;
399  qc_copy = qc_copy_;
400  tke = tke_;
401  tke_copy = tke_copy_;
402  qtracers = qtracers_;
403  qc2 = qc2_;
404  cldfrac_liq = cldfrac_liq_;
405  inv_qc_relvar = inv_qc_relvar_;
406  T_mid = T_mid_;
407  dse = dse_;
408  z_mid = z_mid_;
409  phis = phis_;
410  } // set_variables
view_2d_const rrho
Definition: ERF_ShocInterface.H:367
view_3d_strided qtracers
Definition: ERF_ShocInterface.H:370
int ncol
Definition: ERF_ShocInterface.H:366

Member Data Documentation

◆ cldfrac_liq

view_2d SHOCInterface::SHOCPostprocess::cldfrac_liq

Referenced by operator()(), and set_variables().

◆ compute_mass_and_energy_fluxes

bool SHOCInterface::SHOCPostprocess::compute_mass_and_energy_fluxes = false

◆ dse

view_2d_const SHOCInterface::SHOCPostprocess::dse

Referenced by operator()(), and set_variables().

◆ heat_flux

view_1d SHOCInterface::SHOCPostprocess::heat_flux

◆ ice_flux

view_1d SHOCInterface::SHOCPostprocess::ice_flux

◆ inv_qc_relvar

view_2d SHOCInterface::SHOCPostprocess::inv_qc_relvar

Referenced by operator()(), and set_variables().

◆ ncol

int SHOCInterface::SHOCPostprocess::ncol

Referenced by set_variables().

◆ nlev

int SHOCInterface::SHOCPostprocess::nlev

Referenced by operator()(), and set_variables().

◆ phis

view_1d_const SHOCInterface::SHOCPostprocess::phis

Referenced by operator()(), and set_variables().

◆ qc

view_2d SHOCInterface::SHOCPostprocess::qc

Referenced by operator()(), and set_variables().

◆ qc2

view_2d_const SHOCInterface::SHOCPostprocess::qc2

Referenced by operator()(), and set_variables().

◆ qc_copy

view_2d_const SHOCInterface::SHOCPostprocess::qc_copy

Referenced by operator()(), and set_variables().

◆ qtracers

view_3d_strided SHOCInterface::SHOCPostprocess::qtracers

Referenced by set_variables().

◆ qv

view_2d SHOCInterface::SHOCPostprocess::qv

Referenced by operator()(), and set_variables().

◆ qw

view_2d_const SHOCInterface::SHOCPostprocess::qw

Referenced by operator()(), and set_variables().

◆ rrho

view_2d_const SHOCInterface::SHOCPostprocess::rrho

Referenced by set_variables().

◆ surf_evap

view_1d_const SHOCInterface::SHOCPostprocess::surf_evap

◆ surf_sens_flux

view_1d_const SHOCInterface::SHOCPostprocess::surf_sens_flux

◆ T_mid

view_2d SHOCInterface::SHOCPostprocess::T_mid

Referenced by operator()(), and set_variables().

◆ tke

view_2d SHOCInterface::SHOCPostprocess::tke

Referenced by operator()(), and set_variables().

◆ tke_copy

view_2d_const SHOCInterface::SHOCPostprocess::tke_copy

Referenced by operator()(), and set_variables().

◆ vapor_flux

view_1d SHOCInterface::SHOCPostprocess::vapor_flux

◆ water_flux

view_1d SHOCInterface::SHOCPostprocess::water_flux

◆ z_mid

view_2d_const SHOCInterface::SHOCPostprocess::z_mid

Referenced by operator()(), and set_variables().


The documentation for this struct was generated from the following file: