# Makefile for 1-D Assimilation code
#
#
# set these to the appropriate directories, use . if all files are in this directory
#
HOME       = /usr/skip
CLIB       = $(HOME)/clib
CLASSDIR   = $(HOME)/classlib
FORLIB     = $(HOME)/forlib
NUMERICS   = $(HOME)/numerics
NUMERICS1D = $(NUMERICS)/1D
FRECIPES   = $(HOME)/recipes_f
#
#
F77 = f77
FFLAGS = -O
#
# ATT C++ compiler (Unix)
#
CC = cc
CFLAGS = -O -I$(HOME) -I.
#
CPP = CC
CPFLAGS =  $(CFLAGS)
#
# GNU C++ compiler (V2.4.2)
#
CC = gcc
CFLAGS = -O -I$(HOME) -I.
#
CPP = gcc
CPFLAGS =  $(CFLAGS)
EXTRA_LIBS = -lg++
#
#
# flags for Rogue Wave code
RWFLAGS = -D__ATT__
#
BSDFLAG = -I/usr/include/bsd
BSDLIB = -lbsd
TIMER =
#
#
# For MSDOS comment out the above macros CFLAGS .. TIMER and uncomment
# the appropriate ones below.  Also globally replace the .o files with .obj
# and remove the -o filename flag in the compilation steps
#
#MODEL=l
#PROC=2
#
# Turbo C++
#CC=tcc
#CFLAGS= -m$(MODEL) -$(PROC) -f87
#CPP=tcc
#CPFLAGS= $(CFLAGS)
#BSDLIB=
#TIMER = cputime.obj
#
# Zortech C++
#CC=ztc
#CFLAGS =  -m$(MODEL) -$(PROC) -o -f
#CPP=ztc
#CPFLAGS = $(CFLAGS)
#BSDLIB=
#TIMER = cputime.obj timer.obj
#
#
#
ARGFILES = getargs.o stoi.o
#
# This code is normally part of my miscellaneous C++ class library lib$(CLASSLIB).a
#
LIBFILES = cputime.o matrix.o vector.o barray.o barray2d.o lumatrix.o invm.o error.o
#
# if LIBFILES is not in lib$(CLASSLIB).a then define these 4
OBJS = $(LIBFILES)
DEPOBJS = $(OBJS)
CLASSLIB =
LIBS =
#
#
# if LIBFILES IS in lib$(CLASSLIB).a then define these 4 instead
#CLASSLIB = classes
#DEPOBJS = $(CLASSDIR)/lib$(CLASSLIB).a
#OBJS =
#LIBS = -L$(CLASSDIR) -l$(CLASSLIB)
#
# =====================================================================
# 	shouldn't have to change anything below here
#	 (expect for MSDOS .o/.obj and -o stuff)
# ======================================================================
#
#
kaltest: kaltest.c++ kalman.o laxwen.o vdynamics.o standio.o $(ARGFILES) $(DEPOBJS)
	$(CPP) $(CPFLAGS) kaltest.c++ kalman.o laxwen.o vdynamics.o standio.o $(ARGFILES) \
	$(OBJS) -o kaltest $(LIBS) $(EXTRA_LIBS) $(BSDLIB) -lm
#
# build an export package as a shell archive
#
export: tkaltest.c++ tkalman.hpp tkalman.c++ SOURCE
	cp $(CLIB)/getargs.c .
	cp $(CLIB)/getargs.h .
	cp $(CLIB)/stoi.c    .
	shar2 -v -c -l64 -oexport.sh New.note Readme Makefile kaltest.c++ $(CLASS_SRC) \
		getargs.c getargs.h stoi.c
	-rm -f $(CLASS_SRC) getargs.c getargs.h stoi.c
	mv tkaltest.c++ kaltest.c++
	mv tkalman.hpp kalman.hpp
	mv tkalman.c++ kalman.c++
#
#
#
clean:
	-rm *.o *.bak *~
#
#
#
#
dispers: dispers.c++ complex.o $(ARGFILES)
	$(CPP) $(CPFLAGS) dispers.c++ complex.o $(ARGFILES) -o dispers -lcomplex -lm

