Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use consistent BCs for J at PEC boundaries #5650

Open
wants to merge 2 commits into
base: development
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 6 additions & 10 deletions Source/BoundaryConditions/WarpXFieldBoundaries.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -266,14 +266,12 @@ void WarpX::ApplyBfieldBoundary (const int lev, PatchType patch_type, DtType a_d
void WarpX::ApplyRhofieldBoundary (const int lev, MultiFab* rho,
PatchType patch_type)
{
if (::isAnyBoundary<ParticleBoundaryType::Reflecting>(particle_boundary_lo, particle_boundary_hi) ||
::isAnyBoundary<ParticleBoundaryType::Thermal>(particle_boundary_lo, particle_boundary_hi) ||
::isAnyBoundary<FieldBoundaryType::PEC>(field_boundary_lo, field_boundary_hi) ||
if (::isAnyBoundary<FieldBoundaryType::PEC>(field_boundary_lo, field_boundary_hi) ||
::isAnyBoundary<FieldBoundaryType::PMC>(field_boundary_lo, field_boundary_hi))
{
PEC::ApplyReflectiveBoundarytoRhofield(rho,
// This routine handles rho at both PEC and PMC boundaries
PEC::ApplyBoundarytoRhofield(rho,
field_boundary_lo, field_boundary_hi,
particle_boundary_lo, particle_boundary_hi,
Geom(lev), lev, patch_type, ref_ratio);
}
}
Expand All @@ -282,14 +280,12 @@ void WarpX::ApplyJfieldBoundary (const int lev, amrex::MultiFab* Jx,
amrex::MultiFab* Jy, amrex::MultiFab* Jz,
PatchType patch_type)
{
if (::isAnyBoundary<ParticleBoundaryType::Reflecting>(particle_boundary_lo, particle_boundary_hi) ||
::isAnyBoundary<ParticleBoundaryType::Thermal>(particle_boundary_lo, particle_boundary_hi) ||
::isAnyBoundary<FieldBoundaryType::PEC>(field_boundary_lo, field_boundary_hi) ||
if (::isAnyBoundary<FieldBoundaryType::PEC>(field_boundary_lo, field_boundary_hi) ||
::isAnyBoundary<FieldBoundaryType::PMC>(field_boundary_lo, field_boundary_hi))
{
PEC::ApplyReflectiveBoundarytoJfield(Jx, Jy, Jz,
// This routine handles J at both PEC and PMC boundaries
PEC::ApplyBoundarytoJfield(Jx, Jy, Jz,
field_boundary_lo, field_boundary_hi,
particle_boundary_lo, particle_boundary_hi,
Geom(lev), lev, patch_type, ref_ratio);
}
}
Expand Down
12 changes: 4 additions & 8 deletions Source/BoundaryConditions/WarpX_PEC.H
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ namespace PEC {
bool split_pml_field = false);

/**
* \brief Reflects charge density deposited over the PEC boundary back into
* \brief Reflects charge density deposited over the PEC or PMC boundary back into
* the simulation domain.
*
* \param[in,out] rho Multifab containing the charge density
Expand All @@ -74,17 +74,15 @@ namespace PEC {
* \param[in] patch_type coarse or fine
* \param[in] ref_ratios vector containing the refinement ratios of the refinement levels
*/
void ApplyReflectiveBoundarytoRhofield(
void ApplyBoundarytoRhofield(
amrex::MultiFab* rho,
const amrex::Array<FieldBoundaryType,AMREX_SPACEDIM>& field_boundary_lo,
const amrex::Array<FieldBoundaryType,AMREX_SPACEDIM>& field_boundary_hi,
const amrex::Array<ParticleBoundaryType,AMREX_SPACEDIM>& particle_boundary_lo,
const amrex::Array<ParticleBoundaryType,AMREX_SPACEDIM>& particle_boundary_hi,
const amrex::Geometry& geom,
int lev, PatchType patch_type, const amrex::Vector<amrex::IntVect>& ref_ratios);

/**
* \brief Reflects current density deposited over the PEC boundary back into
* \brief Reflects current density deposited over the PEC or PMC boundary back into
* the simulation domain.
*
* \param[in,out] Jx, Jy, Jz Multifabs containing the current density
Expand All @@ -97,13 +95,11 @@ namespace PEC {
* \param[in] patch_type coarse or fine
* \param[in] ref_ratios vector containing the refinement ratios of the refinement levels
*/
void ApplyReflectiveBoundarytoJfield(
void ApplyBoundarytoJfield(
amrex::MultiFab* Jx, amrex::MultiFab* Jy,
amrex::MultiFab* Jz,
const amrex::Array<FieldBoundaryType,AMREX_SPACEDIM>& field_boundary_lo,
const amrex::Array<FieldBoundaryType,AMREX_SPACEDIM>& field_boundary_hi,
const amrex::Array<ParticleBoundaryType,AMREX_SPACEDIM>& particle_boundary_lo,
const amrex::Array<ParticleBoundaryType,AMREX_SPACEDIM>& particle_boundary_hi,
const amrex::Geometry& geom,
int lev, PatchType patch_type, const amrex::Vector<amrex::IntVect>& ref_ratios);

Expand Down
Loading
Loading