# Makefile for optimization_fff
# NOTE: These settings are tuned for AMD64 architecture; they may
#       not be optimal for other architectures
#================================
# platform dependent definitions
#================================
CPP = /usr/bin/cpp
POSTCPP = ./postcpp

#-------------------------------------------------
# SDF for file I/O (uncomment appropriate choice)
#-------------------------------------------------
# Use SDF (requires preprocessor flag SDF)
#CPPFLAGS = -P -C -DSDF
#SDFHOME = /opt/sdf/0.74/intel-9.1
#SDFHOME = /opt/sdf/0.74/intel-10.1
#SDFHOME = /opt/sdf/0.74/gnu-4.1
#SDFHOME = /opt/sdf/0.74/sunstudio-12
#LIBMISC = -L$(SDFHOME)/lib -lsdf
# Do not use SDF
CPPFLAGS = -P -C
LIBMISC =

#--------------------
# Intel 9.1 compiler
#--------------------
#FC = ifort
#FOPT = -O3 -xW -ipo -static
#LOPT = -O3 -xW -ipo -static
##DEBUG = -pg
#DEBUG =
#--------------------
# Intel 10.1 compiler
#--------------------
#FC = ifort
#FOPT = -O2 -xW -ipo -ip
#LOPT = -O2 -xW -ipo -ip
##FOPT = -O3 -xW -ipo -ip
##FOPT = -shared-intel -O3 -xW -ipo -ip
##FOPT = -g -fpe0 -O3 -check all -warn all -traceback
##FOPT = -i-dynamic -O3 -mcmodel=medium
##LOPT = -O3 -xW -ipo -ip
##LOPT = -shared-intel -O3 -xW -ipo -ip
##DEBUG = -pg
#DEBUG = -check all -warn all -traceback
#-------------------
# gfortran compiler
#-------------------
FC = gfortran
FOPT = -march=opteron -ffast-math -funroll-loops -ftree-loop-linear -ftree-vectorize -msse3 -O3
LOPT = -march=opteron -ffast-math -funroll-loops -ftree-loop-linear -ftree-vectorize -msse3 -O3
#DEBUG = -pg
DEBUG =
#------------------------
# Sun Studio 12 compiler
#------------------------
#FC = sunf95
#FOPT = -w4 -fast -xipo=1
#LOPT = -w4 -fast -xipo=1
##DEBUG = -g
#DEBUG =

OMP_NUM_THREADS = 1

#==================================
# platform independent definitions
#==================================
FFLAGS = $(FOPT) $(DEBUG)
LFLAGS = $(LOPT) $(DEBUG) $(LIBMISC)

.SUFFIXES: .o .F90
.F90.o:
	$(CPP) $(CPPFLAGS) $< $(POSTCPP)/$*.f90
	$(FC) $(FFLAGS) $(POSTCPP)/$*.f90 -c

OPTIMIZATION_FFF = params-trial.o vars-trial.o io-trial.o \
                   fff_derivs-trial.o fff_operators-trial.o \
                   fff_evolve-trial.o optimization_fff-trial.o
optimization_fff-trial.x: $(OPTIMIZATION_FFF)
	$(FC) -o $@ $(OPTIMIZATION_FFF) $(LFLAGS)

#=========
# cleanup
#=========
OBJ=*.o
EXE=*.x
LST=$(POSTCPP)/*.f90
MOD=*.mod
IPO=*.il
clean:
	rm -f $(OBJ) $(EXE) $(LST) $(MOD) $(IPO)
