From b739ed9ccdbfeb878ead2a9d2a9ad61fbcfce35e Mon Sep 17 00:00:00 2001 From: Revathi Jambunathan <41089244+RevathiJambunathan@users.noreply.github.com> Date: Tue, 13 Jul 2021 00:27:49 -0700 Subject: Interface silver mueller (#2051) * interface silvermueller with refactored boundary interface * add interface in silver mueller input files * define first and second half for EvolveB * add do_pml parse snce RZ needs do_pml to be st to false * Silver-Mueller boundary condition in docs * add firsthalf in ApplyBfieldBoundary within PushPSATD as only first first half is used to apply silvermueller * CallSilverMueller once for all boundaries * remove unused do silvermueller flag * fix typo in input file * Apply suggestions from code review Co-authored-by: Remi Lehe * abort message if silver-mueller is not selected on all valid boundaries * fix typo * fix eol * remove ifdef from inside the Assert message * check silver-mueller selection after reading all boundaries Co-authored-by: Remi Lehe --- Source/Utils/WarpXUtil.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'Source/Utils/WarpXUtil.cpp') diff --git a/Source/Utils/WarpXUtil.cpp b/Source/Utils/WarpXUtil.cpp index 4ea0f14c0..70aec4253 100644 --- a/Source/Utils/WarpXUtil.cpp +++ b/Source/Utils/WarpXUtil.cpp @@ -568,6 +568,38 @@ void ReadBCParams () } } } + // temporarily check : If silver mueller is selected for one boundary, it should be + // selected at all valid boundaries. + for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { + if (WarpX::field_boundary_lo[idim] == FieldBoundaryType::Absorbing_SilverMueller || + WarpX::field_boundary_hi[idim] == FieldBoundaryType::Absorbing_SilverMueller){ +#if (AMREX_SPACEDIM == 3) + AMREX_ALWAYS_ASSERT_WITH_MESSAGE( + (WarpX::field_boundary_lo[0] == FieldBoundaryType::Absorbing_SilverMueller)&& + (WarpX::field_boundary_hi[0] == FieldBoundaryType::Absorbing_SilverMueller)&& + (WarpX::field_boundary_lo[1] == FieldBoundaryType::Absorbing_SilverMueller)&& + (WarpX::field_boundary_hi[1] == FieldBoundaryType::Absorbing_SilverMueller)&& + (WarpX::field_boundary_lo[2] == FieldBoundaryType::Absorbing_SilverMueller)&& + (WarpX::field_boundary_hi[2] == FieldBoundaryType::Absorbing_SilverMueller) + , " The current implementation requires silver-mueller boundary condition to be applied at all boundaries!"); +#else +#ifndef WARPX_DIM_RZ + AMREX_ALWAYS_ASSERT_WITH_MESSAGE( + (WarpX::field_boundary_lo[0] == FieldBoundaryType::Absorbing_SilverMueller)&& + (WarpX::field_boundary_hi[0] == FieldBoundaryType::Absorbing_SilverMueller)&& + (WarpX::field_boundary_lo[1] == FieldBoundaryType::Absorbing_SilverMueller)&& + (WarpX::field_boundary_hi[1] == FieldBoundaryType::Absorbing_SilverMueller) + , " The current implementation requires silver-mueller boundary condition to be applied at all boundaries!"); +#else + AMREX_ALWAYS_ASSERT_WITH_MESSAGE( + (WarpX::field_boundary_hi[0] == FieldBoundaryType::Absorbing_SilverMueller)&& + (WarpX::field_boundary_lo[1] == FieldBoundaryType::Absorbing_SilverMueller)&& + (WarpX::field_boundary_hi[1] == FieldBoundaryType::Absorbing_SilverMueller) + , " The current implementation requires silver-mueller boundary condition to be applied at all boundaries!"); +#endif +#endif + } + } #ifdef WARPX_DIM_RZ // Ensure code aborts if PEC is specified at r=0 for RZ AMREX_ALWAYS_ASSERT_WITH_MESSAGE( WarpX::field_boundary_lo[0] == FieldBoundaryType::None, -- cgit v1.2.3