#---------------------------------------------------------------------!
#                                PHAML                                !
#                                                                     !
# The Parallel Hierarchical Adaptive MultiLevel code for solving      !
# linear elliptic partial differential equations of the form          !
# (PUx)x + (QUy)y + RU = F on 2D polygonal domains with mixed         !
# boundary conditions, and eigenvalue problems where F is lambda*U.   !
#                                                                     !
# PHAML is public domain software.  It was produced as part of work   !
# done by the U.S. Government, and is not subject to copyright in     !
# the United States.                                                  !
#                                                                     !
#     William F. Mitchell                                             !
#     Applied and Computational Mathematics Division                  !
#     National Institute of Standards and Technology                  !
#     william.mitchell@nist.gov                                       !
#     http://math.nist.gov/phaml                                      !
#                                                                     !
#---------------------------------------------------------------------!

# Makefile created for system configuration:
#   Architecture:      x86
#   OS:                linux
#   F90 compiler:      gfortran
#   C compiler:        cc
#   Hash size:         1
#   Parallel form:     messpass_spawn
#   Parallel library:  openmpi
#   Element:           triangle
#   Graphics:          mesa
#   BLAS:              goto
#   LAPACK:            vendor
#   SLEPc:             no
#   ARPACK:            yes
#   BLOPEX:            yes
#   PETSc:             yes
#   MUMPS:             yes
#   SUPERLU:           yes
#   HYPRE:             yes
#   ML:                no
#   Zoltan:            yes
#   ParMETIS:          yes
#   DRUM:              no
#   Specific system:   none

F90=mpif90 -fPIC -DPIC
FFLAGS=-pipe -Wall -g -fPIC -DPIC -O -fno-second-underscore -DPETSC_HAVE_HYPRE
LINKER=mpif90
LINKFLAGS=-Wl,-rpath,/lib:/usr/lib/petsc-real/lib
OMPI_F77=gfortran
OMPI_FC=gfortran
export OMPI_F77
export OMPI_FC

PHAML_HOME=/usr/src/RPM/BUILD/phaml-1.14.0
PHAML_MODDIR=$(PHAML_HOME)/modules
PHAML_LIBDIR=$(PHAML_HOME)/lib
PHAML_SRCDIR=$(PHAML_HOME)/src

all: phaml phaml_slave phaml_graphics

phaml_graphics: \
	graphmain.o \
	pde.o 
	$(LINKER) $(LINKFLAGS) -o phaml_graphics \
	graphmain.o \
	pde.o \
	-L$(PHAML_LIBDIR) -lphaml \
	-lparpack_MPI-LINUX -larpack_LINUX \
	-L/usr/lib/petsc-real/include -lpetsc \
	-ldmumps -lmumps_common -lpord -lscalapack \
	-lsuperlu_dist_2.4 \
	-lHYPRE \
	-lzoltan -lparmetis \
	 \
	-lf90glut -lf90GLU -lf90GL -lglut -lGLU -lGL \
	-llapack \
	-lopenblas -lpthread \
	-L/usr/X11R6/lib -lXaw -lXt -lXmu -lXi -lX11 -lXext -lm

phaml_slave: \
	slave.o \
	pde.o
	$(LINKER) $(LINKFLAGS) -o phaml_slave \
	slave.o \
	pde.o \
	-L$(PHAML_LIBDIR) -lphaml \
	-lparpack_MPI-LINUX -larpack_LINUX \
	-L/usr/lib/petsc-real/include -lpetsc \
	-ldmumps -lmumps_common -lpord -lscalapack \
	-lsuperlu_dist_2.4 \
	-lHYPRE \
	-lzoltan -lparmetis \
  -lf90glut -lf90GLU -lf90GL -lglut -lGLU -lGL \
	-llapack \
	-lopenblas -lpthread \
	-L/usr/X11R6/lib -lXaw -lXt -lXmu -lXi -lX11 -lXext -lm

phaml: \
	master.o pde.o
	$(LINKER) $(LINKFLAGS) -o phaml \
	master.o pde.o \
	-L$(PHAML_LIBDIR) -lphaml \
	-lparpack_MPI-LINUX -larpack_LINUX \
	-L/usr/lib/petsc-real/include -lpetsc \
	-ldmumps -lmumps_common -lpord -lscalapack \
	-lsuperlu_dist_2.4 \
	-lHYPRE \
	-lzoltan -lparmetis \
  -lf90glut -lf90GLU -lf90GL -lglut -lGLU -lGL \
	-llapack \
	-lopenblas -lpthread \
	-L/usr/X11R6/lib -lXaw -lXt -lXmu -lXi -lX11 -lXext -lm

slave.o: $(PHAML_SRCDIR)/slave.f90
	$(F90) $(FFLAGS) -I$(PHAML_MODDIR) -I/usr/include -o slave.o -c $(PHAML_SRCDIR)/slave.f90

graphmain.o: $(PHAML_SRCDIR)/graphmain.f90
	$(F90) $(FFLAGS) -I$(PHAML_MODDIR) -o graphmain.o -c $(PHAML_SRCDIR)/graphmain.f90

master.o: master.f90 pde.o
	$(F90) $(FFLAGS) -I$(PHAML_MODDIR) -I/usr/include -c master.f90

pde.o: pde.f90
	$(F90) $(FFLAGS) -I$(PHAML_MODDIR) -I/usr/include -c pde.f90

clean:
	rm -f rectangle.* *.o *.mod phaml phaml_slave phaml_graphics *.M *.stb
