
FC = mpif90

## Intel Composer XE
FFLAGS = -O3 -traceback
LFLAGS = -O3 -mkl

## GCC gfortran
#FFLAGS = -O3
#LFLAGS = -O3

## ScaLAPACK, LAPACK, FFTW
SCALAPACK_LIB = -L/usr/local/scalapack -lscalapack
LAPACK_LIB = -L/usr/local/lapack -llapack -lblas
FFT_LIB = -L/usr/local/fftw/lib -lfftw3

## Intel MKL (intel64)
MKLROOT = /opt/intel/composerxe/mkl
# Intel MKL + OpenMPI
SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_openmpi_lp64
# Intel MKL + Intel MPI
#SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64
LAPACK_LIB = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core
FFT_LIB = -L$(MKLROOT)/interfaces/fftw3xf -lfftw3xf_intel

## Intel MKL (ia32)
#MKLROOT = /opt/intel/composerxe/mkl
# Intel MKL + OpenMPI
#SCALAPACK_LIB = -lmkl_scalapack_core -lmkl_blacs_openmpi
# Intel MKL + Intel MPI
#SCALAPACK_LIB = -lmkl_scalapack_core -lmkl_blacs_intelmpi
#LAPACK_LIB = -lmkl_intel -lmkl_sequential -lmkl_core
#FFT_LIB = -L$(MKLROOT)/interfaces/fftw3xf -lfftw3xf_intel

LIBS = $(SCALAPACK_LIB) $(LAPACK_LIB) $(FFT_LIB)

MODS_AC	= mod_ac_misc.o \
	mod_ac_mpi.o

OBJS_AC = ac_main.o \
	ac_atom.o \
	ac_base.o \
	ac_density.o \
        ac_atommatrix.o \
	ac_bandmatrix.o \
	ac_densitymatrix.o \
	ac_element.o \
	ac_energy.o \
	ac_exchange.o \
	ac_ewald.o \
	ac_hamiltonian.o \
	ac_hartree.o \
	ac_potential.o \
	ac_param.o \
	ac_force.o \
	ac_fft.o \
        ac_sbessel.o \
	ac_spline.o \
        ac_radial.o \
	ac_gauleg.o \
	ac_vector3d.o \
	ac_dos.o \
	ac_screening.o \
	ac_phonon.o \
	ac_tmp.o

MODS_AS = mod_mod_mpi.o \
	mod_condition.o \
	mod_condition_ini.o \
	mod_hamiltonian_c.o \
	mod_hamiltonian_e.o \
        mod_hamiltonian_sgf.o \
	mod_hamiltonian_temp.o \
	mod_hamiltonian_zper.o \
        mod_constant.o \
	mod_dft.o \
	mod_eigen_values.o \
	mod_fft.o mod_gf_se_c.o \
        mod_gsp_parameter.o \
        mod_locate_atom.o \
	mod_rtbh_parameter.o \
	mod_scf_negf.o \
        mod_surface_green_function.o

OBJS_AS =  cal_gf_se_c.o \
	cal_gf_se_c_scf.o \
	cal_hamiltonian.o cal_iv.o \
        cal_print_text.o \
	cal_vhart_easier.o \
	cal_vhartree.o \
	cal_vother.o \
        dens_atom2cell_lr.o \
	ep_l.o fourier_pot.o \
        green_function_scf.o \
	gsp_hami.o \
	gsp_hamiltonian.o \
	inverse_mat.o \
        iteration_ini.o \
	linear_equation.o \
	made_fourier.o \
	make_scf_omega_c.o \
	make_scf_ksampling_c.o \
	mat_mul.o \
	myclock.o output_print.o \
        print_site.o \
	print_text.o \
	print_text_lr.o \
        read_input_condition_ini.o \
	read_input_tb_cordinate.o \
	read_tb_parameter.o \
        rtbh_hami.o \
	rtbh_hamiltonian.o \
	save_hamiltonian_sgf.o \
	scf_main_negf.o \
        selfenergy_l.o \
	selfenergy_r.o \
	set_bound_cell_lr.o \
        set_chemical_potential.o \
	set_condition.o \
	set_fft.o \
	set_for_gf_se_c.o \
        set_hami_c_cc.o \
	set_hami_c_cc_input.o \
	set_hami_c_cc_scf.o \
        set_hami_c_llrr.o \
	set_hami_c_pre.o \
	set_hamiltonian.o \
        set_hamiltonian_temp.o \
	set_hamiltonian_zper.o \
	set_locate_atom.o \
        set_mat.o \
	set_parameter.o \
	set_scf_accel.o \
        set_scf_general.o \
	su_gf.o \
	trans.o \
	unset.o \
	get_negfordft.o \
        ac2as.o

all: ascot accel

accel: $(MODS_AC) $(OBJS_AC) accel.o 
	$(FC) $(LFLAGS) -o $@ accel.o $(MODS_AC) $(OBJS_AC) $(LIBS)

ascot: $(MODS_AC) $(OBJS_AC) $(MODS_AS) $(OBJS_AS) ascot.o 
	$(FC) $(LFLAGS) -o $@ ascot.o $(MODS_AC) $(OBJS_AC) $(MODS_AS) $(OBJS_AS) $(LIBS)

.SUFFIXES: .o .f90

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

clean:
	-\rm -f *.o *.mod

install:
	mv ascot ../bin
	mv accel ../bin
