#! /bin/bash
##--------------------------------------------------------------------------------------------------------------------------------------------------------
# Copyright (C) 2009 - 2024
#
# I. Physikalisches Institut, Universitaet zu Koeln
#
# Produced for the CATS project
#
#
# makefile for compiling the generalized Drude-Lorentz model package
#
#
#
# Who           When        What
#
# T. Moeller    2009-07-07  Initial version
##--------------------------------------------------------------------------------------------------------------------------------------------------------


#  %--------------------------------------------%
#  | The directories to find the various pieces |
#  %--------------------------------------------%
srcdir  = src
bindir  = bin


# %------------------------------%
# | Make our own suffixes' list. |
# %------------------------------%
.SUFFIXES:
.SUFFIXES: .o .f90


# %-----------------------------------------%
# | Various compilation programs and flags. |
# | You need to make sure these are correct |
# | for your system.                        |
# %-----------------------------------------%
SHELL = /bin/bash


## gfortran with flags
ifndef XCLASSFC
    FC = gfortran
else
    FC = ${XCLASSFC}
endif
FFLAGSFORTRAN = -O3 -ffree-form -ffree-line-length-none -Wall -fallow-argument-mismatch

# for using lapack routines like zgeev etc. please provide the liblapack.so library and uncomment the following line
# FFLAGSFORTRAN = -O3 -ffree-form -ffree-line-length-none -Wall -llapack


## define names of executables
EXECSYM = DrudeLorentzGeneral__sym.exe
EXECSYMALL = DrudeLorentzGeneral__sym_all.exe
EXECSYMEPS = DrudeLorentzGeneral__sym_eps-fit.exe
EXECsymFreqDamp = DrudeLorentzGeneral__sym__freq-damping.exe
EXECSYMFreqDampEpsFunc = DrudeLorentzGeneral__sym__freq-damping__eps-Func.exe
EXECsymFreqDampRp = DrudeLorentzGeneral__sym__freq-damping+Rp.exe
EXECsymFreqDampKK = Drude-Lorentz_general__sym__freq-damping+var-dielectr-Fkt.exe
EXECSYMKoch = DrudeLorentzGeneral__sym__Koch-model.exe
EXECSYMVar = DrudeLorentzGeneral__sym__var-dielectr-Fkt.exe
EXECEXT = DrudeLorentzGeneral__extended.exe
EXECEXTNew = DrudeLorentzGeneral__extended__new.exe
EXECASYM = DrudeLorentzGeneral__asym.exe
EXECASYMLT = DrudeLorentzGeneral__asym__last-two.exe
EXECASYMKoch = DrudeLorentzGeneral__asym__Koch-model.exe
EXECASYMVar = DrudeLorentzGeneral__asym__var-dielectr-Fkt.exe
EXECIMAG = DrudeLorentzGeneral__imag.exe
EXECFAC = DrudeLorentzGeneral__factor.exe
EXECMENZEL = DrudeLorentzGeneral__Menzel.exe
EXECEPS = Drude-Lorentz_general__eps-Tensor.exe
EXECEPSFinal = Drude-Lorentz_general__eps-Tensor__final-eps.exe


## define name of source files
FSRCSYM = Drude-Lorentz_general__sym.f90
FSRCSYMALL = Drude-Lorentz_general__sym__all.f90
FSRCSYMEPS = Drude-Lorentz_general__sym__eps-fit.f90
FSRCsymFreqDamp = Drude-Lorentz_general__sym__freq-damping.f90
FSRCSYMFreqDampEpsFunc = Drude-Lorentz_general__sym__freq-damping__eps-Func.f90
FSRCsymFreqDampRp = Drude-Lorentz_general__sym__freq-damping+Rp.f90
FSRCsymFreqDampKK = Drude-Lorentz_general__sym__freq-damping+var-dielectr-Fkt.f90
FSRCSYMKoch = Drude-Lorentz_general__sym__Koch-model.f90
FSRCSYMVar = Drude-Lorentz_general__sym__var-dielectr-Fkt.f90
FSRCEXT = Drude-Lorentz_general__extended.f90
FSRCEXTNew = Drude-Lorentz_general__extended__new.f90
FSRCASYM = Drude-Lorentz_general__asym.f90
FSRCASYMKoch = Drude-Lorentz_general__asym__Koch-model.f90
FSRCASYMLT = Drude-Lorentz_general__asym__last-two.f90
FSRCASYMVar = Drude-Lorentz_general__asym__var-dielectr-Fkt.f90
FSRCIMAG = Drude-Lorentz_general__imag.f90
FSRCFAC = Drude-Lorentz_general__factor.f90
FSRCMENZEL = Drude-Lorentz_general__Menzel.f90
FSRCEPS = Drude-Lorentz_general__eps-Tensor.f90
FSRCEPSFinal = Drude-Lorentz_general__eps-Tensor__final-eps.f90


## define
FOBJ = $(FSRC:.f90=.o)
MFIL = *.mod