kalburg: kalburg.c++ kalman.o burger.o laxwen1.o vdynamics.o vector.o matrix.o \
	lumatrix.o invm.o error.o rands.o $(ARRAY) $(TIMER) $(ARGFILES)
	$(CPP) $(CPFLAGS) $(ARFLAG) kalburg.c++ kalman.o burger.o laxwen1.o vdynamics.o vector.o \
	matrix.o lumatrix.o invm.o error.o rands.o $(ARRAY) $(TIMER) $(ARGFILES) \
	-o kalburg $(BSDLIB) -lm


kaltst: kaltst.c++ kalman.o qg.o spectral.o vdynamics.o $(ARGFILES) \
		$(CLASSDIR)/lib$(CLASSLIB).a
	$(CPP) $(CPFLAGS) $(ARFLAG) $(RWFLAGS) kaltst.c++ kalman.o qg.o spectral.o \
	vdynamics.o $(ARGFILES) \
	-o kaltst -L$(CLASSDIR) -l$(CLASSLIB) -lrwmath $(BSDLIB) -lcomplex -lm

kaltst2: kaltst2.c++ kalman.o ode2.o dynamics.o vector.o matrix.o lumatrix.o \
	invm.o error.o runge.o $(TIMER) $(ARGFILES)
	$(CPP) $(CPFLAGS) kaltst2.c++ kalman.o ode2.o dynamics.o vector.o matrix.o \
	      lumatrix.o invm.o error.o runge.o $(TIMER) $(ARGFILES) \
	      -o kaltst2 $(BSDLIB) -lm

qglinear: qglinear.c++ qg.o dynamics.o vector.o error.o $(TIMER) $(ARGFILES)
	$(CPP) $(CPFLAGS) qglinear.c++ qg.o dynamics.o vector.o error.o $(TIMER) \
	 $(ARGFILES) -o qglinear -lrwmath $(BSDLIB) -lcomplex -lm
	rm qglinear.o

qglin2: qglin2.c++ spectral.o vdynamics.o vector.o error.o $(TIMER) $(ARGFILES)
	$(CPP) $(CPFLAGS) qglin2.c++ spectral.o vdynamics.o vector.o error.o $(TIMER) \
	 $(ARGFILES) -o qglin2 -lrwmath $(BSDLIB) -lcomplex -lm
	rm qglin2.o

sw1d: sw1d.c++ laxwen.o vdynamics.o vector.o error.o $(TIMER) $(ARGFILES)
	$(CPP) $(CPFLAGS) sw1d.c++ laxwen.o vdynamics.o vector.o error.o $(TIMER) \
	$(ARGFILES) -o sw1d $(BSDLIB) -lm
	rm sw1d.o

wave1d: wave1d.c++ laxwen.o vdynamics.o vector.o error.o $(TIMER) $(ARGFILES)
	$(CPP) $(CPFLAGS) wave1d.c++ laxwen.o vdynamics.o vector.o error.o $(TIMER) \
	$(ARGFILES) -o wave1d $(BSDLIB) -lrwmath -lcomplex -lm
	rm wave1d.o

wave1d2: wave1d2.c++ vector.o error.o $(TIMER) $(ARGFILES)
	$(CPP) $(CPFLAGS) wave1d2.c++ vector.o error.o $(TIMER) \
	$(ARGFILES) -o wave1d2 $(BSDLIB) -lm
	rm wave1d2.o

convect1d: convect1d.c++ laxwen.o vdynamics.o vector.o error.o $(TIMER) $(ARGFILES)
	$(CPP) $(CPFLAGS) convect1d.c++ laxwen.o vdynamics.o vector.o error.o $(TIMER) \
	$(ARGFILES) -o convect1d $(BSDLIB) -lrwmath -lcomplex -lm
	rm convect1d.o
#
#
#
barray.o: barray.c++ barray.hpp scalar.hpp

barray2d.o: barray.c++ barray2d.hpp error.hpp scalar.hpp

burger.o: $(NUMERICS)/burger.c++ $(NUMERICS)/burger.hpp
	$(CPP) $(CPFLAGS) -c $(NUMERICS)/burger.c++

cputime.o: cputime.c++ cputime.hpp
	$(CPP) $(CPFLAGS) $(BSDFLAG) -c cputime.c++

complex.o: $(CLASSDIR)/complex.c++ $(CLASSDIR)/complex.hpp
	$(CPP) $(CPFLAGS) -I/usr/include/bsd $(CLASSDIR)/complex.c++ -c

ftcs.o: $(NUMERICS1D)/ftcs.c++ $(NUMERICS1D)/ftcs.hpp
	$(CPP) $(CPFLAGS) $(NUMERICS1D)/ftcs.c++ -c

ftoeplz.o: $(FRECIPES)/toeplz.f
	$(F77) $(FFLAGS) -c $(FRECIPES)/toeplz.f -o ftoeplz.o

getargs.o: $(CLIB)/getargs.c
	$(CC) $(CFLAGS) -c $(CLIB)/getargs.c

gtri.o: $(NUMERICS)/gtri.c++ $(NUMERICS)/gtri.hpp
	$(CPP) $(CPFLAGS) $(NUMERICS)/gtri.c++ $(CFLAGS) -c

kalman.o: kalman.c++ kalman.hpp $(CLASSDIR)/matrix.hpp $(CLASSDIR)/vector.hpp \
	 $(CLASSDIR)/lumatrix.hpp
	$(CPP) $(CPFLAGS) $(CFLAGS) $(ARFLAG) -c kalman.c++

laxfried.o: $(NUMERICS1D)/laxfried.c++ $(NUMERICS1D)/laxfried.hpp
	$(CPP) $(CPFLAGS) $(NUMERICS1D)/laxfried.c++ $(CFLAGS) -c

laxwen1.o: $(NUMERICS1D)/laxwen1.c++ $(NUMERICS1D)/laxwen1.hpp
	$(CPP) $(CPFLAGS) $(ARFLAG) -c $(NUMERICS1D)/laxwen1.c++

laxwen.o: $(NUMERICS1D)/laxwen.c++ $(NUMERICS1D)/laxwen.hpp
	$(CPP) $(CPFLAGS) $(ARFLAG) -c $(NUMERICS1D)/laxwen.c++

leap.o: $(NUMERICS1D)/leap.c++ $(NUMERICS1D)/leap.hpp
	$(CPP) $(CPFLAGS) $(NUMERICS1D)/leap.c++ $(CFLAGS) -c

lumatrix.o: lumatrix.c++ lumatrix.hpp matrix.hpp error.hpp

matrix.o: matrix.c++ matrix.hpp error.hpp vector.hpp barray2d.hpp scalar.hpp barray.hpp

qg.o: qg.c++ qg.hpp $(NUMERICS1D)/spectral.hpp
	$(CPP) $(CPFLAGS) $(ARFLAG) $(RWFLAGS) -c qg.c++

rands.o: $(HOME)/smpl/rands.c
	$(CC) $(CFLAGS) -c $(HOME)/smpl/rands.c

remav.o: $(FORLIB)/remav.f
	$(F77) $(FFLAGS) -c $(FORLIB)/remav.f

runge.o: $(CLASSDIR)/runge.c++ $(CLASSDIR)/runge.hpp
	$(CPP) $(CPFLAGS) -DINCLUDE_VECTOR $(CLASSDIR)/runge.c++ $(CFLAGS) -c

spectral.o: $(NUMERICS1D)/spectral.c++ $(NUMERICS1D)/spectral.hpp \
		$(NUMERICS1D)/vdynamics.hpp
	$(CPP) $(CPFLAGS) $(ARFLAG) $(RWFLAGS) -c $(NUMERICS1D)/spectral.c++

stoi.o: $(CLIB)/stoi.c
	$(CC) $(CFLAGS) -c $(CLIB)/stoi.c

toeplz.o: toeplz.c++ $(CLASSDIR)/vector.hpp $(CLASSDIR)/error.hpp
	$(CPP) $(CPFLAGS) toeplz.c++ $(CFLAGS) -c

upwind.o: $(NUMERICS1D)/upwind.c++ $(NUMERICS1D)/upwind.hpp
	$(CPP) $(CPFLAGS) $(NUMERICS1D)/upwind.c++ $(CFLAGS) -c

vdynamics.o: $(NUMERICS1D)/vdynamics.c++ $(NUMERICS1D)/vdynamics.hpp
	$(CPP) $(CPFLAGS) $(NUMERICS1D)/vdynamics.c++ -c

vector.o: vector.c++ vector.hpp barray.hpp error.hpp scalar.hpp

standio.o: standio.c++ standio.hpp

#
# The general class library
#
$(CLASSDIR)/lib$(CLASSLIB).a:
	cd $(CLASSDIR); make

#
#
#
#
# Things to export
#
CLASS_SRC = cputime.c++ cputime.hpp vdynamics.c++ vdynamics.hpp error.c++ \
	   error.hpp invm.c++ kalman.c++ kalman.hpp lumatrix.c++ lumatrix.hpp \
	barray.hpp barray2d.hpp scalar.hpp matrix.c++ matrix.hpp vector.c++ \
	vector.hpp laxwen.c++ laxwen.hpp barray.c++ barray2d.c++ standio.c++ \
	standio.hpp

SOURCE: $(CLASS_SRC)

tkalman.c++:
	mv kalman.c++ tkalman.c++
	sed s/"<classlib\/"/"<"/g < tkalman.c++ > kalman.c++

tkalman.hpp:
	mv kalman.hpp tkalman.hpp
	sed s/"<classlib\/"/"<"/g < tkalman.hpp | \
	sed s/"<numerics\/1D\/"/"<"/g  > kalman.hpp

tkaltest.c++:
	mv kaltest.c++ tkaltest.c++
	sed s/"<classlib\/"/"<"/g < tkaltest.c++ | \
	sed s/"<clib\/"/"<"/g  | sed s/"<numerics\/1D\/"/"<"/g  > kaltest.c++


#
#
barray.c++:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/barray.c++ > barray.c++

barray.hpp:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/barray.hpp > barray.hpp

barray2d.c++:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/barray2d.c++ > barray2d.c++

barray2d.hpp:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/barray2d.hpp > barray2d.hpp

cputime.c++:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/cputime.c++ > cputime.c++

cputime.hpp:
	cp $(CLASSDIR)/cputime.hpp  .

standio.c++:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/standio.c++ > standio.c++

standio.hpp:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/standio.hpp > standio.hpp

vdynamics.c++:
	sed s/"<numerics\/1D\/"/"<"/g < $(NUMERICS1D)/vdynamics.c++ > vdynamics.c++

vdynamics.hpp:
	sed s/"<classlib\/"/"<"/g < $(NUMERICS1D)/vdynamics.hpp > vdynamics.hpp

error.c++:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/error.c++ > error.c++

error.hpp:
	cp $(CLASSDIR)/error.hpp    .

invm.c++:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/invm.c++ > invm.c++

laxwen.c++:
	sed s/"<numerics\/1D\/"/"<"/g < $(NUMERICS1D)/laxwen.c++ > laxwen.c++

laxwen.hpp:
	sed s/"<numerics\/1D\/"/"<"/g < $(NUMERICS1D)/laxwen.hpp > laxwen.hpp

lumatrix.c++:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/lumatrix.c++ > lumatrix.c++

lumatrix.hpp:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/lumatrix.hpp > lumatrix.hpp

matrix.c++:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/matrix.c++ > matrix.c++

matrix.hpp:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/matrix.hpp > matrix.hpp

scalar.hpp:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/scalar.hpp > scalar.hpp

vector.c++:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/vector.c++ > vector.c++

vector.hpp:
	sed s/"<classlib\/"/"<"/g < $(CLASSDIR)/vector.hpp > vector.hpp



#
#
#
#
# Generics
#
#.asm.obj:
#	masm  $< /ML;
# 
.SUFFIXES:
.SUFFIXES: .cpp .cxx .c++ .c .h .o
.c.o:
	$(CC) $(CFLAGS) -c $*.c
.c++.o:
	$(CPP) $(CPFLAGS) -c $*.c++

.cxx.o:
	$(CPP) $(CPFLAGS) -c $*.cxx

.cpp.o:
	$(CPP) $(CPFLAGS) -c $*.cpp


