Patch: More UML Class Diagrams
Jeffrey Oldham
oldham at codesourcery.com
Tue Mar 5 00:00:49 UTC 2002
2002-Mar-04 Jeffrey D. Oldham <oldham at codesourcery.com>
This patch mainly finishes adding UML class diagrams to the manual.
* Makefile (XMLSOURCES): Add uml.xml.
* code.xml: Minor wordsmithing.
* pooma.xml: Revised revision history. Move UML class diagram
code to separate file.
* preface.xml: Minor wordsmithing.
* starting.xml: Likewise.
* template.xml: Remove extra space.
* uml.xml: New file containing UML class diagrams.
* figures/Makefile (UML_DIAGRAMS): Add nams of UML class diagrams.
Add rules for creating UML class diagrams.
* figures/array-uml-1.png: New file containing a UML class diagram.
* figures/array-uml-2.png: Likewise.
* figures/array-uml-3.png: Likewise.
* figures/array-uml.mp: Expand list of member functions.
* figures/distributed-uml-10.png: New file containing a UML class
diagram.
* figures/distributed-uml-11.png: Likewise.
* figures/distributed-uml-20.png: Likewise.
* figures/distributed-uml-21.png: Likewise.
* figures/distributed-uml-22.png: Likewise.
* figures/distributed-uml-23.png: Likewise.
* figures/distributed-uml-24.png: Likewise.
* figures/distributed-uml-3.png: Likewise.
* figures/distributed-uml-30.png: Likewise.
* figures/distributed-uml-4.png: Likewise.
* figures/distributed-uml-5.png: Likewise.
* figures/distributed-uml.mp: New file describing class diagrams
related to distributed computing.
* figures/domain-uml-1.png: New file containing a UML class diagram.
* figures/domain-uml.mp: Minor tweaking.
* figures/engine-uml-1.png: New file containing a UML class diagram.
* figures/engine-uml.mp: Rearrange layout of fig(1).
* figures/explanation-uml-1.png: New file containing a UML class
diagram.
* figures/explanation-uml.mp: Slight revisions.
* figures/field-uml-1.png: New file containing a UML class diagram.
* figures/field-uml-10.png: Likewise.
* figures/field-uml-11.png: Likewise.
* figures/field-uml-2.png: Likewise.
* figures/field-uml-3.png: Likewise.
* figures/field-uml.mp: New file describing class diagrams for
fields.
* figures/introduction.mp: Remove extraneous comments.
* figures/macros.ltx (\tilder): New command.
* figures/math-objs-uml-1.png: New file containing a UML class diagram.
* figures/math-objs-uml-10.png: Likewise.
* figures/math-objs-uml-11.png: Likewise.
* figures/math-objs-uml-2.png: Likewise.
* figures/math-objs-uml-3.png: Likewise.
* figures/math-objs-uml-4.png: Likewise.
* figures/math-objs-uml.mp: New file describing class diagrams for
vectors, tensors, and matrices.
* figures/uml.mp (discriminatorLength): New value.
Applied to mainline.
Thanks,
Jeffrey D. Oldham
oldham at codesourcery.com
-------------- next part --------------
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 ****
<para>Indentation follows the <application class="software">GNU
Emacs</application>'s &cc; mode guidelines. Most increases in
! indentation levels starts two characters to the right.</para>
<para>Most brackets, e.g., in function definitions, occur on
separate lines. Exceptions are for very short functions.</para>
--- 534,540 ----
<para>Indentation follows the <application class="software">GNU
Emacs</application>'s &cc; mode guidelines. Most increases in
! indentation levels start two characters to the right.</para>
<para>Most brackets, e.g., in function definitions, occur on
separate lines. Exceptions are for very short functions.</para>
***************
*** 604,610 ****
<section id="sources-conventions-globals">
<title>Global Variables</title>
! <para>Global variables are avoided whenever possible.</para>
</section>
--- 604,614 ----
<section id="sources-conventions-globals">
<title>Global Variables</title>
! <para>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
! <filename class="libraryfile">_g</filename> is appended, e.g.,
! <literal>veryFewGlobalVariables_g</literal>.</para>
</section>
***************
*** 804,810 ****
<section id="sources-conventions-errors">
<title>Errors and Exceptions</title>
! <para>&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.,
<literal>POOMA_EXCEPTIONS</literal> in the code.</para>
--- 808,814 ----
<section id="sources-conventions-errors">
<title>Errors and Exceptions</title>
! <para>&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.,
<literal>POOMA_EXCEPTIONS</literal> in the code.</para>
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 ----
<!-- The C++ boolean type. -->
<!ENTITY brick "<type>Brick</type>">
<!-- The "Brick" engine type. -->
+ <!ENTITY centering "<type>Centering</type>">
+ <!-- The centering type. -->
<!ENTITY char "<type>char</type>">
<!-- The C char type. -->
<!ENTITY complex "<type>complex</type>">
***************
*** 148,153 ****
--- 150,157 ----
<!-- The "Loc<1>" one-dimensional domain type. -->
<!ENTITY matrix "<type>TinyMatrix</type>">
<!-- The Pooma matrix type. -->
+ <!ENTITY mesh "<type>Mesh</type>">
+ <!-- The "Mesh" type. -->
<!ENTITY multipatch "<type>MultiPatch</type>">
<!-- The "MultiPatch" engine without template parameters. -->
<!ENTITY options "<type>Options</type>">
***************
*** 251,256 ****
--- 255,262 ----
<!-- template programming appendix -->
<!ENTITY tutorial-chapter SYSTEM "tutorial.xml">
<!-- Doof2d tutorial programs chapter -->
+ <!ENTITY uml-appendix SYSTEM "uml.xml">
+ <!-- appendix of UML class diagrams -->
<!-- External File Entities -->
<!-- Doof2d Programs -->
***************
*** 304,311 ****
</legalnotice>
<revhistory>
<revision>
<revnumber>1.00</revnumber>
! <date>2002 Jan 31</date>
<authorinitials>jdo</authorinitials>
<revremark>First publication.</revremark>
</revision>
--- 310,325 ----
</legalnotice>
<revhistory>
<revision>
+ <revnumber>1.01</revnumber>
+ <date>2002 Mar 01</date>
+ <authorinitials>jdo</authorinitials>
+ <revremark>Added UML class diagrams, revised compilation
+ directions, and added a description of the source code
+ structure.</revremark>
+ </revision>
+ <revision>
<revnumber>1.00</revnumber>
! <date>2002 Jan 31</date>
<authorinitials>jdo</authorinitials>
<revremark>First publication.</revremark>
</revision>
*************** a(I,J) = (1.0/9.0) *
*** 1002,1009 ****
architecture-specific initialization. The function always
returns &true;.</para>
- HERE
-
<para><function>initialize</function>'s alternative form
assumes the &pooma;-specific and architecture-specific
command-line arguments have already been removed from
--- 1016,1021 ----
*************** UNFINISHED</para>
*** 3680,3915 ****
&template-appendix;
&code-appendix;
-
-
- <appendix id="uml">
- <title>¨ Class Diagrams</title>
-
- <para>In this chapter, we present Unified Modeling Language (¨)
- class diagrams. These are created at the
- <firstterm>specification</firstterm> 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;.</para>
-
- <figure float="1" id="uml-explanation">
- <title>Explanation of ¨ Class Diagrams</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/explanation-uml.1" format="EPS" align="center"></imagedata>
- </imageobject>
- <imageobject>
- <imagedata fileref="figures/explanation-uml-1.png" format="PNG" align="center"></imagedata>
- </imageobject>
- <textobject>
- <phrase>An Explanation of UML Class Diagrams</phrase>
- </textobject>
- </mediaobject>
- </figure>
-
- <para><xref linkend="uml-explanation"></xref> illustrates a typical
- ¨ class diagram. The diagram has three classes:
- <type>Classname1</type>, <type>Classname2</type>, and
- <type>Classname2<1></type>. 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.
- <type>Classname2<1></type> 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 <type>Classname1</type> and
- <type>Classname2</type> have template parameters, each named
- <type>T</type>. 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.</para>
-
- <para>Lines connect classes. The solid arrow with large triangular
- arrowhead indicates that <type>Classname2</type> is a subtype of
- <type>Classname1</type>. 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,
- <type>Classname2</type> has no new members not provided by
- <type>Classname1</type>. A dashed arrow indicates a class formed by
- a template instantiation. The class name indicates which template
- parameters are bound. For example, <type>Classname2<1></type>
- instantiates <type>Classname2</type> with <type>T</type> equal
- to 1.</para>
-
- <para>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.</para>
-
-
- <section id="uml-arrays">
- <title>&array;s</title>
-
- <figure float="1" id="uml-array_dynamicarray">
- <title>Relationship Between &array; and &dynamicarray;s</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/array-uml.1" format="EPS" align="center"></imagedata>
- </imageobject>
- <imageobject>
- <imagedata fileref="figures/array-uml-1.png" format="PNG" align="center"></imagedata>
- </imageobject>
- <textobject>
- <phrase>&dynamicarray;s are subtypes of &array;s</phrase>
- </textobject>
- </mediaobject>
- </figure>
-
- <para>Both &array;s and &dynamicarray;s have so many member
- functions that their class boxes appear in separate diagrams.
- <xref linkend="uml-array_dynamicarray"></xref> 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.</para>
-
- <figure float="1" id="uml-array">
- <title>&array; Diagram</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/array-uml.2" format="EPS" align="center"></imagedata>
- </imageobject>
- <imageobject>
- <imagedata fileref="figures/array-uml-2.png" format="PNG" align="center"></imagedata>
- </imageobject>
- <textobject>
- <phrase>&array; Class Diagram</phrase>
- </textobject>
- </mediaobject>
- </figure>
-
- <figure float="1" id="uml-dynamicarray">
- <title>&dynamicarray; Diagram</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/array-uml.3" format="EPS" align="center"></imagedata>
- </imageobject>
- <imageobject>
- <imagedata fileref="figures/array-uml-3.png" format="PNG" align="center"></imagedata>
- </imageobject>
- <textobject>
- <phrase>&dynamicarray; Class Diagram</phrase>
- </textobject>
- </mediaobject>
- </figure>
- </section>
!
! <section id="uml-domains">
! <title>&domain;s</title>
!
! <para>&domain;s and its subtypes are shown in <xref
! linkend="uml-domains_figure"></xref>. All classes are instantiated
! from or subtypes of &domain;. As mentioned in <xref
! linkend="arrays-domains"></xref>, the <type>Domain<1></type>
! template instantiation has additional member functions. It uses
! the <type>Domain<1>::iterator</type>. 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 <type>Domain<1></type>.</para>
!
! <figure float="1" id="uml-domains_figure">
! <title>&domain;s</title>
! <mediaobject>
! <imageobject>
! <imagedata fileref="figures/domain-uml.1" format="EPS" align="center"></imagedata>
! </imageobject>
! <imageobject>
! <imagedata fileref="figures/domain-uml-1.png" format="PNG" align="center"></imagedata>
! </imageobject>
! <textobject>
! <phrase>&domain;s</phrase>
! </textobject>
! </mediaobject>
! </figure>
!
! </section>
!
!
! <section id="uml-engines">
! <title>&engine;s</title>
!
! <para>&engine;s and its subtypes are shown in <xref
! linkend="uml-engines-figure"></xref>. Five subtypes of &engine;s
! are shown. Details appear in subsequent diagrams. The
! <type>Engine</type> class box shows no members because it has no
! members. Only subtypes have members. More explanation of these
! classes can be found in <xref linkend="engines"></xref>. The
! implementation files in <xref
! linkend="uml-engines-brick_figure"></xref> use the
! <literal>[1-7]</literal> regular expression to indicate 1, 2,
! …, or 7.</para>
!
! <figure float="1" id="uml-engines-figure">
! <title>&engine;s</title>
! <mediaobject>
! <imageobject>
! <imagedata fileref="figures/engine-uml.1" format="EPS" align="center"></imagedata>
! </imageobject>
! <imageobject>
! <imagedata fileref="figures/engine-uml-1.png" format="PNG" align="center"></imagedata>
! </imageobject>
! <textobject>
! <phrase>Relationships among &engine;s</phrase>
! </textobject>
! </mediaobject>
! </figure>
!
! <figure float="1" id="uml-engines-brick_figure">
! <title>&brick; and &compressiblebrick; &engine;s</title>
! <mediaobject>
! <imageobject>
! <imagedata fileref="figures/engine-uml.2" format="EPS" align="center"></imagedata>
! </imageobject>
! <imageobject>
! <imagedata fileref="figures/engine-uml-2.png" format="PNG" align="center"></imagedata>
! </imageobject>
! <textobject>
! <phrase>&brick; and &compressiblebrick; &engine;s</phrase>
! </textobject>
! </mediaobject>
! </figure>
!
! <figure float="1" id="uml-engines-dynamic_figure">
! <title>&dynamic; and &multipatch; &engine;s</title>
! <mediaobject>
! <imageobject>
! <imagedata fileref="figures/engine-uml.3" format="EPS" align="center"></imagedata>
! </imageobject>
! <imageobject>
! <imagedata fileref="figures/engine-uml-3.png" format="PNG" align="center"></imagedata>
! </imageobject>
! <textobject>
! <phrase>&dynamic; and &multipatch; &engine;s</phrase>
! </textobject>
! </mediaobject>
! </figure>
!
! <figure float="1" id="uml-engines-remote_figure">
! <title>&remote; &engine;s</title>
! <mediaobject>
! <imageobject>
! <imagedata fileref="figures/engine-uml.4" format="EPS" align="center"></imagedata>
! </imageobject>
! <imageobject>
! <imagedata fileref="figures/engine-uml-4.png" format="PNG" align="center"></imagedata>
! </imageobject>
! <textobject>
! <phrase>&remote; &engine;s</phrase>
! </textobject>
! </mediaobject>
! </figure>
!
! </section>
!
! </appendix>
<![%unfinished;[
--- 3692,3699 ----
&template-appendix;
&code-appendix;
! ¨-appendix;
<![%unfinished;[
Index: preface.xml
===================================================================
RCS file: /home/pooma/Repository/r2/docs/manual/preface.xml,v
retrieving revision 1.1
diff -c -p -r1.1 preface.xml
*** preface.xml 2002/02/27 03:51:53 1.1
--- preface.xml 2002/03/04 22:50:55
***************
*** 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
! <!-- FIXME: Add appendix reference --> FIXME contains a short
introduction to template programming. Readers needing more
background material might want to read Koenig and Moo's
<emphasis>Accelerated &cc;</emphasis>, 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
! <xref linkend="template_programming"></xref> contains a short
introduction to template programming. Readers needing more
background material might want to read Koenig and Moo's
<emphasis>Accelerated &cc;</emphasis>, Stanley Lippman's
***************
*** 375,381 ****
<!-- We cheat and abuse an epigraph here. -->
<epigraph>
! <attribution>Jeffrey D. Oldham, 2002 February</attribution>
<para></para>
</epigraph>
--- 375,381 ----
<!-- We cheat and abuse an epigraph here. -->
<epigraph>
! <attribution>Jeffrey D. Oldham, 2002 March</attribution>
<para></para>
</epigraph>
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 <quote>Hello, &pooma;</quote>
program. Impatient readers will find the first section helpful.
Those desiring more details will find this section provides a useful
! overview of the chapter.</para>
<section id="initial-quick_start">
--- 5,11 ----
for use, and then compile a <quote>Hello, &pooma;</quote>
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.</para>
<section id="initial-quick_start">
***************
*** 39,45 ****
indicates the operating system and compiler. Permitted choices
are the names of files in the <filename
class="directory">config/arch/</filename> subdirectory omitting
! the <filename class="libraryfile">.conf</filename> suffix.</para>
</listitem>
</varlistentry>
<varlistentry>
--- 39,45 ----
indicates the operating system and compiler. Permitted choices
are the names of files in the <filename
class="directory">config/arch/</filename> subdirectory omitting
! the <filename class="libraryfile">.conf</filename> suffixes.</para>
</listitem>
</varlistentry>
<varlistentry>
***************
*** 60,69 ****
program available at <filename
class="libraryfile">examples/Manual/Sequential/initialize-finalize.cpp</filename>:<programlisting>
&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
</programlisting>
! The environment variable indicates the location of the &toolkit;
! header files and the library.</para>
</listitem>
</varlistentry>
</variablelist>
--- 60,73 ----
program available at <filename
class="libraryfile">examples/Manual/Sequential/initialize-finalize.cpp</filename>:<programlisting>
&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
</programlisting>
! The <envar>POOMAHOME</envar> environment variable indicates the
! location of the &toolkit; header files and the library.</para>
</listitem>
</varlistentry>
</variablelist>
***************
*** 113,121 ****
operating system with &kcc;.</para>
<para>To configure the source code, use a command
! like<programlisting> &initialspace;./configure &dashdash;arch
! LINUXgcc &dashdash;opt &dashdash;suite LINUXgcc-opt
! </programlisting> The architecture argument to the
<command>&dashdash;arch</command> option is the name of the
corresponding configuration file, omitting its <filename
class="libraryfile">.conf</filename> suffix. The
--- 117,125 ----
operating system with &kcc;.</para>
<para>To configure the source code, use a command
! like<programlisting>
! &initialspace;./configure &dashdash;arch LINUXgcc &dashdash;opt &dashdash;suite LINUXgcc-opt
! </programlisting> The architecture argument to the
<command>&dashdash;arch</command> option is the name of the
corresponding configuration file, omitting its <filename
class="libraryfile">.conf</filename> suffix. The
***************
*** 137,152 ****
need to be compiled. Specify the desired suite by setting the
<envar>POOMASUITE</envar> environment variable to the appropriate
value. For example, if using the <application>bash</application>
! shell, use<programlisting> &initialspace;export
! POOMASUITE=<replaceable>suiteName</replaceable> </programlisting>
! substituting the suite name's <replaceable>suiteName</replaceable>.
If using the <application>csh</application> shell,
! use<programlisting> &initialspace;setenv POOMASUITE
! <replaceable>suiteName</replaceable> </programlisting> In the
previous paragraph, the suite name is
<literal>LINUXgcc-opt</literal> so we would issue the
! statement<programlisting> &initialspace;setenv POOMASUITE
! LINUXgcc-opt </programlisting></para>
<para>Issuing the <command>make</command> 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
<envar>POOMASUITE</envar> environment variable to the appropriate
value. For example, if using the <application>bash</application>
! shell, use<programlisting>
! &initialspace;export POOMASUITE=<replaceable>suiteName</replaceable>
! </programlisting> substituting the suite name's <replaceable>suiteName</replaceable>.
If using the <application>csh</application> shell,
! use<programlisting>
! &initialspace;setenv POOMASUITE <replaceable>suiteName</replaceable>
! </programlisting> In the
previous paragraph, the suite name is
<literal>LINUXgcc-opt</literal> so we would issue the
! statement<programlisting>
! &initialspace;setenv POOMASUITE LINUXgcc-opt
! </programlisting></para>
<para>Issuing the <command>make</command> command compiles the
&pooma; source code files to create the &pooma; library. The
***************
*** 158,164 ****
class="libraryfile">lib/LINUXgcc-opt/libpooma-gcc.a</filename>. If
it fails, the makefiles will print a line indicating which file
failed to compile. Reading the corresponding <filename
! class="libraryfile">.info</filename> may indicate what
failed.</para>
<para>The same &pooma; source code can support multiple suites as
--- 164,170 ----
class="libraryfile">lib/LINUXgcc-opt/libpooma-gcc.a</filename>. If
it fails, the makefiles will print a line indicating which file
failed to compile. Reading the corresponding <filename
! class="libraryfile">.info</filename> file may indicate what
failed.</para>
<para>The same &pooma; source code can support multiple suites as
***************
*** 188,195 ****
<para>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. <command>/configure -h</command> yields a complete list.
! We describe also describe them here.</para>
<table frame="none" colsep="0" rowsep="0" tocentry="1"
orient="port" pgwide="0" id="initial-compile-configuration_options-table">
--- 194,201 ----
<para>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. <command>./configure -h</command> yields a complete list.
! We also describe them here.</para>
<table frame="none" colsep="0" rowsep="0" tocentry="1"
orient="port" pgwide="0" id="initial-compile-configuration_options-table">
***************
*** 220,226 ****
The environment variable <envar>POOMASUITE</envar>'s value
should equal <replaceable>suite</replaceable> when compiling
the library. <replaceable>suite</replaceable> can be any
! string that an serve as a filename. If this option is
omitted, the <literal>&dashdash;arch</literal> architecture
is used.</entry>
</row>
--- 226,232 ----
The environment variable <envar>POOMASUITE</envar>'s value
should equal <replaceable>suite</replaceable> when compiling
the library. <replaceable>suite</replaceable> can be any
! string that can serve as a filename. If this option is
omitted, the <literal>&dashdash;arch</literal> architecture
is used.</entry>
</row>
***************
*** 427,434 ****
<row>
<entry><literal>&dashdash;messaging</literal></entry>
<entry>enables creation of distributed &pooma; executables by
! enabling use of the &cheetah; communications package. See
! <!-- FIXME: add reference to the distributed configuration
section. --></entry>
</row>
<row rowsep="1">
--- 433,439 ----
<row>
<entry><literal>&dashdash;messaging</literal></entry>
<entry>enables creation of distributed &pooma; executables by
! enabling use of the &cheetah; communications package. <!-- FIXME: "See" add reference to the distributed configuration
section. --></entry>
</row>
<row rowsep="1">
***************
*** 474,479 ****
--- 479,498 ----
program that initializes and de-initializes the &pooma;
library.</para>
+ <para>The simplest &pooma; program is available at <filename
+ class="libraryfile">examples/Manual/Sequential/initialize-finalize.cpp</filename>.
+ It is annotated in <xref
+ linkend="initial-compile_programs-hello_pooma"></xref>. Before its
+ use, the &poomatoolkit; must be initialized by a call to
+ <function>initialize</function>. This usually occurs in the
+ <function>main</function> function. After its use, the
+ &poomatoolkit; should be shut down using a call to
+ <function>finalize</function>. This also usually occurs in the
+ <function>main</function> function. Both of these functions are
+ declared in <filename class="headerfile">Pooma/Pooma.h</filename>.
+ This header file (or another &pooma; header file including it)
+ occurs in every &pooma; program.</para>
+
<example id="initial-compile_programs-hello_pooma">
<title>A <quote>Hello, &pooma;</quote> Program</title>
***************
*** 495,514 ****
</calloutlist>
</example>
- <para>The simplest &pooma; program is available at <filename
- class="libraryfile">examples/Manual/Sequential/initialize-finalize.cpp</filename>.
- It is annotated in <xref
- linkend="initial-compile_programs-hello_pooma"></xref>. Before its
- use, the &poomatoolkit; must be initialized by a call to
- <function>initialize</function>. This usually occurs in the
- <function>main</function> function. After its use, the
- &poomatoolkit; should be shut down using a call to
- <function>finalize</function>. This also usually occurs in the
- <function>main</function> function. Both of these functions are
- declared in <filename class="headerfile">Pooma/Pooma.h</filename>.
- This header file or another &pooma; header file including it occurs
- in every &pooma; program.</para>
-
<para>Compiling this program requires including &pooma; header
files and library. Let us assume that the environment variable
<envar>POOMAHOME</envar> describes the location of the &pooma;
--- 514,519 ----
***************
*** 516,522 ****
&initialspace;export POOMAHOME=/home/user/pooma
</programlisting> We illustrate how to compile the program using the
&gpp; compiler:<programlisting>
! &initialspace;g++ -I${POOMAHOME}/src -I${POOMAHOME}/lib/LINUXgcc initialize-finalize.cpp -o initialize-finalize -L${POOMAHOME}/lib/${POOMASUITE} -lpooma-gcc
</programlisting> We explain the five command-line options:
<variablelist>
<varlistentry>
--- 521,529 ----
&initialspace;export POOMAHOME=/home/user/pooma
</programlisting> We illustrate how to compile the program using the
&gpp; compiler:<programlisting>
! &initialspace;g++ -I${POOMAHOME}/src -I${POOMAHOME}/lib/LINUXgcc \
! &initialspace;initialize-finalize.cpp -o initialize-finalize \
! &initialspace;-L${POOMAHOME}/lib/${POOMASUITE} -lpooma-gcc
</programlisting> We explain the five command-line options:
<variablelist>
<varlistentry>
***************
*** 587,593 ****
<bridgehead id="initial-compile_programs-initialize-specifications" renderas="sect4">Prototypes</bridgehead>
<programlisting>
! &initialspace;#include "Pooma/Pooma.h" // or "Pooma/Arrays.h" or "Pooma/Fields.h" or …
</programlisting>
<funcsynopsis>
--- 594,601 ----
<bridgehead id="initial-compile_programs-initialize-specifications" renderas="sect4">Prototypes</bridgehead>
<programlisting>
! &initialspace;#include "Pooma/Pooma.h"
! &initialspace;// or "Pooma/Arrays.h" or "Pooma/Fields.h" or …
</programlisting>
<funcsynopsis>
***************
*** 870,877 ****
</variablelist>
For example, the &author; uses
<programlisting>
! ./configure &dashdash;arch LINUXGCC &dashdash;shmem &dashdash;nompi
! &dashdash;noex &dashdash;static &dashdash;prefix ${HOME}/pooma/cheetah-1.0
&dashdash;opt
</programlisting> The
<command>&dashdash;arch LINUXGCC</command> indicates use of
--- 878,885 ----
</variablelist>
For example, the &author; uses
<programlisting>
! ./configure &dashdash;arch LINUXGCC &dashdash;shmem &dashdash;nompi \
! &dashdash;noex &dashdash;static &dashdash;prefix ${HOME}/pooma/cheetah-1.0 \
&dashdash;opt
</programlisting> The
<command>&dashdash;arch LINUXGCC</command> indicates use of
***************
*** 921,927 ****
installed &cheetah; library. For
example,
<programlisting>
! declare -x CHEETAHDIR=${HOME}/pooma/cheetah-1.0
</programlisting> specifies the
installation directory used in the previous section. If using
the <application>csh</application> shell, use <command>setenv
--- 929,935 ----
installed &cheetah; library. For
example,
<programlisting>
! export CHEETAHDIR=${HOME}/pooma/cheetah-1.0
</programlisting> specifies the
installation directory used in the previous section. If using
the <application>csh</application> shell, use <command>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 ----
+ <appendix id="uml">
+ <title>¨ Class Diagrams</title>
+
+ <para>In this chapter, we present Unified Modeling Language (¨)
+ class diagrams for several &pooma; classes. These diagrams are
+ created at the <firstterm>specification</firstterm> level, which
+ indicates the software interface, not its implementation. <xref
+ linkend="concepts-sequential_containers-declarations-dependences"></xref>
+ 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;.</para>
+
+ <figure float="1" id="uml-explanation">
+ <title>Explanation of ¨ Class Diagrams</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/explanation-uml.1" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/explanation-uml-1.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>An Explanation of UML Class Diagrams</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para><xref linkend="uml-explanation"></xref> illustrates a typical
+ ¨ class diagram. The diagram has three classes:
+ <type>Classname1</type>, <type>Classname2</type>, and
+ <type>Classname2<1></type>. 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. <quote>Free parameter
+ types</quote> indicate templated parameters.
+ <type>Classname2<1></type> 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 <type>Classname1</type> and
+ <type>Classname2</type> have template parameters, each named
+ <type>T</type>. 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.</para>
+
+ <para>Lines connect classes. The solid arrow with large triangular
+ arrowhead indicates that <type>Classname2</type> is a subtype of
+ <type>Classname1</type>. 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,
+ <type>Classname2</type> has one new member not provided by
+ <type>Classname1</type>. A dashed arrow indicates a class formed by
+ a template instantiation. The class name indicates which template
+ parameters are bound. For example, <type>Classname2<1></type>
+ instantiates <type>Classname2</type> with <type>T</type> equal
+ to 1.</para>
+
+ <para>Some of the functions require many, similar function
+ arguments. We introduce regular expression notation to reduce the
+ length of the function prototype. For example,<programlisting>
+ void foo(const X[1-3]&)
+ </programlisting> abbreviates <programlisting>
+ void foo(const X1&, const X2&, const X3&)
+ </programlisting> <literal>X[1-3]</literal> abbreviates
+ <literal>X1</literal>, X2<literal></literal>, <literal>X3</literal>.
+ We assume this distributes over <literal>const &,</literal> to
+ yield &cc; code.</para>
+
+ <para>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.</para>
+
+
+ <section id="uml-arrays">
+ <title>&array;s</title>
+
+ <figure float="1" id="uml-array_dynamicarray">
+ <title>Relationship Between &array; and &dynamicarray;s</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/array-uml.1" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/array-uml-1.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>&dynamicarray;s are subtypes of &array;s</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>Both &array;s and &dynamicarray;s have so many member
+ functions that their class boxes appear in separate diagrams.
+ <xref linkend="uml-array_dynamicarray"></xref> 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.</para>
+
+ <para>Implementation files are located within the <filename
+ class="directory">src/Array</filename> directory.</para>
+
+ <figure float="1" id="uml-array">
+ <title>&array; Diagram</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/array-uml.2" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/array-uml-2.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>&array; Class Diagram</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-dynamicarray">
+ <title>&dynamicarray; Diagram</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/array-uml.3" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/array-uml-3.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>&dynamicarray; Class Diagram</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+ </section>
+
+
+ <section id="uml-fields">
+ <title>&field;s, &mesh;es, and ¢ering;s</title>
+
+ <para>A &field; has a mesh and a centering. It is implemented in
+ <filename class="headerfile">src/Field/Field.h</filename>.</para>
+
+ <figure float="1" id="uml-fields-field">
+ <title>&field;</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/field-uml.10" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/field-uml-10.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>A &field; is like an &array; but having spatial
+ extent.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ <section id="uml-fields-meshes">
+ <title>&mesh;es</title>
+
+ <para>A mesh specifies a &field;'s spatial extent. A &mesh; class
+ only exists conceptually, but <type>NoMesh</type> and
+ <type>UniformRectilinearMesh</type> are defined within the
+ <filename class="directory">src/Field/Mesh</filename>
+ directory.</para>
+
+ <figure float="1" id="uml-fields-meshes-overview">
+ <title>&mesh;es</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/field-uml.3" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/field-uml-3.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>The abstract <type>Mesh</type> class is realized by
+ <type>NoMesh</type> and <type>UniformRectilinearMesh</type>.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-fields-meshes-nomesh">
+ <title><type>NoMesh</type></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/field-uml.1" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/field-uml-1.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>If a &field; has a <type>NoMesh</type> mesh, it has no
+ spatial extent.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>In the following figure, we abbreviate
+ <type>UniformRectilinearMesh</type> with
+ <quote>URM</quote>.</para>
+
+ <figure float="1" id="uml-fields-meshes-urm">
+ <title><type>UniformRectilinearMesh</type></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/field-uml.2" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/field-uml-2.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>The <type>UniformRectilinearMesh</type> is the most
+ common &field; mesh.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+ </section><!-- meshes -->
+
+
+ <section id="uml-fields-centerings">
+ <title>¢ering;s</title>
+
+ <para>A ¢ering; specifies the location of values within a
+ cell. <type>CanonicalCentering</type> is a helper class returning
+ common centerings. Both are implemented within the <filename
+ class="directory">src/Field</filename> subdirectory.</para>
+
+ <figure float="1" id="uml-fields-centerings-figure">
+ <title>Centering Classes</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/field-uml.11" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/field-uml-11.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase><type>CanonicalCentering</type> returns commonly-used ¢ering;s.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+ </section><!-- centering -->
+
+ </section>
+
+
+ <section id="uml-math_objects">
+ <title>&vector;s, &matrix;s, &tensor;s</title>
+
+ <para>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 <type>VectorEngine</type>, which has
+ no public interface. The only template specialization is
+ <type>VectorEngine<D,T,Full></type>. &matrix;s are similar.
+ Tensors have four different engines, supporting the tensor
+ specializations of <literal>Antisymmetric</literal>,
+ <literal>Symmetric</literal>, and
+ <literal>Diagonal</literal>.</para>
+
+ <para>All of the source files are located in the <filename
+ class="directory">src/Tiny</filename> subdirectory.</para>
+
+ <figure float="1" id="uml-math_objects-vector">
+ <title>&vector;s</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/math-objs-uml.1" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/math-objs-uml-1.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>&vector;s require <type>VectorEngine</type>s.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-math_objects-matrix">
+ <title>&matrix;s</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/math-objs-uml.10" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/math-objs-uml-10.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>&matrix;s require <type>TinyMatrixEngine</type>s,
+ appearing in the next diagram.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-math_objects-matrixengine">
+ <title><type>TinyMatrixEngine</type>s</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/math-objs-uml.11" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/math-objs-uml-11.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase><type>TinyMatrixEngine</type>s power &matrix;s.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-math_objects-tensor">
+ <title>&tensor;s and <type>TensorEngine</type>s</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/math-objs-uml.2" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/math-objs-uml-2.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>&tensor;s require <type>TensorEngine</type>s.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-math_objects-tensor-full">
+ <title><literal>Full</literal> and <literal>Diagonal</literal> <type>TensorEngine</type>s</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/math-objs-uml.3" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/math-objs-uml-3.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase><literal>Full</literal> &engine;s are the default
+ &tensor; &engine;s. Diagonal &tensor;s use its special &engine;.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-math_objects-tensor-symmetric">
+ <title><literal>Antisymmetric</literal> and <literal>Symmetric</literal> <type>TensorEngine</type>s</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/math-objs-uml.4" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/math-objs-uml-4.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>More <type>TensorEngine</type> specializations.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+ </section>
+
+
+ <section id="uml-domains">
+ <title>&domain;s</title>
+
+ <para>&domain;s and its subtypes are shown in <xref
+ linkend="uml-domains_figure"></xref>. All classes are instantiated
+ from or subtypes of &domain;. As mentioned in <xref
+ linkend="arrays-domains"></xref>, the <type>Domain<1></type>
+ template instantiation has additional member functions. It uses
+ the <type>Domain<1>::iterator</type>. 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 <type>Domain<1></type>.</para>
+
+ <para>Implementation files are located within the <filename
+ class="directory">src/Domain</filename> directory.</para>
+
+ <figure float="1" id="uml-domains_figure">
+ <title>&domain;s</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/domain-uml.1" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/domain-uml-1.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>&domain;s</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+
+
+ <section id="uml-engines">
+ <title>&engine;s</title>
+
+ <para>&engine;s and its subtypes are shown in <xref
+ linkend="uml-engines-figure"></xref>. Five subtypes of &engine;s
+ are shown. Details appear in subsequent diagrams. The
+ <type>Engine</type> class box shows no members because it has no
+ members. Only subtypes have members. More explanation of these
+ classes can be found in <xref linkend="engines"></xref>. The
+ implementation files in <xref
+ linkend="uml-engines-brick_figure"></xref> use the
+ <literal>[1-7]</literal> regular expression to indicate 1, 2,
+ …, or 7.</para>
+
+ <para>Implementation files are located within the <filename
+ class="directory">src/Engine</filename> directory.</para>
+
+ <figure float="1" id="uml-engines-figure">
+ <title>&engine;s</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/engine-uml.1" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/engine-uml-1.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>Relationships among &engine;s</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-engines-brick_figure">
+ <title>&brick; and &compressiblebrick; &engine;s</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/engine-uml.2" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/engine-uml-2.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>&brick; and &compressiblebrick; &engine;s</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-engines-dynamic_figure">
+ <title>&dynamic; and &multipatch; &engine;s</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/engine-uml.3" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/engine-uml-3.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>&dynamic; and &multipatch; &engine;s</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-engines-remote_figure">
+ <title>&remote; &engine;s</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/engine-uml.4" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/engine-uml-4.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>&remote; &engine;s</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+
+
+ <section id="uml-distributed">
+ <title>Distributed Computation</title>
+
+ <para>In this section, we present ¨ class diagrams for the
+ classes used when declaring distributed computation. We use
+ abbreviations in parameter lists:</para>
+
+ <table frame="none" colsep="0" rowsep="0" tocentry="1"
+ orient="port" pgwide="0" id="uml-distributed-abbreviation_table">
+ <title>Abbreviations</title>
+
+ <tgroup cols="2" align="left">
+ <thead>
+ <row>
+ <entry>abbreviation</entry>
+ <entry>meaning</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>CM</entry>
+ <entry><type>ContextMapper</type></entry>
+ </row>
+ <row>
+ <entry>DT</entry>
+ <entry><type>DistributedTag</type></entry>
+ </row>
+ <row>
+ <entry>GL</entry>
+ <entry><type>GuardLayers</type></entry>
+ </row>
+ <row>
+ <entry>Iv</entry>
+ <entry><type>Interval</type></entry>
+ </row>
+ <row>
+ <entry>List_t</entry>
+ <entry><type>std::vector</type> of pointers to <type>Node</type>s of
+ &domain;s</entry>
+ </row>
+ <row>
+ <entry>PatchList_t</entry>
+ <entry><type>std::vector</type> of <type>Interval<Dim></type>s</entry>
+ </row>
+ <row>
+ <entry>RT</entry>
+ <entry><type>ReplicatedTag</type></entry>
+ </row>
+ <row>
+ <entry>SpTlLa</entry>
+ <entry><type>SparseTileLayout</type></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>Partitions specify how a domain will be split into patches,
+ or pieces. <xref linkend="uml-distributed-partition"></xref>
+ introduces the abstract <quote>Partition</quote> 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 <filename
+ class="directory">src/Partition</filename> subdirectory.</para>
+
+ <figure float="1" id="uml-distributed-partition">
+ <title>Partitions</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml.5" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml-5.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>Four classes realize the abstract Partition class.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-distributed-partition-grid">
+ <title>Grid Partitions</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml.4" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml-4.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>Two partition classes use grids.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-distributed-partition-other">
+ <title>Other Partitions</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml.3" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml-3.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase><type>SpatialPartition</type> and
+ <type>TilePartition</type> realize the abstract Partition
+ class.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>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 <filename
+ class="directory">src/Layout</filename> subdirectory.</para>
+
+ <figure float="1" id="uml-distributed-guard_layers">
+ <title>Guard Layers</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml.30" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml-30.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase><type>GuardLayers</type> surround patches.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>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
+ <filename class="directory">src/Layout</filename>
+ subdirectory.</para>
+
+ <figure float="1" id="uml-distributed-layout-domainlayout">
+ <title><type>DomainLayout</type></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml.22" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml-22.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase><type>DomainLayout</type></phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-distributed-layout-dynamiclayout">
+ <title><type>DynamicLayout</type></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml.23" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml-23.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase><type>DynamicLayout</type></phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-distributed-layout-gridlayout">
+ <title><type>GridLayout</type></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml.24" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml-24.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase><type>GridLayout</type></phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-distributed-layout-uniformgridlayout">
+ <title><type>UniformGridLayout</type></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml.20" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml-20.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase><type>UniformGridLayout</type></phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-distributed-layout-sparsetilelayout">
+ <title><type>SparseTileLayout</type></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml.21" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml-21.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase><type>SparseTileLayout</type></phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ <para>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 <type>List_t</type> abbreviates an
+ <type>std::vector</type> of pointers to <type>Node</type>s of
+ &domain;s. <type>GL</type> abbreviates <type>GuardLayers</type>.
+ All files are relative to the <filename
+ class="directory">src/Partition</filename> subdirectory.</para>
+
+ <figure float="1" id="uml-distributed-mapper-overview">
+ <title>Relationships Among Context Mappers</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml.10" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml-10.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>Five different mappers inherit from the base
+ <type>ContextMapper</type>.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure float="1" id="uml-distributed-mapper-details">
+ <title>Context Mappers</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml.11" format="EPS" align="center"></imagedata>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="figures/distributed-uml-11.png" format="PNG" align="center"></imagedata>
+ </imageobject>
+ <textobject>
+ <phrase>Details of the five different mappers inheriting from
+ the base <type>ContextMapper</type>.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+ </appendix>
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<T>) \\
Array(Array) \\
Array(Array, Domain) \\
! initialize(Domain \ldots) \\
! initialize(Domain \ldots, ModelElement<T>) \\
! 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<T>) \\
! Array(const Domain[1-2]\&, ModelElement<T>) \\
! Array(const Domain[1-3]\&, ModelElement<T>) \\
! Array(const Domain[1-4]\&, ModelElement<T>) \\
! Array(const Domain[1-5]\&, ModelElement<T>) \\
! Array(const Domain[1-6]\&, ModelElement<T>) \\
! Array(const Domain[1-7]\&, ModelElement<T>) \\
! 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<T>) \\
! void initialize(const Domain[1-2]\&, ModelElement<T>) \\
! void initialize(const Domain[1-3]\&, ModelElement<T>) \\
! void initialize(const Domain[1-4]\&, ModelElement<T>) \\
! void initialize(const Domain[1-5]\&, ModelElement<T>) \\
! void initialize(const Domain[1-6]\&, ModelElement<T>) \\
! void initialize(const Domain[1-7]\&, ModelElement<T>) \\
! 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<T>) \\
DynamicArray(DynamicArray) \\
DynamicArray(DynamicArray, Domain) \\
! initialize(Domain \ldots) \\
! initialize(Domain \ldots, ModelElement<T>) \\
! read(\ldots) \\
! operator()(\ldots) \\
domain() \\
physicalDomain() \\
totalDomain() \\
--- 118,153 ----
DynamicArray(Domain, ModelElement<T>) \\
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<T>) \\
! void initialize(const Domain[1-2]\&, ModelElement<T>) \\
! void initialize(const Domain[1-3]\&, ModelElement<T>) \\
! void initialize(const Domain[1-4]\&, ModelElement<T>) \\
! void initialize(const Domain[1-5]\&, ModelElement<T>) \\
! void initialize(const Domain[1-6]\&, ModelElement<T>) \\
! void initialize(const Domain[1-7]\&, ModelElement<T>) \\
! 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<T>) \\
Array(Array) \\
Array(Array, Domain) \\
! initialize(Domain \ldots) \\
! initialize(Domain \ldots, ModelElement<T>) \\
! 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<T>) \\
! Array(const Domain[1-2]\&, ModelElement<T>) \\
! Array(const Domain[1-3]\&, ModelElement<T>) \\
! Array(const Domain[1-4]\&, ModelElement<T>) \\
! Array(const Domain[1-5]\&, ModelElement<T>) \\
! Array(const Domain[1-6]\&, ModelElement<T>) \\
! Array(const Domain[1-7]\&, ModelElement<T>) \\
! 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<T>) \\
! void initialize(const Domain[1-2]\&, ModelElement<T>) \\
! void initialize(const Domain[1-3]\&, ModelElement<T>) \\
! void initialize(const Domain[1-4]\&, ModelElement<T>) \\
! void initialize(const Domain[1-5]\&, ModelElement<T>) \\
! void initialize(const Domain[1-6]\&, ModelElement<T>) \\
! void initialize(const Domain[1-7]\&, ModelElement<T>) \\
! 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<T>) \\
DynamicArray(DynamicArray) \\
DynamicArray(DynamicArray, Domain) \\
! initialize(Domain \ldots) \\
! initialize(Domain \ldots, ModelElement<T>) \\
! 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<T>) \\
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<T>) \\
! void initialize(const Domain[1-2]\&, ModelElement<T>) \\
! void initialize(const Domain[1-3]\&, ModelElement<T>) \\
! void initialize(const Domain[1-4]\&, ModelElement<T>) \\
! void initialize(const Domain[1-5]\&, ModelElement<T>) \\
! void initialize(const Domain[1-6]\&, ModelElement<T>) \\
! void initialize(const Domain[1-7]\&, ModelElement<T>) \\
! 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<OpAdd,} etex, b2.e);
label.lft(btex \type{UnaryNode<OpMinus,} etex, b3.w);
label.lft(btex \type{Ar} etex, b4.w);
--- 59,65 ----
Index: figures/distributed-uml-10.png
===================================================================
RCS file: distributed-uml-10.png
diff -N distributed-uml-10.png
Binary files /dev/null and distributed-uml-10.png differ
Index: figures/distributed-uml-11.png
===================================================================
RCS file: distributed-uml-11.png
diff -N distributed-uml-11.png
Binary files /dev/null and distributed-uml-11.png differ
Index: figures/distributed-uml-20.png
===================================================================
RCS file: distributed-uml-20.png
diff -N distributed-uml-20.png
Binary files /dev/null and distributed-uml-20.png differ
Index: figures/distributed-uml-21.png
===================================================================
RCS file: distributed-uml-21.png
diff -N distributed-uml-21.png
Binary files /dev/null and distributed-uml-21.png differ
Index: figures/distributed-uml-22.png
===================================================================
RCS file: distributed-uml-22.png
diff -N distributed-uml-22.png
Binary files /dev/null and distributed-uml-22.png differ
Index: figures/distributed-uml-23.png
===================================================================
RCS file: distributed-uml-23.png
diff -N distributed-uml-23.png
Binary files /dev/null and distributed-uml-23.png differ
Index: figures/distributed-uml-24.png
===================================================================
RCS file: distributed-uml-24.png
diff -N distributed-uml-24.png
Binary files /dev/null and distributed-uml-24.png differ
Index: figures/distributed-uml-3.png
===================================================================
RCS file: distributed-uml-3.png
diff -N distributed-uml-3.png
Binary files /dev/null and distributed-uml-3.png differ
Index: figures/distributed-uml-30.png
===================================================================
RCS file: distributed-uml-30.png
diff -N distributed-uml-30.png
Binary files /dev/null and distributed-uml-30.png differ
Index: figures/distributed-uml-4.png
===================================================================
RCS file: distributed-uml-4.png
diff -N distributed-uml-4.png
Binary files /dev/null and distributed-uml-4.png differ
Index: figures/distributed-uml-5.png
===================================================================
RCS file: distributed-uml-5.png
diff -N distributed-uml-5.png
Binary files /dev/null and distributed-uml-5.png differ
Index: figures/distributed-uml.mp
===================================================================
RCS file: distributed-uml.mp
diff -N distributed-uml.mp
*** /dev/null Fri Mar 23 21:37:44 2001
--- distributed-uml.mp Mon Mar 4 15:51:05 2002
***************
*** 0 ****
--- 1,1138 ----
+ %% Oldham, Jeffrey D.
+ %% 2002Feb28
+ %% POOMA
+
+ %% UML Diagrams of Classes for Distributed Computation
+
+
+ %% 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 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<Dim>\&) \\
+ TilePartition(const PatchList\_t\&, const GL<Dim>\&, const GL<Dim>\&) \\
+ 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<Interval>\&) \\
+ 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<D,T,Full>
+ boxit.vectorEngineFull[0](btex \classname{VectorEngine<D,T,Full>} 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<D,T1,Tag1>\&) \\
+ 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<D,T,Full>
+ boxit.teFull[0](btex \classname{TensorEngine<D,T,Full>} etex);
+ boxit.teFull[1](btex etex);
+ boxit.teFull[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine<D,T,Full>\&) \\
+ 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<D,T,Antisymmetric>
+ boxit.teAntisymmetric[0](btex \classname{TensorEngine<D,T,Antisymmetric>} etex);
+ boxit.teAntisymmetric[1](btex etex);
+ boxit.teAntisymmetric[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine<D,T,Antisymmetric>\&) \\
+ 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<D,T,Symmetric>
+ boxit.teSymmetric[0](btex \classname{TensorEngine<D,T,Symmetric>} etex);
+ boxit.teSymmetric[1](btex etex);
+ boxit.teSymmetric[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine<D,T,Symmetric>\&) \\
+ 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<D,T,Diagonal>
+ boxit.teDiagonal[0](btex \classname{TensorEngine<D,T,Diagonal>} etex);
+ boxit.teDiagonal[1](btex etex);
+ boxit.teDiagonal[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine<D,T,Symmetric>\&) \\
+ 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<D,T1,Tag1>\&) \\
+ 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<D,T,Full>
+ boxit.teFull[0](btex \classname{TensorEngine<D,T,Full>} etex);
+ boxit.teFull[1](btex etex);
+ boxit.teFull[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine<D,T,Full>\&) \\
+ 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<D,T,Antisymmetric>
+ boxit.teAntisymmetric[0](btex \classname{TensorEngine<D,T,Antisymmetric>} etex);
+ boxit.teAntisymmetric[1](btex etex);
+ boxit.teAntisymmetric[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine<D,T,Antisymmetric>\&) \\
+ 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<D,T,Symmetric>
+ boxit.teSymmetric[0](btex \classname{TensorEngine<D,T,Symmetric>} etex);
+ boxit.teSymmetric[1](btex etex);
+ boxit.teSymmetric[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine<D,T,Symmetric>\&) \\
+ 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<D,T,Diagonal>
+ boxit.teDiagonal[0](btex \classname{TensorEngine<D,T,Diagonal>} etex);
+ boxit.teDiagonal[1](btex etex);
+ boxit.teDiagonal[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine<D,T,Symmetric>\&) \\
+ 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<D,T1,Tag1>\&) \\
+ 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<D,T,Full>
+ boxit.teFull[0](btex \classname{TensorEngine<D,T,Full>} etex);
+ boxit.teFull[1](btex etex);
+ boxit.teFull[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine<D,T,Full>\&) \\
+ 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<D,T,Antisymmetric>
+ boxit.teAntisymmetric[0](btex \classname{TensorEngine<D,T,Antisymmetric>} etex);
+ boxit.teAntisymmetric[1](btex etex);
+ boxit.teAntisymmetric[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine<D,T,Antisymmetric>\&) \\
+ 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<D,T,Symmetric>
+ boxit.teSymmetric[0](btex \classname{TensorEngine<D,T,Symmetric>} etex);
+ boxit.teSymmetric[1](btex etex);
+ boxit.teSymmetric[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine<D,T,Symmetric>\&) \\
+ 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<D,T,Diagonal>
+ boxit.teDiagonal[0](btex \classname{TensorEngine<D,T,Diagonal>} etex);
+ boxit.teDiagonal[1](btex etex);
+ boxit.teDiagonal[2](
+ btex \begin{lists}
+ TensorEngine() \\
+ TensorEngine(const TensorEngine<D,T,Symmetric>\&) \\
+ 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<D1,D2,T,Full>
+ boxit.matrixEngineFull[0](btex \classname{TinyMatrixEngine<D1,D2,T,Full>} etex);
+ boxit.matrixEngineFull[1](btex etex);
+ boxit.matrixEngineFull[2](
+ btex \begin{lists}
+ TinyMatrixEngine() \\
+ TinyMatrixEngine(const TinyMatrixEngine<D,T,Full>\&) \\
+ 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<D1,D2,T,Full>
+ boxit.matrixEngineFull[0](btex \classname{TinyMatrixEngine<D1,D2,T,Full>} etex);
+ boxit.matrixEngineFull[1](btex etex);
+ boxit.matrixEngineFull[2](
+ btex \begin{lists}
+ TinyMatrixEngine() \\
+ TinyMatrixEngine(const TinyMatrixEngine<D,T,Full>\&) \\
+ 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) =
More information about the pooma-dev
mailing list