Skip to content

Commit a7776f1

Browse files
authored
EB anisotropic - set_eb_data changes (#4577)
## Summary This PR makes the necessary changes for the volumetric centroid for anisotropic meshes. The derivation is given in the pdf in the link below. See section 2.3 - equations 36, 40, 44, 45 and 46. For the sake of completion, the derivation of the volume of the EB cell and the EB face centroid is given in section 2.1 and 2.2. [EB_anisotropic_3D.pdf](https://github.com/user-attachments/files/21354300/EB_anisotropic_3D.pdf)
1 parent 7c99975 commit a7776f1

File tree

1 file changed

+28
-18
lines changed

1 file changed

+28
-18
lines changed

Src/EB/AMReX_EB2_3D_C.cpp

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -129,21 +129,31 @@ void set_eb_data (const int i, const int j, const int k,
129129
bcent(i,j,k,1) = (By + ny*vfrac(i,j,k)) * apnorminv * dx[0] * dx[2];
130130
bcent(i,j,k,2) = (Bz + nz*vfrac(i,j,k)) * apnorminv * dx[0] * dx[1];
131131

132-
Real b1 = 0.5_rt*(axp-axm) + 0.5_rt*(ayp*fcy(i,j+1,k,0) + aym*fcy(i,j,k,0)) + 0.5_rt*(azp*fcz(i,j,k+1,0) + azm*fcz(i,j,k,0));
133-
Real b2 = 0.5_rt*(axp*fcx(i+1,j,k,0) + axm*fcx(i,j,k,0)) + 0.5_rt*(ayp-aym) + 0.5_rt*(azp*fcz(i,j,k+1,1) + azm*fcz(i,j,k,1));
134-
Real b3 = 0.5_rt*(axp*fcx(i+1,j,k,1) + axm*fcx(i,j,k,1)) + 0.5_rt*(ayp*fcy(i,j+1,k,1) + aym*fcy(i,j,k,1)) + 0.5_rt*(azp-azm);
135-
Real b4 = -nx*0.25_rt*(axp-axm) - ny*(m2y(i,j+1,k,0) - m2y(i,j,k,0)) - nz*(m2z(i,j,k+1,0) - m2z(i,j,k,0));
136-
Real b5 = -nx*(m2x(i+1,j,k,0) - m2x(i,j,k,0)) - ny*0.25_rt*(ayp-aym) - nz*(m2z(i,j,k+1,1) - m2z(i,j,k,1));
137-
Real b6 = -nx*(m2x(i+1,j,k,1) - m2x(i,j,k,1)) - ny*(m2y(i,j+1,k,1) - m2y(i,j,k,1)) - nz*0.25_rt*(azp-azm);
138-
Real b7 = -nx*0.5_rt*(axp*fcx(i+1,j,k,0) + axm*fcx(i,j,k,0))
139-
-ny*0.5_rt*(ayp*fcy(i,j+1,k,0) + aym*fcy(i,j,k,0))
140-
-nz*(m2z(i,j,k+1,2) - m2z(i,j,k,2));
141-
Real b8 = -nx*0.5_rt*(axp*fcx(i+1,j,k,1) + axm*fcx(i,j,k,1))
142-
-ny*(m2y(i,j+1,k,2) - m2y(i,j,k,2))
143-
-nz*0.5_rt*(azp*fcz(i,j,k+1,0) + azm*fcz(i,j,k,0));
144-
Real b9 = -nx*(m2x(i+1,j,k,2) - m2x(i,j,k,2))
145-
-ny*0.5_rt*(ayp*fcy(i,j+1,k,1) + aym*fcy(i,j,k,1))
146-
-nz*0.5_rt*(azp*fcz(i,j,k+1,1) + azm*fcz(i,j,k,1));
132+
Real dx1 = dx[0];
133+
Real dx2 = dx1*dx1;
134+
Real dx3 = dx2*dx1;
135+
Real dy1 = dx[1];
136+
Real dy2 = dy1*dy1;
137+
Real dy3 = dy2*dy1;
138+
Real dz1 = dx[2];
139+
Real dz2 = dz1*dz1;
140+
Real dz3 = dz2*dz1;
141+
142+
Real b1 = 0.5_rt*(axp-axm)*dx2*dy1*dz1 + 0.5_rt*(ayp*fcy(i,j+1,k,0) + aym*fcy(i,j,k,0))*dx1*dy2*dz1 + 0.5_rt*(azp*fcz(i,j,k+1,0) + azm*fcz(i,j,k,0))*dx1*dy1*dz2;
143+
Real b2 = 0.5_rt*(axp*fcx(i+1,j,k,0) + axm*fcx(i,j,k,0))*dx2*dy1*dz1 + 0.5_rt*(ayp-aym)*dx1*dy2*dz1 + 0.5_rt*(azp*fcz(i,j,k+1,1) + azm*fcz(i,j,k,1))*dx1*dy1*dz2;
144+
Real b3 = 0.5_rt*(axp*fcx(i+1,j,k,1) + axm*fcx(i,j,k,1))*dx2*dy1*dz1 + 0.5_rt*(ayp*fcy(i,j+1,k,1) + aym*fcy(i,j,k,1))*dx1*dy2*dz1 + 0.5_rt*(azp-azm)*dx1*dy1*dz2;
145+
Real b4 = -nx*0.25_rt*(axp-axm)*dx2*dy1*dz1 - ny*(m2y(i,j+1,k,0) - m2y(i,j,k,0))*dx3*dz1 - nz*(m2z(i,j,k+1,0) - m2z(i,j,k,0))*dx3*dy1;
146+
Real b5 = -nx*(m2x(i+1,j,k,0) - m2x(i,j,k,0))*dy3*dz1 - ny*0.25_rt*(ayp-aym)*dx1*dy2*dz1 - nz*(m2z(i,j,k+1,1) - m2z(i,j,k,1))*dx1*dy3;
147+
Real b6 = -nx*(m2x(i+1,j,k,1) - m2x(i,j,k,1))*dy1*dz3 - ny*(m2y(i,j+1,k,1) - m2y(i,j,k,1))*dx1*dz3 - nz*0.25_rt*(azp-azm)*dx1*dy1*dz2;
148+
Real b7 = -nx*0.5_rt*(axp*fcx(i+1,j,k,0) + axm*fcx(i,j,k,0))*dx2*dy1*dz1
149+
-ny*0.5_rt*(ayp*fcy(i,j+1,k,0) + aym*fcy(i,j,k,0))*dx1*dy2*dz1
150+
-nz*(m2z(i,j,k+1,2) - m2z(i,j,k,2))*dx2*dy2;
151+
Real b8 = -nx*0.5_rt*(axp*fcx(i+1,j,k,1) + axm*fcx(i,j,k,1))*dx2*dy1*dz1
152+
-ny*(m2y(i,j+1,k,2) - m2y(i,j,k,2))*dx2*dz2
153+
-nz*0.5_rt*(azp*fcz(i,j,k+1,0) + azm*fcz(i,j,k,0))*dx1*dy1*dz2;
154+
Real b9 = -nx*(m2x(i+1,j,k,2) - m2x(i,j,k,2))*dy2*dz2
155+
-ny*0.5_rt*(ayp*fcy(i,j+1,k,1) + aym*fcy(i,j,k,1))*dx1*dy2*dz1
156+
-nz*0.5_rt*(azp*fcz(i,j,k+1,1) + azm*fcz(i,j,k,1))*dx1*dy1*dz2;
147157

148158
Real ny2 = ny *ny;
149159
Real ny3 = ny2*ny;
@@ -186,9 +196,9 @@ void set_eb_data (const int i, const int j, const int k,
186196
Real den = 1._rt / (10._rt*(5._rt + 4._rt*nz2 - 4._rt*nz4 + 2._rt*ny4*(-2._rt + nz2) +
187197
2._rt*ny2*(2._rt - 3._rt*nz2 + nz4)) * (vfrac(i,j,k)+1.e-30_rt) );
188198

189-
vcent(i,j,k,0) = Sx * den;
190-
vcent(i,j,k,1) = Sy * den;
191-
vcent(i,j,k,2) = Sz * den;
199+
vcent(i,j,k,0) = Sx * den / (dx2*dy1*dz1);
200+
vcent(i,j,k,1) = Sy * den / (dx1*dy2*dz1);
201+
vcent(i,j,k,2) = Sz * den / (dx1*dy1*dz2);
192202
}
193203

194204
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE

0 commit comments

Comments
 (0)