From 8c1fbd0c29336041b1666b8c2c1bf6ab79523fb1 Mon Sep 17 00:00:00 2001 From: jackieyao0114 Date: Tue, 3 Aug 2021 10:30:28 -0700 Subject: [PATCH 01/11] added waveguide inputs for paper --- Examples/Waveguide/inputs_3d_empty_X_band | 81 +++++++++++++++ Examples/Waveguide/inputs_3d_filter | 115 ++++++++++++++++++++++ 2 files changed, 196 insertions(+) create mode 100644 Examples/Waveguide/inputs_3d_empty_X_band create mode 100644 Examples/Waveguide/inputs_3d_filter diff --git a/Examples/Waveguide/inputs_3d_empty_X_band b/Examples/Waveguide/inputs_3d_empty_X_band new file mode 100644 index 000000000..d9a19230e --- /dev/null +++ b/Examples/Waveguide/inputs_3d_empty_X_band @@ -0,0 +1,81 @@ +#################################################################################################### +## This input file simulates the EM fields in an air-filled rectangular hollow waveguide +## The plane wave excitation is the time-dependent modified Gaussian pulse +## This input file requires USE_LLG=FALSE in the GNUMakefile. +#################################################################################################### + +################################ +####### GENERAL PARAMETERS ###### +################################# +max_step = 1000000 +amr.n_cell = 512 4 512 # number of cells spanning the domain in each coordinate direction at level 0 +amr.max_grid_size = 64 # maximum size of each AMReX box, used to decompose the domain +amr.blocking_factor = 4 # only meaningful for AMR +geometry.coord_sys = 0 +boundary.field_lo = pec pec pml # PEC on side walls; PML at -z end +boundary.field_hi = pec pec pec # PEC on side walls; PEC at +z end + +# waveguide width 14.95mm, height is 11.43mm, and length is 500mm +# 14.95mm to make the wave guide work on fundamental mode at 10.5GHz +# 11.43mm < 14.95mm so that the fundamental mode is TE10 +geometry.prob_lo = -7.475e-3 -5.715e-3 -250.0e-3 # must be consistent with my_constants.length and .diag_hi/lo +geometry.prob_hi = 7.475e-3 5.715e-3 250.0e-3 + +amr.max_level = 0 + +my_constants.pi = 3.14159265359 +my_constants.c = 299792458. +my_constants.width = 14.95e-3 # waveguide width is 14.95mm +my_constants.height = 11.43e-3 # waveguide height is 10.16mm +my_constants.length = 500.0e-3 # waveguide length is 400mm +my_constants.rjx = 1.0e-4 # the x dimension of current source cross-section +my_constants.rjz = 10.0e-4 # the z dimension of current source cross-section; should be just larger than 2*dz +my_constants.wavelength = 0.0286 # frequency is 10.5 GHz +my_constants.TP = 9.5238e-11 # Gaussian pulse width, 1 x time period of excitation +my_constants.flag_none = 0 # no source flag +my_constants.flag_hs = 1 # hard source flag +my_constants.flag_ss = 2 # soft source flag + +################################# +############ NUMERICS ########### +################################# +warpx.verbose = 0 +warpx.use_filter = 0 +warpx.cfl = 0.8 +particles.nspecies = 0 +warpx.sort_intervals = -1 + +algo.em_solver_medium = macroscopic # vacuum/macroscopic + +algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler + +macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" +macroscopic.sigma_function(x,y,z) = "0.0" + +macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" +macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12 " # air-filled + +macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" +macroscopic.mu_function(x,y,z) = "1.25663706212e-06" + +################################# +############ FIELDS ############# +################################# + +warpx.B_excitation_on_grid_style = "parse_B_excitation_grid_function" +warpx.Bx_excitation_grid_function(x,y,z,t) = "1.25663706212e-06 * 2.5e-5 * (exp(-(t-3*TP)**2/(2*TP**2))*cos(2*pi*c/wavelength*t)) * cos(x/(width/2)*(pi/2)) * (z > - rjz/2 + length/2)" +# current line source Jy = Bx at the +z end of waveguide; spanning over entire y dimension +warpx.By_excitation_grid_function(x,y,z,t) = "0.0" +warpx.Bz_excitation_grid_function(x,y,z,t) = "0.0" +warpx.Bx_excitation_flag_function(x,y,z) = "flag_ss * (z > - rjz/2 + length/2) + flag_none * (z <= - rjz/2 + length/2)" +warpx.By_excitation_flag_function(x,y,z) = "flag_none" +warpx.Bz_excitation_flag_function(x,y,z) = "flag_none" + +#Diagnostics +diagnostics.diags_names = zline_BernadoFilter0126_ + +zline_BernadoFilter0126_.interval = 40 +zline_BernadoFilter0126_.diag_lo = 0.0 0.0 -250.e-3 +zline_BernadoFilter0126_.diag_hi = 0.0 0.0 250.e-3 +zline_BernadoFilter0126_.diag_type = Full +zline_BernadoFilter0126_.fields_to_plot = Ey Bx \ No newline at end of file diff --git a/Examples/Waveguide/inputs_3d_filter b/Examples/Waveguide/inputs_3d_filter new file mode 100644 index 000000000..2e63908f8 --- /dev/null +++ b/Examples/Waveguide/inputs_3d_filter @@ -0,0 +1,115 @@ +#################################################################################################### +## This input file simulates the thin-film ferromagnetic inserted waveguide +## PEC applied on x, y and +z boundaries +## PML applied on -z boundary +## The plane wave excitation is the time-dependent modified Gaussian pulse +## This input file requires USE_LLG=TRUE in the GNUMakefile. +#################################################################################################### + +################################ +####### GENERAL PARAMETERS ###### +################################# +max_step = 300000 +amr.n_cell = 1024 4 512 # number of cells spanning the domain in each coordinate direction at level 0 +amr.max_grid_size = 1024 # maximum size of each AMReX box, used to decompose the domain +amr.blocking_factor = 4 # only meaningful for AMR +geometry.coord_sys = 0 +geometry.is_periodic = 0 0 0 + +# waveguide width 14.95mm, height is 11.43mm, and length is 280mm +# 14.95mm to make the wave guide work on fundamental mode at 10.5GHz +# 11.43mm < 14.95mm so that the fundamental mode is TE10 +geometry.prob_lo = -7.475e-3 -5.715e-3 -250.0e-3 # must be consistent with my_constants.length and .diag_hi/lo +geometry.prob_hi = 7.475e-3 5.715e-3 250.0e-3 + +amr.max_level = 0 + +my_constants.pi = 3.14159265359 +my_constants.c = 299792458. +my_constants.thickness = 0.45e-3 # thicness of the film is 0.45mm +my_constants.width = 14.95e-3 # waveguide width is 14.95mm +my_constants.height = 11.43e-3 # waveguide height is 10.16mm +my_constants.length = 500.0e-3 # waveguide length is 400mm +my_constants.rjx = 1.0e-4 # the x dimension of current source cross-section +my_constants.rjz = 10.0e-4 # the z dimension of current source cross-section; should be just larger than 2*dz +my_constants.wavelength = 0.0286 # frequency is 10.5 GHz +my_constants.TP = 9.5238e-11 # Gaussian pulse width, 1 x time period of excitation +my_constants.flag_none = 0 # no source flag +my_constants.flag_hs = 1 # hard source flag +my_constants.flag_ss = 2 # soft source flag +my_constants.epr = 13 # relative permittivity of ferrite slab + +################################# +############ NUMERICS ########### +################################# +warpx.verbose = 0 +warpx.use_filter = 0 +warpx.cfl = 0.8 +warpx.do_pml_Lo = 0 0 1 # PEC on side walls; PML at -z end +warpx.do_pml_Hi = 0 0 0 # PEC on side walls; PEC at +z end +warpx.mag_time_scheme_order = 2 # default 1 +warpx.mag_M_normalization = 1 # 1 is saturated +warpx.mag_LLG_coupling = 1 +particles.nspecies = 0 + +algo.em_solver_medium = macroscopic # vacuum/macroscopic + +algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler + +macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" +macroscopic.sigma_function(x,y,z) = "0.0" + +macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" +macroscopic.epsilon_function(x,y,z) = "epr * 8.8541878128e-12 * (x<=thickness-width/2) + 8.8541878128e-12 * (x>thickness-width/2)" # EPr is 13 of the ferrite slab + +macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" +macroscopic.mu_function(x,y,z) = "1.25663706212e-06" # MUr is not predefined in ferrite materials + +#unit conversion: 1 Gauss = (1000/4pi) A/m +macroscopic.mag_Ms_init_style = "parse_mag_Ms_function" # parse or "constant" +macroscopic.mag_Ms_function(x,y,z) = "1.3926e5 * (x<=thickness-width/2) + 0 * (x>thickness-width/2)" # in unit A/m, equal to 1750 Gauss; Ms=0 triggers off LLG + +macroscopic.mag_alpha_init_style = "parse_mag_alpha_function" # parse or "constant" +macroscopic.mag_alpha_function(x,y,z) = "0.0051 * (x<=thickness-width/2) + 0 * (x>thickness-width/2)" # alpha is unitless, calculated from linewidth Delta_H = 35 Oersted + +macroscopic.mag_gamma_init_style = "parse_mag_gamma_function" # parse or "constant" +macroscopic.mag_gamma_function(x,y,z) = "-1.759e11 * (x<=thickness-width/2) + 0 * (x>thickness-width/2)" # gyromagnetic ratio is constant for electrons in all materials + +macroscopic.mag_max_iter = 100 # maximum number of M iteration in each time step +macroscopic.mag_tol = 1.e-7 # M magnitude relative error tolerance compared to previous iteration +macroscopic.mag_normalized_error = 0.1 # if M magnitude relatively changes more than this value, raise a red flag + +################################# +############ FIELDS ############# +################################# + +warpx.H_excitation_on_grid_style = "parse_H_excitation_grid_function" +warpx.Hx_excitation_grid_function(x,y,z,t) = "2.5e-5 * (exp(-(t-3*TP)**2/(2*TP**2))*cos(2*pi*c/wavelength*t)) * cos(x/(width/2)*(pi/2)) * (z > - rjz/2 + length/2)" # plane source +# magnetic current line source at the +z end of waveguide; spanning over entire y dimension +warpx.Hy_excitation_grid_function(x,y,z,t) = "0.0" +warpx.Hz_excitation_grid_function(x,y,z,t) = "0.0" +warpx.Hx_excitation_flag_function(x,y,z) = "flag_ss * (z > - rjz/2 + length/2) + flag_none * (z <= - rjz/2 + length/2)" # plane source +warpx.Hy_excitation_flag_function(x,y,z) = "flag_none" +warpx.Hz_excitation_flag_function(x,y,z) = "flag_none" + +#unit conversion: 1 Gauss = 1 Oersted = (1000/4pi) A/m +#calculation of H_bias: H_bias (oe) = frequency / 2.8e6 + +warpx.H_bias_ext_grid_init_style = parse_H_bias_ext_grid_function +warpx.Hx_bias_external_grid_function(x,y,z)= 0. +warpx.Hy_bias_external_grid_function(x,y,z)= "2.3475e+05 * (x<=thickness-width/2) + 0 * (x>thickness-width/2)" # in A/m, equal to 2950 Oersted +warpx.Hz_bias_external_grid_function(x,y,z)= 0. + +warpx.M_ext_grid_init_style = parse_M_ext_grid_function +warpx.Mx_external_grid_function(x,y,z)= 0. +warpx.My_external_grid_function(x,y,z)= "1.3926e5 * (x<=thickness-width/2) + 0 * (x>thickness-width/2)" # in unit A/m, equal to 1750 Gauss; Ms=0 triggers off LLG +warpx.Mz_external_grid_function(x,y,z) = 0. + +#Diagnostics +diagnostics.diags_names = zline_BernadoFilter0111_ + +zline_BernadoFilter0111_.period = 2 +zline_BernadoFilter0111_.diag_lo = 0.0 0.0 -250.e-3 +zline_BernadoFilter0111_.diag_hi = 0.0 0.0 250.e-3 +zline_BernadoFilter0111_.diag_type = Full +zline_BernadoFilter0111_.fields_to_plot = Ey Hx Hz \ No newline at end of file From bb01835357809c765447d846ecc3d5dfea9d8de0 Mon Sep 17 00:00:00 2001 From: jackieyao0114 Date: Tue, 3 Aug 2021 14:53:31 -0700 Subject: [PATCH 02/11] fix EOL white spaces in Examples/Wavgeguide/inputs* --- Examples/Waveguide/inputs_3d_empty_X_band | 10 +++++----- Examples/Waveguide/inputs_3d_filter | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Examples/Waveguide/inputs_3d_empty_X_band b/Examples/Waveguide/inputs_3d_empty_X_band index d9a19230e..58c0a1ac9 100644 --- a/Examples/Waveguide/inputs_3d_empty_X_band +++ b/Examples/Waveguide/inputs_3d_empty_X_band @@ -16,7 +16,7 @@ boundary.field_lo = pec pec pml # PEC on side walls; PML at -z end boundary.field_hi = pec pec pec # PEC on side walls; PEC at +z end # waveguide width 14.95mm, height is 11.43mm, and length is 500mm -# 14.95mm to make the wave guide work on fundamental mode at 10.5GHz +# 14.95mm to make the wave guide work on fundamental mode at 10.5GHz # 11.43mm < 14.95mm so that the fundamental mode is TE10 geometry.prob_lo = -7.475e-3 -5.715e-3 -250.0e-3 # must be consistent with my_constants.length and .diag_hi/lo geometry.prob_hi = 7.475e-3 5.715e-3 250.0e-3 @@ -29,7 +29,7 @@ my_constants.width = 14.95e-3 # waveguide width is 14.95mm my_constants.height = 11.43e-3 # waveguide height is 10.16mm my_constants.length = 500.0e-3 # waveguide length is 400mm my_constants.rjx = 1.0e-4 # the x dimension of current source cross-section -my_constants.rjz = 10.0e-4 # the z dimension of current source cross-section; should be just larger than 2*dz +my_constants.rjz = 10.0e-4 # the z dimension of current source cross-section; should be just larger than 2*dz my_constants.wavelength = 0.0286 # frequency is 10.5 GHz my_constants.TP = 9.5238e-11 # Gaussian pulse width, 1 x time period of excitation my_constants.flag_none = 0 # no source flag @@ -56,18 +56,18 @@ macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12 " # air-filled macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" -macroscopic.mu_function(x,y,z) = "1.25663706212e-06" +macroscopic.mu_function(x,y,z) = "1.25663706212e-06" ################################# ############ FIELDS ############# ################################# warpx.B_excitation_on_grid_style = "parse_B_excitation_grid_function" -warpx.Bx_excitation_grid_function(x,y,z,t) = "1.25663706212e-06 * 2.5e-5 * (exp(-(t-3*TP)**2/(2*TP**2))*cos(2*pi*c/wavelength*t)) * cos(x/(width/2)*(pi/2)) * (z > - rjz/2 + length/2)" +warpx.Bx_excitation_grid_function(x,y,z,t) = "1.25663706212e-06 * 2.5e-5 * (exp(-(t-3*TP)**2/(2*TP**2))*cos(2*pi*c/wavelength*t)) * cos(x/(width/2)*(pi/2)) * (z > - rjz/2 + length/2)" # current line source Jy = Bx at the +z end of waveguide; spanning over entire y dimension warpx.By_excitation_grid_function(x,y,z,t) = "0.0" warpx.Bz_excitation_grid_function(x,y,z,t) = "0.0" -warpx.Bx_excitation_flag_function(x,y,z) = "flag_ss * (z > - rjz/2 + length/2) + flag_none * (z <= - rjz/2 + length/2)" +warpx.Bx_excitation_flag_function(x,y,z) = "flag_ss * (z > - rjz/2 + length/2) + flag_none * (z <= - rjz/2 + length/2)" warpx.By_excitation_flag_function(x,y,z) = "flag_none" warpx.Bz_excitation_flag_function(x,y,z) = "flag_none" diff --git a/Examples/Waveguide/inputs_3d_filter b/Examples/Waveguide/inputs_3d_filter index 2e63908f8..793812707 100644 --- a/Examples/Waveguide/inputs_3d_filter +++ b/Examples/Waveguide/inputs_3d_filter @@ -14,10 +14,10 @@ amr.n_cell = 1024 4 512 # number of cells spanning the domain in each coordinate amr.max_grid_size = 1024 # maximum size of each AMReX box, used to decompose the domain amr.blocking_factor = 4 # only meaningful for AMR geometry.coord_sys = 0 -geometry.is_periodic = 0 0 0 +geometry.is_periodic = 0 0 0 # waveguide width 14.95mm, height is 11.43mm, and length is 280mm -# 14.95mm to make the wave guide work on fundamental mode at 10.5GHz +# 14.95mm to make the wave guide work on fundamental mode at 10.5GHz # 11.43mm < 14.95mm so that the fundamental mode is TE10 geometry.prob_lo = -7.475e-3 -5.715e-3 -250.0e-3 # must be consistent with my_constants.length and .diag_hi/lo geometry.prob_hi = 7.475e-3 5.715e-3 250.0e-3 @@ -31,7 +31,7 @@ my_constants.width = 14.95e-3 # waveguide width is 14.95mm my_constants.height = 11.43e-3 # waveguide height is 10.16mm my_constants.length = 500.0e-3 # waveguide length is 400mm my_constants.rjx = 1.0e-4 # the x dimension of current source cross-section -my_constants.rjz = 10.0e-4 # the z dimension of current source cross-section; should be just larger than 2*dz +my_constants.rjz = 10.0e-4 # the z dimension of current source cross-section; should be just larger than 2*dz my_constants.wavelength = 0.0286 # frequency is 10.5 GHz my_constants.TP = 9.5238e-11 # Gaussian pulse width, 1 x time period of excitation my_constants.flag_none = 0 # no source flag From 7d4aab4236d3113d23888d768acf4d43201c5db6 Mon Sep 17 00:00:00 2001 From: jackiezy <58234082+jackieyao0114@users.noreply.github.com> Date: Tue, 3 Aug 2021 19:45:07 -0700 Subject: [PATCH 03/11] Update Examples/Waveguide/inputs_3d_filter Co-authored-by: Revathi Jambunathan <41089244+RevathiJambunathan@users.noreply.github.com> --- Examples/Waveguide/inputs_3d_filter | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Examples/Waveguide/inputs_3d_filter b/Examples/Waveguide/inputs_3d_filter index 793812707..12a3590b6 100644 --- a/Examples/Waveguide/inputs_3d_filter +++ b/Examples/Waveguide/inputs_3d_filter @@ -103,7 +103,7 @@ warpx.Hz_bias_external_grid_function(x,y,z)= 0. warpx.M_ext_grid_init_style = parse_M_ext_grid_function warpx.Mx_external_grid_function(x,y,z)= 0. warpx.My_external_grid_function(x,y,z)= "1.3926e5 * (x<=thickness-width/2) + 0 * (x>thickness-width/2)" # in unit A/m, equal to 1750 Gauss; Ms=0 triggers off LLG -warpx.Mz_external_grid_function(x,y,z) = 0. +warpx.Mz_external_grid_function(x,y,z) = "0." #Diagnostics diagnostics.diags_names = zline_BernadoFilter0111_ @@ -112,4 +112,4 @@ zline_BernadoFilter0111_.period = 2 zline_BernadoFilter0111_.diag_lo = 0.0 0.0 -250.e-3 zline_BernadoFilter0111_.diag_hi = 0.0 0.0 250.e-3 zline_BernadoFilter0111_.diag_type = Full -zline_BernadoFilter0111_.fields_to_plot = Ey Hx Hz \ No newline at end of file +zline_BernadoFilter0111_.fields_to_plot = Ey Hx Hz From 6a8ccdfceabf32260210de2b914ae8f0a208aae4 Mon Sep 17 00:00:00 2001 From: jackiezy <58234082+jackieyao0114@users.noreply.github.com> Date: Tue, 3 Aug 2021 19:45:14 -0700 Subject: [PATCH 04/11] Update Examples/Waveguide/inputs_3d_filter Co-authored-by: Revathi Jambunathan <41089244+RevathiJambunathan@users.noreply.github.com> --- Examples/Waveguide/inputs_3d_filter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/Waveguide/inputs_3d_filter b/Examples/Waveguide/inputs_3d_filter index 12a3590b6..65f970a3c 100644 --- a/Examples/Waveguide/inputs_3d_filter +++ b/Examples/Waveguide/inputs_3d_filter @@ -101,7 +101,7 @@ warpx.Hy_bias_external_grid_function(x,y,z)= "2.3475e+05 * (x<=thickness-width/2 warpx.Hz_bias_external_grid_function(x,y,z)= 0. warpx.M_ext_grid_init_style = parse_M_ext_grid_function -warpx.Mx_external_grid_function(x,y,z)= 0. +warpx.Mx_external_grid_function(x,y,z)= "0." warpx.My_external_grid_function(x,y,z)= "1.3926e5 * (x<=thickness-width/2) + 0 * (x>thickness-width/2)" # in unit A/m, equal to 1750 Gauss; Ms=0 triggers off LLG warpx.Mz_external_grid_function(x,y,z) = "0." From 8847efcb4513d0ab964f227728d0c24d40642814 Mon Sep 17 00:00:00 2001 From: jackiezy <58234082+jackieyao0114@users.noreply.github.com> Date: Tue, 3 Aug 2021 19:45:19 -0700 Subject: [PATCH 05/11] Update Examples/Waveguide/inputs_3d_filter Co-authored-by: Revathi Jambunathan <41089244+RevathiJambunathan@users.noreply.github.com> --- Examples/Waveguide/inputs_3d_filter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/Waveguide/inputs_3d_filter b/Examples/Waveguide/inputs_3d_filter index 65f970a3c..d64a2399d 100644 --- a/Examples/Waveguide/inputs_3d_filter +++ b/Examples/Waveguide/inputs_3d_filter @@ -98,7 +98,7 @@ warpx.Hz_excitation_flag_function(x,y,z) = "flag_none" warpx.H_bias_ext_grid_init_style = parse_H_bias_ext_grid_function warpx.Hx_bias_external_grid_function(x,y,z)= 0. warpx.Hy_bias_external_grid_function(x,y,z)= "2.3475e+05 * (x<=thickness-width/2) + 0 * (x>thickness-width/2)" # in A/m, equal to 2950 Oersted -warpx.Hz_bias_external_grid_function(x,y,z)= 0. +warpx.Hz_bias_external_grid_function(x,y,z)= "0." warpx.M_ext_grid_init_style = parse_M_ext_grid_function warpx.Mx_external_grid_function(x,y,z)= "0." From 52054f66f43c30dc48767d3684f84b480455f055 Mon Sep 17 00:00:00 2001 From: jackiezy <58234082+jackieyao0114@users.noreply.github.com> Date: Tue, 3 Aug 2021 19:45:24 -0700 Subject: [PATCH 06/11] Update Examples/Waveguide/inputs_3d_filter Co-authored-by: Revathi Jambunathan <41089244+RevathiJambunathan@users.noreply.github.com> --- Examples/Waveguide/inputs_3d_filter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/Waveguide/inputs_3d_filter b/Examples/Waveguide/inputs_3d_filter index d64a2399d..f4212380b 100644 --- a/Examples/Waveguide/inputs_3d_filter +++ b/Examples/Waveguide/inputs_3d_filter @@ -96,7 +96,7 @@ warpx.Hz_excitation_flag_function(x,y,z) = "flag_none" #calculation of H_bias: H_bias (oe) = frequency / 2.8e6 warpx.H_bias_ext_grid_init_style = parse_H_bias_ext_grid_function -warpx.Hx_bias_external_grid_function(x,y,z)= 0. +warpx.Hx_bias_external_grid_function(x,y,z)= "0." warpx.Hy_bias_external_grid_function(x,y,z)= "2.3475e+05 * (x<=thickness-width/2) + 0 * (x>thickness-width/2)" # in A/m, equal to 2950 Oersted warpx.Hz_bias_external_grid_function(x,y,z)= "0." From 2e67e43dc8af65fb71c35a085865c9f86822906e Mon Sep 17 00:00:00 2001 From: jackieyao0114 Date: Tue, 10 Aug 2021 13:16:25 -0700 Subject: [PATCH 07/11] updated waveguide inputs to be synced with up-to-date WarpX syntax --- Examples/Waveguide/inputs_3d_empty_X_band | 8 +++----- Examples/Waveguide/inputs_3d_filter | 10 ++++------ 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/Examples/Waveguide/inputs_3d_empty_X_band b/Examples/Waveguide/inputs_3d_empty_X_band index 58c0a1ac9..76114ed92 100644 --- a/Examples/Waveguide/inputs_3d_empty_X_band +++ b/Examples/Waveguide/inputs_3d_empty_X_band @@ -9,7 +9,7 @@ ################################# max_step = 1000000 amr.n_cell = 512 4 512 # number of cells spanning the domain in each coordinate direction at level 0 -amr.max_grid_size = 64 # maximum size of each AMReX box, used to decompose the domain +amr.max_grid_size = 512 # maximum size of each AMReX box, used to decompose the domain amr.blocking_factor = 4 # only meaningful for AMR geometry.coord_sys = 0 boundary.field_lo = pec pec pml # PEC on side walls; PML at -z end @@ -39,11 +39,9 @@ my_constants.flag_ss = 2 # soft source flag ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 0.8 -particles.nspecies = 0 -warpx.sort_intervals = -1 algo.em_solver_medium = macroscopic # vacuum/macroscopic @@ -74,7 +72,7 @@ warpx.Bz_excitation_flag_function(x,y,z) = "flag_none" #Diagnostics diagnostics.diags_names = zline_BernadoFilter0126_ -zline_BernadoFilter0126_.interval = 40 +zline_BernadoFilter0126_.intervals = 40 zline_BernadoFilter0126_.diag_lo = 0.0 0.0 -250.e-3 zline_BernadoFilter0126_.diag_hi = 0.0 0.0 250.e-3 zline_BernadoFilter0126_.diag_type = Full diff --git a/Examples/Waveguide/inputs_3d_filter b/Examples/Waveguide/inputs_3d_filter index f4212380b..be7064322 100644 --- a/Examples/Waveguide/inputs_3d_filter +++ b/Examples/Waveguide/inputs_3d_filter @@ -14,7 +14,8 @@ amr.n_cell = 1024 4 512 # number of cells spanning the domain in each coordinate amr.max_grid_size = 1024 # maximum size of each AMReX box, used to decompose the domain amr.blocking_factor = 4 # only meaningful for AMR geometry.coord_sys = 0 -geometry.is_periodic = 0 0 0 +boundary.field_lo = pec pec pml # PEC on side walls; PML at -z end +boundary.field_hi = pec pec pec # PEC on side walls; PEC at +z end # waveguide width 14.95mm, height is 11.43mm, and length is 280mm # 14.95mm to make the wave guide work on fundamental mode at 10.5GHz @@ -42,15 +43,12 @@ my_constants.epr = 13 # relative permittivity of ferrite slab ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 0.8 -warpx.do_pml_Lo = 0 0 1 # PEC on side walls; PML at -z end -warpx.do_pml_Hi = 0 0 0 # PEC on side walls; PEC at +z end warpx.mag_time_scheme_order = 2 # default 1 warpx.mag_M_normalization = 1 # 1 is saturated warpx.mag_LLG_coupling = 1 -particles.nspecies = 0 algo.em_solver_medium = macroscopic # vacuum/macroscopic @@ -108,7 +106,7 @@ warpx.Mz_external_grid_function(x,y,z) = "0." #Diagnostics diagnostics.diags_names = zline_BernadoFilter0111_ -zline_BernadoFilter0111_.period = 2 +zline_BernadoFilter0111_.intervals = 2 zline_BernadoFilter0111_.diag_lo = 0.0 0.0 -250.e-3 zline_BernadoFilter0111_.diag_hi = 0.0 0.0 250.e-3 zline_BernadoFilter0111_.diag_type = Full From 09679b871a83776721348e50481e11918cb34d77 Mon Sep 17 00:00:00 2001 From: jackieyao0114 Date: Tue, 10 Aug 2021 15:11:56 -0700 Subject: [PATCH 08/11] clear up redundancy in inputs --- Examples/Tests/Macroscopic_Maxwell/inputs_3d | 6 +----- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_PR10 | 6 +----- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_abortB | 6 +----- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_bulkmu | 6 +----- .../Macroscopic_Maxwell/inputs_3d_LLG_evolveM_convergence | 6 +----- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs | 6 +----- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original | 6 +----- .../Tests/Macroscopic_Maxwell/inputs_3d_LLG_periodic_noMs | 6 +----- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_tfmu | 6 +----- Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled | 6 +----- .../Macroscopic_Maxwell/inputs_3d_LLG_uncoupled_unsat | 6 +----- Examples/Tests/Macroscopic_Maxwell/inputs_3d_PR10 | 6 +----- Examples/Tests/Macroscopic_Maxwell/inputs_3d_noMs | 7 +------ Examples/Tests/Macroscopic_Maxwell/inputs_3d_periodic_noMs | 7 +------ .../Macroscopic_Maxwell/inputs_field_PEC_llg_exch_anis_3d | 4 ---- 15 files changed, 14 insertions(+), 76 deletions(-) diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d b/Examples/Tests/Macroscopic_Maxwell/inputs_3d index 08cffd17d..5fe84dbc7 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d @@ -18,19 +18,15 @@ amr.max_level = 0 ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 1. -warpx.sort_intervals = -1 #algo.em_solver_medium = vacuum # vacuum/macroscopic algo.em_solver_medium = macroscopic # vacuum/macroscopic algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0.0" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "1.25663706212e-06" ################################# diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_PR10 b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_PR10 index 81280e236..e5a3c4db3 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_PR10 +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_PR10 @@ -35,22 +35,18 @@ my_constants.flag_ss = 2 ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 0.9 warpx.mag_time_scheme_order = 2 # default 1 warpx.mag_M_normalization = 1 # 1 is saturated warpx.mag_LLG_coupling = 1 -warpx.sort_intervals = -1 algo.em_solver_medium = macroscopic # vacuum/macroscopic algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0.0" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "1.25663706212e-06" # mu_r = 1 #unit conversion: 1 Gauss = (1000/4pi) A/m diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_abortB b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_abortB index 2e7788a2b..2aef3342b 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_abortB +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_abortB @@ -19,21 +19,17 @@ amr.max_level = 0 ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 1 -warpx.sort_intervals = -1 warpx.mag_time_scheme_order = 2 # default 1 warpx.mag_M_normalization = 1 # 1 is saturated warpx.mag_LLG_coupling = 1 algo.em_solver_medium = macroscopic # vacuum/macroscopic algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0.0" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "1.25663706212e-06" macroscopic.mag_Ms_init_style = "parse_mag_Ms_function" # parse or "constant" macroscopic.mag_Ms_function(x,y,z) = "1.4e5" diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_bulkmu b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_bulkmu index 4d1dea079..68e3a133f 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_bulkmu +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_bulkmu @@ -32,22 +32,18 @@ my_constants.flag_ss = 2 ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 0.9 warpx.mag_time_scheme_order = 2 # default 1 warpx.mag_M_normalization = 1 # 1 is saturated warpx.mag_LLG_coupling = 1 -warpx.sort_intervals = -1 algo.em_solver_medium = macroscopic # vacuum/macroscopic algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0.0" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "1.25663706212e-06" #unit conversion: 1 Gauss = (1000/4pi) A/m diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_evolveM_convergence b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_evolveM_convergence index d407ae6a8..f914bf595 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_evolveM_convergence +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_evolveM_convergence @@ -42,25 +42,21 @@ my_constants.wavelength = 0.1 ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.mag_time_scheme_order = 2 # default 1 warpx.mag_M_normalization = 1 # 1 is saturated warpx.mag_LLG_coupling = 1 -warpx.sort_intervals = -1 algo.em_solver_medium = macroscopic # vacuum/macroscopic algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0." macroscopic.sigma_function(x,y,z) = "0.1*exp(-1000.*(x*x+y*y+z*z))" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "9.8541878128e-12*(1 + exp(-1000.*(x*x+y*y+z*z)))" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "1.25663706212e-06" #unit conversion: 1 Gauss = (1000/4pi) A/m diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs index 3f12a4e06..88cce12be 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_noMs @@ -18,18 +18,14 @@ amr.max_level = 0 ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 0.9 -warpx.sort_intervals = -1 algo.em_solver_medium = macroscopic # vacuum/macroscopic algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0.0" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "1.25663706212e-06" ################################# diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original index ab3746138..71a60c14a 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_original @@ -42,24 +42,20 @@ amr.max_level = 0 ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 4000 warpx.mag_time_scheme_order = 1 # default 1 warpx.mag_M_normalization = 2 warpx.mag_LLG_coupling = 0 -warpx.sort_intervals = -1 algo.em_solver_medium = macroscopic # vacuum/macroscopic algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0.0" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "1.25663706212e-06" #unit conversion: 1 Gauss = (1000/4pi) A/m diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_periodic_noMs b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_periodic_noMs index b35f54315..261e9af34 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_periodic_noMs +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_periodic_noMs @@ -18,18 +18,14 @@ amr.max_level = 0 ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 0.9 -warpx.sort_intervals = -1 algo.em_solver_medium = macroscopic # vacuum/macroscopic algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0.0" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "1.25663706212e-06" ################################# diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_tfmu b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_tfmu index 0c096eb9c..0b9d8e702 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_tfmu +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_tfmu @@ -34,25 +34,21 @@ my_constants.flag_ss = 2 ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 0.9 warpx.mag_time_scheme_order = 1 # default 1 warpx.mag_M_normalization = 1 # 1 is saturated warpx.mag_LLG_coupling = 1 -warpx.sort_intervals = -1 algo.em_solver_medium = macroscopic # vacuum/macroscopic algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0.0" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "1.25663706212e-06" #unit conversion: 1 Gauss = (1000/4pi) A/m diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled index 31b75f057..1171daa77 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled @@ -17,24 +17,20 @@ amr.max_level = 0 ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 4000 warpx.mag_time_scheme_order = 2 # default 1 warpx.mag_M_normalization = 2 warpx.mag_LLG_coupling = 0 -warpx.sort_intervals = -1 algo.em_solver_medium = macroscopic # vacuum/macroscopic algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0.0" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "1.25663706212e-06" #unit conversion: 1 Gauss = (1000/4pi) A/m diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled_unsat b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled_unsat index 8172efd54..c4c13ad19 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled_unsat +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_LLG_uncoupled_unsat @@ -17,24 +17,20 @@ amr.max_level = 0 ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 4000 warpx.mag_time_scheme_order = 2 # default 1 warpx.mag_M_normalization = 0 warpx.mag_LLG_coupling = 0 -warpx.sort_intervals = -1 algo.em_solver_medium = macroscopic # vacuum/macroscopic algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0.0" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "1.25663706212e-06" #unit conversion: 1 Gauss = (1000/4pi) A/m diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_PR10 b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_PR10 index d83f3a9d4..8c997191e 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_PR10 +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_PR10 @@ -34,19 +34,15 @@ my_constants.flag_ss = 2 ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 0.9 -warpx.sort_intervals = -1 algo.em_solver_medium = macroscopic # vacuum/macroscopic algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0.0" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "1.1310e-05" # mu_r = 9 ################################# diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_noMs b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_noMs index 661e62c66..3f80dd311 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_noMs +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_noMs @@ -18,21 +18,16 @@ amr.max_level = 0 ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 0.9 algo.em_solver_medium = macroscopic # vacuum/macroscopic algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0.0" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "1.25663706212e-06" -warpx.sort_intervals = -1 - ################################# ############ FIELDS ############# ################################# diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_periodic_noMs b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_periodic_noMs index ab01d5775..e7d9b3863 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_3d_periodic_noMs +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_3d_periodic_noMs @@ -18,21 +18,16 @@ amr.max_level = 0 ################################# ############ NUMERICS ########### ################################# -warpx.verbose = 0 +warpx.verbose = 1 warpx.use_filter = 0 warpx.cfl = 0.9 algo.em_solver_medium = macroscopic # vacuum/macroscopic algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0.0" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "8.8541878128e-12" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "1.25663706212e-06" -warpx.sort_intervals = -1 - ################################# ############ FIELDS ############# ################################# diff --git a/Examples/Tests/Macroscopic_Maxwell/inputs_field_PEC_llg_exch_anis_3d b/Examples/Tests/Macroscopic_Maxwell/inputs_field_PEC_llg_exch_anis_3d index 934b87d6c..835c19d14 100644 --- a/Examples/Tests/Macroscopic_Maxwell/inputs_field_PEC_llg_exch_anis_3d +++ b/Examples/Tests/Macroscopic_Maxwell/inputs_field_PEC_llg_exch_anis_3d @@ -20,7 +20,6 @@ geometry.prob_hi = 4.e-6 4.e-6 4.e-6 # Boundary condition boundary.field_lo = periodic periodic pec boundary.field_hi = periodic periodic pml -warpx.sort_intervals = -1 warpx.serialize_ics = 1 # Verbosity @@ -47,13 +46,10 @@ my_constants.epsilon0 = 8.84e-12 my_constants.Ms_ga = 1750. algo.macroscopic_sigma_method = laxwendroff # laxwendroff or backwardeuler -macroscopic.sigma_init_style = "parse_sigma_function" # parse or "constant" macroscopic.sigma_function(x,y,z) = "0.0" -macroscopic.epsilon_init_style = "parse_epsilon_function" # parse or "constant" macroscopic.epsilon_function(x,y,z) = "epsilon0 * (z > -domain_size/2.0 + thickness) + epsilon0 * epsilon_r * (z <= -domain_size/2.0 + thickness)" -macroscopic.mu_init_style = "parse_mu_function" # parse or "constant" macroscopic.mu_function(x,y,z) = "mu0" #unit conversion: 1 Gauss = (1000/4pi) A/m From 33ecd44d6e727e6e9f43d2b4ca6d8cdb72b68366 Mon Sep 17 00:00:00 2001 From: jackieyao0114 Date: Tue, 30 Nov 2021 12:58:18 -0800 Subject: [PATCH 09/11] fixed typo in M_old_yface --- .../FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveHM.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveHM.cpp b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveHM.cpp index 7a8bd2ccb..eed637ea5 100644 --- a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveHM.cpp +++ b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveHM.cpp @@ -453,7 +453,7 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian( // z component on z-faces of grid M_zface(i, j, k, 2) += dt * (PhysConst::mu0 * mag_gammaL) * (M_old_zface(i, j, k, 0) * Hy_eff - M_old_zface(i, j, k, 1) * Hx_eff) + dt * Gil_damp * (M_old_zface(i, j, k, 0) * (M_old_zface(i, j, k, 2) * Hx_eff - M_old_zface(i, j, k, 0) * Hz_eff) - - M_old_zface(i, j, k, 1) * (M_old_zface(i, j, k, 1) * Hz_eff - M_old_yface(i, j, k, 2) * Hy_eff)); + - M_old_zface(i, j, k, 1) * (M_old_zface(i, j, k, 1) * Hz_eff - M_old_zface(i, j, k, 2) * Hy_eff)); // temporary normalized magnitude of M_zface field at the fixed point // re-investigate the way we do Ms interp, in case we encounter the case where Ms changes across two adjacent cells that you are doing interp From 5b51e7dbd4ebb79436f3e0fe00712194f2bc33a0 Mon Sep 17 00:00:00 2001 From: jackieyao0114 Date: Thu, 19 May 2022 16:33:34 -0700 Subject: [PATCH 10/11] use H_old, H_biasfield_old, and M_old in the first MFIter for static parameters --- .../MacroscopicEvolveHM_2nd.cpp | 143 +++++++++--------- 1 file changed, 73 insertions(+), 70 deletions(-) diff --git a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveHM_2nd.cpp b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveHM_2nd.cpp index 622d97400..db4984cf7 100644 --- a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveHM_2nd.cpp +++ b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveHM_2nd.cpp @@ -68,6 +68,7 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( // build temporary vector Mfield_prev, Mfield_error, a_temp, a_temp_static, b_temp_static std::array, 3> Hfield_old; // H^(old_time) before the current time step + std::array, 3> H_biasfield_old; // H_bias^(old_time) before the current time step std::array, 3> Mfield_old; // M^(old_time) before the current time step std::array, 3> Mfield_prev; // M^(new_time) of the (r-1)th iteration std::array, 3> Mfield_error; // The error of the M field between the two consecutive iterations @@ -85,14 +86,16 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( amrex::GpuArray const& macro_cr = macroscopic_properties->macro_cr_ratio; amrex::GpuArray const& anisotropy_axis = macroscopic_properties->mag_LLG_anisotropy_axis; - // Initialize Hfield_old (H^(old_time)), Mfield_old (M^(old_time)), Mfield_prev (M^[(new_time),r-1]), Mfield_error + // Initialize Hfield_old (H^(old_time)), H_biasfield_old (H^(old_time)), Mfield_old (M^(old_time)), Mfield_prev (M^[(new_time),r-1]), Mfield_error for (int i = 0; i < 3; i++){ Hfield_old[i].reset(new MultiFab(Hfield[i]->boxArray(), Hfield[i]->DistributionMap(), 1, Hfield[i]->nGrow())); + H_biasfield_old[i].reset(new MultiFab(H_biasfield[i]->boxArray(), H_biasfield[i]->DistributionMap(), 1, H_biasfield[i]->nGrow())); Mfield_old[i].reset(new MultiFab(Mfield[i]->boxArray(), Mfield[i]->DistributionMap(), 3, Mfield[i]->nGrow())); Mfield_prev[i].reset(new MultiFab(Mfield[i]->boxArray(), Mfield[i]->DistributionMap(), 3, Mfield[i]->nGrow())); Mfield_error[i].reset(new MultiFab(Mfield[i]->boxArray(), Mfield[i]->DistributionMap(), 3, Mfield[i]->nGrow())); Mfield_error[i]->setVal(0.); // reset Mfield_error to zero MultiFab::Copy(*Hfield_old[i], *Hfield[i], 0, 0, 1, Hfield[i]->nGrow()); + MultiFab::Copy(*H_biasfield_old[i], *H_biasfield[i], 0, 0, 1, H_biasfield[i]->nGrow()); MultiFab::Copy(*Mfield_old[i], *Mfield[i], 0, 0, 3, Mfield[i]->nGrow()); MultiFab::Copy(*Mfield_prev[i], *Mfield[i], 0, 0, 3, Mfield[i]->nGrow()); } @@ -142,12 +145,12 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( Array4 const& mag_anisotropy_zface_arr = mag_anisotropy_zface_mf.array(mfi); // extract field data - Array4 const &M_xface = Mfield[0]->array(mfi); // note M_xface include x,y,z components at |_x faces - Array4 const &M_yface = Mfield[1]->array(mfi); // note M_yface include x,y,z components at |_y faces - Array4 const &M_zface = Mfield[2]->array(mfi); // note M_zface include x,y,z components at |_z faces - Array4 const &Hx_bias = H_biasfield[0]->array(mfi); // Hx_bias is the x component at |_x faces - Array4 const &Hy_bias = H_biasfield[1]->array(mfi); // Hy_bias is the y component at |_y faces - Array4 const &Hz_bias = H_biasfield[2]->array(mfi); // Hz_bias is the z component at |_z faces + Array4 const &M_xface_old = Mfield_old[0]->array(mfi); // note M_xface_old include x,y,z components at |_x faces + Array4 const &M_yface_old = Mfield_old[1]->array(mfi); // note M_yface_old include x,y,z components at |_y faces + Array4 const &M_zface_old = Mfield_old[2]->array(mfi); // note M_zface_old include x,y,z components at |_z faces + Array4 const &Hx_bias_old = H_biasfield_old[0]->array(mfi); // Hx_bias_old is the x component at |_x faces + Array4 const &Hy_bias_old = H_biasfield_old[1]->array(mfi); // Hy_bias_old is the y component at |_y faces + Array4 const &Hz_bias_old = H_biasfield_old[2]->array(mfi); // Hz_bias_old is the z component at |_z faces Array4 const &Hx_old = Hfield_old[0]->array(mfi); // Hx_old is the x component at |_x faces Array4 const &Hy_old = Hfield_old[1]->array(mfi); // Hy_old is the y component at |_y faces Array4 const &Hz_old = Hfield_old[2]->array(mfi); // Hz_old is the z component at |_z faces @@ -161,12 +164,12 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( Array4 const &b_temp_static_zface = b_temp_static[2]->array(mfi); // extract tileboxes for which to loop - amrex::IntVect Mxface_stag = Mfield[0]->ixType().toIntVect(); - amrex::IntVect Myface_stag = Mfield[1]->ixType().toIntVect(); - amrex::IntVect Mzface_stag = Mfield[2]->ixType().toIntVect(); - Box const &tbx = mfi.tilebox(Mxface_stag); /* just define which grid type */ - Box const &tby = mfi.tilebox(Myface_stag); - Box const &tbz = mfi.tilebox(Mzface_stag); + amrex::IntVect Mxface_stag_old = Mfield_old[0]->ixType().toIntVect(); + amrex::IntVect Myface_stag_old = Mfield_old[1]->ixType().toIntVect(); + amrex::IntVect Mzface_stag_old = Mfield_old[2]->ixType().toIntVect(); + Box const &tbx = mfi.tilebox(Mxface_stag_old); /* just define which grid type */ + Box const &tby = mfi.tilebox(Myface_stag_old); + Box const &tbz = mfi.tilebox(Mzface_stag_old); // Extract stencil coefficients for calculating the exchange field H_exchange and the anisotropy field H_anisotropy amrex::Real const *const AMREX_RESTRICT coefs_x = m_stencil_coefs_x.dataPtr(); @@ -187,17 +190,17 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( // Hy and Hz can be acquired by interpolation // H_bias - amrex::Real Hx_eff = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mxface_stag, Mxface_stag, Hx_bias); - amrex::Real Hy_eff = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Myface_stag, Mxface_stag, Hy_bias); - amrex::Real Hz_eff = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mzface_stag, Mxface_stag, Hz_bias); + amrex::Real Hx_eff_old = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mxface_stag_old, Mxface_stag_old, Hx_bias_old); + amrex::Real Hy_eff_old = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Myface_stag_old, Mxface_stag_old, Hy_bias_old); + amrex::Real Hz_eff_old = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mzface_stag_old, Mxface_stag_old, Hz_bias_old); if (coupling == 1){ // H_eff = H_maxwell + H_bias + H_exchange + H_anisotropy // H_maxwell - use H^(old_time) - Hx_eff += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mxface_stag, Mxface_stag, Hx_old); - Hy_eff += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Myface_stag, Mxface_stag, Hy_old); - Hz_eff += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mzface_stag, Mxface_stag, Hz_old); + Hx_eff_old += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mxface_stag_old, Mxface_stag_old, Hx_old); + Hy_eff_old += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Myface_stag_old, Mxface_stag_old, Hy_old); + Hz_eff_old += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mzface_stag_old, Mxface_stag_old, Hz_old); } if (mag_exchange_coupling == 1){ @@ -214,9 +217,9 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( amrex::Real Ms_lo_z = mag_Ms_xface_arr(i, j, k-1); amrex::Real Ms_hi_z = mag_Ms_xface_arr(i, j, k+1); - Hx_eff += H_exchange_coeff * T_Algo::Laplacian_Mag(M_xface, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 0, 0); //Last argument is nodality -- xface = 0 - Hy_eff += H_exchange_coeff * T_Algo::Laplacian_Mag(M_xface, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 1, 0); //Last argument is nodality -- xface = 0 - Hz_eff += H_exchange_coeff * T_Algo::Laplacian_Mag(M_xface, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 2, 0); //Last argument is nodality -- xface = 0 + Hx_eff_old += H_exchange_coeff * T_Algo::Laplacian_Mag(M_xface_old, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 0, 0); //Last argument is nodality -- xface = 0 + Hy_eff_old += H_exchange_coeff * T_Algo::Laplacian_Mag(M_xface_old, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 1, 0); //Last argument is nodality -- xface = 0 + Hz_eff_old += H_exchange_coeff * T_Algo::Laplacian_Mag(M_xface_old, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 2, 0); //Last argument is nodality -- xface = 0 } if (mag_anisotropy_coupling == 1){ @@ -226,19 +229,19 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( // H_anisotropy - use M^(old_time) amrex::Real M_dot_anisotropy_axis = 0.0; for (int comp=0; comp<3; ++comp) { - M_dot_anisotropy_axis += M_xface(i, j, k, comp) * anisotropy_axis[comp]; + M_dot_anisotropy_axis += M_xface_old(i, j, k, comp) * anisotropy_axis[comp]; } amrex::Real const H_anisotropy_coeff = - 2.0 * mag_anisotropy_xface_arr(i,j,k) / PhysConst::mu0 / mag_Ms_xface_arr(i,j,k) / mag_Ms_xface_arr(i,j,k); - Hx_eff += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[0]; - Hy_eff += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[1]; - Hz_eff += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[2]; + Hx_eff_old += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[0]; + Hy_eff_old += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[1]; + Hz_eff_old += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[2]; } // 0 = unsaturated; compute |M| locally. 1 = saturated; use M_s - amrex::Real M_magnitude = (M_normalization == 0) ? std::sqrt(std::pow(M_xface(i, j, k, 0), 2._rt) + std::pow(M_xface(i, j, k, 1), 2._rt) + std::pow(M_xface(i, j, k, 2), 2._rt)) + amrex::Real M_magnitude_old = (M_normalization == 0) ? std::sqrt(std::pow(M_xface_old(i, j, k, 0), 2._rt) + std::pow(M_xface_old(i, j, k, 1), 2._rt) + std::pow(M_xface_old(i, j, k, 2), 2._rt)) : mag_Ms_xface_arr(i,j,k); // a_temp_static_coeff does not change in the current step for SATURATED materials; but it does change for UNSATURATED ones - amrex::Real a_temp_static_coeff = mag_alpha_xface_arr(i,j,k) / M_magnitude; + amrex::Real a_temp_static_coeff = mag_alpha_xface_arr(i,j,k) / M_magnitude_old; // calculate the b_temp_static_coeff (it is divided by 2.0 because the derivation is based on an interger dt, // while in real simulations, the input dt is actually dt/2.0) @@ -247,18 +250,18 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( for (int comp=0; comp<3; ++comp) { // calculate a_temp_static_xface // all components on x-faces of grid - a_temp_static_xface(i, j, k, comp) = a_temp_static_coeff * M_xface(i, j, k, comp); + a_temp_static_xface(i, j, k, comp) = a_temp_static_coeff * M_xface_old(i, j, k, comp); } // calculate b_temp_static_xface // x component on x-faces of grid - b_temp_static_xface(i, j, k, 0) = M_xface(i, j, k, 0) + dt * b_temp_static_coeff * (M_xface(i, j, k, 1) * Hz_eff - M_xface(i, j, k, 2) * Hy_eff); + b_temp_static_xface(i, j, k, 0) = M_xface_old(i, j, k, 0) + dt * b_temp_static_coeff * (M_xface_old(i, j, k, 1) * Hz_eff_old - M_xface_old(i, j, k, 2) * Hy_eff_old); // y component on x-faces of grid - b_temp_static_xface(i, j, k, 1) = M_xface(i, j, k, 1) + dt * b_temp_static_coeff * (M_xface(i, j, k, 2) * Hx_eff - M_xface(i, j, k, 0) * Hz_eff); + b_temp_static_xface(i, j, k, 1) = M_xface_old(i, j, k, 1) + dt * b_temp_static_coeff * (M_xface_old(i, j, k, 2) * Hx_eff_old - M_xface_old(i, j, k, 0) * Hz_eff_old); // z component on x-faces of grid - b_temp_static_xface(i, j, k, 2) = M_xface(i, j, k, 2) + dt * b_temp_static_coeff * (M_xface(i, j, k, 0) * Hy_eff - M_xface(i, j, k, 1) * Hx_eff); + b_temp_static_xface(i, j, k, 2) = M_xface_old(i, j, k, 2) + dt * b_temp_static_coeff * (M_xface_old(i, j, k, 0) * Hy_eff_old - M_xface_old(i, j, k, 1) * Hx_eff_old); } }); @@ -272,17 +275,17 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( // Hy and Hz can be acquired by interpolation // H_bias - amrex::Real Hx_eff = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mxface_stag, Myface_stag, Hx_bias); - amrex::Real Hy_eff = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Myface_stag, Myface_stag, Hy_bias); - amrex::Real Hz_eff = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mzface_stag, Myface_stag, Hz_bias); + amrex::Real Hx_eff_old = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mxface_stag_old, Myface_stag_old, Hx_bias_old); + amrex::Real Hy_eff_old = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Myface_stag_old, Myface_stag_old, Hy_bias_old); + amrex::Real Hz_eff_old = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mzface_stag_old, Myface_stag_old, Hz_bias_old); if (coupling == 1){ // H_eff = H_maxwell + H_bias + H_exchange + H_anisotropy // H_maxwell - use H^(old_time) - Hx_eff += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mxface_stag, Myface_stag, Hx_old); - Hy_eff += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Myface_stag, Myface_stag, Hy_old); - Hz_eff += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mzface_stag, Myface_stag, Hz_old); + Hx_eff_old += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mxface_stag_old, Myface_stag_old, Hx_old); + Hy_eff_old += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Myface_stag_old, Myface_stag_old, Hy_old); + Hz_eff_old += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mzface_stag_old, Myface_stag_old, Hz_old); } if (mag_exchange_coupling == 1){ @@ -299,9 +302,9 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( amrex::Real Ms_lo_z = mag_Ms_yface_arr(i, j, k-1); amrex::Real Ms_hi_z = mag_Ms_yface_arr(i, j, k+1); - Hx_eff += H_exchange_coeff * T_Algo::Laplacian_Mag(M_yface, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 0, 1); //Last argument is nodality -- yface = 1 - Hy_eff += H_exchange_coeff * T_Algo::Laplacian_Mag(M_yface, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 1, 1); //Last argument is nodality -- yface = 1 - Hz_eff += H_exchange_coeff * T_Algo::Laplacian_Mag(M_yface, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 2, 1); //Last argument is nodality -- yface = 1 + Hx_eff_old += H_exchange_coeff * T_Algo::Laplacian_Mag(M_yface_old, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 0, 1); //Last argument is nodality -- yface = 1 + Hy_eff_old += H_exchange_coeff * T_Algo::Laplacian_Mag(M_yface_old, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 1, 1); //Last argument is nodality -- yface = 1 + Hz_eff_old += H_exchange_coeff * T_Algo::Laplacian_Mag(M_yface_old, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 2, 1); //Last argument is nodality -- yface = 1 } if (mag_anisotropy_coupling == 1){ @@ -311,19 +314,19 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( // H_anisotropy - use M^(old_time) amrex::Real M_dot_anisotropy_axis = 0.0; for (int comp=0; comp<3; ++comp) { - M_dot_anisotropy_axis += M_yface(i, j, k, comp) * anisotropy_axis[comp]; + M_dot_anisotropy_axis += M_yface_old(i, j, k, comp) * anisotropy_axis[comp]; } amrex::Real const H_anisotropy_coeff = - 2.0 * mag_anisotropy_yface_arr(i,j,k) / PhysConst::mu0 / mag_Ms_yface_arr(i,j,k) / mag_Ms_yface_arr(i,j,k); - Hx_eff += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[0]; - Hy_eff += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[1]; - Hz_eff += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[2]; + Hx_eff_old += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[0]; + Hy_eff_old += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[1]; + Hz_eff_old += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[2]; } // 0 = unsaturated; compute |M| locally. 1 = saturated; use M_s // note the unsaturated case is less usefull in real devices - amrex::Real M_magnitude = (M_normalization == 0) ? std::sqrt(std::pow(M_yface(i, j, k, 0), 2._rt) + std::pow(M_yface(i, j, k, 1), 2._rt) + std::pow(M_yface(i, j, k, 2), 2._rt)) + amrex::Real M_magnitude_old = (M_normalization == 0) ? std::sqrt(std::pow(M_yface_old(i, j, k, 0), 2._rt) + std::pow(M_yface_old(i, j, k, 1), 2._rt) + std::pow(M_yface_old(i, j, k, 2), 2._rt)) : mag_Ms_yface_arr(i,j,k); - amrex::Real a_temp_static_coeff = mag_alpha_yface_arr(i,j,k) / M_magnitude; + amrex::Real a_temp_static_coeff = mag_alpha_yface_arr(i,j,k) / M_magnitude_old; // calculate the b_temp_static_coeff (it is divided by 2.0 because the derivation is based on an interger dt, // while in real simulations, the input dt is actually dt/2.0) @@ -332,18 +335,18 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( for (int comp=0; comp<3; ++comp) { // calculate a_temp_static_yface // all component on y-faces of grid - a_temp_static_yface(i, j, k, comp) = a_temp_static_coeff * M_yface(i, j, k, comp); + a_temp_static_yface(i, j, k, comp) = a_temp_static_coeff * M_yface_old(i, j, k, comp); } // calculate b_temp_static_yface // x component on y-faces of grid - b_temp_static_yface(i, j, k, 0) = M_yface(i, j, k, 0) + dt * b_temp_static_coeff * (M_yface(i, j, k, 1) * Hz_eff - M_yface(i, j, k, 2) * Hy_eff); + b_temp_static_yface(i, j, k, 0) = M_yface_old(i, j, k, 0) + dt * b_temp_static_coeff * (M_yface_old(i, j, k, 1) * Hz_eff_old - M_yface_old(i, j, k, 2) * Hy_eff_old); // y component on y-faces of grid - b_temp_static_yface(i, j, k, 1) = M_yface(i, j, k, 1) + dt * b_temp_static_coeff * (M_yface(i, j, k, 2) * Hx_eff - M_yface(i, j, k, 0) * Hz_eff); + b_temp_static_yface(i, j, k, 1) = M_yface_old(i, j, k, 1) + dt * b_temp_static_coeff * (M_yface_old(i, j, k, 2) * Hx_eff_old - M_yface_old(i, j, k, 0) * Hz_eff_old); // z component on y-faces of grid - b_temp_static_yface(i, j, k, 2) = M_yface(i, j, k, 2) + dt * b_temp_static_coeff * (M_yface(i, j, k, 0) * Hy_eff - M_yface(i, j, k, 1) * Hx_eff); + b_temp_static_yface(i, j, k, 2) = M_yface_old(i, j, k, 2) + dt * b_temp_static_coeff * (M_yface_old(i, j, k, 0) * Hy_eff_old - M_yface_old(i, j, k, 1) * Hx_eff_old); } }); @@ -357,17 +360,17 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( // Hy and Hz can be acquired by interpolation // H_bias - amrex::Real Hx_eff = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mxface_stag, Mzface_stag, Hx_bias); - amrex::Real Hy_eff = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Myface_stag, Mzface_stag, Hy_bias); - amrex::Real Hz_eff = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mzface_stag, Mzface_stag, Hz_bias); + amrex::Real Hx_eff_old = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mxface_stag_old, Mzface_stag_old, Hx_bias_old); + amrex::Real Hy_eff_old = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Myface_stag_old, Mzface_stag_old, Hy_bias_old); + amrex::Real Hz_eff_old = MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mzface_stag_old, Mzface_stag_old, Hz_bias_old); if (coupling == 1){ // H_eff = H_maxwell + H_bias + H_exchange + H_anisotropy // H_maxwell - use H^(old_time) - Hx_eff += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mxface_stag, Mzface_stag, Hx_old); - Hy_eff += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Myface_stag, Mzface_stag, Hy_old); - Hz_eff += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mzface_stag, Mzface_stag, Hz_old); + Hx_eff_old += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mxface_stag_old, Mzface_stag_old, Hx_old); + Hy_eff_old += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Myface_stag_old, Mzface_stag_old, Hy_old); + Hz_eff_old += MacroscopicProperties::face_avg_to_face(i, j, k, 0, Mzface_stag_old, Mzface_stag_old, Hz_old); } if (mag_exchange_coupling == 1){ @@ -384,9 +387,9 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( amrex::Real Ms_lo_z = mag_Ms_zface_arr(i, j, k-1); amrex::Real Ms_hi_z = mag_Ms_zface_arr(i, j, k+1); - Hx_eff += H_exchange_coeff * T_Algo::Laplacian_Mag(M_zface, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 0, 2); //Last argument is nodality -- zface = 2 - Hy_eff += H_exchange_coeff * T_Algo::Laplacian_Mag(M_zface, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 1, 2); //Last argument is nodality -- zface = 2 - Hz_eff += H_exchange_coeff * T_Algo::Laplacian_Mag(M_zface, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 2, 2); //Last argument is nodality -- zface = 2 + Hx_eff_old += H_exchange_coeff * T_Algo::Laplacian_Mag(M_zface_old, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 0, 2); //Last argument is nodality -- zface = 2 + Hy_eff_old += H_exchange_coeff * T_Algo::Laplacian_Mag(M_zface_old, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 1, 2); //Last argument is nodality -- zface = 2 + Hz_eff_old += H_exchange_coeff * T_Algo::Laplacian_Mag(M_zface_old, coefs_x, coefs_y, coefs_z, n_coefs_x, n_coefs_y, n_coefs_z, Ms_lo_x, Ms_hi_x, Ms_lo_y, Ms_hi_y, Ms_lo_z, Ms_hi_z, i, j, k, 2, 2); //Last argument is nodality -- zface = 2 } if (mag_anisotropy_coupling == 1){ @@ -396,18 +399,18 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( // H_anisotropy - use M^(old_time) amrex::Real M_dot_anisotropy_axis = 0.0; for (int comp=0; comp<3; ++comp) { - M_dot_anisotropy_axis += M_zface(i, j, k, comp) * anisotropy_axis[comp]; + M_dot_anisotropy_axis += M_zface_old(i, j, k, comp) * anisotropy_axis[comp]; } amrex::Real const H_anisotropy_coeff = - 2.0 * mag_anisotropy_zface_arr(i,j,k) / PhysConst::mu0 / mag_Ms_zface_arr(i,j,k) / mag_Ms_zface_arr(i,j,k); - Hx_eff += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[0]; - Hy_eff += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[1]; - Hz_eff += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[2]; + Hx_eff_old += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[0]; + Hy_eff_old += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[1]; + Hz_eff_old += H_anisotropy_coeff * M_dot_anisotropy_axis * anisotropy_axis[2]; } // 0 = unsaturated; compute |M| locally. 1 = saturated; use M_s - amrex::Real M_magnitude = (M_normalization == 0) ? std::sqrt(std::pow(M_zface(i, j, k, 0), 2._rt) + std::pow(M_zface(i, j, k, 1), 2._rt) + std::pow(M_zface(i, j, k, 2), 2._rt)) + amrex::Real M_magnitude_old = (M_normalization == 0) ? std::sqrt(std::pow(M_zface_old(i, j, k, 0), 2._rt) + std::pow(M_zface_old(i, j, k, 1), 2._rt) + std::pow(M_zface_old(i, j, k, 2), 2._rt)) : mag_Ms_zface_arr(i,j,k); - amrex::Real a_temp_static_coeff = mag_alpha_zface_arr(i,j,k) / M_magnitude; + amrex::Real a_temp_static_coeff = mag_alpha_zface_arr(i,j,k) / M_magnitude_old; // calculate the b_temp_static_coeff (it is divided by 2.0 because the derivation is based on an interger dt, // while in real simulations, the input dt is actually dt/2.0) @@ -416,18 +419,18 @@ void FiniteDifferenceSolver::MacroscopicEvolveHMCartesian_2nd( for (int comp=0; comp<3; ++comp) { // calculate a_temp_static_zface // all components on z-faces of grid - a_temp_static_zface(i, j, k, comp) = a_temp_static_coeff * M_zface(i, j, k, comp); + a_temp_static_zface(i, j, k, comp) = a_temp_static_coeff * M_zface_old(i, j, k, comp); } // calculate b_temp_static_zface // x component on z-faces of grid - b_temp_static_zface(i, j, k, 0) = M_zface(i, j, k, 0) + dt * b_temp_static_coeff * (M_zface(i, j, k, 1) * Hz_eff - M_zface(i, j, k, 2) * Hy_eff); + b_temp_static_zface(i, j, k, 0) = M_zface_old(i, j, k, 0) + dt * b_temp_static_coeff * (M_zface_old(i, j, k, 1) * Hz_eff_old - M_zface_old(i, j, k, 2) * Hy_eff_old); // y component on z-faces of grid - b_temp_static_zface(i, j, k, 1) = M_zface(i, j, k, 1) + dt * b_temp_static_coeff * (M_zface(i, j, k, 2) * Hx_eff - M_zface(i, j, k, 0) * Hz_eff); + b_temp_static_zface(i, j, k, 1) = M_zface_old(i, j, k, 1) + dt * b_temp_static_coeff * (M_zface_old(i, j, k, 2) * Hx_eff_old - M_zface_old(i, j, k, 0) * Hz_eff_old); // z component on z-faces of grid - b_temp_static_zface(i, j, k, 2) = M_zface(i, j, k, 2) + dt * b_temp_static_coeff * (M_zface(i, j, k, 0) * Hy_eff - M_zface(i, j, k, 1) * Hx_eff); + b_temp_static_zface(i, j, k, 2) = M_zface_old(i, j, k, 2) + dt * b_temp_static_coeff * (M_zface_old(i, j, k, 0) * Hy_eff_old - M_zface_old(i, j, k, 1) * Hx_eff_old); } }); } From 92b38326c48c4b0554745c3e90785f6abc922617 Mon Sep 17 00:00:00 2001 From: jackieyao0114 Date: Thu, 19 May 2022 16:35:42 -0700 Subject: [PATCH 11/11] cleared unecessary changes in Examples/Waveguide/inputs_3d_empty_X_band --- Examples/Waveguide/inputs_3d_empty_X_band | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/Waveguide/inputs_3d_empty_X_band b/Examples/Waveguide/inputs_3d_empty_X_band index 9a1dd8ad5..7d7dc6b63 100644 --- a/Examples/Waveguide/inputs_3d_empty_X_band +++ b/Examples/Waveguide/inputs_3d_empty_X_band @@ -9,7 +9,7 @@ ################################# max_step = 1000000 amr.n_cell = 512 4 512 # number of cells spanning the domain in each coordinate direction at level 0 -amr.max_grid_size = 512 # maximum size of each AMReX box, used to decompose the domain +amr.max_grid_size = 64 # maximum size of each AMReX box, used to decompose the domain amr.blocking_factor = 4 # only meaningful for AMR geometry.dims = 3 boundary.field_lo = pec pec pml # PEC on side walls; PML at -z end