From 5e7137073c5c1b0f0fbb0e4299dbaddad36376ba Mon Sep 17 00:00:00 2001 From: rzamora2 Date: Thu, 10 Jun 2021 11:32:39 -0700 Subject: [PATCH 01/17] change plot.period to plot.intervals --- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_PR10 | 2 +- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_bulkmu | 2 +- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs | 2 +- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original | 2 +- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_periodic_noMs | 2 +- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_tfmu | 2 +- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled | 2 +- .../Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled_unsat | 2 +- Examples/Tests/Macroscopic_Maxwell/inputs_3d_PR10 | 2 +- Examples/Tests/Macroscopic_Maxwell/inputs_3d_periodic_noMs | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_PR10 b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_PR10 index 2a1dc45d4..c4eb2bdf0 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_PR10 +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_PR10 @@ -100,7 +100,7 @@ warpx.Mz_external_grid_function(x,y,z) = 0. #Diagnostics diagnostics.diags_names = plt -plt.period = 10 +plt.intervals = 10 plt.diag_type = Full plt.fields_to_plot = Ex Ey Ez Hx Hy Hz Bx By Bz Mx_xface My_xface Mz_xface Mx_yface My_yface Mz_yface Mx_zface My_zface Mz_zface plt.plot_raw_fields = 0 diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_bulkmu b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_bulkmu index 58429d053..d5e9e8ca3 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_bulkmu +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_bulkmu @@ -98,7 +98,7 @@ warpx.Mz_external_grid_function(x,y,z) = 0. #Diagnostics diagnostics.diags_names = plt -plt.period = 10 +plt.intervals = 10 plt.diag_type = Full plt.fields_to_plot = Ex Ey Ez Hx Hy Hz Bx By Bz Mx_xface My_xface Mz_xface Mx_yface My_yface Mz_yface Mx_zface My_zface Mz_zface plt.plot_raw_fields = 0 diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs index 58bb68348..be99b7c24 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs @@ -63,6 +63,6 @@ macroscopic.mag_gamma = 0. # Diagnostics diagnostics.diags_names = plt -plt.period = 10 +plt.intervals = 10 plt.fields_to_plot = Ex Ey Ez Hx Hy Hz Bx By Bz plt.diag_type = Full diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original index bf68e57a6..48a7c9f06 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original @@ -108,7 +108,7 @@ warpx.M_external_grid = 140000. 0. 0. #Diagnostics diagnostics.diags_names = plt -plt.period = 10 +plt.interval = 10 plt.diag_type = Full plt.fields_to_plot = Ex Ey Ez Bx By Bz Mx_xface My_xface Mz_xface Mx_yface My_yface Mz_yface Mx_zface My_zface Mz_zface plt.plot_raw_fields = 0 diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_periodic_noMs b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_periodic_noMs index 66e6a671f..1e3b4d81e 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_periodic_noMs +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_periodic_noMs @@ -63,6 +63,6 @@ macroscopic.mag_gamma = 0. # Diagnostics diagnostics.diags_names = plt -plt.period = 10 +plt.intervals = 10 plt.fields_to_plot = Ex Ey Ez Hx Hy Hz Bx By Bz Mx_xface Mx_yface Mx_zface My_xface Mz_xface plt.diag_type = Full diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_tfmu b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_tfmu index 1e1b25261..340c7e895 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_tfmu +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_tfmu @@ -106,7 +106,7 @@ warpx.Mz_external_grid_function(x,y,z) = 0. #Diagnostics diagnostics.diags_names = plt -plt.period = 1 +plt.intervals = 1 plt.diag_type = Full #plt.fields_to_plot = Ex Ey Ez Bx By Bz plt.fields_to_plot = Ex Ey Ez Hx Hy Hz Bx By Bz Mx_xface My_xface Mz_xface Mx_yface My_yface Mz_yface Mx_zface My_zface Mz_zface diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled index d956d3493..9111cd96c 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled @@ -78,7 +78,7 @@ warpx.M_external_grid = 140000. 0. 0. #Diagnostics diagnostics.diags_names = plt -plt.period = 10 +plt.intervals= 10 plt.diag_type = Full plt.fields_to_plot = Ex Ey Ez Bx By Bz Mx_xface My_xface Mz_xface Mx_yface My_yface Mz_yface Mx_zface My_zface Mz_zface plt.plot_raw_fields = 0 diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled_unsat b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled_unsat index 0629d75d6..f1f82eb90 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled_unsat +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled_unsat @@ -78,7 +78,7 @@ warpx.M_external_grid = 10000. 0. 0. #Diagnostics diagnostics.diags_names = plt -plt.period = 10 +plt.intervals = 10 plt.diag_type = Full plt.fields_to_plot = Ex Ey Ez Bx By Bz Mx_xface My_xface Mz_xface Mx_yface My_yface Mz_yface Mx_zface My_zface Mz_zface plt.plot_raw_fields = 0 diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_PR10 b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_PR10 index 7165f0f7b..b70e87482 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_PR10 +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_PR10 @@ -72,7 +72,7 @@ warpx.Bz_external_grid_function(x,y,z) = 0. #Diagnostics diagnostics.diags_names = plt -plt.period = 10 +plt.intervals = 10 plt.diag_type = Full plt.fields_to_plot = Ex Ey Ez Bx By Bz plt.plot_raw_fields = 0 diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_periodic_noMs b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_periodic_noMs index 1f6b6022a..b14213753 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_periodic_noMs +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_periodic_noMs @@ -54,6 +54,6 @@ warpx.Bz_external_grid_function(x,y,z) = 0. # Diagnostics diagnostics.diags_names = plt -plt.period = 10 +plt.intervals = 10 plt.fields_to_plot = Ex Ey Ez Bx By Bz plt.diag_type = Full From b2d7bbdb1e8c6b518a4d8fa68c331456bfc2618f Mon Sep 17 00:00:00 2001 From: rzamora2 Date: Thu, 10 Jun 2021 11:37:50 -0700 Subject: [PATCH 02/17] changed plot.period to plot.intervals --- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original index 48a7c9f06..cf35b8a2c 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original @@ -108,7 +108,7 @@ warpx.M_external_grid = 140000. 0. 0. #Diagnostics diagnostics.diags_names = plt -plt.interval = 10 +plt.intervals = 10 plt.diag_type = Full plt.fields_to_plot = Ex Ey Ez Bx By Bz Mx_xface My_xface Mz_xface Mx_yface My_yface Mz_yface Mx_zface My_zface Mz_zface plt.plot_raw_fields = 0 From 3a82ef37851f314480064ae008dc1074941f3627 Mon Sep 17 00:00:00 2001 From: jackieyao0114 Date: Thu, 10 Jun 2021 14:12:54 -0700 Subject: [PATCH 03/17] updated Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs --- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs index 58bb68348..e6b243439 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs @@ -9,11 +9,13 @@ amr.n_cell = 16 16 128 amr.max_grid_size = 32 amr.blocking_factor = 16 geometry.coord_sys = 0 -geometry.is_periodic = 1 1 0 geometry.prob_lo = -16.e-6 -16.e-6 -128.e-6 geometry.prob_hi = 16.e-6 16.e-6 128.e-6 amr.max_level = 0 +boundary.field_lo = periodic periodic pec +boundary.field_lo = periodic periodic pec + ################################# ############ NUMERICS ########### ################################# @@ -63,6 +65,6 @@ macroscopic.mag_gamma = 0. # Diagnostics diagnostics.diags_names = plt -plt.period = 10 +plt.intervals = 10 plt.fields_to_plot = Ex Ey Ez Hx Hy Hz Bx By Bz plt.diag_type = Full From 3200d03f39404e5ea86435924eeedd300cda8093 Mon Sep 17 00:00:00 2001 From: Jackie Yao Date: Tue, 29 Jun 2021 16:13:52 -0700 Subject: [PATCH 04/17] some tweaks Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs --- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs index e6b243439..be99b7c24 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs @@ -9,13 +9,11 @@ amr.n_cell = 16 16 128 amr.max_grid_size = 32 amr.blocking_factor = 16 geometry.coord_sys = 0 +geometry.is_periodic = 1 1 0 geometry.prob_lo = -16.e-6 -16.e-6 -128.e-6 geometry.prob_hi = 16.e-6 16.e-6 128.e-6 amr.max_level = 0 -boundary.field_lo = periodic periodic pec -boundary.field_lo = periodic periodic pec - ################################# ############ NUMERICS ########### ################################# From 6dde33abdef513d5a5d07bad7520c8612b613f13 Mon Sep 17 00:00:00 2001 From: Jackie Yao Date: Tue, 29 Jun 2021 20:06:46 -0700 Subject: [PATCH 05/17] fixed bug in getting mag_exchange_init_style and mag_anisotropy_init_style --- .../MacroscopicProperties.cpp | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp index 309ad8bec..4e8c97fe1 100644 --- a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp +++ b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp @@ -22,6 +22,8 @@ MacroscopicProperties::ReadParameters () // The vacuum values are used as default for the macroscopic parameters // with a warning message to the user to indicate that no value was specified. + auto &warpx = WarpX::GetInstance(); + // Query input for material conductivity, sigma. bool sigma_specified = false; if (queryWithParser(pp_macroscopic, "sigma", m_sigma)) { @@ -114,24 +116,28 @@ MacroscopicProperties::ReadParameters () makeParser(m_str_mag_gamma_function,{"x","y","z"}))); } - pp_macroscopic.get("mag_exchange_init_style", m_mag_exchange_s); - if (m_mag_exchange_s == "constant") pp_macroscopic.get("mag_exchange", m_mag_exchange); - // _mag_ such that it's clear the exch variable is only meaningful for magnetic materials - //initialization with parser - if (m_mag_exchange_s == "parse_mag_exchange_function") { - Store_parserString(pp_macroscopic, "mag_exchange_function(x,y,z)", m_str_mag_exchange_function); - m_mag_exchange_parser.reset(new ParserWrapper<3>( - makeParser(m_str_mag_exchange_function,{"x","y","z"}))); - } - - pp_macroscopic.get("mag_anisotropy_init_style", m_mag_anisotropy_s); - if (m_mag_anisotropy_s == "constant") pp_macroscopic.get("mag_anisotropy", m_mag_anisotropy); - // _mag_ such that it's clear the exch variable is only meaningful for magnetic materials - //initialization with parser - if (m_mag_anisotropy_s == "parse_mag_anisotropy_function") { - Store_parserString(pp_macroscopic, "mag_anisotropy_function(x,y,z)", m_str_mag_anisotropy_function); - m_mag_anisotropy_parser.reset(new ParserWrapper<3>( - makeParser(m_str_mag_anisotropy_function,{"x","y","z"}))); + if (warpx.mag_LLG_exchange_coupling == 1) { // spin exchange coupling turned off by default + pp_macroscopic.get("mag_exchange_init_style", m_mag_exchange_s); + if (m_mag_exchange_s == "constant") pp_macroscopic.get("mag_exchange", m_mag_exchange); + // _mag_ such that it's clear the exch variable is only meaningful for magnetic materials + //initialization with parser + if (m_mag_exchange_s == "parse_mag_exchange_function") { + Store_parserString(pp_macroscopic, "mag_exchange_function(x,y,z)", m_str_mag_exchange_function); + m_mag_exchange_parser.reset(new ParserWrapper<3>( + makeParser(m_str_mag_exchange_function,{"x","y","z"}))); + } + } + + if (warpx.mag_LLG_anisotropy_coupling == 1) { // magnetic crystal is considered as isotropic by default + pp_macroscopic.get("mag_anisotropy_init_style", m_mag_anisotropy_s); + if (m_mag_anisotropy_s == "constant") pp_macroscopic.get("mag_anisotropy", m_mag_anisotropy); + // _mag_ such that it's clear the exch variable is only meaningful for magnetic materials + //initialization with parser + if (m_mag_anisotropy_s == "parse_mag_anisotropy_function") { + Store_parserString(pp_macroscopic, "mag_anisotropy_function(x,y,z)", m_str_mag_anisotropy_function); + m_mag_anisotropy_parser.reset(new ParserWrapper<3>( + makeParser(m_str_mag_anisotropy_function,{"x","y","z"}))); + } } m_mag_normalized_error = 0.1; From f581c095a57a465509689a4eb7e80c4e20af684f Mon Sep 17 00:00:00 2001 From: Andy Nonaka Date: Thu, 1 Jul 2021 16:46:27 -0700 Subject: [PATCH 06/17] EOL whitespace --- .../MacroscopicProperties/MacroscopicProperties.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp index 4e8c97fe1..d0286e4f0 100644 --- a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp +++ b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp @@ -23,7 +23,7 @@ MacroscopicProperties::ReadParameters () // with a warning message to the user to indicate that no value was specified. auto &warpx = WarpX::GetInstance(); - + // Query input for material conductivity, sigma. bool sigma_specified = false; if (queryWithParser(pp_macroscopic, "sigma", m_sigma)) { @@ -126,9 +126,9 @@ MacroscopicProperties::ReadParameters () m_mag_exchange_parser.reset(new ParserWrapper<3>( makeParser(m_str_mag_exchange_function,{"x","y","z"}))); } - } - - if (warpx.mag_LLG_anisotropy_coupling == 1) { // magnetic crystal is considered as isotropic by default + } + + if (warpx.mag_LLG_anisotropy_coupling == 1) { // magnetic crystal is considered as isotropic by default pp_macroscopic.get("mag_anisotropy_init_style", m_mag_anisotropy_s); if (m_mag_anisotropy_s == "constant") pp_macroscopic.get("mag_anisotropy", m_mag_anisotropy); // _mag_ such that it's clear the exch variable is only meaningful for magnetic materials From 7b485767d32a1c87bfbdc3fd23604f38937528db Mon Sep 17 00:00:00 2001 From: jackieyao0114 Date: Tue, 20 Jul 2021 11:42:27 -0700 Subject: [PATCH 07/17] fixed the order of applying excitation and boundary conditions --- Source/Evolve/WarpXEvolve.cpp | 12 +----------- Source/FieldSolver/WarpXPushFieldsEM.cpp | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/Source/Evolve/WarpXEvolve.cpp b/Source/Evolve/WarpXEvolve.cpp index bda242b9a..16e5e4b7f 100644 --- a/Source/Evolve/WarpXEvolve.cpp +++ b/Source/Evolve/WarpXEvolve.cpp @@ -433,8 +433,6 @@ WarpX::OneStep_nosub (Real cur_time) EvolveB(0.5_rt * dt[0]); // We now have B^{n+1/2} if (do_silver_mueller) ApplySilverMuellerBoundary( dt[0] ); FillBoundaryB(guard_cells.ng_FieldSolver); - // ApplyExternalFieldExcitation - ApplyExternalFieldExcitationOnGrid(ExternalFieldType::BfieldExternal); // apply B external excitation; soft source to be fixed #endif #ifdef WARPX_MAG_LLG @@ -448,8 +446,6 @@ WarpX::OneStep_nosub (Real cur_time) } FillBoundaryH(guard_cells.ng_FieldSolver); FillBoundaryM(guard_cells.ng_FieldSolver); - // ApplyExternalFieldExcitation - ApplyExternalFieldExcitationOnGrid(ExternalFieldType::HfieldExternal); // apply H external excitation; soft source to be fixed } else { amrex::Abort("unsupported em_solver_medium for M field"); } @@ -465,9 +461,7 @@ WarpX::OneStep_nosub (Real cur_time) } FillBoundaryE(guard_cells.ng_FieldSolver); - // ApplyExternalFieldExcitation - ApplyExternalFieldExcitationOnGrid(ExternalFieldType::EfieldExternal); // apply E external excitation; soft source to be fixed - + EvolveF(0.5_rt * dt[0], DtType::SecondHalf); #ifndef WARPX_MAG_LLG EvolveB(0.5_rt * dt[0]); // We now have B^{n+1} @@ -493,8 +487,6 @@ WarpX::OneStep_nosub (Real cur_time) // outdated. if (safe_guard_cells) { FillBoundaryB(guard_cells.ng_alloc_EB); - // ApplyExternalFieldExcitation - ApplyExternalFieldExcitationOnGrid(ExternalFieldType::BfieldExternal); // redundant for hs; need to fix the way to increment ss } #ifdef WARPX_MAG_LLG if (WarpX::em_solver_medium == MediumForEM::Macroscopic) { @@ -514,8 +506,6 @@ WarpX::OneStep_nosub (Real cur_time) if ( safe_guard_cells ){ FillBoundaryH(guard_cells.ng_alloc_EB); FillBoundaryM(guard_cells.ng_alloc_EB); - // ApplyExternalFieldExcitation - ApplyExternalFieldExcitationOnGrid(ExternalFieldType::HfieldExternal); // redundant for hs; need to fix the way to increment ss } #endif // } // !PSATD diff --git a/Source/FieldSolver/WarpXPushFieldsEM.cpp b/Source/FieldSolver/WarpXPushFieldsEM.cpp index 869c6f841..0557192bc 100644 --- a/Source/FieldSolver/WarpXPushFieldsEM.cpp +++ b/Source/FieldSolver/WarpXPushFieldsEM.cpp @@ -449,6 +449,9 @@ WarpX::EvolveB (int lev, PatchType patch_type, amrex::Real a_dt) m_face_areas[lev], lev, a_dt); } + // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. + ApplyExternalFieldExcitationOnGrid(ExternalFieldType::BfieldExternal); // apply B external excitation + // Evolve B field in PML cells if (do_pml && pml[lev]->ok()) { if (patch_type == PatchType::fine) { @@ -504,6 +507,9 @@ WarpX::EvolveE (int lev, PatchType patch_type, amrex::Real a_dt) F_cp[lev], lev, a_dt ); } + // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. + ApplyExternalFieldExcitationOnGrid(ExternalFieldType::EfieldExternal); // apply E external excitation + // Evolve E field in PML cells if (do_pml && pml[lev]->ok()) { if (patch_type == PatchType::fine) { @@ -666,6 +672,9 @@ WarpX::MacroscopicEvolveE (int lev, PatchType patch_type, amrex::Real a_dt) { amrex::Abort("Macroscopic EvolveE is not implemented for lev > 0, yet."); } + // Apply external field excitation prior to the boundary condition such that excitation does not overwrite B.C. + ApplyExternalFieldExcitationOnGrid(ExternalFieldType::EfieldExternal); // apply E external excitation + // Evolve E field in PML cells if (do_pml && pml[lev]->ok()) { if (patch_type == PatchType::fine) { @@ -736,6 +745,9 @@ WarpX::MacroscopicEvolveHM (int lev, PatchType patch_type, amrex::Real a_dt) { amrex::Abort("Macroscopic EvolveHM is not implemented for lev > 0 yet"); } + // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. + ApplyExternalFieldExcitationOnGrid(ExternalFieldType::HfieldExternal); // apply H external excitation + // Evolve H field in PML cells if (do_pml && pml[lev]->ok()) { if (patch_type == PatchType::fine) { @@ -779,6 +791,9 @@ WarpX::MacroscopicEvolveHM_2nd (int lev, PatchType patch_type, amrex::Real a_dt) amrex::Abort("Macroscopic EvolveHM_2nd is not implemented for lev > 0 yet"); } + // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. + ApplyExternalFieldExcitationOnGrid(ExternalFieldType::HfieldExternal); // apply H external excitation + // Evolve H field in PML cells if (do_pml && pml[lev]->ok()) { if (patch_type == PatchType::fine) { From 131ab6c5536c275b37a265458bdb14f45e88baf1 Mon Sep 17 00:00:00 2001 From: jackieyao0114 Date: Thu, 22 Jul 2021 10:59:05 -0700 Subject: [PATCH 08/17] flipped order of applying pml and pec --- Source/FieldSolver/WarpXPushFieldsEM.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Source/FieldSolver/WarpXPushFieldsEM.cpp b/Source/FieldSolver/WarpXPushFieldsEM.cpp index 0557192bc..c1e633d02 100644 --- a/Source/FieldSolver/WarpXPushFieldsEM.cpp +++ b/Source/FieldSolver/WarpXPushFieldsEM.cpp @@ -398,14 +398,15 @@ WarpX::PushPSATD () // Evolve the fields in the PML boxes for (int lev = 0; lev <= finest_level; ++lev) { - if (do_pml && pml[lev]->ok()) - { - pml[lev]->PushPSATD(lev); - } ApplyEfieldBoundary(lev, PatchType::fine); if (lev > 0) ApplyEfieldBoundary(lev, PatchType::coarse); ApplyBfieldBoundary(lev, PatchType::fine); if (lev > 0) ApplyBfieldBoundary(lev, PatchType::coarse); + + if (do_pml && pml[lev]->ok()) + { + pml[lev]->PushPSATD(lev); + } } #endif } @@ -452,6 +453,8 @@ WarpX::EvolveB (int lev, PatchType patch_type, amrex::Real a_dt) // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. ApplyExternalFieldExcitationOnGrid(ExternalFieldType::BfieldExternal); // apply B external excitation + ApplyBfieldBoundary(lev, patch_type); + // Evolve B field in PML cells if (do_pml && pml[lev]->ok()) { if (patch_type == PatchType::fine) { @@ -463,7 +466,6 @@ WarpX::EvolveB (int lev, PatchType patch_type, amrex::Real a_dt) } } - ApplyBfieldBoundary(lev, patch_type); } void @@ -510,6 +512,8 @@ WarpX::EvolveE (int lev, PatchType patch_type, amrex::Real a_dt) // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. ApplyExternalFieldExcitationOnGrid(ExternalFieldType::EfieldExternal); // apply E external excitation + ApplyEfieldBoundary(lev, patch_type); + // Evolve E field in PML cells if (do_pml && pml[lev]->ok()) { if (patch_type == PatchType::fine) { @@ -537,8 +541,6 @@ WarpX::EvolveE (int lev, PatchType patch_type, amrex::Real a_dt) } } - ApplyEfieldBoundary(lev, patch_type); - } @@ -675,6 +677,8 @@ WarpX::MacroscopicEvolveE (int lev, PatchType patch_type, amrex::Real a_dt) { // Apply external field excitation prior to the boundary condition such that excitation does not overwrite B.C. ApplyExternalFieldExcitationOnGrid(ExternalFieldType::EfieldExternal); // apply E external excitation + ApplyEfieldBoundary(lev, patch_type); + // Evolve E field in PML cells if (do_pml && pml[lev]->ok()) { if (patch_type == PatchType::fine) { @@ -710,7 +714,6 @@ WarpX::MacroscopicEvolveE (int lev, PatchType patch_type, amrex::Real a_dt) { } } - ApplyEfieldBoundary(lev, patch_type); } #ifdef WARPX_MAG_LLG From b79b46ce4aa7a07c2f21fad11f038271e63b57cf Mon Sep 17 00:00:00 2001 From: jackieyao0114 Date: Thu, 22 Jul 2021 14:12:25 -0700 Subject: [PATCH 09/17] fix ApplyBfieldBoundary arguments --- Source/FieldSolver/WarpXPushFieldsEM.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/FieldSolver/WarpXPushFieldsEM.cpp b/Source/FieldSolver/WarpXPushFieldsEM.cpp index 556c5b7f0..d4af6699f 100644 --- a/Source/FieldSolver/WarpXPushFieldsEM.cpp +++ b/Source/FieldSolver/WarpXPushFieldsEM.cpp @@ -423,8 +423,8 @@ WarpX::PushPSATD () { ApplyEfieldBoundary(lev, PatchType::fine); if (lev > 0) ApplyEfieldBoundary(lev, PatchType::coarse); - ApplyBfieldBoundary(lev, PatchType::fine); - if (lev > 0) ApplyBfieldBoundary(lev, PatchType::coarse); + ApplyBfieldBoundary(lev, PatchType::fine, DtType::FirstHalf); + if (lev > 0) ApplyBfieldBoundary(lev, PatchType::coarse, DtType::FirstHalf); if (do_pml && pml[lev]->ok()) { @@ -476,7 +476,7 @@ WarpX::EvolveB (int lev, PatchType patch_type, amrex::Real a_dt, DtType a_dt_typ // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. ApplyExternalFieldExcitationOnGrid(ExternalFieldType::BfieldExternal); // apply B external excitation - ApplyBfieldBoundary(lev, patch_type); + ApplyBfieldBoundary(lev, patch_type, a_dt_type); // Evolve B field in PML cells if (do_pml && pml[lev]->ok()) { From 584743926f3acc2353ad508d53766490455dc256 Mon Sep 17 00:00:00 2001 From: jackieyao0114 Date: Thu, 22 Jul 2021 14:27:24 -0700 Subject: [PATCH 10/17] fixed arguments of EvolveB in Source/Evolve/WarpXEvolve.cpp --- Source/Evolve/WarpXEvolve.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Evolve/WarpXEvolve.cpp b/Source/Evolve/WarpXEvolve.cpp index a6c8b11a5..df3fbc303 100644 --- a/Source/Evolve/WarpXEvolve.cpp +++ b/Source/Evolve/WarpXEvolve.cpp @@ -434,7 +434,7 @@ WarpX::OneStep_nosub (Real cur_time) FillBoundaryF(guard_cells.ng_FieldSolverF); FillBoundaryG(guard_cells.ng_FieldSolverG); #ifndef WARPX_MAG_LLG - EvolveB(0.5_rt * dt[0]); // We now have B^{n+1/2} + EvolveB(0.5_rt * dt[0], DtType::FirstHalf); // We now have B^{n+1/2} if (do_silver_mueller) ApplySilverMuellerBoundary( dt[0] ); FillBoundaryB(guard_cells.ng_FieldSolver); #endif From 9dc0f9a66c8f22169714c21a668c4cf7b3037207 Mon Sep 17 00:00:00 2001 From: jackieyao0114 Date: Thu, 22 Jul 2021 15:28:13 -0700 Subject: [PATCH 11/17] fixed errors from merging: added EvolveG; removed SilverMuellerBoundary --- Source/Evolve/WarpXEvolve.cpp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/Source/Evolve/WarpXEvolve.cpp b/Source/Evolve/WarpXEvolve.cpp index df3fbc303..860d30121 100644 --- a/Source/Evolve/WarpXEvolve.cpp +++ b/Source/Evolve/WarpXEvolve.cpp @@ -435,21 +435,15 @@ WarpX::OneStep_nosub (Real cur_time) FillBoundaryG(guard_cells.ng_FieldSolverG); #ifndef WARPX_MAG_LLG EvolveB(0.5_rt * dt[0], DtType::FirstHalf); // We now have B^{n+1/2} - if (do_silver_mueller) ApplySilverMuellerBoundary( dt[0] ); FillBoundaryB(guard_cells.ng_FieldSolver); #endif #ifdef WARPX_MAG_LLG - if (WarpX::em_solver_medium == MediumForEM::Macroscopic) { //evolveM is not applicable to vacuum - if (mag_time_scheme_order==1){ - MacroscopicEvolveHM(0.5*dt[0]); // we now have M^{n+1/2} and H^{n+1/2} - } else if (mag_time_scheme_order==2){ - MacroscopicEvolveHM_2nd(0.5*dt[0]); // we now have M^{n+1/2} and H^{n+1/2} - } else { - amrex::Abort("unsupported mag_time_scheme_order for M field"); - } - FillBoundaryH(guard_cells.ng_FieldSolver); - FillBoundaryM(guard_cells.ng_FieldSolver); + if (WarpX::em_solver_medium == MediumForEM::Macroscopic) { //evolveM is not applicable to vacuum + if (mag_time_scheme_order==1){ + MacroscopicEvolveHM(0.5*dt[0]); // we now have M^{n+1/2} and H^{n+1/2} + } else if (mag_time_scheme_order==2){ + MacroscopicEvolveHM_2nd(0.5*dt[0]); // we now have M^{n+1/2} and H^{n+1/2} } else { amrex::Abort("unsupported mag_time_scheme_order for M field"); } @@ -474,6 +468,7 @@ WarpX::OneStep_nosub (Real cur_time) FillBoundaryE(guard_cells.ng_FieldSolver); EvolveF(0.5_rt * dt[0], DtType::SecondHalf); + EvolveG(0.5_rt * dt[0], DtType::SecondHalf); #ifndef WARPX_MAG_LLG EvolveB(0.5_rt * dt[0], DtType::SecondHalf); // We now have B^{n+1} From 349439dd0ccb74ce3d94b5db4322cb9c66dff10a Mon Sep 17 00:00:00 2001 From: Andy Nonaka Date: Thu, 29 Jul 2021 14:26:53 -0700 Subject: [PATCH 12/17] indentation --- Source/Evolve/WarpXEvolve.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Evolve/WarpXEvolve.cpp b/Source/Evolve/WarpXEvolve.cpp index 860d30121..2dd92b743 100644 --- a/Source/Evolve/WarpXEvolve.cpp +++ b/Source/Evolve/WarpXEvolve.cpp @@ -434,8 +434,8 @@ WarpX::OneStep_nosub (Real cur_time) FillBoundaryF(guard_cells.ng_FieldSolverF); FillBoundaryG(guard_cells.ng_FieldSolverG); #ifndef WARPX_MAG_LLG - EvolveB(0.5_rt * dt[0], DtType::FirstHalf); // We now have B^{n+1/2} - FillBoundaryB(guard_cells.ng_FieldSolver); + EvolveB(0.5_rt * dt[0], DtType::FirstHalf); // We now have B^{n+1/2} + FillBoundaryB(guard_cells.ng_FieldSolver); #endif #ifdef WARPX_MAG_LLG From c78f67b0ece435e76aae2f7b4ccfb970299bf770 Mon Sep 17 00:00:00 2001 From: Andy Nonaka Date: Thu, 29 Jul 2021 14:34:03 -0700 Subject: [PATCH 13/17] whitespace --- Source/Evolve/WarpXEvolve.cpp | 2 +- Source/FieldSolver/WarpXPushFieldsEM.cpp | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Source/Evolve/WarpXEvolve.cpp b/Source/Evolve/WarpXEvolve.cpp index fb9175270..7b6c3f7f9 100644 --- a/Source/Evolve/WarpXEvolve.cpp +++ b/Source/Evolve/WarpXEvolve.cpp @@ -466,7 +466,7 @@ WarpX::OneStep_nosub (Real cur_time) } FillBoundaryE(guard_cells.ng_FieldSolver); - + EvolveF(0.5_rt * dt[0], DtType::SecondHalf); EvolveG(0.5_rt * dt[0], DtType::SecondHalf); #ifndef WARPX_MAG_LLG diff --git a/Source/FieldSolver/WarpXPushFieldsEM.cpp b/Source/FieldSolver/WarpXPushFieldsEM.cpp index 3a005426f..cb73c1521 100644 --- a/Source/FieldSolver/WarpXPushFieldsEM.cpp +++ b/Source/FieldSolver/WarpXPushFieldsEM.cpp @@ -471,11 +471,11 @@ WarpX::EvolveB (int lev, PatchType patch_type, amrex::Real a_dt, DtType a_dt_typ m_face_areas[lev], lev, a_dt); } - // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. + // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. ApplyExternalFieldExcitationOnGrid(ExternalFieldType::BfieldExternal); // apply B external excitation ApplyBfieldBoundary(lev, patch_type, a_dt_type); - + // Evolve B field in PML cells if (do_pml && pml[lev]->ok()) { if (patch_type == PatchType::fine) { @@ -524,7 +524,7 @@ WarpX::EvolveE (int lev, PatchType patch_type, amrex::Real a_dt) F_cp[lev], lev, a_dt ); } - // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. + // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. ApplyExternalFieldExcitationOnGrid(ExternalFieldType::EfieldExternal); // apply E external excitation ApplyEfieldBoundary(lev, patch_type); @@ -689,7 +689,7 @@ WarpX::MacroscopicEvolveE (int lev, PatchType patch_type, amrex::Real a_dt) { amrex::Abort("Macroscopic EvolveE is not implemented for lev > 0, yet."); } - // Apply external field excitation prior to the boundary condition such that excitation does not overwrite B.C. + // Apply external field excitation prior to the boundary condition such that excitation does not overwrite B.C. ApplyExternalFieldExcitationOnGrid(ExternalFieldType::EfieldExternal); // apply E external excitation ApplyEfieldBoundary(lev, patch_type); @@ -763,7 +763,7 @@ WarpX::MacroscopicEvolveHM (int lev, PatchType patch_type, amrex::Real a_dt) { amrex::Abort("Macroscopic EvolveHM is not implemented for lev > 0 yet"); } - // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. + // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. ApplyExternalFieldExcitationOnGrid(ExternalFieldType::HfieldExternal); // apply H external excitation // Evolve H field in PML cells @@ -809,9 +809,9 @@ WarpX::MacroscopicEvolveHM_2nd (int lev, PatchType patch_type, amrex::Real a_dt) amrex::Abort("Macroscopic EvolveHM_2nd is not implemented for lev > 0 yet"); } - // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. + // Apply external field excitation prior to applying boundary conditions such that excitation does not overwrite B.C. ApplyExternalFieldExcitationOnGrid(ExternalFieldType::HfieldExternal); // apply H external excitation - + // Evolve H field in PML cells if (do_pml && pml[lev]->ok()) { if (patch_type == PatchType::fine) { From 16421731ac9f13d0b21122b9d91f8024d40fc455 Mon Sep 17 00:00:00 2001 From: Andy Nonaka Date: Fri, 30 Jul 2021 15:33:40 -0700 Subject: [PATCH 14/17] get this compiling again --- Source/WarpX.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index 4e13a93ea..9de98f27d 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -1512,12 +1512,11 @@ WarpX::AllocLevelMFs (int lev, const BoxArray& ba, const DistributionMapping& dm { // Declare nodal flags IntVect Ex_nodal_flag, Ey_nodal_flag, Ez_nodal_flag; + IntVect Bx_nodal_flag, By_nodal_flag, Bz_nodal_flag; #ifdef WARPX_MAG_LLG IntVect Mx_nodal_flag, My_nodal_flag, Mz_nodal_flag; IntVect Hx_nodal_flag, Hy_nodal_flag, Hz_nodal_flag; IntVect Hx_bias_nodal_flag, Hy_bias_nodal_flag, Hz_bias_nodal_flag; -#else - IntVect Bx_nodal_flag, By_nodal_flag, Bz_nodal_flag; #endif IntVect jx_nodal_flag, jy_nodal_flag, jz_nodal_flag; IntVect rho_nodal_flag; From 16d42f17ebb03a955b8b04b95b8b5899ed839d9e Mon Sep 17 00:00:00 2001 From: Andy Nonaka Date: Thu, 12 Aug 2021 16:14:41 -0700 Subject: [PATCH 15/17] Update Source/Evolve/WarpXEvolve.cpp --- Source/Evolve/WarpXEvolve.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Evolve/WarpXEvolve.cpp b/Source/Evolve/WarpXEvolve.cpp index 7b6c3f7f9..d70d0476d 100644 --- a/Source/Evolve/WarpXEvolve.cpp +++ b/Source/Evolve/WarpXEvolve.cpp @@ -465,7 +465,7 @@ WarpX::OneStep_nosub (Real cur_time) amrex::Abort(" Medium for EM is unknown \n"); } - FillBoundaryE(guard_cells.ng_FieldSolver); + FillBoundaryE(guard_cells.ng_FieldSolver); EvolveF(0.5_rt * dt[0], DtType::SecondHalf); EvolveG(0.5_rt * dt[0], DtType::SecondHalf); From 8d222e856caf97cf5a8072cd76d91fe8c968d24f Mon Sep 17 00:00:00 2001 From: Andy Nonaka Date: Thu, 12 Aug 2021 16:15:20 -0700 Subject: [PATCH 16/17] Update Source/Evolve/WarpXEvolve.cpp --- Source/Evolve/WarpXEvolve.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Evolve/WarpXEvolve.cpp b/Source/Evolve/WarpXEvolve.cpp index d70d0476d..adf1eb1c2 100644 --- a/Source/Evolve/WarpXEvolve.cpp +++ b/Source/Evolve/WarpXEvolve.cpp @@ -467,8 +467,8 @@ WarpX::OneStep_nosub (Real cur_time) FillBoundaryE(guard_cells.ng_FieldSolver); - EvolveF(0.5_rt * dt[0], DtType::SecondHalf); - EvolveG(0.5_rt * dt[0], DtType::SecondHalf); + EvolveF(0.5_rt * dt[0], DtType::SecondHalf); + EvolveG(0.5_rt * dt[0], DtType::SecondHalf); #ifndef WARPX_MAG_LLG EvolveB(0.5_rt * dt[0], DtType::SecondHalf); // We now have B^{n+1} From 8e0563ef7d305793598b49660617b1f22196ae0f Mon Sep 17 00:00:00 2001 From: Andy Nonaka Date: Thu, 12 Aug 2021 16:30:11 -0700 Subject: [PATCH 17/17] Apply suggestions from code review --- Source/FieldSolver/WarpXPushFieldsEM.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Source/FieldSolver/WarpXPushFieldsEM.cpp b/Source/FieldSolver/WarpXPushFieldsEM.cpp index cb73c1521..c76aa7ded 100644 --- a/Source/FieldSolver/WarpXPushFieldsEM.cpp +++ b/Source/FieldSolver/WarpXPushFieldsEM.cpp @@ -419,15 +419,14 @@ WarpX::PushPSATD () // Evolve the fields in the PML boxes for (int lev = 0; lev <= finest_level; ++lev) { - ApplyEfieldBoundary(lev, PatchType::fine); - if (lev > 0) ApplyEfieldBoundary(lev, PatchType::coarse); - ApplyBfieldBoundary(lev, PatchType::fine, DtType::FirstHalf); - if (lev > 0) ApplyBfieldBoundary(lev, PatchType::coarse, DtType::FirstHalf); - if (do_pml && pml[lev]->ok()) { pml[lev]->PushPSATD(lev); } + ApplyEfieldBoundary(lev, PatchType::fine); + if (lev > 0) ApplyEfieldBoundary(lev, PatchType::coarse); + ApplyBfieldBoundary(lev, PatchType::fine, DtType::FirstHalf); + if (lev > 0) ApplyBfieldBoundary(lev, PatchType::coarse, DtType::FirstHalf); } #endif }