.SUFFIXES:
.SUFFIXES: .o .F .f .F90 .f90 .c .mod

F90 =  mpifrtpx
CC  = mpifccpx
CPP  = /usr/bin/cpp -P -C -traditional
AR  = ar qv
LINK     = mpifrtpx
F90FLAGS = -Kfast,parallel,ocl,preex,array_private,auto,simd=2,openmp,mfunc=2 -c -V -Qa,d,i,p,t,x -Koptmsg=2 #-W0,-zprl=Src2ex
F77FLAGS = -Kfast,parallel,ocl,preex,array_private,auto,simd=2,openmp,mfunc=2 -X9 -c -V -Qa,d,i,p,t,x -Koptmsg=2 #-W0,-zprl=Src2ex
#F90FLAGS =  -O3
#F77FLAGS =  -O3
CFLAGS   = -Kfast,parallel,ocl,preex,array_private,auto,simd=2,openmp,mfunc=2 -DINTEL #-W0,-zprl=Src2ex
ESM=NO
ifdef ESM
CPPESM=-DENABLE_ESM_PACK
LESM=-lesm
else
CPPESM=
endif

MKLHOME=/work/opt/intel/composerxe/mkl/lib/intel64
INCLUDE=-I/work/opt/intel/composerxe/mkl/include/fftw

KOPT   = -DUSE_PROF -DFFT_ALLTOALL -Ntl_trt -DUSE_ALLTOALLV  #-DUSE_MEM #-DUSE_TOFUPA #-DUSE_WTIME #-DEIGEN_TRANS#-DFFTW_NOSTRIDE #-DFFT_USE_SSL2 #-DFFT_3D_DIVISION #-DUSE_NONBLK_COMM
CPPFLAGS0  = -DLinux -DFFTW3 -D_POT_SMOOTHING_ -DTRANSPOSE  -DGGA_ATOMIC_WITH_NEW_GNCPP -DREMOVE_PC_FROM_FORCE -D_USE_LAPACK_  -D_LDOS_ -D_DETAIL_GGA_TIMING_ -D_HEAP_SORT_ \
 -DUSE_NONBLK_COMM -DDEBUG_ERRORS -D_MEMORY_CONSUMPTION_CHECK_ -DWO_OP_MOMENT -D_USE_SCALAPACK_ -D_MPIFFT_
CPPFLAGS = $(CPPFLAGS0) $(KOPT) 
!CPPFLAGS = -D_USE_DATE_AND_TIME_ -DLinux -DFFTW3 -D_POT_SMOOTHING_  -DGGA_ATOMIC_WITH_NEW_GNCPP -DREMOVE_PC_FROM_FORCE -D_USE_LAPACK_ -D_POSITRON_ -D_FAST_WAY_ -D_MPIFFT_ -D_USE_SCALAPACK_ -DUSE_NONBLK_COMM -Dforsafe -D_HEAP_SORT_ -DFFT_ALLTOALL -DPOST3D ${CPPESM}
LFLAGS   = -Kfast,parallel,ocl,preex,array_private,auto,simd=2,openmp,mfunc=2 -DINTEL #-W0,-zprl=Src2ex
!LIBS = -L./ ${LESM} -Wl,--start-group ${MKLHOME}/libmkl_scalapack_lp64.a ${MKLHOME}/libmkl_blacs_intelmpi_lp64.a ${MKLHOME}/libmkl_intel_lp64.a  ${MKLHOME}/libmkl_sequential.a  ${MKLHOME}/libmkl_core.a -Wl,--end-group -Bdynamic -lpthread
LIBS      = -Kopenmp -lm -SSL2MPI -SSL2BLAMP -SCALAPACK \
 -L/home/apps/fftw/3.3/lib64 -lfftw3 -lfftw3_omp -lfftw3_mpi $(KLINK) $(EIGEN_LIBS) #/opt/FJSVtclang/GM-1.2.0-13/lib64/libtofupa.o
