| 925 | |
| 926 | // <MGFLD routines> |
| 927 | void RadSolve::computeBCoeffs(MultiFab& bcoefs, int idim, |
| 928 | MultiFab& kappa_r, int kcomp, |
| 929 | MultiFab& lambda, int lamcomp, |
| 930 | Real c, const Geometry& geom) |
| 931 | { |
| 932 | BL_PROFILE("RadSolve::computeBCoeffs (MGFLD)"); |
| 933 | BL_ASSERT(kappa_r.nGrow() == 1); |
| 934 | |
| 935 | auto geomdata = geom.data(); |
| 936 | auto dx = geom.CellSizeArray(); |
| 937 | |
| 938 | #ifdef _OPENMP |
| 939 | #pragma omp parallel |
| 940 | #endif |
| 941 | for (MFIter mfi(lambda, TilingIfNotGPU()); mfi.isValid(); ++mfi) { |
| 942 | const Box& bx = mfi.tilebox(); |
| 943 | |
| 944 | auto bcoefs_arr = bcoefs[mfi].array(); |
| 945 | auto lambda_arr = lambda[mfi].array(lamcomp); |
| 946 | auto kappa_r_arr = kappa_r[mfi].array(kcomp); |
| 947 | |
| 948 | amrex::ParallelFor(bx, |
| 949 | [=] AMREX_GPU_HOST_DEVICE (int i, int j, int k) |
| 950 | { |
| 951 | if (idim == 0) { |
| 952 | |
| 953 | Real r, s; |
| 954 | edge_center_metric(i, j, k, idim, geomdata, r, s); |
| 955 | |
| 956 | if (AMREX_SPACEDIM == 1) { |
| 957 | s = 1.e0_rt; |
| 958 | } |
| 959 | |
| 960 | Real kap = kavg(kappa_r_arr(i-1,j,k), kappa_r_arr(i,j,k), dx[0], -1); |
| 961 | bcoefs_arr(i,j,k) = r * s * c * lambda_arr(i,j,k) / kap; |
| 962 | |
| 963 | } |
| 964 | else if (idim == 1) { |
| 965 | |
| 966 | Real r, s; |
| 967 | edge_center_metric(i, j, k, idim, geomdata, r, s); |
| 968 | |
| 969 | if (AMREX_SPACEDIM == 1) { |
| 970 | s = 1.e0_rt; |
| 971 | } |
| 972 | |
| 973 | Real kap = kavg(kappa_r_arr(i,j-1,k), kappa_r_arr(i,j,k), dx[1], -1); |
| 974 | bcoefs_arr(i,j,k) = r * s * c * lambda_arr(i,j,k) / kap; |
| 975 | |
| 976 | } |
| 977 | else { |
| 978 | |
| 979 | Real r, s; |
| 980 | edge_center_metric(i, j, k, idim, geomdata, r, s); |
| 981 | |
| 982 | if (AMREX_SPACEDIM == 1) { |
| 983 | s = 1.e0_rt; |
| 984 | } |