ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_NumericalDiffusion.H
Go to the documentation of this file.
1 #ifndef ERF_NUMERICALDIFFUSION_H_
2 #define ERF_NUMERICALDIFFUSION_H_
3 
4 #include <AMReX.H>
5 #include <ERF_DataStruct.H>
6 #include <AMReX_MultiFab.H>
7 
8 /**
9  * Compute a fifth-order derivative approximation.
10  *
11  * @param[in] dnp2 Value at index n+2
12  * @param[in] dnp1 Value at index n+1
13  * @param[in] dn Value at index n
14  * @param[in] dnm1 Value at index n-1
15  * @param[in] dnm2 Value at index n-2
16  * @param[in] dnm3 Value at index n-3
17  * @return The calculated derivative
18  */
19 AMREX_GPU_DEVICE
20 AMREX_FORCE_INLINE
23  const amrex::Real& dnp1,
24  const amrex::Real& dn,
25  const amrex::Real& dnm1,
26  const amrex::Real& dnm2,
27  const amrex::Real& dnm3)
28 {
29  amrex::Real interp = amrex::Real(10.) * (dn - dnm1)
30  - amrex::Real(5.) * (dnp1 - dnm2)
31  + (dnp2 - dnm3);
32  return interp;
33 }
34 
35 /**
36  * Apply numerical diffusion to scalar variables.
37  *
38  * @param[in] bx Box of cells to process
39  * @param[in] start_comp Starting component index
40  * @param[in] num_comp Number of components to process
41  * @param[in] dt Time step
42  * @param[in] num_diff_coeff Numerical diffusion coefficient
43  * @param[in] prim_data Primitive variable data
44  * @param[in] cell_data Cell-centered data
45  * @param[out] rhs Right-hand side array for updates
46  * @param[in] mfx Map factors in x
47  * @param[in] mfy Map factors in y
48  */
49 void NumericalDiffusion_Scal (const amrex::Box& bx,
50  const int start_comp,
51  const int num_comp,
52  const double dt,
53  const amrex::Real num_diff_coeff,
54  const amrex::Array4<const amrex::Real>& prim_data,
55  const amrex::Array4<const amrex::Real>& cell_data,
56  const amrex::Array4< amrex::Real>& rhs,
57  const amrex::Array4<const amrex::Real>& mfx,
58  const amrex::Array4<const amrex::Real>& mfy);
59 
60 /**
61  * Apply numerical diffusion to the x-momentum equation.
62  *
63  * @param[in] bx Box of cells to process
64  * @param[in] dt Time step
65  * @param[in] num_diff_coeff Numerical diffusion coefficient
66  * @param[in] prim_data Primitive variable data
67  * @param[in] cell_data Cell-centered data
68  * @param[out] rhs Right-hand side array for updates
69  * @param[in] mfx Map factors in x
70  * @param[in] mfy Map factors in y
71  */
72 void NumericalDiffusion_Xmom (const amrex::Box& bx,
73  const double dt,
74  const amrex::Real num_diff_coeff,
75  const amrex::Array4<const amrex::Real>& prim_data,
76  const amrex::Array4<const amrex::Real>& cell_data,
77  const amrex::Array4< amrex::Real>& rhs,
78  const amrex::Array4<const amrex::Real>& mfx,
79  const amrex::Array4<const amrex::Real>& mfy);
80 
81 /**
82  * Apply numerical diffusion to the y-momentum equation.
83  *
84  * @param[in] bx Box of cells to process
85  * @param[in] dt Time step
86  * @param[in] num_diff_coeff Numerical diffusion coefficient
87  * @param[in] prim_data Primitive variable data
88  * @param[in] cell_data Cell-centered data
89  * @param[out] rhs Right-hand side array for updates
90  * @param[in] mfx Map factors in x
91  * @param[in] mfy Map factors in y
92  */
93 void NumericalDiffusion_Ymom (const amrex::Box& bx,
94  const double dt,
95  const amrex::Real num_diff_coeff,
96  const amrex::Array4<const amrex::Real>& prim_data,
97  const amrex::Array4<const amrex::Real>& cell_data,
98  const amrex::Array4< amrex::Real>& rhs,
99  const amrex::Array4<const amrex::Real>& mfx,
100  const amrex::Array4<const amrex::Real>& mfy);
101 #endif
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_fifth_order_deriv(const amrex::Real &dnp2, const amrex::Real &dnp1, const amrex::Real &dn, const amrex::Real &dnm1, const amrex::Real &dnm2, const amrex::Real &dnm3)
Definition: ERF_NumericalDiffusion.H:22
void NumericalDiffusion_Scal(const amrex::Box &bx, const int start_comp, const int num_comp, const double dt, const amrex::Real num_diff_coeff, const amrex::Array4< const amrex::Real > &prim_data, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< amrex::Real > &rhs, const amrex::Array4< const amrex::Real > &mfx, const amrex::Array4< const amrex::Real > &mfy)
void NumericalDiffusion_Ymom(const amrex::Box &bx, const double dt, const amrex::Real num_diff_coeff, const amrex::Array4< const amrex::Real > &prim_data, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< amrex::Real > &rhs, const amrex::Array4< const amrex::Real > &mfx, const amrex::Array4< const amrex::Real > &mfy)
void NumericalDiffusion_Xmom(const amrex::Box &bx, const double dt, const amrex::Real num_diff_coeff, const amrex::Array4< const amrex::Real > &prim_data, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< amrex::Real > &rhs, const amrex::Array4< const amrex::Real > &mfx, const amrex::Array4< const amrex::Real > &mfy)
amrex::Real Real
Definition: ERF_ShocInterface.H:19