##########################################################################
#
# Makefile	Makefile for the quasi-geostrophic annulus model.
#		Use 'make clean' to delete .o and .mod files.
#		Use 'make' to produce the .o and .mod files, and
#		link them to produce qgam.
#
# hy 15Aug01
#
##########################################################################

SHELL=/bin/sh

# For AOPP Linux boxes
FC = /usr/local/bin/f95
FFLAGS = -I/usr/local/lib/fl90_modules
LIBS = -lnagfl90
LM_LICENSE_FILE = 7312@hercules
export LM_LICENSE_FILE
# previous two lines are equivalent to "setenv LM_LICENSE_FILE 7312@hercules"

OBJS = modules.o init_model.o init_state.o init_solver.o solver.o \
       jacobian.o step_q.o read_forcing_fields.o read_pu_fields.o save_fields.o \
       dissipation.o forcing.o laplacian.o main.o dtheta.o

MODS = precision.mod grid_params.mod phys_params.mod \
       dyn_vars.mod solver_vars.mod

.f90.o:                # implicit shorthand for "anyname.o: anyname.f90"
	$(FC) $(FFLAGS) -c $<

all: qgam

qgam: $(OBJS) $(MODS)
	$(FC) -o qgam $(FFLAGS) $(OBJS) $(LIBS)

precision.mod: modules.f90         # $< is a special macro, standing for the
	$(FC) $(FFLAGS) -c $<      # name of the file that caused the action
grid_params.mod: modules.f90
	$(FC) $(FFLAGS) -c $<
phys_params.mod: modules.f90
	$(FC) $(FFLAGS) -c $<
dyn_vars.mod:    modules.f90
	$(FC) $(FFLAGS) -c $<
solver_vars.mod: modules.f90
	$(FC) $(FFLAGS) -c $<

init_model.o: init_model.f90 precision.mod grid_params.mod \
              phys_params.mod dyn_vars.mod
init_solver.o: init_solver.f90 precision.mod grid_params.mod \
               phys_params.mod solver_vars.mod
init_state.o: init_state.f90 precision.mod grid_params.mod \
              phys_params.mod dyn_vars.mod solver_vars.mod
jacobian.o: jacobian.f90 precision.mod grid_params.mod phys_params.mod
laplacian.o: laplacian.f90 precision.mod grid_params.mod phys_params.mod
dissipation.o: dissipation.f90 precision.mod grid_params.mod phys_params.mod
forcing.o: forcing.f90 precision.mod grid_params.mod phys_params.mod
main.o: main.f90 precision.mod grid_params.mod dyn_vars.mod
dtheta.o: dtheta.f90 precision.mod grid_params.mod phys_params.mod
solver.o: solver.f90 precision.mod grid_params.mod phys_params.mod \
          dyn_vars.mod
step_q.o: step_q.f90 precision.mod grid_params.mod phys_params.mod \
          dyn_vars.mod solver_vars.mod
read_pu_fields.o: read_pu_fields.f90 precision.mod grid_params.mod dyn_vars.mod
read_forcing_fields.o: read_forcing_fields.f90 precision.mod \
                       grid_params.mod dyn_vars.mod phys_params.mod
save_fields.o: save_fields.f90 precision.mod grid_params.mod dyn_vars.mod

clean:
	rm -f *~  $(OBJS) $(MODS)

# the next line is needed for the implicit shorthand above to work
.SUFFIXES: .f90 .o

