SHELL = /bin/sh

# Determining the appropriate paths;
ROOTDIR = $(HOME)/Turb2D
SRCDIR = $(ROOTDIR)/Source
OBJDIR = $(ROOTDIR)/obj
LIBDIR = $(ROOTDIR)/lib
BINDIR = $(ROOTDIR)/bin
SCRDIR = $(ROOTDIR)/Scripts
DOCDIR = $(ROOTDIR)/Documentation
MPGDIR = $(ROOTDIR)/dweezil


.SUFFIXES: .F90 .f90 .f .o .i .inc
SIZE_I=512
SIZE_J=512
SIZE=${SIZE_I}x${SIZE_J}
FFT_USED = FFTW
SRCDIR = $(shell pwd)/
CC = gcc
F90 = /usr/local/intel/compiler70/ia32/bin/ifc
F90_2_77 = /usr/local/intel/compiler70/ia32/bin/ifc
F77 = /usr/local/intel/compiler70/ia32/bin/ifc
LINKER = /usr/local/intel/compiler70/ia32/bin/ifc
RM = rm -f
# Use here "-openmp" if available;
PARALLEL=
##OPTIMIZE= -O --ocl --tp4 
OPTIMIZE= -O2 -xW -w95 -tpp7 -vec_report0

# Determining which FFT library is to be linked;
ifeq (${FFT_USED},SCILIB_CRAY)
  FFTLIB = -static -ljmfftc8
endif
ifeq (${FFT_USED},FFTW)
  FFTLIB = -L${LIBDIR} -ljmfftw -lrfftw -lfftw 
endif

# Determining the DWT library to be used;
DWTDIR = $(ROOTDIR)/wvlt
DWTLIB = -L${DWTDIR} -lwvlt 

# Determining if building parallel
ifeq (${PARALLEL},openmp)
	PARLIB= --openmp
	LIBOPT= -D"PARALLEL"
endif

# Preprocessor, Linker and Compiler flags;
CPP_FLAGS = -I./. -D"TURB2D_FFT_USED=${FFT_USED}" -D"LINUX" -D"LF95" -D"TURB2D_TAILLE_DU_CHAMP_I=${SIZE_I}" -D"TURB2D_TAILLE_DU_CHAMP_J=${SIZE_J}" -D"MPEG" -D"OVERINDEXING" -D"NDIAG_MAX=10"
F90_FLAGS = ${LD_FLAGS} -lsvml
LD_FLAGS  = -L/usr/lib ${FFTLIB} -lm ${PARLIB}

MODULES   = modules.F90
SOURCE	  = ${SRCDIR}source.F90
CFILES	  = ${SRCDIR}MovieOut.c
FILTER_FILES = RecurFilter.c MedianWltFilter.c SV_filter.c

all : a.out_${SIZE} clean

# building the main simulation code (SV_simul)
a.out_${SIZE} : $(addsuffix .o, $(basename ${MODULES} ${SOURCE})) MovieOut.o ${MODULES} $(SOURCE)
	${LINKER} $(addsuffix .o, $(basename  ${MODULES} ${SOURCE})) MovieOut.o ${F90_FLAGS} -o ${BINDIR}/a.out_${SIZE}

$(addsuffix .o, $(basename ${MODULES} ${SOURCE})) : ${MODULES} ${SOURCE}
	${F90} ${CPP_FLAGS} ${OPTIMIZE} ${PARLIB} -c ${MODULES} ${SOURCE}

MovieOut.o : ${CFILES}
	${CC} -O -c ${CFILES}

jmfftw : jmfftw2.c
	${CC} -O3 ${LIBOPT} -c jmfftw2.c
	ar rc ${LIBDIR}/libjmfftw.a jmfftw2.o
	ranlib ${LIBDIR}/libjmfftw.a

# building the filtering code (SV_filter)
SV_filter : $(addsuffix .o, $(basename ${FILTER_FILES})) ${FILTER_FILES}
	${CC} -O $(addsuffix .o, $(basename ${FILTER_FILES})) ${DWTLIB} ${LD_FLAGS} -o ${BINDIR}/SV_filter.exe

$(addsuffix .o, $(basename ${FILTER_FILES})) : ${FILTER_FILES}
	${CC} -O -I${DWTDIR} -D"DOUBLE_DWT"  -c ${FILTER_FILES}

clean :
	${RM} -f *.o *.mod *~

cleandist :
	${RM} -f *.o *.mod *~ ${BINDIR}/a.out* ${BINDIR}/SV* ${DWTDIR}/*.a ${DWTDIR}/*.o

# Archivizing the source files only
.PHONY : gohome
gohome :
	tar cvfh - *.F90 *.c *.i Makefile* params_*.dat | gzip -v > gohome.tar.gz

# Archivizing the complete tarball (including libraries)
.PHONY : tarball
tarball :
#	tar cvfh - *.F90 *.c *.i Makefile params_*.dat *.txt ${LIBDIR}/*.a dweezil/ ${DWTDIR}/*.[c,h,3] ${DWTDIR}/Makefile ${DOCDIR}/*.tex ${DOCDIR}/*.txt ../Test_case/*.tgz | gzip -v > sv.tar.gz
	cd ..; tar cvfh - Source/*.F90 Source/*.c Source/*.i Source/Makefile Source/params_*.dat lib/*.a wvlt/*.[c,h,3] wvlt/Makefile dweezil/* Documentation/*.tex Documentation/*.txt | gzip -v > Source/sv.tar.gz
#
.PHONY: all clean distclean


#Local Variables:
#mode:makefile
#End:
  
