Skip to content

arcaneframework/framework

Repository files navigation

Written by CEA/IFPEN and Contributors

(C) Copyright 2000-2024 CEA/IFPEN. All rights reserved.

All content is the property of the respective authors or their employers.

For more information regarding authorship of content, please consult the listed source code repository logs.


Arcane Framework

Development platform for unstructured 2D or 3D parallel computing codes.

GitHub GitHub all releases GitHub commit activity GitHub code size in bytes Codecov Codacy grade Coverity Scan

Arcane is a development environment for parallel numerical calculation codes. It supports the architectural aspects of a calculation code, such as data structures for meshing and parallelism, as well as more environment-related aspects such as dataset configuration.


Table of Contents:

Documentation

The documentation is available online and is generated and stored in this GitHub repository.

User documentation

This documentation is intended for Arcane users.

Developer documentation

This documentation is intended for Arcane developers.

Alien documentation

This documentation is intended for Alien users and developers.

Changelog

The changelog is available in the documentation or in this repository.

Key features

Massively parallel
  • Work on simple laptop or on a supercomputer (run case on more than 100k CPU core)
  • Domain partitioning with message-passing (MPI, Shared Memory or hydrid MPI/Shared Memory)
  • Unified Accelerator API (experimental)
    • CUDA
    • ROCM
    • SYCL (experimental)
    • oneTBB (experimental)
  • Basic support for explicit vectorization
  • Automatic Load Balancing with cell migration with several mesh partitioner
    • ParMetis
    • PTScotch
    • Zoltan
I/O
  • Supported input mesh file type:
    • VTK Legacy (2.0 and 4.2)
    • VTK VTU
    • Lima
    • MED
    • xmf
    • Gmsh (4.1)
  • Post-processing with the following supported output file type:
    • VTKHDF (V1 and V2)
    • Ensight7Gold
  • Time history curves
  • Support for checkpoint/restarting for long simulation
Mesh entities
  • Multiple mesh entities (items) are usable in Arcane:
    • Node (0D), Edge (1D), Face and Cells
    • Particle
    • DoF (Degree of freedom)
  • Full Connectivities between items (cell to node, node to edge, ...)
  • Support for user connectivities
  • Easy-to-use Arcane mesh variables on any kind of item
    • double, Int32, Int64, ..
    • Scalar, 1D, 2D or multi-dim
    • and many more...
  • Several kind of meshes are supported (1D, 2D and 3D)
    • unstructured
    • unstructured with adaptative refinement
    • cartesian (experimental)
    • cartesian with patch refinement (AMR) (experimental)
    • polyedral mesh (any number of edges/faces per cell)
  • Meshes are fully dynamic (adding/removing cells)
  • All the connectivities and variables are usable on accelerators
Multi-constituents support
  • Two levels of constituents (environment and materials)
  • Any cell variable may have values par constituant
Performance and Verification and Validation
  • Bit-to-bit comparison for Arcane variables
  • Between-synchronizations comparing
  • Unit test system integration
  • Automatic profiling of loops using accelerator API
  • Automatic profiling with sampling using Papi library or signal using SIGPROF
  • Automatic use of CUDA CUPTI library to track unified memory (USM) moves between host and device
Decoupled and extensible framework
  • Handling of case options via a descriptor file based on XML (axl files)
  • Automatic generation of documentation
  • Notion of Service (plugin) with separated interface/implementation to extend functionalities
  • Notion of independant Modules to enable modularity
  • Limited usage of C++ templates to make extensibility easier
Extensions to other langages
  • Most of the classes are available in C#
  • Python wrapping (work in progress, available at end of 2024)
Algebraic manipulation
  • Use of Alien library to handle linear systems
  • Coupling with several linear solver libraries
    • Hypre
    • Trilinos
    • PETSc
Other functionalities
  • Standalone mode to use only some functionalities of Arcane
    • mesh connectivities
    • accelerator API
  • Handling of time loop with automatic support to go back to a previous iteration

Getting started

Compiling and/or installing Arcane

To compile the Arcane Framework, you need an x86 or ARM64 CPU, Linux OS or Windows OS and a C++ compiler with a version that supports C++20 or higher.

For all other dependencies and more information, check out the Compiling/Installing guide.

Click here if the documentation is not available

To prepare your computer :

To build and install Arcane:

Docker images

Docker images with the Arcane framework installed are available in this GitHub repository. More information here.

Spack

Spack recipes for Arcane are available here.

Examples of how to use the Arcane Framework

An introductory chapter with the construction of a Hello world is available here.

Examples of applications using Arcane are available on GitHub. Here is a non-exhaustive list:

A set of mini-applications to evaluate Arcane functionalities. These are a good basis for getting started with Arcane.

Arcane-based application for solving different geosciences problems.

Very simple codes to test Finite Element Methods using Arcane.

TODO

Rencontres Arcanes

The next Rencontres Arcane are scheduled for 2025.

Arcane Framework

Les Rencontres Arcane on April 17th 2023.

The previous presentations are stored here.

Screenshots

Transient elastodynamics

Transient elastodynamics with ArcaneFEM

More Screenshots from ArcaneFEM

Aerodynamics

Aerodynamics

Bilaplacian

Bilaplacian

Linear elasticity

Linear elasticity

Electrostatics

Electrostatics

Solving Fourier equation

Solving Fourier equation

Solving Laplace equation with ArcaneFEM

Solving Laplace equation

Solving Poisson equation with ArcaneFEM

Solving Poisson equation

t=28

Water concentration in a porous material with Sharc

More Screenshots from Sharc

t=34 t=40

Evolution of water concentration over time in a porous material