From 5df218e2678fb8f6f6a8efa0391a04e592ee7b60 Mon Sep 17 00:00:00 2001 From: RevathiJambunathan Date: Thu, 19 Dec 2019 11:38:04 -0800 Subject: adding function to store parser string to reduce duplication --- Source/Utils/WarpXUtil.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'Source/Utils/WarpXUtil.cpp') diff --git a/Source/Utils/WarpXUtil.cpp b/Source/Utils/WarpXUtil.cpp index 8764a09c6..029e03dc2 100644 --- a/Source/Utils/WarpXUtil.cpp +++ b/Source/Utils/WarpXUtil.cpp @@ -164,3 +164,20 @@ namespace WarpXUtilIO{ } } +void Store_parserString(std::string query_string, + std::string& stored_string) +{ + + ParmParse pp("warpx"); + char cstr[query_string.size()+1]; + strcpy(cstr, query_string.c_str()); + + std::vector f; + pp.getarr(cstr, f); + stored_string.clear(); + for (auto const& s : f) { + stored_string += s; + } + f.clear(); + +} -- cgit v1.2.3 From 23153e9385db5b6f4b730190eb111730e7bb7667 Mon Sep 17 00:00:00 2001 From: RevathiJambunathan Date: Thu, 19 Dec 2019 11:44:51 -0800 Subject: fixing EOL whitespace --- Source/Initialization/WarpXInitData.cpp | 34 ++++++++++++++++----------------- Source/Utils/WarpXUtil.H | 2 +- Source/Utils/WarpXUtil.cpp | 2 +- 3 files changed, 19 insertions(+), 19 deletions(-) (limited to 'Source/Utils/WarpXUtil.cpp') diff --git a/Source/Initialization/WarpXInitData.cpp b/Source/Initialization/WarpXInitData.cpp index 3392b5ef3..a6bf60840 100644 --- a/Source/Initialization/WarpXInitData.cpp +++ b/Source/Initialization/WarpXInitData.cpp @@ -327,34 +327,34 @@ WarpX::InitLevelData (int lev, Real time) if (B_ext_grid_s == "parse_b_ext_grid_function") { - Store_parserString("Bx_external_grid_function(x,y,z)", + Store_parserString("Bx_external_grid_function(x,y,z)", str_Bx_ext_grid_function); - Store_parserString("By_external_grid_function(x,y,z)", + Store_parserString("By_external_grid_function(x,y,z)", str_By_ext_grid_function); Store_parserString("Bz_external_grid_function(x,y,z)", str_Bz_ext_grid_function); // Initialize Bfield_fp with external function bool B_flag = 1; - InitializeExternalFieldsOnGridUsingParser(Bfield_fp[lev][0].get(), - Bfield_fp[lev][1].get(), - Bfield_fp[lev][2].get(), + InitializeExternalFieldsOnGridUsingParser(Bfield_fp[lev][0].get(), + Bfield_fp[lev][1].get(), + Bfield_fp[lev][2].get(), lev, B_flag); } if (E_ext_grid_s == "parse_e_ext_grid_function") { - Store_parserString("Ex_external_grid_function(x,y,z)", + Store_parserString("Ex_external_grid_function(x,y,z)", str_Ex_ext_grid_function); - Store_parserString("Ey_external_grid_function(x,y,z)", + Store_parserString("Ey_external_grid_function(x,y,z)", str_Ey_ext_grid_function); Store_parserString("Ez_external_grid_function(x,y,z)", str_Ez_ext_grid_function); // Initialize Efield_fp with external function bool B_flag = 0; - InitializeExternalFieldsOnGridUsingParser(Efield_fp[lev][0].get(), - Efield_fp[lev][1].get(), - Efield_fp[lev][2].get(), + InitializeExternalFieldsOnGridUsingParser(Efield_fp[lev][0].get(), + Efield_fp[lev][1].get(), + Efield_fp[lev][2].get(), lev, B_flag); } @@ -376,14 +376,14 @@ WarpX::InitLevelData (int lev, Real time) // Setting b_flag to 1 since we are initializing // B_external on the grid. bool B_flag = 1; - InitializeExternalFieldsOnGridUsingParser(Bfield_aux[lev][0].get(), + InitializeExternalFieldsOnGridUsingParser(Bfield_aux[lev][0].get(), Bfield_aux[lev][1].get(), - Bfield_aux[lev][2].get(), + Bfield_aux[lev][2].get(), lev, B_flag); - InitializeExternalFieldsOnGridUsingParser(Bfield_cp[lev][0].get(), + InitializeExternalFieldsOnGridUsingParser(Bfield_cp[lev][0].get(), Bfield_cp[lev][1].get(), - Bfield_cp[lev][2].get(), + Bfield_cp[lev][2].get(), lev, B_flag); } @@ -392,12 +392,12 @@ WarpX::InitLevelData (int lev, Real time) // Setting b_flag to zero since we are initializing // E_external on the grid here. bool B_flag = 0; - InitializeExternalFieldsOnGridUsingParser(Efield_aux[lev][0].get(), + InitializeExternalFieldsOnGridUsingParser(Efield_aux[lev][0].get(), Efield_aux[lev][1].get(), - Efield_aux[lev][2].get(), + Efield_aux[lev][2].get(), lev, B_flag); - InitializeExternalFieldsOnGridUsingParser(Efield_cp[lev][0].get(), + InitializeExternalFieldsOnGridUsingParser(Efield_cp[lev][0].get(), Efield_cp[lev][1].get(), Efield_cp[lev][2].get(), lev, B_flag); diff --git a/Source/Utils/WarpXUtil.H b/Source/Utils/WarpXUtil.H index ce24d1233..7ea6e5508 100644 --- a/Source/Utils/WarpXUtil.H +++ b/Source/Utils/WarpXUtil.H @@ -15,7 +15,7 @@ void ConvertLabParamsToBoost(); void NullifyMF(amrex::MultiFab& mf, int lev, amrex::Real zmin, amrex::Real zmax); -void Store_parserString(std::string query_string, +void Store_parserString(std::string query_string, std::string& stored_string); namespace WarpXUtilIO{ diff --git a/Source/Utils/WarpXUtil.cpp b/Source/Utils/WarpXUtil.cpp index 029e03dc2..db5a646f9 100644 --- a/Source/Utils/WarpXUtil.cpp +++ b/Source/Utils/WarpXUtil.cpp @@ -164,7 +164,7 @@ namespace WarpXUtilIO{ } } -void Store_parserString(std::string query_string, +void Store_parserString(std::string query_string, std::string& stored_string) { -- cgit v1.2.3 From c23edfd29a92a4744ff3fb6e89f0e799ee550c84 Mon Sep 17 00:00:00 2001 From: RevathiJambunathan Date: Mon, 6 Jan 2020 11:28:50 -0800 Subject: merging all makeParser () functions in WarpXUtil.H --- Source/Initialization/PlasmaInjector.cpp | 29 +---------------------------- Source/Initialization/WarpXInitData.cpp | 28 ---------------------------- Source/Utils/WarpXMovingWindow.cpp | 28 +--------------------------- Source/Utils/WarpXUtil.cpp | 27 +++++++++++++++++++++++++++ 4 files changed, 29 insertions(+), 83 deletions(-) (limited to 'Source/Utils/WarpXUtil.cpp') diff --git a/Source/Initialization/PlasmaInjector.cpp b/Source/Initialization/PlasmaInjector.cpp index f7c7e498f..6e7880ca5 100644 --- a/Source/Initialization/PlasmaInjector.cpp +++ b/Source/Initialization/PlasmaInjector.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include @@ -168,34 +169,6 @@ PlasmaInjector::PlasmaInjector (int ispecies, const std::string& name) } } -namespace { -WarpXParser makeParser (std::string const& parse_function) -{ - WarpXParser parser(parse_function); - parser.registerVariables({"x","y","z"}); - - ParmParse pp("my_constants"); - std::set symbols = parser.symbols(); - symbols.erase("x"); - symbols.erase("y"); - symbols.erase("z"); // after removing variables, we are left with constants - for (auto it = symbols.begin(); it != symbols.end(); ) { - Real v; - if (pp.query(it->c_str(), v)) { - parser.setConstant(*it, v); - it = symbols.erase(it); - } else { - ++it; - } - } - for (auto const& s : symbols) { // make sure there no unknown symbols - amrex::Abort("PlasmaInjector::makeParser: Unknown symbol "+s); - } - - return parser; -} -} - // Depending on injection type at runtime, initialize inj_rho // so that inj_rho->getDensity calls // InjectorPosition[Constant or Custom or etc.].getDensity. diff --git a/Source/Initialization/WarpXInitData.cpp b/Source/Initialization/WarpXInitData.cpp index 6ac8195f8..cd548f73e 100644 --- a/Source/Initialization/WarpXInitData.cpp +++ b/Source/Initialization/WarpXInitData.cpp @@ -234,34 +234,6 @@ WarpX::PostRestart () } -namespace { -WarpXParser makeParser (std::string const& parse_function) -{ - WarpXParser parser(parse_function); - parser.registerVariables({"x","y","z"}); - ParmParse pp("my_constants"); - std::set symbols = parser.symbols(); - symbols.erase("x"); - symbols.erase("y"); - symbols.erase("z"); - for (auto it = symbols.begin(); it != symbols.end(); ) { - Real v; - if (pp.query(it->c_str(), v)) { - parser.setConstant(*it, v); - it = symbols.erase(it); - } else { - ++it; - } - } - for (auto const& s : symbols) { - amrex::Abort(" ExternalEBFieldOnGrid::makeParser::Unknown symbol "+s); - } - return parser; -} -} - - - void WarpX::InitLevelData (int lev, Real time) { diff --git a/Source/Utils/WarpXMovingWindow.cpp b/Source/Utils/WarpXMovingWindow.cpp index a3ec07f65..247c89869 100644 --- a/Source/Utils/WarpXMovingWindow.cpp +++ b/Source/Utils/WarpXMovingWindow.cpp @@ -1,35 +1,9 @@ #include +#include #include using namespace amrex; -namespace { -WarpXParser makeParser (std::string const& parse_function) -{ - WarpXParser parser(parse_function); - parser.registerVariables({"x","y","z"}); - ParmParse pp("my_constants"); - std::set symbols = parser.symbols(); - symbols.erase("x"); - symbols.erase("y"); - symbols.erase("z"); - for (auto it = symbols.begin(); it != symbols.end(); ) { - Real v; - if (pp.query(it->c_str(), v)) { - parser.setConstant(*it, v); - it = symbols.erase(it); - } else { - ++it; - } - } - for (auto const& s : symbols) { - amrex::Abort(" ExternalEBFieldOnGrid::makeParser::Unknown symbol "+s); - } - return parser; -} -} - - void WarpX::UpdatePlasmaInjectionPosition (Real a_dt) { diff --git a/Source/Utils/WarpXUtil.cpp b/Source/Utils/WarpXUtil.cpp index db5a646f9..152eaba07 100644 --- a/Source/Utils/WarpXUtil.cpp +++ b/Source/Utils/WarpXUtil.cpp @@ -181,3 +181,30 @@ void Store_parserString(std::string query_string, f.clear(); } + + +//namespace { +WarpXParser makeParser (std::string const& parse_function) +{ + WarpXParser parser(parse_function); + parser.registerVariables({"x","y","z"}); + ParmParse pp("my_constants"); + std::set symbols = parser.symbols(); + symbols.erase("x"); + symbols.erase("y"); + symbols.erase("z"); + for (auto it = symbols.begin(); it != symbols.end(); ) { + Real v; + if (pp.query(it->c_str(), v)) { + parser.setConstant(*it, v); + it = symbols.erase(it); + } else { + ++it; + } + } + for (auto const& s : symbols) { + amrex::Abort("makeParser::Unknown symbol "+s); + } + return parser; +} +//} -- cgit v1.2.3 From 2915558864672dbd32a3bfbd56096ac0e378056b Mon Sep 17 00:00:00 2001 From: RevathiJambunathan Date: Tue, 7 Jan 2020 13:20:29 -0800 Subject: mmodifying shiftMF to read in stored field_parser instead of parsing the function --- Source/Initialization/WarpXInitData.cpp | 72 ++++++++++++++++-------------- Source/Utils/WarpXMovingWindow.cpp | 78 ++++++++++----------------------- Source/Utils/WarpXUtil.cpp | 2 - Source/WarpX.H | 19 ++++++-- 4 files changed, 76 insertions(+), 95 deletions(-) (limited to 'Source/Utils/WarpXUtil.cpp') diff --git a/Source/Initialization/WarpXInitData.cpp b/Source/Initialization/WarpXInitData.cpp index 2c9c83676..534ffb0a8 100644 --- a/Source/Initialization/WarpXInitData.cpp +++ b/Source/Initialization/WarpXInitData.cpp @@ -297,31 +297,39 @@ WarpX::InitLevelData (int lev, Real time) str_By_ext_grid_function); Store_parserString("Bz_external_grid_function(x,y,z)", str_Bz_ext_grid_function); + + Bxfield_parser.reset(new ParserWrapper( + makeParser(str_Bx_ext_grid_function))); + Byfield_parser.reset(new ParserWrapper( + makeParser(str_By_ext_grid_function))); + Bzfield_parser.reset(new ParserWrapper( + makeParser(str_Bz_ext_grid_function))); + // Initialize Bfield_fp with external function InitializeExternalFieldsOnGridUsingParser(Bfield_fp[lev][0].get(), Bfield_fp[lev][1].get(), Bfield_fp[lev][2].get(), - str_Bx_ext_grid_function, - str_By_ext_grid_function, - str_Bz_ext_grid_function, + Bxfield_parser.get(), + Byfield_parser.get(), + Bzfield_parser.get(), Bx_nodal_flag, By_nodal_flag, Bz_nodal_flag, lev); if (lev > 0) { InitializeExternalFieldsOnGridUsingParser(Bfield_aux[lev][0].get(), Bfield_aux[lev][1].get(), Bfield_aux[lev][2].get(), - str_Bx_ext_grid_function, - str_By_ext_grid_function, - str_Bz_ext_grid_function, + Bxfield_parser.get(), + Byfield_parser.get(), + Bzfield_parser.get(), Bx_nodal_flag, By_nodal_flag, Bz_nodal_flag, lev); InitializeExternalFieldsOnGridUsingParser(Bfield_cp[lev][0].get(), Bfield_cp[lev][1].get(), Bfield_cp[lev][2].get(), - str_Bx_ext_grid_function, - str_By_ext_grid_function, - str_Bz_ext_grid_function, + Bxfield_parser.get(), + Byfield_parser.get(), + Bzfield_parser.get(), Bx_nodal_flag, By_nodal_flag, Bz_nodal_flag, lev); } @@ -339,31 +347,38 @@ WarpX::InitLevelData (int lev, Real time) Store_parserString("Ez_external_grid_function(x,y,z)", str_Ez_ext_grid_function); + Exfield_parser.reset(new ParserWrapper( + makeParser(str_Ex_ext_grid_function))); + Eyfield_parser.reset(new ParserWrapper( + makeParser(str_Ey_ext_grid_function))); + Ezfield_parser.reset(new ParserWrapper( + makeParser(str_Ez_ext_grid_function))); + // Initialize Efield_fp with external function InitializeExternalFieldsOnGridUsingParser(Efield_fp[lev][0].get(), Efield_fp[lev][1].get(), Efield_fp[lev][2].get(), - str_Ex_ext_grid_function, - str_Ey_ext_grid_function, - str_Ez_ext_grid_function, + Exfield_parser.get(), + Eyfield_parser.get(), + Ezfield_parser.get(), Ex_nodal_flag, Ey_nodal_flag, Ez_nodal_flag, lev); if (lev > 0) { InitializeExternalFieldsOnGridUsingParser(Efield_aux[lev][0].get(), Efield_aux[lev][1].get(), Efield_aux[lev][2].get(), - str_Ex_ext_grid_function, - str_Ey_ext_grid_function, - str_Ez_ext_grid_function, + Exfield_parser.get(), + Eyfield_parser.get(), + Ezfield_parser.get(), Ex_nodal_flag, Ey_nodal_flag, Ez_nodal_flag, lev); InitializeExternalFieldsOnGridUsingParser(Efield_cp[lev][0].get(), Efield_cp[lev][1].get(), Efield_cp[lev][2].get(), - str_Ex_ext_grid_function, - str_Ey_ext_grid_function, - str_Ez_ext_grid_function, + Exfield_parser.get(), + Eyfield_parser.get(), + Ezfield_parser.get(), Ex_nodal_flag, Ey_nodal_flag, Ez_nodal_flag, lev); } @@ -428,22 +443,11 @@ WarpX::InitLevelDataFFT (int lev, Real time) void WarpX::InitializeExternalFieldsOnGridUsingParser ( MultiFab *mfx, MultiFab *mfy, MultiFab *mfz, - const std::string x_function, const std::string y_function, - const std::string z_function, IntVect x_nodal_flag, + ParserWrapper *xfield_parser, ParserWrapper *yfield_parser, + ParserWrapper *zfield_parser, IntVect x_nodal_flag, IntVect y_nodal_flag, IntVect z_nodal_flag, const int lev) { - std::unique_ptr xfield_parsewrap; - std::unique_ptr yfield_parsewrap; - std::unique_ptr zfield_parsewrap; - - xfield_parsewrap.reset(new ParserWrapper(makeParser(x_function))); - yfield_parsewrap.reset(new ParserWrapper(makeParser(y_function))); - zfield_parsewrap.reset(new ParserWrapper(makeParser(z_function))); - - ParserWrapper *xfield_wrap = xfield_parsewrap.get(); - ParserWrapper *yfield_wrap = yfield_parsewrap.get(); - ParserWrapper *zfield_wrap = zfield_parsewrap.get(); const auto dx_lev = geom[lev].CellSizeArray(); const RealBox& real_box = geom[lev].ProbDomain(); @@ -490,7 +494,7 @@ WarpX::InitializeExternalFieldsOnGridUsingParser ( Real z = k*dx_lev[2] + real_box.lo(2) + fac_z; #endif // Initialize the x-component of the field. - mfxfab(i,j,k) = xfield_wrap->getField(x,y,z); + mfxfab(i,j,k) = xfield_parser->getField(x,y,z); }, [=] AMREX_GPU_DEVICE (int i, int j, int k) { Real fac_x = (1.0 - mfy_type[0]) * dx_lev[0]*0.5; @@ -506,7 +510,7 @@ WarpX::InitializeExternalFieldsOnGridUsingParser ( Real z = k*dx_lev[2] + real_box.lo(2) + fac_z; #endif // Initialize the y-component of the field. - mfyfab(i,j,k) = yfield_wrap->getField(x,y,z); + mfyfab(i,j,k) = yfield_parser->getField(x,y,z); }, [=] AMREX_GPU_DEVICE (int i, int j, int k) { Real fac_x = (1.0 - mfz_type[0]) * dx_lev[0]*0.5; @@ -522,7 +526,7 @@ WarpX::InitializeExternalFieldsOnGridUsingParser ( Real z = k*dx_lev[2] + real_box.lo(2) + fac_z; #endif // Initialize the z-component of the field. - mfzfab(i,j,k) = zfield_wrap->getField(x,y,z); + mfzfab(i,j,k) = zfield_parser->getField(x,y,z); }, amrex::Gpu::numThreadsPerBlockParallelFor() * sizeof(double) * 3 ); diff --git a/Source/Utils/WarpXMovingWindow.cpp b/Source/Utils/WarpXMovingWindow.cpp index 247c89869..c1c83d847 100644 --- a/Source/Utils/WarpXMovingWindow.cpp +++ b/Source/Utils/WarpXMovingWindow.cpp @@ -101,9 +101,25 @@ WarpX::MoveWindow (bool move_j) // Fine grid // initialize with external field = true and B_flag = true; - shiftMF(*Bfield_fp[lev][dim], geom[lev], num_shift, dir, true, true); + ParserWrapper *Bfield_parser; + ParserWrapper *Efield_parser; + bool use_Bparser = false; + bool use_Eparser = false; + if (B_ext_grid_s == "parse_b_ext_grid_function") { + use_Bparser = true; + if (dim == 0) Bfield_parser = Bxfield_parser.get(); + if (dim == 1) Bfield_parser = Byfield_parser.get(); + if (dim == 2) Bfield_parser = Bzfield_parser.get(); + } + shiftMF(*Bfield_fp[lev][dim], geom[lev], num_shift, dir, B_external_grid[dim], use_Bparser, Bfield_parser); // initialize with external field = true and B_flag = false; - shiftMF(*Efield_fp[lev][dim], geom[lev], num_shift, dir, true, false); + if (E_ext_grid_s == "parse_e_ext_grid_function") { + use_Eparser = true; + if (dim == 0) Efield_parser = Exfield_parser.get(); + if (dim == 1) Efield_parser = Eyfield_parser.get(); + if (dim == 2) Efield_parser = Ezfield_parser.get(); + } + shiftMF(*Efield_fp[lev][dim], geom[lev], num_shift, dir, E_external_grid[dim], use_Eparser, Efield_parser); if (move_j) { shiftMF(*current_fp[lev][dim], geom[lev], num_shift, dir); } @@ -117,9 +133,9 @@ WarpX::MoveWindow (bool move_j) if (lev > 0) { // Coarse grid // initialize with external field = true and B_flag = true; - shiftMF(*Bfield_cp[lev][dim], geom[lev-1], num_shift_crse, dir, true, true); + shiftMF(*Bfield_cp[lev][dim], geom[lev-1], num_shift_crse, dir, B_external_grid[dim], use_Bparser, Bfield_parser); // initialize with external field = true and B_flag = false; - shiftMF(*Efield_cp[lev][dim], geom[lev-1], num_shift_crse, dir, true, false); + shiftMF(*Efield_cp[lev][dim], geom[lev-1], num_shift_crse, dir, E_external_grid[dim], use_Eparser, Efield_parser); shiftMF(*Bfield_aux[lev][dim], geom[lev], num_shift, dir); shiftMF(*Efield_aux[lev][dim], geom[lev], num_shift, dir); if (move_j) { @@ -137,7 +153,7 @@ WarpX::MoveWindow (bool move_j) // Shift scalar component F for dive cleaning if (do_dive_cleaning) { // Fine grid - shiftMF(*F_fp[lev], geom[lev], num_shift, dir); + shiftMF(*F_fp[lev], geom[lev], num_shift, dir); if (do_pml && pml[lev]->ok()) { MultiFab* pml_F = pml[lev]->GetF_fp(); shiftMF(*pml_F, geom[lev], num_shift, dir); @@ -209,15 +225,13 @@ WarpX::MoveWindow (bool move_j) void WarpX::shiftMF (MultiFab& mf, const Geometry& geom, int num_shift, int dir, - bool ext_init, bool B_flag) + amrex::Real external_field, bool useparser, ParserWrapper *field_parser) { BL_PROFILE("WarpX::shiftMF()"); const BoxArray& ba = mf.boxArray(); const DistributionMapping& dm = mf.DistributionMap(); const int nc = mf.nComp(); const IntVect& ng = mf.nGrowVect(); - // default value of external_field = 0.0 for initialization of mf - amrex::Real external_field = 0.0; AMREX_ALWAYS_ASSERT(ng.min() >= num_shift); @@ -255,51 +269,6 @@ WarpX::shiftMF (MultiFab& mf, const Geometry& geom, int num_shift, int dir, const RealBox& real_box = geom.ProbDomain(); const auto dx = geom.CellSizeArray(); - std::unique_ptr field_parsewrap; - bool useparser = false; - - if (ext_init == true && B_flag == true) { - if (B_ext_grid_s == "constant" || B_ext_grid_s == "default") - external_field = B_external_grid[dir]; - if (B_ext_grid_s == "parse_b_ext_grid_function") { - useparser = true; - if (dir==0) - field_parsewrap.reset(new ParserWrapper( - makeParser(str_Bx_ext_grid_function))); - if (dir==1) -#if (AMREX_SPACEDIM==2) - field_parsewrap.reset(new ParserWrapper( - makeParser(str_Bz_ext_grid_function))); -#else - field_parsewrap.reset(new ParserWrapper( - makeParser(str_By_ext_grid_function))); -#endif - if (dir==2) - field_parsewrap.reset(new ParserWrapper( - makeParser(str_Bz_ext_grid_function))); - } - } - if (ext_init == true && B_flag == false) { - if (E_ext_grid_s == "constant" || E_ext_grid_s == "default") - external_field = E_external_grid[dir]; - if (E_ext_grid_s == "parse_e_ext_grid_function") { - if (dir==0) - field_parsewrap.reset(new ParserWrapper( - makeParser(str_Ex_ext_grid_function))); - if (dir==1) -#if (AMREX_SPACEDIM==2) - field_parsewrap.reset(new ParserWrapper( - makeParser(str_Ez_ext_grid_function))); -#else - field_parsewrap.reset(new ParserWrapper( - makeParser(str_Ey_ext_grid_function))); -#endif - if (dir==2) - field_parsewrap.reset(new ParserWrapper( - makeParser(str_Ez_ext_grid_function))); - useparser = true; - } - } #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -326,7 +295,6 @@ WarpX::shiftMF (MultiFab& mf, const Geometry& geom, int num_shift, int dir, for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { mf_type[idim] = mf_IndexType.nodeCentered(idim); } - ParserWrapper *field_wrap = field_parsewrap.get(); amrex::ParallelFor (outbox, nc, [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) noexcept @@ -344,7 +312,7 @@ WarpX::shiftMF (MultiFab& mf, const Geometry& geom, int num_shift, int dir, Real fac_z = (1.0 - mf_type[2]) * dx[2]*0.5; Real z = k*dx[2] + real_box.lo(2) + fac_z; #endif - srcfab(i,j,k,n) = field_wrap->getField(x,y,z); + srcfab(i,j,k,n) = field_parser->getField(x,y,z); } , amrex::Gpu::numThreadsPerBlockParallelFor() * sizeof(double)*3 ); diff --git a/Source/Utils/WarpXUtil.cpp b/Source/Utils/WarpXUtil.cpp index 152eaba07..4dabee8b6 100644 --- a/Source/Utils/WarpXUtil.cpp +++ b/Source/Utils/WarpXUtil.cpp @@ -183,7 +183,6 @@ void Store_parserString(std::string query_string, } -//namespace { WarpXParser makeParser (std::string const& parse_function) { WarpXParser parser(parse_function); @@ -207,4 +206,3 @@ WarpXParser makeParser (std::string const& parse_function) } return parser; } -//} diff --git a/Source/WarpX.H b/Source/WarpX.H index 68e84c611..f4b892e45 100644 --- a/Source/WarpX.H +++ b/Source/WarpX.H @@ -94,8 +94,10 @@ public: MultiParticleContainer& GetPartContainer () { return *mypc; } - static void shiftMF (amrex::MultiFab& mf, const amrex::Geometry& geom, int num_shift, int dir, - bool ext_init=false, bool B_flag=false); + static void shiftMF (amrex::MultiFab& mf, const amrex::Geometry& geom, + int num_shift, int dir, amrex::Real external_field=0.0, + bool useparser = false, + ParserWrapper *field_parser=nullptr); static void GotoNextLine (std::istream& is); @@ -120,6 +122,15 @@ public: static std::string str_Ey_ext_grid_function; static std::string str_Ez_ext_grid_function; + // ParserWrapper for B_external on the grid + std::unique_ptr Bxfield_parser; + std::unique_ptr Byfield_parser; + std::unique_ptr Bzfield_parser; + // ParserWrapper for E_external on the grid + std::unique_ptr Exfield_parser; + std::unique_ptr Eyfield_parser; + std::unique_ptr Ezfield_parser; + // Algorithms static long current_deposition_algo; static long charge_deposition_algo; @@ -391,8 +402,8 @@ public: */ void InitializeExternalFieldsOnGridUsingParser ( amrex::MultiFab *mfx, amrex::MultiFab *mfy, amrex::MultiFab *mfz, - const std::string x_function, const std::string y_function, - const std::string z_function, amrex::IntVect x_nodal_flag, + ParserWrapper *xfield_parser, ParserWrapper *yfield_parser, + ParserWrapper *zfield_parser, amrex::IntVect x_nodal_flag, amrex::IntVect y_nodal_flag, amrex::IntVect z_nodal_flag, const int lev); protected: -- cgit v1.2.3 From 11f2f2e55d0e940f2262cb97ab5d03633c863fad Mon Sep 17 00:00:00 2001 From: RevathiJambunathan Date: Tue, 7 Jan 2020 17:53:50 -0800 Subject: added ParmParse object in Store_parserString --- Source/Initialization/WarpXInitData.cpp | 12 ++++++------ Source/Utils/WarpXUtil.H | 4 +++- Source/Utils/WarpXUtil.cpp | 3 +-- 3 files changed, 10 insertions(+), 9 deletions(-) (limited to 'Source/Utils/WarpXUtil.cpp') diff --git a/Source/Initialization/WarpXInitData.cpp b/Source/Initialization/WarpXInitData.cpp index 534ffb0a8..6d59ce34d 100644 --- a/Source/Initialization/WarpXInitData.cpp +++ b/Source/Initialization/WarpXInitData.cpp @@ -291,11 +291,11 @@ WarpX::InitLevelData (int lev, Real time) // provided in the input file. if (B_ext_grid_s == "parse_b_ext_grid_function") { - Store_parserString("Bx_external_grid_function(x,y,z)", + Store_parserString(pp, "Bx_external_grid_function(x,y,z)", str_Bx_ext_grid_function); - Store_parserString("By_external_grid_function(x,y,z)", + Store_parserString(pp, "By_external_grid_function(x,y,z)", str_By_ext_grid_function); - Store_parserString("Bz_external_grid_function(x,y,z)", + Store_parserString(pp, "Bz_external_grid_function(x,y,z)", str_Bz_ext_grid_function); Bxfield_parser.reset(new ParserWrapper( @@ -340,11 +340,11 @@ WarpX::InitLevelData (int lev, Real time) // provided in the input file. if (E_ext_grid_s == "parse_e_ext_grid_function") { - Store_parserString("Ex_external_grid_function(x,y,z)", + Store_parserString(pp, "Ex_external_grid_function(x,y,z)", str_Ex_ext_grid_function); - Store_parserString("Ey_external_grid_function(x,y,z)", + Store_parserString(pp, "Ey_external_grid_function(x,y,z)", str_Ey_ext_grid_function); - Store_parserString("Ez_external_grid_function(x,y,z)", + Store_parserString(pp, "Ez_external_grid_function(x,y,z)", str_Ez_ext_grid_function); Exfield_parser.reset(new ParserWrapper( diff --git a/Source/Utils/WarpXUtil.H b/Source/Utils/WarpXUtil.H index cdba7cd6d..fa4930ba6 100644 --- a/Source/Utils/WarpXUtil.H +++ b/Source/Utils/WarpXUtil.H @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -20,11 +21,12 @@ void NullifyMF(amrex::MultiFab& mf, int lev, amrex::Real zmin, * \brief Parse a string (typically a mathematical expression) from the * input file and store it into a variable. * + * \param ParmParse pp used to read the query_string pp.=string * \param parmparse_string String used to initialize ParmParse * \param query_string ParmParse.query will look for this string * \param stored_string variable in which the string to parse is stored */ -void Store_parserString(std::string query_string, +void Store_parserString(amrex::ParmParse &pp, std::string query_string, std::string& stored_string); namespace WarpXUtilIO{ diff --git a/Source/Utils/WarpXUtil.cpp b/Source/Utils/WarpXUtil.cpp index 4dabee8b6..e9fb958fd 100644 --- a/Source/Utils/WarpXUtil.cpp +++ b/Source/Utils/WarpXUtil.cpp @@ -164,11 +164,10 @@ namespace WarpXUtilIO{ } } -void Store_parserString(std::string query_string, +void Store_parserString(amrex::ParmParse& pp, std::string query_string, std::string& stored_string) { - ParmParse pp("warpx"); char cstr[query_string.size()+1]; strcpy(cstr, query_string.c_str()); -- cgit v1.2.3