#-----------------------------------------------------------------------
# Makefile for RPC programs and libraries
# Fortran90 only
# P. Robert, LPP, 2011 - Rev. P.R. ScientiDev, Feb 2021
#-----------------------------------------------------------------------

# ====================
# Choice of compiler
# ====================

FC = gfortran

#Gfortran creates a file name.mod for each module name.
#This confuses the gnu make, which thinks that .mod files are Modula2 source code files.
#You must override this built-in rule by adding the following line somewhere in your Makefile.

%.o : %.mod

# ======================
# optimize or debug mode
# ======================

#MODE=O
 MODE=D

# ================================
# Choice of compilation options
# ================================


# gfortran linux and Windows/MinGW compiler

ifeq ($(FC),gfortran)
    ifeq ($(MODE),D)
	FCOMP = -c -g  -static -Wall -fbacktrace -finit-local-zero -fstack-arrays -frepack-arrays -Jmod
	FLINK =    -g  -static -Wall -fbacktrace -finit-local-zero -fstack-arrays -frepack-arrays -Jmod
    else
	FCOMP = -c -O2 -static -Wall -fbacktrace -finit-local-zero -ffpe-trap=invalid,zero,overflow,underflow,denormal -fstack-arrays -frepack-arrays -Jmod
    FLINK =    -O2 -static -Wall -fbacktrace -finit-local-zero -ffpe-trap=invalid,zero,overflow,underflow,denormal -fstack-arrays -frepack-arrays -Jmod
    endif
endif

# ==========================
# Directories definition
# ==========================

SRC_DIR = src/
OBJ_DIR = obj/
BIN_DIR = bin/
MOD_DIR = mod/

# =====================
# List of executables
# =====================

EXEC =  \
	$(BIN_DIR)cef_to_rff_cwf_CLUSTA.exe \
	$(BIN_DIR)cef_to_rff_dwf_CLUSTA.exe \
	$(BIN_DIR)CLUSTA_search_strong_DC.exe   \
	$(BIN_DIR)CLUSTA_spectro_L2_to_cef.exe \
	$(BIN_DIR)vectime_calibration_CLUSTA.exe \
	$(BIN_DIR)vectime_L1_to_spectro_L2_CLUSTA.exe   \
	$(BIN_DIR)vectime_L1_to_spectro_L2_GEOULF.exe   \
	$(BIN_DIR)vectime_L1_to_spectro_L2_GEOGRD.exe   \
	$(BIN_DIR)CLUSTA_vectime_L1_to_cef.exe  \
	$(BIN_DIR)vectime_to_mfa_CLUSTA.exe \
	$(BIN_DIR)vectime_to_mfa.exe \
	$(BIN_DIR)vectime_to_mva.exe \
	$(BIN_DIR)CLUSTA_vectime_L2_to_cef.exe \
	$(BIN_DIR)CLUSTA_w_vectime_cef_header.exe   \
	$(BIN_DIR)CLUSTA_w_cwf_cef_header.exe    \
	$(BIN_DIR)CLUSTA_w_cal_caveat_header.exe \
	$(BIN_DIR)cef_to_rff_CLUPOS.exe \
	$(BIN_DIR)get_data_CLUGEOM.exe \
	$(BIN_DIR)cef_to_rff_CLUFGM.exe \
	$(BIN_DIR)cef_gse_to_sr2_CLUFGM.exe \
	$(BIN_DIR)CLUEFW_check_status.exe   \
	$(BIN_DIR)vectime_calibration_GEOULF.exe \
	$(BIN_DIR)vectime_calibration_GEOGRD.exe \
	$(BIN_DIR)vectime_to_mfav_GEOULF.exe \
	$(BIN_DIR)vectime_to_mfav_GEOGRD.exe \
	$(BIN_DIR)vectime_vdh_to_srv_GEOMAG.exe \
	$(BIN_DIR)vectime_vdh_to_xyz_GEOMAG.exe \
	$(BIN_DIR)add_DxDy_to_BxBy.exe  \
	$(BIN_DIR)clean_rff.exe \
	$(BIN_DIR)current_tube.exe\
	$(BIN_DIR)check_rff.exe \
	$(BIN_DIR)diff_rff.exe \
	$(BIN_DIR)dir_size_pretty_tree.exe \
	$(BIN_DIR)dir_pretty_tree.exe   \
	$(BIN_DIR)dir_properties_pretty_tree.exe \
	$(BIN_DIR)reduce_time_rff.exe   \
	$(BIN_DIR)reduce_time_vectime.exe   \
	$(BIN_DIR)change_coordinate_system.exe \
	$(BIN_DIR)vectime_gse_to_isr2.exe   \
	$(BIN_DIR)spectro_to_polar.exe \
	$(BIN_DIR)spectro_xyz_to_lrz.exe \
	$(BIN_DIR)vectime_to_spectro.exe \
	$(BIN_DIR)alitime_4_vectime.exe \
	$(BIN_DIR)compute_curl_div_4sat.exe   \
	$(BIN_DIR)compute_sat_trajectory.exe \
	$(BIN_DIR)compute_sat_orbit_param.exe   \
	$(BIN_DIR)create_simulated_data.exe \
	$(BIN_DIR)test_kepler_lib.exe   \
	$(BIN_DIR)waveform_to_vectime.exe   \
	$(BIN_DIR)flat_to_rff.exe   \
	$(BIN_DIR)visu_vectime.exe\
	$(BIN_DIR)visu_vectime_4sat.exe\
	$(BIN_DIR)visu_vectime_3D.exe\
	$(BIN_DIR)visu_vectime_3D_4sat.exe\
	$(BIN_DIR)visu_2_vectime.exe\
	$(BIN_DIR)visu_2_vectime_3D.exe\
	$(BIN_DIR)visu_spectro.exe\
	$(BIN_DIR)visu_spectro_4Bz.exe\
	$(BIN_DIR)visu_CLUGEOM.exe\
	$(BIN_DIR)visu_polar.exe\
	$(BIN_DIR)visu_ave_spectrum.exe\
	$(BIN_DIR)visu_curl_div_4sat.exe\
    $(BIN_DIR)co_IGRF_field.exe