###########################################################################
###<< PLEASE CHANGE THE VARIABLES ABOVE ACCORDING TO YOUR ENVIRONMENT >>###
###########################################################################
ifdef ESM
ESM_LIB = libesm.a
else
ESM_LIB =
endif
LAPACK = 
FFTOBJECT = mpifft.o

OBJ_INPUTPARSE = input_parse.o

PHASE_LOWER_MODULES = m_Const_Parameters.o   m_ErrorMessages.o  m_Parallelization.o \
m_IterationNumbers.o #z_tool_timer.o

PHASE_UPPER_MODULES = \
m_Control_Parameters.o   m_Files.o                m_Timing.o \
m_Crystal_Structure.o    m_FFT.o                  m_Ionic_System.o \
m_CS_SpaceGroup.o        m_CS_NonCollinear.o \
m_Orbital_QuantumNum.o  \
m_Kpoints.o              m_PseudoPotential.o      m_PlaneWaveBasisSet.o \
m_Realspace.o \
m_SpinOrbit_Potential.o  m_SpinOrbit_FromFile.o  \
m_ES_NonCollinear.o \
m_NonLocal_Potential.o   m_Electronic_Structure.o \
m_ES_nonlocal.o	 	 m_ES_ortho.o  m_ES_wf_extrpl.o m_ES_initialWF.o 	\
m_ES_occup.o \
m_FiniteElectricField.o \
m_ES_ExactExchange.o \
m_ES_WF_by_SDorCG.o      m_ES_WF_by_Davidson.o \
m_ES_WF_by_ModifiedDavidson.o m_ES_WF_by_RMM.o \
m_epc_potential.o        \
m_Positron_Wave_Functions.o \
m_Charge_Density.o       m_CD_mixing.o m_Dipole.o               m_Orbital_Population.o \
m_CD_Mag_Moment.o \
m_Screening_FFT.o        m_Screening.o      m_External_Potential.o \
m_ES_LHXC.o              m_ES_Intgr_VlhxcQlm.o    m_ES_IO.o \
m_ES_WF_by_MatDiagon.o   m_ES_dos.o               m_Hubbard.o \
m_KineticEnergy_Density.o  \
m_vdWDF.o \
m_Ldos.o                 m_XC_Potential.o         \
string.o m_db.o \
m_PAW_Tecplot.o m_PAW_ChargeDensity.o m_PAW_Hartree.o  \
m_PAW_XC_Potential.o \
m_SpinOrbit_RadInt.o \
m_OP_Moment.o \
m_ES_Mag_Constraint.o  \
m_Total_Energy.o \
m_Force.o                m_Stress.o               m_ES_WF_by_submat.o \
m_constraints.o \
m_ELF.o \
m_BerryPhase.o           m_BP_Properties.o \
m_Representation.o       m_Raman.o            m_Phonon.o \
m_Wannier.o  m_Replica.o Renewal_of_ChgCtrlParam.o \
m_LinearResponse_Control.o  \
m_LinearResponse_Qpt.o  \
m_rttddft.o \
m_Potential_Mixing.o       m_ThomasFermiW_Potential.o 


PHASE_F_SUBROUTINES = Preparation.o \
InputData_Analysis.o           PseudoPotential_Construction.o

