#=======================================================================
#
#
#  MAKEFILE FOR ZEUS-MP
#
#
#-------------------  macro definitions  -------------------------------
#
ZMP_EXE    = ../exe/
ZMP_FC     = ifort -static
ZMP_OPTS3  = -c -O2 -axW -I/usr/include -I/n/thales2/vernaleo/lam/include
ZMP_OPTS0  = -c -O0 -I/usr/include -I/n/thales2/vernaleo/lam/include
ZMP_CC     = icc
ZMP_LDR    = ${ZMP_FC} -O2 -axW -I/n/thales2/vernaleo/lam/include
ZMP_LIB    = -L/n/thales2/vernaleo/hdf/lib -L/n/thales2/vernaleo/lam/lib -ldl -lnsl -lutil -lmfhdf -ldf -ljpeg -lz -llamf77mpi -lmpi -llam -lpthread
ZMP_CPP    = ${ZMP_FC} -O2 -axW -DTLB=128 -DUNROLL_I=4 -DUNROLL_J=4 -DUNROLL_K=4
#
#--------------------  implicit rules  ---------------------------------
#
.SUFFIXES: .F .f .c .o

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

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

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

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

.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
#rgjet with mdot
#PHYS := ${PHYS} rgjet.o mdot.o
#rgjet
#PHYS := ${PHYS} rgjet.o jetoff.o
#rgjet latestart
#PHYS := ${PHYS} rgjet.o jetlate.o
#box
#PHYS := ${PHYS} box.o
#R-T instability
PHYS := ${PHYS} rt.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 tets?
#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

FOBJ = ${BASE} ${PHYS}

#
#-------------------  C object files  ----------------------------------
#
COBJ = bcdflt.o checkin.o mmIsFinite.o mmIsNan.o
#
#---------------------  targets  ---------------------------------------
#
help:
	@echo Type "'make help'             to see this menu"
	@echo Type "'make compile           to create executable
	@echo Type "'make clean'            to remove '*.f' and '*.o' files"
	@echo Type "'make cleaner'          to remove '*.f' '*.o' zeusmp.def"
	@echo "                             ${ZMP_EXE}zmp_inp ${ZMP_EXE}zeusmp.x"
	@echo Type "'make listing'          to create listing of code"
#
#-----------------------------------------------------------------------
#
clean:
	echo "\rm -f *.o *.f"
	\rm -f *.o *.f
#
#-----------------------------------------------------------------------
#
cleaner:
	echo "\rm -f *.o *.f zeusmp.def ${ZMP_EXE}zmp_inp ${ZMP_EXE}zeusmp.x"
	\rm -f *.o *.f zeusmp.def ${ZMP_EXE}zmp_inp ${ZMP_EXE}zeusmp.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}

#
#----------------------  dependencies  ---------------------------------
#
advx1.o: advx1.F bndry.h clocks.h field.h grid.h mpicom.h param.h root.h zeusmp.def 

advx2.o: advx2.F bndry.h clocks.h field.h grid.h mpicom.h param.h root.h zeusmp.def 

advx3.o: advx3.F bndry.h clocks.h field.h grid.h mpicom.h param.h root.h zeusmp.def 

avisc.o: avisc.F field.h grid.h param.h root.h scratch.h zeusmp.def 

avisc_d.o: avisc_d.F bndry.h clocks.h field.h grid.h mpicom.h param.h root.h zeusmp.def 

#blast.o: blast.F bndry.h cons.h field.h grid.h mod_names.h mpicom.h opac.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def 
#jet.o: jet.F bndry.h cons.h field.h grid.h mod_names.h mpicom.h opac.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def 
#stblast.o: stblast.F bndry.h cons.h field.h grid.h mod_names.h mpicom.h opac.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def 

bubble.o: bubble.F bndry.h cons.h field.h grid.h mod_names.h mpicom.h opac.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def

writeout.o: writeout.F bndry.h cons.h field.h grid.h mod_names.h mpicom.h opac.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def 

kin_visc.o: kin_visc.F bndry.h cons.h field.h grid.h mod_names.h mpicom.h opac.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def 

rad_loss.o: rad_loss.F bndry.h cons.h field.h grid.h mod_names.h mpicom.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def 

jetoff.o: jetoff.F bndry.h cons.h field.h grid.h mod_names.h mpicom.h opac.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def 

rgjet.o: rgjet.F bndry.h cons.h field.h grid.h mod_names.h mpicom.h opac.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def

jet_wiggle.o: jetoff.F bndry.h cons.h field.h grid.h mod_names.h mpicom.h opac.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def

tconduct.o: rgjet.F bndry.h cons.h field.h grid.h mod_names.h mpicom.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def

jet_bubble.o: jet_bubble.F bndry.h cons.h field.h grid.h mod_names.h mpicom.h opac.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def 

bndyflgs.o: bndyflgs.F bndry.h grid.h param.h root.h zeusmp.def 

bval3d.o: bval3d.F bndry.h grid.h mpicom.h param.h root.h zeusmp.def 

bvalemf.o: bvalemf.F bndry.h grid.h mpicom.h param.h root.h zeusmp.def 

clocks.o: clocks.F clocks.h mod_names.h param.h zeusmp.def 

ct.o: ct.F field.h grid.h mpicom.h param.h root.h scratch.h zeusmp.def 

dataio.o: dataio.F mpicom.h param.h root.h zeusmp.def 

diverg.o: diverg.F grid.h param.h zeusmp.def 

empty.o: empty.F zeusmp.def 

findno.o: findno.F zeusmp.def 

