diff options
author | 2022-01-31 10:09:43 -0800 | |
---|---|---|
committer | 2022-01-31 10:09:43 -0800 | |
commit | c3761a826e0744522989167052508b45c9b7f3bf (patch) | |
tree | d6ab14195e8ce30c6e75de33d5d15abe728c9ed3 /Source/FieldSolver/SpectralSolver/SpectralSolver.cpp | |
parent | b6339b0e721b3c71a6bd02eb49258175491b4b60 (diff) | |
download | WarpX-c3761a826e0744522989167052508b45c9b7f3bf.tar.gz WarpX-c3761a826e0744522989167052508b45c9b7f3bf.tar.zst WarpX-c3761a826e0744522989167052508b45c9b7f3bf.zip |
Separate Class for Multi-J PSATD Algo (#2748)
* Separate Class for Multi-J PSATD Algo
* Cleaning
* X1,...,X6 Real, not Complex
* Cleaning
* Improve Comments, Rename Jx as Jx_old (etc.)
Diffstat (limited to '')
-rw-r--r-- | Source/FieldSolver/SpectralSolver/SpectralSolver.cpp | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp b/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp index 70800f732..ee169398c 100644 --- a/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp +++ b/Source/FieldSolver/SpectralSolver/SpectralSolver.cpp @@ -9,6 +9,7 @@ #include "SpectralAlgorithms/ComovingPsatdAlgorithm.H" #include "SpectralAlgorithms/PMLPsatdAlgorithm.H" #include "SpectralAlgorithms/PsatdAlgorithm.H" +#include "SpectralAlgorithms/PsatdAlgorithmMultiJ.H" #include "SpectralKSpace.H" #include "SpectralSolver.H" #include "Utils/WarpXProfilerWrapper.H" @@ -47,24 +48,36 @@ SpectralSolver::SpectralSolver( // - Select the algorithm depending on the input parameters // Initialize the corresponding coefficients over k space - if (pml) { + if (pml) // PSATD equations in the PML grids + { algorithm = std::make_unique<PMLPsatdAlgorithm>( k_space, dm, m_spectral_index, norder_x, norder_y, norder_z, nodal, fill_guards, dt, dive_cleaning, divb_cleaning); } - else { + else // PSATD equations in the regulard grids + { // Comoving PSATD algorithm - if (v_comoving[0] != 0. || v_comoving[1] != 0. || v_comoving[2] != 0.) { + if (v_comoving[0] != 0. || v_comoving[1] != 0. || v_comoving[2] != 0.) + { algorithm = std::make_unique<ComovingPsatdAlgorithm>( k_space, dm, m_spectral_index, norder_x, norder_y, norder_z, nodal, fill_guards, v_comoving, dt, update_with_rho); } - // PSATD algorithms: standard, Galilean, or averaged Galilean - else { - algorithm = std::make_unique<PsatdAlgorithm>( - k_space, dm, m_spectral_index, norder_x, norder_y, norder_z, nodal, fill_guards, - v_galilean, dt, update_with_rho, fft_do_time_averaging, do_multi_J, - dive_cleaning, divb_cleaning); + else // PSATD algorithms: standard, Galilean, averaged Galilean, multi-J + { + if (do_multi_J) + { + algorithm = std::make_unique<PsatdAlgorithmMultiJ>( + k_space, dm, m_spectral_index, norder_x, norder_y, norder_z, nodal, + fill_guards, dt, fft_do_time_averaging, dive_cleaning, divb_cleaning); + } + else // standard, Galilean, averaged Galilean + { + algorithm = std::make_unique<PsatdAlgorithm>( + k_space, dm, m_spectral_index, norder_x, norder_y, norder_z, nodal, + fill_guards, v_galilean, dt, update_with_rho, fft_do_time_averaging, + dive_cleaning, divb_cleaning); + } } } |