Block-Structured AMR Software Framework
AMReX_MultiFabUtil_3D_C.H
Go to the documentation of this file.
1 #ifndef AMREX_MULTIFAB_UTIL_3D_C_H_
2 #define AMREX_MULTIFAB_UTIL_3D_C_H_
3 #include <AMReX_Config.H>
4 
5 #include <AMReX_Gpu.H>
6 #include <AMReX_FArrayBox.H>
7 #include <AMReX_IArrayBox.H>
8 #include <cmath>
9 
10 namespace amrex {
11 
13 void amrex_avg_nd_to_cc (int i, int j, int k, int n,
14  Array4<Real > const& cc,
15  Array4<Real const> const& nd,
16  int cccomp, int ndcomp) noexcept
17 {
18  cc(i,j,k,n+cccomp) = Real(0.125)*( nd(i,j ,k ,n+ndcomp) + nd(i+1,j ,k ,n+ndcomp)
19  + nd(i,j+1,k ,n+ndcomp) + nd(i+1,j+1,k ,n+ndcomp)
20  + nd(i,j ,k+1,n+ndcomp) + nd(i+1,j ,k+1,n+ndcomp)
21  + nd(i,j+1,k+1,n+ndcomp) + nd(i+1,j+1,k+1,n+ndcomp));
22 }
23 
25 void amrex_avg_eg_to_cc (int i, int j, int k,
26  Array4<Real > const& cc,
27  Array4<Real const> const& Ex,
28  Array4<Real const> const& Ey,
29  Array4<Real const> const& Ez,
30  int cccomp) noexcept
31 {
32  cc(i,j,k,0+cccomp) = Real(0.25) * ( Ex(i,j,k) + Ex(i,j+1,k) + Ex(i,j,k+1) + Ex(i,j+1,k+1) );
33  cc(i,j,k,1+cccomp) = Real(0.25) * ( Ey(i,j,k) + Ey(i+1,j,k) + Ey(i,j,k+1) + Ey(i+1,j,k+1) );
34  cc(i,j,k,2+cccomp) = Real(0.25) * ( Ez(i,j,k) + Ez(i+1,j,k) + Ez(i,j+1,k) + Ez(i+1,j+1,k) );
35 }
36 
37 template <typename CT, typename FT>
39 void amrex_avg_fc_to_cc (int i, int j, int k,
40  Array4<CT > const& cc,
41  Array4<FT const> const& fx,
42  Array4<FT const> const& fy,
43  Array4<FT const> const& fz,
44  int cccomp) noexcept
45 {
46  cc(i,j,k,0+cccomp) = CT(0.5) * CT( fx(i,j,k) + fx(i+1,j,k) );
47  cc(i,j,k,1+cccomp) = CT(0.5) * CT( fy(i,j,k) + fy(i,j+1,k) );
48  cc(i,j,k,2+cccomp) = CT(0.5) * CT( fz(i,j,k) + fz(i,j,k+1) );
49 }
50 
52 void amrex_avg_cc_to_fc (int i, int j, int k, int n, Box const& xbx, Box const& ybx, Box const& zbx,
53  Array4<Real> const& fx, Array4<Real> const& fy,
54  Array4<Real> const& fz, Array4<Real const> const& cc,
55  bool use_harmonic_averaging) noexcept
56 {
57  if (use_harmonic_averaging)
58  {
59  if (xbx.contains(i,j,k)) {
60  if (cc(i-1,j,k,n) == Real(0.0) || cc(i,j,k,n) == Real(0.0)) {
61  fx(i,j,k,n) = Real(0.0);
62  } else {
63  fx(i,j,k,n) = Real(2.0) / (Real(1.0)/cc(i-1,j,k,n) + Real(1.0)/cc(i,j,k,n));
64  }
65  }
66  if (ybx.contains(i,j,k)) {
67  if (cc(i,j-1,k,n) == Real(0.0) || cc(i,j,k,n) == Real(0.0)) {
68  fy(i,j,k,n) = Real(0.0);
69  } else {
70  fy(i,j,k,n) = Real(2.0) / (Real(1.0)/cc(i,j-1,k,n) + Real(1.0)/cc(i,j,k,n));
71  }
72  }
73  if (zbx.contains(i,j,k)) {
74  if (cc(i,j,k-1,n) == Real(0.0) || cc(i,j,k,n) == Real(0.0)) {
75  fz(i,j,k,n) = Real(0.0);
76  } else {
77  fz(i,j,k,n) = Real(2.0) / (Real(1.0)/cc(i,j,k-1,n) + Real(1.0)/cc(i,j,k,n));
78  }
79  }
80  } else {
81  if (xbx.contains(i,j,k)) {
82  fx(i,j,k,n) = Real(0.5)*(cc(i-1,j,k,n) + cc(i,j,k,n));
83  }
84  if (ybx.contains(i,j,k)) {
85  fy(i,j,k,n) = Real(0.5)*(cc(i,j-1,k,n) + cc(i,j,k,n));
86  }
87  if (zbx.contains(i,j,k)) {
88  fz(i,j,k,n) = Real(0.5)*(cc(i,j,k-1,n) + cc(i,j,k,n));
89  }
90  }
91 }
92 
93 template <typename T>
95 void amrex_avgdown_faces (Box const& bx, Array4<T> const& crse,
96  Array4<T const> const& fine,
97  int ccomp, int fcomp, int ncomp,
98  IntVect const& ratio, int idir) noexcept
99 {
100  const auto clo = lbound(bx);
101  const auto chi = ubound(bx);
102  const int facx = ratio[0];
103  const int facy = ratio[1];
104  const int facz = ratio[2];
105 
106  switch (idir) {
107  case 0:
108  {
109  T facInv = T(1.0) / (facy*facz);
110  for (int n = 0; n < ncomp; ++n) {
111  for (int k = clo.z; k <= chi.z; ++k) {
112  for (int j = clo.y; j <= chi.y; ++j) {
113  for (int i = clo.x; i <= chi.x; ++i) {
114  int ii = i*facx;
115  int jj = j*facy;
116  int kk = k*facz;
117  T c = T(0.);
118  for (int kref = 0; kref < facz; ++kref) {
119  for (int jref = 0; jref < facy; ++jref) {
120  c += fine(ii,jj+jref,kk+kref,n+fcomp);
121  }}
122  crse(i,j,k,n+ccomp) = c * facInv;
123  }}}
124  }
125  break;
126  }
127  case 1:
128  {
129  T facInv = T(1.0) / (facx*facz);
130  for (int n = 0; n < ncomp; ++n) {
131  for (int k = clo.z; k <= chi.z; ++k) {
132  for (int j = clo.y; j <= chi.y; ++j) {
133  for (int i = clo.x; i <= chi.x; ++i) {
134  int ii = i*facx;
135  int jj = j*facy;
136  int kk = k*facz;
137  T c = T(0.);
138  for (int kref = 0; kref < facz; ++kref) {
139  for (int iref = 0; iref < facx; ++iref) {
140  c += fine(ii+iref,jj,kk+kref,n+fcomp);
141  }}
142  crse(i,j,k,n+ccomp) = c * facInv;
143  }}}
144  }
145  break;
146  }
147  case 2:
148  {
149  T facInv = T(1.0) / (facx*facy);
150  for (int n = 0; n < ncomp; ++n) {
151  for (int k = clo.z; k <= chi.z; ++k) {
152  for (int j = clo.y; j <= chi.y; ++j) {
153  for (int i = clo.x; i <= chi.x; ++i) {
154  int ii = i*facx;
155  int jj = j*facy;
156  int kk = k*facz;
157  T c = T(0.);
158  for (int jref = 0; jref < facy; ++jref) {
159  for (int iref = 0; iref < facx; ++iref) {
160  c += fine(ii+iref,jj+jref,kk,n+fcomp);
161  }}
162  crse(i,j,k,n+ccomp) = c * facInv;
163  }}}
164  }
165  break;
166  }
167  default: { break; }
168  }
169 }
170 
171 template <typename T>
173 void amrex_avgdown_faces (int i, int j, int k, int n, Array4<T> const& crse,
174  Array4<T const> const& fine,
175  int ccomp, int fcomp, IntVect const& ratio, int idir) noexcept
176 {
177  const int facx = ratio[0];
178  const int facy = ratio[1];
179  const int facz = ratio[2];
180  const int ii = i*facx;
181  const int jj = j*facy;
182  const int kk = k*facz;
183 
184  switch (idir) {
185  case 0:
186  {
187  const T facInv = T(1.0) / (facy*facz);
188  T c = T(0.);
189  for (int kref = 0; kref < facz; ++kref) {
190  for (int jref = 0; jref < facy; ++jref) {
191  c += fine(ii,jj+jref,kk+kref,n+fcomp);
192  }}
193  crse(i,j,k,n+ccomp) = c * facInv;
194  break;
195  }
196  case 1:
197  {
198  const T facInv = T(1.0) / (facx*facz);
199  T c = T(0.);
200  for (int kref = 0; kref < facz; ++kref) {
201  for (int iref = 0; iref < facx; ++iref) {
202  c += fine(ii+iref,jj,kk+kref,n+fcomp);
203  }}
204  crse(i,j,k,n+ccomp) = c * facInv;
205  break;
206  }
207  case 2:
208  {
209  const T facInv = T(1.0) / (facx*facy);
210  T c = T(0.);
211  for (int jref = 0; jref < facy; ++jref) {
212  for (int iref = 0; iref < facx; ++iref) {
213  c += fine(ii+iref,jj+jref,kk,n+fcomp);
214  }}
215  crse(i,j,k,n+ccomp) = c * facInv;
216  break;
217  }
218  default: { break; }
219  }
220 }
221 
223 void amrex_avgdown_edges (Box const& bx, Array4<Real> const& crse,
224  Array4<Real const> const& fine,
225  int ccomp, int fcomp, int ncomp,
226  IntVect const& ratio, int idir) noexcept
227 {
228  const auto clo = lbound(bx);
229  const auto chi = ubound(bx);
230  const int facx = ratio[0];
231  const int facy = ratio[1];
232  const int facz = ratio[2];
233 
234  switch (idir) {
235  case 0:
236  {
237  Real facInv = Real(1.0) / static_cast<Real>(facx);
238  for (int n = 0; n < ncomp; ++n) {
239  for (int k = clo.z; k <= chi.z; ++k) {
240  for (int j = clo.y; j <= chi.y; ++j) {
241  for (int i = clo.x; i <= chi.x; ++i) {
242  int ii = i*facx;
243  int jj = j*facy;
244  int kk = k*facz;
245  Real c = 0.;
246  for (int iref = 0; iref < facx; ++iref) {
247  c += fine(ii+iref,jj,kk,n+fcomp);
248  }
249  crse(i,j,k,n+ccomp) = c * facInv;
250  }}}
251  }
252  break;
253  }
254  case 1:
255  {
256  Real facInv = Real(1.0) / static_cast<Real>(facy);
257  for (int n = 0; n < ncomp; ++n) {
258  for (int k = clo.z; k <= chi.z; ++k) {
259  for (int j = clo.y; j <= chi.y; ++j) {
260  for (int i = clo.x; i <= chi.x; ++i) {
261  int ii = i*facx;
262  int jj = j*facy;
263  int kk = k*facz;
264  Real c = 0.;
265  for (int jref = 0; jref < facy; ++jref) {
266  c += fine(ii,jj+jref,kk,n+fcomp);
267  }
268  crse(i,j,k,n+ccomp) = c * facInv;
269  }}}
270  }
271  break;
272  }
273  case 2:
274  {
275  Real facInv = Real(1.0) / static_cast<Real>(facz);
276  for (int n = 0; n < ncomp; ++n) {
277  for (int k = clo.z; k <= chi.z; ++k) {
278  for (int j = clo.y; j <= chi.y; ++j) {
279  for (int i = clo.x; i <= chi.x; ++i) {
280  int ii = i*facx;
281  int jj = j*facy;
282  int kk = k*facz;
283  Real c = 0.;
284  for (int kref = 0; kref < facz; ++kref) {
285  c += fine(ii,jj,kk+kref,n+fcomp);
286  }
287  crse(i,j,k,n+ccomp) = c * facInv;
288  }}}
289  }
290  break;
291  }
292  default: { break; }
293  }
294 }
295 
297 void amrex_avgdown_edges (int i, int j, int k, int n, Array4<Real> const& crse,
298  Array4<Real const> const& fine,
299  int ccomp, int fcomp, IntVect const& ratio, int idir) noexcept
300 {
301  const int facx = ratio[0];
302  const int facy = ratio[1];
303  const int facz = ratio[2];
304  const int ii = i*facx;
305  const int jj = j*facy;
306  const int kk = k*facz;
307 
308  switch (idir) {
309  case 0:
310  {
311  const Real facInv = Real(1.0) / static_cast<Real>(facx);
312  Real c = 0.;
313  for (int iref = 0; iref < facx; ++iref) {
314  c += fine(ii+iref,jj,kk,n+fcomp);
315  }
316  crse(i,j,k,n+ccomp) = c * facInv;
317  break;
318  }
319  case 1:
320  {
321  const Real facInv = Real(1.0) / static_cast<Real>(facy);
322  Real c = 0.;
323  for (int jref = 0; jref < facy; ++jref) {
324  c += fine(ii,jj+jref,kk,n+fcomp);
325  }
326  crse(i,j,k,n+ccomp) = c * facInv;
327  break;
328  }
329  case 2:
330  {
331  const Real facInv = Real(1.0) / static_cast<Real>(facz);
332  Real c = 0.;
333  for (int kref = 0; kref < facz; ++kref) {
334  c += fine(ii,jj,kk+kref,n+fcomp);
335  }
336  crse(i,j,k,n+ccomp) = c * facInv;
337  break;
338  }
339  default: { break; }
340  }
341 }
342 
343 template <typename T>
345 void amrex_avgdown (Box const& bx, Array4<T> const& crse,
346  Array4<T const> const& fine,
347  int ccomp, int fcomp, int ncomp,
348  IntVect const& ratio) noexcept
349 {
350  const auto clo = lbound(bx);
351  const auto chi = ubound(bx);
352  const int facx = ratio[0];
353  const int facy = ratio[1];
354  const int facz = ratio[2];
355  const T volfrac = T(1.0)/T(facx*facy*facz);
356 
357  for (int n = 0; n < ncomp; ++n) {
358  for (int k = clo.z; k <= chi.z; ++k) {
359  for (int j = clo.y; j <= chi.y; ++j) {
360  for (int i = clo.x; i <= chi.x; ++i) {
361  int ii = i*facx;
362  int jj = j*facy;
363  int kk = k*facz;
364  T c = 0;
365  for (int kref = 0; kref < facz; ++kref) {
366  for (int jref = 0; jref < facy; ++jref) {
367  for (int iref = 0; iref < facx; ++iref) {
368  c += fine(ii+iref,jj+jref,kk+kref,n+fcomp);
369  }}}
370  crse(i,j,k,n+ccomp) = volfrac * c;
371  }}}
372  }
373 }
374 
375 template <typename T>
377 void amrex_avgdown (int i, int j, int k, int n, Array4<T> const& crse,
378  Array4<T const> const& fine,
379  int ccomp, int fcomp, IntVect const& ratio) noexcept
380 {
381  const int facx = ratio[0];
382  const int facy = ratio[1];
383  const int facz = ratio[2];
384  const T volfrac = T(1.0)/T(facx*facy*facz);
385  const int ii = i*facx;
386  const int jj = j*facy;
387  const int kk = k*facz;
388  T c = 0;
389  for (int kref = 0; kref < facz; ++kref) {
390  for (int jref = 0; jref < facy; ++jref) {
391  for (int iref = 0; iref < facx; ++iref) {
392  c += fine(ii+iref,jj+jref,kk+kref,n+fcomp);
393  }}}
394  crse(i,j,k,n+ccomp) = volfrac * c;
395 }
396 
398 void amrex_avgdown_with_vol (int i, int j, int k, int n, Array4<Real> const& crse,
399  Array4<Real const> const& fine,
400  Array4<Real const> const& fv,
401  int ccomp, int fcomp, IntVect const& ratio) noexcept
402 {
403  const int facx = ratio[0];
404  const int facy = ratio[1];
405  const int facz = ratio[2];
406  const int ii = i*facx;
407  const int jj = j*facy;
408  const int kk = k*facz;
409  Real cd = 0.0, cv = 0.0;
410  for (int kref = 0; kref < facz; ++kref) {
411  for (int jref = 0; jref < facy; ++jref) {
412  for (int iref = 0; iref < facx; ++iref) {
413  cv += fv(ii+iref,jj+jref,kk+kref);
414  cd += fine(ii+iref,jj+jref,kk+kref,n+fcomp)*fv(ii+iref,jj+jref,kk+kref);
415  }}}
416  crse(i,j,k,n+ccomp) = cd/cv;
417 }
418 
419 template <typename T>
421 void amrex_avgdown_nodes (Box const& bx, Array4<T> const& crse,
422  Array4<T const> const& fine,
423  int ccomp, int fcomp, int ncomp,
424  IntVect const& ratio) noexcept
425 {
426  const auto clo = lbound(bx);
427  const auto chi = ubound(bx);
428  const int facx = ratio[0];
429  const int facy = ratio[1];
430  const int facz = ratio[2];
431 
432  for (int n = 0; n < ncomp; ++n) {
433  for (int k = clo.z; k <= chi.z; ++k) {
434  int kk = k*facz;
435  for (int j = clo.y; j <= chi.y; ++j) {
436  int jj = j*facy;
438  for (int i = clo.x; i <= chi.x; ++i) {
439  crse(i,j,k,n+ccomp) = fine(i*facx,jj,kk,n+fcomp);
440  }
441  }
442  }
443  }
444 }
445 
446 template<typename T>
448 void amrex_avgdown_nodes (int i, int j, int k, int n, Array4<T> const& crse,
449  Array4<T const> const& fine,
450  int ccomp, int fcomp, IntVect const& ratio) noexcept
451 {
452  crse(i,j,k,n+ccomp) = fine(i*ratio[0],j*ratio[1],k*ratio[2],n+fcomp);
453 }
454 
456 inline
457 void amrex_compute_divergence (Box const& bx, Array4<Real> const& divu,
458  Array4<Real const> const& u,
459  Array4<Real const> const& v,
460  Array4<Real const> const& w,
461  GpuArray<Real,AMREX_SPACEDIM> const& dxinv) noexcept
462 {
463  const auto lo = lbound(bx);
464  const auto hi = ubound(bx);
465  const Real dxi = dxinv[0];
466  const Real dyi = dxinv[1];
467  const Real dzi = dxinv[2];
468 
469  for (int n = 0; n < divu.ncomp; ++n) {
470  for (int k = lo.z; k <= hi.z; ++k) {
471  for (int j = lo.y; j <= hi.y; ++j) {
473  for (int i = lo.x; i <= hi.x; ++i) {
474  divu(i,j,k,n) = dxi * (u(i+1,j,k,n)-u(i,j,k,n))
475  + dyi * (v(i,j+1,k,n)-v(i,j,k,n))
476  + dzi * (w(i,j,k+1,n)-w(i,j,k,n));
477  }
478  }
479  }
480  }
481 }
482 
484 inline
485 void amrex_compute_gradient (Box const& bx, Array4<Real> const& grad,
486  Array4<Real const> const& u,
487  Array4<Real const> const& v,
488  Array4<Real const> const& w,
489  GpuArray<Real,AMREX_SPACEDIM> const& dxinv) noexcept
490 {
491  const auto lo = lbound(bx);
492  const auto hi = ubound(bx);
493  const Real dxi = dxinv[0];
494  const Real dyi = dxinv[1];
495  const Real dzi = dxinv[2];
496 
497  for (int k = lo.z; k <= hi.z; ++k) {
498  for (int j = lo.y; j <= hi.y; ++j) {
500  for (int i = lo.x; i <= hi.x; ++i) {
501  grad(i,j,k,0) = dxi * (u(i+1,j,k,0)-u(i,j,k,0));
502  grad(i,j,k,1) = dyi * (v(i,j+1,k,0)-v(i,j,k,0));
503  grad(i,j,k,2) = dzi * (w(i,j,k+1,0)-w(i,j,k,0));
504  }
505  }
506  }
507 }
508 
510 inline
512  Array4<Real const> const& u_face,
513  Array4<Real const> const& v_face,
514  Array4<Real const> const& w_face,
515  Array4<Real const> const& s_on_x_face,
516  Array4<Real const> const& s_on_y_face,
517  Array4<Real const> const& s_on_z_face,
518  GpuArray<Real,AMREX_SPACEDIM> const& dxinv) noexcept
519 {
520  const auto lo = lbound(bx);
521  const auto hi = ubound(bx);
522  const Real dxi = dxinv[0];
523  const Real dyi = dxinv[1];
524  const Real dzi = dxinv[2];
525 
526  for (int n = 0; n < diff.ncomp; ++n) {
527  for (int k = lo.z; k <= hi.z; ++k) {
528  for (int j = lo.y; j <= hi.y; ++j) {
530  for (int i = lo.x; i <= hi.x; ++i) {
531  diff(i,j,k,n) = Real(0.5)*dxi * (u_face(i+1,j,k)+u_face(i,j,k)) *
532  (s_on_x_face(i+1,j,k,n)-s_on_x_face(i,j,k,n))
533  + Real(0.5)*dyi * (v_face(i,j+1,k)+v_face(i,j,k)) *
534  (s_on_y_face(i,j+1,k,n)-s_on_y_face(i,j,k,n))
535  + Real(0.5)*dzi * (w_face(i,j,k+1)+w_face(i,j,k)) *
536  (s_on_z_face(i,j,k+1,n)-s_on_z_face(i,j,k,n));
537  }
538  }
539  }
540  }
541 }
542 
543 } // namespace amrex
544 
545 #endif
#define AMREX_PRAGMA_SIMD
Definition: AMReX_Extension.H:80
#define AMREX_FORCE_INLINE
Definition: AMReX_Extension.H:119
#define AMREX_GPU_HOST_DEVICE
Definition: AMReX_GpuQualifiers.H:20
int idir
Definition: AMReX_HypreMLABecLap.cpp:1093
Array4< Real > fine
Definition: AMReX_InterpFaceRegister.cpp:90
Array4< Real const > crse
Definition: AMReX_InterpFaceRegister.cpp:92
Definition: AMReX_Amr.cpp:49
BoxND< AMREX_SPACEDIM > Box
Definition: AMReX_BaseFwd.H:27
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void amrex_avg_fc_to_cc(int i, int, int, Array4< CT > const &cc, Array4< FT const > const &fx, int cccomp, GeometryData const &gd) noexcept
Definition: AMReX_MultiFabUtil_1D_C.H:33
AMREX_GPU_HOST_DEVICE void amrex_compute_convective_difference(Box const &bx, Array4< amrex::Real > const &diff, Array4< Real const > const &u_face, Array4< Real const > const &v_face, Array4< Real const > const &s_on_x_face, Array4< Real const > const &s_on_y_face, GpuArray< Real, AMREX_SPACEDIM > const &dxinv) noexcept
Definition: AMReX_MultiFabUtil_2D_C.H:396
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void amrex_avgdown_faces(Box const &bx, Array4< T > const &crse, Array4< T const > const &fine, int ccomp, int fcomp, int ncomp, IntVect const &ratio, int) noexcept
Definition: AMReX_MultiFabUtil_1D_C.H:130
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void amrex_avg_cc_to_fc(int i, int, int, int n, Box const &xbx, Array4< Real > const &fx, Array4< Real const > const &cc, GeometryData const &gd, bool use_harmonic_averaging) noexcept
Definition: AMReX_MultiFabUtil_1D_C.H:75
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Dim3 ubound(Array4< T > const &a) noexcept
Definition: AMReX_Array4.H:315
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Dim3 lbound(Array4< T > const &a) noexcept
Definition: AMReX_Array4.H:308
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void amrex_avgdown_with_vol(int i, int, int, int n, Array4< T > const &crse, Array4< T const > const &fine, Array4< T const > const &fv, int ccomp, int fcomp, IntVect const &ratio) noexcept
Definition: AMReX_MultiFabUtil_1D_C.H:236
IntVectND< AMREX_SPACEDIM > IntVect
Definition: AMReX_BaseFwd.H:30
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void amrex_avg_nd_to_cc(int i, int, int, int n, Array4< Real > const &cc, Array4< Real const > const &nd, int cccomp, int ndcomp) noexcept
Definition: AMReX_MultiFabUtil_1D_C.H:14
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void amrex_avgdown_edges(Box const &bx, Array4< Real > const &crse, Array4< Real const > const &fine, int ccomp, int fcomp, int ncomp, IntVect const &ratio, int) noexcept
Definition: AMReX_MultiFabUtil_1D_C.H:157
AMREX_GPU_HOST_DEVICE void amrex_compute_divergence(Box const &bx, Array4< Real > const &divu, Array4< Real const > const &u, GpuArray< Real, AMREX_SPACEDIM > const &dxinv) noexcept
Definition: AMReX_MultiFabUtil_1D_C.H:282
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void amrex_avg_eg_to_cc(int i, int, int, Array4< Real > const &cc, Array4< Real const > const &Ex, int cccomp) noexcept
Definition: AMReX_MultiFabUtil_1D_C.H:23
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void amrex_avgdown(Box const &bx, Array4< T > const &crse, Array4< T const > const &fine, int ccomp, int fcomp, int ncomp, IntVect const &ratio) noexcept
Definition: AMReX_MultiFabUtil_1D_C.H:195
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void amrex_avgdown_nodes(Box const &bx, Array4< T > const &crse, Array4< T const > const &fine, int ccomp, int fcomp, int ncomp, IntVect const &ratio) noexcept
Definition: AMReX_MultiFabUtil_1D_C.H:253
AMREX_GPU_HOST_DEVICE void amrex_compute_gradient(Box const &bx, Array4< Real > const &grad, Array4< Real const > const &u, GpuArray< Real, AMREX_SPACEDIM > const &dxinv) noexcept
Definition: AMReX_MultiFabUtil_1D_C.H:300
Definition: AMReX_Array4.H:61