# ========
# make all
# ========

# Create all exe files in bin directory.
# The library lib_rw_rff.o is created first because she use modules used by the most part of all programs.

all : $(OBJ_DIR)lib_rw_rff.o $(OBJ_DIR)lib_rw_cef.o $(EXEC)
	@echo mv *.mod $(MOD_DIR)
	@echo   " "
	@echo "-> RPC compilation done."
	@echo "-> Read  lines above to check success."

# =============
# check version
# =============

	@echo
	@echo "Current  RPC_version=   `./bash/RPC_version`    "
	@echo "f90:" `grep  "RPC_version=" ./src/lib_rw_rff.f90`
	@echo


# ===================================================
# Definition of all dependances and exe creation
# ===================================================

# Object files are in $(OBJ_DIR),
# Executable files are put in $(BIN_DIR)
#
# One define here all target (.exe) dependances list
# Then the compiler do the link ($^) and create the target ($@)

# _______________________________
$(BIN_DIR)check_rff.exe :                   $(OBJ_DIR)check_rff.o \
                                            $(OBJ_DIR)lib_rw_rff.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________  
$(BIN_DIR)CLUEFW_check_status.exe :         $(OBJ_DIR)CLUEFW_check_status.o \
                                            $(OBJ_DIR)lib_rw_rff.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)clean_rff.exe :                   $(OBJ_DIR)clean_rff.o \
                                            $(OBJ_DIR)lib_rw_rff.o   \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)current_tube.exe:                 $(OBJ_DIR)current_tube.o \
                                            $(OBJ_DIR)lib_rw_rff.o   \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)diff_rff.exe :                    $(OBJ_DIR)diff_rff.o    \
                                            $(OBJ_DIR)lib_rw_rff.o   \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)dir_size_pretty_tree.exe :        $(OBJ_DIR)dir_size_pretty_tree.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)dir_pretty_tree.exe :             $(OBJ_DIR)dir_pretty_tree.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)dir_properties_pretty_tree.exe :  $(OBJ_DIR)dir_properties_pretty_tree.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)cef_to_rff_dwf_CLUSTA.exe :       $(OBJ_DIR)cef_to_rff_dwf_CLUSTA.o \
                                            $(OBJ_DIR)lib_rw_rff.o   \
                                            $(OBJ_DIR)lib_rw_cef.o   \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)cef_to_rff_CLUFGM.exe :           $(OBJ_DIR)cef_to_rff_CLUFGM.o   \
                                            $(OBJ_DIR)lib_rw_rff.o   \
                                            $(OBJ_DIR)lib_rw_cef.o   \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)cef_gse_to_sr2_CLUFGM.exe :       $(OBJ_DIR)cef_gse_to_sr2_CLUFGM.o \
                                            $(OBJ_DIR)lib_rw_cef.o   \
                                            $(OBJ_DIR)lib_rw_rff.o   \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)cef_to_rff_CLUPOS.exe :           $(OBJ_DIR)cef_to_rff_CLUPOS.o   \
                                            $(OBJ_DIR)lib_rw_rff.o   \
                                            $(OBJ_DIR)lib_rw_cef.o   \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)get_data_CLUGEOM.exe :            $(OBJ_DIR)get_data_CLUGEOM.o \
                                            $(OBJ_DIR)lib_rw_rff.o  \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_tools_CLUSTER.o   \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)cef_to_rff_cwf_CLUSTA.exe :       $(OBJ_DIR)cef_to_rff_cwf_CLUSTA.o \
                                            $(OBJ_DIR)lib_rw_rff.o   \
                                            $(OBJ_DIR)lib_rw_cef.o   \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)waveform_to_vectime.exe :         $(OBJ_DIR)waveform_to_vectime.o \
                                            $(OBJ_DIR)lib_rw_rff.o   \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)flat_to_rff.exe :                 $(OBJ_DIR)flat_to_rff.o \
                                            $(OBJ_DIR)lib_rw_rff.o   \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)CLUSTA_w_vectime_cef_header.exe : $(OBJ_DIR)CLUSTA_w_vectime_cef_header.o \
                                            $(OBJ_DIR)lib_rw_cef.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)CLUSTA_w_cwf_cef_header.exe :     $(OBJ_DIR)CLUSTA_w_cwf_cef_header.o \
                                            $(OBJ_DIR)lib_rw_cef.o  \
                                            $(OBJ_DIR)lib_rw_rff.o  \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)CLUSTA_w_cal_caveat_header.exe :  $(OBJ_DIR)CLUSTA_w_cal_caveat_header.o \
                                            $(OBJ_DIR)lib_rw_cef.o  \
                                            $(OBJ_DIR)lib_rw_rff.o  \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)vectime_calibration_CLUSTA.exe :  $(OBJ_DIR)vectime_calibration_CLUSTA.o \
				 	    $(OBJ_DIR)lib_rw_rff.o  \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_gainant.o \
                                            $(OBJ_DIR)lib_deconvo.o \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)vectime_calibration_GEOULF.exe :  $(OBJ_DIR)vectime_calibration_GEOULF.o \
                                            $(OBJ_DIR)lib_rw_rff.o  \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_deconvo.o \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)vectime_calibration_GEOGRD.exe :  $(OBJ_DIR)vectime_calibration_GEOGRD.o \
                                            $(OBJ_DIR)lib_rw_rff.o  \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_deconvo.o \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)vectime_to_mfav_GEOULF.exe :      $(OBJ_DIR)vectime_to_mfav_GEOULF.o \
                                            $(OBJ_DIR)lib_rw_rff.o  \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_alitime.o \
                                            $(OBJ_DIR)lib_deconvo.o \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)vectime_to_mfav_GEOGRD.exe :      $(OBJ_DIR)vectime_to_mfav_GEOGRD.o \
                                            $(OBJ_DIR)lib_rw_rff.o  \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_alitime.o \
                                            $(OBJ_DIR)lib_deconvo.o \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)vectime_L1_to_spectro_L2_CLUSTA.exe : $(OBJ_DIR)vectime_L1_to_spectro_L2_CLUSTA.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_gainant.o \
                                            $(OBJ_DIR)lib_deconvo.o \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)vectime_L1_to_spectro_L2_GEOULF.exe : $(OBJ_DIR)vectime_L1_to_spectro_L2_GEOULF.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_deconvo.o \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)vectime_L1_to_spectro_L2_GEOGRD.exe : $(OBJ_DIR)vectime_L1_to_spectro_L2_GEOGRD.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_deconvo.o \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)vectime_to_mfa_CLUSTA.exe :       $(OBJ_DIR)vectime_to_mfa_CLUSTA.o   \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_alitime.o \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)vectime_to_mfa.exe :              $(OBJ_DIR)vectime_to_mfa.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_alitime.o \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)vectime_to_mva.exe :              $(OBJ_DIR)vectime_to_mva.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_alitime.o \
                                            $(OBJ_DIR)lib_deconvo.o \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)vectime_to_spectro.exe :          $(OBJ_DIR)vectime_to_spectro.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_deconvo.o \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)alitime_4_vectime.exe :           $(OBJ_DIR)alitime_4_vectime.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_alitime.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)compute_curl_div_4sat.exe :       $(OBJ_DIR)compute_curl_div_4sat.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_tools_CLUSTER.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o \
                                            $(OBJ_DIR)lib_alitime.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)compute_sat_trajectory.exe :      $(OBJ_DIR)compute_sat_trajectory.o  \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_kepler.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)compute_sat_orbit_param.exe :     $(OBJ_DIR)compute_sat_orbit_param.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_kepler.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)create_simulated_data.exe :       $(OBJ_DIR)create_simulated_data.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_kepler.o \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)lib_signal.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)test_kepler_lib.exe :             $(OBJ_DIR)test_kepler_lib.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_kepler.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)CLUSTA_vectime_L1_to_cef.exe :    $(OBJ_DIR)CLUSTA_vectime_L1_to_cef.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_rw_cef.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)CLUSTA_vectime_L2_to_cef.exe :    $(OBJ_DIR)CLUSTA_vectime_L2_to_cef.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_rw_cef.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)reduce_time_rff.exe :             $(OBJ_DIR)reduce_time_rff.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)reduce_time_vectime.exe :         $(OBJ_DIR)reduce_time_vectime.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)change_coordinate_system.exe :    $(OBJ_DIR)change_coordinate_system.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________  
