22 auto dx = geom.CellSizeArray();
23 auto ProbHiArr = geom.ProbHiArray();
24 auto ProbLoArr = geom.ProbLoArray();
42 const Box& domain = geom.Domain();
43 int domlo_x = domain.smallEnd(0);
44 int domhi_x = domain.bigEnd(0) + 1;
45 int domlo_y = domain.smallEnd(1);
46 int domhi_y = domain.bigEnd(1) + 1;
51 if(use_xlo_sponge_damping)AMREX_ALWAYS_ASSERT(xlo_sponge_end > ProbLoArr[0]);
52 if(use_xhi_sponge_damping)AMREX_ALWAYS_ASSERT(xhi_sponge_start < ProbHiArr[0]);
53 if(use_ylo_sponge_damping)AMREX_ALWAYS_ASSERT(ylo_sponge_end > ProbLoArr[1]);
54 if(use_yhi_sponge_damping)AMREX_ALWAYS_ASSERT(yhi_sponge_start < ProbHiArr[1]);
55 if(use_zlo_sponge_damping)AMREX_ALWAYS_ASSERT(zlo_sponge_end > ProbLoArr[2]);
56 if(use_zhi_sponge_damping)AMREX_ALWAYS_ASSERT(zhi_sponge_start < ProbHiArr[2]);
58 ParallelFor(tbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k)
60 int ii = amrex::min(amrex::max(i, domlo_x), domhi_x);
61 int jj = amrex::min(amrex::max(j, domlo_y), domhi_y);
63 Real
x = ProbLoArr[0] + ii * dx[0];
64 Real
y = ProbLoArr[1] + (jj+0.5) * dx[1];
65 Real
z = z_phys_cc(i,j,k);
68 if(use_xlo_sponge_damping){
69 if (x < xlo_sponge_end) {
70 Real xi = (xlo_sponge_end -
x) / (xlo_sponge_end - ProbLoArr[0]);
71 rho_u_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_u(i, j, k) - cell_data(i,j,k,0)*
ubar_sponge[k]);
75 if(use_xhi_sponge_damping){
76 if (x > xhi_sponge_start) {
77 Real xi = (
x - xhi_sponge_start) / (ProbHiArr[0] - xhi_sponge_start);
78 rho_u_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_u(i, j, k) - cell_data(i,j,k,0)*
ubar_sponge[k]);
83 if(use_ylo_sponge_damping){
84 if (y < ylo_sponge_end) {
85 Real xi = (ylo_sponge_end -
y) / (ylo_sponge_end - ProbLoArr[1]);
86 rho_u_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_u(i, j, k) - cell_data(i,j,k,0)*
ubar_sponge[k]);
90 if(use_yhi_sponge_damping){
91 if (y > yhi_sponge_start) {
92 Real xi = (
y - yhi_sponge_start) / (ProbHiArr[1] - yhi_sponge_start);
93 rho_u_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_u(i, j, k) - cell_data(i,j,k,0)*
ubar_sponge[k]);
98 if(use_zlo_sponge_damping){
99 if (z < zlo_sponge_end) {
100 Real xi = (zlo_sponge_end -
z) / (zlo_sponge_end - ProbLoArr[2]);
101 rho_u_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_u(i, j, k) - cell_data(i,j,k,0)*
ubar_sponge[k]);
107 if(use_zhi_sponge_damping){
108 if (z > zhi_sponge_start) {
109 Real xi = (
z - zhi_sponge_start) / (ProbHiArr[2] - zhi_sponge_start);
110 rho_u_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_u(i, j, k) - cell_data(i,j,k,0)*
ubar_sponge[k]);
116 ParallelFor(tby, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k)
118 int ii = amrex::min(amrex::max(i, domlo_x), domhi_x);
119 int jj = amrex::min(amrex::max(j, domlo_y), domhi_y);
121 Real
x = ProbLoArr[0] + (ii+0.5) * dx[0];
122 Real
y = ProbLoArr[1] + jj * dx[1];
123 Real
z = z_phys_cc(i,j,k);
126 if(use_xlo_sponge_damping){
127 if (x < xlo_sponge_end) {
128 Real xi = (xlo_sponge_end -
x) / (xlo_sponge_end - ProbLoArr[0]);
129 rho_v_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_v(i, j, k) - cell_data(i,j,k,0)*
vbar_sponge[k]);
133 if(use_xhi_sponge_damping){
134 if (x > xhi_sponge_start) {
135 Real xi = (
x - xhi_sponge_start) / (ProbHiArr[0] - xhi_sponge_start);
136 rho_v_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_v(i, j, k) - cell_data(i,j,k,0)*
vbar_sponge[k]);
141 if(use_ylo_sponge_damping){
142 if (y < ylo_sponge_end) {
143 Real xi = (ylo_sponge_end -
y) / (ylo_sponge_end - ProbLoArr[1]);
144 rho_v_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_v(i, j, k) - cell_data(i,j,k,0)*
vbar_sponge[k]);
148 if(use_yhi_sponge_damping){
149 if (y > yhi_sponge_start) {
150 Real xi = (
y - yhi_sponge_start) / (ProbHiArr[1] - yhi_sponge_start);
151 rho_v_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_v(i, j, k) - cell_data(i,j,k,0)*
vbar_sponge[k]);
156 if(use_zlo_sponge_damping){
157 if (z < zlo_sponge_end) {
158 Real xi = (zlo_sponge_end -
z) / (zlo_sponge_end - ProbLoArr[2]);
159 rho_v_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_v(i, j, k) - cell_data(i,j,k,0)*
vbar_sponge[k]);
165 if(use_zhi_sponge_damping){
166 if (z > zhi_sponge_start) {
167 Real xi = (
z - zhi_sponge_start) / (ProbHiArr[2] - zhi_sponge_start);
168 rho_v_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_v(i, j, k) - cell_data(i,j,k,0)*
vbar_sponge[k]);
@ vbar_sponge
Definition: ERF_DataStruct.H:79
@ ubar_sponge
Definition: ERF_DataStruct.H:79
bool use_xlo_sponge_damping
Definition: ERF_SpongeStruct.H:50
amrex::Real xlo_sponge_end
Definition: ERF_SpongeStruct.H:60
amrex::Real zlo_sponge_end
Definition: ERF_SpongeStruct.H:62
bool use_zlo_sponge_damping
Definition: ERF_SpongeStruct.H:54
amrex::Real sponge_strength
Definition: ERF_SpongeStruct.H:57
bool use_ylo_sponge_damping
Definition: ERF_SpongeStruct.H:52
amrex::Real zhi_sponge_start
Definition: ERF_SpongeStruct.H:62
bool use_xhi_sponge_damping
Definition: ERF_SpongeStruct.H:51
bool use_zhi_sponge_damping
Definition: ERF_SpongeStruct.H:55
amrex::Real yhi_sponge_start
Definition: ERF_SpongeStruct.H:61
bool use_yhi_sponge_damping
Definition: ERF_SpongeStruct.H:53
amrex::Real xhi_sponge_start
Definition: ERF_SpongeStruct.H:60
amrex::Real ylo_sponge_end
Definition: ERF_SpongeStruct.H:61