#******************************************************************#
#                                                                  #
# Makefile for all things AMIGA, Alexander Knebe                   #
#                                                                  #
# adapted by Steffen Knollman (2007)                               #
#                                                                  #
#******************************************************************#

# Note that the Makefile.config is not included in the distribution.
# However, a basic sample configuration is included as
# Makefile.config_SAMPLE.  Copy that file to Makefile.config and
# edit it to your needs.
include Makefile.config


#------------------------------------------------------------------#
# the menu                                                         #
#------------------------------------------------------------------#
						MASTER_DEFINEFLAGS	=	$(DEFINEFLAGS)
LCDM.016:			MASTER_DEFINEFLAGS	=	$(DEFINEFLAGS) -DASCII
LCDM.064:			MASTER_DEFINEFLAGS	=	$(DEFINEFLAGS) -DASCII
LCDM.128:			MASTER_DEFINEFLAGS	=	$(DEFINEFLAGS) -DASCII -DMULTIMASS
LCDM.lightcone:	MASTER_DEFINEFLAGS	=	$(DEFINEFLAGS) -DASCII -DLIGHTCONE

#------------------------------------------------------------------#
# make settings available to all other Makefiles                   #
#------------------------------------------------------------------#
export CC
export FC
export OPTIMIZE
export CCFLAGS
export LNFLAGS
export MASTER_DEFINEFLAGS
export MAKE

# everything in src/
#===================
AHFstep:	FORCE dirs
		cd src;\
		${MAKE} AHFstep;\
		mv -f AHFstep ../bin

AMIGA:		FORCE dirs
		cd src;\
		${MAKE} AMIGA;\
		mv -f AMIGA ../bin

AMIGAHF:	FORCE dirs
		cd src;\
		${MAKE} AMIGAHF;\
		mv -f AMIGAHF ../bin

CONVERT:	FORCE dirs
		cd src;\
		${MAKE} CONVERT;\
		mv -f CONVERT ../bin


# everything in convert/
#=======================
galaxy2amiga:	FORCE dirs
		cd convert;\
		${MAKE} galaxy2amiga;\
		mv -f galaxy2amiga ../bin

art2amiga:	FORCE dirs
		cd convert;\
		${MAKE} art2amiga;\
		mv -f art2amiga ../bin

amiga2ascii:	FORCE dirs
		cd convert;\
		${MAKE} amiga2ascii;\
		mv -f amiga2ascii ../bin

amiga2ascii2:	FORCE dirs
		cd convert;\
		${MAKE} amiga2ascii2;\
		mv -f amiga2ascii2 ../bin

amiga2asciiSample:	FORCE dirs
		cd convert;\
		${MAKE} amiga2asciiSample;\
		mv -f amiga2asciiSample ../bin

amiga2gadget:	FORCE dirs
		cd convert;\
		${MAKE} amiga2gadget;\
		mv -f amiga2gadget ../bin

gadget2ascii:	FORCE dirs
		cd convert;\
		${MAKE} gadget2ascii;\
		mv -f gadget2ascii ../bin

mlapm2amiga:	FORCE dirs
		cd convert;\
		${MAKE} mlapm2amiga;\
		mv -f mlapm2amiga ../bin

amiga2mlapm:	FORCE dirs
		cd convert;\
		${MAKE} amiga2mlapm;\
		mv -f amiga2mlapm ../bin

amiga2tipsy:	FORCE dirs
		cd convert;\
		${MAKE} amiga2tipsy;\
		mv -f amiga2tipsy ../bin

halos2geom:	FORCE dirs
		cd convert;\
		${MAKE} halos2geom;\
		mv -f halos2geom ../bin

ahf2binary:	FORCE dirs
		cd convert;\
		${MAKE} ahf2binary;\
		mv -f ahf2binary ../bin

stat2halos:	FORCE dirs
		cd convert;\
		${MAKE} stat2halos;\
		mv -f stat2halos ../bin

sorthalos:	FORCE dirs
		cd convert;\
		${MAKE} sorthalos;\
		mv -f sorthalos ../bin

lcone2ascii:	FORCE dirs
		cd convert;\
		${MAKE} lcone2ascii;\
		mv lcone2ascii ../bin

2dF2amiga:	FORCE dirs
		cd convert;\
		${MAKE} 2dF2amiga;\
		mv 2dF2amiga ../bin

amigagrid2ascii:	FORCE dirs
		cd convert;\
		${MAKE} amigagrid2ascii;\
		mv -f amigagrid2ascii ../bin
		
ramses2gadget:	FORCE dirs
		cd convert;\
		${MAKE} ramses2gadget;\
		mv -f ramses2gadget ../bin