$(BIN_DIR)vectime_gse_to_isr2.exe :         $(OBJ_DIR)vectime_gse_to_isr2.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)CLUSTA_search_strong_DC.exe :     $(OBJ_DIR)CLUSTA_search_strong_DC.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)CLUSTA_spectro_L2_to_cef.exe :    $(OBJ_DIR)CLUSTA_spectro_L2_to_cef.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_rw_cef.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)spectro_to_polar.exe :            $(OBJ_DIR)spectro_to_polar.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)vectime_vdh_to_srv_GEOMAG.exe :   $(OBJ_DIR)vectime_vdh_to_srv_GEOMAG.o   \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)lib_utility.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)vectime_vdh_to_xyz_GEOMAG.exe :   $(OBJ_DIR)vectime_vdh_to_xyz_GEOMAG.o   \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rocotlib_V3p2.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)add_DxDy_to_BxBy.exe :            $(OBJ_DIR)add_DxDy_to_BxBy.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)spectro_xyz_to_lrz.exe :          $(OBJ_DIR)spectro_xyz_to_lrz.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)visu_vectime.exe :                $(OBJ_DIR)visu_vectime.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rogralib_V9p7.o\
                                            $(OBJ_DIR)rograsuplib.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)visu_vectime_4sat.exe :           $(OBJ_DIR)visu_vectime_4sat.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rogralib_V9p7.o\
                                            $(OBJ_DIR)rograsuplib.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)visu_vectime_3D.exe :             $(OBJ_DIR)visu_vectime_3D.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rogralib_V9p7.o\
                                            $(OBJ_DIR)rograsuplib.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)visu_vectime_3D_4sat.exe :        $(OBJ_DIR)visu_vectime_3D_4sat.o    \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rogralib_V9p7.o\
                                            $(OBJ_DIR)rograsuplib.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)visu_2_vectime.exe :              $(OBJ_DIR)visu_2_vectime.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rogralib_V9p7.o\
                                            $(OBJ_DIR)rograsuplib.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)visu_2_vectime_3D.exe :           $(OBJ_DIR)visu_2_vectime_3D.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rogralib_V9p7.o\
                                            $(OBJ_DIR)rograsuplib.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)visu_spectro.exe :                $(OBJ_DIR)visu_spectro.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rogralib_V9p7.o\
                                            $(OBJ_DIR)rograsuplib.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)visu_spectro_4Bz.exe :            $(OBJ_DIR)visu_spectro_4Bz.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rogralib_V9p7.o\
                                            $(OBJ_DIR)rograsuplib.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)visu_CLUGEOM.exe :                $(OBJ_DIR)visu_CLUGEOM.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rogralib_V9p7.o\
                                            $(OBJ_DIR)rograsuplib.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)visu_polar.exe :                  $(OBJ_DIR)visu_polar.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rogralib_V9p7.o\
                                            $(OBJ_DIR)rograsuplib.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)visu_ave_spectrum.exe :           $(OBJ_DIR)visu_ave_spectrum.o \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rogralib_V9p7.o\
                                            $(OBJ_DIR)rograsuplib.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)visu_curl_div_4sat.exe :          $(OBJ_DIR)visu_curl_div_4sat.o    \
                                            $(OBJ_DIR)lib_rw_rff.o \
                                            $(OBJ_DIR)lib_time.o \
                                            $(OBJ_DIR)rogralib_V9p7.o\
                                            $(OBJ_DIR)rograsuplib.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________
