{"id":19529272,"url":"https://github.com/isl-org/deeplagrangianfluids","last_synced_at":"2026-03-13T20:02:55.504Z","repository":{"id":49780677,"uuid":"258984301","full_name":"isl-org/DeepLagrangianFluids","owner":"isl-org","description":"Code repository for \"Lagrangian Fluid Simulation with Continuous Convolutions\", ICLR 2020.","archived":false,"fork":false,"pushed_at":"2024-08-13T09:08:14.000Z","size":19116,"stargazers_count":222,"open_issues_count":6,"forks_count":44,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-05-20T13:08:38.683Z","etag":null,"topics":["cnn","convnet","convolutional-neural-networks","deeplearning","fluids","simulation"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/isl-org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-CDLA-Permissive-1.0","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-26T08:57:20.000Z","updated_at":"2025-05-16T23:39:11.000Z","dependencies_parsed_at":"2024-10-26T04:53:16.119Z","dependency_job_id":"9b3ed204-11d4-4f8e-a911-d9f63617d10c","html_url":"https://github.com/isl-org/DeepLagrangianFluids","commit_stats":{"total_commits":35,"total_committers":1,"mean_commits":35.0,"dds":0.0,"last_synced_commit":"d651c6fdf2aca3fac9abe3693b20981b191b4769"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/isl-org/DeepLagrangianFluids","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isl-org%2FDeepLagrangianFluids","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isl-org%2FDeepLagrangianFluids/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isl-org%2FDeepLagrangianFluids/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isl-org%2FDeepLagrangianFluids/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/isl-org","download_url":"https://codeload.github.com/isl-org/DeepLagrangianFluids/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isl-org%2FDeepLagrangianFluids/sbom","scorecard":{"id":495650,"data":{"date":"2025-08-14T22:30:13Z","repo":{"name":"github.com/isl-org/DeepLagrangianFluids","commit":"6e15d08d54032e08e5abcab0b04b6a17c79706fe"},"scorecard":{"version":"v4.13.1","commit":"49c0eed3a423f00c872b5c3c9f1bbca9e8aae799"},"score":5.2,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":6,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'force pushes' disabled on branch 'master'","Info: 'allow deletion' disabled on branch 'master'","Warn: no status checks found to merge onto branch 'master'","Warn: number of required reviewers is only 1 on branch 'master'","Info: settings apply to administrators on branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":0,"reason":"0 out of 2 merged PRs checked by a CI test -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#ci-tests"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#cii-best-practices"}},{"name":"Code-Review","score":0,"reason":"found 26 unreviewed changesets out of 28 -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#code-review"}},{"name":"Contributors","score":0,"reason":"0 different organizations found -- score normalized to 0","details":["Warn: no contributors have an org or company"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#contributors"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":0,"reason":"no update tool detected","details":["Warn: tool 'RenovateBot' is not used: Follow the instructions from https://docs.renovatebot.com/configuration-options/. (Low effort)","Warn: tool 'Dependabot' is not used: Follow the instructions from https://docs.github.com/code-security/dependabot/dependabot-version-updates/about-dependabot-version-updates. (Low effort)","Warn: tool 'PyUp' is not used: Follow the instructions from https://docs.pyup.io/docs. (Low effort)","Warn: tool 'Sonatype Lift' is not used: Follow the instructions from https://help.sonatype.com/lift/getting-started. (Low effort)"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#dependency-update-tool"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no OSSFuzz integration found: Follow the steps in https://github.com/google/oss-fuzz to integrate fuzzing for your project.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no OneFuzz integration found: Follow the steps in https://github.com/microsoft/onefuzz to start fuzzing for your project.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no GoBuiltInFuzzer integration found: Follow the steps in https://go.dev/doc/fuzz/ to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no PythonAtherisFuzzer integration found: Follow the steps in https://github.com/google/atheris to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no CLibFuzzer integration found: Follow the steps in https://llvm.org/docs/LibFuzzer.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no CppLibFuzzer integration found: Follow the steps in https://llvm.org/docs/LibFuzzer.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no SwiftLibFuzzer integration found: Follow the steps in https://google.github.io/oss-fuzz/getting-started/new-project-guide/swift-lang/ to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no RustCargoFuzzer integration found: Follow the steps in https://rust-fuzz.github.io/book/cargo-fuzz.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no JavaJazzerFuzzer integration found: Follow the steps in https://github.com/CodeIntelligenceTesting/jazzer to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no ClusterFuzzLite integration found: Follow the steps in https://github.com/google/clusterfuzzlite to integrate fuzzing as part of CI.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no HaskellPropertyBasedTesting integration found: Use one of the following frameworks to fuzz your project:\nQuickCheck: https://hackage.haskell.org/package/QuickCheck\nhedgehog: https://hedgehog.qa/\nvalidity: https://github.com/NorfairKing/validity\nsmallcheck: https://hackage.haskell.org/package/smallcheck\nhspec: https://hspec.github.io/\ntasty: https://hackage.haskell.org/package/tasty (High effort)","Warn: no TypeScriptPropertyBasedTesting integration found: Use fast-check: https://github.com/dubzzz/fast-check (High effort)","Warn: no JavaScriptPropertyBasedTesting integration found: Use fast-check: https://github.com/dubzzz/fast-check (High effort)"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: License file found in expected location: LICENSE-CDLA-Permissive-1.0:1","Warn: Any licence detected not an FSF or OSI recognized license: LICENSE-CDLA-Permissive-1.0:1"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#license"}},{"name":"Maintained","score":0,"reason":"0 commit(s) out of 30 and 0 issue activity out of 30 found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"no published package detected","details":["Warn: no GitHub/GitLab publishing workflow detected"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":8,"reason":"dependency not pinned by hash detected -- score normalized to 8","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/scorecard.yml:71: update your workflow using https://app.stepsecurity.io/secureworkflow/isl-org/DeepLagrangianFluids/scorecard.yml/master?enable=pin","Info:   2 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 are checked with a SAST tool","Warn: CodeQL tool not detected"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#sast"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":["Warn: no GitHub releases found"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#signed-releases"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:18","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":10,"reason":"no vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T20:22:30.443Z","repository_id":49780677,"created_at":"2025-08-19T20:22:30.443Z","updated_at":"2025-08-19T20:22:30.443Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30473982,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T17:15:31.527Z","status":"ssl_error","status_checked_at":"2026-03-13T17:15:22.394Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cnn","convnet","convolutional-neural-networks","deeplearning","fluids","simulation"],"created_at":"2024-11-11T01:23:14.064Z","updated_at":"2026-03-13T20:02:55.478Z","avatar_url":"https://github.com/isl-org.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lagrangian Fluid Simulation with Continuous Convolutions\n\n![PyTorch badge](https://img.shields.io/badge/PyTorch-supported-brightgreen?style=flat\u0026logo=pytorch)\n![TensorFlow badge](https://img.shields.io/badge/TensorFlow-supported-brightgreen?style=flat\u0026logo=tensorflow)\n\nThis repository contains code for our ICLR 2020 paper. \nWe show how to train particle-based fluid simulation networks as CNNs using \ncontinuous convolutions. The code allows you to generate data, train your own \nmodel or just run a pretrained model.\n\n\u003cp align=\"center\"\u003e \u003cimg src=\"images/canyon.gif\" alt=\"canyon video\"\u003e \u003c/p\u003e\n\nPlease cite our paper [(pdf)](https://openreview.net/pdf?id=B1lDoJSYDH) if you find this code useful:\n```\n@inproceedings{Ummenhofer2020Lagrangian,\n        title     = {Lagrangian Fluid Simulation with Continuous Convolutions},\n        author    = {Benjamin Ummenhofer and Lukas Prantl and Nils Thuerey and Vladlen Koltun},\n        booktitle = {International Conference on Learning Representations},\n        year      = {2020},\n}\n```\n\nTo stay informed about updates we recommend to watch this repository.\n\n## Dependencies\n\n- Tensorflow 2.3 or PyTorch 1.6\n- Open3D 0.11 or later with ML module (https://github.com/intel-isl/Open3D/)\n- SPlisHSPlasH 2.4.0 (for generating training data and fluid particle sampling, https://github.com/InteractiveComputerGraphics/SPlisHSPlasH)\n- Tensorpack DataFlow (for reading data, ```pip install --upgrade git+https://github.com/tensorpack/dataflow.git```)\n- python-prctl (needed by Tensorpack DataFlow; depends on libcap-dev, install with ```apt install libcap-dev``` )\n- msgpack (```pip install msgpack``` )\n- msgpack-numpy (```pip install msgpack-numpy```)\n- python-zstandard (```pip install zstandard``` https://github.com/indygreg/python-zstandard)\n- partio (https://github.com/wdas/partio)\n- SciPy\n- OpenVDB with python binding (optional for creating surface meshes, https://github.com/AcademySoftwareFoundation/openvdb)\n- plyfile (optional for creating surface meshes, ```pip install plyfile```)\n\nThe versions match the configuration that we have tested on a system with Ubuntu 18.04.\nSPlisHSPlasH 2.4.0 is required for generating training data (ensure that it is compiled in *Release* mode).\nWe recommend to use the latest versions for all other packages.\n\n\n### Installing Open3D 0.11 and later with pip\nThe ML module is included in Open3D 0.11 and later and can simply be installed with\n```bash\npip install open3d\n```\nMake sure that the version of your ML framework matches the version for which the ML ops in Open3D have been built.\nFor Open3D 0.11 this is CUDA 10.1, TensorFlow 2.3 and PyTorch 1.6.\nIf you cannot match this configuration it is recommended to build Open3D from source.\n\n\n### Building Open3D with ML module from source.\nAt the moment Open3D needs to be build from source to make the code in this \nrepo work. To build Open3D with the ML ops for Tensorflow and PyTorch do the \nfollowing\n```bash\ngit clone --recursive https://github.com/intel-isl/Open3D.git\n# check the file Open3D/util/scripts/install-deps-ubuntu.sh\n# for dependencies and install them. For more instructions see the Open3D documentation\n\nmkdir Open3D/build\ncd Open3D/build\n\n# This builds the ml ops for both TensorFlow and PyTorch.\n# If you don't need both frameworks you can disable the one you don't need with OFF.\ncmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_TENSORFLOW_OPS=ON -DBUILD_PYTORCH_OPS=ON -DBUILD_CUDA_MODULE=ON -DGLIBCXX_USE_CXX11_ABI=OFF\nmake install-pip-package\n```\n\n## Running the pretrained model\n\nThe pretrained network weights are in ```scripts/pretrained_model_weights.h5``` for TensorFlow and in ```scripts/pretrained_model_weights.pt``` for PyTorch.\nThe following code runs the network on the example scene\n```bash\ncd scripts\n# with TensorFlow\n./run_network.py --weights pretrained_model_weights.h5 \\\n                 --scene example_scene.json \\\n                 --output example_out \\\n                 --write-ply \\\n                 train_network_tf.py\n# or with PyTorch\n./run_network.py --weights pretrained_model_weights.pt \\\n                 --scene example_scene.json \\\n                 --output example_out \\\n                 --write-ply \\\n                 train_network_torch.py\n```\nThe script writes point clouds with the particle positions as .ply files, which can be visualized with Open3D.\nNote that SPlisHSPlasH is required for sampling the initial fluid volumes from ```.obj``` files.\n\n\n## Training the network\n\n### Data generation\nThe data generation scripts are in the ```datasets``` subfolder.\nTo generate the training and validation data \n 1. Set the path to the ```DynamicBoundarySimulator``` of SPlisHSPlasH in the ```datasets/splishsplash_config.py``` script.\n 2. Run the script from within the datasets folder \n    ```bash\n    cd datasets\n    ./create_data.sh\n    ```\n\n### Data download\nIf you want to skip the data generation step you can download training and validation data from the links below.\n\n| default data  | 34GB | [link](https://drive.google.com/file/d/1b3OjeXnsvwUAeUq2Z0lcrX7j9U7zLO07) |\n|---------------|------|---------------------------------------------------------------------------|\n| DPI dam break | 24GB | [link](https://drive.google.com/file/d/1_-aAd_GHX8StyKWZLpvSWeGQ3vyytf7L) |\n| 6k box data   | 23GB | [link](https://drive.google.com/file/d/1eDFJD-wiTxzDzywSvXLgzffI25su1S1q) |\n\nFor the default data the training set has been generated with the scripts in this\nrepository and the validation data corresponds to the data used in the paper.\n\nThe DPI dam break data has been generated with the code from the DPI-Nets repo.\nNote that the data has been scaled to match the particle radius used for our method.\nSee the ```scripts/dambreak.yaml``` config file for more information on the scale factor.\n\nThe 6k box data is a simplified version of the default data with a constant number\nof particles and always uses a simple box as environment.\n\n\n\n### Training scripts\nTo train the model with the generated data simply run one of the ```train_network_x.py``` scripts from within the ```scripts``` folder. \n```bash\ncd scripts\n# TensorFlow version\n./train_network_tf.py default.yaml\n# PyTorch version\n./train_network_torch.py default.yaml\n```\nThe scripts will create a folder ```train_network_tf_default``` or ```train_network_torch_default``` respectively with snapshots and log files.\nThe log files can be viewed with Tensorboard.\n\n### Evaluating the network\nTo evaluate the network run the ```scripts/evaluate_network.py``` script like this\n```bash\n./evaluate_network.py --trainscript train_network_tf.py --cfg default.yaml\n# or\n./evaluate_network.py --trainscript train_network_torch.py --cfg default.yaml\n```\n\nThis will create the file ```train_network_{tf,torch}_default_eval_50000.json```, which contains the \nindividual errors between frame pairs.\n\nThe script will also print the overall errors. The output should look like \nthis if you use the generated the data:\n```{'err_n1': 0.000859004137852537, 'err_n2': 0.0024183266885233934, 'whole_seq_err': 0.030323669719872864}```\n\nNote that the numbers differ from the numbers in the paper due to changes in \nthe data generation:\n - We use Open3D to sample surface points to avoid shipping a modified \n   SPlisHSPlasH\n - The sequence of pseudorandom numbers used in the data generation is \n   different, which results in different scenes for training and testing.\n\nIf you have downloaded the validation data then the output should be similar to the numbers in the paper.\n```{'err_n1': 0.000665973493194656, 'err_n2': 0.0018649007299291042, 'whole_seq_err': 0.03081335372162257}```\n\n## Rendering\n\nSee the [scenes](scenes/README.md) directory for instructions on how to create and render the example scenes like the canyon.\n\n## Licenses\n\nCode and scripts are under the MIT license.\n\nData files in ```datasets/models``` and ```scripts/pretrained_model_weights.{h5,pt}``` are under the CDLA-Permissive-1.0 license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisl-org%2Fdeeplagrangianfluids","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fisl-org%2Fdeeplagrangianfluids","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisl-org%2Fdeeplagrangianfluids/lists"}