#    Makefile for compiling the programs which are part of the of
#    the ICEDYN package: an ice sheet - ice shelf model
#    Thomas Reerink

#    To execute the make file (in the src/ directory) e.g.:
#     make create_initial_and_forcing_file_from_txt_program   Notice: without the  .f90  extension
#     make                                                    Short cut for the first listed program
#     make imau_ice_program                                   Compiling the imau_ice_program only
#     make basic                                              Compiling all programs which do not use MUMPS
#     make all                                                Compiling all programs
#     make clean                                              Removing all object, module and executables files

#    For "make" syntax search on "make tutorial", or see:
#     http://www.gnu.org/software/make/manual/make.html

#include Makefile.gfortran
#include Makefile.gfortran-par
#include Makefile.gfortran-mp-4.8-mac
include Makefile.gfortran-mp-4.9-mac
#include Makefile.gfortran-mp-4.9-mac-par
#include Makefile.gfortran-lisa
#include Makefile.sara-gnu-lisa-par
#include Makefile.ifort-lisa
#include Makefile.ifort-lisa-par
#include Makefile.gfortran-staff.science
#include Makefile.ifort-staff.science
#include Makefile.ifort-sverdrup
#include Makefile.gfortran-sverdrup
#include Makefile.gfortran-cygwin
#include Makefile.xlf90
#include Makefile.ifort-stampede
#include Makefile.ifort-comet

# The OBJ_PATH and the MOD_PATH are defined:
OBJ_PATH = object-files
MOD_PATH = module-files

# Pattern rules for creating object files from *.f90 (fortran 90) source files
$(OBJ_PATH)/%.o : %.f90
	$(F90) $(F90FLAGS) -c -o $@ $<

# Pattern rules for creating object files from *.f (fortran 77) source files
$(OBJ_PATH)/%.o : %.f
	$(F77) $(F77FLAGS) -c -o $@ $<

# Pattern rules for creating object files from *.f90 (fortran 90) source files 
# for the external calving flow line model code which is used by imau_ice_ccfm
$(OBJ_PATH)/%.o : ../../nick-model/src/%.f90
	$(F90) $(F90FLAGS) -c -o $@ $<

# This rule is used to build an executable from the object files:
% :
	$(F90) $(F90FLAGS)    -o $@ $^ $(LDFLAGS)


# =============================================================
#       Other program language sources used in this package
# =============================================================

# A general list Fortran 77 source files used in this package:
f77_sources = mklvna.f

# Creating the list of the f77 object files:
f77_objects = $(f77_sources:%.f=$(OBJ_PATH)/%.o)

# A general list C source files used in this package:
c_sources =

# Creating the list of the c object files:
c_objects = $(c_sources:%.c=$(OBJ_PATH)/%.o)



# =============================================================
#       Building the create_initial_and_forcing_file_from_txt_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += create_initial_and_forcing_file_from_txt_program
basic_programs += create_initial_and_forcing_file_from_txt_program

# List of object files for create_initial_and_forcing_file_from_txt_program:
create_initial_and_forcing_file_from_txt_program_objects = \
        configuration_module.o \
        mask_module.o \
        oblimap_read_and_write_module.o \
        netcdf_module.o \
        restart_file_module.o \
        surface_height_module.o \
        initialization_module.o \
        robin_solution_module.o \
        create_initial_and_forcing_file_from_txt_program.o

