#
#     ##################################################################
#     ##################################################################
#     ######                                                      ######
#     ######      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 EXT2ARPS executable
#           library
#
#  AUTHOR:  Yuhe Liu
#           7/22/1997
#
#  Modification history:
#
#
#  OTHER INFORMATION:
#       See the makearps command.
#
#=======================================================================

INCFILE = /dev/null

#include $(INCFILE)

GEMINC = GEMPRM.AIX

#-----------------------------------------------------------------------
#
# 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
ENSDIR = $(TOPDIR)/src/arpsens
G2LDIR = $(TOPDIR)/src/external/g2lib
W2ADIR = $(TOPDIR)/src/wrf2arps

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

FFLAGS =
CFLAGS =
LDFLAGS =

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:
#
# E2AEXE   = ext2arps        EXT2ARPS executable
# E2AMPEXE = ext2arps_mpi    MP version of ext2arps
# L2AEXE   = ext2arps.laps   LAPS2ARPS executable
# G2AEXE   = ext2arps.laps   GEMPAK2ARPS executable
# A2GEXE   = arps2gem        ARPS2GEM executable
# A2NEXE   = arps2ncdf       ARPS2NCDF executable
# A2EEXE   = arps2eta212     ARPS2ETA212 executable
#
#-----------------------------------------------------------------------

E2AEXE   = ext2arps
E2AMPEXE = ext2arps_mpi
L2AEXE   = ext2arps.laps
G2AEXE   = ext2arps.gempak

A2GEXE   = arps2gem
A2NEXE   = arps2ncdf
A2EEXE   = arps2eta212
A2WEXE   = arps2wdssii

AVNEXE = extract_avn

#-----------------------------------------------------------------------
#
# 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
#
#-----------------------------------------------------------------------

E2AMAINOBJ = ext2arps.o

E2AOBJS1 = extlib.o getextd3d.o gribio_c.o griblib3d.o \
           rdnmcgrb3d.o nmcdecode.o getcoamps.o getwrfdata.o

GETLAPSOBJ   = getlaps3d.o
GETGEMPAKOBJ = getgempak3d.o
NOLAPSOBJ    = nolaps3d.o
NOGEMPAKOBJ  = nogempak3d.o

GRIB2_OFF    = rd_nogrb2.o $(G2LDIR)/mova2i.o
GRIB2_ON     = rd_grb2.o
GRIB2OBJ     = $(GRIB2_OFF)

NETOBJ_ON  = wrf_ioncd.o
NETOBJ_OFF = nowrfnet.o
NETOBJ     = $(NETOBJ_OFF)

GEMOBJ_OFF = nogemio.o
GEMOBJ     = $(GEMOBJ_OFF)

CRTM_ON   = crtmpost.o
CRTM_OFF  = crtm_no.o
CRTMOBJ   = $(CRTM_OFF)

CITM_ON   =
CITM_OFF  = $(ENSDIR)/citm_no.o
CITMOBJ   = $(CITM_OFF)

POSTOBJS   = $(ENSDIR)/postcore.o $(ENSDIR)/arpsenslib.o     \
             $(ENSDIR)/arpspostlib.o $(ENSDIR)/extrefleclib.o \
             $(ENSDIR)/$(GEMOBJ) $(ENSDIR)/$(CRTMOBJ) $(CITMOBJ)

E2AOBJS = $(E2AMAINOBJ) $(E2AOBJS1) $(NOGEMPAKOBJ)  $(NOLAPSOBJ) $(GRIB2OBJ) \
          $(POSTOBJS)
L2AOBJS = $(E2AMAINOBJ) $(E2AOBJS1) $(NOGEMPAKOBJ)  $(GETLAPSOBJ)
G2AOBJS = $(E2AMAINOBJ) $(E2AOBJS1) $(GETGEMPAKOBJ) $(NOLAPSOBJ) $(GRIB2OBJ)

A2GOBJS = arps2gem.o v2dint.o
A2NOBJS = arps2ncdf.o v2dint.o

A2WOBJS = arps2wdssii.o

A2EOBJS = arps2eta212.o v2dint.o extlib.o

AVNMAINOBJ = extract_avn.o
AVNOBJS1 = extlib.o gribio_c.o griblib3d.o \
           rdnmcgrb3d.o nmcdecode.o
AVNOBJS = $(AVNMAINOBJ) $(AVNOBJS1) $(GRIB2OBJ)

