# This is the makefile for the mesa star package

MESA_DIR = ../..

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

# STEP 1: get the standard compiler info

include $(MESA_DIR)/utils/makefile_header

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

# STEP 2: build the library


# define the PGSTAR files for star
ifeq ($(USE_PGSTAR),YES)
PGSTAR_OBJS = \
   pgstar_ctrls_io.o \
   pgstar_support.o \
   pgstar_hist_tracks.o \
   pgstar_kipp.o \
   pgstar_dPg_dnu.o \
   pgstar_hr.o \
   pgstar_trho.o \
   pgstar_logg_Teff.o \
   pgstar_logg_logT.o \
   pgstar_hist_panels.o \
   pgstar_trho_profile.o \
   pgstar_mode_prop.o \
   pgstar_power.o \
   pgstar_abundance.o \
   pgstar_dynamo.o \
   pgstar_mixing_Ds.o \
   pgstar_summary_profile.o \
   pgstar_summary_history.o \
   pgstar_summary.o \
   pgstar_profile_panels.o \
   pgstar_grid.o \
   pgstar.o
else
PGSTAR_OBJS = pgstar_stub.o
endif


# define the SE files for star
ifeq ($(USE_SE),YES)
SE_OBJS = se_support.o
else
SE_OBJS = se_support_stub.o
endif



LIB = libstar.a
LIB_DEFS = 

LIB_OBJS = \
    star_def.o \
    star_private_def.o \
    other_mixing.o \
    other_am_mixing.o \
    other_wind.o \
    other_adjust_mdot.o \
    other_brunt.o \
    other_torque.o \
    other_torque_implicit.o \
    other_energy.o \
    other_energy_implicit.o \
    other_viscosity_pressure.o \
    other_cgrav.o \
    other_opacity_factor.o \
    other_mlt.o \
    other_neu.o \
    other_atm.o \
    other_diffusion.o \
    other_eos.o \
    other_kap.o \
    other_eps_grav.o \
    other_pgstar_plots.o \
    other_mesh_functions.o \
    other_write_pulsation_info.o \
    other_get_pulsation_info.o \
    other_history_data_initialize.o \
    other_history_data_add_model.o \
    star_utils.o \
    ctrls_io.o \
    alloc.o \
    model_in.o \
    model_out.o \
    opacities.o \
    nse.o \
    net.o \
    neu.o \
    solve_burn_sparse.o \
    solve_burn.o \
    solve_mix.o \
    micro.o \
    brunt.o \
    overshoot.o \
    turbulent_diffusion.o \
    mlt_info.o \
    rotation_mix_info.o \
    mix_smoothing.o \
    mix_info.o \
    mesh_functions.o \
    mesh_plan.o \
    mesh_adjust.o \
    create_atm.o \
    hydro_rotation.o \
    hydro_vars.o \
    eps_grav.o \
    hydro_chem_eqns.o \
    hydro_eqns.o \
    hydro_mtx.o \
    hydro_newton_procs.o \
    solve_omega_mix.o \
    report.o \
    read_model.o \
    write_model.o \
    history_specs.o \
    history.o \
    pulsation_info.o \
    profile_getval.o \
    profile.o \
    $(PGSTAR_OBJS) \
    do_one_utils.o \
    timestep.o \
    adjust_xyz.o \
    adjust_mass.o \
    adjust_mesh_support.o \
    adjust_mesh_plot.o \
    adjust_mesh.o \
    paquette_coeffs.o \
    mod_diffusion_support.o \
    mod_diffusion_procs.o \
    mod_diffusion.o \
    element_diffusion.o \
    evolve_support.o \
    star_sparse.o \
    star_bcyclic.o \
    star_newton.o \
    solve_hydro.o \
    struct_burn_mix.o \
    kuma.o \
    winds.o \
    evolve.o \
    relax.o \
    create_initial_model.o \
    pre_ms_model.o \
    init_model.o \
    init.o \
    star_lib.o \
    $(SE_OBJS) \
    run_star_support.o \
    sample_pgstar_plot.o


MOD_DEFAULTS_DIR = $(MODULE_DIR)/defaults
INCLUDE_DEFAULTS = -I$(MOD_DEFAULTS_DIR)

MOD_JOB_DIR = $(MODULE_DIR)/job
INCLUDE_JOB = -I$(MOD_JOB_DIR)

MOD_OTHER_DIR = $(MODULE_DIR)/other
INCLUDE_OTHER = -I$(MOD_OTHER_DIR)

STAR_INCLUDES = \
   $(INCLUDE_SE) $(INCLUDE_DEFAULTS) $(INCLUDE_JOB) $(INCLUDE_OTHER)

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

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

COMPILE = $(COMPILE_TO_DEPLOY) $(FCfree) $(STAR_INCLUDES)
#COMPILE = $(COMPILE_TO_TEST) $(FCfree) $(STAR_INCLUDES)

#COMPILE = $(COMPILE_NO_OPENMP_NO_OPT) $(FCfree) $(STAR_INCLUDES)
#COMPILE = $(COMPILE_TO_TEST) $(FCfree) $(FCwarn_unused) $(STAR_INCLUDES)
#COMPILE = $(COMPILE_FAST) $(FCfree) -g $(STAR_INCLUDES)

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


STAR_COMPILE_BASIC = $(COMPILE_BASIC) $(FCfree) $(STAR_INCLUDES) -c -O

pgstar_ctrls_io.o: \
  $(MOD_PRIVATE_DIR)/pgstar_ctrls_io.f \
  $(MOD_PRIVATE_DIR)/pgstar_controls.inc \
  $(MOD_DEFAULTS_DIR)/pgstar.defaults
	$(COMPILE) $<

run_star_support.o: \
  $(MOD_JOB_DIR)/run_star_support.f \
  $(MOD_DEFAULTS_DIR)/star_job.defaults
	$(COMPILE) $<

star_def.o: \
  $(MOD_PUBLIC_DIR)/star_def.f \
  $(MOD_PUBLIC_DIR)/star_data.inc \
  $(MOD_PRIVATE_DIR)/pgstar_controls.inc \
  $(MOD_PUBLIC_DIR)/star_controls.inc \
  $(MOD_DEFAULTS_DIR)/controls.defaults
	$(COMPILE) -D$(FC) $<

ctrls_io.o: \
  $(MOD_PRIVATE_DIR)/ctrls_io.f \
  $(MOD_PRIVATE_DIR)/private_defaults.inc \
  $(MOD_PUBLIC_DIR)/star_controls.inc \
  $(MOD_DEFAULTS_DIR)/controls.defaults
	$(COMPILE) $<


MOD_SE_DIR = $(MODULE_DIR)/se
se_support.o: $(MOD_SE_DIR)/se_support.f
	$(STAR_COMPILE_BASIC) $<
se_support_stub.o: $(MOD_SE_DIR)/se_support_stub.f
	$(STAR_COMPILE_BASIC) $<
	
	

report.o: $(MOD_PRIVATE_DIR)/report.f
	$(STAR_COMPILE_BASIC) $<

profile.o: $(MOD_PRIVATE_DIR)/profile.f
	$(STAR_COMPILE_BASIC) $<


paquette_coeffs.o: $(MOD_PRIVATE_DIR)/paquette_coeffs.f
	$(COMPILE_NO_CHECKS) $(FCfixed) $<   


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

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

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

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

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


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