################################################################################
# 
#     Makefile for upp (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

#         This version for NEMS_POST 
#         Jun Wang       June 2010
#
#         This version for GFS V16 in-line post
#         Wen Meng       Ocotomber 2020
#
#         This vesrion for GFS V16 in-line post on wcoss2
#         Wen Meng       Nov 2021
#
#################################################################################
#
# Define the name of the executable
#
 #POSTLIBPATH=../..
 #TARGET = ${POSTLIBPATH}/lib/libncep_post_${version}_4.a
 #INCMOD= ${POSTLIBPATH}/lib/include/ncep_post_${version}_4
 TARGET = libupp.a
 INCMOD = include
 AR      = ar
 ARFLAGS = -rv

#
# CPP, Compiler, and Linker Options
#

#FC       = mpfort -compiler ifort
#CPP      = /lib/cpp -P
FC = ftn -O3 -convert big_endian -traceback -g -fp-model source -fpp
CPP = /lib/cpp -P
ARCH     = auto
CPPFLAGS = -DLINUX
OPTS     = -O -fp-model strict
LIST     = 
FREE     = -FR
#TRAPS    = -qflttrap=ov:und:zero:inv:inex -qcheck -qinitauto=FF
TRAPS    = 
PROFILE  = 
DEBUG    = -g
CFLAGS =  -DLINUX -Dfunder -DFortranByte=char -DFortranInt=int -DFortranLlong='long long'
W3LIBDIR = /nwprod/lib

SEARCH   =
#
# Assemble Options
#
#FFLAGS   = $(OPTS) $(FREE) $(TRAPS) $(DEBUG) -I$(CRTM_INC) -I$(W3EMC_INC4) -I$(G2_INC4) -I$(G2TMPL_INC) -I$(XMLPARSE_INC) -I$(SIGIO_INC4) -I$(GFSIO_INC4)
FFLAGS   = $(OPTS) $(FREE) $(TRAPS) $(DEBUG) -I$(CRTM_INC) -I$(W3EMC_INC4) -I$(G2_INC4) -I$(G2TMPL_INC) -I$(GFSIO_INC)
FFLAGST  = $(OPTS) $(FREE) $(TRAPS) $(DEBUG) -I$(CRTM_INC) -I$(W3EMC_INC4) -I$(SIGIO_INC) -I$(GFSIO_INC)

#
# Threaded object files
#
OBJST=	kinds_mod.o machine.o physcons.o ZENSUN.o CLDFRAC_ZHAO.o GFSPOST.o 
#
# Non-threaded object files
#
#OBJXML= post_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 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             LFMFLD.o                 \
	MAPSSLP.o MISCLN.o MDL2STD_P.o MIXLEN.o MDL2P.o MDLFLD.o                         \
	NGMFLD.o NGMSLP.o OTLFT.o OTLIFT.o SLP_new.o SLP_NMM.o EXCH.o \
	PARA_RANGE.o PROCESS.o                EXCH2.o \
	READCNTRL.o READ_xml.o SET_OUTFLDS.o SCLFLD.o                          \
	SMOOTH.o SURFCE.o \
	SPLINE.o TABLE.o TABLEQ.o TRPAUS.o TTBLEX.o WETBULB.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                CALRH_GFS.o LFMFLD_GFS.o \
	CALRAD_WCLOUD_newcrtm.o MDL2THANDPV.o CALPBLREGIME.o POLEAVG.o \
	                                   ICAOHEIGHT.o                     \
                             GEO_ZENITH_ANGLE.o GFIP3.o GRIDAVG.o CALUPDHEL.o \
	AllGETHERV_GSD.o MSFPS.o SELECT_CHANNELS.o ALLOCATE_ALL.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) $(OBJXML) $(OBJS)
	$(AR) $(ARFLAGS) $@ $(OBJST) $(OBJXML) $(OBJS) $(LIBS)
	mv *.mod $(INCMOD)

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

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

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

clean:	
	/bin/rm -rf  libupp.a *.lst *.o include
#
#postcntrl_t.o      :       postcntrl_t.f90
#	$(FC) $(FFLAGS) postcntrl_t.f90