#
#     ##################################################################
#     ##################################################################
#     ######                                                      ######
#     ######      Advanced Regional Prediction System (ARPS)      ######
#     ######                   Version 5.2                        ######
#     ######                                                      ######
#     ######                     Developed by                     ######
#     ######     Center for Analysis and Prediction of Storms     ######
#     ######                University of Oklahoma                ######
#     ######                                                      ######
#     ##################################################################
#     ##################################################################
#
#=======================================================================
#
#  PURPOSE: This makefile generates the nmm2arps executable
#
#  AUTHOR:  Yunheng Wang
#           12/17/2008
#
#  Modification history:
#
#
#  OTHER INFORMATION:
#       See the makearps command.
#
#=======================================================================

INCFILE = /dev/null

#include $(INCFILE)

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

FTN = ifort
FTNMP = $(FTN)
LDR = $(FTN)
CC  = gcc
CPP = cpp

ARPS_LD = $(LDR)

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

TOPDIR     = ../..
BINDIR     = $(TOPDIR)/bin
INCLDIR    = $(TOPDIR)/include
ARPSLIBDIR = $(TOPDIR)/lib
MODDIR     = $(TOPDIR)/modules

COMDIR     = $(TOPDIR)/src/common
ENSDIR     = $(TOPDIR)/src/arpsens
A2WDIR     = $(TOPDIR)/src/arps2wrf
A4WDIR     = $(TOPDIR)/src/arps4wrf

#-----------------------------------------------------------------------
#
# Compiler Flag of Options. The default is for Intel Fortran on Linux.
#
#-----------------------------------------------------------------------

FFLAGS = -I$(INCLDIR)
CFLAGS =
LDFLAGS =

FIXFLAGS  =
FREEFLAGS =
CPPFLAGS  = -C -P

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

.SUFFIXES: $(SUFFIXES) .f90

.f.o:
	$(FTN) $(FFLAGS) $(FIXFLAGS) -c $<
.f90.o:
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<
.c.o:
	$(CC)  $(CFLAGS) -c $<
.F.o:
	$(CPP) $(CPPFLAGS) $< $(addsuffix .f90, $(basename $<));
	$(FTNMP) $(FFLAGS) $(FREEFLAGS) -c $(addsuffix .f90, $(basename $<))
.mod.o:        # .mod --> .o dependency dropped

#-----------------------------------------------------------------------
#
# Executables to be generated by this make file:
#
# N2AEXE   = nmm2arps          NMM2ARPS executable
# N2AMPEXE = nmm2arps_mpi      NMM2ARPS mpi executable
#
#-----------------------------------------------------------------------

N2AEXE   = nmm2arps
N2AMPEXE = nmm2arps_mpi

#-----------------------------------------------------------------------
#
# ARPS library and WRF library to be linked
#
# LIBARPS = libarps      ARPS shared library
#
#-----------------------------------------------------------------------

LIBARPS = libarps
LIBADAS = libadas

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

MPIOBJ_ON  =
MPIOBJ_OFF =

MPIOBJS    = $(MPIOBJ_OFF)

#-----------------------------------------------------------------------
#
# List of code objects
#
#-----------------------------------------------------------------------

N2AMAINOBJ = nmm2arps.o
N2AMODULES = module_nmm2arps_namelist.o module_nmmgrid.o     \
             module_interpolation.o module_nmm_input.o

EXTMODULES = module_arpsgrid_constants.o module_dump_arpsgrid.o  \
             module_wrfgrid_constants.o

N2AOBJS1   = process_file.o interplib.o

N2AIMPORT  = wrf_subs.o wrf_parallel_module.o  \
             wrf_maputils_module.o wrf_mapprojs_module.o

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)

N2AOBJS = $(N2AIMPORT) $(EXTMODULES) $(N2AMODULES) $(POSTOBJS)  \
          $(MPIOBJS)   $(N2AOBJS1)   $(N2AMAINOBJ)

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

default: $(N2AEXE)

#-----------------------------------------------------------------------
#
# Compile and link executable
#
#-----------------------------------------------------------------------

$(N2AEXE):      $(BINDIR)/$(N2AEXE)
	@$(RM) wrf_parallel_module.f90 wrf_subs.f90
	@$(RM) wrf_parallel_module.o   wrf_subs.o
	ls -l $(BINDIR)/$(N2AEXE)

$(N2AMPEXE):    $(BINDIR)/$(N2AMPEXE)
	@$(RM) wrf_parallel_module.f90 wrf_subs.f90
	@$(RM) wrf_parallel_module.o   wrf_subs.o
	ls -l $(BINDIR)/$(N2AMPEXE)

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

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

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

clean.nmm2arps:
	-$(RM) -f $(BINDIR)/$(N2AEXE) $(BINDIR)/$(N2AMPEXE)  \
                  $(N2AOBJS) $(MPIOBJ_ON) $(MPIOBJ_OFF)

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

nmm2arps.o : nmm2arps.f90 module_wrfgrid_constants.o module_nmm2arps_namelist.o

module_namelist.o  : module_nmm2arps_namelist.f90 module_constants.o

module_nmmgrid.o   : module_nmmgrid.f90  \
                     module_nmm_input.o module_wrfgrid_constants.o

module_wrfgrid_constants.o    : $(A4WDIR)/module_wrfgrid_constants.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<
wrf_maputils_module.o : $(A4WDIR)/wrf_maputils_module.f90 module_wrfgrid_constants.o
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<
wrf_mapprojs_module.o : $(A4WDIR)/wrf_mapprojs_module.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<
wrf_parallel_module.o : $(A4WDIR)/wrf_parallel_module.F
	$(CPP) $(CPPFLAGS) $(A4WDIR)/wrf_parallel_module.F wrf_parallel_module.f90;
	$(FTNMP) $(FFLAGS) $(FREEFLAGS) -c wrf_parallel_module.f90

module_arpsgrid_constants.o : $(COMDIR)/module_arpsgrid_constants.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<

module_dump_arpsgrid.o : $(COMDIR)/module_dump_arpsgrid.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<

wrf_subs.o : $(A2WDIR)/wrf_subs.F
	-$(RM) -f wrf_subs.f90 wrf_subs.o
	$(CPP) $(CPPFLAGS) $(A2WDIR)/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 $<

