diff options
author | 2018-12-12 10:36:42 -0800 | |
---|---|---|
committer | 2018-12-12 10:36:42 -0800 | |
commit | 86ff3fa5cfb5695f55cd514d8df0e99b81187cce (patch) | |
tree | 22c9f627f37ad905bee89782cb71b4a14e468d53 /Source/WarpX.cpp | |
parent | 22dd9a7bdbfcf07fb3ad5d442011e4423cddbd6c (diff) | |
download | WarpX-86ff3fa5cfb5695f55cd514d8df0e99b81187cce.tar.gz WarpX-86ff3fa5cfb5695f55cd514d8df0e99b81187cce.tar.zst WarpX-86ff3fa5cfb5695f55cd514d8df0e99b81187cce.zip |
manually reverting back to last known working version of WarpX
Diffstat (limited to 'Source/WarpX.cpp')
-rw-r--r-- | Source/WarpX.cpp | 89 |
1 files changed, 83 insertions, 6 deletions
diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index 44eff9cd4..1828ebcec 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -43,11 +43,16 @@ long WarpX::nox = 1; long WarpX::noy = 1; long WarpX::noz = 1; +bool WarpX::use_fdtd_nci_corr = false; +int WarpX::l_lower_order_in_v = true; + bool WarpX::use_laser = false; bool WarpX::use_filter = false; bool WarpX::serialize_ics = false; bool WarpX::refine_plasma = false; +int WarpX::sort_int = -1; + bool WarpX::do_boosted_frame_diagnostic = false; int WarpX::num_snapshots_lab = std::numeric_limits<int>::lowest(); Real WarpX::dt_snapshots_lab = std::numeric_limits<Real>::lowest(); @@ -91,6 +96,8 @@ int WarpX::n_current_deposition_buffer = -1; WarpX* WarpX::m_instance = nullptr; + + WarpX& WarpX::GetInstance () { @@ -169,6 +176,11 @@ WarpX::WarpX () current_buf.resize(nlevs_max); charge_buf.resize(nlevs_max); + current_fp_owner_masks.resize(nlevs_max); + current_cp_owner_masks.resize(nlevs_max); + rho_fp_owner_masks.resize(nlevs_max); + rho_cp_owner_masks.resize(nlevs_max); + pml.resize(nlevs_max); #ifdef WARPX_DO_ELECTROSTATIC @@ -335,6 +347,7 @@ WarpX::ReadParameters () pp.query("do_dive_cleaning", do_dive_cleaning); pp.query("n_field_gather_buffer", n_field_gather_buffer); pp.query("n_current_deposition_buffer", n_current_deposition_buffer); + pp.query("sort_int", sort_int); pp.query("do_pml", do_pml); pp.query("pml_ncell", pml_ncell); @@ -450,11 +463,13 @@ WarpX::ReadParameters () insitu_start = 0; insitu_int = 0; insitu_config = ""; + insitu_pin_mesh = 0; ParmParse pp("insitu"); pp.query("int", insitu_int); pp.query("start", insitu_start); pp.query("config", insitu_config); + pp.query("pin_mesh", insitu_pin_mesh); } } @@ -492,8 +507,14 @@ WarpX::ClearLevel (int lev) Efield_cax[lev][i].reset(); Bfield_cax[lev][i].reset(); current_buf[lev][i].reset(); + + current_fp_owner_masks[lev][i].reset(); + current_cp_owner_masks[lev][i].reset(); } + rho_fp_owner_masks[lev].reset(); + rho_cp_owner_masks[lev].reset(); + charge_buf[lev].reset(); current_buffer_masks[lev].reset(); @@ -550,7 +571,7 @@ WarpX::AllocLevelData (int lev, const BoxArray& ba, const DistributionMapping& d int ngy = (ngy_tmp % 2) ? ngy_tmp+1 : ngy_tmp; // Always even number int ngz_nonci = (ngz_tmp % 2) ? ngz_tmp+1 : ngz_tmp; // Always even number int ngz; - if (warpx_use_fdtd_nci_corr()) { + if (WarpX::use_fdtd_nci_corr) { int ng = ngz_tmp + (mypc->nstencilz_fdtd_nci_corr-1); ngz = (ng % 2) ? ng+1 : ng; } else { @@ -613,16 +634,24 @@ WarpX::AllocLevelData (int lev, const BoxArray& ba, const DistributionMapping& d current_fp[lev][1].reset( new MultiFab(amrex::convert(ba,jy_nodal_flag),dm,1,ngJ)); current_fp[lev][2].reset( new MultiFab(amrex::convert(ba,jz_nodal_flag),dm,1,ngJ)); - if (do_subcycling == 1 && lev == 0) { + const auto& period = Geom(lev).periodicity(); + current_fp_owner_masks[lev][0] = std::move(current_fp[lev][0]->OwnerMask(period)); + current_fp_owner_masks[lev][1] = std::move(current_fp[lev][1]->OwnerMask(period)); + current_fp_owner_masks[lev][2] = std::move(current_fp[lev][2]->OwnerMask(period)); + + if (do_dive_cleaning || plot_rho) + { + rho_fp[lev].reset(new MultiFab(amrex::convert(ba,IntVect::TheUnitVector()),dm,2,ngRho)); + rho_fp_owner_masks[lev] = std::move(rho_fp[lev]->OwnerMask(period)); + } + + if (do_subcycling == 1 && lev == 0) + { current_store[lev][0].reset( new MultiFab(amrex::convert(ba,jx_nodal_flag),dm,1,ngJ)); current_store[lev][1].reset( new MultiFab(amrex::convert(ba,jy_nodal_flag),dm,1,ngJ)); current_store[lev][2].reset( new MultiFab(amrex::convert(ba,jz_nodal_flag),dm,1,ngJ)); } - if (do_dive_cleaning || plot_rho){ - rho_fp[lev].reset(new MultiFab(amrex::convert(ba,IntVect::TheUnitVector()),dm,2,ngRho)); - } - if (do_dive_cleaning) { F_fp[lev].reset (new MultiFab(amrex::convert(ba,IntVect::TheUnitVector()),dm,1, ngF)); @@ -631,6 +660,7 @@ WarpX::AllocLevelData (int lev, const BoxArray& ba, const DistributionMapping& d else { rho_fp[lev].reset(new MultiFab(amrex::convert(ba,IntVect::TheUnitVector()),dm,2,ngRho)); + rho_fp_owner_masks[lev] = std::move(rho_fp[lev]->OwnerMask(period)); } #endif @@ -678,8 +708,14 @@ WarpX::AllocLevelData (int lev, const BoxArray& ba, const DistributionMapping& d current_cp[lev][1].reset( new MultiFab(amrex::convert(cba,jy_nodal_flag),dm,1,ngJ)); current_cp[lev][2].reset( new MultiFab(amrex::convert(cba,jz_nodal_flag),dm,1,ngJ)); + const auto& cperiod = Geom(lev).periodicity(); + current_cp_owner_masks[lev][0] = std::move(current_cp[lev][0]->OwnerMask(cperiod)); + current_cp_owner_masks[lev][1] = std::move(current_cp[lev][1]->OwnerMask(cperiod)); + current_cp_owner_masks[lev][2] = std::move(current_cp[lev][2]->OwnerMask(cperiod)); + if (do_dive_cleaning || plot_rho){ rho_cp[lev].reset(new MultiFab(amrex::convert(cba,IntVect::TheUnitVector()),dm,2,ngRho)); + rho_cp_owner_masks[lev] = std::move(rho_cp[lev]->OwnerMask(cperiod)); } if (do_dive_cleaning) { @@ -689,6 +725,7 @@ WarpX::AllocLevelData (int lev, const BoxArray& ba, const DistributionMapping& d else { rho_cp[lev].reset(new MultiFab(amrex::convert(cba,IntVect::TheUnitVector()),dm,2,ngRho)); + rho_cp_owner_masks[lev] = std::move(rho_cp[lev]->OwnerMask(cperiod)); } #endif } @@ -808,6 +845,26 @@ WarpX::ComputeDivB (MultiFab& divB, int dcomp, } void +WarpX::ComputeDivB (MultiFab& divB, int dcomp, + const std::array<const MultiFab*, 3>& B, + const std::array<Real,3>& dx, int ngrow) +{ +#ifdef _OPENMP +#pragma omp parallel +#endif + for (MFIter mfi(divB, true); mfi.isValid(); ++mfi) + { + Box bx = mfi.growntilebox(ngrow); + WRPX_COMPUTE_DIVB(bx.loVect(), bx.hiVect(), + BL_TO_FORTRAN_N_ANYD(divB[mfi],dcomp), + BL_TO_FORTRAN_ANYD((*B[0])[mfi]), + BL_TO_FORTRAN_ANYD((*B[1])[mfi]), + BL_TO_FORTRAN_ANYD((*B[2])[mfi]), + dx.data()); + } +} + +void WarpX::ComputeDivE (MultiFab& divE, int dcomp, const std::array<const MultiFab*, 3>& E, const std::array<Real,3>& dx) @@ -828,6 +885,26 @@ WarpX::ComputeDivE (MultiFab& divE, int dcomp, } void +WarpX::ComputeDivE (MultiFab& divE, int dcomp, + const std::array<const MultiFab*, 3>& E, + const std::array<Real,3>& dx, int ngrow) +{ +#ifdef _OPENMP +#pragma omp parallel +#endif + for (MFIter mfi(divE, true); mfi.isValid(); ++mfi) + { + Box bx = mfi.growntilebox(ngrow); + WRPX_COMPUTE_DIVE(bx.loVect(), bx.hiVect(), + BL_TO_FORTRAN_N_ANYD(divE[mfi],dcomp), + BL_TO_FORTRAN_ANYD((*E[0])[mfi]), + BL_TO_FORTRAN_ANYD((*E[1])[mfi]), + BL_TO_FORTRAN_ANYD((*E[2])[mfi]), + dx.data()); + } +} + +void WarpX::applyFilter (MultiFab& dstmf, const MultiFab& srcmf, int scomp, int dcomp, int ncomp) { ncomp = std::min(ncomp, srcmf.nComp()); |