########################################################
# Makefile for nonlinear parabolic solver routines.
# Assumes variable DATE is set in environment: for example,
# alias m '/usr/ccs/bin/make DATE=`/usr/bin/date +%y%m%d%H%M`'
# in your .cshrc file will do it.
########################################################

# Bourne shell.
SHELL = /bin/sh

# Clear suffix rules and allow only specified suffixes.
.SUFFIXES: 
.SUFFIXES: .f .o .x

# Directory for library installation.
LIB = ${HOME}/lib
# Directory for backing up source files.
SAVE=./old
#Output prefix for test run directories.
OUT=./out
#Figures.
FIG=./fig
#Tables.
TAB=./tab

# Fortran compiler.
FC=/opt/SUNWspro/bin/f77
# Options for Fortran compiler: -fast=optimize, -r8=double precision,
# -native optimizes for local host, -O5 is top level of optimization.
# -e extends line length to 132 characters.
FFLAGS=-fast -r8 -native -O5 -e
# Profiling with prof.
#FFLAGS=-fast -r8 -native -O5 -p
# Profiling with gprof.
#FFLAGS=-fast -r8 -native -O5 -pg
# Library flags for compilation.
LFLAGS=-L${LIB} -lpf -lvce -ldps -lfft -lblas -lmisc

# Archive maintainer.
AR=/usr/ccs/bin/ar
# Options for archive maintainer: -c -r=replace, -v=verbose.
ARFLAGS=-c -r -v

# Fortran source files for drivers.
DRV= pfa.f pfb.f
# Full pathnames of driver; may call from subdirectory.
PF=pfb.x

# Fortran source files for program subroutines.
SUB= as.f chkinp.f edeval.f er12m.f\
init_grid.f init_gsg.f init_gsr.f initisol.f init_ran.f init_wcr.f init_wsq.f\
init_rfs.f evb.f evx.f extpar.f\
eqn_tst.f eqn_cfp.f eqn_son.f eqn_wbm.f eqn_zon.f eqnieqn.f\
eqneval.f fs.f io.f mapcfinit.f mapsol.f mkmaps.f mknumfile.f\
norerr.f nr12m.f optstep.f\
pfcon.f pfgry.f plterr.f pltgrf.f sstart.f\
udeval.f wrtgrd.f

# Auxiliary files which should be copied to each result subdirectory
# and edited/run to produce printed or viewed output.
AUX = makefile README tex/tex.sh tex/lp.sh \
in/cfp in/son in/wbm in/wcr in/wsq in/zon \
tex/sonS.tex tex/sonP.tex tex/sonT.tex \
tex/zonS.tex tex/zonP.tex tex/zonT.tex \
tex/wbmC.tex tex/wbmS.tex tex/wbmP.tex \
tex/wcrC.tex tex/wcrS.tex tex/wcrP.tex \
tex/wsqC.tex tex/wsqS.tex tex/wsqP.tex

# Fortran object files.
OBJ=${SUB:.f=.o}

# Suffix rule for Fortran compiling.
.f.o:
	${FC} ${FFLAGS} -c $<

# Make library.
lib: ${OBJ}
	${AR} ${ARFLAGS} ${LIB}/libpf.a ${OBJ} ; \
	echo "Made library at ${DATE}" >> lib

#Make executable drivers.
pfb.x: pfb.o lib
	${FC} ${FFLAGS} -o pfb.x pfb.o ${LFLAGS}

tb.x: tb.o 
	${FC} ${FFLAGS} -o tb.x tb.o ${LFLAGS}

####################################################################
#Run examples.
####################################################################
# Production version template; copy makefile and source to storage dir
# so we can see the code which produced the output.