PHASE_F_OTHERSUBS  = mdmain.o     constraint_main.o meta_dynamics.o NEB.o Preparation_for_mpi.o \
Preparation_for_ESM.o \
scf_routines.o \
bottom_Subroutines.o              \
spline.o \
b_Crystal_Structure.o             b_Electronic_Structure.o \
b_Words.o                         b_PseudoPotential.o \
b_PseudoPotential_EXX.o \
b_Fermi.o                         b_Kpoints.o \
b_PlaneWaveBasisSet.o             b_Ionic_System.o \
b_XC_Potential.o                  b_PAW_XC_Potential.o \
b_XC_OmegaPBE.o  \
b_XC_metagga.o                    memsize.o \
b_Ldos_f77.o\
input_interface.o                 Initialization.o \
WriteDownData_onto_Files.o        Ewald_and_Structure_Factor.o \
Initial_Electronic_Structure.o \
Renewal_of_WaveFunctions.o \
Renewal_of_pWaveFunctions.o \
IterationNumbers_Setting.o        ChargeDensity_Construction.o \
ChargeDensity_Mixing.o            Renewal_of_Potential.o \
Renewal_of_Hubbard_Potential.o    Renewal_of_OccMat.o \
Renewal_of_pPotential.o           Renewal_of_Hubbard_Parameters.o \
Convergence_Check.o               Forces.o \
Move_Ions.o                       Initial_MD_Condition.o \
Stress.o                          Postprocessing.o \
Finalization_of_mpi.o             miscellaneous.o\
b_BerryPhase.o \
heap_sort.o                       real_spherical_harmonics.o \
Real_space_integ.o                crotylm.o \
screening_correction.o \
mpi_dummy.o                            WriteDownData_onto_Files_ek.o \
GaussLeg.o lib_int_deri_add.o  \
rttddft_main.o \
Potential_Construction.o        Potential_Mixing.o             ThomasFermiWeiz.o \
Epsilon_postscf.o vdW.o

# for vc_nl
NLOBJ = vc_nl.o

ifndef SX_DGEMM
PHASE_OBJECTSF77 = \
b_PseudoPotential_f77.o \
b_Force_f77.o \
rmmsubs.o \
gncpp_xc_gga_rad.o  \
decfft_ent.o \
spg+tetra.o
else
PHASE_OBJECTSF77 = \
b_PseudoPotential_f77.o \
b_Force_f77.o \
rmmsubs.o \
decfft_ent.o \
gncpp_xc_gga_rad.o  \
spg+tetra.o \
dgemm__.o 
endif

EKCAL_LOWER_MODULES = m_Const_Parameters.o   m_ErrorMessages.o m_Parallelization.o \
m_IterationNumbers.o

EKCAL_UPPER_MODULES = \
m_Control_Parameters.o   m_Files.o                m_Timing.o \
m_Crystal_Structure.o    m_FFT.o                  m_Ionic_System.o \
m_CS_SpaceGroup.o        m_CS_NonCollinear.o \
m_Kpoints.o              m_PseudoPotential.o      m_PlaneWaveBasisSet.o \
m_Realspace.o \
m_SpinOrbit_Potential.o \
m_ES_NonCollinear.o \
m_NonLocal_Potential.o   m_Electronic_Structure.o \
m_ES_nonlocal.o	 	 m_ES_ortho.o  m_ES_wf_extrpl.o m_ES_initialWF.o 	\
m_FiniteElectricField.o \
m_ES_ExactExchange.o \
m_ES_occup.o             m_ES_WF_by_SDorCG.o      m_ES_WF_by_Davidson.o \
m_ES_WF_by_ModifiedDavidson.o m_ES_WF_by_RMM.o \
m_epc_potential.o \
m_Positron_Wave_Functions.o \
m_Charge_Density.o       m_CD_mixing.o m_Dipole.o               m_Orbital_Population.o \
m_Screening_FFT.o        m_Screening.o      m_External_Potential.o \
m_ES_LHXC.o              m_ES_Intgr_VlhxcQlm.o    m_ES_IO.o \
m_ES_WF_by_MatDiagon.o   m_ES_dos.o               m_Hubbard.o \
m_KineticEnergy_Density.o  \
m_Ldos.o                 m_XC_Potential.o         \
string.o m_db.o \
m_PAW_Tecplot.o m_PAW_ChargeDensity.o m_PAW_Hartree.o  \
m_PAW_XC_Potential.o \
m_SpinOrbit_RadInt.o \
m_CD_Mag_Moment.o \
m_ES_Mag_Constraint.o  \
m_constraints.o \
m_Total_Energy.o \
m_OP_Moment.o \
m_Force.o                m_Stress.o m_ES_WF_by_submat.o\
m_ELF.o                  m_Wannier.o \
m_BerryPhase.o           m_BP_Properties.o \
m_Representation.o       m_Phonon.o \
m_LinearResponse_Control.o  \
m_LinearResponse_Qpt.o \
m_Potential_Mixing.o       m_ThomasFermiW_Potential.o 


