Skip to content

Commit

Permalink
Modify ii/jj index protection for bdy data to ensure we properly inte…
Browse files Browse the repository at this point in the history
…rpolate the ghost cell. (#1387)
  • Loading branch information
AMLattanzi authored Jan 19, 2024
1 parent d95cfb3 commit 0afd4cd
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 4 deletions.
8 changes: 4 additions & 4 deletions Source/Utils/InteriorGhostCells.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -264,15 +264,15 @@ wrfbdy_compute_interior_ghost_rhs (const std::string& init_type,
[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
{
int ii = std::max(i , dom_lo.x);
ii = std::min(ii, dom_lo.x+width-1);
ii = std::min(ii, dom_lo.x+width);
int jj = std::max(j , dom_lo.y);
jj = std::min(jj, dom_hi.y);
arr_xlo(i,j,k) = oma * bdatxlo_n (ii,jj,k,0)
+ alpha * bdatxlo_np1(ii,jj,k,0);
},
[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
{
int ii = std::max(i , dom_hi.x-width+1);
int ii = std::max(i , dom_hi.x-width);
ii = std::min(ii, dom_hi.x);
int jj = std::max(j , dom_lo.y);
jj = std::min(jj, dom_hi.y);
Expand All @@ -286,15 +286,15 @@ wrfbdy_compute_interior_ghost_rhs (const std::string& init_type,
int ii = std::max(i , dom_lo.x);
ii = std::min(ii, dom_hi.x);
int jj = std::max(j , dom_lo.y);
jj = std::min(jj, dom_lo.y+width-1);
jj = std::min(jj, dom_lo.y+width);
arr_ylo(i,j,k) = oma * bdatylo_n (ii,jj,k,0)
+ alpha * bdatylo_np1(ii,jj,k,0);
},
[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
{
int ii = std::max(i , dom_lo.x);
ii = std::min(ii, dom_hi.x);
int jj = std::max(j , dom_hi.y-width+1);
int jj = std::max(j , dom_hi.y-width);
jj = std::min(jj, dom_hi.y);
arr_yhi(i,j,k) = oma * bdatyhi_n (ii,jj,k,0)
+ alpha * bdatyhi_np1(ii,jj,k,0);
Expand Down
88 changes: 88 additions & 0 deletions Source/Utils/Utils.H
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,28 @@ wrfbdy_compute_laplacian_relaxation (const amrex::Real& delta_t,
amrex::Real delta_ym = arr_xlo(i ,j-1,k,n) - d_jm1;
amrex::Real Laplacian = delta_xp + delta_xm + delta_yp + delta_ym - 4.0*delta;
rhs_arr(i,j,k,n) += (F1*delta - F2*Laplacian) * Factor;

/*
if ((std::abs((arr_xlo(i ,j ,k,n)-data_arr(i ,j ,k ,n+icomp))/data_arr(i ,j ,k ,n+icomp)) > 0.5) ||
(std::abs((arr_xlo(i+1,j ,k,n)-data_arr(i+1,j ,k ,n+icomp))/data_arr(i+1,j ,k ,n+icomp)) > 0.5) ||
(std::abs((arr_xlo(i-1,j ,k,n)-data_arr(i-1,j ,k ,n+icomp))/data_arr(i-1,j ,k ,n+icomp)) > 0.5) ||
(std::abs((arr_xlo(i ,j+1,k,n)-data_arr(i ,j+1,k ,n+icomp))/data_arr(i ,j+1,k ,n+icomp)) > 0.5) ||
(std::abs((arr_xlo(i ,j-1,k,n)-data_arr(i ,j-1,k ,n+icomp))/data_arr(i ,j-1,k ,n+icomp)) > 0.5) ) {
amrex::Print() << "XLO error:\n";
amrex::Print() << "RELAX x: " << icomp << ' ' << n << ' ' << amrex::IntVect(i,j,k) << ' '
<< data_arr(i ,j ,k ,n+icomp) << ' ' << arr_xlo(i ,j ,k,n) << "\n";
amrex::Print() << "RELAX xp: " << icomp << ' ' << n << ' ' << amrex::IntVect(i+1,j,k) << ' '
<< data_arr(i+1,j ,k ,n+icomp) << ' ' << arr_xlo(i+1,j ,k,n) << "\n";
amrex::Print() << "RELAX xm: " << icomp << ' ' << n << ' ' << amrex::IntVect(i-1,j,k) << ' '
<< data_arr(i-1,j ,k ,n+icomp) << ' ' << arr_xlo(i-1,j ,k,n) << "\n";
amrex::Print() << "RELAX yp: " << icomp << ' ' << n << ' ' << amrex::IntVect(i,j+1,k) << ' '
<< data_arr(i ,j+1,k ,n+icomp) << ' ' << arr_xlo(i ,j+1,k,n) << "\n";
amrex::Print() << "RELAX ym: " << icomp << ' ' << n << ' ' << amrex::IntVect(i,j-1,k) << ' '
<< data_arr(i ,j-1,k ,n+icomp) << ' ' << arr_xlo(i ,j-1,k,n) << "\n";
amrex::Print() << "\n";
//exit(0);
}
*/
}
},
bx_xhi, num_var, [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) noexcept
Expand All @@ -239,6 +261,28 @@ wrfbdy_compute_laplacian_relaxation (const amrex::Real& delta_t,
amrex::Real delta_ym = arr_xhi(i ,j-1,k,n) - d_jm1;
amrex::Real Laplacian = delta_xp + delta_xm + delta_yp + delta_ym - 4.0*delta;
rhs_arr(i,j,k,n) += (F1*delta - F2*Laplacian) * Factor;

/*
if ((std::abs((arr_xhi(i ,j ,k,n)-data_arr(i ,j ,k ,n+icomp))/data_arr(i ,j ,k ,n+icomp)) > 0.5) ||
(std::abs((arr_xhi(i+1,j ,k,n)-data_arr(i+1,j ,k ,n+icomp))/data_arr(i+1,j ,k ,n+icomp)) > 0.5) ||
(std::abs((arr_xhi(i-1,j ,k,n)-data_arr(i-1,j ,k ,n+icomp))/data_arr(i-1,j ,k ,n+icomp)) > 0.5) ||
(std::abs((arr_xhi(i ,j+1,k,n)-data_arr(i ,j+1,k ,n+icomp))/data_arr(i ,j+1,k ,n+icomp)) > 0.5) ||
(std::abs((arr_xhi(i ,j-1,k,n)-data_arr(i ,j-1,k ,n+icomp))/data_arr(i ,j-1,k ,n+icomp)) > 0.5) ) {
amrex::Print() << "XHI error:\n";
amrex::Print() << "RELAX x: " << icomp << ' ' << n << ' ' << amrex::IntVect(i,j,k) << ' '
<< data_arr(i ,j ,k ,n+icomp) << ' ' << arr_xhi(i ,j ,k,n) << "\n";
amrex::Print() << "RELAX xp: " << icomp << ' ' << n << ' ' << amrex::IntVect(i+1,j,k) << ' '
<< data_arr(i+1,j ,k ,n+icomp) << ' ' << arr_xhi(i+1,j ,k,n) << "\n";
amrex::Print() << "RELAX xm: " << icomp << ' ' << n << ' ' << amrex::IntVect(i-1,j,k) << ' '
<< data_arr(i-1,j ,k ,n+icomp) << ' ' << arr_xhi(i-1,j ,k,n) << "\n";
amrex::Print() << "RELAX yp: " << icomp << ' ' << n << ' ' << amrex::IntVect(i,j+1,k) << ' '
<< data_arr(i ,j+1,k ,n+icomp) << ' ' << arr_xhi(i ,j+1,k,n) << "\n";
amrex::Print() << "RELAX ym: " << icomp << ' ' << n << ' ' << amrex::IntVect(i,j-1,k) << ' '
<< data_arr(i ,j-1,k ,n+icomp) << ' ' << arr_xhi(i ,j-1,k,n) << "\n";
amrex::Print() << "\n";
//exit(0);
}
*/
}
});

Expand All @@ -262,6 +306,28 @@ wrfbdy_compute_laplacian_relaxation (const amrex::Real& delta_t,
amrex::Real delta_ym = arr_ylo(i ,j-1,k,n) - d_jm1;
amrex::Real Laplacian = delta_xp + delta_xm + delta_yp + delta_ym - 4.0*delta;
rhs_arr(i,j,k,n) += (F1*delta - F2*Laplacian) * Factor;

/*
if ((std::abs((arr_ylo(i ,j ,k,n)-data_arr(i ,j ,k ,n+icomp))/data_arr(i ,j ,k ,n+icomp)) > 0.5) ||
(std::abs((arr_ylo(i+1,j ,k,n)-data_arr(i+1,j ,k ,n+icomp))/data_arr(i+1,j ,k ,n+icomp)) > 0.5) ||
(std::abs((arr_ylo(i-1,j ,k,n)-data_arr(i-1,j ,k ,n+icomp))/data_arr(i-1,j ,k ,n+icomp)) > 0.5) ||
(std::abs((arr_ylo(i ,j+1,k,n)-data_arr(i ,j+1,k ,n+icomp))/data_arr(i ,j+1,k ,n+icomp)) > 0.5) ||
(std::abs((arr_ylo(i ,j-1,k,n)-data_arr(i ,j-1,k ,n+icomp))/data_arr(i ,j-1,k ,n+icomp)) > 0.5) ) {
amrex::Print() << "YLO error:\n";
amrex::Print() << "RELAX x: " << icomp << ' ' << n << ' ' << amrex::IntVect(i,j,k) << ' '
<< data_arr(i ,j ,k ,n+icomp) << ' ' << arr_ylo(i ,j ,k,n) << "\n";
amrex::Print() << "RELAX xp: " << icomp << ' ' << n << ' ' << amrex::IntVect(i+1,j,k) << ' '
<< data_arr(i+1,j ,k ,n+icomp) << ' ' << arr_ylo(i+1,j ,k,n) << "\n";
amrex::Print() << "RELAX xm: " << icomp << ' ' << n << ' ' << amrex::IntVect(i-1,j,k) << ' '
<< data_arr(i-1,j ,k ,n+icomp) << ' ' << arr_ylo(i-1,j ,k,n) << "\n";
amrex::Print() << "RELAX yp: " << icomp << ' ' << n << ' ' << amrex::IntVect(i,j+1,k) << ' '
<< data_arr(i ,j+1,k ,n+icomp) << ' ' << arr_ylo(i ,j+1,k,n) << "\n";
amrex::Print() << "RELAX ym: " << icomp << ' ' << n << ' ' << amrex::IntVect(i,j-1,k) << ' '
<< data_arr(i ,j-1,k ,n+icomp) << ' ' << arr_ylo(i ,j-1,k,n) << "\n";
amrex::Print() << "\n";
//exit(0);
}
*/
}
},
bx_yhi, num_var, [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) noexcept
Expand All @@ -284,6 +350,28 @@ wrfbdy_compute_laplacian_relaxation (const amrex::Real& delta_t,
amrex::Real delta_ym = arr_yhi(i ,j-1,k,n) - d_jm1;
amrex::Real Laplacian = delta_xp + delta_xm + delta_yp + delta_ym - 4.0*delta;
rhs_arr(i,j,k,n) += (F1*delta - F2*Laplacian) * Factor;

/*
if ((std::abs((arr_yhi(i ,j ,k,n)-data_arr(i ,j ,k ,n+icomp))/data_arr(i ,j ,k ,n+icomp)) > 0.5) ||
(std::abs((arr_yhi(i+1,j ,k,n)-data_arr(i+1,j ,k ,n+icomp))/data_arr(i+1,j ,k ,n+icomp)) > 0.5) ||
(std::abs((arr_yhi(i-1,j ,k,n)-data_arr(i-1,j ,k ,n+icomp))/data_arr(i-1,j ,k ,n+icomp)) > 0.5) ||
(std::abs((arr_yhi(i ,j+1,k,n)-data_arr(i ,j+1,k ,n+icomp))/data_arr(i ,j+1,k ,n+icomp)) > 0.5) ||
(std::abs((arr_yhi(i ,j-1,k,n)-data_arr(i ,j-1,k ,n+icomp))/data_arr(i ,j-1,k ,n+icomp)) > 0.5) ) {
amrex::Print() << "YHI error:\n";
amrex::Print() << "RELAX x: " << icomp << ' ' << n << ' ' << amrex::IntVect(i,j,k) << ' '
<< data_arr(i ,j ,k ,n+icomp) << ' ' << arr_yhi(i ,j ,k,n) << "\n";
amrex::Print() << "RELAX xp: " << icomp << ' ' << n << ' ' << amrex::IntVect(i+1,j,k) << ' '
<< data_arr(i+1,j ,k ,n+icomp) << ' ' << arr_yhi(i+1,j ,k,n) << "\n";
amrex::Print() << "RELAX xm: " << icomp << ' ' << n << ' ' << amrex::IntVect(i-1,j,k) << ' '
<< data_arr(i-1,j ,k ,n+icomp) << ' ' << arr_yhi(i-1,j ,k,n) << "\n";
amrex::Print() << "RELAX yp: " << icomp << ' ' << n << ' ' << amrex::IntVect(i,j+1,k) << ' '
<< data_arr(i ,j+1,k ,n+icomp) << ' ' << arr_yhi(i ,j+1,k,n) << "\n";
amrex::Print() << "RELAX ym: " << icomp << ' ' << n << ' ' << amrex::IntVect(i,j-1,k) << ' '
<< data_arr(i ,j-1,k ,n+icomp) << ' ' << arr_yhi(i ,j-1,k,n) << "\n";
amrex::Print() << "\n";
//exit(0);
}
*/
}
});
}
Expand Down

0 comments on commit 0afd4cd

Please sign in to comment.