aboutsummaryrefslogtreecommitdiff
path: root/Source/Initialization/WarpXInitData.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Initialization/WarpXInitData.cpp')
-rw-r--r--Source/Initialization/WarpXInitData.cpp111
1 files changed, 22 insertions, 89 deletions
diff --git a/Source/Initialization/WarpXInitData.cpp b/Source/Initialization/WarpXInitData.cpp
index 385993f78..29c9a8955 100644
--- a/Source/Initialization/WarpXInitData.cpp
+++ b/Source/Initialization/WarpXInitData.cpp
@@ -82,21 +82,23 @@ WarpX::InitData ()
void
WarpX::InitDiagnostics () {
- if (do_boosted_frame_diagnostic) {
+ if (do_back_transformed_diagnostics) {
const Real* current_lo = geom[0].ProbLo();
const Real* current_hi = geom[0].ProbHi();
Real dt_boost = dt[0];
-
// Find the positions of the lab-frame box that corresponds to the boosted-frame box at t=0
Real zmin_lab = current_lo[moving_window_dir]/( (1.+beta_boost)*gamma_boost );
Real zmax_lab = current_hi[moving_window_dir]/( (1.+beta_boost)*gamma_boost );
-
- myBFD.reset(new BoostedFrameDiagnostic(zmin_lab,
+ myBFD.reset(new BackTransformedDiagnostic(zmin_lab,
zmax_lab,
moving_window_v, dt_snapshots_lab,
- num_snapshots_lab, gamma_boost,
- t_new[0], dt_boost,
- moving_window_dir, geom[0]));
+ num_snapshots_lab,
+ dt_slice_snapshots_lab,
+ num_slice_snapshots_lab,
+ gamma_boost, t_new[0], dt_boost,
+ moving_window_dir, geom[0],
+ slice_realbox,
+ particle_slice_width_lab));
}
}
@@ -110,9 +112,13 @@ WarpX::InitFromScratch ()
mypc->AllocData();
mypc->InitData();
-#ifdef USE_OPENBC_POISSON
- InitOpenbc();
-#endif
+ // Loop through species and calculate their space-charge field
+ for (int ispecies=0; ispecies<mypc->nSpecies(); ispecies++){
+ WarpXParticleContainer& species = mypc->GetParticleContainer(ispecies);
+ if (species.initialize_self_fields) {
+ InitSpaceChargeField(species);
+ }
+ }
InitPML();
@@ -225,96 +231,23 @@ WarpX::PostRestart ()
mypc->PostRestart();
}
-#ifdef USE_OPENBC_POISSON
-void
-WarpX::InitOpenbc ()
-{
-#ifndef BL_USE_MPI
- static_assert(false, "must use MPI");
-#endif
-
- static_assert(AMREX_SPACEDIM == 3, "Openbc is 3D only");
- BL_ASSERT(finestLevel() == 0);
-
- const int lev = 0;
-
- const Geometry& gm = Geom(lev);
- const Box& gbox = gm.Domain();
- int lohi[6];
- warpx_openbc_decompose(gbox.loVect(), gbox.hiVect(), lohi, lohi+3);
-
- int nprocs = ParallelDescriptor::NProcs();
- int myproc = ParallelDescriptor::MyProc();
- Vector<int> alllohi(6*nprocs,100000);
-
- MPI_Allgather(lohi, 6, MPI_INT, alllohi.data(), 6, MPI_INT, ParallelDescriptor::Communicator());
-
- BoxList bl{IndexType::TheNodeType()};
- for (int i = 0; i < nprocs; ++i)
- {
- bl.push_back(Box(IntVect(alllohi[6*i ],alllohi[6*i+1],alllohi[6*i+2]),
- IntVect(alllohi[6*i+3],alllohi[6*i+4],alllohi[6*i+5]),
- IndexType::TheNodeType()));
- }
- BoxArray ba{bl};
-
- Vector<int> iprocmap(nprocs+1);
- std::iota(iprocmap.begin(), iprocmap.end(), 0);
- iprocmap.back() = myproc;
-
- DistributionMapping dm{iprocmap};
-
- MultiFab rho_openbc(ba, dm, 1, 0);
- MultiFab phi_openbc(ba, dm, 1, 0);
-
- bool local = true;
- const std::unique_ptr<MultiFab>& rho = mypc->GetChargeDensity(lev, local);
-
- rho_openbc.setVal(0.0);
- rho_openbc.copy(*rho, 0, 0, 1, rho->nGrow(), 0, gm.periodicity(), FabArrayBase::ADD);
-
- const Real* dx = gm.CellSize();
-
- warpx_openbc_potential(rho_openbc[myproc].dataPtr(), phi_openbc[myproc].dataPtr(), dx);
-
- BoxArray nba = boxArray(lev);
- nba.surroundingNodes();
- MultiFab phi(nba, DistributionMap(lev), 1, 0);
- phi.copy(phi_openbc, gm.periodicity());
-
-#ifdef _OPENMP
-#pragma omp parallel
-#endif
- for (MFIter mfi(phi); mfi.isValid(); ++mfi)
- {
- const Box& bx = mfi.validbox();
- warpx_compute_E(bx.loVect(), bx.hiVect(),
- BL_TO_FORTRAN_3D(phi[mfi]),
- BL_TO_FORTRAN_3D((*Efield[lev][0])[mfi]),
- BL_TO_FORTRAN_3D((*Efield[lev][1])[mfi]),
- BL_TO_FORTRAN_3D((*Efield[lev][2])[mfi]),
- dx);
- }
-}
-#endif
-
void
WarpX::InitLevelData (int lev, Real time)
{
for (int i = 0; i < 3; ++i) {
current_fp[lev][i]->setVal(0.0);
- Efield_fp[lev][i]->setVal(0.0);
- Bfield_fp[lev][i]->setVal(0.0);
+ Efield_fp[lev][i]->setVal(E_external_grid[i]);
+ Bfield_fp[lev][i]->setVal(B_external_grid[i]);
}
if (lev > 0) {
for (int i = 0; i < 3; ++i) {
- Efield_aux[lev][i]->setVal(0.0);
- Bfield_aux[lev][i]->setVal(0.0);
+ Efield_aux[lev][i]->setVal(E_external_grid[i]);
+ Bfield_aux[lev][i]->setVal(B_external_grid[i]);
current_cp[lev][i]->setVal(0.0);
- Efield_cp[lev][i]->setVal(0.0);
- Bfield_cp[lev][i]->setVal(0.0);
+ Efield_cp[lev][i]->setVal(E_external_grid[i]);
+ Bfield_cp[lev][i]->setVal(B_external_grid[i]);
}
}