| 641 | } |
| 642 | |
| 643 | void RadSolve::levelFluxFaceToCenter(int level, const Array<MultiFab, AMREX_SPACEDIM>& Flux, |
| 644 | MultiFab& flx, int iflx) |
| 645 | { |
| 646 | int nflx = flx.nComp(); |
| 647 | |
| 648 | const Geometry& geom = parent->Geom(level); |
| 649 | auto geomdata = geom.data(); |
| 650 | |
| 651 | for (int idim = 0; idim < AMREX_SPACEDIM; idim++) |
| 652 | { |
| 653 | #ifdef _OPENMP |
| 654 | #pragma omp parallel |
| 655 | #endif |
| 656 | for (MFIter mfi(flx,true); mfi.isValid(); ++mfi) |
| 657 | { |
| 658 | const Box& bx = mfi.tilebox(); |
| 659 | |
| 660 | auto t = flx[mfi].array(); |
| 661 | auto f = Flux[idim][mfi].array(); |
| 662 | |
| 663 | amrex::ParallelFor(bx, |
| 664 | [=] AMREX_GPU_HOST_DEVICE (int i, int j, int k) |
| 665 | { |
| 666 | int it = idim * NGROUPS + iflx; |
| 667 | |
| 668 | Real r_left, s_left; |
| 669 | edge_center_metric(i, j, k, idim, geomdata, r_left, s_left); |
| 670 | |
| 671 | Real r_right, s_right; |
| 672 | edge_center_metric(i+1, j, k, idim, geomdata, r_right, s_right); |
| 673 | |
| 674 | if (idim == 0) { |
| 675 | t(i,j,k,it) = (f(i,j,k) / (r_left + 1.e-50_rt) + f(i+1,j,k) / r_right) * 0.5_rt; |
| 676 | } |
| 677 | else if (idim == 1) { |
| 678 | t(i,j,k,it) = (f(i,j,k) / r_left + f(i,j+1,k) / r_left) * 0.5_rt; |
| 679 | } |
| 680 | else { |
| 681 | t(i,j,k,it) = (f(i,j,k) + f(i,j,k+1)) * 0.5_rt; |
| 682 | } |
| 683 | }); |
| 684 | } |
| 685 | } |
| 686 | } |
| 687 | |
| 688 | void RadSolve::levelFlux(int level, |
| 689 | Array<MultiFab, AMREX_SPACEDIM>& Flux, |
no test coverage detected