Block-Structured AMR Software Framework
 
Loading...
Searching...
No Matches
AMReX_EB2_3D_C.H
Go to the documentation of this file.
1#ifndef AMREX_EB2_3D_C_H_
2#define AMREX_EB2_3D_C_H_
3#include <AMReX_Config.H>
4
5namespace amrex::EB2 {
6
8void
9amrex_eb2_build_types (Box const& tbx, Box const& bxg2,
10 Array4<Real const> const& s,
11 Array4<EBCellFlag> const& cell,
12 Array4<Type_t> const& fx,
13 Array4<Type_t> const& fy,
14 Array4<Type_t> const& fz,
15 Array4<Type_t> const& ex,
16 Array4<Type_t> const& ey,
17 Array4<Type_t> const& ez)
18{
19 auto lo = amrex::max_lbound(tbx, bxg2);
20 auto hi = amrex::min_ubound(tbx, bxg2);
21 amrex::Loop(lo, hi,
22 [=] (int i, int j, int k) noexcept
23 {
24 if ( s(i,j ,k ) < 0.0_rt && s(i+1,j ,k ) < 0.0_rt
25 && s(i,j+1,k ) < 0.0_rt && s(i+1,j+1,k ) < 0.0_rt
26 && s(i,j ,k+1) < 0.0_rt && s(i+1,j ,k+1) < 0.0_rt
27 && s(i,j+1,k+1) < 0.0_rt && s(i+1,j+1,k+1) < 0.0_rt)
28 {
29 cell(i,j,k).setRegular();
30 }
31 else if (s(i,j ,k ) >= 0.0_rt && s(i+1,j ,k ) >= 0.0_rt
32 && s(i,j+1,k ) >= 0.0_rt && s(i+1,j+1,k ) >= 0.0_rt
33 && s(i,j ,k+1) >= 0.0_rt && s(i+1,j ,k+1) >= 0.0_rt
34 && s(i,j+1,k+1) >= 0.0_rt && s(i+1,j+1,k+1) >= 0.0_rt)
35 {
36 cell(i,j,k).setCovered();
37 }
38 else
39 {
40 cell(i,j,k).setSingleValued();
41 }
42 });
43
44 // x-face
46 lo = amrex::max_lbound(tbx, b);
47 hi = amrex::min_ubound(tbx, b);
48 amrex::Loop(lo, hi,
49 [=] (int i, int j, int k) noexcept
50 {
51 if ( s(i,j,k ) < 0.0_rt && s(i,j+1,k ) < 0.0_rt
52 && s(i,j,k+1) < 0.0_rt && s(i,j+1,k+1) < 0.0_rt )
53 {
54 fx(i,j,k) = Type::regular;
55 }
56 else if (s(i,j,k ) >= 0.0_rt && s(i,j+1,k ) >= 0.0_rt
57 && s(i,j,k+1) >= 0.0_rt && s(i,j+1,k+1) >= 0.0_rt )
58 {
59 fx(i,j,k) = Type::covered;
60 }
61 else
62 {
63 fx(i,j,k) = Type::irregular;
64 }
65 });
66
67 // y-face
68 b = amrex::surroundingNodes(bxg2,1);
69 lo = amrex::max_lbound(tbx, b);
70 hi = amrex::min_ubound(tbx, b);
71 amrex::Loop(lo, hi,
72 [=] (int i, int j, int k) noexcept
73 {
74 if ( s(i,j,k ) < 0.0_rt && s(i+1,j,k ) < 0.0_rt
75 && s(i,j,k+1) < 0.0_rt && s(i+1,j,k+1) < 0.0_rt )
76 {
77 fy(i,j,k) = Type::regular;
78 }
79 else if (s(i,j,k ) >= 0.0_rt && s(i+1,j,k ) >= 0.0_rt
80 && s(i,j,k+1) >= 0.0_rt && s(i+1,j,k+1) >= 0.0_rt )
81 {
82 fy(i,j,k) = Type::covered;
83 }
84 else
85 {
86 fy(i,j,k) = Type::irregular;
87 }
88 });
89
90 // z-face
91 b = amrex::surroundingNodes(bxg2,2);
92 lo = amrex::max_lbound(tbx, b);
93 hi = amrex::min_ubound(tbx, b);
94 amrex::Loop(lo, hi,
95 [=] (int i, int j, int k) noexcept
96 {
97 if ( s(i,j ,k) < 0.0_rt && s(i+1,j ,k) < 0.0_rt
98 && s(i,j+1,k) < 0.0_rt && s(i+1,j+1,k) < 0.0_rt)
99 {
100 fz(i,j,k) = Type::regular;
101 }
102 else if (s(i,j ,k) >= 0.0_rt && s(i+1,j ,k) >= 0.0_rt
103 && s(i,j+1,k) >= 0.0_rt && s(i+1,j+1,k) >= 0.0_rt)
104 {
105 fz(i,j,k) = Type::covered;
106 }
107 else
108 {
109 fz(i,j,k) = Type::irregular;
110 }
111 });
112
113 // x-edge
114 b = amrex::convert(bxg2,IntVect(0,1,1));
115 lo = amrex::max_lbound(tbx, b);
116 hi = amrex::min_ubound(tbx, b);
117 amrex::Loop(lo, hi,
118 [=] (int i, int j, int k) noexcept
119 {
120 if (s(i,j,k) < 0.0_rt && s(i+1,j,k) < 0.0_rt) {
121 ex(i,j,k) = Type::regular;
122 } else if (s(i,j,k) >= 0.0_rt && s(i+1,j,k) >= 0.0_rt) {
123 ex(i,j,k) = Type::covered;
124 } else {
125 ex(i,j,k) = Type::irregular;
126 }
127 });
128
129 // y-edge
130 b = amrex::convert(bxg2,IntVect(1,0,1));
131 lo = amrex::max_lbound(tbx, b);
132 hi = amrex::min_ubound(tbx, b);
133 amrex::Loop(lo, hi,
134 [=] (int i, int j, int k) noexcept
135 {
136 if (s(i,j,k) < 0.0_rt && s(i,j+1,k) < 0.0_rt) {
137 ey(i,j,k) = Type::regular;
138 } else if (s(i,j,k) >= 0.0_rt && s(i,j+1,k) >= 0.0_rt) {
139 ey(i,j,k) = Type::covered;
140 } else {
141 ey(i,j,k) = Type::irregular;
142 }
143 });
144
145 // z-edge
146 b = amrex::convert(bxg2,IntVect(1,1,0));
147 lo = amrex::max_lbound(tbx, b);
148 hi = amrex::min_ubound(tbx, b);
149 amrex::Loop(lo, hi,
150 [=] (int i, int j, int k) noexcept
151 {
152 if (s(i,j,k) < 0.0_rt && s(i,j,k+1) < 0.0_rt) {
153 ez(i,j,k) = Type::regular;
154 } else if (s(i,j,k) >= 0.0_rt && s(i,j,k+1) >= 0.0_rt) {
155 ez(i,j,k) = Type::covered;
156 } else {
157 ez(i,j,k) = Type::irregular;
158 }
159 });
160}
161
162namespace detail {
164 int num_cuts (Real a, Real b) noexcept {
165 return (a >= 0.0_rt && b < 0.0_rt) || (b >= 0.0_rt && a < 0.0_rt);
166 }
167}
168
170int check_mvmc (int i, int j, int k, Array4<Real const> const& fine)
171{
172 using detail::num_cuts;
173
174 int ierr = 0;
175
176 i *= 2;
177 j *= 2;
178 k *= 2;
179
180 // x-edges
181 int nx00 = num_cuts(fine(i,j,k),fine(i+1,j,k)) + num_cuts(fine(i+1,j,k),fine(i+2,j,k));
182 int nx10 = num_cuts(fine(i,j+2,k),fine(i+1,j+2,k)) + num_cuts(fine(i+1,j+2,k),fine(i+2,j+2,k));
183 int nx01 = num_cuts(fine(i,j,k+2),fine(i+1,j,k+2)) + num_cuts(fine(i+1,j,k+2),fine(i+2,j,k+2));
184 int nx11 = num_cuts(fine(i,j+2,k+2),fine(i+1,j+2,k+2)) + num_cuts(fine(i+1,j+2,k+2),fine(i+2,j+2,k+2));
185
186 // y-edges
187 int ny00 = num_cuts(fine(i,j,k),fine(i,j+1,k)) + num_cuts(fine(i,j+1,k),fine(i,j+2,k));
188 int ny10 = num_cuts(fine(i+2,j,k),fine(i+2,j+1,k)) + num_cuts(fine(i+2,j+1,k),fine(i+2,j+2,k));
189 int ny01 = num_cuts(fine(i,j,k+2),fine(i,j+1,k+2)) + num_cuts(fine(i,j+1,k+2),fine(i,j+2,k+2));
190 int ny11 = num_cuts(fine(i+2,j,k+2),fine(i+2,j+1,k+2)) + num_cuts(fine(i+2,j+1,k+2),fine(i+2,j+2,k+2));
191
192 // z-edges
193 int nz00 = num_cuts(fine(i,j,k),fine(i,j,k+1)) + num_cuts(fine(i,j,k+1),fine(i,j,k+2));
194 int nz10 = num_cuts(fine(i+2,j,k),fine(i+2,j,k+1)) + num_cuts(fine(i+2,j,k+1),fine(i+2,j,k+2));
195 int nz01 = num_cuts(fine(i,j+2,k),fine(i,j+2,k+1)) + num_cuts(fine(i,j+2,k+1),fine(i,j+2,k+2));
196 int nz11 = num_cuts(fine(i+2,j+2,k),fine(i+2,j+2,k+1)) + num_cuts(fine(i+2,j+2,k+1),fine(i+2,j+2,k+2));
197
198 // x-faces
199 int nxm = -1;
200 int n = ny00 + ny01 + nz00 + nz01;
201 if (n == 0) {
202 nxm = 0;
203 } else if (n == 2) {
204 nxm = 1;
205 } else {
206 ierr = 1;
207 }
208
209 int nxp = -1;
210 n = ny10 + ny11 + nz10 + nz11;
211 if (n == 0) {
212 nxp = 0;
213 } else if (n == 2) {
214 nxp = 1;
215 } else {
216 ierr = 1;
217 }
218
219 // y-faces
220 int nym = -1;
221 n = nx00 + nx01 + nz00 + nz10;
222 if (n == 0) {
223 nym = 0;
224 } else if (n == 2) {
225 nym = 1;
226 } else {
227 ierr = 1;
228 }
229
230 int nyp = -1;
231 n = nx10 + nx11 + nz01 + nz11;
232 if (n == 0) {
233 nyp = 0;
234 } else if (n == 2) {
235 nyp = 1;
236 } else {
237 ierr = 1;
238 }
239
240 // z-faces
241 int nzm = -1;
242 n = nx00 + nx10 + ny00 + ny10;
243 if (n == 0) {
244 nzm = 0;
245 } else if (n == 2) {
246 nzm = 1;
247 } else {
248 ierr = 1;
249 }
250
251 int nzp = -1;
252 n = nx01 + nx11 + ny01 + ny11;
253 if (n == 0) {
254 nzp = 0;
255 } else if (n == 2) {
256 nzp = 1;
257 } else {
258 ierr = 1;
259 }
260
261 if (nxm == 1 && nym == 1 && nzm == 1 && nxp == 1 && nyp == 1 && nzp == 1) {
262 n = (fine(i ,j ,k ) < 0.0_rt) + (fine(i+2,j ,k ) < 0.0_rt) +
263 (fine(i ,j+2,k ) < 0.0_rt) + (fine(i+2,j+2,k ) < 0.0_rt) +
264 (fine(i ,j ,k+2) < 0.0_rt) + (fine(i+2,j ,k+2) < 0.0_rt) +
265 (fine(i ,j+2,k+2) < 0.0_rt) + (fine(i+2,j+2,k+2) < 0.0_rt);
266 if (n == 2 || n == 6) {
267 ierr = 1;
268 } else if (n != 4) {
269 ierr = 1;
270 amrex::Abort("amrex::check_mvmc: how did this happen? nopen != 4");
271 }
272 }
273
274 return ierr;
275}
276
277namespace detail {
279Real coarsen_edge_cent (Real f1, Real f2)
280{
281 if (f1 == Real(1.0) && f2 == Real(1.0)) {
282 return Real(1.0);
283 } else if (f1 == Real(-1.0) && f2 == Real(-1.0)) {
284 return Real(-1.0);
285 } else {
286 if (f1 == Real(-1.0)) {
287 f1 = Real(0.0);
288 } else if (f1 == Real(1.0)) {
289 f1 = Real(-0.25);
290 } else {
291 f1 = Real(0.5)*f1 - Real(0.25);
292 }
293 if (f2 == Real(-1.0)) {
294 f2 = Real(0.0);
295 } else if (f2 == Real(1.0)) {
296 f2 = Real(0.25);
297 } else {
298 f2 = Real(0.5)*f2 + Real(0.25);
299 }
300 Real r = (f2*f2-f1*f1)/(f2-f1+Real(1.e-30));
301 return amrex::min(Real(0.5),amrex::max(Real(-0.5),r));
302 }
303}
304}
305
307int coarsen_from_fine (int i, int j, int k, Box const& bx, int ngrow,
308 Array4<Real> const& cvol, Array4<Real> const& ccent,
309 Array4<Real> const& cba, Array4<Real> const& cbc,
310 Array4<Real> const& cbn, Array4<Real> const& capx,
311 Array4<Real> const& capy, Array4<Real> const& capz,
312 Array4<Real> const& cfcx, Array4<Real> const& cfcy,
313 Array4<Real> const& cfcz, Array4<Real> const& cecx,
314 Array4<Real> const& cecy, Array4<Real> const& cecz,
315 Array4<EBCellFlag> const& cflag,
316 Array4<Real const> const& fvol, Array4<Real const> const& fcent,
317 Array4<Real const> const& fba, Array4<Real const> const& fbc,
318 Array4<Real const> const& fbn, Array4<Real const> const& fapx,
319 Array4<Real const> const& fapy, Array4<Real const> const& fapz,
320 Array4<Real const> const& ffcx, Array4<Real const> const& ffcy,
321 Array4<Real const> const& ffcz, Array4<Real const> const& fecx,
322 Array4<Real const> const& fecy, Array4<Real const> const& fecz,
323 Array4<EBCellFlag const> const& fflag)
324{
326
327 const Box& gbx = amrex::grow(bx,ngrow);
328 const Box& xbx = amrex::surroundingNodes(bx,0); // face boxes
329 const Box& ybx = amrex::surroundingNodes(bx,1);
330 const Box& zbx = amrex::surroundingNodes(bx,2);
331 const Box& xgbx = amrex::surroundingNodes(gbx,0);
332 const Box& ygbx = amrex::surroundingNodes(gbx,1);
333 const Box& zgbx = amrex::surroundingNodes(gbx,2);
334 const Box& exbx = amrex::convert(bx,IntVect(0,1,1)); // edge boxes
335 const Box& eybx = amrex::convert(bx,IntVect(1,0,1));
336 const Box& ezbx = amrex::convert(bx,IntVect(1,1,0));
337 const Box& exgbx = amrex::convert(gbx,IntVect(0,1,1));
338 const Box& eygbx = amrex::convert(gbx,IntVect(1,0,1));
339 const Box& ezgbx = amrex::convert(gbx,IntVect(1,1,0));
340
341 int ierr = 0;
342 int ii = i*2;
343 int jj = j*2;
344 int kk = k*2;
345
346 if (bx.contains(i,j,k))
347 {
348 if (fflag(ii,jj ,kk ).isRegular() && fflag(ii+1,jj ,kk ).isRegular() &&
349 fflag(ii,jj+1,kk ).isRegular() && fflag(ii+1,jj+1,kk ).isRegular() &&
350 fflag(ii,jj ,kk+1).isRegular() && fflag(ii+1,jj ,kk+1).isRegular() &&
351 fflag(ii,jj+1,kk+1).isRegular() && fflag(ii+1,jj+1,kk+1).isRegular())
352 {
353 cflag(i,j,k).setRegular();
354 cvol(i,j,k) = 1.0_rt;
355 ccent(i,j,k,0) = 0.0_rt;
356 ccent(i,j,k,1) = 0.0_rt;
357 ccent(i,j,k,2) = 0.0_rt;
358 cba(i,j,k) = 0.0_rt;
359 cbc(i,j,k,0) = -1.0_rt;
360 cbc(i,j,k,1) = -1.0_rt;
361 cbc(i,j,k,2) = -1.0_rt;
362 cbn(i,j,k,0) = 0.0_rt;
363 cbn(i,j,k,1) = 0.0_rt;
364 cbn(i,j,k,2) = 0.0_rt;
365 }
366 else if (fflag(ii,jj ,kk ).isCovered() && fflag(ii+1,jj ,kk ).isCovered() &&
367 fflag(ii,jj+1,kk ).isCovered() && fflag(ii+1,jj+1,kk ).isCovered() &&
368 fflag(ii,jj ,kk+1).isCovered() && fflag(ii+1,jj ,kk+1).isCovered() &&
369 fflag(ii,jj+1,kk+1).isCovered() && fflag(ii+1,jj+1,kk+1).isCovered())
370 {
371 cflag(i,j,k).setCovered();
372 cvol(i,j,k) = 0.0_rt;
373 ccent(i,j,k,0) = 0.0_rt;
374 ccent(i,j,k,1) = 0.0_rt;
375 ccent(i,j,k,2) = 0.0_rt;
376 cba(i,j,k) = 0.0_rt;
377 cbc(i,j,k,0) = -1.0_rt;
378 cbc(i,j,k,1) = -1.0_rt;
379 cbc(i,j,k,2) = -1.0_rt;
380 cbn(i,j,k,0) = 0.0_rt;
381 cbn(i,j,k,1) = 0.0_rt;
382 cbn(i,j,k,2) = 0.0_rt;
383 }
384 else
385 {
386 cflag(i,j,k).setSingleValued();
387
388 cvol(i,j,k) = 0.125_rt*(fvol(ii ,jj ,kk ) + fvol(ii+1,jj ,kk ) +
389 fvol(ii ,jj+1,kk ) + fvol(ii+1,jj+1,kk ) +
390 fvol(ii ,jj ,kk+1) + fvol(ii+1,jj ,kk+1) +
391 fvol(ii ,jj+1,kk+1) + fvol(ii+1,jj+1,kk+1));
392 Real cvolinv = 1.0_rt / cvol(i,j,k);
393
394 ccent(i,j,k,0) = 0.125_rt * cvolinv *
395 (fvol(ii ,jj ,kk )*(0.5_rt*fcent(ii ,jj ,kk ,0)-0.25_rt) +
396 fvol(ii+1,jj ,kk )*(0.5_rt*fcent(ii+1,jj ,kk ,0)+0.25_rt) +
397 fvol(ii ,jj+1,kk )*(0.5_rt*fcent(ii ,jj+1,kk ,0)-0.25_rt) +
398 fvol(ii+1,jj+1,kk )*(0.5_rt*fcent(ii+1,jj+1,kk ,0)+0.25_rt) +
399 fvol(ii ,jj ,kk+1)*(0.5_rt*fcent(ii ,jj ,kk+1,0)-0.25_rt) +
400 fvol(ii+1,jj ,kk+1)*(0.5_rt*fcent(ii+1,jj ,kk+1,0)+0.25_rt) +
401 fvol(ii ,jj+1,kk+1)*(0.5_rt*fcent(ii ,jj+1,kk+1,0)-0.25_rt) +
402 fvol(ii+1,jj+1,kk+1)*(0.5_rt*fcent(ii+1,jj+1,kk+1,0)+0.25_rt));
403 ccent(i,j,k,1) = 0.125_rt * cvolinv *
404 (fvol(ii ,jj ,kk )*(0.5_rt*fcent(ii ,jj ,kk ,1)-0.25_rt) +
405 fvol(ii+1,jj ,kk )*(0.5_rt*fcent(ii+1,jj ,kk ,1)-0.25_rt) +
406 fvol(ii ,jj+1,kk )*(0.5_rt*fcent(ii ,jj+1,kk ,1)+0.25_rt) +
407 fvol(ii+1,jj+1,kk )*(0.5_rt*fcent(ii+1,jj+1,kk ,1)+0.25_rt) +
408 fvol(ii ,jj ,kk+1)*(0.5_rt*fcent(ii ,jj ,kk+1,1)-0.25_rt) +
409 fvol(ii+1,jj ,kk+1)*(0.5_rt*fcent(ii+1,jj ,kk+1,1)-0.25_rt) +
410 fvol(ii ,jj+1,kk+1)*(0.5_rt*fcent(ii ,jj+1,kk+1,1)+0.25_rt) +
411 fvol(ii+1,jj+1,kk+1)*(0.5_rt*fcent(ii+1,jj+1,kk+1,1)+0.25_rt));
412 ccent(i,j,k,2) = 0.125_rt * cvolinv *
413 (fvol(ii ,jj ,kk )*(0.5_rt*fcent(ii ,jj ,kk ,2)-0.25_rt) +
414 fvol(ii+1,jj ,kk )*(0.5_rt*fcent(ii+1,jj ,kk ,2)-0.25_rt) +
415 fvol(ii ,jj+1,kk )*(0.5_rt*fcent(ii ,jj+1,kk ,2)-0.25_rt) +
416 fvol(ii+1,jj+1,kk )*(0.5_rt*fcent(ii+1,jj+1,kk ,2)-0.25_rt) +
417 fvol(ii ,jj ,kk+1)*(0.5_rt*fcent(ii ,jj ,kk+1,2)+0.25_rt) +
418 fvol(ii+1,jj ,kk+1)*(0.5_rt*fcent(ii+1,jj ,kk+1,2)+0.25_rt) +
419 fvol(ii ,jj+1,kk+1)*(0.5_rt*fcent(ii ,jj+1,kk+1,2)+0.25_rt) +
420 fvol(ii+1,jj+1,kk+1)*(0.5_rt*fcent(ii+1,jj+1,kk+1,2)+0.25_rt));
421
422 cba(i,j,k) = 0.25_rt*(fba(ii ,jj ,kk ) + fba(ii+1,jj ,kk ) +
423 fba(ii ,jj+1,kk ) + fba(ii+1,jj+1,kk ) +
424 fba(ii ,jj ,kk+1) + fba(ii+1,jj ,kk+1) +
425 fba(ii ,jj+1,kk+1) + fba(ii+1,jj+1,kk+1));
426 Real cbainv = 1.0_rt / cba(i,j,k);
427
428 cbc(i,j,k,0) = 0.25_rt * cbainv *
429 ( fba(ii ,jj ,kk )*(0.5_rt*fbc(ii ,jj ,kk ,0)-0.25_rt)
430 + fba(ii+1,jj ,kk )*(0.5_rt*fbc(ii+1,jj ,kk ,0)+0.25_rt)
431 + fba(ii ,jj+1,kk )*(0.5_rt*fbc(ii ,jj+1,kk ,0)-0.25_rt)
432 + fba(ii+1,jj+1,kk )*(0.5_rt*fbc(ii+1,jj+1,kk ,0)+0.25_rt)
433 + fba(ii ,jj ,kk+1)*(0.5_rt*fbc(ii ,jj ,kk+1,0)-0.25_rt)
434 + fba(ii+1,jj ,kk+1)*(0.5_rt*fbc(ii+1,jj ,kk+1,0)+0.25_rt)
435 + fba(ii ,jj+1,kk+1)*(0.5_rt*fbc(ii ,jj+1,kk+1,0)-0.25_rt)
436 + fba(ii+1,jj+1,kk+1)*(0.5_rt*fbc(ii+1,jj+1,kk+1,0)+0.25_rt) );
437 cbc(i,j,k,1) = 0.25_rt * cbainv *
438 ( fba(ii ,jj ,kk )*(0.5_rt*fbc(ii ,jj ,kk ,1)-0.25_rt)
439 + fba(ii+1,jj ,kk )*(0.5_rt*fbc(ii+1,jj ,kk ,1)-0.25_rt)
440 + fba(ii ,jj+1,kk )*(0.5_rt*fbc(ii ,jj+1,kk ,1)+0.25_rt)
441 + fba(ii+1,jj+1,kk )*(0.5_rt*fbc(ii+1,jj+1,kk ,1)+0.25_rt)
442 + fba(ii ,jj ,kk+1)*(0.5_rt*fbc(ii ,jj ,kk+1,1)-0.25_rt)
443 + fba(ii+1,jj ,kk+1)*(0.5_rt*fbc(ii+1,jj ,kk+1,1)-0.25_rt)
444 + fba(ii ,jj+1,kk+1)*(0.5_rt*fbc(ii ,jj+1,kk+1,1)+0.25_rt)
445 + fba(ii+1,jj+1,kk+1)*(0.5_rt*fbc(ii+1,jj+1,kk+1,1)+0.25_rt) );
446 cbc(i,j,k,2) = 0.25_rt * cbainv *
447 ( fba(ii ,jj ,kk )*(0.5_rt*fbc(ii ,jj ,kk ,2)-0.25_rt)
448 + fba(ii+1,jj ,kk )*(0.5_rt*fbc(ii+1,jj ,kk ,2)-0.25_rt)
449 + fba(ii ,jj+1,kk )*(0.5_rt*fbc(ii ,jj+1,kk ,2)-0.25_rt)
450 + fba(ii+1,jj+1,kk )*(0.5_rt*fbc(ii+1,jj+1,kk ,2)-0.25_rt)
451 + fba(ii ,jj ,kk+1)*(0.5_rt*fbc(ii ,jj ,kk+1,2)+0.25_rt)
452 + fba(ii+1,jj ,kk+1)*(0.5_rt*fbc(ii+1,jj ,kk+1,2)+0.25_rt)
453 + fba(ii ,jj+1,kk+1)*(0.5_rt*fbc(ii ,jj+1,kk+1,2)+0.25_rt)
454 + fba(ii+1,jj+1,kk+1)*(0.5_rt*fbc(ii+1,jj+1,kk+1,2)+0.25_rt) );
455
456 Real nx = fbn(ii ,jj ,kk ,0)*fba(ii ,jj ,kk )
457 + fbn(ii+1,jj ,kk ,0)*fba(ii+1,jj ,kk )
458 + fbn(ii ,jj+1,kk ,0)*fba(ii ,jj+1,kk )
459 + fbn(ii+1,jj+1,kk ,0)*fba(ii+1,jj+1,kk )
460 + fbn(ii ,jj ,kk+1,0)*fba(ii ,jj ,kk+1)
461 + fbn(ii+1,jj ,kk+1,0)*fba(ii+1,jj ,kk+1)
462 + fbn(ii ,jj+1,kk+1,0)*fba(ii ,jj+1,kk+1)
463 + fbn(ii+1,jj+1,kk+1,0)*fba(ii+1,jj+1,kk+1);
464 Real ny = fbn(ii ,jj ,kk ,1)*fba(ii ,jj ,kk )
465 + fbn(ii+1,jj ,kk ,1)*fba(ii+1,jj ,kk )
466 + fbn(ii ,jj+1,kk ,1)*fba(ii ,jj+1,kk )
467 + fbn(ii+1,jj+1,kk ,1)*fba(ii+1,jj+1,kk )
468 + fbn(ii ,jj ,kk+1,1)*fba(ii ,jj ,kk+1)
469 + fbn(ii+1,jj ,kk+1,1)*fba(ii+1,jj ,kk+1)
470 + fbn(ii ,jj+1,kk+1,1)*fba(ii ,jj+1,kk+1)
471 + fbn(ii+1,jj+1,kk+1,1)*fba(ii+1,jj+1,kk+1);
472 Real nz = fbn(ii ,jj ,kk ,2)*fba(ii ,jj ,kk )
473 + fbn(ii+1,jj ,kk ,2)*fba(ii+1,jj ,kk )
474 + fbn(ii ,jj+1,kk ,2)*fba(ii ,jj+1,kk )
475 + fbn(ii+1,jj+1,kk ,2)*fba(ii+1,jj+1,kk )
476 + fbn(ii ,jj ,kk+1,2)*fba(ii ,jj ,kk+1)
477 + fbn(ii+1,jj ,kk+1,2)*fba(ii+1,jj ,kk+1)
478 + fbn(ii ,jj+1,kk+1,2)*fba(ii ,jj+1,kk+1)
479 + fbn(ii+1,jj+1,kk+1,2)*fba(ii+1,jj+1,kk+1);
480 Real nfac = 1.0_rt / std::sqrt(nx*nx+ny*ny+nz*nz+1.e-30_rt);
481 cbn(i,j,k,0) = nx*nfac;
482 cbn(i,j,k,1) = ny*nfac;
483 cbn(i,j,k,2) = nz*nfac;
484 ierr = (nx == 0.0_rt && ny == 0.0_rt && nz == 0.0_rt)
485 // we must check the enclosing surface to make sure the coarse cell does not
486 // fully contains the geometry object.
487 || ( fapx(ii,jj ,kk )==1.0_rt && fapx(ii+2,jj ,kk )==1.0_rt
488 && fapx(ii,jj+1,kk )==1.0_rt && fapx(ii+2,jj+1,kk )==1.0_rt
489 && fapx(ii,jj ,kk+1)==1.0_rt && fapx(ii+2,jj ,kk+1)==1.0_rt
490 && fapx(ii,jj+1,kk+1)==1.0_rt && fapx(ii+2,jj+1,kk+1)==1.0_rt
491 && fapy(ii,jj ,kk )==1.0_rt && fapy(ii+1,jj ,kk )==1.0_rt
492 && fapy(ii,jj+2,kk )==1.0_rt && fapy(ii+1,jj+2,kk )==1.0_rt
493 && fapy(ii,jj ,kk+1)==1.0_rt && fapy(ii+1,jj ,kk+1)==1.0_rt
494 && fapy(ii,jj+2,kk+1)==1.0_rt && fapy(ii+1,jj+2,kk+1)==1.0_rt
495 && fapz(ii,jj ,kk )==1.0_rt && fapz(ii+1,jj ,kk )==1.0_rt
496 && fapz(ii,jj+1,kk )==1.0_rt && fapz(ii+1,jj+1,kk )==1.0_rt
497 && fapz(ii,jj ,kk+2)==1.0_rt && fapz(ii+1,jj ,kk+2)==1.0_rt
498 && fapz(ii,jj+1,kk+2)==1.0_rt && fapz(ii+1,jj+1,kk+2)==1.0_rt);
499
500 }
501 }
502 else if (gbx.contains(i,j,k))
503 {
504 cvol(i,j,k) = 1.0_rt;
505 ccent(i,j,k,0) = 0.0_rt;
506 ccent(i,j,k,1) = 0.0_rt;
507 ccent(i,j,k,2) = 0.0_rt;
508 cba(i,j,k) = 0.0_rt;
509 cbc(i,j,k,0) = -1.0_rt;
510 cbc(i,j,k,1) = -1.0_rt;
511 cbc(i,j,k,2) = -1.0_rt;
512 cbn(i,j,k,0) = 0.0_rt;
513 cbn(i,j,k,1) = 0.0_rt;
514 cbn(i,j,k,2) = 0.0_rt;
515 }
516
517 if (xbx.contains(i,j,k))
518 {
519 capx(i,j,k) = 0.25_rt*(fapx(ii,jj ,kk ) + fapx(ii,jj+1,kk ) +
520 fapx(ii,jj ,kk+1) + fapx(ii,jj+1,kk+1));
521 if (capx(i,j,k) != 0.0_rt) {
522 Real apinv = 1.0_rt / capx(i,j,k);
523 cfcx(i,j,k,0) = 0.25_rt * apinv *
524 (fapx(ii,jj ,kk )*(0.5_rt*ffcx(ii,jj ,kk ,0)-0.25_rt) +
525 fapx(ii,jj+1,kk )*(0.5_rt*ffcx(ii,jj+1,kk ,0)+0.25_rt) +
526 fapx(ii,jj ,kk+1)*(0.5_rt*ffcx(ii,jj ,kk+1,0)-0.25_rt) +
527 fapx(ii,jj+1,kk+1)*(0.5_rt*ffcx(ii,jj+1,kk+1,0)+0.25_rt) );
528 cfcx(i,j,k,1) = 0.25_rt * apinv *
529 (fapx(ii,jj ,kk )*(0.5_rt*ffcx(ii,jj ,kk ,1)-0.25_rt) +
530 fapx(ii,jj+1,kk )*(0.5_rt*ffcx(ii,jj+1,kk ,1)-0.25_rt) +
531 fapx(ii,jj ,kk+1)*(0.5_rt*ffcx(ii,jj ,kk+1,1)+0.25_rt) +
532 fapx(ii,jj+1,kk+1)*(0.5_rt*ffcx(ii,jj+1,kk+1,1)+0.25_rt) );
533 } else {
534 cfcx(i,j,k,0) = 0.0_rt;
535 cfcx(i,j,k,1) = 0.0_rt;
536 }
537 }
538 else if (xgbx.contains(i,j,k))
539 {
540 capx(i,j,k) = 1.0_rt;
541 cfcx(i,j,k,0) = 0.0_rt;
542 cfcx(i,j,k,1) = 0.0_rt;
543 }
544
545 if (ybx.contains(i,j,k))
546 {
547 capy(i,j,k) = 0.25_rt*(fapy(ii ,jj,kk ) + fapy(ii+1,jj,kk ) +
548 fapy(ii ,jj,kk+1) + fapy(ii+1,jj,kk+1));
549 if (capy(i,j,k) != 0.0_rt) {
550 Real apinv = 1.0_rt / capy(i,j,k);
551 cfcy(i,j,k,0) = 0.25_rt * apinv *
552 (fapy(ii ,jj,kk )*(0.5_rt*ffcy(ii ,jj,kk ,0)-0.25_rt) +
553 fapy(ii+1,jj,kk )*(0.5_rt*ffcy(ii+1,jj,kk ,0)+0.25_rt) +
554 fapy(ii ,jj,kk+1)*(0.5_rt*ffcy(ii ,jj,kk+1,0)-0.25_rt) +
555 fapy(ii+1,jj,kk+1)*(0.5_rt*ffcy(ii+1,jj,kk+1,0)+0.25_rt) );
556 cfcy(i,j,k,1) = 0.25_rt * apinv *
557 (fapy(ii ,jj,kk )*(0.5_rt*ffcy(ii ,jj,kk ,1)-0.25_rt) +
558 fapy(ii+1,jj,kk )*(0.5_rt*ffcy(ii+1,jj,kk ,1)-0.25_rt) +
559 fapy(ii ,jj,kk+1)*(0.5_rt*ffcy(ii ,jj,kk+1,1)+0.25_rt) +
560 fapy(ii+1,jj,kk+1)*(0.5_rt*ffcy(ii+1,jj,kk+1,1)+0.25_rt) );
561 } else {
562 cfcy(i,j,k,0) = 0.0_rt;
563 cfcy(i,j,k,1) = 0.0_rt;
564 }
565 }
566 else if (ygbx.contains(i,j,k))
567 {
568 capy(i,j,k) = 1.0_rt;
569 cfcy(i,j,k,0) = 0.0_rt;
570 cfcy(i,j,k,1) = 0.0_rt;
571 }
572
573 if (zbx.contains(i,j,k))
574 {
575 capz(i,j,k) = 0.25_rt * (fapz(ii ,jj ,kk) + fapz(ii+1,jj ,kk) +
576 fapz(ii ,jj+1,kk) + fapz(ii+1,jj+1,kk));
577 if (capz(i,j,k) != 0.0_rt) {
578 Real apinv = 1.0_rt / capz(i,j,k);
579 cfcz(i,j,k,0) = 0.25_rt * apinv *
580 (fapz(ii ,jj ,kk)*(0.5_rt*ffcz(ii ,jj ,kk,0)-0.25_rt) +
581 fapz(ii+1,jj ,kk)*(0.5_rt*ffcz(ii+1,jj ,kk,0)+0.25_rt) +
582 fapz(ii ,jj+1,kk)*(0.5_rt*ffcz(ii ,jj+1,kk,0)-0.25_rt) +
583 fapz(ii+1,jj+1,kk)*(0.5_rt*ffcz(ii+1,jj+1,kk,0)+0.25_rt) );
584 cfcz(i,j,k,1) = 0.25_rt * apinv *
585 (fapz(ii ,jj ,kk)*(0.5_rt*ffcz(ii ,jj ,kk,1)-0.25_rt) +
586 fapz(ii+1,jj ,kk)*(0.5_rt*ffcz(ii+1,jj ,kk,1)-0.25_rt) +
587 fapz(ii ,jj+1,kk)*(0.5_rt*ffcz(ii ,jj+1,kk,1)+0.25_rt) +
588 fapz(ii+1,jj+1,kk)*(0.5_rt*ffcz(ii+1,jj+1,kk,1)+0.25_rt) );
589 } else {
590 cfcz(i,j,k,0) = 0.0_rt;
591 cfcz(i,j,k,1) = 0.0_rt;
592 }
593 }
594 else if (zgbx.contains(i,j,k))
595 {
596 capz(i,j,k) = 1.0_rt;
597 cfcz(i,j,k,0) = 0.0_rt;
598 cfcz(i,j,k,1) = 0.0_rt;
599 }
600
601 if (exbx.contains(i,j,k))
602 {
603 cecx(i,j,k) = coarsen_edge_cent(fecx(ii,jj,kk), fecx(ii+1,jj,kk));
604 }
605 else if (exgbx.contains(i,j,k))
606 {
607 cecx(i,j,k) = 1.0_rt;
608 }
609
610 if (eybx.contains(i,j,k))
611 {
612 cecy(i,j,k) = coarsen_edge_cent(fecy(ii,jj,kk), fecy(ii,jj+1,kk));
613 }
614 else if (eygbx.contains(i,j,k))
615 {
616 cecy(i,j,k) = 1.0_rt;
617 }
618
619 if (ezbx.contains(i,j,k))
620 {
621 cecz(i,j,k) = coarsen_edge_cent(fecz(ii,jj,kk), fecz(ii,jj,kk+1));
622 }
623 else if (ezgbx.contains(i,j,k))
624 {
625 cecz(i,j,k) = 1.0_rt;
626 }
627
628 return ierr;
629}
630
632void build_cellflag_from_ap (int i, int j, int k, Array4<EBCellFlag> const& cflag,
633 Array4<Real const> const& apx, Array4<Real const> const& apy,
634 Array4<Real const> const& apz)
635{
636 auto flg = cflag(i,j,k);
637 flg.setDisconnected();
638
639 if (!flg.isCovered())
640 {
641 flg.setConnected(0,0,0);
642
643 if (apx(i ,j,k) != 0.0_rt) { flg.setConnected(-1, 0, 0); }
644 if (apx(i+1,j,k) != 0.0_rt) { flg.setConnected( 1, 0, 0); }
645 if (apy(i,j ,k) != 0.0_rt) { flg.setConnected( 0, -1, 0); }
646 if (apy(i,j+1,k) != 0.0_rt) { flg.setConnected( 0, 1, 0); }
647 if (apz(i,j,k ) != 0.0_rt) { flg.setConnected( 0, 0, -1); }
648 if (apz(i,j,k+1) != 0.0_rt) { flg.setConnected( 0, 0, 1); }
649
650 if ( (apx(i,j,k) != 0.0_rt && apy(i-1,j,k) != 0.0_rt) ||
651 (apy(i,j,k) != 0.0_rt && apx(i,j-1,k) != 0.0_rt) )
652 {
653 flg.setConnected(-1, -1, 0);
654 if (apz(i-1,j-1,k ) != 0.0_rt) { flg.setConnected(-1,-1,-1); }
655 if (apz(i-1,j-1,k+1) != 0.0_rt) { flg.setConnected(-1,-1, 1); }
656 }
657
658 if ( (apx(i+1,j,k) != 0.0_rt && apy(i+1,j ,k) != 0.0_rt) ||
659 (apy(i ,j,k) != 0.0_rt && apx(i+1,j-1,k) != 0.0_rt) )
660 {
661 flg.setConnected(1, -1, 0);
662 if (apz(i+1,j-1,k ) != 0.0_rt) { flg.setConnected(1,-1,-1); }
663 if (apz(i+1,j-1,k+1) != 0.0_rt) { flg.setConnected(1,-1, 1); }
664 }
665
666 if ( (apx(i,j ,k) != 0.0_rt && apy(i-1,j+1,k) != 0.0_rt) ||
667 (apy(i,j+1,k) != 0.0_rt && apx(i ,j+1,k) != 0.0_rt) )
668 {
669 flg.setConnected(-1, 1, 0);
670 if (apz(i-1,j+1,k ) != 0.0_rt) { flg.setConnected(-1, 1,-1); }
671 if (apz(i-1,j+1,k+1) != 0.0_rt) { flg.setConnected(-1, 1, 1); }
672 }
673
674 if ( (apx(i+1,j ,k) != 0.0_rt && apy(i+1,j+1,k) != 0.0_rt) ||
675 (apy(i ,j+1,k) != 0.0_rt && apx(i+1,j+1,k) != 0.0_rt) )
676 {
677 flg.setConnected(1, 1, 0);
678 if (apz(i+1,j+1,k ) != 0.0_rt) { flg.setConnected(1, 1,-1); }
679 if (apz(i+1,j+1,k+1) != 0.0_rt) { flg.setConnected(1, 1, 1); }
680 }
681
682 if ( (apx(i,j,k) != 0.0_rt && apz(i-1,j,k ) != 0.0_rt) ||
683 (apz(i,j,k) != 0.0_rt && apx(i ,j,k-1) != 0.0_rt) )
684 {
685 flg.setConnected(-1, 0, -1);
686 if (apy(i-1,j ,k-1) != 0.0_rt) { flg.setConnected(-1,-1,-1); }
687 if (apy(i-1,j+1,k-1) != 0.0_rt) { flg.setConnected(-1, 1,-1); }
688 }
689
690 if ( (apx(i+1,j,k) != 0.0_rt && apz(i+1,j,k ) != 0.0_rt) ||
691 (apz(i ,j,k) != 0.0_rt && apx(i+1,j,k-1) != 0.0_rt) )
692 {
693 flg.setConnected(1, 0, -1);
694 if (apy(i+1,j ,k-1) != 0.0_rt) { flg.setConnected(1,-1,-1); }
695 if (apy(i+1,j+1,k-1) != 0.0_rt) { flg.setConnected(1, 1,-1); }
696 }
697
698 if ( (apx(i,j,k ) != 0.0_rt && apz(i-1,j,k+1) != 0.0_rt) ||
699 (apz(i,j,k+1) != 0.0_rt && apx(i ,j,k+1) != 0.0_rt) )
700 {
701 flg.setConnected(-1, 0, 1);
702 if (apy(i-1,j ,k+1) != 0.0_rt) { flg.setConnected(-1,-1, 1); }
703 if (apy(i-1,j+1,k+1) != 0.0_rt) { flg.setConnected(-1, 1, 1); }
704 }
705
706 if ( (apx(i+1,j,k ) != 0.0_rt && apz(i+1,j,k+1) != 0.0_rt) ||
707 (apz(i ,j,k+1) != 0.0_rt && apx(i+1,j,k+1) != 0.0_rt) )
708 {
709 flg.setConnected(1, 0, 1);
710 if (apy(i+1,j ,k+1) != 0.0_rt) { flg.setConnected(1,-1, 1); }
711 if (apy(i+1,j+1,k+1) != 0.0_rt) { flg.setConnected(1, 1, 1); }
712 }
713
714 if ( (apy(i,j,k) != 0.0_rt && apz(i,j-1,k ) != 0.0_rt) ||
715 (apz(i,j,k) != 0.0_rt && apy(i,j ,k-1) != 0.0_rt) )
716 {
717 flg.setConnected(0, -1, -1);
718 if (apx(i ,j-1,k-1) != 0.0_rt) { flg.setConnected(-1,-1,-1); }
719 if (apx(i+1,j-1,k-1) != 0.0_rt) { flg.setConnected( 1,-1,-1); }
720 }
721
722 if ( (apy(i,j+1,k) != 0.0_rt && apz(i,j+1,k ) != 0.0_rt) ||
723 (apz(i,j ,k) != 0.0_rt && apy(i,j+1,k-1) != 0.0_rt) )
724 {
725 flg.setConnected(0, 1, -1);
726 if (apx(i ,j+1,k-1) != 0.0_rt) { flg.setConnected(-1, 1,-1); }
727 if (apx(i+1,j+1,k-1) != 0.0_rt) { flg.setConnected( 1, 1,-1); }
728 }
729
730 if ( (apy(i,j,k ) != 0.0_rt && apz(i,j-1,k+1) != 0.0_rt) ||
731 (apz(i,j,k+1) != 0.0_rt && apy(i,j ,k+1) != 0.0_rt) )
732 {
733 flg.setConnected(0, -1, 1);
734 if (apx(i ,j-1,k+1) != 0.0_rt) { flg.setConnected(-1,-1, 1); }
735 if (apx(i+1,j-1,k+1) != 0.0_rt) { flg.setConnected( 1,-1, 1); }
736 }
737
738 if ( (apy(i,j+1,k ) != 0.0_rt && apz(i,j+1,k+1) != 0.0_rt) ||
739 (apz(i,j ,k+1) != 0.0_rt && apy(i,j+1,k+1) != 0.0_rt) )
740 {
741 flg.setConnected(0, 1, 1);
742 if (apx(i ,j+1,k+1) != 0.0_rt) { flg.setConnected(-1, 1, 1); }
743 if (apx(i+1,j+1,k+1) != 0.0_rt) { flg.setConnected( 1, 1, 1); }
744 }
745 }
746
747 cflag(i,j,k) = flg;
748}
749
750}
751
752#endif
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:119
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
Array4< Real > fine
Definition AMReX_InterpFaceRegister.cpp:90
AMREX_GPU_HOST_DEVICE bool contains(const IntVectND< dim > &p) const noexcept
Returns true if argument is contained within BoxND.
Definition AMReX_Box.H:204
static constexpr Type_t regular
Definition AMReX_EB2_Graph.H:38
static constexpr Type_t covered
Definition AMReX_EB2_Graph.H:39
static constexpr Type_t irregular
Definition AMReX_EB2_Graph.H:40
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int num_cuts(Real a, Real b) noexcept
Definition AMReX_EB2_2D_C.H:71
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Real coarsen_edge_cent(Real f1, Real f2)
Definition AMReX_EB2_3D_C.H:279
Definition AMReX_FabArrayBase.H:32
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int coarsen_from_fine(int i, int j, Box const &bx, int ngrow, Array4< Real > const &cvol, Array4< Real > const &ccent, Array4< Real > const &cba, Array4< Real > const &cbc, Array4< Real > const &cbn, Array4< Real > const &capx, Array4< Real > const &capy, Array4< Real > const &cfcx, Array4< Real > const &cfcy, Array4< Real > const &cecx, Array4< Real > const &cecy, Array4< EBCellFlag > const &cflag, Array4< Real const > const &fvol, Array4< Real const > const &fcent, Array4< Real const > const &fba, Array4< Real const > const &fbc, Array4< Real const > const &fbn, Array4< Real const > const &fapx, Array4< Real const > const &fapy, Array4< Real const > const &ffcx, Array4< Real const > const &ffcy, Array4< Real const > const &fecx, Array4< Real const > const &fecy, Array4< EBCellFlag const > const &fflag)
Definition AMReX_EB2_2D_C.H:96
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void build_cellflag_from_ap(int i, int j, Array4< EBCellFlag > const &cflag, Array4< Real const > const &apx, Array4< Real const > const &apy)
Definition AMReX_EB2_2D_C.H:268
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void amrex_eb2_build_types(Box const &tbx, Box const &bxg2, Array4< Real const > const &s, Array4< EBCellFlag > const &cell, Array4< Type_t > const &fx, Array4< Type_t > const &fy)
Definition AMReX_EB2_2D_C.H:9
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int check_mvmc(int i, int j, int, Array4< Real const > const &fine)
Definition AMReX_EB2_2D_C.H:77
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Dim3 min_ubound(BoxND< dim > const &b1, BoxND< dim > const &b2) noexcept
Definition AMReX_Box.H:1928
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE BoxND< dim > surroundingNodes(const BoxND< dim > &b, int dir) noexcept
Returns a BoxND with NODE based coordinates in direction dir that encloses BoxND b....
Definition AMReX_Box.H:1399
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE BoxND< dim > convert(const BoxND< dim > &b, const IntVectND< dim > &typ) noexcept
Returns a BoxND with different type.
Definition AMReX_Box.H:1435
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE constexpr const T & min(const T &a, const T &b) noexcept
Definition AMReX_Algorithm.H:21
IntVectND< AMREX_SPACEDIM > IntVect
Definition AMReX_BaseFwd.H:30
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE BoxND< dim > grow(const BoxND< dim > &b, int i) noexcept
Grow BoxND in all directions by given amount.
Definition AMReX_Box.H:1211
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE constexpr const T & max(const T &a, const T &b) noexcept
Definition AMReX_Algorithm.H:35
void Abort(const std::string &msg)
Print out message to cerr and exit via abort().
Definition AMReX.cpp:225
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Dim3 max_lbound(BoxND< dim > const &b1, BoxND< dim > const &b2) noexcept
Definition AMReX_Box.H:1909
AMREX_GPU_HOST_DEVICE AMREX_ATTRIBUTE_FLATTEN_FOR void Loop(Dim3 lo, Dim3 hi, F const &f) noexcept
Definition AMReX_Loop.H:125
Definition AMReX_FabArrayCommI.H:896
Definition AMReX_Array4.H:61