Starting Eigen 2 development. The current plan is to use the last

release of tvmet (inactive for 2 years and developer unreachable) as the
basis for eigen2, because it provides seemingly good expression template
mechanisms, we want that, and it would take years to reinvent that
wheel. We'll see. So this commit imports the last tvmet release.
This commit is contained in:
Benoit Jacob
2007-05-30 06:24:51 +00:00
commit 3036eeca0a
244 changed files with 95342 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
# $Id: Makefile.am,v 1.12 2004/04/28 21:59:40 opetzold Exp $
AM_CXXFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
EXTRA_PROGRAMS = \
xpr_print_v1 \
xpr_print_v2 \
xpr_print_v3 \
xpr_print_v4 \
xpr_print_m1 \
xpr_print_m2 \
xpr_print_m3 \
xpr_print_m4 \
xpr_print_mv1 \
xpr_print_mv2 \
mv \
mm \
cmv \
cmm \
matrix_col \
diag \
ray \
hspiess \
redwards \
frob_matrix_norm \
alias \
aliasing
DISTCLEANFILES = $(EXTRA_PROGRAMS)
xpr_print_v1_SOURCES = xpr_print_v1.cc
xpr_print_v2_SOURCES = xpr_print_v2.cc
xpr_print_v3_SOURCES = xpr_print_v3.cc
xpr_print_v4_SOURCES = xpr_print_v4.cc
xpr_print_m1_SOURCES = xpr_print_m1.cc
xpr_print_m2_SOURCES = xpr_print_m2.cc
xpr_print_m3_SOURCES = xpr_print_m3.cc
xpr_print_m4_SOURCES = xpr_print_m4.cc
xpr_print_mv1_SOURCES = xpr_print_mv1.cc
xpr_print_mv2_SOURCES = xpr_print_mv2.cc
mv_SOURCES = mv.cc
mm_SOURCES = mm.cc
cmv_SOURCES = cmv.cc
cmm_SOURCES = cmm.cc
matrix_col_SOURCES = matrix_col.cc
diag_SOURCES = diag.cc
ray_SOURCES = ray.cc
redwards_SOURCES = redwards.cc
hspiess_SOURCES = hspiess.cc
frob_matrix_norm_SOURCES = frob_matrix_norm.cc
alias_SOURCES = alias.cc
aliasing_SOURCES = aliasing.cc
examples: $(EXTRA_PROGRAMS)

View File

