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

◆ 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
427  {
429  surf_evap = surf_evap_;
430  surf_sens_flux = surf_sens_flux_;
431  vapor_flux = vapor_flux_;
432  water_flux = water_flux_;
433  ice_flux = ice_flux_;
434  heat_flux = heat_flux_;
435  }

◆ 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
404  {
405  ncol = ncol_;
406  nlev = nlev_;
407  rrho = rrho_;
408  qv = qv_;
409  qw = qw_;
410  qc = qc_;
411  qc_copy = qc_copy_;
412  tke = tke_;
413  tke_copy = tke_copy_;
414  qtracers = qtracers_;
415  qc2 = qc2_;
416  cldfrac_liq = cldfrac_liq_;
417  inv_qc_relvar = inv_qc_relvar_;
418  T_mid = T_mid_;
419  dse = dse_;
420  z_mid = z_mid_;
421  phis = phis_;
422  } // set_variables
view_2d_const rrho
Definition: ERF_ShocInterface.H:379
view_3d_strided qtracers
Definition: ERF_ShocInterface.H:382
int ncol
Definition: ERF_ShocInterface.H:378

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: