#
#     ##################################################################
#     ##################################################################
#     ######                                                      ######
#     ######      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 ARPS2WRF executable
#
#  AUTHOR:  Yunheng Wang
#           5/28/2003
#
#  Modification history:
#
#
#  OTHER INFORMATION:
#       See the makearps command.
#
#=======================================================================

INCFILE = /dev/null

include $(INCFILE)

#-----------------------------------------------------------------------
#
# 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
CPP = cpp

FIXFLAGS  =
FREEFLAGS =
CPPFLAGS  = -C -P

ARPS_LD = $(LDR)

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

TOPDIR     = 
BINDIR     = $(TOPDIR)
INCLDIR    = $(TOPDIR)/include
ARPSLIBDIR = $(TOPDIR)/lib
#EXTDIR = $(TOPDIR)/src/ext2arps

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

FFLAGS =
CFLAGS =
LDFLAGS =

#-----------------------------------------------------------------------
#
# 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:
#
# A2WEXE   = arps2wrf          ARPS2WRF executable
# A2WMPEXE = arps2wrf_mpi      ARPS2WRF mpi executable
#
#-----------------------------------------------------------------------
A2WEXE   = arps2wrf
A2WMPEXE = arps2wrf_mpi
WSEXE    = wrfstatic

#-----------------------------------------------------------------------
#
# ADAS library to be linked
#
# LIBARPS = libarps      ARPS shared library
# LIBADAS = libadas      ADAS shared library
#
#-----------------------------------------------------------------------

LIBARPS = libarps
LIBADAS = libadas

#-----------------------------------------------------------------------
#
# List of machine-dependent object codes
#
#-----------------------------------------------------------------------

PHDF5OBJ_ON  = wrf_iophdf5.o
PHDF5OBJ_OFF = wrf_ionophdf5.o
PHDF5OBJ     = $(PHDF5OBJ_OFF)

A2WMAINOBJ = arps2wrf.o

A2WOBJS1   = interplib.o wrf_iolib.o module_wrf_metadata.o wrf_ioncd.o \
             wrf_subs.o dump_wrf_input.o dump_wrf_bdy.o dump_wrf_static.o \
             readnamelist.o

MPIOBJ_ON  = wrf_mpsubs.o
MPOBJS_ON  = $(MPIOBJ_ON)

MPIOBJ_OFF = wrf_nompsubs.o
MPOBJS_OFF = $(MPIOBJ_OFF)

MPOBJS     = $(MPIOBJ)

A2WOBJS = $(A2WMAINOBJ) $(A2WOBJS1) $(MPOBJS) $(PHDF5OBJ)

WSMAINOBJ = wrfstatic.o

WSOBJS1   = wrfstaticlib.o wrf_iolib.o module_wrf_metadata.o wrf_ioncd.o \
            wrf_subs.o wrfsi_subs.o wrfsi_cio.o readnamelist.o           \
            dump_wrf_input.o dump_wrf_static.o

WSOBJS  = $(WSMAINOBJ) $(WSOBJS1) $(MPOBJS) $(PHDF5OBJ)

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

default: $(A2WEXE)

#-----------------------------------------------------------------------
#
# Compile and link ARPS model executable, arps
#
#-----------------------------------------------------------------------

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

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

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

$(BINDIR)/$(A2WEXE): $(A2WOBJS) $(ARPSLIBDIR)/$(LIBADAS).a \
                                $(ARPSLIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@                        \
                               $(A2WOBJS)                  \
                               $(ARPSLIBDIR)/$(LIBADAS).a \
                               $(ARPSLIBDIR)/$(LIBARPS).a \
                               $(LIBS)

$(BINDIR)/$(A2WMPEXE): $(A2WOBJS) $(ARPSLIBDIR)/$(LIBADAS).a \
                                $(ARPSLIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(A2WOBJS)    \
                               $(ARPSLIBDIR)/$(LIBADAS).a \
                               $(ARPSLIBDIR)/$(LIBARPS).a \
                               $(LIBS)

$(BINDIR)/$(WSEXE): $(WSOBJS) $(ARPSLIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(WSOBJS)             \
                               $(ARPSLIBDIR)/$(LIBARPS).a \
                               $(LIBS)

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

clean.arps2wrf:
	-$(RM) -f $(BINDIR)/$(A2WEXE) $(BINDIR)/$(A2WMPEXE)             \
                  $(BINDIR)/$(WSEXE)  $(A2WOBJS) $(WSOBJS)              \
                  $(PHDF5OBJ_ON) $(PHDF5OBJ_OFF)                        \
                  $(MPIOBJ_ON) $(MPIOBJ_OFF)                            \
                  wrf_subs.f90 *.mod *.d work.pc work.pcl

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

arps2wrf.o   : arps2wrf.f90   $(INCLDIR)/globcst.inc \
                              $(INCLDIR)/grid.inc \
                              $(INCLDIR)/phycst.inc \
                              module_wrf_metadata.o
	$(FTN) $(FFLAGS_main) $(FREEFLAGS) -c $<

wrfstatic.o   : wrfstatic.f90 module_wrf_metadata.o

interplib.o            : interplib.f90 module_wrf_metadata.o
dump_wrf_files.o       : dump_wrf_files.f90 module_wrf_metadata.o
wrf_iolib.o            : wrf_iolib.f90 module_wrf_metadata.o 
wrf_ioncd.o            : wrf_ioncd.f90 $(INCLDIR)/mp.inc
module_wrf_metadata.o  : module_wrf_metadata.f90
wrf_ionophdf5.o        : wrf_ionophdf5.f90
wrf_mpsubs.o           : wrf_mpsubs.f90 $(INCLDIR)/mp.inc
	$(FTNMP) $(FFLAGS) $(FREEFLAGS) -c $<
wrf_iophdf5.o	       : wrf_iophdf5.f90 $(INCLDIR)/mp.inc
	$(FTNMP) $(FFLAGS) $(FREEFLAGS) -c $<
wrf_subs.o             : wrf_subs.F
	-$(RM) -f wrf_subs.f90 wrf_subs.o
	$(CPP) $(CPPFLAGS) wrf_subs.F wrf_subs.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c wrf_subs.f90
wrfsi_subs.o           : wrfsi_subs.f
	$(FTN) $(FFLAGS) $(FIXFLAGS) -c $<