EKCAL_F_SUBROUTINES = Preparation.o \
InputData_Analysis.o           PseudoPotential_Construction.o

EKCAL_F_OTHERSUBS  = ekmain.o    constraint_main.o            Preparation_for_mpi.o \
scf_routines.o \
bottom_Subroutines.o                   \
spline.o \
b_Crystal_Structure.o                  b_Electronic_Structure.o \
b_Words.o                              b_PseudoPotential.o \
b_PseudoPotential_EXX.o \
b_Fermi.o                              b_Kpoints.o \
b_PlaneWaveBasisSet.o                  b_Ionic_System.o \
b_XC_Potential.o                       b_PAW_XC_Potential.o \
b_XC_OmegaPBE.o  \
b_XC_metagga.o \
b_Ldos_f77.o \
input_interface.o                      Initialization.o \
Ewald_and_Structure_Factor.o \
Initial_Electronic_Structure.o         Renewal_of_WaveFunctions.o \
IterationNumbers_Setting.o \
ChargeDensity_Construction.o                 Renewal_of_Potential.o \
ChargeDensity_Mixing.o \
Renewal_of_Hubbard_Potential.o         Renewal_of_OccMat.o \
Convergence_Check.o                    Forces.o \
WriteDownData_onto_Files.o \
Initial_MD_Condition.o                 WriteDownData_onto_Files_ek.o\
Stress.o                               Postprocessing.o \
Finalization_of_mpi.o \
miscellaneous.o \
b_BerryPhase.o \
heap_sort.o                            real_spherical_harmonics.o \
Real_space_integ.o                     crotylm.o \
screening_correction.o \
mpi_dummy.o \
GaussLeg.o lib_int_deri_add.o \
ThomasFermiWeiz.o       Renewal_of_ChgCtrlParam.o

ifndef SX_DGEMM
EKCAL_OBJECTSF77 = \
b_PseudoPotential_f77.o \
b_Force_f77.o \
rmmsubs.o                              spg+tetra.o \
gncpp_xc_gga_rad.o  \
decfft_ent.o
else
EKCAL_OBJECTSF77 = \
b_PseudoPotential_f77.o \
b_Force_f77.o \
rmmsubs.o                              spg+tetra.o \
decfft_ent.o \
gncpp_xc_gga_rad.o  \
dgemm__.o 
endif


EPS_LOWER_MODULES = m_Const_Parameters.o   m_ErrorMessages.o m_Parallelization.o \
m_IterationNumbers.o

EPS_UPPER_MODULES = \
m_Control_Parameters.o   m_Files.o                m_Timing.o \
m_Crystal_Structure.o    m_FFT.o                  m_Ionic_System.o \
m_CS_SpaceGroup.o        m_CS_NonCollinear.o \
m_Kpoints.o              m_PseudoPotential.o      m_PlaneWaveBasisSet.o \
m_Realspace.o \
m_SpinOrbit_Potential.o \
m_ES_NonCollinear.o \
m_NonLocal_Potential.o   m_Electronic_Structure.o \
m_ES_nonlocal.o	 	 m_ES_ortho.o  m_ES_wf_extrpl.o m_ES_initialWF.o 	\
m_FiniteElectricField.o \
m_Positron_Wave_Functions.o \
m_ES_ExactExchange.o \
m_ES_occup.o             m_ES_WF_by_SDorCG.o      m_ES_WF_by_Davidson.o \
m_ES_WF_by_ModifiedDavidson.o m_ES_WF_by_RMM.o \
m_ES_LHXC.o              m_ES_Intgr_VlhxcQlm.o    m_ES_IO.o \
m_ES_dos.o               m_Hubbard.o \
m_epc_potential.o \
m_Charge_Density.o       m_CD_mixing.o m_XC_Potential.o \
string.o m_db.o \
m_PAW_Tecplot.o m_PAW_ChargeDensity.o m_PAW_Hartree.o  \
m_PAW_XC_Potential.o \
m_SpinOrbit_RadInt.o \
m_CD_Mag_Moment.o \
m_ES_Mag_Constraint.o  \
m_Total_Energy.o \
m_OP_Moment.o \
m_Force.o          m_Stress.o      m_ES_WF_by_submat.o      m_ES_WF_by_MatDiagon.o \
m_KineticEnergy_Density.o  \
m_Ldos.o                 m_ELF.o \
m_constraints.o \
m_BerryPhase.o           m_BP_Properties.o \
m_Representation.o       m_Phonon.o               m_Dipole.o \
m_Orbital_Population.o   \
m_Screening_FFT.o        m_Screening.o      m_External_Potential.o \
m_Wannier.o m_Wannier90.o \
m_CoreLevel_Spectrum.o \
m_ES_occup_EPS.o         m_Epsilon_ek.o \
m_LinearResponse_Control.o  \
m_LinearResponse_Qpt.o \
m_Potential_Mixing.o       m_ThomasFermiW_Potential.o 

