#*************************** The MPI Interface ************************* 
#
#       Select an MPI interface: mgmpi or mgmpi_stubs.
#
#       If MPI is not needed, one can select mgmpi_stubs,
#       allowing the creation of an executable without
#       the need to load the MPI library. However,
#       all MPI options are completely disabled.
#

MPI_INTERFACE = mgmpi
#MPI_INTERFACE = mgmpi_stubs

#
#       Set the path for MPI include files and libraries.
#       This is not needed if mgmpi_stubs was selected.
#

ifeq (${MPI_INTERFACE}, mgmpi)
	MPI_PATH =
	MPI_INCLUDE =
	MPI_LIBRARY = -lmpich        
else
	MPI_INCLUDE =
	MPI_LIBRARY =
endif

#
#***************************** C and FORTRAN *************************** 
#                                              
#       Define C and Fortran compilers and compile options.
#

CFLAGS = -O -Wall -pthread
FFLAGS = -O -pthread

#
#	Set paths for C and Fortran compilers. 	
#

ifeq (${MPI_INTERFACE}, mgmpi)
	CC = mpicc ${CFLAGS}
	F90 = mpif90 ${FFLAGS}
else
	CF_PATH = 
	CC = gcc ${CFLAGS}
	F90 =gfortran ${FFLAGS}
endif

#
#*********************************************************************** 
#
#       The rest of the Makefile is independent of environment
#

INCS = ${MPI_INCLUDE}
LIBS = ${MPI_LIBRARY}

MG = atest.o pltmg.o webgui.o ${MPI_INTERFACE}.o

PROBS = circle.o jcn.o domains.o naca.o square.o ob.o control.o\
	mnsurf.o burger.o battery.o ident.o message.o usmap.o box.o

.f.o:
	${F90} ${INCS} -c $< -o $@

.c.o:
	${CC} ${INCS} -c $< -o $@

Circle: ${MG} circle.o 
	${F90} ${MG} circle.o  ${LIBS} -o Circle 

Jcn: ${MG} jcn.o 
	${F90} ${MG}  jcn.o ${LIBS} -o Jcn 

Domains: ${MG} domains.o
	${F90} ${MG}  domains.o ${LIBS} -o Domains 

Naca: ${MG} naca.o
	${F90} ${MG} naca.o ${LIBS} -o Naca 

Square: ${MG} square.o
	${F90} ${MG} square.o ${LIBS} -o Square 

Ob: ${MG} ob.o
	${F90} ${MG} ob.o ${LIBS} -o Ob

Mnsurf: ${MG} mnsurf.o
	${F90} ${MG} mnsurf.o ${LIBS} -o Mnsurf

Burger: ${MG} burger.o
	${F90} ${MG} burger.o ${LIBS} -o Burger

Battery: ${MG} battery.o
	${F90} ${MG} battery.o ${LIBS} -o Battery

Ident: ${MG} ident.o
	${F90} ${MG} ident.o ${LIBS} -o Ident

Control: ${MG} control.o
	${F90} ${MG} control.o ${LIBS} -o Control

Box: ${MG} box.o
	${F90} ${MG} box.o ${LIBS} -o Box

Message: ${MG} message.o
	${F90} ${MG} message.o ${LIBS} -o Message

Usmap: ${MG} usmap.o
	${F90} ${MG} usmap.o ${LIBS} -o Usmap 

${MG} ${PROBS}: mg0.o

clean:
	rm -f *.o fort.* core* *.rw *.mod journl*.jnl* *.out jnltmp*.jnl* \
	Domains* Circle* Mnsurf* Jcn* Naca* Square* Usmap* \
	Control* Burger* Ob* Battery* Ident* Message* Box* PI*
