Skip to content

Commit 3525b4a

Browse files
fix for ref_ratio=1 (#3786)
The current routines compute the slope even if ref_ratio = 1. In this PR we test on ref_ratio before trying to compute slopes and if ref_ratio is equal to 1, we bypass the slope computation. --------- Co-authored-by: Weiqun Zhang <[email protected]>
1 parent cf712eb commit 3525b4a

File tree

1 file changed

+18
-21
lines changed

1 file changed

+18
-21
lines changed

Src/AmrCore/AMReX_InterpFaceReg_3D_C.H

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@ void interp_face_reg (int i, int j, int k, IntVect const& rr, Array4<Real> const
1212
int jc = amrex::coarsen(j,rr[1]);
1313
int kc = amrex::coarsen(k,rr[2]);
1414
if (idim == 0) {
15-
if (jc == domface.smallEnd(1) || jc == domface.bigEnd(1)) {
16-
for (int n = 0; n < ncomp; ++n) {
17-
fine(i,j,k,n+scomp) = crse(ic,jc,kc,n);
18-
}
19-
} else {
15+
for (int n = 0; n < ncomp; ++n) {
16+
fine(i,j,k,n+scomp) = crse(ic,jc,kc,n);
17+
}
18+
if (jc != domface.smallEnd(1) && jc != domface.bigEnd(1) && rr[1] > 1) {
2019
Real sfy = Real(1.0);
2120
for (int n = 0; n < ncomp; ++n) {
2221
Real dc = Real(0.5) * (crse(ic,jc+1,kc,n) - crse(ic,jc-1,kc,n));
@@ -32,11 +31,11 @@ void interp_face_reg (int i, int j, int k, IntVect const& rr, Array4<Real> const
3231
}
3332
Real yoff = (static_cast<Real>(j - jc*rr[1]) + Real(0.5)) / Real(rr[1]) - Real(0.5);
3433
for (int n = 0; n < ncomp; ++n) {
35-
fine(i,j,k,n+scomp) = crse(ic,jc,kc,n) + yoff * slope(i,j,k,n) * sfy;
34+
fine(i,j,k,n+scomp) += yoff * slope(i,j,k,n) * sfy;
3635
}
3736
}
3837

39-
if (kc != domface.smallEnd(2) && kc != domface.bigEnd(2)) {
38+
if (kc != domface.smallEnd(2) && kc != domface.bigEnd(2) && rr[2] > 1) {
4039
Real sfz = Real(1.0);
4140
for (int n = 0; n < ncomp; ++n) {
4241
Real dc = Real(0.5) * (crse(ic,jc,kc+1,n) - crse(ic,jc,kc-1,n));
@@ -56,11 +55,10 @@ void interp_face_reg (int i, int j, int k, IntVect const& rr, Array4<Real> const
5655
}
5756
}
5857
} else if (idim == 1) {
59-
if (ic == domface.smallEnd(0) || ic == domface.bigEnd(0)) {
60-
for (int n = 0; n < ncomp; ++n) {
61-
fine(i,j,k,n+scomp) = crse(ic,jc,kc,n);
62-
}
63-
} else {
58+
for (int n = 0; n < ncomp; ++n) {
59+
fine(i,j,k,n+scomp) = crse(ic,jc,kc,n);
60+
}
61+
if (ic != domface.smallEnd(0) && ic != domface.bigEnd(0) && rr[0] > 1) {
6462
Real sfx = Real(1.0);
6563
for (int n = 0; n < ncomp; ++n) {
6664
Real dc = Real(0.5) * (crse(ic+1,jc,kc,n) - crse(ic-1,jc,kc,n));
@@ -76,11 +74,11 @@ void interp_face_reg (int i, int j, int k, IntVect const& rr, Array4<Real> const
7674
}
7775
Real xoff = (static_cast<Real>(i - ic*rr[0]) + Real(0.5)) / Real(rr[0]) - Real(0.5);
7876
for (int n = 0; n < ncomp; ++n) {
79-
fine(i,j,k,n+scomp) = crse(ic,jc,kc,n) + xoff * slope(i,j,k,n) * sfx;
77+
fine(i,j,k,n+scomp) += xoff * slope(i,j,k,n) * sfx;
8078
}
8179
}
8280

83-
if (kc != domface.smallEnd(2) && kc != domface.bigEnd(2)) {
81+
if (kc != domface.smallEnd(2) && kc != domface.bigEnd(2) && rr[2] > 1) {
8482
Real sfz = Real(1.0);
8583
for (int n = 0; n < ncomp; ++n) {
8684
Real dc = Real(0.5) * (crse(ic,jc,kc+1,n) - crse(ic,jc,kc-1,n));
@@ -100,11 +98,10 @@ void interp_face_reg (int i, int j, int k, IntVect const& rr, Array4<Real> const
10098
}
10199
}
102100
} else {
103-
if (ic == domface.smallEnd(0) || ic == domface.bigEnd(0)) {
104-
for (int n = 0; n < ncomp; ++n) {
105-
fine(i,j,k,n+scomp) = crse(ic,jc,kc,n);
106-
}
107-
} else {
101+
for (int n = 0; n < ncomp; ++n) {
102+
fine(i,j,k,n+scomp) = crse(ic,jc,kc,n);
103+
}
104+
if (ic != domface.smallEnd(0) && ic != domface.bigEnd(0) && rr[0] > 1) {
108105
Real sfx = Real(1.0);
109106
for (int n = 0; n < ncomp; ++n) {
110107
Real dc = Real(0.5) * (crse(ic+1,jc,kc,n) - crse(ic-1,jc,kc,n));
@@ -120,11 +117,11 @@ void interp_face_reg (int i, int j, int k, IntVect const& rr, Array4<Real> const
120117
}
121118
Real xoff = (static_cast<Real>(i - ic*rr[0]) + Real(0.5)) / Real(rr[0]) - Real(0.5);
122119
for (int n = 0; n < ncomp; ++n) {
123-
fine(i,j,k,n+scomp) = crse(ic,jc,kc,n) + xoff * slope(i,j,k,n) * sfx;
120+
fine(i,j,k,n+scomp) += xoff * slope(i,j,k,n) * sfx;
124121
}
125122
}
126123

127-
if (jc != domface.smallEnd(1) && jc != domface.bigEnd(1)) {
124+
if (jc != domface.smallEnd(1) && jc != domface.bigEnd(1) && rr[1] > 1) {
128125
Real sfy = Real(1.0);
129126
for (int n = 0; n < ncomp; ++n) {
130127
Real dc = Real(0.5) * (crse(ic,jc+1,kc,n) - crse(ic,jc-1,kc,n));

0 commit comments

Comments
 (0)