{"id":14992122,"url":"https://github.com/InteractiveComputerGraphics/higher_order_embedded_fem","last_synced_at":"2025-09-25T14:30:50.749Z","repository":{"id":72512524,"uuid":"418853320","full_name":"InteractiveComputerGraphics/higher_order_embedded_fem","owner":"InteractiveComputerGraphics","description":"Source code for our paper \"Higher-order finite elements for embedded simulation\"","archived":false,"fork":false,"pushed_at":"2021-10-19T10:41:02.000Z","size":2434,"stargazers_count":22,"open_issues_count":0,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-01-09T07:00:49.436Z","etag":null,"topics":["cell","element","embedded","finite","higher","method","order","rust","science"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/InteractiveComputerGraphics.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-10-19T09:19:25.000Z","updated_at":"2024-10-14T20:23:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"848d4766-a4ee-4d36-ae18-a079cc059539","html_url":"https://github.com/InteractiveComputerGraphics/higher_order_embedded_fem","commit_stats":{"total_commits":4,"total_committers":1,"mean_commits":4.0,"dds":0.0,"last_synced_commit":"868fbc25f93cae32aa3caaa41a60987d4192cf1b"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InteractiveComputerGraphics%2Fhigher_order_embedded_fem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InteractiveComputerGraphics%2Fhigher_order_embedded_fem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InteractiveComputerGraphics%2Fhigher_order_embedded_fem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InteractiveComputerGraphics%2Fhigher_order_embedded_fem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/InteractiveComputerGraphics","download_url":"https://codeload.github.com/InteractiveComputerGraphics/higher_order_embedded_fem/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234200170,"owners_count":18795139,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["cell","element","embedded","finite","higher","method","order","rust","science"],"created_at":"2024-09-24T15:00:44.867Z","updated_at":"2025-09-25T14:30:50.249Z","avatar_url":"https://github.com/InteractiveComputerGraphics.png","language":"Rust","readme":"# Higher-order Finite Elements for Embedded Simulation\n\nThis repository contains the source code used to produce the results for our paper:\n\n[Longva, A., Löschner, F., Kugelstadt, T., Fernández-Fernández, J.A. and Bender, J., 2020.\n*Higher-order finite elements for embedded simulation*.\nACM Transactions on Graphics (TOG), 39(6), pp.1-14.](https://dl.acm.org/doi/10.1145/3414685.3417853)\n\nPlease also see the [entry on our website](https://animation.rwth-aachen.de/publication/0572/)\nfor access to the paper, the supplemental document, video and more.\n\n![Teaser image from paper](teaser.png)\n\n## Important information\n\nThe code provided here is almost entirely unchanged from the code used to generate the results\ndemonstrated in the paper. After publication, we have discovered a couple of mistakes that we detail\nin our [errata](errata.pdf). The code has deliberately **not** been updated to account for these mistakes.\n\nThe code is provided only for the sake of giving researchers the ability to reproduce our results.\nIt is not intended to serve as a base for building your own project on top of. The published code is the\nresult of violently ripping out only the relevant parts from a yet larger code base used for multiple papers.\nHaving grown organically it is generally overly complex and unwieldy. We are actively working on redesigning,\ncleaning up, documenting and packaging some of the core functionality as reusable libraries.\nThe FEM portion of the code is currently in the process of being redesigned and repackaged as the standalone\n[Fenris FEM library](https://github.com/InteractiveComputerGraphics/fenris).\n\nIf you have issues, questions or comments, please feel free to contact Andreas (first author) directly,\nor write up an issue here on the GitHub tracker.\n\n## Build instructions\n\nThe code is written in the [Rust](https://www.rust-lang.org) programming language.\n\nAlthough Rust comes with an excellent automated build system, our code relies on a couple of libraries\nthat need to be installed separately:\n\n- Intel MKL (tested with Intel MKL 2020)\n- libclang (required for automatically generating bindings to MKL)\n- Google OR Tools (required for Simplex solver, tested with version 7.7)\n\nThe code should generally work on any of the common platforms (Linux, Windows, Mac),\nbut it has been tested most extensively on Linux (and not at all on Mac).\n\nIn order to make this repository stand-alone, we have bundled the libraries\n[mkl-sys](https://github.com/Andlon/mkl-sys) and [mkl-corrode](https://github.com/Andlon/mkl-sys),\nthat were not available on the central Rust dependency repository `crates.io` into the `extern/` folder of this repositroy.\n\nOnce you have installed Rust and the required dependencies (see below for more details), you can build the project\nby invoking `cargo` (Rust package manager) from the root of this repository:\n\n```\ncargo build --release\n```\n\nThis will download and build the required Rust dependencies (of which there are many).\n\n## Running experiments\n\nIn order to run the experiments, you will need to download the binary archive `assets.zip` containing the asset files\n(meshes etc.) made available through\n[GitHub releases](https://github.com/InteractiveComputerGraphics/higher_order_embedded_fem/releases/tag/initial_release).\nUnzip the archive into the root directory, which should give\nyou an `assets/` folder.\n\nThe easiest way to run experiments is to run the provided Python wrapper files in the `experiments` folder.\nFor example, to run the \"Cylinder shell\" example (referred to as \"hollow cylinder\" in our paper), invoke the\ncorresponding Python script from the project root directory:\n```\npython experiments/cylinder_shell/run_experiments.py\n```\nThis will (re-)compile the code and run the experiment for a number of configurations\n(mesh resolution, element order, FEM vs. FCM etc.). You might want to check out the Python file\nand make some adjustments. This process will produce a large amount of output in the\nexperiment-specific data directory (see Python script for output directory), including\nlog files, VTK files for analysis in Paraview and PLY surface meshes that can be used for rendering.\n\n**NB!** We are sadly not permitted to directly redistribute the mesh data for the \"Hollow Ball\" scene\ndue to licensing restrictions. See `assets/meshes/hollow_ball/README` for more information.\n\nAdditionally, instead of running the Python scripts (which are not available for *every* experiment),\nyou can explore the scenes provided in the binary itself by running: \n\n```\n# Produces the help text for the scene runner binary\ncargo run --release -- --help\n\n# Produces a list of available scenes\ncargo run --release -- --list-scenes\n\n# Run a specific scene\ncargo run --release -- --scene bicycle_fem_fine\n```\n\n## Installing external dependencies\n\n### Intel MKL\n\nRecently, Intel rebranded its MKL library as\n[oneMKL](https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl.html).\nWe used Intel MKL 2020 for our experiments, but we believe it should also work with the more recent oneMKL versions.\n\nInstall the library as described by the (one)MKL documentation. Our code looks for the `MKLROOT`\nenvironment variable. This environment variable gets automatically set if you run the\nconfiguration script provided alongside MKL. For example, on Linux:\n\n```\nsource /path/to/intel/mkl/bin/mklvars.sh intel64\n```\n\n### LLVM / libclang\n\nFollow the instructions provided for the\n[bindgen project](https://rust-lang.github.io/rust-bindgen/requirements.html),\nwhich is used by the `mkl-sys` library to automatically generate usable Rust bindings\nfrom the MKL C headers.\n\n### Google OR Tools\n\nDownload the [binary OR-Tools distribution](https://developers.google.com/optimization/install/cpp) and set the\nthe `ORTOOLS_ROOT` environment variable to the root directory of the OR Tools installation.\nIn addition, you need to add the OR Tools libraries to the linker library search paths.\nOn Linux, this might look like:\n\n```\nexport ORTOOLS_ROOT=/path/to/or-tools-7.7.810\nexport LD_LIBRARY_PATH=$ORTOOLS_ROOT/lib:$LD_LIBRARY_PATH\n```\n\n## License\n\nThe Rust source code provided in this repository (with the exception of code in `extern/`,\nwhich is separately licensed) is licensed under the MIT license. See `LICENSE` for details.\n\nDependencies are licensed under their own respective licenses. Please see `assets/README` for\ninformation about license terms for the meshes we use.","funding_links":[],"categories":["Scientific Computation"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FInteractiveComputerGraphics%2Fhigher_order_embedded_fem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FInteractiveComputerGraphics%2Fhigher_order_embedded_fem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FInteractiveComputerGraphics%2Fhigher_order_embedded_fem/lists"}