###################################################################
#INSTALL_DIR = /users/software/mpich-1.2.7p1_intel-10.1_em64_ssh
INSTALL_DIR = /users/software/mpich2-1.4.1p1_intel
#INSTALL_DIR = /users2/emilial/UNRES/new_F90/source/unres_MD-M

FC= ${INSTALL_DIR}/bin/mpif90

OPT =  -O3 -ip 

#FFLAGS = -fpp -c ${OPT}  -I$(INSTALL_DIR)/include
#-mcmodel large -check arg_temp_created -heap-arrays  -recursive
FFLAGS  = -fpp -c ${OPT} #-auto
#FFLAGS  = -fpp -c -g -CA -CB -auto -zero -traceback -u -check pointer -check uninit
FFLAGSm = -fpp -c -O #-g -CA -CB -auto -zero -traceback -u -check uninit -check pointer
#FFLAGSm = -fpp -c -g -CA -CB -auto -zero -traceback -u -check pointer -check uninit
#FFLAGS_ = -fpp -c -g -CA -CB -zero -traceback -u -check pointer -check uninit
FFLAGS1 = -fpp -c -g -CA -CB #-auto #-zero -traceback -u -check pointer -check uninit
#FFLAGS1 = -fpp -c -g -CA -CB -auto -zero -traceback -u -check pointer -check uninit
FFLAGS2 = -fpp -c -g -O0  #-I$(INSTALL_DIR)/include
#FFLAGS2 = -fpp -c -g -O0  #-I$(INSTALL_DIR)/include
FFLAGSE = -fpp -c ${OPT} #-g -CA -CB -auto -zero -traceback -u -check uninit -check pointer -O3 -ipo -opt_report #-g -CA -CB -auto -zero -traceback -u -check pointer -check uninit #-I$(INSTALL_DIR)/include 
#FFLAGSE = -fpp -c -g -CA -CB -auto -zero -traceback -u -check pointer -check uninit #-O3 -ipo -opt_report

#CPPFLAGS = -DPROCOR -DLINUX -DPGI -DISNAN 
# -lmpl only necessary for mpich2-1.4.1p1_intel
#LIBS = -L$(INSTALL_DIR)/lib -lmpich xdrf/libxdrf.a -lmpl

ARCH = LINUX
PP = /lib/cpp -P

#EXE_FILE = unres_MD-M_E0LL2Y_F90_EL.exe


all: no_option
	@echo "Specify force field: GAB, 4P or E0LL2Y; or NOMPI"

.SUFFIXES: .f90
.f90.o:
	${FC} ${FFLAGS} ${CPPFLAGS} $*.f90

