diff options
author | 2023-02-27 13:04:58 -0800 | |
---|---|---|
committer | 2023-02-27 21:04:58 +0000 | |
commit | 3ac71fef9b83a3c3f94a93b492aec58329b546cc (patch) | |
tree | 53393c94f21b046bf777efeee1c55dc632c6956e | |
parent | ce188a26a22c99f5c4b297c9ffab6fc3c5c0e180 (diff) | |
download | WarpX-3ac71fef9b83a3c3f94a93b492aec58329b546cc.tar.gz WarpX-3ac71fef9b83a3c3f94a93b492aec58329b546cc.tar.zst WarpX-3ac71fef9b83a3c3f94a93b492aec58329b546cc.zip |
Change plotfile RZ allowed diags to r,t from x,y (#3663)
* change plotfile RZ allowed diag to r,t from x,y
* Change labeling in checksums
* add rz silver mueller analysis script
* make analysis_silver_mueller_rz.py executable
* change x,y fields to r,t in more tests
* x->r in MR RZ checksums
* correct analysis for plotfiles saved as 'boxlib'
* add self to creator list
* change rz diags in PICMI
* correct PICMI changes
* another y->t in an rz test
* update picmi plotfile rz btd names
* review suggestion to condense analysis
* Apply suggestions from code review
Co-authored-by: Edoardo Zoni <59625522+EZoni@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Edoardo Zoni <59625522+EZoni@users.noreply.github.com>
---------
Co-authored-by: Remi Lehe <remi.lehe@normalesup.org>
Co-authored-by: Edoardo Zoni <59625522+EZoni@users.noreply.github.com>
40 files changed, 203 insertions, 137 deletions
diff --git a/.zenodo.json b/.zenodo.json index f26af9677..43af64573 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -149,6 +149,11 @@ "orcid": "0000-0003-2406-1273" }, { + "affiliation": "Lawrence Berkeley National Laboratory", + "name": "Sandberg, Ryan T.", + "orcid": "0000-0001-7680-8733" + }, + { "affiliation": "Modern Electron", "name": "Scherpelz, Peter", "orcid": "0000-0001-8185-3387" diff --git a/Docs/source/usage/parameters.rst b/Docs/source/usage/parameters.rst index 5a9b9f175..a5914fbc3 100644 --- a/Docs/source/usage/parameters.rst +++ b/Docs/source/usage/parameters.rst @@ -2157,12 +2157,9 @@ In-situ capabilities can be used by turning on Sensei or Ascent (provided they a Possible scalar fields: ``part_per_cell`` ``rho`` ``phi`` ``F`` ``part_per_grid`` ``divE`` ``divB`` and ``rho_<species_name>``, where ``<species_name>`` must match the name of one of the available particle species. Note that ``phi`` will only be written out when do_electrostatic==labframe. Also, note that for ``<diag_name>.diag_type = BackTransformed``, the only scalar field currently supported is ``rho``. Possible vector field components in Cartesian geometry: ``Ex`` ``Ey`` ``Ez`` ``Bx`` ``By`` ``Bz`` ``jx`` ``jy`` ``jz``. Possible vector field components in RZ geometry: ``Er`` ``Et`` ``Ez`` ``Br`` ``Bt`` ``Bz`` ``jr`` ``jt`` ``jz``. - Default is ``<diag_name>.fields_to_plot = Ex Ey Ez Bx By Bz jx jy jz``, - unless in RZ geometry with ``<diag_name>.format == openpmd``, - then default is ``<diag_name>.fields_to_plot = Er Et Ez Br Bt Bz jr jt jz``. + The default is ``<diag_name>.fields_to_plot = Ex Ey Ez Bx By Bz jx jy jz`` in Cartesian geometry and ``<diag_name>.fields_to_plot = Er Et Ez Br Bt Bz jr jt jz`` in RZ geometry. When the special value ``none`` is specified, no fields are written out. Note that the fields are averaged on the cell centers before they are written to file. - Also, when ``<diag_name>.format = openpmd``, the RZ modes for all fields are written. Otherwise, we reconstruct a 2D Cartesian slice of the fields for output at :math:`\theta=0`. * ``<diag_name>.dump_rz_modes`` (`0` or `1`) optional (default `0`) diff --git a/Examples/Physics_applications/laser_acceleration/inputs_rz b/Examples/Physics_applications/laser_acceleration/inputs_rz index 443508821..7365523b5 100644 --- a/Examples/Physics_applications/laser_acceleration/inputs_rz +++ b/Examples/Physics_applications/laser_acceleration/inputs_rz @@ -88,6 +88,6 @@ laser1.wavelength = 0.8e-6 # The wavelength of the laser (in m) diagnostics.diags_names = diag1 diag1.intervals = 10 diag1.diag_type = Full -diag1.fields_to_plot = Ex Ey Ez Bx By Bz jx jy jz rho +diag1.fields_to_plot = Er Et Ez Br Bt Bz jr jt jz rho diag1.electrons.variables = w ux uy uz orig_x orig_z diag1.beam.variables = w ux uy uz diff --git a/Examples/Tests/electrostatic_sphere/analysis_electrostatic_sphere.py b/Examples/Tests/electrostatic_sphere/analysis_electrostatic_sphere.py index c718c1a42..cbb424ffe 100755 --- a/Examples/Tests/electrostatic_sphere/analysis_electrostatic_sphere.py +++ b/Examples/Tests/electrostatic_sphere/analysis_electrostatic_sphere.py @@ -84,11 +84,12 @@ data = ds.covering_grid(level=0, dims=ds.domain_dimensions) # Extract the E field along the axes -if ndims == 2: - Ex = data[('mesh','Ex')].to_ndarray() +# if ndims == 2: +if ds.parameters['geometry.dims'] == 'RZ': + Ex = data[('boxlib','Er')].to_ndarray() Ex_axis = Ex[:,iz0,0] Ey_axis = Ex_axis - Ez = data[('mesh','Ez')].to_ndarray() + Ez = data[('boxlib','Ez')].to_ndarray() Ez_axis = Ez[ix0,:,0] else: Ex = data[('mesh','Ex')].to_ndarray() diff --git a/Examples/Tests/electrostatic_sphere/inputs_rz b/Examples/Tests/electrostatic_sphere/inputs_rz index 11d86575a..58f31046d 100644 --- a/Examples/Tests/electrostatic_sphere/inputs_rz +++ b/Examples/Tests/electrostatic_sphere/inputs_rz @@ -33,4 +33,4 @@ electron.momentum_distribution_type = at_rest diagnostics.diags_names = diag1 diag1.intervals = 30 diag1.diag_type = Full -diag1.fields_to_plot = Ex Ey Ez rho +diag1.fields_to_plot = Er Et Ez rho diff --git a/Examples/Tests/electrostatic_sphere_eb/analysis_rz.py b/Examples/Tests/electrostatic_sphere_eb/analysis_rz.py index bb170f921..11c04d5c7 100755 --- a/Examples/Tests/electrostatic_sphere_eb/analysis_rz.py +++ b/Examples/Tests/electrostatic_sphere_eb/analysis_rz.py @@ -32,7 +32,7 @@ ds = yt.load( fn ) all_data_level_0 = ds.covering_grid(level=0,left_edge=ds.domain_left_edge, dims=ds.domain_dimensions) phi = all_data_level_0['boxlib', 'phi'].v.squeeze() -Er = all_data_level_0['boxlib', 'Ex'].v.squeeze() +Er = all_data_level_0['boxlib', 'Er'].v.squeeze() Dx = ds.domain_width/ds.domain_dimensions dr = Dx[0] diff --git a/Examples/Tests/electrostatic_sphere_eb/inputs_rz b/Examples/Tests/electrostatic_sphere_eb/inputs_rz index af5f7fcbf..28ebadb1c 100644 --- a/Examples/Tests/electrostatic_sphere_eb/inputs_rz +++ b/Examples/Tests/electrostatic_sphere_eb/inputs_rz @@ -26,4 +26,4 @@ algo.field_gathering = momentum-conserving diagnostics.diags_names = diag1 diag1.intervals = 1 diag1.diag_type = Full -diag1.fields_to_plot = Ex phi +diag1.fields_to_plot = Er phi diff --git a/Examples/Tests/electrostatic_sphere_eb/inputs_rz_mr b/Examples/Tests/electrostatic_sphere_eb/inputs_rz_mr index 0501760f3..3bea63d76 100644 --- a/Examples/Tests/electrostatic_sphere_eb/inputs_rz_mr +++ b/Examples/Tests/electrostatic_sphere_eb/inputs_rz_mr @@ -29,4 +29,4 @@ algo.field_gathering = momentum-conserving diagnostics.diags_names = diag1 diag1.intervals = 1 diag1.diag_type = Full -diag1.fields_to_plot = Ex phi +diag1.fields_to_plot = Er phi diff --git a/Examples/Tests/langmuir/PICMI_inputs_langmuir_rz_multimode_analyze.py b/Examples/Tests/langmuir/PICMI_inputs_langmuir_rz_multimode_analyze.py index a515797e3..018303a96 100755 --- a/Examples/Tests/langmuir/PICMI_inputs_langmuir_rz_multimode_analyze.py +++ b/Examples/Tests/langmuir/PICMI_inputs_langmuir_rz_multimode_analyze.py @@ -104,7 +104,7 @@ solver = picmi.ElectromagneticSolver(grid=grid, cfl=1.) field_diag1 = picmi.FieldDiagnostic(name = 'diag1', grid = grid, period = diagnostic_intervals, - data_list = ['Ex', 'Ez', 'By', 'Jx', 'Jz', 'part_per_cell'], + data_list = ['Er', 'Ez', 'Bt', 'Jr', 'Jz', 'part_per_cell'], write_dir = '.', warpx_file_prefix = 'Python_Langmuir_rz_multimode_plt') diff --git a/Examples/Tests/langmuir/analysis_langmuir_multi_rz.py b/Examples/Tests/langmuir/analysis_langmuir_multi_rz.py index b87fa385b..e5ae21941 100755 --- a/Examples/Tests/langmuir/analysis_langmuir_multi_rz.py +++ b/Examples/Tests/langmuir/analysis_langmuir_multi_rz.py @@ -89,13 +89,13 @@ zz = zmin + (coords[1] + 0.5)*dz # Check the validity of the fields overall_max_error = 0 -Er_sim = data[('mesh','Ex')].to_ndarray()[:,:,0] +Er_sim = data[('boxlib','Er')].to_ndarray()[:,:,0] Er_th = Er(zz, rr, epsilon, k0, w0, wp, t0) max_error = abs(Er_sim-Er_th).max()/abs(Er_th).max() print('Er: Max error: %.2e' %(max_error)) overall_max_error = max( overall_max_error, max_error ) -Ez_sim = data[('mesh','Ez')].to_ndarray()[:,:,0] +Ez_sim = data[('boxlib','Ez')].to_ndarray()[:,:,0] Ez_th = Ez(zz, rr, epsilon, k0, w0, wp, t0) max_error = abs(Ez_sim-Ez_th).max()/abs(Ez_th).max() print('Ez: Max error: %.2e' %(max_error)) diff --git a/Examples/Tests/langmuir/inputs_2d_multi_rz_rt b/Examples/Tests/langmuir/inputs_2d_multi_rz_rt index c97d3aaa0..534296759 100644 --- a/Examples/Tests/langmuir/inputs_2d_multi_rz_rt +++ b/Examples/Tests/langmuir/inputs_2d_multi_rz_rt @@ -85,7 +85,7 @@ ions.momentum_distribution_type = at_rest diagnostics.diags_names = diag1 diag_parser_filter diag_uniform_filter diag_random_filter diag1.intervals = max_step/2 diag1.diag_type = Full -diag1.fields_to_plot = jx jz Ex Ez By +diag1.fields_to_plot = jr jz Er Ez Bt ## diag_parser_filter is a diag used to test the particle filter function. diag_parser_filter.intervals = max_step:max_step: diff --git a/Examples/Tests/magnetostatic_eb/PICMI_inputs_rz.py b/Examples/Tests/magnetostatic_eb/PICMI_inputs_rz.py index 2ddd0c39e..693bc1b88 100755 --- a/Examples/Tests/magnetostatic_eb/PICMI_inputs_rz.py +++ b/Examples/Tests/magnetostatic_eb/PICMI_inputs_rz.py @@ -114,7 +114,7 @@ field_diag = picmi.FieldDiagnostic( name = 'diag1', grid = grid, period = 1, - data_list = ['Ex', 'By', 'Az', 'Jz', 'phi', 'rho'], + data_list = ['Er', 'Bt', 'Az', 'Jz', 'phi', 'rho'], write_dir = '.', warpx_file_prefix = 'Python_magnetostatic_eb_rz_plt' ) diff --git a/Examples/Tests/multi_j/inputs_rz b/Examples/Tests/multi_j/inputs_rz index 2310e58a1..054c91d67 100644 --- a/Examples/Tests/multi_j/inputs_rz +++ b/Examples/Tests/multi_j/inputs_rz @@ -113,5 +113,5 @@ plasma_p.do_continuous_injection = 1 diagnostics.diags_names = diag1 diag1.intervals = 50 diag1.diag_type = Full -diag1.fields_to_plot = Ex Ez By jx jz rho rho_driver rho_plasma_e rho_plasma_p +diag1.fields_to_plot = Er Ez Bt jr jz rho rho_driver rho_plasma_e rho_plasma_p diag1.species = driver plasma_e plasma_p diff --git a/Examples/Tests/nci_psatd_stability/analysis_galilean.py b/Examples/Tests/nci_psatd_stability/analysis_galilean.py index 9fe6bab72..1ec43b08e 100755 --- a/Examples/Tests/nci_psatd_stability/analysis_galilean.py +++ b/Examples/Tests/nci_psatd_stability/analysis_galilean.py @@ -51,8 +51,12 @@ ds = yt.load(filename) if 'force_periodicity' in dir(ds): ds.force_periodicity() all_data = ds.covering_grid(level=0, left_edge=ds.domain_left_edge, dims=ds.domain_dimensions) -Ex = all_data['boxlib', 'Ex'].squeeze().v -Ey = all_data['boxlib', 'Ey'].squeeze().v +if dims == 'RZ': + Ex = all_data['boxlib', 'Er'].squeeze().v + Ey = all_data['boxlib', 'Et'].squeeze().v +else: + Ex = all_data['boxlib', 'Ex'].squeeze().v + Ey = all_data['boxlib', 'Ey'].squeeze().v Ez = all_data['boxlib', 'Ez'].squeeze().v # Set reference energy values, and tolerances for numerical stability and charge conservation diff --git a/Examples/Tests/nci_psatd_stability/inputs_rz b/Examples/Tests/nci_psatd_stability/inputs_rz index 772711ddc..3f1871c00 100644 --- a/Examples/Tests/nci_psatd_stability/inputs_rz +++ b/Examples/Tests/nci_psatd_stability/inputs_rz @@ -75,4 +75,4 @@ ions.uz_th = 0.0001 diagnostics.diags_names = diag1 diag1.intervals = 100 diag1.diag_type = Full -diag1.fields_to_plot = Ex Ey Ez By jx jz rho divE +diag1.fields_to_plot = Er Et Ez Bt jr jz rho divE diff --git a/Examples/Tests/pml/analysis_pml_psatd_rz.py b/Examples/Tests/pml/analysis_pml_psatd_rz.py index b905d938b..d4f1ff42a 100755 --- a/Examples/Tests/pml/analysis_pml_psatd_rz.py +++ b/Examples/Tests/pml/analysis_pml_psatd_rz.py @@ -36,7 +36,7 @@ if 'force_periodicity' in dir(ds): ds.force_periodicity() # Check that the field is low enough ad0 = ds.covering_grid(level=0, left_edge=ds.domain_left_edge, dims=ds.domain_dimensions) -Ex_array = ad0['boxlib', 'Ex'].to_ndarray() +Ex_array = ad0['boxlib', 'Er'].to_ndarray() Ez_array = ad0['boxlib', 'Ez'].to_ndarray() max_Ex = np.abs(Ex_array).max() max_Ez = np.abs(Ez_array).max() diff --git a/Examples/Tests/pml/inputs_rz b/Examples/Tests/pml/inputs_rz index 9ca7e4894..f5e23fe03 100644 --- a/Examples/Tests/pml/inputs_rz +++ b/Examples/Tests/pml/inputs_rz @@ -45,5 +45,5 @@ electron.single_particle_weight = 1. ################################# diagnostics.diags_names = diag1 diag1.intervals = 500 -diag1.fields_to_plot = By Ex Ez jx jy jz rho +diag1.fields_to_plot = Bt Er Ez jr jt jz rho diag1.diag_type = Full diff --git a/Examples/Tests/scraping/inputs_rz b/Examples/Tests/scraping/inputs_rz index 875480fa7..0dab9ebed 100644 --- a/Examples/Tests/scraping/inputs_rz +++ b/Examples/Tests/scraping/inputs_rz @@ -46,7 +46,7 @@ diagnostics.diags_names = diag1 diag2 diag3 diag1.intervals = 1 diag1.diag_type = Full -diag1.fields_to_plot = Ex +diag1.fields_to_plot = Er diag2.intervals = 1 diag2.diag_type = Full diff --git a/Examples/Tests/silver_mueller/analysis_silver_mueller.py b/Examples/Tests/silver_mueller/analysis_silver_mueller.py index 9fa7dc9f1..bfab40aa9 100755 --- a/Examples/Tests/silver_mueller/analysis_silver_mueller.py +++ b/Examples/Tests/silver_mueller/analysis_silver_mueller.py @@ -12,6 +12,7 @@ test check that the reflected field at the boundary is negligible. """ import os +import re import sys import numpy as np @@ -24,15 +25,28 @@ filename = sys.argv[1] ds = yt.load( filename ) all_data_level_0 = ds.covering_grid(level=0,left_edge=ds.domain_left_edge, dims=ds.domain_dimensions) -Ex = all_data_level_0['boxlib', 'Ex'].v.squeeze() -Ey = all_data_level_0['boxlib', 'Ey'].v.squeeze() -Ez = all_data_level_0['boxlib', 'Ez'].v.squeeze() +warpx_used_inputs = open('./warpx_used_inputs', 'r').read() +geom_RZ = re.search('geometry.dims = RZ', warpx_used_inputs) +if geom_RZ: + Er = all_data_level_0['boxlib', 'Er'].v.squeeze() + Et = all_data_level_0['boxlib', 'Et'].v.squeeze() + Ez = all_data_level_0['boxlib', 'Ez'].v.squeeze() +else: + Ex = all_data_level_0['boxlib', 'Ex'].v.squeeze() + Ey = all_data_level_0['boxlib', 'Ey'].v.squeeze() + Ez = all_data_level_0['boxlib', 'Ez'].v.squeeze() # The peak of the initial laser pulse is on the order of 6 V/m # Check that the amplitude after reflection is less than 0.01 V/m max_reflection_amplitude = 0.01 -assert np.all( abs(Ex) < max_reflection_amplitude ) -assert np.all( abs(Ey) < max_reflection_amplitude ) -assert np.all( abs(Ez) < max_reflection_amplitude ) + +if geom_RZ: + assert np.all( abs(Er) < max_reflection_amplitude ) + assert np.all( abs(Et) < max_reflection_amplitude ) + assert np.all( abs(Ez) < max_reflection_amplitude ) +else: + assert np.all( abs(Ex) < max_reflection_amplitude ) + assert np.all( abs(Ey) < max_reflection_amplitude ) + assert np.all( abs(Ez) < max_reflection_amplitude ) test_name = os.path.split(os.getcwd())[1] checksumAPI.evaluate_checksum(test_name, filename) diff --git a/Python/pywarpx/picmi.py b/Python/pywarpx/picmi.py index 45dfaa3dd..ce82ea5c9 100644 --- a/Python/pywarpx/picmi.py +++ b/Python/pywarpx/picmi.py @@ -1746,27 +1746,39 @@ class FieldDiagnostic(picmistandard.PICMI_FieldDiagnostic, WarpXDiagnosticBase): # --- Use a set to ensure that fields don't get repeated. fields_to_plot = set() + if pywarpx.geometry.dims == 'RZ': + E_fields_list = ['Er', 'Et', 'Ez'] + B_fields_list = ['Br', 'Bt', 'Bz'] + J_fields_list = ['Jr', 'Jt', 'Jz'] + A_fields_list = ['Ar', 'At', 'Az'] + else: + E_fields_list = ['Ex', 'Ey', 'Ez'] + B_fields_list = ['Bx', 'By', 'Bz'] + J_fields_list = ['Jx', 'Jy', 'Jz'] + A_fields_list = ['Ax', 'Ay', 'Az'] if self.data_list is not None: for dataname in self.data_list: if dataname == 'E': - fields_to_plot.add('Ex') - fields_to_plot.add('Ey') - fields_to_plot.add('Ez') + for field_name in E_fields_list: + fields_to_plot.add(field_name) elif dataname == 'B': - fields_to_plot.add('Bx') - fields_to_plot.add('By') - fields_to_plot.add('Bz') + for field_name in B_fields_list: + fields_to_plot.add(field_name) elif dataname == 'J': - fields_to_plot.add('jx') - fields_to_plot.add('jy') - fields_to_plot.add('jz') + for field_name in J_fields_list: + fields_to_plot.add(field_name.lower()) elif dataname == 'A': - fields_to_plot.add('Ax') - fields_to_plot.add('Ay') - fields_to_plot.add('Az') - elif dataname in ['Ex', 'Ey', 'Ez', 'Bx', 'By', 'Bz', 'Ax', 'Ay', 'Az', 'rho', 'phi', 'F', 'proc_number', 'part_per_cell']: + for field_name in A_fields_list: + fields_to_plot.add(field_name) + elif dataname in E_fields_list: + fields_to_plot.add(dataname) + elif dataname in B_fields_list: + fields_to_plot.add(dataname) + elif dataname in A_fields_list: fields_to_plot.add(dataname) - elif dataname in ['Jx', 'Jy', 'Jz']: + elif dataname in ['rho', 'phi', 'F', 'proc_number', 'part_per_cell']: + fields_to_plot.add(dataname) + elif dataname in J_fields_list: fields_to_plot.add(dataname.lower()) elif dataname.startswith('rho_'): # Adds rho_species diagnostic @@ -2015,23 +2027,30 @@ class LabFrameFieldDiagnostic(picmistandard.PICMI_LabFrameFieldDiagnostic, # --- Use a set to ensure that fields don't get repeated. fields_to_plot = set() + if pywarpx.geometry.dims == 'RZ': + E_fields_list = ['Er', 'Et', 'Ez'] + B_fields_list = ['Br', 'Bt', 'Bz'] + J_fields_list = ['Jr', 'Jt', 'Jz'] + else: + E_fields_list = ['Ex', 'Ey', 'Ez'] + B_fields_list = ['Bx', 'By', 'Bz'] + J_fields_list = ['Jx', 'Jy', 'Jz'] if self.data_list is not None: for dataname in self.data_list: if dataname == 'E': - fields_to_plot.add('Ex') - fields_to_plot.add('Ey') - fields_to_plot.add('Ez') + for field_name in E_fields_list: + fields_to_plot.add(field_name) elif dataname == 'B': - fields_to_plot.add('Bx') - fields_to_plot.add('By') - fields_to_plot.add('Bz') + for field_name in B_fields_list: + fields_to_plot.add(field_name) elif dataname == 'J': - fields_to_plot.add('jx') - fields_to_plot.add('jy') - fields_to_plot.add('jz') - elif dataname in ['Ex', 'Ey', 'Ez', 'Bx', 'By', 'Bz', 'rho']: + for field_name in J_fields_list: + fields_to_plot.add(field_name.lower()) + elif dataname in E_fields_list: + fields_to_plot.add(dataname) + elif dataname in B_fields_list: fields_to_plot.add(dataname) - elif dataname in ['Jx', 'Jy', 'Jz']: + elif dataname in J_fields_list: fields_to_plot.add(dataname.lower()) elif dataname.startswith('rho_'): # Adds rho_species diagnostic diff --git a/Regression/Checksum/benchmarks_json/ElectrostaticSphereEB_RZ.json b/Regression/Checksum/benchmarks_json/ElectrostaticSphereEB_RZ.json index 05e6102a8..ac137cb37 100644 --- a/Regression/Checksum/benchmarks_json/ElectrostaticSphereEB_RZ.json +++ b/Regression/Checksum/benchmarks_json/ElectrostaticSphereEB_RZ.json @@ -1,6 +1,6 @@ { "lev=0": { - "Ex": 8497.669853722688, + "Er": 8497.669853722688, "phi": 2035.6618484435153 } }
\ No newline at end of file diff --git a/Regression/Checksum/benchmarks_json/ElectrostaticSphereEB_RZ_MR.json b/Regression/Checksum/benchmarks_json/ElectrostaticSphereEB_RZ_MR.json index 05854b9ad..74996f211 100644 --- a/Regression/Checksum/benchmarks_json/ElectrostaticSphereEB_RZ_MR.json +++ b/Regression/Checksum/benchmarks_json/ElectrostaticSphereEB_RZ_MR.json @@ -1,10 +1,10 @@ { "lev=0": { - "Ex": 8497.669853733625, + "Er": 8497.669853733625, "phi": 2035.6618484451055 }, "lev=1": { - "Ex": 19546.08010855407, + "Er": 19546.08010855407, "phi": 3290.7266050322164 } }
\ No newline at end of file diff --git a/Regression/Checksum/benchmarks_json/Langmuir_multi_rz.json b/Regression/Checksum/benchmarks_json/Langmuir_multi_rz.json index 0d1688291..ee9116ddc 100644 --- a/Regression/Checksum/benchmarks_json/Langmuir_multi_rz.json +++ b/Regression/Checksum/benchmarks_json/Langmuir_multi_rz.json @@ -18,10 +18,10 @@ "particle_weight": 81147583679.15044 }, "lev=0": { - "By": 11.642563224192484, - "Ex": 1290320281608.1401, + "Bt": 11.642563224192484, + "Er": 1290320281608.1401, "Ez": 1798383207925.8538, - "jx": 252864052683984.7, + "jr": 252864052683984.7, "jz": 347280901370211.1 } }
\ No newline at end of file diff --git a/Regression/Checksum/benchmarks_json/Langmuir_multi_rz_psatd.json b/Regression/Checksum/benchmarks_json/Langmuir_multi_rz_psatd.json index 628395995..691bd21cc 100644 --- a/Regression/Checksum/benchmarks_json/Langmuir_multi_rz_psatd.json +++ b/Regression/Checksum/benchmarks_json/Langmuir_multi_rz_psatd.json @@ -18,10 +18,10 @@ "particle_weight": 81147583679.15044 }, "lev=0": { - "By": 6.6384663612214645, - "Ex": 482850037231.61694, + "Bt": 6.6384663612214645, + "Er": 482850037231.61694, "Ez": 665616861726.1171, - "jx": 894824890894158.4, + "jr": 894824890894158.4, "jz": 1250754371134122.0 } } diff --git a/Regression/Checksum/benchmarks_json/Langmuir_multi_rz_psatd_current_correction.json b/Regression/Checksum/benchmarks_json/Langmuir_multi_rz_psatd_current_correction.json index ce0c2cd72..8ac5beb34 100644 --- a/Regression/Checksum/benchmarks_json/Langmuir_multi_rz_psatd_current_correction.json +++ b/Regression/Checksum/benchmarks_json/Langmuir_multi_rz_psatd_current_correction.json @@ -18,11 +18,11 @@ "particle_weight": 81147583679.15044 }, "lev=0": { - "By": 6.632261581212596, - "Ex": 478937338832.8708, + "Bt": 6.632261581212596, + "Er": 478937338832.8708, "Ez": 662607529111.851, "divE": 4.355808435163315e+17, - "jx": 893968704248372.8, + "jr": 893968704248372.8, "jz": 1251505252231279.2, "rho": 3856714.596151368 } diff --git a/Regression/Checksum/benchmarks_json/LaserAccelerationRZ.json b/Regression/Checksum/benchmarks_json/LaserAccelerationRZ.json index e543b9ada..976a3bdee 100644 --- a/Regression/Checksum/benchmarks_json/LaserAccelerationRZ.json +++ b/Regression/Checksum/benchmarks_json/LaserAccelerationRZ.json @@ -26,8 +26,8 @@ "Btheta_0_real": 1297.3299824026299, "Btheta_1_imag": 105725.25637121125, "Btheta_1_real": 141.25524413452112, - "Bx": 104965.6138283532, - "By": 1296.2727613183374, + "Br": 104965.6138283532, + "Bt": 1296.2727613183374, "Bz": 5076.743764997268, "Bz_0_real": 0.46038147543152824, "Bz_1_imag": 1.007452397747621, @@ -38,8 +38,8 @@ "Etheta_0_real": 112249661.08828562, "Etheta_1_imag": 33602739100.133934, "Etheta_1_real": 39016517445019.95, - "Ex": 273570655229.63535, - "Ey": 39016542452492.57, + "Er": 273570655229.63535, + "Et": 39016542452492.57, "Ez": 511653044133.8529, "Ez_0_real": 496845145101.94775, "Ez_1_imag": 1245709559726.1033, @@ -53,8 +53,8 @@ "Jz_0_real": 1832469154489130.8, "Jz_1_imag": 556484676782123.3, "Jz_1_real": 602703174081284.9, - "jx": 1750423139263.8418, - "jy": 2.176637920803457e+17, + "jr": 1750423139263.8418, + "jt": 2.176637920803457e+17, "jz": 1954078914516329.2, "rho": 39314213.383921936, "rho_0_real": 38889619.16177814, diff --git a/Regression/Checksum/benchmarks_json/Python_Langmuir_rz_multimode.json b/Regression/Checksum/benchmarks_json/Python_Langmuir_rz_multimode.json index 4a1fcc4dc..c926cc19a 100644 --- a/Regression/Checksum/benchmarks_json/Python_Langmuir_rz_multimode.json +++ b/Regression/Checksum/benchmarks_json/Python_Langmuir_rz_multimode.json @@ -9,10 +9,10 @@ "particle_weight": 81147583679.15047 }, "lev=0": { - "By": 2.496097613843332, - "Ex": 879037494036.5272, + "Bt": 2.496097613843332, + "Er": 879037494036.5272, "Ez": 1707659987719.488, - "jx": 210208682137002.0, + "jr": 210208682137002.0, "jz": 407196102143353.38, "part_per_cell": 1472000.0 } diff --git a/Regression/Checksum/benchmarks_json/Python_LaserAccelerationRZ.json b/Regression/Checksum/benchmarks_json/Python_LaserAccelerationRZ.json index 05707ff44..1c75b69dc 100644 --- a/Regression/Checksum/benchmarks_json/Python_LaserAccelerationRZ.json +++ b/Regression/Checksum/benchmarks_json/Python_LaserAccelerationRZ.json @@ -24,8 +24,8 @@ "Btheta_0_real": 1299.8816721733124, "Btheta_1_imag": 143318.04456658955, "Btheta_1_real": 155.37774833024366, - "Bx": 142258.01319076555, - "By": 1301.5695263567557, + "Br": 142258.01319076555, + "Bt": 1301.5695263567557, "Bz": 5993.640969075834, "Bz_0_real": 0.4737412745527051, "Bz_1_imag": 1.1409956493384725, @@ -36,8 +36,8 @@ "Etheta_0_real": 135868121.7945822, "Etheta_1_imag": 36802874200.20133, "Etheta_1_real": 47328835452079.97, - "Ex": 278531658643.55005, - "Ey": 47328876227481.125, + "Er": 278531658643.55005, + "Et": 47328876227481.125, "Ez": 514006664374.9789, "Ez_0_real": 499008075334.7451, "Ez_1_imag": 1565161989236.6174, @@ -51,8 +51,8 @@ "Jz_0_real": 1832470462501306.8, "Jz_1_imag": 621924149855721.0, "Jz_1_real": 660909646259030.1, - "jx": 2109207014985.481, - "jy": 2.1766370884715638e+17, + "jr": 2109207014985.481, + "jt": 2.1766370884715638e+17, "jz": 1954236712029783.0, "rho": 39480730.556067616, "rho_0_real": 39055926.50167212, diff --git a/Regression/Checksum/benchmarks_json/Python_magnetostatic_eb_rz.json b/Regression/Checksum/benchmarks_json/Python_magnetostatic_eb_rz.json index f60b93861..6cdbea79f 100644 --- a/Regression/Checksum/benchmarks_json/Python_magnetostatic_eb_rz.json +++ b/Regression/Checksum/benchmarks_json/Python_magnetostatic_eb_rz.json @@ -1,8 +1,8 @@ { "lev=0": { "Az": 1.730556994029862, - "By": 15.521137246668234, - "Ex": 4333723928.147758, + "Bt": 15.521137246668234, + "Er": 4333723928.147758, "jz": 207219729.96381122, "phi": 479458089.21137255, "rho": 0.6946928324123767 diff --git a/Regression/Checksum/benchmarks_json/collisionRZ.json b/Regression/Checksum/benchmarks_json/collisionRZ.json index d24938471..d0dee71a4 100644 --- a/Regression/Checksum/benchmarks_json/collisionRZ.json +++ b/Regression/Checksum/benchmarks_json/collisionRZ.json @@ -1,13 +1,13 @@ { "lev=0": { - "Bx": 0.0, - "By": 0.0, + "Br": 0.0, + "Bt": 0.0, "Bz": 0.0, - "Ex": 0.0, - "Ey": 0.0, + "Er": 0.0, + "Et": 0.0, "Ez": 0.0, - "jx": 0.0, - "jy": 0.0, + "jr": 0.0, + "jt": 0.0, "jz": 0.0 } }
\ No newline at end of file diff --git a/Regression/Checksum/benchmarks_json/galilean_rz_psatd.json b/Regression/Checksum/benchmarks_json/galilean_rz_psatd.json index 1424b2999..4540ae060 100644 --- a/Regression/Checksum/benchmarks_json/galilean_rz_psatd.json +++ b/Regression/Checksum/benchmarks_json/galilean_rz_psatd.json @@ -18,12 +18,12 @@ "particle_weight": 1.0261080645329302e+20 }, "lev=0": { - "By": 0.001562883692638829, - "Ex": 472898.8472557917, - "Ey": 130009.60500031436, + "Bt": 0.001562883692638829, + "Er": 472898.8472557917, + "Et": 130009.60500031436, "Ez": 34040.513530879995, "divE": 1111671.6764975644, - "jx": 155.77453032437285, + "jr": 155.77453032437285, "jz": 50412.34038191459, "rho": 9.849864169336992e-06 } diff --git a/Regression/Checksum/benchmarks_json/galilean_rz_psatd_current_correction.json b/Regression/Checksum/benchmarks_json/galilean_rz_psatd_current_correction.json index 3dd8810fa..1e853c0b1 100644 --- a/Regression/Checksum/benchmarks_json/galilean_rz_psatd_current_correction.json +++ b/Regression/Checksum/benchmarks_json/galilean_rz_psatd_current_correction.json @@ -18,12 +18,12 @@ "particle_weight": 1.0261080645329302e+20 }, "lev=0": { - "By": 0.0017182252289440264, - "Ex": 518347.23478549306, - "Ey": 137106.07262027927, + "Bt": 0.0017182252289440264, + "Er": 518347.23478549306, + "Et": 137106.07262027927, "Ez": 35918.446653926556, "divE": 1227626.4690642208, - "jx": 159.1245447865701, + "jr": 159.1245447865701, "jz": 49252.95943703725, "rho": 1.0869618748586227e-05 } diff --git a/Regression/Checksum/benchmarks_json/galilean_rz_psatd_current_correction_psb.json b/Regression/Checksum/benchmarks_json/galilean_rz_psatd_current_correction_psb.json index 73cd09635..f16fc8dad 100644 --- a/Regression/Checksum/benchmarks_json/galilean_rz_psatd_current_correction_psb.json +++ b/Regression/Checksum/benchmarks_json/galilean_rz_psatd_current_correction_psb.json @@ -18,12 +18,12 @@ "particle_weight": 1.0261080645329302e+20 }, "lev=0": { - "By": 0.0017275299193154866, - "Ex": 520734.8193541992, - "Ey": 130008.65587120061, + "Bt": 0.0017275299193154866, + "Er": 520734.8193541992, + "Et": 130008.65587120061, "Ez": 36540.80980315481, "divE": 1228895.3465882093, - "jx": 103.9586429924576, + "jr": 103.9586429924576, "jz": 3245.258754763504, "rho": 1.088087020096811e-05 } diff --git a/Regression/Checksum/benchmarks_json/multi_J_rz_psatd.json b/Regression/Checksum/benchmarks_json/multi_J_rz_psatd.json index 2a9620903..eb145b631 100644 --- a/Regression/Checksum/benchmarks_json/multi_J_rz_psatd.json +++ b/Regression/Checksum/benchmarks_json/multi_J_rz_psatd.json @@ -9,10 +9,10 @@ "particle_weight": 6241484108.424456 }, "lev=0": { - "By": 24045.34926330333, - "Ex": 4530500183998.0205, + "Bt": 24045.34926330333, + "Er": 4530500183998.0205, "Ez": 4297045713383.818, - "jx": 361149490291532.8, + "jr": 361149490291532.8, "jz": 1805428826325930.2, "rho": 4895064.444869195, "rho_driver": 6288266.101815153, diff --git a/Regression/Checksum/benchmarks_json/pml_psatd_rz.json b/Regression/Checksum/benchmarks_json/pml_psatd_rz.json index ff7c8f75e..6772ed0ba 100644 --- a/Regression/Checksum/benchmarks_json/pml_psatd_rz.json +++ b/Regression/Checksum/benchmarks_json/pml_psatd_rz.json @@ -1,10 +1,10 @@ { "lev=0": { - "By": 3.268846294905577e-06, - "Ex": 1317.2337418101645, + "Bt": 3.268846294905577e-06, + "Er": 1317.2337418101645, "Ez": 1156.1377910176307, - "jx": 0.0, - "jy": 0.0, + "jr": 0.0, + "jt": 0.0, "jz": 0.0, "rho": 0.0 } diff --git a/Regression/Checksum/benchmarks_json/scraping.json b/Regression/Checksum/benchmarks_json/scraping.json index ffffaa632..8f85b956b 100644 --- a/Regression/Checksum/benchmarks_json/scraping.json +++ b/Regression/Checksum/benchmarks_json/scraping.json @@ -1,8 +1,8 @@ { "lev=0": { - "Ex": 0.0 + "Er": 0.0 }, "lev=1": { - "Ex": 0.0 + "Er": 0.0 } } diff --git a/Regression/Checksum/benchmarks_json/silver_mueller_rz_z.json b/Regression/Checksum/benchmarks_json/silver_mueller_rz_z.json index 10105cc14..7515ac7e3 100644 --- a/Regression/Checksum/benchmarks_json/silver_mueller_rz_z.json +++ b/Regression/Checksum/benchmarks_json/silver_mueller_rz_z.json @@ -1,13 +1,13 @@ { "lev=0": { - "Bx": 1.477460729891479e-08, - "By": 1.510559316787155e-08, + "Br": 1.477460729891479e-08, + "Bt": 1.510559316787155e-08, "Bz": 5.811173045189853e-09, - "Ex": 4.115800746189268, - "Ey": 3.996703230466946, + "Er": 4.115800746189268, + "Et": 3.996703230466946, "Ez": 1.535198100311953, - "jx": 0.0, - "jy": 3.872879366838377e-62, + "jr": 0.0, + "jt": 3.872879366838377e-62, "jz": 0.0 } }
\ No newline at end of file diff --git a/Regression/WarpX-tests.ini b/Regression/WarpX-tests.ini index e8ce81c4a..d71c0193a 100644 --- a/Regression/WarpX-tests.ini +++ b/Regression/WarpX-tests.ini @@ -976,7 +976,7 @@ aux1File = Regression/PostProcessingUtils/post_processing_utils.py [Langmuir_multi_rz_psatd_current_correction] buildDir = . inputFile = Examples/Tests/langmuir/inputs_2d_multi_rz_rt -runtime_params = algo.maxwell_solver=psatd diag1.electrons.variables=w ux uy uz diag1.ions.variables=w ux uy uz diag1.dump_rz_modes=0 algo.current_deposition=direct warpx.do_dive_cleaning=0 amr.max_grid_size=128 psatd.periodic_single_box_fft=1 psatd.current_correction=1 diag1.fields_to_plot=jx jz Ex Ez By rho divE electrons.random_theta=0 ions.random_theta=0 +runtime_params = algo.maxwell_solver=psatd diag1.electrons.variables=w ux uy uz diag1.ions.variables=w ux uy uz diag1.dump_rz_modes=0 algo.current_deposition=direct warpx.do_dive_cleaning=0 amr.max_grid_size=128 psatd.periodic_single_box_fft=1 psatd.current_correction=1 diag1.fields_to_plot=jr jz Er Ez Bt rho divE electrons.random_theta=0 ions.random_theta=0 dim = 2 addToCompileString = USE_RZ=TRUE USE_PSATD=TRUE BLAS_LIB=-lblas LAPACK_LIB=-llapack cmakeSetupOpts = -DWarpX_DIMS=RZ -DWarpX_PSATD=ON diff --git a/Source/Diagnostics/Diagnostics.cpp b/Source/Diagnostics/Diagnostics.cpp index 91505b520..277510f03 100644 --- a/Source/Diagnostics/Diagnostics.cpp +++ b/Source/Diagnostics/Diagnostics.cpp @@ -64,7 +64,7 @@ Diagnostics::BaseReadParameters () // Query list of grid fields to write to output bool varnames_specified = pp_diag_name.queryarr("fields_to_plot", m_varnames_fields); if (!varnames_specified){ - if( dims == "RZ" and m_format == "openpmd" ) { + if( dims == "RZ" ) { m_varnames_fields = {"Er", "Et", "Ez", "Br", "Bt", "Bz", "jr", "jt", "jz"}; } else { diff --git a/Source/Diagnostics/FullDiagnostics.cpp b/Source/Diagnostics/FullDiagnostics.cpp index a4ed6018e..99e28a7f8 100644 --- a/Source/Diagnostics/FullDiagnostics.cpp +++ b/Source/Diagnostics/FullDiagnostics.cpp @@ -588,28 +588,12 @@ FullDiagnostics::InitializeFieldFunctors (int lev) m_all_field_functors[lev].resize(ntot); // Fill vector of functors for all components except individual cylindrical modes. for (int comp=0; comp<nvar; comp++){ - if ( m_varnames[comp] == "Ex" ){ - m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Efield_aux(lev, 0), lev, m_crse_ratio); - } else if ( m_varnames[comp] == "Ey" ){ - m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Efield_aux(lev, 1), lev, m_crse_ratio); - } else if ( m_varnames[comp] == "Ez" ){ + if ( m_varnames[comp] == "Ez" ){ m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Efield_aux(lev, 2), lev, m_crse_ratio); - } else if ( m_varnames[comp] == "Bx" ){ - m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Bfield_aux(lev, 0), lev, m_crse_ratio); - } else if ( m_varnames[comp] == "By" ){ - m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Bfield_aux(lev, 1), lev, m_crse_ratio); } else if ( m_varnames[comp] == "Bz" ){ m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Bfield_aux(lev, 2), lev, m_crse_ratio); - } else if ( m_varnames[comp] == "jx" ){ - m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_current_fp(lev, 0), lev, m_crse_ratio); - } else if ( m_varnames[comp] == "jy" ){ - m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_current_fp(lev, 1), lev, m_crse_ratio); } else if ( m_varnames[comp] == "jz" ){ m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_current_fp(lev, 2), lev, m_crse_ratio); - } else if ( m_varnames[comp] == "Ax" ){ - m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_vector_potential_fp(lev, 0), lev, m_crse_ratio); - } else if ( m_varnames[comp] == "Ay" ){ - m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_vector_potential_fp(lev, 1), lev, m_crse_ratio); } else if ( m_varnames[comp] == "Az" ){ m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_vector_potential_fp(lev, 2), lev, m_crse_ratio); } else if ( m_varnames[comp] == "rho" ){ @@ -635,7 +619,49 @@ FullDiagnostics::InitializeFieldFunctors (int lev) m_all_field_functors[lev][comp] = std::make_unique<DivEFunctor>(warpx.get_array_Efield_aux(lev), lev, m_crse_ratio); } else { - amrex::Abort(Utils::TextMsg::Err(m_varnames[comp] + " is not a known field output type")); + +#ifdef WARPX_DIM_RZ + if ( m_varnames[comp] == "Er" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Efield_aux(lev, 0), lev, m_crse_ratio); + } else if ( m_varnames[comp] == "Et" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Efield_aux(lev, 1), lev, m_crse_ratio); + } else if ( m_varnames[comp] == "Br" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Bfield_aux(lev, 0), lev, m_crse_ratio); + } else if ( m_varnames[comp] == "Bt" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Bfield_aux(lev, 1), lev, m_crse_ratio); + } else if ( m_varnames[comp] == "jr" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_current_fp(lev, 0), lev, m_crse_ratio); + } else if ( m_varnames[comp] == "jt" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_current_fp(lev, 1), lev, m_crse_ratio); + } else if ( m_varnames[comp] == "Ar" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_vector_potential_fp(lev, 0), lev, m_crse_ratio); + } else if ( m_varnames[comp] == "At" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_vector_potential_fp(lev, 1), lev, m_crse_ratio); + } else { + amrex::Abort(Utils::TextMsg::Err(m_varnames[comp] + " is not a known field output type for RZ geometry")); + } +#else + // Valid transverse fields in Cartesian coordinates + if ( m_varnames[comp] == "Ex" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Efield_aux(lev, 0), lev, m_crse_ratio); + } else if ( m_varnames[comp] == "Ey" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Efield_aux(lev, 1), lev, m_crse_ratio); + } else if ( m_varnames[comp] == "Bx" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Bfield_aux(lev, 0), lev, m_crse_ratio); + } else if ( m_varnames[comp] == "By" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_Bfield_aux(lev, 1), lev, m_crse_ratio); + } else if ( m_varnames[comp] == "jx" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_current_fp(lev, 0), lev, m_crse_ratio); + } else if ( m_varnames[comp] == "jy" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_current_fp(lev, 1), lev, m_crse_ratio); + } else if ( m_varnames[comp] == "Ax" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_vector_potential_fp(lev, 0), lev, m_crse_ratio); + } else if ( m_varnames[comp] == "Ay" ){ + m_all_field_functors[lev][comp] = std::make_unique<CellCenterFunctor>(warpx.get_pointer_vector_potential_fp(lev, 1), lev, m_crse_ratio); + } else { + amrex::Abort(Utils::TextMsg::Err(m_varnames[comp] + " is not a known field output type for this geometry")); + } +#endif } } // Add functors for average particle data for each species |