$(BIN_DIR)co_IGRF_field.exe:                $(OBJ_DIR)co_IGRF_field.o    \
                                            $(OBJ_DIR)lib_igrf13.o
	$(FC) $(FLINK)  $^ -o $@
# _______________________________


# ==========================
# Libraries compilation
# ==========================

# One define here the target name ( .o of each librairy) and it souce (.f90)
#
# Then one compile the source ($<) and make the targer ($@)
# Warning: libraries not used are not compiled
# Library having modules are compiled firstabove.

$(OBJ_DIR)lib_CLUORB.o :            $(SRC_DIR)lib_CLUORB.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)lib_tools_CLUSTER.o :     $(SRC_DIR)lib_tools_CLUSTER.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)lib_rw_rff.o :            $(SRC_DIR)lib_rw_rff.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)lib_rw_cef.o :            $(SRC_DIR)lib_rw_cef.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)lib_time.o :              $(SRC_DIR)lib_time.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)lib_alitime.o :           $(SRC_DIR)lib_alitime.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)lib_gainant.o :           $(SRC_DIR)lib_gainant.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)rocotlib_V3p2.o :         $(SRC_DIR)rocotlib_V3p2.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)rogralib_V9p7.o :         $(SRC_DIR)rogralib_V9p7.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)rograsuplib.o :           $(SRC_DIR)rograsuplib.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)lib_deconvo.o :           $(SRC_DIR)lib_deconvo.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)lib_utility.o :           $(SRC_DIR)lib_utility.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)lib_kepler.o :            $(SRC_DIR)lib_kepler.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)lib_signal.o :            $(SRC_DIR)lib_signal.f90
	$(FC) $(FCOMP) $< -o    $@
    
