.SUFFIXES: .o .c .f90 .F90

#=================================================================================================================

INCLUDESDIR = -I/u/mhcarpen/scratch2/mhcarpen/OpenSourceLib_2024/petsc_oneAPI_2023.1_64bit/petsc-3.21.1-install/include
#
#FCFLAGS = -O3 -g -ip -pad -align -auto -xCORE-AVX512 $(INCLUDESDIR)
#FCFLAGS = -Ofast -axCORE-AVX512 -qopt-zmm-usage=high -align array64byte -ip -fp-model fast -g -traceback $(INCLUDESDIR)
#FCFLAGS = -O3 -axCORE-AVX512 -qopt-zmm-usage=high -align array64byte -ip -fp-model fast -g -traceback $(INCLUDESDIR)

FCFLAGS = -O2 -g -traceback $(INCLUDESDIR)
 CFLAGS = -O3 -g -ip $(INCLUDESDIR)
 
#FCFLAGS = -O3 -qopt-report -g -ip -pad -align -auto -axSANDYBRIDGE,IVYBRIDGE,HASWELL,SKYLAKE $(INCLUDESDIR)
# CFLAGS = -O3 -qopt-report -g -ip -pad -align -auto -axSANDYBRIDGE,IVYBRIDGE,HASWELL,SKYLAKE $(INCLUDESDIR)

LFLAGS = -L/u/mhcarpen/scratch2/mhcarpen/OpenSourceLib_2024/petsc_oneAPI_2023.1_64bit/petsc-3.21.1-install/lib

CC = icc
FC = mpif90

LIBS = -lpetsc -lHYPRE -lscalapack -lmetis #-lparmetis
SRCS = precision_vars.f90\
       ssdc_types.f90\
       variables.f90\
       referencevariables.f90\
       controlvariables.f90\
       nsereferencevariables.f90\
       collocationvariables.f90\
       SSWENOvariables.f90\
       petscvariables.F90\
       CSRlocalvariables.f90\
       jacobian_matrix_implicit_ts_variables.f90\
       ssdc_implicit_variables.f90\
       unary_mod.f90\
       matvec_module.f90\
       Matrix_Inverse_Utilities.f90\
       eispack_module.f90\
       initcollocation.f90\
       Interpolation_Matrices_P_Refine.f90\
       Interpolation_Matrices_H_Refine.f90\
       NUMERICS_SBP_Div_Grad_Curl.f90\
       NUMERICS_Translators.f90\
       helper_mod2.f90\
       fileio.f90\
       gauss_Petsc_routines.F90\
       Petsc_Communication_Setup.F90\
       Petsc_Communication_Update.F90\
       Petsc_Communication_Setup_Type.F90\
       Petsc_Communication_WENO.F90\
       Petsc_Communication_Cleanup.F90\
       initialize_CSR_Master.f90\
       mpimod.F90\
       initialize_CSR.f90\
       tools.f90\
       interpolation.f90\
       tools_IO.f90\
       PHYSICS_NavierStokes_Variables_Rotations.f90\
       time_integ_coeff.f90\
       time_average.f90\
       PHYSICS_NavierStokes_Euler_Fluxes.f90\
       PHYSICS_NavierStokes_Derived_Quantities.f90\
       NUMERICS_Filter_Mechanics.f90\
       restart_simulation.f90\
       non_conforming.f90\
       init_mesh.f90\
       init_metrics.f90\
       init_elements.f90\
       init_connectivity.f90\
       partition_mod.F90\
       gauss_routines.f90\
       Init_Grid_WENO.f90\
       SSWENO_routines.f90\
       PHYSICS_NavierStokes_Viscous_Fluxes.f90\
       Jacobian_NavierStokes.f90\
       stg.f90\
       stg_ssdc.F90\
       self_similar.F90\
       PHYSICS_NavierStokes_Exact_Solutions.f90\
       ssdc_jacobians_hand_Eric.f90\
       Consistency_Tests.f90\
       PHYSICS_NavierStokes_SAT_Penalty.f90\
       miniapp_mod.f90\
       navierstokes.f90\
       physics_driver.f90\
       errorestimation.f90\
       dkinetic_energy_dt_enstrophy.f90\
       Jacobian_NS_SAT_Penalty.f90\
       jacobian_matrix_implicit_ts.f90\
       implicit_residual.f90\
       jacobian_matrix_product.F90\
       matrix_equilibration.f90\
       ssdc_implicit_solvers.f90\
       ssdc_implicit_deflation.f90\
       ssdc_implicit_iteration.f90\
       ssdc_implicit_schemes.f90\
       ssdc_write_jacobian_file.f90\
       preconditioning_mod.F90\
       petsc_snes_solver.F90\
         binary_sizes.f90\
       write_solution_file.f90\
       aerodynamic_coefficients.f90\
       error_bc_no_slip_wall.f90\
       error_heat_entropy_flow_wall_bc.f90\
       post_process_VTU.f90\
       timeinteg.f90\
       polyinit.f90\
       physicsindependent.f90\
       ssdcsolver.f90
