.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "gallery/benchmarks/analytical_grid_scaling.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_gallery_benchmarks_analytical_grid_scaling.py: Analytical wavenumber-grid cost =============================== Time a fixed binary mixture on increasingly fine manual grids. Grid spacing resolves at least 12 samples per longest-distance oscillation; decreasing the real-space resolution increases the high-wavenumber cutoff. The median of three runs is a timing measure, not an accuracy assessment. Report machine, software versions and thread settings when comparing measurements. .. GENERATED FROM PYTHON SOURCE LINES 11-45 .. image-sg:: /gallery/benchmarks/images/sphx_glr_analytical_grid_scaling_001.png :alt: Grid resolution and evaluation cost :srcset: /gallery/benchmarks/images/sphx_glr_analytical_grid_scaling_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none 451 wavenumbers: median 0.0008 s 901 wavenumbers: median 0.0016 s 1351 wavenumbers: median 0.0023 s 1801 wavenumbers: median 0.0031 s | .. code-block:: Python from time import perf_counter import matplotlib.pyplot as plt import numpy as np from PackLab import analytical, ureg radii = np.array([0.1, 0.2]) * ureg.micrometer domain = analytical.PercusYevickDomain( size=100 * ureg.micrometer, radii=radii, volume_fraction=0.2, number_fractions=[0.5, 0.5] ) distances = np.linspace(0, 1.5, 150) * ureg.micrometer counts, timings = [], [] for divisor in (5, 10, 15, 20): grid = analytical.make_wavenumber_grid(radii.min() / divisor, distances.max(), 12) solver = analytical.PercusYevickSolver( densities=domain.particle_densities_per_radius, radii=radii, wavenumber=grid ) runs = [] for _ in range(3): start = perf_counter() solver.compute(distances) runs.append(perf_counter() - start) counts.append(len(grid)) timings.append(np.median(runs)) print(f"{len(grid)} wavenumbers: median {timings[-1]:.4f} s") figure, axis = plt.subplots() axis.plot(counts, timings, "o-") axis.set( xlabel="wavenumber points", ylabel="median wall time (s)", title="Grid resolution and evaluation cost", ) axis.grid(alpha=0.2) figure.tight_layout() .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.081 seconds) .. _sphx_glr_download_gallery_benchmarks_analytical_grid_scaling.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: analytical_grid_scaling.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: analytical_grid_scaling.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: analytical_grid_scaling.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_