EPS_F_SUBROUTINES = Preparation.o \
InputData_Analysis.o           PseudoPotential_Construction.o

EPS_F_OTHERSUBS  = epsmain.o           constraint_main.o Preparation_for_mpi.o \
scf_routines.o \
bottom_Subroutines.o                   \
spline.o \
b_Crystal_Structure.o                  b_Electronic_Structure.o \
b_Words.o                              b_PseudoPotential.o \
b_PseudoPotential_EXX.o \
b_Fermi.o                              b_Kpoints.o \
b_PlaneWaveBasisSet.o                  b_Ionic_System.o \
b_XC_Potential.o                       b_PAW_XC_Potential.o \
b_XC_OmegaPBE.o  \
b_XC_metagga.o \
b_Ldos_f77.o \
input_interface.o                      Initialization.o \
Ewald_and_Structure_Factor.o \
Initial_Electronic_Structure.o         Renewal_of_WaveFunctions.o \
IterationNumbers_Setting.o \
ChargeDensity_Construction.o                 Renewal_of_Potential.o \
ChargeDensity_Mixing.o \
Renewal_of_Hubbard_Potential.o         Renewal_of_OccMat.o \
Convergence_Check.o                    Forces.o \
WriteDownData_onto_Files.o \
Initial_MD_Condition.o                 WriteDownData_onto_Files_ek.o\
Stress.o                               Postprocessing.o \
Finalization_of_mpi.o \
miscellaneous.o \
b_BerryPhase.o \
heap_sort.o                            real_spherical_harmonics.o \
Real_space_integ.o                     crotylm.o \
screening_correction.o \
Initialization_Epsilon.o               Shift_Kpoint.o \
Reset_Kpoint.o                         Preparation_for_Calc_Epsilon.o \
Transition_moment_Epsilon.o            Calc_Epsilon.o \
Nonlinear_Optics_Epsilon.o             WriteDownData_onto_Files_Epsilon.o \
PseudoPotential_ek_Epsilon.o           Dealloc_Radr_and_Wos_Epsilon.o \
ThomasFermiWeiz.o         Renewal_of_ChgCtrlParam.o  \
mpi_dummy.o \
GaussLeg.o lib_int_deri_add.o

ifndef SX_DGEMM
EPS_OBJECTSF77 = \
b_PseudoPotential_f77.o \
b_Force_f77.o \
rmmsubs.o                              spg+tetra.o \
decfft_ent.o \
gncpp_xc_gga_rad.o  
else
EPS_OBJECTSF77 = \
b_PseudoPotential_f77.o \
b_Force_f77.o \
rmmsubs.o                              spg+tetra.o \
decfft_ent.o \
gncpp_xc_gga_rad.o  \
dgemm__.o
endif


TDLR_LOWER_MODULES = m_Const_Parameters.o   m_ErrorMessages.o m_Parallelization.o \
m_IterationNumbers.o