#      miniapp_jacobian_mod.f90\

#OBJS1 = $(SRCS:.f90=.o)
#OBJS2 = $(SRCS:.F90=.o)

#OBJS= $(OBJS2) \
$(OBJS1)

OBJS = precision_vars.o\
       ssdc_types.o\
       variables.o\
       referencevariables.o\
       controlvariables.o\
       nsereferencevariables.o\
       collocationvariables.o\
       SSWENOvariables.o\
       petscvariables.o\
       CSRlocalvariables.o\
       jacobian_matrix_implicit_ts_variables.o\
       ssdc_implicit_variables.o\
       unary_mod.o\
       matvec_module.o\
       Matrix_Inverse_Utilities.o\
       eispack_module.o\
       initcollocation.o\
       Interpolation_Matrices_P_Refine.o\
       Interpolation_Matrices_H_Refine.o\
       NUMERICS_SBP_Div_Grad_Curl.o\
       NUMERICS_Translators.o\
       helper_mod2.o\
       fileio.o\
       gauss_Petsc_routines.o\
       Petsc_Communication_Setup.o\
       Petsc_Communication_Update.o\
       Petsc_Communication_Setup_Type.o\
       Petsc_Communication_WENO.o\
       Petsc_Communication_Cleanup.o\
       initialize_CSR_Master.o\
       mpimod.o\
       initialize_CSR.o\
       tools.o\
       interpolation.o\
       tools_IO.o\
       PHYSICS_NavierStokes_Variables_Rotations.o\
       time_integ_coeff.o\
       time_average.o\
       PHYSICS_NavierStokes_Euler_Fluxes.o\
       PHYSICS_NavierStokes_Derived_Quantities.o\
       NUMERICS_Filter_Mechanics.o\
       restart_simulation.o\
       non_conforming.o\
       init_mesh.o\
       init_metrics.o\
       init_elements.o\
       init_connectivity.o\
       partition_mod.o\
       gauss_routines.o\
       Init_Grid_WENO.o\
       SSWENO_routines.o\
       PHYSICS_NavierStokes_Viscous_Fluxes.o\
       Jacobian_NavierStokes.o\
       stg.o\
       stg_ssdc.o\
       self_similar.o\
       PHYSICS_NavierStokes_Exact_Solutions.o\
       ssdc_jacobians_hand_Eric.o\
       Consistency_Tests.o\
       PHYSICS_NavierStokes_SAT_Penalty.o\
       miniapp_mod.o\
       navierstokes.o\
       physics_driver.o\
       errorestimation.o\
       dkinetic_energy_dt_enstrophy.o\
       Jacobian_NS_SAT_Penalty.o\
       jacobian_matrix_implicit_ts.o\
       implicit_residual.o\
       jacobian_matrix_product.o\
       matrix_equilibration.o\
       ssdc_implicit_solvers.o\
       ssdc_implicit_deflation.o\
       ssdc_implicit_iteration.o\
       ssdc_implicit_schemes.o\
       ssdc_write_jacobian_file.o\
       preconditioning_mod.o\
       petsc_snes_solver.o\
         binary_sizes.o\
       write_solution_file.o\
       aerodynamic_coefficients.o\
       error_bc_no_slip_wall.o\
       error_heat_entropy_flow_wall_bc.o\
       post_process_VTU.o\
       timeinteg.o\
       polyinit.o\
       physicsindependent.o\
       metiselementpartition.o\
       ssdcsolver.o
#      miniapp_jacobian_mod.o\

TARGET = SSDCNSE_64bit

.PHONY: depend clean

#metiselementpartition.o: metiselementpartition.c

all: $(TARGET)
	@echo  SSDC code has been compiled, creating executable named SSDCNSE_64bit

$(TARGET) : $(OBJS)
	$(FC) $(FCFLAGS) $(INCLUDESDIR) -o $(TARGET) $(OBJS) $(LFLAGS) $(LIBS)

%.o : %.f90
	$(FC) -c $(FCFLAGS) -c $< -o $@

%.o : %.F90
	$(FC) -c $(FCFLAGS) -c $< -o $@

%.o : %.c
	$(CC) -c $(CFLAGS) -c $< -o $@


clean:
	rm -f *.o *.mod *~ $(TARGET)

depend: $(SRCS)
	makedepend $(INCLUDESDIR) $^

# DO NOT DELETE THIS LINE -- make depend needs it
