# 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 = mebdfi_solver_def.o num_def.o
LIB_OBJS = \
   mod_dop853.o mod_dopri5.o mod_cash_karp.o mod_dc_decsol.o \
   mod_rosenbrock.o mod_brent.o mod_root.o mod_solout_root.o \
   mod_random.o mod_newton.o mod_bobyqa.o mod_newuoa.o \
   mebdfi_support.o mebdfi_stiff.o \
   mod_simplex.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_TEST) $(FCfree)
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_simplex.dek \
  $(MOD_PUBLIC_DIR)/num_newuoa.dek \
  $(MOD_PUBLIC_DIR)/num_bobyqa.dek \
  $(MOD_PUBLIC_DIR)/num_newton.dek \
  $(MOD_PUBLIC_DIR)/newton_procs.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_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_random.o: $(MOD_PRIVATE_DIR)/mod_random.f
	$(COMPILE_FREE) $<
	
mod_brent.o: $(MOD_PRIVATE_DIR)/mod_brent.f
	$(COMPILE_FREE) $<
	
mod_simplex.o: $(MOD_PRIVATE_DIR)/mod_simplex.f
	$(COMPILE_FREE) $<
	
mod_bobyqa.o: $(MOD_PRIVATE_DIR)/mod_bobyqa.f
	$(COMPILE_XTRA) $<
	
mod_newuoa.o: $(MOD_PRIVATE_DIR)/mod_newuoa.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)/decomr.dek \
  $(MOD_PRIVATE_DIR)/decsol_done.dek \
  $(MOD_PRIVATE_DIR)/slvrod.dek
	$(COMPILE_XTRA) $<
	
mod_rosenbrock.o: $(MOD_PRIVATE_DIR)/mod_rosenbrock.f
	$(COMPILE_XTRA) $<

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