# everything in tools/
#=====================
amigaheader:	FORCE dirs
		cd tools;\
		${MAKE} amigaheader;\
		mv -f amigaheader ../bin

amigaRemoveHalos:	FORCE dirs 
		cd tools;\
		${MAKE} amigaRemoveHalos;\
		mv -f amigaRemoveHalos ../bin

amigaExtractHalos:	FORCE dirs
		cd tools;\
		${MAKE} amigaExtractHalos;\
		mv -f amigaExtractHalos ../bin

amigaPdens:	FORCE dirs
		cd tools;\
		${MAKE} amigaPdens;\
		mv -f amigaPdens ../bin

gadgetPdens:	FORCE dirs
		cd tools;\
		${MAKE} gadgetPdens;\
		mv -f gadgetPdens ../bin

PdensExtractHalos:	FORCE dirs
		cd tools;\
		${MAKE} PdensExtractHalos;\
		mv -f PdensExtractHalos ../bin

outputs:	FORCE dirs
		cd tools;\
		${MAKE} outputs;\
		mv -f outputs ../bin

virial:	FORCE dirs
		cd tools;\
		${MAKE} virial;\
		mv -f virial ../bin

age:	FORCE dirs
		cd tools;\
		${MAKE} age;\
		mv -f age ../bin

cosmology:	FORCE dirs 
		cd tools;\
		${MAKE} cosmology;\
		mv -f cosmology ../bin

pmass:		FORCE dirs
		cd tools;\
		${MAKE} pmass;\
		mv -f pmass ../bin

readlog:		FORCE dirs
		cd tools;\
		${MAKE} readlog;\
		mv -f readlog ../bin

ViewSats:		FORCE dirs
		cd tools;\
		${MAKE} ViewSats;\
		mv -f ViewSats ../bin

ExtractSats:		FORCE dirs
		cd tools;\
		${MAKE} ExtractSats;\
		mv -f ExtractSats ../bin

ExtractMhalo:		FORCE dirs
		cd tools;\
		${MAKE} ExtractMhalo;\
		mv -f ExtractMhalo ../bin

HaloShape:		FORCE dirs
		cd tools;\
		${MAKE} HaloShape;\
		mv -f HaloShape ../bin

calcMinStar:		FORCE dirs
		cd tools;\
		${MAKE} calcMinStar;\
		mv -f calcMinStar ../bin

# everything in analysis/
#========================
amigaPk:	FORCE dirs
		cd analysis;\
		${MAKE} amigaPk;\
		mv -f amigaPk ../bin

amigaXi:	FORCE dirs
		cd analysis;\
		${MAKE} amigaXi;\
		mv -f amigaXi ../bin

amigaVstat:	FORCE dirs
		cd analysis;\
		${MAKE} amigaVstat;\
		mv -f amigaVstat ../bin

amigaSigmaR:	FORCE dirs
		cd analysis;\
		${MAKE} amigaSigmaR;\
		mv -f amigaSigmaR ../bin
		
amigaHaloVellipsoid:	FORCE dirs
		cd analysis;\
		${MAKE} amigaHaloVellipsoid;\
		mv -f amigaHaloVellipsoid ../bin

MergerTree:			FORCE dirs
		cd analysis;\
		${MAKE} MergerTree;\
		mv -f MergerTree ../bin

MergerTreeF:			FORCE dirs
		cd analysis;\
		${MAKE} MergerTreeF;\
		mv -f MergerTreeF ../bin

FindHalo:			FORCE dirs
		cd analysis;\
		${MAKE} FindHalo;\
		mv -f FindHalo ../bin

FindHaloPairs:			FORCE dirs
		cd analysis;\
		${MAKE} FindHaloPairs;\
		mv -f FindHaloPairs ../bin

FindHaloPairs2:			FORCE dirs
		cd analysis;\
		${MAKE} FindHaloPairs2;\
		mv -f FindHaloPairs2 ../bin

HaloHistory:			FORCE dirs
		cd analysis;\
		${MAKE} HaloHistory;\
		mv -f HaloHistory ../bin

HaloHaloXi:			FORCE dirs
		cd analysis;\
		${MAKE} HaloHaloXi;\
		mv -f HaloHaloXi ../bin

HaloTracker:			FORCE dirs
		cd analysis;\
		${MAKE} HaloTracker;\
		mv -f HaloTracker ../bin


