/CLAMR

Cell-Based Adaptive Mesh Refinement

Primary LanguageC++OtherNOASSERTION

The CLAMR code is a cell-based adaptive mesh refinement (AMR) mini-app developed as a testbed for hybrid algorithm development using MPI and OpenCL GPU code.

The CLAMR code is open-sourced under its LANL copyright /*

  • Copyright (c) 2011-2019, Triad National Security, LLC.
  • All rights Reserved.
  • CLAMR -- LA-CC-11-094
  • Copyright 2011-2019. Triad National Security, LLC. This software was produced
  • under U.S. Government contract 89233218CNA000001 for Los Alamos National
  • Laboratory (LANL), which is operated by Triad National Security, LLC
  • for the U.S. Department of Energy. The U.S. Government has rights to use,
  • reproduce, and distribute this software. NEITHER THE GOVERNMENT NOR
  • TRIAD NATIONAL SECURITY, LLC MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR
  • ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is modified
  • to produce derivative works, such modified software should be clearly marked,
  • so as not to confuse it with the version available from LANL.
  • See LICENSE file for full copyright

*/

Contributions to CLAMR are welcomed as long as they do not substantially change the nature of the code.

To build the CLAMR executables. CLAMR now used cmake for its builds

// In-tree build cmake . // out-of-tree build cmake

// Optimized build (part optimized RelWithDebInfo is default) cmake -DCMAKE_BUILD_TYPE=release . // Graphics options (OpenGL is the default) cmake -DGRAPHICS_TYPE=[None|OpenGL|MPE]

There are two real-time graphics packages. The default is OpenGL. An alternative real-time graphics package uses MPE. To use this package, configure with "cmake -DGRAPHICS_TYPE=MPE". The OpenGL option is automatically turned off when selecting MPE. MPE is part of the MPICH package from Argonne National Laboratory. It usually is not on a system and will need to be installed. A setup script and version 1.9.1 of the MPE package are available in the download directory.

make

Seven executables are currently built. The first four are "standalone" versions which run one implementation of the routines

clamr: Calls the MPI/GPU versions of each call. Option to check the results against other verisons

clamr_gpuonly: Calls the GPU versions of each call. Option to check the results against the cpu calls

clamr_cpuonly: Calls the CPU versions of each call. Option to check the results against the gpu calls

clamr_mpionly: Calls the MPI versions of each call. Option to check the results against the cpu calls

Check versions. These versions run multiple implementations and check correctness of the implementations

clamr_gpucheck: Calls the GPU and CPU versions of each call and checks the results against each other

clamr_mpicheck: Calls the CPU and MPI/CPU versions of each call and checks the results against each other

clamr_checkall: Calls the GPU, CPU, MPI and GPU/MPI versions of each call and checks the results against each other.

More executables are planned

Currently the executables run only on NVIDIA GPUs. Fixing the kernels to run on ATI GPUs and MIC is of great interest

The numerical algorithm still does not handle "dry" conditions properly and will crash

Many other limitations exist -- coarsening has not been implemented and boundary conditions need some more work

Current performance shows about a 30x speedup on the GPU versus the CPU using NVIDIA Tesla 2090s and Intel CPUs

See the PAPERS file for a list of publications related to the CLAMR code (Papers.bib for bibtex format)