# This is the makefile for the mesa library of numerical routines

MESA_DIR = ../..

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

# STEP 1: get the standard compiler info

include $(MESA_DIR)/utils/makefile_header

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

# STEP 2: build the library

LIB = libnum.a
LIB_DEFS = num_def.o
LIB_OBJS = \
   mod_dop853.o mod_dopri5.o mod_cash_karp.o mod_dc_decsol.o \
   mod_rosenbrock.o mod_sodex.o mod_seulex.o mod_radau5.o \
   mod_brent.o mod_root.o mod_solout_root.o \
   mod_newton_dble.o mod_newton_quad.o mod_hooke.o mod_bobyqa.o \
   mebdfi_solver_def.o mebdfi_support.o mebdfi_stiff.o \
   num_lib.o

$(LIB) : $(LIB_DEFS) $(LIB_OBJS)
	$(LIB_TOOL) $(LIB) $(LIB_OBJS)
	
#################################################################

#COMPILE = $(COMPILE_TO_TEST) $(FCfixed)
COMPILE = $(COMPILE_TO_DEPLOY) $(FCfixed)
COMPILE_FREE = $(COMPILE_TO_DEPLOY) $(FCfree)

#COMPILE_XTRA = $(COMPILE_NO_CHECKS) $(FCfixed) -c
COMPILE_XTRA = $(COMPILE_BASIC) $(FCopt) $(FCfixed) -c

num_lib.o: \
  $(MOD_PUBLIC_DIR)/num_lib.f \
  $(MOD_PUBLIC_DIR)/num_binary_search.dek \
  $(MOD_PUBLIC_DIR)/mebdfi_solver.dek \
  $(MOD_PUBLIC_DIR)/num_brent.dek \
  $(MOD_PUBLIC_DIR)/num_bobyqa.dek \
  $(MOD_PUBLIC_DIR)/num_hooke.dek \
  $(MOD_PUBLIC_DIR)/num_newton_dble.dek \
  $(MOD_PUBLIC_DIR)/num_newton_quad.dek \
  $(MOD_PUBLIC_DIR)/newton_procs_dble.dek \
  $(MOD_PUBLIC_DIR)/newton_procs_quad.dek \
  $(MOD_PUBLIC_DIR)/num_safe_root.dek \
  $(MOD_PUBLIC_DIR)/num_dop853.dek \
  $(MOD_PUBLIC_DIR)/num_dopri5.dek \
  $(MOD_PUBLIC_DIR)/num_qsort.dek \
  $(MOD_PUBLIC_DIR)/num_cash_karp.dek \
  $(MOD_PUBLIC_DIR)/num_rk4.dek \
  $(MOD_PUBLIC_DIR)/num_ros2.dek \
  $(MOD_PUBLIC_DIR)/num_rodas3.dek \
  $(MOD_PUBLIC_DIR)/num_rodas4.dek \
  $(MOD_PUBLIC_DIR)/num_rodasp.dek \
  $(MOD_PUBLIC_DIR)/num_radau5.dek \
  $(MOD_PUBLIC_DIR)/num_sodex.dek \
  $(MOD_PUBLIC_DIR)/num_seulex.dek \
  $(MOD_PUBLIC_DIR)/num_ros3pl.dek \
  $(MOD_PUBLIC_DIR)/num_solvers_options.dek \
  $(MOD_PUBLIC_DIR)/num_isolve.dek
	$(COMPILE) $<

%.o: $(MOD_PUBLIC_DIR)/%.f
	$(COMPILE) $<

%.o: $(MOD_PRIVATE_DIR)/%.f
	$(COMPILE) $<

mod_newton_dble.o: $(MOD_PRIVATE_DIR)/mod_newton.f
	$(COMPILE) $(FC_fixed_preprocess) -DDBLE -o mod_newton_dble.o $<
mod_newton_quad.o: $(MOD_PRIVATE_DIR)/mod_newton.f
	$(COMPILE) $(FC_fixed_preprocess) -o mod_newton_quad.o $<
	
mod_brent.o: $(MOD_PRIVATE_DIR)/mod_brent.f
	$(COMPILE_FREE) $<
	
mod_hooke.o: $(MOD_PRIVATE_DIR)/mod_hooke.f
	$(COMPILE_FREE) $<
	
mod_bobyqa.o: $(MOD_PRIVATE_DIR)/mod_bobyqa.f
	$(COMPILE_XTRA) $<
	
mod_dop853.o: $(MOD_PRIVATE_DIR)/mod_dop853.f
	$(COMPILE_XTRA) $<
	
mod_dopri5.o: $(MOD_PRIVATE_DIR)/mod_dopri5.f
	$(COMPILE_XTRA) $<
	
mod_dc_decsol.o: \
  $(MOD_PRIVATE_DIR)/mod_dc_decsol.f \
  $(MOD_PRIVATE_DIR)/decomc.dek \
  $(MOD_PRIVATE_DIR)/decomr.dek \
  $(MOD_PRIVATE_DIR)/decsol_done.dek \
  $(MOD_PRIVATE_DIR)/estrad.dek \
  $(MOD_PRIVATE_DIR)/slvrad.dek \
  $(MOD_PRIVATE_DIR)/slvrod.dek \
  $(MOD_PRIVATE_DIR)/slvseu.dek 
	$(COMPILE_XTRA) $<
	
mod_sodex.o: $(MOD_PRIVATE_DIR)/mod_sodex.f
	$(COMPILE_XTRA) $<
	
mod_seulex.o: $(MOD_PRIVATE_DIR)/mod_seulex.f
	$(COMPILE_XTRA) $<
	
mod_radau5.o: $(MOD_PRIVATE_DIR)/mod_radau5.f
	$(COMPILE_XTRA) $<
	
mod_rosenbrock.o: $(MOD_PRIVATE_DIR)/mod_rosenbrock.f
	$(COMPILE_XTRA) $<

clean:
	-@rm -f *.o *.mod $(LIB)