forces.o: forces.F cons.h field.h gravity.h grid.h mpicom.h opac.h param.h radexp.h root.h scratch.h zeusmp.def 

forces_d.o: forces_d.F bndry.h clocks.h field.h grid.h mpicom.h param.h radexp.h root.h scratch.h zeusmp.def 

fourn.o: fourn.F zeusmp.def 

#this was commented out for jet case
#gen_ak.o: gen_ak.F zeusmp.def 

ggen.o: ggen.F bndry.h grid.h mpicom.h param.h root.h scratch.h zeusmp.def 

gravity.o: gravity.F bndry.h field.h gravity.h grid.h mgmpi.h mpicom.h param.h root.h scratch.h zeusmp.def 

grdv.o: grdv.F cons.h field.h grid.h mpicom.h opac.h param.h radexp.h root.h zeusmp.def 

hdfall.o: hdfall.F cons.h field.h grid.h mpicom.h param.h root.h scratch.h zeusmp.def 

#hdfpart.o: hdfpart.F cons.h field.h grid.h mpicom.h param.h root.h scratch.h zeusmp.def 

hsmoc.o: hsmoc.F field.h grid.h mpicom.h param.h root.h scratch.h zeusmp.def 

intchk.o: intchk.F clocks.h mod_names.h mpicom.h param.h root.h zeusmp.def 

lorentz.o: lorentz.F field.h grid.h param.h root.h scratch.h zeusmp.def 

lorentz_d.o: lorentz_d.F bndry.h clocks.h field.h grid.h mpicom.h param.h root.h scratch.h zeusmp.def 

maxmin.o: maxmin.F param.h zeusmp.def 

mnmx.o: mnmx.F grid.h param.h scratch.h zeusmp.def 

momx1.o: momx1.F field.h grid.h param.h root.h scratch.h zeusmp.def 

momx2.o: momx2.F field.h grid.h param.h root.h scratch.h zeusmp.def 

momx3.o: momx3.F field.h grid.h param.h root.h scratch.h zeusmp.def 

movie.o: movie.F field.h grid.h param.h root.h zeusmp.def 

msave2.o: msave2.F bndry.h field.h gravity.h grid.h mpicom.h param.h root.h zeusmp.def 

mget2.o: mget2.F bndry.h field.h gravity.h grid.h mpicom.h param.h root.h zeusmp.def

mstart.o: mstart.F mpicom.h param.h root.h zeusmp.def 

newdt.o: newdt.F field.h grid.h param.h root.h scratch.h zeusmp.def 

newgrid.o: newgrid.F grid.h param.h root.h zeusmp.def 

newvg.o: newvg.F bndry.h field.h grid.h param.h root.h zeusmp.def 

newx1.o: newx1.F grid.h param.h root.h scratch.h zeusmp.def 

newx2.o: newx2.F grid.h param.h root.h scratch.h zeusmp.def 

nudt.o: nudt.F bndry.h clocks.h field.h grid.h mpicom.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def 

pdv.o: pdv.F field.h grid.h param.h root.h zeusmp.def 

pdv_d.o: pdv_d.F bndry.h clocks.h field.h grid.h mpicom.h param.h root.h zeusmp.def 

gpbv.o: gpbv.F bndry.h field.h gravity.h grid.h mpicom.h param.h root.h scratch.h zeusmp.def 

pressure.o: pressure.F field.h grid.h mpicom.h param.h root.h zeusmp.def 

printd.o: printd.F cons.h field.h gravity.h grid.h mpicom.h param.h radexp.h root.h zeusmp.def 

#ran1rk.o: ran1rk.F zeusmp.def 

restart.o: restart.F bndry.h cons.h field.h gravity.h grid.h mgmpi.h mpicom.h opac.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def 

setup.o: setup.F bndry.h cons.h field.h gravity.h grid.h mgmpi.h mpicom.h opac.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def 

spenergy.o: spenergy.F field.h grid.h mpicom.h param.h root.h zeusmp.def 

srcstep.o: srcstep.F bndry.h clocks.h cons.h field.h grid.h mpicom.h opac.h param.h radexp.h radiation.h root.h scratch.h zeusmp.def 

strtoi.o: strtoi.F zeusmp.def 

transprt.o: transprt.F bndry.h field.h grid.h param.h root.h scratch.h zeusmp.def 

tranx1.o: tranx1.F bndry.h field.h grid.h mpicom.h param.h root.h scratch.h zeusmp.def 

tranx2.o: tranx2.F bndry.h field.h grid.h mpicom.h param.h root.h scratch.h zeusmp.def 

tranx3.o: tranx3.F bndry.h field.h grid.h mpicom.h param.h root.h scratch.h zeusmp.def 

tslice.o: tslice.F cons.h field.h gravity.h grid.h mpicom.h param.h radexp.h root.h scratch.h zeusmp.def 

zeusmp.o: zeusmp.F clocks.h field.h gravity.h grid.h impsoln.h mod_names.h mpicom.h options.h param.h radiation.h root.h scratch.h zeusmp.def 

textdmp.o: textdmp.F bndry.h cons.h field.h grid.h param.h radexp.h root.h scratch.h zeusmp.def 

linpck.o: linpck.F param.h zeusmp.def 

bcdflt.o: bcdflt.c zeusmp.def 

checkin.o: checkin.c zeusmp.def 

#fftw_ps.o: fftw_ps.c 

#fftwplan.o: fftwplan.c 

mmIsFinite.o: mmIsFinite.c 

mmIsNan.o: mmIsNan.c 
