# Makefile with logic in it.  For different hosts runs different things

# Define the correct flags and compilers

MPIF90 = blah

        FFTW_HOME = $(FFTW_DIR)
        MPIF90 = mpif90
        FCFLAGS = -Ofast -march=native -Wall -fdefault-integer-8 -fdefault-double-8 -fdefault-real-8 -c $(MPI_COMPILE_FLAGS) -I$(FFTW_HOME)/include
        LDFLAGS = -Ofast -march=native -Wall -fdefault-integer-8 -fdefault-double-8 -fdefault-real-8 $(MPIPP_LD_FLAGS) $(MPI_LD_FLAGS) -L$(FFTW_HOME)/lib -lfftw3 -lm
        FCFLAGS_F77 =

        MODULES += m_openmpi.o


# compile for mpiP MPI Profiling
ifeq ($(PROFILER), mpiP)
        FFTW_HOME = $(FFTW_DIR)
        MPIF90 = mpif90
        FCFLAGS = -Ofast -march=native -Wall -fdefault-integer-8 -fdefault-double-8 -fdefault-real-8 -c $(MPI_COMPILE_FLAGS) -I$(FFTW_HOME)/include
        MPIP_LD_FLAGS = -L$(MPIP_DIR)/lib -lmpiP -lm -lbfd -liberty -lunwind
        LDFLAGS = -Ofast -march=native -Wall -fdefault-integer-8 -fdefault-double-8 -fdefault-real-8 $(MPIPP_LD_FLAGS) $(MPI_LD_FLAGS) -L$(FFTW_HOME)/lib -lfftw3 -lm
        FCFLAGS_F77 =

endif

# tau source instrumentation
ifeq ($(PROFILER), tau_source)
        FFTW_HOME = $(FFTW_DIR)
        MPIF90 = tau_f90.sh
        FCFLAGS = -Ofast -march=native -Wall -fdefault-integer-8 -fdefault-double-8 -fdefault-real-8 -c $(MPI_COMPILE_FLAGS) -I$(FFTW_HOME)/include
        LDFLAGS = -Ofast -march=native -Wall -fdefault-integer-8 -fdefault-double-8 -fdefault-real-8 $(MPI_LD_FLAGS) -L$(FFTW_HOME)/lib -lfftw3 -lm
        FCFLAGS_F77 =

endif


# Program name
PROG    = hit3d.x

# Modules
MODULES += \
	m_io.o\
	m_parameters.o\
	m_work.o\
	m_fields.o\
	m_timing.o\
	x_fftw.o\
	m_filter_xfftw.o\
	m_particles.o\
	m_stats.o\
	m_force.o\
	m_rand_knuth.o\
	m_les.o\
	RANDu.o\
	m_hit_result.o\
	m_compact.o\
	m_fdm_calc.o

# Objects
OBJ     = main.o\
	begin_new.o\
	begin_restart.o\
	dealias_all.o\
	get_file_ext.o\
	init_velocity.o\
	init_scalars.o\
	io_write_4.o\
	my_dt.o\
	my_exit.o\
	pressure.o\
	restart_io.o\
	rhs_velocity.o\
	rhs_scalars.o\
	velocity_rescale.o\
	write_tmp4.o\
	gather_tmp4.o\
	gather_4.o\
	write_stats.o


# -------------------------------------------------------
# link

$(PROG):  $(MODULES) $(OBJ)
	$(MPIF90) $(MODULES) $(OBJ) -o $(PROG) $(LDFLAGS)
# -------------------------------------------------------
# compile

$(OBJ): $(MODULES) 

%.o: %.f
	$(MPIF90) $(FCFLAGS) $(FCFLAGS_F77)  $<

%.o: %.f90
	$(MPIF90) $(FCFLAGS) $<

clean:
	rm -f *.o *.mod $(PROG)

