#
#     ##################################################################
#     ##################################################################
#     ######                                                      ######
#     ######      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 executable.
#
#  AUTHOR:  Yuhe Liu
#           7/22/1997
#
#  Modification history:
#
#  13 March 2002 (Eric Kemp)
#  Added WRF BMJ source code files.
#
#  6 June 2002 (Eric Kemp)
#  Added intrpsoil3d.f90.
#
#  10 June 2002 (Eric Kemp)
#  Moved intrpsoil3d.f90 to src/adas.
#
#  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 = $(FTN)
LDR   = $(FTN)
CC    = cc
CPP   = cpp

ARPS_LD = $(LDR)

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

TOPDIR  =
BINDIR  = $(TOPDIR)
INCLDIR = $(TOPDIR)/include
LIBDIR  = $(TOPDIR)/lib
MODDIR  = $(TOPDIR)/modules

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

FFLAGS =
FFLAGS_main =
CFLAGS =
LDFLAGS =
ICEFLAG =
RADFLAG =
THMFLAG =

CPPFLAGS  = -C -P
FIXFLAGS  =
FREEFLAGS =

ARFLAG =

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

#-----------------------------------------------------------------------
#
# Define HDF, Savi3D, NetCDF, PVM, and MPI libraries
#
#-----------------------------------------------------------------------

#-----------------------------------------------------------------------
#
# Executable to be generated by this make file:
#
# ARPSEXE      = arps         ARPS model executable
# ARPSREADEXE  = arpsread     ARPSREAD executable
#
#-----------------------------------------------------------------------

ARPSEXE        = arps
ARPSMPEXE      = arps_mpi
ARPSREADEXE    = arpsread
BUDGEXE        = arpsmpbudget

#-----------------------------------------------------------------------
#
# Object library to be generated for ARPS solver:
#
# ARPSSOLVER  = arpssolver    ARPS solver library
# LIBARPS     = libarps       ARPS shared library
# LIBRADTN    = libradtn      Radiation shared library
#
#-----------------------------------------------------------------------

ARPSSOLVER  = arpssolver
LIBARPS     = libarps
LIBRADTN    = libradtn

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

GRADSOBJ = gradsio3d.o
GRIBOBJS = gribio3d.o gribdec3d.o gribenc3d.o

MPIOBJ_ON = mpisubs.o
MPOBJS_ON = $(MPIOBJ_ON)

HDFOBJ_ON = hdfio3d.o
HDFSPLITOBJ_ON = $(HDFOBJ_ON)
HDFJOINOBJ_ON  = $(HDFOBJ_ON)
NETOBJ_ON = netio3d.o module_arps_netio_metadata.o
PAKOBJ_ON = pakio3d.o
SVIOBJ_ON = sviio3d.o
V5DOBJ_ON = binio.o v5dio3d.o v5d.o
IOOBJS_ON = $(GRADSOBJ)  $(GRIBOBJS) $(HDFOBJ_ON) $(PAKOBJ_ON) \
            $(NETOBJ_ON) $(SVIOBJ_ON) $(V5DOBJ_ON)

MPIOBJ_OFF = nompsubs.o
MPOBJS_OFF = $(MPIOBJ_OFF)

HDFOBJ_OFF = nohdfio3d.o
PAKOBJ_OFF = nopakio3d.o
NETOBJ_OFF = nonetio3d.o
SVIOBJ_OFF = nosviio3d.o
V5DOBJ_OFF = nov5dio3d.o
IOOBJS_OFF = $(HDFOBJ_OFF) $(PAKOBJ_OFF) $(SVIOBJ_OFF) $(NETOBJ_OFF) $(V5DOBJ_OFF)

IOOBJS1 = iolib3d.o exbcio3d.o arpsio3d.o binio3d.o ascio3d.o read_arpsmp.o

HDFOBJ  = $(HDFOBJ_OFF)
PAKOBJ  = $(PAKOBJ_OFF)
SVIOBJ  = $(SVIOBJ_OFF)
NETOBJ  = $(NETOBJ_OFF)
V5DOBJ  = $(V5DOBJ_OFF)
IOOBJS2 = $(GRADSOBJ) $(GRIBOBJS) $(HDFOBJ)  $(PAKOBJ) \
          $(SVIOBJ)   $(NETOBJ)   $(V5DOBJ)

MPOBJS  = $(MPIOBJ)

IOOBJS  = $(IOOBJS1) $(IOOBJS2)

CRAYLIBOBJ = craylib3d.o
HTCHLIBOBJ = htchlib3d.o
LNXLIBOBJ  = lnxlib3d.o mkdir.o
GENLIBOBJ  = genlib3d.o
IBMLIBOBJ  = ibmlib3d.o mkdir.o
IRIXLIBOBJ = irixlib3d.o
SUNLIBOBJ  = sunlib3d.o
T3DLIBOBJ  = t3dlib3d.o
TRU64LIBOBJ = tru64lib3d.o

MACHLIBOBJS = $(CRAYLIBOBJ) $(GENLIBOBJ) $(HTCHLIBOBJ) $(IBMLIBOBJ) \
              $(LNXLIBOBJ)  $(SUNLIBOBJ) $(IRIXLIBOBJ) $(T3DLIBOBJ) \
              $(TRU64LIBOBJ)

LIBOBJS1 = arpslib3d.o  outlib3d.o timelib3d.o thermolib3d.o alloclib.o

LIBRADOBJS = radfrc3d.o raddata3d.o radtrns3d.o irrad3d.o sorad3d.o radlib3d.o my3mom_fncs_mod.o

ASSIMDUMMY = assimdummy.o
ASSIMOBJ =
ASSIMOPT = $(ASSIMDUMMY)

MACHLIBOBJ = $(GENLIBOBJ)
LIBOBJS = $(LIBOBJS1) $(MACHLIBOBJ) $(ASSIMOPT)

#EMK BMJ
LIBARPSOBJS1 = module_precision.o bc3d.o celtrk3d.o fft99f.o grdtrns3d.o \
               rhouvw.o img3d.o inibase3d.o initlib3d.o initpara3d.o \
               maproj3d.o operat3d.o rst3d.o setbdt3d.o vfftpack.o \
               wwcont3d.o nudge.o smooth3d.o module_cu_bmj.o \
               interface_wrf_bmj.o module_cu_kfeta.o \
               interface_wrf_kfeta.o smooth3d.o my3mom_fncs_mod.o \
               module_arbitrary_vario.o

NCARGOBJ_ON  = ncarg3d.o
NCARGOBJ_OFF = noncarg3d.o

NCARGOBJS = $(NCARGOBJ_ON) $(NCARGOBJ_OFF)

NCARGOBJ = $(NCARGOBJ_OFF)

LIBARPSOBJS = $(LIBARPSOBJS1) $(IOOBJS) $(LIBOBJS) $(NCARGOBJ) \
              $(MPOBJS)

BUDGOBJ = arpsmpbudget.o arpsmpbudgetlib.o

#-----------------------------------------------------------------------
#
# List of ARPS Model Source Files:
#
#-----------------------------------------------------------------------

ARPSMAINOBJ = arps.o

#wdt update
# Move large routines to beginning of list to speed up parallel make
ARPSOBJS1 = module_precision.o sorad3d.o solve3d.o tmix3d.o micro_ice3d.o \
            advct3d.o advfct3d.o bc3d.o bcdif3d.o chksym3d.o cmix3d.o \
            cumulus3d.o energy3d.o exbc3d.o fft99f.o force3d.o        \
            grdtrns3d.o celtrk3d.o img3d.o initpara3d.o init3d.o      \
            inibase3d.o irrad3d.o kfinterfc.o kfpara.o maproj3d.o     \
            micro3d.o micro_nem3d.o micro_lfo_ice.o operat3d.o        \
            out3d.o raddata3d.o radfrc3d.o radlib3d.o radtrns3d.o     \
            raydmp3d.o rst3d.o setbdt3d.o sfcphy3d.o soildiag3d.o     \
            soilebm3d.o tinteg3d.o tke3d.o  initlib3d.o rhouvw.o      \
            vfftpack.o wwcont3d.o nudge.o smooth3d.o                  \
            interface_wrf_bmj.o module_cu_bmj.o module_cu_kfeta.o     \
            interface_wrf_kfeta.o module_bl_ysu.o pbldrivers.o        \
            my3mom_fncs_mod.o my2mom_fncs_mod.o my3mom_sedi_mod.o     \
            my3mom_main_mod.o micro_MY.o micro_wsm6.o module_mp_wsm6.o \
            micro_MY2MOM.o