##--------------------------------------------------------------------------------------------------------------------------------------------------------
##  make the binaries, clean up the directory and move executables to bin directory


## define make commands
all: sym symALL symEPS symFreqDamp symFreqDampEpsFunc symFreqDampRp symFreqDampKK symKoch symVar asymVar ext extNew asym imag fac menzel Koch eps epsFinal ClearAll move
sym: gfortranSym clean
symALL: gfortranSymALL clean
symEPS: gfortranSymEPS clean
symFreqDamp: gfortransymFreqDamp clean
symFreqDampEpsFunc: gfortranSymFreqDampEpsFunc clean
symFreqDampRp: gfortransymFreqDampRp clean
symFreqDampKK: gfortransymFreqDampKK clean
symKoch: gfortranSymKoch clean
symVar: gfortranSymVar clean
ext: gfortranExt clean
extNew: gfortranExtNew clean
asym: gfortranAsym clean
asymLT: gfortranAsymLT clean
asymVar: gfortranASymVar clean
imag: gfortranImag clean
fac: gfortranFactor clean
menzel: gfortranMenzel clean
Koch: gfortranAsymKoch clean
eps: gfortranEPS clean
epsFinal: gfortranEPSFinal clean


## define compile commands
gfortranSym: $(srcdir)/$(FSRCSYM) Makefile
	$(FC) -o $(EXECSYM) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCSYM)
gfortranSymALL: $(srcdir)/$(FSRCSYMALL) Makefile
	$(FC) -o $(EXECSYMALL) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCSYMALL)
gfortranSymEPS: $(srcdir)/$(FSRCSYMEPS) Makefile
	$(FC) -o $(EXECSYMEPS) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCSYMEPS)
gfortransymFreqDamp: $(srcdir)/$(FSRCsymFreqDamp) Makefile
	$(FC) -o $(EXECsymFreqDamp) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCsymFreqDamp)
gfortranSymFreqDampEpsFunc: $(srcdir)/$(FSRCSYMFreqDampEpsFunc) Makefile
	$(FC) -o $(EXECSYMFreqDampEpsFunc) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCSYMFreqDampEpsFunc)
gfortransymFreqDampRp: $(srcdir)/$(FSRCsymFreqDampRp) Makefile
	$(FC) -o $(EXECsymFreqDampRp) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCsymFreqDampRp)
gfortransymFreqDampKK: $(srcdir)/$(FSRCsymFreqDampKK) Makefile
	$(FC) -o $(EXECsymFreqDampKK) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCsymFreqDampKK)
gfortranSymKoch: $(srcdir)/$(FSRCSYMKoch) Makefile
	$(FC) -o $(EXECSYMKoch) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCSYMKoch)
gfortranSymVar: $(srcdir)/$(FSRCSYMVar) Makefile
	$(FC) -o $(EXECSYMVar) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCSYMVar)
gfortranExt: $(srcdir)/$(FSRCEXT) Makefile
	$(FC) -o $(EXECEXT) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCEXT)
gfortranExtNew: $(srcdir)/$(FSRCEXTNew) Makefile
	$(FC) -o $(EXECEXTNew) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCEXTNew)
gfortranAsym: $(srcdir)/$(FSRCASYM) Makefile
	$(FC) -o $(EXECASYM) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCASYM)
gfortranAsymLT: $(srcdir)/$(FSRCASYMLT) Makefile
	$(FC) -o $(EXECASYMLT) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCASYMLT)
gfortranAsymKoch: $(srcdir)/$(FSRCASYMKoch) Makefile
	$(FC) -o $(EXECASYMKoch) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCASYMKoch)
gfortranASymVar: $(srcdir)/$(FSRCASYMVar) Makefile
	$(FC) -o $(EXECASYMVar) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCASYMVar)
gfortranImag: $(srcdir)/$(FSRCIMAG) Makefile
	$(FC) -o $(EXECIMAG) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCIMAG)
gfortranFactor: $(srcdir)/$(FSRCFAC) Makefile
	$(FC) -o $(EXECFAC) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCFAC)
gfortranMenzel: $(srcdir)/$(FSRCMENZEL) Makefile
	$(FC) -o $(EXECMENZEL) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCMENZEL)
gfortranEPS: $(srcdir)/$(FSRCEPS) Makefile
	$(FC) -o $(EXECEPS) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCEPS)
gfortranEPSFinal: $(srcdir)/$(FSRCEPSFinal) Makefile
	$(FC) -o $(EXECEPSFinal) $(FFLAGSFORTRAN) $(srcdir)/$(FSRCEPSFinal)



## define clean command
clean:
	rm -f $(MFIL)
ClearAll:
	rm -f $(MFIL) *.o


## define move command
move:
	rm -rf $(bindir)/
	mkdir $(bindir)/
	mv *.exe $(bindir)/

##--------------------------------------------------------------------------------------------------------------------------------------------------------
##--------------------------------------------------------------------------------------------------------------------------------------------------------
##--------------------------------------------------------------------------------------------------------------------------------------------------------
