############################################
# Program To Fit Finnis-Sinclair Potential #
#                                          #
#           V1.0  May 13 2000  Ju Li (MIT) #
############################################

DIR = $(notdir ${PWD}) 
PROG = z
HEADER = $(PROG).h
COBJS = $(PROG).o targets.o elastic_constants.o info.o
FOBJS =
OBJS  = $(COBJS) $(FOBJS)
CSRCS = $(addsuffix .c, $(basename ${COBJ}))
FSRCS = $(addsuffix .f, $(basename ${FOBJ}))
SRCS  = $(HEADER) $(CSRCS) $(FSRCS)

USE_SYSTEM_LIB = -lm
USE_MY_LIB = -lMin -lAtoms -lVecMat3 -lVecMat -lIO -lScalar -lTimer \
	-llapack -lblas
SHELL = sh
GDBTMP = /tmp/${PROG}.gdb

INPUT = input
STACKSRCS = rep
STACKHEAD =
STACKDIR = Stack/
STACKLEN = 20

ifndef SYS
 SYS = Linux
endif
ifdef INC_PATH
 MY_INC_DIR = $(INC_PATH)
else
 MY_INC_DIR = ~/Co/Include
endif
ifdef LIB_PATH
 MY_LIB_DIR = $(LIB_PATH)
else
 MY_LIB_DIR = ~/Co/Lib
endif

EXE_MACHINE = mmm   # powerful but stupid execution machine
# networked source development directory [mount-point at execution machine]
CODE_BASE = /home/Moon/Z/
# reliable local directory to which source will be transfered and compiled
EXE_MACHINE_BASE = /usr/people/liju99/Z/

ifeq (${HOST}, $(EXE_MACHINE))
 CC = cc
 FC = f77
 OPT = -64 -r10000 -TARG:proc=r10000:platform=IP27 -O3\
  -LNO:opt=1:fission=2:fusion=2:cs1=32K:cs2=4M:cs2=1024M:ou_further=3:pwr2=ON\
  -OPT:Olimit=0:div_split=ON:roundoff=3:fast_exp=ON:fast_sqrt=ON
 BACKUPDIRS = /home/Moon/Bak /usr/people/liju99/Bak
else
#  CC = /usr/local/pgcc/bin/gcc #
#  FC = /usr/local/pgcc/bin/g77 #
#  OPT = -O6 -mpentiumpro -march=pentiumpro -mmx \ #
#        -funroll-all-loops -inline-functions #
 CC = icc -w
 FC = ifc -static -nofor_main -w
 LD = icc -static
 CCFLAGS = -O2 -axKWNBP
 USE_MY_LIB = -lMin -lPhonon -lAtoms -lVecMat3 -lVecMat -lIO -lSSpectral \
	-lScalar -lTimer -lsrfftw -lsfftw -L/opt/intel/mkl70/lib/32/ \
	-lmkl_lapack -lmkl_ia32 -lguide -lsvml -ldl -lpthread 
 BACKUPDIRS = /home/Moon/Bak /Home/Sun/Bak
endif

FLAG = -D_$(SYS) ${OPT} -I${MY_INC_DIR}
LDFLAG = ${SYSTEM_LIB_FLAG} ${USE_SYSTEM_LIB} -L${MY_LIB_DIR} ${USE_MY_LIB}

.PHONY:	all  d debug  r run  c clean  b backup  t transfer

all:	run

d:	debug
debug:
	@export CC=gcc; export FC=g77; export OPT=-g; \
	make --environment-overrides --no-print-directory \
	`echo "${MAKECMDGOALS}" | sed -e 's/^d //' | sed -e 's/^d$///' `; \
	exit 99

r:	run
run:	$(PROG)
	@if [ ! -d ${STACKDIR} ]; then mkdir ${STACKDIR}; fi; \
	count=${STACKLEN}; \
	while [ $$count -ge 2 ]; do \
	 count=`expr $$count - 1`; \
	 if [ -e ${STACKDIR}${STACKHEAD}$$count ]; then \
	  mv ${STACKDIR}${STACKHEAD}$$count \
	     ${STACKDIR}${STACKHEAD}`expr $$count + 1`;\
	 fi; \
	done; \
	if [ -e ${STACKSRCS} ]; then \
	 cp ${STACKSRCS} ${STACKDIR}${STACKHEAD}$$count; \
	fi; \
	echo " "; \
	echo ========== Running \"$(PROG) \< $(INPUT)\" ==========; \
	if [ "${OPT}" = "-g" ] ; then \
	 echo run \< $(INPUT) > ${GDBTMP}; gdb ./$(PROG) -x ${GDBTMP}; \
	else \
	 ./$(PROG) < $(INPUT); \
	fi; \
	echo ======== Done running \"$(PROG) \< $(INPUT)\" =======; \
	echo ' '

c:	clean
clean:
	@echo
	-rm -f $(PROG); \
	rm -f a.out; \
	rm -f *~; \
	rm -f \#* .\#*; \
	rm -f *.o *.O
	@echo

b:	backup
backup: clean
	@tmp=/tmp/backupto.tar; \
	echo "taring the directory $(PWD) ..."; \
	dir=`echo $(PWD) | sed -e "s/.*\///g"`; \
	cd ..; \
	echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%; \
	tar cvf $$tmp $$dir/* \
	`ls -d $$dir/.* | sed -e "s/$$dir\/\.\.$$//" | \
	sed -e "s/$$dir\/\.$$//"`; \
	echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%; \
	echo compressing $$tmp with gzip ...; \
	gzip --verbose -c $$tmp > $$tmp.gz; \
	echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%; \
	nbytes=`ls -l $$tmp.gz | sed -e 's/  */ /g' | cut -d' ' -f 5`; \
	echo $$tmp.gz = $$nbytes bytes.; \
	for backup in $(BACKUPDIRS); do \
	 if [ -d $$backup ]; then \
	  echo ' '; \
	  echo "copying $$tmp.gz to $$backup/$$dir.tar.gz ..."; \
	  cp -i $$tmp.gz $$backup/$$dir.tar.gz; \
	 fi; \
	done; \
	echo

t:	transfer
transfer:
ifeq (${HOST}, $(EXE_MACHINE))
	-cd $(CODE_BASE); \
	cp -f Makefile ${SRCS} $(INPUT) $(EXE_MACHINE_BASE); \
	cd $(EXE_MACHINE_BASE); chmod 400 ${SRCS};
else
	@-echo -e "\nCurrent machine is ${HOST} ..."; \
	echo "================ trying to connect $(EXE_MACHINE)\
	via RSH ================"; \
	rsh mmm "cd $(CODE_BASE); \
	cp -f Makefile ${SRCS} $(INPUT) $(EXE_MACHINE_BASE); \
	cd $(EXE_MACHINE_BASE); chmod 400 ${SRCS}; \
	echo  -----------------------------------------------------------; \
	echo The current time on $(EXE_MACHINE) is'   '`date`; \
	echo And in $(EXE_MACHINE_BASE) ...; \
	ls -l Makefile ${SRCS} $(INPUT)"; \
	echo ===============================================================;\
	echo If the two times do not agree, run the following:;\
	echo % telnet mmm -l $(USER);\
	echo -e "% cd $(CODE_BASE); make t\n"
endif


%.o:	%.c ${HEADER} Makefile
	${CC} ${FLAG} -c $< -o $@

%.O:	%.f ${HEADER} Makefile
	${FC} ${FLAG} -c $< -o $@

$(PROG):$(OBJS)  Makefile
	${FC} ${FLAG} -o $(PROG) $(OBJS) $(LDFLAG)
