Apply sponge zone damping to momentum RHS using target states read from a file.
36 auto dx = geom.CellSizeArray();
37 auto ProbHiArr = geom.ProbHiArray();
38 auto ProbLoArr = geom.ProbLoArray();
56 const Box& domain = geom.Domain();
57 int domlo_x = domain.smallEnd(0);
58 int domhi_x = domain.bigEnd(0) + 1;
59 int domlo_y = domain.smallEnd(1);
60 int domhi_y = domain.bigEnd(1) + 1;
72 ParallelFor(tbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k)
74 int ii = amrex::min(amrex::max(i, domlo_x), domhi_x);
75 int jj = amrex::min(amrex::max(j, domlo_y), domhi_y);
77 Real x = ProbLoArr[0] + ii *
dx[0];
79 Real z = z_phys_cc(i,j,k);
82 if(use_xlo_sponge_damping){
83 if (x < xlo_sponge_end) {
84 Real xi = (xlo_sponge_end -
x) / (xlo_sponge_end - ProbLoArr[0]);
85 rho_u_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_u(i, j, k) - cell_data(i,j,k,0)*
ubar_sponge[k]);
89 if(use_xhi_sponge_damping){
90 if (x > xhi_sponge_start) {
91 Real xi = (
x - xhi_sponge_start) / (ProbHiArr[0] - xhi_sponge_start);
92 rho_u_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_u(i, j, k) - cell_data(i,j,k,0)*
ubar_sponge[k]);
97 if(use_ylo_sponge_damping){
98 if (y < ylo_sponge_end) {
99 Real xi = (ylo_sponge_end -
y) / (ylo_sponge_end - ProbLoArr[1]);
100 rho_u_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_u(i, j, k) - cell_data(i,j,k,0)*
ubar_sponge[k]);
104 if(use_yhi_sponge_damping){
105 if (y > yhi_sponge_start) {
106 Real xi = (
y - yhi_sponge_start) / (ProbHiArr[1] - yhi_sponge_start);
107 rho_u_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_u(i, j, k) - cell_data(i,j,k,0)*
ubar_sponge[k]);
112 if(use_zlo_sponge_damping){
113 if (z < zlo_sponge_end) {
114 Real xi = (zlo_sponge_end -
z) / (zlo_sponge_end - ProbLoArr[2]);
115 rho_u_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_u(i, j, k) - cell_data(i,j,k,0)*
ubar_sponge[k]);
121 if(use_zhi_sponge_damping){
122 if (z > zhi_sponge_start) {
123 Real xi = (
z - zhi_sponge_start) / (ProbHiArr[2] - zhi_sponge_start);
124 rho_u_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_u(i, j, k) - cell_data(i,j,k,0)*
ubar_sponge[k]);
130 ParallelFor(tby, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k)
132 int ii = amrex::min(amrex::max(i, domlo_x), domhi_x);
133 int jj = amrex::min(amrex::max(j, domlo_y), domhi_y);
136 Real y = ProbLoArr[1] + jj *
dx[1];
137 Real z = z_phys_cc(i,j,k);
140 if(use_xlo_sponge_damping){
141 if (x < xlo_sponge_end) {
142 Real xi = (xlo_sponge_end -
x) / (xlo_sponge_end - ProbLoArr[0]);
143 rho_v_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_v(i, j, k) - cell_data(i,j,k,0)*
vbar_sponge[k]);
147 if(use_xhi_sponge_damping){
148 if (x > xhi_sponge_start) {
149 Real xi = (
x - xhi_sponge_start) / (ProbHiArr[0] - xhi_sponge_start);
150 rho_v_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_v(i, j, k) - cell_data(i,j,k,0)*
vbar_sponge[k]);
155 if(use_ylo_sponge_damping){
156 if (y < ylo_sponge_end) {
157 Real xi = (ylo_sponge_end -
y) / (ylo_sponge_end - ProbLoArr[1]);
158 rho_v_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_v(i, j, k) - cell_data(i,j,k,0)*
vbar_sponge[k]);
162 if(use_yhi_sponge_damping){
163 if (y > yhi_sponge_start) {
164 Real xi = (
y - yhi_sponge_start) / (ProbHiArr[1] - yhi_sponge_start);
165 rho_v_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_v(i, j, k) - cell_data(i,j,k,0)*
vbar_sponge[k]);
170 if(use_zlo_sponge_damping){
171 if (z < zlo_sponge_end) {
172 Real xi = (zlo_sponge_end -
z) / (zlo_sponge_end - ProbLoArr[2]);
173 rho_v_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_v(i, j, k) - cell_data(i,j,k,0)*
vbar_sponge[k]);
179 if(use_zhi_sponge_damping){
180 if (z > zhi_sponge_start) {
181 Real xi = (
z - zhi_sponge_start) / (ProbHiArr[2] - zhi_sponge_start);
182 rho_v_rhs(i, j, k) -= sponge_strength * xi * xi * (rho_v(i, j, k) - cell_data(i,j,k,0)*
vbar_sponge[k]);
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
@ vbar_sponge
Definition: ERF_DataStruct.H:161
@ ubar_sponge
Definition: ERF_DataStruct.H:161
const Real dx
Definition: ERF_InitCustomPert_ABL.H:44
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
amrex::Real Real
Definition: ERF_ShocInterface.H:19
amrex::Real zlo_sponge_end
Physical end location of the low-z sponge layer.
Definition: ERF_SpongeStruct.H:104
amrex::Real xlo_sponge_end
Physical end location of the low-x sponge layer.
Definition: ERF_SpongeStruct.H:102
bool use_zlo_sponge_damping
Whether sponge damping is applied at the low-z boundary.
Definition: ERF_SpongeStruct.H:94
amrex::Real ylo_sponge_end
Physical end location of the low-y sponge layer.
Definition: ERF_SpongeStruct.H:103
amrex::Real sponge_strength
Sponge damping strength.
Definition: ERF_SpongeStruct.H:97
amrex::Real yhi_sponge_start
Physical start location of the high-y sponge layer.
Definition: ERF_SpongeStruct.H:103
bool use_zhi_sponge_damping
Whether sponge damping is applied at the high-z boundary.
Definition: ERF_SpongeStruct.H:95
bool use_xlo_sponge_damping
Whether sponge damping is applied at the low-x boundary.
Definition: ERF_SpongeStruct.H:90
amrex::Real xhi_sponge_start
Physical start location of the high-x sponge layer.
Definition: ERF_SpongeStruct.H:102
bool use_xhi_sponge_damping
Whether sponge damping is applied at the high-x boundary.
Definition: ERF_SpongeStruct.H:91
bool use_yhi_sponge_damping
Whether sponge damping is applied at the high-y boundary.
Definition: ERF_SpongeStruct.H:93
bool use_ylo_sponge_damping
Whether sponge damping is applied at the low-y boundary.
Definition: ERF_SpongeStruct.H:92
amrex::Real zhi_sponge_start
Physical start location of the high-z sponge layer.
Definition: ERF_SpongeStruct.H:104