diff options
Diffstat (limited to 'Source/Evolve/WarpXEvolve.cpp')
-rw-r--r-- | Source/Evolve/WarpXEvolve.cpp | 26 |
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 |