###################################################################################################
# post implement module load standard
#
# 10/15 Lin Gan:        Create module load version
# 12/07 Lin Gan:        Update to generate post module output
# 07/16 J. Carley:      Generalize for multiple machines
# 11/21 Wen Meng:       Update for wcoss2
#
###################################################################################################

SHELL=/bin/bash
#
# Define the name of the executable
#
# To generate exe as ncep_post
TARGET        = ncep_post
LIB_TARGET    = libnceppost.a
AR            = ar
ARFLAGS       = ruv

#
# CPP, Compiler, and Linker Options
#

FC = ftn -O3 -convert big_endian -traceback -g -fp-model source -qopenmp -fpp
CPP = /lib/cpp -P
CPPFLAGS = -DLINUX
FREE     = -FR

NETCDF_INC = -I$(NETCDF)/include
#NETCDF_LDFLAGS = -L$(NETCDF)/lib -lnetcdff -lnetcdf
NETCDF_LDFLAGS = -L$(NETCDF)/lib -lnetcdff -lnetcdf -L$(HDF5_LDFLAGS) $(Z_LIB)

CFLAGS   = -DLINUX -Dfunder -DFortranByte=char -DFortranInt=int -DFortranLlong='long long'

FFLAGS   = $(OPTS) $(FREE) $(DEBUG) \
           -I$(SFCIO_INC) \
           -I$(NEMSIO_INC) \
           -I$(SIGIO_INC) \
           -I$(G2_INC4) \
           -I$(G2TMPL_INC) \
           -I$(GFSIO_INC) \
           -I$(W3EMC_INC4) \
           -I$(CRTM_INC) \
	   -I$(IP_INC4) \
           $(NETCDF_INC)

LIBS     = $(WRF_IO_LIB) \
           $(G2TMPL_LIB) \
           $(G2_LIB4) \
           $(JASPER_LIB) \
           $(LIBPNG_LIB) \
           $(Z_LIB) \
           $(NEMSIO_LIB) \
           $(GFSIO_LIB) \
           $(SIGIO_LIB) \
           $(SFCIO_LIB) \
           $(IP_LIB4) \
           $(SP_LIB4) \
           $(W3EMC_LIB4) \
           $(W3NCO_LIB4) \
           $(BACIO_LIB4) \
           $(CRTM_LIB) \
           $(NETCDF_LDFLAGS)


OBJS =  wrf_io_flags.o getVariable.o getIVariableN.o \
        kinds_mod.o machine.o physcons.o \
	native_endianness.o blockIO.o \
        retrieve_index.o ZENSUN.o CLDFRAC_ZHAO.o \
        GFSPOST.o GFSPOSTSIG.o GETGBANDSCATTER.o \
        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 xml_perl_data.o \
        cuparm.o params.o svptbl.o get_postfilename.o grib2_module.o \
        SET_LVLSXML.o FILL_PSETFLD.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 \
        CALSTRM.o CALTAU.o CALTHTE.o CALVIS.o CALVIS_GSD.o CALVOR.o CALWXT.o \
        CALWXT_RAMER.o CALWXT_BOURG.o CALWXT_REVISED.o CALRH_PW.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 \
        MAPSSLP.o MISCLN.o MDL2STD_P.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 READ_xml.o SET_OUTFLDS.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 \
        CALMICT.o MICROINIT.o GPVS.o MDL2SIGMA.o \
        ETCALC.o CANRES.o CALGUST.o WETFRZLVL.o SNFRAC.o MDL2AGL.o SNFRAC_GFS.o \
        AVIATION.o DEALLOCATE.o \
        CALPBL.o MDL2SIGMA2.o INITPOST_GFS.o CALRH_GFS.o LFMFLD_GFS.o \
        CALRAD_WCLOUD_newcrtm.o MDL2THANDPV.o CALPBLREGIME.o POLEAVG.o \
        INITPOST_NEMS.o GETNEMSNDSCATTER.o ICAOHEIGHT.o INITPOST_GFS_NEMS.o \
        GEO_ZENITH_ANGLE.o GFIP3.o GRIDAVG.o CALUPDHEL.o INITPOST_GFS_SIGIO.o \
        AllGETHERV_GSD.o MSFPS.o SELECT_CHANNELS.o ALLOCATE_ALL.o INITPOST_NEMS_MPIIO.o ASSIGNNEMSIOVAR.o \
        INITPOST_GFS_NEMS_MPIIO.o INITPOST_NETCDF.o INITPOST_GFS_NETCDF.o INITPOST_GFS_NETCDF_PARA.o \
	gtg_ctlblk.o gtg_indices.o gtg_filter.o gtg_compute.o gtg_config.o map_routines.o gtg_algo.o gtg_smoothseams.o CALVESSEL.o \
        CALHEL2.o CALCAPE2.o


.SUFFIXES: .F .f .o .f90 .c

.F.f:
	$(CPP) $(CPPFLAGS) $< > $*.f

$(TARGET):	$(OBJST) $(OBJS)
	$(FC) -o $@ $(OBJST) $(OBJS) $(LIBS) $(OPENMP)
	mkdir -p include/post_4
	$(AR) $(ARFLAGS) $(LIB_TARGET) $(OBJST) $(OBJS)
	mv *.mod include/post_4

.f.o:
	$(FC) $(FFLAGS) -c $<

.f90.o:
	$(FC) $(FFLAGS) -c $<

.c.o :
	${CC} ${CFLAGS} -c $<


clean:
	/bin/rm -f  *.o *.mod libnceppost.a ncep_post 
	/bin/rm -rf include