MCPcopy Create free account
hub / github.com/AMReX-Astro/Castro / levelFluxFaceToCenter

Method levelFluxFaceToCenter

Source/radiation/RadSolve.cpp:643–686  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

641}
642
643void 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
688void RadSolve::levelFlux(int level,
689 Array<MultiFab, AMREX_SPACEDIM>& Flux,

Callers 2

single_group_updateMethod · 0.80
MGFLD_implicit_updateMethod · 0.80

Calls 2

isValidMethod · 0.80
fFunction · 0.50

Tested by

no test coverage detected