@@ -0,0 +1,651 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# $Id: Makefile.am,v 1.12 2004/04/28 21:59:40 opetzold Exp $
SOURCES = $(alias_SOURCES) $(aliasing_SOURCES) $(cmm_SOURCES) $(cmv_SOURCES) $(diag_SOURCES) $(frob_matrix_norm_SOURCES) $(hspiess_SOURCES) $(matrix_col_SOURCES) $(mm_SOURCES) $(mv_SOURCES) $(ray_SOURCES) $(redwards_SOURCES) $(xpr_print_m1_SOURCES) $(xpr_print_m2_SOURCES) $(xpr_print_m3_SOURCES) $(xpr_print_m4_SOURCES) $(xpr_print_mv1_SOURCES) $(xpr_print_mv2_SOURCES) $(xpr_print_v1_SOURCES) $(xpr_print_v2_SOURCES) $(xpr_print_v3_SOURCES) $(xpr_print_v4_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_triplet = @host@
EXTRA_PROGRAMS = xpr_print_v1$(EXEEXT) xpr_print_v2$(EXEEXT) \
xpr_print_v3$(EXEEXT) xpr_print_v4$(EXEEXT) \
xpr_print_m1$(EXEEXT) xpr_print_m2$(EXEEXT) \
xpr_print_m3$(EXEEXT) xpr_print_m4$(EXEEXT) \
xpr_print_mv1$(EXEEXT) xpr_print_mv2$(EXEEXT) mv$(EXEEXT) \
mm$(EXEEXT) cmv$(EXEEXT) cmm$(EXEEXT) matrix_col$(EXEEXT) \
diag$(EXEEXT) ray$(EXEEXT) hspiess$(EXEEXT) redwards$(EXEEXT) \
frob_matrix_norm$(EXEEXT) alias$(EXEEXT) aliasing$(EXEEXT)
subdir = examples
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \
$(top_srcdir)/config/ac_create_prefix_config_h.m4 \
$(top_srcdir)/config/ac_cxx_have_complex.m4 \
$(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \
$(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \
$(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \
$(top_srcdir)/config/ac_cxx_have_mutable.m4 \
$(top_srcdir)/config/ac_cxx_have_namespaces.m4 \
$(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \
$(top_srcdir)/config/ac_cxx_partial_specialization.m4 \
$(top_srcdir)/config/ac_cxx_typename.m4 \
$(top_srcdir)/config/ac_set_compiler.m4 \
$(top_srcdir)/config/op_doxygen_doc.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(mkdir_p)
CONFIG_HEADER = $(top_builddir)/config/config.h
CONFIG_CLEAN_FILES =
am_alias_OBJECTS = alias.$(OBJEXT)
alias_OBJECTS = $(am_alias_OBJECTS)
alias_LDADD = $(LDADD)
am_aliasing_OBJECTS = aliasing.$(OBJEXT)
aliasing_OBJECTS = $(am_aliasing_OBJECTS)
aliasing_LDADD = $(LDADD)
am_cmm_OBJECTS = cmm.$(OBJEXT)
cmm_OBJECTS = $(am_cmm_OBJECTS)
cmm_LDADD = $(LDADD)
am_cmv_OBJECTS = cmv.$(OBJEXT)
cmv_OBJECTS = $(am_cmv_OBJECTS)
cmv_LDADD = $(LDADD)
am_diag_OBJECTS = diag.$(OBJEXT)
diag_OBJECTS = $(am_diag_OBJECTS)
diag_LDADD = $(LDADD)
am_frob_matrix_norm_OBJECTS = frob_matrix_norm.$(OBJEXT)
frob_matrix_norm_OBJECTS = $(am_frob_matrix_norm_OBJECTS)
frob_matrix_norm_LDADD = $(LDADD)
am_hspiess_OBJECTS = hspiess.$(OBJEXT)
hspiess_OBJECTS = $(am_hspiess_OBJECTS)
hspiess_LDADD = $(LDADD)
am_matrix_col_OBJECTS = matrix_col.$(OBJEXT)
matrix_col_OBJECTS = $(am_matrix_col_OBJECTS)
matrix_col_LDADD = $(LDADD)
am_mm_OBJECTS = mm.$(OBJEXT)
mm_OBJECTS = $(am_mm_OBJECTS)
mm_LDADD = $(LDADD)
am_mv_OBJECTS = mv.$(OBJEXT)
mv_OBJECTS = $(am_mv_OBJECTS)
mv_LDADD = $(LDADD)
am_ray_OBJECTS = ray.$(OBJEXT)
ray_OBJECTS = $(am_ray_OBJECTS)
ray_LDADD = $(LDADD)
am_redwards_OBJECTS = redwards.$(OBJEXT)
redwards_OBJECTS = $(am_redwards_OBJECTS)
redwards_LDADD = $(LDADD)
am_xpr_print_m1_OBJECTS = xpr_print_m1.$(OBJEXT)
xpr_print_m1_OBJECTS = $(am_xpr_print_m1_OBJECTS)
xpr_print_m1_LDADD = $(LDADD)
am_xpr_print_m2_OBJECTS = xpr_print_m2.$(OBJEXT)
xpr_print_m2_OBJECTS = $(am_xpr_print_m2_OBJECTS)
xpr_print_m2_LDADD = $(LDADD)
am_xpr_print_m3_OBJECTS = xpr_print_m3.$(OBJEXT)
xpr_print_m3_OBJECTS = $(am_xpr_print_m3_OBJECTS)
xpr_print_m3_LDADD = $(LDADD)
am_xpr_print_m4_OBJECTS = xpr_print_m4.$(OBJEXT)
xpr_print_m4_OBJECTS = $(am_xpr_print_m4_OBJECTS)
xpr_print_m4_LDADD = $(LDADD)
am_xpr_print_mv1_OBJECTS = xpr_print_mv1.$(OBJEXT)
xpr_print_mv1_OBJECTS = $(am_xpr_print_mv1_OBJECTS)
xpr_print_mv1_LDADD = $(LDADD)
am_xpr_print_mv2_OBJECTS = xpr_print_mv2.$(OBJEXT)
xpr_print_mv2_OBJECTS = $(am_xpr_print_mv2_OBJECTS)
xpr_print_mv2_LDADD = $(LDADD)
am_xpr_print_v1_OBJECTS = xpr_print_v1.$(OBJEXT)
xpr_print_v1_OBJECTS = $(am_xpr_print_v1_OBJECTS)
xpr_print_v1_LDADD = $(LDADD)
am_xpr_print_v2_OBJECTS = xpr_print_v2.$(OBJEXT)
xpr_print_v2_OBJECTS = $(am_xpr_print_v2_OBJECTS)
xpr_print_v2_LDADD = $(LDADD)
am_xpr_print_v3_OBJECTS = xpr_print_v3.$(OBJEXT)
xpr_print_v3_OBJECTS = $(am_xpr_print_v3_OBJECTS)
xpr_print_v3_LDADD = $(LDADD)
am_xpr_print_v4_OBJECTS = xpr_print_v4.$(OBJEXT)
xpr_print_v4_OBJECTS = $(am_xpr_print_v4_OBJECTS)
xpr_print_v4_LDADD = $(LDADD)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/config
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
am__depfiles_maybe = depfiles
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/alias.Po ./$(DEPDIR)/aliasing.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/cmm.Po ./$(DEPDIR)/cmv.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/diag.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/frob_matrix_norm.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/hspiess.Po ./$(DEPDIR)/matrix_col.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/mm.Po ./$(DEPDIR)/mv.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/ray.Po ./$(DEPDIR)/redwards.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_m1.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_m2.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_m3.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_m4.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_mv1.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_mv2.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_v1.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_v2.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_v3.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_v4.Po
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(alias_SOURCES) $(aliasing_SOURCES) $(cmm_SOURCES) \
$(cmv_SOURCES) $(diag_SOURCES) $(frob_matrix_norm_SOURCES) \
$(hspiess_SOURCES) $(matrix_col_SOURCES) $(mm_SOURCES) \
$(mv_SOURCES) $(ray_SOURCES) $(redwards_SOURCES) \
$(xpr_print_m1_SOURCES) $(xpr_print_m2_SOURCES) \
$(xpr_print_m3_SOURCES) $(xpr_print_m4_SOURCES) \
$(xpr_print_mv1_SOURCES) $(xpr_print_mv2_SOURCES) \
$(xpr_print_v1_SOURCES) $(xpr_print_v2_SOURCES) \
$(xpr_print_v3_SOURCES) $(xpr_print_v4_SOURCES)
DIST_SOURCES = $(alias_SOURCES) $(aliasing_SOURCES) $(cmm_SOURCES) \
$(cmv_SOURCES) $(diag_SOURCES) $(frob_matrix_norm_SOURCES) \
$(hspiess_SOURCES) $(matrix_col_SOURCES) $(mm_SOURCES) \
$(mv_SOURCES) $(ray_SOURCES) $(redwards_SOURCES) \
$(xpr_print_m1_SOURCES) $(xpr_print_m2_SOURCES) \
$(xpr_print_m3_SOURCES) $(xpr_print_m4_SOURCES) \
$(xpr_print_mv1_SOURCES) $(xpr_print_mv2_SOURCES) \
$(xpr_print_v1_SOURCES) $(xpr_print_v2_SOURCES) \
$(xpr_print_v3_SOURCES) $(xpr_print_v4_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@
CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@
CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@
CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@
CPPUNIT_CONFIG = @CPPUNIT_CONFIG@
CPPUNIT_LIBS = @CPPUNIT_LIBS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@
CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@
CXX_WARN_FLAGS = @CXX_WARN_FLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DOXYGEN = @DOXYGEN@
DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LATEX_BATCHMODE = @LATEX_BATCHMODE@
LATEX_MODE = @LATEX_MODE@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
AM_CXXFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
DISTCLEANFILES = $(EXTRA_PROGRAMS)
xpr_print_v1_SOURCES = xpr_print_v1.cc
xpr_print_v2_SOURCES = xpr_print_v2.cc
xpr_print_v3_SOURCES = xpr_print_v3.cc
xpr_print_v4_SOURCES = xpr_print_v4.cc
xpr_print_m1_SOURCES = xpr_print_m1.cc
xpr_print_m2_SOURCES = xpr_print_m2.cc
xpr_print_m3_SOURCES = xpr_print_m3.cc
xpr_print_m4_SOURCES = xpr_print_m4.cc
xpr_print_mv1_SOURCES = xpr_print_mv1.cc
xpr_print_mv2_SOURCES = xpr_print_mv2.cc
mv_SOURCES = mv.cc
mm_SOURCES = mm.cc
cmv_SOURCES = cmv.cc
cmm_SOURCES = cmm.cc
matrix_col_SOURCES = matrix_col.cc
diag_SOURCES = diag.cc
ray_SOURCES = ray.cc
redwards_SOURCES = redwards.cc
hspiess_SOURCES = hspiess.cc
frob_matrix_norm_SOURCES = frob_matrix_norm.cc
alias_SOURCES = alias.cc
aliasing_SOURCES = aliasing.cc
all: all-am
.SUFFIXES:
.SUFFIXES: .cc .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu examples/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
alias$(EXEEXT): $(alias_OBJECTS) $(alias_DEPENDENCIES)
@rm -f alias$(EXEEXT)
$(CXXLINK) $(alias_LDFLAGS) $(alias_OBJECTS) $(alias_LDADD) $(LIBS)
aliasing$(EXEEXT): $(aliasing_OBJECTS) $(aliasing_DEPENDENCIES)
@rm -f aliasing$(EXEEXT)
$(CXXLINK) $(aliasing_LDFLAGS) $(aliasing_OBJECTS) $(aliasing_LDADD) $(LIBS)
cmm$(EXEEXT): $(cmm_OBJECTS) $(cmm_DEPENDENCIES)
@rm -f cmm$(EXEEXT)
$(CXXLINK) $(cmm_LDFLAGS) $(cmm_OBJECTS) $(cmm_LDADD) $(LIBS)
cmv$(EXEEXT): $(cmv_OBJECTS) $(cmv_DEPENDENCIES)
@rm -f cmv$(EXEEXT)
$(CXXLINK) $(cmv_LDFLAGS) $(cmv_OBJECTS) $(cmv_LDADD) $(LIBS)
diag$(EXEEXT): $(diag_OBJECTS) $(diag_DEPENDENCIES)
@rm -f diag$(EXEEXT)
$(CXXLINK) $(diag_LDFLAGS) $(diag_OBJECTS) $(diag_LDADD) $(LIBS)
frob_matrix_norm$(EXEEXT): $(frob_matrix_norm_OBJECTS) $(frob_matrix_norm_DEPENDENCIES)
@rm -f frob_matrix_norm$(EXEEXT)
$(CXXLINK) $(frob_matrix_norm_LDFLAGS) $(frob_matrix_norm_OBJECTS) $(frob_matrix_norm_LDADD) $(LIBS)
hspiess$(EXEEXT): $(hspiess_OBJECTS) $(hspiess_DEPENDENCIES)
@rm -f hspiess$(EXEEXT)
$(CXXLINK) $(hspiess_LDFLAGS) $(hspiess_OBJECTS) $(hspiess_LDADD) $(LIBS)
matrix_col$(EXEEXT): $(matrix_col_OBJECTS) $(matrix_col_DEPENDENCIES)
@rm -f matrix_col$(EXEEXT)
$(CXXLINK) $(matrix_col_LDFLAGS) $(matrix_col_OBJECTS) $(matrix_col_LDADD) $(LIBS)
mm$(EXEEXT): $(mm_OBJECTS) $(mm_DEPENDENCIES)
@rm -f mm$(EXEEXT)
$(CXXLINK) $(mm_LDFLAGS) $(mm_OBJECTS) $(mm_LDADD) $(LIBS)
mv$(EXEEXT): $(mv_OBJECTS) $(mv_DEPENDENCIES)
@rm -f mv$(EXEEXT)
$(CXXLINK) $(mv_LDFLAGS) $(mv_OBJECTS) $(mv_LDADD) $(LIBS)
ray$(EXEEXT): $(ray_OBJECTS) $(ray_DEPENDENCIES)
@rm -f ray$(EXEEXT)
$(CXXLINK) $(ray_LDFLAGS) $(ray_OBJECTS) $(ray_LDADD) $(LIBS)
redwards$(EXEEXT): $(redwards_OBJECTS) $(redwards_DEPENDENCIES)
@rm -f redwards$(EXEEXT)
$(CXXLINK) $(redwards_LDFLAGS) $(redwards_OBJECTS) $(redwards_LDADD) $(LIBS)
xpr_print_m1$(EXEEXT): $(xpr_print_m1_OBJECTS) $(xpr_print_m1_DEPENDENCIES)
@rm -f xpr_print_m1$(EXEEXT)
$(CXXLINK) $(xpr_print_m1_LDFLAGS) $(xpr_print_m1_OBJECTS) $(xpr_print_m1_LDADD) $(LIBS)
xpr_print_m2$(EXEEXT): $(xpr_print_m2_OBJECTS) $(xpr_print_m2_DEPENDENCIES)
@rm -f xpr_print_m2$(EXEEXT)
$(CXXLINK) $(xpr_print_m2_LDFLAGS) $(xpr_print_m2_OBJECTS) $(xpr_print_m2_LDADD) $(LIBS)
xpr_print_m3$(EXEEXT): $(xpr_print_m3_OBJECTS) $(xpr_print_m3_DEPENDENCIES)
@rm -f xpr_print_m3$(EXEEXT)
$(CXXLINK) $(xpr_print_m3_LDFLAGS) $(xpr_print_m3_OBJECTS) $(xpr_print_m3_LDADD) $(LIBS)
xpr_print_m4$(EXEEXT): $(xpr_print_m4_OBJECTS) $(xpr_print_m4_DEPENDENCIES)
@rm -f xpr_print_m4$(EXEEXT)
$(CXXLINK) $(xpr_print_m4_LDFLAGS) $(xpr_print_m4_OBJECTS) $(xpr_print_m4_LDADD) $(LIBS)
xpr_print_mv1$(EXEEXT): $(xpr_print_mv1_OBJECTS) $(xpr_print_mv1_DEPENDENCIES)
@rm -f xpr_print_mv1$(EXEEXT)
$(CXXLINK) $(xpr_print_mv1_LDFLAGS) $(xpr_print_mv1_OBJECTS) $(xpr_print_mv1_LDADD) $(LIBS)
xpr_print_mv2$(EXEEXT): $(xpr_print_mv2_OBJECTS) $(xpr_print_mv2_DEPENDENCIES)
@rm -f xpr_print_mv2$(EXEEXT)
$(CXXLINK) $(xpr_print_mv2_LDFLAGS) $(xpr_print_mv2_OBJECTS) $(xpr_print_mv2_LDADD) $(LIBS)
xpr_print_v1$(EXEEXT): $(xpr_print_v1_OBJECTS) $(xpr_print_v1_DEPENDENCIES)
@rm -f xpr_print_v1$(EXEEXT)
$(CXXLINK) $(xpr_print_v1_LDFLAGS) $(xpr_print_v1_OBJECTS) $(xpr_print_v1_LDADD) $(LIBS)
xpr_print_v2$(EXEEXT): $(xpr_print_v2_OBJECTS) $(xpr_print_v2_DEPENDENCIES)
@rm -f xpr_print_v2$(EXEEXT)
$(CXXLINK) $(xpr_print_v2_LDFLAGS) $(xpr_print_v2_OBJECTS) $(xpr_print_v2_LDADD) $(LIBS)
xpr_print_v3$(EXEEXT): $(xpr_print_v3_OBJECTS) $(xpr_print_v3_DEPENDENCIES)
@rm -f xpr_print_v3$(EXEEXT)
$(CXXLINK) $(xpr_print_v3_LDFLAGS) $(xpr_print_v3_OBJECTS) $(xpr_print_v3_LDADD) $(LIBS)
xpr_print_v4$(EXEEXT): $(xpr_print_v4_OBJECTS) $(xpr_print_v4_DEPENDENCIES)
@rm -f xpr_print_v4$(EXEEXT)
$(CXXLINK) $(xpr_print_v4_LDFLAGS) $(xpr_print_v4_OBJECTS) $(xpr_print_v4_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alias.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aliasing.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmm.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmv.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diag.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frob_matrix_norm.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hspiess.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrix_col.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mm.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mv.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ray.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/redwards.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m3.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m4.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_mv1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_mv2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v3.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v4.Po@am__quote@
.cc.o:
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
.cc.obj:
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.cc.lo:
@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-exec-am:
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool ctags distclean distclean-compile \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-exec install-exec-am \
install-info install-info-am install-man install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am
examples: $(EXTRA_PROGRAMS)
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@@ -0,0 +1,33 @@
/*
* $Id: alias.cc,v 1.1 2004/03/26 07:56:32 opetzold Exp $
*
* This example shows the solution of the problem with aliasing
* mentioned at
* http://tvmet.sourceforge.net/notes.html#alias
*/
#include <iostream>
#include <algorithm>
#include <tvmet/Matrix.h>
#include <tvmet/Vector.h>
#include <tvmet/util/Incrementor.h>
using namespace std;
int main()
{
typedef tvmet::Matrix<double, 3, 3> matrix_type;
matrix_type M;
std::generate(M.begin(), M.end(),
tvmet::util::Incrementor<matrix_type::value_type>());
std::cout << "M = " << M << std::endl;
alias(M) = M * trans(M);
std::cout << M << std::endl;
}

View File

@@ -0,0 +1,44 @@
/*
* $Id: aliasing.cc,v 1.2 2004/03/26 07:58:06 opetzold Exp $
*
* This example shows the problem with aliasing mentioned at
* http://tvmet.sourceforge.net/notes.html#alias
*/
#include <iostream>
#include <algorithm>
#include <tvmet/Matrix.h>
#include <tvmet/util/Incrementor.h>
using std::cout; using std::endl;
using namespace tvmet;
typedef Matrix<double,3,3> matrix_type;
int main()
{
matrix_type A, B;
matrix_type C;
std::generate(A.begin(), A.end(),
tvmet::util::Incrementor<matrix_type::value_type>());
std::generate(B.begin(), B.end(),
tvmet::util::Incrementor<matrix_type::value_type>());
cout << "A = " << A << endl;
cout << "B = " << B << endl;
// matrix prod without aliasing
C = A * B;
cout << "C = A * B = " << C << endl;
// work around for aliasing
matrix_type temp_A(A);
A = temp_A * B;
cout << "matrix_type temp_A(A);\n"
<< "A = temp_A * B = " << A << endl;
// this shows the aliasing problem
A = A * B;
cout << "A = A * B = " << A << endl;
}

View File

@@ -0,0 +1,29 @@
#include <iostream>
#include <complex>
#include <tvmet/Matrix.h>
using namespace tvmet;
using std::cout;
using std::endl;
typedef Matrix<std::complex<double>,3,3> matrix33d;
void testMM(matrix33d& res, const matrix33d& m1, const matrix33d& m2) {
res = m1 * m2;
}
int main()
{
matrix33d m1, m2, m3;
m1 = 1,4,7,
2,5,8,
3,6,9;
m2 = m1;
testMM(m3, m1, m2);
cout << m1 << "\n*\n" << m2 << "\n=";
cout << m3 << endl;
}

View File

@@ -0,0 +1,36 @@
#include <iostream>
#include <complex>
#include <tvmet/Matrix.h>
#include <tvmet/Vector.h>
using namespace tvmet;
using std::cout;
using std::endl;
typedef Vector<std::complex<double>,3> vector3d;
typedef Matrix<std::complex<double>,3,3> matrix33d;
#if (defined __ICC )
#pragma warning(disable:1418) // external definition with no prior declaration
#endif
void testMV(vector3d& res, const matrix33d& m, const vector3d& v) {
res = m * v;
}
int main()
{
vector3d v1, vr;
matrix33d m1;
v1 = 1,2,3;
m1 = 1,4,7,
2,5,8,
3,6,9;
testMV(vr, m1, v1);
cout << m1 << " * " << v1 << " =\n";
cout << vr << endl;
}

View File

@@ -0,0 +1,32 @@
/* Version: $Id: diag.cc,v 1.1 2003/02/12 19:03:48 opetzold Exp $ */
#include <iostream>
#include <tvmet/Matrix.h>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
typedef Matrix<double,3,3> matrix33d;
typedef Vector<double,3> vector3d;
int main()
{
matrix33d m1, m2(0);
vector3d v1, v2;
m1 = 1,4,7,
2,5,8,
3,6,9;
v1 = diag(m1);
// not yet, since we need to assign an expression/scalar to an expression
// diag(m2) = 1.0;
cout << "M1 = " << m1 << endl;
cout << "diag(M1) = " << v1 << endl;
cout << "identity(M2) = " << m2 << endl;
}

View File

@@ -0,0 +1,191 @@
/*
* Tiny Vector Matrix Library
* Dense Vector Matrix Libary of Tiny size using Expression Templates
*
* Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: frob_matrix_norm.cc,v 1.3 2003/11/30 08:26:25 opetzold Exp $
*/
#include <iostream>
#include <tvmet/Matrix.h>
#include <tvmet/xpr/Vector.h>
using namespace std;
template<class T, std::size_t Rows, std::size_t Cols>
double
frob_norm(const tvmet::Matrix<T, Rows, Cols>& M) {
return std::sqrt(M(0,0)*M(0,0) + M(1,0)*M(1,0) + M(2,0)*M(2,0)
+ M(0,1)*M(0,1) + M(1,1)*M(1,1) + M(2,1)*M(2,1)
+ M(0,2)*M(0,2) + M(1,2)*M(1,2) + M(2,2)*M(2,2));
}
namespace tvmet {
template<class T, std::size_t Rows, std::size_t Cols>
typename NumericTraits<T>::float_type
norm(const Matrix<T, Rows, Cols>& M) {
return std::sqrt( sum( diag( MtM_prod(M,M) ) ) );
}
}
int main()
{
typedef tvmet::Matrix<double,3,3> matrix_type;
matrix_type M;
M = 1,2,3,4,5,6,7,8,9;
cout << M << endl;
cout << "handopt norm = " << frob_norm(M) << endl;
cout << "tvmet::norm = " << tvmet::norm(M) << endl;
}
/*
gcc 3.3 produce for the hand optimized frob_norm:
_Z9frob_normIdLj3ELj3EEdRKN5tvmet6MatrixIT_XT0_EXT1_EEE:
.LFB3210:
pushl %ebp
.LCFI6:
movl %esp, %ebp
.LCFI7:
subl $8, %esp
.LCFI8:
movl 8(%ebp), %eax
fldl (%eax)
fldl 24(%eax)
fxch %st(1)
fmul %st(0), %st
fxch %st(1)
fmul %st(0), %st
faddp %st, %st(1)
fldl 48(%eax)
fmul %st(0), %st
faddp %st, %st(1)
fldl 8(%eax)
fmul %st(0), %st
faddp %st, %st(1)
fldl 32(%eax)
fmul %st(0), %st
faddp %st, %st(1)
fldl 56(%eax)
fmul %st(0), %st
faddp %st, %st(1)
fldl 16(%eax)
fmul %st(0), %st
faddp %st, %st(1)
fldl 40(%eax)
fmul %st(0), %st
faddp %st, %st(1)
fldl 64(%eax)
fmul %st(0), %st
faddp %st, %st(1)
fld %st(0)
fsqrt
fucom %st(0)
fnstsw %ax
sahf
jp .L189
jne .L189
fstp %st(1)
.L186:
leave
ret
*/
/*
gcc 3.3 produce the norm function using tvmet 1.3.0:
_ZN5tvmet4normIdLj3ELj3EEENS_13NumericTraitsIT_E10float_typeERKNS_6MatrixIS2_XT0_EXT1_EEE:
.LFB3252:
.L194:
.L198:
.L203:
.L207:
.L212:
.L225:
.L238:
.L251:
pushl %ebp
.LCFI9:
movl %esp, %ebp
.LCFI10:
subl $56, %esp
.LCFI11:
movl 8(%ebp), %edx
leal -24(%ebp), %eax
movl %eax, -12(%ebp)
leal -12(%ebp), %eax
fldl 24(%edx)
fldl 48(%edx)
fldl (%edx)
fxch %st(2)
fmul %st(0), %st
fxch %st(1)
movl %eax, -28(%ebp)
fmul %st(0), %st
fxch %st(2)
movl %edx, -24(%ebp)
movl %edx, -20(%ebp)
fmul %st(0), %st
fldl 8(%edx)
fxch %st(2)
faddp %st, %st(3)
fldl 56(%edx)
fxch %st(2)
fmul %st(0), %st
fxch %st(1)
faddp %st, %st(3)
fldl 32(%edx)
fxch %st(2)
fmul %st(0), %st
fxch %st(2)
fmul %st(0), %st
fldl 16(%edx)
fxch %st(1)
faddp %st, %st(3)
fmul %st(0), %st
fldl 64(%edx)
fxch %st(2)
faddp %st, %st(3)
fldl 40(%edx)
fxch %st(2)
fmul %st(0), %st
fxch %st(2)
fmul %st(0), %st
faddp %st, %st(2)
faddp %st, %st(1)
faddp %st, %st(1)
faddp %st, %st(1)
fld %st(0)
fsqrt
fucom %st(0)
fnstsw %ax
sahf
jp .L265
jne .L265
fstp %st(1)
.L261:
fstpl -8(%ebp)
fldl -8(%ebp)
leave
ret
*/

View File

@@ -0,0 +1,37 @@
#include <iostream>
#include <tvmet/Matrix.h>
using namespace std;
int main()
{
tvmet::Matrix<double,3,2> B;
tvmet::Matrix<double,3,3> D;
B =
-0.05, 0,
0, 0.05,
0.05, -0.05;
D =
2000, 1000, 0,
1000, 2000, 0,
0, 0, 500;
cout << "B = " << B << endl;
cout << "D = " << D << endl;
{
tvmet::Matrix<double,2,2> K;
K = trans(B) * D * B;
cout << "K = " << K << endl;
}
{
tvmet::Matrix<double,2,2> K;
K = tvmet::Matrix<double,2,3>(trans(B) * D) * B;
cout << "K = " << K << endl;
}
}

View File

@@ -0,0 +1,44 @@
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstdlib>
#include <tvmet/Matrix.h>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
typedef Vector<double,3> vector3d;
typedef Matrix<double,3,3> matrix33d;
int main()
{
matrix33d m1;
std::generate(m1.begin(), m1.end(), std::rand);
vector3d vc0( col(m1, 0) );
vector3d vc1( col(m1, 1) );
vector3d vc2( col(m1, 2) );
vector3d vr0( row(m1, 0) );
vector3d vr1( row(m1, 1) );
vector3d vr2( row(m1, 2) );
cout << std::setw(12) << m1 << endl;
cout << "col vectors:" << endl;
cout << vc0 << endl;
cout << vc1 << endl;
cout << vc2 << endl;
cout << "row vectors:" << endl;
cout << vr0 << endl;
cout << vr1 << endl;
cout << vr2 << endl;
}

View File

@@ -0,0 +1,30 @@
#include <iostream>
#include <tvmet/Matrix.h>
using namespace std;
using namespace tvmet;
typedef Matrix<double,3,3> matrix33d;
#if (defined __ICC )
#pragma warning(disable:1418) // external definition with no prior declaration
#endif
void testMM(matrix33d& res, const matrix33d& m1, const matrix33d& m2) {
res = m1 * m2;
}
int main()
{
matrix33d m1, m2, m3;
m1 = 1,4,7,
2,5,8,
3,6,9;
m2 = m1;
testMM(m3, m1, m2);
cout << m1 << "\n*\n" << m2 << "\n=";
cout << m3 << endl;
}

View File

@@ -0,0 +1,36 @@
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstdlib>
#include <tvmet/Matrix.h>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
typedef Vector<double,3> vector3d;
typedef Matrix<double,3,3> matrix33d;
#if (defined __ICC )
#pragma warning(disable:1418) // external definition with no prior declaration
#endif
void testMV(vector3d& res, const matrix33d& m, const vector3d& v) {
res = m * v;
}
int main()
{
vector3d v1, vr;
matrix33d m1;
std::generate(v1.begin(), v1.end(), std::rand);
std::generate(m1.begin(), m1.end(), std::rand);
testMV(vr, m1, v1);
cout << std::setw(12) << m1 << " * " << std::setw(12) << v1 << " =\n";
cout << std::setw(12) << vr << endl;
}

103
tvmet-1.7.1/examples/ray.cc Normal file
View File

@@ -0,0 +1,103 @@
#include <iostream>
#include <cmath>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
typedef Vector<double,3> vector3d;
void reflect(vector3d& reflection, const vector3d& ray, const vector3d& surfaceNormal)
{
// The surface normal must be unit length to use this equation.
reflection = ray - 2 * dot(ray,surfaceNormal) * surfaceNormal;
// expression printing
// cout << (ray - 2 * dot(ray,surfaceNormal) * surfaceNormal) << endl;
}
int main()
{
vector3d x, y, z;
// y will be the incident ray
y[0] = 1;
y[1] = 0;
y[2] = -1;
// z is the surface normal
z[0] = 0;
z[1] = 0;
z[2] = 1;
reflect(x, y, z);
cout << "Reflected ray is: [ " << x[0] << " " << x[1] << " " << x[2]
<< " ]" << endl;
}
/*****************************************************************************************
gcc 3.2.0 produce this code (i586) using tvmet 1.3.0:
_Z7reflectRN5tvmet6VectorIdLj3EEERKS1_S4_:
.LFB2757:
.L8:
.L18:
.L22:
.L28:
.L32:
.L38:
.L44:
.L48:
pushl %ebp
.LCFI0:
movl %esp, %ebp
.LCFI1:
leal -32(%ebp), %eax
pushl %ebx
.LCFI2:
subl $52, %esp
.LCFI3:
movl 16(%ebp), %edx
movl %eax, -24(%ebp)
movl 12(%ebp), %ecx
leal -36(%ebp), %eax
movl %eax, -20(%ebp)
movl 8(%ebp), %ebx
leal -24(%ebp), %eax
fldl 8(%edx)
fldl 16(%edx)
fmull 16(%ecx)
fxch %st(1)
movl %eax, -12(%ebp)
leal -52(%ebp), %eax
fmull 8(%ecx)
movl %eax, -48(%ebp)
leal -12(%ebp), %eax
fldl (%edx)
fmull (%ecx)
fxch %st(1)
movl %eax, -44(%ebp)
faddp %st, %st(2)
faddp %st, %st(1)
fadd %st(0), %st
fld %st(0)
fstl -32(%ebp)
fxch %st(1)
fmull (%edx)
fsubrl (%ecx)
fstpl (%ebx)
fld %st(0)
fmull 8(%edx)
fsubrl 8(%ecx)
fstpl 8(%ebx)
fmull 16(%edx)
fsubrl 16(%ecx)
fstpl 16(%ebx)
addl $52, %esp
popl %ebx
popl %ebp
ret
*****************************************************************************************/

View File

@@ -0,0 +1,25 @@
/*
* This is a reused case study used as example from Rusell Edwards.
* Works only with > release-1-2-0 due to a missed
* product/operator*(Matrix,XprVector) on releases prior.
* It shows a possible use of chained expressions.
*/
#include <iostream>
#include <tvmet/Matrix.h>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
int main() {
Matrix<float,3,3> eigenvecs;
Matrix<float,3,3> M;
eigenvecs = 1,2,3,4,5,6,7,8,9;
M = 10,20,30,40,50,60,70,80,90;
Vector<float,3> ev0( M * col(eigenvecs, 0));
cout << "ev0 = " << ev0 << endl;
}

View File

@@ -0,0 +1,21 @@
#include <iostream>
#include <tvmet/Matrix.h>
using namespace std;
using namespace tvmet;
int main() {
// Matrix stuff I
Matrix<double,3,3> m1, m2, m3;
m1 = 1,2,3,
4,5,6,
7,8,9;
m2 = trans(m1);
cout << "Xpr Level printing of "
<< m1 << "\n*\n" << m2 <<"\nresults into:\n";
cout << m1*m2 << endl;
cout << "The result =\n";
m3 = m1*m2;
cout << m3 << endl << endl;
}

View File

@@ -0,0 +1,21 @@
#include <iostream>
#include <tvmet/Matrix.h>
using namespace std;
using namespace tvmet;
int main() {
// Matrix stuff II (unary functions)
Matrix<double,3,3> m1, m2, m3;
m1 = 1,2,3,
4,5,6,
7,8,9;
m2 = trans(m1);
cout << "Xpr Level printing of "
<< "sqrt(\n" << m1 <<"):\n";
cout << sqrt(m1) << endl;
cout << "The result = \n";
m3 = sqrt(m1);
cout << m3 << endl << endl;
}

View File

@@ -0,0 +1,21 @@
#include <iostream>
#include <tvmet/Matrix.h>
using namespace std;
using namespace tvmet;
int main() {
// Matrix stuff III (binary functions)
Matrix<double,3,3> m1, m2, m3;
m1 = 1,2,3,
4,5,6,
7,8,9;
m2 = trans(m1);
cout << "Xpr Level printing of "
<< "pow(\n" << m1 << ", " << m2 << "):\n";
cout << pow(m1, m2) << endl;
cout << "The result = \n";
m3 = pow(m1, m2);
cout << m3 << endl << endl;
}

View File

@@ -0,0 +1,21 @@
#include <iostream>
#include <tvmet/Matrix.h>
using namespace std;
using namespace tvmet;
int main() {
// Matrix stuff IV (binary functions with pod)
Matrix<double,3,3> m1, m2, m3;
m1 = 1,2,3,
4,5,6,
7,8,9;
m2 = trans(m1);
cout << "Xpr Level printing of "
<< "pow(\n" << m1 << ", " << 3 << "):\n";
cout << pow(m1, 3) << endl;
cout << "The result = \n";
m3 = pow(m1, 3);
cout << m3 << endl << endl;
}

View File

@@ -0,0 +1,26 @@
#include <iostream>
#include <tvmet/Vector.h>
#include <tvmet/Matrix.h>
using namespace std;
using namespace tvmet;
int main() {
// Matrix Vector stuff I
Vector<double,3> v1(1,2,3), v2(v1);
Vector<double,3> v3(0);
Matrix<double,3,3> m1, m2, m3;
m1 = 1,2,3,
4,5,6,
7,8,9;
m2 = trans(m1);
cout << "Xpr Level printing of "
<< m1 << "\n* " << v1 <<"\nresults into:\n";
cout << m1*v1 << endl;
cout << "The result =\n";
v3 = m1*v1;
cout << v3 << endl << endl;
}

View File

@@ -0,0 +1,26 @@
#include <iostream>
#include <tvmet/Vector.h>
#include <tvmet/Matrix.h>
using namespace std;
using namespace tvmet;
int main() {
// Matrix Vector stuff II
Vector<double,3> v1(1,2,3), v2(v1);
Vector<double,3> v3(0);
Matrix<double,3,3> m1, m2, m3;
m1 = 1,2,3,
4,5,6,
7,8,9;
m2 = trans(m1);
cout << "Xpr Level printing of "
<< "sqrt(\n" << m1 << "\n* " << v1 << ")\nresults into:\n";
cout << sqrt(m1*v1) << endl;
cout << "The result =\n";
v3 = sqrt(m1*v1);
cout << v3 << endl << endl;
}

View File

@@ -0,0 +1,19 @@
#include <iostream>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
int main() {
// Vector stuff I
Vector<double,3> v1(1,2,3), v2(v1);
Vector<double,3> v3(0);
cout << "Xpr Level printing of "
<< v1 << " * " << v2 <<":\n";
cout << v1*v2 << endl;
cout << "The result = \n";
v3 = v1*v2;
cout << v3 << endl << endl;
}

View File

@@ -0,0 +1,19 @@
#include <iostream>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
int main() {
// Vector stuff II (unary functions)
Vector<double,3> v1(1,2,3), v2(v1);
Vector<double,3> v3(0);
cout << "Xpr Level printing of "
<< "sqrt(" << v1 <<"):\n";
cout << sqrt(v1) << endl;
cout << "The result = \n";
v3 = sqrt(v1);
cout << v3 << endl << endl;
}

View File

@@ -0,0 +1,19 @@
#include <iostream>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
int main() {
// Vector stuff III (binary functions)
Vector<double,3> v1(1,2,3), v2(v1);
Vector<double,3> v3(0);
cout << "Xpr Level printing of "
<< "pow(" << v1 << ", " << v2 << "):\n";
cout << pow(v1, v2) << endl;
cout << "The result = \n";
v3 = pow(v1, v2);
cout << v3 << endl << endl;
}

View File

@@ -0,0 +1,19 @@
#include <iostream>
#include <tvmet/Vector.h>
using namespace std;
using namespace tvmet;
int main() {
// Vector stuff IV (binary functions with pod)
Vector<double,3> v1(1,2,3), v2(v1);
Vector<double,3> v3(0);
cout << "Xpr Level printing of "
<< "pow(" << v1 << ", " << 3 << "):\n";
cout << pow(v1, 3) << endl;
cout << "The result = \n";
v3 = pow(v1, 3);
cout << v3 << endl << endl;
}