### $Id: Makefile,v 1.20 2008-07-02 16:48:47 brandenb Exp $
### Makefile for modular pencil code

## Default settings: they can be overwritten by src/Makefile.local
## which should be present in each local to run directory.

LDMPI=-lmpi

MPICOMM   = nompicomm
GLOBAL    = noglobal
IO        =   io_dist
FFT       = nofft
DEBUG     =   debug_c

HYDRO     =   hydro
DENSITY   =   density
ENTROPY   = noentropy
MAGNETIC  = nomagnetic
RADIATION = noradiation
PSCALAR   = nopscalar

GRAVITY   = nograv
FORCING   = noforcing
SHEAR     = noshear
TIMEAVG   = notimeavg

FFLAGS_GENERAL=
# 
# Default double flags (can be overwritten in machine-specific section).
#
FFLAGS_DOUBLE = -r8
CFLAGS_DOUBLE = -DDOUBLE_PRECISION

## Overwrite settings that are local to each run directory
include Makefile.local
MPICOMM   = mpicomm_
LDMPI=

include Makefile.inc  ## needed ? 

## Default settings
FC=f90
FFLAGS=-O3
CFLAGS=-O3 -DFUNDERSC=1

ifeq ($(REAL_PRECISION),double)
  FFLAGS := $(FFLAGS) $(FFLAGS_DOUBLE) 
endif

## The following block (`Begin/End machine dependent') specifies compilers
## and switches for given architectures and machine names. See
## `perldoc adapt-mkfile' for full documentation of the syntax.

### Begin machine dependent

## IRIX64:
#FC=f90
#FFLAGS= -64 -O3 -mips4
#FFLAGS= -auto_use mpi_interface -64 -O3 -C -macro_expand  #(gridur|embla)
#FFLAGS= -auto_use mpi_interface -64 -O3 -C -macro_expand  #(Antares)
#FFLAGS= -pfalist -64 -O3 -mips4 -r10000 -C -macro_expand  #(Grand)
#FFLAGS= -64 -O3 -mips4 -r12000 #(Ukaff)
#FFLAGS= -64 -O3 -auto_use mpi_interface -mips4 #(ukaff|origin)
#OPTFLAGS= -64
#F77=$(FC)
#CFLAGS=-O3 -64 -DFUNDERSC=1

## OSF1:
#FC=f90 #(Mhd.)
#OPTFLAGS=
#OPTFLAGS=-fast -O5
#FFLAGS=$(OPTFLAGS) -tune ev6 -arch ev6 #(Mhd.)
#F77=$(FC)
#LIBSIG=-lsig

