Index: Makefile
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/Makefile,v
retrieving revision 1.8
diff -c -p -r1.8 Makefile
*** Makefile 2002/02/27 03:51:53 1.8
--- Makefile 2002/03/04 22:50:50
*************** MANUALNAME= pooma
*** 17,23 ****
XMLSOURCES= $(MANUALNAME).xml preface.xml starting.xml \
introduction.xml tutorial.xml \
concepts.xml arrays.xml data-parallel.xml glossary.xml \
! bibliography.xml template.xml code.xml
# Create all versions of the manual.
all: $(MANUALNAME).ps $(MANUALNAME).pdf $(MANUALNAME).html
--- 17,23 ----
XMLSOURCES= $(MANUALNAME).xml preface.xml starting.xml \
introduction.xml tutorial.xml \
concepts.xml arrays.xml data-parallel.xml glossary.xml \
! bibliography.xml template.xml code.xml uml.xml
# Create all versions of the manual.
all: $(MANUALNAME).ps $(MANUALNAME).pdf $(MANUALNAME).html
Index: code.xml
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/code.xml,v
retrieving revision 1.1
diff -c -p -r1.1 code.xml
*** code.xml 2002/02/27 03:51:53 1.1
--- code.xml 2002/03/04 22:50:52
***************
*** 534,540 ****
Indentation follows the GNU
Emacs 's &cc; mode guidelines. Most increases in
! indentation levels starts two characters to the right.
Most brackets, e.g., in function definitions, occur on
separate lines. Exceptions are for very short functions.
--- 534,540 ----
Indentation follows the GNU
Emacs 's &cc; mode guidelines. Most increases in
! indentation levels start two characters to the right.
Most brackets, e.g., in function definitions, occur on
separate lines. Exceptions are for very short functions.
***************
*** 604,610 ****
Global Variables
! Global variables are avoided whenever possible.
--- 604,614 ----
Global Variables
! Global variables are avoided whenever possible. Where
! necessary, their names are the concatenation of capitalized words
! such that the first word is not capitalized and a suffix of
! _g is appended, e.g.,
! veryFewGlobalVariables_g .
***************
*** 804,810 ****
Errors and Exceptions
! &pooma; code uses very few exception since not all &cc;
compilers adequately support exceptions. Thus, all uses must also
have corresponding code not using exceptions. See, e.g.,
POOMA_EXCEPTIONS in the code.
--- 808,814 ----
Errors and Exceptions
! &pooma; code uses very few exceptions since not all &cc;
compilers adequately support exceptions. Thus, all uses must also
have corresponding code not using exceptions. See, e.g.,
POOMA_EXCEPTIONS in the code.
Index: pooma.xml
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/pooma.xml,v
retrieving revision 1.4
diff -c -p -r1.4 pooma.xml
*** pooma.xml 2002/02/27 03:51:53 1.4
--- pooma.xml 2002/03/04 22:50:55
***************
*** 95,100 ****
--- 95,102 ----
Brick">
+ Centering">
+
char">
complex">
***************
*** 148,153 ****
--- 150,157 ----
TinyMatrix">
+ Mesh">
+
MultiPatch">
Options">
***************
*** 251,256 ****
--- 255,262 ----
+
+
***************
*** 304,311 ****
1.00
! 2002 Jan 31
jdo
First publication.
--- 310,325 ----
+ 1.01
+ 2002 Mar 01
+ jdo
+ Added UML class diagrams, revised compilation
+ directions, and added a description of the source code
+ structure.
+
+
1.00
! 2002 Jan 31
jdo
First publication.
*************** a(I,J) = (1.0/9.0) *
*** 1002,1009 ****
architecture-specific initialization. The function always
returns &true;.
- HERE
-
initialize 's alternative form
assumes the &pooma;-specific and architecture-specific
command-line arguments have already been removed from
--- 1016,1021 ----
*************** UNFINISHED
*** 3680,3915 ****
&template-appendix;
&code-appendix;
-
-
-
- ¨ Class Diagrams
-
- In this chapter, we present Unified Modeling Language (¨)
- class diagrams. These are created at the
- specification level, which indicates the
- software interface, not its implementation. Readers interested in
- the implementation are encouraged to read the corresponding source
- code. More extensive explanations of these classes appear in the
- main chapters of this &book;.
-
-
- Explanation of ¨ Class Diagrams
-
-
-
-
-
-
-
-
- An Explanation of UML Class Diagrams
-
-
-
-
- illustrates a typical
- ¨ class diagram. The diagram has three classes:
- Classname1 , Classname2 , and
- Classname2<1> . Most classes are represented by
- three-part boxes. The top part lists the class's name. The middle
- part lists public data members, if any. Few &pooma; classes have
- public data members so this section is frequently empty. The bottom
- part lists public member functions, if any.
- Classname2<1> has only one part, not three. Its
- three-part box appears in another diagram, presumably because there
- is not enough room in this one. Both Classname1 and
- Classname2 have template parameters, each named
- T . These occur in dashed boxes at the upper-right
- corner of the class boxes. Files implementing a class are listed at
- the lower, right corner of the class's box; this is not standard UML
- notation.
-
- Lines connect classes. The solid arrow with large triangular
- arrowhead indicates that Classname2 is a subtype of
- Classname1 . Since this diagram represents the
- specification level, subtyping does not necessarily correspond to
- &cc; type inheritance. Also, subtype class boxes need only list
- members not available in the supertype. For this case,
- Classname2 has no new members not provided by
- Classname1 . A dashed arrow indicates a class formed by
- a template instantiation. The class name indicates which template
- parameters are bound. For example, Classname2<1>
- instantiates Classname2 with T equal
- to 1.
-
- These diagrams omit a lot of details. Private and protected
- data members are not listed. Compile-time types and values are not
- listed. No indication is given of the actual implementation.
-
-
-
- &array;s
-
-
- Relationship Between &array; and &dynamicarray;s
-
-
-
-
-
-
-
-
- &dynamicarray;s are subtypes of &array;s
-
-
-
-
- Both &array;s and &dynamicarray;s have so many member
- functions that their class boxes appear in separate diagrams.
- indicates that
- &dynamicarray;s are subtypes of &array;s. Both have value type and
- engine tag template parameters but &dynamicarray;'s dimension must
- be one.
-
-
- &array; Diagram
-
-
-
-
-
-
-
-
- &array; Class Diagram
-
-
-
-
-
- &dynamicarray; Diagram
-
-
-
-
-
-
-
-
- &dynamicarray; Class Diagram
-
-
-
-
!
!
! &domain;s
!
! &domain;s and its subtypes are shown in . All classes are instantiated
! from or subtypes of &domain;. As mentioned in , the Domain<1>
! template instantiation has additional member functions. It uses
! the Domain<1>::iterator . The four &domain;
! subtypes appear in the bottom half of the figure. Each requires
! the same template parameter as &domain;. Each of these has a
! template instantiation for the one-dimensional case. We omit
! listing their additional member functions since these are the same
! as for Domain<1> .
!
!
! &domain;s
!
!
!
!
!
!
!
!
! &domain;s
!
!
!
!
!
!
!
!
! &engine;s
!
! &engine;s and its subtypes are shown in . Five subtypes of &engine;s
! are shown. Details appear in subsequent diagrams. The
! Engine class box shows no members because it has no
! members. Only subtypes have members. More explanation of these
! classes can be found in . The
! implementation files in use the
! [1-7] regular expression to indicate 1, 2,
! …, or 7.
!
!
! &engine;s
!
!
!
!
!
!
!
!
! Relationships among &engine;s
!
!
!
!
!
! &brick; and &compressiblebrick; &engine;s
!
!
!
!
!
!
!
!
! &brick; and &compressiblebrick; &engine;s
!
!
!
!
!
! &dynamic; and &multipatch; &engine;s
!
!
!
!
!
!
!
!
! &dynamic; and &multipatch; &engine;s
!
!
!
!
!
! &remote; &engine;s
!
!
!
!
!
!
!
!
! &remote; &engine;s
!
!
!
!
!
!
!
FIXME contains a short
introduction to template programming. Readers needing more
background material might want to read Koenig and Moo's
Accelerated &cc; , Stanley Lippman's
--- 30,36 ----
Readers will need to be familiar with &cc;, the language in which
&pooma; programs are written. Classes, objects, function objects,
template classes, and template functions will all be used. Appendix
! contains a short
introduction to template programming. Readers needing more
background material might want to read Koenig and Moo's
Accelerated &cc; , Stanley Lippman's
***************
*** 375,381 ****
! Jeffrey D. Oldham, 2002 February
--- 375,381 ----
! Jeffrey D. Oldham, 2002 March
Index: starting.xml
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/starting.xml,v
retrieving revision 1.1
diff -c -p -r1.1 starting.xml
*** starting.xml 2002/02/27 03:51:53 1.1
--- starting.xml 2002/03/04 22:50:55
***************
*** 5,11 ****
for use, and then compile a Hello, &pooma;
program. Impatient readers will find the first section helpful.
Those desiring more details will find this section provides a useful
! overview of the chapter.
--- 5,11 ----
for use, and then compile a Hello, &pooma;
program. Impatient readers will find the first section helpful.
Those desiring more details will find this section provides a useful
! overview of the chapter although it can be skipped.
***************
*** 39,45 ****
indicates the operating system and compiler. Permitted choices
are the names of files in the config/arch/ subdirectory omitting
! the .conf suffix.
--- 39,45 ----
indicates the operating system and compiler. Permitted choices
are the names of files in the config/arch/ subdirectory omitting
! the .conf suffixes.
***************
*** 60,69 ****
program available at examples/Manual/Sequential/initialize-finalize.cpp :
&initialspace;export POOMAHOME=/home/oldham/pooma/pooma1
! &initialspace;g++ -I${POOMAHOME}/src -I${POOMAHOME}/lib/${POOMASUITE} initialize-finalize.cpp -o initialize-finalize -L${POOMAHOME}/lib/${POOMASUITE} -lpooma-gcc
! The environment variable indicates the location of the &toolkit;
! header files and the library.
--- 60,73 ----
program available at examples/Manual/Sequential/initialize-finalize.cpp :
&initialspace;export POOMAHOME=/home/oldham/pooma/pooma1
! &initialspace;g++ -I${POOMAHOME}/src \
! &initialspace;-I${POOMAHOME}/lib/${POOMASUITE} \
! &initialspace;initialize-finalize.cpp \
! &initialspace;-o initialize-finalize \
! &initialspace;-L${POOMAHOME}/lib/${POOMASUITE} -lpooma-gcc
! The POOMAHOME environment variable indicates the
! location of the &toolkit; header files and the library.
***************
*** 113,121 ****
operating system with &kcc;.
To configure the source code, use a command
! like &initialspace;./configure &dashdash;arch
! LINUXgcc &dashdash;opt &dashdash;suite LINUXgcc-opt
! The architecture argument to the
&dashdash;arch option is the name of the
corresponding configuration file, omitting its .conf suffix. The
--- 117,125 ----
operating system with &kcc;.
To configure the source code, use a command
! like
! &initialspace;./configure &dashdash;arch LINUXgcc &dashdash;opt &dashdash;suite LINUXgcc-opt
! The architecture argument to the
&dashdash;arch option is the name of the
corresponding configuration file, omitting its .conf suffix. The
***************
*** 137,152 ****
need to be compiled. Specify the desired suite by setting the
POOMASUITE environment variable to the appropriate
value. For example, if using the bash
! shell, use &initialspace;export
! POOMASUITE=suiteName
! substituting the suite name's suiteName .
If using the csh shell,
! use &initialspace;setenv POOMASUITE
! suiteName In the
previous paragraph, the suite name is
LINUXgcc-opt so we would issue the
! statement &initialspace;setenv POOMASUITE
! LINUXgcc-opt
Issuing the make command compiles the
&pooma; source code files to create the &pooma; library. The
--- 141,158 ----
need to be compiled. Specify the desired suite by setting the
POOMASUITE environment variable to the appropriate
value. For example, if using the bash
! shell, use
! &initialspace;export POOMASUITE=suiteName
! substituting the suite name's suiteName .
If using the csh shell,
! use
! &initialspace;setenv POOMASUITE suiteName
! In the
previous paragraph, the suite name is
LINUXgcc-opt so we would issue the
! statement
! &initialspace;setenv POOMASUITE LINUXgcc-opt
!
Issuing the make command compiles the
&pooma; source code files to create the &pooma; library. The
***************
*** 158,164 ****
class="libraryfile">lib/LINUXgcc-opt/libpooma-gcc.a. If
it fails, the makefiles will print a line indicating which file
failed to compile. Reading the corresponding .info may indicate what
failed.
The same &pooma; source code can support multiple suites as
--- 164,170 ----
class="libraryfile">lib/LINUXgcc-opt/libpooma-gcc.a. If
it fails, the makefiles will print a line indicating which file
failed to compile. Reading the corresponding .info file may indicate what
failed.
The same &pooma; source code can support multiple suites as
***************
*** 188,195 ****
The configuration script supports many more command-line
options than the two used above, but few &pooma; users need use
them except those using distributed &pooma;, which are described
! below. /configure -h yields a complete list.
! We describe also describe them here.
--- 194,201 ----
The configuration script supports many more command-line
options than the two used above, but few &pooma; users need use
them except those using distributed &pooma;, which are described
! below. ./configure -h yields a complete list.
! We also describe them here.
***************
*** 220,226 ****
The environment variable POOMASUITE 's value
should equal suite when compiling
the library. suite can be any
! string that an serve as a filename. If this option is
omitted, the &dashdash;arch architecture
is used.
--- 226,232 ----
The environment variable POOMASUITE 's value
should equal suite when compiling
the library. suite can be any
! string that can serve as a filename. If this option is
omitted, the &dashdash;arch architecture
is used.
***************
*** 427,434 ****
&dashdash;messaging
enables creation of distributed &pooma; executables by
! enabling use of the &cheetah; communications package. See
!
--- 433,439 ----
&dashdash;messaging
enables creation of distributed &pooma; executables by
! enabling use of the &cheetah; communications package.
***************
*** 474,479 ****
--- 479,498 ----
program that initializes and de-initializes the &pooma;
library.
+ The simplest &pooma; program is available at examples/Manual/Sequential/initialize-finalize.cpp .
+ It is annotated in . Before its
+ use, the &poomatoolkit; must be initialized by a call to
+ initialize . This usually occurs in the
+ main function. After its use, the
+ &poomatoolkit; should be shut down using a call to
+ finalize . This also usually occurs in the
+ main function. Both of these functions are
+ declared in .
+ This header file (or another &pooma; header file including it)
+ occurs in every &pooma; program.
+
A Hello, &pooma;
Program
***************
*** 495,514 ****
- The simplest &pooma; program is available at examples/Manual/Sequential/initialize-finalize.cpp .
- It is annotated in . Before its
- use, the &poomatoolkit; must be initialized by a call to
- initialize . This usually occurs in the
- main function. After its use, the
- &poomatoolkit; should be shut down using a call to
- finalize . This also usually occurs in the
- main function. Both of these functions are
- declared in .
- This header file or another &pooma; header file including it occurs
- in every &pooma; program.
-
Compiling this program requires including &pooma; header
files and library. Let us assume that the environment variable
POOMAHOME describes the location of the &pooma;
--- 514,519 ----
***************
*** 516,522 ****
&initialspace;export POOMAHOME=/home/user/pooma
We illustrate how to compile the program using the
&gpp; compiler:
! &initialspace;g++ -I${POOMAHOME}/src -I${POOMAHOME}/lib/LINUXgcc initialize-finalize.cpp -o initialize-finalize -L${POOMAHOME}/lib/${POOMASUITE} -lpooma-gcc
We explain the five command-line options:
--- 521,529 ----
&initialspace;export POOMAHOME=/home/user/pooma
We illustrate how to compile the program using the
&gpp; compiler:
! &initialspace;g++ -I${POOMAHOME}/src -I${POOMAHOME}/lib/LINUXgcc \
! &initialspace;initialize-finalize.cpp -o initialize-finalize \
! &initialspace;-L${POOMAHOME}/lib/${POOMASUITE} -lpooma-gcc
We explain the five command-line options:
***************
*** 587,593 ****
Prototypes
! &initialspace;#include "Pooma/Pooma.h" // or "Pooma/Arrays.h" or "Pooma/Fields.h" or …
--- 594,601 ----
Prototypes
! &initialspace;#include "Pooma/Pooma.h"
! &initialspace;// or "Pooma/Arrays.h" or "Pooma/Fields.h" or …
***************
*** 870,877 ****
For example, the &author; uses
! ./configure &dashdash;arch LINUXGCC &dashdash;shmem &dashdash;nompi
! &dashdash;noex &dashdash;static &dashdash;prefix ${HOME}/pooma/cheetah-1.0
&dashdash;opt
The
&dashdash;arch LINUXGCC indicates use of
--- 878,885 ----
For example, the &author; uses
! ./configure &dashdash;arch LINUXGCC &dashdash;shmem &dashdash;nompi \
! &dashdash;noex &dashdash;static &dashdash;prefix ${HOME}/pooma/cheetah-1.0 \
&dashdash;opt
The
&dashdash;arch LINUXGCC indicates use of
***************
*** 921,927 ****
installed &cheetah; library. For
example,
! declare -x CHEETAHDIR=${HOME}/pooma/cheetah-1.0
specifies the
installation directory used in the previous section. If using
the csh shell, use setenv
--- 929,935 ----
installed &cheetah; library. For
example,
! export CHEETAHDIR=${HOME}/pooma/cheetah-1.0
specifies the
installation directory used in the previous section. If using
the csh shell, use setenv
Index: template.xml
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/template.xml,v
retrieving revision 1.7
diff -c -p -r1.7 template.xml
*** template.xml 2002/02/27 03:51:53 1.7
--- template.xml 2002/03/04 22:50:56
*************** struct usuallySimpleClass<false> {
*** 829,835 ****
template<class Op, class Left, class Right>
struct ExpressionTraits<BinaryNode<Op, Left, Right&closeclose;
{
! typedef typename ExpressionTraits<Left>::Type_t Left_t;
typedef typename ExpressionTraits<Right>::Type_t Right_t;
typedef typename
CombineExpressionTraits<Left_t, Right_t>::Type_t Type_t;
--- 829,835 ----
template<class Op, class Left, class Right>
struct ExpressionTraits<BinaryNode<Op, Left, Right&closeclose;
{
! typedef typename ExpressionTraits<Left>::Type_t Left_t;
typedef typename ExpressionTraits<Right>::Type_t Right_t;
typedef typename
CombineExpressionTraits<Left_t, Right_t>::Type_t Type_t;
Index: uml.xml
===================================================================
RCS file: uml.xml
diff -N uml.xml
*** /dev/null Fri Mar 23 21:37:44 2001
--- uml.xml Mon Mar 4 15:50:57 2002
***************
*** 0 ****
--- 1,736 ----
+
+ ¨ Class Diagrams
+
+ In this chapter, we present Unified Modeling Language (¨)
+ class diagrams for several &pooma; classes. These diagrams are
+ created at the specification level, which
+ indicates the software interface, not its implementation.
+ provides a top-level overview of the relationships between classes.
+ Readers interested in the implementation are encouraged to read the
+ corresponding source code. More extensive explanations of these
+ classes appear in the main chapters of this &book;.
+
+
+ Explanation of ¨ Class Diagrams
+
+
+
+
+
+
+
+
+ An Explanation of UML Class Diagrams
+
+
+
+
+ illustrates a typical
+ ¨ class diagram. The diagram has three classes:
+ Classname1 , Classname2 , and
+ Classname2<1> . Most classes are represented by
+ three-part boxes. The top part lists the class's name. The middle
+ part lists public data members, if any. Few &pooma; classes have
+ public data members so this section is frequently empty. The bottom
+ part lists public member functions, if any. Free parameter
+ types
indicate templated parameters.
+ Classname2<1> has only one part, not three. Its
+ three-part box appears in another diagram, presumably because there
+ is not enough room in this one. Both Classname1 and
+ Classname2 have template parameters, each named
+ T . These occur in dashed boxes at the upper-right
+ corner of the class boxes. Files implementing a class are listed at
+ the lower, right corner of the class's box. These implementation
+ files may be different from the header files to include in one's
+ program to use these classes.
+
+ Lines connect classes. The solid arrow with large triangular
+ arrowhead indicates that Classname2 is a subtype of
+ Classname1 . Since this diagram represents the
+ specification level, subtyping does not necessarily correspond to
+ &cc; type inheritance. Also, subtype class boxes need only list
+ members not available in the supertype. For this case,
+ Classname2 has one new member not provided by
+ Classname1 . A dashed arrow indicates a class formed by
+ a template instantiation. The class name indicates which template
+ parameters are bound. For example, Classname2<1>
+ instantiates Classname2 with T equal
+ to 1.
+
+ Some of the functions require many, similar function
+ arguments. We introduce regular expression notation to reduce the
+ length of the function prototype. For example,
+ void foo(const X[1-3]&)
+ abbreviates
+ void foo(const X1&, const X2&, const X3&)
+ X[1-3] abbreviates
+ X1 , X2 , X3 .
+ We assume this distributes over const &, to
+ yield &cc; code.
+
+ These diagrams omit a lot of details. Private and protected
+ data members are not listed. Compile-time types and values are not
+ listed. No indication is given of the actual implementation. Some
+ template arguments of parameters have been suppressed.
+
+
+
+ &array;s
+
+
+ Relationship Between &array; and &dynamicarray;s
+
+
+
+
+
+
+
+
+ &dynamicarray;s are subtypes of &array;s
+
+
+
+
+ Both &array;s and &dynamicarray;s have so many member
+ functions that their class boxes appear in separate diagrams.
+ indicates that
+ &dynamicarray;s are subtypes of &array;s. Both have value type and
+ engine tag template parameters but &dynamicarray;'s dimension must
+ be one.
+
+ Implementation files are located within the src/Array directory.
+
+
+ &array; Diagram
+
+
+
+
+
+
+
+
+ &array; Class Diagram
+
+
+
+
+
+ &dynamicarray; Diagram
+
+
+
+
+
+
+
+
+ &dynamicarray; Class Diagram
+
+
+
+
+
+
+
+ &field;s, &mesh;es, and ¢ering;s
+
+ A &field; has a mesh and a centering. It is implemented in
+ .
+
+
+ &field;
+
+
+
+
+
+
+
+
+ A &field; is like an &array; but having spatial
+ extent.
+
+
+
+
+
+
+ &mesh;es
+
+ A mesh specifies a &field;'s spatial extent. A &mesh; class
+ only exists conceptually, but NoMesh and
+ UniformRectilinearMesh are defined within the
+ src/Field/Mesh
+ directory.
+
+
+ &mesh;es
+
+
+
+
+
+
+
+
+ The abstract Mesh class is realized by
+ NoMesh and UniformRectilinearMesh .
+
+
+
+
+
+ NoMesh
+
+
+
+
+
+
+
+
+ If a &field; has a NoMesh mesh, it has no
+ spatial extent.
+
+
+
+
+ In the following figure, we abbreviate
+ UniformRectilinearMesh with
+ URM
.
+
+
+ UniformRectilinearMesh
+
+
+
+
+
+
+
+
+ The UniformRectilinearMesh is the most
+ common &field; mesh.
+
+
+
+
+
+
+
+ ¢ering;s
+
+ A ¢ering; specifies the location of values within a
+ cell. CanonicalCentering is a helper class returning
+ common centerings. Both are implemented within the src/Field subdirectory.
+
+
+ Centering Classes
+
+
+
+
+
+
+
+
+ CanonicalCentering returns commonly-used ¢ering;s.
+
+
+
+
+
+
+
+
+
+ &vector;s, &matrix;s, &tensor;s
+
+ In this section, we present ¨ class diagrams for the
+ mathematical objects of &vector;s, &matrix;s, and &tensor;s. All
+ these classes have similar interfaces and relationships. For
+ example, &vector; requires a VectorEngine , which has
+ no public interface. The only template specialization is
+ VectorEngine<D,T,Full> . &matrix;s are similar.
+ Tensors have four different engines, supporting the tensor
+ specializations of Antisymmetric ,
+ Symmetric , and
+ Diagonal .
+
+ All of the source files are located in the src/Tiny subdirectory.
+
+
+ &vector;s
+
+
+
+
+
+
+
+
+ &vector;s require VectorEngine s.
+
+
+
+
+
+ &matrix;s
+
+
+
+
+
+
+
+
+ &matrix;s require TinyMatrixEngine s,
+ appearing in the next diagram.
+
+
+
+
+
+ TinyMatrixEngine s
+
+
+
+
+
+
+
+
+ TinyMatrixEngine s power &matrix;s.
+
+
+
+
+
+ &tensor;s and TensorEngine s
+
+
+
+
+
+
+
+
+ &tensor;s require TensorEngine s.
+
+
+
+
+
+ Full and Diagonal TensorEngine s
+
+
+
+
+
+
+
+
+ Full &engine;s are the default
+ &tensor; &engine;s. Diagonal &tensor;s use its special &engine;.
+
+
+
+
+
+ Antisymmetric and Symmetric TensorEngine s
+
+
+
+
+
+
+
+
+ More TensorEngine specializations.
+
+
+
+
+
+
+
+ &domain;s
+
+ &domain;s and its subtypes are shown in . All classes are instantiated
+ from or subtypes of &domain;. As mentioned in , the Domain<1>
+ template instantiation has additional member functions. It uses
+ the Domain<1>::iterator . The four &domain;
+ subtypes appear in the bottom half of the figure. Each requires
+ the same template parameter as &domain;. Each of these has a
+ template instantiation for the one-dimensional case. We omit
+ listing their additional member functions since these are the same
+ as for Domain<1> .
+
+ Implementation files are located within the src/Domain directory.
+
+
+ &domain;s
+
+
+
+
+
+
+
+
+ &domain;s
+
+
+
+
+
+
+
+
+ &engine;s
+
+ &engine;s and its subtypes are shown in . Five subtypes of &engine;s
+ are shown. Details appear in subsequent diagrams. The
+ Engine class box shows no members because it has no
+ members. Only subtypes have members. More explanation of these
+ classes can be found in . The
+ implementation files in use the
+ [1-7] regular expression to indicate 1, 2,
+ …, or 7.
+
+ Implementation files are located within the src/Engine directory.
+
+
+ &engine;s
+
+
+
+
+
+
+
+
+ Relationships among &engine;s
+
+
+
+
+
+ &brick; and &compressiblebrick; &engine;s
+
+
+
+
+
+
+
+
+ &brick; and &compressiblebrick; &engine;s
+
+
+
+
+
+ &dynamic; and &multipatch; &engine;s
+
+
+
+
+
+
+
+
+ &dynamic; and &multipatch; &engine;s
+
+
+
+
+
+ &remote; &engine;s
+
+
+
+
+
+
+
+
+ &remote; &engine;s
+
+
+
+
+
+
+
+
+ Distributed Computation
+
+ In this section, we present ¨ class diagrams for the
+ classes used when declaring distributed computation. We use
+ abbreviations in parameter lists:
+
+
+ Abbreviations
+
+
+
+
+ abbreviation
+ meaning
+
+
+
+
+ CM
+ ContextMapper
+
+
+ DT
+ DistributedTag
+
+
+ GL
+ GuardLayers
+
+
+ Iv
+ Interval
+
+
+ List_t
+ std::vector of pointers to Node s of
+ &domain;s
+
+
+ PatchList_t
+ std::vector of Interval<Dim> s
+
+
+ RT
+ ReplicatedTag
+
+
+ SpTlLa
+ SparseTileLayout
+
+
+
+
+
+ Partitions specify how a domain will be split into patches,
+ or pieces.
+ introduces the abstract Partition
class. The class
+ exists only conceptually, not appearing in any source code.
+ Instead four classes, appearing in subsequent diagrams, realize it.
+ Even though users rarely use any of their member functions, the
+ diagrams list them. All files are relative to the src/Partition subdirectory.
+
+
+ Partitions
+
+
+
+
+
+
+
+
+ Four classes realize the abstract Partition class.
+
+
+
+
+
+ Grid Partitions
+
+
+
+
+
+
+
+
+ Two partition classes use grids.
+
+
+
+
+
+ Other Partitions
+
+
+
+
+
+
+
+
+ SpatialPartition and
+ TilePartition realize the abstract Partition
+ class.
+
+
+
+
+ Guard layers surround domains and patches to ease programming
+ and decrease communication. We list more member functions than
+ most users require. All files are relative to the src/Layout subdirectory.
+
+
+ Guard Layers
+
+
+
+
+
+
+
+
+ GuardLayers surround patches.
+
+
+
+
+ A layout maps a domain index to processors and memory used to
+ compute the associated value. There is no base class so we just
+ present the class diagrams. We list only member functions related
+ to construction, destruction, and printing since those are the
+ functions that almost all users use. All files are relative to the
+ src/Layout
+ subdirectory.
+
+
+ DomainLayout
+
+
+
+
+
+
+
+
+ DomainLayout
+
+
+
+
+
+ DynamicLayout
+
+
+
+
+
+
+
+
+ DynamicLayout
+
+
+
+
+
+ GridLayout
+
+
+
+
+
+
+
+
+ GridLayout
+
+
+
+
+
+ UniformGridLayout
+
+
+
+
+
+
+
+
+ UniformGridLayout
+
+
+
+
+
+ SparseTileLayout
+
+
+
+
+
+
+
+
+ SparseTileLayout
+
+
+
+
+
+ Context mappers map domain patches to contexts. Effectively,
+ they map pieces of a domain to processors. Even though users
+ rarely use any of their member functions, the diagrams list them.
+ The type List_t abbreviates an
+ std::vector of pointers to Node s of
+ &domain;s. GL abbreviates GuardLayers .
+ All files are relative to the src/Partition subdirectory.
+
+
+ Relationships Among Context Mappers
+
+
+
+
+
+
+
+
+ Five different mappers inherit from the base
+ ContextMapper .
+
+
+
+
+
+ Context Mappers
+
+
+
+
+
+
+
+
+ Details of the five different mappers inheriting from
+ the base ContextMapper .
+
+
+
+
+
+
Index: figures/Makefile
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/Makefile,v
retrieving revision 1.3
diff -c -p -r1.3 Makefile
*** figures/Makefile 2002/02/27 03:51:53 1.3
--- figures/Makefile 2002/03/04 22:50:57
*************** RESULTS= $(SOURCES:%.mp=mproof-%.ps)
*** 37,45 ****
TREE_SOURCES= $(SOURCES) Makefile macros.ltx
# UML class diagrams that occur in the appendix containing these.
! UML_DIAGRAMS= explanation-uml-1.png array-uml.1 array-uml.2 array-uml.3 \
! domain-uml.1 engine-uml.1 engine-uml.2 engine-uml.3 \
! engine-uml.4
# Create all the EPS and PNG files. The 'mproof-all' target creates
# the EPS files. This should happen before trying to create the PNG
--- 37,58 ----
TREE_SOURCES= $(SOURCES) Makefile macros.ltx
# UML class diagrams that occur in the appendix containing these.
! UML_DIAGRAMS= explanation-uml-1.png \
! array-uml-1.png array-uml-2.png array-uml-3.png \
! distributed-uml-5.png distributed-uml-4.png \
! distributed-uml-3.png distributed-uml-30.png \
! distributed-uml-22.png distributed-uml-23.png \
! distributed-uml-24.png distributed-uml-20.png \
! distributed-uml-21.png distributed-uml-10.png \
! distributed-uml-11.png \
! domain-uml-1.png \
! engine-uml-1.png engine-uml-2.png engine-uml-3.png \
! engine-uml-4.png \
! field-uml-10.png field-uml-3.png field-uml-1.png \
! field-uml-2.png field-uml-11.png \
! math-objs-uml-1.png math-objs-uml-10.png \
! math-objs-uml-11.png math-objs-uml-2.png math-objs-uml-3.png \
! math-objs-uml-4.png
# Create all the EPS and PNG files. The 'mproof-all' target creates
# the EPS files. This should happen before trying to create the PNG
*************** introduction-%.png: introduction.%
*** 72,82 ****
--- 85,101 ----
$(EPSTOPNG) -p -o $@ $^
array-uml-%.png: array-uml.%
$(EPSTOPNG) -p -o $@ $^
+ distributed-uml-%.png: distributed-uml.%
+ $(EPSTOPNG) -p -o $@ $^
domain-uml-%.png: domain-uml.%
$(EPSTOPNG) -p -o $@ $^
engine-uml-%.png: engine-uml.%
$(EPSTOPNG) -p -o $@ $^
explanation-uml-%.png: explanation-uml.%
+ $(EPSTOPNG) -p -o $@ $^
+ field-uml-%.png: field-uml.%
+ $(EPSTOPNG) -p -o $@ $^
+ math-objs-uml-%.png: math-objs-uml.%
$(EPSTOPNG) -p -o $@ $^
clean:
Index: figures/array-uml-1.png
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/array-uml-1.png,v
retrieving revision 1.1
diff -c -p -r1.1 array-uml-1.png
Binary files /tmp/cvsgrf0Om and array-uml-1.png differ
Index: figures/array-uml-2.png
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/array-uml-2.png,v
retrieving revision 1.1
diff -c -p -r1.1 array-uml-2.png
Binary files /tmp/cvszpurUR and array-uml-2.png differ
Index: figures/array-uml-3.png
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/array-uml-3.png,v
retrieving revision 1.1
diff -c -p -r1.1 array-uml-3.png
Binary files /tmp/cvsGHuyWm and array-uml-3.png differ
Index: figures/array-uml.mp
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/array-uml.mp,v
retrieving revision 1.1
diff -c -p -r1.1 array-uml.mp
*** figures/array-uml.mp 2002/02/27 03:51:54 1.1
--- figures/array-uml.mp 2002/03/04 22:50:58
*************** beginfig(1)
*** 34,47 ****
btex
\begin{lists}
Array() \\
- Array(Domain \ldots) \\
- Array(Domain \ldots, ModelElement) \\
Array(Array) \\
Array(Array, Domain) \\
! initialize(Domain \ldots) \\
! initialize(Domain \ldots, ModelElement) \\
! read(\ldots) \\
! operator()(\ldots) \\
domain() \\
physicalDomain() \\
totalDomain() \\
--- 34,85 ----
btex
\begin{lists}
Array() \\
Array(Array) \\
Array(Array, Domain) \\
! Array(const Domain\&) \\
! Array(const Domain[1-2]\&) \\
! Array(const Domain[1-3]\&) \\
! Array(const Domain[1-4]\&) \\
! Array(const Domain[1-5]\&) \\
! Array(const Domain[1-6]\&) \\
! Array(const Domain[1-7]\&) \\
! Array(const Domain\&, ModelElement) \\
! Array(const Domain[1-2]\&, ModelElement) \\
! Array(const Domain[1-3]\&, ModelElement) \\
! Array(const Domain[1-4]\&, ModelElement) \\
! Array(const Domain[1-5]\&, ModelElement) \\
! Array(const Domain[1-6]\&, ModelElement) \\
! Array(const Domain[1-7]\&, ModelElement) \\
! void initialize(const Domain\&) \\
! void initialize(const Domain[1-2]\&) \\
! void initialize(const Domain[1-3]\&) \\
! void initialize(const Domain[1-4]\&) \\
! void initialize(const Domain[1-5]\&) \\
! void initialize(const Domain[1-6]\&) \\
! void initialize(const Domain[1-7]\&) \\
! void initialize(const Domain\&, ModelElement) \\
! void initialize(const Domain[1-2]\&, ModelElement) \\
! void initialize(const Domain[1-3]\&, ModelElement) \\
! void initialize(const Domain[1-4]\&, ModelElement) \\
! void initialize(const Domain[1-5]\&, ModelElement) \\
! void initialize(const Domain[1-6]\&, ModelElement) \\
! void initialize(const Domain[1-7]\&, ModelElement) \\
! read() \\
! read(const X1\&) \\
! read(const X[1-2]\&) \\
! read(const X[1-3]\&) \\
! read(const X[1-4]\&) \\
! read(const X[1-5]\&) \\
! read(const X[1-6]\&) \\
! read(const X[1-7]\&) \\
! operator()() \\
! operator()(const X1\&) \\
! operator()(const X[1-2]\&) \\
! operator()(const X[1-3]\&) \\
! operator()(const X[1-4]\&) \\
! operator()(const X[1-5]\&) \\
! operator()(const X[1-6]\&) \\
! operator()(const X[1-7]\&) \\
domain() \\
physicalDomain() \\
totalDomain() \\
*************** beginfig(1)
*** 54,65 ****
size() \\
layout() \\
engine() \\
! operator<<
\end{lists} etex);
boxit.array[3](
btex
\begin{lists}
! dim D \\
value type T \\
engine tag Tag
\end{lists} etex);
--- 92,103 ----
size() \\
layout() \\
engine() \\
! operator<<()
\end{lists} etex);
boxit.array[3](
btex
\begin{lists}
! dimension D \\
value type T \\
engine tag Tag
\end{lists} etex);
*************** beginfig(1)
*** 80,89 ****
DynamicArray(Domain, ModelElement) \\
DynamicArray(DynamicArray) \\
DynamicArray(DynamicArray, Domain) \\
! initialize(Domain \ldots) \\
! initialize(Domain \ldots, ModelElement) \\
! read(\ldots) \\
! operator()(\ldots) \\
domain() \\
physicalDomain() \\
totalDomain() \\
--- 118,153 ----
DynamicArray(Domain, ModelElement) \\
DynamicArray(DynamicArray) \\
DynamicArray(DynamicArray, Domain) \\
! void initialize(const Domain\&) \\
! void initialize(const Domain[1-2]\&) \\
! void initialize(const Domain[1-3]\&) \\
! void initialize(const Domain[1-4]\&) \\
! void initialize(const Domain[1-5]\&) \\
! void initialize(const Domain[1-6]\&) \\
! void initialize(const Domain[1-7]\&) \\
! void initialize(const Domain\&, ModelElement) \\
! void initialize(const Domain[1-2]\&, ModelElement) \\
! void initialize(const Domain[1-3]\&, ModelElement) \\
! void initialize(const Domain[1-4]\&, ModelElement) \\
! void initialize(const Domain[1-5]\&, ModelElement) \\
! void initialize(const Domain[1-6]\&, ModelElement) \\
! void initialize(const Domain[1-7]\&, ModelElement) \\
! read() \\
! read(const X1\&) \\
! read(const X[1-2]\&) \\
! read(const X[1-3]\&) \\
! read(const X[1-4]\&) \\
! read(const X[1-5]\&) \\
! read(const X[1-6]\&) \\
! read(const X[1-7]\&) \\
! operator()() \\
! operator()(const X1\&) \\
! operator()(const X[1-2]\&) \\
! operator()(const X[1-3]\&) \\
! operator()(const X[1-4]\&) \\
! operator()(const X[1-5]\&) \\
! operator()(const X[1-6]\&) \\
! operator()(const X[1-7]\&) \\
domain() \\
physicalDomain() \\
totalDomain() \\
*************** beginfig(1)
*** 96,102 ****
size() \\
layout() \\
engine() \\
! operator<< \\
array() \\
arrayAll() \\
create(CreateSize\t) \\
--- 160,166 ----
size() \\
layout() \\
engine() \\
! operator<<() \\
array() \\
arrayAll() \\
create(CreateSize\t) \\
*************** beginfig(1)
*** 147,153 ****
% Draw arrows between classes.
drawDiscriminator(array[0].s, 0);
! z0 = array[0].s - (0,discriminatorScale);
draw z0 -- dynamicarray[0].n;
endfig;
--- 211,217 ----
% Draw arrows between classes.
drawDiscriminator(array[0].s, 0);
! z0 = array[0].s - (0,discriminatorLength);
draw z0 -- dynamicarray[0].n;
endfig;
*************** beginfig(2)
*** 162,193 ****
btex
\begin{lists}
Array() \\
- Array(Domain \ldots) \\
- Array(Domain \ldots, ModelElement) \\
Array(Array) \\
Array(Array, Domain) \\
! initialize(Domain \ldots) \\
! initialize(Domain \ldots, ModelElement) \\
! read(\ldots) \\
! operator()(\ldots) \\
domain() \\
physicalDomain() \\
totalDomain() \\
! first(int) \\
! last(int) \\
length(int) \\
! firsts() \\
! lasts() \\
lengths() \\
size() \\
layout() \\
engine() \\
! operator<<
\end{lists} etex);
boxit.array[3](
btex
\begin{lists}
! dim D \\
value type T \\
engine tag Tag
\end{lists} etex);
--- 226,285 ----
btex
\begin{lists}
Array() \\
Array(Array) \\
Array(Array, Domain) \\
! Array(const Domain\&) \\
! Array(const Domain[1-2]\&) \\
! Array(const Domain[1-3]\&) \\
! Array(const Domain[1-4]\&) \\
! Array(const Domain[1-5]\&) \\
! Array(const Domain[1-6]\&) \\
! Array(const Domain[1-7]\&) \\
! Array(const Domain\&, ModelElement) \\
! Array(const Domain[1-2]\&, ModelElement) \\
! Array(const Domain[1-3]\&, ModelElement) \\
! Array(const Domain[1-4]\&, ModelElement) \\
! Array(const Domain[1-5]\&, ModelElement) \\
! Array(const Domain[1-6]\&, ModelElement) \\
! Array(const Domain[1-7]\&, ModelElement) \\
! void initialize(const Domain\&) \\
! void initialize(const Domain[1-2]\&) \\
! void initialize(const Domain[1-3]\&) \\
! void initialize(const Domain[1-4]\&) \\
! void initialize(const Domain[1-5]\&) \\
! void initialize(const Domain[1-6]\&) \\
! void initialize(const Domain[1-7]\&) \\
! void initialize(const Domain\&, ModelElement) \\
! void initialize(const Domain[1-2]\&, ModelElement) \\
! void initialize(const Domain[1-3]\&, ModelElement) \\
! void initialize(const Domain[1-4]\&, ModelElement) \\
! void initialize(const Domain[1-5]\&, ModelElement) \\
! void initialize(const Domain[1-6]\&, ModelElement) \\
! void initialize(const Domain[1-7]\&, ModelElement) \\
! read(); operator()() \\
! read(const X1\&); operator()(const X1\&) \\
! read(const X[1-2]\&); operator()(const X[1-2]\&) \\
! read(const X[1-3]\&); operator()(const X[1-3]\&) \\
! read(const X[1-4]\&); operator()(const X[1-4]\&) \\
! read(const X[1-5]\&); operator()(const X[1-5]\&) \\
! read(const X[1-6]\&); operator()(const X[1-6]\&) \\
! read(const X[1-7]\&); operator()(const X[1-7]\&) \\
domain() \\
physicalDomain() \\
totalDomain() \\
! first(int); last(int) \\
length(int) \\
! firsts(); lasts() \\
lengths() \\
size() \\
layout() \\
engine() \\
! operator<<()
\end{lists} etex);
boxit.array[3](
btex
\begin{lists}
! dimension D \\
value type T \\
engine tag Tag
\end{lists} etex);
*************** beginfig(3)
*** 256,278 ****
DynamicArray(Domain, ModelElement) \\
DynamicArray(DynamicArray) \\
DynamicArray(DynamicArray, Domain) \\
! initialize(Domain \ldots) \\
! initialize(Domain \ldots, ModelElement) \\
! read(\ldots) \\
! operator()(\ldots) \\
domain() \\
physicalDomain() \\
totalDomain() \\
! first(int) \\
! last(int) \\
length(int) \\
! firsts() \\
! lasts() \\
lengths() \\
size() \\
layout() \\
engine() \\
! operator<< \\
array() \\
arrayAll() \\
create(CreateSize\t) \\
--- 348,386 ----
DynamicArray(Domain, ModelElement) \\
DynamicArray(DynamicArray) \\
DynamicArray(DynamicArray, Domain) \\
! void initialize(const Domain\&) \\
! void initialize(const Domain[1-2]\&) \\
! void initialize(const Domain[1-3]\&) \\
! void initialize(const Domain[1-4]\&) \\
! void initialize(const Domain[1-5]\&) \\
! void initialize(const Domain[1-6]\&) \\
! void initialize(const Domain[1-7]\&) \\
! void initialize(const Domain\&, ModelElement) \\
! void initialize(const Domain[1-2]\&, ModelElement) \\
! void initialize(const Domain[1-3]\&, ModelElement) \\
! void initialize(const Domain[1-4]\&, ModelElement) \\
! void initialize(const Domain[1-5]\&, ModelElement) \\
! void initialize(const Domain[1-6]\&, ModelElement) \\
! void initialize(const Domain[1-7]\&, ModelElement) \\
! read(); operator()() \\
! read(const X1\&); operator()(const X1\&) \\
! read(const X[1-2]\&); operator()(const X[1-2]\&) \\
! read(const X[1-3]\&); operator()(const X[1-3]\&) \\
! read(const X[1-4]\&); operator()(const X[1-4]\&) \\
! read(const X[1-5]\&); operator()(const X[1-5]\&) \\
! read(const X[1-6]\&); operator()(const X[1-6]\&) \\
! read(const X[1-7]\&); operator()(const X[1-7]\&) \\
domain() \\
physicalDomain() \\
totalDomain() \\
! first(int); last(int) \\
length(int) \\
! firsts(); lasts() \\
lengths() \\
size() \\
layout() \\
engine() \\
! operator<<() \\
array() \\
arrayAll() \\
create(CreateSize\t) \\
Index: figures/data-parallel.mp
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/data-parallel.mp,v
retrieving revision 1.3
diff -c -p -r1.3 data-parallel.mp
*** figures/data-parallel.mp 2002/01/31 21:29:58 1.3
--- figures/data-parallel.mp 2002/03/04 22:51:00
*************** beginfig(101)
*** 59,68 ****
endfor
%% Label the node's types.
- % TMP label.rt(btex \type{OpAddAssign} etex, b0.e);
- % TMP label.rt(btex \type{Expression} etex, 0.5[b0.c,b2.c]);
label.top(btex \type{Expression} etex, b2.n);
- % TMP label.lft(btex \type{Ar} etex, b1.w);
label.rt(btex \type{BinaryNode= 2 for PostScript
+
+ input boxes;
+ input box-macros;
+ input uml;
+
+ verbatimtex
+ \documentclass[10pt]{article}
+ \usepackage{amsmath}
+ \input{macros.ltx}
+ \usepackage{times}
+ \usepackage{mathptm}
+ \newlength{\cnw} % Required to use \classnameWidth and \emptyBox
+ \begin{document}
+ etex
+
+
+ %% Draw the SpatialPartition box.
+ beginfig(3)
+ %% Create the boxes.
+ % SpatialPartition
+ boxit.sPartition[0](btex \classname{SpatialPartition} etex);
+ boxit.sPartition[1](btex etex);
+ boxit.sPartition[2](
+ btex
+ \begin{lists}
+ SpatialPartition(const RefLayout\&) \\
+ SpatialPartition(const SpatialPartition\&) \\
+ \tilder SpatialPartition() \\
+ SpatialPartition\& operator=(const SpatialPartition\&) \\
+ Loc<1> blocks() \\
+ int context() \\
+ bool hasCustomEdgeGuards()\\
+ const RefLayout\& reference() \\
+ void print(Out\&)
+ \end{lists} etex);
+ boxit.sPartition[3](
+ btex
+ \begin{lists}
+ RefLayout
+ \end{lists} etex);
+ boxit.sPartition[4](
+ btex \begin{files}
+ SpatialPartition.h
+ \end{files} etex);
+
+ % TilePartition
+ boxit.tPartition[0](btex \classname{TilePartition} etex);
+ boxit.tPartition[1](btex etex);
+ boxit.tPartition[2](
+ btex
+ \begin{lists}
+ TilePartition() \\
+ TilePartition(const PatchList\_t\&) \\
+ TilePartition(const PatchList\_t\&, const GL\&) \\
+ TilePartition(const PatchList\_t\&, const GL\&, const GL\&) \\
+ TilePartition(const TilePartition\&) \\
+ \tilder TilePartition() \\
+ TilePartition\& operator=(const TilePartition\&) \\
+ PatchList\_t tileList() \\
+ bool hasCustomEdgeGuards()\\
+ void print(Out\&)
+ \end{lists} etex);
+ boxit.tPartition[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.tPartition[4](
+ btex \begin{files}
+ TilePartition.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=sPartition, tPartition:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ forsuffixes $=sPartition, tPartition:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=sPartition, tPartition:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ sPartition[0].c = origin;
+ sPartition[2].sw - tPartition[0].nw = (0,2yUnit);
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=sPartition, tPartition:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=sPartition, tPartition:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the implementation files.
+ forsuffixes $=sPartition, tPartition:
+ drawunboxed($[4]);
+ endfor
+ endfig;
+
+
+ %% Draw the GridPartition box.
+ beginfig(4)
+ %% Create the boxes.
+ % GridPartition
+ boxit.gPartition[0](btex \classname{GridPartition} etex);
+ boxit.gPartition[1](btex etex);
+ boxit.gPartition[2](
+ btex
+ \begin{lists}
+ GridPartition() \\
+ GridPartition(const Grid\&) \\
+ GridPartition(const Grid\&, const GuardLayers\&) \\
+ GridPartition(const Grid\&, const GuardLayers\&, const GuardLayers\&) \\
+ GridPartition(const Loc\&) \\
+ GridPartition(const Loc\&, const GuardLayers\&) \\
+ GridPartition(const Loc\&, const GuardLayers\&, const GuardLayers\&) \\
+ GridPartition(const GridPartition\&) \\
+ GridPartition(const UniformGridPartition\&) \\
+ \tilder GridPartition() \\
+ GridPartition\& operator=(const GridPartition\&) \\
+ const Loc\& blocks() \\
+ bool hasCustomEdgeGuards()\\
+ const Grid\& grid() \\
+ void print(Out\&);
+ \end{lists} etex);
+ boxit.gPartition[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.gPartition[4](
+ btex \begin{files}
+ GridPartition.h
+ \end{files} etex);
+
+ % UniformGridPartition
+ boxit.ugPartition[0](btex \classname{UniformGridPartition} etex);
+ boxit.ugPartition[1](btex etex);
+ boxit.ugPartition[2](
+ btex
+ \begin{lists}
+ UniformGridPartition() \\
+ UniformGridPartition(const GL\&) \\
+ UniformGridPartition(const Loc\&) \\
+ UniformGridPartition(const Loc\&, const GL\&) \\
+ UniformGridPartition(const Loc\&, const GL\&, const GL\&) \\
+ UniformGridPartition(const UniformGridPartition\&) \\
+ \tilder UniformGridPartition() \\
+ UniformGridPartition\& operator=(const UniformGridPartition\&) \\
+ const Loc\& blocks() \\
+ \end{lists} etex);
+ boxit.ugPartition[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.ugPartition[4](
+ btex \begin{files}
+ UniformGridPartition.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=gPartition, ugPartition:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ forsuffixes $=gPartition, ugPartition:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=gPartition, ugPartition:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ gPartition[0].c = origin;
+ gPartition[2].sw - ugPartition[0].nw = (0,2yUnit);
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=gPartition, ugPartition:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=gPartition, ugPartition:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the implementation files.
+ forsuffixes $=gPartition, ugPartition:
+ drawunboxed($[4]);
+ endfor
+ endfig;
+
+
+ %% Draw an abstract Partition box and related classes.
+ beginfig(5)
+ %% Create the boxes.
+ % Partition
+ boxit.partition[0](btex \classname{\emph{Partition}} etex);
+ boxit.partition[1](btex etex);
+ boxit.partition[2](
+ btex
+ \begin{lists}
+ Partition() \\
+ Partition(const Partition\&) \\
+ \tilder Partition() \\
+ Partition\& operator=(const Partition\&) \\
+ int maxSize() \\
+ bool hasGuards()\\
+ bool hasInternalGuards() \\
+ bool hasExternalGuards() \\
+ const GuardLayers\& internalGuards() \\
+ const GuardLayers\& externalGuards() \\
+ int partition(const Dom\&, List\_t\&, const ContextMapper\&) \\
+ int partition(const Dom\&, List\_t\&)
+ \end{lists} etex);
+ boxit.partition[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.ugPartition[0](btex \classname{UniformGridPartition} etex);
+ boxit.ugPartition[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.tPartition[0](btex \classname{TilePartition} etex);
+ boxit.tPartition[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.sPartition[0](btex \classname{SpatialPartition} etex);
+ boxit.sPartition[3](
+ btex
+ \begin{lists}
+ RefLayout
+ \end{lists} etex);
+ boxit.gPartition[0](btex \classname{GridPartition} etex);
+ boxit.gPartition[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=partition:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ forsuffixes $=gPartition, sPartition, tPartition, ugPartition:
+ fixsize($[0]);
+ endfor
+ forsuffixes $=partition, gPartition, sPartition, tPartition, ugPartition:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+
+ % Position the UML classes.
+ partition[0].c = origin;
+ gPartition[0].sw - sPartition[0].nw =
+ sPartition[0].sw - tPartition[0].nw =
+ tPartition[0].sw - ugPartition[0].nw = (0, yUnit);
+ partition[2].sw - gPartition[0].nw = (0,yUnit);
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=partition:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ forsuffixes $=gPartition, sPartition, tPartition, ugPartition:
+ for t = 0 upto 0:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=partition, gPartition, sPartition, tPartition, ugPartition:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+
+ %% Draw the realization lines.
+ z0 = 0.7[partition[2].sw,partition[2].se];
+ drawDiscriminator(z0, 0);
+ forsuffixes $=gPartition, sPartition, tPartition, ugPartition:
+ draw $[0].e -- (x0,ypart($[0].e)) dashed evenly;
+ endfor
+ draw (x0,ypart(ugPartition[0].e)) -- (z0 - (0,discriminatorLength)) dashed evenly;
+
+ endfig;
+
+
+ %% Draw the ContextMapper box.
+ beginfig(10)
+ %% Create the boxes.
+ % Partition
+ boxit.cMapper[0](btex \classname{ContextMapper} etex);
+ boxit.cMapper[1](btex etex);
+ boxit.cMapper[2](
+ btex
+ \begin{lists}
+ ContextMapper() \\
+ void setAffinity(const List\_t\&)
+ \end{lists} etex);
+ boxit.cMapper[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.cMapper[4](
+ btex \begin{files}
+ ContextMapper.h
+ \end{files} etex);
+ boxit.lMapper[0](btex \classname{LocalMapper} etex);
+ boxit.lMapper[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.dMapper[0](btex \classname{DistributedMapper} etex);
+ boxit.dMapper[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.contMapper[0](btex \classname{ContiguousMapper} etex);
+ boxit.contMapper[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.biMapper[0](btex \classname{BisectionMapper} etex);
+ boxit.biMapper[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.unifMapper[0](btex \classname{UniformMapper} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=cMapper:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ samewidth(lMapper[0], dMapper[0], contMapper[0], biMapper[0], unifMapper[0]);
+ forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper:
+ fixsize($[0]);
+ endfor
+ forsuffixes $=cMapper, lMapper, dMapper, contMapper, biMapper:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=cMapper:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ cMapper[0].c = origin;
+ cMapper[2].ne - 0.5[lMapper[0].w,unifMapper[0].w] = (-2xUnit,0);
+ lMapper[0].sw - dMapper[0].nw =
+ dMapper[0].sw - contMapper[0].nw =
+ contMapper[0].sw - biMapper[0].nw =
+ biMapper[0].sw - unifMapper[0].nw = (0,yUnit);
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=cMapper:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper:
+ for t = 0 upto 0:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=cMapper, lMapper, dMapper, contMapper, biMapper:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the implementation files.
+ forsuffixes $=cMapper:
+ drawunboxed($[4]);
+ endfor
+
+ % Draw lines between classes.
+ drawDiscriminator(cMapper[1].e, 90);
+ x0 = xpart(0.5[cMapper[1].e,contMapper[0].w]);
+ y0 = ypart(cMapper[1].e);
+ draw (cMapper[1].e + (discriminatorLength,0)) -- z0;
+ forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper:
+ draw (x0,ypart($[0].w)) -- $[0].w;
+ endfor
+ label.top(btex \texttt{<1>} etex, 0.5[(x0,ypart(unifMapper[0].w)),unifMapper[0].w]);
+ draw (x0,ypart(lMapper[0].w)) -- (x0,ypart(unifMapper[0].w));
+
+ endfig;
+
+
+ %% Draw the LocalMapper box.
+ beginfig(11)
+ %% Create the boxes.
+ % LocalMapper
+ boxit.lMapper[0](btex \classname{LocalMapper} etex);
+ boxit.lMapper[1](btex etex);
+ boxit.lMapper[2](
+ btex
+ \begin{lists}
+ LocalMapper() \\
+ LocalMapper(const Partitioner\&) \\
+ void map(const List\_t\&)
+ \end{lists} etex);
+ boxit.lMapper[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.lMapper[4](
+ btex \begin{files}
+ ContextMapper.h
+ \end{files} etex);
+ % DistributedMapper
+ boxit.dMapper[0](btex \classname{DistributedMapper} etex);
+ boxit.dMapper[1](btex etex);
+ boxit.dMapper[2](
+ btex
+ \begin{lists}
+ DistributedMapper(const Partitioner\&) \\
+ void map(const List\_t\&)
+ \end{lists} etex);
+ boxit.dMapper[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.dMapper[4](
+ btex \begin{files}
+ DistributedMapper.h
+ \end{files} etex);
+ % ContiguousMapper
+ boxit.contMapper[0](btex \classname{ContiguousMapper} etex);
+ boxit.contMapper[1](btex etex);
+ boxit.contMapper[2](
+ btex
+ \begin{lists}
+ ContiguousMapper(const Partitioner\&) \\
+ ContiguousMapper(const Partitioner\&, const Loc\&) \\
+ void map(const List\_t\&)
+ \end{lists} etex);
+ boxit.contMapper[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.contMapper[4](
+ btex \begin{files}
+ ContiguousMapper.h
+ \end{files} etex);
+ % BisectionMapper
+ boxit.biMapper[0](btex \classname{BisectionMapper} etex);
+ boxit.biMapper[1](btex etex);
+ boxit.biMapper[2](
+ btex
+ \begin{lists}
+ BisectionMapper(const Loc\&) \\
+ BisectionMapper(const Partitioner\&) \\
+ BisectionMapper(const Partitioner\&, const Loc\&) \\
+ void map(const List\_t\&)
+ \end{lists} etex);
+ boxit.biMapper[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.biMapper[4](
+ btex \begin{files}
+ BisectionMapper.h
+ \end{files} etex);
+ % UniformMapper
+ boxit.unifMapper[0](btex \classname{UniformMapper} etex);
+ boxit.unifMapper[1](btex etex);
+ boxit.unifMapper[2](
+ btex
+ \begin{lists}
+ UniformMapper(const Loc<1>\&) \\
+ UniformMapper(const Partitioner\&) \\
+ UniformMapper(int) \\
+ \tilder UniformMapper() \\
+ void map(const List\_t\&)
+ \end{lists} etex);
+ boxit.unifMapper[3](btex etex);
+ boxit.unifMapper[4](
+ btex \begin{files}
+ UniformMapper.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ lMapper[0].c = origin;
+ lMapper[2].sw - dMapper[0].nw =
+ dMapper[2].sw - contMapper[0].nw =
+ contMapper[2].sw - biMapper[0].nw =
+ biMapper[2].sw - unifMapper[0].nw =
+ (0,1.5yUnit);
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=lMapper, dMapper, contMapper, biMapper:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the implementation files.
+ forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper:
+ drawunboxed($[4]);
+ endfor
+ endfig;
+
+
+ %% Draw the UniformGridLayout class.
+ %% Abbreviate: GL = GuardLayers, RT = ReplicatedTag, DT = DistributedTag
+ beginfig(20)
+ %% Create the boxes.
+ % UniformGridLayout
+ boxit.UGL[0](btex \classname{UniformGridLayout} etex);
+ boxit.UGL[1](btex etex);
+ boxit.UGL[2](
+ btex
+ \begin{lists}
+ UniformGridLayout() \\
+ UniformGridLayout(const Interval\&, const DT\&) \\
+ UniformGridLayout(const Interval\&, const GL\&, const DT\&) \\
+ UniformGridLayout(const Interval\&, const Loc\&, const DT\&) \\
+ UniformGridLayout(const Interval\&, const Loc\&, const GL\&, const DT\&) \\
+ UniformGridLayout(const Iv\&,const Loc\&,const GL\&,const GL\&,const DT\&) \\
+ UniformGridLayout(const Interval\&, const RT\&) \\
+ UniformGridLayout(const Interval\&, const GL\&, const RT\&) \\
+ UniformGridLayout(const Interval\&, const Loc\&, const RT\&) \\
+ UniformGridLayout(const Interval\&, const Loc\&, const GL\&, const RT\&) \\
+ UniformGridLayout(const Iv\&,const Loc\&,const GL\&,const GL\&,const RT\&) \\
+ UniformGridLayout(const Interval\&, const Partitioner\&, const CM\&) \\
+ UniformGridLayout(const Interval\&, const Partitioner\&, const DT\&) \\
+ UniformGridLayout(const Interval\&, const Partitioner\&, const RT\&) \\
+ UniformGridLayout(const UniformGridLayout\&) \\
+ UniformGridLayout\& operator=(const UniformGridLayout\&) \\
+ \tilder UniformGridLayout() \\
+ void initialize(const Interval\&, const DT\&) \\
+ void initialize(const Interval\&, const GL\&, const DT\&) \\
+ void initialize(const Interval\&, const Loc\&, const DT\&) \\
+ void initialize(const Interval\&, const Loc\&, const GL\&, const DT\&) \\
+ void initialize(const Iv\&,const Loc\&,const GL\&,const GL\&,const DT\&) \\
+ void initialize(const Interval\&, const RT\&) \\
+ void initialize(const Interval\&, const GL\&, const RT\&) \\
+ void initialize(const Interval\&, const Loc\&, const RT\&) \\
+ void initialize(const Interval\&, const Loc\&, const GL\&, const RT\&) \\
+ void initialize(const Iv\&,const Loc\&,const GL\&,const GL\&,const RT\&) \\
+ void initialize(const Interval\&, const Partitioner\&, const CM\&) \\
+ void initialize(const Interval\&, const Partitioner\&, const DT\&) \\
+ void initialize(const Interval\&, const Partitioner\&, const RT\&) \\
+ void initialize(const UniformGridLayout\&) \\
+ void initialize(const Iv\&,const List\_t\&,const Loc\&,bool,bool,\\
+ const GL\&,const GL\&) \\
+ void notify(Interval\&, const ObserverEvent\&) \\
+ void print(Ostream\&)
+ \end{lists} etex);
+ boxit.UGL[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.UGL[4](
+ btex \begin{files}
+ UniformGridLayout.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=UGL:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ forsuffixes $=UGL:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=UGL:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ UGL[0].c = origin;
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=UGL:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=UGL:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the implementation files.
+ forsuffixes $=UGL:
+ drawunboxed($[4]);
+ endfor
+ endfig;
+
+
+ %% Draw the SparseTileLayout class.
+ %% Abbreviate: GL = GuardLayers, RT = ReplicatedTag, DT = DistributedTag
+ beginfig(21)
+ %% Create the boxes.
+ % SparseTileLayout
+ boxit.STL[0](btex \classname{SparseTileLayout} etex);
+ boxit.STL[1](btex etex);
+ boxit.STL[2](
+ btex
+ \begin{lists}
+ SparseTileLayout() \\
+ SparseTileLayout(const Interval\&) \\
+ SparseTileLayout(const Interval\&, const GL\&) \\
+ SparseTileLayout(const Interval\&, const GL\&, const GL\&) \\
+ SparseTileLayout(Interval\&, const PatchList\_t\&, const RT\&) \\
+ SparseTileLayout(const Iv\&, const GL\&, const PatchList\_t\&, const RT\&) \\
+ SpTlLa(const Iv\&, const GL\&, const GL\&, const PatchList\_t\&, const RT\&) \\
+ SparseTileLayout(const Interval\&, const Partitioner\&, const RT\&) \\
+ SparseTileLayout(Interval\&, const PatchList\_t\&, const DT\&) \\
+ SparseTileLayout(const Iv\&, const GL\&, const PatchList\_t\&, const DT\&) \\
+ SpTlLa(const Iv\&, const GL\&, const GL\&, const PatchList\_t\&, const DT\&) \\
+ SparseTileLayout(const Interval\&, const Partitioner\&, const DT\&) \\
+ SparseTileLayout(const Interval\&, const Partitioner\&, const CM\&) \\
+ SparseTileLayout(const SparseTileLayout\&) \\
+ SparseTileLayout\& operator=(const SparseTileLayout\&) \\
+ \tilder SparseTileLayout() \\
+ void initialize(const Interval\&) \\
+ void initialize(const Interval\&, const GL\&) \\
+ void initialize(const Interval\&, const GL\&, const PatchList\_t\&) \\
+ void initialize(const Interval\&, const Partitioner\&) \\
+ BorderFillIterator\_t beginBorderFillList() \\
+ BorderFillIterator\_t endBorderFillList() \\
+ void notify(Interval\&, const ObserverEvent\&) \\
+ void print(Ostream\&)
+ \end{lists} etex);
+ boxit.STL[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.STL[4](
+ btex \begin{files}
+ SparseTileLayout.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=STL:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ forsuffixes $=STL:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=STL:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ STL[0].c = origin;
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=STL:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=STL:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the implementation files.
+ forsuffixes $=STL:
+ drawunboxed($[4]);
+ endfor
+ endfig;
+
+
+ %% Draw the DomainLayout class.
+ %% Abbreviate: GL = GuardLayers
+ beginfig(22)
+ %% Create the boxes.
+ % DomainLayout
+ boxit.DL[0](btex \classname{DomainLayout} etex);
+ boxit.DL[1](btex etex);
+ boxit.DL[2](
+ btex
+ \begin{lists}
+ DomainLayout() \\
+ DomainLayout(const Interval\&) \\
+ DomainLayout(const Interval\&, const GL\&) \\
+ DomainLayout(const Interval\&, const Node\&) \\
+ DomainLayout(const DomainLayout\&) \\
+ \tilder DomainLayout() \\
+ void initialize(const Interval\&) \\
+ void initialize(const Interval\&, const GL\&) \\
+ void initialize(const DomainLayout\&) \\
+ \end{lists} etex);
+ boxit.DL[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.DL[4](
+ btex \begin{files}
+ DomainLayout.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=DL:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ forsuffixes $=DL:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=DL:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ DL[0].c = origin;
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=DL:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=DL:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the implementation files.
+ forsuffixes $=DL:
+ drawunboxed($[4]);
+ endfor
+ endfig;
+
+
+ %% Draw the DynamicLayout class.
+ %% Abbreviate: GL = GuardLayers
+ beginfig(23)
+ %% Create the boxes.
+ % DynamicLayout
+ boxit.DyL[0](btex \classname{DynamicLayout} etex);
+ boxit.DyL[1](btex etex);
+ boxit.DyL[2](
+ btex
+ \begin{lists}
+ DynamicLayout() \\
+ DynamicLayout(const Interval<1>\&) \\
+ DynamicLayout(const Interval<1>\&, int) \\
+ DynamicLayout(const Grid<1>\&) \\
+ DynamicLayout(const Interval<1>\&, const Partitioner\&) \\
+ DynamicLayout(const Interval<1>\&, const Partitioner\&, const CM<1>\&) \\
+ DynamicLayout(const DynamicLayout\&) \\
+ DynamicLayout\& operator=(const DynamicLayout\&) \\
+ \tilder DynamicLayout() \\
+ void initialize(const Interval<1>\&) \\
+ void initialize(const Interval<1>\&, const Grid<1>\&) \\
+ void initialize(const Grid<1>\&) \\
+ void initialize(const Interval<1>\&, const Partitioner\&) \\
+ void initialize(const Interval<1>\&, const Partitioner\&, const CM<1>\&) \\
+ void initialize(const Interval<1>\&, const List\_t\&) \\
+ void print(Ostream\&)
+ \end{lists} etex);
+ boxit.DyL[4](
+ btex \begin{files}
+ DynamicLayout.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=DyL:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=DyL:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ DyL[0].c = origin;
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=DyL:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the implementation files.
+ forsuffixes $=DyL:
+ drawunboxed($[4]);
+ endfor
+ endfig;
+
+
+ %% Draw the GridLayout class.
+ %% Abbreviate: GL = GuardLayers
+ beginfig(24)
+ %% Create the boxes.
+ % GridLayout
+ boxit.GrL[0](btex \classname{GridLayout} etex);
+ boxit.GrL[1](btex etex);
+ boxit.GrL[2](
+ btex
+ \begin{lists}
+ GridLayout() \\
+ GridLayout(const Interval\&, const DT\&) \\
+ GridLayout(const Interval\&, const GL\&, const DT\&) \\
+ GridLayout(const Interval\&, const Loc\&, const DT\&) \\
+ GridLayout(const Interval\&, const Loc\&, const GL\&, const DT\&) \\
+ GridLayout(const Iv\&, const Loc\&, const GL\&, const GL\&, const DT\&) \\
+ GridLayout(const Interval\&, const Partitioner\&, const DT\&) \\
+ GridLayout(const Grid\&, const DT\&) \\
+ GridLayout(const Grid\&, const GL\&, const DT\&) \\
+ GridLayout(const Grid\&, const GL\&, const GL\&, const DT\&) \\
+ GridLayout(const Interval\&, const RT\&) \\
+ GridLayout(const Interval\&, const GL\&, const RT\&) \\
+ GridLayout(const Interval\&, const Loc\&, const RT\&) \\
+ GridLayout(const Interval\&, const Loc\&, const GL\&, const RT\&) \\
+ GridLayout(const Iv\&, const Loc\&, const GL\&, const GL\&, const RT\&) \\
+ GridLayout(const Interval\&, const Partitioner\&, const RT\&) \\
+ GridLayout(const Grid\&, const RT\&) \\
+ GridLayout(const Grid\&, const GL\&, const RT\&) \\
+ GridLayout(const Grid\&, const GL\&, const GL\&, const RT\&) \\
+ GridLayout(const Interval\&, const Partitioner\&, const ContextMapper\&) \\
+ GridLayout(const GridLayout\&) \\
+ GridLayout\& operator=(const GridLayout\&) \\
+ \tilder GridLayout() \\
+ void initialize(const Interval\&, const DT\&) \\
+ void initialize(const Interval\&, const GL\&, const DT\&) \\
+ void initialize(const Interval\&, const Loc\&, const DT\&) \\
+ void initialize(const Interval\&, const Loc\&, const GL\&, const DT\&) \\
+ void initialize(const Iv\&,const Loc\&,const GL\&,const GL\&,const DT\&) \\
+ void initialize(const Interval\&, const Partitioner\&, const DT\&) \\
+ void initialize(const Grid\&, const DT\&) \\
+ void initialize(const Grid\&, const GL\&, const DT\&) \\
+ void initialize(const Grid\&, const GL\&, const GL\&, const DT\&) \\
+ void initialize(const Interval\&, const RT\&) \\
+ void initialize(const Interval\&, const GL\&, const RT\&) \\
+ void initialize(const Interval\&, const Loc\&, const RT\&) \\
+ void initialize(const Interval\&, const Loc\&, const GL\&, const RT\&) \\
+ void initialize(const Iv\&,const Loc\&,const GL\&,const GL\&,const RT\&) \\
+ void initialize(const Interval\&, const Partitioner\&, const RT\&) \\
+ void initialize(const Grid\&, const RT\&) \\
+ void initialize(const Grid\&, const GL\&, const RT\&) \\
+ void initialize(const Grid\&, const GL\&, const GL\&, const RT\&) \\
+ void initialize(const Interval\&, const Partitioner\&, const CM\&) \\
+ void initialize(const Iv\&,const List\_t\&,const Loc\&,bool,bool,\\
+ const GL\&,const GL\&) \\
+ void print(Ostream\&)
+ \end{lists} etex);
+ boxit.GrL[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.GrL[4](
+ btex \begin{files}
+ GridLayout.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=GrL:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ forsuffixes $=GrL:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=GrL:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ GrL[0].c = origin;
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=GrL:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=GrL:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the implementation files.
+ forsuffixes $=GrL:
+ drawunboxed($[4]);
+ endfor
+ endfig;
+
+
+ %% Draw the GuardLayers class.
+ %% Abbreviate: GL = GuardLayers
+ beginfig(30)
+ %% Create the boxes.
+ % GuardLayers
+ boxit.GL[0](btex \classname{GuardLayers} etex);
+ boxit.GL[1](btex etex);
+ boxit.GL[2](
+ btex
+ \begin{lists}
+ GuardLayers() \\
+ GuardLayers(int) \\
+ GuardLayers(int, int) \\
+ GuardLayers(const Loc\&, const Loc\&) \\
+ void initialize(const Loc\&, const Loc\&) \\
+ void initialize(const GuardLayers\&) \\
+ int lower(int) \\
+ int upper(int) \\
+ int\& lower(int) \\
+ int\& upper(int) \\
+ bool operator==(const GuardLayers\&) \\
+ bool operator==(int) \\
+ bool operator!=(const GuardLayers\&) \\
+ bool operator!=(int) \\
+ GuardLayers operator-(const GuardLayers\&) \\
+ GuardLayers operator-(int) \\
+ static void addGuardLayers(Interval\&, const GuardLayers\&) \\
+ Interval addGuardLayersToDomain(const Interval\&) \\
+ void print(Ostream\&)
+ \end{lists} etex);
+ boxit.GL[3](
+ btex
+ \begin{lists}
+ dim D
+ \end{lists} etex);
+ boxit.GL[4](
+ btex \begin{files}
+ GuardLayers.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=GL:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ forsuffixes $=GL:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=GL:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ GL[0].c = origin;
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=GL:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=GL:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the implementation files.
+ forsuffixes $=GL:
+ drawunboxed($[4]);
+ endfor
+ endfig;
+
+
+ bye
Index: figures/domain-uml-1.png
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/domain-uml-1.png,v
retrieving revision 1.1
diff -c -p -r1.1 domain-uml-1.png
Binary files /tmp/cvshUnqvW and domain-uml-1.png differ
Index: figures/domain-uml.mp
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/domain-uml.mp,v
retrieving revision 1.1
diff -c -p -r1.1 domain-uml.mp
*** figures/domain-uml.mp 2002/02/27 03:51:54 1.1
--- figures/domain-uml.mp 2002/03/04 22:51:06
*************** beginfig(1)
*** 145,151 ****
boxit.grid[4](
btex \begin{files}
Grid.h \\
! DomainTraits.Grid.h
\end{files} etex);
% Grid<1>
--- 145,152 ----
boxit.grid[4](
btex \begin{files}
Grid.h \\
! Domain-\\
! Traits.Grid.h
\end{files} etex);
% Grid<1>
*************** beginfig(1)
*** 222,228 ****
draw $[0].n -- ($[0].n+(0,foo));
endfor
draw loc[0].n+(0,foo) -- grid[0].n+(0,foo);
! z0 = domain[2].s - (0,discriminatorScale);
draw z0 -- (x0, ypart(loc[0].n+(0,foo)));
endfig;
--- 223,229 ----
draw $[0].n -- ($[0].n+(0,foo));
endfor
draw loc[0].n+(0,foo) -- grid[0].n+(0,foo);
! z0 = domain[2].s - (0,discriminatorLength);
draw z0 -- (x0, ypart(loc[0].n+(0,foo)));
endfig;
Index: figures/engine-uml-1.png
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/engine-uml-1.png,v
retrieving revision 1.1
diff -c -p -r1.1 engine-uml-1.png
Binary files /tmp/cvs5QiAX4 and engine-uml-1.png differ
Index: figures/engine-uml.mp
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/engine-uml.mp,v
retrieving revision 1.1
diff -c -p -r1.1 engine-uml.mp
*** figures/engine-uml.mp 2002/02/27 03:51:54 1.1
--- figures/engine-uml.mp 2002/03/04 22:51:09
*************** beginfig(1)
*** 72,78 ****
taggedEngineTemplates =
btex \begin{lists}
dim D \\
! val type T
\end{lists} etex;
boxit.brick[3](taggedEngineTemplates);
--- 72,78 ----
taggedEngineTemplates =
btex \begin{lists}
dim D \\
! value type T
\end{lists} etex;
boxit.brick[3](taggedEngineTemplates);
*************** beginfig(1)
*** 120,126 ****
\end{lists} etex);
boxit.dynamic[3](
btex \begin{lists}
! val type T
\end{lists} etex);
boxit.dynamic[4](
btex \begin{files}
--- 120,126 ----
\end{lists} etex);
boxit.dynamic[3](
btex \begin{lists}
! value type T
\end{lists} etex);
boxit.dynamic[4](
btex \begin{files}
*************** beginfig(1)
*** 147,155 ****
boxit.multipatch[3](
btex \begin{lists}
dim D \\
! val type T \\
! layout LT \\
! patch PT
\end{lists} etex);
boxit.multipatch[4](
btex \begin{files}
--- 147,155 ----
boxit.multipatch[3](
btex \begin{lists}
dim D \\
! value type T \\
! layout tag LT \\
! patch tag PT
\end{lists} etex);
boxit.multipatch[4](
btex \begin{files}
*************** beginfig(1)
*** 238,260 ****
endfor
% Position the UML classes.
! engine[0].c = origin;
! xpart(brick[0].w) = xpart(dynamic[0].w);
! xpart(compressiblebrick[3].e) = xpart(multipatch[3].e);
! ypart(brick[0].n - compressiblebrick[0].n) = 0;
! ypart(dynamic[0].n - multipatch[0].n) = 0;
! ypart(compressiblebrick[0].s - multipatch[3].n) =
! ypart(remote[0].s - remotedynamic[3].n) =
! ypart(dynamic[0].s - remote[3].n) = yUnit;
! numeric leftColumn;
! leftColumn = max(xpart(brick[3].e),xpart(dynamic[3].e));
! numeric rightColumn;
! rightColumn = min(xpart(compressiblebrick[0].w),xpart(multipatch[0].w));
! rightColumn - leftColumn = xUnit;
! xpart(remote[0].n) = xpart(remotedynamic[0].n) = 0.5[leftColumn,rightColumn];
! xpart(engine[2].s) = 0.5[leftColumn,rightColumn];
! ypart(engine[2].s) = yUnit + max(ypart(brick[3].n),ypart(compressiblebrick[3].n));
!
%% Draw the boxes.
% Draw the UML class boxes.
forsuffixes $=engine:
--- 238,260 ----
endfor
% Position the UML classes.
! numeric vertSep; vertSep = 0.4yUnit;
! xpart(brick[0].sw - compressiblebrick[0].nw) = 0;
! ypart(brick[0].sw - compressiblebrick[3].nw) = vertSep;
! xpart(compressiblebrick[0].sw - dynamic[0].nw) = 0;
! ypart(compressiblebrick[0].sw - dynamic[3].nw) = vertSep;
! xpart(dynamic[0].sw - multipatch[0].nw) = 0;
! ypart(dynamic[0].sw - multipatch[3].nw) = vertSep;
! xpart(multipatch[0].sw - remote[0].nw) = 0;
! ypart(multipatch[0].sw - remote[3].nw) = vertSep;
! xpart(remote[0].sw - remotedynamic[0].nw) = 0;
! ypart(remote[0].sw - remotedynamic[3].nw) = vertSep;
! y0 = ypart(brick[3].n);
! x0 = xUnit + max(xpart(brick[3].e), xpart(compressiblebrick[3].e),
! xpart(dynamic[3].e), xpart(multipatch[3].e),
! xpart(remote[3].e), xpart(remotedynamic[3].e));
! engine[2].se = z0;
!
%% Draw the boxes.
% Draw the UML class boxes.
forsuffixes $=engine:
*************** beginfig(1)
*** 279,295 ****
endfor
% Draw arrows between classes.
drawarrow (xpart(remote[0].s), ypart(remotedynamic[0].n)) -- remote[0].s dashed evenly;
- numeric middleColumn; middleColumn = 0.5[leftColumn,rightColumn];
- drawarrow multipatch[0].w -- (middleColumn,ypart(multipatch[0].w)) dashed evenly;
- drawarrow dynamic[0].e -- (middleColumn, ypart(dynamic[0].e)) dashed evenly;
- drawarrow compressiblebrick[0].w -- (middleColumn,ypart(compressiblebrick[0].w)) dashed evenly;
- drawarrow brick[0].e -- (middleColumn, ypart(brick[0].e)) dashed evenly;
- draw compressiblebrick[0].w -- brick[0].e dashed evenly;
- drawarrow (middleColumn,ypart(multipatch[0].w)) -- engine[2].s
- dashed evenly;
- draw remote[0].n .. (middleColumn,ypart(multipatch[0].w)) dashed evenly;
-
endfig;
--- 279,289 ----
endfor
% Draw arrows between classes.
+ forsuffixes $=brick, compressiblebrick, dynamic, multipatch, remote:
+ draw $[0].e -- (x0, ypart($[0].e)) dashed evenly;
+ endfor
+ drawarrow (x0, ypart(remote[0].e)) -- z0 dashed evenly;
drawarrow (xpart(remote[0].s), ypart(remotedynamic[0].n)) -- remote[0].s dashed evenly;
endfig;
Index: figures/explanation-uml-1.png
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/explanation-uml-1.png,v
retrieving revision 1.1
diff -c -p -r1.1 explanation-uml-1.png
Binary files /tmp/cvsxE8ome and explanation-uml-1.png differ
Index: figures/explanation-uml.mp
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/explanation-uml.mp,v
retrieving revision 1.1
diff -c -p -r1.1 explanation-uml.mp
*** figures/explanation-uml.mp 2002/02/27 03:51:54 1.1
--- figures/explanation-uml.mp 2002/03/04 22:51:09
*************** beginfig(1)
*** 79,85 ****
% Loc
boxit.loc[0](btex \classname{Classname2} etex);
boxit.loc[1](btex \emptyBox{Interval<1>} etex);
! boxit.loc[2](btex etex);
boxit.loc[3](
btex \begin{lists}
template parameter T
--- 79,88 ----
% Loc
boxit.loc[0](btex \classname{Classname2} etex);
boxit.loc[1](btex \emptyBox{Interval<1>} etex);
! boxit.loc[2](
! btex \begin{lists}
! void foo(const X[1-3]\&)
! \end{lists} etex);
boxit.loc[3](
btex \begin{lists}
template parameter T
*************** beginfig(1)
*** 220,226 ****
forsuffixes $=loc:
draw $[0].n -- ($[0].n+(0,foo));
endfor
! z0 = domain[2].s - (0,discriminatorScale);
draw z0 -- (x0, ypart(loc[0].n+(0,foo)));
% Add explanatory labels.
--- 223,229 ----
forsuffixes $=loc:
draw $[0].n -- ($[0].n+(0,foo));
endfor
! z0 = domain[2].s - (0,discriminatorLength);
draw z0 -- (x0, ypart(loc[0].n+(0,foo)));
% Add explanatory labels.
*************** beginfig(1)
*** 228,237 ****
domain[1].e);
label.rt(btex Public member functions, if any, are listed here. etex,
domain[2].e);
! label.rt(btex This class adds no new public member functions. etex,
loc[2].e);
! label.lrt(btex Template parameters are listed in dashed boxes. etex,
! 0.4[loc[3].sw,loc[3].s]);
label.rt(btex Files implementing the class etex, loc[4].e);
label.rt(btex A dashed arrow indicates an instantiated class. etex,
0.7[loc[2].s,locOne[0].n]);
--- 231,240 ----
domain[1].e);
label.rt(btex Public member functions, if any, are listed here. etex,
domain[2].e);
! label.rt(btex This class adds one new public member function. etex,
loc[2].e);
! label.lrt(btex Template parameters occur in dashed boxes. etex,
! 0.8[loc[3].sw,loc[3].s]);
label.rt(btex Files implementing the class etex, loc[4].e);
label.rt(btex A dashed arrow indicates an instantiated class. etex,
0.7[loc[2].s,locOne[0].n]);
Index: figures/field-uml-1.png
===================================================================
RCS file: field-uml-1.png
diff -N field-uml-1.png
Binary files /dev/null and field-uml-1.png differ
Index: figures/field-uml-10.png
===================================================================
RCS file: field-uml-10.png
diff -N field-uml-10.png
Binary files /dev/null and field-uml-10.png differ
Index: figures/field-uml-11.png
===================================================================
RCS file: field-uml-11.png
diff -N field-uml-11.png
Binary files /dev/null and field-uml-11.png differ
Index: figures/field-uml-2.png
===================================================================
RCS file: field-uml-2.png
diff -N field-uml-2.png
Binary files /dev/null and field-uml-2.png differ
Index: figures/field-uml-3.png
===================================================================
RCS file: field-uml-3.png
diff -N field-uml-3.png
Binary files /dev/null and field-uml-3.png differ
Index: figures/field-uml.mp
===================================================================
RCS file: field-uml.mp
diff -N field-uml.mp
*** /dev/null Fri Mar 23 21:37:44 2001
--- field-uml.mp Mon Mar 4 15:51:12 2002
***************
*** 0 ****
--- 1,570 ----
+ %% Oldham, Jeffrey D.
+ %% 2002Feb28
+ %% POOMA
+
+ %% UML Diagrams of Field Classes
+
+
+ %% Assumes TEX=latex.
+
+ %% Ensure fonts are included in the output.
+ prologues := 2; % >= 2 for PostScript
+
+ input boxes;
+ input box-macros;
+ input uml;
+
+ verbatimtex
+ \documentclass[10pt]{article}
+ \usepackage{amsmath}
+ \input{macros.ltx}
+ \usepackage{times}
+ \usepackage{mathptm}
+ \newlength{\cnw} % Required to use \classnameWidth and \emptyBox
+ \begin{document}
+ etex
+
+
+ %% Draw the NoMesh box.
+ beginfig(1)
+ %% Create the boxes.
+ % NoMesh
+ boxit.nomesh[0](btex \classname{NoMesh} etex);
+ boxit.nomesh[1](btex etex);
+ boxit.nomesh[2](
+ btex
+ \begin{lists}
+ NoMesh() \\
+ NoMesh(const Layout\&) \\
+ NoMesh(const NoMesh\&) \\
+ NoMesh(const NoMesh\&, const Interval\&) \\
+ NoMesh(const NoMesh\&, const INode\&) \\
+ NoMesh(const NoMesh\&, const FieldEnginePatch\&) \\
+ NoMesh(const Mesh\&, const Dom\&) \\
+ NoMesh\& operator=(const NoMesh\&) \\
+ \tilder NoMesh() \\
+ Interval\& physicalVertexDomain() \\
+ Interval\& physicalCellDomain() \\
+ Interval\& totalVertexDomain() \\
+ Interval\& totalCellDomain()
+ \end{lists} etex);
+ boxit.nomesh[3](
+ btex
+ \begin{lists}
+ dimension D
+ \end{lists} etex);
+ boxit.nomesh[4](
+ btex \begin{files}
+ NoMesh.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=nomesh:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ forsuffixes $=nomesh:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=nomesh:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ nomesh[0].c = origin;
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=nomesh:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=nomesh:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the implementation files.
+ forsuffixes $=nomesh:
+ drawunboxed($[4]);
+ endfor
+ endfig;
+
+
+ %% Draw the UniformRectilinearMesh box.
+ beginfig(2)
+ %% Create the boxes.
+ % UniformRectilinearMesh
+ boxit.urm[0](btex \classname{UniformRectilinearMesh} etex);
+ boxit.urm[1](btex etex);
+ boxit.urm[2](
+ btex
+ \begin{lists}
+ UniformRectilinearMesh() \\
+ UniformRectilinearMesh(const Layout\&) \\
+ UniformRectilinearMesh(const Layout\&, const Vector\&, const Vector\&) \\
+ UniformRectilinearMesh(const UniformRectilinearMesh\&) \\
+ UniformRectilinearMesh(const URM\&, const Interval\&) \\
+ UniformRectilinearMesh(const UniformRectilinearMesh\&, const INode\&) \\
+ UniformRectilinearMesh(const URM\&, const FieldEnginePatch\&) \\
+ UniformRectilinearMesh(const Mesh\&, const Dom\&) \\
+ UniformRectilinearMesh\& operator=(const UniformRectilinearMesh\&) \\
+ \tilder UniformRectilinearMesh() \\
+ const Interval\& physicalVertexDomain() \\
+ const Interval\& physicalCellDomain() \\
+ const Interval\& totalVertexDomain() \\
+ const Interval\& totalCellDomain() \\
+ const Vector\& spacings() \\
+ const Vector\& origin() \\
+ const Vector\& cellContaining(const Vector\&) \\
+ const Vector\& vertexPosition(const Loc\&) \\
+ void initializePositions(Engine\&, const Centering\&) \\
+ void initializeNormals(Engine\&, const Centering\&) \\
+ void initializeNormals(Engine\&, const Centering\&, bool) \\
+ void initializeCellVolumes(Engine\&, const Centering\&) \\
+ void initializeFaceAreas(Engine\&, const Centering\&) \\
+ void initializeEdgeLengths(Engine\&, const Centering\&)
+ \end{lists} etex);
+ boxit.urm[3](
+ btex
+ \begin{lists}
+ dim D \\
+ value T
+ \end{lists} etex);
+ boxit.urm[4](
+ btex \begin{files}
+ UniformRectilinearMesh.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=urm:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ forsuffixes $=urm:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=urm:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ urm[0].c = origin;
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=urm:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=urm:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the implementation files.
+ forsuffixes $=urm:
+ drawunboxed($[4]);
+ endfor
+ endfig;
+
+
+ %% Draw the conceptual Mesh box.
+ beginfig(3)
+ %% Create the boxes.
+ % Mesh
+ boxit.mesh[0](btex \classname{\emph{Mesh}} etex);
+ boxit.mesh[1](btex etex);
+ boxit.mesh[2](
+ btex
+ \begin{lists}
+ Mesh() \\
+ Mesh(const Layout\&) \\
+ Mesh(const Mesh\&) \\
+ Mesh(const Mesh\&, const Dom\&) \\
+ Mesh\& operator=(const Mesh\&) \\
+ \tilder Mesh() \\
+ Interval\& physicalVertexDomain() \\
+ Interval\& physicalCellDomain() \\
+ Interval\& totalVertexDomain() \\
+ Interval\& totalCellDomain()
+ \end{lists} etex);
+ boxit.mesh[3](
+ btex
+ \begin{lists}
+ dimension D
+ \end{lists} etex);
+ boxit.mesh[4](btex etex);
+
+ % NoMesh
+ boxit.nomesh[0](btex \classname{NoMesh} etex);
+ boxit.nomesh[1](btex etex);
+ boxit.nomesh[2](
+ btex
+ \begin{lists}
+ NoMesh() \\
+ NoMesh(const Layout\&) \\
+ NoMesh(const NoMesh\&) \\
+ NoMesh(const NoMesh\&, const Interval\&) \\
+ NoMesh(const NoMesh\&, const INode\&) \\
+ NoMesh(const NoMesh\&, const FieldEnginePatch\&) \\
+ NoMesh(const Mesh\&, const Dom\&) \\
+ NoMesh\& operator=(const NoMesh\&) \\
+ \tilder NoMesh() \\
+ Interval\& physicalVertexDomain() \\
+ Interval\& physicalCellDomain() \\
+ Interval\& totalVertexDomain() \\
+ Interval\& totalCellDomain()
+ \end{lists} etex);
+ boxit.nomesh[3](
+ btex
+ \begin{lists}
+ dimension D
+ \end{lists} etex);
+ boxit.nomesh[4](
+ btex \begin{files}
+ NoMesh.h
+ \end{files} etex);
+
+ % UniformRectilinearMesh
+ boxit.urm[0](btex \classname{UniformRectilinearMesh} etex);
+ boxit.urm[1](btex etex);
+ boxit.urm[2](
+ btex
+ \begin{lists}
+ UniformRectilinearMesh() \\
+ UniformRectilinearMesh(const Layout\&) \\
+ UniformRectilinearMesh(const Layout\&, const Vector\&, const Vector\&) \\
+ UniformRectilinearMesh(const UniformRectilinearMesh\&) \\
+ UniformRectilinearMesh(const UniformRectilinearMesh\&, const Interval\&) \\
+ UniformRectilinearMesh(const UniformRectilinearMesh\&, const INode\&) \\
+ UniformRectilinearMesh(const UniformRectilinearMesh\&, const FieldEnginePatch\&) \\
+ UniformRectilinearMesh(const Mesh\&, const Dom\&) \\
+ UniformRectilinearMesh\& operator=(const UniformRectilinearMesh\&) \\
+ \tilder UniformRectilinearMesh() \\
+ const Interval\& physicalVertexDomain() \\
+ const Interval\& physicalCellDomain() \\
+ const Interval\& totalVertexDomain() \\
+ const Interval\& totalCellDomain() \\
+ const Vector\& spacings() \\
+ const Vector\& origin() \\
+ const Vector\& cellContaining(const Vector\&) \\
+ const Vector\& vertexPosition(const Loc\&) \\
+ void initializePositions(Engine\&, const Centering\&) \\
+ void initializeNormals(Engine\&, const Centering\&) \\
+ void initializeNormals(Engine\&, const Centering\&, bool) \\
+ void initializeCellVolumes(Engine\&, const Centering\&) \\
+ void initializeFaceAreas(Engine\&, const Centering\&) \\
+ void initializeEdgeLengths(Engine\&, const Centering\&)
+ \end{lists} etex);
+ boxit.urm[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T
+ \end{lists} etex);
+ boxit.urm[4](
+ btex \begin{files}
+ UniformRectilinearMesh.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=mesh:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ forsuffixes $=nomesh, urm:
+ fixsize($[0]);
+ endfor
+ forsuffixes $=mesh, nomesh, urm:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+
+ % Position the UML classes.
+ nomesh[0].sw - urm[0].nw = (0, yUnit);
+ mesh[2].s - nomesh[0].nw = (0,yUnit);
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=mesh:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ forsuffixes $=nomesh, urm:
+ for t = 0 upto 0:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=mesh, nomesh, urm:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ %% Draw the realization lines.
+ z0 = 0.2[mesh[2].sw,mesh[2].se];
+ drawDiscriminator(z0, 0);
+ forsuffixes $=nomesh, urm:
+ draw $[0].w -- (x0,ypart($[0].w)) dashed evenly;
+ endfor
+ draw (x0,ypart(urm[0].w)) -- (z0 - (0,discriminatorLength)) dashed evenly;
+
+ %% HERE
+
+ endfig;
+
+
+ %% Draw the Field box.
+ beginfig(10)
+ %% Create the boxes.
+ % Field
+ boxit.field[0](btex \classname{Field} etex);
+ boxit.field[1](btex etex);
+ boxit.field[2](
+ btex
+ \begin{lists}
+ Field() \\
+ Field(const X\&) \\
+ Field(const Centering\&, const Layout\&, const M\&) \\
+ Field(int, const Centering\&, const Layout\&, const M\&)\\
+ Field(const Centering\&, const Layout\&, const X1\&, const X2\&)\\
+ Field(const Centering\&, const Layout\&) \\
+ Field(int, const Centering\&, const Layout\&, const X1\&, const X2\&) \\
+ Field(const Field\&) \\
+ void initialize(const Centering\&, const Layout\&, const M\&) \\
+ void initialize(int, const Centering\&, const Layout\&, const M\&)\\
+ void initialize(const Centering\&, const Layout\&) \\
+ void initialize(const Field\&) \\
+ \tilder Field() \\
+ const Engine\& engine() \\
+ Engine\& engine() \\
+ const FieldEngine\& fieldEngine() \\
+ FieldEngine\& fieldEngine() \\
+ int numSubFields() \\
+ const Centering\& centering() \\
+ const Centering centering(int) \\
+ int centeringSize() \\
+ int numMaterials() \\
+ const Domain physicalCellDomain() \\
+ Domain totalCellDomain() \\
+ Domain physicalDomain(int) \\
+ Domain totalDomain(int) \\
+ Domain physicalDomain() \\
+ Domain totalDomain() \\
+ Domain domain() \\
+ const Mesh\& mesh() \\
+ Layout layout() \\
+ Field\& operator=(const Field\&) \\
+ const Field\& operator=(const Field\&) \\
+ const Field\& operator=(const X\&) \\
+ const Field\& operator+=(const X\&) \\
+ const Field\& operator-=(const X\&) \\
+ const Field\& operator*=(const X\&) \\
+ const Field\& operator/=(const X\&) \\
+ const Field\& operator\%=(const X\&) \\
+ const Field\& operator|=(const X\&) \\
+ const Field\& operator\&=(const X\&) \\
+ const Field\& operator\^=(const X\&) \\
+ const Field\& operator<<=(const X\&) \\
+ const Field\& operator>>=(const X\&) \\
+ void addRelation(RelationListItem*) \\
+ void removeRelations() \\
+ void applyRelations() \\
+ void applyRelations(bool) \\
+ void setDirty() \\
+ void clearDirty()
+ \end{lists} etex);
+ boxit.field[3](
+ btex
+ \begin{lists}
+ mesh M \\
+ value type T \\
+ engine type E
+ \end{lists} etex);
+ boxit.field[4](
+ btex \begin{files}
+ Field.h \\
+ PrintField.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=field:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ forsuffixes $=field:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=field:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ field[0].c = origin;
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=field:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=field:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the implementation files.
+ forsuffixes $=field:
+ drawunboxed($[4]);
+ endfor
+ endfig;
+
+
+ %% Draw the Centering box.
+ beginfig(11)
+ %% Create the boxes.
+ % Centering
+ boxit.centering[0](btex \classname{Centering} etex);
+ boxit.centering[1](btex etex);
+ boxit.centering[2](
+ btex
+ \begin{lists}
+ Centering() \\
+ Centering(CenteringType) \\
+ Centering(CenteringType, ContinuityType) \\
+ Centering(CenteringType, ContinuityType,\\
+ const Orientations\&, const Positions\&) \\
+ \tilder Centering() \\
+ const CenteringType\¢eringType() \\
+ bool discontinuous() \\
+ bool continuous() \\
+ const Orientations\& orientations() \\
+ const Positions\& positions() \\
+ const Orientation\& orientation(int) \\
+ const Position\& position(int) \\
+ int size() \\
+ void addValue(const Orientation\&, const Position\&) \\
+ \end{lists} etex);
+ boxit.centering[3](
+ btex
+ \begin{lists}
+ dimension D
+ \end{lists} etex);
+ boxit.centering[4](
+ btex \begin{files}
+ FieldCentering.h
+ \end{files} etex);
+
+ % CanonicalCentering
+ boxit.ccentering[0](btex \classname{CanonicalCentering} etex);
+ boxit.ccentering[1](btex etex);
+ boxit.ccentering[2](
+ btex
+ \begin{lists}
+ CanonicalCentering() \\
+ \tilder CanonicalCentering() \\
+ Centering operator()(const CenteringType, ContinuityType) \\
+ Centering operator()(const CenteringType, ContinuityType, int) \\
+ \end{lists} etex);
+ boxit.ccentering[3](
+ btex
+ \begin{lists}
+ dimension D
+ \end{lists} etex);
+ boxit.ccentering[4](
+ btex \begin{files}
+ FieldCentering.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the template parameters.
+ forsuffixes $=centering, ccentering:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ forsuffixes $=centering, ccentering:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=centering, ccentering:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ centering[0].c = origin;
+ centering[2].sw - ccentering[0].nw = (0,2yUnit);
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=centering, ccentering:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=centering, ccentering:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the implementation files.
+ forsuffixes $=centering, ccentering:
+ drawunboxed($[4]);
+ endfor
+ endfig;
+
+
+ bye
Index: figures/introduction.mp
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/introduction.mp,v
retrieving revision 1.5
diff -c -p -r1.5 introduction.mp
*** figures/introduction.mp 2002/01/31 21:29:58 1.5
--- figures/introduction.mp 2002/03/04 22:51:12
*************** beginfig(101)
*** 48,54 ****
boxit.b8(btex etex);
nuBoxes = 8;
boxit.b9(btex \textsl{implementation} etex);
- %%TMP sameWidthSameHeight(b3,b4,b5,b6,b7,b8);
sameWidthSameHeight(b3,b6);
sameWidthSameHeight(b4,b7);
sameWidthSameHeight(b5,b8);
--- 48,53 ----
Index: figures/macros.ltx
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/macros.ltx,v
retrieving revision 1.5
diff -c -p -r1.5 macros.ltx
*** figures/macros.ltx 2002/02/27 03:51:54 1.5
--- figures/macros.ltx 2002/03/04 22:51:12
***************
*** 43,48 ****
--- 43,53 ----
\newcommand{\avoidFi}{F\mbox{}i}%
% Avoid a problem with dvitomp and ligatures.
+ \newcommand{\tilder}{\ensuremath{\tilde{}}\,}%
+ % Produce a tilde.
+ % We use math mode to avoid the fact that ordinary times does
+ % not have a tilde.
+
%% UML Macros.
% Produce a class's name, presumbly at the top of a UML class box.
Index: figures/math-objs-uml-1.png
===================================================================
RCS file: math-objs-uml-1.png
diff -N math-objs-uml-1.png
Binary files /dev/null and math-objs-uml-1.png differ
Index: figures/math-objs-uml-10.png
===================================================================
RCS file: math-objs-uml-10.png
diff -N math-objs-uml-10.png
Binary files /dev/null and math-objs-uml-10.png differ
Index: figures/math-objs-uml-11.png
===================================================================
RCS file: math-objs-uml-11.png
diff -N math-objs-uml-11.png
Binary files /dev/null and math-objs-uml-11.png differ
Index: figures/math-objs-uml-2.png
===================================================================
RCS file: math-objs-uml-2.png
diff -N math-objs-uml-2.png
Binary files /dev/null and math-objs-uml-2.png differ
Index: figures/math-objs-uml-3.png
===================================================================
RCS file: math-objs-uml-3.png
diff -N math-objs-uml-3.png
Binary files /dev/null and math-objs-uml-3.png differ
Index: figures/math-objs-uml-4.png
===================================================================
RCS file: math-objs-uml-4.png
diff -N math-objs-uml-4.png
Binary files /dev/null and math-objs-uml-4.png differ
Index: figures/math-objs-uml.mp
===================================================================
RCS file: math-objs-uml.mp
diff -N math-objs-uml.mp
*** /dev/null Fri Mar 23 21:37:44 2001
--- math-objs-uml.mp Mon Mar 4 15:51:16 2002
***************
*** 0 ****
--- 1,1174 ----
+ %% Oldham, Jeffrey D.
+ %% 2002Feb27
+ %% POOMA
+
+ %% UML Diagrams for Vectors, Matrices, Tensors
+
+
+ %% Assumes TEX=latex.
+
+ %% Ensure fonts are included in the output.
+ prologues := 2; % >= 2 for PostScript
+
+ input boxes;
+ input box-macros;
+ input uml;
+
+ verbatimtex
+ \documentclass[10pt]{article}
+ \usepackage{amsmath}
+ \input{macros.ltx}
+ \usepackage{times}
+ \usepackage{mathptm}
+ \newlength{\cnw} % Required to use \classnameWidth and \emptyBox
+ \begin{document}
+ etex
+
+
+ %% Vectors and their engines
+ beginfig(1)
+ %% Create the boxes.
+ % Vector
+ boxit.vector[0](btex \classname{Vector} etex);
+ boxit.vector[1](btex etex);
+ boxit.vector[2](
+ btex \begin{lists}
+ Vector() \\
+ Vector(const Vector\&) \\
+ Vector(const X\&) \\
+ Vector(const X1\&,const X2\&) \\
+ Vector(const X1\&,const X2\&,const X3\&) \\
+ Vector(const X1\&,const X2\&,const X3\&,const X4\&) \\
+ \tilder Vector() \\
+ Vector\& operator=(const Vector\&) \\
+ Vector\& operator=(const X\&) \\
+ const T\& operator()(int) \\
+ T\& operator()(int) \\
+ const Engine\& engine() \\
+ Engine\& engine() \\
+ void print(Out\&)
+ \end{lists} etex);
+ boxit.vector[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T \\
+ engine type E
+ \end{lists} etex);
+ boxit.vector[4](
+ btex \begin{files}
+ Vector.h
+ \end{files} etex);
+
+ % VectorEngine
+ boxit.vectorEngine[0](btex \classname{VectorEngine} etex);
+ boxit.vectorEngine[1](btex etex);
+ boxit.vectorEngine[2](btex etex);
+ boxit.vectorEngine[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T \\
+ engine type E
+ \end{lists} etex);
+ boxit.vectorEngine[4](
+ btex \begin{files}
+ VectorEngine.h
+ \end{files} etex);
+
+ % VectorEngine
+ boxit.vectorEngineFull[0](btex \classname{VectorEngine} etex);
+ boxit.vectorEngineFull[1](btex etex);
+ boxit.vectorEngineFull[2](
+ btex \begin{lists}
+ VectorEngine() \\
+ VectorEngine(const VectorEngine\&) \\
+ VectorEngine(const X\&) \\
+ VectorEngine(const X1\&,const X2\&) \\
+ VectorEngine(const X1\&,const X2\&,const X3\&) \\
+ VectorEngine(const X1\&,const X2\&,const X3\&,const X4\&) \\
+ \tilder VectorEngine() \\
+ VectorEngine\& operator=(const VectorEngine\&) \\
+ VectorEngine\& operator=(const X\&) \\
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.vectorEngineFull[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T
+ \end{lists} etex);
+ boxit.vectorEngineFull[4](
+ btex \begin{files}
+ Vector.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the boxes within the UML class diagrams.
+ forsuffixes $=vector, vectorEngine, vectorEngineFull:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ % Position the template parameters.
+ forsuffixes $=vector, vectorEngine, vectorEngineFull:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=vector, vectorEngine, vectorEngineFull:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ vector[0].c = origin;
+ vector[2].s - vectorEngine[0].n = (0, 3yUnit);
+ vectorEngine[2].s - vectorEngineFull[0].n = (0, yUnit);
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=vector, vectorEngine, vectorEngineFull:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=vector, vectorEngine, vectorEngineFull:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the file names.
+ forsuffixes $=vector, vectorEngine, vectorEngineFull:
+ drawunboxed($[4]);
+ endfor
+
+ % Draw arrows between classes.
+
+ % Draw lines between classes.
+ drawDiscriminator(vectorEngine[2].s, 0);
+ draw vectorEngineFull[0].n -- (vectorEngine[2].s-(0,discriminatorLength));
+
+ endfig;
+
+
+ %% Tensors and their engines
+ beginfig(2)
+ %% Create the boxes.
+ % Tensor
+ boxit.tensor[0](btex \classname{Tensor} etex);
+ boxit.tensor[1](btex etex);
+ boxit.tensor[2](
+ btex \begin{lists}
+ Tensor() \\
+ Tensor(const Tensor\&) \\
+ Tensor(const X1\&) \\
+ Tensor(const X[1-2]\&) \\
+ Tensor(const X[1-3]\&) \\
+ Tensor(const X[1-4]\&) \\
+ Tensor(const X[1-5]\&) \\
+ Tensor(const X[1-6]\&) \\
+ Tensor(const X[1-7]\&) \\
+ Tensor(const X[1-8]\&) \\
+ Tensor(const X[1-9]\&) \\
+ \tilder Tensor() \\
+ Tensor\& operator=(const Tensor\&) \\
+ Tensor\& operator=(const Tensor\&) \\
+ Tensor\& operator=(const X\&) \\
+ const T\& operator()(int) \\
+ T\& operator()(int) \\
+ const Engine\& engine() \\
+ Engine\& engine() \\
+ void print(Out\&)
+ \end{lists} etex);
+ boxit.tensor[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T \\
+ engine type E
+ \end{lists} etex);
+ boxit.tensor[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.tensorEngine[0](btex \classname{TensorEngine} etex);
+ boxit.tensorEngine[1](btex etex);
+ boxit.tensorEngine[2](btex etex);
+ boxit.tensorEngine[3](
+ btex
+ \begin{lists}
+ dim D \\
+ value T \\
+ engine E
+ \end{lists} etex);
+ boxit.tensorEngine[4](
+ btex \begin{files}
+ TensorEngine.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.teFull[0](btex \classname{TensorEngine} etex);
+ boxit.teFull[1](btex etex);
+ boxit.teFull[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine\&) \\
+ TensorEngine(const T\&) \\
+ TensorEngine(const X\&) \\
+ TensorEngine(const X[1-4]\&) \\
+ TensorEngine(const X[1-9]\&) \\
+ \tilder TensorEngine() \\
+ TensorEngine\& operator=(const TensorEngine\&) \\
+ TensorEngine\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int)
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.teFull[3](
+ btex
+ \begin{lists}
+ dim D \\
+ value T
+ \end{lists} etex);
+ boxit.teFull[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.teAntisymmetric[0](btex \classname{TensorEngine} etex);
+ boxit.teAntisymmetric[1](btex etex);
+ boxit.teAntisymmetric[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine\&) \\
+ TensorEngine(const T\&) \\
+ TensorEngine(const X\&) \\
+ TensorEngine(const X[1-3]\&) \\
+ TensorEngine(const X[1-6]\&) \\
+ \tilder TensorEngine() \\
+ TensorEngine\& operator=(const TensorEngine\&) \\
+ TensorEngine\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int)
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.teAntisymmetric[3](
+ btex
+ \begin{lists}
+ dim D \\
+ value T
+ \end{lists} etex);
+ boxit.teAntisymmetric[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.teSymmetric[0](btex \classname{TensorEngine} etex);
+ boxit.teSymmetric[1](btex etex);
+ boxit.teSymmetric[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine\&) \\
+ TensorEngine(const T\&) \\
+ TensorEngine(const X\&) \\
+ TensorEngine(const X[1-3]\&) \\
+ TensorEngine(const X[1-6]\&) \\
+ \tilder TensorEngine() \\
+ TensorEngine\& operator=(const TensorEngine\&) \\
+ TensorEngine\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int)
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.teSymmetric[3](
+ btex
+ \begin{lists}
+ dim D \\
+ value T
+ \end{lists} etex);
+ boxit.teSymmetric[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.teDiagonal[0](btex \classname{TensorEngine} etex);
+ boxit.teDiagonal[1](btex etex);
+ boxit.teDiagonal[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine\&) \\
+ TensorEngine(const T\&) \\
+ TensorEngine(const X\&) \\
+ TensorEngine(const X[1-2]\&) \\
+ TensorEngine(const X[1-3]\&) \\
+ TensorEngine(const X[1-4]\&) \\
+ TensorEngine(const X[1-5]\&) \\
+ TensorEngine(const X[1-6]\&) \\
+ TensorEngine(const X[1-7]\&) \\
+ \tilder TensorEngine() \\
+ TensorEngine\& operator=(const TensorEngine\&) \\
+ TensorEngine\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int)
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.teDiagonal[3](
+ btex
+ \begin{lists}
+ dim D \\
+ value T
+ \end{lists} etex);
+ boxit.teDiagonal[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the boxes within the UML class diagrams.
+ forsuffixes $=tensor, tensorEngine:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ samewidth(teFull[0],teAntisymmetric[0],teSymmetric[0],teDiagonal[0]);
+ forsuffixes $=teFull,teAntisymmetric,teSymmetric,teDiagonal:
+ fixsize($[0]);
+ endfor
+ % Position the template parameters.
+ forsuffixes $=tensor, tensorEngine, teFull,teAntisymmetric,teSymmetric,teDiagonal:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=tensor, tensorEngine:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ tensor[0].c = origin;
+ tensor[2].sw - tensorEngine[0].nw = (0, 4yUnit);
+ teFull[0].s - teAntisymmetric[0].n =
+ teAntisymmetric[0].s - teSymmetric[0].n =
+ teSymmetric[0].s - teDiagonal[0].n = (0, 1.5yUnit);
+ tensorEngine[1].e - 0.5[teAntisymmetric[0].sw,teSymmetric[0].nw] = (-3xUnit,0);
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=tensor, tensorEngine:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ forsuffixes $=teFull,teAntisymmetric,teSymmetric,teDiagonal:
+ for t = 0 upto 0:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=tensor, tensorEngine, teFull,teAntisymmetric,teSymmetric,teDiagonal:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the file names.
+ forsuffixes $=tensor, tensorEngine:
+ drawunboxed($[4]);
+ endfor
+
+ % Draw arrows between classes.
+
+ % Draw lines between classes.
+ drawDiscriminator(tensorEngine[1].e, 90);
+ x0 = xpart(0.5[tensorEngine[3].e,teAntisymmetric[0].w]);
+ y0 = ypart(tensorEngine[1].e);
+ draw (tensorEngine[1].e + (discriminatorLength,0)) -- z0;
+ forsuffixes $=teFull,teAntisymmetric,teSymmetric,teDiagonal:
+ draw (x0,ypart($[0].w)) -- $[0].w;
+ endfor
+ draw (x0,ypart(teFull[0].w)) -- (x0,ypart(teDiagonal[0].w));
+ endfig;
+
+
+ %% TensorEngine<...,Full> and TensorEngine<...,Diagonal>
+ beginfig(3)
+ %% Create the boxes.
+ % Tensor
+ boxit.tensor[0](btex \classname{Tensor} etex);
+ boxit.tensor[1](btex etex);
+ boxit.tensor[2](
+ btex \begin{lists}
+ Tensor() \\
+ Tensor(const Tensor\&) \\
+ Tensor(const X1\&) \\
+ Tensor(const X[1-2]\&) \\
+ Tensor(const X[1-3]\&) \\
+ Tensor(const X[1-4]\&) \\
+ Tensor(const X[1-5]\&) \\
+ Tensor(const X[1-6]\&) \\
+ Tensor(const X[1-7]\&) \\
+ Tensor(const X[1-8]\&) \\
+ Tensor(const X[1-9]\&) \\
+ \tilder Tensor() \\
+ Tensor\& operator=(const Tensor\&) \\
+ Tensor\& operator=(const Tensor\&) \\
+ Tensor\& operator=(const X\&) \\
+ const T\& operator()(int) \\
+ T\& operator()(int) \\
+ const Engine\& engine() \\
+ Engine\& engine() \\
+ void print(Out\&)
+ \end{lists} etex);
+ boxit.tensor[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T \\
+ engine type E
+ \end{lists} etex);
+ boxit.tensor[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.tensorEngine[0](btex \classname{TensorEngine} etex);
+ boxit.tensorEngine[1](btex etex);
+ boxit.tensorEngine[2](btex etex);
+ boxit.tensorEngine[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T \\
+ engine type E
+ \end{lists} etex);
+ boxit.tensorEngine[4](
+ btex \begin{files}
+ TensorEngine.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.teFull[0](btex \classname{TensorEngine} etex);
+ boxit.teFull[1](btex etex);
+ boxit.teFull[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine\&) \\
+ TensorEngine(const T\&) \\
+ TensorEngine(const X\&) \\
+ TensorEngine(const X[1-4]\&) \\
+ TensorEngine(const X[1-9]\&) \\
+ \tilder TensorEngine() \\
+ TensorEngine\& operator=(const TensorEngine\&) \\
+ TensorEngine\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int)
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.teFull[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T
+ \end{lists} etex);
+ boxit.teFull[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.teAntisymmetric[0](btex \classname{TensorEngine} etex);
+ boxit.teAntisymmetric[1](btex etex);
+ boxit.teAntisymmetric[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine\&) \\
+ TensorEngine(const T\&) \\
+ TensorEngine(const X\&) \\
+ TensorEngine(const X[1-3]\&) \\
+ TensorEngine(const X[1-6]\&) \\
+ \tilder TensorEngine() \\
+ TensorEngine\& operator=(const TensorEngine\&) \\
+ TensorEngine\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int)
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.teAntisymmetric[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T
+ \end{lists} etex);
+ boxit.teAntisymmetric[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.teSymmetric[0](btex \classname{TensorEngine} etex);
+ boxit.teSymmetric[1](btex etex);
+ boxit.teSymmetric[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine\&) \\
+ TensorEngine(const T\&) \\
+ TensorEngine(const X\&) \\
+ TensorEngine(const X[1-3]\&) \\
+ TensorEngine(const X[1-6]\&) \\
+ \tilder TensorEngine() \\
+ TensorEngine\& operator=(const TensorEngine\&) \\
+ TensorEngine\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int)
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.teSymmetric[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T
+ \end{lists} etex);
+ boxit.teSymmetric[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.teDiagonal[0](btex \classname{TensorEngine} etex);
+ boxit.teDiagonal[1](btex etex);
+ boxit.teDiagonal[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine\&) \\
+ TensorEngine(const T\&) \\
+ TensorEngine(const X\&) \\
+ TensorEngine(const X[1-2]\&) \\
+ TensorEngine(const X[1-3]\&) \\
+ TensorEngine(const X[1-4]\&) \\
+ TensorEngine(const X[1-5]\&) \\
+ TensorEngine(const X[1-6]\&) \\
+ TensorEngine(const X[1-7]\&) \\
+ \tilder TensorEngine() \\
+ TensorEngine\& operator=(const TensorEngine\&) \\
+ TensorEngine\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int)
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.teDiagonal[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T
+ \end{lists} etex);
+ boxit.teDiagonal[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the boxes within the UML class diagrams.
+ forsuffixes $=teFull, teDiagonal:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ % Position the template parameters.
+ forsuffixes $=teFull, teDiagonal:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=teFull, teDiagonal:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ teFull[0].c = origin;
+ teFull[2].sw - teDiagonal[0].nw = (0, 2yUnit);
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=teFull, teDiagonal:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=teFull, teDiagonal:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the file names.
+ forsuffixes $=teFull, teDiagonal:
+ drawunboxed($[4]);
+ endfor
+
+ % Draw arrows between classes.
+
+ % Draw lines between classes.
+ endfig;
+
+
+ %% TensorEngine<...,Antisymmetric> and TensorEngine<...,Symmetric>
+ beginfig(4)
+ %% Create the boxes.
+ % Tensor
+ boxit.tensor[0](btex \classname{Tensor} etex);
+ boxit.tensor[1](btex etex);
+ boxit.tensor[2](
+ btex \begin{lists}
+ Tensor() \\
+ Tensor(const Tensor\&) \\
+ Tensor(const X1\&) \\
+ Tensor(const X[1-2]\&) \\
+ Tensor(const X[1-3]\&) \\
+ Tensor(const X[1-4]\&) \\
+ Tensor(const X[1-5]\&) \\
+ Tensor(const X[1-6]\&) \\
+ Tensor(const X[1-7]\&) \\
+ Tensor(const X[1-8]\&) \\
+ Tensor(const X[1-9]\&) \\
+ \tilder Tensor() \\
+ Tensor\& operator=(const Tensor\&) \\
+ Tensor\& operator=(const Tensor\&) \\
+ Tensor\& operator=(const X\&) \\
+ const T\& operator()(int) \\
+ T\& operator()(int) \\
+ const Engine\& engine() \\
+ Engine\& engine() \\
+ void print(Out\&)
+ \end{lists} etex);
+ boxit.tensor[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T \\
+ engine type E
+ \end{lists} etex);
+ boxit.tensor[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.tensorEngine[0](btex \classname{TensorEngine} etex);
+ boxit.tensorEngine[1](btex etex);
+ boxit.tensorEngine[2](btex etex);
+ boxit.tensorEngine[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T \\
+ engine type E
+ \end{lists} etex);
+ boxit.tensorEngine[4](
+ btex \begin{files}
+ TensorEngine.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.teFull[0](btex \classname{TensorEngine} etex);
+ boxit.teFull[1](btex etex);
+ boxit.teFull[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine\&) \\
+ TensorEngine(const T\&) \\
+ TensorEngine(const X\&) \\
+ TensorEngine(const X[1-4]\&) \\
+ TensorEngine(const X[1-9]\&) \\
+ \tilder TensorEngine() \\
+ TensorEngine\& operator=(const TensorEngine\&) \\
+ TensorEngine\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int)
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.teFull[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T
+ \end{lists} etex);
+ boxit.teFull[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.teAntisymmetric[0](btex \classname{TensorEngine} etex);
+ boxit.teAntisymmetric[1](btex etex);
+ boxit.teAntisymmetric[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine\&) \\
+ TensorEngine(const T\&) \\
+ TensorEngine(const X\&) \\
+ TensorEngine(const X[1-3]\&) \\
+ TensorEngine(const X[1-6]\&) \\
+ \tilder TensorEngine() \\
+ TensorEngine\& operator=(const TensorEngine\&) \\
+ TensorEngine\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int)
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.teAntisymmetric[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T
+ \end{lists} etex);
+ boxit.teAntisymmetric[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.teSymmetric[0](btex \classname{TensorEngine} etex);
+ boxit.teSymmetric[1](btex etex);
+ boxit.teSymmetric[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine\&) \\
+ TensorEngine(const T\&) \\
+ TensorEngine(const X\&) \\
+ TensorEngine(const X[1-3]\&) \\
+ TensorEngine(const X[1-6]\&) \\
+ \tilder TensorEngine() \\
+ TensorEngine\& operator=(const TensorEngine\&) \\
+ TensorEngine\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int)
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.teSymmetric[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T
+ \end{lists} etex);
+ boxit.teSymmetric[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ % TensorEngine
+ boxit.teDiagonal[0](btex \classname{TensorEngine} etex);
+ boxit.teDiagonal[1](btex etex);
+ boxit.teDiagonal[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine\&) \\
+ TensorEngine(const T\&) \\
+ TensorEngine(const X\&) \\
+ TensorEngine(const X[1-2]\&) \\
+ TensorEngine(const X[1-3]\&) \\
+ TensorEngine(const X[1-4]\&) \\
+ TensorEngine(const X[1-5]\&) \\
+ TensorEngine(const X[1-6]\&) \\
+ TensorEngine(const X[1-7]\&) \\
+ \tilder TensorEngine() \\
+ TensorEngine\& operator=(const TensorEngine\&) \\
+ TensorEngine\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int)
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.teDiagonal[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T
+ \end{lists} etex);
+ boxit.teDiagonal[4](
+ btex \begin{files}
+ Tensor.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the boxes within the UML class diagrams.
+ forsuffixes $=teAntisymmetric, teSymmetric:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ % Position the template parameters.
+ forsuffixes $=teAntisymmetric, teSymmetric:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=teAntisymmetric, teSymmetric:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ teAntisymmetric[0].c = origin;
+ teAntisymmetric[2].sw - teSymmetric[0].nw = (0, 2yUnit);
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=teAntisymmetric, teSymmetric:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=teAntisymmetric, teSymmetric:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the file names.
+ forsuffixes $=teAntisymmetric, teSymmetric:
+ drawunboxed($[4]);
+ endfor
+
+ % Draw arrows between classes.
+
+ % Draw lines between classes.
+ endfig;
+
+
+ %% TinyMatrix
+ beginfig(10)
+ %% Create the boxes.
+ % Tensor
+ boxit.matrix[0](btex \classname{TinyMatrix} etex);
+ boxit.matrix[1](btex etex);
+ boxit.matrix[2](
+ btex \begin{lists}
+ TinyMatrix() \\
+ TinyMatrix(const TinyMatrix\&) \\
+ TinyMatrix(const X1\&) \\
+ TinyMatrix(const X[1-2]\&) \\
+ TinyMatrix(const X[1-3]\&) \\
+ TinyMatrix(const X[1-4]\&) \\
+ TinyMatrix(const X[1-5]\&) \\
+ TinyMatrix(const X[1-6]\&) \\
+ TinyMatrix(const X[1-7]\&) \\
+ TinyMatrix(const X[1-8]\&) \\
+ TinyMatrix(const X[1-9]\&) \\
+ \tilder TinyMatrix() \\
+ TinyMatrix\& operator=(const TinyMatrix\&) \\
+ TinyMatrix\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int) \\
+ const T\& operator()(int) \\
+ T\& operator()(int) \\
+ const Engine\& engine() \\
+ Engine\& engine() \\
+ void print(Out\&)
+ \end{lists} etex);
+ boxit.matrix[3](
+ btex
+ \begin{lists}
+ dimension D1 \\
+ dimension D2 \\
+ value type T \\
+ engine type E
+ \end{lists} etex);
+ boxit.matrix[4](
+ btex \begin{files}
+ TinyMatrix.h
+ \end{files} etex);
+
+ % MatrixEngine
+ boxit.matrixEngine[0](btex \classname{TinyMatrixEngine} etex);
+ boxit.matrixEngine[1](btex etex);
+ boxit.matrixEngine[2](btex etex);
+ boxit.matrixEngine[3](
+ btex
+ \begin{lists}
+ dimension D1 \\
+ dimension D2 \\
+ value type T \\
+ engine type E
+ \end{lists} etex);
+ boxit.matrixEngine[4](
+ btex \begin{files}
+ TinyMatrixEngine.h
+ \end{files} etex);
+
+ % TinyMatrixEngine
+ boxit.matrixEngineFull[0](btex \classname{TinyMatrixEngine} etex);
+ boxit.matrixEngineFull[1](btex etex);
+ boxit.matrixEngineFull[2](
+ btex \begin{lists}
+ TinyMatrixEngine() \\
+ TinyMatrixEngine(const TinyMatrixEngine\&) \\
+ TinyMatrixEngine(const X\&) \\
+ TinyMatrixEngine(const X[1-2]\&) \\
+ TinyMatrixEngine(const X[1-3]\&) \\
+ TinyMatrixEngine(const X[1-4]\&) \\
+ TinyMatrixEngine(const X[1-5]\&) \\
+ TinyMatrixEngine(const X[1-6]\&) \\
+ TinyMatrixEngine(const X[1-7]\&) \\
+ TinyMatrixEngine(const X[1-8]\&) \\
+ TinyMatrixEngine(const X[1-9]\&) \\
+ \tilder TinyMatrixEngine() \\
+ TinyMatrixEngine\& operator=(const TinyMatrixEngine\&) \\
+ TinyMatrixEngine\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int)
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.matrixEngineFull[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T
+ \end{lists} etex);
+ boxit.matrixEngineFull[4](
+ btex \begin{files}
+ TinyMatrix.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the boxes within the UML class diagrams.
+ forsuffixes $=matrix, matrixEngine, matrixEngineFull:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ % Position the template parameters.
+ forsuffixes $=matrix, matrixEngine, matrixEngineFull:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=matrix, matrixEngine, matrixEngineFull:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ matrix[0].c = origin;
+ matrix[2].s - matrixEngine[0].n = (0, 3yUnit);
+ matrixEngine[2].s - matrixEngineFull[0].n = (0, yUnit);
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=matrix:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=matrix:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the file names.
+ forsuffixes $=matrix:
+ drawunboxed($[4]);
+ endfor
+
+ % Draw arrows between classes.
+
+ % Draw lines between classes.
+ endfig;
+
+ %% TinyMatrix
+ beginfig(11)
+ %% Create the boxes.
+ % Tensor
+ boxit.matrix[0](btex \classname{TinyMatrix} etex);
+ boxit.matrix[1](btex etex);
+ boxit.matrix[2](
+ btex \begin{lists}
+ TinyMatrix() \\
+ TinyMatrix(const TinyMatrix\&) \\
+ TinyMatrix(const X1\&) \\
+ TinyMatrix(const X[1-2]\&) \\
+ TinyMatrix(const X[1-3]\&) \\
+ TinyMatrix(const X[1-4]\&) \\
+ TinyMatrix(const X[1-5]\&) \\
+ TinyMatrix(const X[1-6]\&) \\
+ TinyMatrix(const X[1-7]\&) \\
+ TinyMatrix(const X[1-8]\&) \\
+ TinyMatrix(const X[1-9]\&) \\
+ \tilder TinyMatrix() \\
+ TinyMatrix\& operator=(const TinyMatrix\&) \\
+ TinyMatrix\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int) \\
+ const T\& operator()(int) \\
+ T\& operator()(int) \\
+ const Engine\& engine() \\
+ Engine\& engine() \\
+ void print(Out\&)
+ \end{lists} etex);
+ boxit.matrix[3](
+ btex
+ \begin{lists}
+ dimension D1 \\
+ dimension D2 \\
+ value type T \\
+ engine type E
+ \end{lists} etex);
+ boxit.matrix[4](
+ btex \begin{files}
+ TinyMatrix.h
+ \end{files} etex);
+
+ % MatrixEngine
+ boxit.matrixEngine[0](btex \classname{TinyMatrixEngine} etex);
+ boxit.matrixEngine[1](btex etex);
+ boxit.matrixEngine[2](btex etex);
+ boxit.matrixEngine[3](
+ btex
+ \begin{lists}
+ dimension D1 \\
+ dimension D2 \\
+ value type T \\
+ engine type E
+ \end{lists} etex);
+ boxit.matrixEngine[4](
+ btex \begin{files}
+ TinyMatrixEngine.h
+ \end{files} etex);
+
+ % TinyMatrixEngine
+ boxit.matrixEngineFull[0](btex \classname{TinyMatrixEngine} etex);
+ boxit.matrixEngineFull[1](btex etex);
+ boxit.matrixEngineFull[2](
+ btex \begin{lists}
+ TinyMatrixEngine() \\
+ TinyMatrixEngine(const TinyMatrixEngine\&) \\
+ TinyMatrixEngine(const X\&) \\
+ TinyMatrixEngine(const X[1-2]\&) \\
+ TinyMatrixEngine(const X[1-3]\&) \\
+ TinyMatrixEngine(const X[1-4]\&) \\
+ TinyMatrixEngine(const X[1-5]\&) \\
+ TinyMatrixEngine(const X[1-6]\&) \\
+ TinyMatrixEngine(const X[1-7]\&) \\
+ TinyMatrixEngine(const X[1-8]\&) \\
+ TinyMatrixEngine(const X[1-9]\&) \\
+ \tilder TinyMatrixEngine() \\
+ TinyMatrixEngine\& operator=(const TinyMatrixEngine\&) \\
+ TinyMatrixEngine\& operator=(const X\&) \\
+ const T\& operator()(int,int) \\
+ T\& operator()(int,int)
+ const T\& operator()(int) \\
+ T\& operator()(int)
+ \end{lists} etex);
+ boxit.matrixEngineFull[3](
+ btex
+ \begin{lists}
+ dimension D \\
+ value type T
+ \end{lists} etex);
+ boxit.matrixEngineFull[4](
+ btex \begin{files}
+ TinyMatrix.h
+ \end{files} etex);
+
+ %% Position the boxes.
+ % Position the boxes within the UML class diagrams.
+ forsuffixes $=matrix, matrixEngine, matrixEngineFull:
+ samewidth($[0],$[1],$[2]);
+ for t = 0 upto 1:
+ $.[t].se = $[t+1].ne;
+ $.[t].sw = $[t+1].nw;
+ endfor
+ fixsize($[0],$[1],$[2]);
+ endfor
+ % Position the template parameters.
+ forsuffixes $=matrix, matrixEngine, matrixEngineFull:
+ fixsize($[3]);
+ $[0].ne - $[3].sw =
+ (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx),
+ min(0.5 ypart($[3].ne - $[3].sw), $[0].dy));
+ endfor
+ % Position the implementation files boxes.
+ forsuffixes $=matrix, matrixEngine, matrixEngineFull:
+ fixsize($[4]);
+ $[2].s = $[4].nw;
+ endfor
+
+ % Position the UML classes.
+ matrix[0].c = origin;
+ matrix[2].s - matrixEngine[0].n = (0, 3yUnit);
+ matrixEngine[2].s - matrixEngineFull[0].n = (0, yUnit);
+
+ %% Draw the boxes.
+ % Draw the UML class boxes.
+ forsuffixes $=matrixEngine, matrixEngineFull:
+ for t = 0 upto 2:
+ drawboxed($[t]);
+ endfor
+ endfor
+ % Draw the template parameters.
+ forsuffixes $=matrixEngine, matrixEngineFull:
+ unfill bpath($[3]);
+ drawunboxed($[3]);
+ draw bpath($[3]) dashed evenly;
+ endfor
+ % Draw the file names.
+ forsuffixes $=matrixEngine, matrixEngineFull:
+ drawunboxed($[4]);
+ endfor
+
+ % Draw arrows between classes.
+
+ % Draw lines between classes.
+ draw matrixEngineFull[0].n -- (matrixEngine[2].s-(0,discriminatorLength));
+ drawDiscriminator(matrixEngine[2].s, 0);
+
+ endfig;
+
+ bye
Index: figures/uml.mp
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/figures/uml.mp,v
retrieving revision 1.1
diff -c -p -r1.1 uml.mp
*** figures/uml.mp 2002/02/27 03:51:54 1.1
--- figures/uml.mp 2002/03/04 22:51:16
*************** path discriminator;
*** 12,17 ****
--- 12,18 ----
discriminator = origin -- ((1,0) rotated -120) -- ((1,0) rotated -60) -- cycle;
numeric discriminatorScale; discriminatorScale = 0.5cm;
+ numeric discriminatorLength; discriminatorLength = discriminatorScale*sqrt(3)/2;
% The location is the top of the triangle
vardef drawDiscriminator(expr location, rotation) =