ARPSOBJS2 = initenkf.o obsio.o cvndataread.o radarInfo.o arpsarray.o \
            radarlib.o module_mpi_enkf.o radarlib3d.o anxlib3d.o     \
            intfield.o cvndataensrf.o enkfhelp.o global_module.o     \
            enkflib.o calculate_hx.o convert2radar.o dualpara.o      \
            obsoperator.o attenuate.o

ARPSOBJS  = $(ARPSOBJS1)  $(IOOBJS) $(LIBOBJS) $(MPOBJS)

ARPSREADOBJ = arpsread.o

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

default: $(ARPSEXE)

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

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

$(BINDIR)/$(ARPSEXE): $(ARPSMAINOBJ) $(ARPSOBJS)
	$(ARPS_LD) $(LDFLAGS) -o $@ $(ARPSMAINOBJ) $(ARPSOBJS) $(LIBS)

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

$(BINDIR)/$(ARPSMPEXE): $(ARPSMAINOBJ) $(ARPSOBJS)
	$(ARPS_LD) $(LDFLAGS) -o $@ $(ARPSMAINOBJ) $(ARPSOBJS) $(LIBS)

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

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

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

#-----------------------------------------------------------------------
#
# Make ARPS solver library. In order to assure that optional files will
# be replaced by the choice given by makearps, the old arpssolver.a
# should be removed first.
#
#-----------------------------------------------------------------------

$(ARPSSOLVER): $(ARPSOBJS)
	$(RM) -f $(LIBDIR)/$@.a
	$(AR) $(ARFLAG) rcs $(LIBDIR)/$@.a $(ARPSOBJS)

#-----------------------------------------------------------------------
#
# Make ARPS shared library. In order to assure that optional files will
# be replaced by the choice given by makearps, the old libarps.a
# should be removed first.
#
#-----------------------------------------------------------------------

$(LIBARPS): $(LIBARPSOBJS)
	$(RM) -f $(LIBDIR)/$@.a
	$(AR) $(ARFLAG) rcs $(LIBDIR)/$@.a $(LIBARPSOBJS)


$(LIBRADTN): $(LIBRADOBJS)
	$(RM) -f $(LIBDIR)/$@.a
	$(AR) $(ARFLAG) rcs $(LIBDIR)/$@.a $(LIBRADOBJS)


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

clean: clean.arps clean.solver clean.libarps clean.arpsread clean.arpsmpbudget

clean.arps:
	-$(RM) -f $(BINDIR)/$(ARPSEXE) $(ARPSMAINOBJ) $(ARPSOBJS) \
                  $(LIBARPSOBJS) $(IOOBJS_ON) $(IOOBJS_OFF)       \
                  $(MACHLIBOBJS) $(NCARGOBJS) $(MPOBJS_ON)        \
                  $(BINDIR)/$(ARPSMPEXE)                          \
                  lnxlib3d.f90 module_mp_wsm6.f90 module_precision.f90 \
                  *.mod *.d work.pc work.pcl

clean.solver:
	-$(RM) -f $(ARPSOBJS)   $(LIBARPSOBJS) $(IOOBJS_ON) \
                  $(IOOBJS_OFF) $(MACHLIBOBJS) $(NCARGOBJS) \
                  $(LIBDIR)/$(ARPSSOLVER).a $(MPOBS_ON)     \
                  *.mod *.d work.pc work.pcl

clean.libarps:
	-$(RM) -f $(LIBARPSOBJS) $(IOOBJS_ON) $(IOOBJS_OFF) \
                  $(MACHLIBOBJS) $(NCARGOBJS) $(MPOBJS_ON)  \
                  $(MPOBJS_OFF) $(LIBDIR)/$(LIBARPS).a      \
                  lnxlib3d.f90 module_precision.f90         \
                  *.mod *.d work.pc work.pcl

clean.libradtn:
	-$(RM) -f $(LIBRADOBJS) $(LIBDIR)/$(LIBRADTN).a

clean.arpsread:
	-$(RM) -f $(BINDIR)/$(ARPSREADEXE) $(ARPSREADOBJ)

clean.arpsmpbudget:
	-$(RM) -f $(BINDIR)/$(BUDGEXE) $(BUDGOBJ)

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

advct3d.o    : advct3d.f90   $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
advfct3d.o   : advfct3d.f90  $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
alloclib.o   : alloclib.f90  $(INCLDIR)/alloc.inc
arps.o       : arps.f90      $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/radcst.inc \
                             $(INCLDIR)/alloc.inc \
                             $(INCLDIR)/mp.inc \
                             $(INCLDIR)/nudging.inc  \
                             $(INCLDIR)/phycst.inc
	$(FTN) $(FFLAGS_main) $(FREEFLAGS) -c $<
arpsio3d.o   : arpsio3d.f90  $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/indtflg.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/exbc.inc \
                             $(INCLDIR)/mp.inc
arpslib3d.o  : arpslib3d.f90 $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/arpssfc.inc \
                             $(INCLDIR)/mp.inc \
                             $(INCLDIR)/grid.inc
ascio3d.o    : ascio3d.f90   $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/indtflg.inc
bc3d.o       : bc3d.f90      $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/timelvls.inc
bcdif3d.o    : bcdif3d.f90   $(INCLDIR)/globcst.inc
binio.o      : binio.c       $(INCLDIR)/binio.h
binio3d.o    : binio3d.f90   $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/indtflg.inc \
                             $(INCLDIR)/mp.inc
celtrk3d.o   : celtrk3d.f90  $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc
chksym3d.o   : chksym3d.f90
cmix3d.o     : cmix3d.f90    $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
craylib3d.o  : craylib3d.f90
tru64lib3d.o : tru64lib3d.f90
cumulus3d.o  : cumulus3d.f90 $(INCLDIR)/cumucst.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc
energy3d.o   : energy3d.f90  $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/mp.inc
exbc3d.o     : exbc3d.f90    $(INCLDIR)/exbc.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
exbcio3d.o   : exbcio3d.f90  $(INCLDIR)/exbc.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
fft99f.o     : fft99f.f90
force3d.o    : force3d.f90   $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/assim.inc \
                             $(INCLDIR)/exbc.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/grid.inc
rhouvw.o     : rhouvw.f90

lnxlib3d.o   : lnxlib3d.F
	$(CPP) $(CPPFLAGS) lnxlib3d.F lnxlib3d.f90;
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c lnxlib3d.f90

module_mpi_enkf.o   : $(TOPDIR)/src/arpsenkf/module_mpi_enkf.F
	$(CPP) $(CPPFLAGS) $(TOPDIR)/src/arpsenkf/module_mpi_enkf.F $(TOPDIR)/src/arpsenkf/module_mpi_enkf.f90;
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $(TOPDIR)/src/arpsenkf/module_mpi_enkf.f90

genlib3d.o   : genlib3d.f90
gradsio3d.o  : gradsio3d.f90 $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/indtflg.inc
gribdec3d.o  : gribdec3d.f90 $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/indtflg.inc
gribenc3d.o  : gribenc3d.f90 $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc
gribio3d.o   : gribio3d.f90  $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/indtflg.inc \
                             $(INCLDIR)/mp.inc \
                             $(INCLDIR)/grid.inc
grdtrns3d.o  : grdtrns3d.f90 $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/mp.inc
hdfio3d.o    : hdfio3d.f90   module_precision.o $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/indtflg.inc \
                             $(INCLDIR)/alloc.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
mpisubs.o    : mpisubs.f90   $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/mp.inc \
                             module_precision.o
	$(FTNMP) $(FFLAGS) $(FREEFLAGS) -c $<

module_precision.o: module_precision.F
	-$(RM) -f module_precision.f90;
	$(CPP) $(CPPFLAGS) module_precision.F module_precision.f90;
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c module_precision.f90

htchlib3d.o  : htchlib3d.f90
ibmlib3d.o   : ibmlib3d.f90  $(INCLDIR)/mp.inc
img3d.o      : img3d.f90
inibase3d.o  : inibase3d.f90 thermolib3d.f90 \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/mp.inc \
                             $(INCLDIR)/grid.inc
	$(FTN) $(FFLAGS) $(THMFLAG) $(FREEFLAGS) -c $<
init3d.o     : init3d.f90 \
                             $(INCLDIR)/bndry.inc   \
                             $(INCLDIR)/exbc.inc    \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc  \
                             $(INCLDIR)/indtflg.inc \
                             $(INCLDIR)/nudging.inc \
                             $(INCLDIR)/timelvls.inc
	$(FTN) $(FFLAGS) $(THMFLAG) $(FREEFLAGS) -c $<
initlib3d.o     : initlib3d.f90 thermolib3d.f90 \
                             my3mom_fncs_mod.o     \
                             $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/exbc.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/indtflg.inc \
                             $(INCLDIR)/soilcst.inc \
                             $(INCLDIR)/nudging.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
	$(FTN) $(FFLAGS) $(THMFLAG) $(FREEFLAGS) -c $<
initpara3d.o : initpara3d.f90  $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/exbc.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/soilcst.inc \
                             $(INCLDIR)/nudging.inc \
                             $(INCLDIR)/radcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc \
                             $(INCLDIR)/agricst.inc \
                             $(INCLDIR)/nodal.inc
iolib3d.o    : iolib3d.f90   $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
irixlib3d.o  : irixlib3d.f90
irrad3d.o    : irrad3d.f90 radlib3d.f90
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
maproj3d.o   : maproj3d.f90  $(INCLDIR)/mp.inc
kfinterfc.o  : kfinterfc.f90 $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc
	$(FTN) $(FFLAGS) $(THMFLAG) $(FREEFLAGS) -c $<
kfpara.o     : kfpara.f90
	$(FTN) $(FFLAGS) $(THMFLAG) $(FREEFLAGS) -c $<
micro3d.o    : micro3d.f90 thermolib3d.f90 \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/grid.inc
	$(FTN) $(FFLAGS) $(THMFLAG) $(FREEFLAGS) -c $<
micro_ice3d.o: micro_ice3d.f90 $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/timelvls.inc
	$(FTN) $(FFLAGS) $(ICEFLAG) $(THMFLAG) $(FREEFLAGS) -c $<
micro_nem3d.o: micro_nem3d.f90 thermolib3d.f90 \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/nemcst.inc  \
                             $(INCLDIR)/phycst.inc
	$(FTN) $(FFLAGS) $(THMFLAG) $(FREEFLAGS) -c $<
micro_lfo_ice.o: micro_lfo_ice.f90 $(INCLDIR)/globcst.inc
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<

micro_MY.o: micro_MY.f90 my3mom_fncs_mod.o my2mom_fncs_mod.o \
            my3mom_sedi_mod.o my3mom_main_mod.o              \
        $(INCLDIR)/globcst.inc

micro_MY2MOM.o: micro_MY2MOM.f90 my2mom_fncs_mod.o           \
        $(INCLDIR)/globcst.inc

my3mom_fncs_mod.o: my3mom_fncs_mod.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<

my2mom_fncs_mod.o: my2mom_fncs_mod.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<

my3mom_sedi_mod.o: my3mom_sedi_mod.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<

my3mom_main_mod.o: my3mom_main_mod.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<

micro_wsm6.o : micro_wsm6.f90 module_mp_wsm6.o

module_mp_wsm6.o: module_mp_wsm6.F
	-$(RM) -f module_mp_wsM6.f90;
	$(CPP) $(CPPFLAGS) module_mp_wsm6.F module_mp_wsm6.f90;
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c module_mp_wsm6.f90

netio3d.o    : netio3d.f90 module_arps_netio_metadata.o  \
               $(INCLDIR)/globcst.inc $(INCLDIR)/indtflg.inc
nohdfio3d.o  : nohdfio3d.f90
nonetio3d.o  : nonetio3d.f90
nopakio3d.o  : nopakio3d.f90
nosviio3d.o  : nosviio3d.f90
nompsubs.o   : nompsubs.f90  $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/mp.inc
nudge.o      : nudge.f90     $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/nudging.inc

operat3d.o   : operat3d.f90  $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/mp.inc
out3d.o      : out3d.f90     $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/exbc.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
outlib3d.o   : outlib3d.f90  $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
pakio3d.o    : pakio3d.f90   $(INCLDIR)/indtflg.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc
thermolib3d.o: thermolib3d.f90 $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc
raddata3d.o  : raddata3d.f90
radfrc3d.o   : radfrc3d.f90  $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/radcst.inc \
                             $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/soilcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
