#
#     ##################################################################
#     ##################################################################
#     ######                                                      ######
#     ######      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 ADAS executable and shared
#           library
#
#  AUTHOR:  Yuhe Liu
#           7/22/1997
#
#  Modification history:
#
#  10 June 2002 (Eric Kemp)
#  Added intrpsoil3d.f90.
#
#  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
LDR = f90
CC  = cc

ARPS_LD = $(LDR)

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

ARFLAG =

TOPDIR  = 
BINDIR  = $(TOPDIR)
INCLDIR = $(TOPDIR)/include
LIBDIR  = $(TOPDIR)/lib
ARPSDIR = $(TOPDIR)/src/arps

#-----------------------------------------------------------------------
#
# 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 $<
.mod.o:	     # .mod --> .o dependency dropped
	
#-----------------------------------------------------------------------
#
# Executable to be generated by this make file:
#
# ADASEXE   = adas        ADAS executable
# ADASMPEXE = adas_mpi    ADAS MPI executable
# DIFOBSEXE = difobs      Observations difference program
# RADMOSEXE = radmosaic   Radar mosaic program
#
#-----------------------------------------------------------------------

ADASEXE   = adas
ADASMPEXE = adas_mpi
DIFOBSEXE = difobs
RADMOSEXE = radmosaic

#-----------------------------------------------------------------------
#
# Object library to be generated for ARPS solver:
#
# LIBARPS = libarps     ARPS shared library
# LIBADAS = libadas     ADAS shared library
#
#-----------------------------------------------------------------------

LIBARPS = libarps
LIBRADTN = libradtn
LIBADAS = libadas

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

ADASMAINOBJ =  module_arpsArray.o module_anaIncArray.o    \
               module_soilArray.o module_analysisArrays.o \
               adas.o

ADASOBJS1 = anxiter.o grd2obsth.o prepradar.o    \
            prepretr.o prepsfc.o prepsng.o prepua.o rdacars.o \
            rdprofiles.o rdradcol.o rdretcol.o rdsfcobs.o     \
            adjtsfc.o incrdump.o adasmpi.o
 
ADASCLDOBJS = cloud_cv.o cloud_lwc.o cmpclddrv.o cmpcldlib.o \
              cldinsert.o rdsatfld.o sunfuncs.o

LIBADASOBJS = anxlib3d.o adjuvw3d.o intfield.o \
              radarlib3d.o thermo3d.o mthermo.o initadas.o \
              intrpsoil3d.o pltradlib.o

ADASOBJS = $(ADASMAINOBJ) $(ADASOBJS1) $(ADASCLDOBJS) $(LIBADASOBJS)


DIFOBSMAINOBJ = difobs.o

DIFOBSOBJS1 = difstats.o anxiter.o grd2obsth.o prepradar.o    \
            prepretr.o prepsfc.o prepsng.o prepua.o rdacars.o \
            rdprofiles.o rdradcol.o rdretcol.o rdsfcobs.o     \
            cmpcldlib.o adasmpi.o

DIFOBSOBJS = $(DIFOBSMAINOBJ) $(DIFOBSOBJS1)

RADMOSMAINOBJ = radmosaic.o

RADMOSOBJS1 = cmpcldlib.o rdradcol.o

RADMOSOBJS = $(RADMOSMAINOBJ) $(RADMOSOBJS1)

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

default: $(ADASEXE)

#-----------------------------------------------------------------------
#
# Compile and link ADAS
#
#-----------------------------------------------------------------------

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

$(BINDIR)/$(ADASEXE): $(ADASOBJS) $(LIBDIR)/$(LIBARPS).a $(LIBDIR)/$(LIBRADTN).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(ADASOBJS) $(LIBDIR)/$(LIBARPS).a      \
                                    $(LIBDIR)/$(LIBRADTN).a $(LIBS)

#-----------------------------------------------------------------------
#
# Compile and link ADAS_MPI
#
#-----------------------------------------------------------------------


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

