Commit df746752 authored by laura.gassner's avatar laura.gassner

Merge branch 'thof/DENISE-import_Seitosh'

parents aca39e8a 628f7bb8
doc
bin
header
# This is a file for environment variables used in Makefiles in aff fourier stfinv # this is <Makefile_var>
# ----------------------------------------------------------------------------
#
# Copyright (c) 2015 by Thomas Forbriger (BFO Schiltach)
#
# set variables expected by vendor Makefiles
#
# REVISIONS and CHANGES
# 02/11/2015 V1.0 Thomas Forbriger
#
# ============================================================================
#
# This file is included (via make include statement) by Makefiles in
# aff, fourier, stfinv, and libcseife
#
# Its purpose is to set make variables which are expected by vendor Makefiles.
#
# ============================================================================
LOCINCLUDEDIR=../header # extract relative path to contrib with respect of including Makefile
CONTRIBDIR:=$(abspath $(dir $(lastword $(MAKEFILE_LIST))))
LOCLIBDIR=../bin # ----------------------------------------------------------------------------
LOCBINDIR=../bin # set values required by vendor Makefiles
LOCINCLUDEDIR=$(CONTRIBDIR)/header
TF_WWWBASEDIR=$HOME/public_html/txt/cxx LOCLIBDIR=$(CONTRIBDIR)/bin
LOCBINDIR=$(CONTRIBDIR)/bin
TF_WWWBASEDIR=$(CONTRIBDIR)/doc
TF_BROWSER=firefox TF_BROWSER=firefox
# set Fortran compiler if not yet set in environment
ifeq "$(origin FC)" "default"
FC=/usr/bin/g77-3.3 FC=/usr/bin/g77-3.3
endif
# ----- END OF Makefile_var -----
...@@ -2,7 +2,7 @@ this is <COPYING> ...@@ -2,7 +2,7 @@ this is <COPYING>
============================================================================ ============================================================================
libaff libaff
------ ------
$Id: COPYING 4964 2013-02-01 13:27:42Z lrehor $ $Id$
============================================================================ ============================================================================
Copyright (C) 2002 by Thomas Forbriger and Wolfgang Friederich Copyright (C) 2002 by Thomas Forbriger and Wolfgang Friederich
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* ---------------------------------------------------------------------------- * ----------------------------------------------------------------------------
* *
* $Id: Carray.h 3957 2011-05-16 14:46:43Z tforb $ * $Id$
* \author Thomas Forbriger * \author Thomas Forbriger
* \date 14/05/2011 * \date 14/05/2011
* *
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#define AFF_CARRAY_H_VERSION \ #define AFF_CARRAY_H_VERSION \
"AFF_CARRAY_H V1.0 " "AFF_CARRAY_H V1.0 "
#define AFF_CARRAY_H_CVSID \ #define AFF_CARRAY_H_CVSID \
"$Id: Carray.h 3957 2011-05-16 14:46:43Z tforb $" "$Id$"
#include<aff/array.h> #include<aff/array.h>
#include<aff/lib/checkedcast.h> #include<aff/lib/checkedcast.h>
......
# this is <Makefile> # this is <Makefile>
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# $Id: Makefile 4964 2013-02-01 13:27:42Z lrehor $ # $Id$
# #
# Copyright (c) 2002 by Thomas Forbriger (IMG Frankfurt) # Copyright (c) 2002 by Thomas Forbriger (IMG Frankfurt)
# #
...@@ -24,19 +24,10 @@ ...@@ -24,19 +24,10 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# ---- # ----
# #
# A note on header files: # Please have a look at the README file coming along with the source code in
# We extensively comment class declarations within the header files. The # this directory for further notes regarding provided functionality,
# reduce compilation time when using the library code, comments will be # prerequisites and installation.
# stripped from the header files that are exportet. These stripped versions
# are placed in the source code path with name *.h.strip and will be linked to
# INCINSTALLPATH with name *.h.
# #
# Although comment stripping could be done by perl with an elaborate regular
# expression, we prefer the remcmmnt command by Jari Laaksonen. You can find
# the code at
# http://www.eti.pg.gda.pl/KATEDRY/kecs/lab-cpp/snippets/
# If it is not available to you, you should set TF_REMCMMNT=cat (see below)
#
# REVISIONS and CHANGES # REVISIONS and CHANGES
# 06/12/2002 V1.0 Thomas Forbriger # 06/12/2002 V1.0 Thomas Forbriger
# 27/12/2002 V1.1 doxygen reads Fortran code and files generated by f2c # 27/12/2002 V1.1 doxygen reads Fortran code and files generated by f2c
...@@ -52,26 +43,12 @@ ...@@ -52,26 +43,12 @@
# 17/01/2011 V1.9 distinguish library creation and installation # 17/01/2011 V1.9 distinguish library creation and installation
# 27/07/2011 V1.10 give precedence to $LOCINCLUDEDIR over # 27/07/2011 V1.10 give precedence to $LOCINCLUDEDIR over
# $SERVERINCLUDEDIR # $SERVERINCLUDEDIR
# 26/01/2014 eliminate comment stripping
# #
# ============================================================================ # ============================================================================
#
# environment variables
# ---------------------
#
# You will like to set the following environment variables:
#
# LOCINCLUDEDIR Defines the path where header files will be copied for
# usage in your own projects. You will pass this path to
# the precompiler with the -I option.
# LOCLIBDIR Defines the path where the binary library will be
# placed.
# TF_WWWBASEDIR Defines the path to your personal homepage. That's the
# place where doxygen output will be written too (see
# below).
#
# You will find the installed library header files in $(LOCINCLUDEDIR)/aff
include ../Makefile_var CONTRIBDIR=..
include $(CONTRIBDIR)/Makefile_var
.PHONY: all .PHONY: all
...@@ -113,36 +90,19 @@ SRC=lib/error.cc dump.cc lib/strided.cc lib/stridedstepper.cc \ ...@@ -113,36 +90,19 @@ SRC=lib/error.cc dump.cc lib/strided.cc lib/stridedstepper.cc \
# test programs are placed in a subdirectory # test programs are placed in a subdirectory
TESTS=$(wildcard tests/*.cc) TESTS=$(wildcard tests/*.cc)
# whereever we find a README, we will use it # whereever we find a README, we will use it
README=$(shell find . -name README) README.changelog README.groups README=$(shell find . -name README)
# the frame of doxygen documentation is palced in text files
DOXYTXT=$(shell find . -name doxygen\*.txt)
# place where we will copy header files # place where we will copy header files
INCINSTALLPATH=$(LOCINCLUDEDIR)/aff INCINSTALLPATH=$(LOCINCLUDEDIR)/aff
# place where we will copy the binary library # place where we will copy the binary library
LIBINSTALLPATH=$(LOCLIBDIR) LIBINSTALLPATH=$(LOCLIBDIR)
# name of headers with comments stripped off (these are linked to your include
# directory)
STRIPHEADER=$(addsuffix .strip,$(notdir $(HEADERS)))
# name of installed (exported) header files (these are the names in your # name of installed (exported) header files (these are the names in your
# include directory) # include directory)
INSTHEADER=$(addprefix $(INCINSTALLPATH)/,$(filter-out ./tests/%,$(HEADERS))) INSTHEADER=$(addprefix $(INCINSTALLPATH)/,$(filter-out ./tests/%,$(HEADERS)))
#======================================================================
# comments can be removed from headers
# ------------------------------------
# if defined, empty lines are kept in comment-stripped headers
# to synchronize line numbers (necessary during library debugging)
EMPTYPRINT=1
#EMPTYPRINT=0
# define this to be cat in case you do not have remcmmnt available
ifndef TF_REMCMMNT
TF_REMCMMNT=cat
endif
#REMCMMNT=remcmmnt
#REMCMMNT=cat
#====================================================================== #======================================================================
# compiler and preprocessor flags # compiler and preprocessor flags
# ------------------------------- # -------------------------------
...@@ -158,9 +118,8 @@ CPPFLAGS=$(addprefix -I,$(LOCINCLUDEDIR) $(subst :, ,$(SERVERINCLUDEDIR))) \ ...@@ -158,9 +118,8 @@ CPPFLAGS=$(addprefix -I,$(LOCINCLUDEDIR) $(subst :, ,$(SERVERINCLUDEDIR))) \
# ------- # -------
# files which are to be edited # files which are to be edited
flist: Makefile tests/Makefile doxydoc.cfg $(README) COPYING \ flist: Makefile doxydoc.cfg $(README) COPYING \
$(HEADERS) $(SRC) $(TESTS) $(wildcard doxy*.cfg) \ $(HEADERS) $(SRC) $(TESTS) $(wildcard doxy*.cfg) $(DOXYTXT)
tests/f77common.inc tests/f77procs.f
echo $(filter-out lib/% tests/%,$^) | tr ' ' '\n' | sort > $@ echo $(filter-out lib/% tests/%,$^) | tr ' ' '\n' | sort > $@
echo $(filter lib/%,$^) | tr ' ' '\n' | sort >> $@ echo $(filter lib/%,$^) | tr ' ' '\n' | sort >> $@
echo $(filter tests/%,$^) | tr ' ' '\n' | sort >> $@ echo $(filter tests/%,$^) | tr ' ' '\n' | sort >> $@
...@@ -177,9 +136,7 @@ clean: ; ...@@ -177,9 +136,7 @@ clean: ;
-find . -name \*.bak | xargs --no-run-if-empty /bin/rm -v -find . -name \*.bak | xargs --no-run-if-empty /bin/rm -v
-find . -name \*.o | xargs --no-run-if-empty /bin/rm -v -find . -name \*.o | xargs --no-run-if-empty /bin/rm -v
-find . -name \*.d | xargs --no-run-if-empty /bin/rm -v -find . -name \*.d | xargs --no-run-if-empty /bin/rm -v
-find . -name \*.h.strip | xargs --no-run-if-empty /bin/rm -v -/bin/rm -vf flist *.o install-include *.xxx junk* *.a *.so
-/bin/rm -vf flist *.o install-include libcontxx.a *.xxx junk* *.a *.so
cd tests; $(MAKE) clean
#====================================================================== #======================================================================
# library part # library part
...@@ -218,35 +175,12 @@ include $(patsubst %.cc,%.d,$(SRC)) ...@@ -218,35 +175,12 @@ include $(patsubst %.cc,%.d,$(SRC))
#====================================================================== #======================================================================
# header files # header files
# ------------ # ------------
#
# Since we extensively document the class structures within the header files,
# these should be stripped for the production version (otherwise the compiler
# has to scan all comments on each compile). Stripping is done by the rule
# below and is controlled by the variables TF_REMCMMNT and EMPTYPRINT (see
# above).
# comment stripping
# -----------------
$(call CHECKVARS,TF_REMCMMNT EMPTYPRINT)
# awk rule assumes that the first non-comment line starts with '#'
# and that the first (copyright) comment end with pattern "^ */"
%.h.strip: %.h
awk 'BEGIN {hot=1;} /^ \*\// { if (hot) { hot=2; print; next;} }\
/^#/ { hot=0; } \
{ if (hot==2) { print ""; } else if (hot) { print; } }' $< > $@
$(TF_REMCMMNT) $< | awk 'BEGIN {hot=0;} \
/^ *$$/ { if ((hot) && ($(EMPTYPRINT))) { print ""; } next; } \
/^#/ { hot=1; } { if (hot) print; }' >> $@
#----------------------------------------------------------------------
.PRECIOUS: %.h.strip
$(call CHECKVAR,INCINSTALLPATH) $(call CHECKVAR,INCINSTALLPATH)
$(INCINSTALLPATH)/%.h: %.h.strip $(INCINSTALLPATH)/%.h: %.h
mkdir -vp $(dir $@) @mkdir -vp $(dir $@)
-rm -fv $@ -@rm -fv $@
/bin/cp -vpd $< $@ @/bin/cp -vpd $< $@
# install header files # install header files
.PHONY: install-include .PHONY: install-include
...@@ -292,9 +226,7 @@ DOXYWWWPATH=$(TF_WWWBASEDIR)/libaff ...@@ -292,9 +226,7 @@ DOXYWWWPATH=$(TF_WWWBASEDIR)/libaff
doxyclean: ;/bin/rm -rfv $(TF_WWWBASEDIR)/libaff doxydoc.xxx doxyclean: ;/bin/rm -rfv $(TF_WWWBASEDIR)/libaff doxydoc.xxx
DOXYSRC=$(README) $(HEADERS) $(SRC) \ DOXYSRC=$(DOXYTXT) $(HEADERS) $(SRC)
tests/f77procs.P tests/f77procs.f \
tests/f77common.inc tests/f77common_com.P
# create doxygen intermediate configuration # create doxygen intermediate configuration
PWD=$(shell env pwd) PWD=$(shell env pwd)
...@@ -326,36 +258,6 @@ kdocview: kdoc; $(TF_BROWSER) file:$(KDOCDIR)/index.html & ...@@ -326,36 +258,6 @@ kdocview: kdoc; $(TF_BROWSER) file:$(KDOCDIR)/index.html &
showsections: $(README) showsections: $(README)
egrep -n '\\subsection|\\section|\\page' $^ egrep -n '\\subsection|\\section|\\page' $^
#======================================================================
# delegate test targets
# ---------------------
tests/%.P:
cd tests; echo "#############################"; $(MAKE) $(notdir $@)
tests/f2ctest: tests/f77test.cc install-include libaff.a
cd tests; echo "#############################"; $(MAKE) $(notdir $@)
tests/%: tests/%.cc install-include libaff.a
cd tests; echo "#############################"; $(MAKE) $(notdir $@)
tests/bin%: tests/bin%.cc install-include libaff.a
cd tests; echo "#############################"; $(MAKE) $(notdir $@)
tests/%.run: tests/%
echo "#############################"
$< $(ARG)
/bin/rm -fv $< $<.o
# after each modification to the library this target should be used
compile-tests: \
tests/shapetest.run \
tests/reprtest.run \
tests/arraytest.run \
tests/operatortest.run \
tests/helpertest.run \
tests/f77test.run
#====================================================================== #======================================================================
# create package # create package
# -------------- # --------------
......
/*! \file libaff/README this is <README>
* \brief C++ containers for numbers (libaff) ============================================================================
* AFF --- A container for numbers
* ---------------------------------------------------------------------------- -------------------------------
* $Id$
* $Id: README 4964 2013-02-01 13:27:42Z lrehor $ ============================================================================
*
* Copyright (c) 2002 by Thomas Forbriger (IMG Frankfurt) For compilation instructions see README.1st in the root directory of the tar-ball or
* http://gpitrsvn.gpi.uni-karlsruhe.de:8000/TFSoftware/wiki/docs/installation
* ----
* This program is free software; you can redistribute it and/or modify The AFF (Array of Friederich and Forbriger) is a lightweight class library. It
* it under the terms of the GNU General Public License as published by offers a simple and easy to use container for numbers as is necessary in
* the Free Software Foundation; either version 2 of the License, or numerical code. The offered array always has a rectangular strided layout,
* (at your option) any later version. reference semantics (through counted references) and a Fortran layout in
* memory. The interface is intentionally kept sparse to keep compilation times
* This program is distributed in the hope that it will be useful, small. The array itself is meant to be used to pass numbers from one program
* but WITHOUT ANY WARRANTY; without even the implied warranty of module to the other. If you want to exploit the power of expression templates,
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the pass the array contents to something like Blitz++.
* GNU General Public License for more details.
* Installation
* You should have received a copy of the GNU General Public License ------------
* along with this program; if not, write to the Free Software environment variables:
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA LOCINCLUDEDIR Defines the path where header files will be copied for
* ---- usage in your own projects. You will pass this path to
* the precompiler with the -I option.
* C++ containers for numbers (libaff) LOCLIBDIR Defines the path where the binary library will be
* placed.
* This file contains: TF_WWWBASEDIR Defines the path to your personal homepage. That's the
* - documentation of namespace aff place where doxygen output will be written too (see
* - mainpage text in the Makefile).
* - documentation for pages:
* - \ref page_design make all installs headers, binary libraries and documentation
* - \ref page_using
* - \ref page_notes You will find the installed library header files in $(LOCINCLUDEDIR)/aff
* - \ref page_naming
* Dependencies
* REVISIONS and CHANGES ------------
* - 06/12/2002 V1.0 Thomas Forbriger (copied from libcontxx) external dependencies: -
* - 20/12/2002 V1.1 (thof) internal dependencies: -
* - complete revision of this file
* - there are major gaps in
* -# \ref sec_design_multidimensional
* -# \ref page_using
* - 28/12/2002 V1.2 (thof)
* - new term for containers of const elements
* - added documentation regarding the concept of
* const correctness
* - added documentation regarding member typedefs
* - 29/12/2002 V1.3 (thof)
* - added section about replicated shared heap base
* class (\ref sec_design_replicated)
* - added section about sparse interface
* (\ref sec_design_interface_sparse)
* - added section about accessing internals
* (\ref sec_design_interface_internals)
* - reflect changes to Subarray and Slice
* - tell about class hierarchies and member data vs.
* inheritance
* - 04/01/2003 V1.4 (thof)
* - added section about Tcontainer typedef
* (\ref sec_design_interface_tcontainer)
* - 10/02/2004 V1.5 (thof)
* - added section about decision against interface
* base classes
* (\ref sec_design_interface_nobaseclass)
* - 10/11/2010 V1.6 (thof)
* - code fragments for precompiled templates are
* removed from the library (\ref sec_design_binary)
* - 14/05/2011 V1.7 (thof)
* - add info on raw-major and column-major order
* - 15/05/2011 V1.8 (thof)
* - reordered documentation, movde modules to
* README.groups
*
* ============================================================================
*/
/*! \brief Root namespace of library
This namespace contains all modules of the library
(see \ref sec_main_modules).
Here you should find all components, the user needs to work with this
library.
*/
namespace aff {
} // namespace aff
/*======================================================================*/
/*! \mainpage
\author Thomas Forbriger
\author Wolfgang Friederich
\since December 2002
\date December 2002
\version V1.0
$Id: README 4964 2013-02-01 13:27:42Z lrehor $
Contents of this page:
- \ref sec_main_aims
- \ref sec_main_need
- \ref sec_main_peculiar
- \ref sec_main_modules
Additional information:
- \ref page_changelog
- \ref page_project_status
- \ref page_using
- \ref page_array_layout
- \ref page_design
- \ref page_naming
- \ref page_representation
- \ref page_fortran
\section sec_main_aims Aims of the library
The AFF (Array of Friederich and Forbriger) is a lightweight class library.
It offers a simple and easy to use container for numbers as is necessary in
numerical code. The offered array always has a rectangular strided layout,
reference semantics (through counted references) and a Fortran layout in
memory. The interface is intentionally kept sparse to keep compilation times
small. The array itself is meant to be used to pass numbers from one program
module to the other. If you want to exploit the power of expression
templates, pass the array contents to something like Blitz++.
Contents of this page:
\section sec_main_peculiar Peculiarities of AFF
\par Containers use counted references
All containers (e.g. aff::Array, aff::Series) use counted references to access
global memory. Assigning one container object to another just assigns the
reference. Both will use the same data in memory afterwards.
\sa \ref page_representation.
\par Const-correctness for array elements
In this library we follow provide functionality to write const-correct code
with regard to the array container and with regard to its element values.
\sa \ref sec_design_const.
\par Multidimensional arrays
Every aff::Array of this class has aff::Strided::Mmax_dimen dimensions.
Construction and access for lower dimensionality is provided. In the case of
using less dimensions, the size of the unused dimensions is 1 by default and
its index is inherently set to the first index.
\sa \ref sec_design_multidimensional.
\section sec_main_need Why do we need this array library
One major reason for replacing Fortran77 by C++ in numerical code is the
convenience in expressing logistics. Data of different type and size may be
packed into classes and encapsulated from the outside world. Most numerical
results are to be stored in arrays, multi-dimensional arrays in particular.
This library provides the basic functionality for storing many data of the
same type in memory, passing them around between subroutines in an efficient
way and accessing them through convenient interfaces. The main purpose of
this library is not calculation but managing (passing between program
modules, selection of subsets of the data) large amounts of numbers. In the
future it might provide interfaces to libraries like blitz++ for finite
difference calculations, MTL for linear algebra calculations, and POOMA for
parallel computations.
\sa http://www.sophya.org/, http://www.boost.org
\section sec_main_modules Modules of the library
The main module is the array class aff::Array. It provides basic
functionality through its interface. See the explanation there.
It is presented in aff/array.h
The object code is placed in libaff.a.
\sa \ref group_array, \ref group_array_extensions
*/
/*======================================================================*/
/*! \page page_design Design decisions
Contents of this page:
- \ref sec_design_interface
- \ref sec_design_interface_sparse
- \ref sec_design_interface_typedef
- \ref sec_design_interface_tcontainer
- \ref sec_design_interface_internals
- \ref sec_design_interface_nobaseclass
- \ref sec_design_threeclasses
- \ref sec_design_hierarchy
- \ref sec_design_replicated
- \ref sec_design_replicated_fact
- \ref sec_design_replicated_problem
- \ref sec_design_replicated_solution
- \ref sec_design_copy
- \ref sec_design_namespaces
- \ref sec_design_binary
- \ref sec_design_multidimensional
- \ref sec_design_const
- \ref sec_design_const_problem
- \ref sec_design_const_approach
- \ref sec_design_const_alternatives
- \ref sec_design_const_general
\section sec_design_interface Common interface concepts
\subsection sec_design_interface_sparse Sparse interfaces
The class library is intended to be a light-weight library. This means it
should offer basic functionality in terms of multidimensional containers