Apply the terrain Poisson matrix to a cell-centered field.
307 Real h_xi, h_eta, h_zeta;
314 Real px_hi = (
x(i+1,j,k) -
x(i,j,k)) * dxinv;
317 Real pz_hi_md_hi =
myhalf * (
x(i+1,j ,k+1) +
x(i ,j ,k+1)
318 -
x(i+1,j ,k ) -
x(i ,j ,k ) );
319 h_xi =
fourth * ( zp(i+1,j ,k+1) - zp(i-1,j ,k+1)
320 +zp(i+1,j+1,k+1) - zp(i-1,j+1,k+1) ) * dxinv;
321 h_zeta =
fourth * ( zp(i+1,j ,k+2) - zp(i+1,j ,k )
322 +zp(i+1,j+1,k+2) - zp(i+1,j+1,k ) );
323 pz_hi_md_hi *= h_xi / h_zeta;
326 Real pz_hi_md_lo =
myhalf * (
x(i+1,j ,k ) +
x(i ,j ,k )
327 -
x(i+1,j ,k-1) -
x(i ,j ,k-1) );
328 h_xi =
fourth * ( zp(i+1,j ,k ) - zp(i-1,j ,k )
329 +zp(i+1,j+1,k ) - zp(i-1,j+1,k ) ) * dxinv;
330 h_zeta =
fourth * ( zp(i+1,j ,k+1) - zp(i+1,j ,k-1)
331 +zp(i+1,j+1,k+1) - zp(i+1,j+1,k-1) );
332 pz_hi_md_lo *= h_xi / h_zeta;
335 px_hi -=
myhalf * ( pz_hi_md_hi + pz_hi_md_lo );
340 Real px_lo = (
x(i,j,k) -
x(i-1,j,k)) * dxinv;
344 -
x(i,j,k ) -
x(i-1,j,k ) );
345 h_xi =
fourth * ( zp(i,j ,k+1) - zp(i-2,j ,k+1)
346 +zp(i,j+1,k+1) - zp(i-2,j+1,k+1) ) * dxinv;
347 h_zeta =
fourth * ( zp(i,j ,k+2) - zp(i ,j ,k )
348 +zp(i,j+1,k+2) - zp(i ,j+1,k ) );
349 pz_lo_md_hi *= h_xi / h_zeta;
353 -
x(i,j,k-1) -
x(i-1,j,k-1) );
354 h_xi =
fourth * ( zp(i,j ,k ) - zp(i-2,j ,k )
355 +zp(i,j+1,k ) - zp(i-2,j+1,k ) ) * dxinv;
356 h_zeta =
fourth * ( zp(i,j ,k+1) - zp(i ,j ,k-1)
357 +zp(i,j+1,k+1) - zp(i ,j+1,k-1) );
358 pz_lo_md_lo *= h_xi / h_zeta;
361 px_lo -=
myhalf * ( pz_lo_md_hi + pz_lo_md_lo );
367 Real py_hi = (
x(i,j+1,k) -
x(i,j,k)) * dyinv;
371 -
x(i,j+1,k ) -
x(i,j,k ) );
372 h_eta =
fourth * ( zp(i ,j+1,k+1) - zp(i ,j-1,k+1)
373 +zp(i+1,j+1,k+1) - zp(i+1,j-1,k+1) ) * dyinv;
374 h_zeta =
fourth * ( zp(i ,j+1,k+2) - zp(i ,j+1,k )
375 +zp(i+1,j+1,k+2) - zp(i+1,j+1,k ) );
376 pz_md_hi_hi *= h_eta/ h_zeta;
380 -
x(i,j+1,k-1) -
x(i,j,k-1) );
381 h_eta =
fourth * ( zp(i ,j+1,k ) - zp(i ,j-1,k)
382 +zp(i+1,j+1,k ) - zp(i+1,j-1,k) ) * dyinv;
383 h_zeta =
fourth * ( zp(i ,j+1,k+1) - zp(i ,j+1,k-1)
384 +zp(i+1,j+1,k+1) - zp(i+1,j+1,k-1) );
385 pz_md_hi_lo *= h_eta/ h_zeta;
388 py_hi -=
myhalf * ( pz_md_hi_hi + pz_md_hi_lo );
394 Real py_lo = (
x(i,j,k) -
x(i,j-1,k)) * dyinv;
397 Real pz_md_lo_hi =
myhalf * (
x(i ,j,k+1) +
x(i ,j-1,k+1)
398 -
x(i ,j,k ) -
x(i ,j-1,k ) );
399 h_eta =
fourth * ( zp(i ,j,k+1) - zp(i ,j-2,k+1)
400 +zp(i+1,j,k+1) - zp(i+1,j-2,k+1) ) * dyinv;
401 h_zeta =
fourth * ( zp(i ,j,k+2) - zp(i ,j ,k )
402 +zp(i+1,j,k+2) - zp(i+1,j ,k ) );
403 pz_md_lo_hi *= h_eta/ h_zeta;
407 -
x(i ,j,k-1) -
x(i ,j-1,k-1) );
408 h_eta =
fourth * ( zp(i ,j,k ) - zp(i ,j-2,k )
409 +zp(i+1,j,k ) - zp(i+1,j-2,k ) ) * dyinv;
410 h_zeta =
fourth * ( zp(i ,j,k+1) - zp(i ,j ,k-1)
411 +zp(i+1,j,k+1) - zp(i+1,j ,k-1) );
412 pz_md_lo_lo *= h_eta/ h_zeta;
415 py_lo -=
myhalf * ( pz_md_lo_hi + pz_md_lo_lo );
421 Real pz_hi =
x(i,j,k+1) -
x(i,j,k );
422 Real hzeta_inv_on_zhi =
amrex::Real(8.0) / ( (zp(i,j,k+2) + zp(i+1,j,k+2) + zp(i,j+1,k+2) + zp(i+1,j+1,k+2))
423 -(zp(i,j,k ) + zp(i+1,j,k ) + zp(i,j+1,k ) + zp(i+1,j+1,k )) );
424 pz_hi *= hzeta_inv_on_zhi;
427 Real px_hi_md_hi =
myhalf * (
x(i+1,j,k+1) -
x(i ,j ,k+1)
428 +
x(i+1,j,k ) -
x(i ,j ,k )) * dxinv;
429 Real px_lo_md_hi =
myhalf * (
x(i ,j,k+1) -
x(i-1,j ,k+1)
430 +
x(i ,j,k ) -
x(i-1,j ,k )) * dxinv;
431 Real py_md_hi_hi =
myhalf * (
x(i,j+1,k+1) -
x(i ,j ,k+1)
432 +
x(i,j+1,k ) -
x(i ,j ,k )) * dyinv;
433 Real py_md_lo_hi =
myhalf * (
x(i,j ,k+1) -
x(i ,j-1,k+1)
434 +
x(i,j ,k ) -
x(i ,j-1,k )) * dyinv;
437 Real h_xi_on_zhi =
myhalf * ( zp(i+1,j+1,k+1) + zp(i+1,j,k+1) - zp(i,j+1,k+1) - zp(i,j,k+1) ) * dxinv;
438 Real h_eta_on_zhi =
myhalf * ( zp(i+1,j+1,k+1) + zp(i,j+1,k+1) - zp(i+1,j,k+1) - zp(i,j,k+1) ) * dyinv;
442 pz_hi -=
myhalf * h_xi_on_zhi * ( (px_hi_md_hi + px_lo_md_hi) - (pz_hi_md_hi + pz_lo_md_hi) );
443 pz_hi -=
myhalf * h_eta_on_zhi * ( (py_md_hi_hi + py_md_lo_hi) - (pz_md_hi_hi + pz_md_lo_hi) );
449 Real pz_lo =
x(i,j,k ) -
x(i,j,k-1);
450 Real hzeta_inv_on_zlo =
amrex::Real(8.0) / ( (zp(i,j,k+1) + zp(i+1,j,k+1) + zp(i,j+1,k+1) + zp(i+1,j+1,k+1))
451 -(zp(i,j,k-1) + zp(i+1,j,k-1) + zp(i,j+1,k-1) + zp(i+1,j+1,k-1)) );
452 pz_lo *= hzeta_inv_on_zlo;
455 Real px_hi_md_lo =
myhalf * (
x(i+1,j ,k ) -
x(i ,j ,k )
456 +
x(i+1,j ,k-1) -
x(i ,j ,k-1)) * dxinv;
457 Real px_lo_md_lo =
myhalf * (
x(i ,j ,k ) -
x(i-1,j ,k )
458 +
x(i ,j ,k-1) -
x(i-1,j ,k-1)) * dxinv;
459 Real py_md_hi_lo =
myhalf * (
x(i ,j+1,k ) -
x(i ,j ,k )
460 +
x(i ,j+1,k-1) -
x(i ,j ,k-1)) * dyinv;
461 Real py_md_lo_lo =
myhalf * (
x(i ,j ,k ) -
x(i ,j-1,k )
462 +
x(i ,j ,k-1) -
x(i ,j-1,k-1)) * dyinv;
465 Real h_xi_on_zlo =
myhalf * (zp(i+1,j+1,k) + zp(i+1,j,k) - zp(i,j+1,k) - zp(i,j,k)) * dxinv;
466 Real h_eta_on_zlo =
myhalf * (zp(i+1,j+1,k) + zp(i,j+1,k) - zp(i+1,j,k) - zp(i,j,k)) * dyinv;
470 pz_lo -=
myhalf * h_xi_on_zlo * ( (px_hi_md_lo + px_lo_md_lo) - (pz_hi_md_lo + pz_lo_md_lo) );
471 pz_lo -=
myhalf * h_eta_on_zlo * ( (py_md_hi_lo + py_md_lo_lo) - (pz_md_hi_lo + pz_md_lo_lo) );
494 if (k == 0) pz_lo =
zero;
496 y(i,j,k) = (ax(i+1,j,k)*px_hi - ax(i,j,k)*px_lo) * dxinv
497 +(ay(i,j+1,k)*py_hi - ay(i,j,k)*py_lo) * dyinv
498 +(az(i,j,k+1)*pz_hi - az(i,j,k)*pz_lo) * dzinv;
499 y(i,j,k) /= dJ(i,j,k);
constexpr amrex::Real fourth
Definition: ERF_Constants.H:14
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T terrpoisson_flux_x(int i, int j, int k, amrex::Array4< T const > const &sol, amrex::Array4< T const > const &zp, T dxinv) noexcept
Definition: ERF_TerrainPoisson_3D_K.H:24
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T terrpoisson_flux_z(int i, int j, int k, amrex::Array4< T const > const &sol, amrex::Array4< T const > const &zp, T dxinv, T dyinv) noexcept
Definition: ERF_TerrainPoisson_3D_K.H:125
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T terrpoisson_flux_y(int i, int j, int k, amrex::Array4< T const > const &sol, amrex::Array4< T const > const &zp, T dyinv) noexcept
Definition: ERF_TerrainPoisson_3D_K.H:75