$(OBJ_DIR)lib_igrf13.o :            $(SRC_DIR)lib_igrf13.f90
	$(FC) $(FCOMP) $< -o    $@

# ==========================
# Programs compilation 
# ==========================

$(OBJ_DIR)check_rff.o :                         $(SRC_DIR)check_rff.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)CLUEFW_check_status.o :               $(SRC_DIR)CLUEFW_check_status.f90
	$(FC) $(FCOMP) $< -o    $@
    
$(OBJ_DIR)clean_rff.o :                         $(SRC_DIR)clean_rff.f90
	$(FC) $(FCOMP) $< -o    $@
    
$(OBJ_DIR)current_tube.o :                      $(SRC_DIR)current_tube.f90
	$(FC) $(FCOMP) $< -o    $@
	
$(OBJ_DIR)diff_rff.o :                          $(SRC_DIR)diff_rff.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)dir_size_pretty_tree.o :              $(SRC_DIR)dir_size_pretty_tree.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)dir_pretty_tree.o :                   $(SRC_DIR)dir_pretty_tree.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)dir_properties_pretty_tree.o :        $(SRC_DIR)dir_properties_pretty_tree.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)cef_to_rff_dwf_CLUSTA.o :             $(SRC_DIR)cef_to_rff_dwf_CLUSTA.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)cef_to_rff_CLUFGM.o :                 $(SRC_DIR)cef_to_rff_CLUFGM.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)cef_gse_to_sr2_CLUFGM.o :             $(SRC_DIR)cef_gse_to_sr2_CLUFGM.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)cef_to_rff_CLUPOS.o :                 $(SRC_DIR)cef_to_rff_CLUPOS.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)get_data_CLUGEOM.o :                  $(SRC_DIR)get_data_CLUGEOM.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)cef_to_rff_cwf_CLUSTA.o :             $(SRC_DIR)cef_to_rff_cwf_CLUSTA.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)waveform_to_vectime.o :               $(SRC_DIR)waveform_to_vectime.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)flat_to_rff.o :                       $(SRC_DIR)flat_to_rff.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)CLUSTA_w_vectime_cef_header.o :       $(SRC_DIR)CLUSTA_w_vectime_cef_header.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)CLUSTA_w_cwf_cef_header.o :           $(SRC_DIR)CLUSTA_w_cwf_cef_header.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)CLUSTA_w_cal_caveat_header.o :        $(SRC_DIR)CLUSTA_w_cal_caveat_header.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_calibration_CLUSTA.o :        $(SRC_DIR)vectime_calibration_CLUSTA.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_calibration_GEOULF.o :        $(SRC_DIR)vectime_calibration_GEOULF.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_calibration_GEOGRD.o :        $(SRC_DIR)vectime_calibration_GEOGRD.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_to_mfav_GEOULF.o :            $(SRC_DIR)vectime_to_mfav_GEOULF.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_to_mfav_GEOGRD.o :            $(SRC_DIR)vectime_to_mfav_GEOGRD.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_to_mfa_CLUSTA.o :             $(SRC_DIR)vectime_to_mfa_CLUSTA.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_to_mfa.o :                    $(SRC_DIR)vectime_to_mfa.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_to_mva.o :                    $(SRC_DIR)vectime_to_mva.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_to_spectro.o :                $(SRC_DIR)vectime_to_spectro.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)alitime_4_vectime.o :                 $(SRC_DIR)alitime_4_vectime.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)compute_curl_div_4sat.o :             $(SRC_DIR)compute_curl_div_4sat.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)compute_sat_trajectory.o :            $(SRC_DIR)compute_sat_trajectory.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)compute_sat_orbit_param.o :           $(SRC_DIR)compute_sat_orbit_param.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)create_simulated_data.o :             $(SRC_DIR)create_simulated_data.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)test_kepler_lib.o :                   $(SRC_DIR)test_kepler_lib.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_L1_to_spectro_L2_CLUSTA.o :   $(SRC_DIR)vectime_L1_to_spectro_L2_CLUSTA.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_L1_to_spectro_L2_GEOULF.o :   $(SRC_DIR)vectime_L1_to_spectro_L2_GEOULF.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_L1_to_spectro_L2_GEOGRD.o :   $(SRC_DIR)vectime_L1_to_spectro_L2_GEOGRD.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)CLUSTA_vectime_L1_to_cef.o :          $(SRC_DIR)CLUSTA_vectime_L1_to_cef.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)CLUSTA_vectime_L2_to_cef.o :          $(SRC_DIR)CLUSTA_vectime_L2_to_cef.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)reduce_time_rff.o :                   $(SRC_DIR)reduce_time_rff.f90
	$(FC) $(FCOMP) $< -o    $@
    
