diff options
author | 2019-11-12 15:20:10 -0800 | |
---|---|---|
committer | 2019-11-12 15:20:10 -0800 | |
commit | 1f594f0b5ecfa3169e90546f695a1c649af36aa1 (patch) | |
tree | 8dac31d0e464f9e297aac8dce4fb626119540927 /Source/Laser/LaserProfilesImpl/LaserProfileFieldFunction.cpp | |
parent | 68c60b51b342d8b7e1ef9b2a916e20edfa82d1fd (diff) | |
parent | 00739fca2aba07259cbaa6420b217edd2b684b5c (diff) | |
download | WarpX-1f594f0b5ecfa3169e90546f695a1c649af36aa1.tar.gz WarpX-1f594f0b5ecfa3169e90546f695a1c649af36aa1.tar.zst WarpX-1f594f0b5ecfa3169e90546f695a1c649af36aa1.zip |
Merge pull request #515 from lucafedeli88/refactor_laser_class
Refactoring of LaserParticleContainer class
Diffstat (limited to 'Source/Laser/LaserProfilesImpl/LaserProfileFieldFunction.cpp')
-rw-r--r-- | Source/Laser/LaserProfilesImpl/LaserProfileFieldFunction.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/Source/Laser/LaserProfilesImpl/LaserProfileFieldFunction.cpp b/Source/Laser/LaserProfilesImpl/LaserProfileFieldFunction.cpp new file mode 100644 index 000000000..3c9d7379a --- /dev/null +++ b/Source/Laser/LaserProfilesImpl/LaserProfileFieldFunction.cpp @@ -0,0 +1,45 @@ +#include <LaserProfiles.H> + +#include <WarpX_Complex.H> + +using namespace amrex; +using namespace WarpXLaserProfiles; + +void +FieldFunctionLaserProfile::init ( + const amrex::ParmParse& ppl, + const amrex::ParmParse& ppc, + CommonLaserParameters params) +{ + // Parse the properties of the parse_field_function profile + ppl.get("field_function(X,Y,t)", m_params.field_function); + m_parser.define(m_params.field_function); + m_parser.registerVariables({"X","Y","t"}); + + std::set<std::string> symbols = m_parser.symbols(); + symbols.erase("X"); + symbols.erase("Y"); + symbols.erase("t"); // after removing variables, we are left with constants + for (auto it = symbols.begin(); it != symbols.end(); ) { + Real v; + if (ppc.query(it->c_str(), v)) { + m_parser.setConstant(*it, v); + it = symbols.erase(it); + } else { + ++it; + } + } + for (auto const& s : symbols) { // make sure there no unknown symbols + amrex::Abort("Laser Profile: Unknown symbol "+s); + } +} + +void +FieldFunctionLaserProfile::fill_amplitude ( + const int np, Real const * AMREX_RESTRICT const Xp, Real const * AMREX_RESTRICT const Yp, + Real t, Real * AMREX_RESTRICT const amplitude) +{ + for (int i = 0; i < np; ++i) { + amplitude[i] = m_parser.eval(Xp[i], Yp[i], t); + } +} |