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

#include Makedefs.GCC
include Makedefs.Intel
#include Makedefs.PGI
#include Makedefs.Fujitsu

#                                      All source code files are 
# Configuration for SCRUM/ROMS model:  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 =	main.F		step2D_FB.F	read_inp.F	check_switches1.F\
	setup_kwds.F	check_kwds.F	check_srcs.F	check_switches2.F\
	sta_par.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_im.F	v2dbc_im.F	obc_volcons.F\
\
	pre_step3d4S.F	step3d_t3S.F	step3d_uv1.F	step3d_uv2.F\
	prsgrd32AC1.F	rhs3d35S.F	set_depth.F	omega.F\
	visc3d_GP.F	t3dmix.F\
	u3dbc_im.F	v3dbc_im.F	t3dbc_im.F\
\
	rho_eos.F	ab_ratio.F	alfabeta.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	insert_node.F	closecdf.F\
	nf_fread.F	put_global_atts.F	get_grid.F\
	get_initial.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_forces.F	get_tclima.F	get_uclima.F\
	get_ssh.F	get_smflux.F	get_stflux.F	get_srflux.F\
	get_sst.F	get_dqdt.F	get_sss.F	get_wwave.F\
\
	MPI_Setup.F	MessPass2D.F	MessPass3D.F	exchange.F

#
# non-parallelized/old/obsolete stuff
#
#       lmd_vmix.F      lmd_kpp.F       lmd_swfrac.F    lmd_wscale.F
#
#	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
 LROMS = libroms.a
 LROMS2 = 2/$(LROMS)
 LROMS3 = 2/$(LROMS) 3/$(LROMS)
 LROMS4 = 2/$(LROMS) 3/$(LROMS) 4/$(LROMS)
#
# Eecutable file.
#========== =====
#
$(SBIN): $(OBJS)
	$(LDR) $(FFLAGS) $(LDFLAGS) -o a.out $(OBJS) $(LCDF) $(LMPI)
	mv a.out $(SBIN)
2level: $(OBJS) $(LROMS2)
	$(LDR) $(FFLAGS) $(LDFLAGS) -o a.out $(OBJS) $(LROMS2) $(LCDF) $(LMPI)
	mv a.out $(SBIN)
3level: $(OBJS) $(LROMS3)
	$(LDR) $(FFLAGS) $(LDFLAGS) -o a.out $(OBJS) $(LROMS3) $(LCDF) $(LMPI)
	mv a.out $(SBIN)
4level: $(OBJS) $(LROMS4)
	$(LDR) $(FFLAGS) $(LDFLAGS) -o a.out $(OBJS) $(LROMS4) $(LCDF) $(LMPI)
	mv a.out $(SBIN)
#
# Multilevel libraries
#
$(LROMS): $(OBJS)
	/bin/rm -f $(LROMS)
	ar r $(LROMS) $(OBJS)
2/$(LROMS): $(SRCS)
	cd 2; make -f ./Makefile $(LROMS); cd ..
#$(LROMS3): $(SRCS) $(LROMS2)
#cd 3; make $(LROMS); cd ..
#$(LROMS4): $(SRCS) $(LROMS3)
#cd 3; make $(LROMS); cd ..
#
# Everything
#===========
all: tools depend $(SBIN)
#
# Auxiliary utility programs and List of Dependecies:
# ========= ======= ======== === ==== == ============
#
 TOOLS = mpc cross_matrix cppcheck srcscheck checkkwds\
	 partit ncjoin ncrename ncextract redefs

tools: $(TOOLS)

mpc: mpc.F Makefile
	$(CPP) $(CPPFLAGS) -P mpc.F > mpc.f
	$(LDR) $(FFLAGS) $(LDFLAGS) -o mpc mpc.f
cross_matrix: cross_matrix.o
	$(LDR) $(FFLAGS) $(LDFLAGS) -o cross_matrix cross_matrix.o
partit: partit.o insert_node.o lenstr.o
	$(LDR) $(FFLAGS) $(LDFLAGS) -o partit partit.o insert_node.o lenstr.o $(LCDF)
ncjoin: ncjoin.o lenstr.o
	$(LDR) $(FFLAGS) $(LDFLAGS) -o ncjoin ncjoin.o lenstr.o $(LCDF)
ncrename: ncrename.o lenstr.o
	$(LDR) $(FFLAGS) $(LDFLAGS) -o ncrename ncrename.o lenstr.o $(LCDF)
ncextract: ncextract.o
	$(LDR) $(FFLAGS) $(LDFLAGS) -o ncextract ncextract.o
cppcheck: cppcheck.o
	$(LDR) $(FFLAGS) $(LDFLAGS) -o cppcheck cppcheck.o
srcscheck: srcscheck.o
	$(LDR) $(FFLAGS) $(LDFLAGS) -o srcscheck srcscheck.o
checkkwds: checkkwds.o
	$(LDR) $(FFLAGS) $(LDFLAGS) -o checkkwds checkkwds.o
redefs: redefs.o
	$(LDR) $(FFLAGS) $(LDFLAGS) -o redefs redefs.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

depend: checkdefs cross_matrix
	cross_matrix *.F

avr: avr.F lenstr.o
	$(LDR) $(FFLAGS) $(LDFLAGS) -o avr avr.F lenstr.o $(LCDF)

plotter: plotter.F
	ifc -Vaxlib -o plotter plotter.F $(LIBNCAR)
#
# Target to create tar file.
# ====== == ====== === =====
#
tarfile:
	tar cvf roms.tar Make* *.F *.h *.inc etalon_data.* *.README README.*  *.in *.in.*
#
# Cleaning targets
# ======== =======
#
rmtools:
	/bin/rm -f $(TOOLS)
clean:
	/bin/rm -rf *.f *.o *.a *.s *.trace $(COMP_FILES) 
allclean: clean
	cd 2; make -f ./Makefile clean; cd ..
	cd 3; make -f ./Makefile clean; cd ..
	cd 4; make -f ./Makefile clean; cd ..
clobber: clean
	/bin/rm -f check_switches1.F setup_kwds.F check_srcs.F
	/bin/rm -f $(SBIN) $(TOOLS)
	/bin/rm -f core core.*
#
# Include automatically generated dependency list:
#
include Make.depend