TDLR_UPPER_MODULES = \
m_Control_Parameters.o   m_Files.o                m_Timing.o \
m_Crystal_Structure.o    m_FFT.o                  m_Ionic_System.o \
m_CS_SpaceGroup.o        m_CS_NonCollinear.o \
m_Kpoints.o              m_PseudoPotential.o      m_PlaneWaveBasisSet.o \
m_Realspace.o \
m_SpinOrbit_Potential.o \
m_ES_NonCollinear.o \
m_NonLocal_Potential.o   m_Electronic_Structure.o \
m_ES_nonlocal.o	 	 m_ES_ortho.o  m_ES_wf_extrpl.o m_ES_initialWF.o 	\
m_FiniteElectricField.o \
m_Positron_Wave_Functions.o \
m_ES_ExactExchange.o \
m_ES_occup.o             m_ES_WF_by_SDorCG.o      m_ES_WF_by_Davidson.o \
m_ES_WF_by_ModifiedDavidson.o m_ES_WF_by_RMM.o \
m_ES_LHXC.o              m_ES_Intgr_VlhxcQlm.o    m_ES_IO.o \
m_ES_dos.o               m_Hubbard.o \
m_epc_potential.o \
m_Charge_Density.o       m_CD_mixing.o m_XC_Potential.o \
string.o m_db.o \
m_PAW_Tecplot.o m_PAW_ChargeDensity.o m_PAW_Hartree.o  \
m_PAW_XC_Potential.o \
m_SpinOrbit_RadInt.o \
m_CD_Mag_Moment.o \
m_ES_Mag_Constraint.o  \
m_Total_Energy.o \
m_OP_Moment.o \
m_Force.o                m_Stress.o m_ES_WF_by_submat.o      m_ES_WF_by_MatDiagon.o \
m_UnitCell.o \
m_KineticEnergy_Density.o  \
m_Ldos.o                 m_ELF.o \
m_constraints.o \
m_BerryPhase.o           m_BP_Properties.o \
m_Representation.o       m_Phonon.o               m_Dipole.o \
m_Orbital_Population.o   m_Wannier.o m_Wannier90.o \
m_Screening_FFT.o        m_Screening.o      m_External_Potential.o \
m_ES_occup_EPS.o        \
m_LinearResponse_Control.o  \
m_LinearResponse_Qpt.o \
m_LinearResponse_Tools.o     m_LinearResponse_Density.o  \
m_LinearResponse_NonInt.o    m_LinearResponse_ALDA.o \
m_LinearResponse_Kernel.o    m_LinearResponse_BS.o \
m_LinearResponse_Spectrum.o \
m_Potential_Mixing.o       m_ThomasFermiW_Potential.o 

TDLR_F_SUBROUTINES = Preparation.o \
InputData_Analysis.o           PseudoPotential_Construction.o \

TDLR_F_OTHERSUBS  = tdlrmain.o         constraint_main.o  Preparation_for_mpi.o \
scf_routines.o \
bottom_Subroutines.o                   \
spline.o \
b_Crystal_Structure.o                  b_Electronic_Structure.o \
b_Words.o                              b_PseudoPotential.o \
b_PseudoPotential_EXX.o \
b_Fermi.o                              b_Kpoints.o \
b_PlaneWaveBasisSet.o                  b_Ionic_System.o \
b_XC_Potential.o                       b_PAW_XC_Potential.o \
b_XC_OmegaPBE.o  \
b_XC_metagga.o \
b_Ldos_f77.o \
input_interface.o                      Initialization.o \
Ewald_and_Structure_Factor.o \
Initial_Electronic_Structure.o         Renewal_of_WaveFunctions.o \
IterationNumbers_Setting.o \
ChargeDensity_Construction.o                 Renewal_of_Potential.o \
ChargeDensity_Mixing.o \
Renewal_of_Hubbard_Potential.o         Renewal_of_OccMat.o \
Convergence_Check.o                    Forces.o \
WriteDownData_onto_Files.o \
Initial_MD_Condition.o                 WriteDownData_onto_Files_ek.o \
Stress.o                               Postprocessing.o \
Finalization_of_mpi.o \
miscellaneous.o \
b_BerryPhase.o \
heap_sort.o                            real_spherical_harmonics.o \
Real_space_integ.o                     crotylm.o \
screening_correction.o \
PseudoPotential_ek_Epsilon.o           \
mpi_dummy.o \
GaussLeg.o lib_int_deri_add.o \
ThomasFermiWeiz.o       Renewal_of_ChgCtrlParam.o \
b_LinearResponse_Kernel.o  b_LinearResponse_exc.o \
LinearResponse_Proc.o     LinearResponse_Spec.o

