Block-Structured AMR Software Framework
AMReX_MLABecLap_2D_K.H
Go to the documentation of this file.
1 #ifndef AMREX_MLABECLAP_2D_K_H_
2 #define AMREX_MLABECLAP_2D_K_H_
3 #include <AMReX_Config.H>
4 
5 namespace amrex {
6 
7 template <typename T>
9 void mlabeclap_adotx (int i, int j, int, int n, Array4<T> const& y,
10  Array4<T const> const& x,
11  Array4<T const> const& a,
12  Array4<T const> const& bX,
13  Array4<T const> const& bY,
14  GpuArray<T,AMREX_SPACEDIM> const& dxinv,
15  T alpha, T beta) noexcept
16 {
17  const T dhx = beta*dxinv[0]*dxinv[0];
18  const T dhy = beta*dxinv[1]*dxinv[1];
19  y(i,j,0,n) = alpha*a(i,j,0)*x(i,j,0,n)
20  - dhx * (bX(i+1,j,0,n)*(x(i+1,j,0,n) - x(i ,j,0,n))
21  - bX(i ,j,0,n)*(x(i ,j,0,n) - x(i-1,j,0,n)))
22  - dhy * (bY(i,j+1,0,n)*(x(i,j+1,0,n) - x(i,j ,0,n))
23  - bY(i,j ,0,n)*(x(i,j ,0,n) - x(i,j-1,0,n)));
24 }
25 
26 template <typename T>
28 void mlabeclap_adotx_os (int i, int j, int, int n, Array4<T> const& y,
29  Array4<T const> const& x,
30  Array4<T const> const& a,
31  Array4<T const> const& bX,
32  Array4<T const> const& bY,
33  Array4<int const> const& osm,
34  GpuArray<T,AMREX_SPACEDIM> const& dxinv,
35  T alpha, T beta) noexcept
36 {
37  const T dhx = beta*dxinv[0]*dxinv[0];
38  const T dhy = beta*dxinv[1]*dxinv[1];
39  if (osm(i,j,0) == 0) {
40  y(i,j,0,n) = T(0.0);
41  } else {
42  y(i,j,0,n) = alpha*a(i,j,0)*x(i,j,0,n)
43  - dhx * (bX(i+1,j,0,n)*(x(i+1,j,0,n) - x(i ,j,0,n))
44  - bX(i ,j,0,n)*(x(i ,j,0,n) - x(i-1,j,0,n)))
45  - dhy * (bY(i,j+1,0,n)*(x(i,j+1,0,n) - x(i,j ,0,n))
46  - bY(i,j ,0,n)*(x(i,j ,0,n) - x(i,j-1,0,n)));
47  }
48 }
49 
50 template <typename T>
52 void mlabeclap_normalize (int i, int j, int, int n, Array4<T> const& x,
53  Array4<T const> const& a,
54  Array4<T const> const& bX,
55  Array4<T const> const& bY,
56  GpuArray<T,AMREX_SPACEDIM> const& dxinv,
57  T alpha, T beta) noexcept
58 {
59  const T dhx = beta*dxinv[0]*dxinv[0];
60  const T dhy = beta*dxinv[1]*dxinv[1];
61  x(i,j,0,n) /= alpha*a(i,j,0)
62  + dhx*(bX(i,j,0,n)+bX(i+1,j,0,n))
63  + dhy*(bY(i,j,0,n)+bY(i,j+1,0,n));
64 }
65 
66 template <typename T>
68 void mlabeclap_flux_x (Box const& box, Array4<T> const& fx, Array4<T const> const& sol,
69  Array4<T const> const& bx, T fac, int ncomp) noexcept
70 {
71  const auto lo = amrex::lbound(box);
72  const auto hi = amrex::ubound(box);
73 
74  for (int n = 0; n < ncomp; ++n) {
75  for (int j = lo.y; j <= hi.y; ++j) {
77  for (int i = lo.x; i <= hi.x; ++i) {
78  fx(i,j,0,n) = -fac*bx(i,j,0,n)*(sol(i,j,0,n)-sol(i-1,j,0,n));
79  }
80  }
81  }
82 }
83 
84 template <typename T>
86 void mlabeclap_flux_xface (Box const& box, Array4<T> const& fx, Array4<T const> const& sol,
87  Array4<T const> const& bx, T fac, int xlen, int ncomp) noexcept
88 {
89  const auto lo = amrex::lbound(box);
90  const auto hi = amrex::ubound(box);
91 
92  for (int n = 0; n < ncomp; ++n) {
93  for (int j = lo.y; j <= hi.y; ++j) {
94  int i = lo.x;
95  fx(i,j,0,n) = -fac*bx(i,j,0,n)*(sol(i,j,0,n)-sol(i-1,j,0,n));
96  i += xlen;
97  fx(i,j,0,n) = -fac*bx(i,j,0,n)*(sol(i,j,0,n)-sol(i-1,j,0,n));
98  }
99  }
100 }
101 
102 template <typename T>
104 void mlabeclap_flux_y (Box const& box, Array4<T> const& fy, Array4<T const> const& sol,
105  Array4<T const> const& by, T fac, int ncomp) noexcept
106 {
107  const auto lo = amrex::lbound(box);
108  const auto hi = amrex::ubound(box);
109 
110  for (int n = 0; n < ncomp; ++n) {
111  for (int j = lo.y; j <= hi.y; ++j) {
113  for (int i = lo.x; i <= hi.x; ++i) {
114  fy(i,j,0,n) = -fac*by(i,j,0,n)*(sol(i,j,0,n)-sol(i,j-1,0,n));
115  }
116  }
117  }
118 }
119 
120 template <typename T>
122 void mlabeclap_flux_yface (Box const& box, Array4<T> const& fy, Array4<T const> const& sol,
123  Array4<T const> const& by, T fac, int ylen, int ncomp) noexcept
124 {
125  const auto lo = amrex::lbound(box);
126  const auto hi = amrex::ubound(box);
127 
128  for (int n = 0; n < ncomp; ++n) {
129  int j = lo.y;
131  for (int i = lo.x; i <= hi.x; ++i) {
132  fy(i,j,0,n) = -fac*by(i,j,0,n)*(sol(i,j,0,n)-sol(i,j-1,0,n));
133  }
134  j += ylen;
136  for (int i = lo.x; i <= hi.x; ++i) {
137  fy(i,j,0,n) = -fac*by(i,j,0,n)*(sol(i,j,0,n)-sol(i,j-1,0,n));
138  }
139  }
140 }
141 
142 template <typename T>
144 void abec_gsrb (int i, int j, int, int n, Array4<T> const& phi, Array4<T const> const& rhs,
145  T alpha, Array4<T const> const& a,
146  T dhx, T dhy,
147  Array4<T const> const& bX, Array4<T const> const& bY,
148  Array4<int const> const& m0, Array4<int const> const& m2,
149  Array4<int const> const& m1, Array4<int const> const& m3,
150  Array4<T const> const& f0, Array4<T const> const& f2,
151  Array4<T const> const& f1, Array4<T const> const& f3,
152  Box const& vbox, int redblack) noexcept
153 {
154  if ((i+j+redblack)%2 == 0) {
155  const auto vlo = amrex::lbound(vbox);
156  const auto vhi = amrex::ubound(vbox);
157 
158  T cf0 = (i == vlo.x && m0(vlo.x-1,j,0) > 0)
159  ? f0(vlo.x,j,0,n) : T(0.0);
160  T cf1 = (j == vlo.y && m1(i,vlo.y-1,0) > 0)
161  ? f1(i,vlo.y,0,n) : T(0.0);
162  T cf2 = (i == vhi.x && m2(vhi.x+1,j,0) > 0)
163  ? f2(vhi.x,j,0,n) : T(0.0);
164  T cf3 = (j == vhi.y && m3(i,vhi.y+1,0) > 0)
165  ? f3(i,vhi.y,0,n) : T(0.0);
166 
167  T delta = dhx*(bX(i,j,0,n)*cf0 + bX(i+1,j,0,n)*cf2)
168  + dhy*(bY(i,j,0,n)*cf1 + bY(i,j+1,0,n)*cf3);
169 
170  T gamma = alpha*a(i,j,0)
171  + dhx*( bX(i,j,0,n) + bX(i+1,j,0,n) )
172  + dhy*( bY(i,j,0,n) + bY(i,j+1,0,n) );
173 
174  T rho = dhx*(bX(i ,j ,0,n)*phi(i-1,j ,0,n)
175  + bX(i+1,j ,0,n)*phi(i+1,j ,0,n))
176  +dhy*(bY(i ,j ,0,n)*phi(i ,j-1,0,n)
177  + bY(i ,j+1,0,n)*phi(i ,j+1,0,n));
178 
179  phi(i,j,0,n) = (rhs(i,j,0,n) + rho - phi(i,j,0,n)*delta)
180  / (gamma - delta);
181  }
182 }
183 
184 template <typename T>
186 void abec_gsrb_os (int i, int j, int, int n, Array4<T> const& phi, Array4<T const> const& rhs,
187  T alpha, Array4<T const> const& a,
188  T dhx, T dhy,
189  Array4<T const> const& bX, Array4<T const> const& bY,
190  Array4<int const> const& m0, Array4<int const> const& m2,
191  Array4<int const> const& m1, Array4<int const> const& m3,
192  Array4<T const> const& f0, Array4<T const> const& f2,
193  Array4<T const> const& f1, Array4<T const> const& f3,
194  Array4<int const> const& osm,
195  Box const& vbox, int redblack) noexcept
196 {
197  if ((i+j+redblack)%2 == 0) {
198  if (osm(i,j,0) == 0) {
199  phi(i,j,0,n) = T(0.0);
200  } else {
201  const auto vlo = amrex::lbound(vbox);
202  const auto vhi = amrex::ubound(vbox);
203 
204  T cf0 = (i == vlo.x && m0(vlo.x-1,j,0) > 0)
205  ? f0(vlo.x,j,0,n) : T(0.0);
206  T cf1 = (j == vlo.y && m1(i,vlo.y-1,0) > 0)
207  ? f1(i,vlo.y,0,n) : T(0.0);
208  T cf2 = (i == vhi.x && m2(vhi.x+1,j,0) > 0)
209  ? f2(vhi.x,j,0,n) : T(0.0);
210  T cf3 = (j == vhi.y && m3(i,vhi.y+1,0) > 0)
211  ? f3(i,vhi.y,0,n) : T(0.0);
212 
213  T delta = dhx*(bX(i,j,0,n)*cf0 + bX(i+1,j,0,n)*cf2)
214  + dhy*(bY(i,j,0,n)*cf1 + bY(i,j+1,0,n)*cf3);
215 
216  T gamma = alpha*a(i,j,0)
217  + dhx*( bX(i,j,0,n) + bX(i+1,j,0,n) )
218  + dhy*( bY(i,j,0,n) + bY(i,j+1,0,n) );
219 
220  T rho = dhx*(bX(i ,j ,0,n)*phi(i-1,j ,0,n)
221  + bX(i+1,j ,0,n)*phi(i+1,j ,0,n))
222  +dhy*(bY(i ,j ,0,n)*phi(i ,j-1,0,n)
223  + bY(i ,j+1,0,n)*phi(i ,j+1,0,n));
224 
225  phi(i,j,0,n) = (rhs(i,j,0,n) + rho - phi(i,j,0,n)*delta)
226  / (gamma - delta);
227  }
228  }
229 }
230 
231 template <typename T>
233 void abec_jacobi (int i, int j, int, int n, Array4<T> const& phi,
234  Array4<T const> const& rhs, Array4< T const> const& Ax,
235  T alpha, Array4<T const> const& a,
236  T dhx, T dhy,
237  Array4<T const> const& bX, Array4<T const> const& bY,
238  Array4<int const> const& m0, Array4<int const> const& m2,
239  Array4<int const> const& m1, Array4<int const> const& m3,
240  Array4<T const> const& f0, Array4<T const> const& f2,
241  Array4<T const> const& f1, Array4<T const> const& f3,
242  Box const& vbox) noexcept
243 {
244  const auto vlo = amrex::lbound(vbox);
245  const auto vhi = amrex::ubound(vbox);
246 
247  T cf0 = (i == vlo.x && m0(vlo.x-1,j,0) > 0)
248  ? f0(vlo.x,j,0,n) : T(0.0);
249  T cf1 = (j == vlo.y && m1(i,vlo.y-1,0) > 0)
250  ? f1(i,vlo.y,0,n) : T(0.0);
251  T cf2 = (i == vhi.x && m2(vhi.x+1,j,0) > 0)
252  ? f2(vhi.x,j,0,n) : T(0.0);
253  T cf3 = (j == vhi.y && m3(i,vhi.y+1,0) > 0)
254  ? f3(i,vhi.y,0,n) : T(0.0);
255 
256  T delta = dhx*(bX(i,j,0,n)*cf0 + bX(i+1,j,0,n)*cf2)
257  + dhy*(bY(i,j,0,n)*cf1 + bY(i,j+1,0,n)*cf3);
258 
259  T gamma = alpha*a(i,j,0)
260  + dhx*( bX(i,j,0,n) + bX(i+1,j,0,n) )
261  + dhy*( bY(i,j,0,n) + bY(i,j+1,0,n) );
262 
263  phi(i,j,0,n) += T(2.0/3.0) * (rhs(i,j,0,n) - Ax(i,j,0,n)) / (gamma - delta);
264 }
265 
266 template <typename T>
268 void abec_jacobi_os (int i, int j, int, int n, Array4<T> const& phi,
269  Array4<T const> const& rhs, Array4<T const> const& Ax,
270  T alpha, Array4<T const> const& a,
271  T dhx, T dhy,
272  Array4<T const> const& bX, Array4<T const> const& bY,
273  Array4<int const> const& m0, Array4<int const> const& m2,
274  Array4<int const> const& m1, Array4<int const> const& m3,
275  Array4<T const> const& f0, Array4<T const> const& f2,
276  Array4<T const> const& f1, Array4<T const> const& f3,
277  Array4<int const> const& osm,
278  Box const& vbox) noexcept
279 {
280  if (osm(i,j,0) == 0) {
281  phi(i,j,0,n) = T(0.0);
282  } else {
283  const auto vlo = amrex::lbound(vbox);
284  const auto vhi = amrex::ubound(vbox);
285 
286  T cf0 = (i == vlo.x && m0(vlo.x-1,j,0) > 0)
287  ? f0(vlo.x,j,0,n) : T(0.0);
288  T cf1 = (j == vlo.y && m1(i,vlo.y-1,0) > 0)
289  ? f1(i,vlo.y,0,n) : T(0.0);
290  T cf2 = (i == vhi.x && m2(vhi.x+1,j,0) > 0)
291  ? f2(vhi.x,j,0,n) : T(0.0);
292  T cf3 = (j == vhi.y && m3(i,vhi.y+1,0) > 0)
293  ? f3(i,vhi.y,0,n) : T(0.0);
294 
295  T delta = dhx*(bX(i,j,0,n)*cf0 + bX(i+1,j,0,n)*cf2)
296  + dhy*(bY(i,j,0,n)*cf1 + bY(i,j+1,0,n)*cf3);
297 
298  T gamma = alpha*a(i,j,0)
299  + dhx*( bX(i,j,0,n) + bX(i+1,j,0,n) )
300  + dhy*( bY(i,j,0,n) + bY(i,j+1,0,n) );
301 
302  phi(i,j,0,n) += T(2.0/3.0) * (rhs(i,j,0,n) - Ax(i,j,0,n)) / (gamma - delta);
303  }
304 }
305 
306 template <typename T>
309  Box const& box, Array4<T> const& phi, Array4<T const> const& rhs,
310  T alpha, Array4<T const> const& a,
311  T dhx, T dhy,
312  Array4<T const> const& bX, Array4<T const> const& bY,
313  Array4<int const> const& m0, Array4<int const> const& m2,
314  Array4<int const> const& m1, Array4<int const> const& m3,
315  Array4<T const> const& f0, Array4<T const> const& f2,
316  Array4<T const> const& f1, Array4<T const> const& f3,
317  Box const& vbox, int redblack, int nc) noexcept
318 {
319 
320  const auto lo = amrex::lbound(box);
321  const auto hi = amrex::ubound(box);
322  const auto vlo = amrex::lbound(vbox);
323  const auto vhi = amrex::ubound(vbox);
324 
325  // idir is the direction in which we will do the tridiagonal solve --
326  // it should be the direction in which the mesh spacing is much larger
327  // than in the other directions
328  // int idir = 1;
329 
330  // This should be moved outside the kernel!
331  if (dhy <= dhx) { amrex::Abort("dhy is supposed to be much larger than dhx"); }
332 
333  int ilen = hi.y - lo.y + 1;
334 
335  // This should be moved outside the kernel!
336  if (ilen > 32) { amrex::Abort("abec_gsrb_with_line_solve is hard-wired to be no longer than 32"); }
337 
338  Array1D<T,0,31> a_ls;
339  Array1D<T,0,31> b_ls;
340  Array1D<T,0,31> c_ls;
341  Array1D<T,0,31> r_ls;
342  Array1D<T,0,31> u_ls;
343  Array1D<T,0,31> gam;
344 
345  for (int n = 0; n < nc; ++n) {
347  for (int i = lo.x; i <= hi.x; ++i) {
348  if ((i+redblack)%2 == 0) {
349  for (int j = lo.y; j <= hi.y; ++j) {
350  T gamma = alpha*a(i,j,0)
351  + dhx*(bX(i,j,0,n)+bX(i+1,j,0,n))
352  + dhy*(bY(i,j,0,n)+bY(i,j+1,0,n));
353 
354  T cf0 = (i == vlo.x && m0(vlo.x-1,j,0) > 0)
355  ? f0(vlo.x,j,0,n) : T(0.0);
356  T cf1 = (j == vlo.y && m1(i,vlo.y-1,0) > 0)
357  ? f1(i,vlo.y,0,n) : T(0.0);
358  T cf2 = (i == vhi.x && m2(vhi.x+1,j,0) > 0)
359  ? f2(vhi.x,j,0,n) : T(0.0);
360  T cf3 = (j == vhi.y && m3(i,vhi.y+1,0) > 0)
361  ? f3(i,vhi.y,0,n) : T(0.0);
362 
363  T g_m_d = gamma
364  - (dhx*(bX(i,j,0,n)*cf0 + bX(i+1,j,0,n)*cf2)
365  + dhy*(bY(i,j,0,n)*cf1 + bY(i,j+1,0,n)*cf3));
366 
367  T rho = dhx*( bX(i ,j,0,n)*phi(i-1,j,0,n)
368  + bX(i+1,j,0,n)*phi(i+1,j,0,n) );
369 
370  // We have already accounted for this external boundary in the coefficient of phi(i,j,k,n)
371  if (i == vlo.x && m0(vlo.x-1,j,0) > 0) {
372  rho -= dhx*bX(i ,j,0,n)*phi(i-1,j,0,n);
373  }
374  if (i == vhi.x && m3(vhi.x+1,j,0) > 0) {
375  rho -= dhx*bX(i+1,j,0,n)*phi(i+1,j,0,n);
376  }
377 
378  a_ls(j-lo.y) = -dhy*bY(i,j,0,n);
379  b_ls(j-lo.y) = g_m_d;
380  c_ls(j-lo.y) = -dhy*bY(i,j+1,0,n);
381  u_ls(j-lo.y) = T(0.);
382  r_ls(j-lo.y) = rhs(i,j,0,n) + rho;
383 
384  if (j == lo.y) {
385  a_ls(j-lo.y) = T(0.);
386  if (!(m1(i,vlo.y-1,0) > 0)) { r_ls(j-lo.y) += dhy*bY(i,j,0,n)*phi(i,j-1,0,n); }
387  }
388  if (j == hi.y) {
389  c_ls(j-lo.y) = T(0.);
390  if (!(m3(i,vhi.y+1,0) > 0)) { r_ls(j-lo.y) += dhy*bY(i,j+1,0,n)*phi(i,j+1,0,n); }
391  }
392  }
393 // This is the tridiagonal solve
394  {
395  T bet = b_ls(0);
396  u_ls(0) = r_ls(0) / bet;
397 
398  for (int jj = 1; jj <= ilen-1; jj++) {
399  gam(jj) = c_ls(jj-1) / bet;
400  bet = b_ls(jj) - a_ls(jj)*gam(jj);
401  if (bet == 0) { amrex::Abort(">>>TRIDIAG FAILED"); }
402  u_ls(jj) = (r_ls(jj)-a_ls(jj)*u_ls(jj-1)) / bet;
403  }
404 
405  for (int jj = ilen-2; jj >= 0; jj--) {
406  u_ls(jj) = u_ls(jj) - gam(jj+1)*u_ls(jj+1);
407  }
408  }
409 
410  for (int j = lo.y; j <= hi.y; ++j) {
411  phi(i,j,0,n) = u_ls(j-lo.y);
412  }
413  }
414  }
415  }
416 }
417 
418 template <typename T>
420 void overset_rescale_bcoef_x (Box const& box, Array4<T> const& bX, Array4<int const> const& osm,
421  int ncomp, T osfac) noexcept
422 {
423  const auto lo = amrex::lbound(box);
424  const auto hi = amrex::ubound(box);
425  for (int n = 0; n < ncomp; ++n) {
426  for (int j = lo.y; j <= hi.y; ++j) {
427  for (int i = lo.x; i <= hi.x; ++i) {
428  if ((osm(i-1,j,0)+osm(i,j,0)) == 1) {
429  bX(i,j,0,n) *= osfac;
430  }
431  }}
432  }
433 }
434 
435 template <typename T>
437 void overset_rescale_bcoef_y (Box const& box, Array4<T> const& bY, Array4<int const> const& osm,
438  int ncomp, T osfac) noexcept
439 {
440  const auto lo = amrex::lbound(box);
441  const auto hi = amrex::ubound(box);
442  for (int n = 0; n < ncomp; ++n) {
443  for (int j = lo.y; j <= hi.y; ++j) {
444  for (int i = lo.x; i <= hi.x; ++i) {
445  if ((osm(i,j-1,0)+osm(i,j,0)) == 1) {
446  bY(i,j,0,n) *= osfac;
447  }
448  }}
449  }
450 }
451 
452 }
453 #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
Definition: AMReX_Amr.cpp:49
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void overset_rescale_bcoef_x(Box const &box, Array4< T > const &bX, Array4< int const > const &osm, int ncomp, T osfac) noexcept
Definition: AMReX_MLABecLap_1D_K.H:239
BoxND< AMREX_SPACEDIM > Box
Definition: AMReX_BaseFwd.H:27
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlabeclap_adotx_os(int i, int, int, int n, Array4< T > const &y, Array4< T const > const &x, Array4< T const > const &a, Array4< T const > const &bX, Array4< int const > const &osm, GpuArray< T, AMREX_SPACEDIM > const &dxinv, T alpha, T beta) noexcept
Definition: AMReX_MLABecLap_1D_K.H:24
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlabeclap_flux_x(Box const &box, Array4< T > const &fx, Array4< T const > const &sol, Array4< T const > const &bx, T fac, int ncomp) noexcept
Definition: AMReX_MLABecLap_1D_K.H:56
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlabeclap_flux_y(Box const &box, Array4< T > const &fy, Array4< T const > const &sol, Array4< T const > const &by, T fac, int ncomp) noexcept
Definition: AMReX_MLABecLap_2D_K.H:104
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void abec_gsrb_os(int i, int, int, int n, Array4< T > const &phi, Array4< T const > const &rhs, T alpha, Array4< T const > const &a, T dhx, Array4< T const > const &bX, Array4< int const > const &m0, Array4< int const > const &m1, Array4< T const > const &f0, Array4< T const > const &f1, Array4< int const > const &osm, Box const &vbox, int redblack) noexcept
Definition: AMReX_MLABecLap_1D_K.H:121
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 overset_rescale_bcoef_y(Box const &box, Array4< T > const &bY, Array4< int const > const &osm, int ncomp, T osfac) noexcept
Definition: AMReX_MLABecLap_2D_K.H:437
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void abec_jacobi(int i, int, int, int n, Array4< T > const &phi, Array4< T const > const &rhs, Array4< T const > const &Ax, T alpha, Array4< T const > const &a, T dhx, Array4< T const > const &bX, Array4< int const > const &m0, Array4< int const > const &m1, Array4< T const > const &f0, Array4< T const > const &f1, Box const &vbox) noexcept
Definition: AMReX_MLABecLap_1D_K.H:160
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void abec_gsrb(int i, int, int, int n, Array4< T > const &phi, Array4< T const > const &rhs, T alpha, Array4< T const > const &a, T dhx, Array4< T const > const &bX, Array4< int const > const &m0, Array4< int const > const &m1, Array4< T const > const &f0, Array4< T const > const &f1, Box const &vbox, int redblack) noexcept
Definition: AMReX_MLABecLap_1D_K.H:87
AMREX_FORCE_INLINE void abec_gsrb_with_line_solve(Box const &, Array4< T > const &, Array4< T const > const &, T, Array4< T const > const &, T, Array4< T const > const &, Array4< int const > const &, Array4< int const > const &, Array4< T const > const &, Array4< T const > const &, Box const &, int, int) noexcept
Definition: AMReX_MLABecLap_1D_K.H:223
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlabeclap_flux_yface(Box const &box, Array4< T > const &fy, Array4< T const > const &sol, Array4< T const > const &by, T fac, int ylen, int ncomp) noexcept
Definition: AMReX_MLABecLap_2D_K.H:122
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlabeclap_normalize(int i, int, int, int n, Array4< T > const &x, Array4< T const > const &a, Array4< T const > const &bX, GpuArray< T, AMREX_SPACEDIM > const &dxinv, T alpha, T beta) noexcept
Definition: AMReX_MLABecLap_1D_K.H:44
void Abort(const std::string &msg)
Print out message to cerr and exit via abort().
Definition: AMReX.cpp:221
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void abec_jacobi_os(int i, int, int, int n, Array4< T > const &phi, Array4< T const > const &rhs, Array4< T const > const &Ax, T alpha, Array4< T const > const &a, T dhx, Array4< T const > const &bX, Array4< int const > const &m0, Array4< int const > const &m1, Array4< T const > const &f0, Array4< T const > const &f1, Array4< int const > const &osm, Box const &vbox) noexcept
Definition: AMReX_MLABecLap_1D_K.H:189
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlabeclap_flux_xface(Box const &box, Array4< T > const &fx, Array4< T const > const &sol, Array4< T const > const &bx, T fac, int xlen, int ncomp) noexcept
Definition: AMReX_MLABecLap_1D_K.H:72
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlabeclap_adotx(int i, int, int, int n, Array4< T > const &y, Array4< T const > const &x, Array4< T const > const &a, Array4< T const > const &bX, GpuArray< T, AMREX_SPACEDIM > const &dxinv, T alpha, T beta) noexcept
Definition: AMReX_MLABecLap_1D_K.H:9
Definition: AMReX_Array.H:161
Definition: AMReX_Array4.H:61
Definition: AMReX_Array.H:34