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

# Define the correct flags and compilers

MPIF90 = blah

ifeq ($(OMPI), 1)
        FFTW_HOME = ../libs/fftw-3.2.2/lib
        OPENMPI_HOME = /home/comb/ignis/openmpi/
        MPIF90 = $(OPENMPI_HOME)/bin/mpif90
        FCFLAGS = -i8 -r8 -c $(MPI_COMPILE_FLAGS) -I$(FFTW_HOME)/include -I$(OPENMPI_HOME)/include
        LDFLAGS = -i8 -r8 $(MPI_LD_FLAGS) -L$(FFTW_HOME)/lib -lfftw3 -L$(OPENMPI_HOME)/lib -lfftw3 -lm  -shared-intel
        FCFLAGS_F77 = -Mextend

        MODULES += m_openmpi.o
else
        FFTW_HOME = ../libs/fftw-3.2.2/lib
        MPIF90 = mpif90
        FCFLAGS = -i8 -r8 -c $(MPI_COMPILE_FLAGS) -I$(FFTW_HOME)/include
        LDFLAGS = -i8 -r8 $(MPI_LD_FLAGS) -L$(FFTW_HOME)/lib -lfftw3 -lm
        FCFLAGS_F77 = -Mextend

        MODULES += m_mpi.o
endif

# Franklin cluster, NERSC
ifeq ($(NERSC_HOST), franklin)
        MPIF90 = ftn

        FCFLAGS = -target=linux -i8 -r8 -O4 -c
        LDFLAGS = -target=linux -i8 -r8 -O4 -lfftw3
        FCFLAGS_F77 = -Mextend
endif

# Hopper cluster, NERSC
ifeq ($(NERSC_HOST), hopper)
        MPIF90 = ftn

        FCFLAGS = -target=linux -i8 -r8 -O4 -c
        LDFLAGS = -target=linux -i8 -r8 -O4 -lfftw3
        FCFLAGS_F77 = -Mextend
endif

# Yellowrail cluster, LANL
ifeq ($(HOSTNAME), yr-fe1.lanl.gov)
	MPIF90 = mpif90

	FCFLAGS = -i8 -r8 -O4 -c $(MPI_COMPILE_FLAGS) -I$(FFTW_INCLUDE)
	LDFLAGS = -i8 -r8 -O4 -lfftw3 $(MPI_LD_FLAGS) -L$(FFTW_HOME)/lib
endif

# Coyote cluster, LANL
ifeq ($(HOSTNAME), cy-c2.lanl.gov)
	MPIF90 = mpif90
	FCFLAGS = -i8 -r8 -O4 -c $(MPI_COMPILE_FLAGS) -I$(FFTW_INCLUDE)
	LDFLAGS = -i8 -r8 -O4 -lfftw3 $(MPI_LD_FLAGS) -L$(FFTW_HOME)/lib
endif

# Linux Cluster, CMU 
ifeq ($(HOSTNAME), karman.me.cmu.edu)
        FFTW_HOME = ../libs/fftw-3.2.2/lib
        MPIF90 = mpif90
        FCFLAGS = -i8 -r8 -c $(MPI_COMPILE_FLAGS) -I$(FFTW_HOME)/include
        LDFLAGS = -i8 -r8 $(MPI_LD_FLAGS) -L$(FFTW_HOME)/lib -lfftw3 -lm
        FCFLAGS_F77 = -Mextend

endif

# sparrow.stanford.edu, Mac OS X box
ifeq ($(HOSTNAME), sparrow.stanford.edu)
        MPIF90 = mpif90
        FCFLAGS = -fdefault-real-8 -fdefault-integer-8 -finit-integer=0 -finit-real=zero -c 
        FCFLAGS_F77 = -ffixed-form -ffixed-line-length-none
        FCFLAGS_F90 = -ffree-form -ffree-line-length-none
        LDFLAGS = -fdefault-real-8 -fdefault-integer-8 -finit-integer=0 -finit-real=zero -lmpi -lmpi -lfftw3 -lm
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)

