1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
# name of the executable and its library
EXEC = beem_ml.exe
LIB = libbeem.a
# compiler parameters
FC = ifort
FFLAGS = -real-size 128 -u
# subroutines' directories
DIR_MULTI = multi_layers
DIR_REST = restsub
DIR_HAM = hamilton
DIR_SURF = surfham
DIR_GREEN = green
DIR_MOD = modules
DIR_77 = hamilton/fortran77
DIR_OBJ = objects
SRC_MAIN = $(wildcard *.f90)
SRC_MULTI = $(wildcard $(DIR_MULTI)/*.f90)
SRC_REST = $(wildcard $(DIR_REST)/*.f90)
SRC_HAM = $(wildcard $(DIR_HAM)/*.f90)
SRC_SURF = $(wildcard $(DIR_SURF)/*.f90)
SRC_GREEN = $(wildcard $(DIR_GREEN)/*.f90)
SRC_77 = $(wildcard $(DIR_77)/*.f)
SRC_MOD = $(wildcard $(DIR_MOD)/*.f90)
OBJ_MULTI = $(patsubst $(DIR_MULTI)/%.f90,$(DIR_OBJ)/%.o,$(SRC_MULTI))
OBJ_REST = $(patsubst $(DIR_REST)/%.f90,$(DIR_OBJ)/%.o,$(SRC_REST))
OBJ_HAM = $(patsubst $(DIR_HAM)/%.f90,$(DIR_OBJ)/%.o,$(SRC_HAM))
OBJ_SURF = $(patsubst $(DIR_SURF)/%.f90,$(DIR_OBJ)/%.o,$(SRC_SURF))
OBJ_GREEN = $(patsubst $(DIR_GREEN)/%.f90,$(DIR_OBJ)/%.o,$(SRC_GREEN))
OBJ_MOD = $(patsubst $(DIR_MOD)/%.f90,$(DIR_OBJ)/%.o,$(SRC_MOD))
OBJ_77 = $(patsubst $(DIR_77)/%.f,$(DIR_OBJ)/%.o,$(SRC_77))
ALL : $(EXEC)
# the module is linked to .o but the real file is .mod.
# It has to be move in object directories. Always delete both at the same time.
$(OBJ_MOD) : $(DIR_OBJ)/%.o : $(DIR_MOD)/%.f90
$(FC) $(FFLAGS) -o $@ -c $<
mv *.mod $(DIR_OBJ)/
# f77 routine
$(OBJ_77) : $(DIR_OBJ)/%.o : $(DIR_77)/%.f
$(FC) $(FFLAGS) -o $@ -c $<
# all f90 routines (depend on module and f77)
$(OBJ_MULTI): $(DIR_OBJ)/%.o : $(DIR_MULTI)/%.f90 $(OBJ_MOD) $(OBJ_77)
$(FC) $(FFLAGS) -o $@ -module $(DIR_OBJ)/ -c $<
$(OBJ_REST) : $(DIR_OBJ)/%.o : $(DIR_REST)/%.f90 $(OBJ_MOD) $(OBJ_77)
$(FC) $(FFLAGS) -o $@ -module $(DIR_OBJ)/ -c $<
$(OBJ_HAM) : $(DIR_OBJ)/%.o : $(DIR_HAM)/%.f90 $(OBJ_MOD) $(OBJ_77)
$(FC) $(FFLAGS) -o $@ -module $(DIR_OBJ)/ -c $<
$(OBJ_SURF) : $(DIR_OBJ)/%.o : $(DIR_SURF)/%.f90 $(OBJ_MOD) $(OBJ_77)
$(FC) $(FFLAGS) -o $@ -module $(DIR_OBJ)/ -c $<
$(OBJ_GREEN): $(DIR_OBJ)/%.o : $(DIR_GREEN)/%.f90 $(OBJ_MOD) $(OBJ_77)
$(FC) $(FFLAGS) -o $@ -module $(DIR_OBJ)/ -c $<
# all object are stored in libbeem.a
$(LIB) : $(OBJ_GREEN) $(OBJ_SURF) $(OBJ_HAM) $(OBJ_REST) $(OBJ_MULTI) $(OBJ_77) $(OBJ_MOD)
xiar -rv $@ $?
# executable is built
$(EXEC) : $(LIB)
$(FC) $(FFLAGS) -o $@ -module $(DIR_OBJ)/ $(SRC_MAIN) -L. $(LIB)
# cleaning :
# make new remove all *.dat
# Needed to run a new calculation, in order to avoid erasing data
.PHONY : clean mrproper new
new :
@echo 'removing *.log and *.dat files:-----------------'
rm -f *.log *.dat
clean :
@echo 'removing *.o and *.mod:-------------------------'
rm -f $(DIR_OBJ)/*.o $(DIR_OBJ)/*.mod
mrproper : clean new
@echo 'removing *.exe and *.a files:-------------------'
rm -f $(EXEC) $(LIB) |
Partager