## Linux:
## (AB/22-06-03: Here I've cut+pasted the current block from $PENCIL_HOME/src)
## The -tpp7 flag leads to a 10% speedup on nl6
#FC=f95
#FC=mpif90
#FFLAGS=-O3
#F90FLAGS=-u -tpp7
#F90FLAGS= # (fire)
#F90FLAGS=
#LDMPI=
##LDMPI=-lfmpich -lmpich -lmpe -lpmpich -llmpe # (copson) 
##LDMPI=-L/usr/X11R6/lib/ -lfmpich -lampe -lmpe -lpmpich -lX11 # (copson)
#FC=mpif90 # (Samos|fire|copson)
#FC=/usr/lib/lam/bin/mpif95 #(Cincinnatus|Owen|Master)
##FC=/home/brandenb/pacx/bin/pacxfc #PACX #(fe[0-3])
##FC=mpif77 #(fe[0-3])
#FC=mpif77 #(ns0)
#FC=ifc_6.0 -I/usr/local/lib/LAM/include #(fe[0-9])
#FC=/people/disk2/brandenb/bin/ifort -I/usr/local/lib/LAM/include #(fe[0-9])
#FC=~dobler/opt/intel/compiler70/ia32/bin/ifc -I/usr/local/lib/LAM/include #(fe[0-9])
#FC=f95 -I/usr/lib/lam/include -mismatch #(morvern)      
#FC=pgf90 #(sintef*|vsl176)
#FFLAGS_DOUBLE= -r8 #(vsl176)
#FFLAGS= -O3 -I/cvos/shared/apps/mvapich/pgi/1.2rc2/include/ #(vsl176)
#FFLAGS= -O4 -Munroll -Mvect=prefetch -I/cvos/shared/apps/mvapich/pgi/1.2rc2/include/ #(vsl176)
##FFLAGS= -O0 -C -Mbounds -Mdwarf2 -Melf  -I/cvos/shared/apps/mvapich/pgi/1.2rc2/include/ #(vsl176)
##FFLAGS= -O3 -I/cvos/shared/apps/mvapich/pgi/1.2rc2/include/ -Mrecursive #(vsl176)
#LD_MPI= -L/cvos/shared/apps/mvapich/pgi/1.2rc2/lib -lmpich -L/cvos/shared/apps/ofed/1.3.1/lib64/ -libumad -libverbs -lrdmacm #(vsl176) 
#FC=ifort #(vsl21*|vsl22*|vsl230)
#FFLAGS= -I./ -D_REENTRANT -I/opt/scali/include #(vsl21*|vsl22*|vsl230)
#LD_MPI= -L/opt/scali/lib -lfmpi -lmpi -lpthread #(vsl21*|vsl22*|vsl230)
#F77=$(FC) #(sintef*|vmware|erland|bohm|igor|onsager|vsl21*|vsl22*|vsl230)
#FC=ifc -I/usr/lib/lam/include #(morvern)  
##FC=/home/brandenb/pacx/bin/pacxfc #(ns0)
#FC=ifc #(nl6|mmtf|nl19|hamlet)
#FC=f95 #(karbala)
#FC=pgf90 #(erland|igor|tycho|vmware|linux29|onsager|fe4)
#FFLAGS=-O # (Samos)
#FFLAGS= # (fire)
#LDMPI=-static -L/usr/local/lib/LAM/lib -llamf77mpi -lmpi -llam -lnsl -lutil -L/usr/local/lib/PGI/linux86/lib -lpgc #(fe[0-4])
##AB: next line uncommented on Tobi's advice
#LDMPI=-static -L/usr/local/lib/LAM/lib -llamf77mpi -lmpi -llam -lnsl -lutil -pthread #(fe[0-4])
#LDMPI=-L/usr/lib/lam/lib -llam -lmpi -lpmpi -llamf77mpi -llammpi++ -llammpio #(morvern)
#LDMPI=-static -L/opt/lam/lib -lmpi -llamf77mpi -llam  #(nw50)
##FFLAGS=-O3 -ipo #PACX #(fe[0-3])
#FFLAGS=-fast -lm #(erland|igor|tycho|vmware|linux29|onsager|fe4)
#F90FLAGS= #(erland|igor|tycho|vmware|linux29|onsager|fe4)
##FFLAGS=-O3 -ipo #(fe[0-3])
#FFLAGS= #(fe[0-3])  ##(compiles faster/axel)
#FFLAGS=-O4 -C -gline -Wc,-malign-double #(Mephisto)
#FFLAGS=-O4 #(nl3)
#FFLAGS= -O3 -w90 #(cosmo)
#FC=ifc -I/usr/include #(cosmo)  
#FC=ifc -I/usr/include #(nl6)  
#LDMPI=-L/usr/lib -lmpi -llamf77mpi -llam -lpmpi -llammpi++ -llammpio #(cosmo)
#LDMPI= # (Samos|fire)
#CFLAGS=-O3 -DFUNDERSC=1 -Wall
#F77=$(FC)
#F77=$(FC) -dusty #(nl3|Mephisto|mmtf|karbala|morvern)
#F77=$(FC) -lm  #(tycho|vmware|erland|igor|onsager|fe4)
#F77=$(FC) #(Cincinnatus|Owen|Master|cosmo|nl6)
##
## DCSC cluster - (Copenhagen, not Odense!)
## www.dcsc.ku.dk
#FC=pgf90 #(fend0[1-3])
#CC=pgcc #(fend0[1-3])
#FFLAGS=-fastsse -tp k8-64e -I/usr/local/topspin/mpi/mpich/include #(fend0[1-3])
#CFLAGS=-fastsse -tp k8-64e -DFUNDERSC=1 #(fend0[1-3])
#LD_MPI=-L/usr/local/topspin/mpi/mpich/lib64 -lmpich -lpthread -lmpich_p #(fend0[1-3])
#FC=gfortran -I. #(copernicus)
#FFLAGS= -O3 -I/usr/local/include #(copernicus)
#FFLAGS_DOUBLE=-fdefault-real-8 #(copernicus)
##LD_MPI=-L/usr/local/lib -lfmpich -lmpich -pthread #(copernicus)
##
## Axel's laptop (nl6, 2.0 GHz)
##
#FC=ifort #(nl6)
#FFLAGS=-O3 -I/usr/include/lam -CB #(nl6)
#FFLAGS=-O3 -I/usr/include/lam #(nl6)
#LD_MPI=-I/usr/include/lam -L/usr/lib/lam/lib -llammpio -llamf77mpi -lmpi -llam -lutil #(nl6)
#LIBMPISUFFIX=_#(nl6)
#CFLAGS=-O3 -DFUNDERSC=1 -Wall #(nl6)
#F77FLAGS=-w90 #(nl6)
##
## Axel on Neolith (ifc 7.1)
##
#FC=ifort #(neolith)
#FFLAGS=-O3 -Nmpi#(neolith)
#CC=icc #(neolith)
#CFLAGS=-O3 -DFUNDERSC=1 #(neolith)
#LD_MPI=-Nscampi #(neolith)
#LD_MPI=-L/opt/scali/lib -lfmpi -lmpi -lpthread #(neolith)
##LIBMPISUFFIX=_#(neolith)
##
## Lindgren - CrayXE6 - (Stockholm)                
## 1516 24-nodes per cabinet 2.1GHz Opterons                      
##                                                                        
#FC=ftn #(emil*)
#F90=$(FC) #(emil*)
#CC=cc #(emil*)
#FFLAGS=-O3 #(emil*) 
#CFLAGS=-DFUNDERSC=1 -O3 #(emil*)
## SunOS:
#FC=pghpf #(Lomond)
#FFLAGS= -Msmp -O4 #(Lomond)
#FC=f95 #(Lomond)
#FFLAGS=-O3 -I/opt/local/mpich/include #(Lomond)
#LDMPI=-L/opt/local/mpich/lib -lmpich -lsocket -lnsl -laio #(Lomond)
#F77=$(FC) #(Lomond)
##
## Sisu - CrayXC30 - (Kajaani)
##
## do first "module load intel" 
##
#FC=ifort #(sisu*)
#FFLAGS=-O3 #(sisu*)
#CC=icc #(sisu*)
#CFLAGS=  #(sisu*)
#LD_MPI=  #(sisu*)
##
### old
##FC=ftn #(sisu*)
##F90=$(FC) #(sisu*)
##CC=cc #(sisu*)
##FFLAGS=-O3 -ffree -e m -J experimental -J magnetic #(sisu*)
##FFLAGS=-O3 -ffree -e m  #(sisu*)
##FFLAGS_DOUBLE=-s default64 #(sisu*)
##CFLAGS=-DFUNDERSC=1 -O3 #(sisu*)
##
## Hermit - CrayXE6 - (Stuttgart)
##
## do first "module load intel"
#FC=ifort #(eslogin0*)
#FFLAGS=-O3 #(eslogin0*)
#CC=icc #(eslogin0*)
#CFLAGS=  #(eslogin0*)
#LD_MPI=  #(eslogin0*)
##                                      
## GWDG Cluster in Goettingen
##
#FC = mpif90 -std95 # (gwdu101)
#F77 = mpif90 # (gwdu101)
#FFLAGS = -implicitnone # (gwdu101)
#FFLAGS_DOUBLE = -r8 # (gwdu101)
#CC = mpicc # (gwdu101)
#CFLAGS = -DFUNDERSC=1 # (gwdu101)
#CFLAGS_DOUBLE = -DDOUBLE_PRECISION # (gwdu101)
#LDMPI=  # (gwdu101)
##
#FC = mpif90 -std95 # (gwdu102)
#F77 = mpif90 # (gwdu102)
#FFLAGS = -implicitnone # (gwdu102)
#FFLAGS_DOUBLE = -r8 # (gwdu102)
#CC = mpicc # (gwdu102)
#CFLAGS = -DFUNDERSC=1 # (gwdu102)
#CFLAGS_DOUBLE = -DDOUBLE_PRECISION # (gwdu102)
#LDMPI=  # (gwdu102)
##

