#
#     ##################################################################
#     ##################################################################
#     ######                                                      ######
#     ######      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 WRF2ARPS executable
#
#  AUTHOR:  Yunheng Wang
#           9/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
FTNMP = $(FTN)
LDR   = $(FTN)
CC    = cc
CPP   = cpp

ARPS_LD = $(LDR)

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

TOPDIR     =
BINDIR     = $(TOPDIR)/bin
INCLDIR    = $(TOPDIR)/include
ARPSLIBDIR = $(TOPDIR)/lib
EXTDIR     = $(TOPDIR)/src/ext2arps
ENSDIR     = $(TOPDIR)/src/arpsens

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

FFLAGS =
CFLAGS =
LDFLAGS =
CPPFLAGS = -C -P

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:
#
# W2AEXE   = wrf2arps          WRF2ARPS executable
# W2AMPEXE = wrf2arps_mpi      WRF2ARPS mpi executable
#
#-----------------------------------------------------------------------

W2AEXE     = wrf2arps
W2AMPEXE   = wrf2arps_mpi
WEXTSNDEXE = wrfextsnd
JOINWRFEXE = joinwrfh

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

GEMOBJ_ON  = gemio.o
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)

W2AMAINOBJ = wrf2arps.o

W2AOBJS1   = getwrfd3d.o wrfintrplib.o wrf_ioncd.o wrf_subs.o \
             get_wrf_one_file.o get_wrf_multi_files.o         \
             module_wrf2arps_post.o  $(EXTDIR)/extlib.o

W2AOBJS = $(W2AMAINOBJ) $(W2AOBJS1) $(POSTOBJS) $(PHDF5OBJ)

MPIOBJ_ON  = wrf_mpsubs.o
MPOBJS_ON  = $(MPIOBJ_ON)

MPIOBJ_OFF = wrf_nompsubs.o
MPOBJS_OFF = $(MPIOBJ_OFF)

MPOBJS     = $(MPIOBJ)

WEXTSNDOBJ = wrfextsnd.o

WEXTSNDOBJS1   = getwrfd3d.o wrf_ioncd.o wrf_subs.o          \
                 get_wrf_one_file.o get_wrf_multi_files.o    \
                 module_wrf2arps_post.o $(EXTDIR)/extlib.o   \
                 $(POSTOBJS)

WEXTSNDOBJS = $(WEXTSNDOBJ) $(WEXTSNDOBJS1) $(PHDF5OBJ)

JOINWRFOBJS = joinwrf.o fjoinwrf.o

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

default: $(W2AEXE)

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

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

$(BINDIR)/$(W2AEXE): $(W2AOBJS) $(ARPSLIBDIR)/$(LIBADAS).a \
                     $(MPOBJS)  $(ARPSLIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(W2AOBJS) $(MPOBJS)  \
                               $(ARPSLIBDIR)/$(LIBADAS).a \
                               $(ARPSLIBDIR)/$(LIBARPS).a \
                               $(LIBS)

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

$(BINDIR)/$(W2AMPEXE): $(W2AOBJS) $(ARPSLIBDIR)/$(LIBADAS).a \
                       $(MPOBJS)  $(ARPSLIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(W2AOBJS) $(MPOBJS)  \
                               $(ARPSLIBDIR)/$(LIBADAS).a \
                               $(ARPSLIBDIR)/$(LIBARPS).a \
                               $(LIBS)

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

$(BINDIR)/$(WEXTSNDEXE): $(WEXTSNDOBJS) $(ARPSLIBDIR)/$(LIBADAS).a \
                     $(MPOBJS)  $(ARPSLIBDIR)/$(LIBARPS).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(WEXTSNDOBJS) $(MPOBJS)  \
                               $(ARPSLIBDIR)/$(LIBADAS).a \
                               $(ARPSLIBDIR)/$(LIBARPS).a \
                               $(LIBS)

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

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

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

clean.wrf2arps:
	-$(RM) -f $(BINDIR)/$(W2AEXE) $(BINDIR)/$(W2AMPEXE)          \
                  $(BINDIR)/$(JOINWRFEXE)   $(JOINWRFOBJS)           \
                  $(W2AOBJS) $(PHDF5OBJ_ON) $(PHDF5OBJ_OFF)          \
                  $(WEXTSNDOBJS) $(MPIOBJ_ON) $(MPIOBJ_OFF)          \
                  $(POSTOBJS) $(GEMOBJ_ON) $(ENSDIR)/GEMPRM.PRM      \
                  wrf_subs.f90 *.mod *.d work.pc work.pcl

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

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

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

getwrfd3d.o            : getwrfd3d.f90
wrfintrplib.o          : wrfintrplib.f90

wrf_ionophdf5.o        : wrf_ionophdf5.f90
wrf_ioncd.o            : wrf_ioncd.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

$(EXTDIR)/extlib.o     : $(EXTDIR)/extlib.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -o $@ -c $<

$(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)/gemio.o       : $(ENSDIR)/gemio.f90
	@$(RM) -f $(ENSDIR)/GEMPRM.PRM
	@if [ "$(NAWIPS)" != "" ]; then \
        sed -e 's/^C/!/;/MPAORT/s/= 3,/= 3, \&/;/MPALAM/s/+//;s/INCLUDE/!INCLUDE/' $(NAWIPS)/gempak/include/GEMPRM.PRM > $(ENSDIR)/GEMPRM.PRM; \
        fi
	$(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 $<
