F2C=
# Set F2C by outcommenting the next line if f2c is installed for unix
# F2C= -lf2c
# Set F2C by outcommenting the next line if f2c is installed for dos and windows
# F2C= f2c.lib

# default environment
SRC_CPP=cc
SRC_C=c
SYSFILE=sysother
BCPP=-P
VCPP=
COMPILER_C=bcc32
COMPILER_CPP=bcc32
COMPILER_FLAGS= -c -O2 -w-
OBJ=obj
LINK_FLAGS_BEFORE= -l $(F2C)
LINK_FLAGS_AFTER=

# default platform
default: linux_old

# single and multi-processor windows; borland c++ compiler
borland_cpp:
#         set SYSFILE above to syswin32 for multi processor
	make tn
	del tochnog.exe > nul
	ren adjust.exe tochnog.exe

# single processor windows; visual c++ compiler
visual_cpp:
	nmake tn \
	"SYSFILE=sysother" \
        "OBJ=obj" \
        "BCPP=" \
        "VCPP=/Tp" \
	"COMPILER_C=cl" \
	"COMPILER_CPP=cl" \
	"COMPILER_FLAGS= /c /O2" \
	"LINK_FLAGS_BEFORE=" \
	"LINK_FLAGS_AFTER= /lm $(F2C) /o tochnog"

# multi processor windows; visual c++ compiler
visual_cpp_parallel:
	nmake tn \
	"SYSFILE=syswin32.cc" \
        "OBJ=obj" \
        "BCPP=" \
        "VCPP=/Tp" \
	"COMPILER_C=cl" \
	"COMPILER_CPP=cl" \
	"COMPILER_FLAGS= /c /O2" \
	"LINK_FLAGS_BEFORE=" \
	"LINK_FLAGS_AFTER= /lm $(F2C) /o tochnog"

# single processor linux; gnu gcc compiler
linux_old: 
	make tn \
	"SYSFILE=sysother" \
	"OBJ=o" \
        "BCPP=" \
        "VCPP=" \
	"COMPILER_C=gcc" \
	"COMPILER_CPP=g++" \
	"COMPILER_FLAGS= -ansi -c -O2 -Wall" \
	"LINK_FLAGS_BEFORE=" \
	"LINK_FLAGS_AFTER=  $(F2C) -static -L/usr/local/libc-5.4.38/libc/elfstatic/ -lm -o tochnog"

# multi processor linux; gnu gcc compiler
linux: 
	make tn \
	"SYSFILE=sysposix" \
	"OBJ=o" \
        "BCPP=" \
        "VCPP=" \
	"COMPILER_C=gcc" \
	"COMPILER_CPP=g++" \
	"COMPILER_FLAGS= -ansi -c -O2 -Wall -D_REENTRANT" \
	"LINK_FLAGS_BEFORE=" \
	"LINK_FLAGS_AFTER= $(F2C) -static -L/usr/local/libc-5.4.38/libc/elfstatic/ -lm -lpthread -o tochnog"

# insure check under linux; insure + gnu gcc compiler
linux_insure: 
	make tn \
	"SYSFILE=sysother" \
	"OBJ=o" \
        "BCPP=" \
        "VCPP=" \
	"COMPILER_C=insure" \
	"COMPILER_CPP=insure" \
	"COMPILER_FLAGS= -ansi -g -O2 -c -Wall" \
	"LINK_FLAGS_BEFORE=" \
	"LINK_FLAGS_AFTER= $(F2C) -lm -o tochnog"

# single processor hp unix; hp CC compiler
hp: 
	make tn \
	"SYSFILE=sysother" \
	"OBJ=o" \
        "BCPP=" \
        "VCPP=" \
	"COMPILER_FLAGS= -c -Aa -O" \
	"COMPILER_C=cc" \
	"COMPILER_CPP=CC" \
	"LINK_FLAGS_BEFORE=" \
	"LINK_FLAGS_AFTER= $(F2C) -lm -o tochnog"

# single and multi processor sgi unix; sgi CC compiler
sgi:
	make tn \
	"SYSFILE=syssgi" \
	"OBJ=o" \
        "BCPP=" \
        "VCPP=" \
	"COMPILER_FLAGS= -c -O2" \
	"COMPILER_C=cc" \
	"COMPILER_CPP=CC" \
	"LINK_FLAGS_BEFORE=" \
	"LINK_FLAGS_AFTER= $(F2C) -lm -lmpc -o tochnog"

