aboutsummaryrefslogtreecommitdiff
path: root/Source/Evolve/WarpXEvolve.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Evolve/WarpXEvolve.cpp')
-rw-r--r--Source/Evolve/WarpXEvolve.cpp26
1 files changed, 20 insertions, 6 deletions
diff --git a/Source/Evolve/WarpXEvolve.cpp b/Source/Evolve/WarpXEvolve.cpp
index 674680773..fda7100d4 100644
--- a/Source/Evolve/WarpXEvolve.cpp
+++ b/Source/Evolve/WarpXEvolve.cpp
@@ -296,6 +296,9 @@ WarpX::OneStep_nosub (Real cur_time)
if ( !fft_periodic_single_box && current_correction )
amrex::Abort("\nCurrent correction does not guarantee charge conservation with local FFTs over guard cells:\n"
"set psatd.periodic_single_box_fft=1 too, in order to guarantee charge conservation");
+ if ( !fft_periodic_single_box && (WarpX::current_deposition_algo == CurrentDepositionAlgo::Vay) )
+ amrex::Abort("\nVay current deposition does not guarantee charge conservation with local FFTs over guard cells:\n"
+ "set psatd.periodic_single_box_fft=1 too, in order to guarantee charge conservation");
#endif
#ifdef WARPX_QED
@@ -310,6 +313,8 @@ WarpX::OneStep_nosub (Real cur_time)
// without guard cells, apply this after calling SyncCurrent
#ifdef WARPX_USE_PSATD
if ( fft_periodic_single_box && current_correction ) CurrentCorrection();
+ if ( fft_periodic_single_box && (WarpX::current_deposition_algo == CurrentDepositionAlgo::Vay) )
+ VayDeposition();
#endif
@@ -792,19 +797,28 @@ WarpX::applyMirrors(Real time){
}
}
+// Apply current correction in Fourier space
#ifdef WARPX_USE_PSATD
void
WarpX::CurrentCorrection ()
{
for ( int lev = 0; lev <= finest_level; ++lev )
{
- // Apply correction on fine patch
spectral_solver_fp[lev]->CurrentCorrection( current_fp[lev], rho_fp[lev] );
- if ( spectral_solver_cp[lev] )
- {
- // Apply correction on coarse patch
- spectral_solver_cp[lev]->CurrentCorrection( current_cp[lev], rho_cp[lev] );
- }
+ if ( spectral_solver_cp[lev] ) spectral_solver_cp[lev]->CurrentCorrection( current_cp[lev], rho_cp[lev] );
+ }
+}
+#endif
+
+// Compute current from Vay deposition in Fourier space
+#ifdef WARPX_USE_PSATD
+void
+WarpX::VayDeposition ()
+{
+ for (int lev = 0; lev <= finest_level; ++lev)
+ {
+ spectral_solver_fp[lev]->VayDeposition(current_fp[lev]);
+ if (spectral_solver_cp[lev]) spectral_solver_cp[lev]->VayDeposition(current_cp[lev]);
}
}
#endif