SHELL=/bin/sh

#==============================================================================
#
# DTC GSI Makefile
#
#==============================================================================

#------------
# Include machine dependent compile & load options
#------------
include ../../configure.gsi

COREROOT = $(COREDIR)
COREBIN  = $(COREROOT)/run
CORELIB  = $(COREROOT)/lib
COREINC  = $(COREROOT)/include
COREETC  = $(COREROOT)/etc
EXE_FILE = gsi.exe


# ---------
# Libraries
# ---------
## LIBmpeu  = -L$(CORELIB) -lmpeu
LIBbufr     = -L$(CORELIB) -lbufr_i4r8
LIBw3       = -L$(CORELIB) -lw3nco_i4r8 -lw3emc_i4r8
LIBsp       = -L$(CORELIB) -lsp_i4r8
LIBbacio    = -L$(CORELIB) -lbacio
LIBsfcio    = -L$(CORELIB) -lsfcio_i4r4
LIBsigio    = -L$(CORELIB) -lsigio_i4r4
LIBcrtm     = -L$(CORELIB) -lcrtm
LIBtransf   = -L$(CORELIB) -ltransf
LIBhermes   = -L$(CORELIB) -lhermes
LIBnemsio   = -L$(CORELIB) -lnemsio
LIBrrcld    = -L$(CORELIB) -lgsdcloud
LIBprpdcdr  = -L$(CORELIB) -lprepdecode_i4r8

# --------------------------
# Default Baselibs Libraries
# --------------------------
LIBnetcdf       = -L$(NETCDFPATH)/lib $(NETCDFLIBS)
LIBwrf          = $(WRF_LIB)

# ------------------------
# Default System Libraries
# ------------------------
LIBmpi          = -lmpi
## LIBsys          = -lessl_r -lmass -bdatapsize:64K -bstackpsize:64K
LIBsys          = $(MYLIBsys) 


# --------------------
# Installing directory
# --------------------

  INSTALL_DIR = $(COREBIN)


# --------
# Log file
# --------

  LOG_FILE = log.make.$(EXE_FILE)


#-----------------------------------------------------------------------------
#                          -- Child make --
#-----------------------------------------------------------------------------

# ------------
# Source files
# ------------

  OBJS	= \
        add_gfs_stratosphere.o \
	adjtest.o \
	adjtest_obs.o \
	aeroinfo.o \
	aircraftinfo.o \
        aircraftobsqc.o \
	anberror.o \
	anbkerror.o \
	aniso_ens_util.o \
	anisofilter.o \
	anisofilter_glb.o \
	antcorr_application.o \
	antest_maps0.o \
	antest_maps0_glb.o \
        atms_spatial_average_mod.o \
	balmod.o \
	berror.o \
	bias_predictors.o \
        bicg.o  \
        bicglanczos.o  \
	bkerror.o \
	bkgcov.o \
	bkgvar.o \
	bkgvar_rewgt.o \
	blacklist.o \
        blendmod.o \
	calc_fov_conical.o \
	calc_fov_crosstrk.o \
	cal_tztr.o \
	calctends.o \
	calctends_ad.o \
	calctends_tl.o \
	calctends_no_ad.o \
	calctends_no_tl.o \
	chemmod.o \
	cloud_efr.o \
	clw_mod.o \
	cmaq_routines.o \
        co_mop_ak.o  \
	coinfo.o \
	combine_radobs.o \
	compact_diffs.o \
	compute_derived.o \
	compute_fact10.o \
	compute_qvar3d.o \
	constants.o \
	control2model.o \
	control2state.o \
	control_vectors.o \
	converr.o \
	convinfo.o \
	convthin.o \
	crtm_interface.o \
	cwhydromod.o \
	cvsection.o \
	deter_nst.o \
	deter_sfc_mod.o \
	dtast.o \
	egrid2agrid_mod.o \
	enorm_state.o \
	ensctl2state.o \
	evaljgrad.o \
	evaljcdfi.o \
	evaljo.o \
	evalqlim.o \
	fgrid2agrid_mod.o \
	fill_mass_grid2.o \
	fill_nmm_grid2.o \
	fpvsx_ad.o \
        general_commvars_mod.o \
	general_read_gfsatm.o \
	general_read_nmmb.o \
	general_specmod.o \
	general_spectral_transforms.o \
	general_sub2grid_mod.o \
	general_tll2xy_mod.o \
	general_transform.o \
	gengrid_vars.o \
	general_write_gfsatm.o \
	genqsat.o \
	genstats_gps.o \
	gesinfo.o \
	get_derivatives.o \
	get_derivatives2.o \
	get_gefs_ensperts_dualres.o \
	get_gefs_for_regional.o \
	get_nmmb_ensperts.o \
	get_pseudo_ensperts.o \
	get_semimp_mats.o \
	get_wrf_nmm_ensperts.o \
	getprs.o \
	getsiga.o \
	get_wrf_mass_ensperts_netcdf.o \
	getuv.o \
	getvvel.o \
        gfs_stratosphere.o \
	glbsoi.o \
	grtest.o \
	grdcrd.o \
	gridmod.o \
	gscond_ad.o \
	gsd_terrain_match_surfTobs.o \
	gsdcloudanalysis.o \
        gsdcloudanalysis4NMMB.o \
        gsd_update_mod.o \
	gsi_4dvar.o \
	gsi_4dcouplermod.o \
	gsi_bundlemod.o \
	gsi_chemguess_mod.o \
	gsi_metguess_mod.o \
	gsi_io.o \
	gsi_nemsio_mod.o \
	gsimod.o \
	gsisub.o \
	guess_grids.o \
	half_nmm_grid2.o \
	hilbert_curve.o \
	hybrid_ensemble_isotropic.o \
	hybrid_ensemble_parameters.o \
	inc2guess.o \
	init_jcdfi.o \
	insitu_info.o \
	int3dvar.o \
	intall.o \
        intco.o \
	intdw.o \
	intgps.o \
	intgust.o \
	intjcmod.o \
	intjo.o \
	intlag.o \
	intoz.o \
	intno2.o \
	intpblh.o \
	intpcp.o \
	intpm2_5.o \
	intps.o \
	intpw.o \
	intq.o \
	intrad.o \
	intrp2a.o \
	intrp3oz.o \
        intvis.o   \
	intrw.o \
	intspd.o \
	intsrw.o \
	intsst.o \
	intt.o \
	inttcp.o \
	intw.o \
	jcmod.o \
	jfunc.o \
        jgrad.o  \
	kinds.o \
	lag_fields.o \
	lag_interp.o \
	lag_traj.o \
	lagmod.o \
	lanczos.o \
	logvis_to_vis.o \
	looplimits.o \
	m_berror_stats.o \
	m_berror_stats_reg.o \
	m_dgeevx.o \
	m_distance.o  \
	m_dtime.o	\
	m_find.o   \
	m_gpsrhs.o \
	m_gsiBiases.o \
	m_rerank.o \
	m_obdiag.o	\
	m_rhs.o	\
	m_sortind.o  \
	m_stats.o \
	m_tick.o \
	m_uniq.o  \
	mpeu_mpif.o \
	mpeu_util.o \
	mod_nmmb_to_a.o \
	mod_strong.o \
	mod_vtrans.o \
        mod_wrfmass_to_a.o \
	model_ad.o \
	model_tl.o \
	model2control.o \
	mp_compact_diffs_mod1.o \
	mp_compact_diffs_support.o \
	mpimod.o \
	mpl_allreduce.o \
	mpl_bcast.o \
        native_endianness.o \
	ncepgfs_ghg.o \
	ncepgfs_io.o \
	ncepnems_io.o \
	nlmsas_ad.o \
	normal_rh_to_q.o \
	nstio_module.o \
	obs_ferrscale.o \
	obs_para.o \
	obs_sensitivity.o \
	observer.o \
	obsmod.o \
	omegas_ad.o \
	oneobmod.o \
	ozinfo.o \
	no2info.o \
	patch2grid_mod.o \
	pcgsoi.o \
	pcgsqrt.o \
	pcp_k.o \
	pcpinfo.o \
	penal.o \
	phil.o \
	phil1.o \
	plib8a.o \
	plib8b.o \
	polcarf.o \
	prad_bias.o \
	precond.o \
	precpd_ad.o \
	prewgt.o \
	prewgt_reg.o \
	projmethod_support.o \
	prt_guess.o \
	psichi2uv_reg.o \
	psichi2uvt_reg.o \
	q_diag.o \
	qcmod.o \
	qnewton3.o \
	radinfo.o \
	raflib.o \
	rapidrefresh_cldsurf_mod.o \
	raqmsmod.o \
	raqms_routines.o \
	rdgrbsst.o \
	read_aerosol.o \
	read_airs.o \
	read_amsre.o \
	read_anowbufr.o \
	read_atms.o \
	read_avhrr.o \
	read_avhrr_navy.o \
	read_bufrtovs.o \
        read_co.o \
	read_cris.o \
	read_diag.o \
	read_files.o \
	read_fl_hdob.o  \
	read_gfs_ozone_for_regional.o \
	read_goesimg.o \
	read_goesndr.o \
	read_gps.o \
	read_guess.o \
	read_iasi.o \
	read_l2bufr_mod.o \
	read_lag.o \
	read_lidar.o \
	read_Lightning.o \
	read_modsbufr.o \
	read_NASA_LaRC.o \
        read_NASA_LaRC_cloud.o \
	read_obs.o \
	read_obsdiags.o \
	read_ozone.o \
	read_no2.o \
	read_pblh.o \
	read_pcp.o \
	read_prepbufr.o \
	read_radar.o \
	read_RadarRef_mosaic.o \
	read_satwnd.o \
	read_seviri.o \
	read_sfcwnd.o  \
	read_ssmi.o \
	read_ssmis.o \
	read_superwinds.o \
	read_tcps.o \
	read_wrf_mass_files.o \
	read_wrf_mass_guess.o \
	read_wrf_nmm_files.o \
	read_wrf_nmm_guess.o \
	regional_io.o \
	reorg_metar_cloud.o \
	rfdpar.o \
	rsearch.o \
	rtlnmc_version3.o \
	satthin.o \
        set_crtm_aerosolmod.o \
        set_crtm_cloudmod.o \
        setupbend.o \
        setupco.o \
	setupdw.o \
	setupgust.o \
	setuplag.o \
	setupoz.o \
	setupno2lay.o \
	setuppblh.o \
	setuppcp.o \
	setuppm2_5.o \
	setupps.o \
	setuppw.o \
	setupq.o \
	setuprad.o \
	setupref.o \
	setuprhsall.o \
	setuprw.o \
	setupspd.o \
	setupsrw.o \
	setupsst.o \
	setupt.o \
	setuptcp.o \
	setupvis.o \
	setupw.o \
	setupyobs.o \
	sfc_model.o \
	sfcobsqc.o \
	simpin1.o \
	simpin1_init.o \
	skindepth.o \
	smooth_polcarf.o \
	smoothrf.o \
	smoothwwrf.o \
	smoothzrf.o \
	sqrtmin.o \
	ssmis_spatial_average_mod.o  \
	sst_retrieval.o \
	state2control.o \
	state2ensctl.o \
	state_vectors.o \
	statsco.o \
	statsconv.o \
	statsoz.o \
	statsno2.o \
	statspcp.o \
	statsrad.o \
	stop1.o \
	stp3dvar.o \
	stpcalc.o \
	stpco.o \
	stpdw.o \
	stpgps.o \
	stpgust.o \
	stpjcmod.o \
	stpjo.o \
	stpoz.o \
	stpno2.o \
	stppblh.o \
	stppcp.o \
	stppm2_5.o \
	stpps.o \
	stppw.o \
	stpq.o \
	stprad.o \
	stprw.o \
	stpspd.o \
	stpsrw.o \
	stpsst.o \
	stpt.o \
	stptcp.o \
	stpvis.o \
	stpw.o \
	strong_bal_correction.o \
	strong_baldiag_inc.o \
	strong_fast_global_mod.o \
	sub2fslab_mod.o \
	support_2dvar.o \
	stub_set_crtm_aerosol.o \
	stub_pertmod.o \
        stub_timermod.o \
	tendsmod.o \
	test_obsens.o \
	tcv_mod.o \
	timermod.o \
	tintrp2a.o \
	tintrp3.o \
	tpause.o \
	tpause_t.o \
        tune_pbl_height.o \
	turbl.o \
	turbl_ad.o \
	turbl_tl.o \
	turblmod.o \
	tv_to_tsen.o \
	unfill_mass_grid2.o \
	unfill_nmm_grid2.o \
	unhalf_nmm_grid2.o \
	update_guess.o \
	update_geswtend.o \
	ut_gsibundle.o \
	wind_fft.o \
	wrf_binary_interface.o \
	wrf_mass_guess_mod.o \
	wrf_netcdf_interface.o \
	write_all.o \
	write_bkgvars_grid.o \
	write_obsdiags.o \
	wrwrfmassa.o \
	wrwrfnmma.o \
	xhat_vordivmod.o \
	zrnmi_mod.o \
        blockIO.o

# ----

LIB =   libgsi.a

# ------------------------
# Call compiler and linker
# ------------------------

all : $(LIB) $(EXE_FILE)


$(LIB):	 $(OBJS)
	echo $(OBJS)
	$(AR) -ruv $(LIB) $(OBJS)

$(EXE_FILE):  $(OBJS) $(LIB) gsimain.o
	$(F90) $(LDFLAGS) -o gsi.exe gsimain.o libgsi.a $(LIBcrtm) $(LIBsfcio) $(LIBsigio) $(LIBnemsio) $(LIBw3) $(LIBbacio) $(LIBbufr) $(LIBsp) $(LIBmpeu) $(LIBwrf) $(LIBnetcdf) $(LIBsys) $(LIBrrcld) $(LIBprpdcdr)
	cp $(EXE_FILE) $(COREBIN)

# DEPENDENCIES : only dependencies after this line (don't remove the word DEPENDENCIES)

include Makefile.dependency

.SUFFIXES : .f90 .F90 .fpp .o

.F90.o:
	$(CPP) $(CPP_FLAGS) $(CPP_F90FLAGS) $*.F90  > $*.fpp
	$(F90) $(FFLAGS) -c $*.fpp
	$(RM) $*.fpp


clean:
	$(RM) -f *.o *.exe $(LIB)