$(BINDIR)/$(ADASMPEXE): $(ADASOBJS) $(LIBDIR)/$(LIBARPS).a \
		$(LIBDIR)/$(LIBRADTN).a
	$(ARPS_LD) $(LDFLAGS) -o $@ $(ADASOBJS) $(LIBDIR)/$(LIBARPS).a      \
                                    $(LIBDIR)/$(LIBRADTN).a $(LIBS)

#-----------------------------------------------------------------------
#
# Make the observations difference statistics program, difobs
#
#-----------------------------------------------------------------------

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

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

#-----------------------------------------------------------------------
#
# Make the radar mosaic building program, radmosaic
#
#-----------------------------------------------------------------------

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

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

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

$(BINDIR)/fsl2snd: fsl2snd.o
	$(ARPS_LD) $(LDFLAGS) -o $@ fsl2snd.o

#-----------------------------------------------------------------------
#
# Make ADAS shared library
#
#-----------------------------------------------------------------------

$(LIBADAS): $(LIBDIR)/$(LIBADAS).a

$(LIBDIR)/$(LIBADAS).a: $(LIBADASOBJS)
	$(AR) $(ARFLAG) rcs $@ $(LIBADASOBJS)

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

CPPSRC = adas.f90 prepradar.f90 grd2obsth.f90
clean.adas:
	-$(RM) -f $(BINDIR)/$(ADASEXE) $(BINDIR)/$(ADASMPEXE) \
                  $(BINDIR)/fsl2snd fsl2snd.o                 \
                  $(ADASMAINOBJ) $(ADASOBJS) $(CPPSRC)        \
                  $(LIBADASOBJS) *.mod *.d work.pc work.pcl

clean.difobs:
	-$(RM) -f $(BINDIR)/$(DIFOBSEXE) $(DIFOBSMAINOBJ) $(DIFOBSOBJS) \
                  $(LIBADASOBJS)

clean.libadas:
	-$(RM) -f $(LIBADASOBJS) $(LIBDIR)/$(LIBARPS).a $(LIBDIR)/$(LIBADAS).a

clean.radmosaic:
	-$(RM) -f $(BINDIR)/$(RADMOSEXE) $(RADMOSOBJS) $(LIBADASOBJS) 

#-----------------------------------------------------------------------
#
# Object code dependency list:
#
#-----------------------------------------------------------------------
module_arpsArray.o: module_arpsArray.f90
module_soilArray.o: module_soilArray.f90
module_anaIncArray.o: module_anaIncArray.f90

adas.o       : adas_3dvar_driver.F \
                                 $(ARPSDIR)/thermolib3d.f90    \
                                 $(INCLDIR)/adas.inc    \
                                 $(INCLDIR)/exbc.inc    \
                                 $(INCLDIR)/bndry.inc   \
                                 $(INCLDIR)/globcst.inc \
                                 $(INCLDIR)/nudging.inc \
                                 $(INCLDIR)/phycst.inc  \
                                 $(INCLDIR)/grid.inc    \
                                 $(INCLDIR)/alloc.inc   \
                                 $(INCLDIR)/adjust.inc  \
               module_arpsArray.o   module_soilArray.o  \
               module_anaIncArray.o module_analysisArrays.o
	$(CPP) -Dadas $(CPPFLAGS) adas_3dvar_driver.F adas.f90;
	$(FTN) $(FFLAGS_main) $(FREEFLAGS) -c adas.f90
anxiter.o    : anxiter.f90
grd2obsth.o  : grd2obsth.F       $(INCLDIR)/phycst.inc
	$(CPP) -Dadas $(CPPFLAGS) grd2obsth.F grd2obsth.f90;
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c grd2obsth.f90

initadas.o   : initadas.f90      $(INCLDIR)/adas.inc    \
                                 $(INCLDIR)/adjust.inc

prepradar.o  : prepradar.F       $(ARPSDIR)/thermolib3d.f90 \
                                 $(INCLDIR)/phycst.inc
	$(CPP) -Dadas $(CPPFLAGS) prepradar.F prepradar.f90;
	$(FTN) $(FFLAGS) $(FREEFLAGS) -c prepradar.f90
prepsfc.o    : prepsfc.f90       $(INCLDIR)/phycst.inc
prepsng.o    : prepsng.f90       $(INCLDIR)/phycst.inc
prepua.o     : prepua.f90
radarlib3d.o : radarlib3d.f90    $(INCLDIR)/remap.inc    \
                                 $(INCLDIR)/remaptab.inc \
                                 $(INCLDIR)/globcst.inc
pltradlib.o  : pltradlib.f90
rdacars.o    : rdacars.f90
rdprofiles.o : rdprofiles.f90    $(ARPSDIR)/thermolib3d.f90 \
                                 $(INCLDIR)/phycst.inc
rdradcol.o   : rdradcol.f90
rdsfcobs.o   : rdsfcobs.f90
incrdump.o   : incrdump.f90      $(INCLDIR)/globcst.inc \
                                 $(INCLDIR)/grid.inc

adjtsfc.o    : adjtsfc.f90       $(INCLDIR)/phycst.inc
cloud_cv.o   : cloud_cv.f90      $(INCLDIR)/adas.inc 
cmpclddrv.o  : cmpclddrv.f90     $(INCLDIR)/adas.inc \
                                 $(INCLDIR)/globcst.inc \
                                 $(INCLDIR)/phycst.inc \
                                 $(INCLDIR)/grid.inc
cldinsert.o  : cldinsert.f90     $(INCLDIR)/adas.inc \
                                 $(INCLDIR)/phycst.inc

cloud_lwc.o  : cloud_lwc.f90     $(INCLDIR)/adas.inc 
cmpcldlib.o  : cmpcldlib.f90     $(INCLDIR)/adas.inc \
                                 $(INCLDIR)/grid.inc
rdsatfld.o   : rdsatfld.f90      $(INCLDIR)/globcst.inc \
                                 $(INCLDIR)/grid.inc
sunfuncs.o   : sunfuncs.f90

#-----------------------------------------------------------------------
#
# Object code dependency for radar mosaic program
#
#-----------------------------------------------------------------------

radmosaic.o       : radmosaic.f90 $(INCLDIR)/mp.inc    \
                                 $(INCLDIR)/grid.inc \
                                 $(INCLDIR)/globcst.inc

#-----------------------------------------------------------------------
#
# Object code dependency for observations difference program
#
#-----------------------------------------------------------------------

difobs.o       : difobs.f90 $(ARPSDIR)/thermolib3d.f90 \
                                 $(INCLDIR)/adas.inc    \
                                 $(INCLDIR)/exbc.inc    \
                                 $(INCLDIR)/bndry.inc   \
                                 $(INCLDIR)/globcst.inc \
                                 $(INCLDIR)/nudging.inc \
                                 $(INCLDIR)/phycst.inc \
                                 $(INCLDIR)/grid.inc \
                                 $(INCLDIR)/alloc.inc \
                                 $(INCLDIR)/adjust.inc
difstats.o    : difstats.f90

#-----------------------------------------------------------------------
#
# Object code dependency for shared library:
#
#-----------------------------------------------------------------------

anxlib3d.o   : anxlib3d.f90 $(ARPSDIR)/thermolib3d.f90 \
                            $(INCLDIR)/phycst.inc
adjuvw3d.o   : adjuvw3d.f90 $(INCLDIR)/globcst.inc \
                            $(INCLDIR)/grid.inc
intfield.o   : intfield.f90
mthermo.o    : mthermo.f90
thermo3d.o   : thermo3d.f90
intrpsoil3d.o : intrpsoil3d.f90 $(INCLDIR)/arpssfc.inc

fsl2snd.o : fsl2snd.f90
