diff options
Diffstat (limited to 'Source/WarpX.cpp')
-rw-r--r-- | Source/WarpX.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index ffe9576fa..17601175b 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -2252,17 +2252,23 @@ WarpX::AllocLevelMFs (int lev, const BoxArray& ba, const DistributionMapping& dm } #endif - bool deposit_charge = do_dive_cleaning || - (electrostatic_solver_id == ElectrostaticSolverAlgo::LabFrame) || - (electrostatic_solver_id == ElectrostaticSolverAlgo::LabFrameElectroMagnetostatic) || - (electromagnetic_solver_id == ElectromagneticSolverAlgo::HybridPIC); + int rho_ncomps = 0; + if( (electrostatic_solver_id == ElectrostaticSolverAlgo::LabFrame) || + (electrostatic_solver_id == ElectrostaticSolverAlgo::LabFrameElectroMagnetostatic) || + (electromagnetic_solver_id == ElectromagneticSolverAlgo::HybridPIC) ) { + rho_ncomps = ncomps; + } + if (do_dive_cleaning) { + rho_ncomps = 2*ncomps; + } if (WarpX::electromagnetic_solver_id == ElectromagneticSolverAlgo::PSATD) { - deposit_charge = do_dive_cleaning || update_with_rho || current_correction; + if (do_dive_cleaning || update_with_rho || current_correction) { + // For the multi-J algorithm we can allocate only one rho component (no distinction between old and new) + rho_ncomps = (WarpX::do_multi_J) ? ncomps : 2*ncomps; + } } - if (deposit_charge) + if (rho_ncomps > 0) { - // For the multi-J algorithm we can allocate only one rho component (no distinction between old and new) - const int rho_ncomps = (WarpX::do_multi_J) ? ncomps : 2*ncomps; AllocInitMultiFab(rho_fp[lev], amrex::convert(ba, rho_nodal_flag), dm, rho_ncomps, ngRho, lev, "rho_fp", 0.0_rt); } @@ -2427,9 +2433,7 @@ WarpX::AllocLevelMFs (int lev, const BoxArray& ba, const DistributionMapping& dm AllocInitMultiFab(current_cp[lev][1], amrex::convert(cba, jy_nodal_flag), dm, ncomps, ngJ, lev, "current_cp[y]", 0.0_rt); AllocInitMultiFab(current_cp[lev][2], amrex::convert(cba, jz_nodal_flag), dm, ncomps, ngJ, lev, "current_cp[z]", 0.0_rt); - if (deposit_charge) { - // For the multi-J algorithm we can allocate only one rho component (no distinction between old and new) - const int rho_ncomps = (WarpX::do_multi_J) ? ncomps : 2*ncomps; + if (rho_ncomps > 0) { AllocInitMultiFab(rho_cp[lev], amrex::convert(cba, rho_nodal_flag), dm, rho_ncomps, ngRho, lev, "rho_cp", 0.0_rt); } |