# ----------------------------------------------------------------- # Version: 1.0 # Date: Nov 2019 # Makefile for SHUD v 1.0 # ----------------------------------------------------------------- # Programmer: Lele Shu (lele.shu@gmail.com) # SHUD model is a heritage of Penn State Integrated Hydrologic Model (PIHM). # ----------------------------------------------------------------- # Prerequisite: # 1 install sundials 5.0+ via https://computation.llnl.gov/projects/sundials/sundials-software. # 2 If parallel-computing is prefered, please install OpenMP. # For mac: # 
 brew install llvm clang # brew install libomp # compile flags for OpenMP: # -Xpreprocessor -fopenmp -lomp # Library/Include paths: # -L/usr/local/opt/libomp/lib # -I/usr/local/opt/libomp/include # # ----------------------------------------------------------------- # Configure this File: # 1 Path of SUNDIALS_DIR. [CRITICAL] # 2 Path of OpenMP if parallel is preffered. # 3 Path of SRC_DIR, default is "SRC_DIR = ." # 4 Path of BUILT_DIR, default is "BUILT_DIR = ." # ----------------------------------------------------------------- SUNDIALS_DIR = $(HOME)/sundials # SUNDIALS_DIR = /usr/local/sundials SHELL = /bin/sh BUILDDIR = . SRC_DIR = src LIB_SYS = /usr/local/lib/ INC_OMP = /usr/local/opt/libomp/include LIB_OMP = /usr/local/opt/libomp/lib LIB_SUN = ${SUNDIALS_DIR}/lib INC_MPI = /usr/local/opt/open-mpi TARGET_EXEC = ${BUILDDIR}/shud TARGET_OMP = ${BUILDDIR}/shud_omp TARGET_DEBUG = ${BUILDDIR}/shud_debug MAIN_shud = ${SRC_DIR}/main.cpp MAIN_OMP = ${SRC_DIR}/main.cpp MAIN_DEBUG = ${SRC_DIR}/main.cpp # If compile on Cluster # CC = g++ # MPICC = mpic++ # LK_OMP = -fopenmp -lsundials_nvecopenmp # export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${SUNDIALS_DIR}/lib CC = /usr/bin/g++ MPICC = /usr/local/bin/mpic++ CFLAGS = -O3 -g -std=c++11 #STCFLAG = -static SRC = ${SRC_DIR}/classes/*.cpp \ ${SRC_DIR}/ModelData/*.cpp \ ${SRC_DIR}/Model/*.cpp \ ${SRC_DIR}/Equations/*.cpp SRC_H = ${SRC_DIR}/classes/*.hpp \ ${SRC_DIR}/ModelData/*.hpp \ ${SRC_DIR}/Model/*.hpp \ ${SRC_DIR}/Equations/*.hpp INCLUDES = -I ${SUNDIALS_DIR}/include \ -I ${INC_OMP} \ -I ${SRC_DIR}/Model \ -I ${SRC_DIR}/ModelData \ -I ${SRC_DIR}/classes \ -I ${SRC_DIR}/Equations LIBRARIES = -L ${LIB_OMP} \ -L ${LIB_SUN} \ -L ${LIB_SYS} RPATH = '-Wl,-rpath,${LIB_SUN}' LK_FLAGS = -lm -lsundials_cvode -lsundials_nvecserial LK_OMP = -Xpreprocessor -fopenmp -lomp -lsundials_nvecopenmp LK_DYLN = "LD_LIBRARY_PATH=${LIB_SUN}" all: make clean make shud @echo check: ls ${SUNDIALS_DIR} ls ${SUNDIALS_DIR}/lib ./shud @echo help: @(echo) @echo "Usage:" @(echo ' make all - make both shud and shud_omp') @(echo ' make cvode - install SUNDIALS/CVODE to ~/sundials') @(echo ' make shud - make shud executable') @(echo ' make shud_omp - make shud_omp with OpenMP support') @(echo) @(echo ' make clean - remove all executable files') @(echo) cvode CVODE: @echo '...Install SUNDIALS/CVODE for your ...' chmod +x configure ./configure @echo shud SHUD: ${MAIN_shud} $(SRC) $(SRC_H) @echo '...Compiling shud ...' @echo $(CC) $(CFLAGS) ${STCFLAG} ${INCLUDES} ${LIBRARIES} ${RPATH} -o ${TARGET_EXEC} ${MAIN_shud} $(SRC) $(LK_FLAGS) @echo @echo $(CC) $(CFLAGS) ${INCLUDES} ${STCFLAG} ${LIBRARIES} ${RPATH} -o ${TARGET_EXEC} ${MAIN_shud} $(SRC) $(LK_FLAGS) @echo @echo @echo " ${TARGET_EXEC} is compiled successfully!" @echo shud_omp: ${MAIN_OMP} $(SRC) $(SRC_H) @echo '...Compiling shud_OpenMP ...' @echo $(CC) $(CFLAGS) ${STCFLAG} ${RPATH} -D_OPENMP_ON ${INCLUDES} ${LIBRARIES} -o ${TARGET_OMP} ${MAIN_OMP} $(SRC) $(LK_FLAGS) $(LK_OMP) @echo @echo $(CC) $(CFLAGS) ${STCFLAG} ${RPATH} -D_OPENMP_ON ${INCLUDES} ${LIBRARIES} -o ${TARGET_OMP} ${MAIN_OMP} $(SRC) $(LK_FLAGS) $(LK_OMP) @echo @echo " ${TARGET_OMP} is compiled successfully!" @echo @echo clean: @echo "Cleaning ... " @echo @echo " rm -f *.o" @rm -f *.o @echo " rm -f ${TARGET_EXEC}" @rm -f ${TARGET_EXEC} @echo " rm -f ${TARGET_OMP}" @rm -f ${TARGET_OMP} @echo @echo "Done." @echo