SHELL=/bin/sh

SRCS= open_files.f read_params.f setloc.f metricin.f metric_bc.f initial.f \
      cofin.f cofmg.f setlcp.f tick.f getcfl.f salt.f sitern.f snup.f \
      bndsp.f approx_fact.f source.f source0.f bndup.f output.f \
      trdgs.f trdgsp.f trdgv.f chkcf.f solver.f ucorr.f utosst.f \
      check.f presr.f bcpg.f relax.f resid.f rstrct.f interp.f \
      bndp.f trdiag.f trdgp.f energy.f indexx.f \
      compute_sus.f updateu.f initp.f upperbc.f \
      intrpl.f init_vel.f update_p.f hydropressure.f \
      u_radiate.f s_radiate.f advect.f advectp.f getzeta.f limit.f \
      extract.f filter.f main.f saltled.f

OBJS= open_files.o read_params.o setloc.o metricin.o metric_bc.o initial.o \
      cofin.o cofmg.o setlcp.o tick.o getcfl.o salt.o sitern.o snup.o \
      bndsp.o approx_fact.o source.o source0.o bndup.o output.o \
      trdgs.o trdgsp.o trdgv.o chkcf.o solver.o ucorr.o utosst.o \
      check.o presr.o bcpg.o relax.o resid.o rstrct.o interp.o \
      bndp.o trdiag.o trdgp.o energy.o indexx.o \
      compute_sus.o updateu.o initp.o upperbc.o \
      intrpl.o init_vel.o update_p.o hydropressure.o \
      u_radiate.o s_radiate.o advect.o advectp.o getzeta.o limit.o \
      extract.o filter.o main.o saltled.o

# Tunable parameters
#
# CF		Name of the fortran compiling system to use
# LDFLAGS	Flags to the loader
# LIBS		List of libraries
# CMD		Name of the executable
#
FC =		f77 
#FC = /usr/local/pgcc/bin/g77
# Before using pgf77, need to setenv PGI /usr/local/pgi and set path = ( $PGI/linux86/bin $path )
#FC = /usr/local/pgi/linux86/bin/pgf77 
#FC = fort
CMD =		iw.go
OPT 	=       -O -w -malign-double -ffloat-store -fforce-addr -funroll-loops -fomit-frame-pointer 
#OPT = -fast -DNO_EXIT -Msecond_underscore -lm -pc 64 -Mconcur -Mx,0,0x1000 -Kieee
#OPT = -O5 -arch ev6 -fast -w -transform_loops -tune ev6
FFLAGS 	= 	$(OPT) $(DBG) 
#LIBS    =       -lcxml
LIBS    = 
TGZDIR = /home/fringer/codedumps
BKPDIR = /home/fringer/codedumps/dump_`date +%m%d%y`
DATADIR = `cat dirname.txt | awk -F\' '{print $$2}'`
DUMPNUM = `cat $(TGZDIR)/dumpnum.txt`

# Lines from here on down should not need to be changed.  They are the
# actual rules which make uses to build a.out.
#
all:		$(CMD) ginit pinit met

$(CMD):		$(OBJS) 
		$(FC) $(LIBS) $(FFLAGS) -o $(@) $(OBJS)

backup:
		mkdir $(BKPDIR)
		cp $(SRCS) $(BKPDIR)/.
		cp *.inc $(BKPDIR)/.
	        cp physical_init.f $(BKPDIR)/.
	 	cp grid_init.f $(BKPDIR)/.
	 	cp metric.f $(BKPDIR)/.
		cp batch.c $(BKPDIR)/.
		cp dirname.txt $(BKPDIR)/.
		cp batch.txt $(BKPDIR)/.
		cp makefile $(BKPDIR)/.
		mkdir $(BKPDIR)/data
		cp $(DATADIR)"datain" $(BKPDIR)/data/.
		cp $(DATADIR)"grid_points.dat" $(BKPDIR)/data/.
		cp $(DATADIR)"datain_orig" $(BKPDIR)/data/.
		cp $(DATADIR)"init" $(BKPDIR)/data/.
	        echo "'data/'" > $(BKPDIR)/dirname.txt
		tar cvf $(BKPDIR).tar $(BKPDIR)
		gzip $(BKPDIR).tar
		mv $(BKPDIR).tar.gz $(BKPDIR)_$(DUMPNUM).tar.gz
		scp $(BKPDIR)_$(DUMPNUM).tar.gz fluid:codedumps/.
		expr  `cat $(TGZDIR)/dumpnum.txt` + 1 > $(TGZDIR)/dumpnum.txt
		rm -rf $(BKPDIR)
	
$(OBJS): 	gsize.inc

clean:
	-rm -f *.o iw.go pinit ginit met batch bench

superclean: 
	-rm -f *~ #*#

# Modes files
MODES_SRCS = eispack.f modes.f
MODES_OBJS = eispack.o modes.o

modes:	$(MODES_OBJS) $(P_OBJS) pinit ginit
	$(FC) $(FFLAGS) -o $(@) $(MODES_OBJS)

# Grid Points and Free surface
G_SRCS = grid_init.f
G_OBJS = grid_init.o

ginit:	$(G_OBJS) gsize.inc
	$(FC) $(FFLAGS) -o $(@) $(G_OBJS)

$(G_OBJS): gsize.inc

# Metrics
M_SRCS = metric.f
M_OBJS = metric.o

met:	$(M_OBJS) gsize.inc
	$(FC) $(FFLAGS) -o $(@) $(M_OBJS)

$(M_OBJS): gsize.inc

# Physical initialization
P_SRCS = physical_init.f
P_OBJS = physical_init.o

pinit:	$(P_OBJS) $(G_OBJS)
	$(FC) $(FFLAGS) -o $(@) $(P_OBJS)

$(P_OBJS): gsize.inc

# Batch processing
batch:  batch.c
	gcc batch.c -o batch -lm

# Bench Marking
BOBJS = bench.o
bench: $(BOBJS)
	$(FC) $(FFLAGS) -o $(@) $(BOBJS)