# Compiling source files of LAKE model

 FC=ifort#mpif90
 #FC=gfortran
 EXEC = lake.out

 INCLPATHS = 
# -I ../netcdf_ifort_9.1.043/include/ ../netcdf_ifort_9.1.043/lib/libnetcdf.a

 INCLPATH1 = 
# -I ../netcdf_ifort_9.1.043/include/
 INCLPATH2 = 
# -I ../netcdf_ifort_9.1.043/lib/libnetcdf.a

 netcdf_def = #-Dnetcdf_lib
 mpi_def =  #-Dmpi

 ifeq ($(FC),ifort)
   PREPROCESS_KEY = -fpp
   opt_keys = -qopenmp -O3 #-fp-model source
   check_keys = -g -traceback -check all -fpe-all=0
 endif
 ifeq ($(FC),gfortran)
   PREPROCESS_KEY = -cpp
   #opt_keys = -fopenmp -O3 #-fp-model source
   #check_keys = -g -Wall -Warray-temporaries -Wconversion  -fbacktrace -ffree-line-length-0 -fcheck=all -ffpe-trap=invalid,zero,overflow,underflow -finit-real=nan
   #check_keys = -g -ffpe-trap=invalid,zero,overflow,denormal -fcheck=all -fbacktrace
   check_keys = -g -ffpe-trap=invalid,zero,overflow -fcheck=all -fbacktrace
   #check_keys = -g  -fcheck=all -fbacktrace
   #check_keys = -fbacktrace
 endif

 objfiles_path = ../objfiles/
 mkfile = Makefile
 
 objfiles = \
 $(objfiles_path)data_parameters_mod.o \
 $(objfiles_path)flake_parameters_mod.o \
 $(objfiles_path)SfcFlx_mod.o \
 $(objfiles_path)lake_datatypes_mod.o \
 $(objfiles_path)inout_parameters_mod.o \
 $(objfiles_path)comparams_mod.o \
 $(objfiles_path)inout_mod.o \
 $(objfiles_path)driving_params_mod.o \
 $(objfiles_path)lake_modules.o \
 $(objfiles_path)dzeta_mod.o \
 $(objfiles_path)numerics_mod.o \
 $(objfiles_path)phys_func.o \
 $(objfiles_path)out_mod.o \
 $(objfiles_path)surf_scheme1_mod.o \
 $(objfiles_path)surf_scheme2_mod.o \
 $(objfiles_path)surf_scheme_inm_mod.o \
 $(objfiles_path)heatbalsurf_mod.o \
 $(objfiles_path)t_solver_mod.o \
 $(objfiles_path)driver_datatypes_mod.o \
 $(objfiles_path)inout_driver_parameters_mod.o \
 $(objfiles_path)driver_interfaces_mod.o \
 $(objfiles_path)driver_parameters_mod.o \
 $(objfiles_path)diffusion_mod.o \
 $(objfiles_path)oxygen_mod.o \
 $(objfiles_path)seiches_param_mod.o \
 $(objfiles_path)turb_mod.o \
 $(objfiles_path)momentum_mod.o \
 $(objfiles_path)bubble_mod.o \
 $(objfiles_path)methane_mod.o \
 $(objfiles_path)init_var_mod.o \
 $(objfiles_path)soil_mod.o \
 $(objfiles_path)vertadv_mod.o \
 $(objfiles_path)salinity_mod.o \
 $(objfiles_path)control_point_mod.o \
 $(objfiles_path)carbon_dioxide.o \
 $(objfiles_path)phosphorus_mod.o \
 $(objfiles_path)trib.o \
 $(objfiles_path)bathym_mod.o \
 \
 $(objfiles_path)massflux_convection_v10.o \
 $(objfiles_path)convectpar.o \
 $(objfiles_path)lake.o \
 $(objfiles_path)init.o \
 $(objfiles_path)netcdf_inout.o \
 $(objfiles_path)time.o \
 $(objfiles_path)lakinteract.o \
 $(objfiles_path)driver.o \
 $(objfiles_path)snowtemp.o \
 $(objfiles_path)snowcalc.o \
 $(objfiles_path)flake_albedo_ref.o \
 $(objfiles_path)flake_derivedtypes.o \
 $(objfiles_path)flake_paramoptic_ref.o \
 $(objfiles_path)flake_configure.o \
 $(objfiles_path)flake_methane.o \
 $(objfiles_path)flake.o \
 $(objfiles_path)src_flake_interface_1D.o \
 $(objfiles_path)postprocessing.o \
 $(objfiles_path)postprocess_surf.o \
 $(objfiles_path)surf_scheme3.o \
 $(objfiles_path)t_0dim.o \
 \
 $(objfiles_path)sgetrf.o \
 $(objfiles_path)sgetrs.o \
 $(objfiles_path)xerbla.o \
 $(objfiles_path)sgesv.o \
 $(objfiles_path)ilaenv.o \
 $(objfiles_path)slaswp.o \
 $(objfiles_path)sgetrf2.o \
 $(objfiles_path)slaswp.o \
 $(objfiles_path)lsame.o \
 $(objfiles_path)strsm.o \
 $(objfiles_path)sscal.o \
 $(objfiles_path)isamax.o \
 $(objfiles_path)sgemm.o \
 $(objfiles_path)slamch.o \
 $(objfiles_path)iparam2stage.o \
 $(objfiles_path)ieeeck.o \
 $(objfiles_path)iparmq.o

 all : $(objfiles)

