diff options
author | 2020-12-23 08:01:37 -0800 | |
---|---|---|
committer | 2020-12-23 08:01:37 -0800 | |
commit | c30596fc489939d77da7ba34ed8dd0004a9b812c (patch) | |
tree | 892d954126c7fda40b84c4c6079a34c140f01e09 /Source/BoundaryConditions/PML.cpp | |
parent | b4dbc8b72c0ee31ac2b90f63dafa930075d5aa0f (diff) | |
download | WarpX-c30596fc489939d77da7ba34ed8dd0004a9b812c.tar.gz WarpX-c30596fc489939d77da7ba34ed8dd0004a9b812c.tar.zst WarpX-c30596fc489939d77da7ba34ed8dd0004a9b812c.zip |
Use PML diagonal components only with div cleaning (#1592)
* Use PML diagonal components only with div cleaning
* Apply @RemiLehe's suggestions and simplify allocations
Diffstat (limited to 'Source/BoundaryConditions/PML.cpp')
-rw-r--r-- | Source/BoundaryConditions/PML.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/Source/BoundaryConditions/PML.cpp b/Source/BoundaryConditions/PML.cpp index 38ea94364..8bc858615 100644 --- a/Source/BoundaryConditions/PML.cpp +++ b/Source/BoundaryConditions/PML.cpp @@ -495,12 +495,16 @@ PML::PML (const BoxArray& grid_ba, const DistributionMapping& /*grid_dm*/, ngf = ngFFT; } + // Allocate diagonal components (xx,yy,zz) only with divergence cleaning + const int ncomp = (do_dive_cleaning) ? 3 : 2; + pml_E_fp[0] = std::make_unique<MultiFab>(amrex::convert( ba, - WarpX::GetInstance().getEfield_fp(0,0).ixType().toIntVect() ), dm, 3, nge ); + WarpX::GetInstance().getEfield_fp(0,0).ixType().toIntVect() ), dm, ncomp, nge ); pml_E_fp[1] = std::make_unique<MultiFab>(amrex::convert( ba, - WarpX::GetInstance().getEfield_fp(0,1).ixType().toIntVect() ), dm, 3, nge ); + WarpX::GetInstance().getEfield_fp(0,1).ixType().toIntVect() ), dm, ncomp, nge ); pml_E_fp[2] = std::make_unique<MultiFab>(amrex::convert( ba, - WarpX::GetInstance().getEfield_fp(0,2).ixType().toIntVect() ), dm, 3, nge ); + WarpX::GetInstance().getEfield_fp(0,2).ixType().toIntVect() ), dm, ncomp, nge ); + pml_B_fp[0] = std::make_unique<MultiFab>(amrex::convert( ba, WarpX::GetInstance().getBfield_fp(0,0).ixType().toIntVect() ), dm, 2, ngb ); pml_B_fp[1] = std::make_unique<MultiFab>(amrex::convert( ba, @@ -508,7 +512,6 @@ PML::PML (const BoxArray& grid_ba, const DistributionMapping& /*grid_dm*/, pml_B_fp[2] = std::make_unique<MultiFab>(amrex::convert( ba, WarpX::GetInstance().getBfield_fp(0,2).ixType().toIntVect() ), dm, 2, ngb ); - pml_E_fp[0]->setVal(0.0); pml_E_fp[1]->setVal(0.0); pml_E_fp[2]->setVal(0.0); @@ -522,6 +525,7 @@ PML::PML (const BoxArray& grid_ba, const DistributionMapping& /*grid_dm*/, WarpX::GetInstance().getcurrent_fp(0,1).ixType().toIntVect() ), dm, 1, ngb ); pml_j_fp[2] = std::make_unique<MultiFab>(amrex::convert( ba, WarpX::GetInstance().getcurrent_fp(0,2).ixType().toIntVect() ), dm, 1, ngb ); + pml_j_fp[0]->setVal(0.0); pml_j_fp[1]->setVal(0.0); pml_j_fp[2]->setVal(0.0); @@ -591,11 +595,12 @@ PML::PML (const BoxArray& grid_ba, const DistributionMapping& /*grid_dm*/, DistributionMapping cdm{cba}; pml_E_cp[0] = std::make_unique<MultiFab>(amrex::convert( cba, - WarpX::GetInstance().getEfield_cp(1,0).ixType().toIntVect() ), cdm, 3, nge ); + WarpX::GetInstance().getEfield_cp(1,0).ixType().toIntVect() ), cdm, ncomp, nge ); pml_E_cp[1] = std::make_unique<MultiFab>(amrex::convert( cba, - WarpX::GetInstance().getEfield_cp(1,1).ixType().toIntVect() ), cdm, 3, nge ); + WarpX::GetInstance().getEfield_cp(1,1).ixType().toIntVect() ), cdm, ncomp, nge ); pml_E_cp[2] = std::make_unique<MultiFab>(amrex::convert( cba, - WarpX::GetInstance().getEfield_cp(1,2).ixType().toIntVect() ), cdm, 3, nge ); + WarpX::GetInstance().getEfield_cp(1,2).ixType().toIntVect() ), cdm, ncomp, nge ); + pml_B_cp[0] = std::make_unique<MultiFab>(amrex::convert( cba, WarpX::GetInstance().getBfield_cp(1,0).ixType().toIntVect() ), cdm, 2, ngb ); pml_B_cp[1] = std::make_unique<MultiFab>(amrex::convert( cba, @@ -616,12 +621,14 @@ PML::PML (const BoxArray& grid_ba, const DistributionMapping& /*grid_dm*/, pml_F_cp->setVal(0.0); } + pml_j_cp[0] = std::make_unique<MultiFab>(amrex::convert( cba, WarpX::GetInstance().getcurrent_cp(1,0).ixType().toIntVect() ), cdm, 1, ngb ); pml_j_cp[1] = std::make_unique<MultiFab>(amrex::convert( cba, WarpX::GetInstance().getcurrent_cp(1,1).ixType().toIntVect() ), cdm, 1, ngb ); pml_j_cp[2] = std::make_unique<MultiFab>(amrex::convert( cba, WarpX::GetInstance().getcurrent_cp(1,2).ixType().toIntVect() ), cdm, 1, ngb ); + pml_j_cp[0]->setVal(0.0); pml_j_cp[1]->setVal(0.0); pml_j_cp[2]->setVal(0.0); |