objects = xdrf/*.o names.o io_units.o calc_data.o compare_data.o control_data.o \
	CSA_data.o energy_data.o geometry_data.o map_data.o \
	MCM_data.o MD_data.o minim_data.o MPI_data.o REMD_data.o comm_local.o \
	prng_32.o math.o random.o geometry.o md_calc.o io_base.o energy.o check_bond.o muca_md.o\
	control.o io_config.o MPI.o minim.o \
	regularize.o compare.o map.o REMD.o MCM_MD.o io.o \
	MD.o MREMD.o CSA.o unres.o


#${EXE_FILE}: ${objects}
#	${FC} ${OPT} ${objects} -o ${EXE_FILE}

no_option:

#NMPI: CPPFLAGS = -DPROCOR -DLINUX -DPGI -DISNAN 
NOMPI: CPPFLAGS = -DPROCOR -DLINUX -DPGI -DAMD64 -DUNRES -DISNAN \
        -DSPLITELE -DLANG0
#NOMPI: EXE_FILE = ../../bin/unres_MD-M_NO_MPI_F90_EL.exe
NOMPI: EXE_FILE = ../../bin/unres_NO_MPI_F90_EL.exe

NOMPI: ${objects}
	cc -o compinfo compinfo.c
	./compinfo | true
	${FC} ${FFLAGS} cinfo.f90
	${FC} ${objects} cinfo.o -o ${EXE_FILE}

# ${FC} ${objects} -Xlinker -M -o ${EXE_FILE}
GAB: CPPFLAGS = -DPROCOR -DLINUX -DPGI -DAMD64 -DUNRES -DISNAN -DMP -DMPI \
        -DSPLITELE -DLANG0 -DCRYST_BOND -DCRYST_THETA -DCRYST_SC
#GAB: EXE_FILE = ../../bin/unres_MD-M_GAB_F90_EL_opt3.exe
GAB: EXE_FILE = ../../bin/unres_GAB_F90_EL.exe
GAB: ${objects}
	cc -o compinfo compinfo.c
	./compinfo | true
	${FC} ${FFLAGS} cinfo.f90
	${FC} ${OPT} ${objects} cinfo.o -o ${EXE_FILE}

4P: CPPFLAGS = -DLINUX -DPGI -DAMD64 -DUNRES -DISNAN -DMP -DMPI \
        -DSPLITELE -DLANG0 -DCRYST_BOND -DCRYST_THETA -DCRYST_SC
#4P: EXE_FILE = ../../bin/unres_MD-M_4P_F90_EL_opt3.exe
4P: EXE_FILE = ../../bin/unres_4P_F90_EL.exe
4P: ${objects}
	cc -o compinfo compinfo.c
	./compinfo | true
	${FC} ${FFLAGS} cinfo.f90
	${FC} ${OPT} ${objects} cinfo.o -o ${EXE_FILE}

E0LL2Y: CPPFLAGS = -DPROCOR -DLINUX -DPGI -DAMD64 -DUNRES -DISNAN -DMP -DMPI \
        -DSPLITELE -DLANG0
#E0LL2Y: EXE_FILE = ../../bin/unres_MD-M_E0LL2Y_F90_EL_opt3.exe
E0LL2Y: EXE_FILE = ../../bin/unres_E0LL2Y_F90_EL.exe
E0LL2Y: ${objects}
	cc -o compinfo compinfo.c
	./compinfo | true
	${FC} ${FFLAGS} cinfo.f90
	${FC} ${OPT} ${objects} cinfo.o -o ${EXE_FILE}


xdrf/*.o:
	cd xdrf && make

clean:
	rm -f *.o && rm -f *.mod && rm -f compinfo && cd xdrf && make clean
#	rm -f *.o && rm -f *.mod && rm ${EXE_FILE} && rm -f compinfo && cd xdrf && make clean


names.o: names.f90
	${FC} ${FFLAGS} ${CPPFLAGS} names.f90

io_units.o: io_units.f90
	${FC} ${FFLAGS} ${CPPFLAGS} io_units.f90

calc_data.o: calc_data.f90
	${FC} ${FFLAGS} ${CPPFLAGS} calc_data.f90

compare_data.o: compare_data.f90
	${FC} ${FFLAGS} ${CPPFLAGS} compare_data.f90

control_data.o: control_data.f90
	${FC} ${FFLAGS} ${CPPFLAGS} control_data.f90

CSA_data.o: CSA_data.f90
	${FC} ${FFLAGS} ${CPPFLAGS} CSA_data.f90

energy_data.o: energy_data.f90
	${FC} ${FFLAGS} ${CPPFLAGS} energy_data.f90

geometry_data.o: geometry_data.f90
	${FC} ${FFLAGS} ${CPPFLAGS} geometry_data.f90

map_data.o: map_data.f90
	${FC} ${FFLAGS} ${CPPFLAGS} map_data.f90

MCM_data.o: MCM_data.f90
	${FC} ${FFLAGS} ${CPPFLAGS} MCM_data.f90

MD_data.o: MD_data.f90
	${FC} ${FFLAGS} ${CPPFLAGS} MD_data.f90

minim_data.o: minim_data.f90
	${FC} ${FFLAGSm} ${CPPFLAGS} minim_data.f90

MPI_data.o: MPI_data.f90
	${FC} ${FFLAGS} ${CPPFLAGS} MPI_data.f90

REMD_data.o: REMD_data.f90
	${FC} ${FFLAGS} ${CPPFLAGS} REMD_data.f90

comm_local.o: comm_local.f90
	${FC} ${FFLAGS} ${CPPFLAGS} comm_local.f90

prng_32.o: prng_32.f90
	${FC} ${FFLAGS} ${CPPFLAGS} prng_32.f90

math.o: math.f90
	${FC} ${FFLAGS} ${CPPFLAGS} math.f90

random.o: random.f90
	${FC} ${FFLAGS} ${CPPFLAGS} random.f90

geometry.o: geometry.f90
	${FC} ${FFLAGS} ${CPPFLAGS} geometry.f90

md_calc.o: md_calc.f90
	${FC} ${FFLAGS1} ${CPPFLAGS} md_calc.f90

io_base.o: io_base.f90
	${FC} ${FFLAGS} ${CPPFLAGS} io_base.f90

energy.o: energy.f90
	${FC} ${FFLAGSE} ${CPPFLAGS} energy.f90

check_bond.o: check_bond.f90
	${FC} ${FFLAGS} ${CPPFLAGS} check_bond.f90

control.o: control.f90
	${FC} ${FFLAGS} ${CPPFLAGS} control.f90

io_config.o: io_config.f90
	${FC} ${FFLAGS2} ${CPPFLAGS} io_config.f90

MPI.o: MPI.f90
	${FC} ${FFLAGS} ${CPPFLAGS} MPI.f90

minim.o: minim.f90
	${FC} ${FFLAGS1} ${CPPFLAGS} minim.f90

regularize.o: regularize.f90
	${FC} ${FFLAGS} ${CPPFLAGS} regularize.f90

compare.o: compare.f90
	${FC} ${FFLAGS} ${CPPFLAGS} compare.f90

map.o: map.f90
	${FC} ${FFLAGS} ${CPPFLAGS} map.f90

muca_md.o: muca_md.f90
	${FC} ${FFLAGS} ${CPPFLAGS} muca_md.f90

REMD.o: REMD.f90
	${FC} ${FFLAGSE} ${CPPFLAGS} REMD.f90

MCM_MD.o: MCM_MD.f90
	${FC} ${FFLAGS} ${CPPFLAGS} MCM_MD.f90

io.o: io.f90
	${FC} ${FFLAGS} ${CPPFLAGS} io.f90

MD.o: MD.f90
	${FC} ${FFLAGSE} ${CPPFLAGS} MD.f90

MREMD.o: MREMD.f90
	${FC} ${FFLAGS} ${CPPFLAGS} MREMD.f90

CSA.o: CSA.f90
	${FC} ${FFLAGS} ${CPPFLAGS} CSA.f90

unres.o: unres.f90
	${FC} ${FFLAGS} ${CPPFLAGS} unres.f90