$(OBJ_DIR)reduce_time_vectime.o :               $(SRC_DIR)reduce_time_vectime.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)change_coordinate_system.o :          $(SRC_DIR)change_coordinate_system.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_gse_to_isr2.o :               $(SRC_DIR)vectime_gse_to_isr2.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)CLUSTA_search_strong_DC.o :           $(SRC_DIR)CLUSTA_search_strong_DC.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)CLUSTA_spectro_L2_to_cef.o :          $(SRC_DIR)CLUSTA_spectro_L2_to_cef.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)spectro_to_polar.o :                  $(SRC_DIR)spectro_to_polar.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_vdh_to_srv_GEOMAG.o :         $(SRC_DIR)vectime_vdh_to_srv_GEOMAG.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)vectime_vdh_to_xyz_GEOMAG.o :         $(SRC_DIR)vectime_vdh_to_xyz_GEOMAG.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)add_DxDy_to_BxBy.o :                  $(SRC_DIR)add_DxDy_to_BxBy.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)spectro_xyz_to_lrz.o :                $(SRC_DIR)spectro_xyz_to_lrz.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)visu_vectime.o :                      $(SRC_DIR)visu_vectime.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)visu_vectime_4sat.o :                 $(SRC_DIR)visu_vectime_4sat.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)visu_vectime_3D.o :                   $(SRC_DIR)visu_vectime_3D.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)visu_vectime_3D_4sat.o :              $(SRC_DIR)visu_vectime_3D_4sat.f90
	$(FC) $(FCOMP) $< -o    $@
    
