#=======================================================================
#
#
#  MAKEFILE FOR ZEUS-MP v1.5.x
#  vernaleo@astro.umd.edu
#
#-------------------  macro definitions  -------------------------------
#
ZMP_EXE    = ../exe/
ZMP_FC     = g77 -Wno-globals 
ZMP_OPTS3  = -c -O2 -I/usr/include  
ZMP_OPTS0  = -c -O0 -I/usr/include  
ZMP_CC     = gcc
ZMP_LDR    = ${ZMP_FC} -O2  
ZMP_LIB    = -L/home/vernaleo/hdf/lib -L/net/lam/lib -ldl -lnsl -lutil -lmfhdf -ldf -ljpeg -lz -llamf77mpi -lmpi -llam -lpthread
ZMP_CPP    = ${ZMP_FC}  -DTLB=128 -DUNROLL_I=4 -DUNROLL_J=4 -DUNROLL_K=4
#should set to number of processors +1 for fastest compilation
MAKEOPTS='-j2'
#
#--------------------  implicit rules  ---------------------------------
#
.SUFFIXES: .F .for .c .o

.for.o:
	${ZMP_CPP} -E $*.F | tr -s "" "\012" > $*.for
	${ZMP_FC} ${ZMP_OPTS3} $*.for -o $*.o

.F.o:
	${ZMP_CPP} -E $*.F | tr -s "" "\012" > $*.for
	${ZMP_FC} ${ZMP_OPTS3} $*.for -o $*.o

zeusmp.o:
	${ZMP_CPP} -E $*.F | tr -s "" "\012" > $*.for
	${ZMP_FC} ${ZMP_OPTS0} $*.for

.c.o:
	${ZMP_CC} ${ZMP_OPTS3} $<

#
#-------------------  Fortran object files  ----------------------------
#
#torus
#PHYS := ${PHYS} torus.o toruswrite.o
#rgjet with feedback
#PHYS := ${PHYS} rgjet.o feedback.o
#PHYS := ${PHYS} rgjet.o isofeed.o
#rgjet with delayed feedback
#PHYS := ${PHYS} rgjet.o delayed.o
#rgjet with mdot
#PHYS := ${PHYS} rgjet.o mdot.o
#rgjet
#PHYS := ${PHYS} rgjet.o jetoff.o
#PHYS := ${PHYS} rg_osc.o
#PHYS := ${PHYS} precess.o rgjet.o
#PHYS := ${PHYS} feed_prec.o rgjet.o
#rgjet latestart
#PHYS := ${PHYS} rgjet.o jetlate.o
#Perseus
#PHYS := ${PHYS} perseus.o mdot.o
#box
PHYS := ${PHYS} box.o
#PHYS := ${PHYS} blastw.o
#RT instability
#PHYS := ${PHYS} rt.o
#KH instability
#PHYS := ${PHYS} kh.o
#bubble
#PHYS := ${PHYS} bubble.o
#jet
#PHYS := ${PHYS} jetoff.o jet_bubble.o
#jet with wiggle
#PHYS := ${PHYS} jet_wiggle.o

#MY TEST CASES
#SOD TUBE
#PHYS := ${PHYS} sodtube.o
#Advection test
#PHYS := ${PHYS} advec.o
#Sednov blast wave
#PHYS := ${PHYS} sedblast.o

#STANDARD TEST CASES
#May not all work
#Blast test
#PHYS := ${PHYS} gravity.o gpbv.o blast.o
#stblast test
#PHYS := ${PHYS} gravity.o gpbv.o stblast.o
#Blast test?
#PHYS := ${PHYS} gen_ak.o gravity.o hdfpart.o gpbv.o ran1rk.o blast.o
#jet test
#PHYS := ${PHYS} gravity.o gpbv.o jet.o

#These base files should always be included
BASE = advx1.o advx2.o advx3.o avisc.o avisc_d.o bndyflgs.o bval3d.o bvalemf.o clocks.o ct.o dataio.o diverg.o empty.o findno.o forces.o forces_d.o fourn.o ggen.o grdv.o hdfall.o hsmoc.o intchk.o lorentz.o lorentz_d.o maxmin.o mnmx.o momx1.o momx2.o momx3.o movie.o msave2.o mget2.o mstart.o newdt.o newgrid.o newvg.o newx1.o newx2.o nudt.o pdv.o pdv_d.o pressure.o printd.o restart.o setup.o spenergy.o srcstep.o strtoi.o transprt.o tranx1.o tranx2.o tranx3.o tslice.o zeusmp.o writeout.o textdmp.o  linpck.o debug.o rad_loss.o kin_visc.o tconduct.o modulo.o pnewt.o nantest.o

FOBJ = ${BASE} ${PHYS}

#
#-------------------  C object files  ----------------------------------
#
COBJ = bcdflt.o checkin.o mmIsFinite.o mmIsNan.o
#
#-------------------  F PP object files  ----------------------------------
#
FOBJPP= ../pp/zmp_pp.o ../pp/diff.o ../pp/splice.o ../pp/hsp2.o
#
#---------------------  targets  ---------------------------------------
#

help:
	@echo Type "'make help'             to see this menu"
	@echo Type "'make compile'          to create executable"
	@echo Type "'make pp'               to create postprocessor"
	@echo Type "'make clean'            to remove '*.for' and '*.o' files"
	@echo Type "'make cleaner'          to remove '*.for' '*.o' zeusmp.def"
	@echo "                             ${ZMP_EXE}zmp_inp ${ZMP_EXE}zeusmp.x ${ZMP_EXE}zmp_pp.x"
	@echo Type "'make listing'          to create listing of code"
	@echo Type "'make all'              create executable and postprocessor"
#
#-----------------------------------------------------------------------
#
clean:
	\rm -f *.o *.for
	\rm -f ../pp/*.o ../pp/*.for
#
#-----------------------------------------------------------------------
#
cleaner: clean
	\rm -f zeusmp.def ${ZMP_EXE}zmp_inp ${ZMP_EXE}zeusmp.x ${ZMP_EXE}zmp_pp.x 
#
#-----------------------------------------------------------------------
#
listing:
	echo "cat Makefile zeusmp.def *.h *.F *.c > listing"
	cat Makefile zeusmp.def *.h *.F *.c > listing
#
#-----------------------------------------------------------------------
#
compile: ${ZMP_EXE}zeusmp.x

${ZMP_EXE}zeusmp.x: ${FOBJ} ${COBJ}
	${ZMP_LDR} -o ${ZMP_EXE}zeusmp.x ${FOBJ} ${COBJ} ${ZMP_LIB}
#
#-----------------------------------------------------------------------
#
pp: ${ZMP_EXE}zmp_pp.x

${ZMP_EXE}zmp_pp.x: ${FOBJPP}
	${ZMP_LDR} -o ${ZMP_EXE}zmp_pp.x ${FOBJPP} ${ZMP_LIB}
#
#-----------------------------------------------------------------------
#
all: compile pp