#-------------------------------------------------------------------#
# "make LCDM.016" 
#-------------------------------------------------------------------#
LCDM.016:	FORCE
	echo '';\
	echo '*======================================================================*';\
	echo ' ${MAKE} LCDM.016:';\
	echo ' ----------';\
	echo ' generating all necessary files for running that sample LCDM simulation';\
	echo '*======================================================================*';\
	echo '';\
	echo '';\
	echo ' compiling relevant binaries';\
	echo ' ---------------------------';\
	${MAKE} clean;\
	${MAKE} AMIGA;\
	echo ' generating AMIGA input file';\
	echo ' ---------------------------';\
	cd Sample/LCDM.016;\
	echo '';\
	echo '';\
	echo ' starting AMIGA';\
	echo ' --------------';\
	echo '> cd Sample/LCDM.016; ../../bin/AMIGA < AMIGA.input &'

#-------------------------------------------------------------------#
# "make LCDM.064" 
#-------------------------------------------------------------------#
LCDM.064:	FORCE
	echo '';\
	echo '*======================================================================*';\
	echo ' ${MAKE} LCDM.064:';\
	echo ' ----------';\
	echo ' generating all necessary files for running that sample LCDM simulation';\
	echo '*======================================================================*';\
	echo '';\
	echo '';\
	echo ' compiling relevant binaries';\
	echo ' ---------------------------';\
	${MAKE} clean;\
	${MAKE} AMIGA;\
	echo ' generating AMIGA input file';\
	echo ' ---------------------------';\
	cd Sample/LCDM.064;\
	echo '';\
	echo '';\
	echo ' starting AMIGA';\
	echo ' --------------';\
	echo '> cd Sample/LCDM.064; ../../bin/AMIGA < AMIGA.input &'


#-------------------------------------------------------------------#
# "make LCDM.128" 
#-------------------------------------------------------------------#
LCDM.128:	FORCE
	echo '';\
	echo '*======================================================================*';\
	echo ' ${MAKE} LCDM.128:'; echo '${DFLAGS}';\
	echo ' ----------';\
	echo ' generating all necessary files for running that sample LCDM simulation';\
	echo '*======================================================================*';\
	echo '';\
	echo '';\
	echo ' compiling relevant binaries';\
	echo ' ---------------------------';\
	${MAKE} clean;\
	${MAKE} AMIGA;\
	echo ' generating AMIGA input file';\
	echo ' ---------------------------';\
	cd Sample/LCDM.128;\
	echo '';\
	echo '';\
	echo ' starting AMIGA';\
	echo ' --------------';\
	echo '> cd Sample/LCDM.128; ../../bin/AMIGA < AMIGA.input &'


#-------------------------------------------------------------------#
# "make LCDM.lightcone" 
#-------------------------------------------------------------------#
LCDM.lightcone:	FORCE
	echo '';\
	echo '*===========================================================================*';\
	echo ' ${MAKE} LCDM.lightcone:';\
	echo ' --------------------';\
	echo ' generating all necessary files for running that sample lightcone simulation';\
	echo '*===========================================================================*';\
	echo '';\
	echo '';\
	echo ' compiling relevant binaries';\
	${MAKE} clean;\
	${MAKE} lcone2ascii;\
	${MAKE} AMIGA;\
	echo ' generating AMIGA input file';\
	echo ' ---------------------------';\
	cd ../Sample/LCDM.lightcone;\
	echo '';\
	echo '';\
	echo ' starting AMIGA';\
	echo ' --------------';\
	echo '> cd Sample/LCDM.lightcone; ../../bin/AMIGA < AMIGA.input &'


#-------------------------------------------------------------------#
# "make clean" 
#-------------------------------------------------------------------#
clean:	FORCE
	@echo '';\
	echo '*=======================================================================*';\
	echo ' ${MAKE} clean: removing all unneeded files';\
	echo '*=======================================================================*';\
	echo '';\
	echo ''
	cd src; ${MAKE} clean;\
	cd ../convert; ${MAKE} clean;\
	cd ../tools; ${MAKE} clean;\
	cd ../analysis; ${MAKE} clean

#-------------------------------------------------------------------#
# "make veryclean" 
#-------------------------------------------------------------------#
veryclean:	FORCE
	@echo '';\
	echo '*=======================================================================*';\
	echo ' ${MAKE} veryclean: removing all unneeded files (incl. emacs backup files!)';\
	echo '*=======================================================================*';\
	echo '';\
	echo ''
	rm -f *~ *~.*;\
	cd src; ${MAKE} veryclean;\
	cd ../convert; ${MAKE} veryclean;\
	cd ../tools; ${MAKE} veryclean;\
	cd ../analysis; ${MAKE} veryclean

FORCE:	

dirs:
	mkdir -p bin

#-------------------------------------------------------------------#
# "make tarball" 
#-------------------------------------------------------------------#
tarball:
	@scripts/make_tar.sh
	@rm -f ChangeLog
