aboutsummaryrefslogtreecommitdiff
path: root/Source/BoundaryConditions/PML.cpp
diff options
context:
space:
mode:
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);