#
# *********************************************************************
#                            GASpAR  makefile
# *********************************************************************
GHOME        = ../../src
vpath %.cpp  $(GHOME)/sem:$(GHOME)/comm:$(GHOME)/solvers:$(GHOME)/blas:$(GHOME)/utils:$(GHOME)/dd:$(GHOME)/io:$(GHOME)/mesh:$(GHOME)/exec:$(GHOME)/user
vpath %.hpp  $(GHOME)/sem:$(GHOME)/comm:$(GHOME)/solvers:$(GHOME)/blas:$(GHOME)/utils:$(GHOME)/dd:$(GHOME)/io:$(GHOME)/mesh:$(GHOME)/exec:$(GHOME)/user
vpath %.h  $(GHOME)/include:$(GHOME)/blas:../
vpath %.F  $(GHOME)/blas
#
.KEEP_STATE:
#
EXT          =
EXE          = gaspar
SOLVER       = BURGERS
#SOLVER       = NS
DEBUG        = no
MPI          = no
#######################################################################
#######################################################################
#
SHELL        = /bin/sh
CC           = pgCC
FC           = pgf77
CPP          = pgCC
LOADER       = pgCC
ifeq ($(MPI),yes)
  MPI_HOME     = /home/duaner/mpich2
  MPI_LIB_DIR  = -L$(MPI_HOME)/lib 
  MPI_INCL_DIR = -I$(MPI_HOME)/include
  MPI_LIBS     = -lmpich
  MPI_DEF      = -DG_MPI1 -DMPI_GENERIC_DEFAULT -DMPI_IO_DEFAULT -DMPICH_IGNORE_CXX_SEEK
else
  MPI_HOME     =
  MPI_LIB_DIR  =
  MPI_INCL_DIR =
  MPI_LIBS     =
  MPI_DEF      = 
endif
LIBS         = $(MPI_LIBS) -lpgftnrtl -lpgsse2 -lpthread  -lrt
H_INCL     = -I$(GHOME)/include -I$(GHOME)/sem -I$(GHOME)/comm -I$(GHOME)/blas -I$(GHOME)/solvers -I$(GHOME)/utils -I$(GHOME)/dd -I$(GHOME)/mesh -I$(GHOME)/io -I$(GHOME)/exec -I$(GHOME)/user $(MPI_INCL_DIR) 
LIB_DIR    = $(MPI_LIB_DIR)
#
#
GDEFINE    = -D_LINUX -D_INT32 -DG_MAIN_LOOP_CPUTIME 

ifeq ($(DEBUG),yes)
CFLAGS     = -c -g -w  
FFLAGS     = -c -g -w 
CPPFLAGS   = -c -g -w
EXEFLAGS   =  
else
CFLAGS     = -c -w 
FFLAGS     = -c -w 
CPPFLAGS   = -c -w  
EXEFLAGS   =        
#CFLAGS     = -c -w  -Minline -Knoieee -fast -Mvect=sse -Mnoscalarsse -Minline=levels:10 -Mflushz -Mcache_align -Mnounsafe_par_align 
#FFLAGS     = -c -w  -Minline -Knoieee -fast -Mvect=sse -Mnoscalarsse -Minline=levels:10 -Mflushz -Mcache_align -Mnounsafe_par_align
#CPPFLAGS   = -c -w  -Minline -Knoieee -fast -Mvect=sse -Mnoscalarsse -Minline=levels:10 -Mflushz -Mcache_align -Mnounsafe_par_align --no_auto_instantiation
#EXEFLAGS   =        -Minline -Knoieee -fast -Mvect=sse -Mnoscalarsse -Minline=levels:10 -Mflushz -Mcache_align -Mnounsafe_par_align
endif
#
#
ifeq ($(SOLVER),BURGERS)
  SOLVER_DEF = -DBURGERS 
else
  SOLVER_DEF = -DNAVIER_STOKES
endif

ifeq ($(DEBUG),yes)
  GGDEFINE   = $(GDEFINE) -DGARRAY_BOUNDS -DGLIST_BOUNDS $(MPI_DEF) $(SOLVER_DEF)
else
  GGDEFINE   = $(GDEFINE) $(MPI_DEF) $(SOLVER_DEF)
endif

HEADERS  = gindex.hpp  
#

OBJECTS= \
         gtvector.o gtmatrix.o point.o elem2d.o rectquad2d.o defquad2d.o      \
         gllbasis.o glbasis.o gtlist.o gtlistarray.o gttlist.o glinoplist.o   \
         gelemlist.o gfieldlist.o gobjlist.o gneighbor.o gmortar1d.o linop.o  \
         massop.o diagop.o schurlapop.o uzawalapop.o vectorop.o stokesop.o    \
         stokes.o ns.o laplacianop.o ilaplacianop.o helmholtzop.o gradop.o    \
         field2d.o pcblockjac_helm.o pcpointjac_helm.o pcblockjac_lap.o       \
         iconn_amr.o pcblockjac_plap.o siforce.o siforcelist.o guser.o        \
         param_reader.o burgers.o gtbuffer.o gobjbuffer.o gtmatbuffer.o       \
         mesh_reader.o apost_error.o gcomm.o glop.o cg.o mtk.o timer.o        \
         gaspar_out.o gaspar_restart.o gs.o gutils.o ntree_adapt.o vdbdata.o  \
         vdb.o gstream.o gbin_stream.o gbin_writer.o gbin_reader.o bitblock.o \
         gkeygen.o morton_keygen.o cff.o cff_wrappers.o glogger.o gmemmgr.o   \
         gpartitioner.o gpartmapper.o gpmelemid.o gpmsibpart.o ipoint.o ab.o  \
         gadvect.o gtbasislist.o ext.o gfieldgroup.o gifilter.o gcutils.o gaspar_t.o

.SUFFIXES: 
.SUFFIXES: .F .f .cpp .c .o $(SUFFIXES)
#
#
.cpp.o: $(HEADERS)
	$(CC) $(CPPFLAGS) $(GGDEFINE) $(H_INCL) $^
.c.o: 
	$(CC) $(CFLAGS) $(CDEFINE) $(H_INCL) $^
.F.o: 
	$(FC) $(FFLAGS) $(CDEFINE) $(H_INCL) $^ 
#
#
all:  $(OBJECTS) 
	$(LOADER) -o $(EXE) $(EXEFLAGS) $(LIB_DIR) $(OBJECTS) $(LIBS)
#
clean:
	rm -f $(OBJECTS) $(EXE)