# Compiling module files
# $(objfiles_path)lake_modules.o : ./model/lake_modules.f90 $(mkfile)
#	$(FC) $(opt_keys) $(check_keys) $< -c -o $@ 
# $(objfiles_path)phys_func.o : ./model/phys_func.f90 $(mkfile)
#	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
# $(objfiles_path)inout.o : ./model/inout.f90 $(mkfile)
#	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
# $(objfiles_path)driver_interfaces_mod.o : ./driver/driver_interfaces_mod.f90 $(mkfile)
#	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
# $(objfiles_path)data_parameters_mod.o : ./shared/data_parameters_mod.F90 $(mkfile)
#	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
# $(objfiles_path)flake_parameters_mod.o : ./shared/flake_parameters_mod.F90 $(mkfile)
#	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
# $(objfiles_path)SfcFlx_mod.o : ./shared/SfcFlx_mod.F90 $(mkfile)
#	$(FC) $(opt_keys) $(check_keys) $< -c -o $@

# Preprocessed sources
 $(objfiles_path)driver.o : ./driver/driver.f90 $(mkfile)
	$(FC) $(PREPROCESS_KEY) $(netcdf_def) $(mpi_def) $(opt_keys) $(check_keys) $< -c -o $@
 $(objfiles_path)netcdf_inout.o : ./driver/netcdf_inout.f90 $(mkfile)
	$(FC) $(PREPROCESS_KEY) $(netcdf_def) $(opt_keys) $(check_keys) $< -c -o $@
 $(objfiles_path)postprocess_surf.o : ./driver/postprocess_surf.f90 $(mkfile)
	$(FC) $(PREPROCESS_KEY) $(netcdf_def) $(opt_keys) $(check_keys) $< -c -o $@

# Compiling other source giles
 $(objfiles_path)%.o : ./model/%.f90 $(mkfile)
	$(FC) $(PREPROCESS_KEY) $(opt_keys) $(check_keys) $< -c -o $@
 $(objfiles_path)%.o : ./model/%.f $(mkfile)
	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
 $(objfiles_path)%.o : ./model/%.for $(mkfile)
	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
 $(objfiles_path)%.o : ./driver/%.f90 $(mkfile)
	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
 $(objfiles_path)%.o : ./driver/%.f $(mkfile)
	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
 $(objfiles_path)%.o : ./shared/%.f90 $(mkfile)
	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
 $(objfiles_path)%.o : ./shared/%.F90 $(mkfile)
	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
 $(objfiles_path)%.o : ./shared/%.f $(mkfile)
	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
 $(objfiles_path)%.o : ./Flake/%.f90 $(mkfile)
	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
 $(objfiles_path)%.o : ./Flake/%.F90 $(mkfile)
	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
 $(objfiles_path)%.o : ./lapack/%.f $(mkfile)
	$(FC) $(opt_keys) $(check_keys) $< -c -o $@
 $(objfiles_path)%.o : ./lapack/%.F $(mkfile)
	$(FC) $(opt_keys) $(check_keys) $< -c -o $@

# Cleaning *.o and *.mod files
 clean :
	rm -f $(objfiles_path)*.o
	rm -f *.mod