# Universal machine independent makefile for SCRUM/ROMS model 
#====================================================================
# Set machine dependent definitions and rules.

include Makedefs

# Configuration for SCRUM/ROMS model:
#====================================================================
# All source codes files are sorted into eight groups, separated by
# blanc lines:
#  1) main driving part;          5) vertical mixing schemes; 
#  2) 2D time stepping engine;    6) on-fly model diagnostic routines;
#  3) 3D time stepping engine;    7) netCDF I/O routines;
#  4) sea-water EOS routines;     8) model forcing routines; 
#--------------------------------------------------------------------

 SRCS = step2d_LF_AM3.F	main.F	read_inp.F	sta_par.F\
	check_switches1.F  check_switches2.F  check_srcs.F\
	setup_kwds.F	check_kwds.F\
	timers.F	init_scalars.F	init_arrays.F	set_weights.F\
	set_scoord.F	ana_grid.F	setup_grid1.F	setup_grid2.F\
	visc_rescale.F	set_nudgcof.F	ana_initial.F	analytical.F\
\
	zetabc.F	u2dbc_ex.F	v2dbc_ex.F	obc_volcons.F\
\
	pre_step3d4S.F	step3d_t3S.F	step3d_uv1.F	step3d_uv2.F\
	prsgrd31.F	rhs3d35S.F	set_depth.F	omega.F\
	visc3d.F	t3dmix.F\
	u3dbc_im.F	v3dbc_im.F	t3dbc_im.F\
\
	rho_eos.F	ab_ratio.F	alfabeta.F\
\
	ana_vmix.F	bvf_mix.F	pp_vmix.F\
	lmd_vmix.F	lmd_kpp.F	lmd_swfrac.F	lmd_wscale.F\
\
	diag.F		wvlcty.F	checkdims.F	grid_stiffness.F\
\
	get_date.F	lenstr.F	closecdf.F\
	insert_node.F	nf_fread.F	get_grid.F	get_initial.F\
	put_global_atts.F		def_grid.F	wrt_grid.F\
	def_his.F	def_rst.F	set_avg.F	def_station.F\
	wrt_his.F	wrt_rst.F	wrt_avg.F	wrt_station.F\
\
	set_cycle.F\
	get_vbc.F	get_tclima.F	get_ssh.F	get_wwave.F\
	get_smflux.F	get_stflux.F	get_srflux.F	get_sst.F\
\
	MPI_Setup.F	MessPass2D.F	MessPass3D.F	exchange.F\
	check.F
#
# non-parallelized/old/obsolete stuff
#
#	ri_number.F	sg_bbl96.F	sg_ubab.F\
#	my25_q.F	my25_vmix.F	my2_vmix.F\
#	smol_adv.F	smol_ups.F	smol_adiff.F\
#	get_rhosxe.F	copy.F		get_bsedim.F
#
#--------------------------------------------------------------------

 RCS = $(SRCS:.F=.f)

 OBJS = $(RCS:.f=.o)

 SBIN = scrum

#
# Eecutable file.
# ========= =====
#
$(SBIN): $(OBJS)
	$(LDR) $(FFLAGS) $(LDFLAGS) -o a.out $(OBJS) $(LCDF) $(LMPI) 
	mv a.out $(SBIN)
#
# Everything
# ==========
all: tools depend $(SBIN)
#
# Special treatment of main: include LDFLAGS into compilation,
#                             since it may contain directives.
main.o: main.f
	$(CFT) $(FFLAGS) $(LDFLAGS) -c main.f
#
# Auxiliary utility programs and List of Dependecies:
# ========= ======= ======== === ==== == ============
#
  TOOLS = mpc cross_matrix cppcheck srcscheck checkkwds partit ncjoin ncrename

tools: $(TOOLS)

mpc: mpc.F
	$(CPP) -P mpc.F > mpc.f
	$(LDR) $(FFLAGS) -o mpc mpc.f
cross_matrix: cross_matrix.o
	$(LDR) $(FFLAGS) -o cross_matrix cross_matrix.o
cppcheck: cppcheck.o
	$(LDR) $(FFLAGS) -o cppcheck cppcheck.o
srcscheck: srcscheck.o
	$(LDR) $(FFLAGS) -o srcscheck srcscheck.o
checkkwds: checkkwds.o
	$(LDR) -o checkkwds checkkwds.o
checkdefs: check_switches1.F setup_kwds.F

check_switches1.F: cppcheck cppdefs.h
	cppcheck
check_srcs.F: srcscheck Makefile
	srcscheck
setup_kwds.F: checkkwds read_inp.F
	checkkwds
partit: partit.o insert_node.o lenstr.o
	$(LDR) $(FFLAGS) -o partit partit.F insert_node.o lenstr.o $(LCDF)
ncjoin: ncjoin.o lenstr.o
	$(LDR) $(FFLAGS) -o ncjoin ncjoin.o lenstr.o $(LCDF)
ncrename: ncrename.o lenstr.o
	$(LDR) $(FFLAGS) -o ncrename ncrename.o lenstr.o $(LCDF)

depend: checkdefs cross_matrix
	cross_matrix *.F
#
# Target to create tar file.
# ====== == ====== === =====
#
tarfile:
	tar cvf roms.tar Make* *.h *.F *.README README.*  *.in *.in.*
#
# Cleaning:
# =========
#
rmtools:
	/bin/rm -f $(TOOLS)
clean:
	/bin/rm -f core *.o *.i *.s *.f *.trace

clobber: clean
	/bin/rm -rf $(SBIN) $(TOOLS) ./rii_files


plotter: plotter.F lenstr.o
	f77 -n32 -o plotter plotter.F lenstr.o $(LIBNCAR)

#
# Special treatment for barrier function:
# THERE SHALL BE NO OPTIMIZATION HERE!!!!
#
my_barrier.o: my_barrier.f
	$(CFT) -c -O0 my_barrier.f
#
# Include automatically generated dependency list:
#
include Make.depend