ifndef SX_DGEMM
TDLR_OBJECTSF77 = \
b_PseudoPotential_f77.o \
b_Force_f77.o \
rmmsubs.o                              spg+tetra.o \
decfft_ent.o \
gncpp_xc_gga_rad.o  
else
TDLR_OBJECTSF77 = \
b_PseudoPotential_f77.o \
b_Force_f77.o \
rmmsubs.o                              spg+tetra.o \
decfft_ent.o \
gncpp_xc_gga_rad.o  \
dgemm__.o
endif


PHASE_OBJECTS = $(FFTOBJECT) $(PHASE_LOWER_MODULES) $(PHASE_UPPER_MODULES) $(PHASE_F_SUBROUTINES) $(PHASE_F_OTHERSUBS) $(PHASE_OBJECTSF77) $(OBJ_INPUTPARSE)

EKCAL_OBJECTS = $(FFTOBJECT) $(EKCAL_LOWER_MODULES) $(EKCAL_UPPER_MODULES) $(EKCAL_F_SUBROUTINES) $(EKCAL_F_OTHERSUBS) $(EKCAL_OBJECTSF77) $(OBJ_INPUTPARSE)

EPS_OBJECTS = $(FFTOBJECT) $(EPS_LOWER_MODULES) $(EPS_UPPER_MODULES) $(EPS_F_SUBROUTINES) $(EPS_F_OTHERSUBS) $(EPS_OBJECTSF77) $(OBJ_INPUTPARSE)

TDLR_OBJECTS = $(FFTOBJECT) $(TDLR_LOWER_MODULES) $(TDLR_UPPER_MODULES) $(TDLR_F_SUBROUTINES) $(TDLR_F_OTHERSUBS) $(TDLR_OBJECTSF77) $(OBJ_INPUTPARSE)

all : phase
#all : phase epsmain

ifdef ESM
phase : $(ESM_LIB) $(LAPACK) $(PHASE_OBJECTS) $(NLOBJ)
	$(LINK) $(PHASE_OBJECTS) $(NLOBJ) $(LFLAGS) $(LIBS) -o $@
else
phase : $(LAPACK) $(PHASE_OBJECTS) $(NLOBJ)
	$(LINK) $(PHASE_OBJECTS) $(NLOBJ) $(LFLAGS) $(LIBS) -o $@
endif

ekcal : $(LAPACK) $(EKCAL_OBJECTS) $(NLOBJ)
	$(LINK) $(EKCAL_OBJECTS) $(NLOBJ) $(LFLAGS) $(LIBS) -o $@

epsmain : $(LAPACK) $(EPS_OBJECTS) $(NLOBJ)
	$(LINK) $(EPS_OBJECTS) $(NLOBJ) $(LFLAGS) $(LIBS) -o $@

tdlrmain : $(LAPACK) $(TDLR_OBJECTS) $(NLOBJ)
	$(LINK) $(TDLR_OBJECTS) $(NLOBJ) $(LFLAGS) $(LIBS) -o $@

libesm.a:
	cd EsmPack; make INCLUDE="$(INCLUDE)" FORTRAN="$(F90)" LIBFLAG="$(LIBS)" MPIFLAG="-D__MPI__" AR="$(AR)"

liblapack.a:
	cd LAPACK; make F77="$(F90)" F77FLAGS="$(F77FLAGS)" AR="$(AR)"

