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

◆ 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
416  {
418  surf_evap = surf_evap_;
419  surf_sens_flux = surf_sens_flux_;
420  vapor_flux = vapor_flux_;
421  water_flux = water_flux_;
422  ice_flux = ice_flux_;
423  heat_flux = heat_flux_;
424  }

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

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: