include ../../../conf/configure.nems

MAKEFILE = makefile

UTILINCS = -I../../share -I../libutil
GOCARTINCS = -I../../../chem/gocart/AIX/include/Chem_Base \
             -I../../../chem/gocart/AIX/include/GMAO_mpeu \
             -I../../../chem/gocart/AIX/include/GEOSchem_GridComp

LIBRARY  = gfs_dynamics.a

OPTS     = $(FFLAGS_GFS) $(R8) -O3 $(UTILINCS)
OPTSGOCART     = $(FFLAGS_GFS) $(R8) -O3 $(UTILINCS) $(GOCARTINCS)

FFLAG90  = $(OPTS) $(FREE)
FFLAGS1  = $(OPTS) $(FIXED)
FFLAG90GOCART  = $(OPTSGOCART) $(FREE)
FFLAGS1GOCART  = $(OPTSGOCART) $(FIXED)

OBJS0	= \
	  gfs_dynamics_err_msg_mod.o		\
	  gfs_dynamics_namelist_mod.o		\
	  gfs_dynamics_start_time_get_mod.o	\
	  gfs_dynamics_internal_state_mod.o	\
	  gfs_dynamics_grid_create_mod.o	\
	  gfs_dynamics_output.o          	\
	  gfs_dynamics_getcf_mod.o		\
	  GFS_AddParameterToStateMod.o          \
	  gfs_dynamics_initialize_mod.o		\
	  gfs_dynamics_run_mod.o		\
	  gfs_dynamics_finalize_mod.o		\
	  gfs_dynamics_add_get_state_ESMFField_mod.o	\
	  gfs_dyn_states_mod.o                  \
	  gfs_dyn_physcons.o          	\
	  gfs_dynamics_grid_comp_mod.o
	  

OBJ_MOD	= \
	  gfs_dyn_machine.o             \
	  gfs_dyn_resol_def.o           \
	  gfs_dyn_gg_def.o              \
	  gfs_dyn_vert_def.o            \
	  gfs_dyn_io_header.o           \
	  gfs_dyn_date_def.o            \
	  gfs_dyn_layout1.o             \
	  namelist_dynamics_def.o       \
	  gfs_dyn_coordinate_def.o      \
	  gfs_dyn_lon_lat_para.o        \
	  gfs_dyn_tracer_const.o  	\
	  gfs_dyn_tracer_config.o       \
	  gfs_dyn_reduce_lons_grid_module.o \
	  gfs_dyn_matrix_sig_def.o      \
	  gfs_dyn_mpi_def.o             \
	  gfs_dyn_deldifs_def.o         \
	  gfs_dyn_bfilt_def.o   	\
	  gfs_dyn_glats.o	        \
	  gfs_dyn_dfi_mod.o             \
	  nemsio_def.o	                \
	  wrtout_dynamics.o 

OBJ_TRAC= dyn_gocart_tracer_config.o

OBJ_TRAC_stub= dyn_gocart_tracer_config_stub.o

OBJS   = \
	get_cd_hyb.o \
	get_am_bm_hyb.o \
	get_cd_hyb_gc.o \
	get_cd_hyb_gcdp.o \
	get_am_bm_hyb_gc.o \
	get_am_bm_hyb_gcdp.o \
	setlats.o \
	getysk.o \
	getysk_gc.o \
	redist_lats_a.o \
	ifshuff.o \
	shuffle_grid.o \
	grid_collect.o \
	excha.o \
	info.o \
	four2grid_thread.o \
	hpmdummy.o \
	coundummy.o \
	damp_speed.o \
	damp_speed_noq.o \
	deldifs.o \
	deldifs_noq.o \
	input_fields.o \
	input_fields_rst.o \
	delnpe.o \
	delnpo.o \
	dezouv.o \
	impadj_sig.locl.o \
	impadj_hyb.locl.o \
	impadj_hyb.locl_gc.o \
	impadj_hyb.locl_gcdp.o \
	dozeuv.o \
	epslon.o \
	filtereo.o \
	filter1eo.o \
	filter2eo.o  \
	filtereo_noq.o \
	filter1eo_noq.o \
	filter2eo_noq.o  \
	get_ls_node.o \
	get_lats_node_shuff_a_fix.o \
	getcon_dynamics.o \
	gfidi_sig.o \
	gfidi_hyb.o \
	gfidi_hyb_gc.o \
	gfidi_hyb_gc_h.o \
	gfidi_hyb_gchdp.o \
	gfidi_gchdp_noadv_noq.o \
	ndslfv_pack.o \
	ndslfv_para.o \
	ndslfv_massadvh.o \
	ndslfv_monoadvh.o \
	ndslfv_monoadvv.o \
	grid_to_spect.o \
	gridzz_to_spect.o \
	spect_to_grid.o \
	spect_to_gridxy.o \
	spectpz_to_gridxy.o \
	compns_dynamics.o \
	gozrineo.o \
	pln2eo.o \
	rms_spect.o \
	lats_shuff.o \
	uvoedz.o                     \
	mpi_quit.o                   \
	sicdif_sig.o                 \
	sicdif_hyb.o                 \
	sicdif_hyb_gc.o              \
	sicdif_hyb_gcdp.o              \
	common_to_model_vars.o      \
	getpwatptot.o      \
	sig2press.o            \
	hyb2press.o          	\
	gch2press.o          	\
	omega_sig.o             \
	omega_hyb.o          	\
	omega_gch.o          	\
	omega_gcdp.o          	\
	do_dynamics_mod.o          \
	gfs_dficoll_dynamics.o       \
	do_dynamics_one_loop.o       \
	do_dynamics_two_loop.o       \
	model_to_common_vars.o      \
	gather_times.o               \
	four2fln.o                   \
	sortrx.o                     \
	sumfln.o                     \
	sumder2.o                    \
	triseori.o                   \
	uveodz.o                     \
	matinv.o                     \
	ver_sig.o                    \
	ysminv.o                     

OBJS_PORT = \
	fftpack.o \
	four2grid_thread.fftpack.o \
	noblas.o

OBJS_IO= \
	grid_fix.o         \
	treadeo_nemsio.o    \
	treadg_nemsio.o    \
	treads_nemsio.o    \
	twrites_rst.o     \
	twriteg_rst.o     \
	grid_to_spect_inp.o    \
	setsig.o               \
	spect_to_grid_inp.o    


ifeq ($(GOCART_MODE),full)
	DEPEND_FILES = ${OBJS0:.o=.f} ${OBJ_MOD:.o=.f} ${OBJ_TRAC:.o=.f} ${OBJS:.o=.f} ${OBJS_PORT:.o=.f} ${OBJS_IO:.o=.f}
else
	DEPEND_FILES = ${OBJS0:.o=.f} ${OBJ_MOD:.o=.f} ${OBJ_TRAC_stub:.o=.f} ${OBJS:.o=.f} ${OBJS_PORT:.o=.f} ${OBJS_IO:.o=.f}
endif

all default: depend
	@gmake -f $(MAKEFILE) $(LIBRARY)

OBJALL= $(OBJ_MOD) $(OBJS) $(OBJS_IO)

$(LIBRARY): $(OBJ_MOD) $(OBJ_TRAC_stub) $(OBJS0) $(OBJS) $(OBJS_IO)
	$(AR) $(ARFLAGS) $@ $?

gocart_stub: $(OBJ_MOD) $(OBJ_TRAC_stub) $(OBJS0) $(OBJS) $(OBJS_IO)
	$(AR) $(ARFLAGS) $(LIBRARY) $(OBJ_MOD) $(OBJ_TRAC_stub) $(OBJS0) $(OBJS) $(OBJS_IO)

gocart_full: $(OBJ_MOD) $(OBJ_TRAC) $(OBJS0) $(OBJS) $(OBJS_IO)
	$(AR) $(ARFLAGS) $(LIBRARY) $(OBJ_MOD) $(OBJ_TRAC) $(OBJS0) $(OBJS) $(OBJS_IO)

$(OBJALL): %.o: %.f90
	$(FC) $(FFLAGS1) -c $*.f90
$(OBJS0): %.o: %.f90
	$(FC) $(FFLAGS1) -c $*.f90
$(OBJS_PORT): %.o: %.f90
	$(FC) $(FFLAGS1) -c $*.f90
$(OBJ_TRAC): %.o: %.f90
	$(FC) $(FFLAGS1GOCART) -c $*.f90
$(OBJ_TRAC_stub): %.o: %.f90
	$(FC) $(FFLAGS1) -c $*.f90

clean:
	$(RM) -f $(LIBRARY) *.o *.mod *.lst *.f90 lm map depend

#
# *****************************************************************
#

.SUFFIXES: .f .f90 .o

.f.f90:
	$(CPP) $< > $*.f90



gfs_dyn_physcons.o:	gfs_dyn_physcons.f90
		$(FC) $(FFLAG90) -c gfs_dyn_physcons.f90

gfs_dynamics_err_msg_mod.o:	 gfs_dynamics_err_msg_mod.f90
		$(FC) $(FFLAG90) -c gfs_dynamics_err_msg_mod.f90

gfs_dynamics_namelist_mod.o:	 gfs_dynamics_namelist_mod.f90
		$(FC) $(FFLAG90) -c gfs_dynamics_namelist_mod.f90

gfs_dynamics_start_time_get_mod.o:	 gfs_dynamics_start_time_get_mod.f90
		$(FC) $(FFLAG90) -c gfs_dynamics_start_time_get_mod.f90

gfs_dynamics_grid_create_mod.o:	 gfs_dynamics_grid_create_mod.f90
		$(FC) $(FFLAG90) -c gfs_dynamics_grid_create_mod.f90

gfs_dynamics_output.o:	 gfs_dynamics_output.f90
		$(FC) $(FFLAG90) -c gfs_dynamics_output.f90

gfs_dynamics_getcf_mod.o:	 gfs_dynamics_getcf_mod.f90
		$(FC) $(FFLAG90) -c gfs_dynamics_getcf_mod.f90

gfs_dynamics_internal_state_mod.o:	 gfs_dynamics_internal_state_mod.f90
		$(FC) $(FFLAG90) -c gfs_dynamics_internal_state_mod.f90

GFS_AddParameterToStateMod.o:    GFS_AddParameterToStateMod.f90
	        $(FC) $(FFLAG90) -c GFS_AddParameterToStateMod.f90

gfs_dynamics_add_get_state_ESMFField_mod.o:	 gfs_dynamics_add_get_state_ESMFField_mod.f90
		$(FC) $(FFLAG90) -c gfs_dynamics_add_get_state_ESMFField_mod.f90

gfs_dyn_states_mod.o:	 gfs_dyn_states_mod.f90
		$(FC) $(FFLAG90) -c gfs_dyn_states_mod.f90

gfs_dynamics_initialize_mod.o:	 gfs_dynamics_initialize_mod.f90
		$(FC) $(FFLAG90) -c gfs_dynamics_initialize_mod.f90

gfs_dynamics_run_mod.o:	 gfs_dynamics_run_mod.f90
		$(FC) $(FFLAG90) -c gfs_dynamics_run_mod.f90

gfs_dynamics_finalize_mod.o:	 gfs_dynamics_finalize_mod.f90
		$(FC) $(FFLAG90) -c gfs_dynamics_finalize_mod.f90

gfs_dynamics_grid_comp_mod.o:	 gfs_dynamics_grid_comp_mod.f90
		$(FC) $(FFLAG90) -c gfs_dynamics_grid_comp_mod.f90

#
#
#

include ../../../conf/make.rules

include depend