[WIP] Gaussian laser based on background field approach
This pull request adds a Gaussian laser based on PIConGPUs background field approach. This allows to
- use several independent lasers simultaneously in one simulation.
- shoot lasers into the plasma from all direction.
This is particularly interesting for simulating probe beams, such as for shadowgraphy. The code compiles, runs and has passed already a number of tests (propagation in vacuum, plasma, different angles, qualitative symmetry tests and comparison with existing laser, various angles, moving window). Although there is still plenty of work for me (see below), the code can be already used for testing and development (@PrometheusPi ).
The laser model also includes first-order corrections for ultrashort duration (fs-scale in optical probe lasers), as well as tight focusing. Also both linear polarizations are included. Arbitrary linear polarization states can be already realized using superposition.
To do:
- [x] Need to check pulse duration interface. It is probably off by sqrt(2).
- [ ] Test 2D implementation.
- [ ] Test orthogonal polarization.
- [ ] Implement additional precautions for long term stability. Phase should be calculated with double precision, as well as complex divisions.
- [ ] Expose the carrier-envelope phase to the interface. This will allow to also include elliptically polarized lasers.
- [ ] Discuss a more user friendly interface for lasers in
fieldBackground.paramwithout E- and B-Fields being separate. - [ ] Eventually shorten the mathematical boiler plate of the individual field components.
Probably for future pull requests:
- Enable laser propagation vectors outside the y-z-plane using an additional azimuthal coordinate.
- Enable focal positions outside the y-axis. Although the feature is straight forward, it messes with the automatic pulse delay calculation feature. The latter might be also just superfluous.
Please, feel free in testing, reviewing and contributing helpful suggestions. Particularly, I would like to know what is missing / can be improved in the
- documentation
- coding style
- current best practices in coding constructs and removing workarounds (i.e. when to use
PMACC_ALIGN, doesprecisionCastonpicongpu::cellSizeor casting onfloatD_work) - important tests
- potential for performance improvements
Enjoy 😃 !
Rebased to current dev.
So the CI issue is resolved, but I assume the checkboxes are accurate and so the PR is not yet ready for review?
@sbastrakov Yes, the checkboxes are accurate, so the PR is not yet ready for the final review. However, any suggestions and recommendations to improve the current PR are welcome. 😃
I set this PR to draft because there is no progress.
In case the idea was to provide explicit B and E formulas, perhaps it would be now easier as an incident field.
@BeyondEspresso can we close this PR or is this still relevant? We have the new feature incident fields where we can define laser from all sides too. see: #3592
@BeyondEspresso can we close this PR or is this still relevant? We have the new feature incident fields where we can define laser from all sides too. see: #3592
@sbastrakov @psychocoderHPC I'm actually using this PR at the moment, to have a second, perpendicular laser at a specific time for shadowgraphy images. But I can come to you later today (or tomorrow) to see how the migration from the background field laser to the incident fields works.
I will close this PR since there is no reaction for 3 years.