aboutsummaryrefslogtreecommitdiff
path: root/Source/BoundaryConditions/PML.cpp
diff options
context:
space:
mode:
authorGravatar Edoardo Zoni <59625522+EZoni@users.noreply.github.com> 2020-12-23 08:01:37 -0800
committerGravatar GitHub <noreply@github.com> 2020-12-23 08:01:37 -0800
commitc30596fc489939d77da7ba34ed8dd0004a9b812c (patch)
tree892d954126c7fda40b84c4c6079a34c140f01e09 /Source/BoundaryConditions/PML.cpp
parentb4dbc8b72c0ee31ac2b90f63dafa930075d5aa0f (diff)
downloadWarpX-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.cpp21
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);