radlib3d.o   : radlib3d.f90
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
radtrns3d.o  : radtrns3d.f90 my3mom_fncs_mod.o \
                             $(INCLDIR)/globcst.inc           \
                             $(INCLDIR)/grid.inc              \
                             $(INCLDIR)/phycst.inc            \
                             $(INCLDIR)/bndry.inc             \
                             $(INCLDIR)/mp.inc                \
                             $(INCLDIR)/radcst.inc
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
raydmp3d.o   : raydmp3d.f90  $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/exbc.inc
rst3d.o      : rst3d.f90     $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/exbc.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
setbdt3d.o   : setbdt3d.f90  $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/grid.inc
sfcphy3d.o   : sfcphy3d.f90  $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/sfcphycst.inc \
                             $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
soildiag3d.o : soildiag3d.f90  $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/soilcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
soilebm3d.o  : soilebm3d.f90 thermolib3d.f90 \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/soilcst.inc
	$(FTN) $(FFLAGS) $(THMFLAG) $(FREEFLAGS) -c $<
solve3d.o    : solve3d.f90   $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/exbc.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
sorad3d.o    : sorad3d.f90 radlib3d.f90
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
sunlib3d.o   : sunlib3d.f90
sviio3d.o    : sviio3d.f90   $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/meraf.inc
t3dlib3d.o   : t3dlib3d.f90
timelib3d.o  : timelib3d.f90
tinteg3d.o   : tinteg3d.f90  $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/exbc.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/radcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/nudging.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
tke3d.o      : tke3d.f90     $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc
tmix3d.o     : tmix3d.f90    $(INCLDIR)/bndry.inc \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/phycst.inc \
                             $(INCLDIR)/timelvls.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/mp.inc \
                             $(INCLDIR)/indtflg.inc
v5d.o        : v5d.c         $(INCLDIR)/v5d.h \
                             $(INCLDIR)/vis5d.h
v5dio3d.o    : v5dio3d.f90   $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/v5df.inc
vfftpack.o   : vfftpack.f90
wwcont3d.o   : wwcont3d.f90  $(INCLDIR)/globcst.inc

arpsread.o   : arpsread.f90  $(INCLDIR)/globcst.inc
	$(FTN) $(FFLAGS_main) $(FREEFLAGS) -c $<

ncarg3d.o    : ncarg3d.f90
noncarg3d.o  : noncarg3d.f90
smooth3d.o   : smooth3d.f90
assimdummy.o : assimdummy.f90

interface_wrf_bmj.o : module_cu_bmj.o interface_wrf_bmj.f90 \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/phycst.inc
module_cu_bmj.o : module_cu_bmj.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<

interface_wrf_kfeta.o : module_cu_kfeta.o interface_wrf_kfeta.f90 \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/grid.inc \
                             $(INCLDIR)/phycst.inc
module_cu_kfeta.o : module_cu_kfeta.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<

