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

Method levelDCoeffs

Source/radiation/RadSolve.cpp:413–502  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

411}
412
413void RadSolve::levelDCoeffs(int level, Array<MultiFab, AMREX_SPACEDIM>& lambda,
414 MultiFab& vel, MultiFab& dcf)
415{
416 BL_PROFILE("RadSolve::levelDCoeffs");
417 const Castro *castro = dynamic_cast<Castro*>(&parent->getLevel(level));
418 const DistributionMapping& dm = castro->DistributionMap();
419 const Geometry& geom = parent->Geom(level);
420 const auto dx = geom.CellSizeArray();
421 const auto geomdata = geom.data();
422
423 for (int idim=0; idim<AMREX_SPACEDIM; idim++) {
424
425 MultiFab dcoefs(castro->getEdgeBoxArray(idim), dm, 1, 0);
426
427#ifdef _OPENMP
428#pragma omp parallel
429#endif
430 for (MFIter mfi(dcoefs, TilingIfNotGPU()); mfi.isValid(); ++mfi) {
431
432 const Box& bx = mfi.tilebox();
433
434 auto dcoefs_arr = dcoefs[mfi].array();
435 auto lambda_arr = lambda[idim][mfi].array();
436 auto vel_arr = vel[mfi].array();
437 auto dcf_arr = dcf[mfi].array();
438
439 amrex::ParallelFor(bx,
440 [=] AMREX_GPU_HOST_DEVICE (int i, int j, int k)
441 {
442 Real r, s;
443
444 if (idim == 0) {
445
446 edge_center_metric(i, j, k, idim, geomdata, r, s);
447
448 if (vel_arr(i-1,j,k,0) + vel_arr(i,j,k,0) > 0.e0_rt) {
449 dcoefs_arr(i,j,k) = dcf_arr(i-1,j,k) * vel_arr(i-1,j,k,0) * lambda_arr(i,j,k);
450 }
451 else if (vel_arr(i-1,j,k,0) + vel_arr(i,j,k,0) < 0.e0_rt) {
452 dcoefs_arr(i,j,k) = dcf_arr(i,j,k) * vel_arr(i,j,k,0) * lambda_arr(i,j,k);
453 }
454 else {
455 dcoefs_arr(i,j,k) = 0.e0_rt;
456 }
457
458 dcoefs_arr(i,j,k) = dcoefs_arr(i,j,k) * r;
459
460 }
461 else if (idim == 1) {
462
463 edge_center_metric(i, j, k, idim, geomdata, r, s);
464
465 if (vel_arr(i,j-1,k,1) + vel_arr(i,j,k,1) > 0.e0_rt) {
466 dcoefs_arr(i,j,k) = dcf_arr(i,j-1,k) * vel_arr(i,j-1,k,1) * lambda_arr(i,j,k);
467 }
468 else if (vel_arr(i,j-1,k,1) + vel_arr(i,j,k,1) < 0.e0_rt) {
469 dcoefs_arr(i,j,k) = dcf_arr(i,j,k) * vel_arr(i,j,k,1) * lambda_arr(i,j,k);
470 }

Callers 1

single_group_updateMethod · 0.80

Calls 2

isValidMethod · 0.80
d2CoefficientsMethod · 0.80

Tested by

no test coverage detected