PHAREHUB / PHARE

💫 Parallel Hybrid Particle In Cell code with Adaptive mesh REfinement
https://phare.readthedocs.io
GNU General Public License v3.0
71 stars 24 forks source link

introduce charge, mass and particle densities #921

Open rochSmets opened 3 weeks ago

rochSmets commented 3 weeks ago

The charge and mass of each ion population is now treated correctly.

Summary by CodeRabbit

Release Notes

coderabbitai[bot] commented 3 weeks ago
📝 Walkthrough ## Walkthrough The changes in this pull request primarily introduce a new fluid quantity, `"charge_density"`, across various modules, enhancing the capabilities of the diagnostics framework. Multiple files have been updated to reflect this new quantity, with modifications to method signatures, variable names, and logic to accommodate the shift from general density to charge density. Additionally, several tests have been adjusted to validate the new diagnostic focus, ensuring that the functionality remains intact while improving clarity and specificity in data handling. ## Changes | File Path | Change Summary | |-----------------------------------------------------|-------------------------------------------------------------------------------| | `pyphare/pyphare/pharein/diagnostics.py` | Added `"charge_density"` to `fluid_quantities` in `FluidDiagnostics_`. | | `pyphare/pyphare/pharesee/hierarchy/__init__.py` | Updated `hierarchy_from` method to include an optional `func` parameter. | | `pyphare/pyphare/pharesee/hierarchy/fromfunc.py` | Introduced functions for 1D and 2D hierarchies and a dispatcher function. | | `pyphare/pyphare/pharesee/hierarchy/hierarchy.py` | Enhanced plotting methods in `PatchHierarchy`, including size and grid updates. | | `pyphare/pyphare/pharesee/hierarchy/hierarchy_utils.py` | Added `"charge_density": "rho"` to `field_qties`. Modified compatibility checks and merging logic. | | `pyphare/pyphare/pharesee/plotting.py` | Updated file path for density data from `"ions_density.h5"` to `"ions_charge_density.h5"`. | | `pyphare/pyphare/pharesee/run/run.py` | Changed `quantities_per_file` key from `"ions_density"` to `"ions_charge_density"`. | | `pyphare_tests/test_pharesee/test_geometry_2d.py` | Adjusted plotting parameters in tests. | | `pyphare_tests/test_pharesee/test_hierarchy.py` | Updated `FluidDiagnostics` instantiation to use `"charge_density"`. | | `src/amr/level_initializer/hybrid_level_initializer.hpp` | Replaced density computation with charge density in `initialize` method. | | `src/amr/messengers/hybrid_hybrid_messenger_strategy.hpp` | Renamed density variables to charge density in methods. | | `src/amr/physical_models/hybrid_model.hpp` | Updated ion density name to charge density in `fillMessengerInfo`. | | `src/amr/tagging/default_hybrid_tagger_strategy.hpp` | Commented out old density retrieval. | | `src/core/data/electrons/electrons.hpp` | Replaced density references with charge density in multiple classes. | | `src/core/data/ions/ion_population/ion_population.hpp` | Introduced separate variables for particle density and charge density. | | `src/core/data/ions/ions.hpp` | Updated methods to handle charge density instead of density. | | `src/core/numerics/interpolator/interpolator.hpp` | Updated interpolation method signatures to include charge density. | | `src/core/numerics/ion_updater/ion_updater.hpp` | Changed density computation to charge density in update methods. | | `src/core/numerics/moments/moments.hpp` | Updated reset and deposit functions to manage charge densities. | | `src/diagnostic/detail/types/fluid.hpp` | Incorporated charge density in various diagnostic methods. | | `src/phare/phare_init.py` | Updated diagnostic quantity in initialization loop. | | `src/phare/phare_init_small.py` | Changed diagnostic quantity from density to charge density. | | `src/python3/patch_level.hpp` | Updated density retrieval methods to use charge density. | | `tests/core/data/electrons/test_electrons.cpp` | Renamed density-related variables for clarity. | | `tests/core/data/ion_population/test_ion_population_fixtures.hpp` | Updated rho initialization to particle density. | | `tests/core/data/ions/test_ions.cpp` | Updated tests to check charge density instead of density. | | `tests/core/numerics/interpolator/test_main.cpp` | Added new grid variable for charge density in tests. | | `tests/core/numerics/ion_updater/test_updater.cpp` | Renamed density variables and updated methods to handle charge densities. | | `tests/diagnostic/__init__.py` | Updated diagnostic loops to include charge density. | | `tests/diagnostic/test_diagnostics.hpp` | Updated validation checks to use charge density. | | `tests/diagnostic/test_diagnostics.ipp` | Updated diagnostic dictionary entry to charge density. | | `tests/functional/alfven_wave/alfven_wave1d.py` | Updated diagnostic quantity from density to charge density. | | `tests/functional/dispersion/dispersion.py` | Renamed diagnostic quantity to charge density. | | `tests/functional/harris/harris_2d_lb.py` | Updated diagnostic quantity from density to charge density. | | `tests/functional/shock/shock.py` | Changed diagnostic quantity from density to charge density. | | `tests/functional/td/td1d.py` | Updated diagnostic quantity from density to charge density. | | `tests/functional/tdtagged/td1dtagged.py` | Changed diagnostic quantity from density to charge density. | | `tests/functional/translation/translat1d.py` | Updated diagnostic quantity from density to charge density. | | `tests/simulator/initialize/CMakeLists.txt` | Added command to execute a new Python test script for density initialization. | | `tests/simulator/initialize/test_density_init.py` | Implemented testing framework for ion mass and charge densities. | | `tests/simulator/refinement/test_2d_10_core.py` | Updated diagnostic quantity and visualization parameters. | | `tests/simulator/refinement/test_2d_2_core.py` | Renamed diagnostic quantity and updated visualization parameters. | | `tests/simulator/test_advance.py` | Updated diagnostic quantities and filenames for charge density. | | `tests/simulator/test_initialization.py` | Renamed diagnostic quantity in initialization methods. | | `tests/simulator/test_run.py` | Updated diagnostic quantity in FluidDiagnostics instantiation. | ## Suggested reviewers - nicolasaunai

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
🪧 Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit , please review it.` - `Generate unit testing code for this file.` - `Open a follow-up GitHub issue for this discussion.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit testing code for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.` - `@coderabbitai read src/utils.ts and generate unit testing code.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` - `@coderabbitai help me debug CodeRabbit configuration file.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (Invoked using PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai full review` to do a full review from scratch and review all the files again. - `@coderabbitai summary` to regenerate the summary of the PR. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository. - `@coderabbitai help` to get help. ### Other keywords and placeholders - Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. - Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description. - Add `@coderabbitai` anywhere in the PR title to generate the title automatically. ### Documentation and Community - Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit. - Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.
nicolasaunai commented 2 weeks ago

On build fails. I think what should be done is not testing function VS data on a point-wise basis for such noisy quantities but rather computing the standard deviation between function and data over the whole dataset and put a (empirical) threshold on that. This is what we do for density initialization tests and it's quite less sensitive to noise.