initenkf.o   : $(TOPDIR)/src/arpsenkf/initenkf.f90   $(INCLDIR)/arpsenkf.inc    \
                                 $(INCLDIR)/globcst.inc \
                                 $(INCLDIR)/grid.inc    \
                                 $(INCLDIR)/phycst.inc  \
                                 $(INCLDIR)/bndry.inc
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
obsio.o         : $(TOPDIR)/src/arpsenkf/obsio.f90      cvndataread.o radarInfo.o arpsarray.o  \
                                 $(INCLDIR)/arpsenkf.inc    \
                                 $(INCLDIR)/globcst.inc
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
radarlib.o      : $(TOPDIR)/src/arpsenkf/radarlib.f90   $(INCLDIR)/globcst.inc \
                                 $(INCLDIR)/arpsenkf.inc    \
                                 $(INCLDIR)/grid.inc    \
                                 $(INCLDIR)/arpsenkfic.inc \
                                 module_mpi_enkf.o
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
radarlib3d.o : $(TOPDIR)/src/adas/radarlib3d.f90    $(INCLDIR)/remap.inc    \
                                 $(INCLDIR)/remaptab.inc \
                                 $(INCLDIR)/globcst.inc
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
enkfhelp.o      : $(TOPDIR)/src/arpsenkf/enkfhelp.f90   arpsarray.o global_module.o \
                                 $(INCLDIR)/arpsenkf.inc \
                                 $(INCLDIR)/globcst.inc \
                                 $(INCLDIR)/grid.inc \
                                 $(INCLDIR)/mp.inc
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
enkflib.o       : $(TOPDIR)/src/arpsenkf/enkflib.f90    $(INCLDIR)/arpsenkf.inc \
                                 $(INCLDIR)/globcst.inc \
                                 $(INCLDIR)/grid.inc
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
calculate_hx.o  : calculate_hx.f90   arpsarray.o global_module.o \
                                     radarInfo.o \
                                     $(INCLDIR)/arpsenkf.inc \
                                     $(INCLDIR)/globcst.inc \
                                     $(INCLDIR)/grid.inc \
                                     $(INCLDIR)/mp.inc         \
                                     $(INCLDIR)/phycst.inc     \
                                     module_mpi_enkf.o
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
calculate_hx_sub.o  : calculate_hx_sub.f90   arpsarray.o global_module.o \
                                     radarInfo.o \
                                     $(INCLDIR)/arpsenkf.inc \
                                     $(INCLDIR)/globcst.inc \
                                     $(INCLDIR)/grid.inc \
                                     $(INCLDIR)/mp.inc         \
                                     $(INCLDIR)/phycst.inc     \
                                     module_mpi_enkf.o
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
obsoperator.o   : $(TOPDIR)/src/arpsenkf/obsoperator.f90 radarInfo.o \
                                  $(INCLDIR)/arpsenkf.inc   \
                                  $(INCLDIR)/globcst.inc    \
                                  $(INCLDIR)/phycst.inc
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
attenuate.o     : $(TOPDIR)/src/arpsenkf/attenuate.f90   $(INCLDIR)/globcst.inc    \
                                  $(INCLDIR)/arpsenkf.inc       \
                                  $(INCLDIR)/grid.inc       \
                                  $(INCLDIR)/phycst.inc
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<

anxlib3d.o   : $(TOPDIR)/src/adas/anxlib3d.f90  thermolib3d.f90 \
                            $(INCLDIR)/phycst.inc
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<
intfield.o   : $(TOPDIR)/src/adas/intfield.f90
	$(FTN) $(FFLAGS) $(RADFLAG) $(FREEFLAGS) -c $<;

cvndataread.o       : $(TOPDIR)/src/arpsenkf/cvndataread.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<
cvndataensrf.o      : $(TOPDIR)/src/arpsenkf/cvndataensrf.f90 arpsarray.o \
                                 $(INCLDIR)/arpsenkf.inc \
                                 $(INCLDIR)/globcst.inc \
                                 $(INCLDIR)/grid.inc \
                                 $(INCLDIR)/mp.inc
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<
cal_hx_cvn_sub.o    : cal_hx_cvn_sub.f90 arpsarray.o \
                                 $(INCLDIR)/arpsenkf.inc \
                                 $(INCLDIR)/globcst.inc \
                                 $(INCLDIR)/grid.inc \
                                 $(INCLDIR)/mp.inc
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<
radarInfo.o: $(TOPDIR)/src/arpsenkf/radarInfo.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<
arpsarray.o: $(TOPDIR)/src/arpsenkf/arpsarray.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<
convert2radar.o  : $(TOPDIR)/src/radaremul/convert2radar.f90   dualpara.o            \
                   global_module.o  radarlib3d.o             \
                   maproj3d.o                                \
                                 $(INCLDIR)/globcst.inc      \
                                 $(INCLDIR)/phycst.inc       \
                                 $(INCLDIR)/mp.inc           \
                                 $(INCLDIR)/radaremul.inc
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<
dualpara.o: $(TOPDIR)/src/radaremul/dualpara.f90 global_module.o
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<
global_module.o: $(TOPDIR)/src/radaremul/global_module.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c $<

tmatrix.o: $(TOPDIR)/src/radaremul/tmatrix.f90
	$(FTN) $(FFLAGS) $(FREEFLAGS) -r8 -c $<

arpsmpbudget.o    : arpsmpbudget.f90   $(INCLDIR)/grid.inc    \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/indtflg.inc  \
                             $(INCLDIR)/exbc.inc

arpsmpbudgetlib.o    : arpsmpbudgetlib.f90   $(INCLDIR)/grid.inc    \
                             $(INCLDIR)/globcst.inc \
                             $(INCLDIR)/indtflg.inc  \
                             $(INCLDIR)/exbc.inc
