Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Readme and updates to makefile for SUNDIALS #124

Merged
merged 1 commit into from
Jun 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 27 additions & 22 deletions ExampleCodes/SUNDIALS/Exec/GNUmakefile
Original file line number Diff line number Diff line change
@@ -1,42 +1,47 @@
# AMREX_HOME defines the directory in which we will find all the AMReX code.
AMREX_HOME ?= ../../../../../amrex
AMREX_HOME ?= ../../../../amrex

DEBUG = FALSE
USE_MPI = FALSE
USE_MPI = TRUE
USE_OMP = FALSE
COMP = gnu
DIM = 3
USE_RPATH = TRUE
USE_SUNDIALS = TRUE

include $(AMREX_HOME)/Tools/GNUMake/Make.defs

include ../Source/Make.package
VPATH_LOCATIONS += ../Source
INCLUDE_LOCATIONS += ../Source


ifeq ($(USE_SUNDIALS),TRUE)
SUNDIALS_ROOT ?= $(TOP)/../../../../../sundials/instdir
SUNDIALS_LIB_DIR ?= $(SUNDIALS_ROOT)/lib

USE_CVODE_LIBS ?= TRUE
USE_ARKODE_LIBS ?= TRUE

DEFINES += -DAMREX_USE_SUNDIALS
INCLUDE_LOCATIONS += $(SUNDIALS_ROOT)/include
LIBRARY_LOCATIONS += $(SUNDIALS_LIB_DIR)

LIBRARIES += -lsundials_cvode
LIBRARIES += -lsundials_arkode
LIBRARIES += -lsundials_nvecmanyvector

ifneq (,$(wildcard $(SUNDIALS_LIB_DIR)/libsundials_core*))
ifeq ($(USE_CUDA),TRUE)
SUNDIALS_ROOT ?= $(TOP)../../../../sundials/instdir_cuda
else
SUNDIALS_ROOT ?= $(TOP)../../../../sundials/instdir
endif
ifeq ($(NERSC_HOST),perlmutter)
SUNDIALS_LIB_DIR ?= $(SUNDIALS_ROOT)/lib64
else
SUNDIALS_LIB_DIR ?= $(SUNDIALS_ROOT)/lib
endif

USE_CVODE_LIBS ?= TRUE
USE_ARKODE_LIBS ?= TRUE

DEFINES += -DAMREX_USE_SUNDIALS
INCLUDE_LOCATIONS += $(SUNDIALS_ROOT)/include
LIBRARY_LOCATIONS += $(SUNDIALS_LIB_DIR)

LIBRARIES += -L$(SUNDIALS_LIB_DIR) -lsundials_cvode
LIBRARIES += -L$(SUNDIALS_LIB_DIR) -lsundials_arkode
LIBRARIES += -L$(SUNDIALS_LIB_DIR) -lsundials_nvecmanyvector
LIBRARIES += -L$(SUNDIALS_LIB_DIR) -lsundials_core
endif

ifeq ($(USE_CUDA),TRUE)
LIBRARIES += -lsundials_nveccuda
endif
ifeq ($(USE_CUDA),TRUE)
LIBRARIES += -L$(SUNDIALS_LIB_DIR) -lsundials_nveccuda
endif

endif

Expand Down
85 changes: 85 additions & 0 deletions ExampleCodes/SUNDIALS/Exec/README_sundials
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
SUNDIALS installation guide:
https://computing.llnl.gov/projects/sundials/faq#inst

Installation

# Download sundials-x.y.z.tar.gz file for SUNDIALS and extract it at the same level as amrex.
# Update 6/11/24 - v7.0.0. tested
https://computing.llnl.gov/projects/sundials/sundials-software

>> tar -xzvf sundials-x.y.z.tar.gz # where x.y.z is the version of sundials

# at the same level that amrex is cloned, do:

>> mkdir sundials
>> cd sundials

######################
HOST BUILD
######################

>> mkdir instdir
>> mkdir builddir
>> cd builddir

>> cmake -DCMAKE_INSTALL_PREFIX=/pathto/sundials/instdir -DEXAMPLES_INSTALL_PATH=/pathto/sundials/instdir/examples -DENABLE_MPI=ON ../../sundials-x.y.z

######################
NVIDIA/CUDA BUILD
######################

# Navigate back to the 'sundials' directory and do:

>> mkdir instdir_cuda
>> mkdir builddir_cuda
>> cd builddir_cuda

>> cmake -DCMAKE_INSTALL_PREFIX=/pathto/sundials/instdir_cuda -DEXAMPLES_INSTALL_PATH=/pathto/sundials/instdir_cuda/examples -DENABLE_CUDA=ON -DENABLE_MPI=ON ../../sundials-x.y.z

######################

>> make -j4
>> make install

# in your .bashrc or preferred configuration file, add the following (and then "source ~/.bashrc")

# If you have a CPU build:

>> export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/pathto/sundials/instdir/lib/

# If you have a NVIDIA/CUDA build:

>> export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/pathto/sundials/instdir_cuda/lib/

# now you are ready to compile amrex-tutorials/ExampleCodes/SUNDIALS/Exec with:

>> make -j4 # optional to have 'USE_CUDA=TRUE' as well

# in your inputs file, you will need to have:

# INTEGRATION
## integration.type can take on the following values:
## 0 or "ForwardEuler" => Native AMReX Forward Euler integrator
## 1 or "RungeKutta" => Native AMReX Explicit Runge Kutta controlled by integration.rk.type
## 2 or "SUNDIALS" => SUNDIALS backend controlled by integration.sundials.strategy
integration.type = <pick a value>

## Native AMReX Explicit Runge-Kutta parameters
#
## integration.rk.type can take the following values:
### 0 = User-specified Butcher Tableau
### 1 = Forward Euler
### 2 = Trapezoid Method
### 3 = SSPRK3 Method
### 4 = RK4 Method
integration.rk.type = 3

## If using the SUNDIALS Submodule, then
## compile with USE_SUNDIALS=TRUE or AMReX_SUNDIALS=ON and
## set strategy here:
#
## integration.sundials.strategy can take the following values:
### ERK = ERKStep from ARKode with SSPRK3 Method
### MRI = MRIStep from ARKode with Explict Trapezoid Method
### MRITEST = MRIStep from ARKode modified to use no-op inner f0
integration.sundials.strategy = ERK
Loading