-
Notifications
You must be signed in to change notification settings - Fork 196
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
Add strang implicit spectral em redo #5027
Conversation
/** | ||
* \brief Time-biasing parameter for fields used on RHS to advance system | ||
*/ | ||
amrex::Real m_theta = 0.5; |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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.
@@ -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); |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good Dave.
This implements use of the PSATD field advance coupled with the implicit solver, using a Strang split advance.
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).