MagneX

MagneX is a massively parallel, 3D micromagnetics solver for modeling magnetic materials. MagneX solves the Landau-Lifshitz-Gilbert (LLG) equations, including exchange, anisotropy, demagnetization, and Dzyaloshinskii-Moriya interaction (DMI) coupling. The algorithm is implemented using Exascale Computing Project software framework, AMReX, which provides effective scalability on manycore and GPU-based supercomputing architectures.

Our community is here to help. Please report installation problems or general questions about the code in the github Issues tab.

Installation

Quick Start

Prerequisites: Ubuntu22 + libfftw3-dev, libfftw3-mpi-dev

Build Commands:

git clone https://github.com/AMReX-Codes/amrex.git
git clone https://github.com/AMReX-Microelectronics/MagneX.git
cd MagneX/Exec
make -j4

Detailed Installation Process

Prerequisites and Dependencies

MagneX requires a modern C++ compiler, MPI implementation, and several key dependencies:

  • Base system: Ubuntu22 (or equivalent Linux distribution)

  • Required packages: libfftw3-dev, libfftw3-mpi-dev

  • AMReX: Exascale computing framework (can be built internally or externally)

  • SUNDIALS: Optional for advanced time integration methods

  • cmake: Required only for CMake builds (optional for GNU Make builds)

Obtaining the Source Code

Clone AMReX and MagneX repositories at the same root location to enable seamless integration:

git clone https://github.com/AMReX-Codes/amrex.git
git clone https://github.com/AMReX-Microelectronics/MagneX.git

Understanding the Build System

MagneX supports two build systems:

  • GNU Make (default): Traditional build system for standard configurations

  • CMake: Modern build system with automatic dependency management for advanced use cases

The GNU Make system provides the simplest build process for most users, while CMake offers additional flexibility for complex configurations.

Standard Build Process

For a standard CPU-only build using GNU Make, navigate to MagneX/Exec/ and run:

make -j4

For CMake builds (alternative approach):

cmake -S . -B build -DMagneX_amrex_src=../amrex
cmake --build build -j 4

Build Verification

After successful compilation, verify the installation by running a test simulation from the included example problems.

For detailed instructions on setting up and running MagneX simulations, see Run MagneX.

Advanced Build Options

Alternative Build Systems

CMake Build System:

For users requiring advanced configuration options or automatic dependency management:

Performance Optimizations

OpenMP build for shared-memory parallelism:

cmake -S . -B build -DMagneX_COMPUTE=OMP -DMagneX_amrex_src=../amrex
cmake --build build -j 4

CUDA build for GPU acceleration:

cmake -S . -B build -DMagneX_COMPUTE=CUDA -DMagneX_amrex_src=../amrex
cmake --build build -j 4

Physics Module Configuration

Core CMake Configuration Options:

  • -DMagneX_COMPUTE=NOACC/OMP/CUDA/HIP - Computing backend (default: NOACC)

  • -DMagneX_MPI=ON/OFF - Multi-node support (default: ON)

  • -DMagneX_FFT=ON/OFF - FFT support (default: ON)

  • -DMagneX_SUNDIALS=ON/OFF - SUNDIALS ODE solver support (default: OFF)

SUNDIALS Integration for Advanced Time Integration:

External SUNDIALS installation:

cmake -S . -B build \
  -DMagneX_SUNDIALS=ON \
  -DMagneX_sundials_internal=OFF \
  -DSUNDIALS_DIR=/path/to/sundials/lib/cmake/sundials

Local SUNDIALS source:

cmake -S . -B build \
  -DMagneX_SUNDIALS=ON \
  -DMagneX_sundials_src=/path/to/sundials/source

Debug and Development Options

Development build with local AMReX source:

cmake -S . -B build -DMagneX_amrex_src=../amrex
cmake --build build -j 4

Testing with specific AMReX pull request:

cmake -S . -B build -DMagneX_amrex_pr=1234

Platform-Specific Configurations

External AMReX installation:

cmake -S . -B build \
  -DMagneX_amrex_internal=OFF \
  -DAMReX_DIR=/path/to/amrex/lib/cmake/AMReX

Custom AMReX repository/branch:

cmake -S . -B build \
  -DMagneX_amrex_repo=https://github.com/user/amrex.git \
  -DMagneX_amrex_branch=my_branch

Multi-GPU CUDA build with external AMReX:

export CMAKE_PREFIX_PATH=/path/to/amrex/install:$CMAKE_PREFIX_PATH
cmake -S . -B build \
  -DMagneX_COMPUTE=CUDA \
  -DMagneX_amrex_internal=OFF
cmake --build build -j 4