Skip to content
Snippets Groups Projects
Makefile 11 KiB
Newer Older
  • Learn to ignore specific revisions
  • SHELL = /bin/sh
    
    # ============================================================================
    # ===== flags and directories (to be modified by the user) ===================
    # ============================================================================
    
    USE_PARALLEL_AMDIS = 0      # 1 if AMDiS was compiled with parallel support, 0 otherwise
    USE_OPENMP = 0              # 1 if AMDiS was compiled with OpenMP support, 0 otherwise
    
    USE_UMFPACK = 0             # 1 if AMDiS was compiled with UMFPACK library, 0 otherwise
    USE_MKL = 0                 # 1 if AMDiS was compiled with Intel MKL library, 0 otherwise
    
    USE_BOOST = 0               # 1 if AMDiS was compiled with Boost support, 0 otherwise
    
    USE_SERVER =                # mars, deimos or themisto. If no special server blank
    USE_COMPILER = gcc          # gcc  or icc
    USE_SMI = 0
    USE_MPCCI = 0
    DEBUG = 0
    
    
    AMDIS_DIR = ../AMDiS
    
    MPI_DIR =                   # on mars, deimos or themisto, leave this field blank
    
    BOOST_DIR =                 # if compiled with boost support, define here the boost directory
    
    MPCCI_DIR = 
    
    
    
    
    
    # ============================================================================
    
    #                 !!! Do not edit after this line !!!
    
    # ============================================================================
    
    
    
    
    
    PARMETIS_DIR = $(AMDIS_DIR)/lib/ParMetis-3.1
    
    # ============================================================================
    # ===== includes pathes ======================================================
    # ============================================================================
    
    
    AMDIS_INCLUDE = -I$(AMDIS_DIR)/src -I$(AMDIS_DIR)/compositeFEM/src -I$(AMDIS_DIR)/lib/mtl4
    
    SMI_INCLUDE = -I$(SMI_DIR)/smi 
    MPCCI_INCLUDE = -I$(MPCCI_DIR)/include
    PARMETIS_INCLUDE = -I$(PARMETIS_DIR)
    PARALLEL_INCLUDE = -I$(AMDIS_DIR)/src/parallel
    
    INCLUDES = -I. $(AMDIS_INCLUDE) $(SMI_INCLUDE) $(MPCCI_INCLUDE) -I$(SMI_DIR)/etc/commoncpp/include $(PARALLEL_INCLUDE)
    
    # ============================================================================
    # ===== libraries ============================================================
    # ============================================================================
    
    AMDIS_LIB =  -L$(AMDIS_DIR)/lib -lamdis
    PNG_LIB = -lpng
    
    UMFPACK_LIB = -L$(AMDIS_DIR)/lib/AMD/Lib -L$(AMDIS_DIR)/lib/UMFPACK/Lib
    ifeq ($(strip $(USE_SERVER)), mars)
    
    	UMFPACK_LIB += -lmkl -lumfpack -lamd
    
    else
    	ifeq ($(strip $(USE_SERVER)), themisto)
    
    		UMFPACK_LIB += $(MKL_LIB) -lmkl -lguide -lpthread -lumfpack -lamd
    
    		ifeq ($(strip $(USE_SERVER)), deimos)
    
    			MPI_DIR = /licsoft/libraries/openmpi/1.2.6/64bit
    
    			UMFPACK_LIB += -lumfpack -lamd -L/licsoft/libraries/goto -lgoto -lpthread
    		else
    			UMFPACK_LIB += -lblas -lumfpack -lamd
    		endif
    
    	endif
    endif
    
    SMI_LIB = -L$(SMI_DIR)/lib -lsmi
    MPCCI_LIB = -L$(MPCCI_DIR)/lib/linux-x86-glibc22 -lmpcci
    PARMETIS_LIB = -L$(PARMETIS_DIR) -lparmetis -lmetis
    
    LIBS = $(AMDIS_LIB) $(PNG_LIB)
    
    ifeq ($(strip $(USE_UMFPACK)), 1)
    	LIBS += $(UMFPACK_LIB)
    endif
    
    
    ifeq ($(strip $(USE_MKL)), 1)
    	ifeq ($(strip $(USE_SERVER)), themisto)
    		LIBS += $(MKL_LIB) 
    	else
    		LIBS += -L$(MKL_LIB) 
    	endif
    
    	LIBS += -lmkl -lmkl_solver -lguide -lpthread
    endif
    
    
    ifeq ($(strip $(USE_SMI)), 1)
    	LIBS += $(SMI_LIB) 
    endif
    
    ifeq ($(strip $(USE_MPCCI)), 1)
    	LIBS += $(MPCCI_LIB) 
    endif
    
    
    ifeq ($(strip $(USE_BOOST)), 1)
    	LIBS += -L$(BOOST_DIR)/lib -lboost_iostreams
    endif
    
    
    
    # ============================================================================
    # ===== parallel or sequential ? =============================================
    # ============================================================================
    
    ifeq ($(strip $(USE_PARALLEL_AMDIS)), 1)
    	ifeq ($(strip $(USE_SERVER)), mars)
    		ifeq ($(strip $(USE_COMPILER)), gcc)
    			COMPILE = g++
    		else
    			COMPILE = icpc
    		endif
    	else
    		COMPILE = $(MPI_DIR)/bin/mpiCC
    	endif
    
    
    	LIBS += $(PARMETIS_LIB) -lmpi
    
    else
    	ifeq ($(strip $(USE_COMPILER)), gcc)
    		COMPILE = g++
    	else
    		COMPILE = icpc
    	endif
    endif
    
    # ============================================================================
    # ===== compile flags ========================================================
    # ============================================================================
    
    ifeq ($(strip $(DEBUG)), 0)
           CPPFLAGS = -O2
    else
           CPPFLAGS = -g -O0
    endif
    
    ifeq ($(strip $(USE_OPENMP)), 1)
    	ifeq ($(strip $(USE_COMPILER)), gcc)
    		CPPFLAGS += -fopenmp
    	else
    		CPPFLAGS += -openmp
    	endif
    endif
    
    
    # ============================================================================
    # ===== libtool linking ======================================================
    # ============================================================================
    
    LIBTOOL = $(AMDIS_DIR)/libtool
    LINK = $(LIBTOOL) --mode=link $(COMPILE)
    
    # ============================================================================
    # ===== rules ================================================================
    # ============================================================================
    
    all : 
    	make $(PROGRAMS)
    
    clean: 
    	-rm -rf *.o
    	-rm -rf $(PROGRAMS)
    
    .cc.o: $*.cc
    	$(COMPILE) $(DEFS) $(INCLUDES) $(CPPFLAGS) -c -o $*.o $^ 
    
    
    # ============================================================================
    # ===== user programs ========================================================
    # ============================================================================
    
    PROGRAMS = ellipt nonlin heat vecellipt vecnonlin vecheat sphere ball smitest parametric torus bunny navierstokes stokesnonlin vecmultigrid
    
    VPATH = .:./src:/solhome/vey/sourcen/currentcvs/AMDiS/src
    
    # ===== ellipt ============================================================
    
    ELLIPT_OFILES = ellipt.o
    
    ellipt: $(ELLIPT_OFILES)
    	$(LINK) $(CPPFLAGS) -o ellipt $(ELLIPT_OFILES) $(LIBS)
    
    # ===== nonlin ============================================================
    
    NONLIN_OFILES = nonlin.o
    
    nonlin: $(NONLIN_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o nonlin $(NONLIN_OFILES) $(LIBS)
    
    # ===== heat ============================================================
    
    HEAT_OFILES = heat.o
    
    heat: 	$(HEAT_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o heat $(HEAT_OFILES) $(LIBS)
    
    # ===== vecellipt ============================================================
    
    VECELLIPT_OFILES = vecellipt.o
    
    vecellipt: $(VECELLIPT_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o vecellipt $(VECELLIPT_OFILES) $(LIBS)
    
    # ===== vecnonlin ============================================================
    
    VECNONLIN_OFILES = vecnonlin.o
    
    vecnonlin: $(VECNONLIN_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o vecnonlin $(VECNONLIN_OFILES) $(LIBS)
    
    # ===== vecheat ============================================================
    
    VECHEAT_OFILES = vecheat.o
    
    vecheat: $(VECHEAT_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o vecheat $(VECHEAT_OFILES)  $(LIBS)
    
    # ===== vecmultigrid ============================================================
    
    VECMULTIGRID_OFILES = vecmultigrid.o
    
    vecmultigrid: $(VECMULTIGRID_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o vecmultigrid $(VECMULTIGRID_OFILES) $(LIBS)
    
    # ===== sphere ============================================================
    
    SPHERE_OFILES = sphere.o
    
    sphere: $(SPHERE_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o sphere $(SPHERE_OFILES) $(LIBS)
    
    # ===== bunny ============================================================
    
    BUNNY_OFILES = bunny.o
    
    bunny: $(BUNNY_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o bunny $(BUNNY_OFILES) $(LIBS)
    
    # ===== torus ============================================================
    
    TORUS_OFILES = torus.o
    
    torus: $(TORUS_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o torus $(TORUS_OFILES) $(AMDIS_LIB) $(LIBS)
    
    # ===== ball ============================================================
    
    BALL_OFILES = ball.o
    
    ball: $(BALL_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o ball $(BALL_OFILES) $(LIBS)
    
    # ===== parametric ============================================================
    
    PARAMETRIC_OFILES = parametric.o
    
    parametric: $(PARAMETRIC_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o parametric $(PARAMETRIC_OFILES) $(LIBS)
    
    # ===== navierstokes ========================================================
    
    NAVIERSTOKES_OFILES = navierstokes.o
    
    navierstokes: $(NAVIERSTOKES_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o navierstokes $(NAVIERSTOKES_OFILES)  $(LIBS)
    
    # ===== stokes non linear========================================================
    
    STOKESNONLIN_OFILES = stokesnonlin.o
    
    stokesnonlin: $(STOKESNONLIN_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o stokesnonlin $(STOKESNONLIN_OFILES)  $(LIBS)
    
    # ===== smitest ============================================================
    
    SMITEST_OFILES = smitest.o
    
    smitest: $(SMITEST_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o smitest $(INCLUDES) $(SMITEST_OFILES) $(SMI_LIB)
    
    # ===== mpccitest ============================================================
    
    MPCCITEST_OFILES = mpccitest.o SMIAdapter.o MpCCIAdapter.o
    
    mpccitest: $(MPCCITEST_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o mpccitest $(INCLUDES) $(MPCCITEST_OFILES) $(LIBS) $(MPCCI_LIB) $(SMI_LIB)
    
    # ===== mpcci1 ============================================================
    
    MPCCI1_OFILES = mpcci1.o SMIAdapter.o MpCCIAdapter.o
    
    mpcci1: $(MPCCI1_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o mpcci1 $(INCLUDES) $(MPCCI1_OFILES) $(LIBS) $(MPCCI_LIB) $(SMI_LIB)
    
    # ===== mpcci2 ============================================================
    
    MPCCI2_OFILES = mpcci2.o SMIAdapter.o MpCCIAdapter.o
    
    mpcci2: $(MPCCI2_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o mpcci2 $(INCLUDES) $(MPCCI2_OFILES) $(LIBS) $(MPCCI_LIB) $(SMI_LIB)
    
    # ===== periodic ============================================================
    
    PERIODIC_OFILES = periodic.o
    
    periodic: $(PERIODIC_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o periodic $(INCLUDES) $(PERIODIC_OFILES) $(LIBS)
    
    # ===== multigrid ============================================================
    
    MULTIGRID_OFILES = multigrid.o
    
    multigrid: $(MULTIGRID_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o multigrid $(INCLUDES) $(MULTIGRID_OFILES) $(LIBS)
    
    # ===== bmp2amdis ============================================================
    
    BMP2AMDIS_OFILES = bmp2amdis.o EasyBMP.o
    
    bmp2amdis: $(BMP2AMDIS_OFILES)
    	$(LINK) $(CPPFLAGS) $(LDFLAGS) -o bmp2amdis $(INCLUDES) $(BMP2AMDIS_OFILES) $(LIBS)
    
    # ===== parallelellipt =======================================================
    
    PARALLELELLIPT_OFILES = parallelellipt.o
    
    parallelellipt: $(PARALLELELLIPT_OFILES)
    	$(LINK) $(CPPFLAGS) -o parallelellipt $(PARALLELELLIPT_OFILES) $(LIBS) $(PARMETIS_LIB)
    
    # ===== parallelheat =======================================================
    
    PARALLELHEAT_OFILES = parallelheat.o
    
    parallelheat: $(PARALLELHEAT_OFILES)
    	$(LINK) $(CPPFLAGS) -o parallelheat $(PARALLELHEAT_OFILES) $(LIBS) $(PARMETIS_LIB)
    
    # ===== couple ============================================================
    
    COUPLE_OFILES = couple.o
    
    couple: $(COUPLE_OFILES)
    	$(LINK) $(CPPFLAGS) -o couple $(COUPLE_OFILES) $(LIBS)
    
    # ===== nonlin2 ============================================================
    
    NONLIN3_OFILES = nonlin3.o
    
    nonlin3: $(NONLIN3_OFILES)
    	$(LINK) $(CPPFLAGS) -o nonlin3 $(NONLIN3_OFILES) $(LIBS)
    
    # ===== neumann ============================================================
    
    NEUMANN_OFILES = neumann.o
    
    neumann: $(NEUMANN_OFILES)
    	$(LINK) $(CPPFLAGS) -o neumann $(NEUMANN_OFILES) $(LIBS)