# single processor sun solaris unix; sun CC compiler
sparc:
	make tn \
	"SYSFILE=sysother" \
	"OBJ=o" \
        "BCPP=" \
        "VCPP=" \
	"COMPILER_FLAGS= -fast -c" \
	"COMPILER_C=cc" \
	"COMPILER_CPP=CC" \
	"LINK_FLAGS_BEFORE=" \
	"LINK_FLAGS_AFTER= $(F2C) -lm -o tochnog"

# multi processor sun solaris unix; sun CC compiler
sparc_parallel:
	make tn \
	"SYSFILE=sysposix" \
	"OBJ=o" \
        "BCPP=" \
        "VCPP=" \
	"COMPILER_FLAGS= -mt -fast -c" \
	"COMPILER_C=cc" \
	"COMPILER_CPP=CC" \
	"LINK_FLAGS_BEFORE=-lpthread" \
	"LINK_FLAGS_AFTER= $(F2C) -lm -o tochnog"

# single processor alpha
alpha:
	make tn \
	"SYSFILE=sysother" \
	"OBJ=o" \
        "BCPP=" \
        "VCPP=" \
	"COMPILER_FLAGS= -O2 -c" \
	"COMPILER_C=cc" \
	"COMPILER_CPP=cxx" \
	"LINK_FLAGS_BEFORE=" \
	"LINK_FLAGS_AFTER= $(F2C) -lm -o tochnog"

# multi processor alpha
alpha_parallel:
	make tn \
	"SYSFILE=sysposix" \
	"OBJ=o" \
        "BCPP=" \
        "VCPP=" \
	"COMPILER_FLAGS= -O2 -pthread -D_REENTRANT -c" \
	"COMPILER_C=cc" \
	"COMPILER_CPP=cxx" \
	"LINK_FLAGS_BEFORE=-lpthread -lexc" \
	"LINK_FLAGS_AFTER= $(F2C) -lm -o tochnog"

tn: adjust.$(OBJ) area.$(OBJ) \
	bounda.$(OBJ) calcul.$(OBJ) \
	check.$(OBJ) clapack.$(OBJ) condif.$(OBJ) \
	contact.$(OBJ) create.$(OBJ) \
	damage.$(OBJ) data.$(OBJ) \
	database.$(OBJ) delete.$(OBJ) distri.$(OBJ) \
	dof.$(OBJ) elasti.$(OBJ) elem.$(OBJ) \
	error.$(OBJ) failure.$(OBJ) \
	filter.$(OBJ) force.$(OBJ) general.$(OBJ) \
	geometry.$(OBJ) groundfl.$(OBJ) group.$(OBJ) \
	hyperela.$(OBJ) initia.$(OBJ) \
	input.$(OBJ) integra.$(OBJ) intersec.$(OBJ) \
	inverse.$(OBJ) locate.$(OBJ) \
	macro.$(OBJ) map.$(OBJ) \
	materi.$(OBJ) math.$(OBJ) \
	membrane.$(OBJ) merge.$(OBJ) mesh.$(OBJ) \
	miscel.$(OBJ) new_mesh.$(OBJ) \
	node.$(OBJ) plasti.$(OBJ) \
	point_el.$(OBJ) polynom.$(OBJ) post.$(OBJ) \
	pri.$(OBJ) print.$(OBJ) \
	print_cm.$(OBJ) print_da.$(OBJ) \
	print_gi.$(OBJ) print_gm.$(OBJ) print_hi.$(OBJ) \
	print_pl.$(OBJ) print_ma.$(OBJ) \
	print_te.$(OBJ) print_vt.$(OBJ) \
	project.$(OBJ) range.$(OBJ) \
	refine_g.$(OBJ) refine_l.$(OBJ) remesh.$(OBJ) \
	renumber.$(OBJ) repeat.$(OBJ) restart.$(OBJ) \
	slide.$(OBJ) solve.$(OBJ) split.$(OBJ) stress.$(OBJ) \
	$(SYSFILE).$(OBJ) tendon.$(OBJ) tn.$(OBJ) \
	top.$(OBJ) tyings.$(OBJ) \
	umat.$(OBJ) user.$(OBJ) \
	viscoela.$(OBJ) viscosit.$(OBJ) \
	volume.$(OBJ) wave.$(OBJ)
	$(COMPILER_CPP) $(LINK_FLAGS_BEFORE) *.$(OBJ) $(LINK_FLAGS_AFTER)

adjust.$(OBJ): adjust.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)adjust.cc

area.$(OBJ): area.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)area.cc

bounda.$(OBJ): bounda.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)bounda.cc

calcul.$(OBJ): calcul.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)calcul.cc

check.$(OBJ): check.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)check.cc

clapack.$(OBJ): clapack.c
	$(COMPILER_C) $(COMPILER_FLAGS) clapack.c

