################################################################################
# 
#     Makefile for NCEP Post
#
#     Use:
#     make         -  build the executable
#     make clean   -  start with a clean slate
#
#     The following macros will be of interest:
#
#         TARGET   - name of the executable
#         FC       - name of Fortran compiler
#         CPP      - name of CPP
#         ARCH     - architecture
#         CPPFLAGS - CPP flags
#         OPTS     - compiler code optimizations
#         LIST     - source listing
#         SMP      - threading
#         TRAPS    - runtime traps for floating point exceptions
#         PROFILE  - source code profiling ( -pg )
#         DEBUG    - -g
#         MEM      - user data area and stack size
#         MAP      - load map
#         W3LIB    - w3lib
#         BACIO    - bacio lib
#         ESSL     - ESSL library
#         MASS     - MASS library
#         HPMLIB   - hpm lib
#         SEARCH   - library search location
# 
#         This version for eta_post with more intelligent memory allocation
#         Jim Tuccillo   Feb 2001
# 
#         This version for eta_post with asynchronous I/O server.   
#         Jim Tuccillo   June 2001
#
#################################################################################
#
# Define the name of the executable
#
#TARGET = ../exec/nceppost.x
TARGET = ncep_post
#  TARGET = bin_post
#
# CPP, Compiler, and Linker Options
#



## WRFPATH = /misc/whome/mhu/RR13V31/trunk/WRF3.1
WRFPATH = /mnt/lfs0/projects/wrfruc/mhu/save/WRF_release/WRFV3.2_intel_arw

NETCDFPATH = ${NETCDF}
FC       = mpif90
CPP      = /lib/cpp -C -P -DLINUX -DGSDRAPR $(FDEFS) 
ARCH     = 
CPPFLAGS = 
#OPTS     = -O -qnosave -qarch=$(ARCH) -qmaxmem=-1 -NS2000
#OPTS     = -C -O -qnosave -qarch=$(ARCH) -qmaxmem=-1 -NS2000
#OPTS     = -O -g -qnosave -qarch=$(ARCH) -qmaxmem=-1 -NS2000 -bmaxdata:0x80000000
# OPTS     =  -O3 -ftz -xT -fp-model precise -assume byterecl -convert big_endian -fpe0 -traceback -DLINUX
OPTS     =  -O3 -ftz -xT -fp-model precise -assume byterecl -fpe0 -traceback -DLINUX
LIST     = 
FREE     = -free
#TRAPS    = -qflttrap=ov:und:zero:inv:inex -qcheck -qinitauto=FF
TRAPS    = 
PROFILE  = 
DEBUG    = -g
MEM      =
MAP      =  
W3LIBDIR = ../libs
ESSL     = 
MASS     =
NCDLIBS = -L$(NETCDFPATH)/lib -lnetcdf
NCDFFLAGS = -I$(NETCDFPATH)/include
WRFFFLAGS = -I$(WRFPATH)/external/io_quilt
CRTMFFLAGS = -I../libs/incmod/crtm2
W3FLAGS = -I../libs/incmod
SFCFLAG = -I../libs/incmod
WRFLIB    = $(WRFPATH)/main/libwrflib.a \
            $(WRFPATH)/frame/pack_utils.o \
            $(WRFPATH)/external/io_int/libwrfio_int.a \
            $(WRFPATH)/external/io_netcdf/libwrfio_nf.a \
            $(WRFPATH)/external/esmf_time_f90/libesmf_time.a \
            $(WRFPATH)/external/RSL_LITE/librsl_lite.a \
            $(WRFPATH)/external/io_grib1/libio_grib1.a \
            $(WRFPATH)/external/io_grib_share/libio_grib_share.a \
            $(WRFPATH)/external/fftpack/fftpack5/libfftpack.a
## g2
GRB2FLAGS = -I../libs/incmod/g2_4 -I../libs/incmod/g2tmpl
XMLFLAGS = -I ./xml/xml_fortran
GRB2LIB = -L../libs -lg2tmpl -L../libs -lg2 -L$(JASPER)/lib -ljasper -lpng -lz
XMLLIB = ./xml/xml_fortran/xmlparse.a


CRTMLIB = 

LAPACK = -L$(MKL) -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lguide

SEARCH   =
#
# Assemble Options
#
FFLAGS   = $(OPTS) $(LIST) $(TRAPS) $(PROFILE) $(DEBUG) $(NCDFFLAGS) $(WRFFLAGS) $(CRTMFFLAGS) $(W3FLAGS) $(SFCFLAG)  $(GRB2FLAGS) $(XMLFLAGS) 
FFLAGST  = $(OPTS) $(LIST) $(FREE) $(TRAPS) $(PROFILE) $(DEBUG) $(NCDFFLAGS) $(WRFFLAGS) $(CRTMFFLAGS) $(W3FLAGS) $(SFCFLAG) $(GRB2FLAGS) $(XMLFLAGS)
LDFLAGS  = $(MEM) $(MAP) $(SMP) $(PROFILE)
#LIBS     = $(ESSL) $(MASS) $(SEARCH) $(NCDLIBS) $(WRFLIB) -L$(W3LIBDIR) -lw3_4 -lbacio_4 -lsp_4 -lsigio_4 -lsfcio_4 -lcrtm2
LIBS     = $(WRFLIB) $(XMLLIB) $(GRB2LIB) \
           -L../libs  -lsigio_4 -lsfcio_4 \
           -lbacio_4 -lsp_4 -lcrtm2 -lw3 $(NCDLIBS) $(LAPACK) \

#
#
# Threaded object files
#
OBJST=	wrf_io_flags.o module_internal_header_util.o getVariable.o getIVariable.o getVariableB.o getIVariableN.o getVariableRSM.o \
	kinds_mod.o gfsio_module.o nemsio_module.o machine.o physcons.o \
	count_recs_wrf_binary_file.o inventory_wrf_binary_file.o \
	next_buf.o retrieve_index.o ZENSUN.o CLDFRAC_ZHAO.o \
	GFSPOST.o GETGBANDSCATTER.o
#
# Non-threaded object files
#
OBJXML= postcntrl_t.o
#
OBJS=	VRBLS2D_mod.o VRBLS3D_mod.o VRBLS4D_mod.o MASKS_mod.o PMICRPH.o SOIL_mod.o \
        CMASSI.o CTLBLK.o GRIDSPEC.o LOOKUP.o PARAMR.o RHGRD.o RQSTFLD.o \
        cuparm.o params.o svptbl.o get_postfilename.o grib2_module.o getlvls.o \
	BNDLYR.o  BOUND.o  CALCAPE.o  CALDWP.o  CALDRG.o CALHEL.o  CALLCL.o  \
	CALMCVG.o CALPOT.o  CALPW.o CALRH.o  CALRCH.o CALRH_GSD.o CALRH_PW.o \
	CALSTRM.o CALTAU.o CALTHTE.o CALVIS.o CALVIS_GSD.o CALVOR.o CALWXT.o \
        CALWXT_RAMER.o CALWXT_BOURG.o CALWXT_REVISED.o \
        CALWXT_EXPLICIT.o CALWXT_DOMINANT.o \
	CLDRAD.o  CLMAX.o COLLECT.o  COLLECT_LOC.o \
	DEWPOINT.o \
	FDLVL.o  FGAMMA.o FIXED.o  FRZLVL.o  FRZLVL2.o \
	GET_BITS.o  GRIBIT.o INITPOST.o LFMFLD.o  INITPOST_BIN.o \
	INITPOST_BIN_MPIIO.o \
        MAPSSLP.o MISCLN.o MIXLEN.o MDL2P.o MDLFLD.o MPI_FIRST.o  MPI_LAST.o \
	NGMFLD.o NGMSLP.o  OTLFT.o OTLIFT.o SLP_new.o SLP_NMM.o EXCH.o \
	PARA_RANGE.o PROCESS.o INITPOST_NMM.o EXCH2.o \
	READCNTRL.o READCNTRL_xml.o SCLFLD.o  SERVER.o  SETUP_SERVERS.o SMOOTH.o SURFCE.o \
	SPLINE.o  TABLE.o  TABLEQ.o  TRPAUS.o  TTBLEX.o WETBULB.o WRFPOST.o \
        INITPOST_NMM_BIN.o CALMICT.o MICROINIT.o GPVS.o MDL2SIGMA.o \
        ETCALC.o CANRES.o CALGUST.o WETFRZLVL.o SNFRAC.o MDL2AGL.o SNFRAC_GFS.o \
	INITPOST_RSM.o AVIATION.o DEALLOCATE.o INITPOST_NMM_BIN_MPIIO_IJK.o \
        CALPBL.o MDL2SIGMA2.o INITPOST_GFS.o CALRH_GFS.o LFMFLD_GFS.o CALRAD.o \
	CALRAD_WCLOUD.o MDL2THANDPV.o CALPBLREGIME.o POLEAVG.o \
	INITPOST_NEMS.o GETNEMSNDSCATTER.o ICAOHEIGHT.o INITPOST_GFS_NEMS.o GFIP3.o \
        GRIDAVG.o CALUPDHEL.o AllGETHERV_GSD.o MSFPS.o SELECT_CHANNELS.o ALLOCATE_ALL.o
#
# Includes
#
##INCLUDES= parm.tbl parmeta parmout parmsoil cuparm
#INCLUDES= parm.tbl cuparm
#
# Common Blocks
#
#COMMS=	LOOKUP.comm   RQSTFLD.comm   CTLBLK.comm  \
#        GRIDSPEC.comm CMASSI.comm RHGRD.comm

#DEPS= $(COMMS) $(INCLUDES)

.SUFFIXES:

.SUFFIXES:	.F .f .o .f90

.F.o:
	$(CPP) $(CPPFLAGS) $< > $*.f
	$(FC) -c $(FFLAGST) $*.f
	rm $*.f

$(TARGET):	$(OBJST) $(OBJXML) $(OBJS)
	$(FC) $(LDFLAGS) -o $@ $(OBJST) $(OBJXML) $(OBJS) $(LIBS)

.f.o: $(OBJST)
	$(FC) -c $(FFLAGST) $<

.f90.o: $(OBJXML)
	$(FC) -c $(FFLAGST) $<

clean:	
	/bin/rm -f  $(TARGET) *.lst *.o *.mod
#
postcntrl_t.f90    :       postcntrl_t.xml
	echo postcntrl_t > xmlreader.inp
	./xml/xml_fortran/xmlreader
	$(FC) $(FFLAGS) postcntrl_t.f90