diff options
14 files changed, 168 insertions, 147 deletions
diff --git a/Docs/source/usage/parameters.rst b/Docs/source/usage/parameters.rst index 7c33722f8..faee944e7 100644 --- a/Docs/source/usage/parameters.rst +++ b/Docs/source/usage/parameters.rst @@ -328,13 +328,16 @@ User-defined constants Users can define their own constants in the input file. These constants can be used for any parameter that consists in one real number. -User-defined constants can contain only letters, numbers and the character ``_``. +User-defined constant names can contain only letters, numbers and the character ``_``. The name of each constant has to begin with a letter. The following names are used by WarpX, and cannot be used as user-defined constants: ``x``, ``y``, ``z``, ``X``, ``Y``, ``t``. -For example, parameters ``a0`` and ``z_plateau`` can be specified with: +The values of the constants can include the predefined WarpX constants listed above as well as other user-defined constants. +For example: * ``my_constants.a0 = 3.0`` * ``my_constants.z_plateau = 150.e-6`` +* ``my_constants.n0 = 1.e22`` +* ``my_constants.wp = sqrt(n0*q_e**2/(epsilon0*m_e))`` Coordinates ^^^^^^^^^^^ diff --git a/Examples/Tests/Langmuir/inputs_2d_multi_rt b/Examples/Tests/Langmuir/inputs_2d_multi_rt index c1712d867..95078dc1c 100644 --- a/Examples/Tests/Langmuir/inputs_2d_multi_rt +++ b/Examples/Tests/Langmuir/inputs_2d_multi_rt @@ -36,8 +36,10 @@ warpx.cfl = 1.0 # Parameters for the plasma wave my_constants.epsilon = 0.01 -my_constants.kp = 376357.71524190728 -my_constants.k = 314159.2653589793 +my_constants.n0 = 2.e24 # electron and positron densities, #/m^3 +my_constants.wp = sqrt(2.*n0*q_e**2/(epsilon0*m_e)) # plasma frequency +my_constants.kp = wp/clight # plasma wavenumber +my_constants.k = 2.*pi/20.e-6 # perturbation wavenumber # Note: kp is calculated in SI for a density of 4e24 (i.e. 2e24 electrons + 2e24 positrons) # k is calculated so as to have 2 periods within the 40e-6 wide box. @@ -56,7 +58,7 @@ electrons.zmin = -20.e-6 electrons.zmax = 20.e-6 electrons.profile = constant -electrons.density = 2.e24 # number of electrons per m^3 +electrons.density = n0 # number of electrons per m^3 electrons.momentum_distribution_type = parse_momentum_function electrons.momentum_function_ux(x,y,z) = "epsilon * k/kp * sin(k*x) * cos(k*y) * cos(k*z)" electrons.momentum_function_uy(x,y,z) = "epsilon * k/kp * cos(k*x) * sin(k*y) * cos(k*z)" @@ -74,7 +76,7 @@ positrons.zmin = -20.e-6 positrons.zmax = 20.e-6 positrons.profile = constant -positrons.density = 2.e24 # number of positrons per m^3 +positrons.density = n0 # number of positrons per m^3 positrons.momentum_distribution_type = parse_momentum_function positrons.momentum_function_ux(x,y,z) = "-epsilon * k/kp * sin(k*x) * cos(k*y) * cos(k*z)" positrons.momentum_function_uy(x,y,z) = "-epsilon * k/kp * cos(k*x) * sin(k*y) * cos(k*z)" diff --git a/Examples/Tests/Langmuir/inputs_2d_multi_rz_rt b/Examples/Tests/Langmuir/inputs_2d_multi_rz_rt index 63f67dceb..9fff59e4a 100644 --- a/Examples/Tests/Langmuir/inputs_2d_multi_rz_rt +++ b/Examples/Tests/Langmuir/inputs_2d_multi_rz_rt @@ -40,9 +40,11 @@ warpx.do_dive_cleaning = 1 # Parameters for the plasma wave my_constants.epsilon = 0.01 -my_constants.kp = 266125.0928256017 -my_constants.k0 = 314159.2653589793 -my_constants.w0 = 5.e-6 +my_constants.n0 = 2.e24 # electron density, #/m^3 +my_constants.wp = sqrt(n0*q_e**2/(epsilon0*m_e)) # plasma frequency +my_constants.kp = wp/clight # plasma wavenumber +my_constants.k0 = 2.*pi/20.e-6 # longitudianl perturbation wavenumber +my_constants.w0 = 5.e-6 # transverse perturbation length # Note: kp is calculated in SI for a density of 2e24 # k0 is calculated so as to have 2 periods within the 40e-6 wide box. @@ -59,7 +61,7 @@ electrons.zmin = -20.e-6 electrons.zmax = +20.e-6 electrons.profile = constant -electrons.density = 2.e24 # number of electrons per m^3 +electrons.density = n0 # number of electrons per m^3 electrons.momentum_distribution_type = parse_momentum_function electrons.momentum_function_ux(x,y,z) = "epsilon/kp*2*x/w0**2*exp(-(x**2+y**2)/w0**2)*sin(k0*z)" electrons.momentum_function_uy(x,y,z) = "epsilon/kp*2*y/w0**2*exp(-(x**2+y**2)/w0**2)*sin(k0*z)" @@ -76,7 +78,7 @@ ions.zmin = -20.e-6 ions.zmax = +20.e-6 ions.profile = constant -ions.density = 2.e24 # number of ions per m^3 +ions.density = n0 # number of ions per m^3 ions.momentum_distribution_type = constant ions.ux = 0. ions.uy = 0. diff --git a/Examples/Tests/Langmuir/inputs_3d_multi_rt b/Examples/Tests/Langmuir/inputs_3d_multi_rt index a65dd89f3..34b221ad4 100644 --- a/Examples/Tests/Langmuir/inputs_3d_multi_rt +++ b/Examples/Tests/Langmuir/inputs_3d_multi_rt @@ -37,8 +37,10 @@ warpx.cfl = 1.0 # Parameters for the plasma wave my_constants.epsilon = 0.01 -my_constants.kp = 376357.71524190728 -my_constants.k = 314159.2653589793 +my_constants.n0 = 2.e24 # electron and positron densities, #/m^3 +my_constants.wp = sqrt(2.*n0*q_e**2/(epsilon0*m_e)) # plasma frequency +my_constants.kp = wp/clight # plasma wavenumber +my_constants.k = 2.*pi/20.e-6 # perturbation wavenumber # Note: kp is calculated in SI for a density of 4e24 (i.e. 2e24 electrons + 2e24 positrons) # k is calculated so as to have 2 periods within the 40e-6 wide box. @@ -57,7 +59,7 @@ electrons.zmin = -20.e-6 electrons.zmax = 20.e-6 electrons.profile = constant -electrons.density = 2.e24 # number of electrons per m^3 +electrons.density = n0 # number of electrons per m^3 electrons.momentum_distribution_type = parse_momentum_function electrons.momentum_function_ux(x,y,z) = "epsilon * k/kp * sin(k*x) * cos(k*y) * cos(k*z)" electrons.momentum_function_uy(x,y,z) = "epsilon * k/kp * cos(k*x) * sin(k*y) * cos(k*z)" @@ -75,7 +77,7 @@ positrons.zmin = -20.e-6 positrons.zmax = 20.e-6 positrons.profile = constant -positrons.density = 2.e24 # number of positrons per m^3 +positrons.density = n0 # number of positrons per m^3 positrons.momentum_distribution_type = parse_momentum_function positrons.momentum_function_ux(x,y,z) = "-epsilon * k/kp * sin(k*x) * cos(k*y) * cos(k*z)" positrons.momentum_function_uy(x,y,z) = "-epsilon * k/kp * cos(k*x) * sin(k*y) * cos(k*z)" diff --git a/Regression/Checksum/benchmarks_json/Langmuir_multi.json b/Regression/Checksum/benchmarks_json/Langmuir_multi.json index 61ae10535..444aa16f7 100644 --- a/Regression/Checksum/benchmarks_json/Langmuir_multi.json +++ b/Regression/Checksum/benchmarks_json/Langmuir_multi.json @@ -2,31 +2,31 @@ "electrons": { "particle_cpu": 131072.0, "particle_id": 18862440448.0, - "particle_momentum_x": 9.638052142962566e-20, + "particle_momentum_x": 9.638052135794968e-20, "particle_position_x": 2.6214400000000015, "particle_position_y": 2.621440000000001, - "particle_position_z": 2.6214400000000007, + "particle_position_z": 2.621439999999999, "particle_weight": 128000000000.00002 }, "lev=0": { - "Bx": 12.117994152442217, - "By": 12.117994153638133, - "Bz": 12.117994153639632, - "Ex": 84779179148604.16, - "Ey": 84779179148604.05, - "Ez": 84779179148604.05, - "jx": 6.087467475688619e+16, - "jy": 6.087467475688316e+16, - "jz": 6.087467475688315e+16, + "Bx": 12.117994126642934, + "By": 12.117994123978939, + "Bz": 12.117994123975555, + "Ex": 84779179085495.8, + "Ey": 84779179085494.25, + "Ez": 84779179085494.25, + "jx": 6.0874674711604136e+16, + "jy": 6.087467471160617e+16, + "jz": 6.087467471160617e+16, "part_per_cell": 524288.0, - "rho": 702984843.3445112 + "rho": 702984842.8211379 }, "positrons": { "particle_cpu": 131072.0, "particle_id": 56518901760.0, - "particle_momentum_z": 9.638052142962866e-20, + "particle_momentum_z": 9.638052135795131e-20, "particle_position_x": 2.6214400000000015, "particle_position_y": 2.621440000000001, - "particle_position_z": 2.6214400000000007 + "particle_position_z": 2.621439999999999 } -} +}
\ No newline at end of file diff --git a/Regression/Checksum/benchmarks_json/Langmuir_multi_2d_nodal.json b/Regression/Checksum/benchmarks_json/Langmuir_multi_2d_nodal.json index d3927b2ab..e48a125e6 100644 --- a/Regression/Checksum/benchmarks_json/Langmuir_multi_2d_nodal.json +++ b/Regression/Checksum/benchmarks_json/Langmuir_multi_2d_nodal.json @@ -2,32 +2,32 @@ "electrons": { "particle_cpu": 32768.0, "particle_id": 1123057664.0, - "particle_momentum_x": 5.668407425899705e-20, + "particle_momentum_x": 5.668407421680403e-20, "particle_momentum_y": 0.0, - "particle_momentum_z": 5.668407425899706e-20, + "particle_momentum_z": 5.668407421680403e-20, "particle_position_x": 0.65536, - "particle_position_y": 0.6553599999999999, + "particle_position_y": 0.65536, "particle_weight": 3200000000000000.5 }, "lev=0": { "Bx": 0.0, - "By": 5.724715078011613, + "By": 5.7247150652267145, "Bz": 0.0, - "Ex": 3747060683403.881, + "Ex": 3747060680620.4976, "Ey": 0.0, - "Ez": 3747060683403.8833, - "jx": 1.0088447956385268e+16, + "Ez": 3747060680620.5044, + "jx": 1.0088447948876688e+16, "jy": 0.0, - "jz": 1.0088447956385268e+16 + "jz": 1.0088447948876688e+16 }, "positrons": { "particle_cpu": 32768.0, "particle_id": 3371204608.0, - "particle_momentum_x": 5.668407425899705e-20, + "particle_momentum_x": 5.668407421680403e-20, "particle_momentum_y": 0.0, - "particle_momentum_z": 5.668407425899706e-20, - "particle_position_x": 0.6553599999999999, - "particle_position_y": 0.6553599999999999, + "particle_momentum_z": 5.668407421680403e-20, + "particle_position_x": 0.65536, + "particle_position_y": 0.65536, "particle_weight": 3200000000000000.5 } }
\ No newline at end of file diff --git a/Regression/Checksum/benchmarks_json/Langmuir_multi_nodal.json b/Regression/Checksum/benchmarks_json/Langmuir_multi_nodal.json index 5f86c2cb2..c2339189e 100644 --- a/Regression/Checksum/benchmarks_json/Langmuir_multi_nodal.json +++ b/Regression/Checksum/benchmarks_json/Langmuir_multi_nodal.json @@ -2,31 +2,31 @@ "electrons": { "particle_cpu": 131072.0, "particle_id": 18862440448.0, - "particle_momentum_x": 9.320505028112314e-20, + "particle_momentum_x": 9.320505021180255e-20, "particle_position_x": 2.6214400000000015, "particle_position_y": 2.621440000000001, - "particle_position_z": 2.6214399999999998, + "particle_position_z": 2.62144, "particle_weight": 128000000000.00002 }, "lev=0": { - "Bx": 17.67689485265927, - "By": 17.676894852670383, - "Bz": 17.67689485267166, - "Ex": 86079763548288.75, - "Ey": 86079763548288.78, - "Ez": 86079763548288.78, - "jx": 5.803381905407021e+16, - "jy": 5.803381905407015e+16, - "jz": 5.803381905407016e+16, + "Bx": 17.676894813109854, + "By": 17.676894813153126, + "Bz": 17.676894813151755, + "Ex": 86079763484213.75, + "Ey": 86079763484213.8, + "Ez": 86079763484213.8, + "jx": 5.8033819010902744e+16, + "jy": 5.803381901090282e+16, + "jz": 5.80338190109028e+16, "part_per_cell": 524288.0, - "rho": 720713352.6087718 + "rho": 720713352.0721645 }, "positrons": { "particle_cpu": 131072.0, "particle_id": 56518901760.0, - "particle_momentum_z": 9.320505028112306e-20, + "particle_momentum_z": 9.320505021180262e-20, "particle_position_x": 2.6214400000000015, "particle_position_y": 2.621440000000001, - "particle_position_z": 2.6214399999999998 + "particle_position_z": 2.62144 } -} +}
\ No newline at end of file diff --git a/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd.json b/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd.json index ef1a83eee..f8c6b22ed 100644 --- a/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd.json +++ b/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd.json @@ -2,31 +2,31 @@ "electrons": { "particle_cpu": 131072.0, "particle_id": 18862440448.0, - "particle_momentum_x": 9.638052096688673e-20, + "particle_momentum_x": 9.638052089521077e-20, "particle_position_x": 2.621440000001177, "particle_position_y": 2.6214400000011775, - "particle_position_z": 2.6214399999999998, + "particle_position_z": 2.6214399999999993, "particle_weight": 128000000000.00002 }, "lev=0": { - "Bx": 11.927039871438884, - "By": 11.92703987044596, - "Bz": 11.929384183262627, - "Ex": 84779189387324.25, - "Ey": 84779189387324.56, - "Ez": 84779185961806.78, - "jx": 6.087467490676277e+16, - "jy": 6.08746749067624e+16, - "jz": 6.087467421885045e+16, + "Bx": 11.927039845227213, + "By": 11.927039844199939, + "Bz": 11.929384159260351, + "Ex": 84779189324213.69, + "Ey": 84779189324214.39, + "Ez": 84779185898697.1, + "jx": 6.087467486148589e+16, + "jy": 6.0874674861486456e+16, + "jz": 6.087467417357445e+16, "part_per_cell": 524288.0, - "rho": 702985675.5592988 + "rho": 702985675.035942 }, "positrons": { "particle_cpu": 131072.0, "particle_id": 56518901760.0, - "particle_momentum_z": 9.638051962153948e-20, + "particle_momentum_z": 9.638051954986328e-20, "particle_position_x": 2.621440000001177, - "particle_position_y": 2.621440000001178, - "particle_position_z": 2.6214399999999998 + "particle_position_y": 2.6214400000011775, + "particle_position_z": 2.6214399999999993 } }
\ No newline at end of file diff --git a/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_current_correction.json b/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_current_correction.json index 96141ff12..1d2c101f4 100644 --- a/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_current_correction.json +++ b/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_current_correction.json @@ -2,30 +2,30 @@ "electrons": { "particle_cpu": 0.0, "particle_id": 37409652736.0, - "particle_momentum_x": 9.585443568545559e-20, + "particle_momentum_x": 9.585443561416955e-20, "particle_position_x": 2.6214400000000015, "particle_position_y": 2.621440000000001, "particle_position_z": 2.6214400000000007, "particle_weight": 128000000000.00002 }, "lev=0": { - "Bx": 11.867039048376148, - "By": 11.86703905304863, - "Bz": 11.867039053065115, - "Ex": 85001549508327.53, - "Ey": 85001549508324.97, - "Ez": 85001549508324.9, - "divE": 7.97321190060971e+19, - "jx": 6.039975332058763e+16, - "jy": 6.039975332058887e+16, - "jz": 6.039975332058881e+16, + "Bx": 11.867039021156515, + "By": 11.867039023030747, + "Bz": 11.86703902301321, + "Ex": 85001549445049.31, + "Ey": 85001549445049.1, + "Ez": 85001549445049.03, + "divE": 7.973211894673711e+19, + "jx": 6.039975327566508e+16, + "jy": 6.0399753275670344e+16, + "jz": 6.0399753275670344e+16, "part_per_cell": 524288.0, - "rho": 705963156.3925041 + "rho": 705963155.8669195 }, "positrons": { "particle_cpu": 0.0, "particle_id": 112722575360.0, - "particle_momentum_z": 9.585443568545593e-20, + "particle_momentum_z": 9.585443561417127e-20, "particle_position_x": 2.6214400000000015, "particle_position_y": 2.621440000000001, "particle_position_z": 2.6214400000000007 diff --git a/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_current_correction_nodal.json b/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_current_correction_nodal.json index 19891e707..3e1b882b3 100644 --- a/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_current_correction_nodal.json +++ b/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_current_correction_nodal.json @@ -2,32 +2,32 @@ "electrons": { "particle_cpu": 0.0, "particle_id": 37409652736.0, - "particle_momentum_x": 9.427560635869364e-20, + "particle_momentum_x": 9.427560628857219e-20, "particle_position_x": 2.6214400000000015, "particle_position_y": 2.621440000000001, - "particle_position_z": 2.6214399999999998, + "particle_position_z": 2.6214400000000007, "particle_weight": 128000000000.00002 }, "lev=0": { - "Bx": 17.49996248979552, - "By": 17.499962489807935, - "Bz": 17.499962489796665, - "Ex": 85654801346583.62, - "Ey": 85654801346583.34, - "Ez": 85654801346583.31, - "divE": 8.073511509609898e+19, - "jx": 5.898369391324192e+16, - "jy": 5.898369391324414e+16, - "jz": 5.898369391324419e+16, + "Bx": 17.499962450597717, + "By": 17.49996245066815, + "Bz": 17.49996245067805, + "Ex": 85654801282823.56, + "Ey": 85654801282823.42, + "Ez": 85654801282823.39, + "divE": 8.073511503598928e+19, + "jx": 5.898369386936786e+16, + "jy": 5.898369386936582e+16, + "jz": 5.898369386936586e+16, "part_per_cell": 524288.0, - "rho": 714843872.1488855 + "rho": 714843871.6166623 }, "positrons": { "particle_cpu": 0.0, "particle_id": 112722575360.0, - "particle_momentum_z": 9.427560635869377e-20, + "particle_momentum_z": 9.4275606288572e-20, "particle_position_x": 2.6214400000000015, "particle_position_y": 2.621440000000001, - "particle_position_z": 2.6214399999999998 + "particle_position_z": 2.6214400000000007 } }
\ No newline at end of file diff --git a/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_momentum_conserving.json b/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_momentum_conserving.json index a84855a06..c7fc7f4bc 100644 --- a/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_momentum_conserving.json +++ b/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_momentum_conserving.json @@ -2,31 +2,31 @@ "electrons": { "particle_cpu": 131072.0, "particle_id": 18862440448.0, - "particle_momentum_x": 9.320946076473149e-20, + "particle_momentum_x": 9.320946069540143e-20, "particle_position_x": 2.621440000001092, "particle_position_y": 2.621440000001092, - "particle_position_z": 2.62144, + "particle_position_z": 2.6214400000000007, "particle_weight": 128000000000.00002 }, "lev=0": { - "Bx": 15.08683235643132, - "By": 15.086832354582613, - "Bz": 15.08865435829179, - "Ex": 86081132569285.61, - "Ey": 86081132569285.25, - "Ez": 86081129790492.31, - "jx": 5.859963709146216e+16, - "jy": 5.859963709146176e+16, - "jz": 5.859963721500062e+16, + "Bx": 15.086832321576074, + "By": 15.086832322078731, + "Bz": 15.088654326228205, + "Ex": 86081132505207.28, + "Ey": 86081132505207.11, + "Ez": 86081129726414.66, + "jx": 5.859963704786842e+16, + "jy": 5.859963704786908e+16, + "jz": 5.85996371714085e+16, "part_per_cell": 524288.0, - "rho": 720713532.3806039 + "rho": 720713531.8440464 }, "positrons": { "particle_cpu": 131072.0, "particle_id": 56518901760.0, - "particle_momentum_z": 9.320946065812051e-20, + "particle_momentum_z": 9.320946058879026e-20, "particle_position_x": 2.621440000001092, "particle_position_y": 2.621440000001092, - "particle_position_z": 2.62144 + "particle_position_z": 2.6214400000000007 } }
\ No newline at end of file diff --git a/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_nodal.json b/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_nodal.json index 8ca75b994..f8dcc43c1 100644 --- a/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_nodal.json +++ b/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_nodal.json @@ -2,29 +2,29 @@ "electrons": { "particle_cpu": 131072.0, "particle_id": 18862440448.0, - "particle_momentum_x": 9.320515831688772e-20, + "particle_momentum_x": 9.320515824756692e-20, "particle_position_x": 2.6214400000000015, "particle_position_y": 2.621440000000001, - "particle_position_z": 2.62144, + "particle_position_z": 2.6214400000000007, "particle_weight": 128000000000.00002 }, "lev=0": { - "Bx": 17.31887367426522, - "By": 17.318873674232954, - "Bz": 17.31887367425445, - "Ex": 86079988606567.34, - "Ey": 86079988606567.34, - "Ez": 86079988606567.33, - "jx": 5.803387776443088e+16, - "jy": 5.8033877764430856e+16, - "jz": 5.803387776443085e+16, + "Bx": 17.318873635475775, + "By": 17.31887363546676, + "Bz": 17.31887363550675, + "Ex": 86079988542491.8, + "Ey": 86079988542491.78, + "Ez": 86079988542491.77, + "jx": 5.8033877721263256e+16, + "jy": 5.803387772126333e+16, + "jz": 5.803387772126333e+16, "part_per_cell": 524288.0, - "rho": 720717033.3443888 + "rho": 720717032.8077942 }, "positrons": { "particle_cpu": 131072.0, "particle_id": 56518901760.0, - "particle_momentum_z": 9.32051583168877e-20, + "particle_momentum_z": 9.320515824756704e-20, "particle_position_x": 2.6214400000000015, "particle_position_y": 2.621440000000001, "particle_position_z": 2.62144 diff --git a/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_single_precision.json b/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_single_precision.json index 01725b78a..963a7ded3 100644 --- a/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_single_precision.json +++ b/Regression/Checksum/benchmarks_json/Langmuir_multi_psatd_single_precision.json @@ -2,31 +2,31 @@ "electrons": { "particle_cpu": 131072.0, "particle_id": 18270519296.0, - "particle_momentum_x": 9.638059683620202e-20, - "particle_position_x": 2.621439944060171, - "particle_position_y": 2.621439958565901, - "particle_position_z": 2.6214399583572003, + "particle_momentum_x": 9.638206108462784e-20, + "particle_position_x": 2.621439946144335, + "particle_position_y": 2.6214399605720473, + "particle_position_z": 2.6214399608165024, "particle_weight": 127999991808.0 }, "lev=0": { - "Bx": 11.964658553650342, - "By": 11.956726736527793, - "Bz": 11.95014436974827, - "Ex": 84779240882468.25, - "Ey": 84779250043081.5, - "Ez": 84779193731798.38, - "jx": 6.087472048294362e+16, - "jy": 6.087472925954458e+16, - "jz": 6.087475294828256e+16, + "Bx": 11.942729428141796, + "By": 11.947761789089679, + "Bz": 11.942489514683562, + "Ex": 84780606024507.0, + "Ey": 84780616397484.88, + "Ez": 84780559670537.38, + "jx": 6.087564613231104e+16, + "jy": 6.087565743692762e+16, + "jz": 6.087567343856218e+16, "part_per_cell": 524288.0, - "rho": 702981186.7929688 + "rho": 702987811.1679688 }, "positrons": { "particle_cpu": 131072.0, "particle_id": 54811295744.0, - "particle_momentum_z": 9.638064035895123e-20, - "particle_position_x": 2.6214399439650435, - "particle_position_y": 2.621439958525343, - "particle_position_z": 2.621439958409354 + "particle_momentum_z": 9.638209718562555e-20, + "particle_position_x": 2.6214399461232745, + "particle_position_y": 2.621439960570399, + "particle_position_z": 2.621439960792145 } -} +}
\ No newline at end of file diff --git a/Source/Utils/WarpXUtil.cpp b/Source/Utils/WarpXUtil.cpp index 622a0256e..ae62eb0ca 100644 --- a/Source/Utils/WarpXUtil.cpp +++ b/Source/Utils/WarpXUtil.cpp @@ -14,6 +14,8 @@ #include <cmath> #include <fstream> +#include <set> +#include <string> using namespace amrex; @@ -193,6 +195,10 @@ void Store_parserString(const amrex::ParmParse& pp, std::string query_string, WarpXParser makeParser (std::string const& parse_function, std::vector<std::string> const& varnames) { + // Since queryWithParser recursively calls this routine, keep track of symbols + // in case an infinite recursion is found (a symbol's value depending on itself). + static std::set<std::string> recursive_symbols; + WarpXParser parser(parse_function); parser.registerVariables(varnames); ParmParse pp_my_constants("my_constants"); @@ -200,7 +206,13 @@ WarpXParser makeParser (std::string const& parse_function, std::vector<std::stri for (auto const& v : varnames) symbols.erase(v.c_str()); for (auto it = symbols.begin(); it != symbols.end(); ) { Real v; - if (pp_my_constants.query(it->c_str(), v)) { + + WarpXUtilMsg::AlwaysAssert(recursive_symbols.count(*it)==0, "Expressions contains recursive symbol "+*it); + recursive_symbols.insert(*it); + const bool is_input = queryWithParser(pp_my_constants, it->c_str(), v); + recursive_symbols.erase(*it); + + if (is_input) { parser.setConstant(*it, v); it = symbols.erase(it); } else if (std::strcmp(it->c_str(), "q_e") == 0) { |