#key parameters:
OPENMP=y
PETSC=y
HDF5=y
COMPILER=default
GPU=n
CMD := G2C3
ALL:${CMD}
LIB :=
LD_LIB :=
#------------------------------------------------------
SCRATCH_PATH := /scratch/scratch_run/akuley_ext/Jaya/G2C3/ScratchVer1.0/
CODE_PATH := $(pwd)
#----- inquire the hostname to judge the system name, to determine what target we're compiling on
ifneq (,${HOST})
SYSTEMS := ${HOST}
else
SYSTEMS := $(shell hostname)
endif
#------------------------------------------------------
$(info )
$(info | )
$(info | ┏┓┏┓┏┓┏┓ )
$(info | ┃┓┏┛┃ ┫ (Ver1.0, 2024) )
$(info | ┗┛┗━┗┛┗┛ )
$(info | )
#------------------------------------------------------
#----- target machine determines the default compiler, and paths to libraries -----#
#------------- ANTYA
ifneq (,$(findstring login1,$(SYSTEMS)) || $(findstring login2,$(SYSTEMS)))
ifeq ($(OPENMP),y)
OPT += -qopenmp
endif
ifeq ($(PETSC),y)
PETSC_HOME=/home/application/petsc/3.8.4
LIB += -I$(PETSC_HOME)/include -L$(PETSC_HOME)/lib
OPT += -static-intel -lpetsc
endif
ifeq ($(HDF5),y)
HDF5_HOME=/home/application/HDF5_P_Intel/1.10.5
LIB += -I$(HDF5_HOME)/include -L$(HDF5_HOME)/lib
OPT += -lhdf5_fortran -lhdf5 -lz -lm
endif
CMP := mpiifort
OPT += -no-wrap-margin
OPT += -warn unused
JOB_RUN := qsub
JOB_FILE := ./job/jobscript_ANTYA
JOB_STATUS := qstat
endif
#------------- PTG
ifneq (,$(findstring ptg,$(SYSTEMS)))
ifeq ($(PETSC),y)
PETSC_solver ?= petsc.o
PETSC_OPT += -D_PETSc -D_USING_EXT_SOLVER -lpetsc
OPT += $(PETSC_OPT)
PETSC_HOME=/exports/apps/installed/spack/opt/spack/linux-rocky8-zen/gcc-8.5.0/petsc-3.18.1-xeuns4w5kms5jertyhfmlqwtmlmyhw3m
LIB += -I$(PETSC_HOME)/include -L$(PETSC_HOME)/lib
LD_LIB += $(PETSC_LD_LIB) -L$(PETSC_HOME)/lib
else
PETSC_solver :=
endif
OMPOPT := -fopenmp
ifeq ($(OPENMP),y)
OPT += $(OMPOPT)
COPT += $(OMPOPT)
endif
CMP := mpifort
JOB_RUN := sbatch
JOB_FILE := ./job/jobscript_PTG
JOB_STATUS := squeue
endif
#-----------------------------------------------------
SRC := ./src
OBJ := ./obj
#### compilation ####
#------------------------------------------------------
# ---------- Ordered based on dependencies
OBJFILES := $(OBJ)/module.o \
$(OBJ)/petsc.o \
$(OBJ)/h5_write.o \
$(OBJ)/write_data.o \
$(OBJ)/mpi.o \
$(OBJ)/allocate_arrays.o \
$(OBJ)/read_data.o \
$(OBJ)/normalize.o \
$(OBJ)/function.o \
$(OBJ)/mesh.o \
$(OBJ)/neural_network.o \
$(OBJ)/check_zone.o \
$(OBJ)/maps.o \
$(OBJ)/gather_scatter.o \
$(OBJ)/gc_pushi.o \
$(OBJ)/shifti.o \
$(OBJ)/loadi.o \
$(OBJ)/fem.o \
$(OBJ)/parallel_gradient.o \
$(OBJ)/initialize_arrays.o \
$(OBJ)/setup.o \
$(OBJ)/main.o
# $(OBJ)/petsc.o \
# $(OBJ)/initial_data_dump.o \
# $(OBJ)/write_data.o \
# $(OBJ)/initial.o \
# $(OBJ)/function.o \
# $(OBJ)/interface.o \
# $(OBJ)/loadprofile.o \
# $(OBJ)/eqdata.o \
# $(OBJ)/eqplot.o \
# $(OBJ)/domain.o \
# $(OBJ)/field_lines.o \
# $(OBJ)/estimate_thetafgrid.o \
# $(OBJ)/poloidal_grid.o \
# $(OBJ)/NN_Predictor.o \
# $(OBJ)/check_zone.o \
# $(OBJ)/maps.o \
# $(OBJ)/gather_scatter.o \
# $(OBJ)/gc_pushi.o \
# $(OBJ)/shifti.o \
# $(OBJ)/loadi.o \
# $(OBJ)/estimate_volume.o \
# $(OBJ)/poisson_solver.o \
# $(OBJ)/parallel_gradient.o \
# $(OBJ)/setup.o \
# $(OBJ)/main.o
#--------------------------------------------------------------------
$(CMD): $(OBJFILES)
$(CMP) -o $(CMD) $(OBJFILES) $(LIB) $(OPT)
#--------------------------------------------------------------------
$(OBJ)/main.o: $(SRC)/main.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/main.F90 $(LIB) $(OPT) -o $(OBJ)/main.o
$(OBJ)/mpi.o: $(SRC)/mpi.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/mpi.F90 $(LIB) $(OPT) -o $(OBJ)/mpi.o
$(OBJ)/allocate_arrays.o: $(SRC)/allocate_arrays.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/allocate_arrays.F90 $(LIB) $(OPT) -o $(OBJ)/allocate_arrays.o
$(OBJ)/module.o: $(SRC)/module.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/module.F90 $(LIB) $(OPT) -o $(OBJ)/module.o
$(OBJ)/normalize.o: $(SRC)/normalize.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/normalize.F90 $(LIB) $(OPT) -o $(OBJ)/normalize.o
$(OBJ)/initialize_arrays.o: $(SRC)/initialize_arrays.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/initialize_arrays.F90 $(LIB) $(OPT) -o $(OBJ)/initialize_arrays.o
$(OBJ)/write_data.o: $(SRC)/write_data.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/write_data.F90 $(LIB) $(OPT) -o $(OBJ)/write_data.o
$(OBJ)/h5_write.o: $(SRC)/h5_write.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/h5_write.F90 $(LIB) $(OPT) -o $(OBJ)/h5_write.o
$(OBJ)/read_data.o: $(SRC)/read_data.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/read_data.F90 $(LIB) $(OPT) -o $(OBJ)/read_data.o
$(OBJ)/eq_b.o: $(SRC)/eq_b.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/eq_b.F90 $(LIB) $(OPT) -o $(OBJ)/eq_b.o
$(OBJ)/function.o: $(SRC)/function.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/function.F90 $(LIB) $(OPT) -o $(OBJ)/function.o
$(OBJ)/interpolate.o: $(SRC)/interpolate.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/interpolate.F90 $(LIB) $(OPT) -o $(OBJ)/interpolate.o
$(OBJ)/initial.o: $(SRC)/initial.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/initial.F90 $(LIB) $(OPT) -o $(OBJ)/initial.o
$(OBJ)/interface.o: $(SRC)/interface.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/interface.F90 $(LIB) $(OPT) -o $(OBJ)/interface.o
$(OBJ)/eqdata.o: $(SRC)/eqdata.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/eqdata.F90 $(LIB) $(OPT) -o $(OBJ)/eqdata.o
$(OBJ)/loadprofile.o: $(SRC)/loadprofile.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/loadprofile.F90 $(LIB) $(OPT) -o $(OBJ)/loadprofile.o
$(OBJ)/eqplot.o: $(SRC)/eqplot.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/eqplot.F90 $(LIB) $(OPT) -o $(OBJ)/eqplot.o
$(OBJ)/domain.o: $(SRC)/domain.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/domain.F90 $(LIB) $(OPT) -o $(OBJ)/domain.o
$(OBJ)/field_lines.o: $(SRC)/field_lines.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/field_lines.F90 $(LIB) $(OPT) -o $(OBJ)/field_lines.o
$(OBJ)/poloidal_grid.o: $(SRC)/poloidal_grid.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/poloidal_grid.F90 $(LIB) $(OPT) -o $(OBJ)/poloidal_grid.o
$(OBJ)/mesh.o: $(SRC)/mesh.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/mesh.F90 $(LIB) $(OPT) -o $(OBJ)/mesh.o
$(OBJ)/gc_pushi.o: $(SRC)/gc_pushi.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/gc_pushi.F90 $(LIB) $(OPT) -o $(OBJ)/gc_pushi.o
$(OBJ)/loadi.o: $(SRC)/loadi.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/loadi.F90 $(LIB) $(OPT) -o $(OBJ)/loadi.o
$(OBJ)/setup.o: $(SRC)/setup.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/setup.F90 $(LIB) $(OPT) -o $(OBJ)/setup.o
$(OBJ)/shifti.o: $(SRC)/shifti.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/shifti.F90 $(LIB) $(OPT) -o $(OBJ)/shifti.o
$(OBJ)/fem.o: $(SRC)/fem.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/fem.F90 $(LIB) $(OPT) -o $(OBJ)/fem.o
$(OBJ)/parallel_gradient.o: $(SRC)/parallel_gradient.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/parallel_gradient.F90 $(LIB) $(OPT) -o $(OBJ)/parallel_gradient.o
$(OBJ)/maps.o: $(SRC)/maps.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/maps.F90 $(LIB) $(OPT) -o $(OBJ)/maps.o
$(OBJ)/gather_scatter.o: $(SRC)/gather_scatter.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/gather_scatter.F90 $(LIB) $(OPT) -o $(OBJ)/gather_scatter.o
$(OBJ)/check_zone.o: $(SRC)/check_zone.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/check_zone.F90 $(LIB) $(OPT) -o $(OBJ)/check_zone.o
$(OBJ)/neural_network.o: $(SRC)/neural_network.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/neural_network.F90 $(LIB) $(OPT) -o $(OBJ)/neural_network.o
$(OBJ)/estimate_thetafgrid.o: $(SRC)/estimate_thetafgrid.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/estimate_thetafgrid.F90 $(LIB) $(OPT) -o $(OBJ)/estimate_thetafgrid.o
$(OBJ)/estimate_volume.o: $(SRC)/estimate_volume.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/estimate_volume.F90 $(LIB) $(OPT) -o $(OBJ)/estimate_volume.o
$(OBJ)/initial_data_dump.o: $(SRC)/initial_data_dump.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/initial_data_dump.F90 $(LIB) $(OPT) -o $(OBJ)/initial_data_dump.o
$(OBJ)/petsc.o: $(SRC)/petsc.F90
$(CMP) -module $(OBJ)/ -c $(SRC)/petsc.F90 $(LIB) $(OPT) -o $(OBJ)/petsc.o
#------------------------------------------------------------------------
sc:
@cp -rf * /scratch/scratch_run/akuley_ext/Jaya/G2C3/ScratchVer1.0/
@echo "Copied files to $(SCRATCH_PATH)"
@echo " "
clean:
@rm -f G2C3 ./obj/* ./output/* *.o* *.e* fort.*
@echo "Files cleaned..."
@echo " "
run:
$(JOB_RUN) $(JOB_FILE)
status:
$(JOB_STATUS)