condif.$(OBJ): condif.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)condif.cc

contact.$(OBJ): contact.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)contact.cc

create.$(OBJ): create.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)create.cc

damage.$(OBJ): damage.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)damage.cc

data.$(OBJ): data.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)data.cc

database.$(OBJ): database.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)database.cc

delete.$(OBJ): delete.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)delete.cc

distri.$(OBJ): distri.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)distri.cc

dof.$(OBJ): dof.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)dof.cc

elasti.$(OBJ): elasti.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)elasti.cc

elem.$(OBJ): elem.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)elem.cc

error.$(OBJ): error.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)error.cc

failure.$(OBJ): failure.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)failure.cc

filter.$(OBJ): filter.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)filter.cc

force.$(OBJ): force.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)force.cc

general.$(OBJ): general.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)general.cc

geometry.$(OBJ): geometry.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)geometry.cc

groundfl.$(OBJ): groundfl.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)groundfl.cc

group.$(OBJ): group.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)group.cc

hyperela.$(OBJ): hyperela.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)hyperela.cc

initia.$(OBJ): initia.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)initia.cc

input.$(OBJ): input.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)input.cc

integra.$(OBJ): integra.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)integra.cc

intersec.$(OBJ): intersec.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)intersec.cc

inverse.$(OBJ): inverse.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)inverse.cc

locate.$(OBJ): locate.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)locate.cc

macro.$(OBJ): macro.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)macro.cc

map.$(OBJ): map.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)map.cc

materi.$(OBJ): materi.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)materi.cc

math.$(OBJ): math.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)math.cc

membrane.$(OBJ): membrane.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)membrane.cc

merge.$(OBJ): merge.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)merge.cc

mesh.$(OBJ): mesh.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)mesh.cc

miscel.$(OBJ): miscel.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)miscel.cc

new_mesh.$(OBJ): new_mesh.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)new_mesh.cc

node.$(OBJ): node.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)node.cc

plasti.$(OBJ): plasti.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)plasti.cc

point_el.$(OBJ): point_el.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)point_el.cc

polynom.$(OBJ): polynom.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)polynom.cc

post.$(OBJ): post.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)post.cc

pri.$(OBJ): pri.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)pri.cc

print.$(OBJ): print.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)print.cc

print_cm.$(OBJ): print_cm.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)print_cm.cc

print_da.$(OBJ): print_da.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)print_da.cc

print_gi.$(OBJ): print_gi.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)print_gi.cc

print_gm.$(OBJ): print_gm.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)print_gm.cc

print_hi.$(OBJ): print_hi.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)print_hi.cc

print_ma.$(OBJ): print_ma.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)print_ma.cc

print_pl.$(OBJ): print_pl.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)print_pl.cc

print_te.$(OBJ): print_te.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)print_te.cc

print_vt.$(OBJ): print_vt.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)print_vt.cc

project.$(OBJ): project.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)project.cc

range.$(OBJ): range.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)range.cc

refine_g.$(OBJ): refine_g.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)refine_g.cc

refine_l.$(OBJ): refine_l.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)refine_l.cc

remesh.$(OBJ): remesh.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)remesh.cc

renumber.$(OBJ): renumber.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)renumber.cc

repeat.$(OBJ): repeat.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)repeat.cc

restart.$(OBJ): restart.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)restart.cc

slide.$(OBJ): slide.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)slide.cc

solve.$(OBJ): solve.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)solve.cc

split.$(OBJ): split.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)split.cc

stress.$(OBJ): stress.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)stress.cc

$(SYSFILE).$(OBJ): $(SYSFILE).cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)$(SYSFILE).cc

tendon.$(OBJ): tendon.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)tendon.cc

tn.$(OBJ): tn.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)tn.cc

top.$(OBJ): top.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)top.cc

tyings.$(OBJ): tyings.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)tyings.cc

umat.$(OBJ): umat.c
	$(COMPILER_C) $(COMPILER_FLAGS) umat.c

user.$(OBJ): user.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)user.cc

viscoela.$(OBJ): viscoela.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)viscoela.cc

viscosit.$(OBJ): viscosit.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)viscosit.cc

volume.$(OBJ): volume.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)volume.cc

wave.$(OBJ): wave.cc
	$(COMPILER_CPP) $(COMPILER_FLAGS) $(BCPP) $(VCPP)wave.cc

clean:
	rm -f hip hop tmp.* *.log *.dbs *.aux *.dat *.his *.inp *.ps *flavia* \
        *.inp *.rgb *.jpg *.attr *.plt *.scr *.out *.dvd *.vtk vtn* *.o *.0