libblas.a:
	cd BLAS; make F77="$(F90)" F77FLAGS="$(F77FLAGS)" AR="$(AR)"

$(OBJ_INPUTPARSE):$(@:.o=.c) $(@:.o=.h)
	$(CC) -c $(CFLAGS) $(@:.o=.c)

m_ES_Intgr_VlhxcQlm.o : m_ES_Intgr_VlhxcQlm.F90
	$(F90) $(F90FLAGS) $(CPPFLAGS) m_ES_Intgr_VlhxcQlm.F90

m_Force.o : m_Force.F90
	$(F90) $(F90FLAGS) $(CPPFLAGS) -Cpp m_Force.F90 -Knopreex

m_ES_ortho.o : m_ES_ortho.F90
	$(F90) $(F90FLAGS) $(CPPFLAGS) m_ES_ortho.F90

m_ES_WF_by_SDorCG.o : m_ES_WF_by_SDorCG.F90
	$(F90) $(F90FLAGS) $(CPPFLAGS) m_ES_WF_by_SDorCG.F90

m_Electronic_Structure.o : m_Electronic_Structure.F90
	$(F90) $(F90FLAGS) $(CPPFLAGS) m_Electronic_Structure.F90
#	$(F90) $(F90FLAGS) $(CPPFLAGS) m_Electronic_Structure.F90 -Kocl -DFFT_USE_SSL2

m_FFT.o : m_FFT.F90
	$(F90) $(F90FLAGS) $(CPPFLAGS) m_FFT.F90 -DFFT_ALLTOALL
#	$(F90) $(F90FLAGS) $(CPPFLAGS) m_FFT.F90 -Kocl -DFFT_ALLTOALL -DFFT_USE_SSL2 -DFFT_CD_USE_SSL2

m_Parallelization.o : m_Parallelization.F90
	$(F90) $(F90FLAGS) $(CPPFLAGS) -Cpp m_Parallelization.F90 -DFFT_ALLTOALL
#	$(F90) $(F90FLAGS) $(CPPFLAGS) -Cpp m_Parallelization.F90

m_ES_nonlocal.o : m_ES_nonlocal.F90
	$(F90) $(F90FLAGS) $(CPPFLAGS) m_ES_nonlocal.F90

m_Charge_Density.o : m_Charge_Density.F90
	$(F90) $(F90FLAGS) $(CPPFLAGS) m_Charge_Density.F90

m_ES_WF_by_submat.o : m_ES_WF_by_submat.F90
ifeq ($(findstring ex,$(EIGEN_VER)),ex)
	-cp -p libEigen/eigen_$(EIGEN_VER)/*.mod .
endif
	$(F90) $(F90FLAGS) $(CPPFLAGS) m_ES_WF_by_submat.F90

m_XC_Potential.o : m_XC_Potential.F90
	$(F90) $(F90FLAGS) $(CPPFLAGS) m_XC_Potential.F90 -DXC_PACK_FFT

#---
mkl_dfti.o : mkl_dfti.f90
	$(F90) $(F90FLAGS) $*.f90

getclkreg.o : getclkreg.c
	$(CC) $(CFLAGS) -Xg -c getclkreg.c

mkl_dfti.f90 :
	cp $(MKLROOT)/include/mkl_dfti.f90 .

.f.o:
	$(F90) -c $(F77FLAGS) $*.f

.f90.o:
	$(F90) -c $(F90FLAGS) $*.f90

.F.o:
	$(F90) -c $(F77FLAGS) $(CPPFLAGS) $*.F

.F90.o:
	$(F90) -c $(F90FLAGS) $(CPPFLAGS) $*.F90

clean:
	\rm -f *.o *.mod *.a *.lib *.L *.list phase ekcal epsmain tdlrmain
	\cd LAPACK; make clean
	\cd BLAS; make clean
	\cd EsmPack; make clean

install: phase ekcal epsmain tdlrmain
	\mv -f phase ../bin/
	\mv -f ekcal ../bin/
	\mv -f epsmain ../bin/
	\mv -f tdlrmain ../bin/
