1#ifndef AMREX_HABEC_2D_H_
2#define AMREX_HABEC_2D_H_
3#include <AMReX_Config.H>
18 sten[1] = -(sb / (dx[0]*dx[0])) * b[0](i,j,k);
19 sten[2] = -(sb / (dx[0]*dx[0])) * b[0](i+1,j,k);
20 sten[0] = -(sten[1] + sten[2]);
21 if (sa !=
Real(0.0)) {
22 sten[0] += sa * a(i,j,k);
28 if (msk[cdir](i-1,j,k) > 0) {
30 detail::comp_bf(bf1, bf2, sb, dx[0], bctype[cdir], bcl[cdir], bho);
31 sten[0] += bf1 * b[0](i,j,k);
33 sten[2] += bf2 * b[0](i,j,k);
40 if (msk[cdir](i+1,j,k) > 0) {
42 detail::comp_bf(bf1, bf2, sb, dx[0], bctype[cdir], bcl[cdir], bho);
43 sten[0] += bf1 * b[0](i+1,j,k);
44 sten[1] += bf2 * b[0](i+1,j,k);
50template <
typename Int>
62 if (!osm || osm(i,j,k) != 0) {
63 sten[1] = -(sb / (dx[0]*dx[0])) * b[0](i,j,k);
64 sten[2] = -(sb / (dx[0]*dx[0])) * b[0](i+1,j,k);
65 sten[0] = -(sten[1] + sten[2]);
66 if (sa !=
Real(0.0)) {
67 sten[0] += sa * a(i,j,k);
71 if (cell_id(i-1,j,k) < 0) {
74 detail::comp_bf(bf1, bf2, sb, dx[0], bctype[cdir], bcl[cdir], bho);
75 sten[0] += bf1 * b[0](i,j,k);
77 sten[2] += bf2 * b[0](i,j,k);
81 if (cell_id(i+1,j,k) < 0) {
84 detail::comp_bf(bf1, bf2, sb, dx[0], bctype[cdir], bcl[cdir], bho);
85 sten[0] += bf1 * b[0](i+1,j,k);
86 sten[1] += bf2 * b[0](i+1,j,k);
91 for (
int m = 1; m < 2*AMREX_SPACEDIM+1; ++m) {
96 diaginv(i,j,k) =
Real(1.0) / sten[0];
98 for (
int m = 1; m < 2*AMREX_SPACEDIM+1; ++m) {
99 sten[m] *= diaginv(i,j,k);
103 for (
int m = 0; m < 2*AMREX_SPACEDIM+1; ++m) {
104 ncols(i,j,k) += (sten[m] !=
Real(0.0));
108template <
typename Int>
113 sten[0] = cell_id(i ,j ,0);
114 sten[1] = cell_id(i-1,j ,0);
115 sten[2] = cell_id(i+1,j ,0);
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:119
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
Encapsulation of the Orientation of the Faces of a Box.
Definition AMReX_Orientation.H:29
@ low
Definition AMReX_Orientation.H:34
@ high
Definition AMReX_Orientation.H:34
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
Definition AMReX_Amr.cpp:49
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void habec_cols(GpuArray< Int, 2 *3+1 > &sten, int i, int j, int, Array4< Int const > const &cell_id)
Definition AMReX_Habec_1D_K.H:110
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void habec_mat(GpuArray< Real, 2 *3+1 > &sten, int i, int j, int k, Dim3 const &boxlo, Dim3 const &boxhi, Real sa, Array4< Real const > const &a, Real sb, GpuArray< Real, 3 > const &dx, GpuArray< Array4< Real const >, 3 > const &b, GpuArray< int, 3 *2 > const &bctype, GpuArray< Real, 3 *2 > const &bcl, int bho, GpuArray< Array4< int const >, 3 *2 > const &msk, Array4< Real > const &diaginv)
Definition AMReX_Habec_1D_K.H:8
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void habec_ijmat(GpuArray< Real, 2 *3+1 > &sten, Array4< Int > const &ncols, Array4< Real > const &diaginv, int i, int j, int k, Array4< Int const > const &cell_id, Real sa, Array4< Real const > const &a, Real sb, GpuArray< Real, 3 > const &dx, GpuArray< Array4< Real const >, 3 > const &b, GpuArray< int, 3 *2 > const &bctype, GpuArray< Real, 3 *2 > const &bcl, int bho, Array4< int const > const &osm)
Definition AMReX_Habec_1D_K.H:52
Definition AMReX_Array4.H:61
Definition AMReX_Dim3.H:12
int x
Definition AMReX_Dim3.H:12
Fixed-size array that can be used on GPU.
Definition AMReX_Array.H:40