#
#     ##################################################################
#     ##################################################################
#     ######                                                      ######
#     ######      Advanced Regional Prediction System (ARPS)      ######
#     ######                   Version 5.0                        ######
#     ######                                                      ######
#     ######                     Developed by                     ######
#     ######     Center for Analysis and Prediction of Storms     ######
#     ######                University of Oklahoma                ######
#     ######                                                      ######
#     ##################################################################
#     ##################################################################
#
#=======================================================================
#
#  PURPOSE: This makefile generates the ARPS executable.
#
#  AUTHOR:  Yuhe Liu
#           7/22/1997
#
#  Modification history:
#
#       2000/05/08 Gene Bassett
#       Removed translator and arps_mpi/arps_pvm.
#
#  OTHER INFORMATION:
#       See the makearps command.
#
#=======================================================================

#-----------------------------------------------------------------------
#
# Default shell
#
#-----------------------------------------------------------------------

# SHELL=/bin/csh

#-----------------------------------------------------------------------
#
# Default names of the loader and tar, can be replaced on the command
# line for other system
#
#-----------------------------------------------------------------------

FTN = f90
LDR = f90
CC  = cc

ARPS_LD = $(LDR)

AWK = awk
CP  = cp
LN  = ln
RM  = rm
TAR = tar

TOPDIR =
ARPSDIR = $(TOPDIR)/src/arps
BINDIR = $(TOPDIR)
INCLDIR = $(TOPDIR)/include
LIBDIR = $(TOPDIR)/lib

#-----------------------------------------------------------------------
#
# Compiler Flag of Options. The default is for AIX Fortran xlf.
#
#-----------------------------------------------------------------------

FFLAGS =
CFLAGS =
LDFLAGS =
ICEFLAG =
RADFLAG =

FIXFLAGS  =
FREEFLAGS =

#-----------------------------------------------------------------------
#
# Dependencies
#
#-----------------------------------------------------------------------
.SUFFIXES: $(SUFFIXES) .f90

.f.o:
	$(FTN) $(FFLAGS) $(FIXFLAGS) -c $<
.f90.o:
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<
.c.o:
	$(CC)  $(CFLAGS) -c $<

#-----------------------------------------------------------------------
#
# Executable to be generated by this make file:
#
# SPLITEXE  = splitfiles   Data file splitting program
# JOINSEXE  = joinfiles    Data files joining program
# JOINEXE   = joinfile     Single data file joining program
#
#-----------------------------------------------------------------------

SPLITEXE     = splitfiles
SPLITMPEXE   = splitfiles_mpi
JOINSEXE     = joinfiles
JOINEXE      = joinfile
SPLITANYEXE  = splitany

#-----------------------------------------------------------------------
#
# Shared ARPS objects
#
# LIBARPS     = libarps       ARPS shared library
#
#-----------------------------------------------------------------------

LIBARPS    = libarps

HDFSPLITOBJ_ON  = fsplit_hdf.o
HDFJOINOBJ_ON   = fjoin_hdf.o
HDFSPLITANY_ON  = fsplithdf.o
HDFOBJ_OFF      = nohdf.o
HDFOBJ_ON       = fsplit_hdf.o fjoin_hdf.o

HDFOBJ     = $(HDFOBJ_OFF)

NETOBJ_OFF      = nonet.o
NETOBJ_ON       = fsplitnet.o

NETOBJ     = $(NETOBJ_OFF)

#-----------------------------------------------------------------------
#
# List of splitter and joiner object files
#
#-----------------------------------------------------------------------

SPLITOBJS = splitfiles.o fsplitdump.o fsplitexbc.o fsplitterrain.o \
            fsplitsoil.o fsplitsoilini.o fsplitrestart.o $(HDFOBJ)

JOINOBJS  = joinfile.o fjoindumps.o $(HDFOBJ)

JOINSOBJS = joinfiles.o fjoindumps.o $(HDFOBJ)

JOINHDFOBJS     = joinhdf.o fjoin_hdf.o

SPLITHDFOBJS    = splithdf.o fsplit_hdf.o

JOINBIN2HDFOBJS = joinbin2hdf.o fjoinbin2hdf.o

SPLITANYOBJS = splitany.o $(HDFOBJ) $(NETOBJ)

#-----------------------------------------------------------------------
#
# Compiling and linking the splitter and joiner programs
#
#-----------------------------------------------------------------------

$(SPLITEXE): $(BINDIR)/$(SPLITEXE)
	ls -l $(BINDIR)/$(SPLITEXE)
$(BINDIR)/$(SPLITEXE): $(SPLITOBJS) $(LIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(SPLITOBJS) \
                                 $(LIBDIR)/$(LIBARPS).a $(LIBS)

$(SPLITMPEXE): $(BINDIR)/$(SPLITMPEXE)
	ls -l $(BINDIR)/$(SPLITMPEXE)
$(BINDIR)/$(SPLITMPEXE): $(SPLITOBJS) $(LIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(SPLITOBJS) \
                                 $(LIBDIR)/$(LIBARPS).a $(LIBS)
$(JOINEXE): $(BINDIR)/$(JOINEXE)
	ls -l $(BINDIR)/$(JOINEXE)
$(BINDIR)/$(JOINEXE): $(JOINOBJS) $(LIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(JOINOBJS) \
                                 $(LIBDIR)/$(LIBARPS).a $(LIBS)

$(JOINSEXE): $(BINDIR)/$(JOINSEXE)
	ls -l $(BINDIR)/$(JOINSEXE)
$(BINDIR)/$(JOINSEXE): $(JOINSOBJS) $(LIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(JOINSOBJS) \
                                 $(LIBDIR)/$(LIBARPS).a $(LIBS)

joinhdf: $(BINDIR)/joinhdf
	ls -l $(BINDIR)/joinhdf
$(BINDIR)/joinhdf: $(JOINHDFOBJS)
	$(ARPS_LD) $(LDFLAGS) -o $@ $(JOINHDFOBJS) \
                                 $(LIBDIR)/$(LIBARPS).a $(LIBS)
splithdf: $(BINDIR)/splithdf
	ls -l $(BINDIR)/splithdf
$(BINDIR)/splithdf: $(SPLITHDFOBJS)
	$(ARPS_LD) $(LDFLAGS) -o $@ $(SPLITHDFOBJS) \
                                 $(LIBDIR)/$(LIBARPS).a $(LIBS)

splithdf_mpi: $(BINDIR)/splithdf_mpi
	ls -l $(BINDIR)/splithdf_mpi
$(BINDIR)/splithdf_mpi: $(SPLITHDFOBJS)
	$(ARPS_LD) $(LDFLAGS) -o $@ $(SPLITHDFOBJS) \
                                 $(LIBDIR)/$(LIBARPS).a $(LIBS)

joinbin2hdf: $(BINDIR)/joinbin2hdf
	ls -l $(BINDIR)/joinbin2hdf
$(BINDIR)/joinbin2hdf:$(JOINBIN2HDFOBJS)
	$(ARPS_LD) $(LDFLAGS) -o $@ $(JOINBIN2HDFOBJS) \
                                 $(LIBDIR)/$(LIBARPS).a $(LIBS)

$(SPLITANYEXE): $(BINDIR)/$(SPLITANYEXE)
	ls -l $(BINDIR)/$(SPLITANYEXE)

$(BINDIR)/$(SPLITANYEXE): $(SPLITANYOBJS) $(LIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(SPLITANYOBJS) \
                              $(LIBDIR)/$(LIBARPS).a $(LIBS)

#-----------------------------------------------------------------------
#
# Remove the object code for individual programs
#
#-----------------------------------------------------------------------

clean.split:
	-$(RM) -f $(BINDIR)/$(SPLITEXE) $(SPLITOBJS) $(HDFSPLITANY_ON)   \
                  $(SPLITANYOBJS) $(BINDIR)/$(SPLITANYEXE)   \
                  $(BINDIR)/$(SPLITMPEXE) $(BINDIR)/splithdf \
		  $(BINDIR)/splithdf_mpi work.pc work.pcl

clean.splithdf:
	-$(RM) -f $(BINDIR)/splithdf $(SPLITHDFOBJS) $(HDFSPLITANY_ON)  \
                  $(BINDIR)/splithdf_mpi

clean.join:
	-$(RM) -f $(BINDIR)/$(JOINEXE) $(JOINOBJS)

clean.joins:
	-$(RM) -f $(BINDIR)/$(JOINSEXE) $(JOINSOBJS) work.pc work.pcl

clean.joinhdf:
	-$(RM) -f $(BINDIR)/joinhdf $(JOINHDFOBJS)

clean.joinbin2hdf:
	-$(RM) -f $(BINDIR)/joinbin2hdf $(JOINBIN2HDFOBJS)

#-----------------------------------------------------------------------
#
# Object code dependency list:
#
#-----------------------------------------------------------------------

fjoindumps.o    : fjoindumps.f90     $(INCLDIR)/mp.inc
fsplitdump.o    : fsplitdump.f90     $(INCLDIR)/mp.inc
fsplitexbc.o    : fsplitexbc.f90     $(INCLDIR)/mp.inc
fsplitsoil.o    : fsplitsoil.f90     $(INCLDIR)/mp.inc
fsplitsoilini.o : fsplitsoilini.f90  $(INCLDIR)/mp.inc
fsplitterrain.o : fsplitterrain.f90  $(INCLDIR)/mp.inc
fsplitrestart.o : fsplitrestart.f90  $(INCLDIR)/mp.inc
joinfile.o      : joinfile.f90       $(INCLDIR)/mp.inc
joinfiles.o     : joinfiles.f90      $(INCLDIR)/mp.inc    \
                                     $(INCLDIR)/bndry.inc   \
                                     $(INCLDIR)/exbc.inc    \
                                     $(INCLDIR)/globcst.inc \
                                     $(INCLDIR)/phycst.inc
splitfiles.o    : splitfiles.f90     $(INCLDIR)/mp.inc   \
                                     $(INCLDIR)/bndry.inc \
                                     $(INCLDIR)/exbc.inc \
                                     $(INCLDIR)/globcst.inc \
                                     $(INCLDIR)/phycst.inc
fsplit_hdf.o    : fsplit_hdf.f90     $(INCLDIR)/mp.inc
splithdf.o      : splithdf.f90       $(INCLDIR)/mp.inc
fjoin_hdf.o     : fjoin_hdf.f90      $(INCLDIR)/mp.inc
joinhdf.o       : joinhdf.f90        $(INCLDIR)/mp.inc
