Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add strang implicit spectral em redo #5027

Merged

Conversation

dpgrote
Copy link
Member

@dpgrote dpgrote commented Jul 3, 2024

This implements use of the PSATD field advance coupled with the implicit solver, using a Strang split advance.

  • Advect Maxwell using PSATD with no J, ½ step
  • Advance particles along with dE/dt = -J implicitly, full step, iterating
  • Advect Maxwell using PSATD with no J, ½ step

This requires the input parameter psatd.update_with_rho = 0.
With psatd.periodic_single_box_fft = 1, exact energy conservation is obtained. Otherwise good conservation is seen, but not exact (will depend on parameters).
Convergence is found for wpedt <= 1.9 (compared to wpedt < 0.25 for FDTD).

This PR replaces PR #4662.

A task for a future PR would be to implement specialized source free spectral advance routines (as noted in source comments).

@dpgrote dpgrote added component: spectral Spectral solvers (PSATD, IGF) component: implicit solvers Anything related to implicit solvers labels Jul 3, 2024
/**
* \brief Time-biasing parameter for fields used on RHS to advance system
*/
amrex::Real m_theta = 0.5;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dpgrote Is m_theta used?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've removed references to theta.

@RemiLehe RemiLehe self-assigned this Jul 29, 2024
@@ -83,7 +83,8 @@ public:
[[nodiscard]] RT dotProduct( const WarpXSolverVec& a_X ) const;

void Copy ( warpx::fields::FieldType a_array_type,
warpx::fields::FieldType a_scalar_type = warpx::fields::FieldType::None );
warpx::fields::FieldType a_scalar_type = warpx::fields::FieldType::None,
bool allow_type_mismatch = false);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand why this flag is needed here. Would be nice to not need it. That would require modifications to the WarpXSolverVec class. Ideally, m_array_type and m_scalar type would just reflect the centering for the FABs. Then, current_fp and efield_fp would be the same type. This should of course be a separate PR.

Copy link
Contributor

@JustinRayAngus JustinRayAngus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good Dave.

@JustinRayAngus JustinRayAngus enabled auto-merge (squash) November 12, 2024 21:27
@JustinRayAngus JustinRayAngus merged commit b81317a into ECP-WarpX:development Nov 12, 2024
37 checks passed
@dpgrote dpgrote deleted the add_StrangImplicitSpectralEM_redo branch November 14, 2024 19:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
component: implicit solvers Anything related to implicit solvers component: spectral Spectral solvers (PSATD, IGF)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants