CCC     = g++
f77	= g77
MAKRO  =  -DODESSA
CFLAGS  = -g -O2  $(MAKRO)
CCFLAGS = -g -O2  $(MAKRO)
LIBS = -lginac -lblas   ./libNAG/libnag.a /usr/lib/libf2c.a ./libCVODES/libsundials_cvodes.a ./libCVODES/libsundials_nvecserial.a ./libCVODES/libsundials_shared.a

%.o: %.cc *.h makefile
	@echo -n [Compiling] $< 
	@$(CCC) $(CCFLAGS) -o $@ -c $<
	@echo " ...done."

MODULES = modules/parse.o \
          modules/readData.o \
          modules/setMesh.o \
	  modules/initialise.o \
	  modules/simInit.o \
	  modules/setInitialValues.o \
	  modules/intODE.o \
	  modules/call_odessa.o \
	  modules/integrateRK.o \
	  modules/computeRight.o \
	  modules/solvLin.o \
	  modules/dampIt.o \
	  modules/outFit.o \
	  modules/freeMem.o

	  #modules/integrateCVODES.o CVODES not optimized!!

MODULES_SIMIT =	modules/parseSimit.o \
	        modules/readData.o \
		modules/setMesh.o \
		modules/initialise.o \
	        modules/simInit.o \
	  	modules/setInitialValues.o \
		modules/intODE.o \
		modules/call_odessa.o \
		modules/integrateRK.o \
		modules/computeRight.o \
		modules/solvLin.o \
		modules/dampIt.o \
		modules/outSimit.o \
		modules/freeMem.o

LIBSRES = 	libSRES/ESES.o \
		libSRES/ESSRSort.o \
		libSRES/sharefunc.o

MODEL = model.o

SUB = fitIt.o globOpt.o odessa.o dconstr.o setOptE04NCF.o

HEADERS = model.h def.h nr.h

NR = nr/nrutil.o \
     nr/rkck.o \
     nr/rkqs.o \
     nr/svdcmp.o \
     nr/svbksb.o \
     nr/pythag.o \
     nr/ran1.o \
     nr/gasdev.o \
     nr/spline.o \
     nr/choldc.o \
     nr/cholsl.o \
     nr/gam.o


all: dconstr.o odessa.o nr modules fitit diffit simit createSpline mex

diffit: diffit.o $(MODULES) $(LIBSRES)  $(SUB) $(MODEL) $(HEADERS) $(NR) makefile 
	@echo -n [Linking] $@
	@$(CCC) $(CCFLAGS) -o diffit diffit.o $(SUB) $(MODEL) $(NR) $(MODULES) $(LIBSRES) $(LIBS)
	@echo " ...done."


simit: simit.o $(MODULES_SIMIT) $(LIBSRES) $(SUB) $(MODEL) $(HEADERS) $(NR) makefile 
	@echo -n [Linking] $@
	@$(CCC) $(CCFLAGS) -o simit simit.o $(SUB) $(MODEL) $(NR) $(MODULES_SIMIT) $(LIBSRES) $(LIBS)
	@echo " ...done."

nr: $(NR)

dconstr.o: dconstr.f makefile
	@echo -n [Compiling] $< 
	@$(f77) -fno-second-underscore -c dconstr.f -o dconstr.o
	@echo " ...done."

odessa.o: odessa.f makefile
	@echo -n [Compiling] $< 
	@$(f77) -fno-second-underscore -c odessa.f -o odessa.o
	@echo " ...done."

setOptE04NCF.o: setOptE04NCF.f makefile
	@echo -n [Compiling] $< 
	@$(f77) -fno-second-underscore -c setOptE04NCF.f -o setOptE04NCF.o
	@echo " ...done."

modules: $(MODULES)

fitit: $(SUB)

model: $(MODEL)

createSpline:	createSpline.o $(NR) makefile 
	@echo -n [Linking] $@
	@$(CCC) $(CCFLAGS) -o createSpline createSpline.o $(NR)
	@echo " ...done."

mex:	
	@echo -n [Creating Mexfile] diffit_mex
	@mex -g diffit_mex.cc $(SUB) $(MODEL) $(NR) $(MODULES) $(LIBSRES) $(LIBS)
	@echo " ...done."
	@echo -n [Creating Mexfile] simit_mex
	@mex -g simit_mex.cc $(SUB) $(MODEL) $(NR) $(MODULES_SIMIT) $(LIBSRES) $(LIBS)
	@echo " ...done."
	@echo -n [Creating Mexfile] createSpline_mex
	@mex -g createSpline_mex.cc $(NR)
	@echo " ...done."


clean:
	@rm -f *.o
	@rm -f nr/*.o
	@rm -f modules/*.o
	@rm -f libSRES/*.o
	@rm -f *.mexglx