cfp: ${PF}
	-mkdir ${OUT}/cfp/${DATE} ; \
	echo '==========${OUT}/cfp/${DATE}==========' >> ${OUT}/cfp/log ; \
	vi -c $$ ${OUT}/cfp/log ; \
	cp ${AUX} ${PF} ${DRV} ${SUB} ${OUT}/cfp/${DATE} ; \
	cd ${OUT}/cfp/${DATE} ; \
	${PF} < cfp ; \
	imp cfp_*.ps ; \
	vi -c $$ ../log

son: ${PF}
	-mkdir ${OUT}/son/${DATE} ; \
	echo '==========${OUT}/son/${DATE}==========' >> ${OUT}/son/log ; \
	vi -c $$ ${OUT}/son/log ; \
	cp ${AUX} ${PF} ${DRV} ${SUB} ${OUT}/son/${DATE} ; \
	cd ${OUT}/son/${DATE} ; \
	${PF} < son ; \
	imp son_*.ps ; \
	vi -c $$ ../log

wbm: ${PF}
	-mkdir ${OUT}/wbm/${DATE} ; \
	echo '==========${OUT}/wbm/${DATE}==========' >> ${OUT}/wbm/log ; \
	vi -c $$ ${OUT}/wbm/log ; \
	cp ${AUX} ${PF} ${DRV} ${SUB} ${OUT}/wbm/${DATE} ; \
	cd ${OUT}/wbm/${DATE} ; \
	${PF} < wbm ; \
	imp wbm_*.ps ; \
	vi -c $$ ../log

wcr: ${PF}
	-mkdir ${OUT}/wcr/${DATE} ; \
	echo '==========${OUT}/wcr/${DATE}==========' >> ${OUT}/wcr/log ; \
	vi -c $$ ${OUT}/wcr/log ; \
	cp ${AUX} ${PF} ${DRV} ${SUB} ${OUT}/wcr/${DATE} ; \
	cd ${OUT}/wcr/${DATE} ; \
	${PF} < wcr ; \
	imp wcr_*.ps ; \
	vi -c $$ ../log

wsq: ${PF}
	-mkdir ${OUT}/wsq/${DATE} ; \
	echo '==========${OUT}/wsq/${DATE}==========' >> ${OUT}/wsq/log ; \
	vi -c $$ ${OUT}/wsq/log ; \
	cp ${AUX} ${PF} ${DRV} ${SUB} ${OUT}/wsq/${DATE} ; \
	cd ${OUT}/wsq/${DATE} ; \
	${PF} < wsq ; \
	imp wsq_*.ps ; \
	vi -c $$ ../log

zon: ${PF}
	-mkdir ${OUT}/zon/${DATE} ; \
	echo '==========${OUT}/zon/${DATE}==========' >> ${OUT}/zon/log ; \
	vi -c $$ ${OUT}/zon/log ; \
	cp ${AUX} ${PF} ${DRV} ${SUB} ${OUT}/zon/${DATE} ; \
	cd ${OUT}/zon/${DATE} ; \
	${PF} < zon ; \
	imp zon_*.ps ; \
	vi -c $$ ../log

# Version for development in main directory.
#zon: pfb.x
#	pfb.x < in.zon
#
####################################################################
# Utility targets.
####################################################################
# Write source, input and makefile to floppy disk.
wfd:
	-volcheck -v ; \
	tar cvf /vol/dev/aliases/floppy0 \
	./README ./makefile ./*.f ./in/* ./tex/* ; \
	eject floppy0

# Remove unnecessary files.
clean:
	rm -f *.a *.o *.x *.dvi *.aux *.log 

# Copy source, input and makefile to subdirectory and log changes.
save:
	echo '=============${SAVE}/${DATE}=============' >> ${SAVE}/log ; \
	vi -c $$ ${SAVE}/log ; \
	mkdir ${SAVE}/${DATE} ; \
	for j in ${AUX} ${DRV} ${SUB} ; do \
	   cp $$j ${SAVE}/${DATE} ; \
	echo "Saving $$j to ${SAVE}/${DATE}/$$j" ; \
	done

########################################################
# End of makefile for pf routines.
########################################################
