


#########################################################################
# platform dependent options
#
# for mac osx
F90 = gfortran 
F90FLAGS = -llapack -lblas -O3 # -fbounds-check -finit-real=nan # -fcheck-array-temporaries -finit-integer=0
CDFFLAGS = -I/usr/local/include -L/usr/local/lib -lnetcdf 
MPIFLAGS = -I/usr/local/include -L/usr/local/lib -lmpi -lmpi_f77 

# on ubuntu
#F90 = gfortran 
#CDFFLAGS = -I/usr/include -lnetcdf -lnetcdff 
#MPIFLAGS = -I/usr/include/mpi -lmpi -lmpi_f77 
#F90FLAGS = -llapack -lblas -O3 # -fbounds-check -finit-real=nan

# on snow
#F90 = gfortran 
#CDF_ROOT = ${HOME}/scr
#CDFFLAGS = -I$(CDF_ROOT)/include  -L$(CDF_ROOT)/lib -lnetcdf -lhdf5_hl -lhdf5 -lz -lm -lcurl
#MPIFLAGS = -I$(MPI_ROOT)/include -L$(MPI_ROOT)/lib -lmpi -lmpi_f77
#F90FLAGS =  -O3 # -fbounds-check -finit-real=nan

# on thunder:  need to load ifort modules
#F90 = mpif90
#CDF_ROOT = ${HOME}/scr2
#CDFFLAGS = -I$(CDF_ROOT)/include  -L$(CDF_ROOT)/lib -lnetcdf -lhdf5_hl -lhdf5 -lz -lm -lcurl
#MPIFLAGS = -llapack
#F90FLAGS = -O2 #-check bounds # -fbounds-check -finit-real=nan

# on blizzard
#F90       = mpxlf90
#F90FLAGS1 = -q64 -qxlf90=autodealloc -O3 -qstrict -qMAXMEM=-1 -Q -qarch=auto -qtune=auto -qcache=auto 
#F90FLAGS  = ${F90FLAGS1} -qextname -I/sw/aix61/netcdf-4.1.1/include
#CDFFLAGS1 = -L/sw/aix61/netcdf-4.1.1/lib -lnetcdf -L/sw/aix61/hdf5-1.8.4-patch1/lib -lhdf5_hl 
#CDFFLAGS  = ${CDFFLAGS1} -lhdf5 -L/sw/aix53/zlib-1.2.3/lib -lz -lm -L/sw/aix53/szip-2.1/lib -lsz
#MPIFLAGS  =



#########################################################################

all_files = pyOM.o config.o pyOM_module.o congrad2D.o congrad3D.o timing_module.o \
            pressure.o integrate.o buoyancy.o momentum.o mom_adv.o  \
            biharmonic.o convection.o advection.o diagnostics.o diag_barbi.o \
            particle.o background_state.o vert_friction.o zonal_averages.o \
            tracer.o time_averages.o bolus_velocity.o pv_mixing.o quasi_stokes.o

without_mpi: ${all_files} boundary.o
	 $(F90) ${all_files} boundary.o $(F90FLAGS) $(CDFFLAGS)  -o ../bin/model.x

with_mpi:    ${all_files} boundary_MPI.o
	 $(F90) ${all_files} boundary_MPI.o $(F90FLAGS)  $(MPIFLAGS) $(CDFFLAGS)  -o ../bin/model.x

clean :
	 rm -f *.o *.mod 

# fortran files for fortran front end only

pyOM.o           : pyOM.f90 pyOM_module.o timing_module.o
	 	$(F90) $(F90FLAGS) -c pyOM.f90
diagnostics.o    : diagnostics.f90 pyOM_module.o  pyOM.o 
	 	$(F90) $(F90FLAGS) $(CDFFLAGS) -c diagnostics.f90
zonal_averages.o : zonal_averages.f90 pyOM_module.o  pyOM.o 
	 	$(F90) $(F90FLAGS) $(CDFFLAGS) -c zonal_averages.f90
time_averages.o  : time_averages.f90 pyOM_module.o   pyOM.o 
	 	$(F90) $(F90FLAGS) $(CDFFLAGS) -c time_averages.f90
diag_barbi.o     : diag_barbi.f90 pyOM_module.o pyOM.o bolus_velocity.o
	 	$(F90) $(F90FLAGS) $(CDFFLAGS) -c diag_barbi.f90
particle.o       : particle.f90 pyOM_module.o    pyOM.o 
	 	$(F90) $(F90FLAGS) $(CDFFLAGS) -c particle.f90
bolus_velocity.o : bolus_velocity.f90 pyOM_module.o   pyOM.o 
	 	$(F90) $(F90FLAGS) $(CDFFLAGS) -c bolus_velocity.f90
pv_mixing.o      : pv_mixing.f90 pyOM_module.o  pyOM.o 
	 	$(F90) $(F90FLAGS)  $(CDFFLAGS) -c pv_mixing.f90
quasi_stokes.o   : quasi_stokes.f90 pyOM_module.o   pyOM.o 
	 	$(F90) $(F90FLAGS) $(CDFFLAGS) -c quasi_stokes.f90
config.o         : config.f90 pyOM_module.o  pyOM.o zonal_averages.o time_averages.o particle.o
	 	$(F90) $(F90FLAGS)  $(CDFFLAGS)  -c config.f90

# these fortran files are used by python and fortran front end

pyOM_module.o    : pyOM_module.f90
	 	$(F90) $(F90FLAGS) -c pyOM_module.f90
timing_module.o  : timing_module.f90
	 	$(F90) $(F90FLAGS) -c timing_module.f90
tracer.o         : tracer.f90 pyOM_module.o  
	 	$(F90) $(F90FLAGS) -c tracer.f90
congrad2D.o      : congrad2D.f90 pyOM_module.o   
	 	$(F90) $(F90FLAGS) -c congrad2D.f90
congrad3D.o      : congrad3D.f90 pyOM_module.o   
	 	$(F90) $(F90FLAGS) -c congrad3D.f90
pressure.o       : pressure.f90 pyOM_module.o    congrad2D.o congrad3D.o
	 	$(F90) $(F90FLAGS) -c pressure.f90
integrate.o      : integrate.f90 pyOM_module.o   
	 	$(F90) $(F90FLAGS) -c integrate.f90
buoyancy.o       : buoyancy.f90 pyOM_module.o   
	 	$(F90) $(F90FLAGS) -c buoyancy.f90
momentum.o       : momentum.f90 pyOM_module.o   
	 	$(F90) $(F90FLAGS) -c momentum.f90
mom_adv.o        : mom_adv.f90 pyOM_module.o   
	 	$(F90) $(F90FLAGS) -c mom_adv.f90
biharmonic.o     : biharmonic.f90 pyOM_module.o   
	 	$(F90) $(F90FLAGS) -c biharmonic.f90
convection.o     : convection.f90 pyOM_module.o   
	 	$(F90) $(F90FLAGS) -c convection.f90
advection.o      : advection.f90 pyOM_module.o   
	 	$(F90) $(F90FLAGS) -c advection.f90
boundary.o       : boundary.f90 pyOM_module.o   
	 	$(F90) $(F90FLAGS) -c boundary.f90
boundary_MPI.o   : boundary_MPI.f90 pyOM_module.o   
	 	$(F90) $(F90FLAGS) $(MPIFLAGS) -c boundary_MPI.f90
background_state.o: background_state.f90 pyOM_module.o   
	 	$(F90) $(F90FLAGS) -c background_state.f90
vert_friction.o  : vert_friction.f90 pyOM_module.o   
	 	$(F90) $(F90FLAGS) -c vert_friction.f90

