diff options
Diffstat (limited to 'Examples/Tests/scraping/analysis_rz.py')
-rwxr-xr-x | Examples/Tests/scraping/analysis_rz.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/Examples/Tests/scraping/analysis_rz.py b/Examples/Tests/scraping/analysis_rz.py index 6c493fb0f..4af31e48a 100755 --- a/Examples/Tests/scraping/analysis_rz.py +++ b/Examples/Tests/scraping/analysis_rz.py @@ -13,6 +13,8 @@ # Upon reaching the surface, particles should be removed. # At the end of the simulation, i.e., at time step 37, # there should be 512 particles left. +# In addition, the test checks the boundary scraping diagnostic +# by making sure that all removed particles are properly recorded. # Possible errors: 0 # tolerance: 0 @@ -21,6 +23,8 @@ import os import sys +import numpy as np +from openpmd_viewer import OpenPMDTimeSeries import yt sys.path.insert(1, '../../../../warpx/Regression/Checksum/') @@ -38,5 +42,24 @@ print('error = ', error) print('tolerance = ', tolerance) assert(error==tolerance) +# Check that all the removed particles are properly recorded +# by making sure that, at each iteration, the sum of the number of +# remaining particles and scraped particles is equal to the +# original number of particles +ts_full = OpenPMDTimeSeries('./diags/diag2/') +ts_scraping = OpenPMDTimeSeries('./diags/diag3/') + +def n_remaining_particles( iteration ): + w, = ts_full.get_particle(['w'], iteration=iteration) + return len(w) +def n_scraped_particles( iteration ): + timestamp = ts_scraping.get_particle( ['timestamp'] ) + return (timestamp <= iteration).sum() +n_remaining = np.array([ n_remaining_particles(iteration) for iteration in ts_full.iterations ]) +n_scraped = np.array([ n_scraped_particles(iteration) for iteration in ts_full.iterations ]) +n_total = n_remaining[0] +assert np.all( n_scraped+n_remaining == n_total) + +# Checksum test test_name = os.path.split(os.getcwd())[1] checksumAPI.evaluate_checksum(test_name, fn, do_particles=False) |