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

Method gray_accel

Source/radiation/MGFLD.cpp:440–701  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

438
439
440void Radiation::gray_accel(MultiFab& Er_new, MultiFab& Er_pi,
441 MultiFab& kappa_p, MultiFab& kappa_r,
442 MultiFab& etaT, MultiFab& eta1,
443 MultiFab& mugT,
444 Array<MultiFab, AMREX_SPACEDIM>& lambda,
445 RadSolve* solver, MGRadBndry& mgbd,
446 const BoxArray& grids, int level, Real time,
447 Real delta_t, Real ptc_tau)
448{
449 const Geometry& geom = parent->Geom(level);
450 auto dx = parent->Geom(level).CellSizeArray();
451 const Castro *castro = dynamic_cast<Castro*>(&parent->getLevel(level));
452 const DistributionMapping& dmap = castro->DistributionMap();
453
454 if (nGroups > 1) {
455 solver->setHypreMulti(1.0);
456 }
457 else {
458 solver->setHypreMulti(0.0);
459 }
460 mgbd.setCorrection();
461
462 MultiFab Er_zero(grids, dmap, 1, 0);
463 Er_zero.setVal(0.0);
464 getBndryDataMG_ga(mgbd, Er_zero, level);
465
466 MultiFab spec(grids, dmap, nGroups, 1);
467
468#ifdef _OPENMP
469#pragma omp parallel
470#endif
471 for (MFIter mfi(spec, TilingIfNotGPU()); mfi.isValid(); ++mfi) {
472 const Box& bx = mfi.tilebox();
473
474 auto kappa_p_arr = kappa_p[mfi].array();
475 auto mugT_arr = mugT[mfi].array();
476 auto spec_arr = spec[mfi].array();
477
478 Real cdt1 = 1.e0_rt / (C::c_light * delta_t);
479
480 amrex::ParallelFor(bx,
481 [=] AMREX_GPU_HOST_DEVICE (int i, int j, int k)
482 {
483 Real epsilon[NGROUPS];
484 Real sumeps = 0.0;
485 for (int g = 0; g < NGROUPS; ++g) {
486 Real kapt = kappa_p_arr(i,j,k,g) + (1.e0_rt + ptc_tau) * cdt1;
487 epsilon[g] = mugT_arr(i,j,k,g) / kapt;
488 sumeps += epsilon[g];
489 }
490
491 if (sumeps == 0.e0_rt) {
492 for (int g = 0; g < NGROUPS; ++g) {
493 spec_arr(i,j,k,g) = 0.e0_rt;
494 }
495 } else {
496 for (int g = 0; g < NGROUPS; ++g) {
497 spec_arr(i,j,k,g) = epsilon[g] / sumeps;

Callers

nothing calls this directly

Calls 13

setHypreMultiMethod · 0.80
isValidMethod · 0.80
levelBndryMethod · 0.80
setLevelACoeffsMethod · 0.80
defineMethod · 0.80
computeBCoeffsMethod · 0.80
setLevelBCoeffsMethod · 0.80
setLevelCCoeffsMethod · 0.80
levelSolveMethod · 0.80
restoreHypreMultiMethod · 0.80
setCorrectionMethod · 0.45

Tested by

no test coverage detected