#
# Define the name of the executable
#
TARGET   = ../../exec/rap_wrfpost

#
# CPP, Compiler, and Linker Options
#
#
FC = ftn 
CPP = /lib/cpp -P
CPPFLAGS = -DLINUX
FREE     = -FR
DEBUG    = -g

FFLAGS = -O2 -convert big_endian -traceback -g -fp-model source -fpp -qopenmp
CFLAGS =  -DLINUX -Dfunder -DFortranByte=char -DFortranInt=int -DFortranLlong='long long'
#

#WRF_VER=v1.1.0
#WRFPATH    = /gpfs/hps/nco/ops/nwprod/wrf_shared.$(WRF_VER)-intel
#WRF_INC    = $(WRFPATH)/external/io_quilt -I$(WRFPATH)/frame
#WRF_LIB    = $(WRFPATH)/main/libwrflib.a  \
             $(WRFPATH)/frame/pack_utils.o  \
             $(WRFPATH)/frame/module_internal_header_util.o \
             $(WRFPATH)/external/io_grib1/libio_grib1.a \
             $(WRFPATH)/external/io_grib_share/libio_grib_share.a \
             $(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


NETCDFPATH = ${NETCDF}
NETCDF_LIB = -L $(NETCDFPATH)/lib -lnetcdf -lnetcdff
NETCDF_INC = $(NETCDFPATH)/include

#
# Assemble Options
#
FFLAGS   = $(OPTS) $(FREE) $(TRAPS) $(DEBUG) \
           -I$(WRF_IO_INC) \
           -I$(G2_INC4) \
           -I$(G2TMPL_INC) \
           -I$(NEMSIO_INC) \
           -I$(GFSIO_INC) \
           -I$(SIGIO_INC) \
           -I$(SFCIO_INC) \
           -I$(CRTM_INC) \
           -I$(NETCDF_INC)

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


OBJS_FT = wrf_io_flags.o getVariable.o  \
          getIVariableN.o kinds_mod.o machine.o physcons.o \
          native_endianness.o \
          retrieve_index.o ZENSUN.o \
          CLDFRAC_ZHAO.o GFSPOST.o GETGBANDSCATTER.o \
          blockIO.o

# -----------
# Non-threaded object files
# -----------

OBJS_F =  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 $(LINUX_OBJ)\
          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 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 MSFPS.o INITPOST_GFS_SIGIO.o\
          AllGETHERV_GSD.o SELECT_CHANNELS.o ALLOCATE_ALL.o INITPOST_NEMS_MPIIO.o ASSIGNNEMSIOVAR.o INITPOST_GFS_NEMS_MPIIO.o \
          INITPOST_NETCDF.o gtg_config.o gtg_filter.o gtg_trophts.o gtg_itfa.o gtg_indices.o \
          map_routines.o CALHEL2.o CALCAPE2.o

OBJS   = $(OBJS_FT) $(OBJS_F)


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

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

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

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

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

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


clean:
	/bin/rm -f  $(TARGET) *.lst *.o *.mod