FerroX

FerroX is a massively parallel, 3D phase-field simulation framework for modeling ferroelectric materials based scalable logic devices. We self-consistently solve the time-dependent Ginzburg Landau (TDGL) equation for ferroelectric polarization, Poisson’s equation for electric potential, and semiconductor charge equation for carrier densities in semiconductor regions. The algorithm is implemented using Exascale Computing Project software framework, AMReX, which provides effective scalability on manycore and GPU-based supercomputing architectures. The code can be used for simulations of ferroelectric domain-wall induced negative capacitance (NC) effect in Metal-Ferroelectric-Insulator-Metal (MFIM) and Metal-Ferroelectric-Insulator-Semiconductor-Metal (MFISM) devices.

Our community is here to help. Please report installation problems in case you should get stuck.

Installation

Quick Start

Prerequisites: Git, C++ compiler, CUDA toolkit (for GPU builds)

Build Commands:

git clone https://github.com/AMReX-Codes/amrex.git
git clone https://github.com/AMReX-Microelectronics/FerroX.git
cd FerroX/Exec && make -j 4

Detailed Installation Process

Prerequisites and Dependencies

FerroX requires a modern C++ compiler, Git version control, and optional dependencies like CUDA toolkit for GPU acceleration and SUNDIALS for advanced time integration. The AMReX library is required and can be obtained automatically through CMake or manually cloned.

Obtaining the Source Code

Download the AMReX repository at the same directory level as where you plan to install FerroX:

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

Understanding the Build System

FerroX supports two build systems: GNU Make for quick builds and CMake for advanced configuration. GNU Make is simpler but offers fewer options, while CMake provides comprehensive dependency management and cross-platform support.

Standard Build Process

Navigate to the FerroX/Exec directory and build using your preferred method:

GNU Make (GPU default):

cd FerroX/Exec
make -j 4

CMake (basic):

cd FerroX
cmake -S . -B build
cmake --build build -j 4

Build Verification

After successful compilation, verify the installation by running a test simulation from the Examples directory.

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

Advanced Build Options

Alternative Build Systems

GNU Make Options:

# CPU build
make -j 4 USE_CUDA=FALSE

# CPU build with SUNDIALS
make -j 4 USE_CUDA=FALSE USE_SUNDIALS=TRUE

For SUNDIALS support with GNU Make, first follow the SUNDIALS installation steps as described here.

CMake with External Dependencies:

# Use external AMReX installation
cmake -S . -B build \
  -DFerroX_amrex_internal=OFF \
  -DAMReX_DIR=/path/to/amrex/lib/cmake/AMReX

Performance Optimizations

GPU Acceleration:

cmake -S . -B build -DFerroX_COMPUTE=CUDA
cmake --build build -j 4

CPU Optimizations:

cmake -S . -B build \
  -DFerroX_COMPUTE=OMP \
  -DFerroX_SIMD=ON

Physics Module Configuration

Embedded Boundaries and Time-Dependent Features:

cmake -S . -B build \
  -DFerroX_EB=ON \
  -DFerroX_TIME_DEPENDENT=ON

SUNDIALS Integration:

For SUNDIALS library integration, first follow the SUNDIALS installation steps as described here.

cmake -S . -B build \
  -DFerroX_SUNDIALS=ON \
  -DFerroX_sundials_src=/path/to/sundials/source

Debug and Development Options

Debug Build with Verbose Output:

cmake -S . -B build \
  -DCMAKE_BUILD_TYPE=Debug \
  -DFerroX_PRINT_HIGH=ON \
  -DFerroX_PRINT_MEDIUM=ON

Core Configuration Options:

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

  • -DFerroX_PRECISION=SINGLE/DOUBLE - Floating point precision (default: DOUBLE)

  • -DFerroX_EB=ON/OFF - Embedded boundary support (default: OFF)

  • -DFerroX_TIME_DEPENDENT=ON/OFF - Time-dependent simulations (default: OFF)

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

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

  • -DFerroX_SIMD=ON/OFF - CPU SIMD acceleration (default: OFF)

Debug Print Options:

  • -DFerroX_PRINT_HIGH=ON/OFF - High level debug printing (default: OFF)

  • -DFerroX_PRINT_MEDIUM=ON/OFF - Medium level debug printing (default: OFF)

  • -DFerroX_PRINT_LOW=ON/OFF - Low level debug printing (default: OFF)

  • -DFerroX_PRINT_NAME=ON/OFF - Function name debug printing (default: OFF)

Platform-Specific Configurations

AMReX Source Management:

# Use local AMReX source
cmake -S . -B build -DFerroX_amrex_src=/path/to/amrex/source

# Use custom AMReX repository/branch
cmake -S . -B build \
  -DFerroX_amrex_repo=https://github.com/user/amrex.git \
  -DFerroX_amrex_branch=my_branch

# Test with specific AMReX pull request
cmake -S . -B build -DFerroX_amrex_pr=1234

SUNDIALS External Integration:

# Use external SUNDIALS installation
cmake -S . -B build \
  -DFerroX_SUNDIALS=ON \
  -DFerroX_sundials_internal=OFF \
  -DSUNDIALS_DIR=/path/to/sundials/lib/cmake/sundials

HPC System Configuration:

For high-performance computing systems, ensure appropriate modules are loaded. For example, on Perlmutter:

module load cudatoolkit