ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_Morrison.H File Reference
#include <string>
#include <vector>
#include <memory>
#include <AMReX_FArrayBox.H>
#include <AMReX_Geometry.H>
#include <AMReX_TableData.H>
#include <AMReX_MultiFabUtil.H>
#include "ERF_Constants.H"
#include "ERF_MicrophysicsConstants.H"
#include "ERF_MicrophysicsUtils.H"
#include "ERF_IndexDefines.H"
#include "ERF_DataStruct.H"
#include "ERF_NullMoist.H"
#include "ERF_SurfacePrecipitation.H"
#include <ERF_Morrison_Fortran_Interface.H>
Include dependency graph for ERF_Morrison.H:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  Morrison
 

Namespaces

 MicVar_Morr
 

Enumerations

enum  {
  MicVar_Morr::rho =0 , MicVar_Morr::theta , MicVar_Morr::tabs , MicVar_Morr::pres ,
  MicVar_Morr::qt , MicVar_Morr::qn , MicVar_Morr::qv , MicVar_Morr::qcl ,
  MicVar_Morr::qci , MicVar_Morr::qp , MicVar_Morr::qpr , MicVar_Morr::qps ,
  MicVar_Morr::qpg , MicVar_Morr::nc , MicVar_Morr::nr , MicVar_Morr::ni ,
  MicVar_Morr::ns , MicVar_Morr::ng , MicVar_Morr::rain_accum , MicVar_Morr::snow_accum ,
  MicVar_Morr::graup_accum , MicVar_Morr::omega , MicVar_Morr::NumVars
}
 

Functions

AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void morrison_copy_state_to_micro_cell (const amrex::Array4< const amrex::Real > &states, const amrex::Array4< const amrex::Real > &base, const amrex::Array4< amrex::Real > &rho, const amrex::Array4< amrex::Real > &theta, const amrex::Array4< amrex::Real > &qv, const amrex::Array4< amrex::Real > &qc, const amrex::Array4< amrex::Real > &qi, const amrex::Array4< amrex::Real > &qn, const amrex::Array4< amrex::Real > &qt, const amrex::Array4< amrex::Real > &qpr, const amrex::Array4< amrex::Real > &qps, const amrex::Array4< amrex::Real > &qpg, const amrex::Array4< amrex::Real > &qp, const amrex::Array4< amrex::Real > &tabs, const amrex::Array4< amrex::Real > &pres, const amrex::Real rdOcp, const bool use_anelastic_reference_pressure, const int i, const int j, const int k) noexcept
 

Function Documentation

◆ morrison_copy_state_to_micro_cell()

AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void morrison_copy_state_to_micro_cell ( const amrex::Array4< const amrex::Real > &  states,
const amrex::Array4< const amrex::Real > &  base,
const amrex::Array4< amrex::Real > &  rho,
const amrex::Array4< amrex::Real > &  theta,
const amrex::Array4< amrex::Real > &  qv,
const amrex::Array4< amrex::Real > &  qc,
const amrex::Array4< amrex::Real > &  qi,
const amrex::Array4< amrex::Real > &  qn,
const amrex::Array4< amrex::Real > &  qt,
const amrex::Array4< amrex::Real > &  qpr,
const amrex::Array4< amrex::Real > &  qps,
const amrex::Array4< amrex::Real > &  qpg,
const amrex::Array4< amrex::Real > &  qp,
const amrex::Array4< amrex::Real > &  tabs,
const amrex::Array4< amrex::Real > &  pres,
const amrex::Real  rdOcp,
const bool  use_anelastic_reference_pressure,
const int  i,
const int  j,
const int  k 
)
noexcept
80 {
81  const amrex::Real rho_value = states(i,j,k,Rho_comp);
82  const amrex::Real rho_theta = states(i,j,k,RhoTheta_comp);
83  rho(i,j,k) = rho_value;
84  theta(i,j,k) = rho_theta / rho_value;
85  qv(i,j,k) = amrex::max(amrex::Real(0.0), states(i,j,k,RhoQ1_comp) / rho_value);
86  qc(i,j,k) = amrex::max(amrex::Real(0.0), states(i,j,k,RhoQ2_comp) / rho_value);
87  qi(i,j,k) = amrex::max(amrex::Real(0.0), states(i,j,k,RhoQ3_comp) / rho_value);
88  qn(i,j,k) = qc(i,j,k) + qi(i,j,k);
89  qt(i,j,k) = qv(i,j,k) + qn(i,j,k);
90  qpr(i,j,k) = amrex::max(amrex::Real(0.0), states(i,j,k,RhoQ4_comp) / rho_value);
91  qps(i,j,k) = amrex::max(amrex::Real(0.0), states(i,j,k,RhoQ5_comp) / rho_value);
92  qpg(i,j,k) = amrex::max(amrex::Real(0.0), states(i,j,k,RhoQ6_comp) / rho_value);
93  qp(i,j,k) = qpr(i,j,k) + qps(i,j,k) + qpg(i,j,k);
94 
95  const amrex::Real p0 = use_anelastic_reference_pressure
96  ? base(i,j,k,BaseState::p0_comp) : amrex::Real(0.0);
98  rho_value, rho_theta, qv(i,j,k), rdOcp,
99  use_anelastic_reference_pressure, p0);
100  tabs(i,j,k) = thermo.temperature;
101  // Morrison's native pressure unit is Pa.
102  pres(i,j,k) = thermo.pressure_pa;
103 }
#define Rho_comp
Definition: ERF_IndexDefines.H:39
#define RhoQ4_comp
Definition: ERF_IndexDefines.H:48
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:40
#define RhoQ2_comp
Definition: ERF_IndexDefines.H:46
#define RhoQ3_comp
Definition: ERF_IndexDefines.H:47
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:45
#define RhoQ6_comp
Definition: ERF_IndexDefines.H:50
#define RhoQ5_comp
Definition: ERF_IndexDefines.H:49
const Real rdOcp
Definition: ERF_InitCustomPert_ABL.H:72
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE MicrophysicsThermoState diagnose_microphysics_thermo_state(const amrex::Real rho, const amrex::Real rho_theta, const amrex::Real qv, const amrex::Real rdOcp, const bool use_anelastic_reference_pressure, const amrex::Real p0) noexcept
Definition: ERF_MicrophysicsUtils.H:35
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ p0_comp
Definition: ERF_IndexDefines.H:77
@ qv
Definition: ERF_Morrison.H:36
@ qpg
Definition: ERF_Morrison.H:43
@ pres
Definition: ERF_Morrison.H:32
@ tabs
Definition: ERF_Morrison.H:31
@ theta
Definition: ERF_Morrison.H:30
@ qp
Definition: ERF_Morrison.H:40
@ qps
Definition: ERF_Morrison.H:42
@ qn
Definition: ERF_Morrison.H:35
@ rho
Definition: ERF_Morrison.H:29
@ qpr
Definition: ERF_Morrison.H:41
@ qt
Definition: ERF_Morrison.H:34
@ qc
Definition: ERF_SatAdj.H:42
@ qi
Definition: ERF_WDM6.H:28
Definition: ERF_ConsoleIO.cpp:15
real(c_double), parameter p0
Definition: ERF_module_model_constants.F90:40
Definition: ERF_MicrophysicsUtils.H:22
amrex::Real pressure_pa
Definition: ERF_MicrophysicsUtils.H:23
amrex::Real temperature
Definition: ERF_MicrophysicsUtils.H:24
Here is the call graph for this function: