#
#     ##################################################################
#     ##################################################################
#     ######                                                      ######
#     ######      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 verification executable.
#
#  AUTHOR:  Jason J. Levit
#           03/15/02
#
#  Modification history:
#
#  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
FTNMP = f90
LDR   = f90
CC    = cc

ARPS_LD = $(LDR)

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

TOPDIR  =
BINDIR  = $(TOPDIR)
INCLDIR = $(TOPDIR)/include
LIBDIR  = $(TOPDIR)/lib
EXTDIR  = $(TOPDIR)/src/ext2arps
ADASDIR = $(TOPDIR)/src/adas
ENSDIR  = $(TOPDIR)/src/arpsens
#IPLIBDIR = $(TOPDIR)/src/arpsverif/iplib
IPLIBDIR =  iplib
VPATH = $(EXTDIR) $(ADASDIR) ($IPLIBDIR)

#-----------------------------------------------------------------------
#
# Compiler Flag of Options.
#
#-----------------------------------------------------------------------

FFLAGS =
CFLAGS =
LDFLAGS =

FIXFLAGS  =
FREEFLAGS =

#-----------------------------------------------------------------------
#
# Dependencies
#
#-----------------------------------------------------------------------

.SUFFIXES: .o .c .cc .y .l .s .sh .S .ln .h .f .F .mod .sym .def .p .r .f90 .ftn .cps .C .Y .L .java .class

.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:
#
# arpsverif
# arpsverif_mpi
# typhoontrack
#
#-----------------------------------------------------------------------

ARPSVERIFEXE    = arpsverif
ARPSVERIFMPEXE  = arpsverif_mpi
TYPHOONEXE      = typhoontrack

#-----------------------------------------------------------------------
#
# Object library to be generated for ARPS solver:
#
# LIBARPS = libarps     ARPS shared library
# LIBADAS = libadas     ADAS shared library
#
# Additional libraries needed for verification package:
#
# IPLIB = iplib         NCEP code for interpolating gridded data
#
#-----------------------------------------------------------------------

LIBARPS = libarps
LIBADAS = libadas
IPLIB   = iplib

#-----------------------------------------------------------------------
#
# List of object codes
#
#-----------------------------------------------------------------------

# The commented out ARPSVERIFOBJS block below reflects all the files
# needed by the verification system when it is completed and tested.

#ARPSVERIFOBJS = module_verif.o module_verifhdf.o arpshis2ver.o        \
#                arpsverif.o avgverifgrid.o cvt2verif.o extdims2.o     \
#                getgrib.o gribcst2.o indtflg.o intfield2.o            \
#                intqpf.o intverifh.o qpfmaks.o qpfstats.o rdarpsqpf.o \
#                rdnmcgrb3d3.o rdverifstats.o setihloc2.o verifgrid.o  \
#                verif_hdf.o veriflib.o verifstatslib.o vgridconst.o   \
#                rdsfcobs.o gribio_c.o nmcdecode.o griblib3d.o

ARPSVERIFOBJS = module_verifhdf.o verif_hdf.o arpsverif.o arps_nn.o   \
                arpshis2ver.o $(ADASDIR)/rdsfcobs.o verifstatslib.o   \
                verif_sort.o arpshis2verGrid.o extrefleclib.o

IPLIBOBJS = $(IPLIBDIR)/decode.o    $(IPLIBDIR)/encode.o    \
            $(IPLIBDIR)/gausslat.o  $(IPLIBDIR)/gcdist.o    \
            $(IPLIBDIR)/gdsawt.o    $(IPLIBDIR)/gdswiz00.o  \
            $(IPLIBDIR)/gdswiz01.o  $(IPLIBDIR)/gdswiz03.o  \
            $(IPLIBDIR)/gdswiz04.o  $(IPLIBDIR)/gdswiz05.o  \
            $(IPLIBDIR)/gdswizc9.o  $(IPLIBDIR)/gdswizca.o  \
            $(IPLIBDIR)/gdswzd.o    $(IPLIBDIR)/gdswzd00.o  \
            $(IPLIBDIR)/gdswzd01.o  $(IPLIBDIR)/gdswzd03.o  \
            $(IPLIBDIR)/gdswzd04.o  $(IPLIBDIR)/gdswzd05.o  \
            $(IPLIBDIR)/gdswzdc9.o  $(IPLIBDIR)/gdswizca.o  \
            $(IPLIBDIR)/ijkgds.o    $(IPLIBDIR)/ipolates.o  \
            $(IPLIBDIR)/ipolatev.o  $(IPLIBDIR)/ipxetas.o   \
            $(IPLIBDIR)/ipxwafs2.o  $(IPLIBDIR)/ipxwafs.o   \
            $(IPLIBDIR)/makgds.o    $(IPLIBDIR)/movect.o    \
            $(IPLIBDIR)/polateg0.o  $(IPLIBDIR)/polateg1.o  \
            $(IPLIBDIR)/polateg4.o  $(IPLIBDIR)/polates0.o  \
            $(IPLIBDIR)/polates1.o  $(IPLIBDIR)/polates2.o  \
            $(IPLIBDIR)/polates3.o  $(IPLIBDIR)/polates4.o  \
            $(IPLIBDIR)/polates5.o  $(IPLIBDIR)/polates6.o  \
            $(IPLIBDIR)/polatev0.o  $(IPLIBDIR)/polatev1.o  \
            $(IPLIBDIR)/polatev2.o  $(IPLIBDIR)/polatev3.o  \
            $(IPLIBDIR)/polatev3.o  $(IPLIBDIR)/polatev4.o  \
            $(IPLIBDIR)/polatev6.o  $(IPLIBDIR)/polfixs.o   \
            $(IPLIBDIR)/polfixv.o   $(IPLIBDIR)/r63w72.o    \
            $(IPLIBDIR)/w3fi63.o    $(IPLIBDIR)/w3fi68.o    \
            $(IPLIBDIR)/w3fi71.o    $(IPLIBDIR)/w3fi74.o

MPIOBJ_ON = verif_mpsubs.o
MPOBJS_ON = $(MPIOBJ_ON)

MPIOBJ_OFF = verif_nompsubs.o
MPOBJS_OFF = $(MPIOBJ_OFF)

MPOBJS = $(MPIOBJ)

TYPHOONOBJS = typhoontrack.o

#-----------------------------------------------------------------------
#
# Set Default
#
#-----------------------------------------------------------------------

default: $(ARPSVERIFEXE)

#-----------------------------------------------------------------------
#
# Compile and link ARPS verification code
#
#-----------------------------------------------------------------------

LIBDEPS = $(LIBDIR)/$(LIBARPS).a $(LIBDIR)/$(LIBADAS).a $(LIBDIR)/$(IPLIB).a

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

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

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

$(BINDIR)/$(ARPSVERIFEXE): $(ARPSVERIFOBJS) $(LIBDEPS) $(MPOBJS)
	$(ARPS_LD) $(LDFLAGS) -o $@ $(ARPSVERIFOBJS) $(MPOBJS)          \
			$(LIBDIR)/$(IPLIB).a $(LIBDIR)/$(LIBARPS).a     \
			$(LIBDIR)/$(LIBADAS).a $(LIBS)

$(BINDIR)/$(ARPSVERIFMPEXE): $(ARPSVERIFOBJS) $(LIBDEPS) $(MPOBJS)
	$(ARPS_LD) $(LDFLAGS) -o $@ $(ARPSVERIFOBJS) $(MPOBJS)          \
			$(LIBDIR)/$(IPLIB).a $(LIBDIR)/$(LIBARPS).a     \
			$(LIBDIR)/$(LIBADAS).a $(LIBS)

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

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

clean.arpsverif:
	-$(RM) -f $(BINDIR)/$(ARPSVERIFEXE) $(BINDIR)/$(ARPSVERIFMPEXE) \
		  $(ARPSVERIFOBJS) \
		  $(MPIOBJ_ON) $(MPIOBJ_OFF) \
                  $(IPLIBOBJS) $(LIBDIR)/$(IPLIB).a

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

$(EXTDIR)/gribio_c.o  : $(EXTDIR)/gribio_c.c
	$(CC)  $(CFLAGS) -o $@ -c $<
$(EXTDIR)/nmcdecode.o : $(EXTDIR)/nmcdecode.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<
$(EXTDIR)/griblib3d.o : $(EXTDIR)/griblib3d.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<
$(ADASDIR)/rdsfcobs.o : $(ADASDIR)/rdsfcobs.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<
module_verifhdf.o : module_verifhdf.f90
module_verif.o    : module_verif.f90
avgverifstats.o   : module_verif.f90
rdverifstats.o    : module_verifhdf.f90
extdims2.o        : extdims2.f90
verifgrid.o       : extdims2.o module_verif.o verifgrid.f90      \
                    $(INCLDIR)/globcst.inc
cvt2verif.o       : $(EXTDIR)/gribio_c.o $(EXTDIR)/nmcdecode.o   \
                    $(EXTDIR)/griblib3d.o                        \
                    extdims2.o module_verif.o cvt2verif.f90      \
                    $(INCLDIR)/globcst.inc      \
                    $(INCLDIR)/phycst.inc       \
                    $(INCLDIR)/grid.inc         \
                    $(EXTDIR)/getextd3d.f90     \
                    $(EXTDIR)/rdnmcgrb3d.f90
avgverifgrid.o    : avgverifgrid.f90
intqpf.o          : makgds.o
intqpf.o          : $(INCLDIR)/globcst.inc
rdarpsqpf.o       : $(INCLDIR)/indtflg.inc $(INCLDIR)/globcst.inc \
                    $(INCLDIR)/phycst.inc $(INCLDIR)/grid.inc
verif_mpsubs.o    : verif_mpsubs.f90 $(INCLDIR)/mp.inc \
                    $(INCLDIR)/vericst.inc
	$(FTNMP) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<
verif_nompsubs.o     : $(INCLDIR)/vericst.inc
arpshis2ver.o     : $(INCLDIR)/vericst.inc
arpshis2verGrid.o : $(INCLDIR)/vericst.inc
arpshis2verGrid.o : $(INCLDIR)/vericst.inc
arpsverif.o       : $(INCLDIR)/vericst.inc
extrefleclib.o    : $(ENSDIR)/extrefleclib.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<
