#
# Declaration de l'extension
.SUFFIXES:.f90

# Compilateur et editeur de liens
FC         = xlf90_r
FLD        = $(FC)

RM         = /usr/bin/rm -f

#
# COMPILATION
#

# Options d'optimisation
OLEV       = -qhot -O3 -qtune=auto -qarch=auto -qcache=auto
FOPT       = -qstrict
FOPT       = 

FMAX       = -qipa
FMAX       = 

# Options de parallelisation
OPAR       = -qsmp=omp

# Options de deboguage
ODEB       = -qnooptimize
FDEB       = -qcheck -qdbg -qextchk -qfullpath -qundef \
	-qflttrap=:ov:und:zero:inv:en -qinitauto=FF

# Options de portage
OPRT       = -qautodbl=dbl4 -qdpc=e
OPRT       =

# Options d'entrees / sorties du compilateur
OES        = -qfree=f90 -qsuffix=f=f90

# Options de listing
OLST       = -qlistopt -qreport=hotlist -qsource
OLST       = 

# Options de profilage
PROF       = -pg -qfullpath -qdbg
PROF       = -qfullpath -qdbg

# Options compilation
FFLAGS     = $(OLEV) $(FOPT) $(FMAX) $(OPAR) $(OPRT) $(PROF) $(OES) $(OLST)

#
# EDITION DES LIENS
#

# Librairies Fortran
LIBS      = -lmass

# Option optimisation
LDLEV     = $(OLEV)

# Option de portage
LDREN     = -brename:.flush,.flush_ 
LDREN     = 

# Options memoire
LDMEM     = -bmaxdata:0x50000000
LDMEM     = 

# Options editions des liens
LDFLAGS   = $(LDLEV) $(LDMEM) $(OPAR) $(LDREN) $(PROF)


# Includes Fortran
FHDRS      =

# objects Fortran
FOBJS      = \
	numerics.o \
	assign_ptr.o \
	boucle.o \
	domaine.o\
	equilibrage.o \
	fctft.o \
	fctfx.o \
	fctut.o \
	gm_cart_shift.o \
	gm_coords_create.o \
	gm_dims_create.o \
	gradconj.o \
	nprime.o \
	nrmerr.o \
	p_comm.o \
	pmv.o \
	prodscal.o \
	saxpy.o \
	scdmb.o \
	tri.o \
	u_comm.o \
	voisinage.o \
	main.o

# sources Fortran
FSRCS      = \
	numerics.f90 \
	assign_ptr.f90 \
	boucle.f90 \
	domaine.f90\
	equilibrage.f90 \
	fctft.f90 \
	fctfx.f90 \
	fctut.f90 \
	gm_cart_shift.f90 \
	gm_coords_create.f90 \
	gm_dims_create.f90 \
	gradconj.f90 \
	nprime.f90 \
	nrmerr.f90 \
	p_comm.f90 \
	pmv.f90 \
	prodscal.f90 \
	saxpy.f90 \
	scdmb.f90 \
	tri.f90 \
	u_comm.f90 \
	voisinage.f90 \
	main.f90

# compilation Fortran
.f90.o:
	$(FC) $(FFLAGS) $< -c

# link Fortran
EXEC = C3Dgc_3omp.out
DEST = ../bin

all: 	$(FOBJS)
	$(FLD) $(LDFLAGS) $(FOBJS) $(LIBS) -o $(EXEC)
	mv $(EXEC) $(DEST)

# nettoyage
clean:
	$(RM) $(FOBJS) $(EXEC) *.mod

###
numerics.o: numerics.f90
	$(FC) -c $(FFLAGS) numerics.f90
assign_ptr.o: assign_ptr.f90 comthd.h
	$(FC) -c $(FFLAGS) assign_ptr.f90
boucle.o: boucle.f90 comthd.h i_gm_dims_create.h i_gm_coords_create.h i_domaine.h i_voisinage.h i_assign_ptr.h i_fctfx.h i_nrmerr.h i_u_comm.h i_scdmb.h i_gradconj.h
	$(FC) -c $(FFLAGS) boucle.f90
domaine.o: domaine.f90 numerics.o comthd.h i_equilibrage.h
	$(FC) -c $(FFLAGS) domaine.f90
equilibrage.o: equilibrage.f90 comthd.h
	$(FC) -c $(FFLAGS) equilibrage.f90
fctft.o: fctft.f90 numerics.o
	$(FC) -c $(FFLAGS) fctft.f90
fctfx.o: fctfx.f90 numerics.o comthd.h
	$(FC) -c $(FFLAGS) fctfx.f90
fctut.o: fctut.f90 numerics.o
	$(FC) -c $(FFLAGS) fctut.f90
gm_cart_shift.o: gm_cart_shift.f90 numerics.o
	$(FC) -c $(FFLAGS) gm_cart_shift.f90
gm_coords_create.o: gm_coords_create.f90 numerics.o comthd.h
	$(FC) -c $(FFLAGS) gm_coords_create.f90
gm_dims_create.o: gm_dims_create.f90 numerics.o i_nprime.h i_tri.h
	$(FC) -c $(FFLAGS) gm_dims_create.f90
gradconj.o: gradconj.f90 numerics.o comthd.h i_pmv.h i_saxpy.h i_prodscal.h
	$(FC) -c $(FFLAGS) gradconj.f90
main.o  : main.f90 numerics.o comthd.h i_boucle.h
	$(FC) -c $(FFLAGS) main.f90
nprime.o: nprime.f90
	$(FC) -c $(FFLAGS) nprime.f90
nrmerr.o: nrmerr.f90 numerics.o comthd.h i_fctut.h
	$(FC) -c $(FFLAGS) nrmerr.f90
p_comm.o : p_comm.f90 numerics.o comthd.h
	$(FC) -c $(FFLAGS) p_comm.f90
pmv.o: pmv.f90 numerics.o comthd.h
	$(FC) -c $(FFLAGS) pmv.f90
prodscal.o: prodscal.f90 numerics.o comthd.h
	$(FC) -c $(FFLAGS) prodscal.f90
saxpy.o: saxpy.f90 numerics.o comthd.h
	$(FC) -c $(FFLAGS) saxpy.f90
scdmb.o: scdmb.f90 numerics.o comthd.h i_pmv.h i_fctft.h
	$(FC) -c $(FFLAGS) scdmb.f90
tri.o: tri.f90
	$(FC) -c $(FFLAGS) tri.f90
u_comm.o: u_comm.f90 numerics.o comthd.h
	$(FC) -c $(FFLAGS) u_comm.f90
voisinage.o: voisinage.f90 numerics.o comthd.h i_gm_cart_shift.h
	$(FC) -c $(FFLAGS) voisinage.f90