MPIOBJ_ON = mpisubs.o
MPOBJS_ON = $(MPIOBJ_ON)

MPIOBJ_OFF = nompsubs.o
MPOBJS_OFF = $(MPIOBJ_OFF)

MPOBJS = $(MPIOBJ)

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

default: $(E2AEXE)

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

$(E2AEXE):      $(BINDIR)/$(E2AEXE)
	ls -l $(BINDIR)/$(E2AEXE)
$(E2AMPEXE):      $(BINDIR)/$(E2AMPEXE)
	ls -l $(BINDIR)/$(E2AMPEXE)
$(L2AEXE):      $(BINDIR)/$(L2AEXE)
	ls -l $(BINDIR)/$(L2AEXE)
$(G2AEXE):      $(BINDIR)/$(G2AEXE)
	ls -l $(BINDIR)/$(G2AEXE)

$(BINDIR)/$(E2AEXE): $(E2AOBJS) $(LIBDIR)/$(LIBADAS).a \
                     $(NETOBJ)  $(LIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(E2AOBJS)  $(NETOBJ)   \
                               $(LIBDIR)/$(LIBADAS).a \
                               $(LIBDIR)/$(LIBARPS).a \
                               $(LIBS)

$(BINDIR)/$(E2AMPEXE): $(E2AOBJS) $(LIBDIR)/$(LIBADAS).a \
                       $(NETOBJ)  $(LIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(E2AOBJS)  $(NETOBJ)   \
                               $(LIBDIR)/$(LIBADAS).a \
                               $(LIBDIR)/$(LIBARPS).a \
                               $(LIBS)

$(BINDIR)/$(L2AEXE): $(L2AOBJS) $(LIBDIR)/$(LIBADAS).a \
                                $(LIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(L2AOBJS)    \
                               $(LIBDIR)/$(LIBADAS).a \
                               $(LIBDIR)/$(LIBARPS).a \
                               $(LIBS)

$(BINDIR)/$(G2AEXE): $(G2AOBJS) $(LIBDIR)/$(LIBADAS).a \
                                $(LIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(G2AOBJS)    \
                               $(LIBDIR)/$(LIBADAS).a \
                               $(LIBDIR)/$(LIBARPS).a \
                               $(LIBS) $(LIBJASPER) $(PNGLIB)

$(A2GEXE): $(A2GOBJS) $(LIBDIR)/$(LIBADAS).a \
                      $(LIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $(BINDIR)/$@ $(A2GOBJS)    \
                   $(LIBDIR)/$(LIBADAS).a \
                   $(LIBDIR)/$(LIBARPS).a \
                   $(LIBS)

$(A2NEXE): $(BINDIR)/$(A2NEXE)
	ls -l  $(BINDIR)/$(A2NEXE)
$(BINDIR)/$(A2NEXE): $(A2NOBJS) $(LIBDIR)/$(LIBADAS).a \
                      $(LIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(A2NOBJS)            \
                               $(LIBDIR)/$(LIBADAS).a \
                               $(LIBDIR)/$(LIBARPS).a \
                               $(LIBS)

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


$(A2EEXE): $(BINDIR)/$(A2EEXE)
	ls -l  $(BINDIR)/$(A2EEXE)
$(BINDIR)/$(A2EEXE): $(A2EOBJS) $(LIBDIR)/$(LIBADAS).a \
                                $(LIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(A2EOBJS)            \
                               $(LIBDIR)/$(LIBADAS).a \
                               $(LIBDIR)/$(LIBARPS).a \
                               $(LIBS)

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

$(BINDIR)/$(AVNEXE): $(AVNOBJS) $(LIBDIR)/$(LIBADAS).a \
                                $(LIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(AVNOBJS)    \
                                $(LIBDIR)/$(LIBARPS).a \
                                $(LIBDIR)/$(LIBADAS).a \
                                $(LIBS)

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

clean.ext2arps:
	-$(RM) -f $(BINDIR)/$(E2AEXE) $(E2AOBJS)          \
                  $(BINDIR)/$(G2AEXE) $(GETGEMPAKOBJ)     \
                  $(BINDIR)/$(L2AEXE) $(GETLAPSOBJ)       \
                  $(BINDIR)/$(E2AMPEXE) $(GRIB2_ON)       \
                  $(POSTOBJS) $(NETOBJ_ON) $(NETOBJ_OFF)  \
                  *.mod                                   \
                  GEMINC:GEMPRM.PRM work.pc work.pcl

clean.arps2gem:
	-$(RM) -f $(BINDIR)/$(A2GEXE) $(A2GOBJS) GEMINC:GEMPRM.PRM

clean.arps2ncdf:
	-$(RM) -f $(BINDIR)/$(A2NEXE) $(A2NOBJS)
	-$(RM) -f $(BINDIR)/$(A2WEXE) $(A2WOBJS)

clean.arps2eta212:
	-$(RM) -f $(BINDIR)/$(A2EEXE) $(A2EOBJS)

clean.extract_avn:
	-$(RM) -f $(BINDIR)/$(AVNEXE) $(AVNOBJS)

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

ext2arps.o   : ext2arps.f90   $(INCLDIR)/bndry.inc   \
                              $(INCLDIR)/globcst.inc \
                              $(INCLDIR)/grid.inc \
                              $(INCLDIR)/phycst.inc \
                              $(INCLDIR)/ext2arps.inc \
                              $(INCLDIR)/adjust.inc
	$(FTN) $(FFLAGS_main) $(FREEFLAGS) -c $<
extlib.o     : extlib.f90     $(INCLDIR)/phycst.inc
getcoamps.o  : getcoamps.f90
getextd3d.o  : getextd3d.f90  $(INCLDIR)/gribcst.inc \
                              $(INCLDIR)/globcst.inc \
                              $(INCLDIR)/grid.inc \
                              $(INCLDIR)/phycst.inc
getgempak3d.o: getgempak3d.f90
	$(RM) -f GEMINC:GEMPRM.PRM
	$(LN) -s $(INCLDIR)/$(GEMINC).inc GEMINC:GEMPRM.PRM
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c getgempak3d.f90

getlaps3d.o  : getlaps3d.f90  $(INCLDIR)/lapsparms.cmn
gribio_c.o   : gribio_c.c
griblib3d.o  : griblib3d.f90  $(INCLDIR)/gribcst.inc
	$(FTN) $(FFLAGS_main) $(FREEFLAGS) -c $<
nmcdecode.o  : nmcdecode.f90
rdnmcgrb3d.o : rdnmcgrb3d.f90 $(INCLDIR)/gribcst.inc

arps2gem.o   : arps2gem.f90   $(INCLDIR)/arps2gem.inc \
                              $(INCLDIR)/globcst.inc  \
                              $(INCLDIR)/grid.inc  \
                              $(INCLDIR)/phycst.inc
	$(RM) -f GEMINC:GEMPRM.PRM
	$(LN) -s $(INCLDIR)/$(GEMINC).inc GEMINC:GEMPRM.PRM
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<

arps2ncdf.o  : arps2ncdf.f90  $(INCLDIR)/arps2ncdf.inc \
                              $(INCLDIR)/globcst.inc   \
                              $(INCLDIR)/grid.inc   \
                              $(INCLDIR)/phycst.inc

arps2eta212.o: arps2eta212.f90                      \
                              $(INCLDIR)/globcst.inc  \
                              $(INCLDIR)/grid.inc     \
                              $(INCLDIR)/phycst.inc

v2dint.o     : v2dint.f90     $(INCLDIR)/globcst.inc

extract_avn.o   : extract_avn.f90 $(INCLDIR)/globcst.inc \
                                $(INCLDIR)/phycst.inc \
                                $(INCLDIR)/gribcst.inc

$(ENSDIR)/postcore.o     : $(ENSDIR)/postcore.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<
$(ENSDIR)/arpsenslib.o   : $(ENSDIR)/arpsenslib.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<
$(ENSDIR)/arpspostlib.o  : $(ENSDIR)/arpspostlib.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<
$(ENSDIR)/extrefleclib.o : $(ENSDIR)/extrefleclib.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<

$(ENSDIR)/nogemio.o      : $(ENSDIR)/nogemio.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<
$(ENSDIR)/crtmpost.o : $(ENSDIR)/crtmpost.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<
$(ENSDIR)/crtm_no.o  : $(ENSDIR)/crtm_no.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<

$(ENSDIR)/citm_no.o  : $(ENSDIR)/citm_no.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<

$(G2LDIR)/mova2i.o       : $(G2LDIR)/mova2i.c
	$(CC) $(CFLAGS) -o $@ -c $<

wrf_ioncd.o      : $(W2ADIR)/wrf_ioncd.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<