## UNICOS/mk:
#FC=f90
#FFLAGS=-O3 -em

## HI-UX/MPP:
#FC=f90
#FFLAGS=-I/usr/mpi/include -O4 -pvec -parallel=0
#LDMPI=-L/usr/mpi/lib/lib32 -lfmpi -lmpi

## AIX:
#FC=xlf90
#FC=mpxlf90 #(Sp[12])
#FFLAGS=-O5 -qsuffix=f=f90

### End machine dependent


LD=$(FC)
LDFLAGS=$(FFLAGS) $(FFLAGS_GENERAL)

.SUFFIXES: .f90 .mod

.f.o:
	$(F77) $(OPTFLAGS) $(FFLAGS_GENERAL) -c $*.f
.f90.o:
	$(FC) $(FFLAGS) $(FFLAGS_GENERAL) -c $*.f90
.mod.o:
	$(FC) $(FFLAGS) $(FFLAGS_GENERAL) -c $*.f90
.c.o:
	$(CC) $(CFLAGS) -c $*.c

#####

default: makefile cparam.inc code

makefile: Makefile
	$(PENCIL_HOME)/src/scripts/adapt-mkfile Makefile makefile
code:
	make remesh.x
#	make remesh.x remesh_ext.x

technical=cparam.o cdata.o common.o
remesh=remesh.o $(technical)
#remesh_ext=remesh_ext.o $(technical)

remesh.x: $(remesh) Makefile.local
	$(LD) $(LDFLAGS) $(remesh) $(LDMPI) -o remesh.x 

#remesh_ext.x: $(remesh_ext) Makefile.local
#	$(LD) $(LDFLAGS) $(remesh_ext) $(LDMPI) -o remesh_ext.x 

remesh.o:    remesh.f90 common.local $(technical)
#remesh_ext.o:    remesh_ext.f90 common.local $(technical)
#
cparam.o:    cparam.f90 cparam.local cparam.inc
cdata.o:     cdata.f90 cparam.o
common.o:     common.f90 common.local cdata.o cparam.o
#deriv.o:     deriv.f90 cdata.o

# Clean up, but leave makefile and TAGS
clean:
	rm -f *.x *.o *.mod *.d *.inc
	rm -f work.pc work.pcl

# Clean up all
cleann: clean
	rm -f makefile TAGS