# The executable (the target) depends on the object files:
create_initial_and_forcing_file_from_txt_program : $(create_initial_and_forcing_file_from_txt_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the create_initial_files_iterative_bed_reconstr_from_txt_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += create_initial_files_iterative_bed_reconstr_from_txt_program
basic_programs += create_initial_files_iterative_bed_reconstr_from_txt_program

# List of object files for create_initial_files_iterative_bed_reconstr_from_txt_program:
create_initial_files_iterative_bed_reconstr_from_txt_program_objects = \
        configuration_module.o \
        mask_module.o \
        oblimap_read_and_write_module.o \
        netcdf_module.o \
        restart_file_module.o \
        surface_height_module.o \
        initialization_module.o \
        gradient_module.o \
        topographic_surface_properties_module.o \
        iterative_glacier_bed_reconstruction_module.o \
        create_initial_files_iterative_bed_reconstr_from_txt_program.o

# The executable (the target) depends on the object files:
create_initial_files_iterative_bed_reconstr_from_txt_program : $(create_initial_files_iterative_bed_reconstr_from_txt_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the convert_gia_ascii_to_netcdf_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += convert_gia_ascii_to_netcdf_program
basic_programs += convert_gia_ascii_to_netcdf_program

# List of object files for convert_gia_ascii_to_netcdf_program:
convert_gia_ascii_to_netcdf_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        convert_gia_ascii_to_netcdf_module.o \
        convert_gia_ascii_to_netcdf_program.o

# The executable (the target) depends on the object files:
convert_gia_ascii_to_netcdf_program : $(convert_gia_ascii_to_netcdf_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the create_input_fields_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += create_input_fields_program
basic_programs += create_input_fields_program

# List of object files for create_input_fields_program:
create_input_fields_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        ice_surface_temperature_module.o \
        mask_module.o \
        netcdf_module.o \
        restart_file_module.o \
        robin_solution_module.o \
        smooth_module.o \
        create_input_fields_program.o

# The executable (the target) depends on the object files:
create_input_fields_program : $(create_input_fields_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the create_input_fields_program_bas
# =============================================================

# Adding this program to the list of all programs:
all_programs   += create_input_fields_program_bas
basic_programs += create_input_fields_program_bas

# Source files used for the create_input_fields_program_bas:
create_input_fields_program_bas_f90_sources = \
        configuration_module.f90 \
        oblimap_read_and_write_module.f90 \
        mask_module.f90 \
        netcdf_module.f90 \
        restart_file_module.f90 \
        surface_height_module.f90 \
        initialization_module.f90 \
        robin_solution_module.f90 \
        smooth_module.f90 \
        create_input_fields_program_bas.f90

# Creating the list of the object files:
create_input_fields_program_bas_f90_objects = $(create_input_fields_program_bas_f90_sources:%.f90=$(OBJ_PATH)/%.o)

# The executable (the target) depends on the object files:
create_input_fields_program_bas : $(create_input_fields_program_bas_f90_objects)



# =============================================================
#       Building the create_forcing_fields_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += create_forcing_fields_program
basic_programs += create_forcing_fields_program

# List of object files for create_forcing_fields_program:
create_forcing_fields_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        create_forcing_fields_program.o

# The executable (the target) depends on the object files:
create_forcing_fields_program : $(create_forcing_fields_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the create_forcing_fields_racmo2_antarctica_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += create_forcing_fields_racmo2_antarctica_program
basic_programs += create_forcing_fields_racmo2_antarctica_program

# List of object files for create_forcing_fields_racmo2_antarctica_program:
create_forcing_fields_racmo2_antarctica_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        create_forcing_fields_racmo2_antarctica_program.o

# The executable (the target) depends on the object files:
create_forcing_fields_racmo2_antarctica_program : $(create_forcing_fields_racmo2_antarctica_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the create_smb_gradients_fields_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += create_smb_gradients_fields_program
basic_programs += create_smb_gradients_fields_program

# List of object files for create_smb_gradients_fields_program:
create_smb_gradients_fields_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        statistics_module.o \
        create_smb_gradients_fields_program.o

# The executable (the target) depends on the object files:
create_smb_gradients_fields_program : $(create_smb_gradients_fields_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the generate_smb_patagonian_icefields_program.o
# =============================================================

# Adding this program to the list of all programs:
all_programs   += generate_smb_patagonian_icefields_program
basic_programs += generate_smb_patagonian_icefields_program

# List of object files for generate_smb_patagonian_icefields_program:
generate_smb_patagonian_icefields_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        generate_smb_patagonian_icefields_program.o

# The executable (the target) depends on the object files:
generate_smb_patagonian_icefields_program : $(generate_smb_patagonian_icefields_program_objects:%=$(OBJ_PATH)/%)



# ================================================================
#       Building the EBM_program
# ================================================================

# Adding this program to the list of all programs:
all_programs   += EBM_program
basic_programs += EBM_program

# List of object files for fortran_example_model_using_namelist_program:
EBM_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        EBM_program.o

# The executable (the target) depends on the object files:
EBM_program : $(EBM_program_objects:%=$(OBJ_PATH)/%)



# ================================================================
#       Building the EBM_for_gcm_program
# ================================================================

# Adding this program to the list of all programs:
all_programs   += EBM_for_gcm_program
basic_programs += EBM_for_gcm_program

# List of object files for fortran_example_model_using_namelist_program:
EBM_for_gcm_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        EBM_for_gcm_program.o

# The executable (the target) depends on the object files:
EBM_for_gcm_program : $(EBM_for_gcm_program_objects:%=$(OBJ_PATH)/%)




# =============================================================
#       Building the rebin_netcdf_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += rebin_netcdf_program
basic_programs += rebin_netcdf_program

# List of object files for rebin_netcdf_program:
rebin_netcdf_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        rebin_and_smooth_module.o \
        rebin_netcdf_program.o

# The executable (the target) depends on the object files:
rebin_netcdf_program : $(rebin_netcdf_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the modify_netcdf_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += modify_netcdf_program
basic_programs += modify_netcdf_program

# List of object files for modify_netcdf_program:
modify_netcdf_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        modify_netcdf_program.o

# The executable (the target) depends on the object files:
modify_netcdf_program : $(modify_netcdf_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the synthetic_initialization_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += synthetic_initialization_program
basic_programs += synthetic_initialization_program

# List of object files for synthetic_initialization_program:
synthetic_initialization_program_objects = \
        configuration_module.o \
        netcdf_module.o \
        restart_file_module.o \
        mask_module.o \
        surface_height_module.o \
        ice_surface_temperature_module.o \
        synthetic_initialization_program.o

# The executable (the target) depends on the object files:
synthetic_initialization_program : $(synthetic_initialization_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the convert_racmo2_netcdf_input_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += convert_racmo2_netcdf_input_program
basic_programs += convert_racmo2_netcdf_input_program

# List of object files for convert_racmo2_netcdf_input_program:
convert_racmo2_netcdf_input_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        convert_racmo2_netcdf_input_program.o

# The executable (the target) depends on the object files:
convert_racmo2_netcdf_input_program : $(convert_racmo2_netcdf_input_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the oblimap_gcm_to_im_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += oblimap_gcm_to_im_program
basic_programs += oblimap_gcm_to_im_program

# List of object files for oblimap_gcm_to_im_program:
oblimap_gcm_to_im_program_objects = \
        configuration_module.o \
        oblimap_write_cpu_measure_module.o \
        oblimap_read_and_write_module.o \
        oblimap_projection_module.o \
        oblimap_scan_contributions_module.o \
        oblimap_mapping_module.o \
        oblimap_gcm_to_im_mapping_module.o \
        oblimap_gcm_to_im_program.o

# The executable (the target) depends on the object files:
oblimap_gcm_to_im_program : $(oblimap_gcm_to_im_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the oblimap_im_to_gcm_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += oblimap_im_to_gcm_program
basic_programs += oblimap_im_to_gcm_program

# List of object files for oblimap_im_to_gcm_program:
oblimap_im_to_gcm_program_objects = \
        configuration_module.o \
        oblimap_write_cpu_measure_module.o \
        oblimap_read_and_write_module.o \
        oblimap_projection_module.o \
        oblimap_scan_contributions_module.o \
        oblimap_mapping_module.o \
        oblimap_post_processing_module.o \
        oblimap_im_to_gcm_mapping_module.o \
        oblimap_im_to_gcm_program.o

# The executable (the target) depends on the object files:
oblimap_im_to_gcm_program : $(oblimap_im_to_gcm_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the oblimap_par_gcm_to_im_program
# =============================================================

# Adding this program to the list of all programs:
#all_programs   += oblimap_par_gcm_to_im_program
#basic_programs += oblimap_par_gcm_to_im_program

# List of object files for oblimap_par_gcm_to_im_program:
oblimap_par_gcm_to_im_program_objects = \
        configuration_module.o \
        oblimap_write_cpu_measure_module.o \
        oblimap_read_and_write_module.o \
        oblimap_projection_module.o \
        oblimap_par_scan_contributions_module.o \
        oblimap_mapping_module.o \
        oblimap_gcm_to_im_mapping_module.o \
        oblimap_par_gcm_to_im_program.o

# The executable (the target) depends on the object files:
oblimap_par_gcm_to_im_program : $(oblimap_par_gcm_to_im_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the oblimap_par_im_to_gcm_program
# =============================================================

# Adding this program to the list of all programs:
#all_programs   += oblimap_par_im_to_gcm_program
#basic_programs += oblimap_par_im_to_gcm_program

# List of object files for oblimap_par_im_to_gcm_program:
oblimap_par_im_to_gcm_program_objects = \
        configuration_module.o \
        oblimap_write_cpu_measure_module.o \
        oblimap_read_and_write_module.o \
        oblimap_projection_module.o \
        oblimap_par_scan_contributions_module.o \
        oblimap_mapping_module.o \
        oblimap_post_processing_module.o \
        oblimap_im_to_gcm_mapping_module.o \
        oblimap_par_im_to_gcm_program.o

# The executable (the target) depends on the object files:
oblimap_par_im_to_gcm_program : $(oblimap_par_im_to_gcm_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the oblimap_im_to_flow_line_model_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += oblimap_im_to_flow_line_model_program
basic_programs += oblimap_im_to_flow_line_model_program

# List of object files for oblimap_im_to_flow_line_model_program:
oblimap_im_to_flow_line_model_program_objects = \
        configuration_module.o \
        oblimap_read_flow_line_profile_module.o \
        oblimap_read_and_write_module.o \
        oblimap_projection_module.o \
        oblimap_scan_contributions_module.o \
        oblimap_mapping_module.o \
        oblimap_im_to_flow_line_model_mapping_module.o \
        oblimap_im_to_flow_line_model_program.o

# The executable (the target) depends on the object files:
oblimap_im_to_flow_line_model_program : $(oblimap_im_to_flow_line_model_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the oblimap_flow_line_model_to_im_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += oblimap_flow_line_model_to_im_program
basic_programs += oblimap_flow_line_model_to_im_program

# List of object files for oblimap_flow_line_model_to_im_program:
oblimap_flow_line_model_to_im_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        oblimap_projection_module.o \
        oblimap_scan_contributions_module.o \
        oblimap_mapping_module.o \
        oblimap_flow_line_model_to_im_mapping_module.o \
        oblimap_flow_line_model_to_im_program.o

# The executable (the target) depends on the object files:
oblimap_flow_line_model_to_im_program : $(oblimap_flow_line_model_to_im_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the oblimap_determining_flow_line_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += oblimap_determining_flow_line_program
basic_programs += oblimap_determining_flow_line_program

# List of object files for oblimap_determining_flow_line_program:
oblimap_determining_flow_line_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        oblimap_projection_module.o \
        oblimap_scan_contributions_module.o \
        oblimap_determining_flow_line_program.o

# The executable (the target) depends on the object files:
oblimap_determining_flow_line_program : $(oblimap_determining_flow_line_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the oblimap_convert_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += oblimap_convert_program
basic_programs += oblimap_convert_program

# List of object files for oblimap_convert_program:
oblimap_convert_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        oblimap_projection_module.o \
        oblimap_scan_contributions_module.o \
        oblimap_convert_module.o \
        oblimap_convert_program.o

# The executable (the target) depends on the object files:
oblimap_convert_program : $(oblimap_convert_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the create_latitude_longitude_at_im_grid_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += create_latitude_longitude_at_im_grid_program
basic_programs += create_latitude_longitude_at_im_grid_program

# List of object files for create_latitude_longitude_at_im_grid_program:
create_latitude_longitude_at_im_grid_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        oblimap_projection_module.o \
        oblimap_scan_contributions_module.o \
        create_latitude_longitude_at_im_grid_module.o \
        create_latitude_longitude_at_im_grid_program.o

# The executable (the target) depends on the object files:
create_latitude_longitude_at_im_grid_program : $(create_latitude_longitude_at_im_grid_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the extrapolate_at_invalid_value_points_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += extrapolate_at_invalid_value_points_program
basic_programs += extrapolate_at_invalid_value_points_program

# List of object files for extrapolate_at_invalid_value_points_program:
extrapolate_at_invalid_value_points_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        extrapolate_field_on_mask_edge_module.o \
        extrapolate_ocean_temperature_module.o \
        extrapolate_at_invalid_value_points_program.o

# The executable (the target) depends on the object files:
extrapolate_at_invalid_value_points_program : $(extrapolate_at_invalid_value_points_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the examine_racmo_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += examine_racmo_program
basic_programs += examine_racmo_program

# List of object files for examine_racmo_program:
examine_racmo_program_objects = \
        configuration_module.o \
        oblimap_read_and_write_module.o \
        netcdf_module.o \
        gradient_module.o \
        smooth_module.o \
        massbalance_module.o \
        examine_racmo_program.o

# The executable (the target) depends on the object files:
examine_racmo_program : $(examine_racmo_program_objects:%=$(OBJ_PATH)/%)



# =============================================================
#       Building the help_variables_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += help_variables_program
basic_programs += help_variables_program

# List of object files for help_variables_program:
help_variables_program_objects = \
        configuration_module.o \
        vertical_average_module.o \
        temperature_parameterizations.o \
        robin_solution_module.o \
        mask_module.o \
        gradient_module.o \
        zeta_derivatives_module.o \
        netcdf_module.o \
        restart_file_module.o \
        oblimap_read_and_write_module.o \
        read_forcing_fields_module.o \
        mean_climate_forcing_module.o \
        massbalance_module.o \
        tridiagonal_solve_module.o \
        ice_thickness_module.o \
        thermodynamics_module.o \
        velocity_module.o \
        help_variables_program.o

# The executable (the target) depends on the object files:
help_variables_program : $(help_variables_program_objects:%=$(OBJ_PATH)/%) $(f77_objects)



# =============================================================
#       Building the siadyn_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += siadyn_program
basic_programs += siadyn_program

# List of object files for siadyn_program:
siadyn_program_objects = \
        configuration_module.o \
        vertical_average_module.o \
        mask_module.o \
        various_time_step_module.o \
        gradient_module.o \
        netcdf_module.o \
        restart_file_module.o \
        oblimap_read_and_write_module.o \
        read_forcing_fields_module.o \
        time_recording_module.o \
        cpu_measure_module.o \
        surface_height_module.o \
        ice_surface_temperature_module.o \
        mean_climate_forcing_module.o \
        massbalance_module.o \
        ice_thickness_module.o \
        bedrock_module.o \
        check_timestep_size_module.o \
        siadyn_model_module.o \
        siadyn_program.o

# The executable (the target) depends on the object files:
siadyn_program : $(siadyn_program_objects:%=$(OBJ_PATH)/%) $(f77_objects)



# =============================================================
#       Building the debris_siadyn_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += debris_siadyn_program
basic_programs += debris_siadyn_program

# List of object files for debris_siadyn_program:
debris_siadyn_program_objects = \
        configuration_module.o \
        vertical_average_module.o \
        mask_module.o \
        various_time_step_module.o \
        gradient_module.o \
        netcdf_module.o \
        restart_file_module.o \
        oblimap_read_and_write_module.o \
        read_forcing_fields_module.o \
        time_recording_module.o \
        cpu_measure_module.o \
        surface_height_module.o \
        ice_surface_temperature_module.o \
        mean_climate_forcing_module.o \
        massbalance_module.o \
        topographic_surface_properties_module.o \
        altitude_sorting_module.o \
        glacier_smb_leclercq_module.o \
        read_forcing_fields_module.o \
        iterative_glacier_bed_reconstruction_module.o \
        ice_thickness_module.o \
        bedrock_module.o \
        check_timestep_size_module.o \
        debris_siadyn_model_module.o \
        debris_siadyn_program.o

# The executable (the target) depends on the object files:
debris_siadyn_program : $(debris_siadyn_program_objects:%=$(OBJ_PATH)/%) $(f77_objects)



# =============================================================
#       Building the imau_ice_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += imau_ice_program
basic_programs += imau_ice_program

# List of object files for imau_ice_program:
imau_ice_program_objects = \
        configuration_module.o \
        vertical_average_module.o \
        temperature_parameterizations.o \
        robin_solution_module.o \
        mask_module.o \
        various_time_step_module.o \
        gradient_module.o \
        zeta_derivatives_module.o\
        netcdf_module.o \
        restart_file_module.o \
        oblimap_read_and_write_module.o \
        read_forcing_fields_module.o \
        time_recording_module.o \
        cpu_measure_module.o \
        shelf_module.o \
        surface_height_module.o \
        ice_surface_temperature_module.o \
        mean_climate_forcing_module.o \
        insolation_forcing_module.o \
        massbalance_module.o \
        tridiagonal_solve_module.o \
        ice_thickness_module.o \
        thermodynamics_module.o \
        velocity_module.o \
        concentrations_module.o \
        bedrock_module.o \
        check_timestep_size_module.o \
        continental_area_masking_module.o \
        imau_ice_model_module.o \
        imau_ice_program.o

# The executable (the target) depends on the object files:
imau_ice_program : $(imau_ice_program_objects:%=$(OBJ_PATH)/%) $(f77_objects)

# =============================================================
#       Building the imau_ice_stag_program
# =============================================================

# Adding this program to the list of all programs:
#all_programs   += imau_ice_stag_program
#basic_programs += imau_ice_stag_program

# List of object files for imau_ice_stag_program:
imau_ice_stag_program_objects = \
        configuration_module.o \
        vertical_average_module.o \
        temperature_parameterizations.o \
        robin_solution_module.o \
        mask_module.o \
        various_time_step_module.o \
        gradient_module.o \
        zeta_derivatives_module.o\
        netcdf_module.o \
        restart_file_module.o \
        oblimap_read_and_write_module.o \
        read_forcing_fields_module.o \
        time_recording_module.o \
        cpu_measure_module.o \
        shelf_module.o \
        surface_height_module.o \
        ice_surface_temperature_module.o \
        mean_climate_forcing_module.o \
        insolation_forcing_module.o \
        massbalance_module.o \
        tridiagonal_solve_module.o \
        ice_thickness_module.o \
        thermodynamics_module.o \
        velocity_module.o \
        concentrations_module.o \
        bedrock_module.o \
        check_timestep_size_module.o \
        continental_area_masking_module.o \
	stag_module.o \
        imau_ice_stag_model_module.o \
        imau_ice_stag_program.o

# The executable (the target) depends on the object files:
imau_ice_stag_program : $(imau_ice_stag_program_objects:%=$(OBJ_PATH)/%) $(f77_objects)



# =============================================================
#       Building the imau_ice_staggered_program
# =============================================================

# Adding this program to the list of all programs:
#all_programs   += imau_ice_staggered_program
#basic_programs += imau_ice_staggered_program

# List of object files for imau_ice_staggered_program:
imau_ice_staggered_program_objects = \
        configuration_module.o \
        vertical_average_module.o \
        temperature_parameterizations.o \
        robin_solution_module.o \
        mask_module.o \
        various_time_step_module.o \
        gradient_module.o \
        zeta_derivatives_module.o\
        netcdf_module.o \
        restart_file_module.o \
        oblimap_read_and_write_module.o \
        read_forcing_fields_module.o \
        time_recording_module.o \
        cpu_measure_module.o \
        shelf_module.o \
        surface_height_module.o \
        ice_surface_temperature_module.o \
        mean_climate_forcing_module.o \
        insolation_forcing_module.o \
        massbalance_module.o \
        tridiagonal_solve_module.o \
        ice_thickness_module.o \
        thermodynamics_module.o \
        velocity_module.o \
        concentrations_module.o \
        bedrock_module.o \
        check_timestep_size_module.o \
        continental_area_masking_module.o \
	staggered_module.o \
        imau_ice_staggered_model_module.o \
        imau_ice_staggered_program.o

# The executable (the target) depends on the object files:
imau_ice_staggered_program : $(imau_ice_staggered_program_objects:%=$(OBJ_PATH)/%) $(f77_objects)

# =============================================================
#       Building the imau_ice_ccfm_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += imau_ice_ccfm_program
basic_programs += imau_ice_ccfm_program

# List of object files for imau_ice_ccfm_program:
imau_ice_ccfm_program_objects = \
        global_calving_model_module_ccfm.o \
        functions_calving_model_module.o \
        initialization_calving_model_module.o \
        basal_melt_calving_model_module.o \
        floating_calving_model_module.o \
        grounding_calving_model_module.o \
        remesh_calving_model_module.o \
        stretching_rate_calving_model_module.o \
        velocity_calving_model_module.o \
        calving_criteria_calving_model_module.o \
        invoke_calving_1d_calving_model_module.o \
        write_output_calving_model_module.o \
        make_time_step_calving_model_module.o \
        configuration_module.o \
        vertical_average_module.o \
        temperature_parameterizations.o \
        robin_solution_module.o \
        mask_module.o \
        various_time_step_module.o \
        gradient_module.o \
        zeta_derivatives_module.o\
        netcdf_module.o \
        restart_file_module.o \
        oblimap_read_and_write_module.o \
        read_forcing_fields_module.o \
        time_recording_module.o \
        cpu_measure_module.o \
        shelf_module.o \
        surface_height_module.o \
        ice_surface_temperature_module.o \
        mean_climate_forcing_module.o \
        massbalance_module.o \
        tridiagonal_solve_module.o \
        ice_thickness_module.o \
        thermodynamics_module.o \
        velocity_module.o \
        concentrations_module.o \
        bedrock_module.o \
        check_timestep_size_module.o \
        continental_area_masking_module.o \
        oblimap_projection_module.o \
        oblimap_scan_contributions_module.o \
        oblimap_mapping_module.o \
        oblimap_read_and_write_module.o \
        oblimap_embedded_flow_line_mapping_module.o \
        imau_ice_ccfm_model_module.o \
        imau_ice_ccfm_program.o

# The executable (the target) depends on the object files:
imau_ice_ccfm_program : $(imau_ice_ccfm_program_objects:%=$(OBJ_PATH)/%) $(f77_objects)



# =============================================================
#       Building the imau_ice_mumps_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += imau_ice_mumps_program

# List of object files for imau_ice_mumps_program:
imau_ice_mumps_program_objects = \
        configuration_module.o \
        vertical_average_module.o \
        temperature_parameterizations.o \
        robin_solution_module.o \
        mask_module.o \
        various_time_step_module.o \
        gradient_module.o \
        zeta_derivatives_module.o\
        netcdf_module.o \
        restart_file_module.o \
        oblimap_read_and_write_module.o \
        read_forcing_fields_module.o \
        time_recording_module.o \
        cpu_measure_module.o \
        mumps_module.o \
        shelf_velocity_mumps_module.o \
        shelf_module.o \
        surface_height_module.o \
        ice_surface_temperature_module.o \
        mean_climate_forcing_module.o \
        massbalance_module.o \
        tridiagonal_solve_module.o \
        ice_thickness_module.o \
        thermodynamics_module.o \
        velocity_module.o \
        concentrations_module.o \
        bedrock_module.o \
        check_timestep_size_module.o \
        continental_area_masking_module.o \
        imau_ice_mumps_model_module.o \
        imau_ice_mumps_program.o

# The executable (the target) depends on the object files:
imau_ice_mumps_program : $(imau_ice_mumps_program_objects:%=$(OBJ_PATH)/%) $(f77_objects)



# =============================================================
#       Building the imau_ice_ice_stream_by_ssa_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += imau_ice_ice_stream_by_ssa_program
basic_programs += imau_ice_ice_stream_by_ssa_program

# List of object files for imau_ice_ice_stream_by_ssa_program:
imau_ice_ice_stream_by_ssa_program_objects = \
        configuration_module.o \
        vertical_average_module.o \
        temperature_parameterizations.o \
        robin_solution_module.o \
        mask_module.o \
        various_time_step_module.o \
        gradient_module.o \
        zeta_derivatives_module.o\
        netcdf_module.o \
        restart_file_module.o \
        oblimap_read_and_write_module.o \
        read_forcing_fields_module.o \
        time_recording_module.o \
        cpu_measure_module.o \
        shelf_module.o \
        ice_stream_by_ssa_module.o \
        surface_height_module.o \
        ice_surface_temperature_module.o \
        mean_climate_forcing_module.o \
        insolation_forcing_module.o \
        massbalance_module.o \
        tridiagonal_solve_module.o \
        ice_thickness_module.o \
        thermodynamics_module.o \
        velocity_module.o \
        concentrations_module.o \
        bedrock_module.o \
        check_timestep_size_module.o \
        continental_area_masking_module.o \
        imau_ice_ice_stream_by_ssa_model_module.o \
        imau_ice_ice_stream_by_ssa_program.o

# The executable (the target) depends on the object files:
imau_ice_ice_stream_by_ssa_program : $(imau_ice_ice_stream_by_ssa_program_objects:%=$(OBJ_PATH)/%) $(f77_objects)



# =============================================================
#       Building the imau_ice_itm_ice_stream_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += imau_ice_itm_ice_stream_program
basic_programs += imau_ice_itm_ice_stream_program

# List of object files for imau_ice_itm_ice_stream_program:
imau_ice_itm_ice_stream_program_objects = \
        configuration_module.o \
        vertical_average_module.o \
        temperature_parameterizations.o \
        robin_solution_module.o \
        mask_module.o \
        various_time_step_module.o \
        gradient_module.o \
        zeta_derivatives_module.o\
        netcdf_module.o \
        restart_file_module.o \
        oblimap_read_and_write_module.o \
        read_forcing_fields_module.o \
        time_recording_module.o \
        cpu_measure_module.o \
        shelf_module.o \
        ice_stream_by_ssa_module.o \
        surface_height_module.o \
        ice_surface_temperature_module.o \
        mean_climate_forcing_module.o \
        insolation_forcing_module.o \
        massbalance_module.o \
        submarine_ice_shelf_melt_module.o \
        tridiagonal_solve_module.o \
        ice_thickness_module.o \
        ice_thickness_based_on_D2D_fluxes_module.o \
        thermodynamics_module.o \
        velocity_module.o \
        concentrations_module.o \
        bedrock_module.o \
        check_timestep_size_module.o \
        continental_area_masking_module.o \
        imau_ice_itm_ice_stream_model_module.o \
        imau_ice_itm_ice_stream_program.o

# The executable (the target) depends on the object files:
imau_ice_itm_ice_stream_program : $(imau_ice_itm_ice_stream_program_objects:%=$(OBJ_PATH)/%) $(f77_objects)



# =============================================================
#       Building the anice_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += anice_program

# List of object files for anice_program:
anice_program_objects = \
        configuration_module.o \
        vertical_average_module.o \
        temperature_parameterizations.o \
        robin_solution_module.o \
        mask_module.o \
        various_time_step_module.o \
        gradient_module.o \
        zeta_derivatives_module.o\
        netcdf_module.o \
        restart_file_module.o \
        oblimap_read_and_write_module.o \
        read_forcing_fields_module.o \
        time_recording_module.o \
        cpu_measure_module.o \
        mumps_module.o \
        shelf_velocity_mumps_module.o \
        shelf_module.o \
        surface_height_module.o \
        ice_surface_temperature_module.o \
        mean_climate_forcing_module.o \
        massbalance_module.o \
        tridiagonal_solve_module.o \
        ice_thickness_module.o \
        ice_thickness_based_on_D2D_fluxes_module.o \
        thermodynamics_module.o \
        velocity_module.o \
        concentrations_module.o \
        bedrock_module.o \
        check_timestep_size_module.o \
        anice_program.o

# The executable (the target) depends on the object files:
anice_program : $(anice_program_objects:%=$(OBJ_PATH)/%) $(f77_objects)



# =============================================================
#       Building the icedyn_program
# =============================================================

# Adding this program to the list of all programs:
all_programs   += icedyn_program

# List of object files for icedyn_program:
icedyn_program_objects = \
        configuration_module.o \
        vertical_average_module.o \
        temperature_parameterizations.o \
        robin_solution_module.o \
        mask_module.o \
        various_time_step_module.o \
        gradient_module.o \
        zeta_derivatives_module.o\
        netcdf_module.o \
        restart_file_module.o \
        time_recording_module.o \
        cpu_measure_module.o \
        mumps_module.o \
        velocity_full_stokes_module.o \
        horizontal_bottom_sliding_module.o \
        surface_height_module.o \
        ice_surface_temperature_module.o \
        mean_climate_forcing_module.o \
        massbalance_module.o \
        tridiagonal_solve_module.o \
        ice_thickness_module.o \
        thermodynamics_module.o \
        concentrations_module.o \
        bedrock_module.o \
        check_timestep_size_module.o \
        icedyn_model_module.o \
        icedyn_program.o

# The executable (the target) depends on the object files:
icedyn_program : $(icedyn_program_objects:%=$(OBJ_PATH)/%) $(f77_objects)



# =============================================================
#       Cleaning up everything
# =============================================================

.PHONY : clean

clean :
	rm -f $(all_programs) $(OBJ_PATH)/*.o $(MOD_PATH)/*.mod *.mod *.lst



# =============================================================
#       Building the basic programs
# =============================================================

.PHONY : basic

basic : $(basic_programs)



# =============================================================
#       Building everything
# =============================================================

.PHONY : all

all : $(all_programs)