$(OBJ_DIR)visu_2_vectime.o :                    $(SRC_DIR)visu_2_vectime.f90
	$(FC) $(FCOMP) $< -o    $@
    
$(OBJ_DIR)visu_2_vectime_3D.o :                 $(SRC_DIR)visu_2_vectime_3D.f90
	$(FC) $(FCOMP) $< -o    $@
    
$(OBJ_DIR)visu_spectro.o :                      $(SRC_DIR)visu_spectro.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)visu_spectro_4Bz.o :                  $(SRC_DIR)visu_spectro_4Bz.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)visu_CLUGEOM.o :                      $(SRC_DIR)visu_CLUGEOM.f90
	$(FC) $(FCOMP) $< -o    $@

$(OBJ_DIR)visu_polar.o :                        $(SRC_DIR)visu_polar.f90
	$(FC) $(FCOMP) $< -o    $@
    
$(OBJ_DIR)visu_ave_spectrum.o :                 $(SRC_DIR)visu_ave_spectrum.f90
	$(FC) $(FCOMP) $< -o    $@
    
$(OBJ_DIR)visu_curl_div_4sat.o :                $(SRC_DIR)visu_curl_div_4sat.f90
	$(FC) $(FCOMP) $< -o    $@
    
$(OBJ_DIR)co_IGRF_field.o :                     $(SRC_DIR)co_IGRF_field.f90
	$(FC) $(FCOMP) $< -o    $@
    
# ==========
# make clean
# ==========

# Delete all .exe , .o and .mod
# Delete all.tmp,   *.core, *.~

clean :
	@echo "***  Removing *.exe *.o, .mod files..."

	@find ./bin -name "*.exe"   -exec rm -f {} \;
	@find ./obj -name "*.o"     -exec rm -f {} \;
	@find ./mod -name "*.mod"   -exec rm -f {} \;
    
	@find . -name ".tmp"        -exec rm -f {} \;
	@find . -name "*core"       -exec rm -f {} \;
	@find . -name "*~"          -exec rm -f {} \;
    
	@echo "clean done."

#-----------------------------------------------------------------------
# End of Makefile for all RPC programs
#-----------------------------------------------------------------------
