AQCNES
AQCNES: A Quasi-Continuum Non-Equilibrium Solver - Published in JOSS (2024)
Science Score: 89.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
○codemeta.json file
-
○.zenodo.json file
-
✓DOI references
Found 3 DOI reference(s) in README and JOSS metadata -
○Academic publication links
-
✓Committers with academic emails
17 of 24 committers (70.8%) from academic institutions -
○Institutional organization owner
-
✓JOSS paper metadata
Published in Journal of Open Source Software
Scientific Fields
Physics
Physical Sciences -
40% confidence
Last synced: 4 months ago
·
JSON representation
Repository
Mirror of https://gitlab.ethz.ch/mechanics-and-materials/aqcnes/
Basic Info
- Host: gitlab.com
- Owner: qc-devs
- License: gpl-3.0+
- Default Branch: dev
Statistics
- Stars: 1
- Forks: 1
- Open Issues: 0
- Releases: 0
Created over 1 year ago
https://gitlab.com/qc-devs/aqcnes/blob/dev/
A Quasi-Continuum Non-Equilibrium Solver []( https://gitlab.ethz.ch/mechanics-and-materials/aqcnes/-/commits/main) []( https://www.gnu.org/licenses/gpl-3.0) []( https://clang.llvm.org/docs/ClangFormat.html) []( https://clang.llvm.org/extra/clang-tidy/) []( https://doi.org/10.5905/ethz-1007-774) **[Build](#build)** **[Usage](#run)** **[Docs](https://qc.mm.ethz.ch/aqcnes/)** # AQCNES## Build First step: Clone the repo or get its source code via ```sh wget -O - \ "https://gitlab.ethz.ch/mechanics-and-materials/aqcnes/-/archive/main/aqcnes-main.tar.gz" \ | tar -xvzf - ``` The project uses [CMake](https://cmake.org) as its build system generator. The following third party libraries are required and located using CMake's ```find_package```. - [Boost](https://www.boost.org) (components: program_options, mpi, serialization): version 1.67 - [Eigen](http://eigen.tuxfamily.org): version 3.4 - [MPI](https://cmake.org/cmake/help/latest/module/FindMPI.html): version 3.1 - [PETSc](https://www.mcs.anl.gov/petsc/): version 3.15 - [CGAL](https://www.cgal.org/): version 5.4 - [PnetCDF](https://parallel-netcdf.github.io/): Version 1.12 - [nlohmannjson](https://github.com/nlohmann/json): Version 3.10 - [Scotch/ParMETIS](https://www.labri.fr/perso/pelegrin/scotch/) - [qcmesh](https://qc.mm.ethz.ch/qcmesh/): Version 1.0 - [VTK](https://vtk.org/): Version 9.3 Optionally: - [torch](https://pytorch.org/cppdocs/installing.html) - [openKIM kim-api](https://openkim.org/): Version 2.2 Optionally (run tests): - [Google Test](https://github.com/google/googletest): version 1.8 - [python >= 3.8](https://www.python.org/) - [check-jsonschema](https://github.com/python-jsonschema/check-jsonschema) The version numbers specified above are tested in our CI pipeline. Different versions often also work. However, in libraries such as e.g. petsc, there are updates that potentially can change the computation results significantly. Of course, these libraries are covered by their own license terms. Once you have installed these libraries, run CMake to build the project, choosing a location to install the library to by specifying `CMAKE_INSTALL_PREFIX`. Of course, depending on your setup, you might need to add a `-DCMAKE_PREFIX_PATH='...'` parameter to tell CMake the location of the third party library installations. ```sh cmake -B build -S src -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-Werror -Wall -Wextra" -G Ninja cmake --build build --target all ``` Of course, feel free to use a different build type (e.g. `Debug`, `RelWithDebugInfo`). ### Building on Euler If you are building on Euler, all the necessary dependencies are already available. Therefore, using a Docker container is not necessary. First, load the required modules: ```sh . requirements/euler.sh ``` Now you can run CMake to generate the build system and build the project: ```sh cmake -B build -S src -G Ninja -DCMAKE_BUILD_TYPE=Release cmake --build build --target all ``` Again, a different build type can be used depending on the use case. ### Using the build container In the following we will use the image built in CI to run a container. Note that the path to the image contains the name of the branch that built it, so feel free to change that part if you've modified the Docker environment for your branch. When running a container and bind mounting folders of the host system into that container, one has to deal with the problem of how to make sure that the container correctly sets the correct owner for newly created files. For example, if you run a container with docker and the user inside the container is root, then newly created files in a bind mount will also be owned by root outside the container on the host system. Below, there are listed 3 methods to solve this problem. **Method 1:** Using rootless docker Rootless docker only simulates root privileges for the user in the container. Therefore the user in the container has correct permissions by default. Run (and remove it after usage: `--rm`): ```sh docker run -it --rm -v "$(pwd)":/work -w /work registry.ethz.ch/mechanics-and-materials/aqcnes/dev:main ``` **Method 2:** Using docker , specify uid at runtime Run (and remove it after usage: `--rm`): ```sh docker run -it --rm -v "$(pwd)":/work -w /work --user $(id --user) registry.ethz.ch/mechanics-and-materials/aqcnes/dev:main ``` Then run the above build commands. **Method 3:** Use podman The user inside the container will be root but a bind mount will be mapped correctly: inside the container, files will be owned by root, outside they will be owned by the host OS user. Run: ```sh podman run -it --rm -v .:/work -w /work --user $(id --user) --userns=keep-id registry.ethz.ch/mechanics-and-materials/aqcnes/dev:main ``` Here, podman also allows to mount `.` (you dont need the `"$(pwd)"`). ## Run 1. Create a project directory (we will refer to it as ``) ```sh mkdir ``` 2. Copy [data/input/userinput.json](data/input/userinput.json) and [data/lattice_gen_params/latticegenerator_parameters.json](data/lattice_gen_params/latticegenerator_parameters.json) to your project directory. ```sh cp data/input/userinput.json data/lattice_gen_params/latticegenerator_parameters.json ``` These are the userinput files for running the code and building the initial mesh file respectively. 3. Generate an initial mesh with a lattice generator by using `mesh_generator` using ```sh mpirun -np /main/mesh_generator ``` inside the project directory (` ` is the number of cores) or ```sh mpirun -np /main/mesh_generator ``` from an arbitraty working directory. For a list of supported command line parameters, use ```sh /main/mesh_generator --help ``` To customize the generated mesh (you might want to have lesser elements for smaller `N`), change `n_coarsening_levels` to `1` and `atomistic_domain` to `22.0, 22.0, 22.0` in `latticegenerator_parameters.json`: ```json "n_coarsening_levels": 1 "atomistic_domain":[22.0, 22.0, 22.0] ``` The initial mesh file will be saved in `mesh_files/XYZ.nc` 4. Once you have the initial file, put its path in `userinput.json` at `mesh_file` field: ```json "SimulationSettings": {"mesh_file" : "/path/to/your/NanoIndentation_XXXXXX.nc"} ``` Now you should be able to run ```sh mpirun -np /main/Remeshing3D ``` ## Running tests Run ```sh CTEST_OUTPUT_ON_FAILURE=1 cmake --build build --target test ``` You can omit tests by using the `GTEST_FILTER` (see [.gitlab-ci.yml](.gitlab-ci.yml) for an example). or ```sh cd build ctest ``` If you want to include a mesh repair test involving a mesh file, then set the environment variable `QC_MESH_FILE` (see [.gitlab-ci.yml](.gitlab-ci.yml)). ## CI pipeline The code quality of the project is analyzed in a CI pipeline which runs inside the development docker [container](https://gitlab.com/qc-devs/aqcnes/-/blob/dev/container/Dockerfile?ref_type=heads) and on the ETH HPC cluster [Euler](https://scicomp.ethz.ch/wiki/Euler). The pipeline covers the following checks: - Building the docker container and publishing it to `registry.gitlab.ethz.ch`. - Building documentation and publishing it to `qc.mm.ethz.ch`. - Code compilation and running unit/integration tests. - Presence of a license header for each source file. - Consistency of code formatting using [clang-format](https://clang.llvm.org/docs/ClangFormat.html) for C++ and [ruff](https://docs.astral.sh/ruff/) for Python. - Static code analysis (linter) using [clang-tidy](https://clang.llvm.org/extra/clang-tidy/) for C++ and [ruff](https://docs.astral.sh/ruff/) for Python. ## Contribute Please read our [contribution guidelines](./CONTRIBUTING.md)!
Owner
- Name: qc-devs
- Login: qc-devs
- Kind: organization
- Repositories: 1
- Profile: https://gitlab.com/qc-devs
JOSS Publication
AQCNES: A Quasi-Continuum Non-Equilibrium Solver
Published
September 26, 2024
Volume 9, Issue 101, Page 7068
Authors
Manuel Weberndorfer
Scientific IT Services, ETH Zürich, Switzerland
Scientific IT Services, ETH Zürich, Switzerland
Tags
C++ atomistics statistical mechanics quasi continuum finite temperatureCommitters
Last synced: 4 months ago
Top Committers
| Name | Commits | |
|---|---|---|
| Gerhard Bräunlich | g****h@i****h | 730 |
| pgupta@von-neumann | p****a@e****h | 274 |
| Prateek | g****8@p****u | 255 |
| ssaxena | s****a@e****h | 143 |
| Manuel Weberndorfer | m****r@i****h | 128 |
| Stefan Zimmermann | s****m@e****h | 110 |
| oliver | o****e@g****m | 51 |
| Shashank Saxena | s****a@m****l | 24 |
| miguelspi | m****a@m****h | 14 |
| migspi | m****a@l****h | 11 |
| migsp | 3****p@u****m | 10 |
| Miguel | m****f@g****m | 6 |
| Gerhard Bräunlich | g****h@d****g | 4 |
| mspinola | M****p@g****m | 3 |
| miguel spinola | m****i@s****h | 2 |
| miguel.spinola@mavt.ethz.ch | m****a@e****h | 2 |
| Miguel Angel Spinola Fandila | m****a@e****h | 1 |
| Miguel Angel Spinola Fandila | m****a@e****h | 1 |
| Miguel Angel Spinola Fandila | m****a@e****h | 1 |
| Shashank Saxena | s****a@e****h | 1 |
| Shashank Saxena | s****a@e****h | 1 |
| annywang | w****a@s****h | 1 |
| bkoelle | b****e@s****h | 1 |
| blackspur | 5****r@u****m | 1 |
Committer Domains (Top 20 + Academic)
ethz.ch: 4
student.ethz.ch: 2
id.ethz.ch: 2
eu-login-26.euler.ethz.ch: 1
eu-login-04.euler.ethz.ch: 1
eu-login-36.euler.ethz.ch: 1
eu-login-28.euler.ethz.ch: 1
eu-login-10.euler.ethz.ch: 1
staff-net-lee-2421.intern.ethz.ch: 1
github.com: 1
disroot.org: 1
leibniz.mavt.ethz.ch: 1
mavt.ethz.ch: 1
purdue.edu: 1
Issues and Pull Requests
Last synced: 4 months ago
