From oldham at codesourcery.com Tue Mar 5 00:00:49 2002 From: oldham at codesourcery.com (Jeffrey Oldham) Date: Mon, 4 Mar 2002 16:00:49 -0800 Subject: Patch: More UML Class Diagrams Message-ID: <20020304160049.A10244@vaio.codesourcery.com> 2002-Mar-04 Jeffrey D. Oldham 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 **** Indentation follows the GNU Emacs's &cc; mode guidelines. Most increases in ! indentation levels starts two characters to the right. Most brackets, e.g., in function definitions, occur on separate lines. Exceptions are for very short functions. --- 534,540 ---- Indentation follows the GNU Emacs's &cc; mode guidelines. Most increases in ! indentation levels start two characters to the right. Most brackets, e.g., in function definitions, occur on separate lines. Exceptions are for very short functions. *************** *** 604,610 ****
Global Variables ! Global variables are avoided whenever possible.
--- 604,614 ----
Global Variables ! Global variables are avoided whenever possible. Where ! necessary, their names are the concatenation of capitalized words ! such that the first word is not capitalized and a suffix of ! _g is appended, e.g., ! veryFewGlobalVariables_g.
*************** *** 804,810 ****
Errors and Exceptions ! &pooma; code uses very few exception since not all &cc; compilers adequately support exceptions. Thus, all uses must also have corresponding code not using exceptions. See, e.g., POOMA_EXCEPTIONS in the code. --- 808,814 ----
Errors and Exceptions ! &pooma; code uses very few exceptions since not all &cc; compilers adequately support exceptions. Thus, all uses must also have corresponding code not using exceptions. See, e.g., POOMA_EXCEPTIONS in the code. Index: pooma.xml =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/pooma.xml,v retrieving revision 1.4 diff -c -p -r1.4 pooma.xml *** pooma.xml 2002/02/27 03:51:53 1.4 --- pooma.xml 2002/03/04 22:50:55 *************** *** 95,100 **** --- 95,102 ---- Brick"> + Centering"> + char"> complex"> *************** *** 148,153 **** --- 150,157 ---- TinyMatrix"> + Mesh"> + MultiPatch"> Options"> *************** *** 251,256 **** --- 255,262 ---- + + *************** *** 304,311 **** 1.00 ! 2002 Jan 31 jdo First publication. --- 310,325 ---- + 1.01 + 2002 Mar 01 + jdo + Added UML class diagrams, revised compilation + directions, and added a description of the source code + structure. + + 1.00 ! 2002 Jan 31 jdo First publication. *************** a(I,J) = (1.0/9.0) * *** 1002,1009 **** architecture-specific initialization. The function always returns &true;. - HERE - initialize's alternative form assumes the &pooma;-specific and architecture-specific command-line arguments have already been removed from --- 1016,1021 ---- *************** UNFINISHED *** 3680,3915 **** &template-appendix; &code-appendix; - - - - ¨ Class Diagrams - - In this chapter, we present Unified Modeling Language (¨) - class diagrams. These are created at the - specification level, which indicates the - software interface, not its implementation. Readers interested in - the implementation are encouraged to read the corresponding source - code. More extensive explanations of these classes appear in the - main chapters of this &book;. - -
- Explanation of ¨ Class Diagrams - - - - - - - - - An Explanation of UML Class Diagrams - - -
- - illustrates a typical - ¨ class diagram. The diagram has three classes: - Classname1, Classname2, and - Classname2<1>. Most classes are represented by - three-part boxes. The top part lists the class's name. The middle - part lists public data members, if any. Few &pooma; classes have - public data members so this section is frequently empty. The bottom - part lists public member functions, if any. - Classname2<1> has only one part, not three. Its - three-part box appears in another diagram, presumably because there - is not enough room in this one. Both Classname1 and - Classname2 have template parameters, each named - T. These occur in dashed boxes at the upper-right - corner of the class boxes. Files implementing a class are listed at - the lower, right corner of the class's box; this is not standard UML - notation. - - Lines connect classes. The solid arrow with large triangular - arrowhead indicates that Classname2 is a subtype of - Classname1. Since this diagram represents the - specification level, subtyping does not necessarily correspond to - &cc; type inheritance. Also, subtype class boxes need only list - members not available in the supertype. For this case, - Classname2 has no new members not provided by - Classname1. A dashed arrow indicates a class formed by - a template instantiation. The class name indicates which template - parameters are bound. For example, Classname2<1> - instantiates Classname2 with T equal - to 1. - - These diagrams omit a lot of details. Private and protected - data members are not listed. Compile-time types and values are not - listed. No indication is given of the actual implementation. - - -
- &array;s - -
- Relationship Between &array; and &dynamicarray;s - - - - - - - - - &dynamicarray;s are subtypes of &array;s - - -
- - Both &array;s and &dynamicarray;s have so many member - functions that their class boxes appear in separate diagrams. - indicates that - &dynamicarray;s are subtypes of &array;s. Both have value type and - engine tag template parameters but &dynamicarray;'s dimension must - be one. - -
- &array; Diagram - - - - - - - - - &array; Class Diagram - - -
- -
- &dynamicarray; Diagram - - - - - - - - - &dynamicarray; Class Diagram - - -
-
! !
! &domain;s ! ! &domain;s and its subtypes are shown in . All classes are instantiated ! from or subtypes of &domain;. As mentioned in , the Domain<1> ! template instantiation has additional member functions. It uses ! the Domain<1>::iterator. The four &domain; ! subtypes appear in the bottom half of the figure. Each requires ! the same template parameter as &domain;. Each of these has a ! template instantiation for the one-dimensional case. We omit ! listing their additional member functions since these are the same ! as for Domain<1>. ! !
! &domain;s ! ! ! ! ! ! ! ! ! &domain;s ! ! !
! !
! ! !
! &engine;s ! ! &engine;s and its subtypes are shown in . Five subtypes of &engine;s ! are shown. Details appear in subsequent diagrams. The ! Engine class box shows no members because it has no ! members. Only subtypes have members. More explanation of these ! classes can be found in . The ! implementation files in use the ! [1-7] regular expression to indicate 1, 2, ! …, or 7. ! !
! &engine;s ! ! ! ! ! ! ! ! ! Relationships among &engine;s ! ! !
! !
! &brick; and &compressiblebrick; &engine;s ! ! ! ! ! ! ! ! ! &brick; and &compressiblebrick; &engine;s ! ! !
! !
! &dynamic; and &multipatch; &engine;s ! ! ! ! ! ! ! ! ! &dynamic; and &multipatch; &engine;s ! ! !
! !
! &remote; &engine;s ! ! ! ! ! ! ! ! ! &remote; &engine;s ! ! !
! !
! !
FIXME contains a short introduction to template programming. Readers needing more background material might want to read Koenig and Moo's Accelerated &cc;, Stanley Lippman's --- 30,36 ---- Readers will need to be familiar with &cc;, the language in which &pooma; programs are written. Classes, objects, function objects, template classes, and template functions will all be used. Appendix ! contains a short introduction to template programming. Readers needing more background material might want to read Koenig and Moo's Accelerated &cc;, Stanley Lippman's *************** *** 375,381 **** ! Jeffrey D. Oldham, 2002 February --- 375,381 ---- ! Jeffrey D. Oldham, 2002 March Index: starting.xml =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/starting.xml,v retrieving revision 1.1 diff -c -p -r1.1 starting.xml *** starting.xml 2002/02/27 03:51:53 1.1 --- starting.xml 2002/03/04 22:50:55 *************** *** 5,11 **** for use, and then compile a Hello, &pooma; program. Impatient readers will find the first section helpful. Those desiring more details will find this section provides a useful ! overview of the chapter.
--- 5,11 ---- for use, and then compile a Hello, &pooma; program. Impatient readers will find the first section helpful. Those desiring more details will find this section provides a useful ! overview of the chapter although it can be skipped.
*************** *** 39,45 **** indicates the operating system and compiler. Permitted choices are the names of files in the config/arch/ subdirectory omitting ! the .conf suffix. --- 39,45 ---- indicates the operating system and compiler. Permitted choices are the names of files in the config/arch/ subdirectory omitting ! the .conf suffixes. *************** *** 60,69 **** program available at examples/Manual/Sequential/initialize-finalize.cpp: &initialspace;export POOMAHOME=/home/oldham/pooma/pooma1 ! &initialspace;g++ -I${POOMAHOME}/src -I${POOMAHOME}/lib/${POOMASUITE} initialize-finalize.cpp -o initialize-finalize -L${POOMAHOME}/lib/${POOMASUITE} -lpooma-gcc ! The environment variable indicates the location of the &toolkit; ! header files and the library. --- 60,73 ---- program available at examples/Manual/Sequential/initialize-finalize.cpp: &initialspace;export POOMAHOME=/home/oldham/pooma/pooma1 ! &initialspace;g++ -I${POOMAHOME}/src \ ! &initialspace;-I${POOMAHOME}/lib/${POOMASUITE} \ ! &initialspace;initialize-finalize.cpp \ ! &initialspace;-o initialize-finalize \ ! &initialspace;-L${POOMAHOME}/lib/${POOMASUITE} -lpooma-gcc ! The POOMAHOME environment variable indicates the ! location of the &toolkit; header files and the library. *************** *** 113,121 **** operating system with &kcc;. To configure the source code, use a command ! like &initialspace;./configure &dashdash;arch ! LINUXgcc &dashdash;opt &dashdash;suite LINUXgcc-opt ! The architecture argument to the &dashdash;arch option is the name of the corresponding configuration file, omitting its .conf suffix. The --- 117,125 ---- operating system with &kcc;. To configure the source code, use a command ! like ! &initialspace;./configure &dashdash;arch LINUXgcc &dashdash;opt &dashdash;suite LINUXgcc-opt ! The architecture argument to the &dashdash;arch option is the name of the corresponding configuration file, omitting its .conf suffix. The *************** *** 137,152 **** need to be compiled. Specify the desired suite by setting the POOMASUITE environment variable to the appropriate value. For example, if using the bash ! shell, use &initialspace;export ! POOMASUITE=suiteName ! substituting the suite name's suiteName. If using the csh shell, ! use &initialspace;setenv POOMASUITE ! suiteName In the previous paragraph, the suite name is LINUXgcc-opt so we would issue the ! statement &initialspace;setenv POOMASUITE ! LINUXgcc-opt Issuing the make command compiles the &pooma; source code files to create the &pooma; library. The --- 141,158 ---- need to be compiled. Specify the desired suite by setting the POOMASUITE environment variable to the appropriate value. For example, if using the bash ! shell, use ! &initialspace;export POOMASUITE=suiteName ! substituting the suite name's suiteName. If using the csh shell, ! use ! &initialspace;setenv POOMASUITE suiteName ! In the previous paragraph, the suite name is LINUXgcc-opt so we would issue the ! statement ! &initialspace;setenv POOMASUITE LINUXgcc-opt ! Issuing the make command compiles the &pooma; source code files to create the &pooma; library. The *************** *** 158,164 **** class="libraryfile">lib/LINUXgcc-opt/libpooma-gcc.a. If it fails, the makefiles will print a line indicating which file failed to compile. Reading the corresponding .info may indicate what failed. The same &pooma; source code can support multiple suites as --- 164,170 ---- class="libraryfile">lib/LINUXgcc-opt/libpooma-gcc.a. If it fails, the makefiles will print a line indicating which file failed to compile. Reading the corresponding .info file may indicate what failed. The same &pooma; source code can support multiple suites as *************** *** 188,195 **** The configuration script supports many more command-line options than the two used above, but few &pooma; users need use them except those using distributed &pooma;, which are described ! below. /configure -h yields a complete list. ! We describe also describe them here. --- 194,201 ---- The configuration script supports many more command-line options than the two used above, but few &pooma; users need use them except those using distributed &pooma;, which are described ! below. ./configure -h yields a complete list. ! We also describe them here.
*************** *** 220,226 **** The environment variable POOMASUITE's value should equal suite when compiling the library. suite can be any ! string that an serve as a filename. If this option is omitted, the &dashdash;arch architecture is used. --- 226,232 ---- The environment variable POOMASUITE's value should equal suite when compiling the library. suite can be any ! string that can serve as a filename. If this option is omitted, the &dashdash;arch architecture is used. *************** *** 427,434 **** &dashdash;messaging enables creation of distributed &pooma; executables by ! enabling use of the &cheetah; communications package. See ! --- 433,439 ---- &dashdash;messaging enables creation of distributed &pooma; executables by ! enabling use of the &cheetah; communications package. *************** *** 474,479 **** --- 479,498 ---- program that initializes and de-initializes the &pooma; library. + The simplest &pooma; program is available at examples/Manual/Sequential/initialize-finalize.cpp. + It is annotated in . Before its + use, the &poomatoolkit; must be initialized by a call to + initialize. This usually occurs in the + main function. After its use, the + &poomatoolkit; should be shut down using a call to + finalize. This also usually occurs in the + main function. Both of these functions are + declared in Pooma/Pooma.h. + This header file (or another &pooma; header file including it) + occurs in every &pooma; program. + A <quote>Hello, &pooma;</quote> Program *************** *** 495,514 **** - The simplest &pooma; program is available at examples/Manual/Sequential/initialize-finalize.cpp. - It is annotated in . Before its - use, the &poomatoolkit; must be initialized by a call to - initialize. This usually occurs in the - main function. After its use, the - &poomatoolkit; should be shut down using a call to - finalize. This also usually occurs in the - main function. Both of these functions are - declared in Pooma/Pooma.h. - This header file or another &pooma; header file including it occurs - in every &pooma; program. - Compiling this program requires including &pooma; header files and library. Let us assume that the environment variable POOMAHOME describes the location of the &pooma; --- 514,519 ---- *************** *** 516,522 **** &initialspace;export POOMAHOME=/home/user/pooma We illustrate how to compile the program using the &gpp; compiler: ! &initialspace;g++ -I${POOMAHOME}/src -I${POOMAHOME}/lib/LINUXgcc initialize-finalize.cpp -o initialize-finalize -L${POOMAHOME}/lib/${POOMASUITE} -lpooma-gcc We explain the five command-line options: --- 521,529 ---- &initialspace;export POOMAHOME=/home/user/pooma We illustrate how to compile the program using the &gpp; compiler: ! &initialspace;g++ -I${POOMAHOME}/src -I${POOMAHOME}/lib/LINUXgcc \ ! &initialspace;initialize-finalize.cpp -o initialize-finalize \ ! &initialspace;-L${POOMAHOME}/lib/${POOMASUITE} -lpooma-gcc We explain the five command-line options: *************** *** 587,593 **** Prototypes ! &initialspace;#include "Pooma/Pooma.h" // or "Pooma/Arrays.h" or "Pooma/Fields.h" or … --- 594,601 ---- Prototypes ! &initialspace;#include "Pooma/Pooma.h" ! &initialspace;// or "Pooma/Arrays.h" or "Pooma/Fields.h" or … *************** *** 870,877 **** For example, the &author; uses ! ./configure &dashdash;arch LINUXGCC &dashdash;shmem &dashdash;nompi ! &dashdash;noex &dashdash;static &dashdash;prefix ${HOME}/pooma/cheetah-1.0 &dashdash;opt The &dashdash;arch LINUXGCC indicates use of --- 878,885 ---- For example, the &author; uses ! ./configure &dashdash;arch LINUXGCC &dashdash;shmem &dashdash;nompi \ ! &dashdash;noex &dashdash;static &dashdash;prefix ${HOME}/pooma/cheetah-1.0 \ &dashdash;opt The &dashdash;arch LINUXGCC indicates use of *************** *** 921,927 **** installed &cheetah; library. For example, ! declare -x CHEETAHDIR=${HOME}/pooma/cheetah-1.0 specifies the installation directory used in the previous section. If using the csh shell, use setenv --- 929,935 ---- installed &cheetah; library. For example, ! export CHEETAHDIR=${HOME}/pooma/cheetah-1.0 specifies the installation directory used in the previous section. If using the csh shell, use setenv Index: template.xml =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/template.xml,v retrieving revision 1.7 diff -c -p -r1.7 template.xml *** template.xml 2002/02/27 03:51:53 1.7 --- template.xml 2002/03/04 22:50:56 *************** struct usuallySimpleClass<false> { *** 829,835 **** template<class Op, class Left, class Right> struct ExpressionTraits<BinaryNode<Op, Left, Right&closeclose; { ! typedef typename ExpressionTraits<Left>::Type_t Left_t; typedef typename ExpressionTraits<Right>::Type_t Right_t; typedef typename CombineExpressionTraits<Left_t, Right_t>::Type_t Type_t; --- 829,835 ---- template<class Op, class Left, class Right> struct ExpressionTraits<BinaryNode<Op, Left, Right&closeclose; { ! typedef typename ExpressionTraits<Left>::Type_t Left_t; typedef typename ExpressionTraits<Right>::Type_t Right_t; typedef typename CombineExpressionTraits<Left_t, Right_t>::Type_t Type_t; Index: uml.xml =================================================================== RCS file: uml.xml diff -N uml.xml *** /dev/null Fri Mar 23 21:37:44 2001 --- uml.xml Mon Mar 4 15:50:57 2002 *************** *** 0 **** --- 1,736 ---- + + ¨ Class Diagrams + + In this chapter, we present Unified Modeling Language (¨) + class diagrams for several &pooma; classes. These diagrams are + created at the specification level, which + indicates the software interface, not its implementation. + provides a top-level overview of the relationships between classes. + Readers interested in the implementation are encouraged to read the + corresponding source code. More extensive explanations of these + classes appear in the main chapters of this &book;. + +
+ Explanation of ¨ Class Diagrams + + + + + + + + + An Explanation of UML Class Diagrams + + +
+ + illustrates a typical + ¨ class diagram. The diagram has three classes: + Classname1, Classname2, and + Classname2<1>. Most classes are represented by + three-part boxes. The top part lists the class's name. The middle + part lists public data members, if any. Few &pooma; classes have + public data members so this section is frequently empty. The bottom + part lists public member functions, if any. Free parameter + types indicate templated parameters. + Classname2<1> has only one part, not three. Its + three-part box appears in another diagram, presumably because there + is not enough room in this one. Both Classname1 and + Classname2 have template parameters, each named + T. These occur in dashed boxes at the upper-right + corner of the class boxes. Files implementing a class are listed at + the lower, right corner of the class's box. These implementation + files may be different from the header files to include in one's + program to use these classes. + + Lines connect classes. The solid arrow with large triangular + arrowhead indicates that Classname2 is a subtype of + Classname1. Since this diagram represents the + specification level, subtyping does not necessarily correspond to + &cc; type inheritance. Also, subtype class boxes need only list + members not available in the supertype. For this case, + Classname2 has one new member not provided by + Classname1. A dashed arrow indicates a class formed by + a template instantiation. The class name indicates which template + parameters are bound. For example, Classname2<1> + instantiates Classname2 with T equal + to 1. + + Some of the functions require many, similar function + arguments. We introduce regular expression notation to reduce the + length of the function prototype. For example, + void foo(const X[1-3]&) + abbreviates + void foo(const X1&, const X2&, const X3&) + X[1-3] abbreviates + X1, X2, X3. + We assume this distributes over const &, to + yield &cc; code. + + These diagrams omit a lot of details. Private and protected + data members are not listed. Compile-time types and values are not + listed. No indication is given of the actual implementation. Some + template arguments of parameters have been suppressed. + + +
+ &array;s + +
+ Relationship Between &array; and &dynamicarray;s + + + + + + + + + &dynamicarray;s are subtypes of &array;s + + +
+ + Both &array;s and &dynamicarray;s have so many member + functions that their class boxes appear in separate diagrams. + indicates that + &dynamicarray;s are subtypes of &array;s. Both have value type and + engine tag template parameters but &dynamicarray;'s dimension must + be one. + + Implementation files are located within the src/Array directory. + +
+ &array; Diagram + + + + + + + + + &array; Class Diagram + + +
+ +
+ &dynamicarray; Diagram + + + + + + + + + &dynamicarray; Class Diagram + + +
+
+ + +
+ &field;s, &mesh;es, and ¢ering;s + + A &field; has a mesh and a centering. It is implemented in + src/Field/Field.h. + +
+ &field; + + + + + + + + + A &field; is like an &array; but having spatial + extent. + + +
+ + +
+ &mesh;es + + A mesh specifies a &field;'s spatial extent. A &mesh; class + only exists conceptually, but NoMesh and + UniformRectilinearMesh are defined within the + src/Field/Mesh + directory. + +
+ &mesh;es + + + + + + + + + The abstract Mesh class is realized by + NoMesh and UniformRectilinearMesh. + + +
+ +
+ <type>NoMesh</type> + + + + + + + + + If a &field; has a NoMesh mesh, it has no + spatial extent. + + +
+ + In the following figure, we abbreviate + UniformRectilinearMesh with + URM. + +
+ <type>UniformRectilinearMesh</type> + + + + + + + + + The UniformRectilinearMesh is the most + common &field; mesh. + + +
+
+ + +
+ ¢ering;s + + A ¢ering; specifies the location of values within a + cell. CanonicalCentering is a helper class returning + common centerings. Both are implemented within the src/Field subdirectory. + +
+ Centering Classes + + + + + + + + + CanonicalCentering returns commonly-used ¢ering;s. + + +
+
+ +
+ + +
+ &vector;s, &matrix;s, &tensor;s + + In this section, we present ¨ class diagrams for the + mathematical objects of &vector;s, &matrix;s, and &tensor;s. All + these classes have similar interfaces and relationships. For + example, &vector; requires a VectorEngine, which has + no public interface. The only template specialization is + VectorEngine<D,T,Full>. &matrix;s are similar. + Tensors have four different engines, supporting the tensor + specializations of Antisymmetric, + Symmetric, and + Diagonal. + + All of the source files are located in the src/Tiny subdirectory. + +
+ &vector;s + + + + + + + + + &vector;s require VectorEngines. + + +
+ +
+ &matrix;s + + + + + + + + + &matrix;s require TinyMatrixEngines, + appearing in the next diagram. + + +
+ +
+ <type>TinyMatrixEngine</type>s + + + + + + + + + TinyMatrixEngines power &matrix;s. + + +
+ +
+ &tensor;s and <type>TensorEngine</type>s + + + + + + + + + &tensor;s require TensorEngines. + + +
+ +
+ <literal>Full</literal> and <literal>Diagonal</literal> <type>TensorEngine</type>s + + + + + + + + + Full &engine;s are the default + &tensor; &engine;s. Diagonal &tensor;s use its special &engine;. + + +
+ +
+ <literal>Antisymmetric</literal> and <literal>Symmetric</literal> <type>TensorEngine</type>s + + + + + + + + + More TensorEngine specializations. + + +
+
+ + +
+ &domain;s + + &domain;s and its subtypes are shown in . All classes are instantiated + from or subtypes of &domain;. As mentioned in , the Domain<1> + template instantiation has additional member functions. It uses + the Domain<1>::iterator. The four &domain; + subtypes appear in the bottom half of the figure. Each requires + the same template parameter as &domain;. Each of these has a + template instantiation for the one-dimensional case. We omit + listing their additional member functions since these are the same + as for Domain<1>. + + Implementation files are located within the src/Domain directory. + +
+ &domain;s + + + + + + + + + &domain;s + + +
+ +
+ + +
+ &engine;s + + &engine;s and its subtypes are shown in . Five subtypes of &engine;s + are shown. Details appear in subsequent diagrams. The + Engine class box shows no members because it has no + members. Only subtypes have members. More explanation of these + classes can be found in . The + implementation files in use the + [1-7] regular expression to indicate 1, 2, + …, or 7. + + Implementation files are located within the src/Engine directory. + +
+ &engine;s + + + + + + + + + Relationships among &engine;s + + +
+ +
+ &brick; and &compressiblebrick; &engine;s + + + + + + + + + &brick; and &compressiblebrick; &engine;s + + +
+ +
+ &dynamic; and &multipatch; &engine;s + + + + + + + + + &dynamic; and &multipatch; &engine;s + + +
+ +
+ &remote; &engine;s + + + + + + + + + &remote; &engine;s + + +
+ +
+ + +
+ Distributed Computation + + In this section, we present ¨ class diagrams for the + classes used when declaring distributed computation. We use + abbreviations in parameter lists: + +
+ Abbreviations + + + + + abbreviation + meaning + + + + + CM + ContextMapper + + + DT + DistributedTag + + + GL + GuardLayers + + + Iv + Interval + + + List_t + std::vector of pointers to Nodes of + &domain;s + + + PatchList_t + std::vector of Interval<Dim>s + + + RT + ReplicatedTag + + + SpTlLa + SparseTileLayout + + + +
+ + Partitions specify how a domain will be split into patches, + or pieces. + introduces the abstract Partition class. The class + exists only conceptually, not appearing in any source code. + Instead four classes, appearing in subsequent diagrams, realize it. + Even though users rarely use any of their member functions, the + diagrams list them. All files are relative to the src/Partition subdirectory. + +
+ Partitions + + + + + + + + + Four classes realize the abstract Partition class. + + +
+ +
+ Grid Partitions + + + + + + + + + Two partition classes use grids. + + +
+ +
+ Other Partitions + + + + + + + + + SpatialPartition and + TilePartition realize the abstract Partition + class. + + +
+ + Guard layers surround domains and patches to ease programming + and decrease communication. We list more member functions than + most users require. All files are relative to the src/Layout subdirectory. + +
+ Guard Layers + + + + + + + + + GuardLayers surround patches. + + +
+ + A layout maps a domain index to processors and memory used to + compute the associated value. There is no base class so we just + present the class diagrams. We list only member functions related + to construction, destruction, and printing since those are the + functions that almost all users use. All files are relative to the + src/Layout + subdirectory. + +
+ <type>DomainLayout</type> + + + + + + + + + DomainLayout + + +
+ +
+ <type>DynamicLayout</type> + + + + + + + + + DynamicLayout + + +
+ +
+ <type>GridLayout</type> + + + + + + + + + GridLayout + + +
+ +
+ <type>UniformGridLayout</type> + + + + + + + + + UniformGridLayout + + +
+ +
+ <type>SparseTileLayout</type> + + + + + + + + + SparseTileLayout + + +
+ + + Context mappers map domain patches to contexts. Effectively, + they map pieces of a domain to processors. Even though users + rarely use any of their member functions, the diagrams list them. + The type List_t abbreviates an + std::vector of pointers to Nodes of + &domain;s. GL abbreviates GuardLayers. + All files are relative to the src/Partition subdirectory. + +
+ Relationships Among Context Mappers + + + + + + + + + Five different mappers inherit from the base + ContextMapper. + + +
+ +
+ Context Mappers + + + + + + + + + Details of the five different mappers inheriting from + the base ContextMapper. + + +
+ +
+ Index: figures/Makefile =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/Makefile,v retrieving revision 1.3 diff -c -p -r1.3 Makefile *** figures/Makefile 2002/02/27 03:51:53 1.3 --- figures/Makefile 2002/03/04 22:50:57 *************** RESULTS= $(SOURCES:%.mp=mproof-%.ps) *** 37,45 **** TREE_SOURCES= $(SOURCES) Makefile macros.ltx # UML class diagrams that occur in the appendix containing these. ! UML_DIAGRAMS= explanation-uml-1.png array-uml.1 array-uml.2 array-uml.3 \ ! domain-uml.1 engine-uml.1 engine-uml.2 engine-uml.3 \ ! engine-uml.4 # Create all the EPS and PNG files. The 'mproof-all' target creates # the EPS files. This should happen before trying to create the PNG --- 37,58 ---- TREE_SOURCES= $(SOURCES) Makefile macros.ltx # UML class diagrams that occur in the appendix containing these. ! UML_DIAGRAMS= explanation-uml-1.png \ ! array-uml-1.png array-uml-2.png array-uml-3.png \ ! distributed-uml-5.png distributed-uml-4.png \ ! distributed-uml-3.png distributed-uml-30.png \ ! distributed-uml-22.png distributed-uml-23.png \ ! distributed-uml-24.png distributed-uml-20.png \ ! distributed-uml-21.png distributed-uml-10.png \ ! distributed-uml-11.png \ ! domain-uml-1.png \ ! engine-uml-1.png engine-uml-2.png engine-uml-3.png \ ! engine-uml-4.png \ ! field-uml-10.png field-uml-3.png field-uml-1.png \ ! field-uml-2.png field-uml-11.png \ ! math-objs-uml-1.png math-objs-uml-10.png \ ! math-objs-uml-11.png math-objs-uml-2.png math-objs-uml-3.png \ ! math-objs-uml-4.png # Create all the EPS and PNG files. The 'mproof-all' target creates # the EPS files. This should happen before trying to create the PNG *************** introduction-%.png: introduction.% *** 72,82 **** --- 85,101 ---- $(EPSTOPNG) -p -o $@ $^ array-uml-%.png: array-uml.% $(EPSTOPNG) -p -o $@ $^ + distributed-uml-%.png: distributed-uml.% + $(EPSTOPNG) -p -o $@ $^ domain-uml-%.png: domain-uml.% $(EPSTOPNG) -p -o $@ $^ engine-uml-%.png: engine-uml.% $(EPSTOPNG) -p -o $@ $^ explanation-uml-%.png: explanation-uml.% + $(EPSTOPNG) -p -o $@ $^ + field-uml-%.png: field-uml.% + $(EPSTOPNG) -p -o $@ $^ + math-objs-uml-%.png: math-objs-uml.% $(EPSTOPNG) -p -o $@ $^ clean: Index: figures/array-uml-1.png =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/array-uml-1.png,v retrieving revision 1.1 diff -c -p -r1.1 array-uml-1.png Binary files /tmp/cvsgrf0Om and array-uml-1.png differ Index: figures/array-uml-2.png =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/array-uml-2.png,v retrieving revision 1.1 diff -c -p -r1.1 array-uml-2.png Binary files /tmp/cvszpurUR and array-uml-2.png differ Index: figures/array-uml-3.png =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/array-uml-3.png,v retrieving revision 1.1 diff -c -p -r1.1 array-uml-3.png Binary files /tmp/cvsGHuyWm and array-uml-3.png differ Index: figures/array-uml.mp =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/array-uml.mp,v retrieving revision 1.1 diff -c -p -r1.1 array-uml.mp *** figures/array-uml.mp 2002/02/27 03:51:54 1.1 --- figures/array-uml.mp 2002/03/04 22:50:58 *************** beginfig(1) *** 34,47 **** btex \begin{lists} Array() \\ - Array(Domain \ldots) \\ - Array(Domain \ldots, ModelElement) \\ Array(Array) \\ Array(Array, Domain) \\ ! initialize(Domain \ldots) \\ ! initialize(Domain \ldots, ModelElement) \\ ! read(\ldots) \\ ! operator()(\ldots) \\ domain() \\ physicalDomain() \\ totalDomain() \\ --- 34,85 ---- btex \begin{lists} Array() \\ Array(Array) \\ Array(Array, Domain) \\ ! Array(const Domain\&) \\ ! Array(const Domain[1-2]\&) \\ ! Array(const Domain[1-3]\&) \\ ! Array(const Domain[1-4]\&) \\ ! Array(const Domain[1-5]\&) \\ ! Array(const Domain[1-6]\&) \\ ! Array(const Domain[1-7]\&) \\ ! Array(const Domain\&, ModelElement) \\ ! Array(const Domain[1-2]\&, ModelElement) \\ ! Array(const Domain[1-3]\&, ModelElement) \\ ! Array(const Domain[1-4]\&, ModelElement) \\ ! Array(const Domain[1-5]\&, ModelElement) \\ ! Array(const Domain[1-6]\&, ModelElement) \\ ! Array(const Domain[1-7]\&, ModelElement) \\ ! void initialize(const Domain\&) \\ ! void initialize(const Domain[1-2]\&) \\ ! void initialize(const Domain[1-3]\&) \\ ! void initialize(const Domain[1-4]\&) \\ ! void initialize(const Domain[1-5]\&) \\ ! void initialize(const Domain[1-6]\&) \\ ! void initialize(const Domain[1-7]\&) \\ ! void initialize(const Domain\&, ModelElement) \\ ! void initialize(const Domain[1-2]\&, ModelElement) \\ ! void initialize(const Domain[1-3]\&, ModelElement) \\ ! void initialize(const Domain[1-4]\&, ModelElement) \\ ! void initialize(const Domain[1-5]\&, ModelElement) \\ ! void initialize(const Domain[1-6]\&, ModelElement) \\ ! void initialize(const Domain[1-7]\&, ModelElement) \\ ! read() \\ ! read(const X1\&) \\ ! read(const X[1-2]\&) \\ ! read(const X[1-3]\&) \\ ! read(const X[1-4]\&) \\ ! read(const X[1-5]\&) \\ ! read(const X[1-6]\&) \\ ! read(const X[1-7]\&) \\ ! operator()() \\ ! operator()(const X1\&) \\ ! operator()(const X[1-2]\&) \\ ! operator()(const X[1-3]\&) \\ ! operator()(const X[1-4]\&) \\ ! operator()(const X[1-5]\&) \\ ! operator()(const X[1-6]\&) \\ ! operator()(const X[1-7]\&) \\ domain() \\ physicalDomain() \\ totalDomain() \\ *************** beginfig(1) *** 54,65 **** size() \\ layout() \\ engine() \\ ! operator<< \end{lists} etex); boxit.array[3]( btex \begin{lists} ! dim D \\ value type T \\ engine tag Tag \end{lists} etex); --- 92,103 ---- size() \\ layout() \\ engine() \\ ! operator<<() \end{lists} etex); boxit.array[3]( btex \begin{lists} ! dimension D \\ value type T \\ engine tag Tag \end{lists} etex); *************** beginfig(1) *** 80,89 **** DynamicArray(Domain, ModelElement) \\ DynamicArray(DynamicArray) \\ DynamicArray(DynamicArray, Domain) \\ ! initialize(Domain \ldots) \\ ! initialize(Domain \ldots, ModelElement) \\ ! read(\ldots) \\ ! operator()(\ldots) \\ domain() \\ physicalDomain() \\ totalDomain() \\ --- 118,153 ---- DynamicArray(Domain, ModelElement) \\ DynamicArray(DynamicArray) \\ DynamicArray(DynamicArray, Domain) \\ ! void initialize(const Domain\&) \\ ! void initialize(const Domain[1-2]\&) \\ ! void initialize(const Domain[1-3]\&) \\ ! void initialize(const Domain[1-4]\&) \\ ! void initialize(const Domain[1-5]\&) \\ ! void initialize(const Domain[1-6]\&) \\ ! void initialize(const Domain[1-7]\&) \\ ! void initialize(const Domain\&, ModelElement) \\ ! void initialize(const Domain[1-2]\&, ModelElement) \\ ! void initialize(const Domain[1-3]\&, ModelElement) \\ ! void initialize(const Domain[1-4]\&, ModelElement) \\ ! void initialize(const Domain[1-5]\&, ModelElement) \\ ! void initialize(const Domain[1-6]\&, ModelElement) \\ ! void initialize(const Domain[1-7]\&, ModelElement) \\ ! read() \\ ! read(const X1\&) \\ ! read(const X[1-2]\&) \\ ! read(const X[1-3]\&) \\ ! read(const X[1-4]\&) \\ ! read(const X[1-5]\&) \\ ! read(const X[1-6]\&) \\ ! read(const X[1-7]\&) \\ ! operator()() \\ ! operator()(const X1\&) \\ ! operator()(const X[1-2]\&) \\ ! operator()(const X[1-3]\&) \\ ! operator()(const X[1-4]\&) \\ ! operator()(const X[1-5]\&) \\ ! operator()(const X[1-6]\&) \\ ! operator()(const X[1-7]\&) \\ domain() \\ physicalDomain() \\ totalDomain() \\ *************** beginfig(1) *** 96,102 **** size() \\ layout() \\ engine() \\ ! operator<< \\ array() \\ arrayAll() \\ create(CreateSize\t) \\ --- 160,166 ---- size() \\ layout() \\ engine() \\ ! operator<<() \\ array() \\ arrayAll() \\ create(CreateSize\t) \\ *************** beginfig(1) *** 147,153 **** % Draw arrows between classes. drawDiscriminator(array[0].s, 0); ! z0 = array[0].s - (0,discriminatorScale); draw z0 -- dynamicarray[0].n; endfig; --- 211,217 ---- % Draw arrows between classes. drawDiscriminator(array[0].s, 0); ! z0 = array[0].s - (0,discriminatorLength); draw z0 -- dynamicarray[0].n; endfig; *************** beginfig(2) *** 162,193 **** btex \begin{lists} Array() \\ - Array(Domain \ldots) \\ - Array(Domain \ldots, ModelElement) \\ Array(Array) \\ Array(Array, Domain) \\ ! initialize(Domain \ldots) \\ ! initialize(Domain \ldots, ModelElement) \\ ! read(\ldots) \\ ! operator()(\ldots) \\ domain() \\ physicalDomain() \\ totalDomain() \\ ! first(int) \\ ! last(int) \\ length(int) \\ ! firsts() \\ ! lasts() \\ lengths() \\ size() \\ layout() \\ engine() \\ ! operator<< \end{lists} etex); boxit.array[3]( btex \begin{lists} ! dim D \\ value type T \\ engine tag Tag \end{lists} etex); --- 226,285 ---- btex \begin{lists} Array() \\ Array(Array) \\ Array(Array, Domain) \\ ! Array(const Domain\&) \\ ! Array(const Domain[1-2]\&) \\ ! Array(const Domain[1-3]\&) \\ ! Array(const Domain[1-4]\&) \\ ! Array(const Domain[1-5]\&) \\ ! Array(const Domain[1-6]\&) \\ ! Array(const Domain[1-7]\&) \\ ! Array(const Domain\&, ModelElement) \\ ! Array(const Domain[1-2]\&, ModelElement) \\ ! Array(const Domain[1-3]\&, ModelElement) \\ ! Array(const Domain[1-4]\&, ModelElement) \\ ! Array(const Domain[1-5]\&, ModelElement) \\ ! Array(const Domain[1-6]\&, ModelElement) \\ ! Array(const Domain[1-7]\&, ModelElement) \\ ! void initialize(const Domain\&) \\ ! void initialize(const Domain[1-2]\&) \\ ! void initialize(const Domain[1-3]\&) \\ ! void initialize(const Domain[1-4]\&) \\ ! void initialize(const Domain[1-5]\&) \\ ! void initialize(const Domain[1-6]\&) \\ ! void initialize(const Domain[1-7]\&) \\ ! void initialize(const Domain\&, ModelElement) \\ ! void initialize(const Domain[1-2]\&, ModelElement) \\ ! void initialize(const Domain[1-3]\&, ModelElement) \\ ! void initialize(const Domain[1-4]\&, ModelElement) \\ ! void initialize(const Domain[1-5]\&, ModelElement) \\ ! void initialize(const Domain[1-6]\&, ModelElement) \\ ! void initialize(const Domain[1-7]\&, ModelElement) \\ ! read(); operator()() \\ ! read(const X1\&); operator()(const X1\&) \\ ! read(const X[1-2]\&); operator()(const X[1-2]\&) \\ ! read(const X[1-3]\&); operator()(const X[1-3]\&) \\ ! read(const X[1-4]\&); operator()(const X[1-4]\&) \\ ! read(const X[1-5]\&); operator()(const X[1-5]\&) \\ ! read(const X[1-6]\&); operator()(const X[1-6]\&) \\ ! read(const X[1-7]\&); operator()(const X[1-7]\&) \\ domain() \\ physicalDomain() \\ totalDomain() \\ ! first(int); last(int) \\ length(int) \\ ! firsts(); lasts() \\ lengths() \\ size() \\ layout() \\ engine() \\ ! operator<<() \end{lists} etex); boxit.array[3]( btex \begin{lists} ! dimension D \\ value type T \\ engine tag Tag \end{lists} etex); *************** beginfig(3) *** 256,278 **** DynamicArray(Domain, ModelElement) \\ DynamicArray(DynamicArray) \\ DynamicArray(DynamicArray, Domain) \\ ! initialize(Domain \ldots) \\ ! initialize(Domain \ldots, ModelElement) \\ ! read(\ldots) \\ ! operator()(\ldots) \\ domain() \\ physicalDomain() \\ totalDomain() \\ ! first(int) \\ ! last(int) \\ length(int) \\ ! firsts() \\ ! lasts() \\ lengths() \\ size() \\ layout() \\ engine() \\ ! operator<< \\ array() \\ arrayAll() \\ create(CreateSize\t) \\ --- 348,386 ---- DynamicArray(Domain, ModelElement) \\ DynamicArray(DynamicArray) \\ DynamicArray(DynamicArray, Domain) \\ ! void initialize(const Domain\&) \\ ! void initialize(const Domain[1-2]\&) \\ ! void initialize(const Domain[1-3]\&) \\ ! void initialize(const Domain[1-4]\&) \\ ! void initialize(const Domain[1-5]\&) \\ ! void initialize(const Domain[1-6]\&) \\ ! void initialize(const Domain[1-7]\&) \\ ! void initialize(const Domain\&, ModelElement) \\ ! void initialize(const Domain[1-2]\&, ModelElement) \\ ! void initialize(const Domain[1-3]\&, ModelElement) \\ ! void initialize(const Domain[1-4]\&, ModelElement) \\ ! void initialize(const Domain[1-5]\&, ModelElement) \\ ! void initialize(const Domain[1-6]\&, ModelElement) \\ ! void initialize(const Domain[1-7]\&, ModelElement) \\ ! read(); operator()() \\ ! read(const X1\&); operator()(const X1\&) \\ ! read(const X[1-2]\&); operator()(const X[1-2]\&) \\ ! read(const X[1-3]\&); operator()(const X[1-3]\&) \\ ! read(const X[1-4]\&); operator()(const X[1-4]\&) \\ ! read(const X[1-5]\&); operator()(const X[1-5]\&) \\ ! read(const X[1-6]\&); operator()(const X[1-6]\&) \\ ! read(const X[1-7]\&); operator()(const X[1-7]\&) \\ domain() \\ physicalDomain() \\ totalDomain() \\ ! first(int); last(int) \\ length(int) \\ ! firsts(); lasts() \\ lengths() \\ size() \\ layout() \\ engine() \\ ! operator<<() \\ array() \\ arrayAll() \\ create(CreateSize\t) \\ Index: figures/data-parallel.mp =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/data-parallel.mp,v retrieving revision 1.3 diff -c -p -r1.3 data-parallel.mp *** figures/data-parallel.mp 2002/01/31 21:29:58 1.3 --- figures/data-parallel.mp 2002/03/04 22:51:00 *************** beginfig(101) *** 59,68 **** endfor %% Label the node's types. - % TMP label.rt(btex \type{OpAddAssign} etex, b0.e); - % TMP label.rt(btex \type{Expression} etex, 0.5[b0.c,b2.c]); label.top(btex \type{Expression} etex, b2.n); - % TMP label.lft(btex \type{Ar} etex, b1.w); label.rt(btex \type{BinaryNode= 2 for PostScript + + input boxes; + input box-macros; + input uml; + + verbatimtex + \documentclass[10pt]{article} + \usepackage{amsmath} + \input{macros.ltx} + \usepackage{times} + \usepackage{mathptm} + \newlength{\cnw} % Required to use \classnameWidth and \emptyBox + \begin{document} + etex + + + %% Draw the SpatialPartition box. + beginfig(3) + %% Create the boxes. + % SpatialPartition + boxit.sPartition[0](btex \classname{SpatialPartition} etex); + boxit.sPartition[1](btex etex); + boxit.sPartition[2]( + btex + \begin{lists} + SpatialPartition(const RefLayout\&) \\ + SpatialPartition(const SpatialPartition\&) \\ + \tilder SpatialPartition() \\ + SpatialPartition\& operator=(const SpatialPartition\&) \\ + Loc<1> blocks() \\ + int context() \\ + bool hasCustomEdgeGuards()\\ + const RefLayout\& reference() \\ + void print(Out\&) + \end{lists} etex); + boxit.sPartition[3]( + btex + \begin{lists} + RefLayout + \end{lists} etex); + boxit.sPartition[4]( + btex \begin{files} + SpatialPartition.h + \end{files} etex); + + % TilePartition + boxit.tPartition[0](btex \classname{TilePartition} etex); + boxit.tPartition[1](btex etex); + boxit.tPartition[2]( + btex + \begin{lists} + TilePartition() \\ + TilePartition(const PatchList\_t\&) \\ + TilePartition(const PatchList\_t\&, const GL\&) \\ + TilePartition(const PatchList\_t\&, const GL\&, const GL\&) \\ + TilePartition(const TilePartition\&) \\ + \tilder TilePartition() \\ + TilePartition\& operator=(const TilePartition\&) \\ + PatchList\_t tileList() \\ + bool hasCustomEdgeGuards()\\ + void print(Out\&) + \end{lists} etex); + boxit.tPartition[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.tPartition[4]( + btex \begin{files} + TilePartition.h + \end{files} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=sPartition, tPartition: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + forsuffixes $=sPartition, tPartition: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=sPartition, tPartition: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + sPartition[0].c = origin; + sPartition[2].sw - tPartition[0].nw = (0,2yUnit); + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=sPartition, tPartition: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=sPartition, tPartition: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the implementation files. + forsuffixes $=sPartition, tPartition: + drawunboxed($[4]); + endfor + endfig; + + + %% Draw the GridPartition box. + beginfig(4) + %% Create the boxes. + % GridPartition + boxit.gPartition[0](btex \classname{GridPartition} etex); + boxit.gPartition[1](btex etex); + boxit.gPartition[2]( + btex + \begin{lists} + GridPartition() \\ + GridPartition(const Grid\&) \\ + GridPartition(const Grid\&, const GuardLayers\&) \\ + GridPartition(const Grid\&, const GuardLayers\&, const GuardLayers\&) \\ + GridPartition(const Loc\&) \\ + GridPartition(const Loc\&, const GuardLayers\&) \\ + GridPartition(const Loc\&, const GuardLayers\&, const GuardLayers\&) \\ + GridPartition(const GridPartition\&) \\ + GridPartition(const UniformGridPartition\&) \\ + \tilder GridPartition() \\ + GridPartition\& operator=(const GridPartition\&) \\ + const Loc\& blocks() \\ + bool hasCustomEdgeGuards()\\ + const Grid\& grid() \\ + void print(Out\&); + \end{lists} etex); + boxit.gPartition[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.gPartition[4]( + btex \begin{files} + GridPartition.h + \end{files} etex); + + % UniformGridPartition + boxit.ugPartition[0](btex \classname{UniformGridPartition} etex); + boxit.ugPartition[1](btex etex); + boxit.ugPartition[2]( + btex + \begin{lists} + UniformGridPartition() \\ + UniformGridPartition(const GL\&) \\ + UniformGridPartition(const Loc\&) \\ + UniformGridPartition(const Loc\&, const GL\&) \\ + UniformGridPartition(const Loc\&, const GL\&, const GL\&) \\ + UniformGridPartition(const UniformGridPartition\&) \\ + \tilder UniformGridPartition() \\ + UniformGridPartition\& operator=(const UniformGridPartition\&) \\ + const Loc\& blocks() \\ + \end{lists} etex); + boxit.ugPartition[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.ugPartition[4]( + btex \begin{files} + UniformGridPartition.h + \end{files} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=gPartition, ugPartition: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + forsuffixes $=gPartition, ugPartition: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=gPartition, ugPartition: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + gPartition[0].c = origin; + gPartition[2].sw - ugPartition[0].nw = (0,2yUnit); + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=gPartition, ugPartition: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=gPartition, ugPartition: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the implementation files. + forsuffixes $=gPartition, ugPartition: + drawunboxed($[4]); + endfor + endfig; + + + %% Draw an abstract Partition box and related classes. + beginfig(5) + %% Create the boxes. + % Partition + boxit.partition[0](btex \classname{\emph{Partition}} etex); + boxit.partition[1](btex etex); + boxit.partition[2]( + btex + \begin{lists} + Partition() \\ + Partition(const Partition\&) \\ + \tilder Partition() \\ + Partition\& operator=(const Partition\&) \\ + int maxSize() \\ + bool hasGuards()\\ + bool hasInternalGuards() \\ + bool hasExternalGuards() \\ + const GuardLayers\& internalGuards() \\ + const GuardLayers\& externalGuards() \\ + int partition(const Dom\&, List\_t\&, const ContextMapper\&) \\ + int partition(const Dom\&, List\_t\&) + \end{lists} etex); + boxit.partition[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.ugPartition[0](btex \classname{UniformGridPartition} etex); + boxit.ugPartition[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.tPartition[0](btex \classname{TilePartition} etex); + boxit.tPartition[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.sPartition[0](btex \classname{SpatialPartition} etex); + boxit.sPartition[3]( + btex + \begin{lists} + RefLayout + \end{lists} etex); + boxit.gPartition[0](btex \classname{GridPartition} etex); + boxit.gPartition[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=partition: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + forsuffixes $=gPartition, sPartition, tPartition, ugPartition: + fixsize($[0]); + endfor + forsuffixes $=partition, gPartition, sPartition, tPartition, ugPartition: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + + % Position the UML classes. + partition[0].c = origin; + gPartition[0].sw - sPartition[0].nw = + sPartition[0].sw - tPartition[0].nw = + tPartition[0].sw - ugPartition[0].nw = (0, yUnit); + partition[2].sw - gPartition[0].nw = (0,yUnit); + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=partition: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + forsuffixes $=gPartition, sPartition, tPartition, ugPartition: + for t = 0 upto 0: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=partition, gPartition, sPartition, tPartition, ugPartition: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + + %% Draw the realization lines. + z0 = 0.7[partition[2].sw,partition[2].se]; + drawDiscriminator(z0, 0); + forsuffixes $=gPartition, sPartition, tPartition, ugPartition: + draw $[0].e -- (x0,ypart($[0].e)) dashed evenly; + endfor + draw (x0,ypart(ugPartition[0].e)) -- (z0 - (0,discriminatorLength)) dashed evenly; + + endfig; + + + %% Draw the ContextMapper box. + beginfig(10) + %% Create the boxes. + % Partition + boxit.cMapper[0](btex \classname{ContextMapper} etex); + boxit.cMapper[1](btex etex); + boxit.cMapper[2]( + btex + \begin{lists} + ContextMapper() \\ + void setAffinity(const List\_t\&) + \end{lists} etex); + boxit.cMapper[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.cMapper[4]( + btex \begin{files} + ContextMapper.h + \end{files} etex); + boxit.lMapper[0](btex \classname{LocalMapper} etex); + boxit.lMapper[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.dMapper[0](btex \classname{DistributedMapper} etex); + boxit.dMapper[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.contMapper[0](btex \classname{ContiguousMapper} etex); + boxit.contMapper[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.biMapper[0](btex \classname{BisectionMapper} etex); + boxit.biMapper[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.unifMapper[0](btex \classname{UniformMapper} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=cMapper: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + samewidth(lMapper[0], dMapper[0], contMapper[0], biMapper[0], unifMapper[0]); + forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper: + fixsize($[0]); + endfor + forsuffixes $=cMapper, lMapper, dMapper, contMapper, biMapper: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=cMapper: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + cMapper[0].c = origin; + cMapper[2].ne - 0.5[lMapper[0].w,unifMapper[0].w] = (-2xUnit,0); + lMapper[0].sw - dMapper[0].nw = + dMapper[0].sw - contMapper[0].nw = + contMapper[0].sw - biMapper[0].nw = + biMapper[0].sw - unifMapper[0].nw = (0,yUnit); + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=cMapper: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper: + for t = 0 upto 0: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=cMapper, lMapper, dMapper, contMapper, biMapper: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the implementation files. + forsuffixes $=cMapper: + drawunboxed($[4]); + endfor + + % Draw lines between classes. + drawDiscriminator(cMapper[1].e, 90); + x0 = xpart(0.5[cMapper[1].e,contMapper[0].w]); + y0 = ypart(cMapper[1].e); + draw (cMapper[1].e + (discriminatorLength,0)) -- z0; + forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper: + draw (x0,ypart($[0].w)) -- $[0].w; + endfor + label.top(btex \texttt{<1>} etex, 0.5[(x0,ypart(unifMapper[0].w)),unifMapper[0].w]); + draw (x0,ypart(lMapper[0].w)) -- (x0,ypart(unifMapper[0].w)); + + endfig; + + + %% Draw the LocalMapper box. + beginfig(11) + %% Create the boxes. + % LocalMapper + boxit.lMapper[0](btex \classname{LocalMapper} etex); + boxit.lMapper[1](btex etex); + boxit.lMapper[2]( + btex + \begin{lists} + LocalMapper() \\ + LocalMapper(const Partitioner\&) \\ + void map(const List\_t\&) + \end{lists} etex); + boxit.lMapper[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.lMapper[4]( + btex \begin{files} + ContextMapper.h + \end{files} etex); + % DistributedMapper + boxit.dMapper[0](btex \classname{DistributedMapper} etex); + boxit.dMapper[1](btex etex); + boxit.dMapper[2]( + btex + \begin{lists} + DistributedMapper(const Partitioner\&) \\ + void map(const List\_t\&) + \end{lists} etex); + boxit.dMapper[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.dMapper[4]( + btex \begin{files} + DistributedMapper.h + \end{files} etex); + % ContiguousMapper + boxit.contMapper[0](btex \classname{ContiguousMapper} etex); + boxit.contMapper[1](btex etex); + boxit.contMapper[2]( + btex + \begin{lists} + ContiguousMapper(const Partitioner\&) \\ + ContiguousMapper(const Partitioner\&, const Loc\&) \\ + void map(const List\_t\&) + \end{lists} etex); + boxit.contMapper[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.contMapper[4]( + btex \begin{files} + ContiguousMapper.h + \end{files} etex); + % BisectionMapper + boxit.biMapper[0](btex \classname{BisectionMapper} etex); + boxit.biMapper[1](btex etex); + boxit.biMapper[2]( + btex + \begin{lists} + BisectionMapper(const Loc\&) \\ + BisectionMapper(const Partitioner\&) \\ + BisectionMapper(const Partitioner\&, const Loc\&) \\ + void map(const List\_t\&) + \end{lists} etex); + boxit.biMapper[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.biMapper[4]( + btex \begin{files} + BisectionMapper.h + \end{files} etex); + % UniformMapper + boxit.unifMapper[0](btex \classname{UniformMapper} etex); + boxit.unifMapper[1](btex etex); + boxit.unifMapper[2]( + btex + \begin{lists} + UniformMapper(const Loc<1>\&) \\ + UniformMapper(const Partitioner\&) \\ + UniformMapper(int) \\ + \tilder UniformMapper() \\ + void map(const List\_t\&) + \end{lists} etex); + boxit.unifMapper[3](btex etex); + boxit.unifMapper[4]( + btex \begin{files} + UniformMapper.h + \end{files} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + lMapper[0].c = origin; + lMapper[2].sw - dMapper[0].nw = + dMapper[2].sw - contMapper[0].nw = + contMapper[2].sw - biMapper[0].nw = + biMapper[2].sw - unifMapper[0].nw = + (0,1.5yUnit); + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=lMapper, dMapper, contMapper, biMapper: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the implementation files. + forsuffixes $=lMapper, dMapper, contMapper, biMapper, unifMapper: + drawunboxed($[4]); + endfor + endfig; + + + %% Draw the UniformGridLayout class. + %% Abbreviate: GL = GuardLayers, RT = ReplicatedTag, DT = DistributedTag + beginfig(20) + %% Create the boxes. + % UniformGridLayout + boxit.UGL[0](btex \classname{UniformGridLayout} etex); + boxit.UGL[1](btex etex); + boxit.UGL[2]( + btex + \begin{lists} + UniformGridLayout() \\ + UniformGridLayout(const Interval\&, const DT\&) \\ + UniformGridLayout(const Interval\&, const GL\&, const DT\&) \\ + UniformGridLayout(const Interval\&, const Loc\&, const DT\&) \\ + UniformGridLayout(const Interval\&, const Loc\&, const GL\&, const DT\&) \\ + UniformGridLayout(const Iv\&,const Loc\&,const GL\&,const GL\&,const DT\&) \\ + UniformGridLayout(const Interval\&, const RT\&) \\ + UniformGridLayout(const Interval\&, const GL\&, const RT\&) \\ + UniformGridLayout(const Interval\&, const Loc\&, const RT\&) \\ + UniformGridLayout(const Interval\&, const Loc\&, const GL\&, const RT\&) \\ + UniformGridLayout(const Iv\&,const Loc\&,const GL\&,const GL\&,const RT\&) \\ + UniformGridLayout(const Interval\&, const Partitioner\&, const CM\&) \\ + UniformGridLayout(const Interval\&, const Partitioner\&, const DT\&) \\ + UniformGridLayout(const Interval\&, const Partitioner\&, const RT\&) \\ + UniformGridLayout(const UniformGridLayout\&) \\ + UniformGridLayout\& operator=(const UniformGridLayout\&) \\ + \tilder UniformGridLayout() \\ + void initialize(const Interval\&, const DT\&) \\ + void initialize(const Interval\&, const GL\&, const DT\&) \\ + void initialize(const Interval\&, const Loc\&, const DT\&) \\ + void initialize(const Interval\&, const Loc\&, const GL\&, const DT\&) \\ + void initialize(const Iv\&,const Loc\&,const GL\&,const GL\&,const DT\&) \\ + void initialize(const Interval\&, const RT\&) \\ + void initialize(const Interval\&, const GL\&, const RT\&) \\ + void initialize(const Interval\&, const Loc\&, const RT\&) \\ + void initialize(const Interval\&, const Loc\&, const GL\&, const RT\&) \\ + void initialize(const Iv\&,const Loc\&,const GL\&,const GL\&,const RT\&) \\ + void initialize(const Interval\&, const Partitioner\&, const CM\&) \\ + void initialize(const Interval\&, const Partitioner\&, const DT\&) \\ + void initialize(const Interval\&, const Partitioner\&, const RT\&) \\ + void initialize(const UniformGridLayout\&) \\ + void initialize(const Iv\&,const List\_t\&,const Loc\&,bool,bool,\\ + const GL\&,const GL\&) \\ + void notify(Interval\&, const ObserverEvent\&) \\ + void print(Ostream\&) + \end{lists} etex); + boxit.UGL[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.UGL[4]( + btex \begin{files} + UniformGridLayout.h + \end{files} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=UGL: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + forsuffixes $=UGL: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=UGL: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + UGL[0].c = origin; + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=UGL: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=UGL: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the implementation files. + forsuffixes $=UGL: + drawunboxed($[4]); + endfor + endfig; + + + %% Draw the SparseTileLayout class. + %% Abbreviate: GL = GuardLayers, RT = ReplicatedTag, DT = DistributedTag + beginfig(21) + %% Create the boxes. + % SparseTileLayout + boxit.STL[0](btex \classname{SparseTileLayout} etex); + boxit.STL[1](btex etex); + boxit.STL[2]( + btex + \begin{lists} + SparseTileLayout() \\ + SparseTileLayout(const Interval\&) \\ + SparseTileLayout(const Interval\&, const GL\&) \\ + SparseTileLayout(const Interval\&, const GL\&, const GL\&) \\ + SparseTileLayout(Interval\&, const PatchList\_t\&, const RT\&) \\ + SparseTileLayout(const Iv\&, const GL\&, const PatchList\_t\&, const RT\&) \\ + SpTlLa(const Iv\&, const GL\&, const GL\&, const PatchList\_t\&, const RT\&) \\ + SparseTileLayout(const Interval\&, const Partitioner\&, const RT\&) \\ + SparseTileLayout(Interval\&, const PatchList\_t\&, const DT\&) \\ + SparseTileLayout(const Iv\&, const GL\&, const PatchList\_t\&, const DT\&) \\ + SpTlLa(const Iv\&, const GL\&, const GL\&, const PatchList\_t\&, const DT\&) \\ + SparseTileLayout(const Interval\&, const Partitioner\&, const DT\&) \\ + SparseTileLayout(const Interval\&, const Partitioner\&, const CM\&) \\ + SparseTileLayout(const SparseTileLayout\&) \\ + SparseTileLayout\& operator=(const SparseTileLayout\&) \\ + \tilder SparseTileLayout() \\ + void initialize(const Interval\&) \\ + void initialize(const Interval\&, const GL\&) \\ + void initialize(const Interval\&, const GL\&, const PatchList\_t\&) \\ + void initialize(const Interval\&, const Partitioner\&) \\ + BorderFillIterator\_t beginBorderFillList() \\ + BorderFillIterator\_t endBorderFillList() \\ + void notify(Interval\&, const ObserverEvent\&) \\ + void print(Ostream\&) + \end{lists} etex); + boxit.STL[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.STL[4]( + btex \begin{files} + SparseTileLayout.h + \end{files} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=STL: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + forsuffixes $=STL: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=STL: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + STL[0].c = origin; + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=STL: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=STL: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the implementation files. + forsuffixes $=STL: + drawunboxed($[4]); + endfor + endfig; + + + %% Draw the DomainLayout class. + %% Abbreviate: GL = GuardLayers + beginfig(22) + %% Create the boxes. + % DomainLayout + boxit.DL[0](btex \classname{DomainLayout} etex); + boxit.DL[1](btex etex); + boxit.DL[2]( + btex + \begin{lists} + DomainLayout() \\ + DomainLayout(const Interval\&) \\ + DomainLayout(const Interval\&, const GL\&) \\ + DomainLayout(const Interval\&, const Node\&) \\ + DomainLayout(const DomainLayout\&) \\ + \tilder DomainLayout() \\ + void initialize(const Interval\&) \\ + void initialize(const Interval\&, const GL\&) \\ + void initialize(const DomainLayout\&) \\ + \end{lists} etex); + boxit.DL[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.DL[4]( + btex \begin{files} + DomainLayout.h + \end{files} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=DL: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + forsuffixes $=DL: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=DL: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + DL[0].c = origin; + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=DL: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=DL: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the implementation files. + forsuffixes $=DL: + drawunboxed($[4]); + endfor + endfig; + + + %% Draw the DynamicLayout class. + %% Abbreviate: GL = GuardLayers + beginfig(23) + %% Create the boxes. + % DynamicLayout + boxit.DyL[0](btex \classname{DynamicLayout} etex); + boxit.DyL[1](btex etex); + boxit.DyL[2]( + btex + \begin{lists} + DynamicLayout() \\ + DynamicLayout(const Interval<1>\&) \\ + DynamicLayout(const Interval<1>\&, int) \\ + DynamicLayout(const Grid<1>\&) \\ + DynamicLayout(const Interval<1>\&, const Partitioner\&) \\ + DynamicLayout(const Interval<1>\&, const Partitioner\&, const CM<1>\&) \\ + DynamicLayout(const DynamicLayout\&) \\ + DynamicLayout\& operator=(const DynamicLayout\&) \\ + \tilder DynamicLayout() \\ + void initialize(const Interval<1>\&) \\ + void initialize(const Interval<1>\&, const Grid<1>\&) \\ + void initialize(const Grid<1>\&) \\ + void initialize(const Interval<1>\&, const Partitioner\&) \\ + void initialize(const Interval<1>\&, const Partitioner\&, const CM<1>\&) \\ + void initialize(const Interval<1>\&, const List\_t\&) \\ + void print(Ostream\&) + \end{lists} etex); + boxit.DyL[4]( + btex \begin{files} + DynamicLayout.h + \end{files} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=DyL: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + % Position the implementation files boxes. + forsuffixes $=DyL: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + DyL[0].c = origin; + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=DyL: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the implementation files. + forsuffixes $=DyL: + drawunboxed($[4]); + endfor + endfig; + + + %% Draw the GridLayout class. + %% Abbreviate: GL = GuardLayers + beginfig(24) + %% Create the boxes. + % GridLayout + boxit.GrL[0](btex \classname{GridLayout} etex); + boxit.GrL[1](btex etex); + boxit.GrL[2]( + btex + \begin{lists} + GridLayout() \\ + GridLayout(const Interval\&, const DT\&) \\ + GridLayout(const Interval\&, const GL\&, const DT\&) \\ + GridLayout(const Interval\&, const Loc\&, const DT\&) \\ + GridLayout(const Interval\&, const Loc\&, const GL\&, const DT\&) \\ + GridLayout(const Iv\&, const Loc\&, const GL\&, const GL\&, const DT\&) \\ + GridLayout(const Interval\&, const Partitioner\&, const DT\&) \\ + GridLayout(const Grid\&, const DT\&) \\ + GridLayout(const Grid\&, const GL\&, const DT\&) \\ + GridLayout(const Grid\&, const GL\&, const GL\&, const DT\&) \\ + GridLayout(const Interval\&, const RT\&) \\ + GridLayout(const Interval\&, const GL\&, const RT\&) \\ + GridLayout(const Interval\&, const Loc\&, const RT\&) \\ + GridLayout(const Interval\&, const Loc\&, const GL\&, const RT\&) \\ + GridLayout(const Iv\&, const Loc\&, const GL\&, const GL\&, const RT\&) \\ + GridLayout(const Interval\&, const Partitioner\&, const RT\&) \\ + GridLayout(const Grid\&, const RT\&) \\ + GridLayout(const Grid\&, const GL\&, const RT\&) \\ + GridLayout(const Grid\&, const GL\&, const GL\&, const RT\&) \\ + GridLayout(const Interval\&, const Partitioner\&, const ContextMapper\&) \\ + GridLayout(const GridLayout\&) \\ + GridLayout\& operator=(const GridLayout\&) \\ + \tilder GridLayout() \\ + void initialize(const Interval\&, const DT\&) \\ + void initialize(const Interval\&, const GL\&, const DT\&) \\ + void initialize(const Interval\&, const Loc\&, const DT\&) \\ + void initialize(const Interval\&, const Loc\&, const GL\&, const DT\&) \\ + void initialize(const Iv\&,const Loc\&,const GL\&,const GL\&,const DT\&) \\ + void initialize(const Interval\&, const Partitioner\&, const DT\&) \\ + void initialize(const Grid\&, const DT\&) \\ + void initialize(const Grid\&, const GL\&, const DT\&) \\ + void initialize(const Grid\&, const GL\&, const GL\&, const DT\&) \\ + void initialize(const Interval\&, const RT\&) \\ + void initialize(const Interval\&, const GL\&, const RT\&) \\ + void initialize(const Interval\&, const Loc\&, const RT\&) \\ + void initialize(const Interval\&, const Loc\&, const GL\&, const RT\&) \\ + void initialize(const Iv\&,const Loc\&,const GL\&,const GL\&,const RT\&) \\ + void initialize(const Interval\&, const Partitioner\&, const RT\&) \\ + void initialize(const Grid\&, const RT\&) \\ + void initialize(const Grid\&, const GL\&, const RT\&) \\ + void initialize(const Grid\&, const GL\&, const GL\&, const RT\&) \\ + void initialize(const Interval\&, const Partitioner\&, const CM\&) \\ + void initialize(const Iv\&,const List\_t\&,const Loc\&,bool,bool,\\ + const GL\&,const GL\&) \\ + void print(Ostream\&) + \end{lists} etex); + boxit.GrL[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.GrL[4]( + btex \begin{files} + GridLayout.h + \end{files} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=GrL: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + forsuffixes $=GrL: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=GrL: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + GrL[0].c = origin; + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=GrL: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=GrL: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the implementation files. + forsuffixes $=GrL: + drawunboxed($[4]); + endfor + endfig; + + + %% Draw the GuardLayers class. + %% Abbreviate: GL = GuardLayers + beginfig(30) + %% Create the boxes. + % GuardLayers + boxit.GL[0](btex \classname{GuardLayers} etex); + boxit.GL[1](btex etex); + boxit.GL[2]( + btex + \begin{lists} + GuardLayers() \\ + GuardLayers(int) \\ + GuardLayers(int, int) \\ + GuardLayers(const Loc\&, const Loc\&) \\ + void initialize(const Loc\&, const Loc\&) \\ + void initialize(const GuardLayers\&) \\ + int lower(int) \\ + int upper(int) \\ + int\& lower(int) \\ + int\& upper(int) \\ + bool operator==(const GuardLayers\&) \\ + bool operator==(int) \\ + bool operator!=(const GuardLayers\&) \\ + bool operator!=(int) \\ + GuardLayers operator-(const GuardLayers\&) \\ + GuardLayers operator-(int) \\ + static void addGuardLayers(Interval\&, const GuardLayers\&) \\ + Interval addGuardLayersToDomain(const Interval\&) \\ + void print(Ostream\&) + \end{lists} etex); + boxit.GL[3]( + btex + \begin{lists} + dim D + \end{lists} etex); + boxit.GL[4]( + btex \begin{files} + GuardLayers.h + \end{files} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=GL: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + forsuffixes $=GL: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=GL: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + GL[0].c = origin; + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=GL: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=GL: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the implementation files. + forsuffixes $=GL: + drawunboxed($[4]); + endfor + endfig; + + + bye Index: figures/domain-uml-1.png =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/domain-uml-1.png,v retrieving revision 1.1 diff -c -p -r1.1 domain-uml-1.png Binary files /tmp/cvshUnqvW and domain-uml-1.png differ Index: figures/domain-uml.mp =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/domain-uml.mp,v retrieving revision 1.1 diff -c -p -r1.1 domain-uml.mp *** figures/domain-uml.mp 2002/02/27 03:51:54 1.1 --- figures/domain-uml.mp 2002/03/04 22:51:06 *************** beginfig(1) *** 145,151 **** boxit.grid[4]( btex \begin{files} Grid.h \\ ! DomainTraits.Grid.h \end{files} etex); % Grid<1> --- 145,152 ---- boxit.grid[4]( btex \begin{files} Grid.h \\ ! Domain-\\ ! Traits.Grid.h \end{files} etex); % Grid<1> *************** beginfig(1) *** 222,228 **** draw $[0].n -- ($[0].n+(0,foo)); endfor draw loc[0].n+(0,foo) -- grid[0].n+(0,foo); ! z0 = domain[2].s - (0,discriminatorScale); draw z0 -- (x0, ypart(loc[0].n+(0,foo))); endfig; --- 223,229 ---- draw $[0].n -- ($[0].n+(0,foo)); endfor draw loc[0].n+(0,foo) -- grid[0].n+(0,foo); ! z0 = domain[2].s - (0,discriminatorLength); draw z0 -- (x0, ypart(loc[0].n+(0,foo))); endfig; Index: figures/engine-uml-1.png =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/engine-uml-1.png,v retrieving revision 1.1 diff -c -p -r1.1 engine-uml-1.png Binary files /tmp/cvs5QiAX4 and engine-uml-1.png differ Index: figures/engine-uml.mp =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/engine-uml.mp,v retrieving revision 1.1 diff -c -p -r1.1 engine-uml.mp *** figures/engine-uml.mp 2002/02/27 03:51:54 1.1 --- figures/engine-uml.mp 2002/03/04 22:51:09 *************** beginfig(1) *** 72,78 **** taggedEngineTemplates = btex \begin{lists} dim D \\ ! val type T \end{lists} etex; boxit.brick[3](taggedEngineTemplates); --- 72,78 ---- taggedEngineTemplates = btex \begin{lists} dim D \\ ! value type T \end{lists} etex; boxit.brick[3](taggedEngineTemplates); *************** beginfig(1) *** 120,126 **** \end{lists} etex); boxit.dynamic[3]( btex \begin{lists} ! val type T \end{lists} etex); boxit.dynamic[4]( btex \begin{files} --- 120,126 ---- \end{lists} etex); boxit.dynamic[3]( btex \begin{lists} ! value type T \end{lists} etex); boxit.dynamic[4]( btex \begin{files} *************** beginfig(1) *** 147,155 **** boxit.multipatch[3]( btex \begin{lists} dim D \\ ! val type T \\ ! layout LT \\ ! patch PT \end{lists} etex); boxit.multipatch[4]( btex \begin{files} --- 147,155 ---- boxit.multipatch[3]( btex \begin{lists} dim D \\ ! value type T \\ ! layout tag LT \\ ! patch tag PT \end{lists} etex); boxit.multipatch[4]( btex \begin{files} *************** beginfig(1) *** 238,260 **** endfor % Position the UML classes. ! engine[0].c = origin; ! xpart(brick[0].w) = xpart(dynamic[0].w); ! xpart(compressiblebrick[3].e) = xpart(multipatch[3].e); ! ypart(brick[0].n - compressiblebrick[0].n) = 0; ! ypart(dynamic[0].n - multipatch[0].n) = 0; ! ypart(compressiblebrick[0].s - multipatch[3].n) = ! ypart(remote[0].s - remotedynamic[3].n) = ! ypart(dynamic[0].s - remote[3].n) = yUnit; ! numeric leftColumn; ! leftColumn = max(xpart(brick[3].e),xpart(dynamic[3].e)); ! numeric rightColumn; ! rightColumn = min(xpart(compressiblebrick[0].w),xpart(multipatch[0].w)); ! rightColumn - leftColumn = xUnit; ! xpart(remote[0].n) = xpart(remotedynamic[0].n) = 0.5[leftColumn,rightColumn]; ! xpart(engine[2].s) = 0.5[leftColumn,rightColumn]; ! ypart(engine[2].s) = yUnit + max(ypart(brick[3].n),ypart(compressiblebrick[3].n)); ! %% Draw the boxes. % Draw the UML class boxes. forsuffixes $=engine: --- 238,260 ---- endfor % Position the UML classes. ! numeric vertSep; vertSep = 0.4yUnit; ! xpart(brick[0].sw - compressiblebrick[0].nw) = 0; ! ypart(brick[0].sw - compressiblebrick[3].nw) = vertSep; ! xpart(compressiblebrick[0].sw - dynamic[0].nw) = 0; ! ypart(compressiblebrick[0].sw - dynamic[3].nw) = vertSep; ! xpart(dynamic[0].sw - multipatch[0].nw) = 0; ! ypart(dynamic[0].sw - multipatch[3].nw) = vertSep; ! xpart(multipatch[0].sw - remote[0].nw) = 0; ! ypart(multipatch[0].sw - remote[3].nw) = vertSep; ! xpart(remote[0].sw - remotedynamic[0].nw) = 0; ! ypart(remote[0].sw - remotedynamic[3].nw) = vertSep; ! y0 = ypart(brick[3].n); ! x0 = xUnit + max(xpart(brick[3].e), xpart(compressiblebrick[3].e), ! xpart(dynamic[3].e), xpart(multipatch[3].e), ! xpart(remote[3].e), xpart(remotedynamic[3].e)); ! engine[2].se = z0; ! %% Draw the boxes. % Draw the UML class boxes. forsuffixes $=engine: *************** beginfig(1) *** 279,295 **** endfor % Draw arrows between classes. drawarrow (xpart(remote[0].s), ypart(remotedynamic[0].n)) -- remote[0].s dashed evenly; - numeric middleColumn; middleColumn = 0.5[leftColumn,rightColumn]; - drawarrow multipatch[0].w -- (middleColumn,ypart(multipatch[0].w)) dashed evenly; - drawarrow dynamic[0].e -- (middleColumn, ypart(dynamic[0].e)) dashed evenly; - drawarrow compressiblebrick[0].w -- (middleColumn,ypart(compressiblebrick[0].w)) dashed evenly; - drawarrow brick[0].e -- (middleColumn, ypart(brick[0].e)) dashed evenly; - draw compressiblebrick[0].w -- brick[0].e dashed evenly; - drawarrow (middleColumn,ypart(multipatch[0].w)) -- engine[2].s - dashed evenly; - draw remote[0].n .. (middleColumn,ypart(multipatch[0].w)) dashed evenly; - endfig; --- 279,289 ---- endfor % Draw arrows between classes. + forsuffixes $=brick, compressiblebrick, dynamic, multipatch, remote: + draw $[0].e -- (x0, ypart($[0].e)) dashed evenly; + endfor + drawarrow (x0, ypart(remote[0].e)) -- z0 dashed evenly; drawarrow (xpart(remote[0].s), ypart(remotedynamic[0].n)) -- remote[0].s dashed evenly; endfig; Index: figures/explanation-uml-1.png =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/explanation-uml-1.png,v retrieving revision 1.1 diff -c -p -r1.1 explanation-uml-1.png Binary files /tmp/cvsxE8ome and explanation-uml-1.png differ Index: figures/explanation-uml.mp =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/explanation-uml.mp,v retrieving revision 1.1 diff -c -p -r1.1 explanation-uml.mp *** figures/explanation-uml.mp 2002/02/27 03:51:54 1.1 --- figures/explanation-uml.mp 2002/03/04 22:51:09 *************** beginfig(1) *** 79,85 **** % Loc boxit.loc[0](btex \classname{Classname2} etex); boxit.loc[1](btex \emptyBox{Interval<1>} etex); ! boxit.loc[2](btex etex); boxit.loc[3]( btex \begin{lists} template parameter T --- 79,88 ---- % Loc boxit.loc[0](btex \classname{Classname2} etex); boxit.loc[1](btex \emptyBox{Interval<1>} etex); ! boxit.loc[2]( ! btex \begin{lists} ! void foo(const X[1-3]\&) ! \end{lists} etex); boxit.loc[3]( btex \begin{lists} template parameter T *************** beginfig(1) *** 220,226 **** forsuffixes $=loc: draw $[0].n -- ($[0].n+(0,foo)); endfor ! z0 = domain[2].s - (0,discriminatorScale); draw z0 -- (x0, ypart(loc[0].n+(0,foo))); % Add explanatory labels. --- 223,229 ---- forsuffixes $=loc: draw $[0].n -- ($[0].n+(0,foo)); endfor ! z0 = domain[2].s - (0,discriminatorLength); draw z0 -- (x0, ypart(loc[0].n+(0,foo))); % Add explanatory labels. *************** beginfig(1) *** 228,237 **** domain[1].e); label.rt(btex Public member functions, if any, are listed here. etex, domain[2].e); ! label.rt(btex This class adds no new public member functions. etex, loc[2].e); ! label.lrt(btex Template parameters are listed in dashed boxes. etex, ! 0.4[loc[3].sw,loc[3].s]); label.rt(btex Files implementing the class etex, loc[4].e); label.rt(btex A dashed arrow indicates an instantiated class. etex, 0.7[loc[2].s,locOne[0].n]); --- 231,240 ---- domain[1].e); label.rt(btex Public member functions, if any, are listed here. etex, domain[2].e); ! label.rt(btex This class adds one new public member function. etex, loc[2].e); ! label.lrt(btex Template parameters occur in dashed boxes. etex, ! 0.8[loc[3].sw,loc[3].s]); label.rt(btex Files implementing the class etex, loc[4].e); label.rt(btex A dashed arrow indicates an instantiated class. etex, 0.7[loc[2].s,locOne[0].n]); Index: figures/field-uml-1.png =================================================================== RCS file: field-uml-1.png diff -N field-uml-1.png Binary files /dev/null and field-uml-1.png differ Index: figures/field-uml-10.png =================================================================== RCS file: field-uml-10.png diff -N field-uml-10.png Binary files /dev/null and field-uml-10.png differ Index: figures/field-uml-11.png =================================================================== RCS file: field-uml-11.png diff -N field-uml-11.png Binary files /dev/null and field-uml-11.png differ Index: figures/field-uml-2.png =================================================================== RCS file: field-uml-2.png diff -N field-uml-2.png Binary files /dev/null and field-uml-2.png differ Index: figures/field-uml-3.png =================================================================== RCS file: field-uml-3.png diff -N field-uml-3.png Binary files /dev/null and field-uml-3.png differ Index: figures/field-uml.mp =================================================================== RCS file: field-uml.mp diff -N field-uml.mp *** /dev/null Fri Mar 23 21:37:44 2001 --- field-uml.mp Mon Mar 4 15:51:12 2002 *************** *** 0 **** --- 1,570 ---- + %% Oldham, Jeffrey D. + %% 2002Feb28 + %% POOMA + + %% UML Diagrams of Field Classes + + + %% Assumes TEX=latex. + + %% Ensure fonts are included in the output. + prologues := 2; % >= 2 for PostScript + + input boxes; + input box-macros; + input uml; + + verbatimtex + \documentclass[10pt]{article} + \usepackage{amsmath} + \input{macros.ltx} + \usepackage{times} + \usepackage{mathptm} + \newlength{\cnw} % Required to use \classnameWidth and \emptyBox + \begin{document} + etex + + + %% Draw the NoMesh box. + beginfig(1) + %% Create the boxes. + % NoMesh + boxit.nomesh[0](btex \classname{NoMesh} etex); + boxit.nomesh[1](btex etex); + boxit.nomesh[2]( + btex + \begin{lists} + NoMesh() \\ + NoMesh(const Layout\&) \\ + NoMesh(const NoMesh\&) \\ + NoMesh(const NoMesh\&, const Interval\&) \\ + NoMesh(const NoMesh\&, const INode\&) \\ + NoMesh(const NoMesh\&, const FieldEnginePatch\&) \\ + NoMesh(const Mesh\&, const Dom\&) \\ + NoMesh\& operator=(const NoMesh\&) \\ + \tilder NoMesh() \\ + Interval\& physicalVertexDomain() \\ + Interval\& physicalCellDomain() \\ + Interval\& totalVertexDomain() \\ + Interval\& totalCellDomain() + \end{lists} etex); + boxit.nomesh[3]( + btex + \begin{lists} + dimension D + \end{lists} etex); + boxit.nomesh[4]( + btex \begin{files} + NoMesh.h + \end{files} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=nomesh: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + forsuffixes $=nomesh: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=nomesh: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + nomesh[0].c = origin; + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=nomesh: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=nomesh: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the implementation files. + forsuffixes $=nomesh: + drawunboxed($[4]); + endfor + endfig; + + + %% Draw the UniformRectilinearMesh box. + beginfig(2) + %% Create the boxes. + % UniformRectilinearMesh + boxit.urm[0](btex \classname{UniformRectilinearMesh} etex); + boxit.urm[1](btex etex); + boxit.urm[2]( + btex + \begin{lists} + UniformRectilinearMesh() \\ + UniformRectilinearMesh(const Layout\&) \\ + UniformRectilinearMesh(const Layout\&, const Vector\&, const Vector\&) \\ + UniformRectilinearMesh(const UniformRectilinearMesh\&) \\ + UniformRectilinearMesh(const URM\&, const Interval\&) \\ + UniformRectilinearMesh(const UniformRectilinearMesh\&, const INode\&) \\ + UniformRectilinearMesh(const URM\&, const FieldEnginePatch\&) \\ + UniformRectilinearMesh(const Mesh\&, const Dom\&) \\ + UniformRectilinearMesh\& operator=(const UniformRectilinearMesh\&) \\ + \tilder UniformRectilinearMesh() \\ + const Interval\& physicalVertexDomain() \\ + const Interval\& physicalCellDomain() \\ + const Interval\& totalVertexDomain() \\ + const Interval\& totalCellDomain() \\ + const Vector\& spacings() \\ + const Vector\& origin() \\ + const Vector\& cellContaining(const Vector\&) \\ + const Vector\& vertexPosition(const Loc\&) \\ + void initializePositions(Engine\&, const Centering\&) \\ + void initializeNormals(Engine\&, const Centering\&) \\ + void initializeNormals(Engine\&, const Centering\&, bool) \\ + void initializeCellVolumes(Engine\&, const Centering\&) \\ + void initializeFaceAreas(Engine\&, const Centering\&) \\ + void initializeEdgeLengths(Engine\&, const Centering\&) + \end{lists} etex); + boxit.urm[3]( + btex + \begin{lists} + dim D \\ + value T + \end{lists} etex); + boxit.urm[4]( + btex \begin{files} + UniformRectilinearMesh.h + \end{files} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=urm: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + forsuffixes $=urm: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=urm: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + urm[0].c = origin; + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=urm: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=urm: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the implementation files. + forsuffixes $=urm: + drawunboxed($[4]); + endfor + endfig; + + + %% Draw the conceptual Mesh box. + beginfig(3) + %% Create the boxes. + % Mesh + boxit.mesh[0](btex \classname{\emph{Mesh}} etex); + boxit.mesh[1](btex etex); + boxit.mesh[2]( + btex + \begin{lists} + Mesh() \\ + Mesh(const Layout\&) \\ + Mesh(const Mesh\&) \\ + Mesh(const Mesh\&, const Dom\&) \\ + Mesh\& operator=(const Mesh\&) \\ + \tilder Mesh() \\ + Interval\& physicalVertexDomain() \\ + Interval\& physicalCellDomain() \\ + Interval\& totalVertexDomain() \\ + Interval\& totalCellDomain() + \end{lists} etex); + boxit.mesh[3]( + btex + \begin{lists} + dimension D + \end{lists} etex); + boxit.mesh[4](btex etex); + + % NoMesh + boxit.nomesh[0](btex \classname{NoMesh} etex); + boxit.nomesh[1](btex etex); + boxit.nomesh[2]( + btex + \begin{lists} + NoMesh() \\ + NoMesh(const Layout\&) \\ + NoMesh(const NoMesh\&) \\ + NoMesh(const NoMesh\&, const Interval\&) \\ + NoMesh(const NoMesh\&, const INode\&) \\ + NoMesh(const NoMesh\&, const FieldEnginePatch\&) \\ + NoMesh(const Mesh\&, const Dom\&) \\ + NoMesh\& operator=(const NoMesh\&) \\ + \tilder NoMesh() \\ + Interval\& physicalVertexDomain() \\ + Interval\& physicalCellDomain() \\ + Interval\& totalVertexDomain() \\ + Interval\& totalCellDomain() + \end{lists} etex); + boxit.nomesh[3]( + btex + \begin{lists} + dimension D + \end{lists} etex); + boxit.nomesh[4]( + btex \begin{files} + NoMesh.h + \end{files} etex); + + % UniformRectilinearMesh + boxit.urm[0](btex \classname{UniformRectilinearMesh} etex); + boxit.urm[1](btex etex); + boxit.urm[2]( + btex + \begin{lists} + UniformRectilinearMesh() \\ + UniformRectilinearMesh(const Layout\&) \\ + UniformRectilinearMesh(const Layout\&, const Vector\&, const Vector\&) \\ + UniformRectilinearMesh(const UniformRectilinearMesh\&) \\ + UniformRectilinearMesh(const UniformRectilinearMesh\&, const Interval\&) \\ + UniformRectilinearMesh(const UniformRectilinearMesh\&, const INode\&) \\ + UniformRectilinearMesh(const UniformRectilinearMesh\&, const FieldEnginePatch\&) \\ + UniformRectilinearMesh(const Mesh\&, const Dom\&) \\ + UniformRectilinearMesh\& operator=(const UniformRectilinearMesh\&) \\ + \tilder UniformRectilinearMesh() \\ + const Interval\& physicalVertexDomain() \\ + const Interval\& physicalCellDomain() \\ + const Interval\& totalVertexDomain() \\ + const Interval\& totalCellDomain() \\ + const Vector\& spacings() \\ + const Vector\& origin() \\ + const Vector\& cellContaining(const Vector\&) \\ + const Vector\& vertexPosition(const Loc\&) \\ + void initializePositions(Engine\&, const Centering\&) \\ + void initializeNormals(Engine\&, const Centering\&) \\ + void initializeNormals(Engine\&, const Centering\&, bool) \\ + void initializeCellVolumes(Engine\&, const Centering\&) \\ + void initializeFaceAreas(Engine\&, const Centering\&) \\ + void initializeEdgeLengths(Engine\&, const Centering\&) + \end{lists} etex); + boxit.urm[3]( + btex + \begin{lists} + dimension D \\ + value type T + \end{lists} etex); + boxit.urm[4]( + btex \begin{files} + UniformRectilinearMesh.h + \end{files} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=mesh: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + forsuffixes $=nomesh, urm: + fixsize($[0]); + endfor + forsuffixes $=mesh, nomesh, urm: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + + % Position the UML classes. + nomesh[0].sw - urm[0].nw = (0, yUnit); + mesh[2].s - nomesh[0].nw = (0,yUnit); + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=mesh: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + forsuffixes $=nomesh, urm: + for t = 0 upto 0: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=mesh, nomesh, urm: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + %% Draw the realization lines. + z0 = 0.2[mesh[2].sw,mesh[2].se]; + drawDiscriminator(z0, 0); + forsuffixes $=nomesh, urm: + draw $[0].w -- (x0,ypart($[0].w)) dashed evenly; + endfor + draw (x0,ypart(urm[0].w)) -- (z0 - (0,discriminatorLength)) dashed evenly; + + %% HERE + + endfig; + + + %% Draw the Field box. + beginfig(10) + %% Create the boxes. + % Field + boxit.field[0](btex \classname{Field} etex); + boxit.field[1](btex etex); + boxit.field[2]( + btex + \begin{lists} + Field() \\ + Field(const X\&) \\ + Field(const Centering\&, const Layout\&, const M\&) \\ + Field(int, const Centering\&, const Layout\&, const M\&)\\ + Field(const Centering\&, const Layout\&, const X1\&, const X2\&)\\ + Field(const Centering\&, const Layout\&) \\ + Field(int, const Centering\&, const Layout\&, const X1\&, const X2\&) \\ + Field(const Field\&) \\ + void initialize(const Centering\&, const Layout\&, const M\&) \\ + void initialize(int, const Centering\&, const Layout\&, const M\&)\\ + void initialize(const Centering\&, const Layout\&) \\ + void initialize(const Field\&) \\ + \tilder Field() \\ + const Engine\& engine() \\ + Engine\& engine() \\ + const FieldEngine\& fieldEngine() \\ + FieldEngine\& fieldEngine() \\ + int numSubFields() \\ + const Centering\& centering() \\ + const Centering centering(int) \\ + int centeringSize() \\ + int numMaterials() \\ + const Domain physicalCellDomain() \\ + Domain totalCellDomain() \\ + Domain physicalDomain(int) \\ + Domain totalDomain(int) \\ + Domain physicalDomain() \\ + Domain totalDomain() \\ + Domain domain() \\ + const Mesh\& mesh() \\ + Layout layout() \\ + Field\& operator=(const Field\&) \\ + const Field\& operator=(const Field\&) \\ + const Field\& operator=(const X\&) \\ + const Field\& operator+=(const X\&) \\ + const Field\& operator-=(const X\&) \\ + const Field\& operator*=(const X\&) \\ + const Field\& operator/=(const X\&) \\ + const Field\& operator\%=(const X\&) \\ + const Field\& operator|=(const X\&) \\ + const Field\& operator\&=(const X\&) \\ + const Field\& operator\^=(const X\&) \\ + const Field\& operator<<=(const X\&) \\ + const Field\& operator>>=(const X\&) \\ + void addRelation(RelationListItem*) \\ + void removeRelations() \\ + void applyRelations() \\ + void applyRelations(bool) \\ + void setDirty() \\ + void clearDirty() + \end{lists} etex); + boxit.field[3]( + btex + \begin{lists} + mesh M \\ + value type T \\ + engine type E + \end{lists} etex); + boxit.field[4]( + btex \begin{files} + Field.h \\ + PrintField.h + \end{files} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=field: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + forsuffixes $=field: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=field: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + field[0].c = origin; + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=field: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=field: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the implementation files. + forsuffixes $=field: + drawunboxed($[4]); + endfor + endfig; + + + %% Draw the Centering box. + beginfig(11) + %% Create the boxes. + % Centering + boxit.centering[0](btex \classname{Centering} etex); + boxit.centering[1](btex etex); + boxit.centering[2]( + btex + \begin{lists} + Centering() \\ + Centering(CenteringType) \\ + Centering(CenteringType, ContinuityType) \\ + Centering(CenteringType, ContinuityType,\\ + const Orientations\&, const Positions\&) \\ + \tilder Centering() \\ + const CenteringType\¢eringType() \\ + bool discontinuous() \\ + bool continuous() \\ + const Orientations\& orientations() \\ + const Positions\& positions() \\ + const Orientation\& orientation(int) \\ + const Position\& position(int) \\ + int size() \\ + void addValue(const Orientation\&, const Position\&) \\ + \end{lists} etex); + boxit.centering[3]( + btex + \begin{lists} + dimension D + \end{lists} etex); + boxit.centering[4]( + btex \begin{files} + FieldCentering.h + \end{files} etex); + + % CanonicalCentering + boxit.ccentering[0](btex \classname{CanonicalCentering} etex); + boxit.ccentering[1](btex etex); + boxit.ccentering[2]( + btex + \begin{lists} + CanonicalCentering() \\ + \tilder CanonicalCentering() \\ + Centering operator()(const CenteringType, ContinuityType) \\ + Centering operator()(const CenteringType, ContinuityType, int) \\ + \end{lists} etex); + boxit.ccentering[3]( + btex + \begin{lists} + dimension D + \end{lists} etex); + boxit.ccentering[4]( + btex \begin{files} + FieldCentering.h + \end{files} etex); + + %% Position the boxes. + % Position the template parameters. + forsuffixes $=centering, ccentering: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + forsuffixes $=centering, ccentering: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=centering, ccentering: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + centering[0].c = origin; + centering[2].sw - ccentering[0].nw = (0,2yUnit); + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=centering, ccentering: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=centering, ccentering: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the implementation files. + forsuffixes $=centering, ccentering: + drawunboxed($[4]); + endfor + endfig; + + + bye Index: figures/introduction.mp =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/introduction.mp,v retrieving revision 1.5 diff -c -p -r1.5 introduction.mp *** figures/introduction.mp 2002/01/31 21:29:58 1.5 --- figures/introduction.mp 2002/03/04 22:51:12 *************** beginfig(101) *** 48,54 **** boxit.b8(btex etex); nuBoxes = 8; boxit.b9(btex \textsl{implementation} etex); - %%TMP sameWidthSameHeight(b3,b4,b5,b6,b7,b8); sameWidthSameHeight(b3,b6); sameWidthSameHeight(b4,b7); sameWidthSameHeight(b5,b8); --- 48,53 ---- Index: figures/macros.ltx =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/macros.ltx,v retrieving revision 1.5 diff -c -p -r1.5 macros.ltx *** figures/macros.ltx 2002/02/27 03:51:54 1.5 --- figures/macros.ltx 2002/03/04 22:51:12 *************** *** 43,48 **** --- 43,53 ---- \newcommand{\avoidFi}{F\mbox{}i}% % Avoid a problem with dvitomp and ligatures. + \newcommand{\tilder}{\ensuremath{\tilde{}}\,}% + % Produce a tilde. + % We use math mode to avoid the fact that ordinary times does + % not have a tilde. + %% UML Macros. % Produce a class's name, presumbly at the top of a UML class box. Index: figures/math-objs-uml-1.png =================================================================== RCS file: math-objs-uml-1.png diff -N math-objs-uml-1.png Binary files /dev/null and math-objs-uml-1.png differ Index: figures/math-objs-uml-10.png =================================================================== RCS file: math-objs-uml-10.png diff -N math-objs-uml-10.png Binary files /dev/null and math-objs-uml-10.png differ Index: figures/math-objs-uml-11.png =================================================================== RCS file: math-objs-uml-11.png diff -N math-objs-uml-11.png Binary files /dev/null and math-objs-uml-11.png differ Index: figures/math-objs-uml-2.png =================================================================== RCS file: math-objs-uml-2.png diff -N math-objs-uml-2.png Binary files /dev/null and math-objs-uml-2.png differ Index: figures/math-objs-uml-3.png =================================================================== RCS file: math-objs-uml-3.png diff -N math-objs-uml-3.png Binary files /dev/null and math-objs-uml-3.png differ Index: figures/math-objs-uml-4.png =================================================================== RCS file: math-objs-uml-4.png diff -N math-objs-uml-4.png Binary files /dev/null and math-objs-uml-4.png differ Index: figures/math-objs-uml.mp =================================================================== RCS file: math-objs-uml.mp diff -N math-objs-uml.mp *** /dev/null Fri Mar 23 21:37:44 2001 --- math-objs-uml.mp Mon Mar 4 15:51:16 2002 *************** *** 0 **** --- 1,1174 ---- + %% Oldham, Jeffrey D. + %% 2002Feb27 + %% POOMA + + %% UML Diagrams for Vectors, Matrices, Tensors + + + %% Assumes TEX=latex. + + %% Ensure fonts are included in the output. + prologues := 2; % >= 2 for PostScript + + input boxes; + input box-macros; + input uml; + + verbatimtex + \documentclass[10pt]{article} + \usepackage{amsmath} + \input{macros.ltx} + \usepackage{times} + \usepackage{mathptm} + \newlength{\cnw} % Required to use \classnameWidth and \emptyBox + \begin{document} + etex + + + %% Vectors and their engines + beginfig(1) + %% Create the boxes. + % Vector + boxit.vector[0](btex \classname{Vector} etex); + boxit.vector[1](btex etex); + boxit.vector[2]( + btex \begin{lists} + Vector() \\ + Vector(const Vector\&) \\ + Vector(const X\&) \\ + Vector(const X1\&,const X2\&) \\ + Vector(const X1\&,const X2\&,const X3\&) \\ + Vector(const X1\&,const X2\&,const X3\&,const X4\&) \\ + \tilder Vector() \\ + Vector\& operator=(const Vector\&) \\ + Vector\& operator=(const X\&) \\ + const T\& operator()(int) \\ + T\& operator()(int) \\ + const Engine\& engine() \\ + Engine\& engine() \\ + void print(Out\&) + \end{lists} etex); + boxit.vector[3]( + btex + \begin{lists} + dimension D \\ + value type T \\ + engine type E + \end{lists} etex); + boxit.vector[4]( + btex \begin{files} + Vector.h + \end{files} etex); + + % VectorEngine + boxit.vectorEngine[0](btex \classname{VectorEngine} etex); + boxit.vectorEngine[1](btex etex); + boxit.vectorEngine[2](btex etex); + boxit.vectorEngine[3]( + btex + \begin{lists} + dimension D \\ + value type T \\ + engine type E + \end{lists} etex); + boxit.vectorEngine[4]( + btex \begin{files} + VectorEngine.h + \end{files} etex); + + % VectorEngine + boxit.vectorEngineFull[0](btex \classname{VectorEngine} etex); + boxit.vectorEngineFull[1](btex etex); + boxit.vectorEngineFull[2]( + btex \begin{lists} + VectorEngine() \\ + VectorEngine(const VectorEngine\&) \\ + VectorEngine(const X\&) \\ + VectorEngine(const X1\&,const X2\&) \\ + VectorEngine(const X1\&,const X2\&,const X3\&) \\ + VectorEngine(const X1\&,const X2\&,const X3\&,const X4\&) \\ + \tilder VectorEngine() \\ + VectorEngine\& operator=(const VectorEngine\&) \\ + VectorEngine\& operator=(const X\&) \\ + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.vectorEngineFull[3]( + btex + \begin{lists} + dimension D \\ + value type T + \end{lists} etex); + boxit.vectorEngineFull[4]( + btex \begin{files} + Vector.h + \end{files} etex); + + %% Position the boxes. + % Position the boxes within the UML class diagrams. + forsuffixes $=vector, vectorEngine, vectorEngineFull: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + % Position the template parameters. + forsuffixes $=vector, vectorEngine, vectorEngineFull: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=vector, vectorEngine, vectorEngineFull: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + vector[0].c = origin; + vector[2].s - vectorEngine[0].n = (0, 3yUnit); + vectorEngine[2].s - vectorEngineFull[0].n = (0, yUnit); + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=vector, vectorEngine, vectorEngineFull: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=vector, vectorEngine, vectorEngineFull: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the file names. + forsuffixes $=vector, vectorEngine, vectorEngineFull: + drawunboxed($[4]); + endfor + + % Draw arrows between classes. + + % Draw lines between classes. + drawDiscriminator(vectorEngine[2].s, 0); + draw vectorEngineFull[0].n -- (vectorEngine[2].s-(0,discriminatorLength)); + + endfig; + + + %% Tensors and their engines + beginfig(2) + %% Create the boxes. + % Tensor + boxit.tensor[0](btex \classname{Tensor} etex); + boxit.tensor[1](btex etex); + boxit.tensor[2]( + btex \begin{lists} + Tensor() \\ + Tensor(const Tensor\&) \\ + Tensor(const X1\&) \\ + Tensor(const X[1-2]\&) \\ + Tensor(const X[1-3]\&) \\ + Tensor(const X[1-4]\&) \\ + Tensor(const X[1-5]\&) \\ + Tensor(const X[1-6]\&) \\ + Tensor(const X[1-7]\&) \\ + Tensor(const X[1-8]\&) \\ + Tensor(const X[1-9]\&) \\ + \tilder Tensor() \\ + Tensor\& operator=(const Tensor\&) \\ + Tensor\& operator=(const Tensor\&) \\ + Tensor\& operator=(const X\&) \\ + const T\& operator()(int) \\ + T\& operator()(int) \\ + const Engine\& engine() \\ + Engine\& engine() \\ + void print(Out\&) + \end{lists} etex); + boxit.tensor[3]( + btex + \begin{lists} + dimension D \\ + value type T \\ + engine type E + \end{lists} etex); + boxit.tensor[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + % TensorEngine + boxit.tensorEngine[0](btex \classname{TensorEngine} etex); + boxit.tensorEngine[1](btex etex); + boxit.tensorEngine[2](btex etex); + boxit.tensorEngine[3]( + btex + \begin{lists} + dim D \\ + value T \\ + engine E + \end{lists} etex); + boxit.tensorEngine[4]( + btex \begin{files} + TensorEngine.h + \end{files} etex); + + % TensorEngine + boxit.teFull[0](btex \classname{TensorEngine} etex); + boxit.teFull[1](btex etex); + boxit.teFull[2]( + btex \begin{lists} + TensorEngine() \\ + TensorEngine(const TensorEngine\&) \\ + TensorEngine(const T\&) \\ + TensorEngine(const X\&) \\ + TensorEngine(const X[1-4]\&) \\ + TensorEngine(const X[1-9]\&) \\ + \tilder TensorEngine() \\ + TensorEngine\& operator=(const TensorEngine\&) \\ + TensorEngine\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.teFull[3]( + btex + \begin{lists} + dim D \\ + value T + \end{lists} etex); + boxit.teFull[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + % TensorEngine + boxit.teAntisymmetric[0](btex \classname{TensorEngine} etex); + boxit.teAntisymmetric[1](btex etex); + boxit.teAntisymmetric[2]( + btex \begin{lists} + TensorEngine() \\ + TensorEngine(const TensorEngine\&) \\ + TensorEngine(const T\&) \\ + TensorEngine(const X\&) \\ + TensorEngine(const X[1-3]\&) \\ + TensorEngine(const X[1-6]\&) \\ + \tilder TensorEngine() \\ + TensorEngine\& operator=(const TensorEngine\&) \\ + TensorEngine\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.teAntisymmetric[3]( + btex + \begin{lists} + dim D \\ + value T + \end{lists} etex); + boxit.teAntisymmetric[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + % TensorEngine + boxit.teSymmetric[0](btex \classname{TensorEngine} etex); + boxit.teSymmetric[1](btex etex); + boxit.teSymmetric[2]( + btex \begin{lists} + TensorEngine() \\ + TensorEngine(const TensorEngine\&) \\ + TensorEngine(const T\&) \\ + TensorEngine(const X\&) \\ + TensorEngine(const X[1-3]\&) \\ + TensorEngine(const X[1-6]\&) \\ + \tilder TensorEngine() \\ + TensorEngine\& operator=(const TensorEngine\&) \\ + TensorEngine\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.teSymmetric[3]( + btex + \begin{lists} + dim D \\ + value T + \end{lists} etex); + boxit.teSymmetric[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + % TensorEngine + boxit.teDiagonal[0](btex \classname{TensorEngine} etex); + boxit.teDiagonal[1](btex etex); + boxit.teDiagonal[2]( + btex \begin{lists} + TensorEngine() \\ + TensorEngine(const TensorEngine\&) \\ + TensorEngine(const T\&) \\ + TensorEngine(const X\&) \\ + TensorEngine(const X[1-2]\&) \\ + TensorEngine(const X[1-3]\&) \\ + TensorEngine(const X[1-4]\&) \\ + TensorEngine(const X[1-5]\&) \\ + TensorEngine(const X[1-6]\&) \\ + TensorEngine(const X[1-7]\&) \\ + \tilder TensorEngine() \\ + TensorEngine\& operator=(const TensorEngine\&) \\ + TensorEngine\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.teDiagonal[3]( + btex + \begin{lists} + dim D \\ + value T + \end{lists} etex); + boxit.teDiagonal[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + %% Position the boxes. + % Position the boxes within the UML class diagrams. + forsuffixes $=tensor, tensorEngine: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + samewidth(teFull[0],teAntisymmetric[0],teSymmetric[0],teDiagonal[0]); + forsuffixes $=teFull,teAntisymmetric,teSymmetric,teDiagonal: + fixsize($[0]); + endfor + % Position the template parameters. + forsuffixes $=tensor, tensorEngine, teFull,teAntisymmetric,teSymmetric,teDiagonal: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=tensor, tensorEngine: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + tensor[0].c = origin; + tensor[2].sw - tensorEngine[0].nw = (0, 4yUnit); + teFull[0].s - teAntisymmetric[0].n = + teAntisymmetric[0].s - teSymmetric[0].n = + teSymmetric[0].s - teDiagonal[0].n = (0, 1.5yUnit); + tensorEngine[1].e - 0.5[teAntisymmetric[0].sw,teSymmetric[0].nw] = (-3xUnit,0); + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=tensor, tensorEngine: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + forsuffixes $=teFull,teAntisymmetric,teSymmetric,teDiagonal: + for t = 0 upto 0: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=tensor, tensorEngine, teFull,teAntisymmetric,teSymmetric,teDiagonal: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the file names. + forsuffixes $=tensor, tensorEngine: + drawunboxed($[4]); + endfor + + % Draw arrows between classes. + + % Draw lines between classes. + drawDiscriminator(tensorEngine[1].e, 90); + x0 = xpart(0.5[tensorEngine[3].e,teAntisymmetric[0].w]); + y0 = ypart(tensorEngine[1].e); + draw (tensorEngine[1].e + (discriminatorLength,0)) -- z0; + forsuffixes $=teFull,teAntisymmetric,teSymmetric,teDiagonal: + draw (x0,ypart($[0].w)) -- $[0].w; + endfor + draw (x0,ypart(teFull[0].w)) -- (x0,ypart(teDiagonal[0].w)); + endfig; + + + %% TensorEngine<...,Full> and TensorEngine<...,Diagonal> + beginfig(3) + %% Create the boxes. + % Tensor + boxit.tensor[0](btex \classname{Tensor} etex); + boxit.tensor[1](btex etex); + boxit.tensor[2]( + btex \begin{lists} + Tensor() \\ + Tensor(const Tensor\&) \\ + Tensor(const X1\&) \\ + Tensor(const X[1-2]\&) \\ + Tensor(const X[1-3]\&) \\ + Tensor(const X[1-4]\&) \\ + Tensor(const X[1-5]\&) \\ + Tensor(const X[1-6]\&) \\ + Tensor(const X[1-7]\&) \\ + Tensor(const X[1-8]\&) \\ + Tensor(const X[1-9]\&) \\ + \tilder Tensor() \\ + Tensor\& operator=(const Tensor\&) \\ + Tensor\& operator=(const Tensor\&) \\ + Tensor\& operator=(const X\&) \\ + const T\& operator()(int) \\ + T\& operator()(int) \\ + const Engine\& engine() \\ + Engine\& engine() \\ + void print(Out\&) + \end{lists} etex); + boxit.tensor[3]( + btex + \begin{lists} + dimension D \\ + value type T \\ + engine type E + \end{lists} etex); + boxit.tensor[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + % TensorEngine + boxit.tensorEngine[0](btex \classname{TensorEngine} etex); + boxit.tensorEngine[1](btex etex); + boxit.tensorEngine[2](btex etex); + boxit.tensorEngine[3]( + btex + \begin{lists} + dimension D \\ + value type T \\ + engine type E + \end{lists} etex); + boxit.tensorEngine[4]( + btex \begin{files} + TensorEngine.h + \end{files} etex); + + % TensorEngine + boxit.teFull[0](btex \classname{TensorEngine} etex); + boxit.teFull[1](btex etex); + boxit.teFull[2]( + btex \begin{lists} + TensorEngine() \\ + TensorEngine(const TensorEngine\&) \\ + TensorEngine(const T\&) \\ + TensorEngine(const X\&) \\ + TensorEngine(const X[1-4]\&) \\ + TensorEngine(const X[1-9]\&) \\ + \tilder TensorEngine() \\ + TensorEngine\& operator=(const TensorEngine\&) \\ + TensorEngine\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.teFull[3]( + btex + \begin{lists} + dimension D \\ + value type T + \end{lists} etex); + boxit.teFull[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + % TensorEngine + boxit.teAntisymmetric[0](btex \classname{TensorEngine} etex); + boxit.teAntisymmetric[1](btex etex); + boxit.teAntisymmetric[2]( + btex \begin{lists} + TensorEngine() \\ + TensorEngine(const TensorEngine\&) \\ + TensorEngine(const T\&) \\ + TensorEngine(const X\&) \\ + TensorEngine(const X[1-3]\&) \\ + TensorEngine(const X[1-6]\&) \\ + \tilder TensorEngine() \\ + TensorEngine\& operator=(const TensorEngine\&) \\ + TensorEngine\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.teAntisymmetric[3]( + btex + \begin{lists} + dimension D \\ + value type T + \end{lists} etex); + boxit.teAntisymmetric[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + % TensorEngine + boxit.teSymmetric[0](btex \classname{TensorEngine} etex); + boxit.teSymmetric[1](btex etex); + boxit.teSymmetric[2]( + btex \begin{lists} + TensorEngine() \\ + TensorEngine(const TensorEngine\&) \\ + TensorEngine(const T\&) \\ + TensorEngine(const X\&) \\ + TensorEngine(const X[1-3]\&) \\ + TensorEngine(const X[1-6]\&) \\ + \tilder TensorEngine() \\ + TensorEngine\& operator=(const TensorEngine\&) \\ + TensorEngine\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.teSymmetric[3]( + btex + \begin{lists} + dimension D \\ + value type T + \end{lists} etex); + boxit.teSymmetric[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + % TensorEngine + boxit.teDiagonal[0](btex \classname{TensorEngine} etex); + boxit.teDiagonal[1](btex etex); + boxit.teDiagonal[2]( + btex \begin{lists} + TensorEngine() \\ + TensorEngine(const TensorEngine\&) \\ + TensorEngine(const T\&) \\ + TensorEngine(const X\&) \\ + TensorEngine(const X[1-2]\&) \\ + TensorEngine(const X[1-3]\&) \\ + TensorEngine(const X[1-4]\&) \\ + TensorEngine(const X[1-5]\&) \\ + TensorEngine(const X[1-6]\&) \\ + TensorEngine(const X[1-7]\&) \\ + \tilder TensorEngine() \\ + TensorEngine\& operator=(const TensorEngine\&) \\ + TensorEngine\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.teDiagonal[3]( + btex + \begin{lists} + dimension D \\ + value type T + \end{lists} etex); + boxit.teDiagonal[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + %% Position the boxes. + % Position the boxes within the UML class diagrams. + forsuffixes $=teFull, teDiagonal: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + % Position the template parameters. + forsuffixes $=teFull, teDiagonal: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=teFull, teDiagonal: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + teFull[0].c = origin; + teFull[2].sw - teDiagonal[0].nw = (0, 2yUnit); + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=teFull, teDiagonal: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=teFull, teDiagonal: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the file names. + forsuffixes $=teFull, teDiagonal: + drawunboxed($[4]); + endfor + + % Draw arrows between classes. + + % Draw lines between classes. + endfig; + + + %% TensorEngine<...,Antisymmetric> and TensorEngine<...,Symmetric> + beginfig(4) + %% Create the boxes. + % Tensor + boxit.tensor[0](btex \classname{Tensor} etex); + boxit.tensor[1](btex etex); + boxit.tensor[2]( + btex \begin{lists} + Tensor() \\ + Tensor(const Tensor\&) \\ + Tensor(const X1\&) \\ + Tensor(const X[1-2]\&) \\ + Tensor(const X[1-3]\&) \\ + Tensor(const X[1-4]\&) \\ + Tensor(const X[1-5]\&) \\ + Tensor(const X[1-6]\&) \\ + Tensor(const X[1-7]\&) \\ + Tensor(const X[1-8]\&) \\ + Tensor(const X[1-9]\&) \\ + \tilder Tensor() \\ + Tensor\& operator=(const Tensor\&) \\ + Tensor\& operator=(const Tensor\&) \\ + Tensor\& operator=(const X\&) \\ + const T\& operator()(int) \\ + T\& operator()(int) \\ + const Engine\& engine() \\ + Engine\& engine() \\ + void print(Out\&) + \end{lists} etex); + boxit.tensor[3]( + btex + \begin{lists} + dimension D \\ + value type T \\ + engine type E + \end{lists} etex); + boxit.tensor[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + % TensorEngine + boxit.tensorEngine[0](btex \classname{TensorEngine} etex); + boxit.tensorEngine[1](btex etex); + boxit.tensorEngine[2](btex etex); + boxit.tensorEngine[3]( + btex + \begin{lists} + dimension D \\ + value type T \\ + engine type E + \end{lists} etex); + boxit.tensorEngine[4]( + btex \begin{files} + TensorEngine.h + \end{files} etex); + + % TensorEngine + boxit.teFull[0](btex \classname{TensorEngine} etex); + boxit.teFull[1](btex etex); + boxit.teFull[2]( + btex \begin{lists} + TensorEngine() \\ + TensorEngine(const TensorEngine\&) \\ + TensorEngine(const T\&) \\ + TensorEngine(const X\&) \\ + TensorEngine(const X[1-4]\&) \\ + TensorEngine(const X[1-9]\&) \\ + \tilder TensorEngine() \\ + TensorEngine\& operator=(const TensorEngine\&) \\ + TensorEngine\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.teFull[3]( + btex + \begin{lists} + dimension D \\ + value type T + \end{lists} etex); + boxit.teFull[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + % TensorEngine + boxit.teAntisymmetric[0](btex \classname{TensorEngine} etex); + boxit.teAntisymmetric[1](btex etex); + boxit.teAntisymmetric[2]( + btex \begin{lists} + TensorEngine() \\ + TensorEngine(const TensorEngine\&) \\ + TensorEngine(const T\&) \\ + TensorEngine(const X\&) \\ + TensorEngine(const X[1-3]\&) \\ + TensorEngine(const X[1-6]\&) \\ + \tilder TensorEngine() \\ + TensorEngine\& operator=(const TensorEngine\&) \\ + TensorEngine\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.teAntisymmetric[3]( + btex + \begin{lists} + dimension D \\ + value type T + \end{lists} etex); + boxit.teAntisymmetric[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + % TensorEngine + boxit.teSymmetric[0](btex \classname{TensorEngine} etex); + boxit.teSymmetric[1](btex etex); + boxit.teSymmetric[2]( + btex \begin{lists} + TensorEngine() \\ + TensorEngine(const TensorEngine\&) \\ + TensorEngine(const T\&) \\ + TensorEngine(const X\&) \\ + TensorEngine(const X[1-3]\&) \\ + TensorEngine(const X[1-6]\&) \\ + \tilder TensorEngine() \\ + TensorEngine\& operator=(const TensorEngine\&) \\ + TensorEngine\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.teSymmetric[3]( + btex + \begin{lists} + dimension D \\ + value type T + \end{lists} etex); + boxit.teSymmetric[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + % TensorEngine + boxit.teDiagonal[0](btex \classname{TensorEngine} etex); + boxit.teDiagonal[1](btex etex); + boxit.teDiagonal[2]( + btex \begin{lists} + TensorEngine() \\ + TensorEngine(const TensorEngine\&) \\ + TensorEngine(const T\&) \\ + TensorEngine(const X\&) \\ + TensorEngine(const X[1-2]\&) \\ + TensorEngine(const X[1-3]\&) \\ + TensorEngine(const X[1-4]\&) \\ + TensorEngine(const X[1-5]\&) \\ + TensorEngine(const X[1-6]\&) \\ + TensorEngine(const X[1-7]\&) \\ + \tilder TensorEngine() \\ + TensorEngine\& operator=(const TensorEngine\&) \\ + TensorEngine\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.teDiagonal[3]( + btex + \begin{lists} + dimension D \\ + value type T + \end{lists} etex); + boxit.teDiagonal[4]( + btex \begin{files} + Tensor.h + \end{files} etex); + + %% Position the boxes. + % Position the boxes within the UML class diagrams. + forsuffixes $=teAntisymmetric, teSymmetric: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + % Position the template parameters. + forsuffixes $=teAntisymmetric, teSymmetric: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=teAntisymmetric, teSymmetric: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + teAntisymmetric[0].c = origin; + teAntisymmetric[2].sw - teSymmetric[0].nw = (0, 2yUnit); + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=teAntisymmetric, teSymmetric: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=teAntisymmetric, teSymmetric: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the file names. + forsuffixes $=teAntisymmetric, teSymmetric: + drawunboxed($[4]); + endfor + + % Draw arrows between classes. + + % Draw lines between classes. + endfig; + + + %% TinyMatrix + beginfig(10) + %% Create the boxes. + % Tensor + boxit.matrix[0](btex \classname{TinyMatrix} etex); + boxit.matrix[1](btex etex); + boxit.matrix[2]( + btex \begin{lists} + TinyMatrix() \\ + TinyMatrix(const TinyMatrix\&) \\ + TinyMatrix(const X1\&) \\ + TinyMatrix(const X[1-2]\&) \\ + TinyMatrix(const X[1-3]\&) \\ + TinyMatrix(const X[1-4]\&) \\ + TinyMatrix(const X[1-5]\&) \\ + TinyMatrix(const X[1-6]\&) \\ + TinyMatrix(const X[1-7]\&) \\ + TinyMatrix(const X[1-8]\&) \\ + TinyMatrix(const X[1-9]\&) \\ + \tilder TinyMatrix() \\ + TinyMatrix\& operator=(const TinyMatrix\&) \\ + TinyMatrix\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) \\ + const T\& operator()(int) \\ + T\& operator()(int) \\ + const Engine\& engine() \\ + Engine\& engine() \\ + void print(Out\&) + \end{lists} etex); + boxit.matrix[3]( + btex + \begin{lists} + dimension D1 \\ + dimension D2 \\ + value type T \\ + engine type E + \end{lists} etex); + boxit.matrix[4]( + btex \begin{files} + TinyMatrix.h + \end{files} etex); + + % MatrixEngine + boxit.matrixEngine[0](btex \classname{TinyMatrixEngine} etex); + boxit.matrixEngine[1](btex etex); + boxit.matrixEngine[2](btex etex); + boxit.matrixEngine[3]( + btex + \begin{lists} + dimension D1 \\ + dimension D2 \\ + value type T \\ + engine type E + \end{lists} etex); + boxit.matrixEngine[4]( + btex \begin{files} + TinyMatrixEngine.h + \end{files} etex); + + % TinyMatrixEngine + boxit.matrixEngineFull[0](btex \classname{TinyMatrixEngine} etex); + boxit.matrixEngineFull[1](btex etex); + boxit.matrixEngineFull[2]( + btex \begin{lists} + TinyMatrixEngine() \\ + TinyMatrixEngine(const TinyMatrixEngine\&) \\ + TinyMatrixEngine(const X\&) \\ + TinyMatrixEngine(const X[1-2]\&) \\ + TinyMatrixEngine(const X[1-3]\&) \\ + TinyMatrixEngine(const X[1-4]\&) \\ + TinyMatrixEngine(const X[1-5]\&) \\ + TinyMatrixEngine(const X[1-6]\&) \\ + TinyMatrixEngine(const X[1-7]\&) \\ + TinyMatrixEngine(const X[1-8]\&) \\ + TinyMatrixEngine(const X[1-9]\&) \\ + \tilder TinyMatrixEngine() \\ + TinyMatrixEngine\& operator=(const TinyMatrixEngine\&) \\ + TinyMatrixEngine\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.matrixEngineFull[3]( + btex + \begin{lists} + dimension D \\ + value type T + \end{lists} etex); + boxit.matrixEngineFull[4]( + btex \begin{files} + TinyMatrix.h + \end{files} etex); + + %% Position the boxes. + % Position the boxes within the UML class diagrams. + forsuffixes $=matrix, matrixEngine, matrixEngineFull: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + % Position the template parameters. + forsuffixes $=matrix, matrixEngine, matrixEngineFull: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=matrix, matrixEngine, matrixEngineFull: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + matrix[0].c = origin; + matrix[2].s - matrixEngine[0].n = (0, 3yUnit); + matrixEngine[2].s - matrixEngineFull[0].n = (0, yUnit); + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=matrix: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=matrix: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the file names. + forsuffixes $=matrix: + drawunboxed($[4]); + endfor + + % Draw arrows between classes. + + % Draw lines between classes. + endfig; + + %% TinyMatrix + beginfig(11) + %% Create the boxes. + % Tensor + boxit.matrix[0](btex \classname{TinyMatrix} etex); + boxit.matrix[1](btex etex); + boxit.matrix[2]( + btex \begin{lists} + TinyMatrix() \\ + TinyMatrix(const TinyMatrix\&) \\ + TinyMatrix(const X1\&) \\ + TinyMatrix(const X[1-2]\&) \\ + TinyMatrix(const X[1-3]\&) \\ + TinyMatrix(const X[1-4]\&) \\ + TinyMatrix(const X[1-5]\&) \\ + TinyMatrix(const X[1-6]\&) \\ + TinyMatrix(const X[1-7]\&) \\ + TinyMatrix(const X[1-8]\&) \\ + TinyMatrix(const X[1-9]\&) \\ + \tilder TinyMatrix() \\ + TinyMatrix\& operator=(const TinyMatrix\&) \\ + TinyMatrix\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) \\ + const T\& operator()(int) \\ + T\& operator()(int) \\ + const Engine\& engine() \\ + Engine\& engine() \\ + void print(Out\&) + \end{lists} etex); + boxit.matrix[3]( + btex + \begin{lists} + dimension D1 \\ + dimension D2 \\ + value type T \\ + engine type E + \end{lists} etex); + boxit.matrix[4]( + btex \begin{files} + TinyMatrix.h + \end{files} etex); + + % MatrixEngine + boxit.matrixEngine[0](btex \classname{TinyMatrixEngine} etex); + boxit.matrixEngine[1](btex etex); + boxit.matrixEngine[2](btex etex); + boxit.matrixEngine[3]( + btex + \begin{lists} + dimension D1 \\ + dimension D2 \\ + value type T \\ + engine type E + \end{lists} etex); + boxit.matrixEngine[4]( + btex \begin{files} + TinyMatrixEngine.h + \end{files} etex); + + % TinyMatrixEngine + boxit.matrixEngineFull[0](btex \classname{TinyMatrixEngine} etex); + boxit.matrixEngineFull[1](btex etex); + boxit.matrixEngineFull[2]( + btex \begin{lists} + TinyMatrixEngine() \\ + TinyMatrixEngine(const TinyMatrixEngine\&) \\ + TinyMatrixEngine(const X\&) \\ + TinyMatrixEngine(const X[1-2]\&) \\ + TinyMatrixEngine(const X[1-3]\&) \\ + TinyMatrixEngine(const X[1-4]\&) \\ + TinyMatrixEngine(const X[1-5]\&) \\ + TinyMatrixEngine(const X[1-6]\&) \\ + TinyMatrixEngine(const X[1-7]\&) \\ + TinyMatrixEngine(const X[1-8]\&) \\ + TinyMatrixEngine(const X[1-9]\&) \\ + \tilder TinyMatrixEngine() \\ + TinyMatrixEngine\& operator=(const TinyMatrixEngine\&) \\ + TinyMatrixEngine\& operator=(const X\&) \\ + const T\& operator()(int,int) \\ + T\& operator()(int,int) + const T\& operator()(int) \\ + T\& operator()(int) + \end{lists} etex); + boxit.matrixEngineFull[3]( + btex + \begin{lists} + dimension D \\ + value type T + \end{lists} etex); + boxit.matrixEngineFull[4]( + btex \begin{files} + TinyMatrix.h + \end{files} etex); + + %% Position the boxes. + % Position the boxes within the UML class diagrams. + forsuffixes $=matrix, matrixEngine, matrixEngineFull: + samewidth($[0],$[1],$[2]); + for t = 0 upto 1: + $.[t].se = $[t+1].ne; + $.[t].sw = $[t+1].nw; + endfor + fixsize($[0],$[1],$[2]); + endfor + % Position the template parameters. + forsuffixes $=matrix, matrixEngine, matrixEngineFull: + fixsize($[3]); + $[0].ne - $[3].sw = + (min(0.5 xpart($[3].ne - $[3].sw), $[0].dx), + min(0.5 ypart($[3].ne - $[3].sw), $[0].dy)); + endfor + % Position the implementation files boxes. + forsuffixes $=matrix, matrixEngine, matrixEngineFull: + fixsize($[4]); + $[2].s = $[4].nw; + endfor + + % Position the UML classes. + matrix[0].c = origin; + matrix[2].s - matrixEngine[0].n = (0, 3yUnit); + matrixEngine[2].s - matrixEngineFull[0].n = (0, yUnit); + + %% Draw the boxes. + % Draw the UML class boxes. + forsuffixes $=matrixEngine, matrixEngineFull: + for t = 0 upto 2: + drawboxed($[t]); + endfor + endfor + % Draw the template parameters. + forsuffixes $=matrixEngine, matrixEngineFull: + unfill bpath($[3]); + drawunboxed($[3]); + draw bpath($[3]) dashed evenly; + endfor + % Draw the file names. + forsuffixes $=matrixEngine, matrixEngineFull: + drawunboxed($[4]); + endfor + + % Draw arrows between classes. + + % Draw lines between classes. + draw matrixEngineFull[0].n -- (matrixEngine[2].s-(0,discriminatorLength)); + drawDiscriminator(matrixEngine[2].s, 0); + + endfig; + + bye Index: figures/uml.mp =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/uml.mp,v retrieving revision 1.1 diff -c -p -r1.1 uml.mp *** figures/uml.mp 2002/02/27 03:51:54 1.1 --- figures/uml.mp 2002/03/04 22:51:16 *************** path discriminator; *** 12,17 **** --- 12,18 ---- discriminator = origin -- ((1,0) rotated -120) -- ((1,0) rotated -60) -- cycle; numeric discriminatorScale; discriminatorScale = 0.5cm; + numeric discriminatorLength; discriminatorLength = discriminatorScale*sqrt(3)/2; % The location is the top of the triangle vardef drawDiscriminator(expr location, rotation) = From oldham at mail.codesourcery.com Tue Mar 5 02:04:53 2002 From: oldham at mail.codesourcery.com (Jeffrey) Date: Mon, 4 Mar 2002 18:04:53 -0800 Subject: Manual Patch: Automate Figure Creation Message-ID: <20020304180453.A11233@vaio.codesourcery.com> 2002-Mar-04 Jeffrey D. Oldham This patch automates creation of figures and rearranges the corresponding Makefile. * figures/Makefile (UML_SOURCES): Add other UML source files. (SOURCES): Reformat definition. (OTHER_DIAGRAMS): New definition listing non-UML diagrams. (all): Use OTHER_DIAGRAMS. Applied to mainline. Thanks, Jeffrey D. Oldham oldham at codesourcery.com -------------- next part -------------- Index: figures/Makefile =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/Makefile,v retrieving revision 1.4 diff -c -p -r1.4 Makefile *** figures/Makefile 2002/03/04 23:48:09 1.4 --- figures/Makefile 2002/03/05 01:41:12 *************** EPSTOPNG= /home/oldham/bin/peps *** 22,31 **** # MetaPost macro definitions used in multiple files. MACRO_SOURCES= box-macros.mp grid-macros.mp uml.mp # These MetaPost files describe the UML class diagrams. ! UML_SOURCES= explanation-uml.mp # These MetaPost files describe the figures. ! SOURCES= concepts.mp data-parallel.mp distributed.mp doof2d.mp introduction.mp \ ! $(UML_SOURCES) # MetaPost can produce multiple files per input file. These multiple # files have names %.[0-9]+. Since make does not deal well with # producing an indeterminate number of files from the same rule, we --- 22,34 ---- # MetaPost macro definitions used in multiple files. MACRO_SOURCES= box-macros.mp grid-macros.mp uml.mp # These MetaPost files describe the UML class diagrams. ! UML_SOURCES= array-uml.mp distributed-uml.mp domain-uml.mp \ ! engine-uml.mp explanation-uml.mp field-uml.mp \ ! math-objs-uml.mp ! # These MetaPost files describe the figures. ! SOURCES= concepts.mp data-parallel.mp distributed.mp doof2d.mp \ ! introduction.mp $(UML_SOURCES) # MetaPost can produce multiple files per input file. These multiple # files have names %.[0-9]+. Since make does not deal well with # producing an indeterminate number of files from the same rule, we *************** UML_DIAGRAMS= explanation-uml-1.png \ *** 53,68 **** 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 # files, but this rule may not guarantee this ordering. ! all: mproof-all \ ! concepts-101.png concepts-111.png data-parallel-101.png \ ! data-parallel-212.png distributed-101.png \ ! doof2d-201.png doof2d-202.png doof2d-203.png \ ! doof2d-210.png doof2d-211.png introduction-101.png \ ! $(UML_DIAGRAMS) mproof-all: $(RESULTS) --- 56,70 ---- 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 + OTHER_DIAGRAMS= concepts-101.png concepts-111.png data-parallel-101.png \ + data-parallel-212.png distributed-101.png \ + doof2d-201.png doof2d-202.png doof2d-203.png \ + doof2d-210.png doof2d-211.png introduction-101.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 # files, but this rule may not guarantee this ordering. ! all: mproof-all $(OTHER_DIAGRAMS) $(UML_DIAGRAMS) mproof-all: $(RESULTS) From bigemaillist at excite.com Tue Mar 5 04:54:40 2002 From: bigemaillist at excite.com (Emails for sale) Date: Tue, 5 Mar 2002 04:54:40 -0000 Subject: UK Bulk Email List - £5 Message-ID: 1 Million world wide email addresses including 200,000 UK for just ?5 inc P&P! The list comes on a CD in 2 files, one containing 200,000 UK email addresses and another containing 1 million world-wide emails (inc UK) , both in .csv (comma separated value) format. The emails have been physically validated in the last 3 weeks, removing aprox 25% bad emails from the previous amount, so there should be a very low failure rate. To purchase the CD please send a ?5 cheque/PO payable to "Teletech" (no cash please) to: Teletech Office 434 405 Kings Rd London SW10 0BB The CD will be sent by first class post as soon as your money has been received. You will also be given details of a FREE download of sending software. NOTE: This CD does not contain any personal info of email owners (eg name/age etc) From oldham at mail.codesourcery.com Tue Mar 5 16:22:00 2002 From: oldham at mail.codesourcery.com (Jeffrey) Date: Tue, 5 Mar 2002 08:22:00 -0800 Subject: Patch: Fix Typographical Errors Message-ID: <20020305082200.A13182@vaio.codesourcery.com> 2002-Mar-04 Jeffrey D. Oldham This patch (mostly) fixes typographical errors in comments and other not executed code. * examples/Manual/Sequential/initialize-finalize.cpp (main): Add "Hello, Pooma" to the program. * src/Domain/Interval.h: Fix typo in comment. * src/Engine/MultiPatchEngine.h: Fix typo in PInsist string. * src/Engine/RemoteDynamicEngine.h: Fix engine tag in comment. Fix comment typos. * src/Engine/RemoteEngine.h: Fix typos in comments. * src/Tiny/BinaryTensorOp.h: Fix punctuation in comments. * src/Tiny/BinaryTinyMatrixOp.h: Likewise. * src/Tiny/UnaryTensorOp.h: Likewise. * src/Tiny/Vector.h: Fix spelling mistake in comment. * src/Tiny/VectorOperators.h: Likewise. * src/Tiny/VectorTensor.h: Likewise. * src/Tiny/VectorTinyMatrix.h: Likewise. * src/Tulip/PatchSizeSyncer.h: Fix punctuation error in comment. * src/Tulip/SendReceive.h: Fix spacing of bracket. Not tested since changes are to comments and non executed code. Applied to mainline Approved by Mark Mitchell Thanks, Jeffrey D. Oldham oldham at codesourcery.com -------------- next part -------------- Index: examples/Manual/Sequential/initialize-finalize.cpp =================================================================== RCS file: /home/pooma/Repository/r2/examples/Manual/Sequential/initialize-finalize.cpp,v retrieving revision 1.1 diff -c -p -r1.1 initialize-finalize.cpp *** examples/Manual/Sequential/initialize-finalize.cpp 2002/01/25 03:45:54 1.1 --- examples/Manual/Sequential/initialize-finalize.cpp 2002/03/05 00:10:24 *************** int main(int argc, char *argv[]) *** 6,11 **** --- 6,13 ---- // Prepare the Pooma library for execution. Pooma::initialize(argc,argv); + std::cout << "Hello, Pooma." << std::endl; + // Tell the Pooma library execution has finished. Pooma::finalize(); return 0; Index: src/Domain/Interval.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Domain/Interval.h,v retrieving revision 1.20 diff -c -p -r1.20 Interval.h *** src/Domain/Interval.h 2002/01/29 17:56:15 1.20 --- src/Domain/Interval.h 2002/03/05 00:10:25 *************** class Interval : public Domain Base_t; public: ! // Typedefs from parent class and DoaminTraits typedef typename Base_t::iterator iterator; typedef typename Base_t::const_iterator const_iterator; --- 152,158 ---- typedef Domain Base_t; public: ! // Typedefs from parent class and DomainTraits typedef typename Base_t::iterator iterator; typedef typename Base_t::const_iterator const_iterator; Index: src/Engine/MultiPatchEngine.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Engine/MultiPatchEngine.h,v retrieving revision 1.117 diff -c -p -r1.117 MultiPatchEngine.h *** src/Engine/MultiPatchEngine.h 2001/04/09 21:35:47 1.117 --- src/Engine/MultiPatchEngine.h 2002/03/05 00:10:26 *************** inline void Engine &) { ! PInsist(0,"This patch engine does not support dynamice events!"); } --- 1433,1439 ---- dynamicHandler(Observable_t &, const ObserverEvent &, const WrappedInt &) { ! PInsist(0,"This patch engine does not support dynamic events!"); } Index: src/Engine/RemoteDynamicEngine.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Engine/RemoteDynamicEngine.h,v retrieving revision 1.17 diff -c -p -r1.17 RemoteDynamicEngine.h *** src/Engine/RemoteDynamicEngine.h 2002/01/29 17:56:16 1.17 --- src/Engine/RemoteDynamicEngine.h 2002/03/05 00:10:26 *************** private: *** 430,436 **** ////////////////////////////////////////////////////////////////////// // ! // Inline implementation of the functions for Engine > // ////////////////////////////////////////////////////////////////////// --- 430,436 ---- ////////////////////////////////////////////////////////////////////// // ! // Inline implementation of the functions for Engine > // ////////////////////////////////////////////////////////////////////// *************** Engine<1, T, Remote >::read(con *** 451,457 **** } // ! // Return the element specified by list of ints.. // template --- 451,457 ---- } // ! // Return the element specified by list of ints. // template *************** operator()(const Loc<1> &loc) const *** 487,493 **** } // ! // Return a reference to the element specified by list of ints.. // template --- 487,493 ---- } // ! // Return a reference to the element specified by list of ints. // template Index: src/Engine/RemoteEngine.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Engine/RemoteEngine.h,v retrieving revision 1.34 diff -c -p -r1.34 RemoteEngine.h *** src/Engine/RemoteEngine.h 2001/09/13 20:55:14 1.34 --- src/Engine/RemoteEngine.h 2002/03/05 00:10:27 *************** read(const Loc &loc) const *** 345,351 **** } // ! // Return the element specified by list of ints.. // template --- 345,351 ---- } // ! // Return the element specified by list of ints. // template *************** private: *** 1739,1745 **** private: //------------------------------------------------------------------------- ! // Our container is mutable so we can add to it via const member fucntions. // Tags are logically const so this is required. mutable std::vector contexts_m; --- 1739,1745 ---- private: //------------------------------------------------------------------------- ! // Our container is mutable so we can add to it via const member functions. // Tags are logically const so this is required. mutable std::vector contexts_m; Index: src/Tiny/BinaryTensorOp.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Tiny/BinaryTensorOp.h,v retrieving revision 1.12 diff -c -p -r1.12 BinaryTensorOp.h *** src/Tiny/BinaryTensorOp.h 2000/03/07 13:18:12 1.12 --- src/Tiny/BinaryTensorOp.h 2002/03/05 00:10:27 *************** *** 35,41 **** //----------------------------------------------------------------------------- // Overview: ! // An engine class for representing the sum, product etc between two // Tensors. This is used as part of evaluating expressions. //----------------------------------------------------------------------------- --- 35,41 ---- //----------------------------------------------------------------------------- // Overview: ! // An engine class for representing the sum, product, etc. between two // Tensors. This is used as part of evaluating expressions. //----------------------------------------------------------------------------- Index: src/Tiny/BinaryTinyMatrixOp.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Tiny/BinaryTinyMatrixOp.h,v retrieving revision 1.3 diff -c -p -r1.3 BinaryTinyMatrixOp.h *** src/Tiny/BinaryTinyMatrixOp.h 2000/03/07 13:18:12 1.3 --- src/Tiny/BinaryTinyMatrixOp.h 2002/03/05 00:10:27 *************** *** 35,41 **** //----------------------------------------------------------------------------- // Overview: ! // An engine class for representing the sum, product etc between two // TinyMatrixs. This is used as part of evaluating expressions. //----------------------------------------------------------------------------- --- 35,41 ---- //----------------------------------------------------------------------------- // Overview: ! // An engine class for representing the sum, product, etc. between two // TinyMatrixs. This is used as part of evaluating expressions. //----------------------------------------------------------------------------- Index: src/Tiny/UnaryTensorOp.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Tiny/UnaryTensorOp.h,v retrieving revision 1.10 diff -c -p -r1.10 UnaryTensorOp.h *** src/Tiny/UnaryTensorOp.h 2000/03/07 13:18:15 1.10 --- src/Tiny/UnaryTensorOp.h 2002/03/05 00:10:27 *************** *** 36,42 **** //----------------------------------------------------------------------------- // Overview: ! // An engine class for representing the sum, product etc between two // Tensors. This is used as part of evaluating expressions. //----------------------------------------------------------------------------- --- 36,42 ---- //----------------------------------------------------------------------------- // Overview: ! // An engine class for representing the sum, product, etc. between two // Tensors. This is used as part of evaluating expressions. //----------------------------------------------------------------------------- Index: src/Tiny/Vector.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Tiny/Vector.h,v retrieving revision 1.27 diff -c -p -r1.27 Vector.h *** src/Tiny/Vector.h 2001/09/18 05:17:48 1.27 --- src/Tiny/Vector.h 2002/03/05 00:10:27 *************** public: *** 351,357 **** } // This is only supposed to be used in the IO stuff, which should ! // make the inline function reverseBytes visable. inline void reverseBytes() { --- 351,357 ---- } // This is only supposed to be used in the IO stuff, which should ! // make the inline function reverseBytes visible. inline void reverseBytes() { Index: src/Tiny/VectorOperators.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Tiny/VectorOperators.h,v retrieving revision 1.16 diff -c -p -r1.16 VectorOperators.h *** src/Tiny/VectorOperators.h 2000/03/07 13:18:16 1.16 --- src/Tiny/VectorOperators.h 2002/03/05 00:10:28 *************** *** 36,42 **** //----------------------------------------------------------------------------- // Overview: ! // The various arithemetic operators for vectors are defined here. //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- --- 36,42 ---- //----------------------------------------------------------------------------- // Overview: ! // The various arithmetic operators for vectors are defined here. //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- Index: src/Tiny/VectorTensor.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Tiny/VectorTensor.h,v retrieving revision 1.15 diff -c -p -r1.15 VectorTensor.h *** src/Tiny/VectorTensor.h 2002/01/29 17:56:16 1.15 --- src/Tiny/VectorTensor.h 2002/03/05 00:10:28 *************** *** 38,44 **** //----------------------------------------------------------------------------- // Overview: ! // Dot products between vectors and tensors, both yeilding vectors. // Outer product between vectors, yielding tensor. //----------------------------------------------------------------------------- --- 38,44 ---- //----------------------------------------------------------------------------- // Overview: ! // Dot products between vectors and tensors, both yielding vectors. // Outer product between vectors, yielding tensor. //----------------------------------------------------------------------------- Index: src/Tiny/VectorTinyMatrix.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Tiny/VectorTinyMatrix.h,v retrieving revision 1.2 diff -c -p -r1.2 VectorTinyMatrix.h *** src/Tiny/VectorTinyMatrix.h 2000/03/07 13:18:17 1.2 --- src/Tiny/VectorTinyMatrix.h 2002/03/05 00:10:28 *************** *** 39,45 **** //----------------------------------------------------------------------------- // Overview: ! // Dot products between vectors and TinyMatrixs, both yeilding vectors. // Outer product between vectors, yielding TinyMatrix. //----------------------------------------------------------------------------- --- 39,45 ---- //----------------------------------------------------------------------------- // Overview: ! // Dot products between vectors and TinyMatrixs, both yielding vectors. // Outer product between vectors, yielding TinyMatrix. //----------------------------------------------------------------------------- Index: src/Tulip/PatchSizeSyncer.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Tulip/PatchSizeSyncer.h,v retrieving revision 1.3 diff -c -p -r1.3 PatchSizeSyncer.h *** src/Tulip/PatchSizeSyncer.h 2000/05/30 17:44:06 1.3 --- src/Tulip/PatchSizeSyncer.h 2002/03/05 00:10:28 *************** private: *** 135,141 **** static int tag_s; // This is the Cheetah stuff. If we don't have Cheetah, this class should ! // work in serial (its a no-op) without sending any messages. All // Cheetah stuff should compile away. #if POOMA_CHEETAH --- 135,141 ---- static int tag_s; // This is the Cheetah stuff. If we don't have Cheetah, this class should ! // work in serial (it's a no-op) without sending any messages. All // Cheetah stuff should compile away. #if POOMA_CHEETAH Index: src/Tulip/SendReceive.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Tulip/SendReceive.h,v retrieving revision 1.9 diff -c -p -r1.9 SendReceive.h *** src/Tulip/SendReceive.h 2001/06/28 19:01:24 1.9 --- src/Tulip/SendReceive.h 2002/03/05 00:10:28 *************** public: *** 89,95 **** toContext_m(toContext), tag_m(tag), view_m(view) ! { PAssert(toContext >= 0); hintAffinity(engineFunctor(view_m, --- 89,95 ---- toContext_m(toContext), tag_m(tag), view_m(view) ! { PAssert(toContext >= 0); hintAffinity(engineFunctor(view_m, From oldham at codesourcery.com Tue Mar 5 16:26:56 2002 From: oldham at codesourcery.com (Jeffrey) Date: Tue, 5 Mar 2002 08:26:56 -0800 Subject: Patch: Update Cheetah Library Version Numbers Message-ID: <20020305082656.B13182@vaio.codesourcery.com> 2002-Mar-04 Jeffrey D. Oldham This patch updates the Cheetah library to use for SGI. The version number reflects the library available at Los Alamos National Laboratory. * SGI64CC.conf: Update Cheetah Library version number. * SGI64EGCS.conf: Likewise. * SGI64KCC.conf: Likewise. * SGI64gcc.conf: Likewise. * SGIN32CC.conf: Likewise. * SGIN32EGCS.conf: Likewise. * SGIN32KCC.conf: Likewise. * SGIN32gcc.conf: Likewise. Tested by compiling SGI64KCC on LANL Nirvana. Applied to mainline. Approved by Mark Mitchell Thanks, Jeffrey D. Oldham oldham at codesourcery.com -------------- next part -------------- Index: SGI64CC.conf =================================================================== RCS file: /home/pooma/Repository/r2/config/arch/SGI64CC.conf,v retrieving revision 1.43 diff -c -p -r1.43 SGI64CC.conf *** SGI64CC.conf 2001/10/15 17:34:28 1.43 --- SGI64CC.conf 2002/03/05 02:33:22 *************** $hdf5_default_dir = "/usr/local *** 98,104 **** ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.0.0"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/CC"; $cheetah_include_makefile = "Makefile.cheetah"; --- 98,104 ---- ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.1.4"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/CC"; $cheetah_include_makefile = "Makefile.cheetah"; Index: SGI64EGCS.conf =================================================================== RCS file: /home/pooma/Repository/r2/config/arch/SGI64EGCS.conf,v retrieving revision 1.41 diff -c -p -r1.41 SGI64EGCS.conf *** SGI64EGCS.conf 2001/10/15 17:34:28 1.41 --- SGI64EGCS.conf 2002/03/05 02:33:22 *************** $hdf5_default_dir = "/usr/local *** 98,104 **** ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.0.0"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/g++"; $cheetah_include_makefile = "Makefile.cheetah"; --- 98,104 ---- ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.1.4"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/g++"; $cheetah_include_makefile = "Makefile.cheetah"; Index: SGI64KCC.conf =================================================================== RCS file: /home/pooma/Repository/r2/config/arch/SGI64KCC.conf,v retrieving revision 1.54 diff -c -p -r1.54 SGI64KCC.conf *** SGI64KCC.conf 2001/10/15 17:34:28 1.54 --- SGI64KCC.conf 2002/03/05 02:33:22 *************** $fftw_default_dir = "/usr/local *** 104,110 **** ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.0.0"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/KCC"; $cheetah_include_makefile = "Makefile.cheetah"; --- 104,110 ---- ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.1.4"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/KCC"; $cheetah_include_makefile = "Makefile.cheetah"; Index: SGI64gcc.conf =================================================================== RCS file: /home/pooma/Repository/r2/config/arch/SGI64gcc.conf,v retrieving revision 1.4 diff -c -p -r1.4 SGI64gcc.conf *** SGI64gcc.conf 2001/10/15 17:34:28 1.4 --- SGI64gcc.conf 2002/03/05 02:33:22 *************** $hdf5_default_dir = "/usr/local *** 98,104 **** ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.0.0"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/g++"; $cheetah_include_makefile = "Makefile.cheetah"; --- 98,104 ---- ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.1.4"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/g++"; $cheetah_include_makefile = "Makefile.cheetah"; Index: SGIN32CC.conf =================================================================== RCS file: /home/pooma/Repository/r2/config/arch/SGIN32CC.conf,v retrieving revision 1.45 diff -c -p -r1.45 SGIN32CC.conf *** SGIN32CC.conf 2001/10/15 17:34:28 1.45 --- SGIN32CC.conf 2002/03/05 02:33:22 *************** $hdf5_default_dir = "/usr/local *** 98,104 **** ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.0.0"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/CC"; $cheetah_include_makefile = "Makefile.cheetah"; --- 98,104 ---- ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.1.4"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/CC"; $cheetah_include_makefile = "Makefile.cheetah"; Index: SGIN32EGCS.conf =================================================================== RCS file: /home/pooma/Repository/r2/config/arch/SGIN32EGCS.conf,v retrieving revision 1.36 diff -c -p -r1.36 SGIN32EGCS.conf *** SGIN32EGCS.conf 2001/10/15 17:34:28 1.36 --- SGIN32EGCS.conf 2002/03/05 02:33:22 *************** $hdf5_default_dir = "/usr/local *** 98,104 **** ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.0.0"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/g++"; $cheetah_include_makefile = "Makefile.cheetah"; --- 98,104 ---- ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.1.4"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/g++"; $cheetah_include_makefile = "Makefile.cheetah"; Index: SGIN32KCC.conf =================================================================== RCS file: /home/pooma/Repository/r2/config/arch/SGIN32KCC.conf,v retrieving revision 1.45 diff -c -p -r1.45 SGIN32KCC.conf *** SGIN32KCC.conf 2001/10/15 17:34:28 1.45 --- SGIN32KCC.conf 2002/03/05 02:33:22 *************** $hdf5_default_dir = "/usr/local *** 98,104 **** ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.0.0"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/KCC"; $cheetah_include_makefile = "Makefile.cheetah"; --- 98,104 ---- ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.1.4"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/KCC"; $cheetah_include_makefile = "Makefile.cheetah"; Index: SGIN32gcc.conf =================================================================== RCS file: /home/pooma/Repository/r2/config/arch/SGIN32gcc.conf,v retrieving revision 1.4 diff -c -p -r1.4 SGIN32gcc.conf *** SGIN32gcc.conf 2001/10/15 17:34:29 1.4 --- SGIN32gcc.conf 2002/03/05 02:33:22 *************** $hdf5_default_dir = "/usr/local *** 98,104 **** ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.0.0"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/g++"; $cheetah_include_makefile = "Makefile.cheetah"; --- 98,104 ---- ### location of cheetah $cheetah_able = 1; ! $cheetah_default_dir = "/home/cheetah/build/cheetah-1.1.4"; $cheetah_arch = "$archtype"; $cheetah_lib_subdir = "lib/g++"; $cheetah_include_makefile = "Makefile.cheetah"; From oldham at codesourcery.com Tue Mar 5 23:13:26 2002 From: oldham at codesourcery.com (Jeffrey) Date: Tue, 5 Mar 2002 15:13:26 -0800 Subject: Patch: Build Script for SGI64KCC Message-ID: <20020305151326.A1345@vaio.codesourcery.com> 2002-Mar-05 Jeffrey D. Oldham * buildPoomaSGI: New file to build SGI64KCC library and run an executable. Tested on Nirvana's n01 for SGI64KCC. Applied to mainline Approved by Mark Mitchell Thanks, Jeffrey D. Oldham oldham at codesourcery.com -------------- next part -------------- #!/usr/local/bin/tcsh #------------------------------------------------------------------- # This script builds the POOMA library, builds an example code, and # runs it. #------------------------------------------------------------------- #configure and build pooma: echo 'building pooma' configure --arch SGI64KCC --oneper --opt setenv POOMASUITE SGI64KCC module load KCC_latest make echo 'building a pooma example' cd examples/Doof2d make echo 'running a pooma example' SGI64KCC/Doof2d echo 'finished' From jxyh at lanl.gov Fri Mar 8 00:36:37 2002 From: jxyh at lanl.gov (John H. Hall) Date: Thu, 7 Mar 2002 17:36:37 -0700 Subject: Is Default Constructable really required? Message-ID: <8CA05E7E-322C-11D6-AB43-000A27AF286E@lanl.gov> Gang: In the notes on Relations (in relations.h, copied below) it states "The RelationFunctor must be Default Constructable...", yet from the use of it, I don't see any actual requirement for this. It seems we just pass around const references and use the alternate required constructor mentioned below, along with a copy constructor. I need to set up some state in my RelationFunctors and I would prefer to do it during construction, along with providing the correct copy constructors and a version of this required constructor which is essentially a copy constructor++. So I guess my question boils down to: "How do I set and keep state in RelationFunctors?" Any non-trivial use of Relations will require this. Thanks, John Hall // ---------------------------------------------------------------------------- // Relation0 is a template used to construct relations, such as boundary // conditions, that do not depend on additional fields. The Target must be // a Field. The RelationFunctor must be Default Constructable and Assignable. // In addition, it must provide the constructor // // template // RelationFunctor(const L &, const RelationFunctor &) // // and the member function // // template // void operator()(const L &) const // // where L is a Field. The constructor should use the arguments to // initialize itself and the function should apply the relation. // ---------------------------------------------------------------------------- From oldham at codesourcery.com Fri Mar 8 17:44:07 2002 From: oldham at codesourcery.com (Jeffrey Oldham) Date: Fri, 8 Mar 2002 09:44:07 -0800 Subject: [pooma-dev] Is Default Constructable really required? In-Reply-To: <8CA05E7E-322C-11D6-AB43-000A27AF286E@lanl.gov>; from jxyh@lanl.gov on Thu, Mar 07, 2002 at 05:36:37PM -0700 References: <8CA05E7E-322C-11D6-AB43-000A27AF286E@lanl.gov> Message-ID: <20020308094407.A3967@codesourcery.com> Scott is probably the best person to take a first whack at answering this. On Thu, Mar 07, 2002 at 05:36:37PM -0700, John H. Hall wrote: > Gang: > In the notes on Relations (in relations.h, copied below) it states "The > RelationFunctor must be Default Constructable...", yet from the use of > it, I don't see any actual requirement for this. It seems we just pass > around const references and use the alternate required constructor > mentioned below, along with a copy constructor. I need to set up some > state in my RelationFunctors and I would prefer to do it during > construction, along with providing the correct copy constructors and a > version of this required constructor which is essentially a copy > constructor++. > > So I guess my question boils down to: "How do I set and keep state in > RelationFunctors?" Any non-trivial use of Relations will require this. > > Thanks, > John Hall > > > // > ---------------------------------------------------------------------------- > // Relation0 is a template used to construct relations, such as boundary > // conditions, that do not depend on additional fields. The Target must > be > // a Field. The RelationFunctor must be Default Constructable and > Assignable. > // In addition, it must provide the constructor > // > // template > // RelationFunctor(const L &, const RelationFunctor &) > // > // and the member function > // > // template > // void operator()(const L &) const > // > // where L is a Field. The constructor should use the arguments to > // initialize itself and the function should apply the relation. > // > ---------------------------------------------------------------------------- Thanks, Jeffrey D. Oldham oldham at codesourcery.com From jhh at caverns.com Mon Mar 11 17:59:47 2002 From: jhh at caverns.com (John Hall) Date: Mon, 11 Mar 2002 10:59:47 -0700 Subject: MakeOwnCopy problem Message-ID: Gang: In FieldEngine.h, the routine makeOwnCopy references a "model" which doesn't exist. I changed it locally to s.fieldEngine().data(m,c) which compiles and links and seems to make sense to me. Could someone else take a look at it and tell me what the right thing to do is? //--------------------------------------------------------------------------- // Make a distinct copy of this fieldEngineBase. template void makeOwnCopy(const Subject &s) { PAssert(data_m.isValid()); // Create a blank slate of engines: data_m = RefCountedBlockPtr(); stride_m = centering_m.size(); addSubFields(); // Copy then engines and relations and // Deepen the copies of the engine & relations list. for (int m = 0; m < num_materials_m; ++m) { for (int c = 0; c < centering_m.size(); ++ c) { data(m, c) = model.data(m, c); // This is THE LINE in question data(m, c).engine().makeOwnCopy(); data(m, c).relations().makeOwnCopy(s); } } } Thanks, John Hall -- From oldham at codesourcery.com Mon Mar 11 22:04:53 2002 From: oldham at codesourcery.com (Jeffrey Oldham) Date: Mon, 11 Mar 2002 14:04:53 -0800 Subject: [pooma-dev] MakeOwnCopy problem In-Reply-To: ; from jhh@caverns.com on Mon, Mar 11, 2002 at 10:59:47AM -0700 References: Message-ID: <20020311140453.A3871@codesourcery.com> I agree. Would you please check this change into the Pooma tree? On Mon, Mar 11, 2002 at 10:59:47AM -0700, John Hall wrote: > Gang: > In FieldEngine.h, the routine makeOwnCopy references a "model" which > doesn't exist. I changed it locally to s.fieldEngine().data(m,c) > which compiles and links and seems to make sense to me. > > Could someone else take a look at it and tell me what the right thing to do is? > > //--------------------------------------------------------------------------- > // Make a distinct copy of this fieldEngineBase. > > template > void makeOwnCopy(const Subject &s) > { > PAssert(data_m.isValid()); > > // Create a blank slate of engines: > > data_m = RefCountedBlockPtr(); > stride_m = centering_m.size(); > addSubFields(); > > // Copy then engines and relations and > // Deepen the copies of the engine & relations list. > > for (int m = 0; m < num_materials_m; ++m) > { > for (int c = 0; c < centering_m.size(); ++ c) > { > data(m, c) = model.data(m, c); // This is THE LINE in question > data(m, c).engine().makeOwnCopy(); > data(m, c).relations().makeOwnCopy(s); > } > } > } Thanks, Jeffrey D. Oldham oldham at codesourcery.com From oldham at codesourcery.com Mon Mar 11 23:25:52 2002 From: oldham at codesourcery.com (Jeffrey Oldham) Date: Mon, 11 Mar 2002 15:25:52 -0800 Subject: [pooma-dev] Is Default Constructable really required? In-Reply-To: <8CA05E7E-322C-11D6-AB43-000A27AF286E@lanl.gov>; from jxyh@lanl.gov on Thu, Mar 07, 2002 at 05:36:37PM -0700 References: <8CA05E7E-322C-11D6-AB43-000A27AF286E@lanl.gov> Message-ID: <20020311152552.A5149@codesourcery.com> On Thu, Mar 07, 2002 at 05:36:37PM -0700, John H. Hall wrote: > Gang: > In the notes on Relations (in relations.h, copied below) it states "The > RelationFunctor must be Default Constructable...", yet from the use of > it, I don't see any actual requirement for this. It seems we just pass > around const references and use the alternate required constructor > mentioned below, along with a copy constructor. I need to set up some > state in my RelationFunctors and I would prefer to do it during > construction, along with providing the correct copy constructors and a > version of this required constructor which is essentially a copy > constructor++. > > So I guess my question boils down to: "How do I set and keep state in > RelationFunctors?" Any non-trivial use of Relations will require this. I concur with your analysis. See src/Field/Relations/PeriodicFaceBC.h for an example. It does not have a default constructor but does have a non-default, non-copy constructor. I have attached a patch aligning the comments to the extant source code. Would someone (Scott? Stephen?) approve these changes? I also added the (gratituous) change of s/L/Target/. Thanks, Jeffrey D. Oldham oldham at codesourcery.com 2002Mar11 Jeffrey D. Oldham This patch corrects functor requirement comments and improves them by replacing "L" by "Target". * Relations.h (Relation[0-6]): Change introductory comment, replacing "Default Constructable" with "Copy Constructible." Change constructor specification to list "RelationFunctor" first. Change "L" to "Target". (RelationFunctionPtr[0-6]): Change template parameter's name from "L" to "Target". (RelationMemberPtr[0-6]): Likewise. (newRelation): Likewise. (functionPtr): Likewise. (memberPtr): Likewise. Tested on sequential Linux using g++ by compiling Pooma library and running all Field tests. Approved by ??you?? Applied to mainline -------------- next part -------------- Index: Relations.h =================================================================== RCS file: /home/pooma/Repository/r2/src/Field/Relations/Relations.h,v retrieving revision 1.2 diff -c -p -r1.2 Relations.h *** Relations.h 2001/10/12 17:58:43 1.2 --- Relations.h 2002/03/11 23:11:51 *************** private: *** 105,122 **** // ---------------------------------------------------------------------------- // Relation0 is a template used to construct relations, such as boundary // conditions, that do not depend on additional fields. The Target must be ! // a Field. The RelationFunctor must be Default Constructable and Assignable. // In addition, it must provide the constructor // ! // template ! // RelationFunctor(const L &, const RelationFunctor &) // // and the member function // ! // template ! // void operator()(const L &) const // ! // where L is a Field. The constructor should use the arguments to // initialize itself and the function should apply the relation. // ---------------------------------------------------------------------------- --- 105,122 ---- // ---------------------------------------------------------------------------- // Relation0 is a template used to construct relations, such as boundary // conditions, that do not depend on additional fields. The Target must be ! // a Field. The RelationFunctor must be Copy Constructible and Assignable. // In addition, it must provide the constructor // ! // template ! // RelationFunctor(const RelationFunctor &, const Target &) // // and the member function // ! // template ! // void operator()(const Target &) const // ! // where Target is a Field. The constructor should use the arguments to // initialize itself and the function should apply the relation. // ---------------------------------------------------------------------------- *************** public: *** 159,177 **** // ---------------------------------------------------------------------------- // Relation1 is a template used to construct relations that depend on one // additional field (e.g., a = b). The Target must be ! // a Field. The RelationFunctor must be Default Constructable and Assignable. // In addition, it must provide the constructor // ! // template ! // RelationFunctor(const L &, const R1 &, ! // const RelationFunctor &) // // and the member function // ! // template ! // void operator()(const L &const R1 &) const // ! // where L and R1 are Fields. The constructor should use the arguments to // initialize itself and the function should apply the relation. // ---------------------------------------------------------------------------- --- 159,177 ---- // ---------------------------------------------------------------------------- // Relation1 is a template used to construct relations that depend on one // additional field (e.g., a = b). The Target must be ! // a Field. The RelationFunctor must be Copy Constructible and Assignable. // In addition, it must provide the constructor // ! // template ! // RelationFunctor(const RelationFunctor &, const Target &, const R1 &) ! // // // and the member function // ! // template ! // void operator()(const Target &, const R1 &) const // ! // where Target and R1 are Fields. The constructor should use the arguments to // initialize itself and the function should apply the relation. // ---------------------------------------------------------------------------- *************** protected: *** 221,240 **** // ---------------------------------------------------------------------------- // Relation2 is a template used to construct relations that depend on two // additional fields (e.g., a = b + c). The Target must be ! // a Field. The RelationFunctor must be Default Constructable and Assignable. // In addition, it must provide the constructor // ! // template ! // RelationFunctor(const L &, const R1 &, const R2 &, ! // const RelationFunctor &) // // and the member function // ! // template ! // void operator()(const L &const R1 &, const R2 &) const // ! // where L, R1, and R2 are Fields. The constructor should use the arguments to ! // initialize itself and the function should apply the relation. // ---------------------------------------------------------------------------- template --- 221,241 ---- // ---------------------------------------------------------------------------- // Relation2 is a template used to construct relations that depend on two // additional fields (e.g., a = b + c). The Target must be ! // a Field. The RelationFunctor must be Copy Constructible and Assignable. // In addition, it must provide the constructor // ! // template ! // RelationFunctor(const RelationFunctor &, ! // const Target &, const R1 &, const R2 &) // // and the member function // ! // template ! // void operator()(const Target &, const R1 &, const R2 &) const // ! // where Target, R1, and R2 are Fields. The constructor should use the ! // arguments to initialize itself and the function should apply the ! // relation. // ---------------------------------------------------------------------------- template *************** protected: *** 285,303 **** // ---------------------------------------------------------------------------- // Relation3 is a template used to construct relations that depend on three // additional fields (e.g., a = b + c + d). The Target must be ! // a Field. The RelationFunctor must be Default Constructable and Assignable. // In addition, it must provide the constructor // ! // template ! // RelationFunctor(const L &, const R1 &, const R2 &, const R3 &, // const RelationFunctor &) // // and the member function // ! // template ! // void operator()(const L &const R1 &, const R2 &, const R3 &) const // ! // where L, R1, R2, and R3 are Fields. The constructor should use // the arguments to initialize itself and the function should apply the // relation. // ---------------------------------------------------------------------------- --- 286,304 ---- // ---------------------------------------------------------------------------- // Relation3 is a template used to construct relations that depend on three // additional fields (e.g., a = b + c + d). The Target must be ! // a Field. The RelationFunctor must be Copy Constructible and Assignable. // In addition, it must provide the constructor // ! // template ! // RelationFunctor(const Target &, const R1 &, const R2 &, const R3 &, // const RelationFunctor &) // // and the member function // ! // template ! // void operator()(const Target &const R1 &, const R2 &, const R3 &) const // ! // where Target, R1, R2, and R3 are Fields. The constructor should use // the arguments to initialize itself and the function should apply the // relation. // ---------------------------------------------------------------------------- *************** protected: *** 355,374 **** // ---------------------------------------------------------------------------- // Relation4 is a template used to construct relations that depend on four // additional fields (e.g., a = b + c + d + e). The Target must be ! // a Field. The RelationFunctor must be Default Constructable and Assignable. // In addition, it must provide the constructor // ! // template ! // RelationFunctor(const L &, const R1 &, const R2 &, const R3 &, ! // const R4 &, const RelationFunctor &) // // and the member function // ! // template ! // void operator()(const L &const R1 &, const R2 &, const R3 &, // const R4 &) const // ! // where L, R1, R2, R3, and R4 are Fields. The constructor should use // the arguments to initialize itself and the function should apply the // relation. // ---------------------------------------------------------------------------- --- 356,376 ---- // ---------------------------------------------------------------------------- // Relation4 is a template used to construct relations that depend on four // additional fields (e.g., a = b + c + d + e). The Target must be ! // a Field. The RelationFunctor must be Copy Constructible and Assignable. // In addition, it must provide the constructor // ! // template ! // RelationFunctor(const RelationFunctor &, ! // const Target &, const R1 &, const R2 &, const R3 &, ! // const R4 &) // // and the member function // ! // template ! // void operator()(const Target &, const R1 &, const R2 &, const R3 &, // const R4 &) const // ! // where Target, R1, R2, R3, and R4 are Fields. The constructor should use // the arguments to initialize itself and the function should apply the // relation. // ---------------------------------------------------------------------------- *************** protected: *** 430,449 **** // ---------------------------------------------------------------------------- // Relation5 is a template used to construct relations that depend on five // additional fields (e.g., a = b + c + d + e + f). The Target must be ! // a Field. The RelationFunctor must be Default Constructable and Assignable. // In addition, it must provide the constructor // ! // template ! // RelationFunctor(const L &, const R1 &, const R2 &, const R3 &, ! // const R4 &, const R5 &, const RelationFunctor &) // // and the member function // ! // template ! // void operator()(const L &const R1 &, const R2 &, const R3 &, // const R4 &, const R5 &) const // ! // where L, R1, R2, R3, R4, and R5 are Fields. The constructor should use // the arguments to initialize itself and the function should apply the // relation. // ---------------------------------------------------------------------------- --- 432,452 ---- // ---------------------------------------------------------------------------- // Relation5 is a template used to construct relations that depend on five // additional fields (e.g., a = b + c + d + e + f). The Target must be ! // a Field. The RelationFunctor must be Copy Constructible and Assignable. // In addition, it must provide the constructor // ! // template ! // RelationFunctor(const RelationFunctor &, ! // const Target &, const R1 &, const R2 &, const R3 &, ! // const R4 &, const R5 &) // // and the member function // ! // template ! // void operator()(const Target &, const R1 &, const R2 &, const R3 &, // const R4 &, const R5 &) const // ! // where Target, R1, R2, R3, R4, and R5 are Fields. The constructor should use // the arguments to initialize itself and the function should apply the // relation. // ---------------------------------------------------------------------------- *************** protected: *** 508,532 **** // ---------------------------------------------------------------------------- // Relation6 is a template used to construct relations that depend on six // additional fields (e.g., a = b + c + d + e + f + g). The Target must be ! // a Field. The RelationFunctor must be Default Constructable and Assignable. // In addition, it must provide the constructor // ! // template ! // RelationFunctor(const L &, const R1 &, const R2 &, const R3 &, ! // const R4 &, const R5 &, const R6 &, ! // const RelationFunctor &) // // and the member function // ! // template ! // void operator()(const L &const R1 &, const R2 &, const R3 &, // const R4 &, const R5 &, const R6 &) const // ! // where L, R1, R2, R3, R4, R5, and R6 are Fields. The constructor should use ! // the arguments to initialize itself and the function should apply the ! // relation. // ---------------------------------------------------------------------------- template ! // RelationFunctor(const RelationFunctor &, ! // const Target &, const R1 &, const R2 &, const R3 &, ! // const R4 &, const R5 &, const R6 &) // // and the member function // ! // template ! // void operator()(const Target &, const R1 &, const R2 &, const R3 &, // const R4 &, const R5 &, const R6 &) const // ! // where Target, R1, R2, R3, R4, R5, and R6 are Fields. The ! // constructor should use the arguments to initialize itself and the ! // function should apply the relation. // ---------------------------------------------------------------------------- template class RelationFunctionPtr0 { public: ! RelationFunctionPtr0(void (*f)(const L &)) : f_m(f) { } ! RelationFunctionPtr0(const RelationFunctionPtr0 &init, const L &) : f_m(init.f_m) { } ! inline void operator()(const L &l) { f_m(l); } private: ! void (*f_m)(const L &); }; ! template class RelationFunctionPtr1 { public: ! RelationFunctionPtr1(void (*f)(const L &, const R1 &)) : f_m(f) { } ! RelationFunctionPtr1(const RelationFunctionPtr1 &init, const L &) : f_m(init.f_m) { } ! inline void operator()(const L &l, const R1 &r1) { f_m(l, r1); } private: ! void (*f_m)(const L &, const R1 &); }; ! template class RelationFunctionPtr2 { public: ! RelationFunctionPtr2(void (*f)(const L &, const R1 &, const R2 &)) : f_m(f) { } ! RelationFunctionPtr2(const RelationFunctionPtr2 &init, const L &) : f_m(init.f_m) { } ! inline void operator()(const L &l, const R1 &r1, const R2 &r2) { f_m(l, r1, r2); } private: ! void (*f_m)(const L &, const R1 &, const R2 &); }; ! template class RelationFunctionPtr3 { public: ! RelationFunctionPtr3(void (*f)(const L &, const R1 &, const R2 &, const R3 &)) : f_m(f) { } RelationFunctionPtr3( ! const RelationFunctionPtr3 &model) : f_m(model.f_m) { } RelationFunctionPtr3( ! const RelationFunctionPtr3 &init, const L &) : f_m(init.f_m) { } ! inline void operator()(const L &l, const R1 &r1, const R2 &r2, const R3 &r3) { f_m(l, r1, r2, r3); --- 596,682 ---- // Relation functors supporting the use of function pointers. //----------------------------------------------------------------------------- ! template class RelationFunctionPtr0 { public: ! RelationFunctionPtr0(void (*f)(const Target &)) : f_m(f) { } ! RelationFunctionPtr0(const RelationFunctionPtr0 &init, const Target &) : f_m(init.f_m) { } ! inline void operator()(const Target &l) { f_m(l); } private: ! void (*f_m)(const Target &); }; ! template class RelationFunctionPtr1 { public: ! RelationFunctionPtr1(void (*f)(const Target &, const R1 &)) : f_m(f) { } ! RelationFunctionPtr1(const RelationFunctionPtr1 &init, const Target &) : f_m(init.f_m) { } ! inline void operator()(const Target &l, const R1 &r1) { f_m(l, r1); } private: ! void (*f_m)(const Target &, const R1 &); }; ! template class RelationFunctionPtr2 { public: ! RelationFunctionPtr2(void (*f)(const Target &, const R1 &, const R2 &)) : f_m(f) { } ! RelationFunctionPtr2(const RelationFunctionPtr2 &init, const Target &) : f_m(init.f_m) { } ! inline void operator()(const Target &l, const R1 &r1, const R2 &r2) { f_m(l, r1, r2); } private: ! void (*f_m)(const Target &, const R1 &, const R2 &); }; ! template class RelationFunctionPtr3 { public: ! RelationFunctionPtr3(void (*f)(const Target &, const R1 &, const R2 &, const R3 &)) : f_m(f) { } RelationFunctionPtr3( ! const RelationFunctionPtr3 &model) : f_m(model.f_m) { } RelationFunctionPtr3( ! const RelationFunctionPtr3 &init, const Target &) : f_m(init.f_m) { } ! inline void operator()(const Target &l, const R1 &r1, const R2 &r2, const R3 &r3) { f_m(l, r1, r2, r3); *************** public: *** 681,707 **** private: ! void (*f_m)(const L &, const R1 &, const R2 &, const R3 &); }; ! template class RelationFunctionPtr4 { public: ! RelationFunctionPtr4(void (*f)(const L &, const R1 &, const R2 &, const R3 &, const R4 &)) : f_m(f) { } RelationFunctionPtr4( ! const RelationFunctionPtr4 &model) : f_m(model.f_m) { } RelationFunctionPtr4( ! const RelationFunctionPtr4 &init, const L &) : f_m(init.f_m) { } ! inline void operator()(const L &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4) { f_m(l, r1, r2, r3, r4); --- 684,710 ---- private: ! void (*f_m)(const Target &, const R1 &, const R2 &, const R3 &); }; ! template class RelationFunctionPtr4 { public: ! RelationFunctionPtr4(void (*f)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &)) : f_m(f) { } RelationFunctionPtr4( ! const RelationFunctionPtr4 &model) : f_m(model.f_m) { } RelationFunctionPtr4( ! const RelationFunctionPtr4 &init, const Target &) : f_m(init.f_m) { } ! inline void operator()(const Target &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4) { f_m(l, r1, r2, r3, r4); *************** public: *** 709,737 **** private: ! void (*f_m)(const L &, const R1 &, const R2 &, const R3 &, const R4 &); }; ! template class RelationFunctionPtr5 { public: ! RelationFunctionPtr5(void (*f)(const L &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &)) : f_m(f) { } RelationFunctionPtr5( ! const RelationFunctionPtr5 &model) : f_m(model.f_m) { } RelationFunctionPtr5( ! const RelationFunctionPtr5 &init, const L &) : f_m(init.f_m) { } ! inline void operator()(const L &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4, const R5 &r5) { f_m(l, r1, r2, r3, r4, r5); --- 712,740 ---- private: ! void (*f_m)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &); }; ! template class RelationFunctionPtr5 { public: ! RelationFunctionPtr5(void (*f)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &)) : f_m(f) { } RelationFunctionPtr5( ! const RelationFunctionPtr5 &model) : f_m(model.f_m) { } RelationFunctionPtr5( ! const RelationFunctionPtr5 &init, const Target &) : f_m(init.f_m) { } ! inline void operator()(const Target &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4, const R5 &r5) { f_m(l, r1, r2, r3, r4, r5); *************** public: *** 739,767 **** private: ! void (*f_m)(const L &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &); }; ! template class RelationFunctionPtr6 { public: ! RelationFunctionPtr6(void (*f)(const L &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &, const R6 &)) : f_m(f) { } RelationFunctionPtr6( ! const RelationFunctionPtr6 &model) : f_m(model.f_m) { } RelationFunctionPtr6( ! const RelationFunctionPtr6 &init, const L &) : f_m(init.f_m) { } ! inline void operator()(const L &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4, const R5 &r5, const R6 &r6) { f_m(l, r1, r2, r3, r4, r5, r6); --- 742,770 ---- private: ! void (*f_m)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &); }; ! template class RelationFunctionPtr6 { public: ! RelationFunctionPtr6(void (*f)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &, const R6 &)) : f_m(f) { } RelationFunctionPtr6( ! const RelationFunctionPtr6 &model) : f_m(model.f_m) { } RelationFunctionPtr6( ! const RelationFunctionPtr6 &init, const Target &) : f_m(init.f_m) { } ! inline void operator()(const Target &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4, const R5 &r5, const R6 &r6) { f_m(l, r1, r2, r3, r4, r5, r6); *************** public: *** 769,775 **** private: ! void (*f_m)(const L &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &, const R6 &); }; --- 772,778 ---- private: ! void (*f_m)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &, const R6 &); }; *************** private: *** 778,798 **** // Relation functors supporting the use of member function pointers. //----------------------------------------------------------------------------- ! template class RelationMemberPtr0 { public: ! RelationMemberPtr0(const C &obj, void (C::*f)(const L &)) : obj_m(obj), f_m(f) { } ! RelationMemberPtr0(const RelationMemberPtr0 &model) : obj_m(model.obj_m), f_m(model.f_m) { } ! RelationMemberPtr0(const RelationMemberPtr0 &init, const L &) : obj_m(init.obj_m), f_m(init.f_m) { } ! inline void operator()(const L &l) { (obj_m.*f_m)(l); } --- 781,801 ---- // Relation functors supporting the use of member function pointers. //----------------------------------------------------------------------------- ! template class RelationMemberPtr0 { public: ! RelationMemberPtr0(const C &obj, void (C::*f)(const Target &)) : obj_m(obj), f_m(f) { } ! RelationMemberPtr0(const RelationMemberPtr0 &model) : obj_m(model.obj_m), f_m(model.f_m) { } ! RelationMemberPtr0(const RelationMemberPtr0 &init, const Target &) : obj_m(init.obj_m), f_m(init.f_m) { } ! inline void operator()(const Target &l) { (obj_m.*f_m)(l); } *************** public: *** 800,824 **** private: C obj_m; ! void (C::*f_m)(const L &); }; ! template class RelationMemberPtr1 { public: ! RelationMemberPtr1(const C &obj, void (C::*f)(const L &, const R1 &)) : obj_m(obj), f_m(f) { } ! RelationMemberPtr1(const RelationMemberPtr1 &model) : obj_m(model.obj_m), f_m(model.f_m) { } ! RelationMemberPtr1(const RelationMemberPtr1 &init, const L &) : obj_m(init.obj_m), f_m(init.f_m) { } ! inline void operator()(const L &l, const R1 &r1) { (obj_m.*f_m)(l, r1); } --- 803,827 ---- private: C obj_m; ! void (C::*f_m)(const Target &); }; ! template class RelationMemberPtr1 { public: ! RelationMemberPtr1(const C &obj, void (C::*f)(const Target &, const R1 &)) : obj_m(obj), f_m(f) { } ! RelationMemberPtr1(const RelationMemberPtr1 &model) : obj_m(model.obj_m), f_m(model.f_m) { } ! RelationMemberPtr1(const RelationMemberPtr1 &init, const Target &) : obj_m(init.obj_m), f_m(init.f_m) { } ! inline void operator()(const Target &l, const R1 &r1) { (obj_m.*f_m)(l, r1); } *************** public: *** 826,850 **** private: C obj_m; ! void (C::*f_m)(const L &, const R1 &); }; ! template class RelationMemberPtr2 { public: ! RelationMemberPtr2(const C &obj, void (C::*f)(const L &, const R1 &, const R2 &)) : obj_m(obj), f_m(f) { } ! RelationMemberPtr2(const RelationMemberPtr2 &model) : obj_m(model.obj_m), f_m(model.f_m) { } ! RelationMemberPtr2(const RelationMemberPtr2 &init, const L &) : obj_m(init.obj_m), f_m(init.f_m) { } ! inline void operator()(const L &l, const R1 &r1, const R2 &r2) { (obj_m.*f_m)(l, r1, r2); } --- 829,853 ---- private: C obj_m; ! void (C::*f_m)(const Target &, const R1 &); }; ! template class RelationMemberPtr2 { public: ! RelationMemberPtr2(const C &obj, void (C::*f)(const Target &, const R1 &, const R2 &)) : obj_m(obj), f_m(f) { } ! RelationMemberPtr2(const RelationMemberPtr2 &model) : obj_m(model.obj_m), f_m(model.f_m) { } ! RelationMemberPtr2(const RelationMemberPtr2 &init, const Target &) : obj_m(init.obj_m), f_m(init.f_m) { } ! inline void operator()(const Target &l, const R1 &r1, const R2 &r2) { (obj_m.*f_m)(l, r1, r2); } *************** public: *** 852,878 **** private: C obj_m; ! void (C::*f_m)(const L &, const R1 &, const R2 &); }; ! template class RelationMemberPtr3 { public: ! RelationMemberPtr3(const C &obj, void (C::*f)(const L &, const R1 &, const R2 &, const R3 &)) : obj_m(obj), f_m(f) { } RelationMemberPtr3( ! const RelationMemberPtr3 &model) : obj_m(model.obj_m), f_m(model.f_m) { } RelationMemberPtr3( ! const RelationMemberPtr3 &init, const L &) : obj_m(init.obj_m), f_m(init.f_m) { } ! inline void operator()(const L &l, const R1 &r1, const R2 &r2, const R3 &r3) { (obj_m.*f_m)(l, r1, r2, r3); --- 855,881 ---- private: C obj_m; ! void (C::*f_m)(const Target &, const R1 &, const R2 &); }; ! template class RelationMemberPtr3 { public: ! RelationMemberPtr3(const C &obj, void (C::*f)(const Target &, const R1 &, const R2 &, const R3 &)) : obj_m(obj), f_m(f) { } RelationMemberPtr3( ! const RelationMemberPtr3 &model) : obj_m(model.obj_m), f_m(model.f_m) { } RelationMemberPtr3( ! const RelationMemberPtr3 &init, const Target &) : obj_m(init.obj_m), f_m(init.f_m) { } ! inline void operator()(const Target &l, const R1 &r1, const R2 &r2, const R3 &r3) { (obj_m.*f_m)(l, r1, r2, r3); *************** public: *** 881,907 **** private: C obj_m; ! void (C::*f_m)(const L &, const R1 &, const R2 &, const R3 &); }; ! template class RelationMemberPtr4 { public: ! RelationMemberPtr4(const C &obj, void (C::*f)(const L &, const R1 &, const R2 &, const R3 &, const R4 &)) : obj_m(obj), f_m(f) { } RelationMemberPtr4( ! const RelationMemberPtr4 &model) : obj_m(model.obj_m), f_m(model.f_m) { } RelationMemberPtr4( ! const RelationMemberPtr4 &init, const L &) : obj_m(init.obj_m), f_m(init.f_m) { } ! inline void operator()(const L &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4) { (obj_m.*f_m)(l, r1, r2, r3, r4); --- 884,910 ---- private: C obj_m; ! void (C::*f_m)(const Target &, const R1 &, const R2 &, const R3 &); }; ! template class RelationMemberPtr4 { public: ! RelationMemberPtr4(const C &obj, void (C::*f)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &)) : obj_m(obj), f_m(f) { } RelationMemberPtr4( ! const RelationMemberPtr4 &model) : obj_m(model.obj_m), f_m(model.f_m) { } RelationMemberPtr4( ! const RelationMemberPtr4 &init, const Target &) : obj_m(init.obj_m), f_m(init.f_m) { } ! inline void operator()(const Target &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4) { (obj_m.*f_m)(l, r1, r2, r3, r4); *************** public: *** 910,938 **** private: C obj_m; ! void (C::*f_m)(const L &, const R1 &, const R2 &, const R3 &, const R4 &); }; ! template class RelationMemberPtr5 { public: ! RelationMemberPtr5(const C &obj, void (C::*f)(const L &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &)) : obj_m(obj), f_m(f) { } RelationMemberPtr5( ! const RelationMemberPtr5 &model) : obj_m(model.obj_m), f_m(model.f_m) { } RelationMemberPtr5( ! const RelationMemberPtr5 &init, const L &) : obj_m(init.obj_m), f_m(init.f_m) { } ! inline void operator()(const L &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4, const R5 &r5) { (obj_m.*f_m)(l, r1, r2, r3, r4, r5); --- 913,941 ---- private: C obj_m; ! void (C::*f_m)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &); }; ! template class RelationMemberPtr5 { public: ! RelationMemberPtr5(const C &obj, void (C::*f)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &)) : obj_m(obj), f_m(f) { } RelationMemberPtr5( ! const RelationMemberPtr5 &model) : obj_m(model.obj_m), f_m(model.f_m) { } RelationMemberPtr5( ! const RelationMemberPtr5 &init, const Target &) : obj_m(init.obj_m), f_m(init.f_m) { } ! inline void operator()(const Target &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4, const R5 &r5) { (obj_m.*f_m)(l, r1, r2, r3, r4, r5); *************** public: *** 941,969 **** private: C obj_m; ! void (C::*f_m)(const L &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &); }; ! template class RelationMemberPtr6 { public: ! RelationMemberPtr6(const C &obj, void (C::*f)(const L &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &, const R6 &)) : obj_m(obj), f_m(f) { } RelationMemberPtr6( ! const RelationMemberPtr6 &model) : obj_m(model.obj_m), f_m(model.f_m) { } RelationMemberPtr6( ! const RelationMemberPtr6 &init, const L &) : obj_m(init.obj_m), f_m(init.f_m) { } ! inline void operator()(const L &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4, const R5 &r5, const R6 &r6) { (obj_m.*f_m)(l, r1, r2, r3, r4, r5, r6); --- 944,972 ---- private: C obj_m; ! void (C::*f_m)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &); }; ! template class RelationMemberPtr6 { public: ! RelationMemberPtr6(const C &obj, void (C::*f)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &, const R6 &)) : obj_m(obj), f_m(f) { } RelationMemberPtr6( ! const RelationMemberPtr6 &model) : obj_m(model.obj_m), f_m(model.f_m) { } RelationMemberPtr6( ! const RelationMemberPtr6 &init, const Target &) : obj_m(init.obj_m), f_m(init.f_m) { } ! inline void operator()(const Target &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4, const R5 &r5, const R6 &r6) { (obj_m.*f_m)(l, r1, r2, r3, r4, r5, r6); *************** public: *** 972,978 **** private: C obj_m; ! void (C::*f_m)(const L &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &, const R6 &); }; --- 975,981 ---- private: C obj_m; ! void (C::*f_m)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &, const R5 &, const R6 &); }; *************** namespace Pooma { *** 999,1049 **** //--------------------------------------------------------------------------- // Functor versions ! template ! void newRelation(const RelationFunctor &f, const L &l) { for (int m = 0; m < l.numMaterials(); ++m) { for (int c = 0; c < l.centeringSize(); ++c) { ! const L &lsub = l.subField(m, c); ! RelationListItem *r = new Relation0(lsub, f); r->setPriority(RelationFunctorTraits::defaultPriority); lsub.addRelation(r); } } } ! template ! void newRelation(const RelationFunctor &f, const L &l, const R1 &r1) { for (int m = 0; m < l.numMaterials(); ++m) { for (int c = 0; c < l.centeringSize(); ++c) { ! const L &lsub = l.subField(m, c); const R1 &r1sub = r1.subField(m, c); r1sub.addRelation(new InfluenceRelation(lsub)); RelationListItem *r = new ! Relation1 (lsub, r1sub, f); lsub.addRelation(r); } } } ! template ! void newRelation(const RelationFunctor &f, const L &l, const R1 &r1, const R2 &r2) { for (int m = 0; m < l.numMaterials(); ++m) { for (int c = 0; c < l.centeringSize(); ++c) { ! const L &lsub = l.subField(m, c); const R1 &r1sub = r1.subField(m, c); const R2 &r2sub = r2.subField(m, c); --- 1002,1052 ---- //--------------------------------------------------------------------------- // Functor versions ! template ! void newRelation(const RelationFunctor &f, const Target &l) { for (int m = 0; m < l.numMaterials(); ++m) { for (int c = 0; c < l.centeringSize(); ++c) { ! const Target &lsub = l.subField(m, c); ! RelationListItem *r = new Relation0(lsub, f); r->setPriority(RelationFunctorTraits::defaultPriority); lsub.addRelation(r); } } } ! template ! void newRelation(const RelationFunctor &f, const Target &l, const R1 &r1) { for (int m = 0; m < l.numMaterials(); ++m) { for (int c = 0; c < l.centeringSize(); ++c) { ! const Target &lsub = l.subField(m, c); const R1 &r1sub = r1.subField(m, c); r1sub.addRelation(new InfluenceRelation(lsub)); RelationListItem *r = new ! Relation1 (lsub, r1sub, f); lsub.addRelation(r); } } } ! template ! void newRelation(const RelationFunctor &f, const Target &l, const R1 &r1, const R2 &r2) { for (int m = 0; m < l.numMaterials(); ++m) { for (int c = 0; c < l.centeringSize(); ++c) { ! const Target &lsub = l.subField(m, c); const R1 &r1sub = r1.subField(m, c); const R2 &r2sub = r2.subField(m, c); *************** namespace Pooma { *** 1051,1071 **** r2sub.addRelation(new InfluenceRelation(lsub)); RelationListItem *r = ! new Relation2(lsub, r1sub, r2sub, f); lsub.addRelation(r); } } } ! template ! void newRelation(const RelationFunctor &f, const L &l, const R1 &r1, const R2 &r2, const R3 &r3) { for (int m = 0; m < l.numMaterials(); ++m) { for (int c = 0; c < l.centeringSize(); ++c) { ! const L &lsub = l.subField(m, c); const R1 &r1sub = r1.subField(m, c); const R2 &r2sub = r2.subField(m, c); const R3 &r3sub = r3.subField(m, c); --- 1054,1074 ---- r2sub.addRelation(new InfluenceRelation(lsub)); RelationListItem *r = ! new Relation2(lsub, r1sub, r2sub, f); lsub.addRelation(r); } } } ! template ! void newRelation(const RelationFunctor &f, const Target &l, const R1 &r1, const R2 &r2, const R3 &r3) { for (int m = 0; m < l.numMaterials(); ++m) { for (int c = 0; c < l.centeringSize(); ++c) { ! const Target &lsub = l.subField(m, c); const R1 &r1sub = r1.subField(m, c); const R2 &r2sub = r2.subField(m, c); const R3 &r3sub = r3.subField(m, c); *************** namespace Pooma { *** 1075,1090 **** r3sub.addRelation(new InfluenceRelation(lsub)); RelationListItem *r = new ! Relation3 (lsub, r1sub, r2sub, r3sub, f); lsub.addRelation(r); } } } ! template ! void newRelation(const RelationFunctor &f, const L &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4) { --- 1078,1093 ---- r3sub.addRelation(new InfluenceRelation(lsub)); RelationListItem *r = new ! Relation3 (lsub, r1sub, r2sub, r3sub, f); lsub.addRelation(r); } } } ! template ! void newRelation(const RelationFunctor &f, const Target &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4) { *************** namespace Pooma { *** 1092,1098 **** { for (int c = 0; c < l.centeringSize(); ++c) { ! const L &lsub = l.subField(m, c); const R1 &r1sub = r1.subField(m, c); const R2 &r2sub = r2.subField(m, c); const R3 &r3sub = r3.subField(m, c); --- 1095,1101 ---- { for (int c = 0; c < l.centeringSize(); ++c) { ! const Target &lsub = l.subField(m, c); const R1 &r1sub = r1.subField(m, c); const R2 &r2sub = r2.subField(m, c); const R3 &r3sub = r3.subField(m, c); *************** namespace Pooma { *** 1104,1119 **** r4sub.addRelation(new InfluenceRelation(lsub)); RelationListItem *r = new ! Relation4 (lsub, r1sub, r2sub, r3sub, r4sub, f); lsub.addRelation(r); } } } ! template ! void newRelation(const RelationFunctor &f, const L &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4, const R5 &r5) { --- 1107,1122 ---- r4sub.addRelation(new InfluenceRelation(lsub)); RelationListItem *r = new ! Relation4 (lsub, r1sub, r2sub, r3sub, r4sub, f); lsub.addRelation(r); } } } ! template ! void newRelation(const RelationFunctor &f, const Target &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4, const R5 &r5) { *************** namespace Pooma { *** 1121,1127 **** { for (int c = 0; c < l.centeringSize(); ++c) { ! const L &lsub = l.subField(m, c); const R1 &r1sub = r1.subField(m, c); const R2 &r2sub = r2.subField(m, c); const R3 &r3sub = r3.subField(m, c); --- 1124,1130 ---- { for (int c = 0; c < l.centeringSize(); ++c) { ! const Target &lsub = l.subField(m, c); const R1 &r1sub = r1.subField(m, c); const R2 &r2sub = r2.subField(m, c); const R3 &r3sub = r3.subField(m, c); *************** namespace Pooma { *** 1135,1150 **** r5sub.addRelation(new InfluenceRelation(lsub)); RelationListItem *r = new ! Relation5 (lsub, r1sub, r2sub, r3sub, r4sub, r5sub, f); lsub.addRelation(r); } } } ! template ! void newRelation(const RelationFunctor &f, const L &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4, const R5 &r5, const R6 &r6) { --- 1138,1153 ---- r5sub.addRelation(new InfluenceRelation(lsub)); RelationListItem *r = new ! Relation5 (lsub, r1sub, r2sub, r3sub, r4sub, r5sub, f); lsub.addRelation(r); } } } ! template ! void newRelation(const RelationFunctor &f, const Target &l, const R1 &r1, const R2 &r2, const R3 &r3, const R4 &r4, const R5 &r5, const R6 &r6) { *************** namespace Pooma { *** 1152,1158 **** { for (int c = 0; c < l.centeringSize(); ++c) { ! const L &lsub = l.subField(m, c); const R1 &r1sub = r1.subField(m, c); const R2 &r2sub = r2.subField(m, c); const R3 &r3sub = r3.subField(m, c); --- 1155,1161 ---- { for (int c = 0; c < l.centeringSize(); ++c) { ! const Target &lsub = l.subField(m, c); const R1 &r1sub = r1.subField(m, c); const R2 &r2sub = r2.subField(m, c); const R3 &r3sub = r3.subField(m, c); *************** namespace Pooma { *** 1168,1174 **** r6sub.addRelation(new InfluenceRelation(lsub)); RelationListItem *r = new ! Relation6 (lsub, r1sub, r2sub, r3sub, r4sub, r5sub, r6sub, f); lsub.addRelation(r); } --- 1171,1177 ---- r6sub.addRelation(new InfluenceRelation(lsub)); RelationListItem *r = new ! Relation6 (lsub, r1sub, r2sub, r3sub, r4sub, r5sub, r6sub, f); lsub.addRelation(r); } *************** namespace Pooma { *** 1178,1297 **** //--------------------------------------------------------------------------- // Function pointer versions ! template ! RelationFunctionPtr0 ! functionPtr(void (*f)(const L &)) { ! return RelationFunctionPtr0(f); } ! template ! RelationFunctionPtr1 ! functionPtr(void (*f)(const L &, const R1 &)) { ! return RelationFunctionPtr1(f); } ! template ! RelationFunctionPtr2 ! functionPtr(void (*f)(const L &, const R1 &, const R2 &)) { ! return RelationFunctionPtr2(f); } ! template ! RelationFunctionPtr3 ! functionPtr(void (*f)(const L &, const R1 &, const R2 &, const R3 &)) { ! return RelationFunctionPtr3(f); } ! template ! RelationFunctionPtr4 ! functionPtr(void (*f)(const L &, const R1 &, const R2 &, const R3 &, const R4 &r4)) { ! return RelationFunctionPtr4(f); } ! template ! RelationFunctionPtr5 ! functionPtr(void (*f)(const L &, const R1 &, const R2 &, const R3 &, const R4 &r4, const R5 &r5)) { ! return RelationFunctionPtr5(f); } ! template ! RelationFunctionPtr6 ! functionPtr(void (*f)(const L &, const R1 &, const R2 &, const R3 &, const R4 &r4, const R5 &r5, const R6 &r6)) { ! return RelationFunctionPtr6(f); } //--------------------------------------------------------------------------- // Member function pointer versions ! template ! RelationMemberPtr0 ! memberPtr(const C &obj, void (C::*f)(const L &)) { ! return RelationMemberPtr0(obj, f); } ! template ! RelationMemberPtr1 ! memberPtr(const C &obj, void (C::*f)(const L &, const R1 &)) { ! return RelationMemberPtr1(obj, f); } ! template ! RelationMemberPtr2 ! memberPtr(const C &obj, void (C::*f)(const L &, const R1 &, const R2 &)) { ! return RelationMemberPtr2(obj, f); } ! template ! RelationMemberPtr3 memberPtr(const C &obj, ! void (C::*f)(const L &, const R1 &, const R2 &, const R3 &)) { ! return RelationMemberPtr3(obj, f); } ! template ! RelationMemberPtr4 memberPtr(const C &obj, ! void (C::*f)(const L &, const R1 &, const R2 &, const R3 &, const R4 &r4)) { ! return RelationMemberPtr4(obj, f); } ! template ! RelationMemberPtr5 memberPtr(const C &obj, ! void (C::*f)(const L &, const R1 &, const R2 &, const R3 &, const R4 &r4, const R5 &r5)) { ! return RelationMemberPtr5(obj, f); } ! template ! RelationMemberPtr6 memberPtr(const C &obj, ! void (C::*f)(const L &, const R1 &, const R2 &, const R3 &, const R4 &r4, const R5 &r5, const R6 &r6)) { ! return RelationMemberPtr6(obj, f); } } // namespace Pooma --- 1181,1300 ---- //--------------------------------------------------------------------------- // Function pointer versions ! template ! RelationFunctionPtr0 ! functionPtr(void (*f)(const Target &)) { ! return RelationFunctionPtr0(f); } ! template ! RelationFunctionPtr1 ! functionPtr(void (*f)(const Target &, const R1 &)) { ! return RelationFunctionPtr1(f); } ! template ! RelationFunctionPtr2 ! functionPtr(void (*f)(const Target &, const R1 &, const R2 &)) { ! return RelationFunctionPtr2(f); } ! template ! RelationFunctionPtr3 ! functionPtr(void (*f)(const Target &, const R1 &, const R2 &, const R3 &)) { ! return RelationFunctionPtr3(f); } ! template ! RelationFunctionPtr4 ! functionPtr(void (*f)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &r4)) { ! return RelationFunctionPtr4(f); } ! template ! RelationFunctionPtr5 ! functionPtr(void (*f)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &r4, const R5 &r5)) { ! return RelationFunctionPtr5(f); } ! template ! RelationFunctionPtr6 ! functionPtr(void (*f)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &r4, const R5 &r5, const R6 &r6)) { ! return RelationFunctionPtr6(f); } //--------------------------------------------------------------------------- // Member function pointer versions ! template ! RelationMemberPtr0 ! memberPtr(const C &obj, void (C::*f)(const Target &)) { ! return RelationMemberPtr0(obj, f); } ! template ! RelationMemberPtr1 ! memberPtr(const C &obj, void (C::*f)(const Target &, const R1 &)) { ! return RelationMemberPtr1(obj, f); } ! template ! RelationMemberPtr2 ! memberPtr(const C &obj, void (C::*f)(const Target &, const R1 &, const R2 &)) { ! return RelationMemberPtr2(obj, f); } ! template ! RelationMemberPtr3 memberPtr(const C &obj, ! void (C::*f)(const Target &, const R1 &, const R2 &, const R3 &)) { ! return RelationMemberPtr3(obj, f); } ! template ! RelationMemberPtr4 memberPtr(const C &obj, ! void (C::*f)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &r4)) { ! return RelationMemberPtr4(obj, f); } ! template ! RelationMemberPtr5 memberPtr(const C &obj, ! void (C::*f)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &r4, const R5 &r5)) { ! return RelationMemberPtr5(obj, f); } ! template ! RelationMemberPtr6 memberPtr(const C &obj, ! void (C::*f)(const Target &, const R1 &, const R2 &, const R3 &, const R4 &r4, const R5 &r5, const R6 &r6)) { ! return RelationMemberPtr6(obj, f); } } // namespace Pooma From oldham at codesourcery.com Fri Mar 15 23:12:11 2002 From: oldham at codesourcery.com (Jeffrey D. Oldham) Date: Fri, 15 Mar 2002 15:12:11 -0800 Subject: Manual Patch: Fix Typos and Some Indexing Message-ID: <20020315151211.A8082@vaio.codesourcery.com> 2002-Mar-15 Jeffrey D. Oldham Minor manual formatting changes. * starting.xml: s/the the/the/. Change formatting of comment. * template.xml: Merge indexterms and text to avoid unwanted spaces in output. * tutorial.xml: Fix typos. * figures/distributed-101.png: Changes reflecting distributed.mp. * figures/distributed.mp: Avoid ligature problem. Approved by me! Applied to mainline Thanks, Jeffrey D. Oldham oldham at codesourcery.com -------------- next part -------------- Index: starting.xml =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/starting.xml,v retrieving revision 1.2 diff -c -p -r1.2 starting.xml *** starting.xml 2002/03/04 23:48:09 1.2 --- starting.xml 2002/03/15 23:07:20 *************** *** 80,95 **** &pooma; is open-source software, freely available via the Internet or perhaps packaged with this &book;. CodeSourcery, LLC, ! currently hosts the &poomatoolkit; source code. Download the the &pooma; source code &poomasourcefile; from the &pooma; download page (&poomadownloadpage;) available off the &pooma; home page (&poomahomepage;). The tgz indicates this is a compressed tar archive file. For a UNIX operating system, one can extract the source files using the ! command tar xzvf &poomasourcefile;. ! --- 80,95 ---- &pooma; is open-source software, freely available via the Internet or perhaps packaged with this &book;. CodeSourcery, LLC, ! currently hosts the &poomatoolkit; source code. Download the &pooma; source code &poomasourcefile; from the &pooma; download page (&poomadownloadpage;) available off the &pooma; home page (&poomahomepage;). The tgz indicates this is a compressed tar archive file. For a UNIX operating system, one can extract the source files using the ! command tar xzvf &poomasourcefile;. Index: template.xml =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/template.xml,v retrieving revision 1.8 diff -c -p -r1.8 template.xml *** template.xml 2002/03/04 23:48:09 1.8 --- template.xml 2002/03/15 23:07:21 *************** *** 22,39 **** compiler, not when a program runs. ! Templates permit declaring families of classes using a ! single declaration. For example, the &array; ! ! &array; ! ! ! type polymorphism ! ! template ! declaration permits using &array;s with many different value ! types, e.g., arrays of integers, arrays of floating point ! numbers, and arrays of arrays. For those interested in the implementation of &pooma;, we close the --- 22,37 ---- compiler, not when a program runs. ! Templates ! permit declaring families of classes using a single declaration. ! For example, the ! &array;&array;type ! polymorphismtemplate declaration permits ! using &array;s with many different value types, e.g., arrays of ! integers, arrays of floating point numbers, and arrays of ! arrays. For those interested in the implementation of &pooma;, we close the *************** *** 61,99 **** program's interesting computation occurred when it was executed. When writing the program, the programmer, at programming ! time, ! ! programming time ! ! would specify which statements and expressions will occur and ! which types to use. At compile time, the compiler would convert the program's source code into an executable program. Even though the compiler uses the types to produce the executable, no interesting computation would occur. At run ! time, ! ! run time ! ! the resulting executable program ! would actually perform the operations. The introduction of templates permits interesting computation to occur while the compiler produces the executable. ! Most interesting is template instantiation, ! ! template ! instantiation ! ! which produces a type ! at compile time. For example, the &array; type ! definition requires template parameters Dim, ! T, and EngineTag, specifying ! its dimension, the type of its values, and its &engine; type. To ! use this, a programmer specifies values for the template ! parameters: Array<2,double,Brick> specifies a dimension of 2, a value type of &double;, and the &brick; &engine; type. At compile time, the compiler creates a --- 59,87 ---- program's interesting computation occurred when it was executed. When writing the program, the programmer, at programming ! time,programming ! time would specify which statements and ! expressions will occur and which types to use. At compile time, the compiler would convert the program's source code into an executable program. Even though the compiler uses the types to produce the executable, no interesting computation would occur. At run ! time,run ! time the resulting executable program would ! actually perform the operations. The introduction of templates permits interesting computation to occur while the compiler produces the executable. ! Most interesting is template ! instantiation,templateinstantiation ! which produces a type at compile time. For example, the &array; ! type definition requires template parameters ! Dim, T, and ! EngineTag, specifying its dimension, the type ! of its values, and its &engine; type. To use this, a programmer ! specifies values for the template parameters: Array<2,double,Brick> specifies a dimension of 2, a value type of &double;, and the &brick; &engine; type. At compile time, the compiler creates a *************** *** 110,135 **** computable. Unfortunately, syntax for compile-time computation is more difficult than for run-time computation. Also current compilers are not as efficient as code executed by hardware. ! Run-time &cc; constructs are Turing-complete ! ! Turing complete ! ! so using templates is ! unnecessary. Thus, we can shift computation to the time which ! best trades off the ease of expressing syntax with the speed of ! computation by programmer, compiler, or computer chip. For ! example, &pooma; uses expression template technology ! ! expression templates ! ! to speed ! run-time execution of data-parallel statements. The &pooma; ! developers decided to shift some of the computation from run-time ! to compile-time using template computations. The resulting ! run-time code runs more quickly, but compiling the code takes ! longer. Also, programming time for the &pooma; developers ! increased significantly, but, most users, who are usually most ! concerned about decreasing run times, benefited.
--- 98,118 ---- computable. Unfortunately, syntax for compile-time computation is more difficult than for run-time computation. Also current compilers are not as efficient as code executed by hardware. ! Run-time &cc; constructs are ! Turing-completeTuring ! complete so using templates is unnecessary. ! Thus, we can shift computation to the time which best trades off ! the ease of expressing syntax with the speed of computation by ! programmer, compiler, or computer chip. For example, &pooma; uses ! expression template technologyexpression ! templates to speed run-time execution of ! data-parallel statements. The &pooma; developers decided to shift ! some of the computation from run-time to compile-time using ! template computations. The resulting run-time code runs more ! quickly, but compiling the code takes longer. Also, programming ! time for the &pooma; developers increased significantly, but, most ! users, who are usually most concerned about decreasing run times, ! benefited.
*************** *** 145,169 **** parameters, both of which are used in this book. ! template instantiation, ! ! template ! instantiation ! i.e., specifying a particular type by specifying values for template parameters. ! nested type names, ! ! nested type ! type, nested. ! ! ! type ! nested ! ! which are types specified within a class definition. We discuss each of these below. --- 128,143 ---- parameters, both of which are used in this book. ! template ! instantiation,templateinstantiation i.e., specifying a particular type by specifying values for template parameters. ! nested type names, nested ! typetype, ! nested.typenested ! which are types specified within a class definition. We discuss each of these below. *************** *** 231,241 **** follow the class name surrounded by angle brackets (<>). For example, pair<int> instantiates ! ! template ! instantiation ! the pair template class definition with T equal to ∫. That is, the compiler creates a definition for pair<int> by copying --- 205,211 ---- follow the class name surrounded by angle brackets (<>). For example, pair<int> instantiatestemplateinstantiation the pair template class definition with T equal to ∫. That is, the compiler creates a definition for pair<int> by copying *************** *** 246,261 **** The result is a definition exactly the same as pairOfInts. ! As we mentioned above, template instantiation ! ! template ! instantiation ! ! is analogous to function application. ! ! function ! application ! A template class is analogous to a function; it is a function from types and constants to classes. The analogy between compile-time and run-time programming constructs can be extended. pairOfInts. ! As we mentioned above, template ! instantiationtemplateinstantiation ! is analogous to function ! application.functionapplication A template class is analogous to a function; it is a function from types and constants to classes. The analogy between compile-time and run-time programming constructs can be extended. ! compile time ! value ! ! include types, and ! compile-time operations use these types. For both run-time and ! compile-time programming, &cc; defines default sets of values that ! all conforming compilers must support. For example, ! 3 and 6.022e+23 are run-time values that any &cc; compiler must accept. It must also accept the ∫, &bool;, and int* types. --- 227,239 ---- lists these correspondences. For example, at run time, values consist of things such as integers, floating point numbers, pointers, functions, and objects. Programs compute by operating ! on these values. The compile-time ! valuescompile ! timevalue include ! types, and compile-time operations use these types. For both ! run-time and compile-time programming, &cc; defines default sets ! of values that all conforming compilers must support. For ! example, 3 and 6.022e+23 are run-time values that any &cc; compiler must accept. It must also accept the ∫, &bool;, and int* types. *************** *** 313,341 **** template argument, e.g., any type ! packaging repeated operations ! A function ! ! function ! ! generalizes a particular operation applied to different ! values. The function parameters are placeholders for ! particular values. ! A template class generalizes a particular class ! definition using different types. The template parameters ! are placeholders for particular values. ! application ! ! function ! application ! ! ! application ! function, application. ! ! Use a function by appending function arguments surrounded by parentheses. Use a template class by appending template arguments --- 274,290 ---- template argument, e.g., any type ! packaging repeated operations A ! functionfunction ! generalizes a particular operation applied to different ! values. The function parameters are placeholders for ! particular values. A template class ! generalizes a particular class definition using different ! types. The template parameters are placeholders for ! particular values. ! application functionapplicationapplicationfunction, application. Use a function by appending function arguments surrounded by parentheses. Use a template class by appending template arguments *************** maxOut(0, 3); *** 467,492 **** and the latter stores named values, nested type names are values, i.e., types, stored within class definitions. For example, the template class &array; has an nested type name for the type of its ! domain: ! typedef typename Engine_t::Domain_t Domain_t; ! This typedef, ! ! typedef ! type, definition. ! ! ! type ! definition ! ! i.e., type ! definition, defines the type Domain_t as equivalent ! to Engine_t::Domain_t. The ! :: operator ! ! :: operator ! ! selects the Domain_t nested type from inside the Engine_t type. This illustrates how to access &array;'s Domain_t when not within &array;'s scope: Array<Dim, T, EngineTag>::Domain_t. The --- 416,429 ---- and the latter stores named values, nested type names are values, i.e., types, stored within class definitions. For example, the template class &array; has an nested type name for the type of its ! domain: typedef typename Engine_t::Domain_t Domain_t; ! This ! typedef,typedeftype, ! definition.typedefinition ! i.e., type definition, defines the type Domain_t as ! equivalent to Engine_t::Domain_t. The ! :: operator:: operator selects the Domain_t nested type from inside the Engine_t type. This illustrates how to access &array;'s Domain_t when not within &array;'s scope: Array<Dim, T, EngineTag>::Domain_t. The *************** typedef typename Engine_t::Domain_t Doma *** 554,596 **** operations on code. ! values stored in a collection ! An object stores values. ! A traits ! class ! ! traits class ! ! ! class ! traits ! traits class ! ! contains values describing a type. ! extracting values from collections ! An object's named values are extracted using the ! . operator. ! ! . operator ! ! A class's nested types and classes are extracted using ! the :: operator. ! ! :: operator ! ! ! control flow ! ! control flow ! ! to choose among operations ! if, while, goto, … ! template class specializations with pattern matching --- 491,518 ---- operations on code. ! values stored in a collection An object ! stores values. A traits ! classtraits ! classclasstraitstraits ! class contains values describing a ! type. ! extracting values from collections An ! object's named values are extracted using the ! . operator.. operator A class's nested types and classes are extracted using ! the ! :: operator.:: operator ! control flowcontrol ! flow to choose among operations ! if, while, ! goto, … template ! class specializations with pattern matching *************** enum { dimensionPlusRank = dimensions + *** 654,701 **** The use of non-integral constant values such as floating-point ! numbers at compile time is restricted. ! ! ! ! ! Other compile-time values include pointers ! ! pointer ! ! to objects and ! functions, references ! ! reference ! ! to objects and functions, and executable ! code. For example, a pointer to a function ! ! pointer ! function ! ! ! function pointer ! pointer, function. ! ! sometimes is passed to ! a template function to perform a specific task. Even though ! executable code ! ! executable code ! ! cannot be directly represented in a program, it is ! a compile-time value which the compiler uses. A simple example is ! a class that is created by template instantiation, ! ! template ! instantiation ! ! e.g., pair<int>. Conceptually, the ∫ template ! argument is substituted throughout the pair template ! class to produce a class definition. Although neither the ! programmer nor the user sees this class definition, it is represented inside the compiler, which can use and manipulate the code. The use of non-integral constant values such as floating-point ! numbers at compile time is restricted. ! ! Other compile-time values include ! pointerspointer to ! objects and functions, ! referencesreference to ! objects and functions, and executable code. For example, a ! pointer to a ! functionpointerfunctionfunction ! pointerpointer, function. ! sometimes is passed to a template function to perform a specific ! task. Even though executable codeexecutable ! code cannot be directly represented in a ! program, it is a compile-time value which the compiler uses. A ! simple example is a class that is created by template ! instantiation,templateinstantiation ! e.g., pair<int>. Conceptually, the ∫ ! template argument is substituted throughout the pair ! template class to produce a class definition. Although neither ! the programmer nor the user sees this class definition, it is represented inside the compiler, which can use and manipulate the code. ! Through template programming, the compiler's optimizer ! ! optimizer ! compiler, optimizer. ! ! ! optimization ! compiler, optimizer. ! ! ! compiler ! optimizer ! ! can ! transform complicated code into much simpler code. In , we describe the complicated template code used to implement efficiently data-parallel operations. Although the template code is --- 605,616 ---- ! Through template programming, the compiler's ! optimizeroptimizercompiler, ! optimizer.optimizationcompiler, ! optimizer.compileroptimizer ! can transform complicated code into much simpler code. In , we describe the complicated template code used to implement efficiently data-parallel operations. Although the template code is *************** struct usuallySimpleClass<false> { *** 757,827 **** compilers that translate &cc; code into &c; code may permit inspecting the resulting code. For example, using the command-line option with the ! KAI &cc; compiler ! ! ! compiler ! KAI ! ! ! KAI &cc; compiler ! compiler, KAI. ! ! creates a file ! containing the intermediate code. Unfortunately, ! reading and understanding the code is frequently difficult. Each category of values supports a distinct set of operations. For example, the run-time category of ! integer values supports combination using + ! and - and comparison using ! > and ==. At run ! time, the category of strings can be compared using ! == and characters can be extracted using ! subscripts with the [] operator. Compile-time ! operations are more limited. Types may be declared and used. The ! sizeof operator yields the number of ! bytes to represent an object of the specified type. Enumerations, ! constant integers, sizeof expressions, ! and simple arithmetic and comparison operators such as ! + and == can form constant expressions that can be used at compile time. These values can initialize enumerations and integer constants and be used as template arguments. At compile time, pointers and references to objects and functions can be used as template arguments, while the category of executable code supports no ! operations. (The compiler's optimizer ! ! compiler ! optimizer ! may simplify it, though.) traits class - - At run time, an object - - object ! can store multiple values, each ! having its own name. For example, a pair<int> ! object p stores two ∫s named ! left_ and right_. The . ! operator ! ! . operator ! extracts a named member from an object: ! p.left_. At compile time, a class can ! store multiple values, each having its own name. These are ! sometimes called traits classes. For example, implementing ! data-parallel operations requiring storing a tree of types. ! The ExpressionTraits<BinaryNode<Op, Left, Right&closeclose; traits class stores the types of a binary node representing the operation of Op on left and right children. Its definition --- 650,704 ---- compilers that translate &cc; code into &c; code may permit inspecting the resulting code. For example, using the command-line option with the ! KAI &cc; ! compilercompilerKAIKAI &cc; ! compilercompiler, ! KAI. creates a file containing the intermediate ! code. Unfortunately, reading and understanding the code is ! frequently difficult. Each category of values supports a distinct set of operations. For example, the run-time category of ! integer values supports combination using + and ! - and comparison using > ! and ==. At run time, the category of strings ! can be compared using == and characters can be ! extracted using subscripts with the [] ! operator. Compile-time operations are more limited. Types may be ! declared and used. The sizeof operator yields ! the number of bytes to represent an object of the specified type. ! Enumerations, constant integers, sizeof ! expressions, and simple arithmetic and comparison operators such ! as + and == can form constant expressions that can be used at compile time. These values can initialize enumerations and integer constants and be used as template arguments. At compile time, pointers and references to objects and functions can be used as template arguments, while the category of executable code supports no ! operations. (The compiler's ! optimizercompileroptimizer may simplify it, though.) traits class ! At run time, an ! objectobject can store ! multiple values, each having its own name. For example, a ! pair<int> object p ! stores two ∫s named left_ and right_. The . ! operator. operator extracts a named member from an object: ! p.left_. At compile time, a class can store ! multiple values, each having its own name. These are sometimes ! called traits classes. For example, implementing ! data-parallel operations requiring storing a tree of types. The ! ExpressionTraits<BinaryNode<Op, Left, Right&closeclose; traits class stores the types of a binary node representing the operation of Op on left and right children. Its definition *************** struct ExpressionTraits<BinaryNode< *** 869,889 **** Control flow determines which code is used. At run time, control-flow statements such as if, ! while, and ! goto determine which statements to ! execute. Template programming uses two mechanisms: template class ! specializations and pattern matching. These are similar to ! control flow in functional programming languages. A template class specialization is a class definition specific to one or more template arguments. For example, the ! implementation for data-parallel operations ! ! data-parallel operation ! ! uses the templated CreateLeaf. The default ! definition works for any template ! argument T: template<class T> struct CreateLeaf --- 746,764 ---- Control flow determines which code is used. At run time, control-flow statements such as if, ! while, and goto determine ! which statements to execute. Template programming uses two ! mechanisms: template class specializations and pattern matching. ! These are similar to control flow in functional programming ! languages. A template class specialization is a class definition specific to one or more template arguments. For example, the ! implementation for data-parallel ! operationsdata-parallel ! operation uses the templated ! CreateLeaf. The default definition works for any ! template argument T: template<class T> struct CreateLeaf *************** struct CreateLeaf<Expression<T&clo *** 932,944 **** Control flow using template specializations and pattern matching is similar to switch ! statements. ! ! switch ! A switch statement has a condition and one or more pairs of case labels and associated ! code. The code associated with the the case label whose value matches the condition is executed. If no case label matches the condition, the default code, if present, is used. In template programming, instantiating a template, e.g., --- 807,816 ---- Control flow using template specializations and pattern matching is similar to switch ! statements.switch A switch statement has a condition and one or more pairs of case labels and associated ! code. The code associated with the case label whose value matches the condition is executed. If no case label matches the condition, the default code, if present, is used. In template programming, instantiating a template, e.g., *************** CreateLeaf<Expression<int&closeclo *** 956,964 **** default label since it matches any arguments. If no set of template parameters match (which is impossible for our example) or if more than one set are best matches, the code is ! incorrect. ! ! --- 828,834 ---- default label since it matches any arguments. If no set of template parameters match (which is impossible for our example) or if more than one set are best matches, the code is ! incorrect. *************** void f(const T& t) { … } *** 983,1008 **** functions equivalent to f(const int&), f(const bool&), f(const int*&), …. Using a templated class ! definition with a static member function, ! ! function ! static member ! ! ! static member function ! function, static member ! ! we can define an equivalent function: ! ! function ! static member ! equivalence with function template ! ! ! template ! function ! equivalence with static member function ! template <typename T> class F { --- 853,859 ---- functions equivalent to f(const int&), f(const bool&), f(const int*&), …. Using a templated class ! definition with a static member function,functionstatic memberstatic member functionfunction, static member we can define an equivalent function:functionstatic memberequivalence with function templatetemplatefunctionequivalence with static member function template <typename T> class F { *************** operator+(const Array<D1,T1,E1> & *** 1036,1079 **** possible to write expressions such as a1 + a2. Member functions can also be templated. This permits, for example, overloading of assignment operators defined ! within templated classes. ! ! ! ! Function objects ! ! function ! object ! ! are frequently useful in run-time code. They consist of a function plus some additional storage and are usually implemented as structures with data members and a function ! call operator. ! ! function ! call operator ! ! Analogous classes can be used at compile time. ! Using the transformation ! ! function ! static member ! equivalence with function template ! ! ! template ! function ! equivalence with static member function ! ! introduced in the previous paragraph, we see that any function can be transformed into a class containing a ! static member function. ! ! function ! static member ! ! Internal type definitions, enumerations, and static constant values can be added to the class. The static member function can use these values during its computation. The CreateLeaf structure, introduced above, illustrates this. --- 887,901 ---- possible to write expressions such as a1 + a2. Member functions can also be templated. This permits, for example, overloading of assignment operators defined ! within templated classes. ! Function objectsfunctionobject are frequently useful in run-time code. They consist of a function plus some additional storage and are usually implemented as structures with data members and a function ! call operator.functioncall operator Analogous classes can be used at compile time. ! Using the transformationfunctionstatic memberequivalence with function templatetemplatefunctionequivalence with static member function introduced in the previous paragraph, we see that any function can be transformed into a class containing a ! static member function.functionstatic member Internal type definitions, enumerations, and static constant values can be added to the class. The static member function can use these values during its computation. The CreateLeaf structure, introduced above, illustrates this. Index: tutorial.xml =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/tutorial.xml,v retrieving revision 1.12 diff -c -p -r1.12 tutorial.xml *** tutorial.xml 2002/02/27 03:51:53 1.12 --- tutorial.xml 2002/03/15 23:07:22 *************** *** 690,696 **** each context. Regardless, the containers' domains are now distributed among the contexts so the program can run. When a patch needs data from another patch, the &poomatoolkit; sends messages to ! the desired patch uses the message-passing library. All such communication is automatically performed by the &toolkit; with no need for programmer or user input. --- 690,696 ---- each context. Regardless, the containers' domains are now distributed among the contexts so the program can run. When a patch needs data from another patch, the &poomatoolkit; sends messages to ! the designated patch uses the message-passing library. All such communication is automatically performed by the &toolkit; with no need for programmer or user input. *************** MultiPatch<UniformTag, Remote<Bric *** 737,743 **** or MultiPatch<UniformTag, Remote<CompressibleBrick&closeclose; ! or &engine;s. The computations for a distributed implementation are exactly the same as for a sequential implementation. The &poomatoolkit; and --- 737,743 ---- or MultiPatch<UniformTag, Remote<CompressibleBrick&closeclose; ! &engine;s. The computations for a distributed implementation are exactly the same as for a sequential implementation. The &poomatoolkit; and Index: figures/distributed-101.png =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/distributed-101.png,v retrieving revision 1.2 diff -c -p -r1.2 distributed-101.png Binary files /tmp/cvsQn19cB and distributed-101.png differ Index: figures/distributed.mp =================================================================== RCS file: /home/pooma/Repository/r2/docs/manual/figures/distributed.mp,v retrieving revision 1.4 diff -c -p -r1.4 distributed.mp *** figures/distributed.mp 2002/01/31 21:29:58 1.4 --- figures/distributed.mp 2002/03/15 23:07:23 *************** beginfig(101) *** 184,190 **** foo = thelabel.bot(btex \begin{tabular}{c} Each context has memory and\\ processors to execute a program. \end{tabular} etex, c[1].s); unfill bbox foo; draw foo; ! label.top(btex Computer Configuration etex, configurationBoundary.n); %% Draw the Computer Computation structures. for t = 0 upto 5: --- 184,190 ---- foo = thelabel.bot(btex \begin{tabular}{c} Each context has memory and\\ processors to execute a program. \end{tabular} etex, c[1].s); unfill bbox foo; draw foo; ! label.top(btex Computer Con\avoidfi guration etex, configurationBoundary.n); %% Draw the Computer Computation structures. for t = 0 upto 5: From oldham at codesourcery.com Mon Mar 18 17:03:32 2002 From: oldham at codesourcery.com (Jeffrey Oldham) Date: Mon, 18 Mar 2002 09:03:32 -0800 Subject: Patch: R2.4 Slides Message-ID: <20020318090332.A17364@codesourcery.com> Lee Ankeny asked for the Pooma 2.4 slides presented to LANL this November. They are now available at docs/R2.4-Review.ppt. Applied to mainline. Approved by Scott Haney Not tested. Thanks, Jeffrey D. Oldham oldham at codesourcery.com -------------- next part -------------- A non-text attachment was scrubbed... Name: R2.4-Review.ppt Type: application/vnd.ms-powerpoint Size: 177152 bytes Desc: not available URL: From oldham at codesourcery.com Mon Mar 18 17:24:12 2002 From: oldham at codesourcery.com (Jeffrey D. Oldham) Date: Mon, 18 Mar 2002 09:24:12 -0800 Subject: Manual: HTML Version Message-ID: <20020318092412.A1376@vaio.codesourcery.com> The HTML version of the POOMA manual was added. Unfortunately, I do not have a patch to attach to this email. 2002-Mar-18 Jeffrey D. Oldham This patch adds HTML versions of the manual to the Pooma CVS tree. * arrays-arrays.html: New file. * arrays-arrays_declarations.html: Likewise. * arrays-arrays_use.html: Likewise. * arrays-containers.html: Likewise. * arrays-domains.html: Likewise. * arrays-dynamic_arrays.html: Likewise. * arrays.html: Likewise. * concepts-computation_environment.html: Likewise. * concepts-computation_modes.html: Likewise. * concepts-containers.html: Likewise. * concepts.html: Likewise. * data_parallel-implementation.html: Likewise. * data_parallel-multiple_values.html: Likewise. * data_parallel-use.html: Likewise. * data_parallel.html: Likewise. * engines-concept.html: Likewise. * engines-types.html: Likewise. * engines.html: Likewise. * glossary.html: Likewise. * initial-compile.html: Likewise. * initial-compile_programs.html: Likewise. * initial-distributed_computing.html: Likewise. * initial-obtain.html: Likewise. * initial-quick_start.html: Likewise. * initial.html: Likewise. * introduction-goals.html: Likewise. * introduction-open_source.html: Likewise. * introduction-pooma_history.html: Likewise. * introduction.html: Likewise. * pooma.html: Likewise. * preface-acknowledgements.html: Likewise. * preface-downloading.html: Likewise. * preface-pooma_history.html: Likewise. * preface-reading_book:.html: Likewise. * preface.html: Likewise. * sources-conventions.html: Likewise. * sources-structure.html: Likewise. * sources.html: Likewise. * template_programming-compile_time.html: Likewise. * template_programming-pooma_implementation.html: Likewise. * template_programming-template_use.html: Likewise. * template_programming.html: Likewise. * tutorial-array_data_parallel.html: Likewise. * tutorial-array_distributed.html: Likewise. * tutorial-array_elementwise.html: Likewise. * tutorial-array_stencil.html: Likewise. * tutorial-field_data_parallel.html: Likewise. * tutorial-field_distributed.html: Likewise. * tutorial-hand_coded.html: Likewise. * tutorial.html: Likewise. * uml-arrays.html: Likewise. * uml-distributed.html: Likewise. * uml-domains.html: Likewise. * uml-engines.html: Likewise. * uml-fields.html: Likewise. * uml-math_objects.html: Likewise. * uml.html: Likewise. * views.html: Likewise. Applied to mainline. Not tested. Thanks, Jeffrey D. Oldham oldham at codesourcery.com From oldham at codesourcery.com Mon Mar 18 17:32:24 2002 From: oldham at codesourcery.com (Jeffrey D. Oldham) Date: Mon, 18 Mar 2002 09:32:24 -0800 Subject: Manual: PostScript and PDF Versions Message-ID: <20020318093224.A1443@vaio.codesourcery.com> 2002-Mar-18 Jeffrey D. Oldham This patch adds PostScript and PDF versions of the manual to the CVS tree. It also adds a utility Perl script. * pooma.ps: PostScript version of the manual. * pooma.pdf: PDF version of the manual. * wrap-programlisting.pl: New file to transform C++ programs into DocBook source code. Applied to mainline Not tested. Thanks, Jeffrey D. Oldham oldham at codesourcery.com -------------- next part -------------- Index: pooma.pdf =================================================================== RCS file: pooma.pdf diff -N pooma.pdf Binary files /dev/null and pooma.pdf differ Index: pooma.ps =================================================================== RCS file: pooma.ps diff -N pooma.ps *** /dev/null Fri Mar 23 21:37:44 2001 --- pooma.ps Mon Mar 18 10:26:37 2002 *************** *** 0 **** --- 1,24548 ---- + %!PS-Adobe-2.0 + %%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software + %%Title: pooma.dvi + %%Pages: 212 + %%PageOrder: Ascend + %%BoundingBox: 0 0 612 792 + %%DocumentFonts: Helvetica-Bold Times-Roman Times-Bold Courier + %%+ Times-Italic Courier-Bold Courier-Oblique cmmi10 cmr10 cmex10 cmmi9 + %%EndComments + %DVIPSWebPage: (www.radicaleye.com) + %DVIPSCommandLine: dvips -t letter pooma.dvi -o + %DVIPSParameters: dpi=600, compressed + %DVIPSSource: TeX output 2002.03.18:0904 + %%BeginProcSet: texc.pro + %! + /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S + N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 + mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 + 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ + landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize + mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ + matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round + exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ + statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] + N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin + /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array + /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 + array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N + df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A + definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get + }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} + B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr + 1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 + 1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx + 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx + sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ + rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp + gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B + /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ + /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ + A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy + get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} + ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp + fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 + {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add + chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ + 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} + forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn + /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put + }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ + bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A + mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ + SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ + userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X + 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 + index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N + /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ + /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) + (LaserWriter 16/600)]{A length product length le{A length product exch 0 + exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse + end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask + grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} + imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round + exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto + fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p + delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} + B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ + p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S + rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end + + %%EndProcSet + %%BeginProcSet: 8r.enc + % @@psencodingfile@{ + % author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry", + % version = "0.6", + % date = "22 June 1996", + % filename = "8r.enc", + % email = "kb@@mail.tug.org", + % address = "135 Center Hill Rd. // Plymouth, MA 02360", + % codetable = "ISO/ASCII", + % checksum = "119 662 4424", + % docstring = "Encoding for TrueType or Type 1 fonts to be used with TeX." + % @} + % + % Idea is to have all the characters normally included in Type 1 fonts + % available for typesetting. This is effectively the characters in Adobe + % Standard Encoding + ISO Latin 1 + extra characters from Lucida. + % + % Character code assignments were made as follows: + % + % (1) the Windows ANSI characters are almost all in their Windows ANSI + % positions, because some Windows users cannot easily reencode the + % fonts, and it makes no difference on other systems. The only Windows + % ANSI characters not available are those that make no sense for + % typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen + % (173). quotesingle and grave are moved just because it's such an + % irritation not having them in TeX positions. + % + % (2) Remaining characters are assigned arbitrarily to the lower part + % of the range, avoiding 0, 10 and 13 in case we meet dumb software. + % + % (3) Y&Y Lucida Bright includes some extra text characters; in the + % hopes that other PostScript fonts, perhaps created for public + % consumption, will include them, they are included starting at 0x12. + % + % (4) Remaining positions left undefined are for use in (hopefully) + % upward-compatible revisions, if someday more characters are generally + % available. + % + % (5) hyphen appears twice for compatibility with both ASCII and Windows. + % + /TeXBase1Encoding [ + % 0x00 (encoded characters from Adobe Standard not in Windows 3.1) + /.notdef /dotaccent /fi /fl + /fraction /hungarumlaut /Lslash /lslash + /ogonek /ring /.notdef + /breve /minus /.notdef + % These are the only two remaining unencoded characters, so may as + % well include them. + /Zcaron /zcaron + % 0x10 + /caron /dotlessi + % (unusual TeX characters available in, e.g., Lucida Bright) + /dotlessj /ff /ffi /ffl + /.notdef /.notdef /.notdef /.notdef + /.notdef /.notdef /.notdef /.notdef + % very contentious; it's so painful not having quoteleft and quoteright + % at 96 and 145 that we move the things normally found there down to here. + /grave /quotesingle + % 0x20 (ASCII begins) + /space /exclam /quotedbl /numbersign + /dollar /percent /ampersand /quoteright + /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash + % 0x30 + /zero /one /two /three /four /five /six /seven + /eight /nine /colon /semicolon /less /equal /greater /question + % 0x40 + /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O + % 0x50 + /P /Q /R /S /T /U /V /W + /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore + % 0x60 + /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o + % 0x70 + /p /q /r /s /t /u /v /w + /x /y /z /braceleft /bar /braceright /asciitilde + /.notdef % rubout; ASCII ends + % 0x80 + /.notdef /.notdef /quotesinglbase /florin + /quotedblbase /ellipsis /dagger /daggerdbl + /circumflex /perthousand /Scaron /guilsinglleft + /OE /.notdef /.notdef /.notdef + % 0x90 + /.notdef /.notdef /.notdef /quotedblleft + /quotedblright /bullet /endash /emdash + /tilde /trademark /scaron /guilsinglright + /oe /.notdef /.notdef /Ydieresis + % 0xA0 + /.notdef % nobreakspace + /exclamdown /cent /sterling + /currency /yen /brokenbar /section + /dieresis /copyright /ordfeminine /guillemotleft + /logicalnot + /hyphen % Y&Y (also at 45); Windows' softhyphen + /registered + /macron + % 0xD0 + /degree /plusminus /twosuperior /threesuperior + /acute /mu /paragraph /periodcentered + /cedilla /onesuperior /ordmasculine /guillemotright + /onequarter /onehalf /threequarters /questiondown + % 0xC0 + /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla + /Egrave /Eacute /Ecircumflex /Edieresis + /Igrave /Iacute /Icircumflex /Idieresis + % 0xD0 + /Eth /Ntilde /Ograve /Oacute + /Ocircumflex /Otilde /Odieresis /multiply + /Oslash /Ugrave /Uacute /Ucircumflex + /Udieresis /Yacute /Thorn /germandbls + % 0xE0 + /agrave /aacute /acircumflex /atilde + /adieresis /aring /ae /ccedilla + /egrave /eacute /ecircumflex /edieresis + /igrave /iacute /icircumflex /idieresis + % 0xF0 + /eth /ntilde /ograve /oacute + /ocircumflex /otilde /odieresis /divide + /oslash /ugrave /uacute /ucircumflex + /udieresis /yacute /thorn /ydieresis + ] def + + %%EndProcSet + %%BeginProcSet: texps.pro + %! + TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 + index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll + exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics + exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub + dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} + ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict + end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{ + dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 + roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def + dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def} + if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def} + def end + + %%EndProcSet + %%BeginProcSet: special.pro + %! + TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N + /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N + /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N + /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ + /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho + X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B + /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ + /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known + {userdict/md get type/dicttype eq{userdict begin md length 10 add md + maxlength ge{/md md dup length 20 add dict copy def}if end md begin + /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S + atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ + itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll + transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll + curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf + pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} + if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 + -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 + get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip + yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub + neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ + noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop + 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get + neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr + 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr + 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 + -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S + TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ + Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale + }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState + save N userdict maxlength dict begin/magscale true def normalscale + currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts + /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x + psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx + psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub + TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ + psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 + roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath + moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict + begin/SpecialSave save N gsave normalscale currentpoint TR + @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ + CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto + closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx + sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR + }{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse + CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury + lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N + /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} + repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N + /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX + currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY + moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X + /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 + 1 startangle endangle arc savematrix setmatrix}N end + + %%EndProcSet + %%BeginProcSet: color.pro + %! + TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop + setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll + }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def + /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ + setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ + /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch + known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC + /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC + /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 + setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 + setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 + 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC + /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 + setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 + 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ + 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ + 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC + /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 + setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 + setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 + 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC + /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 + setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 + 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ + 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ + 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC + /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 + setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC + /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 + 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 + 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 + 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 + setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 + 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC + /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 + setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 + 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 + 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC + /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 + setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ + 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} + DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 + setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 + setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 + setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end + + %%EndProcSet + TeXDict begin 40258431 52099146 1000 600 600 (pooma.dvi) + @start /Fa 134[72 3[72 2[72 2[72 2[72 72 1[72 3[72 72 + 72 72 72 30[72 72 2[72 1[72 9[72 5[72 44[{TeXBase1Encoding ReEncodeFont} + 18 120.548 /Courier rf + %DVIPSBitmapFont: Fb cmmi12 12 1 + /Fb 1 26 df<010FB712E0013F16F05B48B812E04817C02807E0060030C7FCEB800EEA0F + 00001E010C13705A0038011C13605A0060011813E000E013381240C7FC5C4B5AA214F014 + E01301150314C01303A3EB078082130FA2EB1F00A34980133E137EA24980A2000114015B + A26C48EB00E0342C7EAA37>25 D E + %EndDVIPSBitmapFont + /Fc 137[79 1[79 1[79 2[79 79 1[79 2[79 1[79 1[79 79 79 + 1[79 14[79 5[79 2[79 1[79 71[{TeXBase1Encoding ReEncodeFont}16 + 131.507 /Courier-Bold rf /Fd 134[136 6[136 16[136 31[136 + 65[{TeXBase1Encoding ReEncodeFont}4 227.24 /Courier-Bold + rf /Fe 139[17 11[30 3[30 49[30 50[{TeXBase1Encoding ReEncodeFont}4 + 59.7758 /Times-Roman rf + %DVIPSBitmapFont: Ff eufm10 12 1 + /Ff 1 83 df82 + D E + %EndDVIPSBitmapFont + /Fg 134[114 114 3[114 114 114 2[114 114 114 114 2[114 + 114 114 1[114 114 114 1[114 10[114 1[114 6[114 6[114 + 114 114 114 1[114 65[{TeXBase1Encoding ReEncodeFont}24 + 189.365 /Courier-Bold rf /Fh 133[95 5[95 95 95 2[95 95 + 95 95 2[95 95 95 95 95 3[95 19[95 8[95 95 67[{ + TeXBase1Encoding ReEncodeFont}17 157.808 /Courier-Bold + rf /Fi 198[60 60 60 60 60 60 60 60 60 60 6[60 60 40[{ + TeXBase1Encoding ReEncodeFont}12 99.6264 /Courier-Bold + rf /Fj 134[66 66 1[66 66 66 66 66 66 66 66 66 66 66 66 + 1[66 66 66 66 66 66 66 66 66 10[66 1[66 66 66 1[66 66 + 66 66 66 5[66 66 66 66 66 66 3[66 2[66 12[66 66 1[66 + 3[66 38[{TeXBase1Encoding ReEncodeFont}44 109.589 /Courier-Oblique + rf /Fk 16[40 117[80 80 1[80 88 48 80 56 88 88 88 88 128 + 40 2[40 88 88 48 80 88 80 88 80 9[135 96 104 88 96 104 + 1[96 112 104 120 88 2[40 1[112 88 96 104 104 104 104 + 6[48 80 80 80 80 80 80 80 80 80 80 1[40 48 42[88 2[{ + TeXBase1Encoding ReEncodeFont}56 143.462 /Helvetica-Bold + rf /Fl 133[40 3[45 45 25 35 30 45 45 45 45 70 25 2[25 + 45 45 30 40 45 40 1[40 12[55 37[22 30 45[{TeXBase1Encoding ReEncodeFont} + 23 89.6638 /Times-Roman rf /Fm 134[60 3[60 60 60 60 60 + 60 60 60 60 3[60 60 60 60 60 60 60 1[60 12[60 60 60 3[60 + 1[60 8[60 1[60 65[{TeXBase1Encoding ReEncodeFont}25 99.6264 + /Courier-Oblique rf /Fn 84[60 45[60 1[60 60 60 60 60 + 60 60 60 60 60 1[60 60 60 60 60 60 60 60 60 60 60 60 + 60 60 60 60 1[60 1[60 60 60 2[60 60 60 60 60 60 60 1[60 + 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 1[60 60 + 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 + 60 60 60 60 60 60 60 60 60 60 60 33[{TeXBase1Encoding ReEncodeFont}86 + 99.6264 /Courier rf /Fo 133[66 66 66 1[66 66 66 66 66 + 1[66 66 66 66 66 66 1[66 66 66 66 66 66 66 66 66 10[66 + 66 66 66 66 1[66 1[66 66 66 2[66 1[66 66 66 66 66 66 + 66 6[66 7[66 4[66 1[66 66 42[{TeXBase1Encoding ReEncodeFont}45 + 109.589 /Courier-Bold rf /Fp 133[39 44 44 66 44 50 28 + 39 39 50 50 50 50 72 28 1[28 28 50 50 28 44 50 44 50 + 50 11[72 55 50 61 1[61 72 66 83 55 1[44 33 1[72 1[61 + 72 66 61 61 6[33 50 50 50 50 50 50 50 50 50 50 1[25 33 + 25 67 40[50 2[{TeXBase1Encoding ReEncodeFont}58 99.6264 + /Times-Italic rf /Fq 129[66 66 66 66 66 66 66 66 66 66 + 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 + 66 66 1[66 66 66 1[66 1[66 66 1[66 66 66 66 66 66 66 + 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 1[66 66 + 66 66 66 66 66 1[66 66 66 66 66 66 66 66 66 66 66 66 + 66 66 66 66 66 66 66 66 66 66 66 33[{TeXBase1Encoding ReEncodeFont}88 + 109.589 /Courier rf /Fr 107[50 50 24[44 50 50 72 50 55 + 33 39 44 1[55 50 55 83 28 55 1[28 55 50 33 44 55 44 55 + 50 9[100 72 72 66 55 72 1[61 78 72 94 66 2[39 78 78 61 + 66 72 72 66 72 6[33 50 50 50 50 50 50 50 50 50 50 1[25 + 33 25 2[33 33 33 36[55 2[{TeXBase1Encoding ReEncodeFont}64 + 99.6264 /Times-Bold rf /Fs 106[28 27[40 40 58 40 40 22 + 31 27 1[40 40 40 62 22 2[22 40 40 27 35 40 35 40 35 12[49 + 18[58 18[20 46[{TeXBase1Encoding ReEncodeFont}26 79.7012 + /Times-Roman rf + %DVIPSBitmapFont: Ft ectt1200 12 59 + /Ft 59 126 df<1438147C14FCA5903803FF80011F13F0017F13FC48B6FC4815804815C0 + 260FFEFD13E0391FF0FC3FD83FC0EB1FF00180EB07F8EA7F00007E140316FC481401A215 + 03A46CEC01F8ED0060007F15001380EA3FC013F0EA1FFCEA0FFF6C7F6CEBFFC06C14F06C + 14FC013F7F01077F0100148016C09138FC7FE0ED1FF0150FED07F815031501003C15FC12 + 7EB41400A45AA26CEC01F87E15030180EB07F0D83FC0130F01E0EB1FE0D81FF0EB3FC039 + 0FFEFDFF6CB612806C15006C14FC6C5C011F13E0010390C7FCEB00FCA5147C1438264D7A + C433>36 D<007FB61280B712C0A46C15802206789833>45 D<121FEA3F80EA7FC0EAFFE0 + A5EA7FC0EA3F80EA1F000B0B6C8A33>I<1638167C16FCA2150116F8150316F0150716E0 + 150F16C0151F1680A2153F16005D157E15FE5D14015DA214035D14075D140F5D141F5D14 + 3F92C7FCA25C147E14FE5C13015C13035CA213075C130F5C131F5C133F91C8FC5B137EA2 + 13FE5B12015B12035B12075BA2120F5B121F5B123F90C9FC5A127E12FE5AA25A1278264D + 7AC433>I<14FF010313C0010F13F0497F497F497F9038FF81FF3A01FE007F804848EB3F + C049131F4848EB0FE0A24848EB07F0A24848EB03F8A24848EB01FCA348C812FEA4007E15 + 7E00FE157FAE6C15FF6C15FEA46D1301003F15FCA26D1303001F15F8A26C6CEB07F0A26C + 6CEB0FE06D131F6C6CEB3FC0A26CB4EBFF806C018113006DB45A6D5B6D5B6D5B010313C0 + 010090C7FC283F7BBD33>I + II<903801FFC0010F13F8013F13 + FF90B67E48814881489038807FF03A0FFC000FF801F06D7E484813036F7EA21500A26C5A + 6C5AC9FC15015EA215034B5A150F4B5A4B5A913803FFC00103B55A4991C7FC5D8116C06D + 8090C76C7EED0FF8ED03FC6F7E6F7E821780163FA2EE1FC0A3123C127EB4FCA2163F1780 + 167F6C16006D5C6D495A6C6C1303D81FF8EB0FFC3A0FFF807FF86C90B55A6C5D6C15806C + 6C91C7FC010F13FC010113C02A3F7CBD33>I<15FF4A7F5C5CA25C5C15DFEC3F9FA2EC7F + 1F14FEA2EB01FCA2EB03F8EB07F0A2EB0FE0EB1FC0A2EB3F80A2EB7F0013FEA2485A1203 + 5B485AA2485A485AA2485AA248C7FC12FEB812E017F0A46C16E0C8381F8000AC021FB512 + 804A14C04A14E0A26E14C06E14802C3E7DBD33>I54 + D<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F00C7FCB3A3121FEA3F80EA7FC0EAFF + E0A5EA7FC0EA3F80EA1F000B2B6CAA33>58 D65 D<91391FE00780DAFFFC13 + C00103EBFF0F010F148F4914FF5B90387FF81F9038FFC00748497E4848487E497F485A16 + 7F485A49143F121F5B003F151F5BA2127F90C8EA0F8093C7FCA25A5AAD7E7EA36DEC0F80 + 003FED1FC0A27F121F7F000F153F6D15806C7E167F6C6CECFF007F3A01FF8003FE6C6D48 + 5A90397FF81FF86DB55A6D5C6D5C010391C7FC010013FCEC1FE02A3F7CBD33>67 + D<003FB512F04814FCB7FC826C816C813A03F8007FF0ED1FF8ED07FC15036F7E8281EE7F + 80A2163F17C0161FA217E0160FA4EE07F0AD160F17E0A4161F17C0163FA21780167FEEFF + 00A24B5A15034B5AED1FF8ED7FF0003FB6FC4815C0B75A93C7FC6C14FC6C14F02C3D7EBC + 33>I<003FB712E04816F0B8FCA27E7ED801FCC71207A8EE03E093C7FCA6151F4B7EA490 + B6FCA69038FC003FA46FC7FC92C8FCA817F8EE01FCA9003FB7FC5AB8FCA27E6C16F82E3D + 7EBC33>I<003FB712E04816F0B8FCA27E7ED801FCC71207A8EE03E093C7FCA7151F4B7E + A490B6FCA69038FC003FA46FC7FC92C8FCB1383FFFF8487FB57EA26C5B6C5B2C3D7DBC33 + >I<91387F803C903901FFF03E0107EBFC7E011F13FE49EBFFFE5B9038FFE07F48EB803F + EC000FEA03FC00071407491303485A491301121F5B123F491300A2127F90C8FC167C93C7 + FCA25A5AA992387FFFC092B512E0A37E6C6E13C0923800FE00A36D1301123FA27F121F6D + 1303120F7F6C6C1307A26C6C130F6C6C131F9038FF803F6CEBE0FF6DB5FC7F6D13FE0107 + 13F80101EBF07C9026007F80C7FC2B3F7CBD33>I<3B7FFFC00FFFF8B56C4813FCA46C49 + 6C13F8D803F8C7EA7F00B3A290B7FCA601F8C77EB3A53B7FFFC00FFFF8B56C4813FCA46C + 496C13F82E3D7EBC33>I<003FB612804815C0B712E0A26C15C06C1580260003F8C7FCB3 + B3AD003FB612804815C0B712E0A26C15C06C1580233D78BC33>I75 D<387FFFF8B57E80A25C6C5BD801FCC9FCB3B3A3EE03E0EE07 + F0A9007FB7FCB8FCA46C16E02C3D7DBC33>III<90381FFFF890B6FC000315C000 + 0F15F0A24815F83A3FFC003FFC01E013074913034848EB01FEA290C8FCA500FE157FB3AC + 6C15FF6C15FEA46D1301A36C6CEB03FC01F0130F01FC133F6CB612F86C15F0A2000315C0 + C61500011F13F8283F7BBD33>I<003FB512FC48ECFF80B712E016F86C816C813A01FC00 + 0FFF030313801500EE7FC0163FEE1FE0160FA217F01607A6160F17E0A2161FEE3FC0167F + EEFF801503030F130090B65A5E5E16E0168003FCC7FC01FCC9FCB3383FFFE0487FB57EA2 + 6C5B6C5B2C3D7EBC33>I<007FB57EB612F815FE81826C812603F8007FED3FF0ED0FF815 + 076F7E1501A26F7EA74B5AA215034B5A150FED3FF0EDFFE090B65A5E93C7FC5D8182D9F8 + 007F153F6F7E150F821507AA173E177FA416F8030313FF267FFFC014FEB538E001FF17FC + 81EE7FF86C49EB3FF0C9EA0FC0303E7EBC33>82 DI<003FB712F8 + 4816FCB8FCA43AFE000FE001A8007CED00F8C71500B3B3A40107B512C049804980A26D5C + 6D5C2E3D7EBC33>I<273FFFE001B5FC486D481480B56C4814C0A26C496C14806C496C14 + 00D801FCC7EA0FE0B3B3A36D141F00005EA26D143F6D5DA26D6C49C7FC6E5B6D6C485AEC + F00390390FFC0FFC6DB55A6D5C6D5C6D6C1380DA1FFEC8FCEC07F8323E80BC33>II<3A3FFF807FFF486DB51280A46C496C13003A01FE000FE0151F6C7E4B5AEB7F + 805E90383FC07F93C7FC6D6C5A5DEB0FF15DEB07FB5DEB03FF5D7F5D7F5D147F6E5AA34A + 7EA24A7E815B81EB03FB81EB07F181EB0FE081011F7F02C07F013F133F02807F017F131F + 02007F49130F49801507000181491303000381491301D87FFF90380FFFE0B56C4813F05D + A2816C496C13E02C3D7DBC33>88 D<007FB612FEA2B8FCA36C15FEA228077B7D33>95 + D97 DIIIIII< + EA3FFC487E12FFA2127F123F1200AB4AB4FC020713C0021F13F0027F7F91B5FC90B67EED + 07FEECF801ECF0004A7F4A7F5CA291C7FCA35BB3A43B3FFFF80FFFFC486D4813FEB56C48 + 13FFA26C496C13FE6C496C13FC303D7FBC33>I<14E0EB03F8A2497EA36D5AA2EB00E091 + C8FCAA383FFFF8487FA47EEA0001B3AD007FB612C0B712E016F0A216E06C15C0243E78BD + 33>I107 D<383FFFFC487FB5FCA27E7EC7 + FCB3B3AD003FB612F84815FCB712FEA26C15FC6C15F8273D7ABC33>I<02FC137E3B7FC3 + FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F13872607FE07130301FC01FE7F + 9039F803FC01A201F013F8A401E013F0B3A53C7FFE0FFF07FF80B548018F13C0A46C486C + 01071380322C80AB33>I<4AB4FC263FFC0713C0267FFE1F13F000FF017F7F91B5FC6CB6 + 7E6CEC07FEC6EBF801ECF0004A7F4A7F5CA291C7FCA35BB3A43B3FFFF80FFFFC486D4813 + FEB56C4813FFA26C496C13FE6C496C13FC302C7FAB33>III<02FF137C0107EBE0FE011F13F0017F13FC90B512FE + 4814FF4813C03907FE003F4848131F01F0130F484813071503485A491301127F90C7FC15 + 005A5AA97E7E15017F123F6D130315076C7E6C6C130F6D131FD807FE137F3903FF81FF6C + EBFFFE6C14FC6D13F86D13F0010F13C0903801FE0090C8FCAF92387FFFFC92B512FEA46F + 13FC2F427CAB33>II<90381FFE0F90B5EA8F80000314FF120F5A5AEBF007 + 387F800190C7FC00FE147F5A153FA37E007FEC1F0001C090C7FCEA3FF8EBFFC06C13FF6C + 14E0000314F8C680011F13FF01001480020713C0EC007FED1FE0007C140F00FEEC07F015 + 03A27EA27F15076D14E06D130F6DEB3FC09038FE01FF90B61280160000FD5C00FC14F8D8 + F83F13E0D8780790C7FC242E79AC33>III<3B3FFFC00FFFF0486D4813F8B5 + 6C4813FCA26C496C13F86C496C13F0D801F8C7EA7E006D14FE00005DA26D1301017E5CA2 + 017F13036D5CA2EC8007011F5CA2ECC00F010F5CA36D6C485AA3ECF03F010391C7FCA26E + 5A0101137EA2ECFCFE01005BA214FF6E5AA36E5AA26E5A6E5A2E2B7EAA33>I<3B7FFF80 + 07FFF8B56C4813FC6E5AA24A7E6C496C13F8D80FC0C7EA0FC06D141F00071680A56D143F + 00031600A3EC0FC0EC1FE0A23A01F83FF07EA3EC7FF8147CA20000157C9039FCFCFCFCA3 + ECF87CA2017C5C017D137EECF03EA2017F133FA26D486C5AA3ECC00F90390F8007C02E2B + 7EAA33>I<3B3FFFC07FFF80486DB512C0B500F114E0A26C01E014C06C496C13803B00FE + 000FE000017F495AEB3F804B5A6D6C48C7FC90380FE07E903807F0FEECF1FC903803FBF8 + EB01FF6D5B5D6E5A143F6E5A143F814A7E14FF903801FBF0ECF9F8903803F1FCEB07E015 + 7E90380FC07F011F6D7E90383F801F02007F496D7E01FE6D7E484813033B7FFFC03FFFE0 + B56C4813F0A46C496C13E02C2B7DAA33>I<3B7FFF801FFFE0B56C4813F06E4813F8A24A + 6C13F06C496C13E0D803F8C7EAFC00000114015E7F000014036D5C137EA2017F495A7FA2 + 6E485A131FA26D6C485AA214E0010749C7FCA214F01303157EEB01F8A2157C010013FC14 + FC5D147C147DEC3FF0A36E5AA36E5AA2141F5DA2143F92C8FCA3147EA214FE003F5B1301 + 387F81F81383EB87F0139FEBFFE06C5B5C6C90C9FCEA0FFCEA03F02D427DAA33>I<000F + B712804816C05AA317800180C713004B5A4B5A4B5A4B5A6CC7485AC8485A4B5A4BC7FC4A + 5A4A5A4A5A4A5A4A5A4A5A4A5A4AC8FC495A495A495A495A495A495A495A49C7EA0F8048 + 48EC1FC0485A485A485A485A485A48B7FCB8FCA46C16802A2B7DAA33>II125 + D E + %EndDVIPSBitmapFont + /Fu 16[28 69[76 15[98 4[44 44 21[48 1[48 44 50 50 72 + 50 50 28 39 33 50 50 50 50 78 28 50 28 28 50 50 33 44 + 50 44 50 44 1[50 1[33 1[33 1[72 72 94 72 72 61 55 66 + 72 55 72 72 89 61 72 39 33 72 72 55 61 72 66 66 72 1[44 + 56 1[56 28 28 50 50 50 50 50 50 50 50 50 50 28 25 33 + 25 56 1[33 33 33 2[50 2[33 29[55 55 2[{TeXBase1Encoding ReEncodeFont}88 + 99.6264 /Times-Roman rf /Fv 133[50 55 55 78 55 61 33 + 55 39 61 61 61 61 89 28 55 28 28 61 61 33 55 61 55 61 + 55 12[61 66 2[66 78 1[83 3[28 72 2[66 1[72 1[72 6[33 + 11[28 33 1[58 3[28 36[61 2[{TeXBase1Encoding ReEncodeFont}42 + 99.6264 /Helvetica-Bold rf /Fw 134[66 3[73 40 66 47 1[73 + 73 73 106 33 6[66 73 66 73 66 13[80 2[80 2[100 73 8[86 + 86 12[66 66 66 66 66 2[33 1[33 44[{TeXBase1Encoding ReEncodeFont}28 + 119.552 /Helvetica-Bold rf /Fx 134[96 96 134 96 105 57 + 96 67 1[105 105 105 153 48 96 1[48 105 105 57 96 105 + 96 105 96 9[163 115 124 105 115 124 1[115 134 1[143 105 + 1[96 48 124 134 105 115 124 124 124 124 9[96 96 96 96 + 96 96 96 2[48 57 48 44[{TeXBase1Encoding ReEncodeFont}53 + 172.154 /Helvetica-Bold rf /Fy 134[115 115 161 115 126 + 69 115 80 1[126 126 126 184 57 115 1[57 126 126 69 115 + 126 115 126 115 10[138 149 126 138 149 1[138 161 149 + 172 126 2[57 149 161 126 138 149 149 149 149 6[69 1[115 + 115 115 115 115 115 115 115 2[57 69 1[121 40[126 2[{ + TeXBase1Encoding ReEncodeFont}55 206.584 /Helvetica-Bold + rf /Fz 175[165 193 1[206 11[179 65[{TeXBase1Encoding ReEncodeFont}4 + 247.895 /Helvetica-Bold rf end + %%EndProlog + %%BeginSetup + %%Feature: *Resolution 600dpi + TeXDict begin + %%BeginPaperSize: Letter + letter + %%EndPaperSize + + %%EndSetup + %%Page: 1 1 + 1 0 bop Black Black 1472 149 a Fz(POOMA)200 572 y Fy(A)57 + b(C++)g(T)-17 b(oolkit)59 b(f)l(or)f(High-P)-6 b(erf)l(ormance)514 + 841 y(P)g(arallel)59 b(Scienti\002c)e(Computing)1208 + 2186 y Fx(Jeffre)m(y)47 b(D)-5 b(.)48 b(Oldham)1388 2315 + y Fw(CodeSour)n(cer)q(y)-10 b(,)35 b(LLC)p Black Black + eop + %%Page: 2 2 + 2 1 bop Black Black -2 51 a Fv(POOMA:)27 b(A)h(C++)g(T)-8 + b(oolkit)27 b(f)n(or)g(High-P)m(erf)n(ormance)i(P)m(arallel)f + (Scienti\002c)g(Computing)-2 180 y Fu(by)c(Jef)n(fre)o(y)h(D.)g(Oldham) + -2 439 y(Cop)o(yright)f(\251)g(2002)h(by)f(CodeSourcery)-6 + b(,)25 b(LLC)g(\()p Ft(http://www.codesourcery.)q(com/)q + Fu(\))-2 669 y Fs(All)20 b(rights)f(reserv)o(ed.)h(This)f(document)i + (may)f(not)f(be)i(redistrib)n(uted)f(in)g(an)o(y)g(form)e(without)i + (the)g(e)o(xpress)g(permission)g(of)f(the)h(author)l(.)-2 + 1156 y Fu(Re)n(vision)j(History)-2 1312 y(Re)n(vision)g(1.01)i(2002)f + (Mar)h(01)f(Re)n(vised)h(by:)f(jdo)-2 1424 y(Added)g(UML)h(class)f + (diagrams,)g(re)n(vised)g(compilation)f(directions,)h(and)h(added)g(a)g + (description)e(of)i(the)g(source)g(code)g(structure.)-2 + 1535 y(Re)n(vision)e(1.00)i(2002)f(Jan)h(31)57 b(Re)n(vised)25 + b(by:)f(jdo)-2 1646 y(First)g(publication.)p Black Black + eop + %%Page: 3 3 + 3 2 bop Black Black -2 119 a Fy(T)-17 b(ab)n(le)58 b(of)g(Contents)396 + 351 y Fr(Pr)n(eface)p Black 5 w(.)p Black Black 1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black 22 w(ix)596 501 y Fu(1.)24 b(Ho)n(w)g(to)h(Read)g(This) + f(Book)p Black 5 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black(x)596 630 y(2.)g(Obtaining,)f(Using,)h(and)h(Modifying)e + (POOMA)p Black 3 w(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black 19 w(xii)596 760 y(3.)h(History)g(of)h(POOMA)p + Black 6 w(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + 16 w(xiii)596 889 y(4.)f(Ackno)n(wledgements)p Black + 8 w(.)p Black Black -2 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black 24 w(xi)n(v)396 + 1039 y Fr(1.)h(Getting)g(Started)h(with)f(POOMA)p Black + 14 w(.)p Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(16)596 + 1188 y Fu(1.1.)f(Getting)g(Started)h(for)g(Impatient)f(Users)p + Black 14 w(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(16)795 1318 y(11)p Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(16)596 1447 y(1.2.)g(Obtaining)f(POOMA)p Black + 14 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(17)596 1577 y(1.3.)h(Compiling)f(the)i + (POOMA)f(Library)p Black 14 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(17)795 + 1706 y(1.3.1.)g(D)l(ANGER:)g(Con\002guration)h(Options)p + Black 12 w(.)p Black Black -1 w(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(19)596 1836 y(1.4.)f(Writing)g(and)g + (Compiling)g(POOMA)g(Programs)p Black 22 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(23)795 + 1965 y(1.4.1.)g(D)l(ANGER:)g Fq(initialize)f Fu(and)i + Fq(finalize)p Black 2 w Fu(.)p Black Black -2 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(25)596 2095 y(1.5.)f(Supporting)g(Distrib)n(uted)f(Computation)p + Black 10 w(.)p Black Black -2 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(26)795 2224 y(1.5.1.)h(Obtaining)f(and) + i(Installing)e(the)i(MM)f(Shared)i(Memory)e(Library)p + Black 6 w(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(27)795 2354 y(1.5.2.)g(Obtaining)f(and)i(Installing)e(the)i + (Cheetah)g(Messaging)f(Library)p Black 19 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(28)795 2483 y(1.5.3.)g(Con\002guring)g(POOMA)h(When)g + (Using)f(Cheetah)p Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(30)396 2633 y Fr(2.)h(Intr)n(oduction)p Black 7 + w(.)p Black Black 2 w(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(31)596 + 2782 y Fu(2.1.)f(POOMA)h(Goals)p Black 6 w(.)p Black + Black -2 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(31)596 2912 y(2.2.)f(POOMA)h(is)f(Open-Source)h + (Softw)o(are)p Black 10 w(.)p Black Black 1 w(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(35)596 + 3041 y(2.3.)f(History)g(of)h(POOMA)p Black 6 w(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(36)396 3191 y Fr(3.)g(A)g(T)-9 + b(utorial)25 b(Intr)n(oduction)p Black 14 w(.)p Black + Black 1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(38)596 + 3340 y Fu(3.1.)f(Hand-Coded)h(Implementation)p Black + 6 w(.)p Black Black -3 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(40)596 + 3470 y(3.2.)f(Element-wise)g Fq(Array)f Fu(Implementation)p + Black 12 w(.)p Black Black -2 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(43)596 3599 y(3.3.)h(Data-P)o(arallel)h + Fq(Array)f Fu(Implementation)p Black 11 w(.)p Black Black + -3 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(47)596 3729 y(3.4.)g(Stencil)h Fq(Array)e + Fu(Implementation)p Black 9 w(.)p Black Black -2 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(50)596 3858 y(3.5.)h(Distrib)n(uted)f Fq(Array)h + Fu(Implementation)p Black 14 w(.)p Black Black -3 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(55)596 + 3988 y(3.6.)g(Data-P)o(arallel)h Fq(Field)f Fu(Implementation)p + Black 11 w(.)p Black Black -3 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(63)596 4117 y(3.7.)g(Distrib)n + (uted)f Fq(Field)h Fu(Implementation)p Black 14 w(.)p + Black Black -3 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(68)396 4267 y Fr(4.)h(Ov)o(er)o(view)f(of)h + (POOMA)f(Concepts)p Black 5 w(.)p Black Black 1 w(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(73)596 + 4416 y Fu(4.1.)g(POOMA)h(Containers)p Black 6 w(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(74)795 4546 y(4.1.1.)f(Choosing)g(a)h(Container)p + Black 3 w(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(75)795 4675 y(4.1.2.)f(Declaring)h(Sequential)f + (Containers)p Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(76)795 4805 y(4.1.3.)g(Declaring)h + (Distrib)n(uted)e(Containers)p Black 24 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(78)596 4934 y(4.2.)h(Computation)f(Modes)p + Black 5 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(79)596 5064 y(4.3.)h(Computation)f(En)l(vironment)p + Black 9 w(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(80)p Black 3800 5547 a Fp(iii)p + Black eop + %%Page: 4 4 + 4 3 bop Black Black 396 51 a Fr(5.)25 b Fo(Array)f Fr(Containers)p + Black 23 w(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(82)596 200 y Fu(5.1.)g(Containers)p + Black 16 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(82)596 + 330 y(5.2.)g Fq(Array)p Fu(s)p Black 6 w(.)p Black Black + -2 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(82)596 459 y(5.3.)g Fq(Domain)p Fu(s)p + Black 15 w(.)p Black Black -2 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(83)795 + 589 y(5.3.1.)g(Declaring)h Fq(Domain)p Fu(s)p Black 19 + w(.)p Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(85)994 718 y(5.3.1.1.)f Fq(Loc)p Fu(s)p + Black 13 w(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(86)994 848 y(5.3.1.2.)g + Fq(Interval)p Fu(s)p Black 8 w(.)p Black Black -2 w(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(88)994 977 y(5.3.1.3.)g Fq(Range)p Fu(s)p + Black 6 w(.)p Black Black -2 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(90)994 1107 y(5.3.1.4.)g Fq(Grid)p Fu(s)p Black + 21 w(.)p Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(92)795 1236 y(5.3.2.)g(Using)g + Fq(Domain)p Fu(s)p Black 1 w(.)p Black Black -2 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(95)596 + 1366 y(5.4.)g(Declaring)h Fq(Array)p Fu(s)p Black 12 + w(.)p Black Black -2 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(96)596 1495 y(5.5.)f(Using)g + Fq(Array)p Fu(s)p Black 15 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(104)596 1625 y(5.6.)g Fq(DynamicArray)p Fu(s)p + Black 16 w(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(110)396 1774 y Fr(6.)h(Engines)p + Black 11 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(115)596 1924 y + Fu(6.1.)f(The)h(Concept)p Black 11 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(115)596 + 2053 y(6.2.)f(T)-8 b(ypes)24 b(of)h Fq(Engine)p Fu(s)p + Black 19 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(116)396 + 2203 y Fr(7.)g(Data-P)o(arallel)f(Expr)n(essions)p Black + 20 w(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(120)596 2352 y Fu(7.1.)g(Expressions)f(with)h + (More)h(Than)g(One)g(Container)f(V)-11 b(alue)p Black + 3 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(120)596 2482 y(7.2.)24 b(Using)g(Data-P)o(arallel)h + (Expressions)p Black 2 w(.)p Black Black -2 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(120)596 2611 y(7.3.)f(Implementation)f(of)i + (Data-P)o(arallel)g(Statements)p Black 17 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(132)795 + 2741 y(7.3.1.)f(Na\357v)o(e)g(Implementation)p Black + 4 w(.)p Black Black -2 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(133)795 2870 y(7.3.2.)g(Portable)h(Expression)e + (T)-7 b(emplate)25 b(Engine)p Black 17 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(134)396 3020 y Fr(8.)g(Container)g(V)l + (iews)p Black 15 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(142)396 3169 y(A.)g(D)m(ANGER:)f(Pr)n(ogramming)h + (with)g(T)-9 b(emplates)p Black 18 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(143)596 + 3319 y Fu(A.1.)24 b(T)-7 b(emplates)24 b(Ex)o(ecute)g(at)h(Compile-T)m + (ime)p Black 15 w(.)p Black Black -2 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(143)596 + 3448 y(A.2.)f(T)-7 b(emplate)24 b(Programming)g(for)h(POOMA)g(Users)p + Black 2 w(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(144)596 3578 y(A.3.)f(T)-7 + b(emplate)24 b(Programming)g(Used)h(to)f(Write)h(POOMA)p + Black 10 w(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(149)396 3727 y Fr(B.)h(D)m(ANGER:)e(Ov)o(er)o(view)g + (of)h(POOMA)f(Sour)n(ces)p Black 13 w(.)p Black Black + 1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(157)596 + 3877 y Fu(B.1.)g(Structure)i(of)f(the)f(Files)p Black + 17 w(.)p Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(157)596 + 4006 y(B.2.)g(POOMA)h(Coding)f(Con)l(v)o(entions)p Black + 3 w(.)p Black Black -2 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(163)795 + 4136 y(B.2.1.)g(POOMA)h(Namespace)p Black 11 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(163)795 4265 y(B.2.2.)f(F)o(ormatting)p + Black 15 w(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(163)795 4395 y(B.2.3.)g + (Preprocessor)p Black 18 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(163)994 4524 y(B.2.3.1.)g(Comments)p Black 24 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(163)994 4654 y(B.2.3.2.)g(Preprocessor)i(Symbols)p + Black 15 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(164)994 + 4783 y(B.2.3.3.)e(Preprocessor)i(Macros)p Black 17 w(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(164)795 4913 y(B.2.4.)e(Global)h(V)-11 + b(ariables)p Black 14 w(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(164)795 5042 y(B.2.5.)24 b(Classes)p + Black 8 w(.)p Black Black 1 w(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(164)p Black 3811 5547 + a Fp(iv)p Black eop + %%Page: 5 5 + 5 4 bop Black Black 795 51 a Fu(B.2.6.)24 b(Functions)p + Black 14 w(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(166)795 180 y(B.2.7.)g(Friends)p Black + 8 w(.)p Black Black 1 w(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(167)795 310 y(B.2.8.)g(Compile-T)m(ime)g + (Programming)p Black 21 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(167)795 439 y(B.2.9.)g(Constants)p Black 14 w(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(167)795 569 y(B.2.10.)g(T)-8 b(ype)25 b(Casting)p + Black 5 w(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(167)795 698 y(B.2.11.)f(Errors)h(and)g(Exceptions)p + Black 18 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(167)396 848 y Fr(C.)g(UML)g + (Class)f(Diagrams)p Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(168)596 + 997 y Fu(C.1.)g Fq(Array)p Fu(s)p Black 14 w(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(169)596 1127 y(C.2.)g + Fq(Field)p Fu(s,)g Fq(Mesh)p Fu(es,)g(and)g Fq(Centering)p + Fu(s)p Black 15 w(.)p Black Black -2 w(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(172)795 1256 y(C.2.1.)g Fq(Mesh)p Fu(es)p Black + 11 w(.)p Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(174)795 1386 y(C.2.2.)g + Fq(Centering)p Fu(s)p Black(.)p Black Black -2 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(177)596 + 1515 y(C.3.)g Fq(Vector)p Fu(s,)g Fq(TinyMatrix)p Fu(s,)e + Fq(Tensor)p Fu(s)p Black 15 w(.)p Black Black -3 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(178)596 1645 y(C.4.)i + Fq(Domain)p Fu(s)p Black 22 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(184)596 1774 y(C.5.)g Fq(Engine)p Fu(s)p + Black 22 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(185)596 + 1904 y(C.6.)g(Distrib)n(uted)g(Computation)p Black 13 + w(.)p Black Black -2 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(189)396 2053 y Fr(Glossary)p Black 21 + w(.)p Black Black(.)p Black Black(.)p Black Black -1 + w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(201)p Black 3839 5547 a Fp(v)p Black + eop + %%Page: 6 6 + 6 5 bop Black Black -2 119 a Fy(List)57 b(of)h(T)-17 + b(ab)n(les)396 351 y Fu(1-1.)25 b(Con\002guration)f(Options)p + Black 18 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(19)396 481 y(4-1.)h(POOMA)g(Concepts)p + Black 8 w(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(73)396 610 y(4-2.)g(POOMA)g(Container)f(Summary)p + Black 22 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(74)396 + 740 y(4-3.)h(Choosing)f(a)h(POOMA)g(Container)p Black + 8 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(76)396 869 y(5-1.)g(Declaring)g(One-Dimensional)e + Fq(Loc)p Fu(s)p Black 23 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(86)396 + 999 y(5-2.)i(Declaring)g(Multidimensional)c Fq(Loc)p + Fu(s)p Black 23 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(86)396 1128 y(5-3.)k(Declaring)g + (One-Dimensional)e Fq(Interval)p Fu(s)p Black 17 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(88)396 1258 y(5-4.)i(Declaring)g + (Multidimensional)c Fq(Interval)p Fu(s)p Black 17 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(89)396 1387 y(5-5.)k(Declaring)g(One-Dimensional) + e Fq(Range)p Fu(s)p Black 16 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(90)396 1517 y(5-6.)i(Declaring)g + (Multidimensional)c Fq(Range)p Fu(s)p Black 16 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(91)396 + 1647 y(5-7.)k(Declaring)g(One-Dimensional)e Fq(Grid)p + Fu(s)p Black 8 w(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(92)396 1776 y(5-8.)i(Declaring)g(Multidimensional)c + Fq(Grid)p Fu(s)p Black 8 w(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(94)396 1906 y(5-9.)k(Some)g Fq(Domain)e + Fu(Accessors)p Black 12 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(95)396 2035 y(5-10.)i(Declaring)f + Fq(Array)p Fu(s)p Black 3 w(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(99)396 + 2165 y(5-11.)h(Initializing)e Fq(Array)p Fu(s')g(Domains)p + Black 14 w(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(102)396 2294 y(5-12.)i Fq(Array)e Fu(Internal)i(T)-8 + b(ype)25 b(De\002nitions)f(and)g(Compile-T)m(ime)f(Constants)p + Black 9 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(107)396 2424 y(5-13.)i + Fq(Array)e Fu(Accessors)p Black 6 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(107)396 2553 y(5-14.)i(Changing)f(a)h + Fq(DynamicArray)p Fu(')-5 b(s)22 b(Domain)p Black 2 w(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(111)396 + 2683 y(6-1.)j(T)-8 b(ypes)24 b(of)h Fq(Engine)p Fu(s)p + Black 12 w(.)p Black Black -2 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(116)396 2812 y(7-1.)g(Operators)g(Permissible)e(for)j(Data-P)o + (arallel)f(Expressions)p Black 5 w(.)p Black Black -2 + w(.)p Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(124)396 2942 y(7-2.)g(Mathematical)f(Functions)g + (Permissible)f(for)i(Data-P)o(arallel)h(Expressions)p + Black 5 w(.)p Black Black -2 w(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(125)396 3071 y(7-3.)f(Comparison)f(Functions)g(Permissible)g(for) + h(Data-P)o(arallel)g(Expressions)p Black 16 w(.)p Black + Black -2 w(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(130)396 3201 y(7-4.)g(Miscellaneous)e(Functions)h + (Permissible)g(for)h(Data-P)o(arallel)g(Expressions)p + Black 2 w(.)p Black Black -2 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(132)396 3330 y(A-1.)g + (Correspondences)g(Between)h(Run-T)m(ime)d(and)i(Compile-T)m(ime)e + (Constructs)p Black 16 w(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(146)396 3460 y(A-2.)i(More)g(Correspondences)g(Between)g(Run-T)m + (ime)f(and)h(Compile-T)m(ime)e(Constructs)p Black 23 + w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(149)396 3589 y(B-1.)j(T)-8 + b(oolkit)23 b(Directories)h(and)h(Files)p Black 5 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(158)396 3719 y(B-2.)h(Source)f + (Code)g(Directories)g(\(W)l(ithin)f Ft(src)p Fu(\))p + Black 23 w(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(159)396 3848 y(B-3.)i(Filename)e(Suf)n(\002x)o(es)p + Black 4 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(161)396 + 3978 y(C-1.)i(Abbre)n(viations)p Black 11 w(.)p Black + Black -3 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(189)-2 4401 y Fy(List)57 + b(of)h(Figures)396 4634 y Fu(2-1.)25 b(Ho)n(w)f(POOMA)h(Fits)f(Into)g + (the)h(Scienti\002c)g(Process)p Black 23 w(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(32)396 4764 y(3-1.)g Fq(Doof2d)e Fu(A)-7 b(v)o(eragings)p + Black 17 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(38)396 + 4893 y(3-2.)25 b(Adding)f Fq(Array)p Fu(s)p Black 21 + w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(50)396 + 5023 y(3-3.)h(Applying)e(a)i(Stencil)g(to)f(an)h Fq(Array)p + Black 14 w Fu(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(54)p Black 3811 5547 + a Fp(vi)p Black eop + %%Page: 7 7 + 7 6 bop Black Black 396 51 a Fu(3-4.)25 b(The)g(POOMA)f(Distrib)n(uted) + g(Computation)f(Model)p Black 18 w(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(60)396 180 y(4-1.)i(Concepts)g(F) + o(or)f(Declaring)h(Containers)p Black 4 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(76)396 + 310 y(4-2.)g Fq(Array)f Fu(and)g Fq(Field)g Fu(Mathematical)g(and)h + (Computational)e(Concepts)p Black 1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(77)396 439 y(7-1.)i(Adding)f + Fq(Array)p Fu(s)f(with)h(Dif)n(ferent)h(Domains)p Black + 18 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(121)396 569 y(7-2.)g(Annotated)f(P)o + (arse)h(T)m(ree)g(for)g Fq(-A)65 b(+)h(2*B)p Black 11 + w Fu(.)p Black Black -1 w(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(134)396 698 y(C-1.)26 b(Explanation)d(of)i(UML)f(Class)h + (Diagrams)p Black 6 w(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(168)396 828 y(C-2.)h(Relationship)d(Between)j Fq(Array)d + Fu(and)i Fq(DynamicArray)p Fu(s)p Black 14 w(.)p Black + Black -3 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(170)396 957 y(C-3.)h Fq(Array)d Fu(Diagram)p + Black 20 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(170)396 1087 y(C-4.)j Fq(DynamicArray)21 b Fu(Diagram)p + Black 8 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(171)396 1217 y(C-5.)26 + b Fq(Field)p Black 18 w Fu(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(173)396 + 1346 y(C-6.)g Fq(Mesh)p Fu(es)p Black 3 w(.)p Black Black + -2 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(175)396 1476 y(C-7.)g Fq(NoMesh)p Black 4 w Fu(.)p + Black Black -2 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(175)396 + 1605 y(C-8.)g Fq(UniformRectilinearMesh)p Black 17 w + Fu(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(176)396 + 1735 y(C-9.)g(Centering)e(Classes)p Black 6 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(177)396 1864 y(C-10.)h + Fq(Vector)p Fu(s)p Black 15 w(.)p Black Black -1 w(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(178)396 1994 y(C-11.)g Fq(TinyMatrix)p + Fu(s)p Black 1 w(.)p Black Black -2 w(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(179)396 + 2123 y(C-12.)g Fq(TinyMatrixEngine)p Fu(s)p Black 5 w(.)p + Black Black -4 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(180)396 + 2253 y(C-13.)g Fq(Tensor)p Fu(s)f(and)g Fq(TensorEngine)p + Fu(s)p Black 15 w(.)p Black Black -3 w(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(181)396 2382 y(C-14.)h + Fq(Full)f Fu(and)h Fq(Diagonal)e(TensorEngine)p Fu(s)p + Black 8 w(.)p Black Black -4 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(182)396 + 2512 y(C-15.)i Fq(Antisymmetric)d Fu(and)j Fq(Symmetric)d(TensorEngine) + p Fu(s)p Black 20 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(183)396 2641 y(C-16.)j Fq(Domain)p Fu(s)p Black + 15 w(.)p Black Black -1 w(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(185)396 2771 y(C-17.)g + Fq(Engine)p Fu(s)p Black 15 w(.)p Black Black -1 w(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(185)396 2900 y(C-18.)g Fq(Brick)f Fu(and)h + Fq(CompressibleBrick)20 b(Engine)p Fu(s)p Black 17 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(186)396 3030 y(C-19.)25 b Fq(Dynamic)f + Fu(and)g Fq(MultiPatch)f(Engine)p Fu(s)p Black 22 w(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(187)396 3159 y(C-20.)i Fq(Remote)f(Engine)p + Fu(s)p Black 17 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(188)396 + 3289 y(C-21.)h(P)o(artitions)p Black 17 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(190)396 + 3418 y(C-22.)g(Grid)g(P)o(artitions)p Black 10 w(.)p + Black Black -2 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(191)396 + 3548 y(C-23.)g(Other)g(P)o(artitions)p Black 15 w(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(192)396 3677 y(C-24.)g(Guard)g(Layers)p + Black 3 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(193)396 3807 y(C-25.)g Fq(DomainLayout)p + Black 8 w Fu(.)p Black Black -3 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(194)396 3936 y(C-26.)g + Fq(DynamicLayout)p Black 17 w Fu(.)p Black Black -3 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(194)396 4066 y(C-27.)g Fq(GridLayout)p Black 15 + w Fu(.)p Black Black -2 w(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(195)396 + 4195 y(C-28.)g Fq(UniformGridLayout)p Black 3 w Fu(.)p + Black Black -4 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(196)396 4325 y(C-29.)g + Fq(SparseTileLayout)p Black 15 w Fu(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(197)396 4454 y(C-30.)g + (Relationships)f(Among)f(Conte)o(xt)h(Mappers)p Black + 15 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(198)396 + 4584 y(C-31.)h(Conte)o(xt)f(Mappers)p Black 10 w(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(199)p Black 3784 5547 + a Fp(vii)p Black eop + %%Page: 8 8 + 8 7 bop Black Black -2 119 a Fy(List)57 b(of)h(Examples)396 + 351 y Fu(1-1.)25 b(A)g(\223Hello,)f(POOMA\224)h(Program)p + Black 3 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(23)396 481 y(3-1.)g(Hand-Coded)g(Implementation)e(of)i + Fq(Doof2d)p Black 18 w Fu(.)p Black Black -2 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(40)396 610 y(3-2.)g(Element-wise)f Fq(Array)f + Fu(Implementation)g(of)i Fq(Doof2d)p Black 23 w Fu(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(43)396 + 740 y(3-3.)g(Data-P)o(arallel)g Fq(Array)f Fu(Implementation)e(of)j + Fq(Doof2d)p Black 22 w Fu(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(47)396 869 y(3-4.)g(Stencil)g + Fq(Array)e Fu(Implementation)g(of)i Fq(Doof2d)p Black + 20 w Fu(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black(51)396 999 y(3-5.)g(Distrib)n(uted)e(Stencil)i + Fq(Array)e Fu(Implementation)g(of)i Fq(Doof2d)p Black + 22 w Fu(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(55)396 1128 y(3-6.)g(Data-P)o + (arallel)g Fq(Field)f Fu(Implementation)e(of)j Fq(Doof2d)p + Black 22 w Fu(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black(64)396 1258 y(3-7.)g(Distrib)n(uted)e + (Data-P)o(arallel)i Fq(Field)f Fu(Implementation)f(of)i + Fq(Doof2d)p Black Fu(.)p Black Black -2 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(68)396 1387 y(5-1.)g(Cop)o(ying)f Fq(Array)p + Fu(s)p Black 4 w(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black(105)396 1517 y(5-2.)h(Using)f Fq(Array)f + Fu(Member)i(Functions)p Black 14 w(.)p Black Black -1 + w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black(108)396 + 1647 y(5-3.)g(Example)f(Using)g Fq(DynamicArray)p Fu(s)p + Black 16 w(.)p Black Black -3 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black + -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black -1 w(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black(113)396 1776 y(A-1.)h(Classes)g(Storing)f(P)o(airs)h(of)g(V)-11 + b(alues)p Black 2 w(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black -1 w(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black -1 w(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black(145)396 + 1906 y(A-2.)25 b(T)-7 b(emplated)24 b(Class)h(Storing)f(P)o(airs)h(of)g + (V)-11 b(alues)p Black 14 w(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black -1 w(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black -1 w(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black Black(.)p Black + Black(.)p Black Black -1 w(.)p Black Black(.)p Black + Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p + Black Black(.)p Black Black(.)p Black(145)p Black 3756 + 5547 a Fp(viii)p Black eop + %%Page: 9 9 + 9 8 bop Black Black -2 119 a Fy(Preface)396 416 y Fu(The)20 + b(POOMA)g(T)-8 b(oolkit)18 b(enables)i(scientists)e(and)i(engineers)f + (to)h(quickly)e(translate)i(scienti\002c)f(algo-)396 + 545 y(rithms)26 b(into)f(ef)n(\002cient)i(programs.)f(The)g(toolkit')-5 + b(s)25 b(containers)h(f)o(acilitate)g(storing)f(and)i(computing)396 + 675 y(arrays)j(of)f(v)n(alues)g(by)f(supporting)g(element-wise,)g + (data-parallel,)h(and)g(stencil-based)g(computa-)396 + 804 y(tions.)h(The)g(toolkit)f(automatically)g(handles)i(all)f + (interprocessor)g(communication)f(so)h(the)g(same)396 + 934 y(POOMA)25 b(program)g(can)h(ef)n(\002ciently)f(e)o(x)o(ecute)f(on) + h(a)h(uniprocessor)e(w)o(orkstation)g(or)h(a)h(supercom-)396 + 1064 y(puter)i(with)g(thousands)e(of)i(processors.)g(Thus,)f(its)h + (creator)g(can)h(concentrate)f(on)g(the)g(algorithms)396 + 1193 y(rather)d(than)g(their)f(implementation)f(details.)396 + 1372 y(POOMA)33 b(programs)e(are)j(written)d(in)h(C++.)i(Scientists)d + (and)i(engineers)f(can)h(use)f(their)g(e)o(xisting)396 + 1502 y(kno)n(wledge)e(of)h(C++)g(and)g(need)g(only)f(learn)h(a)g(fe)n + (w)g(POOMA)g(concepts)f(rather)h(than)g(ha)n(ving)f(to)396 + 1631 y(learn)21 b(a)g(whole)f(ne)n(w)g(language.)g(The)h(easy-to-use)f + (POOMA)g(interf)o(ace)i(hides)e(sophisticated)e(C++)396 + 1761 y(code.)35 b(F)o(or)f(e)o(xample,)g(a)h(POOMA)f(programmer)g(can)h + (use)f(a)h(simple)e(data-parallel)i(statements)396 1890 + y(such)25 b(as)635 2199 y Fn(double)59 b(x;)g(vector<1>)f(v1\(10000\),) + f(v2\(10000\),)h(v3\(10000\);)635 2329 y(x)i(=)f(sum\(v1)g(*)g + (sin\(v2\))g(-)g(exp\(v3\)\);)396 2588 y Fu(and)29 b(e)o(xpect)g(them)f + (to)g(run)h(ef)n(\002ciently)f(without)g(e)n(v)o(er)g(being)h(a)o(w)o + (are)g(of)g(the)g(underlying)e(state-of-)396 2717 y(the-art)e(e)o + (xpression)f(template)g(technology)-6 b(.)396 2897 y(This)30 + b(book)g(is)g(aimed)h(at)f(scientists)f(and)i(engineers)g(who)f(w)o + (ant)g(to)h(quickly)e(translate)h(scienti\002c)396 3026 + y(algorithms)23 b(into)g(ef)n(\002cient)h(programs)f(running)g(on)h + (one)g(or)g(thousands)f(of)h(processors.)g(Although)396 + 3156 y(we)f(will)e(outline)g(some)g(scienti\002c)h(algorithms,)e(no)i + (scienti\002c)g(background)g(is)f(required.)h(Readers)396 + 3285 y(will)30 b(need)g(to)g(be)g(f)o(amiliar)g(with)f(C++,)i(the)f + (language)g(in)f(which)h(POOMA)g(programs)g(are)h(writ-)396 + 3415 y(ten.)d(Classes,)h(objects,)e(function)h(objects,)f(template)h + (classes,)g(and)g(template)g(functions)f(will)h(all)396 + 3544 y(be)e(used.)e(Appendix)g(Appendix)g(A)i(contains)e(a)h(short)g + (introduction)e(to)i(template)f(programming.)396 3674 + y(Readers)d(needing)d(more)h(background)g(material)g(might)f(w)o(ant)h + (to)g(read)g(K)m(oenig)g(and)g(Moo')-5 b(s)18 b Fp(Accel-)396 + 3803 y(er)o(ated)28 b(C++)p Fu(,)i(Stanle)o(y)f(Lippman')-5 + b(s)27 b Fp(C++)j(Primer)r Fu(,)e(Bjarne)i(Stroustrup')-5 + b(s)28 b Fp(The)h(C++)h(Pr)l(o)o(gr)o(am-)396 3933 y(ming)j(Langua)o(g) + o(e)p Fu(,)f(or)h(the)g(\002rst)h(half)f(of)g(Barton)g(and)g(Nackman') + -5 b(s)33 b Fp(Scienti\002c)f(and)h(Engineering)396 4062 + y(C++)p Fu(.)396 4242 y(Readers)k(of)e(this)g(book)g(will)f(learn)i(ho) + n(w)e(to)i(use)f(the)g(POOMA)g(T)-8 b(oolkit)34 b(to)i(implement)d + (scien-)396 4371 y(ti\002c)c(algorithms.)d(Since)i(POOMA)g(of)n(fers)h + (classes)e(and)i(functions)e(corresponding)g(to)g(common)396 + 4501 y(scienti\002c)e(concepts,)f(POOMA)h(users)g(will)p + Black 396 4780 a Fs(\225)p Black 72 w Fu(spend)f(signi\002cantly)g + (less)g(time)g(programming,)p Black 396 4959 a Fs(\225)p + Black 72 w Fu(write)32 b(programs)g(that)g(are)h(typically)e(one-tenth) + h(the)g(length)f(of)i(comparable)f(C)h(and)f(F)o(ortran)p + Black 3811 5547 a Fp(ix)p Black eop + %%Page: 10 10 + 10 9 bop Black 3577 -132 a Fp(Pr)l(eface)p Black 496 + 51 a Fu(programs,)p Black 396 230 a Fs(\225)p Black 72 + w Fu(require)25 b(much)f(less)h(time)f(to)g(deb)n(ug)g(programs,)h(and) + p Black 396 410 a Fs(\225)p Black 72 w Fu(will)31 b(be)h(able)h(to)e + (port)h(their)g(programs)f(to)h(a)h(wide)f(v)n(ariety)f(of)h(platforms) + f(without)g(changing)496 539 y(them.)396 669 y(Those)c(wishing)e(to)h + (learn)h(ho)n(w)f(to)h(write)f(parallel)h(or)g(distrib)n(uted)e + (programs)h(will)g(learn)h(the)f(fun-)396 798 y(damental)31 + b(concepts)g(and)h(see)g(ho)n(w)f(easy)g(it)g(is)g(to)h(write)f(the)g + (programs.)g(Readers)i(interested)e(in)396 928 y(adv)n(anced)i(C++)h + (techniques)f(will)f(see)i(ho)n(w)e(these)h(techniques,)g + (theoretically)f(presented)h(else-)396 1057 y(where,)h(are)h(actually)e + (used)g(in)h(practice.)g(W)-8 b(e)34 b(hope)f(all)h(our)f(readers)i + (will)e(be)g(intrigued)g(by)g(the)396 1187 y(po)n(wer)g(of)h(POOMA')-5 + b(s)33 b(technology)f(the)o(y)h(will)g(peek)h(under)f(the)h(hood)f(to)g + (see)h(ho)n(w)f(the)g(toolkit)396 1316 y(uses)25 b(C++')-5 + b(s)25 b(features.)-2 1769 y Fx(1.)47 b(Ho)m(w)i(to)f(Read)g(This)g + (Book)396 1984 y Fu(Each)35 b(chapter)g(of)g(this)f(book)g(introduces)g + (a)h(ne)n(w)f(concept,)h(using)e(it)h(to)h(con)l(v)o(ert)f(an)h + (algorithm)396 2114 y(into)23 b(a)h(program.)f(It)g(continues)g(by)g + (describing)g(the)g(concept')-5 b(s)23 b(interf)o(ace,)h(illustrating)e + (these)h(with)396 2243 y(code)30 b(fragments)f(or)g(short)g(programs,)f + (and)i(concludes)e(with)h(a)h(detailed)e(listing)g(of)h(the)h(classes,) + 396 2373 y(functions,)g(member)g(functions,)g(etc.)h(All)f(too)g + (frequently)h(in)f(C++,)i(tw)o(o)e(concepts)g(are)i(interre-)396 + 2502 y(lated)f(so)f(describing)g(one)h(also)g(requires)f(describing)g + (the)h(other)-5 b(.)30 b(Thus,)g(these)h(detailed)f(listings)396 + 2632 y(may)25 b(refer)h(to)e(material)g(presented)h(in)g(future)f + (chapters.)396 2811 y(A)g(fe)n(w)f(sections)g(mark)o(ed)g(with)g + (\223dangerous)g(bend\224)h(signs)e(contain)h(adv)n(anced)h(material)f + (not)g(nec-)396 2941 y(essary)i(to)g(understand)f(when)h(initially)d + (learning)j(POOMA.)g(I)g(recommend)f(skipping)f(these)i(sec-)396 + 3070 y(tions)f(on)g(your)h(\002rst)g(reading)g(of)f(this)g(book.)396 + 3250 y(One)35 b(need)g(not)g(read)g(e)n(v)o(ery)g(chapter)g(to)g(write) + f(sophisticated)g(POOMA)h(programs.)f(Here)h(is)g(a)396 + 3379 y(brief)25 b(sk)o(etch)g(of)g(what)f(is)h(in)f(the)h(remaining)e + (chapters)i(and)g(appendices:)396 3658 y(Getting)f(Started)h(with)f + (POOMA)p Black Black 596 3837 a(describes)34 b(ho)n(w)g(to)h(do)n + (wnload)e(and)i(compile)f(the)h(POOMA)g(T)-8 b(oolkit.)33 + b(It)i(then)f(presents)h(a)596 3967 y(\223Hello,)19 b(POOMA\224)h + (program,)f(e)o(xplaining)f(ho)n(w)h(to)g(compile)g(and)g(run)h(it.)f + (Impatient)g(readers)596 4096 y(who)24 b(already)h(ha)n(v)o(e)g(a)g(w)o + (orking)f(POOMA)g(T)-8 b(oolkit)24 b(may)g(wish)g(to)h(skip)f(this)g + (chapter)-5 b(.)396 4326 y Fq(Array)24 b Fu(Containers)p + Black Black 596 4505 a(implement)29 b(the)i(concept)g(of)g(a)h + (mathematical)e(array)i(which)f(is)f(a)i(map)f(from)g(indices)f(in)h(a) + 596 4634 y(domain)17 b(to)i(v)n(alues.)f(This)g(container)h(is)f(the)h + (most)f(fundamental)g(POOMA)h(type.)f(W)-8 b(e)19 b(e)o(xplain)596 + 4764 y(ho)n(w)f(to)h(create)h(and)f(use)h(these)f(maps.)f(All)h + (subsequent)f(chapters)i(depend)f(on)g(understanding)596 + 4893 y Fq(Array)p Fu(s.)p Black 3839 5547 a Fp(x)p Black + eop + %%Page: 11 11 + 11 10 bop Black 3577 -132 a Fp(Pr)l(eface)p Black 396 + 51 a Fq(Vector)p Fu(s,)23 b Fq(TinyMatrix)p Fu(s,)f(and)j + Fq(Tensor)p Fu(s)p Black Black 596 230 a(are)32 b(three)g(classes)f + (implementing)e(the)j(corresponding)f(mathematical)f(concepts.)h(If)i + (your)596 360 y(algorithm)23 b(uses)h(these)h(mathematical)f(concepts,) + g(read)h(this)f(chapter)-5 b(.)396 589 y(Data-P)o(arallel)25 + b(Expressions)p Black Black 596 768 a(operate)36 b(on)f(multiple)f(v)n + (alues.)h(Man)o(y)g(scienti\002c)g(algorithms)f(use)i(these)g(concepts) + f(so)h(all)596 898 y(POOMA)31 b(containers)g(support)f(them.)g(F)o(or)i + (e)o(xample,)e(v)n(alues)g(in)h(tw)o(o)g Fq(Array)p Fu(s)f + Fq(a)h Fu(and)g Fq(b)596 1027 y Fu(can)36 b(be)h(added)f(element-wise)g + (using)g(an)g(e)o(xpression)f(as)i(simple)e(as)h Fq(a+b)p + Fu(,)g(omitting)e(the)596 1157 y(need)23 b(for)g(an)o(y)g(inde)o(xing)e + (or)i(loops.)f(A)i(dangerous-bend)e(section)h(describes)g(the)g + (underlying)596 1286 y(PETE)h(technology)g(making)g(this)g(possible.) + 396 1515 y(Domains)p Black Black 596 1695 a(specify)38 + b(containers')h(sets)f(of)h(permitted)f(indices.)g(The)o(y)g(are)i + (used)e(when)h(creating)g(ne)n(w)596 1824 y(containers)24 + b(and)h(taking)f(vie)n(ws)f(of)i(e)o(xisting)e(containers.)396 + 2053 y(Container)i(V)-6 b(ie)n(ws)p Black Black 596 2233 + a(are)26 b(themselv)o(es)e(containers)i(ha)n(ving)f(domains)g(that)g + (are)i(subsets)e(of)h(other)g(containers')f(do-)596 2362 + y(mains.)36 b(Combining)h(them)g(with)g(data-parallel)h(programs)g + (yields)f(POOMA')-5 b(s)37 b(po)n(werful)596 2492 y(notation)23 + b(to)h(implement)g(algorithms.)396 2721 y Fq(Engine)p + Fu(s)p Black Black 596 2900 a(store)31 b(and)g(compute)g(data)h(for)g + (containers.)f(If)h(containers)f(are)h(lik)o(e)f(cars,)h(engines)f(are) + h(the)596 3030 y(things)g(that)h(mak)o(e)h(them)f(go.)h(Most)e(POOMA)i + (users)g(need)g(not)f(look)g(under)g(the)h(hood)f(at)596 + 3159 y Fq(Engine)p Fu(s,)28 b(b)n(ut)h(those)g(interested)g(in)g + (optimizing)f(their)h(use)h(of)g(POOMA)f(or)h(seeing)f(one)596 + 3289 y(of)24 b(the)h(fundamental)f(POOMA)h(concepts)f(will)g(be)h + (interested.)396 3518 y(Distrib)n(uted)e(Computation)p + Black Black 596 3697 a(in)l(v)n(olv)o(es)d(distrib)n(uting)g(a)j + (program')-5 b(s)21 b(data)i(and)f(computation)f(among)g(all)h(a)n(v)n + (ailable)g(proces-)596 3827 y(sors,)c(ranging)g(in)h(number)f(from)h + (one)f(to)h(thousands.)e(W)-8 b(e)20 b(present)e(the)h(POOMA)g + (concepts)f(of)596 3956 y(partitioning)j(and)j(distrib)n(uting)d(data)j + (while)f(relying)g(on)h(the)f(toolkit)g(and)g(a)h(communication)596 + 4086 y(library)i(to)g(automatically)f(mo)o(v)o(e)g(all)h(data)h(among)f + (processors.)g(W)-8 b(e)27 b(sho)n(w)e(that)i(con)l(v)o(erting)596 + 4215 y(a)22 b(sequential)f(program)g(into)g(a)h(distrib)n(uted)e + (program)i(can)g(be)g(as)g(easy)g(as)g(adding)f(three)h(lines)596 + 4345 y(of)i(code.)396 4574 y Fq(Field)g Fu(Containers)p + Black Black 596 4753 a(e)o(xtend)c(the)i(concept)f(of)h(an)g + Fq(Array)e Fu(to)h(three-dimensional)f(space.)i(This)f(is)g(the)h(most) + e(po)n(w-)596 4883 y(erful)31 b(POOMA)g(abstraction.)g(Multiple)e(v)n + (alues)i(can)g(be)h(treated)f(as)h(residing)e(at)h(the)g(same)596 + 5012 y(location,)24 b(and)i(relations)g(support)e(lazy)i(e)n(v)n + (aluation,)e(where)j(one)f(\002eld')-5 b(s)25 b(v)n(alues)h(can)g(be)g + (au-)596 5142 y(tomatically)d(updated)h(whene)n(v)o(er)g(another)h + (\002eld')-5 b(s)24 b(v)n(alues)g(change.)p Black 3811 + 5547 a Fp(xi)p Black eop + %%Page: 12 12 + 12 11 bop Black 3577 -132 a Fp(Pr)l(eface)p Black 396 + 51 a Fu(Appendix:)24 b(T)-7 b(emplate)24 b(Programming)p + Black Black 596 230 a(describes)e(using)h(C++)h(templates)e(in)g(POOMA) + h(programs.)g(C++)h(programmers)e(with)g(little)596 360 + y(e)o(xperience)j(in)f(using)g(templates)g(will)h(w)o(ant)f(to)h(read)h + (this)e(appendix)g(before)i(reading)f(about)596 489 y + Fq(Array)p Fu(s.)35 b(A)i(dangerous-bend)f(section)g(will)g(interest)g + (C++)h(programmers)f(desiring)g(an)596 619 y(o)o(v)o(ervie)n(w)23 + b(of)i(all)f(the)h(template)f(programming)f(ideas)i(used)f(to)h + (implement)e(POOMA.)-2 1300 y Fx(2.)47 b(Obtaining,)h(Using,)g(and)g + (Modifying)h(POOMA)396 1516 y Fu(The)19 b(POOMA)g(T)-8 + b(oolkit)18 b(is)h(open-source)g(softw)o(are.)g(An)o(yone)f(may)h(do)n + (wnload,)f(read,)h(redistrib)n(ute,)396 1646 y(or)33 + b(modify)e(the)h(POOMA)g(source)g(code.)h(Here)g(we)f(brie\003y)h + (describe)f(ho)n(w)g(to)f(do)n(wnload,)g(con-)396 1775 + y(\002gure,)g(and)e(compile)g(the)h(POOMA)g(T)-8 b(oolkit)28 + b(for)i(UNIX)g(operating)f(systems.)g(Instructions)f(for)396 + 1905 y(Microsoft)36 b(W)l(indo)n(ws)g(and)h(Mac)g(users)g(as)g(well)g + (as)g(more)g(details)f(appear)i(in)f(the)f(subsequent)396 + 2034 y(chapter)-5 b(.)29 b(Those)g(w)o(anting)f(to)g(run)h(distrib)n + (uted)f(POOMA)g(programs)h(should)f(also)g(read)i(the)f(sub-)396 + 2164 y(sequent)c(chapter)-5 b(.)396 2343 y(Obtain)25 + b(the)h(POOMA)g(source)g(code)g Ft(pooma-)t(2.3.0.tgz)k + Fu(from)25 b(the)h(POOMA)g(do)n(wnload)e(page)396 2472 + y(\()p Ft(http://pooma.codesourcer)q(y.co)q(m/po)q(oma/)q(down)q(load)q + Fu(\))60 b(a)n(v)n(ailable)52 b(of)n(f)i(the)f(POOMA)396 + 2602 y(home)43 b(page)g(\()p Ft(http://www.codesourcery.)q(com/)q(poom) + q(a/po)q(oma/)q Fu(\).)49 b(The)43 b(\223tgz\224)h(indicates)396 + 2731 y(this)i(is)h(a)g(compressed)f(tar)i(archi)n(v)o(e)e(\002le.)h(T) + -8 b(o)47 b(e)o(xtract)f(the)h(source)g(\002les,)g(use)g + Fq(tar)65 b(xzvf)396 2861 y(pooma-2.3.0.tgz)p Fu(.)22 + b(Mo)o(v)o(e)j(into)f(the)i(source)g(code)g(directory)f + Ft(pooma-)t(2.3.0)k Fu(directory;)396 2991 y(e.g.,)c + Fq(cd)65 b(pooma-2.3.0)p Fu(.)396 3170 y(Con\002guring)22 + b(the)f(source)h(code)g(determines)f(the)g(\002le)h(and)g(program)f + (names)g(needed)h(for)g(compila-)396 3299 y(tion.)j(First,)g(determine) + f(a)i(con\002guration)f(\002le)h(in)f(the)g Ft(config/arch/)j + Fu(directory)d(corresponding)396 3429 y(to)35 b(your)f(operating)h + (system)e(and)i(compiler)-5 b(.)34 b(F)o(or)h(e)o(xample,)f + Ft(LINUXgcc.conf)k Fu(supports)33 b(com-)396 3558 y(piling)26 + b(under)h(a)g(Linux)f(operating)h(system)e(with)i(g++,)g(while)f + Ft(SGI64KCC.conf)31 b Fu(supports)25 b(com-)396 3688 + y(piling)30 b(under)h(a)h(64-bit)e(SGI)h(Irix)h(operating)e(system)g + (with)g(KCC.)i(Ne)o(xt,)f(con\002gure)g(the)g(source)396 + 3817 y(code:)635 4126 y Fn(./configure)58 b(-)6 b(-arch)58 + b(LINUXgcc)g(-)6 b(-opt)58 b(-)6 b(-suite)58 b(LINUXgcc-opt)396 + 4385 y Fu(.)33 b(The)g(architecture)g(ar)n(gument)g(to)g(the)f + Fq(-)6 b(-arch)32 b Fu(option)f(is)i(the)g(name)f(of)h(the)g + (corresponding)396 4515 y(con\002guration)23 b(\002le,)g(omitting)e + (its)i Ft(.conf)h Fu(suf)n(\002x.)f(The)g Fq(-)6 b(-opt)21 + b Fu(indicates)i(the)g(POOMA)g(T)-8 b(oolkit)396 4644 + y(will)32 b(contain)g(optimized)g(source)g(code,)h(which)g(mak)o(es)f + (the)h(code)g(run)f(more)h(quickly)e(b)n(ut)i(may)396 + 4774 y(impede)23 b(deb)n(ugging.)f(Alternati)n(v)o(ely)-6 + b(,)20 b(use)k(the)f Fq(-)6 b(-debug)21 b Fu(option)h(which)h(supports) + f(deb)n(ugging.)396 4903 y(The)28 b Fp(suite)f(name)h + Fu(can)g(be)g(an)o(y)g(arbitrary)g(string.)f(W)-8 b(e)28 + b(chose)g Fq(LINUXgcc-opt)d Fu(to)i(remind)h(us)396 5033 + y(of)35 b(the)g(architecture)h(and)f(optimization)e(choice.)i + Ft(configure)j Fu(creates)d(subdirectories)g(named)p + Black 3784 5547 a Fp(xii)p Black eop + %%Page: 13 13 + 13 12 bop Black 3577 -132 a Fp(Pr)l(eface)p Black 396 + 51 a Fu(\223LINUXgcc-opt\224)30 b(for)g(use)f(when)h(compiling)d(the)j + (source)f(\002les.)h(Comments)e(at)i(the)f(be)o(ginning)396 + 180 y(of)c Ft(lib/)p Fm(suiteName)p Ft(/PoomaConfiguration.h)k + Fu(record)d(the)e(con\002guration)h(ar)n(guments.)396 + 360 y(T)-8 b(o)31 b(compile)f(the)h(source)g(code,)g(set)g(the)g + Fq(POOMASUITE)d Fu(en)l(vironment)i(v)n(ariable)h(to)f(the)h(suite)396 + 489 y(name)25 b(and)g(then)f(type)h Fq(make)p Fu(.)e(T)-8 + b(o)25 b(set)g(the)f(en)l(vironment)g(v)n(ariable)g(for)h(the)g(bash)f + (shell)h(use)635 798 y Fn(export)59 b(POOMASUITE=suiteName)396 + 1057 y Fu(substituting)22 b(the)j(suite)f(name')-5 b(s)24 + b Fm(suiteName)p Fu(.)f(F)o(or)i(the)f(csh)h(shell,)f(use)635 + 1316 y Fn(setenv)59 b(POOMASUITE)e(LINUXgcc-opt)396 1575 + y Fu(Issuing)43 b(the)h Fq(make)f Fu(command)g(compiles)g(the)h(POOMA)g + (source)g(code)g(\002les)g(to)g(create)g(the)396 1705 + y(POOMA)26 b(library)-6 b(.)25 b(The)h(POOMA)g(mak)o(e\002les)f(assume) + h(the)f(GNU\231)h(Mak)o(e)g(is)f(a)n(v)n(ailable)g(so)h(sub-)396 + 1834 y(stitute)f(the)g(proper)h(command)e(to)h(run)h(GNU\231)f(Mak)o(e) + h(if)f(necessary)-6 b(.)26 b(The)f(POOMA)h(library)f(can)396 + 1964 y(be)g(found)g(in,)f(e.g.,)h Ft(lib/LINUXgcc-)t(opt/libpooma-)t(g) + q(cc.a)q Fu(.)396 2143 y(An)o(yone)39 b(may)h(modify)f(the)h(POOMA)f + (source)i(code.)f(If)g(an)g(application)f(requires)h(a)g(special-)396 + 2273 y(ized)27 b(container)f(not)g(already)h(a)n(v)n(ailable,)e(an)o(y) + h(programmer)g(may)g(add)h(it.)e(An)o(y)h(programmer)g(can)396 + 2402 y(e)o(xtend)33 b(it)h(to)f(solv)o(e)g(problems)g(in)g(pre)n + (viously)f(unsupported)h(domains.)f(Companies)i(using)e(the)396 + 2532 y(toolkit)k(can)h(read)g(the)g(source)g(code)g(to)g(ensure)g(it)f + (has)h(no)g(security)f(holes.)h(It)f(may)h(be)g(do)n(wn-)396 + 2661 y(loaded)26 b(at)f(no)h(cost)f(and)h(used)f(for)h(perpetuity)-6 + b(.)24 b(There)i(are)h(no)e(annual)g(licenses)g(and)h(no)f(on-going)396 + 2791 y(costs.)e(Users)h(are)g(guaranteed)g(the)g(softw)o(are)g(will)f + (ne)n(v)o(er)g(disappear)-5 b(.)23 b(In)h(summary)-6 + b(,)22 b(the)h(POOMA)396 2920 y(T)-8 b(oolkit)24 b(is)g(lo)n(w-risk)f + (softw)o(are.)-2 3422 y Fx(3.)47 b(Histor)r(y)h(of)g(POOMA)396 + 3638 y Fu(The)32 b(POOMA)g(T)-8 b(oolkit)30 b(w)o(as)i(de)n(v)o(eloped) + f(at)h(Los)f(Alamos)g(National)g(Laboratory)h(to)f(assist)g(nu-)396 + 3768 y(clear)k(fusion)e(and)h(\002ssion)f(research.)i(In)f(1994,)f(it)g + (gre)n(w)h(out)f(of)h(the)g(Object-Oriented)f(P)o(article)396 + 3897 y(Simulation)j(Class)h(Library)g(de)n(v)o(eloped)f(for)h + (particle-in-cell)g(simulations.)d(The)k(goals)e(of)h(the)396 + 4027 y(Frame)n(w)o(ork,)25 b(as)g(it)g(w)o(as)g(called)g(at)g(the)g + (time,)f(were)i(dri)n(v)o(en)e(by)h(the)g(Numerical)f(T)-8 + b(okamak')j(s)24 b(\223P)o(ar)n(-)396 4156 y(allel)h(Platform)f(P)o + (aradox\224:)496 4445 y Fl(The)19 b(a)n(v)o(erage)g(time)g(required)f + (to)i(implement)e(a)i(moderate-sized)e(application)g(on)i(a)f(parallel) + g(computer)496 4561 y(architecture)i(is)h(equi)n(v)n(alent)e(to)i(the)g + (half-life)g(of)g(the)g(latest)f(parallel)h(supercomputer)-5 + b(.)427 4741 y Fu(The)31 b(frame)n(w)o(ork')-5 b(s)29 + b(goal)i(of)f(being)h(able)f(to)g(quickly)g(write)h(ef)n(\002cient)f + (scienti\002c)h(programs)f(that)396 4870 y(could)k(be)h(run)g(on)f(a)h + (wide)g(v)n(ariety)f(of)h(platforms)e(remains)h(unchanged)h(today)-6 + b(.)33 b(De)n(v)o(elopment,)396 5000 y(mainly)h(at)h(the)g(Adv)n(anced) + f(Computing)g(Laboratory)h(at)g(Los)f(Alamos,)g(proceeded)i(rapidly)-6 + b(.)33 b(A)p Black 3756 5547 a Fp(xiii)p Black eop + %%Page: 14 14 + 14 13 bop Black 3577 -132 a Fp(Pr)l(eface)p Black 396 + 51 a Fu(matrix)23 b(solv)o(er)g(application)g(w)o(as)h(written)f(using) + g(the)h(frame)n(w)o(ork.)f(Support)g(for)h(hydrodynamics,)396 + 180 y(Monte)g(Carlo)i(simulations,)c(and)j(molecular)f(dynamics)g + (modeling)f(soon)h(follo)n(wed.)396 360 y(By)38 b(1998,)f(POOMA)g(w)o + (as)g(part)g(of)h(the)f(U.S.)g(Department)g(of)h(Ener)n(gy')-5 + b(s)36 b(Accelerated)j(Strate-)396 489 y(gic)c(Computing)e(Initiati)n + (v)o(e)g(\(ASCI\).)j(The)e(Comprehensi)n(v)o(e)g(T)-7 + b(est)34 b(Ban)h(T)m(reaty)g(forbid)f(nuclear)396 619 + y(weapons)f(testing)f(so)h(the)o(y)f(were)i(instead)e(simulated)g + (using)g(computers.)g(ASCI')-5 b(s)34 b(goal)f(w)o(as)g(to)396 + 748 y(radically)22 b(adv)n(ance)g(the)f(state)h(of)g(the)g(art)g(in)f + (high-performance)h(computing)e(and)i(numerical)f(sim-)396 + 878 y(ulations)31 b(so)g(the)h(nuclear)g(weapon)f(simulations)f(could)h + (use)h(100-tera\003op)g(parallel)f(computers.)396 1007 + y(The)36 b(linear)f(accelerator)h(code)g(linac)f(and)g(the)g(Monte)g + (Carlo)h(neutron)f(transport)f(code)i(MC++)396 1137 y(were)26 + b(among)e(the)g(codes)h(written.)396 1316 y(POOMA)d(2)f(in)l(v)n(olv)o + (ed)f(a)i(ne)n(w)f(conceptual)h(frame)n(w)o(ork)f(and)h(a)g(complete)f + (re)n(writing)f(of)i(the)f(source)396 1446 y(code)i(to)f(impro)o(v)o(e) + e(performance.)j(The)f Fq(Array)f Fu(class)h(w)o(as)g(introduced)g + (with)f(its)g(use)i(of)f(engines,)396 1575 y(separating)37 + b(container)g(use)g(from)g(container)g(storage.)g(A)h(ne)n(w)e + (asynchronous)h(scheduler)g(per)n(-)396 1705 y(mitted)c(out-of-order)h + (e)o(x)o(ecution)e(to)h(impro)o(v)o(e)f(cache)j(coherenc)o(y)-6 + b(.)33 b(Incorporating)g(the)h(Portable)396 1834 y(Expression)e(T)-7 + b(emplate)33 b(Engine)f(\(PETE\))i(permitted)e(f)o(aster)i(loop)e(e)o + (x)o(ecution.)f(Soon,)i(container)396 1964 y(vie)n(ws)24 + b(and)g Fq(ConstantFunction)d Fu(and)k Fq(IndexFunction)c(Engine)p + Fu(s)i(were)i(added.)396 2093 y(Release)i(2.1.0)e(included)f + Fq(Field)p Fu(s)h(with)f(their)i(spatial)e(e)o(xtent)h(and)h + Fq(DynamicArray)p Fu(s)c(with)396 2223 y(the)39 b(ability)f(to)h + (dynamically)e(change)j(domain)e(size.)h(Support)g(for)g(particles)g + (and)g(their)f(inter)n(-)396 2352 y(action)j(with)g Fq(Field)p + Fu(s)g(were)h(added.)f(The)h(POOMA)f(messaging)g(implementation)e(w)o + (as)j(re-)396 2482 y(vised)32 b(in)g(release)i(2.3.0.)d(Use)i(of)g(the) + f(Cheetah)h(Library)f(separated)h(POOMA)g(from)f(the)g(actual)396 + 2611 y(messaging)e(library)g(used,)h(and)g(support)f(for)h + (applications)e(running)h(on)h(clusters)f(of)h(computers)396 + 2741 y(w)o(as)42 b(added.)g(CodeSourcery)-6 b(,)43 b(LLC)f(\()p + Ft(http://www.codesourcery.co)q(m/)p Fu(\),)48 b(and)42 + b(Proxima-)396 2870 y(tion,)32 b(LLC)h(\()p Ft + (http://www.proximation.com/)q Fu(\),)38 b(took)32 b(o)o(v)o(er)g + (POOMA)g(de)n(v)o(elopment)f(from)396 3000 y(Los)k(Alamos)f(National)g + (Laboratory)-6 b(.)35 b(During)f(the)h(past)g(tw)o(o)g(years,)g(the)g + Fq(Field)f Fu(abstraction)396 3129 y(and)i(implementation)d(w)o(as)i + (impro)o(v)o(ed)f(to)h(increase)h(its)e(\003e)o(xibility)-6 + b(,)33 b(add)j(support)e(for)i(multiple)396 3259 y(v)n(alues)c(and)g + (materials)f(in)h(the)g(same)g(cell,)g(and)h(permit)e(lazy)h(e)n(v)n + (aluation.)f(Simultaneously)-6 b(,)29 b(the)396 3388 + y(e)o(x)o(ecution)24 b(speed)g(of)h(the)g(inner)f(loops)g(w)o(as)h + (greatly)g(increased.)-2 3891 y Fx(4.)47 b(Ac)m(kno)m(wledg)r(ements) + 396 4106 y Fu(This)25 b(book)h(w)o(ould)f(not)g(ha)n(v)o(e)h(been)g + (completed)f(without)g(the)g(help)h(and)g(encouragement)g(of)g(a)g(lot) + 396 4236 y(of)d(people)g(and)g(or)n(ganizations.)e(Los)i(Alamos)f + (National)g(Laboratory)h(funded)f(the)h(writing)f(of)h(this)396 + 4365 y(manual)30 b(and)f(the)h(de)n(v)o(elopment)e(of)i(the)g(POOMA)f + (T)-8 b(oolkit.)29 b(John)g(Re)o(ynders)h(concei)n(v)o(ed,)e(adv)n(o-) + 396 4495 y(cated,)k(and)f(headed)h(POOMA)f(de)n(v)o(elopment)e(in)i + (its)f(early)i(days,)f(and)g(Scott)g(Hane)o(y)g(continued)396 + 4624 y(the)g(leadership.)f(Susan)h(Atlas,)f(Subhankar)h(Banerjee,)h(T)m + (imothy)c(Cleland,)j(Julian)f(Cummings,)396 4754 y(James)38 + b(Crotinger)l(,)f(Da)n(vid)g(F)o(orslund,)g(Salman)g(Habib,)h(Scott)f + (Hane)o(y)-6 b(,)37 b(P)o(aul)g(Hink)o(er)l(,)h(W)l(illiam)396 + 4883 y(Humphre)o(y)-6 b(,)18 b(Ste)n(v)o(e)h(Karmesin,)f(Graham)i + (Mark,)f(Jef)n(fre)o(y)g(D.)h(Oldham,)e(Ji)h(Qiang,)g(John)f(Re)o + (ynders,)396 5013 y(Robert)25 b(Ryne,)f(Stephen)h(Smith,)e(M.)h + (Srikant,)g(Marydell)f(Tholb)n(urn,)g(and)h(T)m(imothy)e(W)l(illiams)h + (all)396 5142 y(helped)g(de)n(v)o(elop)f(POOMA.)g(Rod)i(Oldehoeft)e + (and)h(Jef)n(f)g(Bro)n(wn)g(of)g(Los)g(Alamos)f(National)g(Labo-)p + Black 3767 5547 a Fp(xiv)p Black eop + %%Page: 15 15 + 15 14 bop Black 3577 -132 a Fp(Pr)l(eface)p Black 396 + 51 a Fu(ratory)22 b(supported)f(CodeSourcery')-5 b(s)22 + b(and)g(Proximation')-5 b(s)20 b(w)o(ork,)h(including)f(the)i(de)n(v)o + (elopment)d(of)396 180 y(this)j(manual.)g(John)f(Hall,)h(Don)g + (Marshall,)g(Jean)h(Marshall,)e(and)i(the)f(rest)h(of)f(the)g(BLANCA)i + (team)396 310 y(at)32 b(Los)g(Alamos)f(w)o(ork)o(ed)h(closely)f(with)h + (the)f(de)n(v)o(elopers)g(and)h(pro)o(vided)f(v)n(aluable)g + (suggestions)396 439 y(for)25 b(impro)o(v)o(ements.)396 + 619 y(I)c(am)g(grateful)f(to)h(James)f(Crotinger)l(,)g(Mark)h + (Mitchell,)e(Amit)h(P)o(atel,)g(and)h(Stephen)g(Smith)f(who)g(an-)396 + 748 y(swered)25 b(my)f(man)o(y)g(questions)f(during)h(the)h(writing)e + (of)i(this)f(book.)g(Thanks)g(to)g(Deborah)h(Laf)n(ferty)396 + 878 y(of)33 b(Addison-W)-8 b(esle)o(y)30 b(Longman,)h(who)h(encouraged) + g(me)g(and)g(guided)g(me)g(throughout)e(writing)396 1007 + y(and)25 b(publishing)e(this)h(book.)2621 1236 y Fp(J)n(ef)n(fr)l(e)m + (y)h(D.)g(Oldham,)f(2002)g(Mar)l(c)o(h)p Black 3795 5547 + a(xv)p Black eop + %%Page: 16 16 + 16 15 bop Black Black -2 119 a Fy(Chapter)58 b(1.)f(Getting)h(Star)t + (ted)f(with)h(POOMA)396 416 y Fu(In)24 b(this)e(chapter)l(,)i(we)g + (describe)f(ho)n(w)g(to)g(obtain)f(POOMA,)i(prepare)g(it)f(for)g(use,)h + (and)f(then)g(compile)396 545 y(a)i(\223Hello,)f(POOMA\224)h(program.)f + (Impatient)g(readers)h(will)f(\002nd)h(the)f(\002rst)h(section)f + (helpful.)g(Those)396 675 y(desiring)36 b(more)g(details)f(will)g + (\002nd)i(this)e(section)h(pro)o(vides)f(a)h(useful)g(o)o(v)o(ervie)n + (w)f(of)h(the)g(chapter)396 804 y(although)24 b(it)g(can)h(be)g + (skipped.)-2 1257 y Fx(1.1.)47 b(Getting)h(Star)s(ted)h(f)m(or)e + (Impatient)h(User)m(s)396 1473 y Fu(This)34 b(section)g(is)h(designed)f + (for)h(impatient,)e(UNIX-literate)i(readers)g(who)f(wish)h(to)f(start)g + (using)396 1602 y(POOMA)23 b(as)h(quickly)e(as)h(possible.)f(W)-8 + b(e)24 b(describe)f(ho)n(w)g(to)g(obtain,)f(con\002gure,)i(compile,)e + (and)h(use)396 1732 y(the)i(toolkit)e(with)h(a)h(minimum)e(of)i(e)o + (xplanation.)396 2011 y(Do)n(wnload)p Black Black 596 + 2190 a(Do)n(wnload)19 b Ft(pooma-)t(2.3.0.tgz)26 b Fu(from)21 + b(the)g(POOMA)g(do)n(wnload)e(page)j(\()p Ft(http://pooma.)596 + 2319 y(codesourcery.com/pooma/downl)q(oad)p Fu(\))q(.)27 + b(Uncompress)21 b(and)h(e)o(xtract)g(the)f(source)h(code:)835 + 2578 y Fn(tar)59 b(xzvf)g(pooma-2.3.0.tgz)596 2838 y + Fu(Mo)o(v)o(e)23 b(into)h(the)g(directory)h(containing)f(the)g(source)h + (code:)835 3097 y Fn(cd)59 b Ft(pooma-)t(2.3.0)396 3455 + y Fu(Con\002gure)p Black Black 596 3635 a(T)-8 b(o)24 + b(create)i(\002les)f(necessary)g(for)g(compiling,)e(use)835 + 3894 y Fn(./configure)57 b(-)6 b(-arch)58 b Fm(architecture)f + Fn(-)6 b(-opt)596 4153 y Fu(where)37 b Fm(architecture)c + Fu(indicates)j(the)h(operating)f(system)f(and)i(compiler)-5 + b(.)35 b(Permitted)596 4282 y(choices)42 b(are)h(the)g(names)f(of)h + (\002les)g(in)f(the)g Ft(config/arch/)k Fu(subdirectory)c(omitting)e + (the)596 4412 y Ft(.conf)26 b Fu(suf)n(\002x)o(es.)396 + 4641 y(Compilation)d(of)i(the)g(Library)p Black Black + 596 4820 a(Create)36 b(the)f(POOMA)g(library)g(\002le)h(by)f(\002rst)g + (setting)f(the)i Fq(POOMASUITE)d Fu(en)l(vironment)596 + 4950 y(v)n(ariable)24 b(to)g(the)h(architecture')-5 b(s)24 + b(name)h(and)g(then)f(compiling)f(the)i(source)g(code:)p + Black 3781 5547 a Fp(16)p Black eop + %%Page: 17 17 + 17 16 bop Black 2250 -132 a Fp(Chapter)25 b(1.)g(Getting)e(Started)h + (with)h(POOMA)p Black 835 51 a Fn(export)58 b(POOMASUITE=)p + Fm(architecture)835 180 y Fn(make)396 539 y Fu(Compiling)23 + b(Programs)p Black Black 596 718 a(W)-8 b(e)40 b(illustrate)f + (compiling)f(the)i(\223Hello,)g(POOMA\224)g(program)g(a)n(v)n(ailable)g + (at)g Ft(examples/)596 848 y(Manual/Sequential/initialize)q(-)t(fi)q + (nali)q(ze.c)q(pp)p Fu(:)835 1107 y Fn(export)58 b + (POOMAHOME=/home/oldham/pooma/p)o(ooma)o(1)835 1236 y(g++)h + (-I${POOMAHOME}/src)c(\\)835 1366 y(-I${POOMAHOME}/lib/${POOMASU)o + (ITE})e(\\)835 1495 y(initialize-finalize.cpp)h(\\)835 + 1625 y(-o)59 b(initialize-finalize)c(\\)835 1755 y + (-L${POOMAHOME}/lib/${POOMASU)o(ITE})e(-lpooma-gcc)596 + 2014 y Fu(The)19 b Fq(POOMAHOME)e Fu(en)l(vironment)i(v)n(ariable)f + (indicates)h(the)h(location)e(of)i(the)f(toolkit)f(header)596 + 2143 y(\002les)24 b(and)h(the)g(library)-6 b(.)-2 2645 + y Fx(1.2.)47 b(Obtaining)h(POOMA)396 2861 y Fu(POOMA)27 + b(is)f(open-source)h(softw)o(are,)g(freely)h(a)n(v)n(ailable)e(via)h + (the)f(Internet)h(or)g(perhaps)g(packaged)396 2991 y(with)46 + b(this)f(book.)h(CodeSourcery)-6 b(,)47 b(LLC,)g(\()p + Ft(http://www.codesourcery.com)q(/)p Fu(\))53 b(currently)396 + 3120 y(hosts)25 b(the)h(POOMA)g(T)-8 b(oolkit)24 b(source)i(code.)g(Do) + n(wnload)e(the)i(POOMA)g(source)g(code)g Ft(pooma-)t(2.)396 + 3250 y(3.0.tgz)53 b Fu(from)d(the)g(POOMA)h(do)n(wnload)e(page)h(\()p + Ft(http://pooma.codesourcer)q(y.co)q(m/)396 3379 y(pooma/download)p + Fu(\))23 b(a)n(v)n(ailable)18 b(of)n(f)h(the)f(POOMA)h(home)f(page)h + (\()p Ft(http://www.codesourcery.)396 3509 y(com/pooma/pooma/)p + Fu(\).)48 b(The)c(\223tgz\224)g(indicates)f(this)f(is)i(a)f(compressed) + h(tar)f(archi)n(v)o(e)g(\002le.)h(F)o(or)396 3638 y(a)38 + b(UNIX)g(operating)e(system,)h(one)g(can)h(e)o(xtract)f(the)g(source)h + (\002les)g(using)e(the)h(command)g Fq(tar)396 3768 y(xzvf)65 + b(pooma-2.3.0.tgz)p Fu(.)-2 4270 y Fx(1.3.)47 b(Compiling)h(the)g + (POOMA)h(Librar)r(y)396 4486 y Fu(Most)34 b(of)g(the)h(POOMA)f(T)-8 + b(oolkit)33 b(source)i(code)f(is)h(a)n(v)n(ailable)e(in)h(header)i + (\002les)e(containing)g(tem-)396 4615 y(plate)24 b(class)f + (de\002nitions.)g(A)h(fe)n(w)f(\002les)h(are)h(compiled)d(and)i + (collected)g(together)f(into)g(the)g(POOMA)396 4745 y(library)-6 + b(.)396 4924 y(Before)44 b(the)e(POOMA)g(toolkit)f(may)g(be)i + (compiled,)e(it)h(must)f(be)h Fp(con\002gur)l(ed)s Fu(.)g + (Con\002guration)396 5053 y(creates)37 b(\002les)f(used)g(during)f + (compilation)f(that)h(are)i(speci\002c)f(to)g(the)g(particular)f + (operating)h(sys-)p Black 3780 5547 a Fp(17)p Black eop + %%Page: 18 18 + 18 17 bop Black 2250 -132 a Fp(Chapter)25 b(1.)g(Getting)e(Started)h + (with)h(POOMA)p Black 396 51 a Fu(tem,)k(compiler)l(,)f(and)h(a)n(v)n + (ailable)g(libraries)g(that)f(are)i(to)f(be)h(used.)e(The)i + (con\002guration)e(\002les)i(in)e(the)396 180 y Ft(config/arch/)f + Fu(directory)22 b(correspond)h(to)g(supported)f(operating)h(systems)e + (and)i(compilers.)f(F)o(or)396 310 y(e)o(xample,)h Ft(LINUXgcc.conf)28 + b Fu(supports)22 b(compiling)g(under)i(a)h(Linux)e(operating)g(system)g + (with)g(gcc)396 439 y(\(really)g(g++\).)g Ft(SGI64KCC.conf)j + Fu(supports)21 b(compiling)f(under)j(a)g(64-bit)e(SGI)i(Irix)g + (operating)f(sys-)396 569 y(tem)j(with)f(KCC.)396 748 + y(T)-8 b(o)25 b(con\002gure)g(the)g(source)g(code,)g(use)f(a)h(command) + f(lik)o(e)635 1057 y Fn(./configure)58 b(-)6 b(-arch)58 + b(LINUXgcc)g(-)6 b(-opt)58 b(-)6 b(-suite)58 b(LINUXgcc-opt)396 + 1316 y Fu(The)38 b(architecture)g(ar)n(gument)g(to)f(the)h + Fq(-)6 b(-arch)36 b Fu(option)g(is)h(the)h(name)g(of)g(the)f + (corresponding)396 1446 y(con\002guration)23 b(\002le,)g(omitting)e + (its)i Ft(.conf)h Fu(suf)n(\002x.)f(The)g Fq(-)6 b(-opt)21 + b Fu(indicates)i(the)g(POOMA)g(T)-8 b(oolkit)396 1575 + y(will)32 b(contain)g(optimized)g(source)g(code,)h(which)g(mak)o(es)f + (the)h(code)g(run)f(more)h(quickly)e(b)n(ut)i(may)396 + 1705 y(impede)23 b(deb)n(ugging.)f(Alternati)n(v)o(ely)-6 + b(,)20 b(use)k(the)f Fq(-)6 b(-debug)21 b Fu(option)h(which)h(supports) + f(deb)n(ugging.)396 1834 y(The)28 b Fp(suite)f(name)h + Fu(can)g(be)g(an)o(y)g(arbitrary)g(string.)f(W)-8 b(e)28 + b(chose)g Fq(LINUXgcc-opt)d Fu(to)i(remind)h(us)396 1964 + y(of)35 b(the)g(architecture)h(and)f(optimization)e(choice.)i + Ft(configure)j Fu(creates)d(subdirectories)g(named)396 + 2093 y(\223LINUXgcc-opt\224)30 b(for)g(use)f(when)h(compiling)d(the)j + (source)f(\002les.)h(Comments)e(at)i(the)f(be)o(ginning)396 + 2223 y(of)c Ft(lib/suiteName/PoomaConfigu)q(rat)q(ion.)q(h)31 + b Fu(record)25 b(the)g(con\002guration)f(ar)n(guments.)396 + 2402 y(T)-8 b(o)39 b(create)i(the)e(POOMA)g(library)-6 + b(,)39 b(the)g(toolkit)f(source)h(\002les)h(need)f(to)g(be)h(compiled.) + e(Specify)396 2532 y(the)25 b(desired)f(suite)h(by)f(setting)g(the)g + Fq(POOMASUITE)f Fu(en)l(vironment)g(v)n(ariable)h(to)h(the)f + (appropriate)396 2661 y(v)n(alue.)g(F)o(or)h(e)o(xample,)f(if)h(using)f + (the)g(bash)h(shell,)f(use)635 2970 y Fn(export)59 b(POOMASUITE=)p + Fm(suiteName)396 3229 y Fu(substituting)22 b(the)j(suite)f(name')-5 + b(s)24 b Fm(suiteName)p Fu(.)f(If)i(using)f(the)h(csh)f(shell,)g(use) + 635 3488 y Fn(setenv)59 b(POOMASUITE)e Fm(suiteName)396 + 3747 y Fu(In)28 b(the)g(pre)n(vious)e(paragraph,)j(the)e(suite)g(name)h + (is)g Fq(LINUXgcc-opt)d Fu(so)i(we)h(w)o(ould)f(issue)g(the)396 + 3877 y(statement)635 4136 y Fn(setenv)59 b(POOMASUITE)e(LINUXgcc-opt) + 396 4444 y Fu(Issuing)43 b(the)h Fq(make)f Fu(command)g(compiles)g(the) + h(POOMA)g(source)g(code)g(\002les)g(to)g(create)g(the)396 + 4574 y(POOMA)26 b(library)-6 b(.)25 b(The)h(POOMA)g(mak)o(e\002les)f + (assume)h(the)f(GNU\231)h(Mak)o(e)g(is)f(a)n(v)n(ailable)g(so)h(sub-) + 396 4703 y(stitute)19 b(the)h(proper)g(command)f(to)g(run)h(GNU\231)g + (Mak)o(e)g(if)f(necessary)-6 b(.)20 b(As)g(each)h(source)f(\002le)g(is) + f(com-)396 4833 y(piled,)j(a)h(line)f(is)g(printed.)f(If)i(the)g + (compilation)d(succeeds,)j(the)f(POOMA)g(library)g(can)h(be)g(found)f + (in,)396 4962 y(e.g.,)f Ft(lib/LINUXgcc-)t(opt/libpooma-)5 + b(gcc.)q(a)p Fu(.)27 b(If)21 b(it)f(f)o(ails,)g(the)h(mak)o(e\002les)f + (will)g(print)g(a)h(line)g(in-)p Black 3784 5547 a Fp(18)p + Black eop + %%Page: 19 19 + 19 18 bop Black 2250 -132 a Fp(Chapter)25 b(1.)g(Getting)e(Started)h + (with)h(POOMA)p Black 396 51 a Fu(dicating)20 b(which)h(\002le)g(f)o + (ailed)g(to)f(compile.)g(Reading)h(the)g(corresponding)f + Ft(.info)i Fu(\002le)f(may)g(indicate)396 180 y(what)k(f)o(ailed.)396 + 360 y(The)30 b(same)f(POOMA)h(source)f(code)h(can)g(support)e(multiple) + g(suites)h(as)g(long)g(as)h(dif)n(ferent)f(names)396 + 489 y(are)k(used.)e(F)o(or)g(e)o(xample,)g(we)g(could)g(ha)n(v)o(e)h + Fq(LINUXgcc-opt)c Fu(and)k Fq(LINUXgcc-debug)396 619 + y Fu(suites.)40 b(Both)h(of)g(these)f(might)g(specify)g(use)h(of)g(the) + f(Linux)g(operating)g(system)g(and)h(gcc,)g(b)n(ut)396 + 748 y(one)29 b(could)f(ha)n(v)o(e)h(optimized)e(code)i(corresponding)f + (to)g(the)h(con\002guration)f(option)f Fq(-)6 b(-opt)27 + b Fu(and)396 878 y(the)38 b(other)g(could)f(ha)n(v)o(e)g(deb)n(uggable) + g(code)h(corresponding)f(to)h(the)f(con\002guration)h(option)e + Fq(-)6 b(-)396 1007 y(debug)p Fu(.)25 b(When)i(compiling)d(both)i(the)g + (library)g(and)h(user)f(code,)g(the)h Fq(POOMASUITE)d + Fu(en)l(viron-)396 1137 y(ment)g(v)n(ariable)h(indicates)f(which)g + (suite)g(to)h(use.)-2 1531 y Fk(1.3.1.)39 b(D)-6 b(ANGER:)37 + b(Con\002guration)f(Options)396 1732 y Fu(\(Are)d(you)e(sure)h(you)g + (should)e(be)j(reading)e(this)g(section?)h(The)g(D)l(ANGER)g(in)f(the)h + (title)f(is)h(meant)396 1861 y(to)i(w)o(arn)h(you)f(about)g(material)g + (that)g(ought)g(to)g(be)g(skipped)g(on)g(the)h(\002rst)f(reading.)g + (And)h(maybe)396 1991 y(also)28 b(on)f(the)h(second)g(reading.)g(The)g + (reader)n(-be)n(w)o(are)h(paragraphs)f(sometimes)e(refer)j(to)f + (concepts)396 2120 y(that)c(aren')n(t)h(e)o(xplained)e(until)g(later)i + (chapters.)f(\(Thanks)g(to)g(Donald)g(E.)g(Knuth)f(for)i(the)f(concept) + g(of)396 2250 y(D)l(ANGER)h(sections)f(and)h(for)g(the)g(preceding)f + (te)o(xt.\)\))396 2429 y(The)30 b(con\002guration)e(script)h(supports)f + (man)o(y)h(more)g(command-line)f(options)g(than)h(the)g(tw)o(o)g(used) + 396 2559 y(abo)o(v)o(e,)h(b)n(ut)h(fe)n(w)g(POOMA)h(users)f(need)g(use) + g(them)g(e)o(xcept)g(those)g(using)f(distrib)n(uted)g(POOMA,)396 + 2688 y(which)h(are)i(described)e(belo)n(w)-6 b(.)30 b + Fq(./configure)63 b(-h)31 b Fu(yields)g(a)h(complete)f(list.)f(W)-8 + b(e)32 b(also)f(de-)396 2818 y(scribe)25 b(them)f(here.)396 + 3097 y Fr(T)-9 b(able)26 b(1-1.)e(Con\002guration)i(Options)396 + 3333 y Fv(option)1439 b(description)396 3475 y Fu(Architecture)25 + b(and)g(Installation)e(Choices)p 396 3503 3487 4 v 396 + 3503 V 396 3620 a Fq(-)6 b(-arch)64 b Fj(architecture)486 + b Fu(specify)24 b(the)h(desired)g(operating)f(system)f(and)2140 + 3749 y(compiler)-5 b(.)23 b Fm(architecture)f Fu(should)2140 + 3879 y(correspond)i(to)h(a)g(\002le)g(in)f Ft(config/arch/)2140 + 4008 y Fu(omitting)e(the)j Ft(.conf)h Fu(suf)n(\002x.)396 + 4150 y Fq(-)6 b(-suite)64 b Fj(suite)882 b Fu(specify)24 + b(a)h(name)g(for)g(the)g(this)f(particular)2140 4280 + y(con\002guration.)g(The)h(en)l(vironment)e(v)n(ariable)2140 + 4409 y Fq(POOMASUITE)p Fu(')-5 b(s)22 b(v)n(alue)i(should)f(equal)2140 + 4539 y Fm(suite)g Fu(when)g(compiling)g(the)g(library)-6 + b(.)23 b Fm(suite)2140 4668 y Fu(can)i(be)g(an)o(y)f(string)g(that)g + (can)i(serv)o(e)e(as)h(a)2140 4798 y(\002lename.)g(If)g(this)f(option)f + (is)i(omitted,)e(the)2140 4927 y Fq(-)6 b(-arch)23 b + Fu(architecture)i(is)f(used.)p Black 3784 5547 a Fp(19)p + Black eop + %%Page: 20 20 + 20 19 bop Black 2250 -132 a Fp(Chapter)25 b(1.)g(Getting)e(Started)h + (with)h(POOMA)p Black 396 85 a Fv(option)1439 b(description)396 + 226 y Fq(-)6 b(-prefix)64 b Fj(directory)552 b Fu(indicates)24 + b(the)g(directory)h(where)g(\002les)g(are)2140 356 y(installed.)e + Fq(make)65 b(install)23 b Fu(should)h(be)2140 485 y(in)l(v)n(ok)o(ed)g + (after)h(compiling)e(the)i(library)-6 b(.)396 627 y(Deb)n(ugging)24 + b(and)h(Optimization)d(Choices)p 396 655 3487 4 v 396 + 655 V 396 772 a Fq(-)6 b(-opt)1408 b Fu(causes)25 b(an)g(optimized)e + (library)i(to)f(be)h(b)n(uilt.)2140 902 y(Optimized)e(code)i(typically) + f(runs)g(f)o(aster)h(than)2140 1031 y(unoptimized)e(code,)i(b)n(ut)f + (deb)n(ugging)f(can)j(be)2140 1161 y(inhibited.)396 1302 + y Fq(-)6 b(-debug)1276 b Fu(causes)25 b(an)g(deb)n(uggable)e(library)i + (to)f(be)h(b)n(uilt.)2140 1432 y(That)f(is,)h(a)g(deb)n(ugger)f(will)g + (be)h(able)g(to)f(tra)n(v)o(erse)2140 1561 y(library)g(code.)396 + 1703 y(Compiler)h(Choices)p 396 1731 V 396 1731 V 396 + 1848 a Fq(-)6 b(-cpp)64 b Fj(compiler)816 b Fu(speci\002es)25 + b(the)f(C++)i(compiler)e(to)h(use.)f(The)2140 1977 y(def)o(ault)g(v)n + (alue)g(is)h(speci\002ed)g(by)f(the)2140 2107 y(architecture)h + (con\002guration)f(\002le.)396 2249 y Fq(-)6 b(-c)65 + b Fj(compiler)947 b Fu(speci\002es)25 b(the)f(C)i(compiler)e(to)g(use)h + (when)2140 2378 y(compiling)e(C)i(e)o(x)o(ecutables.)f(Such)h(e)o(x)o + (ecutables)2140 2508 y(usually)e(are)j(e)o(xample)e(programs.)g(The)h + (def)o(ault)2140 2637 y(v)n(alue)f(is)g(speci\002ed)h(by)g(the)g + (architecture)2140 2767 y(con\002guration)f(\002le.)396 + 2908 y Fq(-)6 b(-f77)64 b Fj(compiler)816 b Fu(speci\002es)25 + b(the)f(F)o(ortran77)h(compiler)f(to)g(use.)2140 3038 + y(The)h(def)o(ault)f(v)n(alue)g(is)h(speci\002ed)g(by)f(the)2140 + 3167 y(architecture)h(con\002guration)f(\002le.)396 3309 + y Fq(-)6 b(-ar)65 b Fj(archiver)881 b Fu(speci\002es)25 + b(the)f(library)h(archi)n(v)o(er)f(to)h(use)f(when)2140 + 3439 y(creating)g(a)h(static)g(library)-6 b(.)23 b(The)i(def)o(ault)g + (v)n(alue)f(is)2140 3568 y(speci\002ed)h(by)f(the)h(architecture)g + (con\002guration)2140 3698 y(\002le.)396 3839 y Fq(-)6 + b(-link)64 b Fj(linker)882 b Fu(speci\002es)25 b(the)f(link)o(er)h(to)f + (use)h(when)g(creating)2140 3969 y(POOMA)f(e)o(x)o(ecutables.)g(The)h + (def)o(ault)f(v)n(alue,)2140 4098 y(usually)f(the)i(same)g(as)g(the)f + (C++)i(compiler)l(,)e(is)2140 4228 y(speci\002ed)h(by)f(the)h + (architecture)g(con\002guration)2140 4357 y(\002le.)396 + 4499 y(Compiler)g(Options)p 396 4527 V Black 3784 5547 + a Fp(20)p Black eop + %%Page: 21 21 + 21 20 bop Black 2250 -132 a Fp(Chapter)25 b(1.)g(Getting)e(Started)h + (with)h(POOMA)p Black 396 85 a Fv(option)1439 b(description)p + 396 110 3487 4 v 396 226 a Fq(-)6 b(-static)1210 b Fu(creates)25 + b(a)g(static)g(library)f(that)g(will)g(be)h(directly)2140 + 356 y(link)o(ed)f(into)g(e)o(x)o(ecutables,)f(rather)i(than)g(loaded) + 2140 485 y(dynamically)-6 b(.)23 b(Compare)i(with)f(the)2140 + 615 y Fq(-)6 b(-shared)22 b Fu(option.)i(This)g(option)f(is)i(a)2140 + 744 y(def)o(ault.)396 886 y Fq(-)6 b(-shared)1210 b Fu(creates)25 + b(a)g(library)g(that)f(will)g(be)h(dynamically)2140 1016 + y(loaded)f(when)h(a)g(POOMA)g(e)o(x)o(ecutable)f(starts.)2140 + 1145 y(It)h(is)f(the)h(e)o(x)o(ecutable)e(user')-5 b(s)25 + b(responsibility)d(to)2140 1275 y(con\002gure)j(the)g(operating)f + (system)f(so)i(the)2140 1404 y(library)f(will)g(be)h(found,)f(e.g.,)h + (by)g(setting)e(the)2140 1534 y Fq(LD_LIBRARY_PATH)e + Fu(en)l(vironment)2140 1663 y(v)n(ariable.)396 1805 y + Fq(-)6 b(-v)1540 b Fu(enables)24 b(v)o(erbose)h(output)e(from)i(the)f + (compiler)2140 1934 y(and)g(link)o(er)-5 b(.)396 2076 + y Fq(-)6 b(-q)1540 b Fu(disables)24 b(v)o(erbose)g(output)f(from)i(the) + g(compiler)2140 2205 y(and)f(link)o(er)-5 b(.)396 2347 + y Fq(-)6 b(-strict)1210 b Fu(enables)24 b(ANSI)i(C++)f(conformance)g + (checking)2140 2477 y(by)f(the)h(compiler)-5 b(.)396 + 2618 y Fq(-)6 b(-inc)64 b Fj(directory)750 b Fu(causes)25 + b Fq(-I)p Fj(directory)31 b Fu(options)23 b(to)i(be)2140 + 2748 y(passed)f(to)h(the)f(compiler)-5 b(.)24 b(These)h(indicate)2140 + 2877 y(directories)f(where)h(header)h(\002les)f(are)g(located.)2140 + 3007 y(This)f(option)f(may)i(be)g(speci\002ed)g(repeatedly)-6 + b(.)396 3149 y Fq(-)6 b(-def)64 b Fj(definition)684 b + Fu(causes)25 b Fq(-D)p Fj(definition)d Fu(options)h(to)h(be)2140 + 3278 y(passed)g(to)h(the)f(compiler)-5 b(.)24 b(These)h(de\002ne)2140 + 3408 y(preprocessor)g(symbols.)e(This)h(option)f(may)i(be)2140 + 3537 y(speci\002ed)g(repeatedly)-6 b(.)396 3679 y Fq(-)6 + b(-cpparg)64 b Fj(arguments)552 b Fu(speci\002es)25 b(C++)g(compiler)g + (options.)e(This)2140 3808 y(option)g(may)i(be)g(speci\002ed)g + (repeatedly)-6 b(.)396 3950 y Fq(-)6 b(-carg)64 b Fj(arguments)684 + b Fu(speci\002es)25 b(C)g(compiler)f(options.)f(This)h(option)2140 + 4079 y(may)g(be)h(speci\002ed)g(repeatedly)-6 b(.)396 + 4221 y Fq(-)6 b(-f77arg)64 b Fj(arguments)552 b Fu(speci\002es)25 + b(F)o(ortran77)f(compiler)g(options.)f(This)2140 4351 + y(option)g(may)i(be)g(speci\002ed)g(repeatedly)-6 b(.)396 + 4492 y Fq(-)6 b(-ararg)64 b Fj(arguments)618 b Fu(speci\002es)25 + b(archi)n(v)o(er)f(options.)f(This)h(option)g(may)2140 + 4622 y(be)h(speci\002ed)g(repeatedly)-6 b(.)396 4763 + y Fq(-)6 b(-linkarg)63 b Fj(arguments)487 b Fu(speci\002es)25 + b(link)o(er)f(options.)f(This)h(option)g(may)g(be)2140 + 4893 y(speci\002ed)h(repeatedly)-6 b(.)p Black 3784 5547 + a Fp(21)p Black eop + %%Page: 22 22 + 22 21 bop Black 2250 -132 a Fp(Chapter)25 b(1.)g(Getting)e(Started)h + (with)h(POOMA)p Black 396 85 a Fv(option)1439 b(description)396 + 226 y Fq(-)6 b(-oneper)1210 b Fu(enables)24 b(the)h(one-per)n + (-template-instantiation)2140 356 y(compiler)f(option.)f(The)i(KCC)h + (compiler)2140 485 y(requires)f(this)e(option)h(to)g(a)n(v)n(oid)h + (problems)e(from)2140 615 y(instantiating)f(the)j(same)g(template)f + (class)2140 744 y(repeatedly)-6 b(.)396 886 y Fq(-)6 + b(-noonper)1144 b Fu(disables)24 b(the)g(one-per)n + (-template-instantiation)2140 1016 y(compiler)g(option.)f(See)j + Fq(-)6 b(-oneper)2140 1145 y Fu(description.)396 1287 + y(Code)25 b(Checking)p 396 1315 3487 4 v 396 1315 V 396 + 1432 a Fq(-)6 b(-bounds)1210 b Fu(turns)24 b(on)g(bound)g(checking)h + (for)g(inde)o(xing)2140 1561 y(operations.)f(That)g(is,)g(inde)o(x)o + (es)g(into)g(a)h(C)2140 1691 y(\()p Fq(a\(3,4\))p Fu(\))f(are)h(check)o + (ed)g(to)g(be)g(in)f(the)2140 1820 y(domain.)f(This)h(option)g(is)g + (not)h(the)f(def)o(ault)2140 1950 y(because)h(it)f(slo)n(ws)g(each)h + (access)g(b)n(ut)g(is)f(useful)2140 2079 y(when)g(checking)h(program)f + (correctness.)396 2221 y Fq(-)6 b(-insure)1210 b Fu(enables)24 + b(Insure++)i(code)f(checking.)396 2363 y Fq(-)6 b(-purify)1210 + b Fu(enables)24 b(Purify)h(code)g(checking.)396 2504 + y(Language)g(Choices)p 396 2533 V 396 2533 V 396 2649 + a Fq(-)6 b(-ex)1474 b Fu(enables)24 b(use)h(of)g(e)o(xceptions)f(if)g + (a)n(v)n(ailable.)g(Only)2140 2779 y(one)g(of)h(this)f(xor)h(the)g + Fq(-)6 b(-noex)23 b Fu(option)g(should)2140 2908 y(be)i(speci\002ed.) + 396 3050 y Fq(-)6 b(-noex)1342 b Fu(disables)24 b(use)g(of)h(e)o + (xceptions.)f(Only)g(one)h(of)f(this)2140 3179 y(xor)g(the)h + Fq(-)6 b(-ex)24 b Fu(option)f(should)h(be)h(speci\002ed.)396 + 3321 y Fq(-)6 b(-arch-specific-functions)88 b Fu(enables)24 + b(the)h(use)g(of)g(architecture-speci\002c)2140 3451 + y(initialization)d(functions.)396 3592 y(Library)j(Options)p + 396 3621 V 396 3621 V 396 3737 a Fq(-)6 b(-preinst)1144 + b Fu(causes)25 b(preinstantiated)e(v)o(ersions)h(of)h(se)n(v)o(eral) + 2140 3867 y(templated)f(classes)g(to)h(be)f(included)h(in)f(the)2140 + 3996 y(library)-6 b(.)24 b(This)g(may)g(reduce)i(the)e(time)g(to)2140 + 4126 y(compile)g(e)o(x)o(ecutables.)396 4268 y(D)l(ANGER:)h(Option)f + (for)h(Distrib)n(uted)396 4397 y(Computation)p 396 4425 + V 396 4425 V 396 4542 a Fq(-)6 b(-messaging)1012 b Fu(enables)24 + b(creation)h(of)g(distrib)n(uted)e(POOMA)2140 4672 y(e)o(x)o(ecutables) + g(by)i(enabling)f(use)h(of)g(the)f(Cheetah)2140 4801 + y(communications)e(package.)396 4943 y(Con\002gure)k(Options)p + 396 4971 V Black 3784 5547 a Fp(22)p Black eop + %%Page: 23 23 + 23 22 bop Black 2250 -132 a Fp(Chapter)25 b(1.)g(Getting)e(Started)h + (with)h(POOMA)p Black 396 85 a Fv(option)1439 b(description)p + 396 110 3487 4 v 396 226 a Fq(-v)1612 b Fu(turns)24 b(on)g(v)o(erbose)h + (output)e(during)2140 356 y(con\002guration,)h(sho)n(wing)f(which)h + (options)g(are)2140 485 y(chosen)g(and)h(which)f(are)i(not.)396 + 627 y Fq(-i)1612 b Fu(pre)n(v)o(ents)23 b(o)o(v)o(erwriting)g(e)o + (xisting)g(\002les)i(during)2140 757 y(con\002guration)f(without)f + (\002rst)i(querying)f(the)2140 886 y(user)-5 b(.)396 + 1028 y Fq(-f)1612 b Fu(forces)25 b(o)o(v)o(erwriting)e(e)o(xisting)g + (\002les)i(during)2140 1157 y(con\002guration)f(without)f(querying)h + (the)h(user)-5 b(.)2140 1287 y(This)24 b(is)g(the)h(def)o(ault.)396 + 1428 y Fq(-h)1612 b Fu(prints)24 b(the)g(list)g(of)h(con\002guration)f + (options.)396 1570 y Fq(-?)1612 b Fu(prints)24 b(the)g(list)g(of)h + (con\002guration)f(options.)f(This)2140 1700 y(is)h(the)h(same)f(as)h + Fq(-h)p Fu(.)-2 2351 y Fx(1.4.)47 b(Writing)h(and)f(Compiling)i(POOMA)f + (Pr)m(ograms)396 2567 y Fu(In)27 b(this)f(section,)g(we)h(describe)g + (ho)n(w)e(to)i(write)f(and)h(compile)f(POOMA)g(programs.)g(W)-8 + b(e)28 b(illustrate)396 2696 y(this)37 b(with)f(a)i(\223Hello,)f + (POOMA\224)h(program)f(that)g(initializes)f(and)h(de-initializes)f(the) + h(POOMA)396 2826 y(library)-6 b(.)396 3005 y(The)61 b(simplest)e(POOMA) + h(program)h(is)f(a)n(v)n(ailable)g(at)g Ft(examples/Manual/Sequentia)q + (l/)396 3135 y(initialize-)t(finalize.cpp)p Fu(.)f(It)53 + b(is)g(annotated)f(in)g(Example)h(1-1.)f(Before)j(its)d(use,)g(the)396 + 3264 y(POOMA)32 b(T)-8 b(oolkit)30 b(must)h(be)h(initialized)e(by)i(a)g + (call)g(to)f Fq(initialize)p Fu(.)e(This)i(usually)g(occurs)396 + 3394 y(in)j(the)g Fq(main)f Fu(function.)g(After)h(its)g(use,)g(the)g + (POOMA)f(T)-8 b(oolkit)33 b(should)g(be)h(shut)f(do)n(wn)g(using)396 + 3523 y(a)i(call)g(to)f Fq(finalize)p Fu(.)e(This)i(also)g(usually)f + (occurs)i(in)f(the)g Fq(main)g Fu(function.)g(Both)g(of)g(these)396 + 3653 y(functions)24 b(are)i(declared)g(in)f Ft(Pooma/Pooma.h)p + Fu(.)j(This)d(header)h(\002le)f(\(or)h(another)f(POOMA)g(header)396 + 3782 y(\002le)g(including)f(it\))g(occurs)h(in)g(e)n(v)o(ery)f(POOMA)g + (program.)396 4061 y Fr(Example)i(1-1.)e(A)h(\223Hello,)f(POOMA\224)f + (Pr)n(ogram)635 4420 y Fn(#include)58 b("Pooma/Pooma.h")117 + b Fi(\(1\))635 4550 y Fn(#include)58 b()635 + 4809 y(int)h(main\(int)f(argc,)h(char)g(*argv[]\))635 + 4938 y({)755 5068 y(//)g(Prepare)f(the)i(Pooma)e(library)g(for)i + (execution.)p Black 3784 5547 a Fp(23)p Black eop + %%Page: 24 24 + 24 23 bop Black 2250 -132 a Fp(Chapter)25 b(1.)g(Getting)e(Started)h + (with)h(POOMA)p Black 755 51 a Fn(Pooma::initialize\(argc,argv\);)113 + b Fi(\(2\))755 310 y Fn(std::cout)58 b(\253)h("Hello,)f(Pooma.")h(\253) + g(std::endl;)755 569 y(//)g(Tell)g(the)g(Pooma)g(library)f(execution)g + (has)h(finished.)755 698 y(Pooma::finalize\(\);)115 b + Fi(\(3\))755 828 y Fn(return)58 b(0;)635 957 y(})p Black + 396 1266 a Fr(\(1\))p Black 34 w Fu(This)38 b(POOMA)h(header)h(\002le)f + (must)f(be)i(included)e(directly)h(or)g(indirectly)f(in)h(all)f(POOMA) + 546 1396 y(programs.)p Black 396 1575 a Fr(\(2\))p Black + 34 w Fu(Ev)o(ery)25 b(POOMA)g(program)g(must)g(initialize)f(the)h + (POOMA)h(library)f(by)g(in)l(v)n(oking)f(the)h Fq(ini-)546 + 1705 y(tialize)e Fu(function.)p Black 396 1884 a Fr(\(3\))p + Black 34 w Fu(The)35 b(POOMA)g(T)-8 b(oolkit)34 b(is)h(shut)g(do)n(wn)f + (by)h(in)l(v)n(oking)f(the)h Fq(finalize)e Fu(function,)i(which)546 + 2014 y(must)23 b(be)i(called)g(after)h(all)e(other)h(POOMA)f + (functions.)396 2422 y(Compiling)i(this)g(program)g(requires)h + (including)f(POOMA)h(header)g(\002les)g(and)g(library)-6 + b(.)26 b(Let)h(us)g(as-)396 2552 y(sume)19 b(that)h(the)f(en)l + (vironment)g(v)n(ariable)g Fq(POOMAHOME)e Fu(describes)j(the)f + (location)g(of)h(the)f(POOMA)396 2681 y(source)25 b(code.)g(F)o(or)g(e) + o(xample,)635 3040 y Fn(export)59 b(POOMAHOME=/home/user/pooma)396 + 3299 y Fu(W)-8 b(e)25 b(illustrate)f(ho)n(w)g(to)g(compile)g(the)h + (program)f(using)g(the)h(g++)g(compiler:)635 3558 y Fn(g++)59 + b(-I${POOMAHOME}/src)d(-I${POOMAHOME}/lib/LINUXgcc)e(\\)635 + 3687 y(initialize-finalize.cpp)h(-o)k(initialize-finalize)d(\\)635 + 3817 y(-L${POOMAHOME}/lib/${POOMASUITE)o(})e(-lpooma-gcc)396 + 4076 y Fu(W)-8 b(e)25 b(e)o(xplain)f(the)h(\002)n(v)o(e)f(command-line) + g(options:)396 4355 y(-I${POOMAHOME}/src)p Black Black + 596 4534 a(is)36 b(the)i(root)e(of)i(a)f(directory)h(tree)f(containing) + f(all)h(POOMA)g(template)g(header)h(\002les.)f(F)o(or)596 + 4664 y(e)o(xample,)d(the)h(full)g(path)g(name)h(of)f + Ft(Pooma/Pooma.h)k Fu(is)c Ft(${POOMAHOME}/src/Pooma/)596 + 4793 y(Pooma.h)p Fu(.)p Black 3784 5547 a Fp(24)p Black + eop + %%Page: 25 25 + 25 24 bop Black 2250 -132 a Fp(Chapter)25 b(1.)g(Getting)e(Started)h + (with)h(POOMA)p Black 396 51 a Fu(-I${POOMAHOME}/lib/${POOMASUITE})p + Black Black 596 230 a(indicates)f(the)g(directory)h(that)f(contains)g + (con\002guration-speci\002c)h(header)g(\002les.)396 459 + y(initialize-\002nalize.cpp)p Black Black 596 639 a(is)18 + b(the)h(source)g(code)g(to)g(compile.)f(It)h(must)e(ha)n(v)o(e)i(a)g + Fq(main)f Fu(function)h(with)f(calls)g(to)h(POOMA')-5 + b(s)596 768 y Fq(initialize)22 b Fu(and)j Fq(finalize)p + Fu(.)396 997 y(-o)g(initialize-\002nalize)p Black Black + 596 1177 a(determines)f(the)g(name)h(of)g(the)f(resulting)g(e)o(x)o + (ecutable)g(program.)396 1406 y(-L${POOMAHOME}/lib/${POOMASUITE})p + Black Black 596 1585 a(is)g(the)h(directory)f(containing)g(the)g(POOMA) + h(library)f(\002le)i(to)e(use.)396 1814 y(-lpooma-gcc)p + Black Black 596 1994 a(indicates)37 b Ft(libpooma-)t(gcc.a)42 + b Fu(is)37 b(the)h(name)g(of)g(the)g(POOMA)f(library)h(in)g(the)g + (directory)596 2123 y(speci\002ed)25 b(by)f(the)h Fq(-L)f + Fu(option.)396 2302 y(Running)g(the)h(resulting)f(e)o(x)o(ecutable)g + (prints)f(\223Hello,)i(Pooma.\224:)396 2532 y Fn($)60 + b(./initialize-finalize)396 2661 y(Hello,)f(Pooma.)396 + 2791 y($)-2 3413 y Fk(1.4.1.)39 b(D)-6 b(ANGER:)37 b + Fh(initialize)g Fk(and)i Fh(finalize)396 3615 y Fu(In)30 + b(this)e(section,)h(we)h(present)f(detailed)g(e)o(xplanations)f(of)i + Fq(initialize)d Fu(and)i Fq(finalize)p Fu(.)396 3744 + y(V)-11 b(ery)28 b(fe)n(w)g(POOMA)g(users)g(e)n(v)o(er)f(need)i(to)e + (use)h(an)o(y)f(form)h(dif)n(ferent)g(from)g(that)f(presented)h(in)f + (the)396 3874 y(\223Hello,)e(POOMA\224)g(program.)396 + 4078 y Fv(Pr)n(ototypes)635 4437 y Fn(#include)58 b("Pooma/Pooma.h")635 + 4566 y(//)i(or)f("Pooma/Arrays.h")d(or)k("Pooma/Fields.h")c(or)j(...)p + Black 3784 5547 a Fp(25)p Black eop + %%Page: 26 26 + 26 25 bop Black 2250 -132 a Fp(Chapter)25 b(1.)g(Getting)e(Started)h + (with)h(POOMA)p Black 396 51 a Fq(bool)65 b Fo(Pooma::initialize)p + Fq(\()c Fj(int)k(&argc,)g(char)f(**)i(&argv,)e(bool)396 + 193 y(initRTS)g(=)i(true,)e(bool)h(getCLArgsArch)e(=)i(true,)g(bool)f + (initArch)396 336 y(=)i(true)f Fq(\);)396 478 y(bool)g + Fo(Pooma::initialize)p Fq(\()c Fj(Pooma::Options)i(&opts,)h(bool)h + (ini-)396 621 y(tRTS)g(=)h(true,)e(bool)h(initArch)f(=)h(true)g + Fq(\);)396 763 y(bool)g Fo(Pooma::finalize)p Fq(\(void\);)396 + 906 y(bool)g Fo(Pooma::finalize)p Fq(\()d Fj(bool)j(quitRTS,)e(bool)i + (quitArch)f Fq(\);)396 1339 y Fv(Explanation)396 1518 + y Fu(Before)49 b(its)e(use,)g(the)h(POOMA)f(T)-8 b(oolkit)46 + b(must)g(be)i(initialized)e(by)i(a)f(call)h(to)f Fq(initial-)396 + 1648 y(ize)p Fu(.)c(This)h(usually)f(occurs)h(in)f(the)h + Fq(main)f Fu(function.)g(The)h(\002rst)g(form)g(remo)o(v)o(es)e(and)i + (pro-)396 1777 y(cesses)31 b(an)o(y)e(POOMA-speci\002c)i(ar)n(guments)f + (from)g(the)g(command-line)f(ar)n(guments)h Fq(argv)f + Fu(and)396 1907 y Fq(argc)p Fu(.)41 b(The)h(third,)f(fourth,)g(and)g + (\002fth)h(ar)n(guments)f(all)h(ha)n(v)o(e)f(a)h(def)o(ault)f(v)n(alue) + g(of)h Fq(true)p Fu(.)f(If)396 2036 y Fm(initRTS)50 b + Fu(is)c Fq(true)p Fu(,)g(the)g(run-time)f(system)h(is)g(initialized.)e + (E.g.,)i(the)h(conte)o(xts)e(are)i(pre-)396 2166 y(pared)23 + b(for)g(use.)f(If)h Fm(getCLArgsArch)c Fu(is)j Fq(true)p + Fu(,)g(architecture-speci\002c)h(command-line)e(ar)n(gu-)396 + 2295 y(ments)i(are)h(remo)o(v)o(ed)d(from)i Fq(argv)g + Fu(and)g Fq(argc)p Fu(.)f(Architecture-speci\002c)i(initialization)d + (occurs)i(if)396 2425 y Fm(getCLArgsArch)h Fu(is)h Fq(true)p + Fu(.)g(An)h(architecture)h(is)e(speci\002ed)i(by)f(a)g(hardw)o(are)h + (interf)o(ace,)f(e.g.,)396 2555 y(processor)k(type,)f(b)n(ut)g + (frequently)g(is)g(also)h(associated)f(with)g(an)g(operating)g(system)g + (or)h(compiler)-5 b(.)396 2684 y(F)o(or)32 b(e)o(xample,)f(Metro)n + (werks)g(for)h(the)g(Macintosh)f(has)h(an)g(architecture-speci\002c)h + (initialization.)396 2814 y(The)25 b(function)f(al)o(w)o(ays)h(returns) + f Fq(true)p Fu(.)396 2993 y Fq(initialize)p Fu(')-5 b(s)48 + b(alternati)n(v)o(e)h(form)h(assumes)g(the)g(POOMA-speci\002c)h(and)g + (architecture-)396 3122 y(speci\002c)32 b(command-line)f(ar)n(guments)g + (ha)n(v)o(e)g(already)i(been)f(remo)o(v)o(ed)e(from)i + Fq(argv)e Fu(and)i Fq(argc)396 3252 y Fu(and)24 b(stored)g(in)g + Fm(opts)p Fu(.)f(Its)h(other)g(tw)o(o)g(parameters)h(ha)n(v)o(e)f(the)g + (same)g(meaning,)f(and)h(the)g(tw)o(o)g(func-)396 3381 + y(tions')g(semantics)g(are)h(otherwise)g(the)f(same.)396 + 3561 y(After)d(its)e(use,)h(the)g(POOMA)g(T)-8 b(oolkit)19 + b(should)g(be)h(shut)f(do)n(wn)g(using)h(a)g(call)g(to)g + Fq(finalize)p Fu(.)e(This)396 3690 y(usually)27 b(occurs)g(in)g(the)h + Fq(main)e Fu(function.)h(The)g(former)l(,)h(and)f(more)h(frequently)f + (used,)g(form)g(\002rst)396 3820 y(prints)k(an)o(y)h(statistics)e(and)i + (turns)f(of)n(f)g(all)h(def)o(ault)g(POOMA)f(streams.)h(Then)f(it)h + (shuts)f(do)n(wn)f(the)396 3949 y(run-time)21 b(system)f(if)h(it)f(w)o + (as)h(pre)n(viously)f(initialized)f(and)j(then)e(shuts)g(do)n(wn)g + (architecture-speci\002c)396 4079 y(objects)h(if)g(the)o(y)g(were)h + (pre)n(viously)e(initialized.)f(The)j(latter)f(form)g(gi)n(v)o(es)f + (pro)o(vides)g(e)o(xplicit)g(control)396 4208 y(whether)g(the)f + (run-time)g(system)f(\()p Fm(quitRTS)5 b Fu(\))18 b(and)i + (architecture-speci\002c)g(objects)f(\()p Fm(quitArch)p + Fu(\))396 4338 y(are)26 b(shut)e(do)n(wn.)f(Both)i(functions)f(al)o(w)o + (ays)g(returns)h Fq(true)p Fu(.)396 4517 y(Including)39 + b(almost)h(an)o(y)f(POOMA)h(header)h(\002le,)g(rather)f(than)g(just)g + Ft(Pooma/Pooma.h)j Fu(suf)n(\002ces)396 4647 y(since)25 + b(most)f(other)g(POOMA)h(header)g(\002les)g(include)f(it.)p + Black 3781 5547 a Fp(26)p Black eop + %%Page: 27 27 + 27 26 bop Black 2250 -132 a Fp(Chapter)25 b(1.)g(Getting)e(Started)h + (with)h(POOMA)p Black -2 93 a Fx(1.5.)47 b(Suppor)s(ting)i(Distrib)m + (uted)f(Computation)396 309 y Fu(T)-8 b(o)28 b(use)h(multiple)d + (processors)i(with)g(POOMA)g(requires)g(installing)f(the)h(Cheetah)h + (messaging)e(li-)396 439 y(brary)d(and)g(an)g(underlying)e(messaging)h + (library)g(such)g(as)h(the)g(Message)f(P)o(assing)g(Interf)o(ace)i + (\(MPI\))396 568 y(Communications)g(Library)h(or)g(the)h(MM)e(Shared)i + (Memory)f(Library)-6 b(.)26 b(In)g(the)h(follo)n(wing)d(section,)396 + 698 y(we)30 b(\002rst)f(describe)g(ho)n(w)g(to)f(install)g(MM.)h(Read)h + (it)e(only)h(if)g(using)f(MM,)h(not)f(MPI.)h(Then)h(we)f(de-)396 + 827 y(scribe)c(ho)n(w)f(to)g(install)g(Cheetah)h(and)g(con\002gure)g + (POOMA)g(to)f(use)h(it.)-2 1221 y Fk(1.5.1.)39 b(Obtaining)e(and)i + (Installing)f(the)h(MM)g(Shared)f(Memor)q(y)-2 1407 y(Librar)q(y)396 + 1609 y Fu(Cheetah,)50 b(and)g(thus)f(POOMA,)h(can)g(use)f(Ralf)i + (Engelschall')-5 b(s)48 b(MM)h(Shared)h(Memory)f(Li-)396 + 1738 y(brary)35 b(to)g(pass)f(messages)g(between)h(processors.)g(F)o + (or)f(e)o(xample,)g(the)h(author)f(uses)h(this)f(library)396 + 1868 y(on)40 b(a)g(tw)o(o-processor)g(computer)f(running)g(Linux.)g + (The)h(library)-6 b(,)39 b(a)n(v)n(ailable)g(at)h Ft(http://www.)396 + 1997 y(engelschall.com/sw/mm/)p Fu(,)33 b(is)26 b(a)n(v)n(ailable)g(at) + h(no)g(cost)f(and)h(has)g(been)g(successfully)f(tested)h(on)396 + 2127 y(a)e(v)n(ariety)f(of)h(Unix-lik)o(e)f(platforms.)396 + 2306 y(W)-8 b(e)25 b(describe)g(ho)n(w)f(to)h(do)n(wnload)e(and)i + (install)e(the)i(MM)f(library)-6 b(.)p Black 476 2585 + a(1.)p Black 25 w(Do)n(wnload)17 b(the)i(library)f(from)h(the)g(POOMA)f + (Do)n(wnload)g(page)h(\()p Ft(http://pooma.codesourcery.)576 + 2714 y(com/pooma/download)p Fu(\))61 b(a)n(v)n(ailable)55 + b(of)n(f)i(the)f(POOMA)g(home)g(page)g(\()p Ft(http://www.)576 + 2844 y(codesourcery.com/pooma/pooma)q(/)p Fu(\).)p Black + 476 2973 a(2.)p Black 25 w(Extract)30 b(the)h(source)g(code)g(using)e + Fq(tar)65 b(xzvf)g(mm-1.1.3.tar.gz)p Fu(.)27 b(Change)32 + b(di-)576 3103 y(rectories)25 b(into)e(the)i(resulting)f(source)h(code) + g(directory)f Ft(mm-)t(1.1.3)p Fu(.)p Black 476 3232 + a(3.)p Black 25 w(Prepare)46 b(to)e(compile)f(the)i(source)f(code)h(by) + f(con\002guring)g(it)g(using)g(the)g Fq(configure)576 + 3362 y Fu(command.)37 b(T)-8 b(o)37 b(change)i(the)e(def)o(ault)h + (installation)e(directory)i Ft(/usr/local)p Fu(,)i(specify)e + Fq(-)6 b(-)576 3492 y(prefix=)p Fj(directory)47 b Fu(option.)40 + b(The)i(other)f(con\002guration)g(options)f(can)i(be)g(listed)576 + 3621 y(by)29 b(specifying)g(the)h Fq(-)6 b(-help)28 b + Fu(option.)h(Since)h(the)g(author)f(prefers)i(to)f(k)o(eep)g(all)f + (POOMA-)576 3751 y(related)c(code)g(in)f(his)g Ft(pooma)p + Fu(subdirectory)-6 b(,)25 b(he)g(uses)815 4010 y Fn(./configure)57 + b(-)6 b(-prefix=${HOME}/pooma/mm-1)o(.1.3)p Black 476 + 4269 a Fu(4.)p Black 25 w(Create)31 b(the)g(library)f(by)h(issuing)e + (the)h Fq(make)g Fu(command.)f(This)h(compiles)g(the)g(source)h(code) + 576 4398 y(using)21 b(a)h(C)h(compiler)-5 b(.)21 b(T)-8 + b(o)22 b(use)h(a)f(dif)n(ferent)g(compiler)g(than)g(the)g(MM)f + (con\002guration)h(chooses,)576 4528 y(set)i(the)h Fq(CC)f + Fu(en)l(vironment)g(v)n(ariable)g(to)g(the)h(desired)g(compiler)f + (before)h(con\002guring.)p Black 476 4657 a(5.)p Black + 25 w(Optionally)42 b(test)i(the)g(library)g(by)g(issuing)f(the)h + Fq(make)65 b(test)43 b Fu(command.)g(If)i(success-)576 + 4787 y(ful,)j(the)h(penultimate)f(line)h(should)f(be)h + Fq(OK)65 b(-)h(ALL)f(TESTS)f(SUCCESSFULLY)576 4916 y(PASSED)p + Fu(.)p Black 476 5046 a(6.)p Black 25 w(Install)31 b(the)g(MM)g + (Library)h(by)f(issuing)f(the)i Fq(make)65 b(install)30 + b Fu(command.)h(This)g(copies)p Black 3780 5547 a Fp(27)p + Black eop + %%Page: 28 28 + 28 27 bop Black 2250 -132 a Fp(Chapter)25 b(1.)g(Getting)e(Started)h + (with)h(POOMA)p Black 576 51 a Fu(the)e(library)h(\002les)g(to)f(the)h + (installation)d(directory)-6 b(.)23 b(The)h Ft(mm-)t(1.1.3)i + Fu(directory)e(containing)e(the)576 180 y(source)j(code)g(may)f(no)n(w) + g(be)h(remo)o(v)o(ed.)-2 624 y Fk(1.5.2.)39 b(Obtaining)e(and)i + (Installing)f(the)h(Cheetah)f(Messa)o(ging)-2 810 y(Librar)q(y)396 + 1012 y Fu(The)48 b(Cheetah)g(Library)f(decouples)g(communication)e + (from)i(synchronization.)f(Using)g(asyn-)396 1141 y(chronous)35 + b(messaging)f(rather)i(than)f(synchronous)f(messaging)g(permits)g(a)i + (message)f(sender)h(to)396 1271 y(operate)27 b(without)e(the)i + (cooperation)e(of)i(the)f(message)h(recipient.)f(Thus,)g(implementing)e + (message)396 1400 y(sending)d(is)h(simpler)e(and)i(processing)f(is)h + (more)f(ef)n(\002ciently)h(o)o(v)o(erlapped)e(with)h(it.)g(Remote)h + (method)396 1530 y(in)l(v)n(ocation)37 b(is)g(also)g(supported.)f(The)i + (library)f(w)o(as)g(de)n(v)o(eloped)g(at)g(the)g(Los)h(Alamos)e + (National)396 1659 y(Laboratory')-5 b(s)24 b(Adv)n(anced)h(Computing)e + (Laboratory)-6 b(.)396 1839 y(Cheetah')h(s)25 b(messaging)e(is)h + (implemented)f(using)h(an)h(underlying)e(messaging)g(library)h(such)h + (as)f(the)396 1968 y(Message)i(P)o(assing)e(Interf)o(ace)j(\(MPI\))f + (Communications)e(Library)h(or)h(the)g(MM)f(Shared)h(Memory)396 + 2098 y(Library)-6 b(.)26 b(MPI)g(w)o(orks)g(on)g(a)g(wide)g(v)n(ariety) + g(of)g(platforms)f(and)h(has)g(achie)n(v)o(ed)f(widespread)h(usage.)396 + 2227 y(MM)32 b(w)o(orks)h(under)f(Unix-lik)o(e)g(operating)g(systems)g + (on)g(an)o(y)h(computer)f(with)g(shared)h(memory)-6 b(.)396 + 2357 y(Both)21 b(libraries)g(are)h(a)n(v)n(ailable)e(at)h(no)g(cost.)g + (The)g(instructions)e(belo)n(w)h(w)o(ork)h(for)g(whiche)n(v)o(er)g + (library)396 2486 y(you)k(choose.)396 2665 y(W)-8 b(e)25 + b(describe)g(ho)n(w)f(to)h(do)n(wnload)e(and)i(install)e(Cheetah.)p + Black 476 2944 a(1.)p Black 25 w(Do)n(wnload)17 b(the)i(library)f(from) + h(the)g(POOMA)f(Do)n(wnload)g(page)h(\()p Ft + (http://pooma.codesourcery.)576 3074 y(com/pooma/download)p + Fu(\))61 b(a)n(v)n(ailable)55 b(of)n(f)i(the)f(POOMA)g(home)g(page)g + (\()p Ft(http://www.)576 3203 y(codesourcery.com/pooma/pooma)q(/)p + Fu(\).)p Black 476 3333 a(2.)p Black 25 w(Extract)30 + b(the)h(source)g(code)g(using)e Fq(tar)65 b(xzvf)g(cheetah-1.0.tgz)p + Fu(.)27 b(Change)32 b(di-)576 3463 y(rectories)25 b(into)e(the)i + (resulting)f(source)h(code)g(directory)f Ft(cheetah-)t(1.0)p + Fu(.)p Black 476 3592 a(3.)p Black 25 w(Edit)42 b(a)j(con\002guration)e + (\002le)h(corresponding)f(to)g(your)g(operating)g(system)g(and)h + (compiler)-5 b(.)576 3722 y(These)38 b Ft(.conf)j Fu(\002les)e(are)g + (located)g(in)g(the)f Ft(config)j Fu(directory)-6 b(.)38 + b(F)o(or)h(e)o(xample,)f(to)g(use)h(gcc)576 3851 y(\(really)25 + b(g++\))g(with)f(the)g(Linux)g(operating)h(system,)e(use)i + Ft(config/LINUXGCC.conf)p Fu(.)576 4030 y(The)j(con\002guration)h + (\002le)g(usually)e(does)i(not)f(need)h(modi\002cation.)e(Ho)n(we)n(v)o + (er)l(,)h(if)h(you)f(are)h(us-)576 4160 y(ing)21 b(MM,)g(ensure)h + Fq(shmem_default_dir)c Fu(speci\002es)k(its)f(location.)g(F)o(or)h(e)o + (xample,)e(the)576 4289 y(author)k(modi\002ed)g(the)h(v)n(alue)f(to)g + Fq("/home/oldham/pooma/mm-1.1.3")o Fu(.)p Black 476 4598 + a(4.)p Black 25 w(Prepare)h(to)e(compile)g(the)h(source)f(code)h(by)g + (con\002guring)f(it)g(using)g(the)h Fq(configure)d Fu(com-)576 + 4728 y(mand.)e(Specify)h(the)g(con\002guration)f(\002le)h(using)f(the)h + Fq(-)6 b(-arch)18 b Fu(option.)g(Its)i(ar)n(gument)f(should)576 + 4857 y(be)26 b(the)g(con\002guration)g(\002le')-5 b(s)26 + b(name,)g(omitting)e(its)i Ft(.conf)i Fu(suf)n(\002x.)d(F)o(or)i(e)o + (xample,)e Fq(-)6 b(-arch)p Black 3784 5547 a Fp(28)p + Black eop + %%Page: 29 29 + 29 28 bop Black 2250 -132 a Fp(Chapter)25 b(1.)g(Getting)e(Started)h + (with)h(POOMA)p Black 576 51 a Fq(LINUXGCC)p Fu(.)d(Some)j(other)g + (options)e(include)576 330 y(-)6 b(-help)p Black Black + 775 459 a(lists)23 b(all)i(the)g(a)n(v)n(ailable)f(options)576 + 689 y(-)6 b(-shmem)23 b(-)6 b(-nompi)p Black Black 775 + 818 a(indicates)24 b(use)h(of)g(MM,)e(not)i(MPI)576 1047 + y(-)6 b(-mpi)23 b(-)6 b(-noshmem)p Black Black 775 1177 + a(indicates)24 b(use)h(of)g(MPI,)f(not)h(MM)576 1406 + y(-)6 b(-opt)p Black Black 775 1535 a(causes)25 b(the)f(compiler)g(to)h + (produce)g(optimized)e(source)i(code)576 1764 y(-)6 b(-noe)o(x)p + Black Black 775 1894 a(pre)n(v)o(ents)23 b(use)i(of)g(C++)h(e)o + (xceptions)576 2123 y(-)6 b(-static)p Black Black 775 + 2253 a(creates)25 b(a)g(static)g(library)-6 b(,)24 b(not)g(a)h(shared)g + (library)576 2482 y(-)6 b(-shared)p Black Black 775 2611 + a(creates)25 b(a)g(shared)g(library)-6 b(,)24 b(not)h(a)g(static)f + (library)-6 b(.)24 b(This)g(is)g(the)h(def)o(ault.)576 + 2840 y(-)6 b(-pre\002x)25 b Fm(directory)p Black Black + 775 2970 a Fu(speci\002es)h(the)h(installation)d(directory)i(where)h + (the)f(library)h(will)e(be)i(copied)f(rather)h(than)775 + 3099 y(the)d(def)o(ault.)576 3279 y(F)o(or)g(e)o(xample,)g(the)h + (author)f(uses)815 3588 y Fn(./configure)57 b(-)6 b(-arch)58 + b(LINUXGCC)g(-)6 b(-shmem)58 b(-)6 b(-nompi)57 b(\\)815 + 3717 y(-)6 b(-noex)58 b(-)6 b(-static)57 b(-)6 b(-prefix)58 + b(${HOME}/pooma/cheetah-1.0)c(\\)815 3847 y(-)6 b(-opt)576 + 4106 y Fu(The)23 b Fq(-)6 b(-arch)64 b(LINUXGCC)21 b + Fu(indicates)h(use)h(of)h(gcc)f(\(or)g(g++\))h(under)f(a)h(Linux)e + (operating)576 4235 y(system.)38 b(The)h(MM)f(library)h(is)g(used,)g(b) + n(ut)g(C++)h(e)o(xceptions)e(are)i(not.)f(The)g(latter)g(choice)576 + 4365 y(matches)h(POOMA')-5 b(s)40 b(def)o(ault)h(choice.)g(A)f(static)h + (library)-6 b(,)40 b(not)g(a)h(shared)g(library)-6 b(,)40 + b(is)g(cre-)576 4494 y(ated.)f(This)h(is)f(also)g(POOMA')-5 + b(s)40 b(def)o(ault)f(choice.)h(The)g(library)f(will)g(be)h(installed)f + (in)g(the)576 4624 y Ft(${HOME}/pooma/cheetah-)t(1.0)p + Fu(.)34 b(Finally)-6 b(,)26 b(the)i(library)f(code)h(will)e(be)i + (optimized,)e(hope-)576 4753 y(fully)e(running)g(f)o(aster)h(than)f + (unoptimized)f(code.)p Black 476 4883 a(5.)p Black 25 + w(F)o(ollo)n(w)f(the)i(directions)f(printed)g(by)g Fq(configure)p + Fu(:)f(Change)i(directories)g(to)f(the)h Ft(lib)h Fu(sub-)576 + 5012 y(directory)34 b(named)g(by)h(the)f Fq(-)6 b(-arch)33 + b Fu(ar)n(gument)h(and)g(then)h(type)f Fq(make)g Fu(to)g(compile)f(the) + p Black 3784 5547 a Fp(29)p Black eop + %%Page: 30 30 + 30 29 bop Black 2250 -132 a Fp(Chapter)25 b(1.)g(Getting)e(Started)h + (with)h(POOMA)p Black 576 51 a Fu(source)g(code)g(and)f(create)i(the)f + (library)-6 b(.)p Black 476 180 a(6.)p Black 25 w(Optionally)25 + b(ensure)i(the)g(library)g(w)o(orks)f(correctly)i(by)e(issuing)g(the)h + Fq(make)65 b(tests)25 b Fu(com-)576 310 y(mand.)p Black + 476 439 a(7.)p Black 25 w(Install)j(the)g(library)h(by)f(issuing)g(the) + h Fq(make)64 b(install)28 b Fu(command.)f(This)h(copies)h(the)g(li-)576 + 569 y(brary)f(\002les)h(to)f(the)h(installation)d(directory)-6 + b(.)28 b(The)g Ft(cheetah-)t(1.0)k Fu(directory)c(containing)f(the)576 + 698 y(source)e(code)g(may)f(no)n(w)g(be)h(remo)o(v)o(ed.)-2 + 1142 y Fk(1.5.3.)39 b(Con\002guring)d(POOMA)i(When)i(Using)e(Cheetah) + 396 1343 y Fu(T)-8 b(o)21 b(use)g(POOMA)h(with)e(Cheetah,)i(one)f(must) + f(tell)h(POOMA)g(the)g(location)f(of)i(the)f(Cheetah)h(library)396 + 1473 y(using)i(the)h Fq(-)6 b(-messaging)21 b Fu(con\002guration)k + (option.)e(T)-8 b(o)25 b(do)f(this,)p Black 476 1817 + a(1.)p Black 25 w(Set)37 b(the)h(Cheetah)g(directory)f(en)l(vironment)f + (v)n(ariable)h Fq(CHEETAHDIR)e Fu(to)i(the)h(directory)576 + 1947 y(containing)23 b(the)i(installed)e(Cheetah)j(library)-6 + b(.)24 b(F)o(or)g(e)o(xample,)815 2278 y Fn(export)58 + b(CHEETAHDIR=${HOME}/pooma/cheet)o(ah-1.)o(0)576 2537 + y Fu(speci\002es)20 b(the)g(installation)d(directory)j(used)g(in)f(the) + h(pre)n(vious)f(section.)g(If)h(using)f(the)h(csh)g(shell,)576 + 2666 y(use)k Fq(setenv)65 b(CHEETAHDIR)e(${HOME}/pooma/cheetah-1.0)p + Fu(.)p Black 476 2796 a(2.)p Black 25 w(When)38 b(con\002guring)g + (POOMA,)h(specify)f(the)h Fq(-)6 b(-messaging)35 b Fu(option.)j(F)o(or) + g(e)o(xample,)576 2925 y Fq(./configure)63 b(-)6 b(-arch)63 + b(LINUXgcc)h(-)6 b(-opt)64 b(-)6 b(-messaging)47 b Fu(con\002g-)576 + 3055 y(ures)24 b(for)i(Linux,)d(gcc,)i(and)g(an)g(optimized)f(library)g + (using)g(Cheetah.)p Black 3784 5547 a Fp(30)p Black eop + %%Page: 31 31 + 31 30 bop Black Black -2 119 a Fy(Chapter)58 b(2.)f(Intr)l(oduction)396 + 416 y Fu(The)38 b(P)o(arallel)g(Object-Oriented)f(Methods)g(and)g + (Applications)g(\(POOMA\))h(T)-8 b(oolkit)36 b(is)h(a)h(C++)396 + 545 y(toolkit)26 b(for)h(writing)f(high-performance)h(scienti\002c)g + (programs.)g(The)g(toolkit)f(pro)o(vides)f(a)j(v)n(ariety)396 + 675 y(of)d(tools:)p Black 396 1114 a Fs(\225)p Black + 72 w Fu(containers)f(and)h(other)g(abstractions)e(suitable)h(for)h + (scienti\002c)g(computation,)p Black 396 1244 a Fs(\225)p + Black 72 w Fu(support)49 b(for)h(a)g(v)n(ariety)f(of)h(computation)e + (modes)i(including)e(data-parallel)i(e)o(xpressions,)496 + 1373 y(stencil-based)24 b(computations,)f(and)h(lazy)h(e)n(v)n + (aluation,)p Black 396 1503 a Fs(\225)p Black 72 w Fu(support)f(for)h + (writing)e(parallel)i(and)g(distrib)n(uted)e(programs,)p + Black 396 1632 a Fs(\225)p Black 72 w Fu(automatic)35 + b(creation)h(of)g(all)f(interprocessor)g(communication)f(for)i + (parallel)g(and)g(distrib)n(uted)496 1762 y(programs,)24 + b(and)p Black 396 1891 a Fs(\225)p Black 72 w Fu(automatic)f + (out-of-order)i(e)o(x)o(ecution)e(and)h(loop)g(rearrangement)h(for)f(f) + o(ast)h(program)f(e)o(x)o(ecution.)396 2021 y(Since)29 + b(the)f(toolkit)f(pro)o(vides)g(high-le)n(v)o(el)g(abstractions,)g + (POOMA)i(programs)e(are)j(much)e(shorter)396 2150 y(than)23 + b(corresponding)f(F)o(ortran)h(or)g(C)g(programs)f(and)h(require)g + (less)g(time)f(to)g(write)h(and)g(less)g(time)f(to)396 + 2280 y(deb)n(ug.)i(Using)g(these)g(high-le)n(v)o(el)f(abstractions,)g + (the)h(same)g(code)h(runs)f(on)g(a)h(sequential,)f(parallel,)396 + 2410 y(and)33 b(distrib)n(uted)f(computers.)g(It)h(runs)g(almost)f(as)h + (f)o(ast)h(as)f(carefully)g(crafted)h(machine-speci\002c)396 + 2539 y(hand-written)c(programs.)h(The)f(toolkit)g(is)g(open-source)h + (softw)o(are,)g(a)n(v)n(ailable)f(for)h(no)g(cost,)f(and)396 + 2669 y(compatible)24 b(with)g(an)o(y)g(modern)g(C++)i(compiler)-5 + b(.)-2 3121 y Fx(2.1.)47 b(POOMA)h(Goals)396 3337 y Fu(The)37 + b(goals)f(for)g(the)g(POOMA)h(T)-8 b(oolkit)35 b(ha)n(v)o(e)h(remained) + g(unchanged)g(since)g(its)g(conception)g(in)396 3466 + y(1994:)p Black 476 3854 a(1.)p Black 25 w(Code)i(portability)f(across) + h(serial,)g(distrib)n(uted,)e(and)j(parallel)f(architectures)g(without) + f(an)o(y)576 3983 y(change)25 b(to)f(the)h(source)g(code.)p + Black 476 4163 a(2.)p Black 25 w(De)n(v)o(elopment)19 + b(of)k(reusable,)f(cross-problem-domain)e(components)g(to)i(enable)g + (rapid)g(appli-)576 4292 y(cation)i(de)n(v)o(elopment.)p + Black 476 4472 a(3.)p Black 25 w(Code)h(ef)n(\002cienc)o(y)g(for)g(k)o + (ernels)f(and)h(components)e(rele)n(v)n(ant)h(to)h(scienti\002c)f + (simulation.)p Black 476 4651 a(4.)p Black 25 w(T)-8 + b(oolkit)25 b(design)h(and)h(de)n(v)o(elopment)d(dri)n(v)o(en)i(by)g + (applications)g(from)g(a)h(di)n(v)o(erse)f(set)g(of)h(scien-)576 + 4780 y(ti\002c)e(problem)e(domains.)p Black 476 4960 + a(5.)p Black 25 w(Shorter)i(time)f(from)g(problem)g(inception)g(to)g(w) + o(orking)g(parallel)h(simulations.)396 5089 y(Belo)n(w)-6 + b(,)24 b(we)h(discuss)f(ho)n(w)g(POOMA)h(achie)n(v)o(es)f(these)g + (goals.)p Black 3784 5547 a Fp(31)p Black eop + %%Page: 32 32 + 32 31 bop Black 2938 -132 a Fp(Chapter)25 b(2.)g(Intr)l(oduction)p + Black -2 73 a Fk(Code)38 b(P)-6 b(or)s(tability)37 b(f)m(or)i + (Sequential)f(and)g(Distrib)m(uted)f(Pr)m(ograms)396 + 274 y Fu(The)25 b(same)g(POOMA)g(programs)f(run)h(on)g(sequential,)f + (distrib)n(uted,)f(and)i(parallel)g(computers.)f(No)396 + 403 y(change)j(in)f(source)g(code)h(is)e(required.)i(T)-8 + b(w)o(o)26 b(or)g(three)h(lines)e(specify)h(ho)n(w)g(each)h(container') + -5 b(s)25 b(data)396 533 y(should)31 b(be)h(distrib)n(uted)e(among)h(a) + n(v)n(ailable)g(processors.)g(Using)g(these)g(directi)n(v)o(es)f(and)i + (run-time)396 662 y(information)41 b(about)g(the)h(computer')-5 + b(s)41 b(con\002guration,)g(the)h(toolkit)f(automatically)f(distrib)n + (utes)396 792 y(pieces)c(of)g(the)g(container)f(domains,)f(called)i + Fp(patc)o(hes)p Fu(,)f(among)g(the)g(a)n(v)n(ailable)g(processors.)h + (If)g(a)396 921 y(computation)23 b(needs)i(v)n(alues)e(from)h(another)h + (patch,)f(POOMA)h(automatically)e(passes)h(the)g(v)n(alues)396 + 1051 y(to)e(the)g(patch)g(where)g(it)g(is)g(needed.)g(The)g(same)g + (program,)f(and)h(e)n(v)o(en)g(the)g(same)g(e)o(x)o(ecutable,)f(w)o + (orks)396 1180 y(re)o(gardless)27 b(of)i(the)e(number)h(of)g(the)g(a)n + (v)n(ailable)g(processors)f(and)h(the)g(size)g(of)h(the)f(containers')f + (do-)396 1310 y(mains.)g(A)g(programmer)g(interested)f(in)h(only)g + (sequential)f(e)o(x)o(ecution)g(can)i(omit)e(the)h(tw)o(o)g(or)g(three) + 396 1439 y(lines)d(specifying)g(ho)n(w)g(the)h(domains)e(are)j(to)e(be) + h(distrib)n(uted.)-2 1733 y Fk(Rapid)38 b(Application)f(De)n(velopment) + 396 1935 y Fu(The)j(POOMA)f(T)-8 b(oolkit)39 b(is)g(designed)g(to)g + (enable)h(rapid)f(de)n(v)o(elopment)f(of)i(scienti\002c)f(and)h(dis-) + 396 2064 y(trib)n(uted)27 b(applications.)f(F)o(or)i(e)o(xample,)f(its) + g(v)o(ector)l(,)g(matrix,)g(and)h(tensor)f(classes)g(model)g(the)h(cor) + n(-)396 2194 y(responding)f(mathematical)f(concepts.)h(Its)g + Fq(Array)f Fu(and)i Fq(Field)e Fu(classes)h(model)g(the)g(discrete)396 + 2323 y(spaces)19 b(and)g(mathematical)f(arrays)h(frequently)f(found)h + (in)f(computational)f(science)i(and)g(math.)f(See)396 + 2453 y(Figure)33 b(2-1.)f(The)g(left)g(column)f(indicates)h + (theoretical)g(science)g(and)g(math)g(concepts,)g(the)g(mid-)396 + 2582 y(dle)h(column)e(computational)f(science)j(and)f(math)g(concepts,) + g(and)h(the)f(right)g(column)f(computer)396 2712 y(science)j + (implementations.)d(F)o(or)j(e)o(xample,)e(theoretical)h(physics)g + (frequently)g(uses)g(continuous)396 2841 y(\002elds)39 + b(in)g(three-dimension)e(space,)j(while)e(algorithms)f(for)j(a)f + (corresponding)f(computational)396 2971 y(physics)22 + b(problem)h(usually)f(uses)i(discrete)f(\002elds.)g(POOMA)h + (containers,)f(classes,)g(and)g(functions)396 3100 y(ease)35 + b(engineering)e(computer)h(programs)f(for)h(these)g(algorithms.)e(F)o + (or)j(e)o(xample,)e(the)g(POOMA)396 3230 y Fq(Field)f + Fu(container)h(models)f(discrete)h(\002elds:)g(both)g(map)g(locations)f + (in)g(discrete)h(space)h(to)f(v)n(al-)396 3359 y(ues)40 + b(and)g(permit)f(computations)f(of)i(spatial)f(distances)h(and)g(v)n + (alues.)f(The)h(POOMA)f Fq(Array)396 3489 y Fu(container)d(models)e + (the)h(mathematical)g(concept)g(of)h(an)g(array)-6 b(,)35 + b(frequently)g(used)h(in)f(numerical)396 3618 y(analysis.)396 + 3897 y Fr(Figur)n(e)26 b(2-1.)e(Ho)o(w)g(POOMA)g(Fits)h(Into)g(the)g + (Scienti\002c)i(Pr)n(ocess)548 4734 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 548 4734 a @beginspecial + -33 @llx -81 @lly 349 @urx 5 @ury 3820 @rwi @setspecial + %%BeginDocument: figures/introduction.101 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -33 -81 349 5 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Times-Roman Times-Italic cmmi10 cmr10 Courier + /ptmro8r /Times-Roman def + /ptmri8r /Times-Italic def + /ptmr8r /Times-Roman def + /cmmi10 /cmmi10 def + /cmr10 /cmr10 def + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -29.06555 -3.3275 moveto + (science) ptmro8r 9.96265 fshow + 2.74475 -3.3275 moveto + (/) ptmro8r 9.96265 fshow + 8.00485 -3.3275 moveto + (math) ptmro8r 9.96265 fshow + 125.71184 -2.3188 moveto + (algorithms) ptmro8r 9.96265 fshow + 270.90518 -2.3188 moveto + (engineering) ptmro8r 9.96265 fshow + -24.56606 -36.58774 moveto + (R) ptmri8r 9.96265 fshow + -18.47885 -32.96774 moveto + (d) ptmri8r 7.3724 fshow + -13.91136 -36.58774 moveto + (-) ptmr8r 9.96265 fshow + -9.48686 -36.58774 moveto + (>) cmmi10 9.96265 fshow + -0.63905 -36.58774 moveto + (v) ptmr8r 9.96265 fshow + 4.09325 -36.58774 moveto + (alues) ptmr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -30.24747 -43.17433 moveto + 30.24747 -43.17433 lineto + 30.24747 -24.89192 lineto + -30.24747 -24.89192 lineto + closepath stroke + 100.3611 -36.42413 moveto + (discrete) ptmr8r 9.96265 fshow + 133.835 -36.42413 moveto + (space-) ptmr8r 9.96265 fshow + 160.3862 -36.42413 moveto + (>) cmmi10 9.96265 fshow + 169.234 -36.42413 moveto + (v) ptmr8r 9.96265 fshow + 173.9663 -36.42413 moveto + (alues) ptmr8r 9.96265 fshow + newpath 97.3611 -43.17433 moveto + 197.4392 -43.17433 lineto + 197.4392 -24.89192 lineto + 97.3611 -24.89192 lineto + closepath stroke + 244.71764 -36.42413 moveto + (\() cmr10 9.96265 fshow + 248.58304 -36.42413 moveto + (layout,engine) ptmr8r 9.96265 fshow + 302.54013 -36.42413 moveto + (\)) cmr10 9.96265 fshow + 306.40553 -36.42413 moveto + (-) ptmr8r 9.96265 fshow + 310.83003 -36.42413 moveto + (>) cmmi10 9.96265 fshow + 319.67784 -36.42413 moveto + (v) ptmr8r 9.96265 fshow + 324.41003 -36.42413 moveto + (alues) ptmr8r 9.96265 fshow + newpath 241.71764 -43.17433 moveto + 347.88295 -43.17433 lineto + 347.88295 -24.89192 lineto + 241.71764 -24.89192 lineto + closepath stroke + -27.24745 -73.13156 moveto + (linear) ptmr8r 9.96265 fshow + -2.07225 -73.13156 moveto + (algebra) ptmr8r 9.96265 fshow + newpath -30.24745 -79.88176 moveto + 30.24745 -79.88176 lineto + 30.24745 -61.59935 lineto + -30.24745 -61.59935 lineto + closepath stroke + 122.25629 -73.29517 moveto + (N) ptmri8r 9.96265 fshow + 129.499 -69.67517 moveto + (d) ptmri8r 7.3724 fshow + 134.06659 -73.29517 moveto + (-) ptmr8r 9.96265 fshow + 138.49109 -73.29517 moveto + (>) cmmi10 9.96265 fshow + 147.33888 -73.29517 moveto + (v) ptmr8r 9.96265 fshow + 152.07109 -73.29517 moveto + (alues) ptmr8r 9.96265 fshow + newpath 97.36108 -79.88176 moveto + 197.43921 -79.88176 lineto + 197.43921 -61.59935 lineto + 97.36108 -61.59935 lineto + closepath stroke + 189.44942 -2.3188 moveto + (implementation) ptmro8r 9.96265 fshow + -32.23875 -21.77742 moveto + (continuous) ptmr8r 9.96265 fshow + 13.97754 -21.77742 moveto + (field) ptmr8r 9.96265 fshow + 121.5326 -21.77742 moveto + (discrete) ptmr8r 9.96265 fshow + 155.0065 -21.77742 moveto + (field) ptmr8r 9.96265 fshow + 257.03229 -21.75252 moveto + (POOMA) ptmr8r 9.96265 fshow + 295.49779 -21.75252 moveto + (container) ptmr8r 9.96265 fshow + 109.0844 -56.44255 moveto + (mathematical) ptmr8r 9.96265 fshow + 165.25279 -56.44255 moveto + (array) ptmr8r 9.96265 fshow + 1 setlinecap + newpath 30.24747 -34.03313 moveto + 97.3611 -34.03313 lineto stroke + newpath 93.66557 -35.5639 moveto + 97.3611 -34.03313 lineto + 93.66557 -32.50235 lineto + closepath + gsave fill grestore stroke + 36.9654 -30.91862 moveto + (discretization) ptmr8r 9.96265 fshow + newpath 197.4392 -34.03313 moveto + 241.71764 -34.03313 lineto stroke + newpath 238.02237 -35.5638 moveto + 241.71764 -34.03313 lineto + 238.02237 -32.50246 lineto + closepath + gsave fill grestore stroke + 204.63448 -30.90862 moveto + (Field) pcrr8r 9.96265 fshow + newpath 30.24745 -70.74055 moveto + 97.36108 -70.74055 lineto stroke + newpath 93.66556 -72.27133 moveto + 97.36108 -70.74055 lineto + 93.66556 -69.20978 lineto + closepath + gsave fill grestore stroke + 43.88428 -52.19885 moveto + (numerical) ptmr8r 9.96265 fshow + 47.75478 -64.15395 moveto + (analysis) ptmr8r 9.96265 fshow + newpath 197.43921 -70.74055 moveto + 241.71764 -34.03313 lineto stroke + newpath 239.84952 -37.57028 moveto + 241.71764 -34.03313 lineto + 237.89551 -35.21326 lineto + closepath + gsave fill grestore stroke + gsave [0.76985 0.63821 -0.63821 0.76985 200.52965 -55.5471 ] concat 0 0 moveto + (Array) pcrr8r 9.96265 fshow grestore + showpage + %%EOF + + %%EndDocument + @endspecial 548 4734 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 548 4734 a 396 4913 a Fu(In)36 + b(the)g(translation)e(from)h(theoretical)h(science)g(to)f + (computational)f(science)i(to)f(computer)g(pro-)396 5043 + y(grams,)25 b(POOMA)f(eases)h(the)g(implementation)d(of)j(algorithms)e + (as)i(computer)f(programs.)p Black 3784 5547 a Fp(32)p + Black eop + %%Page: 33 33 + 33 32 bop Black 2938 -132 a Fp(Chapter)25 b(2.)g(Intr)l(oduction)p + Black 396 51 a Fu(POOMA)34 b(containers)f(support)g(a)h(v)n(ariety)e + (of)i(computation)e(modes,)h(easing)g(translation)f(of)i(al-)396 + 180 y(gorithms)25 b(into)h(code.)h(F)o(or)g(e)o(xample,)f(man)o(y)f + (algorithms)g(for)i(solving)f(partial)g(dif)n(ferential)g(equa-)396 + 310 y(tions)32 b(use)g(stencil-based)g(computations)e(so)i(POOMA)g + (supports)g(stencil-based)f(computations)396 439 y(on)c + Fq(Array)p Fu(s)f(and)i Fq(Field)p Fu(s.)e(POOMA)h(also)g(supports)f + (data-parallel)i(computation)d(similar)i(to)396 569 y(F)o(ortran)d(90)g + (syntax.)47 b(T)-8 b(o)24 b(ease)h(implementing)c(computations)h(where) + j(one)f Fq(Field)p Fu(')-5 b(s)22 b(v)n(alues)i(are)396 + 698 y(a)g(function)f(of)h(se)n(v)o(eral)e(other)i Fq(Field)p + Fu(')-5 b(s)22 b(v)n(alues,)g(the)i(programmer)f(can)h(specify)f(a)h + Fp(r)l(elation)p Fu(.)e(Re-)396 828 y(lations)32 b(are)i(lazily)e(e)n + (v)n(aluated:)g(whene)n(v)o(er)g(the)h(dependent)g Fq(Field)p + Fu(')-5 b(s)31 b(v)n(alues)h(are)i(needed)f(and)396 957 + y(the)o(y)26 b(are)i(dependent)f(on)f(a)i Fq(Field)d + Fu(whose)i(v)n(alues)f(ha)n(v)o(e)h(changed,)g(the)g(v)n(alues)f(are)h + (computed.)396 1087 y(Relations)c(also)h(assists)e(correctness)i(by)f + (eliminating)f(the)h(frequently)g(for)n(gotten)h(need)f(for)h(a)g(pro-) + 396 1217 y(grammer)h(to)f(ensure)h(a)g Fq(Field)p Fu(')-5 + b(s)23 b(v)n(alues)h(are)i(up-to-date)e(before)i(being)e(used.)-2 + 1511 y Fk(Ef\002cient)38 b(Code)396 1712 y Fu(POOMA)31 + b(incorporates)g(a)h(v)n(ariety)f(of)g(techniques)g(to)f(ensure)i(it)f + (produces)g(code)g(that)g(e)o(x)o(ecutes)396 1841 y(as)j(quickly)e(as)h + (special-case,)g(hand-written)g(code.)g(These)g(techniques)g(include)f + (e)o(xtensi)n(v)o(e)f(use)396 1971 y(of)g(templates,)e(out-of-order)h + (e)n(v)n(aluation,)e(use)i(of)h(guard)f(layers,)g(and)g(production)f + (of)h(f)o(ast)g(inner)396 2100 y(loops.)396 2280 y(POOMA')-5 + b(s)29 b(uses)g(of)g(C++)h(templates)e(ensures)h(as)g(much)g(as)g(w)o + (ork)g(as)g(possible)f(occurs)h(at)g(com-)396 2409 y(pile)e(time,)g + (not)g(run)h(time.)f(This)f(speeds)i(programs')f(e)o(x)o(ecution.)f + (Since)i(more)f(code)h(is)f(produced)396 2539 y(at)36 + b(compile)f(time,)g(more)g(code)h(is)f(a)n(v)n(ailable)g(to)h(the)f + (compiler')-5 b(s)35 b(optimizer)l(,)f(further)i(speeding)396 + 2668 y(e)o(x)o(ecution.)65 b(The)33 b(POOMA)g Fq(Array)e + Fu(container)i(bene\002ts)g(from)g(the)g(use)g(of)g(template)f(param-) + 396 2798 y(eters.)h(Their)g(use)f(permits)g(the)h(use)f(of)h + (specialized)g(data)g(storage)f(classes)h(called)f Fp(engines)p + Fu(.)g(An)396 2927 y Fq(Array)p Fu(')-5 b(s)22 b Fq(Engine)g + Fu(template)h(parameter)h(speci\002es)f(ho)n(w)g(data)h(is)f(stored)g + (and)g(inde)o(x)o(ed.)f(Some)396 3057 y Fq(Array)p Fu(s)31 + b(e)o(xpect)h(almost)f(all)h(v)n(alues)f(to)h(be)g(used,)g(while)f + (others)h(might)f(be)h(mostly)e(empty)-6 b(.)31 b(In)396 + 3186 y(the)23 b(latter)f(case,)i(using)d(a)i(specialized)g(engine)f + (storing)g(the)g(fe)n(w)h(nonzero)g(v)n(alues)e(greatly)i(reduces)396 + 3316 y(storage)c(requirements.)f(Using)h(engines)f(also)h(permits)f(f)o + (ast)h(creation)g(of)h(container)e(vie)n(ws,)g(kno)n(wn)396 + 3445 y(as)29 b Fp(arr)o(ay)e(sections)h Fu(in)g(F)o(ortran)h(90.)f(A)g + (vie)n(w')-5 b(s)27 b(engine)i(is)f(the)g(same)h(as)f(the)g(original)g + (container')-5 b(s)396 3575 y(engine,)24 b(b)n(ut)g(the)g(vie)n(w)g + (object')-5 b(s)23 b(restricted)h(domain)g(is)g(a)g(subset)g(of)g(the)h + (original)e(domain.)g(Space)396 3704 y(requirements)h(and)h(e)o(x)o + (ecution)e(time)h(to)h(use)g(vie)n(ws)e(are)j(minimal.)396 + 3884 y(Using)31 b(templates)g(also)g(permits)g(containers)g(to)h + (support)e(polymorphic)h(inde)o(xing,)e(e.g.,)j(inde)o(x-)396 + 4013 y(ing)22 b(both)f(by)h(inte)o(gers)f(and)h(by)f(three-dimensional) + g(coordinates.)g(A)h(container)g(uses)f(templatized)396 + 4143 y(inde)o(xing)27 b(functions)g(that)h(defer)h(inde)o(xing)d + (operations)i(to)g(its)f(engine')-5 b(s)28 b(inde)o(x)f(operators.)h + (Since)396 4272 y(the)e(container)f(uses)g(templates,)g(the)g + Fq(Engine)f Fu(can)i(de\002ne)g(inde)o(xing)e(functions)h(with)g(dif)n + (ferent)396 4402 y(function)c(ar)n(guments,)f(without)g(the)h(need)g + (to)g(add)h(corresponding)e(container)h(functions.)f(Some)h(of)396 + 4531 y(these)26 b(bene\002ts)f(of)h(using)e(templates)h(can)h(be)f(e)o + (xpressed)g(without)g(them,)f(b)n(ut)h(doing)g(so)g(increases)396 + 4661 y(e)o(x)o(ecution)k(time.)g(F)o(or)h(e)o(xample,)g(a)g(container)g + (could)g(ha)n(v)o(e)g(a)g(pointer)g(to)g(an)g(engine)g(object,)g(b)n + (ut)396 4790 y(this)20 b(requires)h(a)g(pointer)g(dereference)h(for)f + (each)h(operation.)e(Implementing)f(polymorphic)g(inde)o(x-)396 + 4920 y(ing)29 b(without)g(templates)f(w)o(ould)h(require)h(adding)f + (virtual)g(functions)g(corresponding)g(to)g(each)h(of)396 + 5049 y(the)25 b(inde)o(xing)e(functions.)p Black 3784 + 5547 a Fp(33)p Black eop + %%Page: 34 34 + 34 33 bop Black 2938 -132 a Fp(Chapter)25 b(2.)g(Intr)l(oduction)p + Black 396 51 a Fu(T)-8 b(o)28 b(ensure)f(multiprocessor)f(POOMA)i + (programs)f(e)o(x)o(ecute)g(quickly)-6 b(,)26 b(it)h(is)g(important)f + (that)h(inter)n(-)396 180 y(processor)g(communication)f(o)o(v)o(erlaps) + g(with)g(intraprocessor)h(computations)f(as)h(much)g(as)g(possi-)396 + 310 y(ble)h(and)h(that)f(communication)e(is)i(minimized.)e + (Asynchronous)h(communication,)f(out-of-order)396 439 + y(e)n(v)n(aluation,)d(and)i(use)f(of)h(guard)g(layers)f(all)h(help)f + (achie)n(v)o(e)g(these)h(goals.)f(POOMA)g(uses)h(the)f(asyn-)396 + 569 y(chronous)j(communication)f(f)o(acilities)g(of)i(the)f(Cheetah)i + (communication)c(library)-6 b(.)27 b(When)g(a)h(pro-)396 + 698 y(cessor)36 b(needs)g(data)f(that)g(is)h(stored)f(or)g(computed)g + (by)g(another)h(processor)l(,)f(a)h(message)g(is)f(sent)396 + 828 y(between)24 b(the)g(tw)o(o.)g(If)g(synchronous)f(communication)f + (w)o(as)i(used,)g(the)g(sender)g(must)f(issue)g(an)h(e)o(x-)396 + 957 y(plicit)j(send,)h(and)g(the)g(recipient)g(must)f(issue)g(an)i(e)o + (xplicit)d(recei)n(v)o(e,)i(synchronizing)f(the)h(tw)o(o)f(pro-)396 + 1087 y(cessors.)h(Cheetah)g(permits)f(the)h(sender)g(to)f(put)g(and)h + (get)g(data)g(without)e(synchronizing)g(with)h(the)396 + 1217 y(recipient)h(processor)l(,)g(and)g(it)g(also)g(permits)f(in)l(v)n + (oking)f(functions)h(at)i(remote)f(sites)f(to)h(ensure)g(de-)396 + 1346 y(sired)c(data)g(is)g(up-to-date.)g(Thus,)f(out-of-order)h(e)n(v)n + (aluation)71 b(must)23 b(be)h(supported.)f(Out-of-order)396 + 1476 y(e)n(v)n(aluation)29 b(also)g(has)h(another)g(bene\002t:)g(Only)g + (computations)e(directly)h(or)h(indirectly)f(related)i(to)396 + 1605 y(v)n(alues)24 b(that)h(are)g(printed)f(need)h(occur)-5 + b(.)396 1784 y(Surrounding)28 b(a)i(patch)f(with)f Fp(guar)l(d)g(layer) + o(s)h Fu(can)g(help)f(reduce)i(interprocessor)e(communication.)396 + 1914 y(F)o(or)42 b(distrib)n(uted)e(computation,)g(each)i(container')-5 + b(s)41 b(domain)g(is)g(split)f(into)h(pieces)h(distrib)n(uted)396 + 2043 y(among)35 b(the)h(a)n(v)n(ailable)f(processors.)g(Frequently)-6 + b(,)35 b(computing)f(a)i(container)f(v)n(alue)g(is)g(local,)h(in-)396 + 2173 y(v)n(olving)30 b(just)f(the)i(v)n(alue)f(itself)g(and)h(a)g(fe)n + (w)g(neighbors,)f(b)n(ut)g(computing)f(a)i(v)n(alue)f(near)h(the)g + (edge)396 2302 y(of)25 b(a)h(processor')-5 b(s)24 b(domain)g(may)h + (require)g(kno)n(wing)e(a)j(fe)n(w)f(v)n(alues)f(from)g(a)i + (neighboring)d(domain.)396 2432 y(Guard)35 b(layers)g(permit)g(these)f + (v)n(alues)h(to)f(be)h(copied)g(locally)g(so)f(the)o(y)g(need)i(not)e + (be)h(repeatedly)396 2561 y(communicated.)396 2741 y(POOMA)42 + b(uses)f(the)h(PETE)g(Library)f(to)h(ensure)f(inner)h(loops)f(in)l(v)n + (olving)f(POOMA')-5 b(s)41 b(object-)396 2870 y(oriented)25 + b(containers)g(run)g(as)h(quickly)e(as)i(hand-coded)f(loops.)f(PETE)i + (\(the)f(Portable)g(Expression)396 3000 y(T)-7 b(emplate)37 + b(Engine\))h(uses)f(e)o(xpression-template)f(technology)g(to)i(con)l(v) + o(ert)f(data-parallel)g(state-)396 3129 y(ments)20 b(into)h(ef)n + (\002cient)g(loops)f(without)g(an)o(y)g(intermediate)g(computations.)f + (F)o(or)j(e)o(xample,)e(consider)396 3259 y(e)n(v)n(aluating)j(the)i + (statement)635 3568 y Fn(A)60 b(+=)f(-B)h(+)f(2)h(*)f(C;)396 + 3827 y Fu(where)25 b Fq(A)f Fu(and)h Fq(C)f Fu(are)h + Fq(vector)p Fu(s)c(and)j Fq(B)h Fu(is)f(a)g Fq(vector)p + Fu(.)e(Na\357v)o(e)i(e)n(v)n(alua-)396 3956 y(tion)i(might)g(introduce) + g(intermediaries)g(for)h Fq(-B)p Fu(,)f Fq(2*C)p Fu(,)g(and)h(their)f + (sum.)g(The)h(presence)h(of)e(these)396 4086 y(intermediaries)20 + b(in)h(inner)f(loops)g(can)i(measurably)e(slo)n(w)g(performance.)h(T)-8 + b(o)21 b(produce)g(a)g(loop)f(with-)396 4215 y(out)k(intermediaries,)f + (PETE)h(stores)g(each)g(e)o(xpression)f(as)i(a)f(parse)g(tree.)h(Using) + e(its)g(templates,)g(the)396 4345 y(parse)h(tree)g(is)f(con)l(v)o + (erted,)g(at)h(compile)f(time,)g(to)g(a)h(loop)f(directly)g(e)n(v)n + (aluating)e(each)k(component)d(of)396 4474 y(the)k(result)f(without)g + (computing)f(intermediate)h(v)n(alues.)g(F)o(or)h(e)o(xample,)f(the)h + (code)g(corresponding)396 4604 y(to)f(the)f(statement)g(abo)o(v)o(e)g + (is)635 4863 y Fn(vector::iterator)55 b(iterA)j(=)i + (A.begin\(\);)635 4992 y(vector::const_iterator)54 + b(iterB)59 b(=)g(B.begin\(\);)635 5122 y + (vector::const_iterator)53 b(iterC)59 b(=)h(C.begin\(\);)p + Black 3784 5547 a Fp(34)p Black eop + %%Page: 35 35 + 35 34 bop Black 2938 -132 a Fp(Chapter)25 b(2.)g(Intr)l(oduction)p + Black 635 51 a Fn(while)59 b(\(iterA)f(!=)i(A.end\(\)\))e({)755 + 180 y(*iterA)g(+=)i(-*iterB)e(+)h(2)h(*)g(*iterC;)755 + 310 y(++iterA;)e(++iterB;)g(++iterC;)635 439 y(})396 + 698 y Fu(Furthermore,)28 b(since)f(the)g(code)h(is)f(a)n(v)n(ailable)f + (at)i(compile)e(time,)g(not)h(run)h(time,)e(it)h(can)h(be)f(further)396 + 828 y(optimized,)d(e.g.,)g(mo)o(ving)f(an)o(y)h(loop-in)l(v)n(ariant)f + (code)i(out)g(of)f(the)h(loop.)-2 1122 y Fk(Used)38 b(f)m(or)i(Diver)n + (se)e(Set)h(of)g(Scienti\002c)f(Pr)m(ob)o(lems)396 1323 + y Fu(POOMA)c(has)g(been)g(used)g(to)f(solv)o(e)g(a)h(wide)g(v)n(ariety) + f(of)h(scienti\002c)g(problems.)f(Most)g(recently)-6 + b(,)396 1453 y(physicists)25 b(at)h(Los)h(Alamos)f(National)g + (Laboratory)53 b(implemented)25 b(an)i(entire)g(library)f(of)h(hydro-) + 396 1582 y(dynamics)f(codes)55 b(as)27 b(part)g(of)h(the)f(U.S.)g(go)o + (v)o(ernment')-5 b(s)25 b(science-based)i(Stockpile)g(Ste)n(w)o + (ardship)396 1712 y(Program.)48 b(Other)24 b(applications)f(include)g + (a)h(matrix)g(solv)o(er)l(,)e(an)j(accelerator)g(code)f(simulating)d + (the)396 1841 y(dynamics)31 b(of)g(high-intensity)f(char)n(ged)i + (particle)f(beams)h(in)f(linear)g(accelerators,)i(and)e(a)h(Monte)396 + 1971 y(Carlo)50 b(neutron)25 b(transport)f(code.)-2 2265 + y Fk(Easy)39 b(Implementation)396 2466 y Fu(POOMA')-5 + b(s)25 b(tools)g(greatly)g(reduce)h(the)f(time)g(to)g(implement)f + (applications.)g(As)i(we)f(noted)g(abo)o(v)o(e,)396 2596 + y(POOMA')-5 b(s)24 b(containers)g(and)g(e)o(xpression)g(syntax)f(model) + h(the)g(computational)f(models)g(and)h(algo-)396 2725 + y(rithms)29 b(most)h(frequently)g(found)g(in)g(scienti\002c)g + (programs.)g(These)g(high-le)n(v)o(el)f(tools)g(are)i(kno)n(wn)396 + 2855 y(to)f(be)g(correct)h(and)f(reduce)h(the)f(time)f(to)h(deb)n(ug)g + (programs.)f(Since)i(the)f(same)g(programs)g(run)g(on)396 + 2984 y(one)35 b(processor)g(and)g(multiple)e(processors,)h(programmers) + h(can)g(write)g(and)g(test)f(programs)g(us-)396 3114 + y(ing)c(their)f(one)h(or)g(tw)o(o-processor)g(personal)f(computers.)g + (W)l(ith)h(no)f(additional)g(w)o(ork,)h(the)f(same)396 + 3243 y(program)g(runs)f(on)h(computers)f(with)g(hundreds)g(of)h + (processors;)f(the)g(code)h(is)g(e)o(xactly)f(the)h(same,)396 + 3373 y(and)j(the)g(toolkit)e(automatically)g(handles)h(distrib)n(ution) + f(of)i(the)f(data,)h(all)g(data)f(communication,)396 + 3502 y(and)f(all)g(synchronization.)e(The)i(net)g(result)f(is)h(a)g + (signi\002cant)f(reduction)g(in)h(programming)e(time.)396 + 3632 y(F)o(or)g(e)o(xample,)g(a)g(team)g(of)g(tw)o(o)g(physicists)e + (and)i(tw)o(o)g(support)f(people)h(at)g(Los)g(Alamos)f(National)396 + 3761 y(Laboratory)58 b(implemented)27 b(a)i(suite)f(of)h(hydrodynamics) + e(k)o(ernels)58 b(in)28 b(six)g(months.)g(Their)g(w)o(ork)396 + 3891 y(replaced)i(a)g(pre)n(vious)e(suite)h(of)g(less-po)n(werful)f(k)o + (ernels)h(which)g(had)h(tak)o(en)f(sixteen)g(people)g(se)n(v-)396 + 4020 y(eral)c(years)f(to)f(implement)f(and)i(deb)n(ug.)g(Despite)f(not) + g(ha)n(v)o(e)h(pre)n(viously)e(implemented)g(an)o(y)h(of)h(the)396 + 4150 y(k)o(ernels,)29 b(the)o(y)g(implemented)e(one)i(ne)n(w)g(k)o + (ernel)h(e)n(v)o(ery)e(three)i(days,)f(including)e(the)i(time)g(to)g + (read)396 4279 y(the)c(corresponding)f(scienti\002c)g(papers!)-2 + 4782 y Fx(2.2.)47 b(POOMA)h(is)f(Open-Sour)m(ce)h(Software)396 + 4997 y Fu(The)19 b(POOMA)g(T)-8 b(oolkit)18 b(is)h(open-source)g(softw) + o(are.)g(An)o(yone)f(may)h(do)n(wnload,)f(read,)h(redistrib)n(ute,)396 + 5127 y(and)27 b(modify)e(the)h(POOMA)h(source)f(code.)h(If)g(an)g + (application)e(requires)h(a)h(specialized)f(container)p + Black 3784 5547 a Fp(35)p Black eop + %%Page: 36 36 + 36 35 bop Black 2938 -132 a Fp(Chapter)25 b(2.)g(Intr)l(oduction)p + Black 396 51 a Fu(not)35 b(already)g(a)n(v)n(ailable,)g(an)o(y)f + (programmer)h(may)g(add)g(it.)f(An)o(y)h(programmer)f(can)i(e)o(xtend)e + (it)h(to)396 180 y(solv)o(e)h(problems)g(in)h(pre)n(viously)e + (unsupported)h(domains.)g(Companies)g(using)h(the)f(toolkit)g(can)396 + 310 y(read)h(the)g(source)g(code)f(to)h(ensure)f(it)g(has)h(no)f + (security)g(holes.)g(It)h(may)f(be)h(do)n(wnloaded)e(at)i(no)396 + 439 y(cost)d(and)h(used)f(for)g(perpetuity)-6 b(.)33 + b(There)i(are)g(no)f(annual)h(licenses)f(and)g(no)g(on-going)f(costs.)h + (By)396 569 y(k)o(eeping)29 b(their)f(o)n(wn)g(copies,)h(companies)f + (are)i(guaranteed)f(the)g(softw)o(are)g(will)f(ne)n(v)o(er)g(disappear) + -5 b(.)396 698 y(In)25 b(summary)-6 b(,)23 b(the)i(POOMA)g(T)-8 + b(oolkit)23 b(is)h(lo)n(w-risk)g(softw)o(are.)-2 1201 + y Fx(2.3.)47 b(Histor)r(y)g(of)i(POOMA)396 1416 y Fu(The)32 + b(POOMA)g(T)-8 b(oolkit)30 b(w)o(as)i(de)n(v)o(eloped)f(at)h(Los)f + (Alamos)g(National)g(Laboratory)h(to)f(assist)g(nu-)396 + 1546 y(clear)e(fusion)55 b(and)27 b(\002ssion)55 b(research.)29 + b(In)f(1994,)f(the)g(toolkit)g(gre)n(w)g(out)g(of)h(the)g + (Object-Oriented)396 1675 y(P)o(article)g(Simulation)53 + b(Class)27 b(Library)g(de)n(v)o(eloped)f(for)i(particle-in-cell)f + (simulations.)e(The)i(goals)396 1805 y(of)d(the)f(Frame)n(w)o(ork,)h + (as)f(it)g(w)o(as)h(called)f(at)h(the)f(time,)g(were)h(dri)n(v)o(en)f + (by)g(the)g(Numerical)g(T)-8 b(okamak')j(s)421 1934 y(\223P)o(arallel) + 25 b(Platform)g(P)o(aradox\224:)496 2223 y Fl(The)19 + b(a)n(v)o(erage)g(time)g(required)f(to)i(implement)e(a)i + (moderate-sized)e(application)g(on)i(a)f(parallel)g(computer)496 + 2340 y(architecture)i(is)h(equi)n(v)n(alent)e(to)i(the)g(half-life)g + (of)g(the)g(latest)f(parallel)h(supercomputer)-5 b(.)465 + 2519 y Fu(The)23 b(frame)n(w)o(ork')-5 b(s)22 b(goal)g(of)h(being)f + (able)h(to)g(quickly)e(write)i(ef)n(\002cient)g(scienti\002c)f(code)h + (that)g(could)396 2649 y(be)g(run)f(on)g(a)g(wide)g(v)n(ariety)g(of)g + (platforms)f(remains)h(unchanged)g(today)-6 b(.)21 b(De)n(v)o + (elopment,)f(mainly)h(at)396 2778 y(the)e(Adv)n(anced)g(Computing)f + (Laboratory)38 b(at)20 b(Los)e(Alamos,)h(proceeded)g(rapidly)-6 + b(.)18 b(A)i(matrix)e(solv)o(er)396 2908 y(application)23 + b(w)o(as)g(written)g(using)g(the)g(frame)n(w)o(ork.)g(Support)g(for)h + (hydrodynamics,)45 b(Monte)23 b(Carlo)396 3037 y(simulations,)47 + b(and)25 b(molecular)g(dynamics)48 b(modeling)23 b(soon)i(follo)n(wed.) + 396 3216 y(By)35 b(1998,)f(POOMA)g(w)o(as)h(part)f(of)h(the)f(U.S.)g + (Department)g(of)h(Ener)n(gy')-5 b(s)68 b(Accelerated)36 + b(Strate-)396 3346 y(gic)27 b(Computing)e(Initiati)n(v)o(e)g(\(ASCI\).) + 81 b(The)27 b(Comprehensi)n(v)o(e)e(T)-7 b(est)26 b(Ban)i(T)m(reaty)53 + b(forbid)26 b(nuclear)396 3475 y(weapons)33 b(testing)f(so)h(the)o(y)f + (were)i(instead)e(simulated)g(using)g(computers.)g(ASCI')-5 + b(s)34 b(goal)f(w)o(as)g(to)396 3605 y(radically)22 b(adv)n(ance)g(the) + f(state)h(of)g(the)g(art)g(in)f(high-performance)h(computing)e(and)i + (numerical)f(sim-)396 3735 y(ulations)31 b(so)g(the)h(nuclear)g(weapon) + f(simulations)f(could)h(use)h(100-tera\003op)g(parallel)f(computers.) + 396 3864 y(A)f(linear)g(accelerator)i(code)e(linac)g(and)g(a)g(Monte)f + (Carlo)i(neutron)e(transport)h(code)g(MC++)h(were)396 + 3994 y(among)24 b(the)h(codes)g(written.)396 4173 y(POOMA)d(2)f(in)l(v) + n(olv)o(ed)f(a)i(ne)n(w)f(conceptual)h(frame)n(w)o(ork)f(and)h(a)g + (complete)f(re)n(writing)f(of)i(the)f(source)396 4302 + y(code)31 b(to)e(impro)o(v)o(e)f(performance.)j(The)f + Fq(Array)f Fu(class)60 b(w)o(as)30 b(introduced)f(with)h(its)f(use)h + (of)g Fq(En-)396 4432 y(gine)p Fu(s,)58 b(separating)30 + b(container)f(use)h(from)f(container)g(storage.)h(A)f(ne)n(w)h + (asynchronous)e(sched-)396 4561 y(uler)36 b(permitted)e(out-of-order)i + (e)o(x)o(ecution)69 b(to)35 b(impro)o(v)o(e)f(cache)i(coherenc)o(y)-6 + b(.)35 b(Incorporating)f(the)396 4691 y(Portable)g(Expression)f(T)-7 + b(emplate)33 b(Engine)g(\(PETE\))68 b(permitted)32 b(f)o(aster)i(loop)f + (e)o(x)o(ecution.)f(Soon,)396 4820 y(container)d(vie)n(ws)56 + b(and)29 b Fq(ConstantFunction)53 b Fu(and)29 b Fq(IndexFunction)54 + b(Engine)p Fu(s)396 4950 y(were)30 b(added.)e(Release)i(2.1.0)e + (included)g Fq(Field)p Fu(s)56 b(with)27 b(their)i(spatial)f(e)o(xtent) + f(and)i Fq(Dynami-)396 5079 y(cArray)p Fu(s)65 b(with)33 + b(the)g(ability)f(to)h(dynamically)e(change)j(domain)e(size.)h(Support) + g(for)h(particles)p Black 3781 5547 a Fp(36)p Black eop + %%Page: 37 37 + 37 36 bop Black 2938 -132 a Fp(Chapter)25 b(2.)g(Intr)l(oduction)p + Black 396 51 a Fu(and)30 b(their)f(interaction)f(with)h + Fq(Field)p Fu(s)f(were)i(added.)f(The)g(POOMA)h(messaging)e + (implementa-)396 180 y(tion)g(w)o(as)g(re)n(vised)g(in)g(release)h + (2.3.0.)f(Use)h(of)f(the)g(Cheetah)i(Library)56 b(separated)29 + b(POOMA)g(from)396 310 y(the)k(actual)g(messaging)f(library)g(used,)h + (and)g(support)f(for)h(applications)e(running)h(on)h(clusters)f(of)396 + 439 y(computers)d(w)o(as)h(added.)f(CodeSourcery)-6 b(,)30 + b(LLC)g(\()p Ft(http://www.codesourcery.)q(com/)q Fu(\),)65 + b(and)396 569 y(Proximation,)35 b(LLC)h(\()p Ft + (http://www.proximation.com/)q Fu(\),)77 b(took)35 b(o)o(v)o(er)g + (POOMA)h(de)n(v)o(elop-)396 698 y(ment)g(from)f(Los)h(Alamos)f + (National)g(Laboratory)-6 b(.)35 b(During)g(the)h(past)f(tw)o(o)h + (years,)g(the)f Fq(Field)396 828 y Fu(abstraction)47 + b(and)24 b(implementation)d(w)o(as)j(impro)o(v)o(ed)e(to)h(increase)h + (its)f(\003e)o(xibility)-6 b(,)22 b(add)h(support)g(for)396 + 957 y(multiple)28 b(v)n(alues)g(and)h(materials)f(in)h(the)g(same)f + (cell,)h(and)g(permit)g(lazy)g(e)n(v)n(aluation.)56 b(Simultane-)396 + 1087 y(ously)-6 b(,)23 b(the)i(e)o(x)o(ecution)e(speed)i(of)g(the)g + (inner)f(loops)g(w)o(as)h(greatly)g(increased.)p Black + 3780 5547 a Fp(37)p Black eop + %%Page: 38 38 + 38 37 bop Black Black -2 119 a Fy(Chapter)58 b(3.)f(A)h(T)-19 + b(utorial)59 b(Intr)l(oduction)396 416 y Fu(POOMA)35 + b(pro)o(vides)f(dif)n(ferent)g(containers)g(and)h(processor)g + (con\002gurations)f(and)h(supports)e(dif-)396 545 y(ferent)k + (implementation)e(styles,)g(as)i(described)g(in)f(Section)h(2.1.)f(In)h + (this)f(chapter)l(,)g(we)h(present)396 675 y(se)n(v)o(eral)d(dif)n + (ferent)h(implementations)d(of)j(the)g Fq(Doof2d)e Fu(tw)o + (o-dimensional)g(dif)n(fusion)g(simula-)396 804 y(tion)24 + b(program:)p Black 396 1244 a Fs(\225)p Black 72 w Fu(a)38 + b(C-style)g(implementation)d(omitting)h(an)o(y)h(use)h(of)g(POOMA)f + (and)h(computing)e(each)j(array)496 1373 y(element)24 + b(indi)n(vidually)-6 b(,)p Black 396 1503 a Fs(\225)p + Black 72 w Fu(a)25 b(POOMA)g Fq(Array)e Fu(implementation)g(computing)g + (each)i(array)h(element)e(indi)n(vidually)-6 b(,)p Black + 396 1632 a Fs(\225)p Black 72 w Fu(a)25 b(POOMA)g Fq(Array)e + Fu(implementation)g(using)h(data-parallel)g(statements,)p + Black 396 1762 a Fs(\225)p Black 72 w Fu(a)d(POOMA)g + Fq(Array)g Fu(implementation)d(using)i(stencils,)g(which)h(support)f + (local)h(computations,)p Black 396 1891 a Fs(\225)p Black + 72 w Fu(a)e(stencil-based)f(POOMA)h Fq(Array)f Fu(implementation)f + (supporting)g(computation)g(on)i(multiple)496 2021 y(processors)p + Black 396 2150 a Fs(\225)p Black 72 w Fu(a)25 b(POOMA)g + Fq(Field)e Fu(implementation)g(using)h(data-parallel)g(statements,)g + (and)p Black 396 2280 a Fs(\225)p Black 72 w Fu(a)h(data-parallel)g + (POOMA)g Fq(Field)e Fu(implementation)g(for)i(multiprocessor)e(e)o(x)o + (ecution.)396 2459 y(These)44 b(illustrate)f(the)g Fq(Array)p + Fu(,)g Fq(Field)p Fu(,)f Fq(Engine)p Fu(,)g(layout,)h(mesh,)g(and)h + Fq(Domain)e Fu(data)396 2589 y(types.)19 b(The)o(y)g(also)g(illustrate) + f(v)n(arious)h(immediate)f(computation)f(styles)i(\(element-wise)g + (accesses,)396 2718 y(data-parallel)k(e)o(xpressions,)d(and)i(stencil)g + (computation\))f(and)h(v)n(arious)f(processor)h(con\002gurations)396 + 2848 y(\(one)j(processor)g(and)g(multiple)e(processors\).)396 + 3027 y(The)g Fq(Doof2d)e Fu(dif)n(fusion)f(program)j(starts)e(with)h(a) + h(tw)o(o-dimensional)d(grid)i(of)g(v)n(alues.)g(T)-8 + b(o)22 b(model)396 3157 y(an)f(initial)f(density)-6 b(,)19 + b(all)h(grid)h(v)n(alues)f(are)h(zero)h(e)o(xcept)e(for)h(one)g + (nonzero)g(v)n(alue)f(in)h(the)f(center)-5 b(.)21 b(Each)396 + 3286 y(a)n(v)o(eraging,)k(each)g(grid)g(element,)g(e)o(xcept)f(the)h + (outermost)f(ones,)h(updates)f(its)h(v)n(alue)f(by)h(a)n(v)o(eraging) + 396 3416 y(its)30 b(v)n(alue)f(and)h(its)f(eight)h(neighbors.)e(T)-8 + b(o)30 b(a)n(v)n(oid)g(o)o(v)o(erwriting)e(grid)h(v)n(alues)h(before)g + (all)g(their)g(uses)396 3545 y(occur)l(,)36 b(we)f(use)g(tw)o(o)f + (arrays,)i(reading)e(the)h(\002rst)g(and)g(writing)f(the)h(second)g + (and)g(then)f(re)n(v)o(ersing)396 3675 y(their)25 b(roles)f(within)g + (each)h(iteration.)396 3854 y(W)-8 b(e)25 b(illustrate)e(the)h(a)n(v)o + (eragings)g(in)g(Figure)g(3-1.)g(Initially)-6 b(,)23 + b(only)g(the)h(center)h(element)f(has)g(nonzero)396 3984 + y(v)n(alue.)d(T)-8 b(o)20 b(form)h(the)g(\002rst)g(a)n(v)o(eraging,)g + (each)g(element')-5 b(s)20 b(ne)n(w)h(v)n(alue)f(equals)h(the)g(a)n(v)o + (erage)g(of)g(its)f(and)396 4113 y(its)g(neighbors')g(pre)n(vious)g(v)n + (alues.)g(Thus,)g(the)h(initial)e(nonzero)i(v)n(alue)f(spreads)h(to)g + (a)g(three-by-three)396 4243 y(grid.)i(The)g(a)n(v)o(eraging)f + (continues,)g(spreading)h(to)f(a)i(\002)n(v)o(e-by-\002)n(v)o(e)e(grid) + g(of)h(nonzero)g(v)n(alues.)g(V)-11 b(alues)396 4372 + y(in)25 b(the)f(outermost)g(grid)g(cells)h(are)g(al)o(w)o(ays)g(zero.)p + Black 3784 5617 a Fp(38)p Black eop + %%Page: 39 39 + 39 38 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 396 51 a Fr(Figur)n(e)i(3-1.)e + Fo(Doof2d)g Fr(A)-10 b(v)o(eragings)1390 1787 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 1390 + 1787 a @beginspecial -1 @llx -1 @lly 179 @urx 193 @ury + 1800 @rwi @setspecial + %%BeginDocument: figures/doof2d.201 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -1 -1 179 193 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Times-Roman Courier + /ptmr8r /Times-Roman def + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath 0 0 moveto + 25.51163 0 lineto + 25.51163 25.51163 lineto + 0 25.51163 lineto + closepath stroke + newpath 0 25.51163 moveto + 25.51163 25.51163 lineto + 25.51163 51.02325 lineto + 0 51.02325 lineto + closepath stroke + newpath 0 51.02325 moveto + 25.51163 51.02325 lineto + 25.51163 76.53488 lineto + 0 76.53488 lineto + closepath stroke + newpath 0 76.53488 moveto + 25.51163 76.53488 lineto + 25.51163 102.04651 lineto + 0 102.04651 lineto + closepath stroke + newpath 0 102.04651 moveto + 25.51163 102.04651 lineto + 25.51163 127.55814 lineto + 0 127.55814 lineto + closepath stroke + newpath 0 127.55814 moveto + 25.51163 127.55814 lineto + 25.51163 153.06976 lineto + 0 153.06976 lineto + closepath stroke + newpath 0 153.06976 moveto + 25.51163 153.06976 lineto + 25.51163 178.58139 lineto + 0 178.58139 lineto + closepath stroke + newpath 25.51163 0 moveto + 51.02325 0 lineto + 51.02325 25.51163 lineto + 25.51163 25.51163 lineto + closepath stroke + newpath 25.51163 25.51163 moveto + 51.02325 25.51163 lineto + 51.02325 51.02325 lineto + 25.51163 51.02325 lineto + closepath stroke + newpath 25.51163 51.02325 moveto + 51.02325 51.02325 lineto + 51.02325 76.53488 lineto + 25.51163 76.53488 lineto + closepath stroke + newpath 25.51163 76.53488 moveto + 51.02325 76.53488 lineto + 51.02325 102.04651 lineto + 25.51163 102.04651 lineto + closepath stroke + newpath 25.51163 102.04651 moveto + 51.02325 102.04651 lineto + 51.02325 127.55814 lineto + 25.51163 127.55814 lineto + closepath stroke + newpath 25.51163 127.55814 moveto + 51.02325 127.55814 lineto + 51.02325 153.06976 lineto + 25.51163 153.06976 lineto + closepath stroke + newpath 25.51163 153.06976 moveto + 51.02325 153.06976 lineto + 51.02325 178.58139 lineto + 25.51163 178.58139 lineto + closepath stroke + newpath 51.02325 0 moveto + 76.53488 0 lineto + 76.53488 25.51163 lineto + 51.02325 25.51163 lineto + closepath stroke + newpath 51.02325 25.51163 moveto + 76.53488 25.51163 lineto + 76.53488 51.02325 lineto + 51.02325 51.02325 lineto + closepath stroke + newpath 51.02325 51.02325 moveto + 76.53488 51.02325 lineto + 76.53488 76.53488 lineto + 51.02325 76.53488 lineto + closepath stroke + newpath 51.02325 76.53488 moveto + 76.53488 76.53488 lineto + 76.53488 102.04651 lineto + 51.02325 102.04651 lineto + closepath stroke + newpath 51.02325 102.04651 moveto + 76.53488 102.04651 lineto + 76.53488 127.55814 lineto + 51.02325 127.55814 lineto + closepath stroke + newpath 51.02325 127.55814 moveto + 76.53488 127.55814 lineto + 76.53488 153.06976 lineto + 51.02325 153.06976 lineto + closepath stroke + newpath 51.02325 153.06976 moveto + 76.53488 153.06976 lineto + 76.53488 178.58139 lineto + 51.02325 178.58139 lineto + closepath stroke + newpath 76.53488 0 moveto + 102.04651 0 lineto + 102.04651 25.51163 lineto + 76.53488 25.51163 lineto + closepath stroke + newpath 76.53488 25.51163 moveto + 102.04651 25.51163 lineto + 102.04651 51.02325 lineto + 76.53488 51.02325 lineto + closepath stroke + newpath 76.53488 51.02325 moveto + 102.04651 51.02325 lineto + 102.04651 76.53488 lineto + 76.53488 76.53488 lineto + closepath stroke + newpath 76.53488 76.53488 moveto + 102.04651 76.53488 lineto + 102.04651 102.04651 lineto + 76.53488 102.04651 lineto + closepath stroke + newpath 76.53488 102.04651 moveto + 102.04651 102.04651 lineto + 102.04651 127.55814 lineto + 76.53488 127.55814 lineto + closepath stroke + newpath 76.53488 127.55814 moveto + 102.04651 127.55814 lineto + 102.04651 153.06976 lineto + 76.53488 153.06976 lineto + closepath stroke + newpath 76.53488 153.06976 moveto + 102.04651 153.06976 lineto + 102.04651 178.58139 lineto + 76.53488 178.58139 lineto + closepath stroke + newpath 102.04651 0 moveto + 127.55814 0 lineto + 127.55814 25.51163 lineto + 102.04651 25.51163 lineto + closepath stroke + newpath 102.04651 25.51163 moveto + 127.55814 25.51163 lineto + 127.55814 51.02325 lineto + 102.04651 51.02325 lineto + closepath stroke + newpath 102.04651 51.02325 moveto + 127.55814 51.02325 lineto + 127.55814 76.53488 lineto + 102.04651 76.53488 lineto + closepath stroke + newpath 102.04651 76.53488 moveto + 127.55814 76.53488 lineto + 127.55814 102.04651 lineto + 102.04651 102.04651 lineto + closepath stroke + newpath 102.04651 102.04651 moveto + 127.55814 102.04651 lineto + 127.55814 127.55814 lineto + 102.04651 127.55814 lineto + closepath stroke + newpath 102.04651 127.55814 moveto + 127.55814 127.55814 lineto + 127.55814 153.06976 lineto + 102.04651 153.06976 lineto + closepath stroke + newpath 102.04651 153.06976 moveto + 127.55814 153.06976 lineto + 127.55814 178.58139 lineto + 102.04651 178.58139 lineto + closepath stroke + newpath 127.55814 0 moveto + 153.06976 0 lineto + 153.06976 25.51163 lineto + 127.55814 25.51163 lineto + closepath stroke + newpath 127.55814 25.51163 moveto + 153.06976 25.51163 lineto + 153.06976 51.02325 lineto + 127.55814 51.02325 lineto + closepath stroke + newpath 127.55814 51.02325 moveto + 153.06976 51.02325 lineto + 153.06976 76.53488 lineto + 127.55814 76.53488 lineto + closepath stroke + newpath 127.55814 76.53488 moveto + 153.06976 76.53488 lineto + 153.06976 102.04651 lineto + 127.55814 102.04651 lineto + closepath stroke + newpath 127.55814 102.04651 moveto + 153.06976 102.04651 lineto + 153.06976 127.55814 lineto + 127.55814 127.55814 lineto + closepath stroke + newpath 127.55814 127.55814 moveto + 153.06976 127.55814 lineto + 153.06976 153.06976 lineto + 127.55814 153.06976 lineto + closepath stroke + newpath 127.55814 153.06976 moveto + 153.06976 153.06976 lineto + 153.06976 178.58139 lineto + 127.55814 178.58139 lineto + closepath stroke + newpath 153.06976 0 moveto + 178.58139 0 lineto + 178.58139 25.51163 lineto + 153.06976 25.51163 lineto + closepath stroke + newpath 153.06976 25.51163 moveto + 178.58139 25.51163 lineto + 178.58139 51.02325 lineto + 153.06976 51.02325 lineto + closepath stroke + newpath 153.06976 51.02325 moveto + 178.58139 51.02325 lineto + 178.58139 76.53488 lineto + 153.06976 76.53488 lineto + closepath stroke + newpath 153.06976 76.53488 moveto + 178.58139 76.53488 lineto + 178.58139 102.04651 lineto + 153.06976 102.04651 lineto + closepath stroke + newpath 153.06976 102.04651 moveto + 178.58139 102.04651 lineto + 178.58139 127.55814 lineto + 153.06976 127.55814 lineto + closepath stroke + newpath 153.06976 127.55814 moveto + 178.58139 127.55814 lineto + 178.58139 153.06976 lineto + 153.06976 153.06976 lineto + closepath stroke + newpath 153.06976 153.06976 moveto + 178.58139 153.06976 lineto + 178.58139 178.58139 lineto + 153.06976 178.58139 lineto + closepath stroke + 6.52916 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 60.45157 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 85.9632 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 111.47482 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 60.45157 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 85.9632 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 111.47482 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 57.55241 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 57.55241 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 57.55241 60.45157 moveto + (0.0) ptmr8r 9.96265 fshow + 57.55241 85.9632 moveto + (0.0) ptmr8r 9.96265 fshow + 57.55241 111.47482 moveto + (0.0) ptmr8r 9.96265 fshow + 57.55241 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 57.55241 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 83.06404 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 83.06404 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 83.06404 60.45157 moveto + (0.0) ptmr8r 9.96265 fshow + 75.59204 85.9632 moveto + (1000.0) ptmr8r 9.96265 fshow + 83.06404 111.47482 moveto + (0.0) ptmr8r 9.96265 fshow + 83.06404 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 83.06404 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 108.57567 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 108.57567 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 108.57567 60.45157 moveto + (0.0) ptmr8r 9.96265 fshow + 108.57567 85.9632 moveto + (0.0) ptmr8r 9.96265 fshow + 108.57567 111.47482 moveto + (0.0) ptmr8r 9.96265 fshow + 108.57567 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 108.57567 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 60.45157 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 85.9632 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 111.47482 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 60.45157 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 85.9632 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 111.47482 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 17.44095 184.16959 moveto + (Array) ptmr8r 11.95514 fshow + 48.30894 184.16959 moveto + (b) pcrr8r 11.95514 fshow + 55.48206 184.16959 moveto + (:) ptmr8r 11.95514 fshow + 62.51155 184.16959 moveto + (Initial) ptmr8r 11.95514 fshow + 94.06065 184.16959 moveto + (Configuration) ptmr8r 11.95514 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 1390 1787 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 1390 1787 a 1390 3404 a + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 1390 + 3404 a @beginspecial -1 @llx -1 @lly 179 @urx 193 @ury + 1800 @rwi @setspecial + %%BeginDocument: figures/doof2d.202 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -1 -1 179 193 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Times-Roman Courier + /ptmr8r /Times-Roman def + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath 0 0 moveto + 25.51163 0 lineto + 25.51163 25.51163 lineto + 0 25.51163 lineto + closepath stroke + newpath 0 25.51163 moveto + 25.51163 25.51163 lineto + 25.51163 51.02325 lineto + 0 51.02325 lineto + closepath stroke + newpath 0 51.02325 moveto + 25.51163 51.02325 lineto + 25.51163 76.53488 lineto + 0 76.53488 lineto + closepath stroke + newpath 0 76.53488 moveto + 25.51163 76.53488 lineto + 25.51163 102.04651 lineto + 0 102.04651 lineto + closepath stroke + newpath 0 102.04651 moveto + 25.51163 102.04651 lineto + 25.51163 127.55814 lineto + 0 127.55814 lineto + closepath stroke + newpath 0 127.55814 moveto + 25.51163 127.55814 lineto + 25.51163 153.06976 lineto + 0 153.06976 lineto + closepath stroke + newpath 0 153.06976 moveto + 25.51163 153.06976 lineto + 25.51163 178.58139 lineto + 0 178.58139 lineto + closepath stroke + newpath 25.51163 0 moveto + 51.02325 0 lineto + 51.02325 25.51163 lineto + 25.51163 25.51163 lineto + closepath stroke + newpath 25.51163 25.51163 moveto + 51.02325 25.51163 lineto + 51.02325 51.02325 lineto + 25.51163 51.02325 lineto + closepath stroke + newpath 25.51163 51.02325 moveto + 51.02325 51.02325 lineto + 51.02325 76.53488 lineto + 25.51163 76.53488 lineto + closepath stroke + newpath 25.51163 76.53488 moveto + 51.02325 76.53488 lineto + 51.02325 102.04651 lineto + 25.51163 102.04651 lineto + closepath stroke + newpath 25.51163 102.04651 moveto + 51.02325 102.04651 lineto + 51.02325 127.55814 lineto + 25.51163 127.55814 lineto + closepath stroke + newpath 25.51163 127.55814 moveto + 51.02325 127.55814 lineto + 51.02325 153.06976 lineto + 25.51163 153.06976 lineto + closepath stroke + newpath 25.51163 153.06976 moveto + 51.02325 153.06976 lineto + 51.02325 178.58139 lineto + 25.51163 178.58139 lineto + closepath stroke + newpath 51.02325 0 moveto + 76.53488 0 lineto + 76.53488 25.51163 lineto + 51.02325 25.51163 lineto + closepath stroke + newpath 51.02325 25.51163 moveto + 76.53488 25.51163 lineto + 76.53488 51.02325 lineto + 51.02325 51.02325 lineto + closepath stroke + newpath 51.02325 51.02325 moveto + 76.53488 51.02325 lineto + 76.53488 76.53488 lineto + 51.02325 76.53488 lineto + closepath stroke + newpath 51.02325 76.53488 moveto + 76.53488 76.53488 lineto + 76.53488 102.04651 lineto + 51.02325 102.04651 lineto + closepath stroke + newpath 51.02325 102.04651 moveto + 76.53488 102.04651 lineto + 76.53488 127.55814 lineto + 51.02325 127.55814 lineto + closepath stroke + newpath 51.02325 127.55814 moveto + 76.53488 127.55814 lineto + 76.53488 153.06976 lineto + 51.02325 153.06976 lineto + closepath stroke + newpath 51.02325 153.06976 moveto + 76.53488 153.06976 lineto + 76.53488 178.58139 lineto + 51.02325 178.58139 lineto + closepath stroke + newpath 76.53488 0 moveto + 102.04651 0 lineto + 102.04651 25.51163 lineto + 76.53488 25.51163 lineto + closepath stroke + newpath 76.53488 25.51163 moveto + 102.04651 25.51163 lineto + 102.04651 51.02325 lineto + 76.53488 51.02325 lineto + closepath stroke + newpath 76.53488 51.02325 moveto + 102.04651 51.02325 lineto + 102.04651 76.53488 lineto + 76.53488 76.53488 lineto + closepath stroke + newpath 76.53488 76.53488 moveto + 102.04651 76.53488 lineto + 102.04651 102.04651 lineto + 76.53488 102.04651 lineto + closepath stroke + newpath 76.53488 102.04651 moveto + 102.04651 102.04651 lineto + 102.04651 127.55814 lineto + 76.53488 127.55814 lineto + closepath stroke + newpath 76.53488 127.55814 moveto + 102.04651 127.55814 lineto + 102.04651 153.06976 lineto + 76.53488 153.06976 lineto + closepath stroke + newpath 76.53488 153.06976 moveto + 102.04651 153.06976 lineto + 102.04651 178.58139 lineto + 76.53488 178.58139 lineto + closepath stroke + newpath 102.04651 0 moveto + 127.55814 0 lineto + 127.55814 25.51163 lineto + 102.04651 25.51163 lineto + closepath stroke + newpath 102.04651 25.51163 moveto + 127.55814 25.51163 lineto + 127.55814 51.02325 lineto + 102.04651 51.02325 lineto + closepath stroke + newpath 102.04651 51.02325 moveto + 127.55814 51.02325 lineto + 127.55814 76.53488 lineto + 102.04651 76.53488 lineto + closepath stroke + newpath 102.04651 76.53488 moveto + 127.55814 76.53488 lineto + 127.55814 102.04651 lineto + 102.04651 102.04651 lineto + closepath stroke + newpath 102.04651 102.04651 moveto + 127.55814 102.04651 lineto + 127.55814 127.55814 lineto + 102.04651 127.55814 lineto + closepath stroke + newpath 102.04651 127.55814 moveto + 127.55814 127.55814 lineto + 127.55814 153.06976 lineto + 102.04651 153.06976 lineto + closepath stroke + newpath 102.04651 153.06976 moveto + 127.55814 153.06976 lineto + 127.55814 178.58139 lineto + 102.04651 178.58139 lineto + closepath stroke + newpath 127.55814 0 moveto + 153.06976 0 lineto + 153.06976 25.51163 lineto + 127.55814 25.51163 lineto + closepath stroke + newpath 127.55814 25.51163 moveto + 153.06976 25.51163 lineto + 153.06976 51.02325 lineto + 127.55814 51.02325 lineto + closepath stroke + newpath 127.55814 51.02325 moveto + 153.06976 51.02325 lineto + 153.06976 76.53488 lineto + 127.55814 76.53488 lineto + closepath stroke + newpath 127.55814 76.53488 moveto + 153.06976 76.53488 lineto + 153.06976 102.04651 lineto + 127.55814 102.04651 lineto + closepath stroke + newpath 127.55814 102.04651 moveto + 153.06976 102.04651 lineto + 153.06976 127.55814 lineto + 127.55814 127.55814 lineto + closepath stroke + newpath 127.55814 127.55814 moveto + 153.06976 127.55814 lineto + 153.06976 153.06976 lineto + 127.55814 153.06976 lineto + closepath stroke + newpath 127.55814 153.06976 moveto + 153.06976 153.06976 lineto + 153.06976 178.58139 lineto + 127.55814 178.58139 lineto + closepath stroke + newpath 153.06976 0 moveto + 178.58139 0 lineto + 178.58139 25.51163 lineto + 153.06976 25.51163 lineto + closepath stroke + newpath 153.06976 25.51163 moveto + 178.58139 25.51163 lineto + 178.58139 51.02325 lineto + 153.06976 51.02325 lineto + closepath stroke + newpath 153.06976 51.02325 moveto + 178.58139 51.02325 lineto + 178.58139 76.53488 lineto + 153.06976 76.53488 lineto + closepath stroke + newpath 153.06976 76.53488 moveto + 178.58139 76.53488 lineto + 178.58139 102.04651 lineto + 153.06976 102.04651 lineto + closepath stroke + newpath 153.06976 102.04651 moveto + 178.58139 102.04651 lineto + 178.58139 127.55814 lineto + 153.06976 127.55814 lineto + closepath stroke + newpath 153.06976 127.55814 moveto + 178.58139 127.55814 lineto + 178.58139 153.06976 lineto + 153.06976 153.06976 lineto + closepath stroke + newpath 153.06976 153.06976 moveto + 178.58139 153.06976 lineto + 178.58139 178.58139 lineto + 153.06976 178.58139 lineto + closepath stroke + 6.52916 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 60.45157 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 85.9632 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 111.47482 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 60.45157 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 85.9632 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 111.47482 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 60.45157 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 85.9632 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 111.47482 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 60.45157 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 85.9632 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 111.47482 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 57.55241 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 83.06404 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 108.57567 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 57.55241 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 83.06404 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 108.57567 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 57.55241 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 83.06404 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 108.57567 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 57.55241 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 83.06404 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 108.57567 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 52.57112 60.43912 moveto + (111.1) ptmr8r 9.96265 fshow + 52.57112 85.95074 moveto + (111.1) ptmr8r 9.96265 fshow + 52.57112 111.46237 moveto + (111.1) ptmr8r 9.96265 fshow + 78.08275 60.43912 moveto + (111.1) ptmr8r 9.96265 fshow + 78.08275 85.95074 moveto + (111.1) ptmr8r 9.96265 fshow + 78.08275 111.46237 moveto + (111.1) ptmr8r 9.96265 fshow + 103.59438 60.43912 moveto + (111.1) ptmr8r 9.96265 fshow + 103.59438 85.95074 moveto + (111.1) ptmr8r 9.96265 fshow + 103.59438 111.46237 moveto + (111.1) ptmr8r 9.96265 fshow + 9.36519 184.16959 moveto + (Array) ptmr8r 11.95514 fshow + 40.23318 184.16959 moveto + (a) pcrr8r 11.95514 fshow + 47.4063 184.16959 moveto + (:) ptmr8r 11.95514 fshow + 54.43579 184.16959 moveto + (After) ptmr8r 11.95514 fshow + 82.64969 184.16959 moveto + (the) ptmr8r 11.95514 fshow + 100.24748 184.16959 moveto + (first) ptmr8r 11.95514 fshow + 122.49559 184.16959 moveto + (a) ptmr8r 11.95514 fshow + 127.56459 184.16959 moveto + (v) ptmr8r 11.95514 fshow + 133.36299 184.16959 moveto + (eraging) ptmr8r 11.95514 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 1390 3404 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 1390 3404 a 1390 5021 a + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 1390 + 5021 a @beginspecial -1 @llx -1 @lly 179 @urx 193 @ury + 1800 @rwi @setspecial + %%BeginDocument: figures/doof2d.203 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -1 -1 179 193 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Times-Roman Courier + /ptmr8r /Times-Roman def + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath 0 0 moveto + 25.51163 0 lineto + 25.51163 25.51163 lineto + 0 25.51163 lineto + closepath stroke + newpath 0 25.51163 moveto + 25.51163 25.51163 lineto + 25.51163 51.02325 lineto + 0 51.02325 lineto + closepath stroke + newpath 0 51.02325 moveto + 25.51163 51.02325 lineto + 25.51163 76.53488 lineto + 0 76.53488 lineto + closepath stroke + newpath 0 76.53488 moveto + 25.51163 76.53488 lineto + 25.51163 102.04651 lineto + 0 102.04651 lineto + closepath stroke + newpath 0 102.04651 moveto + 25.51163 102.04651 lineto + 25.51163 127.55814 lineto + 0 127.55814 lineto + closepath stroke + newpath 0 127.55814 moveto + 25.51163 127.55814 lineto + 25.51163 153.06976 lineto + 0 153.06976 lineto + closepath stroke + newpath 0 153.06976 moveto + 25.51163 153.06976 lineto + 25.51163 178.58139 lineto + 0 178.58139 lineto + closepath stroke + newpath 25.51163 0 moveto + 51.02325 0 lineto + 51.02325 25.51163 lineto + 25.51163 25.51163 lineto + closepath stroke + newpath 25.51163 25.51163 moveto + 51.02325 25.51163 lineto + 51.02325 51.02325 lineto + 25.51163 51.02325 lineto + closepath stroke + newpath 25.51163 51.02325 moveto + 51.02325 51.02325 lineto + 51.02325 76.53488 lineto + 25.51163 76.53488 lineto + closepath stroke + newpath 25.51163 76.53488 moveto + 51.02325 76.53488 lineto + 51.02325 102.04651 lineto + 25.51163 102.04651 lineto + closepath stroke + newpath 25.51163 102.04651 moveto + 51.02325 102.04651 lineto + 51.02325 127.55814 lineto + 25.51163 127.55814 lineto + closepath stroke + newpath 25.51163 127.55814 moveto + 51.02325 127.55814 lineto + 51.02325 153.06976 lineto + 25.51163 153.06976 lineto + closepath stroke + newpath 25.51163 153.06976 moveto + 51.02325 153.06976 lineto + 51.02325 178.58139 lineto + 25.51163 178.58139 lineto + closepath stroke + newpath 51.02325 0 moveto + 76.53488 0 lineto + 76.53488 25.51163 lineto + 51.02325 25.51163 lineto + closepath stroke + newpath 51.02325 25.51163 moveto + 76.53488 25.51163 lineto + 76.53488 51.02325 lineto + 51.02325 51.02325 lineto + closepath stroke + newpath 51.02325 51.02325 moveto + 76.53488 51.02325 lineto + 76.53488 76.53488 lineto + 51.02325 76.53488 lineto + closepath stroke + newpath 51.02325 76.53488 moveto + 76.53488 76.53488 lineto + 76.53488 102.04651 lineto + 51.02325 102.04651 lineto + closepath stroke + newpath 51.02325 102.04651 moveto + 76.53488 102.04651 lineto + 76.53488 127.55814 lineto + 51.02325 127.55814 lineto + closepath stroke + newpath 51.02325 127.55814 moveto + 76.53488 127.55814 lineto + 76.53488 153.06976 lineto + 51.02325 153.06976 lineto + closepath stroke + newpath 51.02325 153.06976 moveto + 76.53488 153.06976 lineto + 76.53488 178.58139 lineto + 51.02325 178.58139 lineto + closepath stroke + newpath 76.53488 0 moveto + 102.04651 0 lineto + 102.04651 25.51163 lineto + 76.53488 25.51163 lineto + closepath stroke + newpath 76.53488 25.51163 moveto + 102.04651 25.51163 lineto + 102.04651 51.02325 lineto + 76.53488 51.02325 lineto + closepath stroke + newpath 76.53488 51.02325 moveto + 102.04651 51.02325 lineto + 102.04651 76.53488 lineto + 76.53488 76.53488 lineto + closepath stroke + newpath 76.53488 76.53488 moveto + 102.04651 76.53488 lineto + 102.04651 102.04651 lineto + 76.53488 102.04651 lineto + closepath stroke + newpath 76.53488 102.04651 moveto + 102.04651 102.04651 lineto + 102.04651 127.55814 lineto + 76.53488 127.55814 lineto + closepath stroke + newpath 76.53488 127.55814 moveto + 102.04651 127.55814 lineto + 102.04651 153.06976 lineto + 76.53488 153.06976 lineto + closepath stroke + newpath 76.53488 153.06976 moveto + 102.04651 153.06976 lineto + 102.04651 178.58139 lineto + 76.53488 178.58139 lineto + closepath stroke + newpath 102.04651 0 moveto + 127.55814 0 lineto + 127.55814 25.51163 lineto + 102.04651 25.51163 lineto + closepath stroke + newpath 102.04651 25.51163 moveto + 127.55814 25.51163 lineto + 127.55814 51.02325 lineto + 102.04651 51.02325 lineto + closepath stroke + newpath 102.04651 51.02325 moveto + 127.55814 51.02325 lineto + 127.55814 76.53488 lineto + 102.04651 76.53488 lineto + closepath stroke + newpath 102.04651 76.53488 moveto + 127.55814 76.53488 lineto + 127.55814 102.04651 lineto + 102.04651 102.04651 lineto + closepath stroke + newpath 102.04651 102.04651 moveto + 127.55814 102.04651 lineto + 127.55814 127.55814 lineto + 102.04651 127.55814 lineto + closepath stroke + newpath 102.04651 127.55814 moveto + 127.55814 127.55814 lineto + 127.55814 153.06976 lineto + 102.04651 153.06976 lineto + closepath stroke + newpath 102.04651 153.06976 moveto + 127.55814 153.06976 lineto + 127.55814 178.58139 lineto + 102.04651 178.58139 lineto + closepath stroke + newpath 127.55814 0 moveto + 153.06976 0 lineto + 153.06976 25.51163 lineto + 127.55814 25.51163 lineto + closepath stroke + newpath 127.55814 25.51163 moveto + 153.06976 25.51163 lineto + 153.06976 51.02325 lineto + 127.55814 51.02325 lineto + closepath stroke + newpath 127.55814 51.02325 moveto + 153.06976 51.02325 lineto + 153.06976 76.53488 lineto + 127.55814 76.53488 lineto + closepath stroke + newpath 127.55814 76.53488 moveto + 153.06976 76.53488 lineto + 153.06976 102.04651 lineto + 127.55814 102.04651 lineto + closepath stroke + newpath 127.55814 102.04651 moveto + 153.06976 102.04651 lineto + 153.06976 127.55814 lineto + 127.55814 127.55814 lineto + closepath stroke + newpath 127.55814 127.55814 moveto + 153.06976 127.55814 lineto + 153.06976 153.06976 lineto + 127.55814 153.06976 lineto + closepath stroke + newpath 127.55814 153.06976 moveto + 153.06976 153.06976 lineto + 153.06976 178.58139 lineto + 127.55814 178.58139 lineto + closepath stroke + newpath 153.06976 0 moveto + 178.58139 0 lineto + 178.58139 25.51163 lineto + 153.06976 25.51163 lineto + closepath stroke + newpath 153.06976 25.51163 moveto + 178.58139 25.51163 lineto + 178.58139 51.02325 lineto + 153.06976 51.02325 lineto + closepath stroke + newpath 153.06976 51.02325 moveto + 178.58139 51.02325 lineto + 178.58139 76.53488 lineto + 153.06976 76.53488 lineto + closepath stroke + newpath 153.06976 76.53488 moveto + 178.58139 76.53488 lineto + 178.58139 102.04651 lineto + 153.06976 102.04651 lineto + closepath stroke + newpath 153.06976 102.04651 moveto + 178.58139 102.04651 lineto + 178.58139 127.55814 lineto + 153.06976 127.55814 lineto + closepath stroke + newpath 153.06976 127.55814 moveto + 178.58139 127.55814 lineto + 178.58139 153.06976 lineto + 153.06976 153.06976 lineto + closepath stroke + newpath 153.06976 153.06976 moveto + 178.58139 153.06976 lineto + 178.58139 178.58139 lineto + 153.06976 178.58139 lineto + closepath stroke + 6.52916 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 60.45157 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 85.9632 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 111.47482 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 34.93994 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 60.45157 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 85.9632 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 111.47482 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 136.98645 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 57.55241 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 83.06404 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 108.57567 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 9.42831 moveto + (0.0) ptmr8r 9.96265 fshow + 6.52916 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 32.04079 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 57.55241 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 83.06404 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 108.57567 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 134.0873 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 159.59892 162.49808 moveto + (0.0) ptmr8r 9.96265 fshow + 78.08275 85.95074 moveto + (111.1) ptmr8r 9.96265 fshow + 80.5734 60.43912 moveto + (74.1) ptmr8r 9.96265 fshow + 106.08502 85.95074 moveto + (74.1) ptmr8r 9.96265 fshow + 80.5734 111.46237 moveto + (74.1) ptmr8r 9.96265 fshow + 55.06177 85.95074 moveto + (74.1) ptmr8r 9.96265 fshow + 55.06177 60.49142 moveto + (49.4) ptmr8r 9.96265 fshow + 55.06177 111.51468 moveto + (49.4) ptmr8r 9.96265 fshow + 106.08502 111.51468 moveto + (49.4) ptmr8r 9.96265 fshow + 106.08502 60.49142 moveto + (49.4) ptmr8r 9.96265 fshow + 80.5734 34.93994 moveto + (37.0) ptmr8r 9.96265 fshow + 131.59665 85.9632 moveto + (37.0) ptmr8r 9.96265 fshow + 80.5734 136.98645 moveto + (37.0) ptmr8r 9.96265 fshow + 29.55014 85.9632 moveto + (37.0) ptmr8r 9.96265 fshow + 29.55014 60.43912 moveto + (24.7) ptmr8r 9.96265 fshow + 55.06177 34.92749 moveto + (24.7) ptmr8r 9.96265 fshow + 106.08502 34.92749 moveto + (24.7) ptmr8r 9.96265 fshow + 131.59665 60.43912 moveto + (24.7) ptmr8r 9.96265 fshow + 131.59665 111.46237 moveto + (24.7) ptmr8r 9.96265 fshow + 106.08502 136.974 moveto + (24.7) ptmr8r 9.96265 fshow + 55.06177 136.974 moveto + (24.7) ptmr8r 9.96265 fshow + 29.55014 111.46237 moveto + (24.7) ptmr8r 9.96265 fshow + 29.55014 34.93994 moveto + (12.3) ptmr8r 9.96265 fshow + 131.59665 34.93994 moveto + (12.3) ptmr8r 9.96265 fshow + 131.59665 136.98645 moveto + (12.3) ptmr8r 9.96265 fshow + 29.55014 136.98645 moveto + (12.3) ptmr8r 9.96265 fshow + 2.39525 184.16959 moveto + (Array) ptmr8r 11.95514 fshow + 33.26324 184.16959 moveto + (b) pcrr8r 11.95514 fshow + 40.43636 184.16959 moveto + (:) ptmr8r 11.95514 fshow + 47.46585 184.16959 moveto + (After) ptmr8r 11.95514 fshow + 75.67975 184.16959 moveto + (the) ptmr8r 11.95514 fshow + 93.27754 184.16959 moveto + (second) ptmr8r 11.95514 fshow + 129.46555 184.16959 moveto + (a) ptmr8r 11.95514 fshow + 134.53455 184.16959 moveto + (v) ptmr8r 11.95514 fshow + 140.33295 184.16959 moveto + (eraging) ptmr8r 11.95514 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 1390 5021 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 1390 5021 a Black 3784 5547 + a Fp(39)p Black eop + %%Page: 40 40 + 40 39 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 396 51 a Fu(Before)31 + b(presenting)d(the)h(v)n(arious)g(implementations)d(of)k + Fq(Doof2d)p Fu(,)d(we)j(e)o(xplain)e(ho)n(w)h(to)g(install)396 + 180 y(the)c(POOMA)g(T)-8 b(oolkit.)-2 633 y Fx(3.1.)47 + b(Hand-Coded)i(Implementation)396 849 y Fu(Before)36 + b(implementing)c Fq(Doof2d)i Fu(using)f(the)i(POOMA)f(T)-8 + b(oolkit,)33 b(we)i(present)f(a)h(hand-coded)396 978 + y(implementation)23 b(of)j Fq(Doof2d)p Fu(.)e(See)j(Example)e(3-1.)g + (After)h(querying)f(the)h(user)f(for)h(the)g(number)396 + 1108 y(of)33 b(a)n(v)o(eragings,)f(the)h(arrays')g(memory)f(is)g + (allocated.)h(Since)g(the)g(arrays')g(size)g(is)f(not)h(kno)n(wn)e(at) + 396 1237 y(compile)g(time,)f(the)i(arrays)f(are)i(accessed)f(via)f + (pointers)f(to)h(allocated)g(dynamic)g(memory)-6 b(.)30 + b(This)396 1367 y(memory)39 b(is)g(deallocated)h(at)f(the)h(program')-5 + b(s)39 b(end)g(to)g(a)n(v)n(oid)h(memory)e(leaks.)i(The)f(arrays)i(are) + 396 1496 y(initialized)22 b(with)g(initial)f(conditions.)g(F)o(or)i + (the)g Fq(b)f Fu(array)-6 b(,)23 b(all)g(v)n(alues)f(e)o(xcept)g(the)h + (central)g(ones)g(ha)n(v)o(e)396 1626 y(nonzero)h(v)n(alues.)f(Only)h + (the)g(outermost)e(v)n(alues)i(of)g(the)g Fq(a)g Fu(array)g(need)h(be)f + (initialized)f(to)g(zero,)i(b)n(ut)396 1755 y(we)g(instead)f + (initialize)g(them)g(all)h(using)f(the)g(same)h(loop)f(initializing)f + Fq(b)p Fu(.)396 1934 y(The)j(simulation')-5 b(s)24 b(k)o(ernel)i + (consists)e(of)j(triply)e(nested)g(loops.)g(The)h(outermost)f(loop)g + (controls)g(the)396 2064 y(number)32 b(of)g(iterations.)g(The)g(tw)o(o) + g(inner)g(nested)g(loops)f(iterate)i(through)e(the)h(arrays')h + (elements,)396 2194 y(e)o(xcepting)d(the)g(outermost)f(elements;)h + (note)g(the)g(loop)g(indices)g(range)g(from)h(1)f(to)g(n-2)g(while)g + (the)396 2323 y(array)36 b(indices)f(range)h(from)f(0)h(to)f(n-1.)g + (Each)h Fq(a)f Fu(v)n(alue)g(is)g(assigned)g(the)g(a)n(v)o(erage)h(of)g + (its)e(corre-)396 2453 y(sponding)26 b(v)n(alue)h(in)g + Fq(b)g Fu(and)g(the)g(latter')-5 b(s)27 b(neighbors.)f(V)-11 + b(alues)27 b(in)g(the)g(tw)o(o-dimensional)e(grids)i(are)396 + 2582 y(accessed)38 b(using)e(tw)o(o)g(sets)g(of)h(brack)o(ets,)g(e.g.,) + g Fq(a[i][j])p Fu(.)e(After)i(assigning)f(v)n(alues)g(to)g + Fq(a)p Fu(,)h(a)396 2712 y(second)25 b(a)n(v)o(eraging)f(reads)h(v)n + (alues)f(in)h Fq(a)p Fu(,)f(writing)g(v)n(alues)g(in)g + Fq(b)p Fu(.)396 2891 y(After)40 b(the)g(k)o(ernel)g(\002nishes,)f(the)g + (\002nal)h(central)g(v)n(alue)f(is)h(printed.)f(If)h(the)f(desired)h + (number)f(of)396 3020 y(a)n(v)o(eragings)28 b(is)h(e)n(v)o(en,)f(the)g + (v)n(alue)h(in)f Fq(b)h Fu(is)f(printed;)g(otherwise,)g(the)h(v)n(alue) + f(in)h Fq(a)g Fu(is)f(used.)g(Finally)-6 b(,)396 3150 + y(the)25 b(dynamically-allocated)e(memory)h(must)g(be)h(freed)g(to)g(a) + n(v)n(oid)f(memory)g(leaks.)396 3429 y Fr(Example)i(3-1.)e(Hand-Coded)i + (Implementation)g(of)f Fo(Doof2d)635 3788 y Fn(#include)58 + b()g(//)h(has)g(std::cout,)f(...)635 3917 y(#include)g + ()g(//)h(has)g(EXIT_SUCCESS)635 4176 y(//)h(Doof2d:)e + (C-like,)g(element-wise)f(implementation)635 4435 y(int)i(main\(\))635 + 4565 y({)755 4694 y(//)g(Ask)g(the)g(user)g(for)g(the)h(number)e(of)h + (averagings.)117 b Fi(\(1\))755 4824 y Fn(long)59 b(nuAveragings,)e + (nuIterations;)755 4953 y(std::cout)h(<)6 b(<)59 b("Please)f(enter)g + (the)i(number)e(of)h(averagings:)f(";)755 5083 y(std::cin)g(>)11 + b(>)59 b(nuAveragings;)p Black 3784 5547 a Fp(40)p Black + eop + %%Page: 41 41 + 41 40 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 755 51 a Fn(nuIterations)57 + b(=)j(\(nuAveragings+1\)/2;)874 180 y(//)g(Each)f(iteration)e(performs) + h(two)i(averagings.)755 439 y(//)f(Use)g(two-dimensional)e(grids)h(of)i + (values.)118 b Fi(\(2\))755 569 y Fn(double)58 b(**a;)755 + 698 y(double)g(**b;)755 957 y(//)h(Ask)g(the)g(user)g(for)g(the)h + (number)e(n)i(of)f(values)f(along)h(one)755 1087 y(//)g(dimension)f(of) + h(the)g(grid.)119 b Fi(\(3\))755 1217 y Fn(long)59 b(n;)755 + 1346 y(std::cout)f(<)6 b(<)59 b("Please)f(enter)g(the)i(array)e(size:)h + (";)755 1476 y(std::cin)f(>)11 b(>)59 b(n;)755 1735 y(//)g(Allocate)f + (the)h(arrays.)118 b Fi(\(4\))755 1864 y Fn(typedef)58 + b(double*)g(doublePtr;)755 1994 y(a)h(=)h(new)f(doublePtr[n];)755 + 2123 y(b)g(=)h(new)f(doublePtr[n];)755 2253 y(for)g(\(int)g(i)g(=)h(0;) + f(i)h(<)f(n;)h(i++\))f({)874 2382 y(a[i])g(=)h(new)f(double[n];)874 + 2512 y(b[i])g(=)h(new)f(double[n];)755 2641 y(})755 2900 + y(//)g(Set)g(up)h(the)f(initial)f(conditions.)755 3030 + y(//)h(All)g(grid)g(values)g(should)f(be)h(zero)g(except)g(for)g(the) + 755 3159 y(//)g(central)f(value.)119 b Fi(\(5\))755 3289 + y Fn(for)59 b(\(int)g(j)g(=)h(0;)f(j)h(<)f(n;)h(j++\))874 + 3418 y(for)g(\(int)e(i)i(=)g(0;)f(i)g(<)h(n;)f(i++\))994 + 3548 y(a[i][j])f(=)i(b[i][j])e(=)i(0.0;)755 3677 y(b[n/2][n/2])d(=)j + (1000.0;)755 3936 y(//)f(Average)f(using)h(this)g(weight.)118 + b Fi(\(6\))755 4066 y Fn(const)59 b(double)f(weight)g(=)i(1.0/9.0;)755 + 4325 y(//)f(Perform)f(the)i(simulation.)755 4454 y(for)f(\(int)g(k)g(=) + h(0;)f(k)h(<)f(nuIterations;)e(++k\))i({)874 4584 y(//)h(Read)f(from)g + (b.)119 b(Write)58 b(to)i(a.)119 b Fi(\(7\))874 4713 + y Fn(for)60 b(\(int)e(j)i(=)g(1;)f(j)g(<)h(n-1;)f(j++\))994 + 4843 y(for)g(\(int)g(i)h(=)f(1;)g(i)h(<)g(n-1;)e(i++\))1114 + 4972 y(a[i][j])g(=)h(weight)g(*)1233 5102 y(\(b[i+1][j+1])e(+)j + (b[i+1][j)118 b(])59 b(+)h(b[i+1][j-1])d(+)p Black 3784 + 5547 a Fp(41)p Black eop + %%Page: 42 42 + 42 41 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 1293 51 a Fn(b[i)119 + b(][j+1])58 b(+)i(b[i)119 b(][j)g(])59 b(+)h(b[i)119 + b(][j-1])58 b(+)1293 180 y(b[i-1][j+1])f(+)j(b[i-1][j)118 + b(])59 b(+)h(b[i-1][j-1]\);)874 439 y(//)g(Read)f(from)g(a.)119 + b(Write)58 b(to)i(b.)119 b Fi(\(8\))874 569 y Fn(for)60 + b(\(int)e(j)i(=)g(1;)f(j)g(<)h(n-1;)f(j++\))994 698 y(for)g(\(int)g(i)h + (=)f(1;)g(i)h(<)g(n-1;)e(i++\))1114 828 y(b[i][j])g(=)h(weight)g(*)1233 + 957 y(\(a[i+1][j+1])e(+)j(a[i+1][j)118 b(])59 b(+)h(a[i+1][j-1])d(+) + 1293 1087 y(a[i)119 b(][j+1])58 b(+)i(a[i)119 b(][j)g(])59 + b(+)h(a[i)119 b(][j-1])58 b(+)1293 1217 y(a[i-1][j+1])f(+)j(a[i-1][j) + 118 b(])59 b(+)h(a[i-1][j-1]\);)755 1346 y(})755 1605 + y(//)f(Print)g(out)g(the)g(final)g(central)f(value.)118 + b Fi(\(9\))755 1735 y Fn(std::cout)58 b(<)6 b(<)874 1864 + y(\(nuAveragings)57 b(\045)j(2)f(?)h(a[n/2][n/2])d(:)j(b[n/2][n/2]\)) + 874 1994 y(<)6 b(<)59 b(std::endl;)755 2253 y(//)g(Deallocate)f(the)h + (arrays.)118 b Fi(\(10\))755 2382 y Fn(for)59 b(\(int)g(i)g(=)h(0;)f(i) + h(<)f(n;)h(i++\))f({)874 2512 y(delete)g([])g(a[i];)874 + 2641 y(delete)g([])g(b[i];)755 2771 y(})755 2900 y(delete)f([])i(a;)755 + 3030 y(delete)e([])i(b;)755 3289 y(return)e(EXIT_SUCCESS;)635 + 3418 y(})p Black 396 3727 a Fr(\(1\))p Black 34 w Fu(The)25 + b(user)f(speci\002es)h(the)g(desired)g(number)f(of)h(a)n(v)o(eragings.) + p Black 396 3906 a Fr(\(2\))p Black 34 w Fu(These)d(v)n(ariables)f + (point)g(to)h(the)g(tw)o(o-dimensional,)e(dynamically-allocated)h + (grids)g(so)h(we)g(use)546 4036 y(a)j(pointer)f(to)g(a)i(pointer)e(to)g + (a)h Fq(double)p Fu(.)p Black 396 4215 a Fr(\(3\))p Black + 34 w Fu(The)c(user)g(enters)g(the)h(desired)f(grid)f(size.)i(The)f + (grid)g(will)f(be)h(a)h(square)f(with)g Fq(n)g Fu(by)g + Fq(n)g Fu(grid)g(cells.)p Black 396 4395 a Fr(\(4\))p + Black 34 w Fu(Memory)j(for)h(the)f(arrays)i(is)e(allocated.)h(By)g(def) + o(ault,)f(the)h(array)g(indices)g(are)g(zero-based.)p + Black 396 4574 a Fr(\(5\))p Black 34 w Fu(Initially)-6 + b(,)22 b(all)h(grid)g(v)n(alues)g(are)i(zero)f(e)o(xcept)g(for)g(the)f + (one)h(nonzero)g(v)n(alue)f(at)h(the)f(center)i(of)e(the)546 + 4703 y(second)28 b(array)-6 b(.)28 b(Array)h(positions)d(are)j + (indicated)f(using)f(tw)o(o)h(brack)o(ets,)g(e.g.,)h + Fq(a[i][j])p Fu(.)d(A)546 4833 y(better)e(implementation)f(might)g + (initialize)h(only)g(the)h(outermost)e(v)n(alues)h(of)h(the)f + Fq(a)h Fu(array)-6 b(.)p Black 396 5012 a Fr(\(6\))p + Black 34 w Fu(This)24 b(constants)f(indicates)i(the)f(a)n(v)o(erage')-5 + b(s)25 b(weighting.)p Black 3784 5547 a Fp(42)p Black + eop + %%Page: 43 43 + 43 42 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black Black 396 51 a + Fr(\(7\))p Black 34 w Fu(Each)31 b Fq(a)f Fu(v)n(alue,)g(e)o(xcept)g + (an)h(outermost)e(one,)i(is)f(assigned)g(the)g(a)n(v)o(erage)h(of)g + (its)f(analogous)f Fq(b)546 180 y Fu(v)n(alue)d(and)h(that)g(v)n(alue') + -5 b(s)26 b(neighbors.)g(Note)h(the)g(loop)f(indices)g(ensure)i(the)e + (outermost)g(v)n(alues)546 310 y(are)f(not)f(changed.)h(The)g + Fq(weight)p Fu(')-5 b(s)23 b(v)n(alue)h(ensures)h(the)f(computation)g + (is)g(an)h(a)n(v)o(erage.)p Black 396 489 a Fr(\(8\))p + Black 34 w Fu(The)g(second)f(a)n(v)o(eraging)g(computes)g + Fq(b)p Fu(')-5 b(s)24 b(v)n(alues)g(using)g(v)n(alues)g(stored)g(in)h + Fq(a)p Fu(.)p Black 396 669 a Fr(\(9\))p Black 34 w Fu(After)g(the)f(a) + n(v)o(eragings)g(\002nish,)h(the)f(central)h(v)n(alue)g(is)f(printed.)p + Black 396 848 a Fr(\(10\))p Black Fu(The)h(dynamically-allocated)e + (memory)h(must)g(be)h(deallocated)g(to)f(a)n(v)n(oid)g(memory)g(leaks.) + 396 1256 y(T)-8 b(o)46 b(compile)e(the)i(e)o(x)o(ecutable,)f(change)h + (directories)f(to)g(the)h(POOMA)f Ft(examples/Manual/)396 + 1386 y(Doof2d)39 b Fu(directory)-6 b(.)36 b(Ensure)h(the)g + Fq(POOMASUITE)e Fu(en)l(vironment)h(v)n(ariable)h(speci\002es)g(the)g + (de-)396 1515 y(sired)30 b(suite)f(name)h Fm(suiteName)p + Fu(,)e(as)i(we)g(did)f(when)h(compiling)e(POOMA)h(in)h(Section)g(1.3.)f + (Is-)396 1645 y(suing)22 b(the)h Fq(make)64 b(Doof2d-C-element)19 + b Fu(command)j(creates)h(the)g(e)o(x)o(ecutable)f Fj(suite-)396 + 1774 y(Name)p Fq(/Doof2d-C-element)p Fu(.)396 1954 y(When)f(running)f + (the)h(e)o(x)o(ecutable,)f(specify)h(the)g(desired)g(nonne)o(gati)n(v)o + (e)d(number)i(of)h(a)n(v)o(eragings)f(and)396 2083 y(the)33 + b(nonne)o(gati)n(v)o(e)d(number)j(of)g(grid)g(cells)g(along)f(an)o(y)h + (dimension.)e(The)i(resulting)f(grid)g(has)h(the)396 + 2213 y(same)26 b(number)g(of)g(cells)f(along)h(each)h(dimension.)d + (After)i(the)g(e)o(x)o(ecutable)f(\002nishes,)h(the)g(resulting)396 + 2342 y(v)n(alue)e(of)h(the)g(central)g(element)f(is)h(printed.)-2 + 2845 y Fx(3.2.)47 b(Element-wise)g Fg(Array)f Fx(Implementation)396 + 3060 y Fu(The)20 b(simplest)e(w)o(ay)h(to)g(use)h(the)f(POOMA)h(T)-8 + b(oolkit)18 b(is)h(to)g(use)g(the)h(POOMA)f Fq(Array)g + Fu(class)g(instead)396 3190 y(of)j(C)g(arrays.)f Fq(Array)p + Fu(s)f(automatically)g(handle)h(memory)f(allocation)h(and)g + (deallocation,)f(support)396 3319 y(a)h(wider)g(v)n(ariety)f(of)h + (assignments,)d(and)j(can)g(be)g(used)f(in)h(e)o(xpressions.)e(Example) + h(3-2)g(implements)396 3449 y Fq(Doof2d)25 b Fu(using)g + Fq(Array)p Fu(s)g(and)h(element-wise)f(accesses.)h(Since)h(the)f(same)f + (algorithm)g(is)h(used)396 3578 y(as)f(Example)f(3-1,)h(we)g(will)f + (concentrate)h(on)f(the)h(dif)n(ferences.)396 3857 y + Fr(Example)h(3-2.)e(Element-wise)i Fo(Array)e Fr(Implementation)h(of)g + Fo(Doof2d)635 4216 y Fn(#include)58 b()g(//)h(has)g + (std::cout,)f(...)635 4345 y(#include)g()g(//)h(has)g + (EXIT_SUCCESS)635 4475 y(#include)f("Pooma/Arrays.h")874 + 4604 y(//)i(has)f(POOMA's)f(Array)h(declarations)117 + b Fi(\(1\))635 4863 y Fn(//)60 b(Doof2d:)e(POOMA)h(Arrays,)f + (element-wise)f(implementation)635 5123 y(int)i(main\(int)f(argc,)h + (char)g(*argv[]\))p Black 3784 5547 a Fp(43)p Black eop + %%Page: 44 44 + 44 43 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 635 51 a Fn({)755 + 180 y(//)59 b(Prepare)f(the)i(POOMA)e(library)g(for)i(execution.)117 + b Fi(\(2\))755 310 y Fn(Pooma::initialize\(argc,argv\);)755 + 569 y(//)59 b(Ask)g(the)g(user)g(for)g(the)h(number)e(of)h(averagings.) + 755 698 y(long)g(nuAveragings,)e(nuIterations;)755 828 + y(std::cout)h(<)6 b(<)59 b("Please)f(enter)g(the)i(number)e(of)h + (averagings:)f(";)755 957 y(std::cin)g(>)11 b(>)59 b(nuAveragings;)755 + 1087 y(nuIterations)e(=)j(\(nuAveragings+1\)/2;)874 1217 + y(//)g(Each)f(iteration)e(performs)h(two)i(averagings.)755 + 1476 y(//)f(Ask)g(the)g(user)g(for)g(the)h(number)e(n)i(of)f(values)f + (along)755 1605 y(//)h(one)g(dimension)f(of)h(the)h(grid.)755 + 1735 y(long)f(n;)755 1864 y(std::cout)f(<)6 b(<)59 b("Please)f(enter)g + (the)i(array)e(size:)h(";)755 1994 y(std::cin)f(>)11 + b(>)59 b(n;)755 2253 y(//)g(Specify)f(the)i(arrays')e(domains)g([0,n\)) + h(x)g([0,n\).)118 b Fi(\(3\))755 2382 y Fn(Interval<1>)57 + b(N\(0,)i(n-1\);)755 2512 y(Interval<2>)e(vertDomain\(N,)g(N\);)755 + 2771 y(//)i(Create)g(the)g(arrays.)118 b Fi(\(4\))755 + 2900 y Fn(//)59 b(The)g(Array)g(template)f(parameters)g(indicate)755 + 3030 y(//)h(2)h(dimensions,)d(a)j('double')e(value)755 + 3159 y(//)h(type,)g(and)g(ordinary)f('Brick')g(storage.)755 + 3289 y(Array<2,)g(double,)g(Brick>)h(a\(vertDomain\);)755 + 3418 y(Array<2,)f(double,)g(Brick>)h(b\(vertDomain\);)755 + 3677 y(//)g(Set)g(up)h(the)f(initial)f(conditions.)755 + 3807 y(//)h(All)g(grid)g(values)g(should)f(be)h(zero)g(except)g(for)g + (the)755 3936 y(//)g(central)f(value.)119 b Fi(\(5\))755 + 4066 y Fn(for)59 b(\(int)g(j)g(=)h(1;)f(j)h(<)f(n-1;)g(j++\))874 + 4195 y(for)h(\(int)e(i)i(=)g(1;)f(i)g(<)h(n-1;)f(i++\))994 + 4325 y(a\(i,j\))f(=)i(b\(i,j\))e(=)i(0.0;)755 4454 y(b\(n/2,n/2\))d(=)j + (1000.0;)755 4713 y(//)f(In)h(the)f(average,)f(weight)g(elements)g + (with)h(this)g(value.)755 4843 y(const)g(double)f(weight)g(=)i + (1.0/9.0;)755 5102 y(//)f(Perform)f(the)i(simulation.)p + Black 3784 5547 a Fp(44)p Black eop + %%Page: 45 45 + 45 44 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 755 51 a Fn(for)59 + b(\(int)g(k)g(=)h(0;)f(k)h(<)f(nuIterations;)e(++k\))i({)874 + 180 y(//)h(Read)f(from)g(b.)119 b(Write)58 b(to)i(a.)874 + 310 y(for)g(\(int)e(j)i(=)g(1;)f(j)g(<)h(n-1;)f(j++\))994 + 439 y(for)g(\(int)g(i)h(=)f(1;)g(i)h(<)g(n-1;)e(i++\))1114 + 569 y(a\(i,j\))g(=)i(weight)e(*)119 b Fi(\(6\))1233 698 + y Fn(\(b\(i+1,j+1\))57 b(+)j(b\(i+1,j)118 b(\))60 b(+)f(b\(i+1,j-1\))f + (+)1293 828 y(b\(i)119 b(,j+1\))58 b(+)i(b\(i)119 b(,j)g(\))60 + b(+)f(b\(i)119 b(,j-1\))59 b(+)1293 957 y(b\(i-1,j+1\))e(+)j(b\(i-1,j) + 118 b(\))60 b(+)f(b\(i-1,j-1\)\);)874 1217 y(//)h(Read)f(from)g(a.)119 + b(Write)58 b(to)i(b.)874 1346 y(for)g(\(int)e(j)i(=)g(1;)f(j)g(<)h + (n-1;)f(j++\))994 1476 y(for)g(\(int)g(i)h(=)f(1;)g(i)h(<)g(n-1;)e + (i++\))1114 1605 y(b\(i,j\))g(=)i(weight)e(*)1233 1735 + y(\(a\(i+1,j+1\))f(+)j(a\(i+1,j)118 b(\))60 b(+)f(a\(i+1,j-1\))f(+)1293 + 1864 y(a\(i)119 b(,j+1\))58 b(+)i(a\(i)119 b(,j)g(\))60 + b(+)f(a\(i)119 b(,j-1\))59 b(+)1293 1994 y(a\(i-1,j+1\))e(+)j(a\(i-1,j) + 118 b(\))60 b(+)f(a\(i-1,j-1\)\);)755 2123 y(})755 2382 + y(//)g(Print)g(out)g(the)g(final)g(central)f(value.)755 + 2512 y(Pooma::blockAndEvaluate\(\);)874 2641 y(//)i(Ensure)e(all)h + (computation)f(has)h(finished.)755 2771 y(std::cout)f(<)6 + b(<)934 2900 y(\(nuAveragings)57 b(\045)j(2)f(?)h(a\(n/2,n/2\))d(:)j + (b\(n/2,n/2\)\))934 3030 y(<)6 b(<)59 b(std::endl;)755 + 3289 y(//)g(The)g(arrays)g(are)g(automatically)e(deallocated.)117 + b Fi(\(7\))755 3548 y Fn(//)59 b(Tell)g(the)g(POOMA)g(library)f + (execution)g(finished.)117 b Fi(\(8\))755 3677 y Fn + (Pooma::finalize\(\);)755 3807 y(return)58 b(EXIT_SUCCESS;)635 + 3936 y(})p Black 396 4245 a Fr(\(1\))p Black 34 w Fu(T)-8 + b(o)24 b(use)h(POOMA)g Fq(Array)p Fu(s,)e(the)i Ft(Pooma/Arrays.h)j + Fu(must)c(be)h(included.)p Black 396 4424 a Fr(\(2\))p + Black 34 w Fu(The)g(POOMA)f(T)-8 b(oolkit)24 b(structures)g(must)f(be)i + (constructed)g(before)g(their)f(use.)p Black 396 4604 + a Fr(\(3\))p Black 34 w Fu(Before)k(creating)g(an)f Fq(Array)p + Fu(,)g(its)f(domain)h(must)f(be)i(speci\002ed.)f(The)h + Fq(N)f(Interval)f Fu(rep-)546 4733 y(resents)32 b(the)h + (one-dimensional)e(inte)o(gral)g(set)i({0,)f(1,)h(2,)f(.)15 + b(.)g(.)g(,)33 b(n-1}.)f(The)h Fq(Interval<2>)546 4863 + y(vertDomain)22 b Fu(object)j(represents)f(the)h(entire)g(tw)o + (o-dimensional)d(inde)o(x)i(domain.)p Black 3784 5547 + a Fp(45)p Black eop + %%Page: 46 46 + 46 45 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black Black 396 51 a + Fr(\(4\))p Black 34 w Fu(An)c Fq(Array)p Fu(')-5 b(s)20 + b(template)g(parameters)h(indicate)f(its)g(dimension,)g(its)g(v)n(alue) + g(type,)g(and)h(ho)n(w)f(the)546 180 y(v)n(alues)i(will)h(be)g(stored)g + (or)g(computed.)g(The)g Fq(Brick)f(Engine)g Fu(type)h(indicates)g(v)n + (alues)f(will)546 310 y(be)31 b(directly)g(stored.)g(It)g(is)g + (responsible)f(for)h(allocating)f(and)i(deallocating)e(storage)h(so)g + Fq(new)546 439 y Fu(and)24 b Fq(delete)e Fu(statements)h(are)i(not)f + (necessary)-6 b(.)23 b(The)i Fq(vertDomain)c Fu(speci\002es)k(the)f + (array)546 569 y(inde)o(x)f(domain.)p Black 396 748 a + Fr(\(5\))p Black 34 w Fu(The)36 b(\002rst)h(loop)f(initializes)f(all)h + Fq(Array)g Fu(v)n(alues)f(to)h(the)h(same)f(scalar)h(v)n(alue.)f(The)h + (second)546 878 y(statement)f(illustrates)g(assigning)f(one)i + Fq(Array)f Fu(v)n(alue.)h(Indices,)g(separated)g(by)g(commas,)546 + 1007 y(are)25 b(surrounded)f(by)h(parentheses)g(rather)g(than)f + (surrounded)g(by)h(square)g(brack)o(ets)g(\()p Fq([])p + Fu(\).)p Black 396 1187 a Fr(\(6\))p Black 34 w Fq(Array)e + Fu(element)i(access)g(uses)g(parentheses,)f(rather)h(than)g(square)g + (brack)o(ets.)p Black 396 1366 a Fr(\(7\))p Black 34 + w Fu(The)g Fq(Array)p Fu(s)e(deallocate)i(an)o(y)f(memory)g(the)o(y)g + (require,)h(eliminating)e(memory)h(leaks.)p Black 396 + 1545 a Fr(\(8\))p Black 34 w Fu(The)h(POOMA)f(T)-8 b(oolkit)24 + b(structures)g(must)f(be)i(destructed)g(after)g(their)g(use.)396 + 1954 y(W)-8 b(e)25 b(describe)f(the)g(use)g(of)g Fq(Array)f + Fu(and)h(the)g(POOMA)g(T)-8 b(oolkit)22 b(in)i(Example)f(3-2.)h + Fq(Array)p Fu(s,)f(de-)396 2083 y(clared)h(in)e(the)h + Ft(Pooma/Arrays.h)p Fu(,)k(are)d(\002rst-class)f(objects.)f(The)o(y)g + (\223kno)n(w\224)h(their)f(inde)o(x)g(domain,)396 2213 + y(can)35 b(be)f(used)g(in)g(e)o(xpressions,)f(can)h(be)h(assigned)e + (scalar)i(and)f(array)h(v)n(alues,)e(and)i(handle)f(their)396 + 2342 y(o)n(wn)24 b(memory)g(allocation)g(and)h(deallocation.)396 + 2522 y(The)e(creation)h(of)f(the)g Fq(a)g Fu(and)g Fq(b)g(Array)p + Fu(s)e(requires)j(an)f(object)f(specifying)h(their)g(inde)o(x)f + (domains.)396 2651 y(Since)29 b(these)g(are)g(tw)o(o-dimensional)d + (arrays,)j(their)f(inde)o(x)g(domains)f(are)i(also)g(tw)o + (o-dimensional.)396 2781 y(The)42 b(tw)o(o-dimensional)e + Fq(Interval<2>)f Fu(object)i(is)h(the)f(Cartesian)i(product)e(of)h(tw)o + (o)f(one-)396 2910 y(dimensional)c Fq(Interval<1>)e Fu(objects,)i(each) + i(specifying)e(the)h(inte)o(gral)f(set)h({0,)g(1,)g(2,)g(.)15 + b(.)g(.)g(,)396 3040 y(n-1}.)396 3219 y(An)22 b Fq(Array)p + Fu(')-5 b(s)19 b(template)i(parameters)h(indicate)e(its)h(dimension,)f + (the)h(type)g(of)h(its)e(v)n(alues,)h(and)g(ho)n(w)396 + 3349 y(the)h(v)n(alues)f(are)i(stored.)f(Both)g Fq(a)g + Fu(and)g Fq(b)g Fu(are)h(tw)o(o-dimension)d(arrays)i(storing)f + Fq(double)p Fu(s)g(so)h(their)396 3478 y Fq(dimension)i + Fu(is)i(2)h(and)f(their)g(v)n(alue)g(type)g(is)g Fq(double)p + Fu(.)e(An)j Fq(Engine)e Fu(stores)g(an)i Fq(Array)p Fu(')-5 + b(s)396 3608 y(v)n(alues.)26 b(F)o(or)h(e)o(xample,)f(a)h + Fq(Brick)f(Engine)g Fu(e)o(xplicitly)e(stores)j(all)g(v)n(alues.)e(A)i + Fq(Compress-)396 3737 y(ibleBrick)d(Engine)g Fu(also)h(e)o(xplicitly)e + (stores)i(v)n(alues)g(if)h(more)f(than)g(one)h(v)n(alue)f(is)g + (present,)396 3867 y(b)n(ut,)e(if)g(all)g(v)n(alues)g(are)h(the)f + (same,)g(storage)g(for)h(just)e(that)h(v)n(alue)g(is)f(required.)i + (Since)f(an)h(engine)f(can)396 3996 y(store)29 b(its)f(v)n(alues)f(an)o + (y)h(w)o(ay)h(it)f(desires,)h(it)f(might)f(instead)h(compute)g(its)g(v) + n(alues)g(using)f(a)i(function)396 4126 y(or)23 b(compute)e(using)h(v)n + (alues)f(stored)h(in)g(separate)h(engines.)f(In)h(practice,)f(most)g(e) + o(xplicitly)e(speci\002ed)396 4255 y Fq(Engine)p Fu(s)j(are)j(either)f + Fq(Brick)e Fu(or)i Fq(CompressibleBrick)p Fu(.)396 4434 + y Fq(Array)p Fu(s)d(support)f(both)h(element-wise)h(access)g(and)g + (scalar)g(assignment.)e(Element-wise)h(access)396 4564 + y(uses)29 b(parentheses,)g(not)f(square)h(brack)o(ets.)g(F)o(or)g(e)o + (xample,)f Fq(b\(n/2,n/2\))f Fu(speci\002es)i(the)g(cen-)396 + 4693 y(tral)h(element.)e(The)i(scalar)g(assignment)e + Fq(b)65 b(=)h(0.0)28 b Fu(assigns)h(the)g(same)g(0.0)g(v)n(alue)g(to)g + (all)h(array)396 4823 y(elements.)20 b(This)h(is)f(possible)g(because)h + (the)g(array)h(kno)n(ws)d(the)i(e)o(xtent)f(of)h(its)f(domain.)g(W)-8 + b(e)22 b(illustrate)396 4953 y(these)j(data-parallel)g(statements)e(in) + i(the)f(ne)o(xt)g(section.)p Black 3781 5547 a Fp(46)p + Black eop + %%Page: 47 47 + 47 46 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 396 51 a Fu(An)o(y)40 + b(program)h(using)f(the)h(POOMA)g(T)-8 b(oolkit)39 b(must)h(initialize) + g(the)h(toolkit')-5 b(s)39 b(data)i(structures)396 180 + y(using)55 b Fq(Pooma::initialize\(argc,arg)o(v\))p Fu(.)49 + b(This)55 b(e)o(xtracts)g(POOMA-speci\002c)396 310 y(command-line)61 + b(options)g(from)h(the)h(program')-5 b(s)61 b(command-line)g(ar)n + (guments)h(and)g(initial-)396 439 y(izes)c(the)g(interprocessor)f + (communication)f(and)h(other)h(data)g(structures.)f(When)h(\002nished,) + 396 569 y Fq(Pooma::finalize\(\))33 b Fu(ensures)k(all)g(computation)e + (and)j(communication)d(has)i(\002nished)396 698 y(and)25 + b(the)g(data)g(structures)f(are)h(destructed.)-2 1201 + y Fx(3.3.)47 b(Data-P)-5 b(arallel)46 b Fg(Array)g Fx(Implementation) + 396 1416 y Fu(POOMA)26 b(supports)e(data-parallel)i Fq(Array)f + Fu(accesses.)h(Man)o(y)f(algorithms)f(are)j(more)e(easily)g(e)o(x-)396 + 1546 y(pressed)33 b(using)f(data-parallel)h(e)o(xpressions.)f(Also,)g + (the)h(POOMA)f(T)-8 b(oolkit)32 b(can)h(sometimes)f(re-)396 + 1675 y(order)c(the)g(data-parallel)g(computations)e(to)i(be)g(more)f + (ef)n(\002cient)h(or)g(distrib)n(ute)f(them)g(among)g(v)n(ar)n(-)396 + 1805 y(ious)37 b(processors.)g(In)h(this)e(section,)h(we)h(concentrate) + g(on)f(the)g(dif)n(ferences)h(between)g(the)f(data-)396 + 1934 y(parallel)23 b(implementation)d(of)i Fq(Doof2d)f + Fu(listed)h(in)g(Example)f(3-3)i(and)f(the)g(element-wise)g(imple-)396 + 2064 y(mentation)i(listed)f(in)i(the)g(pre)n(vious)e(section.)396 + 2343 y Fr(Example)j(3-3.)e(Data-P)o(arallel)g Fo(Array)g + Fr(Implementation)h(of)g Fo(Doof2d)635 2702 y Fn(#include)58 + b()g(//)h(has)g(std::cout,)f(...)635 2831 y(#include)g + ()g(//)h(has)g(EXIT_SUCCESS)635 2961 y(#include)f + ("Pooma/Arrays.h")874 3090 y(//)i(has)f(POOMA's)f(Array)h(declarations) + 635 3349 y(//)h(Doof2d:)e(POOMA)h(Arrays,)f(data-parallel)f + (implementation)635 3608 y(int)i(main\(int)f(argc,)h(char)g(*argv[]\)) + 635 3738 y({)755 3867 y(//)g(Prepare)f(the)i(POOMA)e(library)g(for)i + (execution.)755 3997 y(Pooma::initialize\(argc,argv\);)755 + 4256 y(//)f(Ask)g(the)g(user)g(for)g(the)h(number)e(of)h(averagings.) + 755 4385 y(long)g(nuAveragings,)e(nuIterations;)755 4515 + y(std::cout)h(<)6 b(<)59 b("Please)f(enter)g(the)i(number)e(of)h + (averagings:)f(";)755 4644 y(std::cin)g(>)11 b(>)59 b(nuAveragings;)755 + 4774 y(nuIterations)e(=)j(\(nuAveragings+1\)/2;)874 4903 + y(//)g(Each)f(iteration)e(performs)h(two)i(averagings.)p + Black 3780 5547 a Fp(47)p Black eop + %%Page: 48 48 + 48 47 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 755 51 a Fn(//)59 + b(Ask)g(the)g(user)g(for)g(the)h(number)e(n)i(of)f(values)f(along)h + (one)755 180 y(//)g(dimension)f(of)h(the)g(grid.)755 + 310 y(long)g(n;)755 439 y(std::cout)f(<)6 b(<)59 b("Please)f(enter)g + (the)i(array)e(size:)h(";)755 569 y(std::cin)f(>)11 b(>)59 + b(n;)755 828 y(//)g(Specify)f(the)i(arrays')e(domains)g([0,n\))h(x)g + ([0,n\).)755 957 y(Interval<1>)e(N\(0,)i(n-1\);)755 1087 + y(Interval<2>)e(vertDomain\(N,)g(N\);)755 1346 y(//)i(Set)g(up)h + (interior)e(domains)g([1,n-1\))g(x)i([1,n-1\))755 1476 + y(//)f(for)g(computation.)117 b Fi(\(1\))755 1605 y Fn(Interval<1>)57 + b(I\(1,n-2\);)755 1735 y(Interval<1>)g(J\(1,n-2\);)755 + 1994 y(//)i(Create)g(the)g(arrays.)755 2123 y(//)g(The)g(Array)g + (template)f(parameters)g(indicate)g(2)h(dimensions,)755 + 2253 y(//)119 b(a)60 b('double')e(value)755 2382 y(//)h(type,)g(and)g + (ordinary)f('Brick')g(storage.)755 2512 y(Array<2,)g(double,)g(Brick>)h + (a\(vertDomain\);)755 2641 y(Array<2,)f(double,)g(Brick>)h + (b\(vertDomain\);)755 2900 y(//)g(Set)g(up)h(the)f(initial)f + (conditions.)755 3030 y(//)h(All)g(grid)g(values)g(should)f(be)h(zero)g + (except)g(for)g(the)755 3159 y(//)g(central)f(value.)755 + 3289 y(a)h(=)h(b)g(=)f(0.0;)755 3418 y(//)g(Ensure)g(all)g + (data-parallel)e(computation)g(finishes)755 3548 y(//)i(before)g + (accessing)e(a)j(value.)118 b Fi(\(2\))755 3677 y Fn + (Pooma::blockAndEvaluate\(\);)755 3807 y(b\(n/2,n/2\))57 + b(=)j(1000.0;)755 4066 y(//)f(In)h(the)f(average,)f(weight)g(elements)g + (with)h(this)g(value.)755 4195 y(const)g(double)f(weight)g(=)i + (1.0/9.0;)755 4454 y(//)f(Perform)f(the)i(simulation.)755 + 4584 y(for)f(\(int)g(k)g(=)h(0;)f(k)h(<)f(nuIterations;)e(++k\))i({)874 + 4713 y(//)h(Read)f(from)g(b.)119 b(Write)58 b(to)i(a.)119 + b Fi(\(3\))874 4843 y Fn(a\(I,J\))59 b(=)g(weight)g(*)994 + 4972 y(\(b\(I+1,J+1\))e(+)j(b\(I+1,J)118 b(\))59 b(+)h(b\(I+1,J-1\))e + (+)1054 5102 y(b\(I)119 b(,J+1\))58 b(+)i(b\(I)119 b(,J)g(\))59 + b(+)h(b\(I)119 b(,J-1\))59 b(+)p Black 3784 5547 a Fp(48)p + Black eop + %%Page: 49 49 + 49 48 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 1054 51 a Fn(b\(I-1,J+1\))57 + b(+)j(b\(I-1,J)118 b(\))59 b(+)h(b\(I-1,J-1\)\);)874 + 310 y(//)g(Read)f(from)g(a.)119 b(Write)58 b(to)i(b.)874 + 439 y(b\(I,J\))f(=)g(weight)g(*)994 569 y(\(a\(I+1,J+1\))e(+)j + (a\(I+1,J)118 b(\))59 b(+)h(a\(I+1,J-1\))e(+)1054 698 + y(a\(I)119 b(,J+1\))58 b(+)i(a\(I)119 b(,J)g(\))59 b(+)h(a\(I)119 + b(,J-1\))59 b(+)1054 828 y(a\(I-1,J+1\))e(+)j(a\(I-1,J)118 + b(\))59 b(+)h(a\(I-1,J-1\)\);)755 957 y(})755 1217 y(//)f(Print)g(out)g + (the)g(final)g(central)f(value.)755 1346 y + (Pooma::blockAndEvaluate\(\);)874 1476 y(//)i(Ensure)e(all)h + (computation)f(has)h(finished.)755 1605 y(std::cout)f(<)6 + b(<)874 1735 y(\(nuAveragings)57 b(\045)j(2)f(?)h(a\(n/2,n/2\))e(:)h + (b\(n/2,n/2\)\))874 1864 y(<)6 b(<)59 b(std::endl;)755 + 2123 y(//)g(The)g(arrays)g(are)g(automatically)e(deallocated.)755 + 2382 y(//)i(Tell)g(the)g(POOMA)g(library)f(execution)g(has)h(finished.) + 755 2512 y(Pooma::finalize\(\);)755 2641 y(return)f(EXIT_SUCCESS;)635 + 2771 y(})p Black 396 3080 a Fr(\(1\))p Black 34 w Fu(These)31 + b(v)n(ariables)f(specify)i(one-dimensional)d(domains)h({1,)h(2,)g(.)15 + b(.)g(.)g(,)31 b(n-2}.)g(Their)g(Cartesian)546 3209 y(product)24 + b(speci\002es)h(the)g(domain)e(of)i(the)g(array)g(v)n(alues)f(that)h + (are)g(modi\002ed.)p Black 396 3388 a Fr(\(2\))p Black + 34 w Fu(POOMA)36 b(may)h(reorder)g(computation.)e Fq + (Pooma::blockAndEvaluate)c Fu(ensures)546 3518 y(all)24 + b(computation)f(\002nishes)i(before)g(accessing)g(a)g(particular)f + (array)i(element.)p Black 396 3697 a Fr(\(3\))p Black + 34 w Fu(Data-parallel)k(e)o(xpressions)g(replace)h(nested)f(loops)g + (and)g(array)i(element)e(accesses.)h(F)o(or)f(e)o(x-)546 + 3827 y(ample,)d Fq(a\(I,J\))g Fu(represents)i(the)f(subset)f(of)i(the)f + Fq(a)g Fu(array)h(ha)n(ving)e(a)i(domain)e(equal)i(to)e(the)546 + 3956 y(Cartesian)i(product)f(of)h Fq(I)f Fu(and)h Fq(J)p + Fu(.)g(Interv)n(als)f(can)h(shifted)f(by)g(an)h(additi)n(v)o(e)e(or)i + (multiplicati)n(v)o(e)546 4086 y(constant.)396 4494 y(Data-parallel)d + (e)o(xpressions)e(use)h(containers)g(and)h(domain)e(objects)h(to)g + (indicate)g(a)h(set)f(of)g(parallel)396 4624 y(e)o(xpressions.)e(F)o + (or)i(e)o(xample,)f(in)g(the)g(program)h(listed)e(abo)o(v)o(e,)h + Fq(a\(I,J\))f Fu(speci\002es)i(the)f(subset)g(of)396 + 4753 y Fq(a)k Fu(array)h(omitting)d(the)i(outermost)e(elements.)i(The)g + (array')-5 b(s)28 b Fq(vertDomain)e Fu(domain)h(consists)396 + 4883 y(of)33 b(the)f(Cartesian)h(product)f(of)g({0,)g(1,)h(2,)f(.)15 + b(.)g(.)g(,)32 b(n-1})g(with)g(itself,)g(while)f Fq(I)i + Fu(and)f Fq(J)g Fu(each)h(specify)396 5012 y({1,)f(2,)f(.)15 + b(.)g(.)g(,)32 b(n-2}.)f(Thus,)g Fq(a\(I,J\))f Fu(is)i(the)f(subset)g + (with)g(a)h(domain)f(of)h(the)g(Cartesian)g(product)396 + 5142 y(of)27 b({1,)g(2,)f(.)15 b(.)g(.)g(,)27 b(n-2})f(with)g(itself.)g + (It)h(is)f(called)h(a)g Fp(vie)o(w)g Fu(of)g(an)g(array)-6 + b(.)27 b(It)g(is)f(itself)h(an)f Fq(Array)p Fu(,)g(with)p + Black 3784 5547 a Fp(49)p Black eop + %%Page: 50 50 + 50 49 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 396 51 a Fu(a)k(domain)e(and)h + (supporting)e(element)i(access,)g(b)n(ut)g(its)f(storage)h(is)f(the)h + (same)g(as)g Fq(a)p Fu(')-5 b(s.)26 b(Changing)h(a)396 + 180 y(v)n(alue)e(in)f Fq(a\(I,J\))g Fu(also)h(changes)g(the)g(same)g(v) + n(alue)f(in)h Fq(a)p Fu(.)g(Changing)f(a)i(v)n(alue)e(in)h(the)g + (latter)g(also)396 310 y(changes)34 b(the)f(former)g(if)g(the)h(v)n + (alue)e(is)h(not)g(one)g(of)g Fq(a)p Fu(')-5 b(s)33 b(outermost)f + (elements.)g(The)i(e)o(xpression)396 439 y Fq(b\(I+1,J+1\))h + Fu(indicates)i(the)g(subset)g(of)g Fq(b)h Fu(with)e(a)i(domain)f + (consisting)e(of)j(the)f(Cartesian)396 569 y(product)31 + b(of)h({2,)f(3,)h(.)15 b(.)g(.)g(,)31 b(n-1},)g(i.e.,)h(the)f(same)h + (domain)e(as)i Fq(a\(I,J\))e Fu(b)n(ut)h(shifted)g(up)h(one)f(unit)396 + 698 y(and)25 b(to)g(the)g(right)f(one)i(unit.)e(Only)g(an)h + Fq(Interval)p Fu(')-5 b(s)23 b(v)n(alue,)i(not)f(its)h(name,)f(is)h + (important)f(so)h(all)396 828 y(uses)g(of)g Fq(J)f Fu(in)h(this)f + (program)g(could)g(be)h(replaced)h(by)e Fq(I)h Fu(without)e(changing)h + (the)h(semantics.)396 1007 y(The)d(statement)e(assigning)g(to)h + Fq(a\(I,J\))f Fu(illustrates)g(that)h Fq(Array)p Fu(s)f(may)h + (participate)g(in)f(e)o(xpres-)396 1137 y(sions.)k(Each)h(addend)f(is)g + (a)h(vie)n(w)f(of)h(an)f(array)-6 b(,)25 b(which)f(is)h(itself)f(an)g + (array)-6 b(.)25 b(The)g(vie)n(ws')f(indices)g(are)396 + 1266 y(zero-based)30 b(so)e(their)g(sum)g(can)h(be)g(formed)g(by)f + (adding)g(identically)g(inde)o(x)o(ed)f(elements)h(of)h(each)396 + 1396 y(array)-6 b(.)25 b(F)o(or)g(e)o(xample,)f(the)h(lo)n(wer)l(,)f + (left)h(element)f(of)h(the)g(result)f(equals)h(the)f(sum)g(of)h(the)g + (lo)n(wer)l(,)f(left)396 1525 y(elements)g(of)h(the)g(addend)g(arrays.) + g(Figure)g(3-2)f(illustrates)g(adding)g(tw)o(o)g(arrays.)396 + 1804 y Fr(Figur)n(e)i(3-2.)e(Adding)i Fo(Array)p Fr(s)827 + 2758 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 827 2758 a @beginspecial -8 @llx -10 @lly 307 + @urx 90 @ury 3150 @rwi @setspecial + %%BeginDocument: figures/doof2d.210 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -8 -10 307 90 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Times-Roman + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath 0 0 moveto + 25.51163 0 lineto + 25.51163 25.51163 lineto + 0 25.51163 lineto + closepath stroke + newpath 0 25.51163 moveto + 25.51163 25.51163 lineto + 25.51163 51.02325 lineto + 0 51.02325 lineto + closepath stroke + newpath 0 51.02325 moveto + 25.51163 51.02325 lineto + 25.51163 76.53488 lineto + 0 76.53488 lineto + closepath stroke + newpath 25.51163 0 moveto + 51.02325 0 lineto + 51.02325 25.51163 lineto + 25.51163 25.51163 lineto + closepath stroke + newpath 25.51163 25.51163 moveto + 51.02325 25.51163 lineto + 51.02325 51.02325 lineto + 25.51163 51.02325 lineto + closepath stroke + newpath 25.51163 51.02325 moveto + 51.02325 51.02325 lineto + 51.02325 76.53488 lineto + 25.51163 76.53488 lineto + closepath stroke + newpath 51.02325 0 moveto + 76.53488 0 lineto + 76.53488 25.51163 lineto + 51.02325 25.51163 lineto + closepath stroke + newpath 51.02325 25.51163 moveto + 76.53488 25.51163 lineto + 76.53488 51.02325 lineto + 51.02325 51.02325 lineto + closepath stroke + newpath 51.02325 51.02325 moveto + 76.53488 51.02325 lineto + 76.53488 76.53488 lineto + 51.02325 76.53488 lineto + closepath stroke + newpath 114.80232 0 moveto + 140.31395 0 lineto + 140.31395 25.51163 lineto + 114.80232 25.51163 lineto + closepath stroke + newpath 114.80232 25.51163 moveto + 140.31395 25.51163 lineto + 140.31395 51.02325 lineto + 114.80232 51.02325 lineto + closepath stroke + newpath 114.80232 51.02325 moveto + 140.31395 51.02325 lineto + 140.31395 76.53488 lineto + 114.80232 76.53488 lineto + closepath stroke + newpath 140.31395 0 moveto + 165.82558 0 lineto + 165.82558 25.51163 lineto + 140.31395 25.51163 lineto + closepath stroke + newpath 140.31395 25.51163 moveto + 165.82558 25.51163 lineto + 165.82558 51.02325 lineto + 140.31395 51.02325 lineto + closepath stroke + newpath 140.31395 51.02325 moveto + 165.82558 51.02325 lineto + 165.82558 76.53488 lineto + 140.31395 76.53488 lineto + closepath stroke + newpath 165.82558 0 moveto + 191.3372 0 lineto + 191.3372 25.51163 lineto + 165.82558 25.51163 lineto + closepath stroke + newpath 165.82558 25.51163 moveto + 191.3372 25.51163 lineto + 191.3372 51.02325 lineto + 165.82558 51.02325 lineto + closepath stroke + newpath 165.82558 51.02325 moveto + 191.3372 51.02325 lineto + 191.3372 76.53488 lineto + 165.82558 76.53488 lineto + closepath stroke + newpath 229.60464 0 moveto + 255.11627 0 lineto + 255.11627 25.51163 lineto + 229.60464 25.51163 lineto + closepath stroke + newpath 229.60464 25.51163 moveto + 255.11627 25.51163 lineto + 255.11627 51.02325 lineto + 229.60464 51.02325 lineto + closepath stroke + newpath 229.60464 51.02325 moveto + 255.11627 51.02325 lineto + 255.11627 76.53488 lineto + 229.60464 76.53488 lineto + closepath stroke + newpath 255.11627 0 moveto + 280.6279 0 lineto + 280.6279 25.51163 lineto + 255.11627 25.51163 lineto + closepath stroke + newpath 255.11627 25.51163 moveto + 280.6279 25.51163 lineto + 280.6279 51.02325 lineto + 255.11627 51.02325 lineto + closepath stroke + newpath 255.11627 51.02325 moveto + 280.6279 51.02325 lineto + 280.6279 76.53488 lineto + 255.11627 76.53488 lineto + closepath stroke + newpath 280.6279 0 moveto + 306.13953 0 lineto + 306.13953 25.51163 lineto + 280.6279 25.51163 lineto + closepath stroke + newpath 280.6279 25.51163 moveto + 306.13953 25.51163 lineto + 306.13953 51.02325 lineto + 280.6279 51.02325 lineto + closepath stroke + newpath 280.6279 51.02325 moveto + 306.13953 51.02325 lineto + 306.13953 76.53488 lineto + 280.6279 76.53488 lineto + closepath stroke + 88.47032 35.96008 moveto + (=) ptmr8r 11.95514 fshow + 203.27264 35.26074 moveto + (+) ptmr8r 11.95514 fshow + 124.56934 8.81065 moveto + (9) ptmr8r 11.95514 fshow + 147.09216 8.67915 moveto + (11) ptmr8r 11.95514 fshow + 172.60379 8.7628 moveto + (13) ptmr8r 11.95514 fshow + 121.58054 34.23558 moveto + (17) ptmr8r 11.95514 fshow + 147.09216 34.32228 moveto + (19) ptmr8r 11.95514 fshow + 172.60379 34.19078 moveto + (21) ptmr8r 11.95514 fshow + 121.58054 59.78606 moveto + (25) ptmr8r 11.95514 fshow + 147.09216 59.74721 moveto + (27) ptmr8r 11.95514 fshow + 172.60379 59.83391 moveto + (29) ptmr8r 11.95514 fshow + 239.37166 8.7628 moveto + (3) ptmr8r 11.95514 fshow + 264.88329 8.7628 moveto + (5) ptmr8r 11.95514 fshow + 290.39491 8.80762 moveto + (7) ptmr8r 11.95514 fshow + 236.38286 34.19078 moveto + (11) ptmr8r 11.95514 fshow + 261.89449 34.27443 moveto + (13) ptmr8r 11.95514 fshow + 287.40611 34.27443 moveto + (15) ptmr8r 11.95514 fshow + 236.38286 59.83391 moveto + (19) ptmr8r 11.95514 fshow + 261.89449 59.70241 moveto + (21) ptmr8r 11.95514 fshow + 287.40611 59.78606 moveto + (23) ptmr8r 11.95514 fshow + 6.77821 8.67915 moveto + (12) ptmr8r 11.95514 fshow + 32.28984 8.7628 moveto + (16) ptmr8r 11.95514 fshow + 57.80147 8.7628 moveto + (20) ptmr8r 11.95514 fshow + 6.77821 34.27443 moveto + (28) ptmr8r 11.95514 fshow + 32.28984 34.27443 moveto + (32) ptmr8r 11.95514 fshow + 57.80147 34.27443 moveto + (36) ptmr8r 11.95514 fshow + 6.77821 59.78606 moveto + (34) ptmr8r 11.95514 fshow + 32.28984 59.78606 moveto + (38) ptmr8r 11.95514 fshow + 57.80147 59.70241 moveto + (42) ptmr8r 11.95514 fshow + 125.06749 -9.7944 moveto + (0) ptmr8r 9.96265 fshow + 150.57912 -9.7944 moveto + (1) ptmr8r 9.96265 fshow + 176.09074 -9.7944 moveto + (2) ptmr8r 9.96265 fshow + 106.82103 9.42831 moveto + (0) ptmr8r 9.96265 fshow + 106.82103 34.87024 moveto + (1) ptmr8r 9.96265 fshow + 106.82103 60.38187 moveto + (2) ptmr8r 9.96265 fshow + 239.86981 -9.7944 moveto + (0) ptmr8r 9.96265 fshow + 265.38144 -9.7944 moveto + (1) ptmr8r 9.96265 fshow + 290.89307 -9.7944 moveto + (2) ptmr8r 9.96265 fshow + 221.62335 9.42831 moveto + (0) ptmr8r 9.96265 fshow + 221.62335 34.87024 moveto + (1) ptmr8r 9.96265 fshow + 221.62335 60.38187 moveto + (2) ptmr8r 9.96265 fshow + 10.26517 -9.7944 moveto + (0) ptmr8r 9.96265 fshow + 35.7768 -9.7944 moveto + (1) ptmr8r 9.96265 fshow + 61.28842 -9.7944 moveto + (2) ptmr8r 9.96265 fshow + -7.9813 9.42831 moveto + (0) ptmr8r 9.96265 fshow + -7.9813 34.87024 moveto + (1) ptmr8r 9.96265 fshow + -7.9813 60.38187 moveto + (2) ptmr8r 9.96265 fshow + -2.00316 81.6568 moveto + (b\(I,J\)+b\(I+1,J-1\)) ptmr8r 11.95514 fshow + 140.28981 81.6568 moveto + (b\(I,J\)) ptmr8r 11.95514 fshow + 243.75273 81.6568 moveto + (b\(I+1,J-1\)) ptmr8r 11.95514 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 827 2758 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 827 2758 a 396 2937 a Fu(When)d(adding)g + (arrays,)g(v)n(alues)g(with)f(the)h(same)g(indices,)f(indicated)h(by)g + (the)g(small)f(numbers)g(adja-)396 3066 y(cent)j(to)g(the)f(arrays,)h + (are)h(added.)396 3345 y(POOMA)g(may)g(reorder)h(computation)e(or)h + (distrib)n(ute)f(them)h(among)f(v)n(arious)g(processors)h(so,)g(be-)396 + 3475 y(fore)34 b(accessing)g(indi)n(vidual)d(v)n(alues,)i(the)h(code)g + (calls)f Fq(Pooma::blockAndEvaluate)p Fu(.)396 3604 y(Before)f(reading) + e(an)g(indi)n(vidual)e Fq(Array)h Fu(v)n(alue,)g(calling)h(this)f + (function)g(ensures)h(all)g(computa-)396 3734 y(tions)25 + b(af)n(fecting)h(its)g(v)n(alue)f(ha)n(v)o(e)h(\002nished,)g(i.e.,)g + (it)g(has)g(the)g(correct)h(v)n(alue.)e(Calling)h(this)f(function)396 + 3863 y(is)36 b(necessary)h(only)e(when)h(accessing)g(indi)n(vidual)e + (array)j(elements.)e(F)o(or)h(e)o(xample,)g(before)g(the)396 + 3993 y(data-parallel)g(operation)e(of)h(printing)f(an)i(array)-6 + b(,)35 b(POOMA)g(will)f(call)i Fq(blockAndEvalu-)396 + 4122 y(ate)24 b Fu(itself.)-2 4625 y Fx(3.4.)47 b(Stencil)g + Fg(Array)f Fx(Implementation)396 4840 y Fu(Man)o(y)25 + b(scienti\002c)g(computations)e(are)j(localized,)f(computing)e(an)i + (array')-5 b(s)26 b(v)n(alue)e(by)h(using)g(neigh-)396 + 4970 y(boring)35 b(v)n(alues.)f(Encapsulating)f(this)h(local)h + (computation)e(in)i(a)g Fp(stencil)g Fu(can)g(yield)g(f)o(aster)g(code) + 396 5099 y(because)j(the)f(compiler)g(can)g(determine)g(that)g(all)g + (array)h(accesses)g(use)f(the)g(same)h(array)-6 b(.)37 + b(Each)p Black 3784 5547 a Fp(50)p Black eop + %%Page: 51 51 + 51 50 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 396 51 a Fu(stencil)j(consists)e + (of)j(a)f(function)g(object)f(and)i(an)f(indication)f(of)h(which)g + (neighbors)f(participate)h(in)396 180 y(the)e(function')-5 + b(s)23 b(computation.)396 459 y Fr(Example)j(3-4.)e(Stencil)i + Fo(Array)e Fr(Implementation)h(of)g Fo(Doof2d)635 818 + y Fn(#include)58 b()g(//)h(has)g(std::cout,)f(...)635 + 948 y(#include)g()g(//)h(has)g(EXIT_SUCCESS)635 + 1077 y(#include)f("Pooma/Arrays.h")815 1207 y(//)h(has)g(POOMA's)f + (Array)h(declarations)635 1466 y(//)h(Doof2d:)e(POOMA)h(Arrays,)f + (stencil)g(implementation)635 1725 y(//)i(Define)e(a)i(stencil)e(class) + h(performing)e(computation.)117 b Fi(\(1\))635 1854 y + Fn(class)59 b(DoofNinePt)635 1984 y({)635 2113 y(public:)755 + 2243 y(//)g(Initialize)f(the)h(constant)f(average)g(weighting.)755 + 2372 y(DoofNinePt\(\))f(:)j(weight\(1.0/9.0\))c({})755 + 2631 y(//)j(This)g(stencil)f(operator)g(is)i(applied)e(to)h(each)755 + 2761 y(//)g(interior)f(domain)h(position)f(\(i,j\).)118 + b(The)59 b("C")755 2890 y(//)g(template)f(parameter)g(permits)g(use)h + (of)h(this)755 3020 y(//)f(stencil)f(operator)g(with)h(both)g(Arrays)g + (&)g(Fields.)118 b Fi(\(2\))755 3149 y Fn(template)58 + b()755 3279 y(inline)755 3408 y(typename)g(C::Element_t)755 + 3538 y(operator\(\)\(const)e(C&)j(c,)h(int)f(i,)g(int)g(j\))h(const)e + ({)874 3667 y(return)994 3797 y(weight)g(*)994 3926 y + (\(c.read\(i+1,j+1\)+c.read\(i+1,j\))o(+c.r)o(ead\(i)o(+1,j)o(-1\)+) + 1054 4056 y(c.read\(i)118 b(,j+1\)+c.read\(i)e(,j\)+c.read\(i)h + (,j-1\)+)1054 4185 y(c.read\(i-1,j+1\)+c.read\(i-1,j\))o(+c.r)o(ead\(i) + o(-1,j)o(-1\)\))o(;)755 4315 y(})755 4574 y(inline)58 + b(int)h(lowerExtent\(int\))e(const)h({)i(return)e(1;)i(})119 + b Fi(\(3\))755 4703 y Fn(inline)58 b(int)h(upperExtent\(int\))e(const)h + ({)i(return)e(1;)i(})635 4962 y(private:)p Black 3784 + 5547 a Fp(51)p Black eop + %%Page: 52 52 + 52 51 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 755 51 a Fn(//)59 + b(In)h(the)f(average,)f(weight)g(elements)g(with)h(this)g(value.)755 + 180 y(const)g(double)f(weight;)635 310 y(};)635 569 y(int)h(main\(int)f + (argc,)h(char)g(*argv[]\))635 698 y({)755 828 y(//)g(Prepare)f(the)i + (POOMA)e(library)g(for)i(execution.)755 957 y + (Pooma::initialize\(argc,argv\);)755 1217 y(//)f(Ask)g(the)g(user)g + (for)g(the)h(number)e(of)h(averagings.)755 1346 y(long)g(nuAveragings,) + e(nuIterations;)755 1476 y(std::cout)h(<)6 b(<)59 b("Please)f(enter)g + (the)i(number)e(of)h(averagings:)f(";)755 1605 y(std::cin)g(>)11 + b(>)59 b(nuAveragings;)755 1735 y(nuIterations)e(=)j + (\(nuAveragings+1\)/2;)874 1864 y(//)g(Each)f(iteration)e(performs)h + (two)i(averagings.)755 2123 y(//)f(Ask)g(the)g(user)g(for)g(the)h + (number)e(n)i(of)f(values)f(along)h(one)755 2253 y(//)g(dimension)f(of) + h(the)g(grid.)755 2382 y(long)g(n;)755 2512 y(std::cout)f(<)6 + b(<)59 b("Please)f(enter)g(the)i(array)e(size:)h(";)755 + 2641 y(std::cin)f(>)11 b(>)59 b(n;)755 2900 y(//)g(Specify)f(the)i + (arrays')e(domains)g([0,n\))h(x)g([0,n\).)755 3030 y(Interval<1>)e + (N\(0,)i(n-1\);)755 3159 y(Interval<2>)e(vertDomain\(N,)g(N\);)755 + 3418 y(//)i(Set)g(up)h(interior)e(domains)g([1,n-1\))g(x)i([1,n-1\))e + (for)755 3548 y(//)h(computation.)755 3677 y(Interval<1>)e(I\(1,n-2\);) + 755 3807 y(Interval<2>)g(interiorDomain\(I,I\);)755 4066 + y(//)i(Create)g(the)g(arrays.)755 4195 y(//)g(The)g(Array)g(template)f + (parameters)g(indicate)755 4325 y(//)h(2)h(dimensions,)d(a)j('double')e + (value)755 4454 y(//)h(type,)g(and)g(ordinary)f('Brick')g(storage.)755 + 4584 y(Array<2,)g(double,)g(Brick>)h(a\(vertDomain\);)755 + 4713 y(Array<2,)f(double,)g(Brick>)h(b\(vertDomain\);)755 + 4972 y(//)g(Set)g(up)h(the)f(initial)f(conditions.)755 + 5102 y(//)h(All)g(grid)g(values)g(should)f(be)h(zero)g(except)g(for)g + (the)p Black 3784 5547 a Fp(52)p Black eop + %%Page: 53 53 + 53 52 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 755 51 a Fn(//)59 + b(central)f(value.)755 180 y(a)h(=)h(b)g(=)f(0.0;)755 + 310 y(//)g(Ensure)g(all)g(data-parallel)e(computation)g(finishes)755 + 439 y(//)i(before)g(accessing)e(a)j(value.)755 569 y + (Pooma::blockAndEvaluate\(\);)755 698 y(b\(n/2,n/2\))d(=)j(1000.0;)755 + 957 y(//)f(Create)g(a)g(stencil)f(performing)g(the)h(computation.)117 + b Fi(\(4\))755 1087 y Fn(Stencil)55 b(stencil;)755 + 1346 y(//)k(Perform)f(the)i(simulation.)755 1476 y(for)f(\(int)g(k)g(=) + h(0;)f(k)h(<)f(nuIterations;)e(++k\))i({)874 1605 y(//)h(Read)f(from)g + (b.)119 b(Write)58 b(to)i(a.)119 b Fi(\(5\))874 1735 + y Fn(a\(interiorDomain\))56 b(=)k(stencil\(b,)e(interiorDomain\);)874 + 1994 y(//)i(Read)f(from)g(a.)119 b(Write)58 b(to)i(b.)874 + 2123 y(b\(interiorDomain\))c(=)k(stencil\(a,)e(interiorDomain\);)755 + 2253 y(})755 2512 y(//)h(Print)g(out)g(the)g(final)g(central)f(value.) + 755 2641 y(Pooma::blockAndEvaluate\(\);)874 2771 y(//)i(Ensure)e(all)h + (computation)f(has)h(finished.)755 2900 y(std::cout)f(<)6 + b(<)874 3030 y(\(nuAveragings)57 b(\045)j(2)f(?)h(a\(n/2,n/2\))e(:)h + (b\(n/2,n/2\)\))874 3159 y(<)6 b(<)59 b(std::endl;)755 + 3418 y(//)g(The)g(arrays)g(are)g(automatically)e(deallocated.)755 + 3677 y(//)i(Tell)g(the)g(POOMA)g(library)f(execution)g(has)h(finished.) + 755 3807 y(Pooma::finalize\(\);)755 3936 y(return)f(EXIT_SUCCESS;)635 + 4066 y(})p Black 396 4375 a Fr(\(1\))p Black 34 w Fu(A)25 + b(stencil)f(is)g(a)h(function)f(object)g(implementing)f(a)i(local)g + (operation)f(on)g(an)h Fq(Array)p Fu(.)p Black 396 4554 + a Fr(\(2\))p Black 34 w Fu(POOMA)20 b(applies)h(this)f(function)g(call) + h Fq(operator\(\))d Fu(to)j(the)g(interior)f(domain)g(of)h(an)g + Fq(Ar-)546 4684 y(ray)p Fu(.)29 b(Although)g(not)g(strictly)g + (necessary)-6 b(,)30 b(the)g(function')-5 b(s)29 b(template)h + (parameter)g Fq(C)g Fu(permits)546 4813 y(using)d(this)h(stencil)g + (with)g Fq(Array)p Fu(s)f(and)i(other)f(containers.)h(The)f + Fq(read)g(Array)g Fu(member)546 4943 y(function)i(supports)f(only)h + (reading)h(v)n(alues,)f(not)g(writing)g(v)n(alues,)g(thus)g(possibly)f + (permitting)546 5072 y(f)o(aster)c(access.)p Black 3784 + 5547 a Fp(53)p Black eop + %%Page: 54 54 + 54 53 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black Black 396 51 a + Fr(\(3\))p Black 34 w Fu(These)30 b(tw)o(o)h(functions)e(indicate)i + (the)f(stencil')-5 b(s)29 b(size.)i(F)o(or)g(each)g(dimension,)e(the)i + (stencil)e(e)o(x-)546 180 y(tends)j(one)i(cell)f(to)g(the)g(left)g(of)g + (\(or)h(belo)n(w\))f(its)f(center)i(and)f(also)g(one)g(cell)g(to)g(the) + g(right)g(\(or)546 310 y(abo)o(v)o(e\))24 b(its)g(center)-5 + b(.)p Black 396 489 a Fr(\(4\))p Black 34 w Fu(Create)26 + b(the)e(stencil.)p Black 396 669 a Fr(\(5\))p Black 34 + w Fu(Applying)k Fq(stencil)h Fu(to)h(the)g Fq(b)g Fu(array)h(and)f(a)g + (subset)g Fq(interiorDomain)d Fu(of)j(its)f(do-)546 798 + y(main)21 b(yields)g(an)h(array)-6 b(,)22 b(which)f(is)g(assigned)g(to) + h(a)g(subset)f(of)h Fq(a)p Fu(.)f(The)h(stencil')-5 b(s)21 + b(function)g(object)546 928 y(is)j(applied)g(to)h(each)g(position)e(in) + i(the)f(speci\002ed)h(subset)f(of)h Fq(b)p Fu(.)396 1336 + y(Before)c(we)f(describe)g(ho)n(w)f(to)h(create)h(a)f(stencil,)f(we)h + (describe)g(ho)n(w)f(to)g(apply)g(a)i(stencil)e(to)g(an)h(array)-6 + b(,)396 1466 y(yielding)19 b(computed)h(v)n(alues.)f(T)-8 + b(o)20 b(compute)f(the)i(v)n(alue)e(associated)h(with)g(inde)o(x)f + (position)f(\(1,3\),)i(the)396 1595 y(stencil')-5 b(s)22 + b(center)h(is)g(placed)g(at)g(\(1,3\).)g(The)g(stencil')-5 + b(s)22 b Fq(upperExtent)e Fu(and)j Fq(lowerExtent)396 + 1725 y Fu(functions)32 b(indicate)h(which)f Fq(Array)g + Fu(v)n(alues)g(the)h(stencil')-5 b(s)31 b(function)h(will)g(use.)h(See) + h(Figure)f(3-)396 1854 y(3.)g(Applying)e(the)h(stencil')-5 + b(s)32 b(function)g(call)g Fq(operator\(\))f Fu(yields)g(the)i + (computed)e(v)n(alue.)h(T)-8 b(o)396 1984 y(compute)39 + b(multiple)f Fq(Array)h Fu(v)n(alues,)g(apply)g(a)h(stencil)f(to)g(the) + h(array)g(and)g(a)g(domain)f(object:)396 2113 y Fq(stencil\(b,)64 + b(interiorDomain\))p Fu(.)27 b(This)k(applies)g(the)g(stencil)g(to)g + (each)h(position)e(in)396 2243 y(the)e(domain.)f(The)h(user)g(must)f + (ensure)h(that)f(applying)g(the)h(stencil)f(does)g(not)h(access)g(none) + o(xistent)396 2372 y Fq(Array)c Fu(v)n(alues.)396 2651 + y Fr(Figur)n(e)i(3-3.)e(A)n(pplying)h(a)f(Stencil)i(to)f(an)g + Fo(Array)1427 4038 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 1427 4038 a @beginspecial -22 @llx + -10 @lly 149 @urx 142 @ury 1710 @rwi @setspecial + %%BeginDocument: figures/doof2d.211 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -22 -10 149 142 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Times-Roman + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath 0 0 moveto + 25.51163 0 lineto + 25.51163 25.51163 lineto + 0 25.51163 lineto + closepath stroke + newpath 0 25.51163 moveto + 25.51163 25.51163 lineto + 25.51163 51.02325 lineto + 0 51.02325 lineto + closepath stroke + newpath 0 51.02325 moveto + 25.51163 51.02325 lineto + 25.51163 76.53488 lineto + 0 76.53488 lineto + closepath stroke + newpath 0 76.53488 moveto + 25.51163 76.53488 lineto + 25.51163 102.04651 lineto + 0 102.04651 lineto + closepath stroke + newpath 0 102.04651 moveto + 25.51163 102.04651 lineto + 25.51163 127.55814 lineto + 0 127.55814 lineto + closepath stroke + newpath 25.51163 0 moveto + 51.02325 0 lineto + 51.02325 25.51163 lineto + 25.51163 25.51163 lineto + closepath stroke + newpath 25.51163 25.51163 moveto + 51.02325 25.51163 lineto + 51.02325 51.02325 lineto + 25.51163 51.02325 lineto + closepath stroke + newpath 25.51163 51.02325 moveto + 51.02325 51.02325 lineto + 51.02325 76.53488 lineto + 25.51163 76.53488 lineto + closepath stroke + newpath 25.51163 76.53488 moveto + 51.02325 76.53488 lineto + 51.02325 102.04651 lineto + 25.51163 102.04651 lineto + closepath stroke + newpath 25.51163 102.04651 moveto + 51.02325 102.04651 lineto + 51.02325 127.55814 lineto + 25.51163 127.55814 lineto + closepath stroke + newpath 51.02325 0 moveto + 76.53488 0 lineto + 76.53488 25.51163 lineto + 51.02325 25.51163 lineto + closepath stroke + newpath 51.02325 25.51163 moveto + 76.53488 25.51163 lineto + 76.53488 51.02325 lineto + 51.02325 51.02325 lineto + closepath stroke + newpath 51.02325 51.02325 moveto + 76.53488 51.02325 lineto + 76.53488 76.53488 lineto + 51.02325 76.53488 lineto + closepath stroke + newpath 51.02325 76.53488 moveto + 76.53488 76.53488 lineto + 76.53488 102.04651 lineto + 51.02325 102.04651 lineto + closepath stroke + newpath 51.02325 102.04651 moveto + 76.53488 102.04651 lineto + 76.53488 127.55814 lineto + 51.02325 127.55814 lineto + closepath stroke + newpath 76.53488 0 moveto + 102.04651 0 lineto + 102.04651 25.51163 lineto + 76.53488 25.51163 lineto + closepath stroke + newpath 76.53488 25.51163 moveto + 102.04651 25.51163 lineto + 102.04651 51.02325 lineto + 76.53488 51.02325 lineto + closepath stroke + newpath 76.53488 51.02325 moveto + 102.04651 51.02325 lineto + 102.04651 76.53488 lineto + 76.53488 76.53488 lineto + closepath stroke + newpath 76.53488 76.53488 moveto + 102.04651 76.53488 lineto + 102.04651 102.04651 lineto + 76.53488 102.04651 lineto + closepath stroke + newpath 76.53488 102.04651 moveto + 102.04651 102.04651 lineto + 102.04651 127.55814 lineto + 76.53488 127.55814 lineto + closepath stroke + newpath 102.04651 0 moveto + 127.55814 0 lineto + 127.55814 25.51163 lineto + 102.04651 25.51163 lineto + closepath stroke + newpath 102.04651 25.51163 moveto + 127.55814 25.51163 lineto + 127.55814 51.02325 lineto + 102.04651 51.02325 lineto + closepath stroke + newpath 102.04651 51.02325 moveto + 127.55814 51.02325 lineto + 127.55814 76.53488 lineto + 102.04651 76.53488 lineto + closepath stroke + newpath 102.04651 76.53488 moveto + 127.55814 76.53488 lineto + 127.55814 102.04651 lineto + 102.04651 102.04651 lineto + closepath stroke + newpath 102.04651 102.04651 moveto + 127.55814 102.04651 lineto + 127.55814 127.55814 lineto + 102.04651 127.55814 lineto + closepath stroke + newpath 2.55132 53.57457 moveto + 73.98357 53.57457 lineto + 73.98357 125.00682 lineto + 2.55132 125.00682 lineto + closepath stroke + [3 3 ] 0 setdash 1 setlinecap + newpath 26.7873 77.81055 moveto + 49.7476 77.81055 lineto + 49.7476 100.77086 lineto + 26.7873 100.77086 lineto + closepath stroke + [] 0 setdash + newpath 51.02325 102.04651 moveto + 76.53488 127.55814 lineto stroke + newpath 72.6299 118.13045 moveto + 76.53488 127.55814 lineto + 67.1072 123.65315 lineto + closepath + gsave fill grestore stroke + 1 setgray + newpath 63.87906 103.65283 moveto + 106.83665 103.65283 lineto + 106.83665 114.70233 lineto + 63.87906 114.70233 lineto + closepath fill + 0 setgray + 65.87906 107.37833 moveto + (upperExtent) ptmr8r 7.97015 fshow + newpath 25.51163 76.53488 moveto + 0 51.02325 lineto stroke + newpath 3.90498 60.45094 moveto + 0 51.02325 lineto + 9.42769 54.92824 lineto + closepath + gsave fill grestore stroke + 1 setgray + newpath 12.8558 54.13208 moveto + 55.6141 54.13208 lineto + 55.6141 63.67908 lineto + 12.8558 63.67908 lineto + closepath fill + 0 setgray + 14.8558 56.24358 moveto + (lo) ptmr8r 7.97015 fshow + 20.85721 56.24358 moveto + (werExtent) ptmr8r 7.97015 fshow + 10.26517 -9.7944 moveto + (0) ptmr8r 9.96265 fshow + 35.7768 -9.7944 moveto + (1) ptmr8r 9.96265 fshow + 61.28842 -9.7944 moveto + (2) ptmr8r 9.96265 fshow + 86.80005 -9.7944 moveto + (3) ptmr8r 9.96265 fshow + 112.31168 -9.7944 moveto + (4) ptmr8r 9.96265 fshow + -7.9813 9.42831 moveto + (0) ptmr8r 9.96265 fshow + -7.9813 34.87024 moveto + (1) ptmr8r 9.96265 fshow + -7.9813 60.38187 moveto + (2) ptmr8r 9.96265 fshow + -7.9813 85.9632 moveto + (3) ptmr8r 9.96265 fshow + -7.9813 111.40512 moveto + (4) ptmr8r 9.96265 fshow + -21.23924 133.14633 moveto + (Applying) ptmr8r 11.95514 fshow + 26.91586 133.14633 moveto + (a) ptmr8r 11.95514 fshow + 35.21266 133.14633 moveto + (Stencil) ptmr8r 11.95514 fshow + 71.41235 133.14633 moveto + (to) ptmr8r 11.95514 fshow + 83.70216 133.14633 moveto + (Position) ptmr8r 11.95514 fshow + 125.89136 133.14633 moveto + (\(1,3\)) ptmr8r 11.95514 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 1427 4038 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 1427 4038 a 396 4217 a Fu(T)-8 + b(o)23 b(compute)g(the)g(v)n(alue)g(associated)g(with)g(inde)o(x)f + (position)g(\(1,3\))h(of)h(an)f(array)-6 b(,)24 b(place)f(the)h + (stencil')-5 b(s)396 4347 y(center)l(,)30 b(indicated)f(with)g(dashed)g + (lines,)g(at)g(the)g(position)f(\(1,3\).)h(The)h(computation)e(in)l(v)n + (olv)o(es)f(the)396 4476 y(array)c(v)n(alues)f(co)o(v)o(ered)f(by)h + (the)g(array)h(and)g(delineated)e(by)h Fq(upperExtent)e + Fu(and)i Fq(lowerEx-)396 4606 y(tent)p Fu(.)396 4884 + y(T)-8 b(o)39 b(create)h(a)f(stencil)f(object,)h(apply)f(the)h + Fq(Stencil)e Fu(type)h(to)h(a)g(function)f(object)h(class.)f(F)o(or)396 + 5014 y(e)o(xample,)c Fq(Stencil)61 b(stencil)33 + b Fu(declares)i(the)g Fq(stencil)e Fu(object.)396 5144 + y(The)d(function)f(object)g(class)g(must)f(de\002ne)j(a)e(function)g + (call)h Fq(operator\(\))d Fu(with)i(a)g(container)p Black + 3784 5547 a Fp(54)p Black eop + %%Page: 55 55 + 55 54 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 396 51 a Fu(parameter)30 + b(and)g(inde)o(x)e(parameters.)h(The)h(number)f(of)g(inde)o(x)g + (parameters,)g(indicating)f(the)i(sten-)396 180 y(cil')-5 + b(s)20 b(center)l(,)i(must)e(equal)g(the)h(container')-5 + b(s)20 b(dimension.)f(F)o(or)i(e)o(xample,)f Fq(DoofNinePt)f + Fu(de\002nes)396 310 y Fq(operator\(\)\(const)62 b(C&)j(c,)h(int)f(i,)g + (int)g(j\))p Fu(.)19 b(W)-8 b(e)20 b(templated)f(the)g(container)396 + 439 y(type)25 b Fq(C)h Fu(although)e(this)h(is)g(not)g(strictly)f + (necessary)-6 b(.)26 b(The)f(tw)o(o)h(inde)o(x)e(parameters)i + Fq(i)f Fu(and)h Fq(j)f Fu(ensure)396 569 y(the)k(stencil)f(w)o(orks)h + (with)f(tw)o(o-dimensional)f(containers.)h(The)h Fq(lowerExtent)d + Fu(function)j(in-)396 698 y(dicates)c(ho)n(w)f(f)o(ar)i(to)f(the)g + (left)g(\(or)g(belo)n(w\))f(the)h(stencil)g(e)o(xtends)f(be)o(yond)g + (its)g(center)-5 b(.)25 b(Its)g(parameter)396 828 y(indicates)31 + b(a)h(particular)g(dimension.)e(Inde)o(x)h(parameters)h + Fq(i)g Fu(and)f Fq(j)h Fu(are)h(in)e(dimension)f(0)i(and)f(1.)396 + 957 y Fq(upperExtent)c Fu(serv)o(es)h(an)h(analogous)g(purpose.)f(The)h + (POOMA)g(T)-8 b(oolkit)27 b(uses)i(these)g(func-)396 + 1087 y(tions)23 b(when)h(distrib)n(uting)d(computation)h(among)h(v)n + (arious)f(processors,)i(b)n(ut)f(it)g(does)h(not)f(use)g(these)396 + 1217 y(functions)h(to)g(ensure)h(none)o(xistent)e Fq(Array)h + Fu(v)n(alues)g(are)h(not)g(accessed.)g(Ca)n(v)o(eat)g(stencil)f(user!) + -2 1719 y Fx(3.5.)47 b(Distrib)m(uted)h Fg(Array)e Fx(Implementation) + 396 1934 y Fu(A)31 b(POOMA)f(program)g(can)h(e)o(x)o(ecute)e(on)i(one)f + (or)g(multiple)f(processors.)h(T)-8 b(o)30 b(con)l(v)o(ert)g(a)h + (program)396 2064 y(designed)19 b(for)g(uniprocessor)f(e)o(x)o(ecution) + g(to)h(a)g(program)g(designed)f(for)i(multiprocessor)d(e)o(x)o + (ecution,)396 2194 y(the)37 b(programmer)g(need)g(only)f(specify)h(ho)n + (w)f(each)i(container')-5 b(s)36 b(domain)g(should)g(be)h(split)f(into) + 396 2323 y(\223patches\224.)29 b(The)f(POOMA)g(T)-8 b(oolkit)27 + b(automatically)g(distrib)n(utes)f(the)i(data)g(among)g(the)g(a)n(v)n + (ailable)396 2453 y(processors)35 b(and)h(handles)f(an)o(y)g(required)g + (communication)f(among)h(processors.)g(Example)f(3-5)396 + 2582 y(illustrates)24 b(ho)n(w)g(to)g(write)h(a)g(distrib)n(uted)e(v)o + (ersion)h(of)g(the)h(stencil)f(program)h(\(Example)f(3-4\).)396 + 2861 y Fr(Example)i(3-5.)e(Distrib)n(uted)i(Stencil)g + Fo(Array)e Fr(Implementation)h(of)g Fo(Doof2d)635 3220 + y Fn(#include)58 b()g(//)h(has)g(std::cout,)f(...)635 + 3349 y(#include)g()g(//)h(has)g(EXIT_SUCCESS)635 + 3479 y(#include)f("Pooma/Arrays.h")874 3608 y(//)i(has)f(POOMA's)f + (Array)h(declarations)635 3867 y(//)h(Doof2d:)e(POOMA)h(Arrays,)f + (stencil,)g(multiple)635 3997 y(//)i(processor)d(implementation)635 + 4256 y(//)j(Define)e(the)h(stencil)f(class)h(performing)f(the)h + (computation.)635 4385 y(class)g(DoofNinePt)635 4515 + y({)635 4644 y(public:)755 4774 y(//)g(Initialize)f(the)h(constant)f + (average)g(weighting.)755 4903 y(DoofNinePt\(\))f(:)j + (weight\(1.0/9.0\))c({})p Black 3784 5547 a Fp(55)p Black + eop + %%Page: 56 56 + 56 55 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 755 51 a Fn(//)59 + b(This)g(stencil)f(operator)g(is)i(applied)e(to)h(each)g(interior)755 + 180 y(//)g(domain)g(position)f(\(i,j\).)118 b(The)59 + b("C")g(template)755 310 y(//)g(parameter)f(permits)g(use)h(of)h(this)f + (stencil)755 439 y(//)g(operator)f(with)h(both)g(Arrays)f(and)i + (Fields.)755 569 y(template)e()755 698 y(inline)755 + 828 y(typename)g(C::Element_t)755 957 y(operator\(\)\(const)e(C&)j(x,)h + (int)f(i,)g(int)g(j\))h(const)e({)874 1087 y(return)994 + 1217 y(weight)g(*)994 1346 y(\(x.read\(i+1,j+1\)+x.read\(i+1,j\))o + (+x.r)o(ead\(i)o(+1,j)o(-1\))53 b(+)1054 1476 y(x.read\(i)118 + b(,j+1\)+x.read\(i)e(,j\)+x.read\(i)h(,j-1\))58 b(+)1054 + 1605 y(x.read\(i-1,j+1\)+x.read\(i-1,j\))o(+x.r)o(ead\(i)o(-1,j)o + (-1\)\))o(;)755 1735 y(})755 1994 y(inline)g(int)h(lowerExtent\(int\))e + (const)h({)i(return)e(1;)i(})755 2123 y(inline)e(int)h + (upperExtent\(int\))e(const)h({)i(return)e(1;)i(})635 + 2382 y(private:)755 2641 y(//)f(In)h(the)f(average,)f(weight)g + (elements)g(with)h(this)g(value.)755 2771 y(const)g(double)f(weight;) + 635 2900 y(};)635 3159 y(int)h(main\(int)f(argc,)h(char)g(*argv[]\))635 + 3289 y({)755 3418 y(//)g(Prepare)f(the)i(POOMA)e(library)g(for)i + (execution.)755 3548 y(Pooma::initialize\(argc,argv\);)755 + 3807 y(//)f(Since)g(multiple)f(copies)g(of)i(this)f(program)f(may)h + (simul-)755 3936 y(//)g(taneously)f(run,)h(we)g(cannot)g(use)g + (standard)f(input)g(and)755 4066 y(//)h(output.)118 b(Instead)58 + b(we)i(use)f(command-line)e(arguments,)755 4195 y(//)i(which)g(are)g + (replicated,)e(for)i(input,)g(and)g(we)g(use)g(an)755 + 4325 y(//)g(Inform)g(stream)f(for)h(output.)118 b Fi(\(1\))755 + 4454 y Fn(Inform)58 b(output;)755 4713 y(//)h(Read)g(the)g(program)f + (input)h(from)g(the)g(command-line)755 4843 y(//)g(arguments.)755 + 4972 y(if)g(\(argc)g(!=)g(4\))h({)874 5102 y(//)g(Incorrect)e(number)g + (of)h(command-line)e(arguments.)p Black 3781 5547 a Fp(56)p + Black eop + %%Page: 57 57 + 57 56 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 874 51 a Fn(output)59 + b(<)6 b(<)994 180 y(argv[0])58 b(<)6 b(<)994 310 y(":)59 + b(number-of-processors)d(number-of-averagings")994 439 + y(<)6 b(<)59 b(")g(number-of-values")994 569 y(<)6 b(<)59 + b(std::endl;)874 698 y(return)g(EXIT_FAILURE;)755 828 + y(})755 957 y(char)g(*tail;)755 1217 y(//)g(Determine)f(the)h(number)g + (of)g(processors.)755 1346 y(long)g(nuProcessors;)755 + 1476 y(nuProcessors)e(=)j(strtol\(argv[1],)c(&tail,)i(0\);)755 + 1735 y(//)h(Determine)f(the)h(number)g(of)g(averagings.)755 + 1864 y(long)g(nuAveragings,)e(nuIterations;)755 1994 + y(nuAveragings)g(=)j(strtol\(argv[2],)c(&tail,)i(0\);)755 + 2123 y(nuIterations)f(=)j(\(nuAveragings+1\)/2;)874 2253 + y(//)g(Each)f(iteration)e(performs)h(two)i(averagings.)755 + 2512 y(//)f(Ask)g(the)g(user)g(for)g(the)h(number)e(n)i(of)f(values)f + (along)755 2641 y(//)h(one)g(dimension)f(of)h(the)h(grid.)755 + 2771 y(long)f(n;)755 2900 y(n)g(=)h(strtol\(argv[3],)c(&tail,)j(0\);) + 755 3030 y(//)g(The)g(dimension)f(must)h(be)g(a)h(multiple)e(of)h(the)g + (number)755 3159 y(//)g(of)h(processors)d(since)i(we)g(are)g(using)g(a) + 755 3289 y(//)g(UniformGridLayout.)755 3418 y + (n=\(\(n+nuProcessors-1\)/nuProce)o(ssors)o(\)*nu)o(Proce)o(ssor)o(s;) + 755 3677 y(//)g(Specify)f(the)i(arrays')e(domains)g([0,n\))h(x)g + ([0,n\).)755 3807 y(Interval<1>)e(N\(0,)i(n-1\);)755 + 3936 y(Interval<2>)e(vertDomain\(N,)g(N\);)755 4195 y(//)i(Set)g(up)h + (interior)e(domains)g([1,n-1\))g(x)i([1,n-1\))755 4325 + y(//)f(for)g(computation.)755 4454 y(Interval<1>)e(I\(1,n-2\);)755 + 4584 y(Interval<2>)g(interiorDomain\(I,I\);)755 4843 + y(//)i(Create)g(the)g(distributed)e(arrays.)755 5102 + y(//)i(Partition)f(the)h(arrays')f(domains)h(uniformly,)e(i.e.,)p + Black 3780 5547 a Fp(57)p Black eop + %%Page: 58 58 + 58 57 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 755 51 a Fn(//)59 + b(each)g(patch)g(has)g(the)g(same)g(size.)118 b(The)59 + b(first)g(para-)755 180 y(//)g(meter)g(tells)g(how)g(many)g(patches)f + (for)h(each)g(dimension.)755 310 y(//)g(Guard)g(layers)f(optimize)g + (communication)f(between)755 439 y(//)i(patches.)118 + b(Internal)58 b(guards)g(surround)g(each)h(patch.)755 + 569 y(//)g(External)f(guards)h(surround)f(the)h(entire)f(array)755 + 698 y(//)h(domain.)118 b Fi(\(2\))755 828 y Fn(UniformGridPartition<2>) + 874 957 y(partition\(Loc<2>\(nuProcessors,)54 b(nuProcessors\),)994 + 1087 y(GuardLayers<2>\(1\),)116 b(//)59 b(internal)994 + 1217 y(GuardLayers<2>\(0\)\);)d(//)j(external)755 1346 + y(UniformGridLayout<2>)c(layout\(vertDomain,)h(partition,)934 + 1476 y(DistributedTag\(\)\);)755 1735 y(//)j(The)g(Array)g(template)f + (parameters)g(indicate)g(2)h(dims)755 1864 y(//)g(and)g(a)h('double')e + (value)h(type.)f(MultiPatch)g(indicates)755 1994 y(//)h(multiple)f + (computation)g(patches,)g(i.e,)g(distributed)755 2123 + y(//)h(computation.)117 b(The)59 b(UniformTag)f(indicates)g(the)755 + 2253 y(//)h(patches)f(should)h(have)g(the)g(same)g(size.)118 + b(Each)59 b(patch)755 2382 y(//)g(has)g(Brick)g(type.)118 + b Fi(\(3\))755 2512 y Fn(Array<2,)58 b(double,)g + (MultiPatch)f(>)j(>)f + (a\(layout\);)755 2771 y(Array<2,)f(double,)g(MultiPatch)f(>)i(>)h(b\(layout\);)755 + 3159 y(//)f(Set)g(up)h(the)f(initial)f(conditions.)755 + 3289 y(//)h(All)g(grid)g(values)g(should)f(be)h(zero)g(except)g(for)g + (the)755 3418 y(//)g(central)f(value.)755 3548 y(a)h(=)h(b)g(=)f(0.0;) + 755 3677 y(//)g(Ensure)g(all)g(data-parallel)e(computation)g(finishes) + 755 3807 y(//)i(before)g(accessing)e(a)j(value.)755 3936 + y(Pooma::blockAndEvaluate\(\);)755 4066 y(b\(n/2,n/2\))d(=)j(1000.0;) + 755 4325 y(//)f(Create)g(the)g(stencil)f(performing)g(the)h + (computation.)755 4454 y(Stencil)c(stencil;)755 + 4713 y(//)k(Perform)f(the)i(simulation.)755 4843 y(for)f(\(int)g(k)g(=) + h(0;)f(k)h(<)f(nuIterations;)e(++k\))i({)874 4972 y(//)h(Read)f(from)g + (b.)119 b(Write)58 b(to)i(a.)119 b Fi(\(4\))874 5102 + y Fn(a\(interiorDomain\))56 b(=)k(stencil\(b,)e(interiorDomain\);)p + Black 3784 5547 a Fp(58)p Black eop + %%Page: 59 59 + 59 58 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 874 180 a Fn(//)60 + b(Read)f(from)g(a.)119 b(Write)58 b(to)i(b.)874 310 y + (b\(interiorDomain\))c(=)k(stencil\(a,)e(interiorDomain\);)755 + 439 y(})755 698 y(//)h(Print)g(out)g(the)g(final)g(central)f(value.)755 + 828 y(Pooma::blockAndEvaluate\(\);)874 957 y(//)i(Ensure)e(all)h + (computation)f(has)h(finished.)755 1087 y(output)f(<)6 + b(<)874 1217 y(\(nuAveragings)57 b(\045)j(2)f(?)h(a\(n/2,n/2\))e(:)h + (b\(n/2,n/2\)\))874 1346 y(<)6 b(<)59 b(std::endl;)755 + 1605 y(//)g(The)g(arrays)g(are)g(automatically)e(deallocated.)755 + 1864 y(//)i(Tell)g(the)g(POOMA)g(library)f(execution)g(has)h(finished.) + 755 1994 y(Pooma::finalize\(\);)755 2123 y(return)f(EXIT_SUCCESS;)635 + 2253 y(})p Black 396 2561 a Fr(\(1\))p Black 34 w Fu(Multiple)21 + b(copies)h(of)h(a)g(distrib)n(uted)e(program)h(may)h(simultaneously)d + (run,)i(perhaps)h(each)g(ha)n(v-)546 2691 y(ing)f(its)h(o)n(wn)f(input) + g(and)h(output.)f(Thus,)g(we)i(use)f(command-line)f(ar)n(guments)g(to)h + (pass)g(input)f(to)546 2821 y(the)i(program.)h(Using)f(an)h + Fq(Inform)e Fu(object)h(ensures)h(only)f(one)h(cop)o(y)f(produces)h + (output.)p Black 396 3000 a Fr(\(2\))p Black 34 w Fu(The)35 + b Fq(UniformGridPartition)c Fu(declaration)k(speci\002es)h(ho)n(w)e(an) + i(array')-5 b(s)35 b(domain)546 3129 y(will)28 b(be)h(partitioned,)f + (or)h(split,)f(into)g(patches.)h(Guard)g(layers)g(are)h(an)f + (optimization)e(that)i(can)546 3259 y(reduce)e(data)f(communication)f + (between)h(patches.)h(The)f Fq(UniformGridLayout)d Fu(dec-)546 + 3388 y(laration)29 b(applies)f(the)i(partition)e(to)h(the)g(gi)n(v)o + (en)f(domain,)g(distrib)n(uting)f(the)i(resulting)f(patches)546 + 3518 y(among)c(v)n(arious)g(processors.)p Black 396 3697 + a Fr(\(3\))p Black 34 w Fu(The)37 b Fq(MultiPatch)f(Engine)g + Fu(distrib)n(utes)g(requests)i(for)g Fq(Array)e Fu(v)n(alues)h(to)g + (the)h(as-)546 3827 y(sociated)33 b(patches.)h(Since)h(a)g(patch)f(may) + f(associated)h(with)g(a)g(dif)n(ferent)g(processor)l(,)g(its)f(\223re-) + 546 3956 y(mote\224)28 b Fq(Engine)f Fu(has)h(type)g + Fq(Remote)p Fu(.)e(POOMA)i(automatically)f(distrib)n(utes)546 + 4086 y(the)d(patches)h(among)f(a)n(v)n(ailable)g(memories)g(and)h + (processors.)p Black 396 4265 a Fr(\(4\))p Black 34 w + Fu(The)35 b(stencil)f(computation,)g(whether)h(for)g(one)g(processor)g + (or)h(multiple)d(processors,)i(is)f(the)546 4395 y(same.)396 + 4803 y(Supporting)e(distrib)n(uted)e(computation)h(requires)i(only)e + (minor)h(code)g(changes.)h(These)f(changes)396 4933 y(specify)c(ho)n(w) + f(each)i(container')-5 b(s)27 b(domain)g(is)g(distrib)n(uted)g(among)g + (the)h(a)n(v)n(ailable)f(processors)g(and)396 5062 y(ho)n(w)j(input)g + (and)h(output)f(occurs.)h(The)g(rest)g(of)g(the)g(program,)f(including) + g(all)h(the)f(computations,)p Black 3784 5547 a Fp(59)p + Black eop + %%Page: 60 60 + 60 59 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 396 51 a Fu(remains)33 + b(the)f(same.)h(When)g(running,)f(the)h(POOMA)g(e)o(x)o(ecutable)f + (interacts)g(with)g(the)h(run-time)396 180 y(library)24 + b(to)f(determine)h(which)f(processors)h(are)g(a)n(v)n(ailable,)f + (distrib)n(utes)f(the)i(containers')g(domains,)396 310 + y(and)30 b(automatically)f(handles)h(all)f(necessary)i(interprocessor)f + (communication.)e(The)i(same)g(e)o(x)o(e-)396 439 y(cutable)d(runs)f + (on)h(one)f(or)h(man)o(y)f(processors.)g(Thus,)g(the)g(programmer)h + (can)g(write)f(one)h(program,)396 569 y(deb)n(ugging)d(it)g(on)h(a)g + (uniprocessor)f(computer)g(and)h(run)f(it)h(on)f(a)h(supercomputer)-5 + b(.)396 748 y(POOMA')g(s)19 b(distrib)n(uted)g(computing)f(model)h + (separates)h(container)f(domain)g(concepts)h(from)f(com-)396 + 878 y(puter)35 b(con\002guration)g(concepts.)g(See)h(Figure)f(3-4.)g + (The)g(statements)f(in)h(the)g(program)g(indicate)396 + 1007 y(ho)n(w)27 b(each)h(container')-5 b(s)27 b(domain)g(will)f(be)i + (partitioned.)e(This)h(process)h(is)f(represented)h(in)f(the)g(up-)396 + 1137 y(per)f(left)f(corner)h(of)g(the)f(\002gure.)h(A)f(user)n + (-speci\002ed)h Fp(partition)d Fu(speci\002es)j(ho)n(w)e(to)h(split)f + (the)h(domain)396 1266 y(into)c(pieces.)h(F)o(or)g(e)o(xample,)f(the)g + (illustrated)g(partition)g(splits)f(the)i(domain)e(into)h(three)h + (equal-sized)396 1396 y(pieces)h(along)g(the)f(x-dimension)g(and)g(tw)o + (o)h(equal-sized)g(pieces)g(along)f(the)h(y-dimension.)e(Apply-)396 + 1525 y(ing)26 b(the)f(partition)g(to)h(the)f(domain)g(creates)i + Fp(patc)o(hes)p Fu(.)e(The)h(partition)e(also)i(speci\002es)g(e)o + (xternal)f(and)396 1655 y(internal)31 b(guard)h(layers.)g(A)f + Fp(guar)l(d)g(layer)j Fu(is)d(a)h(domain)f(surrounding)f(a)i(patch.)g + (A)f(patch')-5 b(s)31 b(com-)396 1784 y(putation)i(only)g(reads)i(b)n + (ut)e(does)h(not)g(write)g(these)g(guarded)g(v)n(alues.)f(An)h + Fp(e)n(xternal)g(guar)l(d)f(layer)396 1914 y Fu(conceptually)d + (surrounds)g(the)g(entire)h(container)f(domain)g(with)g(boundary)g(v)n + (alues)g(whose)g(pres-)396 2043 y(ence)24 b(permits)e(all)g(domain)g + (computations)f(to)i(be)g(performed)g(the)f(same)h(w)o(ay)g(e)n(v)o(en) + f(for)h(computed)396 2173 y(v)n(alues)31 b(along)h(the)g(domain')-5 + b(s)30 b(edge.)j(An)e Fp(internal)g(guar)l(d)h(layer)i + Fu(duplicates)d(v)n(alues)g(from)h(adja-)396 2302 y(cent)g(patches)f + (so)h(communication)d(need)j(not)f(occur)h(during)e(a)i(patch')-5 + b(s)31 b(computation.)f(The)h(use)396 2432 y(of)e(guard)h(layers)f(is)f + (an)i(optimization;)c(using)i(e)o(xternal)h(guard)g(layers)g(eases)h + (programming)d(and)396 2561 y(using)h(internal)g(guard)h(layers)g + (reduces)g(communication)e(among)h(processors.)h(Their)g(use)f(is)h + (not)396 2691 y(required.)p Black 3784 5547 a Fp(60)p + Black eop + %%Page: 61 61 + 61 60 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 396 51 a Fr(Figur)n(e)i(3-4.)e + (The)i(POOMA)e(Distrib)n(uted)i(Computation)f(Model)396 + 4696 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 396 4696 a @beginspecial -46 @llx -438 @lly 387 + @urx 105 @ury 4330 @rwi @setspecial + %%BeginDocument: figures/distributed.101 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -46 -438 387 105 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Times-Roman cmex10 Courier + /ptmr8r /Times-Roman def + /cmex10 /cmex10 def + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -22.67725 -45.35449 moveto + 22.67725 -45.35449 lineto + 22.67725 45.35449 lineto + -22.67725 45.35449 lineto + closepath stroke + -26.22935 67.1341 moveto + (container') ptmr8r 11.95514 fshow + 21.57884 67.1341 moveto + (s) ptmr8r 11.95514 fshow + -17.93265 52.6883 moveto + (domain) ptmr8r 11.95514 fshow + newpath 68.03174 22.67725 moveto + 90.70898 22.67725 lineto + 90.70898 45.35449 lineto + 68.03174 45.35449 lineto + closepath stroke + newpath 90.70898 22.67725 moveto + 113.38623 22.67725 lineto + 113.38623 45.35449 lineto + 90.70898 45.35449 lineto + closepath stroke + newpath 113.38623 22.67725 moveto + 136.06348 22.67725 lineto + 136.06348 45.35449 lineto + 113.38623 45.35449 lineto + closepath stroke + newpath 68.03174 0 moveto + 90.70898 0 lineto + 90.70898 22.67725 lineto + 68.03174 22.67725 lineto + closepath stroke + newpath 90.70898 0 moveto + 113.38623 0 lineto + 113.38623 22.67725 lineto + 90.70898 22.67725 lineto + closepath stroke + newpath 113.38623 0 moveto + 136.06348 0 lineto + 136.06348 22.67725 lineto + 113.38623 22.67725 lineto + closepath stroke + 98.67635 -13.112 moveto + (+) ptmr8r 11.95514 fshow + 52.00975 -27.5578 moveto + (e) ptmr8r 11.95514 fshow + 57.13855 -27.5578 moveto + (xternal) ptmr8r 11.95514 fshow + 93.32635 -27.5578 moveto + (guard) ptmr8r 11.95514 fshow + 123.53696 -27.5578 moveto + (layers) ptmr8r 11.95514 fshow + 98.67635 -42.0036 moveto + (+) ptmr8r 11.95514 fshow + 52.91245 -56.4494 moveto + (internal) ptmr8r 11.95514 fshow + 92.42375 -56.4494 moveto + (guard) ptmr8r 11.95514 fshow + 122.63425 -56.4494 moveto + (layers) ptmr8r 11.95514 fshow + 81.78986 50.94269 moveto + (partition) ptmr8r 11.95514 fshow + newpath 4.53484 -136.06348 moveto + 19.65312 -136.06348 lineto + 19.65312 -90.70898 lineto + 4.53484 -90.70898 lineto + closepath stroke + newpath 2.26697 -138.33134 moveto + 21.92099 -138.33134 lineto + 21.92099 -88.44112 lineto + 2.26697 -88.44112 lineto + closepath stroke + newpath 37.79535 -136.06348 moveto + 52.91364 -136.06348 lineto + 52.91364 -90.70898 lineto + 37.79535 -90.70898 lineto + closepath stroke + newpath 35.52748 -138.33134 moveto + 55.1815 -138.33134 lineto + 55.1815 -88.44112 lineto + 35.52748 -88.44112 lineto + closepath stroke + newpath 71.05586 -136.06348 moveto + 86.17415 -136.06348 lineto + 86.17415 -90.70898 lineto + 71.05586 -90.70898 lineto + closepath stroke + newpath 68.788 -138.33134 moveto + 88.44202 -138.33134 lineto + 88.44202 -88.44112 lineto + 68.788 -88.44112 lineto + closepath stroke + newpath 4.53484 -193.51302 moveto + 19.65312 -193.51302 lineto + 19.65312 -148.15852 lineto + 4.53484 -148.15852 lineto + closepath stroke + newpath 2.26697 -195.78088 moveto + 21.92099 -195.78088 lineto + 21.92099 -145.89066 lineto + 2.26697 -145.89066 lineto + closepath stroke + newpath 37.79535 -193.51302 moveto + 52.91364 -193.51302 lineto + 52.91364 -148.15852 lineto + 37.79535 -148.15852 lineto + closepath stroke + newpath 35.52748 -195.78088 moveto + 55.1815 -195.78088 lineto + 55.1815 -145.89066 lineto + 35.52748 -145.89066 lineto + closepath stroke + newpath 71.05586 -193.51302 moveto + 86.17415 -193.51302 lineto + 86.17415 -148.15852 lineto + 71.05586 -148.15852 lineto + closepath stroke + newpath 68.788 -195.78088 moveto + 88.44202 -195.78088 lineto + 88.44202 -145.89066 lineto + 68.788 -145.89066 lineto + closepath stroke + 27.42793 -82.85292 moveto + (patches) ptmr8r 11.95514 fshow + 1 setlinecap + newpath 111.11926 -113.38623 moveto + 91.44202 -113.38623 lineto stroke + newpath 95.13745 -111.8555 moveto + 91.44202 -113.38623 lineto + 95.13745 -114.91696 lineto + closepath + gsave fill grestore stroke + 120.09686 -109.05243 moveto + (patch) ptmr8r 11.95514 fshow + 148.98026 -109.05243 moveto + (with) ptmr8r 11.95514 fshow + 120.09686 -123.49823 moveto + (guard) ptmr8r 11.95514 fshow + 150.30746 -123.49823 moveto + (cells) ptmr8r 11.95514 fshow + 41.98318 -3.0067 moveto + (+) ptmr8r 11.95514 fshow + 40.70999 -57.2721 moveto + (w) cmex10 11.95514 fshow + 40.70999 -64.44519 moveto + (w) cmex10 11.95514 fshow + 40.70999 -71.61829 moveto + (\177) cmex10 11.95514 fshow + newpath -45.35449 -238.86751 moveto + 183.74031 -238.86751 lineto + 183.74031 90.70898 lineto + -45.35449 90.70898 lineto + closepath stroke + -1.12064 93.87628 moveto + (P) ptmr8r 11.95514 fshow + 5.34717 93.87628 moveto + (artition) ptmr8r 11.95514 fshow + 42.87376 93.87628 moveto + (Container') ptmr8r 11.95514 fshow + 93.34807 93.87628 moveto + (s) ptmr8r 11.95514 fshow + 100.98726 93.87628 moveto + (Domain) ptmr8r 11.95514 fshow + newpath 281.2531 -74.07927 moveto + 281.2531 -43.67706 281.2495 -4.30826 266.51257 -4.30826 curveto + 251.77567 -4.30826 251.77206 -43.67706 251.77206 -74.07927 curveto + 251.77206 -104.48148 251.77567 -143.85028 266.51257 -143.85028 curveto + 281.2495 -143.85028 281.2531 -104.48148 281.2531 -74.07927 curveto closepath + stroke + newpath 314.51361 -74.07927 moveto + 314.51361 -43.67706 314.51001 -4.30826 299.77309 -4.30826 curveto + 285.03618 -4.30826 285.03258 -43.67706 285.03258 -74.07927 curveto + 285.03258 -104.48148 285.03618 -143.85028 299.77309 -143.85028 curveto + 314.51001 -143.85028 314.51361 -104.48148 314.51361 -74.07927 curveto closepath + stroke + newpath 347.77412 -74.07927 moveto + 347.77412 -43.67706 347.77052 -4.30826 333.0336 -4.30826 curveto + 318.29669 -4.30826 318.29309 -43.67706 318.29309 -74.07927 curveto + 318.29309 -104.48148 318.29669 -143.85028 333.0336 -143.85028 curveto + 347.77052 -143.85028 347.77412 -104.48148 347.77412 -74.07927 curveto closepath + stroke + 279.93968 -1.17084 moveto + (conte) ptmr8r 11.95514 fshow + 305.65508 -1.17084 moveto + (xts) ptmr8r 11.95514 fshow + newpath 229.0948 -238.86751 moveto + 370.45135 -238.86751 lineto + 370.45135 90.70898 lineto + 229.0948 90.70898 lineto + closepath stroke + 1 setgray + newpath 213.45988 -177.74188 moveto + 386.08629 -177.74188 lineto + 386.08629 -144.85028 lineto + 213.45988 -144.85028 lineto + closepath fill + 0 setgray + 227.81549 -156.96228 moveto + (Each) ptmr8r 11.95514 fshow + 254.70248 -156.96228 moveto + (conte) ptmr8r 11.95514 fshow + 280.41788 -156.96228 moveto + (xt) ptmr8r 11.95514 fshow + 292.70769 -156.96228 moveto + (has) ptmr8r 11.95514 fshow + 311.63249 -156.96228 moveto + (memory) ptmr8r 11.95514 fshow + 354.46748 -156.96228 moveto + (and) ptmr8r 11.95514 fshow + 221.43748 -171.40808 moveto + (processors) ptmr8r 11.95514 fshow + 274.88838 -171.40808 moveto + (to) ptmr8r 11.95514 fshow + 287.17819 -171.40808 moveto + (e) ptmr8r 11.95514 fshow + 292.30699 -171.40808 moveto + (x) ptmr8r 11.95514 fshow + 298.10538 -171.40808 moveto + (ecute) ptmr8r 11.95514 fshow + 326.31929 -171.40808 moveto + (a) ptmr8r 11.95514 fshow + 334.61609 -171.40808 moveto + (program.) ptmr8r 11.95514 fshow + 240.82869 96.29718 moveto + (Computer) ptmr8r 11.95514 fshow + 291.6377 96.29718 moveto + (Configuration) ptmr8r 11.95514 fshow + newpath 121.72878 -347.94548 moveto + 136.84706 -347.94548 lineto + 136.84706 -302.59099 lineto + 121.72878 -302.59099 lineto + closepath stroke + newpath 119.4609 -350.21335 moveto + 139.11493 -350.21335 lineto + 139.11493 -300.32312 lineto + 119.4609 -300.32312 lineto + closepath stroke + newpath 154.98929 -347.94548 moveto + 170.10757 -347.94548 lineto + 170.10757 -302.59099 lineto + 154.98929 -302.59099 lineto + closepath stroke + newpath 152.72142 -350.21335 moveto + 172.37544 -350.21335 lineto + 172.37544 -300.32312 lineto + 152.72142 -300.32312 lineto + closepath stroke + newpath 188.2498 -347.94548 moveto + 203.36809 -347.94548 lineto + 203.36809 -302.59099 lineto + 188.2498 -302.59099 lineto + closepath stroke + newpath 185.98193 -350.21335 moveto + 205.63596 -350.21335 lineto + 205.63596 -300.32312 lineto + 185.98193 -300.32312 lineto + closepath stroke + newpath 121.72878 -405.39502 moveto + 136.84706 -405.39502 lineto + 136.84706 -360.04053 lineto + 121.72878 -360.04053 lineto + closepath stroke + newpath 119.4609 -407.66289 moveto + 139.11493 -407.66289 lineto + 139.11493 -357.77266 lineto + 119.4609 -357.77266 lineto + closepath stroke + newpath 154.98929 -405.39502 moveto + 170.10757 -405.39502 lineto + 170.10757 -360.04053 lineto + 154.98929 -360.04053 lineto + closepath stroke + newpath 152.72142 -407.66289 moveto + 172.37544 -407.66289 lineto + 172.37544 -357.77266 lineto + 152.72142 -357.77266 lineto + closepath stroke + newpath 188.2498 -405.39502 moveto + 203.36809 -405.39502 lineto + 203.36809 -360.04053 lineto + 188.2498 -360.04053 lineto + closepath stroke + newpath 185.98193 -407.66289 moveto + 205.63596 -407.66289 lineto + 205.63596 -357.77266 lineto + 185.98193 -357.77266 lineto + closepath stroke + newpath 144.02844 -353.99301 moveto + 144.02844 -323.5908 144.02484 -284.222 129.28792 -284.222 curveto + 114.55101 -284.222 114.54741 -323.5908 114.54741 -353.99301 curveto + 114.54741 -384.39522 114.55101 -423.76402 129.28792 -423.76402 curveto + 144.02484 -423.76402 144.02844 -384.39522 144.02844 -353.99301 curveto + closepath stroke + newpath 177.28896 -353.99301 moveto + 177.28896 -323.5908 177.28535 -284.222 162.54843 -284.222 curveto + 147.81152 -284.222 147.80792 -323.5908 147.80792 -353.99301 curveto + 147.80792 -384.39522 147.81152 -423.76402 162.54843 -423.76402 curveto + 177.28535 -423.76402 177.28896 -384.39522 177.28896 -353.99301 curveto + closepath stroke + newpath 210.54947 -353.99301 moveto + 210.54947 -323.5908 210.54587 -284.222 195.80894 -284.222 curveto + 181.07204 -284.222 181.06844 -323.5908 181.06844 -353.99301 curveto + 181.06844 -384.39522 181.07204 -423.76402 195.80894 -423.76402 curveto + 210.54587 -423.76402 210.54947 -384.39522 210.54947 -353.99301 curveto + closepath stroke + 145.61403 -278.6338 moveto + (Layout) ptmr8r 11.95514 fshow + 63.61438 -434.91733 moveto + (Each) ptmr8r 11.95514 fshow + 90.50137 -434.91733 moveto + (conte) ptmr8r 11.95514 fshow + 116.21678 -434.91733 moveto + (xt) ptmr8r 11.95514 fshow + 128.50658 -434.91733 moveto + (can) ptmr8r 11.95514 fshow + 148.08897 -434.91733 moveto + (contain) ptmr8r 11.95514 fshow + 186.27338 -434.91733 moveto + (se) ptmr8r 11.95514 fshow + 195.93298 -434.91733 moveto + (v) ptmr8r 11.95514 fshow + 201.73138 -434.91733 moveto + (eral) ptmr8r 11.95514 fshow + 222.64069 -434.91733 moveto + (patches.) ptmr8r 11.95514 fshow + 203.04625 -77.08597 moveto + (+) ptmr8r 11.95514 fshow + 157.90393 -250.78511 moveto + (w) cmex10 11.95514 fshow + 157.90393 -257.9582 moveto + (w) cmex10 11.95514 fshow + 157.90393 -265.1313 moveto + (\177) cmex10 11.95514 fshow + 173.19292 -264.58736 moveto + (DistributedTag) pcrr8r 11.95514 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 396 4696 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 396 4696 a 179 x Fu(The)i(POOMA)f(distrib)n + (uted)e(computation)h(model)g(creates)i(a)g(layout)e(by)h(combining)f + (a)h(partition-)396 5005 y(ing)e(of)h(the)g(containers')g(domains)e + (and)i(the)g(computer)f(con\002guration.)p Black 3784 + 5547 a Fp(61)p Black eop + %%Page: 62 62 + 62 61 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 396 51 a Fu(The)g(computer)f + (con\002guration)g(of)g(shared)h(memory)e(and)i(processors)f(is)g + (determined)g(by)g(the)g(run-)396 180 y(time)d(system.)g(See)h(the)g + (upper)g(right)e(portion)h(of)h(Figure)g(3-4.)f(A)h Fp(conte)n(xt)h + Fu(is)f(a)g(collection)e(of)i(shared)396 310 y(memory)g(and)h + (processors)g(that)f(can)i(e)o(x)o(ecute)e(a)h(program)g(or)g(a)g + (portion)f(of)h(a)g(program.)g(F)o(or)g(e)o(xam-)396 + 439 y(ple,)e(a)g(tw)o(o-processor)f(desktop)g(computer)g(might)f(ha)n + (v)o(e)i(memory)f(accessible)g(to)h(both)f(processors)396 + 569 y(so)24 b(it)g(is)g(a)h(conte)o(xt.)e(A)i(supercomputer)e + (consisting)g(of)i(desktop)e(computers)h(netw)o(ork)o(ed)g(together)396 + 698 y(might)38 b(ha)n(v)o(e)i(as)f(man)o(y)f(conte)o(xts)h(as)g + (computers.)g(The)g(run-time)g(system,)f(e.g.,)h(the)h(Message)396 + 828 y(P)o(assing)30 b(Interf)o(ace)i(\(MPI\))f(Communications)e + (Library)h(or)h(the)f(MM)g(Shared)i(Memory)d(Library)396 + 957 y(\()p Ft(http://www.engelschall.c)q(om/s)q(w/mm)q(/)p + Fu(\),)d(communicates)19 b(the)h(a)n(v)n(ailable)g(conte)o(xts)f(to)g + (the)396 1087 y(e)o(x)o(ecutable.)28 b(POOMA)h(must)e(be)i + (con\002gured)g(for)g(the)g(particular)g(run-time)f(system)f(in)i(use.) + f(See)396 1217 y(Section)d(1.5.)396 1396 y(A)38 b Fp(layout)g + Fu(combines)f(patches)h(with)e(conte)o(xts)h(so)g(the)g(program)h(can)g + (be)f(e)o(x)o(ecuted.)g(If)h Fq(Dis-)396 1525 y(tributedTag)22 + b Fu(is)j(speci\002ed,)g(the)f(patches)h(are)g(distrib)n(uted)e(among)h + (the)h(a)n(v)n(ailable)f(conte)o(xts.)396 1655 y(If)33 + b Fq(ReplicatedTag)c Fu(is)j(speci\002ed,)g(each)h(set)f(of)g(patches)g + (is)g(replicated)g(on)g(each)g(conte)o(xt.)396 1784 y(Re)o(gardless,)25 + b(the)h(containers')f(domains)g(are)h(no)n(w)f(distrib)n(uted)f(among)h + (the)h(conte)o(xts)e(so)i(the)f(pro-)396 1914 y(gram)i(can)g(run.)f + (When)h(a)g(patch)f(needs)h(data)f(from)h(another)f(patch,)h(the)f + (POOMA)h(T)-8 b(oolkit)25 b(sends)396 2043 y(messages)i(to)g(the)g + (designated)g(patch)g(uses)h(the)f(message-passing)f(library)-6 + b(.)27 b(All)f(such)i(communi-)396 2173 y(cation)k(is)f(automatically)f + (performed)i(by)g(the)g(toolkit)e(with)h(no)h(need)g(for)g(programmer)f + (or)h(user)396 2302 y(input.)396 2482 y(Incorporating)g(POOMA')-5 + b(s)32 b(distrib)n(uted)g(computation)e(model)i(into)g(a)h(program)g + (requires)g(writ-)396 2611 y(ing)j(v)o(ery)h(fe)n(w)g(lines)f(of)g + (code.)h(Example)f(3-5)h(illustrates)e(this.)h(The)h + Fq(partition)d Fu(declara-)396 2741 y(tion)22 b(creates)i(a)f + Fq(UniformGridPartition)18 b Fu(splitting)j(each)j(dimension)d(of)i(a)g + (container')-5 b(s)396 2870 y(domain)36 b(into)g(equally-sized)h + Fq(nuProcessors)d Fu(pieces.)j(The)g(\002rst)g Fq(GuardLayers)e + Fu(ar)n(-)396 3000 y(gument)25 b(speci\002es)i(each)f(patch)h(will)e + (ha)n(v)o(e)h(cop)o(y)g(of)g(adjacent)g(patches')g(outermost)f(v)n + (alues.)g(This)396 3129 y(may)20 b(speed)g(computation)f(because)h(a)h + (patch)f(need)h(not)e(synchronize)h(its)g(computation)e(with)h(other) + 396 3259 y(patches')32 b(processors.)f(Since)h(each)g(v)n(alue')-5 + b(s)31 b(computation)e(requires)j(kno)n(wing)e(its)h(surrounding)396 + 3388 y(neighbors,)37 b(this)g(internal)g(guard)h(layer)g(is)g(one)f + (layer)h(deep.)g(The)g(second)g Fq(GuardLayers)396 3518 + y Fu(ar)n(gument)c(speci\002es)h(no)f(e)o(xternal)g(guard)g(layer)-5 + b(.)34 b(External)g(guard)g(layers)g(simplify)f(computing)396 + 3647 y(v)n(alues)j(along)f(the)h(edges)g(of)g(domains.)f(Since)i(our)f + (program)f(already)i(uses)f(only)f(the)h(interior)396 + 3777 y(domain)24 b(for)h(computation,)e(we)i(do)g(not)f(use)h(this)e + (feature.)396 3956 y(The)j Fq(layout)f Fu(declaration)g(creates)i(a)f + Fq(UniformGridLayout)c Fu(layout.)j(As)h(Example)f(3-)396 + 4086 y(5)f(illustrates,)f(it)g(needs)h(to)g(kno)n(w)f(a)h(container')-5 + b(s)24 b(domain,)f(a)h(partition,)f(the)h(computer')-5 + b(s)23 b(conte)o(xts,)396 4215 y(and)c(a)g Fq(DistributedTag)d + Fu(or)j Fq(ReplicatedTag)p Fu(.)d(These)j(comprise)f + Fq(layout)p Fu(')-5 b(s)17 b(three)396 4345 y(parameters;)25 + b(the)g(conte)o(xts)e(are)j(implicitly)c(supplied)i(by)g(the)h + (run-time)f(system.)396 4524 y(T)-8 b(o)23 b(create)i(a)e(distrib)n + (uted)f Fq(Array)p Fu(,)g(it)h(should)f(be)h(created)h(using)e(a)i + Fq(Layout)e Fu(object)h(and)g(ha)n(v)o(e)g(a)396 4654 + y Fq(MultiPatch)18 b(Engine)h Fu(rather)h(than)g(using)f(a)h + Fq(Domain)f Fu(object)g(and)h(a)h Fq(Brick)e(Engine)396 + 4783 y Fu(as)35 b(we)h(did)e(for)i(the)f(uniprocessor)f + (implementations.)e(A)j(distrib)n(uted)f(implementation)e(uses)j(a)396 + 4913 y Fq(Layout)f Fu(object,)g(which)h(conceptually)f(speci\002es)h(a) + g Fq(Domain)f Fu(object)h(and)g(its)f(distrib)n(ution)396 + 5042 y(throughout)k(the)i(computer)-5 b(.)38 b(A)i Fq(MultiPatch)d + (Engine)h Fu(supports)h(computations)e(using)p Black + 3784 5547 a Fp(62)p Black eop + %%Page: 63 63 + 63 62 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 396 51 a Fu(multiple)18 + b(patches.)h(The)g Fq(UniformTag)e Fu(indicates)h(the)h(patches)h(all)f + (ha)n(v)o(e)g(the)g(same)g(size.)g(Since)396 180 y(patches)j(may)f + (reside)g(on)g(dif)n(ferent)g(conte)o(xts,)f(the)h(second)g(template)g + (parameter)h(is)f Fq(Remote)p Fu(.)f(Its)396 310 y Fq(Brick)i + Fu(template)g(parameter)h(speci\002es)g(the)f Fq(Engine)g + Fu(for)h(a)g(particular)f(patch)h(on)f(a)h(particular)396 + 439 y(conte)o(xt.)h(Most)g(distrib)n(uted)f(programs)h(use)635 + 748 y Fn(MultiPatch)11 + b(>)396 1007 y Fu(or)635 1266 y Fn(MultiPatch)11 b(>)396 1525 y Fq(Engine)p + Fu(s.)396 1705 y(The)23 b(computations)e(for)i(a)g(distrib)n(uted)e + (implementation)f(are)k(e)o(xactly)e(the)h(same)f(as)h(for)g(a)g + (sequen-)396 1834 y(tial)k(implementation.)d(The)j(POOMA)g(T)-8 + b(oolkit)25 b(and)i(a)h(message-passing)d(library)i(automatically)396 + 1964 y(perform)e(all)g(the)f(computation.)396 2143 y(Input)j(and)g + (output)f(for)i(distrib)n(uted)d(programs)i(is)g(dif)n(ferent)g(than)g + (for)g(sequential)g(programs.)f(Al-)396 2273 y(though)h(the)g(same)h + (instructions)d(run)j(on)f(each)i(conte)o(xt,)d(each)i(conte)o(xt)f + (may)g(ha)n(v)o(e)h(its)f(o)n(wn)f(input)396 2402 y(and)38 + b(output)e(streams.)h(T)-8 b(o)37 b(a)n(v)n(oid)g(dealing)g(with)f + (multiple)g(input)g(streams,)h(we)h(pass)f(the)g(input)396 + 2532 y(via)e(command-line)e(ar)n(guments,)g(which)h(are)i(replicated)e + (for)h(each)g(conte)o(xt.)e(Using)h Fq(Inform)396 2661 + y Fu(streams)c(a)n(v)n(oids)g(ha)n(ving)f(multiple)g(output)g(streams)h + (print.)f(An)o(y)h(conte)o(xt)f(can)i(print)e(to)h(an)h + Fq(In-)396 2791 y(form)d Fu(stream)h(b)n(ut)g(only)f(te)o(xt)g(sent)h + (to)f(conte)o(xt)g(0)h(is)g(displayed.)e(At)i(the)g(be)o(ginning)e(of)i + (the)g(pro-)396 2920 y(gram,)g(we)g(create)h(an)g Fq(Inform)d + Fu(object)i(named)g Fq(output)p Fu(.)e(Throughout)h(the)h(rest)g(of)g + (the)g(pro-)396 3050 y(gram,)c(we)g(use)g(it)f(instead)g(of)h + Fq(std::cout)e Fu(and)h Fq(std::cerr)p Fu(.)396 3229 + y(The)53 b(command)g(to)f(run)h(the)g(program)g(is)g(dependent)f(on)h + (the)g(run-time)g(system.)e(T)-8 b(o)53 b(use)396 3358 + y(MPI)45 b(with)f(the)g(Irix)g(6.5)g(operating)g(system,)f(one)i(can)f + (use)h(the)f Fq(mpirun)f Fu(command.)g(F)o(or)396 3488 + y(e)o(xample,)35 b Fq(mpirun)64 b(-np)h(4)h(Doof2d-Array-distributed)59 + b(-mpi)65 b(2)h(10)396 3618 y(1000)31 b Fu(in)l(v)n(ok)o(es)f(the)h + (MPI)g(run-time)f(system)g(with)h(four)g(processors.)g(The)g + Fq(-mpi)f Fu(option)g(tells)396 3747 y(the)47 b(POOMA)f(e)o(x)o + (ecutable)g Fq(Doof2d-Array-distributed)41 b Fu(to)46 + b(use)g(the)h(MPI)f(Li-)396 3877 y(brary)-6 b(.)34 b(The)g(remaining)f + (ar)n(guments)h(specify)f(the)h(number)g(of)g(processors,)f(the)h + (number)g(of)g(a)n(v-)396 4006 y(eragings,)40 b(and)g(the)g(array)g + (size.)g(The)g(\002rst)g(and)g(last)g(v)n(alues)f(are)h(the)g(same)g + (for)g(each)h(dimen-)396 4136 y(sion.)f(F)o(or)g(e)o(xample,)g(if)g + (three)h(processors)f(are)h(speci\002ed,)f(then)g(the)g(x-dimension)f + (will)h(ha)n(v)o(e)396 4265 y(three)k(processors)f(and)g(the)g + (y-dimension)f(will)g(ha)n(v)o(e)h(three)h(processors,)e(totaling)g + (nine)h(pro-)396 4395 y(cessors.)21 b(The)f(command)g + Fq(Doof2d-Array-distributed)60 b(-shmem)k(-np)h(4)g(2)396 + 4524 y(10)h(1000)27 b Fu(uses)h(the)g(MM)f(Shared)i(Memory)e(Library)h + (\()p Fq(-shmem)p Fu(\))f(and)i(four)f(processors.)g(As)396 + 4654 y(for)c(MPI,)g(the)g(remaining)e(command-line)h(ar)n(guments)g + (are)h(speci\002ed)g(on)g(a)g(per)n(-dimension)e(basis)396 + 4783 y(for)j(the)g(tw)o(o-dimensional)e(program.)p Black + 3784 5547 a Fp(63)p Black eop + %%Page: 64 64 + 64 63 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black -2 94 a Fx(3.6.)47 + b(Data-P)-5 b(arallel)46 b Fg(Field)g Fx(Implementation)396 + 310 y Fu(POOMA)28 b Fq(Array)p Fu(s)f(support)g(man)o(y)g(scienti\002c) + h(computations,)e(b)n(ut)h(other)h(scienti\002c)g(computa-)396 + 439 y(tions)h(require)h(v)n(alues)f(distrib)n(uted)f(throughout)g + (space,)i(and)g Fq(Array)p Fu(s)e(ha)n(v)o(e)i(no)f(spatial)g(e)o + (xtent.)396 569 y(POOMA)35 b Fq(Field)p Fu(s,)e(supporting)g(a)i + (superset)f(of)h Fq(Array)f Fu(functionality)-6 b(,)32 + b(model)i(v)n(alues)g(dis-)396 698 y(trib)n(uted)24 b(throughout)f + (space.)396 878 y(A)f Fq(Field)f Fu(consists)g(of)h(a)g(set)g(of)g + (cells)g(distrib)n(uted)e(through)h(space.)h(Lik)o(e)g(an)g + Fq(Array)f Fu(cell,)h(each)396 1007 y Fq(Field)e Fu(cell)h(is)f + (addressed)h(via)g(indices.)f(Unlik)o(e)g(an)h Fq(Array)f + Fu(cell,)h(each)g Fq(Field)f Fu(cell)h(can)g(hold)396 + 1137 y(multiple)26 b(v)n(alues.)g(Lik)o(e)h Fq(Array)p + Fu(s,)e Fq(Field)p Fu(s)h(can)i(be)f(accessed)h(via)f(data-parallel)g + (e)o(xpressions)396 1266 y(and)35 b(stencils)e(and)i(may)f(be)h + (distrib)n(uted)d(across)j(processors.)f(Unlik)o(e)g + Fq(Array)f Fu(cells,)h Fq(Field)396 1396 y Fu(cells)23 + b(e)o(xist)e(in)i(a)g(multidimensional)c(v)n(olume)j(so,)g(e.g.,)h + (distances)f(between)h(cells)f(and)h(normals)f(to)396 + 1525 y(cells)j(can)g(be)g(computed.)396 1704 y(In)j(this)g(section,)f + (we)h(implement)f(the)g Fq(Doof2d)g Fu(tw)o(o-dimensional)f(dif)n + (fusion)g(simulation)g(pro-)396 1834 y(gram)34 b(using)e + Fq(Field)p Fu(s.)g(This)g(simulation)g(does)h(not)g(require)g(an)o(y)g + Fq(Field)p Fu(-speci\002c)g(features,)396 1963 y(b)n(ut)25 + b(we)h(present)f(this)f(program)h(rather)h(than)f(one)h(using)e + Fq(Field)p Fu(-speci\002c)h(features)h(to)f(f)o(acilitate)396 + 2093 y(comparison)f(with)g(the)h Fq(Array)e Fu(v)o(ersions,)h + (especially)g(Example)g(3-3.)396 2372 y Fr(Example)i(3-6.)e(Data-P)o + (arallel)g Fo(Field)g Fr(Implementation)h(of)g Fo(Doof2d)635 + 2731 y Fn(#include)58 b()g(//)h(has)g(std::cout,)f(...)635 + 2860 y(#include)g()g(//)h(has)g(EXIT_SUCCESS)635 + 2990 y(#include)f("Pooma/Fields.h")815 3119 y(//)h(has)g(POOMA's)f + (Field)h(declarations)117 b Fi(\(1\))635 3378 y Fn(//)60 + b(Doof2d:)e(POOMA)h(Fields,)f(data-parallel)f(implementation)635 + 3637 y(int)i(main\(int)f(argc,)h(char)g(*argv[]\))635 + 3767 y({)755 3896 y(//)g(Prepare)f(the)i(POOMA)e(library)g(for)i + (execution.)755 4026 y(Pooma::initialize\(argc,argv\);)755 + 4285 y(//)f(Ask)g(the)g(user)g(for)g(the)h(number)e(of)h(averagings.) + 755 4414 y(long)g(nuAveragings,)e(nuIterations;)755 4544 + y(std::cout<)6 b(<"Please)55 b(enter)k(the)g(number)f(of)i(averagings:) + d(";)755 4673 y(std::cin)h(>)11 b(>)59 b(nuAveragings;)755 + 4803 y(nuIterations)e(=)j(\(nuAveragings+1\)/2;)874 4932 + y(//)g(Each)f(iteration)e(performs)h(two)i(averagings.)p + Black 3784 5547 a Fp(64)p Black eop + %%Page: 65 65 + 65 64 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 755 51 a Fn(//)59 + b(Ask)g(the)g(user)g(for)g(the)h(number)e(n)i(of)f(values)f(along)755 + 180 y(//)h(one)g(dimension)f(of)h(the)h(grid.)755 310 + y(long)f(n;)755 439 y(std::cout)f(<)6 b(<)59 b("Please)f(enter)g(the)i + (field)e(size:)h(";)755 569 y(std::cin)f(>)11 b(>)59 + b(n;)755 828 y(//)g(Specify)f(the)i(fields')e(domains)g([0,n\))h(x)g + ([0,n\).)755 957 y(Interval<1>)e(N\(0,)i(n-1\);)755 1087 + y(Interval<2>)e(vertDomain\(N,)g(N\);)755 1346 y(//)i(Set)g(up)h + (interior)e(domains)g([1,n-1\))g(x)i([1,n-1\))e(for)755 + 1476 y(//)h(computation.)755 1605 y(Interval<1>)e(I\(1,n-2\);)755 + 1735 y(Interval<1>)g(J\(1,n-2\);)755 1994 y(//)i(Specify)f(the)i + (fields')e(mesh,)g(i.e.,)h(its)g(spatial)755 2123 y(//)119 + b(extent,)58 b(and)h(its)g(centering)f(type.)119 b Fi(\(2\))755 + 2253 y Fn(DomainLayout<2>)56 b(layout\(vertDomain\);)755 + 2382 y(UniformRectilinearMesh<2>)874 2512 y(mesh\(layout,)i + (Vector<2>\(0.0\),)e(Vector<2>\(1.0,)h(1.0\)\);)755 2641 + y(Centering<2>)g(cell)i(=)874 2771 y(canonicalCentering<2>\(CellType,) + 53 b(Continuous,)58 b(AllDim\);)755 3030 y(//)h(Create)g(the)g(fields.) + 755 3159 y(//)g(The)g(Field)g(template)f(parameters)g(indicate)g(a)h + (mesh,)g(a)755 3289 y(//)g('double')f(value)h(type,)g(and)g(ordinary)f + ('Brick')755 3418 y(//)h(storage.)f Fi(\(3\))755 3548 + y Fn(Field,)c(double,)k(Brick>)874 + 3677 y(a\(cell,)h(layout,)f(mesh\);)755 3807 y + (Field,)c(double,)k(Brick>)874 + 3936 y(b\(cell,)h(layout,)f(mesh\);)755 4195 y(//)h(Set)g(up)h(the)f + (initial)f(conditions.)755 4325 y(//)h(All)g(grid)g(values)g(should)f + (be)h(zero)g(except)g(for)g(the)755 4454 y(//)g(central)f(value.)755 + 4584 y(a)h(=)h(b)g(=)f(0.0;)755 4713 y(//)g(Ensure)g(all)g + (data-parallel)e(computation)g(finishes)755 4843 y(//)i(before)g + (accessing)e(a)j(value.)755 4972 y(Pooma::blockAndEvaluate\(\);)755 + 5102 y(b\(n/2,n/2\))d(=)j(1000.0;)p Black 3784 5547 a + Fp(65)p Black eop + %%Page: 66 66 + 66 65 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 755 180 a Fn(//)59 + b(In)h(the)f(average,)f(weight)g(elements)g(with)h(this)g(value.)755 + 310 y(const)g(double)f(weight)g(=)i(1.0/9.0;)755 569 + y(//)f(Perform)f(the)i(simulation.)755 698 y(for)f(\(int)g(k)g(=)h(0;)f + (k)h(<)f(nuIterations;)e(++k\))i({)874 828 y(//)h(Read)f(from)g(b.)119 + b(Write)58 b(to)i(a.)119 b Fi(\(4\))874 957 y Fn(a\(I,J\))59 + b(=)g(weight)g(*)994 1087 y(\(b\(I+1,J+1\))e(+)j(b\(I+1,J)118 + b(\))59 b(+)h(b\(I+1,J-1\))e(+)1054 1217 y(b\(I)119 b(,J+1\))58 + b(+)i(b\(I)119 b(,J)g(\))59 b(+)h(b\(I)119 b(,J-1\))59 + b(+)1054 1346 y(b\(I-1,J+1\))e(+)j(b\(I-1,J)118 b(\))59 + b(+)h(b\(I-1,J-1\)\);)874 1605 y(//)g(Read)f(from)g(a.)119 + b(Write)58 b(to)i(b.)874 1735 y(b\(I,J\))f(=)g(weight)g(*)994 + 1864 y(\(a\(I+1,J+1\))e(+)j(a\(I+1,J)118 b(\))59 b(+)h(a\(I+1,J-1\))e + (+)1054 1994 y(a\(I)119 b(,J+1\))58 b(+)i(a\(I)119 b(,J)g(\))59 + b(+)h(a\(I)119 b(,J-1\))59 b(+)1054 2123 y(a\(I-1,J+1\))e(+)j(a\(I-1,J) + 118 b(\))59 b(+)h(a\(I-1,J-1\)\);)755 2253 y(})755 2512 + y(//)f(Print)g(out)g(the)g(final)g(central)f(value.)755 + 2641 y(Pooma::blockAndEvaluate\(\);)874 2771 y(//)i(Ensure)e(all)h + (computation)f(has)h(finished.)755 2900 y(std::cout)f(<)6 + b(<)874 3030 y(\(nuAveragings)57 b(\045)j(2)f(?)h(a\(n/2,n/2\))e(:)h + (b\(n/2,n/2\)\))874 3159 y(<)6 b(<)59 b(std::endl;)755 + 3418 y(//)g(The)g(fields)g(are)g(automatically)e(deallocated.)755 + 3677 y(//)i(Tell)g(the)g(POOMA)g(library)f(execution)g(has)h(finished.) + 755 3807 y(Pooma::finalize\(\);)755 3936 y(return)f(EXIT_SUCCESS;)635 + 4066 y(})p Black 396 4375 a Fr(\(1\))p Black 34 w Fu(T)-8 + b(o)24 b(use)h Fq(Field)p Fu(s,)e(the)i Ft(Pooma/Fields.h)j + Fu(must)c(be)h(included.)p Black 396 4554 a Fr(\(2\))p + Black 34 w Fu(These)i(statements)f(specify)h(the)g(spacing)f(and)i + (number)e(of)h Fq(Field)f Fu(v)n(alues.)h(First,)g(a)g(layout)546 + 4684 y(is)22 b(speci\002ed.)h(Then,)f(a)h(mesh,)f(which)h(speci\002es)g + (the)f(spacing)g(between)h(cells,)g(is)f(created.)h(The)546 + 4813 y Fq(Field)p Fu(')-5 b(s)23 b(centering)h(speci\002es)h(one)g + (cell-centered)h(v)n(alue)e(per)h(cell.)p Black 396 4992 + a Fr(\(3\))p Black 34 w Fq(Field)p Fu(')-5 b(s)24 b(\002rst)i(template) + f(parameter)i(speci\002es)f(the)g(type)f(of)h(mesh)g(to)f(use.)h(The)g + (other)g(tem-)546 5122 y(plate)38 b(parameters)g(are)i(similar)d(to)h + Fq(Array)p Fu(')-5 b(s.)36 b(The)j(constructor)f(ar)n(guments)f + (specify)h(the)p Black 3781 5547 a Fp(66)p Black eop + %%Page: 67 67 + 67 66 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 546 51 a Fq(Field)p + Fu(')-5 b(s)36 b(centering,)h(its)g(domain)f(of)i(cells,)f(and)h(a)g + (mesh)e(specifying)h(the)h(cells')f(spatial)546 180 y(arrangement.)p + Black 396 360 a Fr(\(4\))p Black 34 w Fu(The)20 b(computation)e(for)j + Fq(Field)p Fu(s)d(is)i(the)g(same)g(as)g(for)h Fq(Array)p + Fu(s)e(because)h(this)f(e)o(xample)h(does)546 489 y(not)k(use)h(an)o(y) + f Fq(Field)p Fu(-speci\002c)g(features.)396 898 y(As)h(mentioned)f(abo) + o(v)o(e,)g(the)g(fundamental)g(dif)n(ference)i(between)f + Fq(Array)p Fu(s)e(and)i Fq(Field)p Fu(s)f(is)g(the)396 + 1027 y(latter)i(has)f(cells)g(and)h(meshes.)f(The)g Fq(Field)g + Fu(declarations)g(re\003ect)h(this.)f(T)-8 b(o)25 b(declare)i(a)f + Fq(Field)p Fu(,)396 1157 y(the)33 b Ft(Pooma/Fields.h)j + Fu(header)d(\002le)f(must)g(be)g(included.)g(A)g Fq(Field)p + Fu(')-5 b(s)31 b(domain)g(consists)g(of)i(a)396 1286 + y(set)28 b(of)g(cells,)f(sometimes)g(called)h(positions)d(when)j + (referring)h(to)e Fq(Array)p Fu(s.)g(As)g(for)i Fq(Array)p + Fu(s,)d(a)396 1416 y Fq(Field)p Fu(')-5 b(s)22 b(domain)g(and)h(its)f + (layout)h(must)f(be)h(speci\002ed.)h(Since)f(the)g(abo)o(v)o(e)f + (program)h(is)g(designed)396 1545 y(for)30 b(uniprocessor)f + (computation,)f(specifying)g(the)i(domain)e(speci\002es)i(the)g + (layout.)e(A)i Fq(Field)p Fu(')-5 b(s)396 1675 y Fp(mesh)36 + b Fu(speci\002es)h(its)e(spatial)h(e)o(xtent.)f(F)o(or)h(e)o(xample,)f + (one)i(can)f(ask)g(the)g(mesh)g(for)h(the)f(distance)396 + 1804 y(between)d(tw)o(o)f(cells)h(or)g(for)g(the)f(normals)g(to)g(a)i + (particular)e(cell.)h(Cells)f(in)h(a)g Fq(UniformRec-)396 + 1934 y(tilinearMesh)26 b Fu(all)i(ha)n(v)o(e)g(the)g(same)g(size)h(and) + f(are)h(parallelepipeds.)e(T)-8 b(o)29 b(create)g(the)f(mesh,)396 + 2063 y(one)d(speci\002es)f(the)h(layout,)e(the)i(location)e(of)i(the)f + (spatial)g(point)f(corresponding)h(to)g(the)g(lo)n(wer)l(,)g(left)396 + 2193 y(domain)h(location,)g(and)g(the)h(size)g(of)g(a)g(particular)f + (cell.)h(Since)g(this)f(program)h(does)f(not)g(use)h(mesh)396 + 2322 y(computations,)h(our)h(choices)g(do)h(not)f(matter)-5 + b(.)27 b(W)-8 b(e)29 b(specify)g(the)f(domain')-5 b(s)27 + b(lo)n(wer)l(,)h(left)g(corner)h(as)396 2452 y(spatial)d(location)f + (\(0.0,)h(0.0\))h(and)f(each)h(cell')-5 b(s)26 b(width)f(and)i(height)e + (as)i(1.)f(Thus,)f(the)i(middle)e(of)h(the)396 2581 y(cell)f(at)g + (domain)f(position)f(\(3,4\))h(is)h(\(3.5,)f(4.5\).)396 + 2761 y(A)30 b Fq(Field)f Fu(cell)g(can)h(contain)f(one)h(or)g(more)g(v) + n(alues)e(although)h(each)h(cell)g(must)e(ha)n(v)o(e)i(the)f(same)396 + 2890 y(arrangement)36 b(of)g(v)n(alues.)f(F)o(or)h(this)f(simulation,)f + (we)i(desire)g(one)g(v)n(alue)g(per)g(cell)g(so)g(we)g(place)396 + 3020 y(that)25 b(position)f(at)h(the)g(cell')-5 b(s)25 + b(center)l(,)g(i.e.,)g(a)h(cell)f(centering.)g(The)h + Fq(canonicalCentering)396 3149 y Fu(function)e(returns)h(such)f(a)h + (centering.)g(.)396 3329 y(A)39 b Fq(Field)e Fu(declaration)h(is)g + (analogous)g(to)g(an)h Fq(Array)e Fu(declaration)h(b)n(ut)g(must)f + (also)h(specify)396 3458 y(a)33 b(centering)g(and)f(a)h(mesh.)f(In)h + (Example)e(3-3,)i(the)f Fq(Array)g Fu(declaration)g(speci\002es)h(the)f + (array')-5 b(s)396 3588 y(dimensionality)f(,)30 b(the)i(v)n(alue)g + (type,)g(the)h Fq(Engine)e Fu(type,)h(and)h(a)g(layout.)e + Fq(Field)h Fu(declarations)396 3717 y(specify)j(the)f(same)h(v)n + (alues.)f(Its)g(\002rst)h(template)f(parameter)h(speci\002es)g(the)g + (mesh')-5 b(s)33 b(type,)i(which)396 3847 y(includes)29 + b(an)h(indication)f(of)h(its)f(dimensionality)-6 b(.)27 + b(The)j(second)g(and)g(third)f(template)g(parameters)396 + 3976 y(specify)34 b(the)f(v)n(alue)g(type)g(and)h(the)g + Fq(Engine)e Fu(type.)h(Since)h(a)g Fq(Field)e Fu(has)i(a)g(centering)f + (and)h(a)396 4106 y(mesh)24 b(in)h(addition)e(to)i(a)g(layout,)f(those) + g(ar)n(guments)g(are)i(also)e(necessary)-6 b(.)396 4285 + y Fq(Field)46 b Fu(operations)g(are)h(a)g(superset)f(of)h + Fq(Array)f Fu(operations)g(so)g(the)h Fq(Doof2d)e Fu(compu-)396 + 4415 y(tations)f(are)h(the)f(same)h(as)f(in)g(Example)g(3-3.)g + Fq(Field)g Fu(accesses)h(require)g(parentheses,)f(not)396 + 4544 y(square)49 b(brack)o(ets,)f(and)g(accesses)h(to)e(indi)n(vidual)f + (v)n(alues)i(should)f(be)h(preceded)h(by)f(calls)g(to)396 + 4674 y Fq(Pooma::blockAndEvaluate)p Fu(.)396 4853 y(T)-8 + b(o)27 b(summarize,)f Fq(Field)p Fu(s)f(support)g(multiple)g(v)n(alues) + h(per)h(cell)g(and)f(ha)n(v)o(e)h(spatial)e(e)o(xtent.)h(Thus,)396 + 4982 y(their)k(declarations)f(must)g(specify)g(a)h(centering)g(and)g(a) + g(mesh.)f(Otherwise,)g(a)h Fq(Field)f Fu(program)396 + 5112 y(is)c(similar)e(to)i(one)f(using)g Fq(Array)p Fu(s.)p + Black 3780 5547 a Fp(67)p Black eop + %%Page: 68 68 + 68 67 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black -2 94 a Fx(3.7.)47 + b(Distrib)m(uted)h Fg(Field)e Fx(Implementation)396 310 + y Fu(A)35 b(POOMA)g(program)g(using)f Fq(Field)p Fu(s)g(can)i(e)o(x)o + (ecute)e(on)h(one)g(or)g(more)g(processors.)g(In)g(Sec-)396 + 439 y(tion)c(3.5,)g(we)h(demonstrated)f(ho)n(w)g(to)g(modify)f(a)i + (uniprocessor)f(stencil)g Fq(Array)g Fu(implementa-)396 + 569 y(tion)24 b(to)h(run)g(on)g(multiple)e(processors.)i(In)g(this)f + (section,)g(we)i(demonstrate)e(that)g(the)h(uniprocessor)396 + 698 y(data-parallel)c Fq(Field)f Fu(implementation)e(of)j(the)f(pre)n + (vious)g(section)g(can)h(be)g(similarly)e(con)l(v)o(erted.)396 + 828 y(Only)25 b(the)h(container)f(declarations)g(change;)g(the)h + (computations)d(do)j(not.)f(Since)h(the)f(changes)h(are)396 + 957 y(e)o(xactly)e(analogous)g(to)h(those)f(in)g(Section)h(3.5,)f(our)h + (e)o(xposition)e(here)i(will)f(be)h(shorter)-5 b(.)396 + 1236 y Fr(Example)26 b(3-7.)e(Distrib)n(uted)i(Data-P)o(arallel)e + Fo(Field)g Fr(Implementation)h(of)g Fo(Doof2d)635 1595 + y Fn(#include)58 b()g(//)h(has)g(EXIT_SUCCESS)635 + 1724 y(#include)f("Pooma/Fields.h")874 1854 y(//)i(has)f(POOMA's)f + (Field)h(declarations)635 2113 y(//)h(Doof2d:)e(POOMA)h(Fields,)f + (data-parallel,)e(multiple)635 2242 y(//)k(processor)d(implementation) + 635 2501 y(int)i(main\(int)f(argc,)h(char)g(*argv[]\))635 + 2631 y({)755 2760 y(//)g(Prepare)f(the)i(POOMA)e(library)g(for)i + (execution.)755 2890 y(Pooma::initialize\(argc,argv\);)755 + 3149 y(//)f(Since)g(multiple)f(copies)g(of)i(this)f(program)f(may)755 + 3279 y(//)h(simultaneously)e(run,)i(we)g(canot)g(use)g(standard)f + (input)755 3408 y(//)h(and)g(output.)118 b(Instead)59 + b(we)g(use)g(command-line)755 3538 y(//)g(arguments,)f(which)g(are)i + (replicated,)d(for)i(input,)f(and)h(we)755 3667 y(//)g(use)g(an)h + (Inform)e(stream)h(for)g(output.)118 b Fi(\(1\))755 3797 + y Fn(Inform)58 b(output;)755 4056 y(//)h(Read)g(the)g(program)f(input)h + (from)g(the)g(command-line)e(arguments.)755 4185 y(if)i(\(argc)g(!=)g + (4\))h({)874 4315 y(//)g(Incorrect)e(number)g(of)h(command-line)e + (arguments.)874 4444 y(output)i(<)6 b(<)59 b(argv[0])f(<)6 + b(<)994 4574 y(":)59 b(number-of-processors)d(number-of-averagings")994 + 4703 y(<)6 b(<)59 b(")g(number-of-values")994 4833 y(<)6 + b(<)59 b(std::endl;)874 4962 y(return)g(EXIT_FAILURE;)755 + 5092 y(})p Black 3784 5547 a Fp(68)p Black eop + %%Page: 69 69 + 69 68 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 755 51 a Fn(char)59 + b(*tail;)755 310 y(//)g(Determine)f(the)h(number)g(of)g(processors.)755 + 439 y(long)g(nuProcessors;)755 569 y(nuProcessors)e(=)j + (strtol\(argv[1],)c(&tail,)i(0\);)755 828 y(//)h(Determine)f(the)h + (number)g(of)g(averagings.)755 957 y(long)g(nuAveragings,)e + (nuIterations;)755 1087 y(nuAveragings)g(=)j(strtol\(argv[2],)c(&tail,) + i(0\);)755 1217 y(nuIterations)f(=)j(\(nuAveragings+1\)/2;)874 + 1346 y(//)g(Each)f(iteration)e(performs)h(two)i(averagings.)755 + 1605 y(//)f(Ask)g(the)g(user)g(for)g(the)h(number)e(n)i(of)f(values)f + (along)755 1735 y(//)h(one)g(dimension)f(of)h(the)h(grid.)755 + 1864 y(long)f(n;)755 1994 y(n)g(=)h(strtol\(argv[3],)c(&tail,)j(0\);) + 755 2123 y(//)g(The)g(dimension)f(must)h(be)g(a)h(multiple)e(of)h(the)g + (number)g(of)755 2253 y(//)g(processors)f(since)g(we)i(are)f(using)g(a) + g(UniformGridLayout.)755 2382 y(n)g(=)h(\(\(n+nuProcessors-1\))c(/)j + (nuProcessors\))e(*)j(nuProcessors;)755 2641 y(//)f(Specify)f(the)i + (fields')e(domains)g([0,n\))h(x)g([0,n\).)755 2771 y(Interval<1>)e + (N\(0,)i(n-1\);)755 2900 y(Interval<2>)e(vertDomain\(N,)g(N\);)755 + 3159 y(//)i(Set)g(up)h(interior)e(domains)g([1,n-1\))g(x)i([1,n-1\))e + (for)755 3289 y(//)h(computation.)755 3418 y(Interval<1>)e(I\(1,n-2\);) + 755 3548 y(Interval<1>)g(J\(1,n-2\);)755 3807 y(//)i(Partition)f(the)h + (fields')f(domains)h(uniformly,)e(i.e.,)755 3936 y(//)i(each)g(patch)g + (has)g(the)g(same)g(size.)118 b(The)59 b(first)g(parameter)755 + 4066 y(//)g(tells)g(how)g(many)g(patches)f(for)h(each)g(dimension.)117 + b(Guard)755 4195 y(//)59 b(layers)g(optimize)f(communication)f(between) + h(patches.)755 4325 y(//)h(Internal)f(guards)h(surround)f(each)h + (patch.)118 b(External)755 4454 y(//)59 b(guards)g(surround)f(the)h + (entire)f(field)h(domain.)118 b Fi(\(2\))755 4584 y Fn + (UniformGridPartition<2>)874 4713 y(partition\(Loc<2>\(nuProcessors,)54 + b(nuProcessors\),)994 4843 y(GuardLayers<2>\(1\),)116 + b(//)59 b(internal)994 4972 y(GuardLayers<2>\(0\)\);)d(//)j(external) + 755 5102 y(UniformGridLayout<2>)p Black 3784 5547 a Fp(69)p + Black eop + %%Page: 70 70 + 70 69 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 874 51 a Fn(layout\(vertDomain,) + 56 b(partition,)i(DistributedTag\(\)\);)755 310 y(//)h(Specify)f(the)i + (fields')e(mesh,)g(i.e.,)h(its)g(spatial)755 439 y(//)g(extent,)f(and)i + (its)f(centering)e(type.)119 b Fi(\(3\))755 569 y Fn + (UniformRectilinearMesh<2>)874 698 y(mesh\(layout,)58 + b(Vector<2>\(0.0\),)e(Vector<2>\(1.0,)h(1.0\)\);)755 + 828 y(Centering<2>)g(cell)i(=)874 957 y + (canonicalCentering<2>\(CellType,)53 b(Continuous,)58 + b(AllDim\);)755 1217 y(//)h(The)g(Field)g(template)f(parameters)g + (indicate)g(a)h(mesh)g(and)755 1346 y(//)g(a)h('double')e(value)g + (type.)119 b(MultiPatch)57 b(indicates)755 1476 y(//)i(multiple)f + (computation)g(patches,)g(i.e.,)g(distributed)755 1605 + y(//)h(computation.)117 b(The)59 b(UniformTag)f(indicates)g(the)h + (patches)755 1735 y(//)g(should)g(have)g(the)g(same)g(size.)118 + b(Each)59 b(patch)g(has)g(Brick)755 1864 y(//)g(type.)119 + b Fi(\(4\))755 1994 y Fn(Field,)54 + b(double,)1293 2123 y(MultiPatch)11 + b(>)g(>)874 2253 y(a\(cell,)59 b(layout,)f(mesh\);)755 + 2382 y(Field,)c(double,)874 + 2512 y(MultiPatch)11 b(>)g(>)874 + 2641 y(b\(cell,)59 b(layout,)f(mesh\);)755 2900 y(//)h(Set)g(up)h(the)f + (initial)f(conditions.)755 3030 y(//)h(All)g(grid)g(values)g(should)f + (be)h(zero)g(except)g(for)g(the)755 3159 y(//)g(central)f(value.)755 + 3289 y(a)h(=)h(b)g(=)f(0.0;)755 3418 y(//)g(Ensure)g(all)g + (data-parallel)e(computation)g(finishes)755 3548 y(//)i(before)g + (accessing)e(a)j(value.)755 3677 y(Pooma::blockAndEvaluate\(\);)755 + 3807 y(b\(n/2,n/2\))d(=)j(1000.0;)755 4066 y(//)f(In)h(the)f(average,)f + (weight)g(elements)g(with)h(this)g(value.)755 4195 y(const)g(double)f + (weight)g(=)i(1.0/9.0;)755 4454 y(//)f(Perform)f(the)i(simulation.)755 + 4584 y(for)f(\(int)g(k)g(=)h(0;)f(k)h(<)f(nuIterations;)e(++k\))i({)874 + 4713 y(//)h(Read)f(from)g(b.)119 b(Write)58 b(to)i(a.)874 + 4843 y(a\(I,J\))f(=)g(weight)g(*)994 4972 y(\(b\(I+1,J+1\))e(+)j + (b\(I+1,J)118 b(\))59 b(+)h(b\(I+1,J-1\))e(+)1054 5102 + y(b\(I)119 b(,J+1\))58 b(+)i(b\(I)119 b(,J)g(\))59 b(+)h(b\(I)119 + b(,J-1\))59 b(+)p Black 3784 5547 a Fp(70)p Black eop + %%Page: 71 71 + 71 70 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 1054 51 a Fn(b\(I-1,J+1\))57 + b(+)j(b\(I-1,J)118 b(\))59 b(+)h(b\(I-1,J-1\)\);)874 + 310 y(//)g(Read)f(from)g(a.)119 b(Write)58 b(to)i(b.)874 + 439 y(b\(I,J\))f(=)g(weight)g(*)994 569 y(\(a\(I+1,J+1\))e(+)j + (a\(I+1,J)118 b(\))59 b(+)h(a\(I+1,J-1\))e(+)1054 698 + y(a\(I)119 b(,J+1\))58 b(+)i(a\(I)119 b(,J)g(\))59 b(+)h(a\(I)119 + b(,J-1\))59 b(+)1054 828 y(a\(I-1,J+1\))e(+)j(a\(I-1,J)118 + b(\))59 b(+)h(a\(I-1,J-1\)\);)755 957 y(})755 1217 y(//)f(Print)g(out)g + (the)g(final)g(central)f(value.)755 1346 y + (Pooma::blockAndEvaluate\(\);)874 1476 y(//)i(Ensure)e(all)h + (computation)f(has)h(finished.)755 1605 y(output)f(<)6 + b(<)874 1735 y(\(nuAveragings)57 b(\045)j(2)f(?)h(a\(n/2,n/2\))e(:)h + (b\(n/2,n/2\)\))874 1864 y(<)6 b(<)59 b(std::endl;)755 + 2123 y(//)g(The)g(fields)g(are)g(automatically)e(deallocated.)755 + 2382 y(//)i(Tell)g(the)g(POOMA)g(library)f(execution)g(has)h(finished.) + 755 2512 y(Pooma::finalize\(\);)755 2641 y(return)f(EXIT_SUCCESS;)635 + 2771 y(})p Black 396 3080 a Fr(\(1\))p Black 34 w Fu(Multiple)21 + b(copies)h(of)h(a)g(distrib)n(uted)e(program)h(may)h(simultaneously)d + (run,)i(perhaps)h(each)g(ha)n(v-)546 3209 y(ing)f(its)h(o)n(wn)f(input) + g(and)h(output.)f(Thus,)g(we)i(use)f(command-line)f(ar)n(guments)g(to)h + (pass)g(input)f(to)546 3339 y(the)i(program.)h(Using)f(an)h + Fq(Inform)e Fu(stream)h(ensures)h(only)f(one)h(cop)o(y)g(produces)f + (output.)p Black 396 3518 a Fr(\(2\))p Black 34 w Fu(The)35 + b Fq(UniformGridPartition)c Fu(declaration)k(speci\002es)h(ho)n(w)e(an) + i(array')-5 b(s)35 b(domain)546 3647 y(will)28 b(be)h(partitioned,)f + (or)h(split,)f(into)g(patches.)h(Guard)g(layers)g(are)h(an)f + (optimization)e(that)i(can)546 3777 y(reduce)e(data)f(communication)f + (between)h(patches.)h(The)f Fq(UniformGridLayout)d Fu(dec-)546 + 3906 y(laration)29 b(applies)f(the)i(partition)e(to)h(the)g(gi)n(v)o + (en)f(domain,)g(distrib)n(uting)f(the)i(resulting)f(patches)546 + 4036 y(among)c(v)n(arious)g(processors.)p Black 396 4215 + a Fr(\(3\))p Black 34 w Fu(The)f(mesh)f(and)h(centering)g(declarations) + g(are)h(the)f(same)g(for)g(uniprocessor)f(and)i(multiproces-)546 + 4345 y(sor)g(implementations.)p Black 396 4524 a Fr(\(4\))p + Black 34 w Fu(The)29 b Fq(MultiPatch)d(Engine)i Fu(distrib)n(utes)f + (requests)h(for)h Fq(Field)f Fu(v)n(alues)g(to)h(the)f(asso-)546 + 4654 y(ciated)j(patch.)f(Since)i(a)f(patch)g(may)g(associated)f(with)g + (a)i(dif)n(ferent)e(processor)l(,)h(its)f(\223remote\224)546 + 4783 y(engine)18 b(has)h(type)g Fq(Remote)p Fu(.)c(POOMA)k + (automatically)f(distrib)n(utes)f(the)h(patches)546 4913 + y(among)24 b(a)n(v)n(ailable)g(memories)g(and)g(processors.)p + Black 3784 5547 a Fp(71)p Black eop + %%Page: 72 72 + 72 71 bop Black 2507 -132 a Fp(Chapter)24 b(3.)h(A)f(T)-5 + b(utorial)24 b(Intr)l(oduction)p Black 396 51 a Fu(This)36 + b(program)h(can)g(be)g(vie)n(wed)f(as)h(the)g(combination)e(of)i + (Example)f(3-6)h(and)g(the)g(changes)g(to)396 180 y(form)24 + b(the)g(distrib)n(uted)e(stencil-based)h Fq(Array)g Fu(program)g(from)h + (the)g(uniprocessor)f(stencil-based)396 310 y Fq(Array)h + Fu(program.)p Black 396 738 a Fs(\225)p Black 72 w Fu(Distrib)n(uted)i + (programs)i(may)f(ha)n(v)o(e)h(multiple)f(processes,)g(each)i(with)e + (its)h(o)n(wn)f(input)g(and)h(out-)496 868 y(put)23 b(streams.)g(T)-8 + b(o)24 b(pass)f(input)g(to)h(these)f(processes,)h(this)f(programs)g + (uses)g(command-line)g(ar)n(gu-)496 997 y(ments,)i(which)g(are)h + (replicated)g(for)g(each)g(process.)g(An)f Fq(Inform)f + Fu(stream)i(accepts)g(data)g(from)496 1127 y(an)o(y)e(conte)o(xt)g(b)n + (ut)g(prints)g(only)g(data)h(from)f(conte)o(xt)g(0.)p + Black 396 1306 a Fs(\225)p Black 72 w Fu(A)g(layout)g(for)g(a)h + (distrib)n(uted)e(program)g(speci\002es)i(a)g(domain,)e(a)h(partition,) + f(and)i(a)f(conte)o(xt)f(map-)496 1436 y(per)-5 b(.)25 + b(A)g Fq(DistributedTag)d Fu(conte)o(xt)j(mapper)g(tag)g(indicates)f + (that)h(pieces)h(of)f(the)g(domain)496 1565 y(should)32 + b(be)h(distrib)n(uted)e(among)h(patches,)h(while)f(a)i + Fq(ReplicatedTag)c Fu(conte)o(xt)h(mapper)496 1695 y(tag)25 + b(indicates)f(the)g(entire)h(domain)f(should)f(be)i(replicated)g(to)f + (each)i(patch.)p Black 396 1874 a Fs(\225)p Black 72 + w Fu(A)f Fq(MultiPatch)d(Engine)h Fu(supports)g(the)i(use)g(of)f + (multiple)f(patches,)i(while)f(a)h Fq(remote)496 2004 + y Fu(engine)37 b(supports)g(computation)f(distrib)n(uted)g(among)h(v)n + (arious)g(conte)o(xts.)f(Both)i(are)g(usually)496 2133 + y(necessary)25 b(for)g(distrib)n(uted)e(computation.)p + Black 396 2312 a Fs(\225)p Black 72 w Fu(The)30 b(computation)e(for)i + (uniprocessor)g(or)g(distrib)n(uted)e(implementations)f(remains)j(the)g + (same.)496 2442 y(The)j(POOMA)f(T)-8 b(oolkit)32 b(automatically)f + (handles)h(all)h(communication)e(necessary)i(to)f(ensure)496 + 2571 y(up-to-date)24 b(v)n(alues)g(are)i(a)n(v)n(ailable)e(when)h + (needed.)p Black 396 2751 a Fs(\225)p Black 72 w Fu(The)62 + b(command)e(to)i(in)l(v)n(ok)o(e)f(a)h(distrib)n(uted)e(program)h(is)h + (system-dependent.)e(F)o(or)h(e)o(x-)496 2880 y(ample,)51 + b(the)h Fq(mpirun)64 b(-np)h(4)h(Doof2d-Field-distributed)60 + b(-mpi)k(2)496 3010 y(10)h(1000)24 b Fu(command)g(might)f(use)i(MPI)g + (communication.)735 3269 y Fn(Doof2d-Field-distributed)54 + b(-shmem)59 b(-np)g(4)g(2)h(10)f(1000)496 3528 y Fu(might)23 + b(use)i(the)g(MM)f(Shared)h(Memory)f(Library)-6 b(.)p + Black 3784 5547 a Fp(72)p Black eop + %%Page: 73 73 + 73 72 bop Black Black -2 119 a Fy(Chapter)58 b(4.)f(Over)r(vie)m(w)g + (of)h(POOMA)-2 387 y(Concepts)396 685 y Fu(In)23 b(the)f(pre)n(vious)f + (chapter)l(,)i(we)f(presented)h(se)n(v)o(eral)e(dif)n(ferent)h + (implementations)e(of)i(the)h Fq(Doof2d)396 814 y Fu(simulation)37 + b(program.)i(The)g(implementations)d(illustrate)i(the)h(v)n(arious)e + (containers,)i(computa-)396 944 y(tion)30 b(modes,)g(and)g(computation) + f(en)l(vironments)g(that)h(POOMA)h(supports.)e(In)i(this)e(chapter)l(,) + i(we)396 1073 y(describe)38 b(the)g(concepts)g(associated)g(with)f + (each)i(of)f(these)g(three)g(cate)o(gories.)g(Speci\002c)h(details)396 + 1203 y(needed)25 b(for)g(their)g(use)g(are)g(deferred)h(to)e(later)h + (chapters.)396 1382 y(The)g(most)f(important)f(POOMA)i(concepts)f(can)h + (be)g(grouped)g(into)f(three)h(separate)g(cate)o(gories:)396 + 1661 y(containers)p Black Black 596 1840 a(data)f(structures)h(holding) + e(one)i(or)g(more)f(v)n(alues)g(and)h(usually)f(accessed)h(using)f + (indices)396 2069 y(computation)f(modes)p Black Black + 596 2249 a(styles)g(of)i(e)o(xpressing)f(computations)f(and)h(accesses) + i(to)e(container)h(v)n(alues)396 2478 y(computation)e(en)l(vironment)p + Black Black 596 2657 a(description)g(of)i(resources)g(for)g(computing,) + e(e.g.,)i(single)f(processor)g(or)h(multiprocessor)-5 + b(.)396 2836 y(T)d(able)30 b(4-1)f(cate)o(gorizes)g(the)g(POOMA)h + (concepts.)f(Man)o(y)f(POOMA)h(programs)g(select)g(one)h(pos-)396 + 2966 y(sibility)37 b(from)h(each)h(cate)o(gory)-6 b(.)38 + b(F)o(or)g(e)o(xample,)g(Example)f(3-4)i(used)f Fq(Array)f + Fu(containers)h(and)396 3095 y(stencils)e(for)i(sequential)e + (computation,)f(while)i(Example)f(3-7)h(used)g Fq(Field)f + Fu(containers)g(and)396 3225 y(data-parallel)22 b(statements)f(with)g + (distrib)n(uted)g(computation.)f(A)i(program)f(may)h(use)g(multiple)e + (con-)396 3354 y(tainers)29 b(and)f(v)n(arious)g(computation)f(modes,)g + (b)n(ut)h(the)h(computation)e(en)l(vironment)g(is)h(either)h(dis-)396 + 3484 y(trib)n(uted)24 b(or)h(not.)396 3763 y Fr(T)-9 + b(able)26 b(4-1.)e(POOMA)g(Concepts)2982 4000 y Fv(Computation)732 + 4141 y(Container)452 b(Computation)27 b(Modes)382 b(En)l(vir)n(onment) + 801 4283 y Fq(Array)731 b Fu(element-wise)694 b(sequential)570 + 4425 y Fq(DynamicArray)516 b Fu(data-parallel)701 b(distrib)n(uted)801 + 4566 y Fq(Field)736 b Fu(stencil-based)768 4708 y Fq(Tensor)775 + b Fu(relational)636 4850 y Fq(TinyMatrix)768 4991 y(Vector)p + Black 3784 5547 a Fp(73)p Black eop + %%Page: 74 74 + 74 73 bop Black 2180 -132 a Fp(Chapter)25 b(4.)f(Overvie)o(w)h(of)g + (POOMA)f(Concepts)p Black 396 51 a Fu(In)g(the)g(rest)g(of)g(this)f + (chapter)l(,)h(we)h(e)o(xplore)e(these)h(three)g(cate)o(gories.)f + (First,)h(we)g(describe)g(POOMA)396 180 y(containers,)j(illustrating)f + (the)i(purposes)f(of)h(each,)g(and)g(e)o(xplaining)e(the)h(concepts)h + (needed)g(to)f(de-)396 310 y(clare)h(them.)e(Then,)h(we)g(describe)g + (the)g(dif)n(ferent)g(computation)e(modes)h(and)h(distrib)n(uted)f + (compu-)396 439 y(tation)e(concepts.)-2 892 y Fx(4.1.)47 + b(POOMA)h(Container)m(s)396 1108 y Fu(Most)28 b(POOMA)h(programs)g(use) + g Fp(container)o(s)f Fu(to)h(store)g(groups)f(of)h(v)n(alues.)g(POOMA)g + (containers)396 1237 y(are)h(objects)d(that)h(store)h(other)f(objects)g + (such)g(as)h(numbers)e(or)i(v)o(ectors.)f(The)o(y)f(control)h + (allocation)396 1367 y(and)k(deallocation)e(of)i(these)f(stored)g + (objects)f(and)i(access)g(to)f(them.)f(The)o(y)h(are)h(a)g + (generalization)396 1496 y(of)e(C)f(arrays,)h(b)n(ut)f(POOMA)g + (containers)g(are)h(\002rst-class)f(objects)f(so)h(the)o(y)g(can)g(be)h + (used)f(directly)396 1626 y(in)g(e)o(xpressions.)e(The)o(y)h(are)i + (also)e(similar)g(to)g(C++)i(containers)f(such)f(as)h + Fq(vector)p Fu(,)e Fq(list)p Fu(,)h(and)396 1755 y Fq(stack)p + Fu(.)c(See)i(T)-8 b(able)24 b(4-2)h(for)g(a)g(summary)f(of)h(the)g + (containers.)396 1934 y(This)34 b(section)f(describes)h(man)o(y)f + (concepts,)h(b)n(ut)g(one)g(need)g(not)g(understand)f(them)h(all)g(to)f + (be)o(gin)396 2064 y(programming)k(with)h(the)h(POOMA)f(T)-8 + b(oolkit.)37 b(First,)h(we)h(introduce)f(the)h(dif)n(ferent)f(POOMA')-5 + b(s)396 2194 y(containers)30 b(and)h(describe)g(ho)n(w)e(to)i(choose)f + (an)h(appropriate)f(one)h(for)g(a)f(particular)h(task.)f(Figure)396 + 2323 y(4-1)25 b(indicates)f(which)h(concepts)f(must)g(be)h(understood)f + (when)g(declaring)h(a)g(particular)g(container)-5 b(.)396 + 2453 y(All)31 b(of)h(these)g(concepts)f(are)i(described)e(in)h(Section) + g(4.1.2)f(and)g(Section)h(4.1.3.)f(Use)h(this)f(\002gure)396 + 2582 y(to)26 b(decide)g(which)f(concepts)h(in)f(the)h(former)g(are)g + (rele)n(v)n(ant.)f(Reading)h(the)g(latter)f(section)g(is)h(neces-)396 + 2712 y(sary)f(only)f(if)h(computing)e(using)h(multiple)f(processors.)h + (The)h(programs)f(in)h(the)f(pre)n(vious)g(chapter)396 + 2841 y(illustrate)g(man)o(y)g(of)h(these)f(concepts.)396 + 3020 y(T)-8 b(able)23 b(4-2)f(brie\003y)h(describes)g(the)f(six)g + (POOMA)g(containers.)h(The)o(y)f(are)h(more)f(fully)g(described)h(in) + 396 3150 y(the)i(paragraphs)g(belo)n(w)-6 b(.)396 3429 + y Fr(T)d(able)26 b(4-2.)e(POOMA)g(Container)i(Summary)396 + 3665 y Fj(Array)1414 b Fu(container)24 b(mapping)g Fp(indices)g + Fu(to)g(v)n(alues)g(and)2140 3795 y(that)g(may)h(be)f(used)h(in)f(e)o + (xpressions)396 3937 y Fj(DynamicArray)952 b Fu(one-dimensional)23 + b Fq(Array)g Fu(whose)i Fp(domain)2140 4066 y Fu(can)g(be)g + (dynamically)e(resized)396 4208 y Fj(Field)1414 b Fu(container)24 + b(mapping)g Fp(indices)g Fu(to)g(one)h(or)g(more)2140 + 4337 y(v)n(alues)f(and)g(residing)g(in)h(multidimensional)2140 + 4467 y(space)396 4609 y Fj(Tensor)1348 b Fu(multidimensional)21 + b(mathematical)j(tensor)396 4750 y Fj(TinyMatrix)1084 + b Fu(tw)o(o-dimensional)22 b(mathematical)i(matrix)396 + 4892 y Fj(Vector)1348 b Fu(multidimensional)21 b(mathematical)j(v)o + (ector)396 5146 y(A)29 b(POOMA)g Fj(Array)38 b Fu(generalizes)29 + b(a)g(C)h(array)g(and)f(maps)g Fp(indices)f Fu(to)h(v)n(alues.)f(Gi)n + (v)o(en)g(an)h(inde)o(x)p Black 3784 5547 a Fp(74)p Black + eop + %%Page: 75 75 + 75 74 bop Black 2180 -132 a Fp(Chapter)25 b(4.)f(Overvie)o(w)h(of)g + (POOMA)f(Concepts)p Black 396 51 a Fu(or)31 b(position)e(in)h(an)h + Fq(Array)p Fu(')-5 b(s)29 b(domain,)g(it)h(returns)h(the)f(associated)g + (v)n(alue,)g(either)h(by)f(returning)396 180 y(a)37 b(stored)f(v)n + (alue)g(or)h(by)g(computing)e(it.)h(The)g(use)h(of)f(indices,)g(which)h + (are)g(usually)f(ordered)h(tu-)396 310 y(ples,)c(permits)g + (constant-time)f(access)j(although)d(computing)g(a)i(particular)g(v)n + (alue)f(may)g(require)396 439 y(signi\002cant)24 b(time.)g(In)g + (addition)g(to)g(the)g(functionality)f(pro)o(vided)g(by)i(C)g(arrays,)g + (the)f Fq(Array)g Fu(class)396 569 y(automatically)k(handles)h(memory)f + (allocation)g(and)i(deallocation,)e(supports)g(a)h(wider)h(v)n(ariety)e + (of)396 698 y(assignments,)19 b(and)i(can)g(be)g(used)f(in)g(e)o + (xpressions.)f(F)o(or)i(e)o(xample,)f(the)g(addition)g(of)g(tw)o(o)h + (arrays)g(can)396 828 y(be)k(assigned)f(to)h(an)g(array)g(and)g(the)g + (product)f(of)h(a)g(scalar)g(element)f(and)h(an)g(array)h(is)e + (permissible.)396 1007 y(A)h(POOMA)g Fj(DynamicArray)31 + b Fu(e)o(xtends)24 b Fq(Array)g Fu(capabilities)g(to)g(support)g(a)h + (dynamically-)396 1137 y(changing)f(domain)g(b)n(ut)g(is)g(restricted)h + (to)f(only)g(one)h(dimension.)e(When)i(the)f Fq(DynamicArray)396 + 1266 y Fu(is)h(resized,)g(its)f(v)n(alues)g(are)h(preserv)o(ed.)396 + 1446 y(A)i(POOMA)f Fj(Field)k Fu(is)c(an)g Fq(Array)g + Fu(with)f(spatial)h(e)o(xtent.)g(Each)g(domain)g(consists)f(of)h + Fp(cell)p Fu(s)h(in)396 1575 y(one-,)34 b(tw)o(o-,)f(or)g + (three-dimensional)f(space.)h(Although)f(inde)o(x)o(ed)g(similarly)g + (to)h Fq(Array)p Fu(s,)f(each)396 1705 y(cell)k(may)f(contain)g + (multiple)f(v)n(alues)h(and)h(multiple)e(materials.)h(A)g + Fq(Field)p Fu(')-5 b(s)34 b Fp(mesh)i Fu(stores)f(its)396 + 1834 y(spatial)29 b(characteristics)g(and)h(can)f(yield,)g(e.g.,)g(the) + h(cell)f(at)g(a)h(particular)f(point,)g(the)g(distance)g(be-)396 + 1964 y(tween)g(tw)o(o)f(cells,)g(or)h(a)g(cell')-5 b(s)28 + b(normals.)g(A)g Fq(Field)g Fu(should)f(be)i(used)f(whene)n(v)o(er)g + (geometric)g(or)396 2093 y(spatial)22 b(computations)e(are)j(needed,)g + (multiple)e(v)n(alues)g(per)i(inde)o(x)e(are)j(desired,)e(or)g(a)h + (computation)396 2223 y(in)l(v)n(olv)o(es)g(more)i(than)f(one)h + (material.)396 2402 y(A)d Fj(Tensor)i Fu(implements)c(a)i + (multidimensional)d(mathematical)h(tensor)-5 b(.)21 b(Since)i(it)e(is)g + (a)h(\002rst-class)396 2532 y(type,)j(it)f(can)h(be)g(used)g(in)f(e)o + (xpressions)f(such)i(as)g(adding)f(tw)o(o)g Fq(Tensor)p + Fu(s.)396 2711 y(A)37 b Fj(TinyMatrix)j Fu(implements)34 + b(a)j(tw)o(o-dimensional)d(mathematical)h(matrix.)g(Since)i(it)f(is)g + (a)396 2840 y(\002rst-class)25 b(type,)e(it)h(can)h(be)g(used)f(in)g(e) + o(xpressions)e(such)i(as)h(assignments)d(to)i(matrices)g(and)h(multi-) + 396 2970 y(plying)f(matrices.)396 3149 y(A)30 b Fj(Vector)i + Fu(implements)c(a)h(multidimensional)e(mathematical)h(v)o(ector)l(,)h + (which)g(is)g(an)h(ordered)396 3279 y(tuple)e(of)g(components.)f(Since) + i(it)f(is)g(a)h(\002rst-class)f(type,)g(it)g(can)h(be)f(used)g(in)g(e)o + (xpressions)f(such)h(as)396 3408 y(adding)c(tw)o(o)h + Fq(Vector)p Fu(s)e(and)i(multiplying)d(a)j Fq(TinyMatrix)d + Fu(and)j(a)g Fq(Vector)p Fu(.)396 3588 y(The)34 b(data)g(of)g(an)g + Fq(Array)p Fu(,)f Fq(DynamicArray)p Fu(,)e(or)j Fq(Field)f + Fu(can)h(be)g(accessed)h(using)d(more)396 3717 y(than)h(one)h + (container)f(by)g(taking)f(a)i(vie)n(w)-6 b(.)32 b(A)i + Fp(vie)o(w)f Fu(of)h(an)f(e)o(xisting)f(container)h(C)h(is)f(a)g + (container)396 3847 y(whose)k(domain)f(is)h(a)g(subset)f(of)i(C')-5 + b(s)37 b(domain.)f(The)h(subset)f(can)h(equal)g(the)g(original)f + (domain.)396 3976 y(A)j(vie)n(w)e(acts)h(lik)o(e)g(a)h(reference)h(in)d + (that)h(changing)g(an)o(y)g(of)g(the)g(vie)n(w')-5 b(s)37 + b(v)n(alues)g(also)h(changes)396 4106 y(the)30 b(original)f(container') + -5 b(s)30 b(and)g(vice)g(v)o(ersa.)g(While)g(users)g(sometimes)e(e)o + (xplicitly)g(create)j(vie)n(ws,)396 4235 y(the)o(y)25 + b(are)h(perhaps)f(more)g(frequently)g(created)i(as)e(temporaries)g(in)g + (e)o(xpressions.)f(F)o(or)h(e)o(xample,)f(if)396 4365 + y Fq(A)33 b Fu(is)f(an)h Fq(Array)e Fu(and)i Fq(I)f Fu(is)g(a)h + (domain,)e Fq(A\(I\))65 b(-)h(A\(I-1\))31 b Fu(uses)h(tw)o(o)g(vie)n + (ws)g(to)g(form)g(the)396 4494 y(dif)n(ference)25 b(between)g(adjacent) + g(v)n(alues.)-2 4888 y Fk(4.1.1.)39 b(Choosing)e(a)j(Container)396 + 5089 y Fu(The)33 b(tw)o(o)g(most)f(commonly)f(used)i(POOMA)g + (containers)g(are)g Fq(Array)p Fu(s)f(and)h Fq(Field)p + Fu(s,)f(while)p Black 3784 5547 a Fp(75)p Black eop + %%Page: 76 76 + 76 75 bop Black 2180 -132 a Fp(Chapter)25 b(4.)f(Overvie)o(w)h(of)g + (POOMA)f(Concepts)p Black 396 51 a Fq(Vector)p Fu(,)34 + b Fq(TinyMatrix)p Fu(,)g(and)h Fq(Tensor)f Fu(represent)i(mathematical) + f(objects.)g(T)-8 b(able)35 b(4-3)396 180 y(contains)24 + b(a)h(decision)f(tree)i(describing)e(ho)n(w)f(to)i(choose)f(an)h + (appropriate)g(container)-5 b(.)396 459 y Fr(T)c(able)26 + b(4-3.)e(Choosing)h(a)f(POOMA)g(Container)396 696 y Fu(If)i(modeling)d + (mathematical)g(entries,)399 b(use)24 b(a)i Fq(Vector)p + Fu(,)d Fq(TinyMatrix)p Fu(,)f(or)2140 825 y Fq(Tensor)p + Fu(.)396 967 y(If)k(indices)e(and)g(v)n(alues)g(reside)h(in)396 + 1097 y(multidimensional)d(space)j Ff(R)p Fe(d)p Fu(,)2140 + 967 y(use)f(a)i Fq(Field)p Fu(.)396 1238 y(If)g(there)f(are)g(multiple) + e(v)n(alues)h(per)h(inde)o(x,)250 b(use)24 b(a)i Fq(Field)p + Fu(.)396 1380 y(If)g(there)f(are)g(multiple)e(materials)h + (participating)396 1510 y(in)h(the)f(same)h(computation,)2140 + 1380 y(use)f(a)i Fq(Field)p Fu(.)396 1651 y(If)g(the)e(domain')-5 + b(s)23 b(size)i(dynamically)f(changes)396 1781 y(and)h(is)f + (one-dimensional,)2140 1651 y(use)g(a)i Fq(DynamicArray)p + Fu(.)396 1922 y(Otherwise)1334 b(use)24 b(an)h Fq(Array)p + Fu(.)-2 2441 y Fk(4.1.2.)39 b(Dec)m(laring)e(Sequential)h(Container)n + (s)396 2642 y Fu(In)33 b(the)f(pre)n(vious)f(sections,)h(we)g + (introduced)g(the)g(POOMA)g(containers)g(and)h(described)f(ho)n(w)g(to) + 396 2771 y(choose)j(one)f(appropriate)h(for)g(a)g(gi)n(v)o(en)e(task.)h + (In)h(this)e(section,)h(we)h(describe)g(the)f(concepts)h(in-)396 + 2901 y(v)n(olv)o(ed)25 b(in)h(declaring)h(them.)e(Concepts)h + (speci\002c)h(to)f(distrib)n(uted)f(computation)f(are)j(described)g(in) + 396 3030 y(the)e(ne)o(xt)f(section.)396 3210 y(Figure)h(4-1)g + (illustrates)e(the)i(containers)f(and)h(the)g(concepts)f(in)l(v)n(olv)o + (ed)f(in)i(their)f(declarations.)g(The)396 3339 y(containers)32 + b(are)g(listed)f(in)h(the)g(top)f(ro)n(w)-6 b(.)31 b(Lines)g(connect)h + (these)g(containers)f(to)h(the)g(components)396 3469 + y(necessary)23 b(for)g(their)g(declarations.)f(F)o(or)g(e)o(xample,)g + (an)h Fq(Array)f Fu(declaration)g(requires)h(an)g(engine)396 + 3598 y(and)28 b(a)g(layout.)f(These,)g(in)g(turn,)g(can)h(depend)g(on)f + (other)h(POOMA)f(concepts.)g(Declarations)h(nec-)396 + 3728 y(essary)k(only)e(for)i(distrib)n(uted,)d(or)j(multiprocessor)l(,) + d(computation)h(are)i(also)f(indicated.)f(Gi)n(v)o(en)g(a)396 + 3857 y(desired)d(container)l(,)g(one)g(can)g(use)g(this)f(\002gure)h + (to)g(determine)f(the)h(concepts)g(needed)g(to)f(declare)i(a)396 + 3987 y(particular)d(container)-5 b(.)p Black 3781 5547 + a Fp(76)p Black eop + %%Page: 77 77 + 77 76 bop Black 2180 -132 a Fp(Chapter)25 b(4.)f(Overvie)o(w)h(of)g + (POOMA)f(Concepts)p Black 396 51 a Fr(Figur)n(e)i(4-1.)e(Concepts)i(F)n + (or)e(Declaring)h(Containers)396 1546 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 396 1546 a @beginspecial + -100 @llx -144 @lly 357 @urx 21 @ury 4570 @rwi @setspecial + %%BeginDocument: figures/concepts.111 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -100 -144 357 21 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /ptmro8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -35.86551 -3.0426 moveto + (TinyMatrix) pcrr8r 11.95514 fshow + 56.03874 -3.3116 moveto + (Vector) pcrr8r 11.95514 fshow + 119.25058 -3.0426 moveto + (DynamicArray) pcrr8r 11.95514 fshow + 225.50102 -2.4658 moveto + (Array) pcrr8r 11.95514 fshow + 281.53976 -3.8884 moveto + (Field) pcrr8r 11.95514 fshow + 146.35309 -33.21016 moveto + (engine) ptmr8r 11.95514 fshow + 248.45935 -34.43555 moveto + (mesh) ptmr8r 11.95514 fshow + 293.86958 -33.21016 moveto + (centering) ptmr8r 11.95514 fshow + 174.99046 -62.8995 moveto + (layout) ptmr8r 11.95514 fshow + 225.0513 -62.8995 moveto + (corner) ptmr8r 11.95514 fshow + 258.5734 -62.8995 moveto + (position) ptmr8r 11.95514 fshow + 317.27763 -64.1249 moveto + (cell) ptmr8r 11.95514 fshow + 337.52933 -64.1249 moveto + (size) ptmr8r 11.95514 fshow + 113.63808 -95.03964 moveto + (domain) ptmr8r 11.95514 fshow + 169.67651 -93.81425 moveto + (partition) ptmr8r 11.95514 fshow + 230.36525 -93.19855 moveto + (conte) ptmr8r 11.95514 fshow + 256.08064 -93.19855 moveto + (xt) ptmr8r 11.95514 fshow + 268.37045 -93.19855 moveto + (mapper) ptmr8r 11.95514 fshow + 307.21245 -93.19855 moveto + (tag) ptmr8r 11.95514 fshow + 162.87991 -124.729 moveto + (guard) ptmr8r 11.95514 fshow + 193.09052 -124.729 moveto + (layer) ptmr8r 11.95514 fshow + -99.07735 -3.3116 moveto + (Tensor) pcrr8r 11.95514 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinecap 1 setlinejoin 10 setmiterlimit + newpath 38.8661 -7.287 moveto + 143.35274 -26.87718 lineto stroke + newpath 95.54999 -6.46101 moveto + 143.35278 -23.62738 lineto stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath 162.28918 -7.8836 moveto + 162.28918 -22.05684 lineto stroke + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath 223.94748 -7.30696 moveto + 181.22527 -23.32695 lineto stroke + newpath 278.54 -4.64287 moveto + 181.22499 -26.22757 lineto stroke + newpath -53.03752 -3.11073 moveto + 143.35411 -28.02544 lineto stroke + newpath 165.9144 -7.88338 moveto + 186.08475 -51.74582 lineto stroke + newpath 236.93166 -7.3064 moveto + 197.38373 -51.74605 lineto stroke + newpath 290.59212 -7.0377 moveto + 270.09433 -23.28209 lineto stroke + newpath 303.3211 -7.0377 moveto + 311.53435 -22.05684 lineto stroke + newpath 245.45982 -36.94524 moveto + 207.87823 -52.62863 lineto stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath 261.07785 -37.57315 moveto + 261.07785 -51.74628 lineto stroke + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath 276.69675 -36.55971 moveto + 318.49908 -52.97171 lineto stroke + newpath 174.1313 -68.48766 moveto + 145.06052 -83.88623 lineto stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath 189.93427 -68.48766 moveto + 189.93427 -82.66093 lineto stroke + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath 207.87837 -66.55548 moveto + 254.48055 -83.27681 lineto stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath 189.93427 -99.4024 moveto + 189.93427 -113.57568 lineto stroke + 0 0.5 dtransform truncate idtransform setlinewidth pop + [3 3 ] 0 setdash + newpath 159.87991 -130.3172 moveto + 324.82146 -130.3172 lineto + 324.82146 -83.27664 lineto + 159.87991 -83.27664 lineto + closepath stroke + 163.75537 -140.5705 moveto + (multiprocessor) ptmro8r 11.95514 fshow + 237.80467 -140.5705 moveto + (computation) ptmro8r 11.95514 fshow + 300.56866 -140.5705 moveto + (only) ptmro8r 11.95514 fshow + newpath 116.25058 -7.0378 moveto + 320.40527 -7.0378 lineto + 320.40527 7.8836 lineto + 116.25058 7.8836 lineto + closepath stroke + 250.95068 12.5718 moveto + (support) ptmro8r 11.95514 fshow + 289.80469 12.5718 moveto + (vie) ptmro8r 11.95514 fshow + 304.11478 12.5718 moveto + (ws) ptmro8r 11.95514 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 396 1546 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 396 1546 a 229 x Fu(An)k Fp(engine)f + Fu(stores)g(and,)g(if)h(necessary)-6 b(,)28 b(computes)g(a)h + (container')-5 b(s)27 b(v)n(alues.)h(A)h(container)f(has)g(one)396 + 1904 y(or)35 b(more)g(engines.)g(The)g(separation)f(of)i(a)f(container) + g(from)g(its)f(storage)h(permits)f(optimizing)f(a)396 + 2034 y(program')-5 b(s)35 b(space)h(and)f(time)g(requirements.)f(F)o + (or)i(e)o(xample,)e(a)i(container)f(returning)g(the)g(same)396 + 2163 y(v)n(alue)27 b(for)h(all)f(indices)g(can)g(use)h(a)g(constant)e + (engine,)h(which)g(need)h(only)e(store)i(one)f(v)n(alue)g(for)g(the)396 + 2293 y(entire)g(domain.)e(A)h Fq(CompressibleBrick)d(Engine)i + Fu(reduces)i(its)e(space)i(requirements)396 2422 y(to)j(a)g(constant)f + (whene)n(v)o(er)g(all)h(its)f(v)n(alues)g(are)i(the)e(same.)h(The)g + (separation)f(between)h(a)g(container)396 2552 y(and)25 + b(its)f(engine)h(also)f(permits)g(taking)g(vie)n(ws)g(of)g(containers)h + (without)e(cop)o(ying)h(storage.)396 2831 y Fr(Figur)n(e)i(4-2.)e + Fo(Array)g Fr(and)h Fo(Field)f Fr(Mathematical)h(and)h(Computational)f + (Concepts)527 4359 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 527 4359 a @beginspecial -73 @llx + -98 @lly 314 @urx 71 @ury 3870 @rwi @setspecial + %%BeginDocument: figures/concepts.101 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -73 -98 314 71 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinecap 1 setlinejoin 10 setmiterlimit + newpath 29.3853 -1.42374 moveto + 92.7354 -20.8961 160.4285 -21.17284 223.90204 -2.2539 curveto stroke + 78.92114 19.73079 moveto + (layout) ptmr8r 11.95514 fshow + newpath 75.92114 14.1426 moveto + 111.80875 14.1426 lineto + 111.80875 30.88411 lineto + 75.92114 30.88411 lineto + closepath stroke + 226.90121 1.22539 moveto + (engine) ptmr8r 11.95514 fshow + newpath 223.90121 -4.36281 moveto + 261.7734 -4.36281 lineto + 261.7734 12.37871 lineto + 223.90121 12.37871 lineto + closepath stroke + 0 0 moveto + (inde) ptmr8r 11.95514 fshow + 20.4074 0 moveto + (x) ptmr8r 11.95514 fshow + 134.10905 27.1239 moveto + (processors) ptmr8r 11.95514 fshow + 139.41705 12.6781 moveto + (memory) ptmr8r 11.95514 fshow + 287.45065 0.01494 moveto + (v) ptmr8r 11.95514 fshow + 293.12935 0.01494 moveto + (alue) ptmr8r 11.95514 fshow + newpath 29.3853 9.43964 moveto + 44.68417 14.14217 60.23633 17.72517 75.92117 20.18869 curveto stroke + newpath 111.80905 23.86314 moveto + 116.24747 24.0776 120.68913 24.20392 125.13138 24.24207 curveto stroke + newpath 121.45845 22.65767 moveto + 122.67961 23.19312 123.90396 23.72125 125.13138 24.24207 curveto + 123.8952 24.74173 122.65602 25.23404 121.41393 25.71895 curveto + closepath + gsave fill grestore stroke + newpath 193.54866 17.79674 moveto + 203.7489 15.76654 213.87762 13.25766 223.90112 10.27008 curveto stroke + newpath 261.7734 4.00795 moveto + 284.45065 4.00795 lineto stroke + newpath 280.75508 2.47716 moveto + 284.45065 4.00795 lineto + 280.75508 5.53874 lineto + closepath + gsave fill grestore stroke + newpath 29.3853 -60.38472 moveto + 92.7354 -79.85709 160.4285 -80.13382 223.90204 -61.21489 curveto stroke + 78.92114 -39.2302 moveto + (layout) ptmr8r 11.95514 fshow + newpath 75.92114 -44.81839 moveto + 111.80875 -44.81839 lineto + 111.80875 -28.07687 lineto + 75.92114 -28.07687 lineto + closepath stroke + 226.90121 -57.7356 moveto + (engine) ptmr8r 11.95514 fshow + newpath 223.90121 -63.32379 moveto + 261.7734 -63.32379 lineto + 261.7734 -46.58228 lineto + 223.90121 -46.58228 lineto + closepath stroke + 0 -58.96098 moveto + (inde) ptmr8r 11.95514 fshow + 20.4074 -58.96098 moveto + (x) ptmr8r 11.95514 fshow + 134.10905 -31.83708 moveto + (processors) ptmr8r 11.95514 fshow + 139.41705 -46.28288 moveto + (memory) ptmr8r 11.95514 fshow + 287.45065 -58.94604 moveto + (v) ptmr8r 11.95514 fshow + 293.12935 -58.94604 moveto + (alue) ptmr8r 11.95514 fshow + newpath 29.3853 -49.52135 moveto + 44.68417 -44.81882 60.23633 -41.23581 75.92117 -38.7723 curveto stroke + newpath 111.80905 -35.09784 moveto + 116.24747 -34.88338 120.68913 -34.75706 125.13138 -34.71892 curveto stroke + newpath 121.45845 -36.30331 moveto + 122.67961 -35.76787 123.90396 -35.23973 125.13138 -34.71892 curveto + 123.8952 -34.21925 122.65602 -33.72694 121.41393 -33.24203 curveto + closepath + gsave fill grestore stroke + newpath 193.54866 -41.16425 moveto + 203.7489 -43.19444 213.87762 -45.70332 223.90112 -48.6909 curveto stroke + newpath 261.7734 -54.95303 moveto + 284.45065 -54.95303 lineto stroke + newpath 280.75508 -56.48383 moveto + 284.45065 -54.95303 lineto + 280.75508 -53.42224 lineto + closepath + gsave fill grestore stroke + 0 -94.33794 moveto + (indices) ptmr8r 11.95514 fshow + 253.24756 -93.11255 moveto + (spatial) ptmr8r 11.95514 fshow + 287.45065 -93.11255 moveto + (v) ptmr8r 11.95514 fshow + 293.12936 -93.11255 moveto + (alue) ptmr8r 11.95514 fshow + 137.4221 -94.33794 moveto + (mesh) ptmr8r 11.95514 fshow + newpath 134.4221 -97.47534 moveto + 165.6591 -97.47534 lineto + 165.6591 -83.18463 lineto + 134.4221 -83.18463 lineto + closepath stroke + newpath 36.8685 -90.32999 moveto + 134.4221 -90.32999 lineto stroke + newpath 165.6591 -90.32999 moveto + 250.24756 -90.32999 lineto stroke + newpath 246.55212 -91.86072 moveto + 250.24756 -90.32999 lineto + 246.55212 -88.79926 lineto + closepath + gsave fill grestore stroke + -72.40187 60.40224 moveto + (mathematical) ptmr8r 11.95514 fshow + -4.99977 60.40224 moveto + (concept) ptmr8r 11.95514 fshow + 0 0.4781 dtransform truncate idtransform setlinewidth pop 0 setlinecap + newpath -72.40187 56.14073 moveto + 32.18053 56.14073 lineto stroke + 83.29872 60.40224 moveto + (computational) ptmr8r 11.95514 fshow + 154.69412 60.40224 moveto + (implementation) ptmr8r 11.95514 fshow + newpath 83.29872 56.14073 moveto + 229.74762 56.14073 lineto stroke + -72.40187 1.11885 moveto + (Array) pcrr8r 11.95514 fshow + -36.53638 1.11885 moveto + (:) ptmr8r 11.95514 fshow + -72.40187 -57.84213 moveto + (Field) pcrr8r 11.95514 fshow + -36.53638 -57.84213 moveto + (:) ptmr8r 11.95514 fshow + -72.40187 -93.21909 moveto + (Field) pcrr8r 11.95514 fshow + -36.53638 -93.21909 moveto + (:) ptmr8r 11.95514 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 527 4359 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 527 4359 a 396 4588 a Fu(A)k + Fp(layout)g Fu(maps)e(domain)h Fp(indices)f Fu(to)h(the)g(processors)g + (and)g(computer)g(memory)g(used)g(by)g(a)g(con-)396 4718 + y(tainer')-5 b(s)29 b(engines.)g(See)i(Figure)f(4-2.)f(A)h(program)f + (computes)g(a)h(container')-5 b(s)29 b(v)n(alues)g(using)f(these)396 + 4847 y(processors)23 b(and)f(memory)-6 b(.)22 b(The)h(layout)f + (speci\002es)h(the)f(processors)h(and)g(memory)e(to)i(use)g(for)g(each) + 396 4977 y(particular)29 b(inde)o(x.)e(A)i(container')-5 + b(s)27 b(layout)h(for)h(a)g(uniprocessor)e(implementation)f(consists)h + (of)i(its)396 5106 y(domain,)22 b(the)h(processor)l(,)g(and)g(its)g + (memory)-6 b(.)21 b(F)o(or)j(a)f(multiprocessor)f(implementation,)e + (the)j(layout)p Black 3780 5547 a Fp(77)p Black eop + %%Page: 78 78 + 78 77 bop Black 2180 -132 a Fp(Chapter)25 b(4.)f(Overvie)o(w)h(of)g + (POOMA)f(Concepts)p Black 396 51 a Fu(maps)g(portions)g(of)h(the)g + (domain)e(to)i(\(possibly)e(dif)n(ferent\))i(processors)f(and)h(memory) + -6 b(.)396 230 y(A)33 b Fp(domain)e Fu(is)h(a)h(set)f(of)g(points)f(on) + h(which)g(a)h(container)f(can)h(de\002ne)g(v)n(alues.)e(There)i(are)g + (se)n(v)o(eral)396 360 y(dif)n(ferent)27 b(types)g(of)g(domains.)f(An)i + Fp(interval)e Fu(consists)g(of)h(all)h(inte)o(gral)e(points)g(between)h + (tw)o(o)g(end-)396 489 y(points.)21 b(It)g(is)h(frequently)f + (represented)h(using)f(mathematical)g(interv)n(al)f(notation)h([a,b];)h + (it)f(contains)396 619 y(only)27 b(the)g(inte)o(gral)g(points,)f(e.g.,) + h(a,)h(a+1,)f(a+2,)h(.)15 b(.)g(.)g(,)27 b(b)l(.)g(The)h(concept)f(is)g + (generalized)h(to)f(multiple)396 748 y(dimensions)i(by)h(forming)g + (direct)h(products)e(of)i(interv)n(als,)f(i.e.,)g(all)g(the)h(inte)o + (gral)e(tuples)h(in)g(an)h(n-)396 878 y(dimensional)21 + b(space.)h(F)o(or)g(e)o(xample,)f(the)i(tw)o(o-dimensional)d + (containers)h(in)h(the)g(pre)n(vious)f(chapter)396 1007 + y(are)35 b(de\002ned)f(on)f(a)h(tw)o(o-dimensional)e(domain)g(with)h + (the)h(both)f(dimensions')e(spanning)i(the)h(in-)396 + 1137 y(terv)n(al)39 b([0,n\).)g(A)g(domain)f(need)i(not)e(contain)h + (all)g(inte)o(gral)f(points)g(between)h(its)g(endpoints.)e(A)396 + 1266 y Fp(stride)29 b Fu(indicates)h(a)g(re)o(gular)g(spacing)f + (between)i(points.)d(A)i Fp(r)o(ang)o(e)f Fu(is)h(a)h(subset)e(of)h(an) + g(interv)n(al)f(of)396 1396 y(re)o(gularly-spaced)c(points)e + (speci\002ed)i(by)g(a)g(stride.)396 1575 y(A)20 b Fq(Field)p + Fu(')-5 b(s)19 b Fp(mesh)g Fu(maps)h(domain)f(indices)g(to)h(spatial)f + (v)n(alues)g(in)h Ff(R)2810 1535 y Fe(d)2860 1575 y Fu(such)g(as)g + (distances)f(between)396 1705 y(cells,)27 b(edge)g(lengths,)e(and)i + (normals)f(to)h(cells.)f(In)h(other)g(w)o(ords,)f(it)g(pro)o(vides)g(a) + h Fq(Field)p Fu(')-5 b(s)25 b(spatial)396 1834 y(e)o(xtent.)f(See)i + (also)e(Figure)h(4-2.)g(Dif)n(ferent)f(mesh)h(types)f(may)g(support)g + (dif)n(ferent)h(spatial)f(v)n(alues.)396 2014 y(A)e(mesh')-5 + b(s)22 b Fp(corner)f(position)g Fu(speci\002es)h(the)g(point)f(in)h + Ff(R)2339 1974 y Fe(d)2392 2014 y Fu(corresponding)f(to)h(the)g(cell)g + (in)g(the)g(lo)n(wer)l(,)396 2143 y(left)28 b(corner)h(of)f(its)g + (domain.)f(Combining)f(this,)h(the)h(domain,)g(and)g(the)g(cell)g(size) + g(can)g(specify)g(the)396 2273 y(mesh')-5 b(s)24 b(map)g(from)h + (indices)f(to)h Ff(R)1605 2233 y Fe(d)1635 2273 y Fu(.)396 + 2452 y(A)38 b(mesh')-5 b(s)36 b Fp(cell)i(size)f Fu(speci\002es)g(the)h + (spatial)e(dimensions)g(of)i(a)f Fq(Field)g Fu(cell,)g(e.g.,)h(its)e + (width,)396 2581 y(height,)19 b(and)h(depth,)f(in)g Ff(R)1299 + 2542 y Fe(d)1330 2581 y Fu(.)g(Combining)g(this,)f(the)i(domain,)f(and) + g(the)h(corner)g(position)e(can)i(specify)396 2711 y(the)25 + b(mesh')-5 b(s)24 b(map)g(from)h(indices)f(to)g Ff(R)1751 + 2671 y Fe(d)1782 2711 y Fu(.)-2 3154 y Fk(4.1.3.)39 b(Dec)m(laring)e + (Distrib)m(uted)h(Container)n(s)396 3356 y Fu(In)31 b(the)f(pre)n + (vious)g(section,)g(we)h(introduced)e(the)i(important)e(concepts)h(for) + h(declaring)g(containers)396 3485 y(for)25 b(use)f(on)g(uniprocessor)g + (computers.)f(When)h(using)g(multiprocessor)e(computers,)i(we)g + (augment)396 3615 y(these)h(concepts)f(with)g(those)f(for)i(distrib)n + (uted)e(computation.)g(Reading)h(this)g(section)g(is)g(important)396 + 3744 y(only)34 b(for)h(running)f(a)h(program)g(on)f(multiple)f + (processors.)h(Man)o(y)g(of)h(these)g(concepts)f(were)i(in-)396 + 3874 y(troduced)30 b(in)f(Section)h(3.5)g(and)f(Section)h(3.7.)f + (Figure)i(3-4)e(illustrates)g(the)g(POOMA)h(distrib)n(uted)396 + 4003 y(computation)22 b(model.)h(In)g(this)g(section,)f(we)i + (concentrate)g(on)f(the)g(concepts)h(necessary)f(to)h(declare)396 + 4133 y(a)h(distrib)n(uted)f(container)-5 b(.)396 4312 + y(As)27 b(we)f(noted)g(in)h(Section)f(3.5,)g(a)h(POOMA)f(programmer)g + (must)g(specify)g(ho)n(w)g(each)h(container')-5 b(s)396 + 4442 y(domain)29 b(should)g(be)h(distrib)n(uted)e(among)i(the)f(a)n(v)n + (ailable)h(processors)f(and)h(memory)f(spaces.)h(Us-)396 + 4571 y(ing)h(this)g(information,)f(the)h(toolkit)f(automatically)f + (distrib)n(utes)h(the)h(data)h(among)f(the)g(a)n(v)n(ailable)396 + 4701 y(processors)h(and)h(handles)f(an)o(y)g(required)g(communication)f + (among)h(them.)f(The)i(three)g(concepts)396 4830 y(necessary)e(for)f + (declaring)g(distrib)n(uted)f(containers)h(are)h(a)f(partition,)f(a)i + (guard)f(layer)l(,)g(and)h(a)f(con-)396 4960 y(te)o(xt)24 + b(mapper)h(tag.)p Black 3784 5547 a Fp(78)p Black eop + %%Page: 79 79 + 79 78 bop Black 2180 -132 a Fp(Chapter)25 b(4.)f(Overvie)o(w)h(of)g + (POOMA)f(Concepts)p Black 396 51 a Fu(A)38 b Fp(partition)f + Fu(speci\002es)h(ho)n(w)f(to)h(di)n(vide)f(a)i(container')-5 + b(s)37 b(domain)g(into)h(distrib)n(uted)e(pieces.)i(F)o(or)396 + 180 y(e)o(xample,)26 b(the)g(partition)f(illustrated)g(in)h(Figure)h + (3-4)f(w)o(ould)f(di)n(vide)g(a)i(tw)o(o-dimensional)d(domain)396 + 310 y(into)19 b(three)h(equally-sized)f(pieces)h(along)f(the)g + (x-dimension)f(and)i(tw)o(o)f(equally-sized)g(pieces)h(along)396 + 439 y(the)32 b(y-dimension.)e(P)o(artitions)g(can)j(be)f(independent)f + (of)h(the)f(size)h(of)g(container')-5 b(s)31 b(domain.)g(The)396 + 569 y(e)o(xample)g(partition)f(will)h(w)o(ork)h(on)f(an)o(y)g(domain)g + (as)h(long)e(as)i(the)g(size)f(of)h(its)f(x-dimension)f(is)h(a)396 + 698 y(multiple)23 b(of)i(three.)g(A)g(domain)f(is)g(separated)h(into)f + (disjoint)f(patches.)396 878 y(A)38 b Fp(guar)l(d)g(layer)i + Fu(surrounds)d(each)i(patch)f(with)g(read-only)g(v)n(alues.)f(An)h + Fp(e)n(xternal)g(guar)l(d)f(layer)396 1007 y Fu(speci\002es)22 + b(v)n(alues)f(surrounding)f(the)h(entire)h(domain.)e(Its)i(presence)g + (eases)g(computation)d(along)i(the)396 1137 y(domain')-5 + b(s)20 b(edges)h(by)g(permitting)f(the)h(same)g(computations)e(as)i + (for)h(more-internal)e(computations.)396 1266 y(An)i + Fp(internal)f(guar)l(d)g(layer)j Fu(duplicates)d(v)n(alues)g(from)h + (adjacent)g(patches)g(so)f(communication)f(with)396 1396 + y(adjacent)29 b(patches)g(need)f(not)h(occur)g(during)f(a)h(patch')-5 + b(s)28 b(computation.)f(The)h(use)h(of)g(guard)f(layers)396 + 1525 y(is)34 b(an)h(optimization;)c(using)j(e)o(xternal)f(guard)i + (layers)f(eases)h(programming)d(and)j(using)e(internal)396 + 1655 y(guard)25 b(layers)g(reduces)g(communication)e(among)h + (processors.)g(Their)h(use)g(is)f(not)g(required.)396 + 1834 y(A)37 b Fp(conte)n(xt)f(mapper)j Fu(indicates)c(ho)n(w)h(a)h + (container')-5 b(s)36 b(patches)g(are)i(mapped)e(to)g(processors)g(and) + 396 1964 y(shared)46 b(memory)-6 b(.)44 b(F)o(or)i(e)o(xample,)f(the)g + Fq(DistributedTag)e Fu(indicates)i(that)g(the)g(patches)396 + 2093 y(should)40 b(be)g(distrib)n(uted)f(among)h(the)g(processors)h(so) + f(each)h(patch)f(occurs)h(once)g(in)f(the)g(entire)396 + 2223 y(computation.)29 b(The)i Fq(ReplicatedTag)d Fu(indicates)i(that)g + (the)g(patches)h(should)e(be)i(replicated)396 2352 y(among)24 + b(the)f(processors)h(so)g(each)g(processing)f(unit)g(has)h(its)f(o)n + (wn)h(cop)o(y)f(of)h(all)g(the)g(patches.)g(While)396 + 2482 y(it)31 b(could)f(be)h(w)o(asteful)f(to)g(ha)n(v)o(e)h(dif)n + (ferent)f(processors)h(perform)f(the)h(same)g(computation,)d(repli-)396 + 2611 y(cating)d(a)g(container)f(can)i(reduce)f(possibly)e(more)i(e)o + (xpensi)n(v)o(e)e(communication)f(costs.)-2 3213 y Fx(4.2.)47 + b(Computation)i(Modes)396 3429 y Fu(POOMA)22 b(computations)f(can)h(be) + h(e)o(xpressed)f(using)f(a)i(v)n(ariety)e(of)i(modes.)e(Man)o(y)g + (POOMA)h(com-)396 3558 y(putations)j(in)l(v)n(olv)o(e)f + Fq(Array)h Fu(or)h Fq(Field)f Fu(containers,)g(b)n(ut)g(ho)n(w)g(their) + h(v)n(alues)f(are)i(accessed)f(and)396 3688 y(ho)n(w)d(the)h + (associated)g(algorithms)e(use)i(them)f(v)n(aries.)h(F)o(or)g(e)o + (xample,)f(element-wise)g(computation)396 3817 y(in)l(v)n(olv)o(es)i(e) + o(xplicitly)g(accessing)i(a)g(container')-5 b(s)26 b(v)n(alues.)g(A)g + (data-parallel)h(computation)e(operates)396 3947 y(on)j(lar)n(ger)g + (subsets)f(of)h(a)g(container')-5 b(s)28 b(v)n(alues.)f(Stencil-based)g + (computations)f(e)o(xpress)i(a)g(compu-)396 4076 y(tation)d(as)g + (repeatedly)h(applying)e(a)h(local)g(computation)f(to)h(each)h(element) + f(of)g(an)h(array)-6 b(.)25 b(Relation-)396 4206 y(based)20 + b(computations)d(use)j(relations)f(on)g(containers)g(to)g(establish)g + (dependencies)g(among)g(them)g(so)396 4335 y(the)24 b(v)n(alues)f(of)h + (one)g(container)g(are)h(updated)e(whene)n(v)o(er)h(an)o(y)f(other')-5 + b(s)23 b(v)n(alues)h(change.)g(A)g(program)396 4465 y(may)h(use)f(an)o + (y)h(or)g(all)f(of)h(these)g(styles,)e(which)i(are)g(described)g(belo)n + (w)-6 b(.)396 4644 y Fp(Element-wise)35 b Fu(computation)e(accesses)i + (indi)n(vidual)d(container)j(v)n(alues)f(through)f(e)o(xplicit)g(nota-) + 396 4774 y(tion.)41 b(F)o(or)g(e)o(xample,)g(v)n(alues)g(in)g(a)h(tw)o + (o-dimensional)d(container)i(C)h(might)f(be)g(referenced)i(as)396 + 4903 y Fq(C\(3,4\))24 b Fu(or)i Fq(C\(i,j+1\))p Fu(.)d(This)i(is)g(the) + h(usual)f(notation)f(for)h(non-object-oriented)g(languages)396 + 5033 y(such)g(as)g(C.)p Black 3784 5547 a Fp(79)p Black + eop + %%Page: 80 80 + 80 79 bop Black 2180 -132 a Fp(Chapter)25 b(4.)f(Overvie)o(w)h(of)g + (POOMA)f(Concepts)p Black 396 51 a(Data-par)o(allel)32 + b Fu(computation)h(uses)h(e)o(xpressions)f(to)h(access)i(subsets)d(of)i + (a)f(container')-5 b(s)34 b(v)n(alues.)396 180 y(F)o(or)i(e)o(xample,)g + (in)f(Example)h(3-3,)g Fq(a\(I,J\))e Fu(represents)i(the)g(subset)g(of) + g Fq(Array)f(a)p Fu(')-5 b(s)35 b(v)n(alues)396 310 y(ha)n(ving)h + (coordinates)h(in)f(the)h(domain)f(speci\002ed)h(by)f(the)h(direct)g + (product)f(of)h(one-dimensional)396 439 y Fq(Interval)p + Fu(s)27 b Fq(I)j Fu(and)f Fq(J)p Fu(.)g(Using)f(data-parallel)h(e)o + (xpressions)f(frequently)h(eliminates)f(the)h(need)396 + 569 y(for)c(writing)f(e)o(xplicit)f(loops.)396 748 y(Stencil-based)29 + b(computation)f(uses)h Fp(stencils)f Fu(to)h(compute)g(containers')g(v) + n(alues)f(using)h(neighbor)n(-)396 878 y(ing)f(data)h(v)n(alues.)f + (Each)h(stencil)e(consists)h(of)g(a)h(speci\002cation)g(of)f(which)h + (neighboring)e(v)n(alues)h(to)396 1007 y(read)33 b(and)g(a)g(function)f + (using)f(those)h(v)n(alues.)g(F)o(or)g(e)o(xample,)g(an)h(a)n(v)o + (eraging)f(stencil)g(may)g(access)396 1137 y(all)g(its)f(adjacent)h + (neighbors,)f(a)n(v)o(eraging)g(them.)h(In)g(POOMA,)f(we)h(represent)h + (a)f(stencil)f(using)g(a)396 1266 y(function)25 b(object)h(with)f + (additional)g(functions)f(indicating)h(which)g(neighboring)g(v)n(alues) + g(are)i(used.)396 1396 y(Stencil)d(computations)f(are)i(frequently)e + (used)h(in)g(solving)f(partial)h(dif)n(ferential)g(equations,)f(image) + 396 1525 y(processing,)h(and)h(geometric)f(modeling.)396 + 1705 y(Relation-based)c(computation)e(uses)i Fp(r)l(elations)f + Fu(to)g(create)i(dependences)g(among)e(containers)h(such)396 + 1834 y(the)29 b(dependent)f(container')-5 b(s)27 b(v)n(alues)h(are)h + (updated)f(when)h(its)e(v)n(alues)h(are)h(needed)g(and)f(an)o(y)g(of)h + (its)396 1964 y(related)20 b(containers')g(v)n(alues)e(ha)n(v)o(e)i + (changed.)g(A)f(relation)h(is)f(speci\002ed)h(by)f(a)h(dependent)g + (container)l(,)396 2093 y(independent)27 b(containers,)g(and)h(a)g + (function)e(computing)g(the)i(dependent)f(container')-5 + b(s)27 b(v)n(alues)f(us-)396 2223 y(ing)39 b(the)h(independent)f + (containers')g(v)n(alues.)g(T)-8 b(o)40 b(a)n(v)n(oid)f(e)o(xcess)g + (computation,)f(the)i(dependent)396 2352 y(container')-5 + b(s)22 b(v)n(alues)f(are)i(computed)f(only)f(when)h(needed,)h(e.g.,)f + (for)g(printing)f(the)i(container)f(or)g(for)396 2482 + y(computing)28 b(the)i(v)n(alues)f(of)h(another)g(dependent)f + (container)-5 b(.)29 b(Thus,)g(this)g(computation)f(is)i(some-)396 + 2611 y(times)24 b(called)h(\223lazy)g(e)n(v)n(aluation\224.)-2 + 3114 y Fx(4.3.)47 b(Computation)i(En)-7 b(vir)m(onment)396 + 3329 y Fu(The)33 b(same)f(POOMA)h(program)f(can)h(e)o(x)o(ecute)f(on)g + (a)h(wide)g(v)n(ariety)f(of)g(computers.)g(The)h(def)o(ault)396 + 3459 y Fp(sequential)i(computing)g(en)l(vir)l(onment)h + Fu(consists)f(of)h(one)g(processor)g(and)g(its)f(associated)h(mem-)396 + 3588 y(ory)-6 b(,)27 b(as)h(found)f(on)h(a)g(personal)f(computer)-5 + b(.)27 b(In)h(contrast,)f(a)h Fp(distrib)n(uted)d(computing)i(en)l(vir) + l(onment)396 3718 y Fu(may)j(ha)n(v)o(e)g(multiple)e(processors)i(and)g + (multiple)f(distrib)n(uted)f(or)i(shared)h(memories.)e(F)o(or)h(e)o + (xam-)396 3847 y(ple,)k(some)g(desktop)f(computers)g(ha)n(v)o(e)h(dual) + g(processors)g(and)g(shared)g(memory)-6 b(,)33 b(while)g(a)i(lar)n(ge) + 396 3977 y(supercomputer)25 b(may)f(ha)n(v)o(e)h(thousands)f(of)h + (processors,)g(perhaps)g(with)g(groups)f(of)h(eight)g(sharing)396 + 4106 y(the)g(same)g(memory)-6 b(.)396 4286 y(Using)24 + b(distrib)n(uted)f(computation)g(requires)i(three)g(things:)p + Black 476 4565 a(1.)p Black 25 w(The)f(program)h(must)f(declare)h(ho)n + (w)f(container)h(domains)e(will)h(be)h(distrib)n(uted.)p + Black 476 4744 a(2.)p Black 25 w(POOMA)f(must)g(be)h(con\002gured)g(to) + f(use)h(a)g(communications)e(library)-6 b(.)p Black 476 + 4923 a(3.)p Black 25 w(The)24 b(POOMA)h(e)o(x)o(ecutable)f(must)g(be)h + (run)f(using)g(the)h(communications)d(library)-6 b(.)396 + 5053 y(All)34 b(of)h(these)f(were)h(illustrated)e(in)i(Section)f(3.5)g + (and)h(Section)f(3.7.)g(Figure)h(3-4)f(illustrates)f(the)p + Black 3784 5547 a Fp(80)p Black eop + %%Page: 81 81 + 81 80 bop Black 2180 -132 a Fp(Chapter)25 b(4.)f(Overvie)o(w)h(of)g + (POOMA)f(Concepts)p Black 396 51 a Fu(POOMA)34 b(distrib)n(uted)e + (computation)g(model.)h(Section)h(4.1.3)f(described)h(ho)n(w)f(to)h + (declare)g(con-)396 180 y(tainers)24 b(with)g(distrib)n(uted)e + (domains.)h(Here)i(we)f(present)g(three)h(concepts)f(for)g(distrib)n + (uted)f(compu-)396 310 y(tation:)h(patches,)g(conte)o(xt,)g(and)h(a)g + (communication)e(library)-6 b(.)396 489 y(A)27 b(partition)e(di)n + (vides)g(a)i(container')-5 b(s)26 b(domain)f(into)h(disjoint)e + Fp(patc)o(h)p Fu(es.)i(F)o(or)g(distrib)n(uted)f(computa-)396 + 619 y(tion,)19 b(the)g(patches)g(are)i(distrib)n(uted)c(among)i(v)n + (arious)g(processors,)g(which)g(compute)f(the)i(associated)396 + 748 y(v)n(alues.)k(As)h(illustrated)e(in)i(Figure)g(3-4,)f(each)i + (patch)e(can)h(be)g(surrounded)g(by)f(guard)h(layers.)396 + 928 y(A)30 b Fp(conte)n(xt)h Fu(is)e(a)h(collection)e(of)i(shared)f + (memory)g(and)g(processors)g(that)g(can)h(e)o(x)o(ecute)f(a)h(program) + 396 1057 y(or)g(a)f(portion)g(of)g(a)h(program.)f(It)g(can)h(ha)n(v)o + (e)f(one)g(or)h(more)f(processors,)g(b)n(ut)f(all)h(these)h(processors) + 396 1187 y(must)h(access)g(the)h(same)f(shared)g(memory)-6 + b(.)30 b(Usually)h(the)g(computer)g(and)g(its)g(operating)g(system,)396 + 1316 y(not)24 b(the)h(programmer)l(,)f(determine)h(the)f(a)n(v)n + (ailable)g(conte)o(xts.)396 1495 y(A)k Fp(communication)f(libr)o(ary)g + Fu(passes)g(messages)h(among)f(conte)o(xts.)g(POOMA)h(uses)g(the)g + (commu-)396 1625 y(nication)i(library)g(to)g(cop)o(y)h(information)e + (among)h(conte)o(xts,)f(all)h(of)h(which)f(is)g(hidden)g(from)g(both) + 396 1755 y(the)23 b(programmer)f(and)g(the)h(user)-5 + b(.)22 b(POOMA)h(w)o(orks)f(with)g(the)g(Message)g(P)o(assing)g(Interf) + o(ace)i(\(MPI\))396 1884 y(Communications)h(Library)h(and)g(the)g(MM)g + (Shared)h(Memory)e(Library)-6 b(.)26 b(See)h(Section)f(1.5)g(for)h(de-) + 396 2014 y(tails.)p Black 3784 5547 a Fp(81)p Black eop + %%Page: 82 82 + 82 81 bop Black Black -2 119 a Fy(Chapter)58 b(5.)f Fd(Array)j + Fy(Container)m(s)396 416 y Fu(A)27 b(container)f(is)f(an)i(object)f + (holding)e(objects.)i Fq(Array)p Fu(s)f(are)i(one)f(of)g(the)g(tw)o(o)g + (most)f(widely)h(used)396 545 y(POOMA)33 b(containers)g(since)g(the)o + (y)g(model)f(the)h(mathematical)g(concept)g(of)g(mapping)f(from)h(do-) + 396 675 y(main)e(indices)f(to)h(v)n(alues.)g(POOMA)g + Fq(Array)p Fu(s)e(e)o(xtend)i(b)n(uilt-in)f(C++)i(arrays)f(by)g + (supporting)f(a)396 804 y(wider)g(v)n(ariety)f(of)h(domains,)e + (automatically)g(handling)h(memory)g(allocation,)f(and)i(ha)n(ving)f + (\002rst-)396 934 y(class)37 b(status.)f(F)o(or)i(e)o(xample,)e(the)o + (y)g(may)h(be)g(used)g(as)h(operands)f(and)g(in)g(assignments.)e(In)i + (this)396 1064 y(chapter)l(,)h(we)f(introduce)g(the)g(concept)h(of)f + (containers,)g(the)g(mathematical)f(concept)h(of)h(arrays,)396 + 1193 y(and)30 b(the)f(POOMA)h(implementation)d(of)i Fq(Array)p + Fu(s.)g(Before)h(illustrating)e(ho)n(w)g(to)i(declare)g + Fq(Ar-)396 1323 y(ray)p Fu(s,)23 b(we)h(introduce)g Fq(Domain)p + Fu(s,)e(which)i(specify)f(the)h(sets)g(of)g(indices.)f(After)h + (describing)f(ho)n(w)396 1452 y(to)f(declare)g(the)g(v)n(arious)e + (types)i(of)g Fq(Domain)p Fu(s,)e(we)i(describe)f(ho)n(w)g(to)h + (declare)g(and)g(use)g Fq(Array)p Fu(s.)-2 1905 y Fx(5.1.)47 + b(Container)m(s)396 2120 y Fu(A)23 b Fp(container)f(class)g + Fu(is)g(a)i(class)e(whose)h(main)f(purpose)g(is)g(to)h(hold)f(objects.) + g(These)h(stored)f(objects,)396 2250 y(called)34 b Fp(container)e + (values)i Fu(or)f(more)h(simply)e(\223v)n(alues\224)h(or)h + (\223elements\224,)f(may)g(be)h(accessed)g(and)396 2379 + y(changed,)25 b(usually)f(using)g(indices.)g(\223Container)h(class\224) + f(is)h(usually)f(abbre)n(viated)g(as)h(\223container\224.)396 + 2559 y(The)h(six)f(POOMA)g(containers)g(can)h(be)g(cate)o(gorized)g + (into)e(tw)o(o)h(groups.)g(Mathematical)g(contain-)396 + 2688 y(ers)38 b(include)g Fq(Tensor)p Fu(s,)e Fq(TinyMatrix)p + Fu(s,)f(and)j Fq(Vector)p Fu(s,)e(which)h(model)g(tensors,)g(ma-)396 + 2818 y(trices,)30 b(and)f(v)o(ectors,)g(respecti)n(v)o(ely)-6 + b(.)28 b(Storage)i(containers)f(include)g Fq(Array)p + Fu(s,)g Fq(DynamicAr-)396 2947 y(ray)p Fu(s,)36 b(and)h + Fq(Field)p Fu(s.)e(In)i(this)f(chapter)l(,)h(we)g(focus)g(on)f + (simplest)f(of)i(these:)g Fq(Array)p Fu(s.)e Fq(Dy-)396 + 3077 y(namicArray)p Fu(s)22 b(are)k(also)e(described.)396 + 3256 y(C)53 b(has)e(b)n(uilt-in)f(arrays,)i(and)g(the)g(C++)g(Standard) + g(Library)g(pro)o(vides)e Fq(map)p Fu(s,)h Fq(vector)p + Fu(s,)396 3385 y Fq(stack)p Fu(s,)22 b(and)h(other)g(containers,)f(b)n + (ut)h(the)g(POOMA)g(containers)f(better)h(model)g(scienti\002c)f(com-) + 396 3515 y(puting)j(concepts)g(and)g(pro)o(vide)g(more)g(functionality) + -6 b(.)23 b(The)o(y)i(automatically)f(handle)h(memory)g(al-)396 + 3644 y(location)33 b(and)g(deallocation)f(and)h(can)h(be)f(used)g(in)g + (e)o(xpressions)f(and)h(on)g(the)g(left-hand)g(side)g(of)396 + 3774 y(assignments.)i(Since)h(POOMA)g(containers)g(separate)h(the)f + (concepts)g(of)g(accessing)g(and)g(using)396 3904 y(v)n(alues)f(from)g + (the)g(concept)g(of)g(storing)f(v)n(alues,)h(v)n(alue)f(storage)h(can)h + (be)f(optimized)f(to)h(speci\002c)396 4033 y(needs.)22 + b(F)o(or)g(e)o(xample,)f(if)h(most)f(of)i(an)f Fq(Array)p + Fu(')-5 b(s)20 b(v)n(alues)h(are)i(kno)n(wn)e(to)h(be)g(identical)f + (most)g(of)h(the)396 4163 y(time,)g(a)g(compressible)g(engine)g(can)g + (be)h(used.)f(Whene)n(v)o(er)g(all)g(the)g(array')-5 + b(s)23 b(v)n(alues)e(are)i(identical,)f(it)396 4292 y(stores)27 + b(only)g(one)g(v)n(alue.)g(At)g(other)g(times,)f(it)h(stores)g(all)g + (the)g(v)n(alues.)g(Engines)f(will)h(be)g(discussed)396 + 4422 y(in)e(Chapter)g(6.)-2 4924 y Fx(5.2.)47 b Fg(Array)p + Fx(s)396 5140 y Fu(Mathematically)-6 b(,)19 b(an)i(array)g(maps)g + (domain)f(indices)g(to)g(v)n(alues.)g(Usually)-6 b(,)19 + b(the)i(domain)f(consists)f(of)p Black 3784 5547 a Fp(82)p + Black eop + %%Page: 83 83 + 83 82 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fu(a)26 b(one-dimensional)d(inte)o + (gral)h(interv)n(al)g(or)i(it)e(may)h(be)h(a)f(multidimensional)d + (domain.)i(POOMA')-5 b(s)396 180 y Fq(Array)23 b Fu(container)h(class)f + (implements)f(this)h(idea.)h(Gi)n(v)o(en)e(an)i(inde)o(x,)f(i.e.,)g(a)i + (position)d(in)h(an)h Fq(Ar-)396 310 y(ray)p Fu(')-5 + b(s)22 b Fq(Domain)p Fu(,)g(it)h(returns)g(the)g(associated)g(v)n + (alue,)f(either)i(by)f(returning)f(a)i(stored)f(v)n(alue)f(or)i(by)396 + 439 y(computing)g(it.)h(The)h(indices)f(are)h(usually)e(inte)o(gral)h + (tuples)g(b)n(ut)g(need)h(not)f(be)g(zero-based)h(or)g(e)n(v)o(en)396 + 569 y(consist)34 b(of)g(all)h(possible)e(inte)o(gral)g(tuples)h(in)g(a) + h(multidimensional)c(range.)k(Using)f(indices)g(per)n(-)396 + 698 y(mits)28 b(constant-time)g(access)h(to)g(v)n(alues)f(although)g + (computing)f(a)j(particular)f(v)n(alue)f(may)h(require)396 + 828 y(signi\002cant)24 b(time.)396 1007 y(POOMA)30 b + Fq(Array)p Fu(s)f(are)i Fp(\002r)o(st-class)e(objects)h + Fu(so)g(the)o(y)g(can)g(be)h(used)f(more)g(easily)g(than)g(b)n(uilt-in) + 396 1137 y(C++)k(arrays.)g(F)o(or)f(e)o(xample,)f Fq(Array)p + Fu(s)g(can)h(be)g(used)g(as)g(operands)g(and)g(in)g(assignment)e + (state-)396 1266 y(ments.)24 b(The)h(statement)f Fq(a)65 + b(=)h(a)f(+)h(b;)24 b Fu(adds)h(corresponding)f(v)n(alues)g(of)h + Fq(Array)p Fu(s)e Fq(a)i Fu(and)g Fq(b)p Fu(,)396 1396 + y(assigning)d(the)h(sums)f(to)g(the)h Fq(Array)f(a)p + Fu(.)h(The)g(statement)f(treats)h(each)h(array)g(as)f(an)g(object,)g + (rather)396 1525 y(than)33 b(requiring)g(the)g(use)g(of)h(one)f(or)g + (more)h(loops)e(to)h(access)h(indi)n(vidual)d(v)n(alues.)h + (Data-parallel)396 1655 y(statements)18 b(such)h(as)g(this)f(are)i + (further)g(discussed)e(in)g(Chapter)i(7.)f Fq(Array)p + Fu(s)f(also)g(handle)h(their)g(o)n(wn)396 1784 y(memory)h(allocation)g + (and)h(deallocation.)f(F)o(or)h(e)o(xample,)f(the)h Fq(Array)f + Fu(declaration)g Fq(Array<2,)396 1914 y(double,)64 b(Brick>)h + (a\(vertDomain\))36 b Fu(creates)k(an)f Fq(Array)f(a)p + Fu(,)h(allocating)f(what-)396 2043 y(e)n(v)o(er)29 b(memory)g(it)g + (needs.)g(When)g Fq(a)h Fu(goes)f(out)g(of)g(scope,)g(it)g(and)g(its)g + (memory)g(are)h(automatically)396 2173 y(deallocated.)25 + b(Automatic)e(memory)h(allocation)g(and)h(deallocation)f(also)g(eases)h + (cop)o(ying.)396 2352 y(Indi)n(vidual)33 b Fq(Array)h + Fu(v)n(alues)h(can)g(be)g(accessed)h(using)e(parentheses,)h(not)f + (square)h(brack)o(ets,)g(as)396 2482 y(for)g(C++)f(arrays.)h(F)o(or)f + (e)o(xample,)f Fq(a\(3,4\))g Fu(yields)g(the)h(v)n(alue)f(at)h + (position)e(\(3,4\))i(of)g Fq(a)p Fu(')-5 b(s)34 b(tw)o(o-)396 + 2611 y(dimensional)23 b(domain.)-2 3114 y Fx(5.3.)47 + b Fg(Domain)p Fx(s)396 3329 y Fu(A)26 b Fp(domain)g Fu(speci\002es)g + (the)g(set)g(of)g(points)f(on)h(which)f(an)i(array)f(can)h(de\002ne)g + (v)n(alues.)e(These)h(indices)396 3459 y(are)d(the)e(ar)n(guments)h + (placed)f(within)g(parentheses)h(to)f(select)h(particular)f(v)n(alues,) + g(as)h(described)g(pre-)396 3588 y(viously)-6 b(.)21 + b(A)i(domain)e(supported)h(both)g(by)h Fq(Array)p Fu(s)e(and)i(by)f(b)n + (uilt-in)g(C++)h(arrays)g(is)g(the)f(interv)n(al)396 + 3718 y([0,n-1])f(of)f(inte)o(gers)f(containing)h(all)g(inte)o(gers)f + ({0,)h(1,)g(2,)h(.)15 b(.)g(.)g(,)k(n-1}.)h(F)o(or)h(C++,)g(e)n(v)o + (ery)f(inte)o(ger)f(in)h(the)396 3847 y(interv)n(al)27 + b(must)g(be)h(included,)f(and)h(the)g(minimum)e(inde)o(x)h(must)g(be)h + (zero.)g(POOMA)g(e)o(xpands)f(the)396 3977 y(set)i(of)g(permissible)f + (domains)g(to)g(support)g(interv)n(als)g(with)h(nonzero)g(minimal)e + (indices,)h(nonzero)396 4106 y(strides,)c(and)h(other)g(options.)396 + 4286 y(In)i(POOMA,)g Fq(Domain)e Fu(classes)i(implement)e(domains.)g + (There)i(are)h(four)f(dif)n(ferent)f(cate)o(gories:)396 + 4694 y Fq(Loc)p Black Black 596 4873 a(Domain)d Fu(with)h(a)h(single)f + (point.)p Black 3784 5547 a Fp(83)p Black eop + %%Page: 84 84 + 84 83 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fq(Interval)p Black + Black 596 230 a(Domain)23 b Fu(with)h(an)h(inte)o(gral)f(interv)n(al)f + ([a,b].)396 459 y Fq(Range)p Black Black 596 639 a(Domain)j + Fu(with)i(an)g(inte)o(gral)f(interv)n(al)g([a,b])i(and)f(an)g(inte)o + (gral)f(stride)h(s)g(indicating)f(the)h(gap)596 768 y(between)c + (indices:)g({a,)h(a+s,)g(a+2s,)g(.)15 b(.)g(.)g(,)24 + b(b}.)396 997 y Fq(Grid)p Black Black 596 1177 a(Domain)34 + b Fu(with)h(an)g(ascending)h(or)f(descending)g(sequence)h(of)g(inte)o + (gral)f(v)n(alues.)f(The)i(se-)596 1306 y(quence)25 b(elements)f(must)f + (be)i(indi)n(vidually)d(speci\002ed.)396 1486 y(One-dimensional)f(and)h + (multidimensional)c(v)o(ersions)j(of)h(the)g(cate)o(gories)g(are)h + (supported.)e(A)h(mul-)396 1615 y(tidimensional)30 b + Fq(Domain)h Fu(consists)g(of)i(the)f(direct)h(product)f(of)g + (one-dimensional)f Fq(Domain)p Fu(s.)396 1745 y(F)o(or)g(e)o(xample,)e + (the)h(\002rst)h(dimension)d(of)j(a)g(tw)o(o-dimensional)d(interv)n(al) + h([0,3]x[2,9])h(is)g(the)g(inter)n(-)396 1874 y(v)n(al)22 + b([0,3],)g(and)g(its)f(second)h(dimension)e(is)i(the)f(interv)n(al)g + ([2,9].)h(Its)g(indices)g(are)g(ordered)h(pairs)f(such)396 + 2004 y(as)j(\(0,2\),)g(\(0,3\),)g(\(1,2\),)f(\(1,9\),)h(and)g(\(3,7\).) + 396 2183 y(Man)o(y)45 b(domains)f(can)i(be)g(represented)g(using)e + (domain)h(triplets.)f(That)h(is,)g(a)h Fp(domain)f(triplet)396 + 2312 y Fu([)p Fq(begin)p Fu(:)p Fq(end)p Fu(:)p Fq(stride)p + Fu(])23 b(represents)j(the)g(mathematical)f(set)h({be)o(gin,)f(be)o + (gin)g(+)i(stride,)e(be)o(gin)396 2442 y(+)f(2stride,)f(.)15 + b(.)g(.)g(,)23 b(end},)g(where)h Fq(end)f Fu(is)g(in)g(the)g(set)g + (only)g(if)g(it)g(equals)g Fq(begin)g Fu(plus)f(some)h(inte)o(gral)396 + 2571 y(multiple)k(of)h Fq(stride)p Fu(.)f(If)i(the)f + Fq(stride)f Fu(is)h(ne)o(gati)n(v)o(e,)e(its)i(be)o(ginning)e(inde)o(x) + h Fq(begin)g Fu(should)396 2701 y(at)21 b(least)g(be)g(as)g(lar)n(ge)g + (as)g Fq(end)g Fu(if)f(the)h(interv)n(al)f(is)h(to)f(be)h(nonempty)-6 + b(.)19 b(The)i(stride)f(can)i(be)f(zero)g(only)f(if)396 + 2830 y Fq(begin)25 b Fu(and)h Fq(end)f Fu(are)h(equal.)g(There)g(are)h + (lots)e(of)h(w)o(ays)f(to)h(represent)g(an)g(empty)f(interv)n(al,)f + (e.g.,)396 2960 y([1:0:1])31 b(and)g([23,34,-1],)f(and)h(POOMA)g(will)f + (accept)i(them,)e(b)n(ut)g(the)o(y)h(are)g(all)g(equi)n(v)n(alent.)e + (The)396 3089 y(domain)h(triplet)h(notation)e(is)i(easily)g(e)o + (xtended)f(to)h(multiple)e(dimensions)h(by)h(separating)f(dif)n(fer)n + (-)396 3219 y(ent)21 b(dimension')-5 b(s)19 b(interv)n(als)h(with)h + (commas.)f(F)o(or)h(e)o(xample,)f([2:4:2,6:4:-2])g(contains)g(\(2,6\),) + h(\(2,4\),)396 3349 y(\(4,6\),)k(and)g(\(4,4\).)396 3528 + y(All)35 b(the)h Fq(Domain)e Fu(cate)o(gories)h(listed)g(abo)o(v)o(e)f + (e)o(xcept)h Fq(Grid)g Fu(can)h(be)g(represented)g(using)e(do-)396 + 3657 y(main)d(triplet)g(notation.)f(Since)i(the)g(triplet)f([7:7:1])f + (represents)i({7},)f(or)h(more)f(simply)f(7,)i(it)f(can)396 + 3787 y(also)36 b(represent)g(the)g(one-dimensional)e + Fq(Loc<1>\(7\))p Fu(.)f(Multidimensional)g Fq(Loc)p Fu(s)i(are)h(simi-) + 396 3916 y(larly)24 b(represented.)g(F)o(or)f(e)o(xample,)g + ([0:0:1,10:10:1,2:2:1])d(represents)k Fq(Loc<3>\(0,10,2\))p + Fu(,)396 4046 y(b)n(ut)d(it)h(is)f(frequently)g(abbre)n(viated)g(as)h + ([0,10,2].)g(An)f Fq(Interval)f Fu([a,b])i(has)g(unit)f(stride:)g + ([a:b:1],)396 4175 y(while)k(a)g Fq(Range)e Fu(has)i(speci\002c)g + (stride)g(s,)f(e.g.,)h([a:b:s].)396 4355 y Fq(Domain)p + Fu(s)53 b(can)i(be)g(constructed)f(by)g(combining)f Fq(Domain)p + Fu(s)g(with)h(smaller)g(dimension.)396 4484 y(F)o(or)g(e)o(xample,)f + (since)h(a)g(tw)o(o-dimensional)e Fq(Interval)g Fu(is)i(the)f(direct)h + (product)g(of)g(tw)o(o)396 4614 y(one-dimensional)39 + b Fq(Interval)p Fu(s,)f(it)i(can)h(be)g(speci\002ed)g(using)e(tw)o(o)h + (one-dimensional)f Fq(In-)396 4743 y(terval)p Fu(s.)53 + b(F)o(or)i(e)o(xample,)e Fq(Interval<2>\(Interval<1>\(2,3)o(\),)60 + b(Inter-)396 4873 y(val<1>\(4,5\)\))49 b Fu(creates)j(a)g + ([2:3:1,4:5:1])d Fq(Domain)p Fu(.)h(The)i(resulting)e(dimensionality) + 396 5002 y(equals)36 b(the)f(sum)g(of)h(the)g(components')e + (dimensions.)g(F)o(or)i(e)o(xample,)f(a)h(four)n(-dimension)e + Fq(Loc)396 5132 y Fu(can)39 b(be)g(speci\002ed)f(using)g(three-)g(and)h + (one-dimension)d Fq(Loc)p Fu(s)i(or)g(using)g(four)g(one-dimension)p + Black 3784 5547 a Fp(84)p Black eop + %%Page: 85 85 + 85 84 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fq(Loc)p Fu(s.)23 + b(If)i(fe)n(wer)f(dimensions)e(than)i(the)g(created)h(object')-5 + b(s)23 b(dimensionality)-6 b(,)21 b(the)j(last)f(dimensions)396 + 180 y(are)33 b(unspeci\002ed)e(and)h(uninitialized.)e + Fq(Loc)p Fu(s,)h Fq(Interval)p Fu(s,)e Fq(Range)p Fu(s,)h(and)i + Fq(Grid)p Fu(s)e(can)j(all)396 310 y(be)25 b(composed)f(from)h(smaller) + f(similar)g(components.)396 489 y(A)c Fq(Domain)f Fu(can)h(be)g + (composed)f(from)h(smaller)f(components)g(with)g(dif)n(ferent)h(types.) + f(A)h Fq(Loc)f Fu(ob-)396 619 y(ject)28 b(can)h(be)f(constructed)f + (from)h(other)g Fq(Loc)f Fu(objects)g(and)h(inte)o(gers.)f + Fq(Interval)p Fu(s,)f Fq(Range)p Fu(s,)396 748 y(and)33 + b Fq(Grid)p Fu(s)f(can)h(be)g(constructed)g(using)f(an)o(y)g(of)h + (these)g(types,)f Fq(Loc)p Fu(s,)g(and)h(inte)o(gers.)f(F)o(or)g(e)o + (x-)396 878 y(ample,)k Fq(Interval<3>)63 b(a\(Loc<2>\(1,2\),)g + (Interval<1>\(3,5\)\))32 b Fu(uses)k(a)396 1007 y(tw)o(o-dimensional)17 + b Fq(Loc)h Fu(and)h(a)g(one-dimensional)e Fq(Interval)g + Fu(to)h(create)i(a)f([1:1:1,2:2:1,3:5:1])396 1137 y Fq(Domain)p + Fu(.)h(During)h(creation)g(of)g(a)h Fq(Domain)p Fu(,)e(the)h(type)g(of) + g(each)h(object)f(is)g(changed)g(to)g(the)g Fq(Do-)396 + 1266 y(main)p Fu(')-5 b(s)24 b(type.)g(In)h(the)g(e)o(xample,)e + Fq(Loc<2>\(1,2\))g Fu(is)h(\002rst)h(con)l(v)o(erted)f(to)h(an)f + Fq(Interval)p Fu(.)396 1446 y Fq(Domain)p Fu(s)36 b(can)h(participate)f + (in)h(some)f(arithmetic)g(and)h(comparison)f(operations.)g(F)o(or)h(e)o + (xam-)396 1575 y(ple,)29 b(a)h Fq(Domain)p Fu(')-5 b(s)27 + b(triplet)h(can)h(be)h(shifted)e(tw)o(o)h(units)f(to)g(the)h(right)g + (by)f(adding)h(tw)o(o.)f(Multiply-)396 1705 y(ing)j(a)g + Fq(Domain)e Fu(by)i(tw)o(o)f(multiplies)f(its)h(triplet')-5 + b(s)30 b(be)o(ginnings,)e(endings,)i(and)h(strides)f(by)h(tw)o(o.)396 + 1834 y(POOMA)g(users)g(rarely)h(need)f(to)g(compare)g + Fq(Domain)p Fu(s,)e(b)n(ut)i(we)g(describe)h(operating)e(with)g(the)396 + 1964 y(less-than)d(operator)h(on)f Fq(Interval)p Fu(s:)f + Fq(Interval)f(d1)j Fu(<)g Fq(Interval)e(d2)h Fu(if)h(the)f(length)396 + 2093 y(of)e Fq(d1's)f Fu(interv)n(al)f(is)h(less)g(than)h + Fq(d2)p Fu(')-5 b(s)23 b(or)l(,)i(if)f(equal,)h(its)f(be)o(ginning)e(v) + n(alue)i(is)g(smaller)-5 b(.)24 b Fq(Domain)396 2223 + y Fu(arithmetic)31 b(is)h(frequently)g(used)f(with)h(data-parallel)g + (statements)e(and)i(container)g(vie)n(ws.)f(These)396 + 2352 y(will)24 b(be)h(discussed)f(in)g(Chapter)i(7)e(and)h(Chapter)g + (8.)396 2532 y(The)f(current)g(POOMA)g(implementation)e(supports)g + Fq(Domain)p Fu(s)h(with)g(dimensionality)e(between)396 + 2661 y(one)30 b(and)g(se)n(v)o(en,)f(inclusi)n(v)o(e.)f(Since)i(most)f + (scienti\002c)h(computations)e(use)i(one,)g(tw)o(o,)f(or)h(three)h(di-) + 396 2791 y(mensions,)25 b(this)f(is)i(usually)f(suf)n(\002cient.)g(If)h + (more)g(dimensions)e(than)h(se)n(v)o(en)g(are)i(needed,)f(the)o(y)f + (can)396 2920 y(be)g(added)g(to)f(the)h(source)g(code.)-2 + 3314 y Fk(5.3.1.)39 b(Dec)m(laring)e Fh(Domain)p Fk(s)396 + 3515 y Fu(Since)h Fq(Domain)p Fu(s)d(are)j(mainly)e(used)h(to)g + (declare)h(container)f(domains,)e(we)j(focus)f(on)g(declar)n(-)396 + 3645 y(ing)27 b Fq(Domain)p Fu(s,)f(deferring)i(most)e(discussion)g(of) + h(their)g(use.)g(W)-8 b(e)28 b(subsequently)e(describe)i(a)f(fe)n(w)396 + 3774 y Fq(Domain)d Fu(operations)h(b)n(ut)f(most,)g(including)g + (arithmetic)g(operations)h(with)f Fq(Domain)p Fu(s,)g(are)i(de-)396 + 3904 y(scribed)f(in)f(Chapter)i(8.)396 4083 y(All)i Fq(Domain)f + Fu(declarations)g(require)i(a)f(dimension)f(template)g(parameter)h + Fq(D)p Fu(.)g(This)g(positi)n(v)o(e)e(in-)396 4212 y(te)o(ger)36 + b(speci\002es)g(the)f(number)g(of)h(dimensions,)e(i.e.,)h(rank,)h(of)g + (the)f Fq(Domain)f Fu(and)i(determines)396 4342 y(the)d(length)g(of)g + (the)g(tuples)g(for)g(points)f(in)h(the)g Fq(Domain)p + Fu(.)f(F)o(or)h(e)o(xample,)f(a)i(three-dimensional)396 + 4472 y Fq(Domain)41 b Fu(contains)f(ordered)j(triples,)d(while)i(a)g + (one-dimensional)e Fq(Domain)g Fu(contains)h(sin-)396 + 4601 y(gletons,)d(or)g(just)g(inte)o(gers.)g(Multidimensional)d + Fq(Domain)p Fu(s)i(are)j(just)d(the)i(direct)f(products)g(of)396 + 4731 y(one-dimensional)19 b Fq(Domain)p Fu(s)h(so)h(the)f(techniques)h + (for)g(declaring)g(one-dimensional)e Fq(Domain)p Fu(s)396 + 4860 y(carry)26 b(o)o(v)o(er)e(to)g(multidimensional)e(ones.)396 + 5039 y(T)-8 b(o)29 b(declare)g(a)g Fq(Domain)p Fu(,)d(one)j(must)e + (include)h(the)g Ft(Pooma/Domains.h)33 b Fu(header)c(\002le.)g(Ho)n(we) + n(v)o(er)l(,)p Black 3784 5547 a Fp(85)p Black eop + %%Page: 86 86 + 86 85 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fu(most)22 b(POOMA)h(programs)f + (use)g Fq(Domain)p Fu(s)f(when)i(constructing)f(containers.)g(The)h + (storage)f(con-)396 180 y(tainer)31 b(header)g(\002les)g(automatically) + e(include)h Ft(Pooma/Domains.h)k Fu(so)c(no)h(e)o(xplicit)e(inclusion)g + (is)396 310 y(usually)24 b(necessary)-6 b(.)396 655 y + Fw(5.3.1.1.)36 b Fc(Loc)p Fw(s)396 844 y Fu(A)f Fq(Loc)e + Fu(is)i(a)g Fq(Domain)e Fu(with)h(just)g(a)h(single)f + Fq(D)p Fu(-dimensional)e(point.)i(Although)f(it)h(is)h(in-)396 + 973 y(frequently)41 b(used)g(as)g(a)g(container')-5 b(s)41 + b(domain,)f(it)g(is)h(used)f(to)h(refer)h(to)f(a)g(single)g(point)f + (within)396 1103 y(another)f(domain.)e(Its)h(be)o(ginning)f(and)i + (ending)f(points)f(are)i(the)g(same,)f(and)g(its)g(stride)g(is)g(one.) + 396 1232 y(One-dimensional)23 b Fq(Loc)p Fu(s)h(and)h(inte)o(gers)f + (are)h(frequently)g(interchanged.)396 1511 y Fr(T)-9 + b(able)26 b(5-1.)e(Declaring)h(One-Dimensional)g Fo(Loc)p + Fr(s)396 1748 y Fv(constructor)1191 b(result)396 1890 + y Fq(Loc<1>\(\))1216 b Fu(indicates)24 b(zero.)396 2031 + y Fq(Loc<1>\(const)396 2161 y(Pooma::NoInit&)63 b(no\))2140 + 2031 y Fu(creates)25 b(an)g(uninitialized)e Fq(Loc<1>)p + Fu(,)h(to)g(be)2140 2161 y(assigned)g(a)h(v)n(alue)f(later)-5 + b(.)396 2303 y Fq(Loc<1>\(const)63 b(DT1&)i(t1\))362 + b Fu(creates)25 b(a)g Fq(Loc<1>)f Fu(with)g(the)g(inte)o(ger)2140 + 2432 y(con)l(v)o(erted)g(from)h Fq(t1)p Fu(.)396 2574 + y Fq(Loc<1>\(const)63 b(DT1&)i(t1,)396 2703 y(const)g(DT2&)g(t2\))2140 + 2574 y Fu(creates)25 b(a)g Fq(Loc<1>)f Fu(with)g(the)g(inte)o(ger)2140 + 2703 y(con)l(v)o(erted)g(from)h Fq(t1)p Fu(.)f Fq(t2)g + Fu(must)g(equal)h Fq(t1)p Fu(.)396 2845 y Fq(Loc<1>\(const)63 + b(DT1&)i(t1,)396 2974 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 + 3104 y(t3\))2140 2845 y Fu(creates)25 b(a)g Fq(Loc<1>)f + Fu(with)g(the)g(inte)o(ger)2140 2974 y(con)l(v)o(erted)g(from)h + Fq(t1)p Fu(.)f Fq(t2)g Fu(must)g(equal)h Fq(t1)p Fu(,)2140 + 3104 y(and)f Fq(t3)h Fu(is)f(ignored.)396 3246 y Fq(DT1)p + Fu(,)g Fq(DT2)p Fu(,)g(and)h Fq(DT3)f Fu(are)i(template)396 + 3375 y(parameters.)396 3604 y(Constructors)38 b(for)i(one-dimensional)d + Fq(Loc)p Fu(s)h(appear)h(in)g(T)-8 b(able)38 b(5-1.)h(The)g(empty)f + (constructor)396 3734 y(yields)c(the)g(zero)h(point.)e(The)i + (constructor)f(taking)f(a)i Fq(Pooma::Init)d Fu(object)i(does)g(not)g + (ini-)396 3863 y(tialize)42 b(the)g(resulting)e Fq(Loc)i + Fu(to)f(an)o(y)h(particular)f(v)n(alue.)h(Presumably)-6 + b(,)41 b(the)g(v)n(alue)h(will)f(be)h(as-)396 3993 y(signed)35 + b(later)-5 b(.)35 b(F)o(or)h(small)e Fq(Domain)p Fu(s)g(such)h(as)h + Fq(Loc)p Fu(s,)f(the)g(time)g(sa)n(vings)f(from)i(not)f(initializ-)396 + 4122 y(ing)25 b(is)g(small,)f(b)n(ut)h(the)g(functionality)e(is)i + (still)f(a)n(v)n(ailable.)g(The)i(constructor)e(taking)g(one)i(ar)n + (gument)396 4252 y(with)k(type)g Fq(DT1)g Fu(con)l(v)o(erts)g(this)f + (ar)n(gument)i(to)f(an)g(inte)o(ger)g(to)g(specify)h(the)f(point.)g + (The)g(template)396 4381 y(type)21 b Fq(DT1)f Fu(may)g(be)h(an)o(y)g + (type)f(that)h(can)g(be)g(con)l(v)o(erted)f(to)h(an)g(inte)o(ger)l(,)f + (e.g.,)g Fq(bool)p Fu(,)g Fq(char)p Fu(,)g Fq(int)p Fu(,)396 + 4511 y(or)27 b Fq(double)p Fu(.)e(The)i(constructors)f(taking)f(tw)o(o) + i(and)f(three)h(ar)n(guments)f(of)h(templatized)f(types)g(f)o(a-)396 + 4640 y(cilitate)34 b(con)l(v)o(erting)f(an)i Fq(Interval<1>)c + Fu(and)k(a)f Fq(Range<1>)f Fu(into)g(a)i Fq(Loc<1>)p + Fu(.)e(Since)i(a)396 4770 y Fq(Loc)22 b Fu(represents)h(a)f(single)g + (point,)f(the)i Fq(Interval)p Fu(')-5 b(s)20 b(or)i Fq(Range)p + Fu(')-5 b(s)21 b(\002rst)i(tw)o(o)f(ar)n(guments)f(must)396 + 4899 y(be)30 b(equal.)g(The)g(stride)f(is)g(ignored.)g(Again,)g(the)h + (templatized)e(types)i(may)f(be)h(an)o(y)f(type)h(that)f(can)396 + 5029 y(be)c(con)l(v)o(erted)f(into)g(an)h(inte)o(ger)-5 + b(.)p Black 3781 5547 a Fp(86)p Black eop + %%Page: 87 87 + 87 86 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fr(T)-9 b(able)26 + b(5-2.)e(Declaring)h(Multidimensional)g Fo(Loc)p Fr(s)396 + 288 y Fv(constructor)1191 b(result)396 429 y Fq(Loc\(\))1216 + b Fu(indicates)24 b(zero.)396 571 y Fq(Loc\(const)396 + 700 y(Pooma::NoInit&)63 b(no\))2140 571 y Fu(creates)25 + b(an)g(uninitialized)e Fq(Loc)p Fu(,)h(to)h(be)2140 700 + y(assigned)f(a)h(v)n(alue)f(later)-5 b(.)396 842 y Fq(Loc\(const)63 + b(DT1&)i(t1\))362 b Fu(creates)25 b(a)g Fq(Loc)f Fu(using)g(the)h(gi)n + (v)o(en)e Fq(Domain)2140 972 y Fu(object.)396 1113 y + Fq(Loc\(const)63 b(DT1&)i(t1,)396 1243 y(const)g(DT2&)g(t2\))2140 + 1113 y Fu(creates)25 b(a)g Fq(Loc)f Fu(using)g(the)h(gi)n(v)o(en)e + Fq(Domain)2140 1243 y Fu(objects.)396 1384 y Fq(Loc\(const)63 + b(DT1&)i(t1,)396 1514 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 + 1643 y(t3\))2140 1384 y Fu(creates)25 b(a)g Fq(Loc)f + Fu(using)g(the)h(gi)n(v)o(en)e Fq(Domain)2140 1514 y + Fu(objects.)396 1785 y Fq(Loc\(const)63 b(DT1&)i(t1,)396 + 1915 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 2044 y(t3,)h(const)g(DT4&) + g(t4\))2140 1785 y Fu(creates)25 b(a)g Fq(Loc)f Fu(using)g(the)h(gi)n + (v)o(en)e Fq(Domain)2140 1915 y Fu(objects.)396 2186 + y Fq(Loc\(const)63 b(DT1&)i(t1,)396 2315 y(const)g(DT2&)g(t2,)g + (const)f(DT3&)396 2445 y(t3,)h(const)g(DT4&)g(t4,)g(const)396 + 2574 y(DT5&)g(t5\))2140 2186 y Fu(creates)25 b(a)g Fq(Loc)f + Fu(using)g(the)h(gi)n(v)o(en)e Fq(Domain)2140 2315 y + Fu(objects.)396 2716 y Fq(Loc\(const)63 b(DT1&)i(t1,)396 + 2846 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 2975 y(t3,)h(const)g(DT4&) + g(t4,)g(const)396 3105 y(DT5&)g(t5,)g(const)g(DT6&)f(t6\))2140 + 2716 y Fu(creates)25 b(a)g Fq(Loc)f Fu(using)g(the)h(gi)n(v)o(en)e + Fq(Domain)2140 2846 y Fu(objects.)396 3246 y Fq(Loc\(const)63 + b(DT1&)i(t1,)396 3376 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 + 3505 y(t3,)h(const)g(DT4&)g(t4,)g(const)396 3635 y(DT5&)g(t5,)g(const)g + (DT6&)f(t6,)396 3764 y(const)h(DT7&)g(t7\))2140 3246 + y Fu(creates)25 b(a)g Fq(Loc)f Fu(using)g(the)h(gi)n(v)o(en)e + Fq(Domain)2140 3376 y Fu(objects.)396 3906 y Fq(D)i Fu(indicates)f(the) + h Fq(Loc)p Fu(')-5 b(s)23 b(dimension.)g Fq(DT1)p Fu(,)396 + 4035 y Fq(DT2)p Fu(,)h(.)15 b(.)g(.)40 b(are)25 b(template)f + (parameters.)396 4265 y(Constructors)36 b(for)h(multidimensional)c + Fq(Loc)p Fu(s)j(appear)h(in)f(T)-8 b(able)37 b(5-2.)f + Fq(D)g Fu(indicates)g(the)g Fq(Loc)p Fu(')-5 b(s)396 + 4394 y(dimension.)30 b(The)i(\002rst)g(tw)o(o)f(constructors)f(are)j + (similar)d(to)i Fq(Loc<1>)p Fu(')-5 b(s)29 b(\002rst)j(tw)o(o)f + (constructors,)396 4524 y(returning)37 b(a)g(representation)g(of)g(the) + g(zero)g(point)f(and)h(returning)g(an)g(uninitialized)e(point.)h(The) + 396 4653 y(se)n(v)o(en)30 b(other)g(constructors)g(create)i(a)f + Fq(Loc)f Fu(using)f(other)i Fq(Domain)e Fu(objects.)h(These)h + Fq(Domain)396 4783 y Fu(objects,)39 b(ha)n(ving)f(types)h + Fq(DT1)p Fu(,)f(.)15 b(.)g(.)g(,)39 b Fq(DT7)p Fu(,)g(can)g(ha)n(v)o(e) + g(an)o(y)g(type)g(that)g(can)g(be)h(con)l(v)o(erted)e(into)396 + 4912 y(an)j(inte)o(ger)l(,)f(to)g(a)h Fq(Loc<1>)p Fu(,)e(or)h(to)h(a)f + (multidimensional)e Fq(Domain)h Fu(object)h(that)g(itself)g(can)396 + 5042 y(be)34 b(con)l(v)o(erted)e(into)h(a)g Fq(Loc)p + Fu(.)g(The)g(total)f(dimensionality)f(of)i(all)g(the)g(ar)n(guments')g + (types)f(should)p Black 3780 5547 a Fp(87)p Black eop + %%Page: 88 88 + 88 87 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fu(be)d(at)f(most)g + Fq(D)p Fu(.)g(F)o(or)h(e)o(xample,)e Fq(Loc<5>\(Range<1>\(2,2,2\),)60 + b(Loc<2>\(2,3\),)396 180 y(Interval<1>\(4,4\)\))38 b + Fu(creates)k(a)g(\002)n(v)o(e-dimensional)d Fq(Loc)i + Fu([2,2,3,4,1])g(using)f(a)i(one-)396 310 y(dimensional)37 + b Fq(Range)p Fu(,)g(a)i(tw)o(o-dimensional)d Fq(Loc)p + Fu(,)i(and)g(a)h(one-dimensional)d Fq(Interval)p Fu(.)396 + 439 y(The)29 b(\002nal)f(\002fth)g(dimension)f(has)h(an)g + (unspeci\002ed)g(v)n(alue,)g(in)g(this)f(case)i(1.)f(The)g + (one-dimensional)396 569 y Fq(Range)h Fu(is)h(con)l(v)o(erted)g(into)f + (the)h(single)g(inte)o(ger)f(tw)o(o;)h(its)f(be)o(ginning)g(and)h + (ending)f(points)g(must)396 698 y(be)c(the)f(same.)g(The)g(tw)o + (o-dimensional)e Fq(Loc)i Fu(contrib)n(utes)f(v)n(alues)g(for)i(the)f + (ne)o(xt)g(tw)o(o)f(dimensions,)396 828 y(while)32 b(the)g + Fq(Interval)f Fu(contrib)n(utes)g(its)g(be)o(ginning)g(point,)g(which)h + (must)f(be)h(the)h(same)f(as)g(its)396 957 y(ending)d(point.)f(Note)h + (that)f(the)h Fq(Loc<1>)f Fu(constructors)h(taking)f(tw)o(o)h(and)g + (three)g(parameters)h(ig-)396 1087 y(nore)25 b(their)g(second)g(and)f + (third)h(ar)n(guments,)f(b)n(ut)g(this)g(is)h(not)f(true)h(for)g(the)g + (multidimensional)c(con-)396 1217 y(structors.)396 1621 + y Fw(5.3.1.2.)36 b Fc(Interval)p Fw(s)396 1810 y Fu(A)30 + b(one-dimensional)d Fq(Interval)g Fu(represents)j(a)f(set)g(of)h(inte)o + (gers)e(within)g(a)h(mathematical)g Fp(in-)396 1940 y(terval)p + Fu(.)20 b(Multidimensional)d Fq(Interval)p Fu(s)h(represent)i(their)g + (multidimensional)d(generalization,)396 2069 y(i.e.,)j(the)h(direct)f + (product)g(of)h(one-dimensional)d(interv)n(als.)h Fq(Interval)p + Fu(s)g(are)i(ar)n(guably)f(the)g(most)396 2199 y(commonly)29 + b(used)h(POOMA)g Fq(Domain)p Fu(.)f(A)h(one-dimensional)f + Fq(Interval)f Fu(has)j(inte)o(gral)e(be-)396 2328 y(ginning)24 + b(and)g(ending)g(points)g(and)h(a)g(unit)f(stride.)396 + 2607 y Fr(T)-9 b(able)26 b(5-3.)e(Declaring)h(One-Dimensional)g + Fo(Interval)p Fr(s)396 2844 y Fv(constructor)1191 b(result)396 + 2986 y Fq(Interval<1>\(\))886 b Fu(creates)25 b(an)g(empty)-6 + b(,)24 b(uninitialized)f(interv)n(al.)396 3127 y Fq(Interval<1>\(const) + 396 3257 y(Pooma::NoInit&)63 b(no\))2140 3127 y Fu(creates)25 + b(an)g(uninitialized)e Fq(Interval<1>)p Fu(,)2140 3257 + y(to)h(be)h(assigned)f(a)h(v)n(alue)f(later)-5 b(.)396 + 3398 y Fq(Interval<1>\(const)62 b(DT1&)j(t1\))33 b Fu(creates)25 + b(an)g Fq(Interval<1>)p Fu(.)d(See)k(the)f(te)o(xt)2140 + 3528 y(for)g(an)g(e)o(xplanation.)396 3670 y Fq(Interval<1>\(const)62 + b(DT1&)j(t1,)396 3799 y(const)g(DT2&)g(t2\))2140 3670 + y Fu(creates)25 b(an)g Fq(Interval<1>)d Fu(with)i(the)2140 + 3799 y(inte)o(gers)g(con)l(v)o(erted)g(from)g Fq(t1)h + Fu(and)g Fq(t2)p Fu(.)396 3941 y Fq(Interval<1>\(const)62 + b(DT1&)j(t1,)396 4070 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 + 4200 y(t3\))2140 3941 y Fu(creates)25 b(an)g Fq(Interval<1>)d + Fu(with)i(the)2140 4070 y(inte)o(gers)g(con)l(v)o(erted)g(from)g + Fq(t1)h Fu(and)g Fq(t2)p Fu(.)f Fq(t3)2140 4200 y Fu(must)f(equal)i(1.) + 396 4342 y Fq(DT1)p Fu(,)f Fq(DT2)p Fu(,)g(and)h Fq(DT3)f + Fu(are)i(template)396 4471 y(parameters.)396 4700 y Fq(Interval<1>)20 + b Fu(constructors)h(are)h(patterned)g(on)f Fq(Loc<1>)g + Fu(constructors)g(e)o(xcept)g(that)h Fq(In-)396 4830 + y(terval<1>)p Fu(s)37 b(can)j(ha)n(v)o(e)e(dif)n(fering)h(be)o(ginning) + e(and)i(ending)f(points.)g(See)i(T)-8 b(able)39 b(5-3.)g(The)396 + 4959 y(def)o(ault)c(constructor)f(creates)i(an)f(empty)-6 + b(,)34 b(uninitialized)f(interv)n(al,)h(which)h(should)f(not)g(be)i + (used)396 5089 y(before)e(assigning)e(it)g(v)n(alues.)h(If)g(the)g + (one-parameter)h(constructor')-5 b(s)32 b(ar)n(gument)g(is)h(a)h + Fq(Domain)p Black 3784 5547 a Fp(88)p Black eop + %%Page: 89 89 + 89 88 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fu(object,)d(it)g(must)g(be)g(a)h + (one-dimensional)e Fq(Domain)g Fu(object)h(which)g(is)h(con)l(v)o + (erted)f(into)f(an)i Fq(In-)396 180 y(terval)h Fu(if)i(possible;)e(for) + i(e)o(xample,)e(it)h(must)g(ha)n(v)o(e)g(unit)g(stride.)g(If)h(the)f + (one-parameter)h(con-)396 310 y(structor')-5 b(s)38 b(ar)n(gument)g(is) + g(not)g(a)h Fq(Domain)e Fu(object,)i(it)f(must)f(be)i(con)l(v)o + (ertible)f(to)g(an)h(inte)o(ger)e Fq(e)396 439 y Fu(and)32 + b(an)f(interv)n(al)g([0:e-1:1])g(starting)f(at)h(zero)h(is)f + (constructed.)g(Note)g(e-1,)h(not)f(e,)g(is)g(used)g(so)g(the)396 + 569 y Fq(Interval<1>)j Fu(has)i(e)h(indices.)f(If)h(tw)o(o)f(ar)n + (guments)f(are)j(speci\002ed,)e(the)o(y)g(are)h(assumed)f(to)396 + 698 y(be)29 b(con)l(v)o(ertible)e(to)h(inte)o(gers)g + Fq(b)g Fu(and)h Fq(e)p Fu(,)f(specifying)g(the)g(interv)n(al)g + ([b:e:1].)g(The)h(three-parameter)396 828 y(constructor)24 + b(is)h(similar)l(,)e(with)h(the)h(third)f(ar)n(gument)h(specifying)e(a) + j(stride,)e(which)g(must)g(be)h(one.)396 1107 y Fr(T)-9 + b(able)26 b(5-4.)e(Declaring)h(Multidimensional)g Fo(Interval)p + Fr(s)396 1344 y Fv(constructor)1191 b(result)396 1485 + y Fq(Interval\(\))886 b Fu(creates)25 b(an)g(empty)-6 + b(,)24 b(uninitialized)2140 1615 y Fq(Interval)p Fu(,)f(to)h(be)h + (assigned)f(a)h(v)n(alue)f(later)-5 b(.)396 1756 y Fq + (Interval\(const)396 1886 y(Pooma::NoInit&)63 b(no\))2140 + 1756 y Fu(creates)25 b(an)g(empty)-6 b(,)24 b(uninitialized)2140 + 1886 y Fq(Interval)p Fu(,)f(to)h(be)h(assigned)f(a)h(v)n(alue)f(later) + -5 b(.)396 2028 y Fq(Interval\(const)62 b(DT1&)j(t1\))33 + b Fu(creates)25 b(an)g Fq(Interval)e Fu(using)h(the)h(gi)n(v)o(en)2140 + 2157 y Fq(Domain)e Fu(object.)396 2299 y Fq(Interval\(const)62 + b(DT1&)j(t1,)396 2428 y(const)g(DT2&)g(t2\))2140 2299 + y Fu(creates)25 b(an)g Fq(Interval)e Fu(using)h(the)h(gi)n(v)o(en)2140 + 2428 y Fq(Domain)e Fu(objects.)396 2570 y Fq(Interval\(const)62 + b(DT1&)j(t1,)396 2699 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 + 2829 y(t3\))2140 2570 y Fu(creates)25 b(an)g Fq(Interval)e + Fu(using)h(the)h(gi)n(v)o(en)2140 2699 y Fq(Domain)e + Fu(objects.)396 2971 y Fq(Interval\(const)62 b(DT1&)j(t1,)396 + 3100 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 3230 y(t3,)h(const)g(DT4&) + g(t4\))2140 2971 y Fu(creates)25 b(an)g Fq(Interval)e + Fu(using)h(the)h(gi)n(v)o(en)2140 3100 y Fq(Domain)e + Fu(objects.)396 3371 y Fq(Interval\(const)62 b(DT1&)j(t1,)396 + 3501 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 3630 y(t3,)h(const)g(DT4&) + g(t4,)g(const)396 3760 y(DT5&)g(t5\))2140 3371 y Fu(creates)25 + b(an)g Fq(Interval)e Fu(using)h(the)h(gi)n(v)o(en)2140 + 3501 y Fq(Domain)e Fu(objects.)396 3902 y Fq(Interval\(const)62 + b(DT1&)j(t1,)396 4031 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 + 4161 y(t3,)h(const)g(DT4&)g(t4,)g(const)396 4290 y(DT5&)g(t5,)g(const)g + (DT6&)f(t6\))2140 3902 y Fu(creates)25 b(an)g Fq(Interval)e + Fu(using)h(the)h(gi)n(v)o(en)2140 4031 y Fq(Domain)e + Fu(objects.)396 4432 y Fq(Interval\(const)62 b(DT1&)j(t1,)396 + 4561 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 4691 y(t3,)h(const)g(DT4&) + g(t4,)g(const)396 4820 y(DT5&)g(t5,)g(const)g(DT6&)f(t6,)396 + 4950 y(const)h(DT7&)g(t7\))2140 4432 y Fu(creates)25 + b(an)g Fq(Interval)e Fu(using)h(the)h(gi)n(v)o(en)2140 + 4561 y Fq(Domain)e Fu(objects.)p Black 3784 5547 a Fp(89)p + Black eop + %%Page: 90 90 + 90 89 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 85 a Fv(constructor)1191 + b(result)396 226 y Fq(D)25 b Fu(indicates)f(the)h Fq(Interval)p + Fu(')-5 b(s)22 b(dimension.)396 356 y Fq(DT1)p Fu(,)i + Fq(DT2)p Fu(,)g(.)15 b(.)g(.)40 b(are)25 b(template)f(parameters.)396 + 585 y(Constructors)i(for)h(multidimensional)c Fq(Interval)p + Fu(s)h(closely)i(follo)n(w)f(constructors)h(for)h(multi-)396 + 714 y(dimensional)i Fq(Loc)p Fu(s.)g(See)i(T)-8 b(able)31 + b(5-4.)f Fq(D)g Fu(indicates)f(the)i Fq(Interval)p Fu(')-5 + b(s)27 b(dimension.)i(The)h(\002rst)396 844 y(tw)o(o)23 + b(constructors)g(both)g(return)g(empty)-6 b(,)22 b(uninitialized)g + (interv)n(als.)g(The)h(se)n(v)o(en)g(other)g(constructors)396 + 973 y(create)30 b(an)g Fq(Interval)d Fu(using)h Fq(Domain)g + Fu(objects.)g(These)h Fq(Domain)f Fu(objects,)g(ha)n(ving)h(types)396 + 1103 y Fq(DT1)p Fu(,)g(.)15 b(.)g(.)g(,)29 b Fq(DT7)p + Fu(,)g(can)h(ha)n(v)o(e)g(an)o(y)f(type)g(that)h(can)g(be)g(con)l(v)o + (erted)f(into)f(an)i(inte)o(ger)l(,)f(into)g(a)h(single-)396 + 1233 y(dimensional)22 b Fq(Domain)h Fu(object)h(that)f(can)h(be)h(con)l + (v)o(erted)e(into)g(a)h(single-dimensional)e Fq(Inter-)396 + 1362 y(val)p Fu(,)38 b(or)h(to)g(a)g(multidimensional)d + Fq(Domain)h Fu(object)i(that)f(itself)g(can)i(be)f(con)l(v)o(erted)f + (into)g(an)396 1492 y Fq(Interval)p Fu(.)24 b(The)i(total)e + (dimensionality)f(of)j(all)g(the)f(ar)n(guments')g(types)g(should)g(be) + g(at)h(most)f Fq(D)p Fu(.)396 1621 y(One-dimensional)36 + b Fq(Domain)g Fu(objects)h(that)g(can)h(be)g(con)l(v)o(erted)f(into)f + (one-dimensional)g Fq(In-)396 1751 y(terval)p Fu(s)22 + b(include)h Fq(Loc<1>)p Fu(s,)f Fq(Interval<1>)p Fu(s,)f(and)i + Fq(Range<1>)p Fu(s)f(with)g(unit)h(strides.)396 1880 + y(If)f(the)g(sum)f(of)h(the)f(objects')h(dimensions)d(is)j(less)f(than) + g Fq(D)p Fu(,)h(the)f(interv)n(als)g(for)h(the)f(\002nal)h(dimensions) + 396 2010 y(are)f(unspeci\002ed.)f(See)g(the)g(last)f(paragraph)i(of)f + (Section)g(5.3.1.1)e(for)j(an)f(analogous)f(e)o(xample.)g(Note)396 + 2139 y(that)30 b(the)h Fq(Interval<1>)d Fu(constructors)h(taking)h(tw)o + (o)g(and)h(three)g(parameters)f(treat)h(these)g(ar)n(-)396 + 2269 y(guments)24 b(dif)n(ferently)g(than)g(the)h(multidimensional)c + (constructors)j(do.)396 2673 y Fw(5.3.1.3.)36 b Fc(Range)p + Fw(s)396 2862 y Fu(A)24 b(one-dimensional)d Fq(Range)i + Fu(generalizes)h(an)f Fq(Interval)f Fu(by)h(permitting)f(a)i(non-unit)e + (stride)396 2992 y(between)29 b(inte)o(gral)e(members.)g(A)h + Fp(r)o(ang)o(e)g Fu(is)f(a)i(set)f(of)g(inte)o(gers)f(in)h(a)h + (mathematical)e(interv)n(al)g([b,e])396 3121 y(with)c(a)i(stride)e(s)h + (between)g(them:)f({a,)h(a+s,)g(a+2s,)g(.)15 b(.)g(.)g(,)24 + b(b}.)f(Ranges)i(are)f(generalized)h(to)e Fq(D)h Fu(dimen-)396 + 3251 y(sions)g(using)g(the)g(direct)h(product)f(of)h(one-dimensional)e + (ranges.)396 3530 y Fr(T)-9 b(able)26 b(5-5.)e(Declaring)h + (One-Dimensional)g Fo(Range)p Fr(s)396 3767 y Fv(constructor)1191 + b(result)396 3908 y Fq(Range<1>\(\))1084 b Fu(creates)25 + b(an)g(empty)-6 b(,)24 b(uninitialized)f(range.)396 4050 + y Fq(Range<1>\(const)396 4179 y(Pooma::NoInit&)63 b(no\))2140 + 4050 y Fu(creates)25 b(an)g(uninitialized)e Fq(Range<1>)p + Fu(,)g(to)h(be)2140 4179 y(assigned)g(a)h(v)n(alue)f(later)-5 + b(.)396 4321 y Fq(Range<1>\(const)63 b(DT1&)h(t1\))231 + b Fu(creates)25 b(a)g Fq(Range<1>)p Fu(.)e(See)j(the)f(te)o(xt)e(for)j + (an)2140 4451 y(e)o(xplanation.)396 4592 y Fq(Range<1>\(const)63 + b(DT1&)h(t1,)396 4722 y(const)h(DT2&)g(t2\))2140 4592 + y Fu(creates)25 b(a)g Fq(Range<1>)e Fu(with)h(an)h(interv)n(al)2140 + 4722 y(speci\002ed)g(by)f(the)h(inte)o(gers)f(con)l(v)o(erted)g(from) + 2140 4851 y Fq(t1)g Fu(and)h Fq(t2)p Fu(.)p Black 3784 + 5547 a Fp(90)p Black eop + %%Page: 91 91 + 91 90 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 85 a Fv(constructor)1191 + b(result)396 226 y Fq(Range<1>\(const)63 b(DT1&)h(t1,)396 + 356 y(const)h(DT2&)g(t2,)g(const)f(DT3&)396 485 y(t3\))2140 + 226 y Fu(creates)25 b(a)g Fq(Range<1>)e Fu(by)i(con)l(v)o(erting)e(the) + 2140 356 y(ar)n(guments)h(to)g(inte)o(gers)g Fq(i1)p + Fu(,)g Fq(i2)p Fu(,)h(and)g Fq(i3)f Fu(and)2140 485 y(then)g(making)g + (a)h(range)g([i1:i2:i3].)396 627 y Fq(DT1)p Fu(,)f Fq(DT2)p + Fu(,)g(and)h Fq(DT3)f Fu(are)i(template)396 757 y(parameters.)396 + 986 y Fq(Range<1>)32 b Fu(constructors)h(are)h(the)g(same)f(as)h + Fq(Interval<1>)d Fu(constructors)i(e)o(xcept)g(the)o(y)396 + 1115 y(create)k(ranges,)f(not)g(interv)n(als.)f(See)i(T)-8 + b(able)36 b(5-5.)f(The)i(def)o(ault)e(constructor)h(creates)g(an)h + (empty)-6 b(,)396 1245 y(uninitialized)37 b(range,)i(which)f(should)f + (not)h(be)g(used)h(before)g(assigning)e(it)g(v)n(alues.)h(If)h(the)f + (one-)396 1374 y(parameter)d(constructor')-5 b(s)32 b(ar)n(gument)i(is) + f(a)i Fq(Domain)d Fu(object,)i(it)f(must)g(be)h(a)g(one-dimensional)396 + 1504 y Fq(Domain)i Fu(object)h(which)g(is)f(con)l(v)o(erted)h(into)f(a) + i Fq(Range)e Fu(if)h(possible.)f(If)i(the)f(one-parameter)396 + 1633 y(constructor')-5 b(s)27 b(ar)n(gument)h(is)g(not)g(a)h + Fq(Domain)e Fu(object,)h(it)f(must)h(be)g(con)l(v)o(ertible)f(to)h(an)h + (inte)o(ger)e Fq(e)396 1763 y Fu(and)40 b(a)g(range)g([0:e-1:1])f + (starting)f(at)i(zero)g(is)f(constructed.)g(Note)g(e-1,)h(not)f(e,)h + (is)f(used)g(so)g(the)396 1892 y Fq(Interval<1>)34 b + Fu(has)i(e)h(indices.)f(If)h(tw)o(o)f(ar)n(guments)f(are)j + (speci\002ed,)e(the)o(y)g(are)h(assumed)f(to)396 2022 + y(be)g(con)l(v)o(ertible)e(to)h(inte)o(gers)f Fq(b)h + Fu(and)g Fq(e)p Fu(,)g(specifying)g(the)g(range)g([b:e:1].)g(The)h + (three-parameter)396 2151 y(constructor)24 b(is)h(similar)l(,)e(with)h + (the)h(third)f(ar)n(gument)h(specifying)e(a)j(stride.)396 + 2430 y Fr(T)-9 b(able)26 b(5-6.)e(Declaring)h(Multidimensional)g + Fo(Range)p Fr(s)396 2667 y Fv(constructor)1191 b(result)396 + 2809 y Fq(Range\(\))1084 b Fu(creates)25 b(an)g(empty)-6 + b(,)24 b(uninitialized)f Fq(Range)p Fu(,)g(to)2140 2938 + y(be)i(assigned)f(a)h(v)n(alue)f(later)-5 b(.)396 3080 + y Fq(Range\(const)396 3209 y(Pooma::NoInit&)63 b(no\))2140 + 3080 y Fu(creates)25 b(an)g(empty)-6 b(,)24 b(uninitialized)f + Fq(Range)p Fu(,)g(to)2140 3209 y(be)i(assigned)f(a)h(v)n(alue)f(later) + -5 b(.)396 3351 y Fq(Range\(const)63 b(DT1&)h(t1\))231 + b Fu(creates)24 b(a)h Fq(Range)d Fu(using)h(the)h(gi)n(v)o(en)f + Fq(Domain)2140 3480 y Fu(object.)396 3622 y Fq(Range\(const)63 + b(DT1&)h(t1,)396 3752 y(const)h(DT2&)g(t2\))2140 3622 + y Fu(creates)24 b(a)h Fq(Range)d Fu(using)h(the)h(gi)n(v)o(en)f + Fq(Domain)2140 3752 y Fu(objects.)396 3893 y Fq(Range\(const)63 + b(DT1&)h(t1,)396 4023 y(const)h(DT2&)g(t2,)g(const)f(DT3&)396 + 4152 y(t3\))2140 3893 y Fu(creates)24 b(a)h Fq(Range)d + Fu(using)h(the)h(gi)n(v)o(en)f Fq(Domain)2140 4023 y + Fu(objects.)396 4294 y Fq(Range\(const)63 b(DT1&)h(t1,)396 + 4423 y(const)h(DT2&)g(t2,)g(const)f(DT3&)396 4553 y(t3,)h(const)g(DT4&) + g(t4\))2140 4294 y Fu(creates)24 b(a)h Fq(Range)d Fu(using)h(the)h(gi)n + (v)o(en)f Fq(Domain)2140 4423 y Fu(objects.)396 4695 + y Fq(Range\(const)63 b(DT1&)h(t1,)396 4824 y(const)h(DT2&)g(t2,)g + (const)f(DT3&)396 4954 y(t3,)h(const)g(DT4&)g(t4,)g(const)396 + 5083 y(DT5&)g(t5\))2140 4695 y Fu(creates)24 b(a)h Fq(Range)d + Fu(using)h(the)h(gi)n(v)o(en)f Fq(Domain)2140 4824 y + Fu(objects.)p Black 3784 5547 a Fp(91)p Black eop + %%Page: 92 92 + 92 91 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 85 a Fv(constructor)1191 + b(result)396 226 y Fq(Range\(const)63 b(DT1&)h(t1,)396 + 356 y(const)h(DT2&)g(t2,)g(const)f(DT3&)396 485 y(t3,)h(const)g(DT4&)g + (t4,)g(const)396 615 y(DT5&)g(t5,)g(const)g(DT6&)f(t6\))2140 + 226 y Fu(creates)24 b(a)h Fq(Range)d Fu(using)h(the)h(gi)n(v)o(en)f + Fq(Domain)2140 356 y Fu(objects.)396 757 y Fq(Range\(const)63 + b(DT1&)h(t1,)396 886 y(const)h(DT2&)g(t2,)g(const)f(DT3&)396 + 1016 y(t3,)h(const)g(DT4&)g(t4,)g(const)396 1145 y(DT5&)g(t5,)g(const)g + (DT6&)f(t6,)396 1275 y(const)h(DT7&)g(t7\))2140 757 y + Fu(creates)24 b(a)h Fq(Range)d Fu(using)h(the)h(gi)n(v)o(en)f + Fq(Domain)2140 886 y Fu(objects.)396 1416 y Fq(D)i Fu(indicates)f(the)h + Fq(Range)p Fu(')-5 b(s)23 b(dimension.)g Fq(DT1)p Fu(,)396 + 1546 y Fq(DT2)p Fu(,)h(.)15 b(.)g(.)40 b(are)25 b(template)f + (parameters.)396 1775 y(Constructors)41 b(for)g(multidimensional)d + Fq(Range)p Fu(s)h(are)j(the)f(same)g(as)g(multidimensional)d + Fq(In-)396 1904 y(terval)f Fu(constructors)h(e)o(xcept)g(the)o(y)g + (create)i(ranges,)e(not)g(interv)n(als.)g(See)h(T)-8 + b(able)39 b(5-6.)f Fq(D)h Fu(in-)396 2034 y(dicates)30 + b(the)h Fq(Range)p Fu(')-5 b(s)28 b(dimension.)h(The)h(\002rst)g(tw)o + (o)g(constructors)g(return)g(empty)-6 b(,)29 b(uninitialized)396 + 2163 y(ranges.)g(The)g(se)n(v)o(en)e(other)i(constructors)f(create)h + (an)g Fq(Range)e Fu(using)h Fq(Domain)f Fu(objects.)h(These)396 + 2293 y Fq(Domain)36 b Fu(objects,)g(ha)n(ving)h(types)f + Fq(DT1)p Fu(,)h(.)15 b(.)g(.)g(,)36 b Fq(DT7)p Fu(,)h(can)g(ha)n(v)o(e) + g(an)o(y)g(type)g(that)f(can)i(be)f(con-)396 2422 y(v)o(erted)27 + b(into)g(an)g(inte)o(ger)l(,)g(into)f(a)i(single-dimensional)d + Fq(Domain)h Fu(object)h(that)g(can)g(be)h(con)l(v)o(erted)396 + 2552 y(into)d(a)i(single-dimensional)c Fq(Range)p Fu(,)i(or)h(to)f(a)i + (multidimensional)22 b Fq(Domain)j Fu(object)g(that)h(itself)396 + 2681 y(can)k(be)f(con)l(v)o(erted)f(into)h(an)g Fq(Range)p + Fu(.)f(The)h(total)f(dimensionality)e(of)k(all)e(the)h(ar)n(guments')g + (types)396 2811 y(should)23 b(be)g(at)h(most)e Fq(D)p + Fu(.)h(One-dimensional)f Fq(Domain)g Fu(objects)h(that)g(can)h(be)g + (con)l(v)o(erted)f(into)f(one-)396 2941 y(dimensional)e + Fq(Range)p Fu(s)g(include)h Fq(Loc<1>)p Fu(s,)e Fq(Interval<1>)p + Fu(s,)g(and)i Fq(Range<1>)p Fu(s.)f(If)h(the)396 3070 + y(sum)h(of)h(the)f(objects')g(dimensions)f(is)h(less)g(than)h + Fq(D)p Fu(,)f(the)g(ranges)h(for)g(the)g(\002nal)f(dimensions)f(are)i + (un-)396 3200 y(speci\002ed.)j(See)g(the)f(last)g(paragraph)h(of)g + (Section)f(5.3.1.1)f(for)i(an)g(analogous)e(e)o(xample.)h(Note)g(that) + 396 3329 y(the)38 b Fq(Range<1>)e Fu(constructors)h(taking)g(tw)o(o)g + (and)h(three)g(parameters)g(treat)g(these)g(ar)n(guments)396 + 3459 y(dif)n(ferently)24 b(than)h(the)f(multidimensional)e + (constructors)i(do.)396 3863 y Fw(5.3.1.4.)36 b Fc(Grid)p + Fw(s)396 4052 y Fq(Loc)p Fu(s,)21 b Fq(Interval)p Fu(s,)e(and)j + Fq(Range)p Fu(s)e(all)h(ha)n(v)o(e)g(re)o(gularly)g(spaced)h(inte)o + (gral)e(v)n(alues)h(so)g(the)o(y)g(can)396 4182 y(be)26 + b(represented)f(using)g Fp(domain)f(triplets)p Fu(.)g(One-dimensional)f + Fq(Grid)i Fu(inte)o(gral)f(domains)g(contain)396 4311 + y(ascending)39 b(or)g(descending)f(sequences)h(of)g(inte)o(gers,)f + (with)g(no)h(\002x)o(ed)g(stride.)f(F)o(or)h(e)o(xample,)f(a)396 + 4441 y Fq(Grid<1>)26 b Fu(may)h(represent)h({-13,)f(1,)h(4,)f(5,)h + (34}.)f Fq(Grid<1>)e Fu(is)j(generalized)f(to)h(multidimen-)396 + 4570 y(sional)c Fq(Grid)p Fu(s)g(using)g(the)g(direct)h(product)f(of)h + Fq(Grid<1>)e(Domain)p Fu(s.)396 4750 y Fq(Grid)p Fu(s)36 + b(that)h(can)g(be)g(represented)h(using)e(domain)g(triplets)g(can)h(be) + h(constructed)e(using)g(tech-)396 4879 y(niques)d(similar)e(to)i(other) + g Fq(Domain)p Fu(s,)e(b)n(ut)i(irre)o(gularly)f(spaced)h(domains)f(can) + i(be)f(constructed)396 5009 y(using)24 b Fq(IndirectionList)p + Fu(s.)p Black 3784 5547 a Fp(92)p Black eop + %%Page: 93 93 + 93 92 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fr(T)-9 b(able)26 + b(5-7.)e(Declaring)h(One-Dimensional)g Fo(Grid)p Fr(s)396 + 288 y Fv(constructor)1191 b(result)396 429 y Fq(Grid<1>\(\))1150 + b Fu(creates)25 b(an)g(empty)-6 b(,)24 b(uninitialized)f(grid.)396 + 571 y Fq(Grid<1>\(const)63 b(DT1&)i(t1\))296 b Fu(creates)25 + b(a)g Fq(Grid<1>)p Fu(.)e(See)j(the)f(te)o(xt)f(for)h(an)2140 + 700 y(e)o(xplanation.)396 842 y Fq(Grid<1>\(const)63 + b(DT1&)i(t1,)396 972 y(const)g(DT2&)g(t2\))2140 842 y + Fu(creates)25 b(a)g Fq(Grid<1>)f Fu(from)g(the)h(interv)n(al)2140 + 972 y(speci\002ed)g(by)f(the)h(inte)o(gers)f(con)l(v)o(erted)g(from) + 2140 1101 y Fq(t1)g Fu(and)h Fq(t2)p Fu(.)396 1243 y + Fq(Grid<1>\(const)63 b(DT1&)i(t1,)396 1372 y(const)g(DT2&)g(t2,)g + (const)f(DT3&)396 1502 y(t3\))2140 1243 y Fu(creates)25 + b(a)g Fq(Grid<1>)f Fu(from)g(the)h(domain)2140 1372 y(triplet)f + (speci\002ed)h(by)f(the)h(inte)o(gers)f(con)l(v)o(erted)2140 + 1502 y(from)g Fq(t1)p Fu(,)h Fq(t2)p Fu(,)f(and)h Fq(t3)p + Fu(.)396 1643 y Fq(DT1)p Fu(,)f Fq(DT2)p Fu(,)g(and)h + Fq(DT3)f Fu(are)i(template)396 1773 y(parameters.)396 + 2002 y(T)-8 b(o)45 b(construct)f(a)i Fq(Grid<1>)d Fu(that)h(can)i(also) + e(be)h(represented)g(by)g(a)g(domain)f(triplet,)g(use)h(a)396 + 2132 y Fq(Grid<1>)36 b Fu(constructor)g(similar)g(to)h(those)g(for)g + Fq(Interval<1>)e Fu(and)i Fq(Range<1>)p Fu(.)e(See)396 + 2261 y(T)-8 b(able)25 b(5-7)g(and)g(the)f(te)o(xt)g(e)o(xplanations)f + (follo)n(wing)g(T)-8 b(able)25 b(5-5)f(or)h(T)-8 b(able)25 + b(5-3.)396 2440 y Fq(Grid<1>)p Fu(s)18 b(with)i(irre)o(gularly)f + (spaced)h(points)e(can)j(be)f(constructed)f(using)g Fq(Indirection-)396 + 2570 y(List)p Fu(s.)k(F)o(or)h(e)o(xample,)635 2879 + y Fn(IndirectionList)56 b(list\(4\);)635 3008 y(list\(0\))j(=)g + (2;)635 3138 y(list\(1\))g(=)g(5;)635 3267 y(list\(2\))g(=)g(6;)635 + 3397 y(list\(3\))g(=)g(9;)635 3526 y(Grid<1>)g(g\(list\);)396 + 3785 y Fu(constructs)21 b(an)h(empty)g Fq(IndirectionList)p + Fu(,)17 b(\002lls)k(it)h(with)f(ascending)g(v)n(alues,)g(and)396 + 3915 y(then)27 b(creates)g(a)h Fq(Grid<1>)d Fu(containing)h({2,)g(5,)h + (6,)g(9}.)f(When)h(creating)g(a)g(list,)f(its)g(size)h(must)f(be)396 + 4044 y(speci\002ed.)32 b(Subsequently)-6 b(,)29 b(its)i(v)n(alues)f + (can)i(be)f(assigned.)g Fq(IndirectionList)p Fu(s)c(can)32 + b(also)396 4174 y(be)25 b(initialized)f(using)f(one-dimensional)g + Fq(Array)p Fu(s:)695 4433 y Fn(Array<1,int,Brick>)56 + b(a1\(Interval<1>\(0,3\)\);)695 4562 y(a1\(0\))j(=)g(2;)h(a1\(1\))e(=)i + (5;)f(a1\(2\))g(=)g(6;)h(a1\(3\))e(=)i(9;)695 4692 y + (IndirectionList)55 b(il\(a1\);)695 4822 y(Grid<1>)j(g1\(il\);)p + Black 3784 5547 a Fp(93)p Black eop + %%Page: 94 94 + 94 93 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 180 a Fu(The)e Fq(Array)f + Fu(stores)g(the)g(inte)o(gral)g(points)f(to)i(include)f(in)g(the)h + Fq(Grid<1>)e Fu(and)h(is)h(used)f(to)g(cre-)396 310 y(ate)h(the)f + Fq(IndirectionList)p Fu(,)c(which)k(itself)f(is)h(used)g(to)g + (create)i(the)e Fq(Grid<1>)p Fu(.)396 439 y(Since)36 + b(the)g(points)e(are)i(inte)o(gers,)f(the)h Fq(Array)p + Fu(')-5 b(s)33 b(type)j(is)f Fq(int)p Fu(.)g(Either)g(a)h + Fq(Brick)e Fu(or)i Fq(Com-)396 569 y(pressibleBrick)22 + b(Engine)h Fu(should)h(be)h(used.)396 848 y Fr(T)-9 b(able)26 + b(5-8.)e(Declaring)h(Multidimensional)g Fo(Grid)p Fr(s)396 + 1085 y Fv(constructor)1191 b(result)396 1226 y Fq(Grid\(\))1150 + b Fu(creates)25 b(an)g(empty)-6 b(,)23 b(uninitialized)f + Fq(Grid)p Fu(,)i(to)g(be)2140 1356 y(assigned)g(a)h(v)n(alue)f(later)-5 + b(.)396 1497 y Fq(Grid\(const)63 b(DT1&)i(t1\))296 + b Fu(creates)25 b(a)g Fq(Grid)f Fu(using)g(the)h(gi)n(v)o(en)e + Fq(Domain)2140 1627 y Fu(object.)396 1769 y Fq(Grid\(const)63 + b(DT1&)i(t1,)396 1898 y(const)g(DT2&)g(t2\))2140 1769 + y Fu(creates)25 b(a)g Fq(Grid)f Fu(using)g(the)h(gi)n(v)o(en)e + Fq(Domain)2140 1898 y Fu(objects.)396 2040 y Fq(Grid\(const)63 + b(DT1&)i(t1,)396 2169 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 + 2299 y(t3\))2140 2040 y Fu(creates)25 b(a)g Fq(Grid)f + Fu(using)g(the)h(gi)n(v)o(en)e Fq(Domain)2140 2169 y + Fu(objects.)396 2440 y Fq(Grid\(const)63 b(DT1&)i(t1,)396 + 2570 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 2699 y(t3,)h(const)g(DT4&) + g(t4\))2140 2440 y Fu(creates)25 b(a)g Fq(Grid)f Fu(using)g(the)h(gi)n + (v)o(en)e Fq(Domain)2140 2570 y Fu(objects.)396 2841 + y Fq(Grid\(const)63 b(DT1&)i(t1,)396 2971 y(const)g(DT2&)g(t2,)g + (const)f(DT3&)396 3100 y(t3,)h(const)g(DT4&)g(t4,)g(const)396 + 3230 y(DT5&)g(t5\))2140 2841 y Fu(creates)25 b(a)g Fq(Grid)f + Fu(using)g(the)h(gi)n(v)o(en)e Fq(Domain)2140 2971 y + Fu(objects.)396 3371 y Fq(Grid\(const)63 b(DT1&)i(t1,)396 + 3501 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 3630 y(t3,)h(const)g(DT4&) + g(t4,)g(const)396 3760 y(DT5&)g(t5,)g(const)g(DT6&)f(t6\))2140 + 3371 y Fu(creates)25 b(a)g Fq(Grid)f Fu(using)g(the)h(gi)n(v)o(en)e + Fq(Domain)2140 3501 y Fu(objects.)396 3902 y Fq(Grid\(const)63 + b(DT1&)i(t1,)396 4031 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 + 4161 y(t3,)h(const)g(DT4&)g(t4,)g(const)396 4290 y(DT5&)g(t5,)g(const)g + (DT6&)f(t6,)396 4420 y(const)h(DT7&)g(t7\))2140 3902 + y Fu(creates)25 b(a)g Fq(Grid)f Fu(using)g(the)h(gi)n(v)o(en)e + Fq(Domain)2140 4031 y Fu(objects.)396 4561 y Fq(D)i Fu(indicates)f(the) + h Fq(Grid)p Fu(')-5 b(s)23 b(dimension.)g Fq(DT1)p Fu(,)396 + 4691 y Fq(DT2)p Fu(,)h(.)15 b(.)g(.)40 b(are)25 b(template)f + (parameters.)396 4920 y(Constructors)i(for)h(multidimensional)c + Fq(Grid)p Fu(s)i(are)i(the)g(same)f(as)h(multidimensional)c + Fq(Inter-)396 5049 y(val)c Fu(constructors)g(e)o(xcept)g(the)o(y)f + (create)j Fq(Grid)p Fu(s,)d(not)h(interv)n(als.)f(See)j(T)-8 + b(able)19 b(5-8.)g Fq(D)h Fu(indicates)e(the)p Black + 3784 5547 a Fp(94)p Black eop + %%Page: 95 95 + 95 94 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fq(Grid)p Fu(')-5 + b(s)30 b(dimension.)g(The)h(\002rst)h(constructor)e(returns)i(empty)-6 + b(,)30 b(uninitialized)f(grids.)i(The)g(se)n(v)o(en)396 + 180 y(other)j(constructors)g(create)h(an)f Fq(Grid)f + Fu(using)h Fq(Domain)f Fu(objects.)g(These)h Fq(Domain)f + Fu(objects,)396 310 y(ha)n(ving)19 b(types)g Fq(DT1)p + Fu(,)g(.)c(.)g(.)g(,)k Fq(DT7)p Fu(,)f(can)i(ha)n(v)o(e)f(an)o(y)g + (type)g(that)g(can)h(be)g(con)l(v)o(erted)e(into)h(an)h(inte)o(ger)l(,) + e(into)396 439 y(a)32 b(single-dimensional)e Fq(Domain)g + Fu(object)i(that)f(can)h(be)g(con)l(v)o(erted)g(into)f(a)h + (single-dimensional)396 569 y Fq(Grid)p Fu(,)h(or)h(to)g(a)g + (multidimensional)c Fq(Domain)j Fu(object)g(that)g(itself)h(can)g(be)g + (con)l(v)o(erted)f(into)g(an)396 698 y Fq(Grid)p Fu(.)28 + b(The)g(total)g(dimensionality)d(of)k(all)f(the)g(ar)n(guments')g + (types)g(should)f(be)h(at)h(most)e Fq(D)p Fu(.)h(One-)396 + 828 y(dimensional)j Fq(Domain)f Fu(objects)i(that)f(can)i(be)f(con)l(v) + o(erted)g(into)f(one-dimensional)f Fq(Grid)p Fu(s)i(in-)396 + 957 y(clude)21 b Fq(Loc<1>)p Fu(s,)e Fq(Interval<1>)p + Fu(s,)f Fq(Range<1>)p Fu(s,)h(and)i Fq(Grid<1>)p Fu(s.)d(If)k(the)e + (sum)g(of)h(the)396 1087 y(objects')g(dimensions)f(is)h(less)h(than)f + Fq(D)p Fu(,)h(the)f(grids)g(for)h(the)g(\002nal)g(dimensions)d(are)k + (unspeci\002ed.)e(See)396 1217 y(the)g(last)f(paragraph)i(of)e(Section) + h(5.3.1.1)f(for)h(an)g(analogous)f(e)o(xample.)g(Note)h(that)f(the)h + Fq(Grid<1>)396 1346 y Fu(constructors)28 b(taking)g(tw)o(o)g(and)h + (three)f(parameters)h(treat)g(these)f(ar)n(guments)g(dif)n(ferently)g + (than)g(the)396 1476 y(multidimensional)22 b(constructors)i(do.)-2 + 2019 y Fk(5.3.2.)39 b(Using)f Fh(Domain)p Fk(s)396 2220 + y Fu(Since)e(an)g Fq(Array)f Fu(can)h(be)f(queried)h(for)g(its)f + (domain,)f(we)i(brie\003y)g(describe)g(some)f Fq(Domain)396 + 2349 y Fu(operations.)20 b(A)h(fuller)g(description,)f(including)g + (arithmetic)g(operations,)g(occurs)h(in)g(Chapter)h(8.)f(As)396 + 2479 y(we)29 b(mentioned)d(in)i(Section)g(5.3.1,)f(the)h + Ft(Pooma/Domains.h)k Fu(header)d(\002le)f(declares)h + Fq(Domain)p Fu(s,)396 2609 y(b)n(ut)f(most)f(storage)i(container)f + (header)h(\002les)f(automatically)f(include)h Ft(Pooma/Domains.h)k + Fu(so)d(no)396 2738 y(e)o(xplicit)24 b(inclusion)f(is)h(usually)g + (necessary)-6 b(.)396 3017 y Fr(T)d(able)26 b(5-9.)e(Some)i + Fo(Domain)d Fr(Accessors)396 3236 y Fo(Domain)j Fv(member)i(function) + 513 b(result)396 3377 y Fu(Multidimensional)22 b Fq(Domain)h + Fu(Accessors)p 396 3405 3487 4 v 396 3405 V 396 3522 + a Fq(long)65 b(size\(\))1019 b Fu(returns)24 b(the)h(total)f(number)g + (of)h(indices.)396 3664 y Fq(bool)65 b(empty\(\))953 + b Fu(returns)24 b Fq(true)g Fu(if)h(and)g(only)f(if)h(the)f + Fq(Domain)2140 3793 y Fu(has)g(no)h(indices.)396 3935 + y Fq(D<1>)65 b(operator[]\(int)396 4065 y(dimension\))2140 + 3935 y Fu(returns)24 b(the)h(one-dimensional)e Fq(Domain)g + Fu(for)2140 4065 y(the)h(speci\002ed)h(dimension.)e(The)i(return)g + (type)f(is)2140 4194 y(a)h(one-dimensional)e(v)o(ersion)h(of)g(the)2140 + 4324 y Fq(Domain)p Fu(.)396 4465 y(One-dimensional)f + Fq(Domain)h Fu(Accessors)p 396 4493 V 396 4493 V 396 + 4610 a Fq(long)65 b(length\(\))887 b Fu(returns)24 b(the)h(number)f(of) + h(indices.)396 4752 y Fq(int)65 b(first\(\))1019 b Fu(returns)24 + b(the)h(be)o(ginning)e(of)i(the)f(domain.)396 4894 y + Fq(int)65 b(last\(\))1085 b Fu(returns)24 b(the)h(ending)f(of)h(the)g + (domain.)396 5035 y Fq(int)65 b(min\(\))1151 b Fu(returns)24 + b(the)h(minimum)d(inde)o(x)i(in)h(the)f(domain.)p Black + 3784 5547 a Fp(95)p Black eop + %%Page: 96 96 + 96 95 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 85 a Fo(Domain)26 b Fv(member)i + (function)513 b(result)396 226 y Fq(int)65 b(max\(\))1151 + b Fu(returns)24 b(the)h(maximum)e(inde)o(x)h(in)g(the)h(domain.)396 + 368 y Fq(D<1>::iterator)63 b(begin\(\))295 b Fu(returns)24 + b(a)h(forw)o(ard)h(iterator)e(pointing)f(to)i(the)2140 + 497 y(be)o(ginning)e(domain)g(inde)o(x.)396 639 y Fq(D<1>::iterator)63 + b(end\(\))427 b Fu(returns)24 b(a)h(forw)o(ard)h(iterator)e(pointing)f + (to)i(the)2140 769 y(ending)f(domain)g(inde)o(x.)396 + 910 y Fq(D)h Fu(abbre)n(viates)f(a)h(particular)g Fq(Domain)e + Fu(type,)396 1040 y(e.g.,)i Fq(Interval)e Fu(or)i Fq(Grid)p + Fu(.)f(Other)396 1169 y Fq(Domain)g Fu(accessors)h(are)g(described)g + (in)396 1299 y(Chapter)h(8.)396 1528 y Fq(Domain)k Fu(member)g + (functions)f(are)j(listed)d(in)i(T)-8 b(able)30 b(5-9.)h(Functions)f + (applicable)g(to)g(both)g(one-)396 1658 y(dimensional)f(and)i + (multidimensional)c Fq(Domain)p Fu(s)i(are)j(listed)e(before)h + (functions)f(that)g(only)g(ap-)396 1787 y(plicable)36 + b(to)f(one-dimensional)f Fq(Domain)p Fu(s.)g(The)i Fq(size)e + Fu(member)i(function)f(yields)f(the)i(total)396 1917 + y(number)i(of)g(indices)f(in)h(a)g(gi)n(v)o(en)e Fq(Domain)p + Fu(.)h(If)h(and)g(only)f(if)h(this)f(number)h(is)f(zero,)h + Fq(empty)396 2046 y Fu(will)d(yield)h Fq(true)p Fu(.)f(A)g + (multidimensional)e Fq(domain)h Fu(is)h(the)h(direct)g(product)f(of) + h(D)g(one-)396 2176 y(dimensional)19 b Fq(Domain)p Fu(s.)g(The)h + Fq(operator[]\(int)62 b(dimension\))18 b Fu(operator)j(e)o(xtracts)396 + 2305 y(the)33 b(one-dimensional)e Fq(Domain)g Fu(corresponding)h(to)g + (its)g(parameter)-5 b(.)33 b(F)o(or)g(e)o(xample,)e(the)i(three)396 + 2435 y(one-dimensional)18 b Fq(Range<1>)f(Domain)p Fu(s)h(can)i(be)f(e) + o(xtracted)g(from)g(a)h Fq(Range<3>)e Fu(object)g Fq(r)396 + 2564 y Fu(using)24 b Fq(r[0])p Fu(,)g Fq(r[1])p Fu(,)g(and)g + Fq(r[2])p Fu(.)396 2743 y Fq(Domain)e Fu(accessors)i(applicable)f(only) + f(to)h(one-dimensional)f Fq(Domain)p Fu(s)f(are)j(listed)f(in)g(the)g + (sec-)396 2873 y(ond)33 b(half)f(of)h(T)-8 b(able)33 + b(5-9.)f(The)h Fq(length)f Fu(member)g(function,)g(analogous)g(to)g + (the)h(multidimen-)396 3002 y(sional)23 b Fq(size)h Fu(function,)f + (returns)h(the)g(number)f(of)h(indices)g(in)g(the)g Fq(Domain)p + Fu(.)e(The)i Fq(first)f Fu(and)396 3132 y Fq(last)29 + b Fu(member)h(functions)f(return)h(the)f(domain')-5 b(s)29 + b(be)o(ginning)f(and)i(ending)f(indices.)g(The)h Fq(be-)396 + 3262 y(gin)i Fu(and)h Fq(end)e Fu(member)h(functions)g(return)g(forw)o + (ard)h(iterators)f(pointing)f(to)h(these)g(respecti)n(v)o(e)396 + 3391 y(locations.)27 b(The)o(y)h(ha)n(v)o(e)g(type)f + Fq(D<1>::iterator)p Fu(,)e(where)k Fq(D)f Fu(abbre)n(viates)f(the)h + Fq(Domain)p Fu(')-5 b(s)396 3521 y(type,)22 b(e.g.,)g + Fq(Interval)e Fu(or)i Fq(Grid)p Fu(.)f(The)h Fq(min)f + Fu(and)h Fq(max)f Fu(member)g(functions)g(return)h(the)g(min-)396 + 3650 y(imum)34 b(and)i(maximum)d(indices)i(in)g(the)g + Fq(Domain)g Fu(object,)f(respecti)n(v)o(ely)-6 b(.)34 + b(F)o(or)h Fq(Loc<1>)f Fu(and)396 3780 y Fq(Interval<1>)p + Fu(,)21 b(these)j(yield)f(the)g(same)h(v)n(alues)f(as)g + Fq(first)g Fu(and)g Fq(last)p Fu(,)g(b)n(ut)g Fq(Range<1>)396 + 3909 y Fu(and)28 b Fq(Grid<1>)e Fu(can)j(ha)n(v)o(e)e(their)h + (numerically)f(lar)n(gest)h(inde)o(x)f(at)h(the)f(be)o(ginning)f(of)i + (their)g Fq(Do-)396 4039 y(main)p Fu(s.)-2 4641 y Fx(5.4.)47 + b(Dec)m(laring)g Fg(Array)p Fx(s)396 4856 y Fu(A)26 b(POOMA)f + Fq(Array)g Fu(maps)g Fq(Domain)f Fu(indices)h(to)g(v)n(alues.)g(In)g + (this)g(section,)g(we)h(describe)f(ho)n(w)396 4986 y(to)37 + b(declare)h Fq(Array)p Fu(s.)e(In)h(the)g(ne)o(xt)f(section,)h(we)g(e)o + (xplain)f(ho)n(w)h(to)g(access)g(indi)n(vidual)e(v)n(alues)396 + 5115 y(stored)25 b(within)e(an)i Fq(Array)f Fu(and)h(ho)n(w)f(to)g(cop) + o(y)h Fq(Array)p Fu(s.)p Black 3781 5547 a Fp(96)p Black + eop + %%Page: 97 97 + 97 96 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fq(Array)26 b Fu(v)n(alues)g(need)h + (not)f(just)g(be)h(stored)f(v)n(alues,)g(as)h(C)g(arrays)g(ha)n(v)o(e.) + g(The)g(v)n(alues)f(can)h(also)f(be)396 180 y(computed)h(dynamically)f + (by)h(the)g(engine)g(associated)g(with)g(the)g Fq(Array)p + Fu(.)f(W)-8 b(e)28 b(defer)g(discussion)396 310 y(of)21 + b(computing)f(v)n(alues)g(to)h(the)f(ne)o(xt)h(chapter)g(discussing)e + (engines)i(\(Chapter)h(6\).)f(Therefore,)g(when)396 439 + y(we)26 b(mention)e(\223the)h(v)n(alues)f(stored)h(in)g(an)g + Fq(Array)p Fu(\224,)g(we)g(implicitly)e(mean)i(\223the)g(v)n(alues)g + (stored)g(in)396 569 y(or)g(computed)f(by)h(the)f Fq(Array)p + Fu(\224.)396 748 y(Declaring)35 b(an)h Fq(Array)e Fu(requires)h(four)g + (ar)n(guments:)f(the)h(domain')-5 b(s)34 b(dimensionality)-6 + b(,)32 b(the)j(type)396 878 y(of)g(v)n(alues)f(stored)g(or)h(computed,) + e(a)i(speci\002cation)f(ho)n(w)g(the)g(v)n(alues)g(are)i(stored)e(or)g + (computed,)396 1007 y(and)29 b(a)g Fq(Domain)p Fu(.)e(The)h(\002rst)h + (three)g(ar)n(guments)f(are)h(template)f(parameters)h(since)f(fe)n(w)g + (scienti\002c)396 1137 y(programs)c(need)h(to)f(\(and)g(no)g(POOMA)h + (programs)f(can\))h(change)f(these)g(v)n(alues)g(while)g(a)h(program) + 396 1266 y(e)o(x)o(ecutes.)f(F)o(or)h(e)o(xample,)e(an)i + Fq(Array)f Fu(cannot)g(change)h(the)f(type)h(of)f(the)h(v)n(alues)f(it) + g(stores,)g(b)n(ut)g(an)396 1396 y Fq(Array)p Fu(')-5 + b(s)24 b(v)n(alues)h(can)h(be)f(copied)h(into)e(another)i + Fq(Array)e Fu(ha)n(ving)h(the)g(desired)h(type.)f(Although)396 + 1525 y(scienti\002c)k(programs)g(do)g(not)g(frequently)g(change)h(an)f + (array')-5 b(s)30 b(domain,)e(the)o(y)h(do)g(frequently)g(re-)396 + 1655 y(quest)f(a)g(subset)f(of)h(the)g(array')-5 b(s)28 + b(v)n(alues,)f(i.e.,)h(a)g Fp(vie)o(w)p Fu(.)g(The)g(subset)f(is)g + (speci\002ed)i(via)e(a)i Fq(Domain)396 1784 y Fu(so)c(it)f(is)g(a)i + (run-time)e(v)n(alue.)g(V)-6 b(ie)n(ws)24 b(are)h(presented)g(in)f + (Chapter)i(8.)396 1964 y(An)35 b Fq(Array)p Fu(')-5 b(s)34 + b(\002rst)i(template)e(parameter)i(speci\002es)f(its)g(dimensionality) + -6 b(.)32 b(This)j(positi)n(v)o(e)e(inte-)396 2093 y(ger)25 + b Fq(D)f Fu(speci\002es)g(its)f(rank)i(and)f(has)g(the)g(same)g(v)n + (alue)f(as)i(its)e(domain')-5 b(s)23 b(dimensionality)-6 + b(.)20 b(Theoreti-)396 2223 y(cally)-6 b(,)21 b(an)i + Fq(Array)d Fu(can)j(ha)n(v)o(e)e(an)o(y)h(positi)n(v)o(e)d(inte)o(ger)l + (,)j(b)n(ut)f(the)h(POOMA)g(code)g(currently)g(supports)396 + 2352 y(a)g(dimensionality)c(of)j(at)g(most)f(se)n(v)o(en.)g(F)o(or)g + (almost)g(all)h(scienti\002c)g(codes,)f(a)i(dimension)d(of)i(three)g + (or)396 2482 y(four)k(is)g(suf)n(\002cient,)f(b)n(ut)g(the)h(POOMA)f + (code)h(can)g(be)g(e)o(xtended)f(to)h(support)f(higher)g(dimensions.) + 396 2661 y(An)d Fq(Array)p Fu(')-5 b(s)18 b(second)i(template)g + (parameter)h(speci\002es)f(the)h(type)f(of)g(its)g(stored)g(or)g + (computed)g(v)n(al-)396 2791 y(ues.)26 b(Common)e(v)n(alue)i(types)f + (include)g Fq(int)p Fu(,)g Fq(double)p Fu(,)f Fq(complex)p + Fu(,)g(and)h Fq(Vector)p Fu(,)g(b)n(ut)g(an)o(y)396 2920 + y(type)30 b(is)f(permissible.)f(F)o(or)i(e)o(xample,)f(an)h + Fq(Array)p Fu(')-5 b(s)28 b(v)n(alues)h(might)g(be)h(matrices)f(or)h(e) + n(v)o(en)f(other)396 3050 y Fq(Array)p Fu(s.)35 b(The)h(parameter')-5 + b(s)36 b(def)o(ault)g(v)n(alue)f(is)h(usually)f Fq(double)p + Fu(,)f(b)n(ut)i(it)f(may)h(be)g(changed)396 3179 y(when)25 + b(the)g(POOMA)f(T)-8 b(oolkit)24 b(is)g(con\002gured.)396 + 3358 y(An)31 b Fq(Array)p Fu(')-5 b(s)29 b(third)i(parameter)g + (speci\002es)g(ho)n(w)f(its)g(data)h(is)g(stored)f(or)h(computed)f(by)h + (an)g Fq(En-)396 3488 y(gine)36 b Fu(and)h(its)g(v)n(alues)f(accessed.) + h(The)g(ar)n(gument)g(is)f(a)i(tag)f(indicating)e(a)j(particular)f + (type)f(of)396 3618 y Fq(Engine)p Fu(.)e(Permissible)g(tags)g(include)h + Fq(Brick)p Fu(,)e Fq(CompressibleBrick)p Fu(,)e(and)k + Fq(Con-)396 3747 y(stantFunction)p Fu(.)c(The)k Fq(Brick)e + Fu(tag)h(indicates)f(all)h Fq(Array)f Fu(v)n(alues)h(will)f(be)h(e)o + (xplicitly)396 3877 y(stored,)20 b(just)g(as)g(b)n(uilt-in)f(C)i + (arrays)g(do.)f(If)h(an)g Fq(Array)e Fu(frequently)h(stores)g(e)o + (xactly)g(the)h(same)f(v)n(alue)396 4006 y(in)29 b(e)n(v)o(ery)f + (position,)f(a)j Fq(CompressibleBrick)25 b(Engine)p Fu(,)i(which)i + (reduces)g(its)f(space)i(re-)396 4136 y(quirements)e(to)h(a)g(constant) + f(whene)n(v)o(er)h(all)g(its)f(v)n(alues)g(are)i(the)f(same,)g(is)f + (appropriate.)h(A)g Fq(Con-)396 4265 y(stantFunction)21 + b(Engine)h Fu(returns)i(the)f(same)h(v)n(alue)f(for)h(all)f(indices.)g + (Some)h Fq(Engine)p Fu(s)396 4395 y(compute)35 b(v)n(alues,)g(e.g.,)h + (applying)f(a)h(function)f(to)g(e)n(v)o(ery)g(v)n(alue)h(in)f(another)h + Fq(Engine)p Fu(.)e(These)396 4524 y Fq(Engine)p Fu(s)28 + b(are)i(discussed)e(in)h(Chapter)h(6.)f(T)-8 b(o)29 b(a)n(v)n(oid)g + (being)g(v)o(erbose)g(in)g(the)g(rest)g(of)h(this)e(chap-)396 + 4654 y(ter)l(,)h(we)g(abbre)n(viate)f(\223store)h(or)f(compute)g(v)n + (alues\224)g(as)h(\223store)g(v)n(alues\224.)e(The)i(engine)f + (parameter')-5 b(s)396 4783 y(def)o(ault)33 b(v)n(alue)f(is)h(usually)f + Fq(Brick)p Fu(,)f(b)n(ut)i(it)f(may)h(be)g(changed)g(when)g(the)f + (POOMA)h(T)-8 b(oolkit)32 b(is)396 4913 y(con\002gured.)396 + 5092 y(Ev)o(en)g(though)f(e)n(v)o(ery)h Fq(Array)f Fu(container)h(has)h + (an)f(engine)g(to)g(store)g(its)g(v)n(alues)g(and)g(permit)g(ac-)p + Black 3780 5547 a Fp(97)p Black eop + %%Page: 98 98 + 98 97 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fu(cess)g(to)f(indi)n(vidual)e(v)n + (alues,)i(the)g(concept)g(of)h(an)f Fq(Array)g Fu(is)g(conceptually)f + (separate)i(from)f(the)396 180 y(concept)23 b(of)g(an)g(engine.)f(An)h + (engine')-5 b(s)22 b(role)h(is)f(lo)n(w-le)n(v)o(el,)e(storing)i(v)n + (alues)g(and)h(permitting)e(access)396 310 y(to)26 b(indi)n(vidual)f(v) + n(alues.)g(As)i(we)g(indicated)f(abo)o(v)o(e,)f(the)i(storage)f(can)h + (be)g(optimized)e(to)h(\002t)h(speci\002c)396 439 y(situations)33 + b(such)h(as)g(fe)n(w)g(nonzero)g(v)n(alues)g(and)g(computing)e(v)n + (alues)i(using)f(a)i(function)e(applied)396 569 y(to)26 + b(another)f(engine')-5 b(s)25 b(v)n(alues.)g(An)g Fq(Array)p + Fu(')-5 b(s)24 b(role)i(is)f(high-le)n(v)o(el,)f(supporting)g(access)i + (to)f(groups)396 698 y(of)36 b(v)n(alues.)f Fq(Array)p + Fu(s)g(can)h(be)g(used)f(in)h(data-parallel)g(e)o(xpressions,)e(e.g.,)h + (adding)h(all)f(the)h(v)n(al-)396 828 y(ues)31 b(in)g(one)g + Fq(Array)e Fu(to)i(all)g(the)f(v)n(alues)g(in)h(another)-5 + b(.)30 b(\(See)i(Chapter)g(7)f(for)g(more)g(information.\))396 + 957 y(Subsets)25 b(of)h Fq(Array)e Fu(v)n(alues,)g(frequently)h(used)g + (in)g(data-parallel)h(statements,)e(can)i(be)f(obtained.)396 + 1087 y(\(See)32 b(Chapter)e(8)g(for)h(more)e(information.\))g(Ev)o(en)h + (though)f(engines)g(and)h Fq(Array)p Fu(s)f(are)i(concep-)396 + 1217 y(tually)i(separate,)g(higher)n(-le)n(v)o(el)f Fq(Array)p + Fu(s)g(pro)o(vide)g(access)i(to)f(lo)n(wer)n(-le)n(v)o(el)f + Fq(Engine)p Fu(s.)f(Users)396 1346 y(usually)36 b(ha)n(v)o(e)h(an)h + Fq(Array)e Fu(create)i(its)f Fq(Engine)p Fu(\(s\),)f(rarely)h(e)o + (xplicitly)f(creating)h Fq(Engine)p Fu(s)396 1476 y(themselv)o(es.)22 + b(Also,)h Fq(Array)p Fu(s)f(support)g(access)i(to)f(indi)n(vidual)e(v)n + (alues.)i(In)g(short,)g(POOMA)g(users)396 1605 y(use)34 + b Fq(Array)p Fu(s,)f(only)g(dealing)h(with)f(ho)n(w)g(the)o(y)g(are)i + (implemented)e(\(engines\))h(when)f(declaring)396 1735 + y(them.)24 b(F)o(or)h(a)g(description)f(of)h Fq(Engine)p + Fu(s,)e(see)i(Chapter)g(6.)396 1914 y(An)i Fq(Array)p + Fu(')-5 b(s)25 b(one)h(run-time)g(ar)n(gument)g(is)g(its)g(domain.)g + (The)g(domain)g(speci\002es)h(its)f(e)o(xtent)f(and)396 + 2043 y(consequently)38 b(ho)n(w)f(man)o(y)h(v)n(alues)g(it)g(can)g + (return.)h(All)f(the)g(pro)o(vided)g Fq(Domain)f Fu(objects)h(are)396 + 2173 y(combined)28 b(to)h(yield)f(an)h Fq(Interval)p + Fu(,)d(where)j(D)g(matches)f(the)h Fq(Array)p Fu(')-5 + b(s)27 b(\002rst)i(template)396 2302 y(parameter)-5 b(.)23 + b(Since)h(an)f Fq(Interval)f Fu(domain)g(with)h(its)f(unit)g(strides)h + (is)g(used,)f(there)i(are)g(no)f(unac-)396 2432 y(cessed)h + (\223gaps\224)f(within)f(the)h(domain,)f(w)o(asting)g(storage)h(space.) + h(T)-8 b(o)23 b(use)g(other)g(domains)f(to)h(access)396 + 2561 y(an)31 b Fq(Array)p Fu(,)f(\002rst)h(create)g(it)g(using)e(an)i + Fq(Interval)e Fu(domain)h(and)h(then)f(tak)o(e)h(a)g(vie)n(w)f(of)h + (it,)f(as)396 2691 y(described)37 b(in)f(Chapter)h(8.)g(As)f(we)h + (mentioned)e(abo)o(v)o(e,)h(the)g(current)h(POOMA)g(code)g(supports)396 + 2821 y(up)e(to)h(se)n(v)o(en)e(dimensions)f(so)j(at)f(most)f(se)n(v)o + (en)h Fq(Domain)f Fu(objects)h(can)h(be)f(pro)o(vided.)g(If)g(more)396 + 2950 y(dimensions)30 b(are)j(required,)g(the)f(POOMA)g(code)g(can)h(be) + f(e)o(xtended)g(to)f(the)h(desired)h(number)e(of)396 + 3080 y(dimensions.)396 3259 y Fq(Array)e Fu(constructors)h(are)h + (listed)e(in)h(T)-8 b(able)30 b(5-10.)g(An)g Fq(Array)p + Fu(')-5 b(s)28 b(three)j(template)e(parameters)396 3388 + y(for)i(dimensionality)-6 b(,)28 b(v)n(alue)i(type,)g(and)h(engine)f + (type)g(are)i(abbre)n(viated)e Fq(D)p Fu(,)g Fq(T)p Fu(,)h(and)f + Fq(E)p Fu(.)h(T)-7 b(emplate)396 3518 y(parameters)31 + b(for)f(domain)f(types)g(are)i(named)f Fq(DT1)p Fu(,)g(.)15 + b(.)g(.)g(,)29 b Fq(DT7)p Fu(.)h(The)g(\002rst)g(constructor)l(,)f + (with)h(no)396 3647 y(domain)k(ar)n(guments,)h(creates)h(an)f(empty)-6 + b(,)34 b(uninitialized)f Fq(Array)h Fu(for)i(which)f(a)g(domain)f(must) + 396 3777 y(be)41 b(speci\002ed)g(before)h(it)e(is)g(used.)h(Specify)g + (the)g(array')-5 b(s)41 b(domain)f(using)g(its)g Fq(initialize)396 + 3906 y Fu(function.)28 b(The)g(ne)o(xt)g(se)n(v)o(en)g(constructors)f + (combine)h(their)g(domain)g(ar)n(guments)g(to)g(compute)f(the)396 + 4036 y(resulting)40 b Fq(Array)p Fu(')-5 b(s)40 b(domain.)g(These)i + (are)g(combined)e(in)h(the)g(same)g(w)o(ay)h(that)f(multidimen-)396 + 4165 y(sional)33 b Fq(Interval)p Fu(s)f(are)i(constructed.)f(\(See)i(T) + -8 b(able)33 b(5-4)h(and)g(the)f(follo)n(wing)f(te)o(xt.\))h(The)g(do-) + 396 4295 y(main)j(objects,)f(ha)n(ving)g(types)h Fq(DT1)p + Fu(,)f(.)15 b(.)g(.)g(,)36 b Fq(DT7)p Fu(,)f(can)i(ha)n(v)o(e)e(an)o(y) + h(type)g(that)f(can)i(be)f(con)l(v)o(erted)396 4424 y(into)e(an)i(inte) + o(ger)l(,)e(into)g(a)i(single-dimensional)c Fq(Domain)i + Fu(object)g(that)h(can)g(be)h(con)l(v)o(erted)e(into)396 + 4554 y(a)i(single-dimensional)d Fq(Interval)p Fu(,)g(or)j(to)f(a)h + (multidimensional)c Fq(Domain)i Fu(object)h(that)g(it-)396 + 4684 y(self)j(can)f(be)h(con)l(v)o(erted)e(into)h(an)g + Fq(Interval)p Fu(.)f(The)h(total)g(dimensionality)d(of)k(all)f(the)g + (ar)n(gu-)396 4813 y(ments')30 b(types)f(should)g Fp(equal)g + Fq(D)p Fu(,)h(unlik)o(e)f Fq(Interval)f Fu(construction)h(which)g + (permits)g(total)h(di-)396 4943 y(mensionality)35 b(less)h(than)g(or)h + (equal)f(to)g Fq(D)p Fu(.)g(One-dimensional)f Fq(Domain)g + Fu(objects)h(that)g(can)h(be)396 5072 y(con)l(v)o(erted)29 + b(into)g(one-dimensional)e Fq(Interval)p Fu(s)h(include)h + Fq(Loc<1>)p Fu(s,)e Fq(Interval<1>)p Fu(s,)p Black 3784 + 5547 a Fp(98)p Black eop + %%Page: 99 99 + 99 98 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fu(and)26 b Fq(Range<1>)p + Fu(s)d(with)i(unit)g(strides.)g(T)-8 b(o)25 b(initialize)f(all)i(of)f + (an)h Fq(Array)p Fu(')-5 b(s)24 b(v)n(alues)h(to)g(a)h(speci\002c)396 + 180 y(v)n(alue,)d(use)h(one)g(of)f(the)h(\002nal)g(se)n(v)o(en)f + (constructors,)f(each)j(taking)e(a)h(particular)f(v)n(alue,)g(wrapped)h + (as)396 310 y(a)g Fq(ModelElement)p Fu(.)c(These)i(constructors)g(use)h + (the)g(gi)n(v)o(en)e(domain)h(objects)h(the)f(same)h(w)o(ay)g(as)396 + 439 y(the)h(preceding)g(constructors)f(b)n(ut)g(assign)g + Fq(model)g Fu(to)g(e)n(v)o(ery)g Fq(Array)g Fu(v)n(alue.)g + Fq(model)p Fu(')-5 b(s)22 b(type)i(is)396 569 y Fq(ModelElement)p + Fu(,)e(rather)27 b(than)e Fq(T)p Fu(,)h(to)f(dif)n(ferentiate)h(it)f + (from)h(an)g Fq(int)p Fu(,)f(which)g(can)i(also)396 698 + y(be)34 b(used)f(to)f(specify)h(a)h(domain)e(object.)h + Fq(ModelElement)d Fu(just)j(stores)f(an)i(element)f(of)g(an)o(y)396 + 828 y(type)25 b Fq(T)p Fu(,)f(which)h(must)e(match)i(the)f + Fq(Array)p Fu(')-5 b(s)24 b(v)n(alue)g(type)g Fq(T)p + Fu(.)396 1107 y Fr(T)-9 b(able)26 b(5-10.)e(Declaring)h + Fo(Array)p Fr(s)396 1344 y Fo(Array)i Fv(dec)n(laration)858 + b(result)396 1485 y Fq(Array\(\))820 b Fu(creates)25 + b(an)g(empty)-6 b(,)24 b(uninitialized)f Fq(Array)2140 + 1615 y Fu(which)h(must)g(be)h Fq(initialize)p Fu(\(\)d)d(before)2140 + 1744 y(use.)396 1886 y Fq(Array\(const)62 b(DT1&)396 + 2015 y(t1\))2140 1886 y Fu(creates)25 b(an)g Fq(Array)f + Fu(using)g(the)g(gi)n(v)o(en)2140 2015 y Fq(Domain)f + Fu(object)i(or)f(inte)o(ger)-5 b(.)396 2157 y Fq(Array\(const)62 + b(DT1&)396 2287 y(t1,)j(const)g(DT2&)g(t2\))2140 2157 + y Fu(creates)25 b(an)g Fq(Array)f Fu(using)g(the)g(gi)n(v)o(en)2140 + 2287 y Fq(Domain)f Fu(objects)h(and)h(inte)o(gers.)396 + 2428 y Fq(Array\(const)62 b(DT1&)396 2558 y(t1,)j(const)g(DT2&)g + (t2,)g(const)396 2687 y(DT3&)g(t3\))2140 2428 y Fu(creates)25 + b(an)g Fq(Array)f Fu(using)g(the)g(gi)n(v)o(en)2140 2558 + y Fq(Domain)f Fu(objects)h(and)h(inte)o(gers.)396 2829 + y Fq(Array\(const)62 b(DT1&)396 2958 y(t1,)j(const)g(DT2&)g(t2,) + g(const)396 3088 y(DT3&)g(t3,)g(const)g(DT4&)f(t4\))2140 + 2829 y Fu(creates)25 b(an)g Fq(Array)f Fu(using)g(the)g(gi)n(v)o(en) + 2140 2958 y Fq(Domain)f Fu(objects)h(and)h(inte)o(gers.)396 + 3230 y Fq(Array\(const)62 b(DT1&)396 3359 y(t1,)j(const)g(DT2&)g + (t2,)g(const)396 3489 y(DT3&)g(t3,)g(const)g(DT4&)f(t4,)396 + 3618 y(const)h(DT5&)g(t5\))2140 3230 y Fu(creates)25 + b(an)g Fq(Array)f Fu(using)g(the)g(gi)n(v)o(en)2140 3359 + y Fq(Domain)f Fu(objects)h(and)h(inte)o(gers.)396 3760 + y Fq(Array\(const)62 b(DT1&)396 3889 y(t1,)j(const)g(DT2&)g(t2,) + g(const)396 4019 y(DT3&)g(t3,)g(const)g(DT4&)f(t4,)396 + 4148 y(const)h(DT5&)g(t5,)g(const)f(DT6&)396 4278 y(t6\))2140 + 3760 y Fu(creates)25 b(an)g Fq(Array)f Fu(using)g(the)g(gi)n(v)o(en) + 2140 3889 y Fq(Domain)f Fu(objects)h(and)h(inte)o(gers.)396 + 4420 y Fq(Array\(const)62 b(DT1&)396 4549 y(t1,)j(const)g(DT2&)g + (t2,)g(const)396 4679 y(DT3&)g(t3,)g(const)g(DT4&)f(t4,)396 + 4808 y(const)h(DT5&)g(t5,)g(const)f(DT6&)396 4938 y(t6,)h(const)g(DT7&) + g(t7\))2140 4420 y Fu(creates)25 b(an)g Fq(Array)f Fu(using)g(the)g(gi) + n(v)o(en)2140 4549 y Fq(Domain)f Fu(objects)h(and)h(inte)o(gers.)p + Black 3784 5547 a Fp(99)p Black eop + %%Page: 100 100 + 100 99 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 85 a Fo(Array)27 b Fv(dec)n(laration)858 + b(result)396 226 y Fq(Array\(const)62 b(DT1&)396 + 356 y(t1,)j(const)g(ModelElement&)396 485 y(model\))2140 + 226 y Fu(creates)25 b(an)g Fq(Array)f Fu(using)g(the)g(gi)n(v)o(en)2140 + 356 y Fq(Domain)f Fu(object)i(or)f(inte)o(ger)h(and)f(then)2140 + 485 y(initializes)f(all)i(entries)f(using)g Fq(model)p + Fu(.)396 627 y Fq(Array\(const)62 b(DT1&)396 757 + y(t1,)j(const)g(DT2&)g(t2,)g(const)396 886 y(ModelElement&)d + (model\))2140 627 y Fu(creates)25 b(an)g Fq(Array)f Fu(using)g(the)g + (gi)n(v)o(en)2140 757 y Fq(Domain)f Fu(objects)h(and)h(inte)o(gers)f + (and)h(then)2140 886 y(initializes)e(all)i(entries)f(using)g + Fq(model)p Fu(.)396 1028 y Fq(Array\(const)62 + b(DT1&)396 1157 y(t1,)j(const)g(DT2&)g(t2,)g(const)396 + 1287 y(DT3&)g(t3,)g(const)396 1416 y(ModelElement&)d(model\))2140 + 1028 y Fu(creates)25 b(an)g Fq(Array)f Fu(using)g(the)g(gi)n(v)o(en) + 2140 1157 y Fq(Domain)f Fu(objects)h(and)h(inte)o(gers)f(and)h(then) + 2140 1287 y(initializes)e(all)i(entries)f(using)g Fq(model)p + Fu(.)396 1558 y Fq(Array\(const)62 b(DT1&)396 + 1687 y(t1,)j(const)g(DT2&)g(t2,)g(const)396 1817 y(DT3&)g(t3,)g(const)g + (DT4&)f(t4,)396 1946 y(const)h(ModelElement&)396 2076 + y(model\))2140 1558 y Fu(creates)25 b(an)g Fq(Array)f + Fu(using)g(the)g(gi)n(v)o(en)2140 1687 y Fq(Domain)f + Fu(objects)h(and)h(inte)o(gers)f(and)h(then)2140 1817 + y(initializes)e(all)i(entries)f(using)g Fq(model)p Fu(.)396 + 2218 y Fq(Array\(const)62 b(DT1&)396 2347 y(t1,)j(const)g(DT2&)g + (t2,)g(const)396 2477 y(DT3&)g(t3,)g(const)g(DT4&)f(t4,)396 + 2606 y(const)h(DT5&)g(t5,)g(const)396 2736 y(ModelElement&)d + (model\))2140 2218 y Fu(creates)25 b(an)g Fq(Array)f + Fu(using)g(the)g(gi)n(v)o(en)2140 2347 y Fq(Domain)f + Fu(objects)h(and)h(inte)o(gers)f(and)h(then)2140 2477 + y(initializes)e(all)i(entries)f(using)g Fq(model)p Fu(.)396 + 2877 y Fq(Array\(const)62 b(DT1&)396 3007 y(t1,)j(const)g(DT2&)g + (t2,)g(const)396 3136 y(DT3&)g(t3,)g(const)g(DT4&)f(t4,)396 + 3266 y(const)h(DT5&)g(t5,)g(const)f(DT6&)396 3395 y(t6,)h(const)g + (ModelElement&)396 3525 y(model\))2140 2877 y Fu(creates)25 + b(an)g Fq(Array)f Fu(using)g(the)g(gi)n(v)o(en)2140 3007 + y Fq(Domain)f Fu(objects)h(and)h(inte)o(gers)f(and)h(then)2140 + 3136 y(initializes)e(all)i(entries)f(using)g Fq(model)p + Fu(.)396 3667 y Fq(Array\(const)62 b(DT1&)396 + 3796 y(t1,)j(const)g(DT2&)g(t2,)g(const)396 3926 y(DT3&)g(t3,)g(const)g + (DT4&)f(t4,)396 4055 y(const)h(DT5&)g(t5,)g(const)f(DT6&)396 + 4185 y(t6,)h(const)g(DT7&)g(t7,)g(const)396 4314 y(ModelElement&)d + (model\))2140 3667 y Fu(creates)25 b(an)g Fq(Array)f + Fu(using)g(the)g(gi)n(v)o(en)2140 3796 y Fq(Domain)f + Fu(objects)h(and)h(inte)o(gers)f(and)h(then)2140 3926 + y(initializes)e(all)i(entries)f(using)g Fq(model)p Fu(.)396 + 4456 y(T)-7 b(emplate)24 b(parameters)h Fq(D)p Fu(,)g + Fq(T)p Fu(,)g(and)f Fq(E)h Fu(indicates)396 4585 y(the)g + Fq(Array)p Fu(')-5 b(s)23 b(dimension,)g(v)n(alue)h(type,)h(and)396 + 4715 y Fq(Engine)f Fu(type,)g(respecti)n(v)o(ely)-6 b(.)23 + b Fq(DT1)p Fu(,)h(.)15 b(.)g(.)g(,)396 4844 y Fq(DT7)24 + b Fu(indicate)h(domain)f(types)g(or)h(inte)o(gers.)396 + 5074 y(W)-8 b(e)22 b(illustrate)f(creating)h Fq(Array)p + Fu(s.)e(T)-8 b(o)22 b(create)g(a)g(three-dimensional)f + Fq(Array)f(a)i Fu(e)o(xplicitly)e(stor)n(-)p Black 3734 + 5547 a Fp(100)p Black eop + %%Page: 101 101 + 101 100 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fu(ing)24 b Fq(double)g + Fu(\003oating-point)f(v)n(alues,)h(use)635 410 y Fn(Interval<1>)58 + b(D\(6\);)635 539 y(Interval<3>)g(I3\(D,D,D\);)635 669 + y(Array<3,double,Brick>)d(a\(I3\);)396 928 y Fu(The)23 + b(template)f(parameters)g(specify)h(its)f(dimensionality)-6 + b(,)19 b(the)k(type)f(of)g(its)g(v)n(alues,)g(and)g(a)h + Fq(Brick)396 1057 y(Engine)c Fu(type,)h(which)f(e)o(xplicitly)f(stores) + i(v)n(alues.)f(Its)h(domain,)e(which)i(must)f(ha)n(v)o(e)h(three)g + (dimen-)396 1187 y(sions,)31 b(is)h(speci\002ed)g(by)g(an)g + Fq(Interval<3>)e Fu(object)i(which)f(consists)g(of)h([0,5])g(interv)n + (als)f(for)396 1316 y(all)g(its)g(three)g(dimensions.)f(Since)h + Fq(double)f Fu(and)h Fq(Brick)g Fu(are)h(usually)e(the)h(def)o(ault)g + (template)396 1446 y(parameters,)25 b(the)o(y)f(can)h(be)g(omitted)f + (so)g(these)h(declarations)f(are)i(equi)n(v)n(alent:)635 + 1705 y Fn(Array<3,double>)57 b(a_duplicate1\(I3\);)635 + 1834 y(Array<3>)h(a_duplicate2\(I3\);.)396 2093 y Fu(T)-8 + b(o)25 b(create)h(a)f(similar)e Fq(Array)h Fu(with)g(a)h(domain)f(of)h + ([0:1:1,)f(0:2:1,)f(0:0:1],)h(use)635 2352 y Fn(Array<3>)58 + b(b\(2,3,1\);)396 2611 y Fu(since)24 b(specifying)f(an)h(inte)o(ger)f + Fq(i)h Fu(indicates)g(a)g(one-dimensional)e(zero-based)j + Fq(Interval)d Fu([0:i-)396 2741 y(1:1].)j(T)-8 b(o)24 + b(store)h(booleans,)f(specify)g Fq(bool)g Fu(as)h(the)g(second)f + (template)g(ar)n(gument:)635 3000 y Fn(Array<2,bool>)57 + b(c\(2,3\);)396 3259 y Fu(T)-8 b(o)19 b(specify)g(a)g(def)o(ault)f + Fq(Array)g Fu(v)n(alue)g(of)h Fq(true)p Fu(,)f(use)h + Fq(ModelElement\(true\))p Fu(:)635 3518 y Fn(Array<2,bool>)57 + b(c\(2,3,)i(ModelElement\(true\)\);.)396 3777 y + Fu(T)-8 b(o)25 b(create)h(a)f(one-dimensional)e Fq(Array)g + Fu(containing)h(se)n(v)o(en)g Fq(double)p Fu(s)f(all)h(equaling)g + Fb(\031)t Fu(,)h(use)635 4036 y Fn(const)59 b(double)f(pi)i(=)f + (4.0*atan\(1.0\);)635 4165 y(Array<1,double,CompressibleBric)o(k>)755 + 4295 y(d\(7,)g(ModelElement\(pi\)\);.)396 4554 + y Fu(W)-8 b(e)24 b(use)f(a)h Fq(CompressibleBrick)19 + b(Engine)p Fu(,)j(rather)i(than)f(a)g Fq(Brick)g(Engine)p + Fu(,)f(so)h(all)396 4684 y(se)n(v)o(en)j(v)n(alues)f(will)h(be)g + (stored)g(in)g(one)h(location)e(rather)i(than)f(in)g(se)n(v)o(en)f + (separate)i(locations)e(when)396 4813 y(the)o(y)f(are)i(all)e(the)h + (same.)396 4992 y(An)c(uninitialized)f Fq(Array)p Fu(,)g(created)i + (using)e(its)h(parameter)n(-less)g(constructor)l(,)f(must)g(ha)n(v)o(e) + h(a)h(spec-)396 5122 y(i\002ed)29 b(domain)e(before)h(it)g(can)g(be)h + (used.)e(F)o(or)i(e)o(xample,)e(one)h(must)f(use)h(the)g(parameter)n + (-less)g Fq(Ar-)p Black 3734 5547 a Fp(101)p Black eop + %%Page: 102 102 + 102 101 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fq(ray)26 b Fu(constructor)f(when)h + (creating)g(an)g(array)h(of)f Fq(Array)p Fu(s)f(using)g + Fq(new)g Fu(so)h(their)g(domains)e(must)396 180 y(be)c(speci\002ed.)f + (\(It)h(w)o(ould)e(probably)h(be)g(better)g(to)g(create)h(an)g + Fq(Array)e Fu(of)h Fq(Array)p Fu(s)f(since)h(memory)396 + 310 y(allocation)f(and)h(deallocation)f(w)o(ould)g(automatically)g(be)h + (handled.\))f Fq(Array)p Fu(')-5 b(s)18 b Fq(initialize)396 + 439 y Fu(functions)29 b(accept)i(the)e(same)h(set)g(of)g(domain)f + (object)g(speci\002cations)h(and)f(model)h(elements)f(that)396 + 569 y(the)20 b Fq(Array)e Fu(constructors)h(do,)g(creating)h(the)f + (speci\002ed)h(domain.)e(See)j(T)-8 b(able)19 b(5-11.)h(F)o(or)f(e)o + (xample,)396 698 y(both)24 b Fq(a)h Fu(and)g Fq(b)f Fu(are)i(tw)o + (o-dimensional)d Fq(Array)p Fu(s)g(of)i Fq(float)p Fu(s)e(with)h(a)h + ([2:7:1,-2:4:1])e(domains:)635 1007 y Fn(//)60 b(Create)e(an)h(Array)g + (and)g(its)g(domain.)635 1137 y(Array<2,float,Brick>)d + (a\(Interval<1>\(2,7\),)2010 1266 y(Interval<1>\(-2,4\)\);)635 + 1525 y(//)k(Create)e(an)h(Array)g(without)f(a)i(domain)e(and)h(then)g + (specify)635 1655 y(//)h(its)f(domain.)635 1784 y(Array<2,float,Brick>) + d(b\(\);)635 1914 y(b.initialize\(Interval<1>\(2,7\),)d + (Interval<1>\(-2,4\)\);.)396 2173 y Fu(In)l(v)n(oking)37 + b Fq(initialize)e Fu(on)i(an)h Fq(Array)f Fu(with)g(an)g(e)o(xisting)f + (domain)h(yields)f(unspeci\002ed)396 2302 y(beha)n(vior)-5 + b(.)24 b(All)g Fq(Array)g Fu(v)n(alues)g(may)h(be)f(lost)g(and)h + (memory)f(may)h(be)f(leak)o(ed.)396 2581 y Fr(T)-9 b(able)26 + b(5-11.)e(Initializing)g Fo(Array)p Fr(s')g(Domains)396 + 2818 y Fv(An)k Fo(Array)p Fv(')-6 b(s)26 b Fo(initialize)g + Fv(member)396 2948 y(functions)i(sets)h(its)f(domain)f(and)396 + 3077 y(should)h(be)f(in)l(v)m(oked)i(onl)o(y)e(f)n(or)g(an)h(arra)n(y) + 396 3207 y(created)h(without)e(a)h(domain.)f(It)h(returns)396 + 3336 y(nothing.)396 3478 y Fo(initialize)d Fv(dec)n(laration)530 + b(result)396 3619 y Fq(initialize\(const)62 b(DT1&)j(t1\))99 + b Fu(creates)25 b(the)g Fq(Array)p Fu(')-5 b(s)23 b(domain)h(using)g + (the)2140 3749 y(gi)n(v)o(en)f Fq(Domain)g Fu(object)i(or)g(inte)o(ger) + -5 b(.)396 3891 y Fq(initialize\(const)62 b(DT1&)j(t1,)396 + 4020 y(const)g(DT2&)g(t2\))2140 3891 y Fu(creates)25 + b(the)g Fq(Array)p Fu(')-5 b(s)23 b(domain)h(using)g(the)2140 + 4020 y(gi)n(v)o(en)f Fq(Domain)g Fu(objects)i(and)f(inte)o(gers.)396 + 4162 y Fq(initialize\(const)62 b(DT1&)j(t1,)396 4291 + y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 4421 y(t3\))2140 + 4162 y Fu(creates)25 b(the)g Fq(Array)p Fu(')-5 b(s)23 + b(domain)h(using)g(the)2140 4291 y(gi)n(v)o(en)f Fq(Domain)g + Fu(objects)i(and)f(inte)o(gers.)396 4562 y Fq(initialize\(const)62 + b(DT1&)j(t1,)396 4692 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 + 4822 y(t3,)h(const)g(DT4&)g(t4\))2140 4562 y Fu(creates)25 + b(the)g Fq(Array)p Fu(')-5 b(s)23 b(domain)h(using)g(the)2140 + 4692 y(gi)n(v)o(en)f Fq(Domain)g Fu(objects)i(and)f(inte)o(gers.)p + Black 3734 5547 a Fp(102)p Black eop + %%Page: 103 103 + 103 102 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 85 a Fv(An)c Fo(Array)p + Fv(')-6 b(s)26 b Fo(initialize)g Fv(member)396 214 y(functions)i(sets)h + (its)f(domain)f(and)396 344 y(should)h(be)f(in)l(v)m(oked)i(onl)o(y)e + (f)n(or)g(an)h(arra)n(y)396 473 y(created)h(without)e(a)h(domain.)f(It) + h(returns)396 603 y(nothing.)396 744 y Fo(initialize)d + Fv(dec)n(laration)530 b(result)396 886 y Fq(initialize\(const)62 + b(DT1&)j(t1,)396 1016 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 + 1145 y(t3,)h(const)g(DT4&)g(t4,)g(const)396 1275 y(DT5&)g(t5\))2140 + 886 y Fu(creates)25 b(the)g Fq(Array)p Fu(')-5 b(s)23 + b(domain)h(using)g(the)2140 1016 y(gi)n(v)o(en)f Fq(Domain)g + Fu(objects)i(and)f(inte)o(gers.)396 1416 y Fq(initialize\(const)62 + b(DT1&)j(t1,)396 1546 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 + 1675 y(t3,)h(const)g(DT4&)g(t4,)g(const)396 1805 y(DT5&)g(t5,)g(const)g + (DT6&)f(t6\))2140 1416 y Fu(creates)25 b(the)g Fq(Array)p + Fu(')-5 b(s)23 b(domain)h(using)g(the)2140 1546 y(gi)n(v)o(en)f + Fq(Domain)g Fu(objects)i(and)f(inte)o(gers.)396 1946 + y Fq(initialize\(const)62 b(DT1&)j(t1,)396 2076 y(const)g(DT2&)g(t2,)g + (const)f(DT3&)396 2205 y(t3,)h(const)g(DT4&)g(t4,)g(const)396 + 2335 y(DT5&)g(t5,)g(const)g(DT6&)f(t6,)396 2465 y(const)h(DT7&)g(t7\)) + 2140 1946 y Fu(creates)25 b(the)g Fq(Array)p Fu(')-5 + b(s)23 b(domain)h(using)g(the)2140 2076 y(gi)n(v)o(en)f + Fq(Domain)g Fu(objects)i(and)f(inte)o(gers.)396 2606 + y Fq(initialize\(const)62 b(DT1&)j(t1,)396 2736 y(const)g + (ModelElement&)396 2865 y(model\))2140 2606 y Fu(creates)25 + b(the)g Fq(Array)p Fu(')-5 b(s)23 b(domain)h(using)g(the)2140 + 2736 y(gi)n(v)o(en)f Fq(Domain)g Fu(object)i(or)g(inte)o(ger)f(and)h + (then)2140 2865 y(initializes)e(all)i(entries)f(using)g + Fq(model)p Fu(.)396 3007 y Fq(initialize\(const)62 b(DT1&)j(t1,)396 + 3136 y(const)g(DT2&)g(t2,)g(const)396 3266 y(ModelElement&)d + (model\))2140 3007 y Fu(creates)25 b(the)g Fq(Array)p + Fu(')-5 b(s)23 b(domain)h(using)g(the)2140 3136 y(gi)n(v)o(en)f + Fq(Domain)g Fu(objects)i(and)f(inte)o(gers)g(and)2140 + 3266 y(then)g(initializes)g(all)g(entries)h(using)e Fq(model)p + Fu(.)396 3408 y Fq(initialize\(const)62 b(DT1&)j(t1,)396 + 3537 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 3667 y(t3,)h(const)g + (ModelElement&)396 3796 y(model\))2140 3408 y Fu(creates)25 + b(the)g Fq(Array)p Fu(')-5 b(s)23 b(domain)h(using)g(the)2140 + 3537 y(gi)n(v)o(en)f Fq(Domain)g Fu(objects)i(and)f(inte)o(gers)g(and) + 2140 3667 y(then)g(initializes)g(all)g(entries)h(using)e + Fq(model)p Fu(.)396 3938 y Fq(initialize\(const)62 b(DT1&)j(t1,)396 + 4067 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 4197 y(t3,)h(const)g(DT4&) + g(t4,)g(const)396 4326 y(ModelElement&)d(model\))2140 + 3938 y Fu(creates)25 b(the)g Fq(Array)p Fu(')-5 b(s)23 + b(domain)h(using)g(the)2140 4067 y(gi)n(v)o(en)f Fq(Domain)g + Fu(objects)i(and)f(inte)o(gers)g(and)2140 4197 y(then)g(initializes)g + (all)g(entries)h(using)e Fq(model)p Fu(.)396 4468 y Fq + (initialize\(const)62 b(DT1&)j(t1,)396 4598 y(const)g(DT2&)g(t2,)g + (const)f(DT3&)396 4727 y(t3,)h(const)g(DT4&)g(t4,)g(const)396 + 4857 y(DT5&)g(t5,)g(const)396 4986 y(ModelElement&)d(model\))2140 + 4468 y Fu(creates)25 b(the)g Fq(Array)p Fu(')-5 b(s)23 + b(domain)h(using)g(the)2140 4598 y(gi)n(v)o(en)f Fq(Domain)g + Fu(objects)i(and)f(inte)o(gers)g(and)2140 4727 y(then)g(initializes)g + (all)g(entries)h(using)e Fq(model)p Fu(.)p Black 3734 + 5547 a Fp(103)p Black eop + %%Page: 104 104 + 104 103 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 85 a Fv(An)c Fo(Array)p + Fv(')-6 b(s)26 b Fo(initialize)g Fv(member)396 214 y(functions)i(sets)h + (its)f(domain)f(and)396 344 y(should)h(be)f(in)l(v)m(oked)i(onl)o(y)e + (f)n(or)g(an)h(arra)n(y)396 473 y(created)h(without)e(a)h(domain.)f(It) + h(returns)396 603 y(nothing.)396 744 y Fo(initialize)d + Fv(dec)n(laration)530 b(result)396 886 y Fq(initialize\(const)62 + b(DT1&)j(t1,)396 1016 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 + 1145 y(t3,)h(const)g(DT4&)g(t4,)g(const)396 1275 y(DT5&)g(t5,)g(const)g + (DT6&)f(t6,)396 1404 y(const)h(ModelElement&)396 1534 + y(model\))2140 886 y Fu(creates)25 b(the)g Fq(Array)p + Fu(')-5 b(s)23 b(domain)h(using)g(the)2140 1016 y(gi)n(v)o(en)f + Fq(Domain)g Fu(objects)i(and)f(inte)o(gers)g(and)2140 + 1145 y(then)g(initializes)g(all)g(entries)h(using)e Fq(model)p + Fu(.)396 1675 y Fq(initialize\(const)62 b(DT1&)j(t1,)396 + 1805 y(const)g(DT2&)g(t2,)g(const)f(DT3&)396 1934 y(t3,)h(const)g(DT4&) + g(t4,)g(const)396 2064 y(DT5&)g(t5,)g(const)g(DT6&)f(t6,)396 + 2193 y(const)h(DT7&)g(t7,)g(const)396 2323 y(ModelElement&)d + (model\))2140 1675 y Fu(creates)25 b(the)g Fq(Array)p + Fu(')-5 b(s)23 b(domain)h(using)g(the)2140 1805 y(gi)n(v)o(en)f + Fq(Domain)g Fu(objects)i(and)f(inte)o(gers)g(and)2140 + 1934 y(then)g(initializes)g(all)g(entries)h(using)e Fq(model)p + Fu(.)396 2465 y(T)-7 b(emplate)24 b(parameters)h Fq(DT1)p + Fu(,)g(.)15 b(.)g(.)g(,)24 b Fq(DT7)396 2594 y Fu(indicate)h(domain)e + (types)i(or)f(inte)o(gers.)-2 3146 y Fx(5.5.)47 b(Using)h + Fg(Array)p Fx(s)396 3362 y Fu(In)38 b(the)f(pre)n(vious)f(section,)g + (we)i(e)o(xplained)e(ho)n(w)h(to)g(declare)h(and)f(initialize)f + Fq(Array)p Fu(s.)g(In)h(this)396 3491 y(section,)29 b(we)h(e)o(xplain)e + (ho)n(w)g(to)h(access)h(indi)n(vidual)d(v)n(alues)i(stored)g(within)f + (an)i Fq(Array)e Fu(and)h(ho)n(w)396 3621 y(to)f(cop)o(y)g + Fq(Array)p Fu(s.)e(In)i(Chapter)h(7,)f(we)g(e)o(xplain)f(ho)n(w)g(to)h + (use)g(entire)g Fq(Array)p Fu(s)f(in)g(data-parallel)396 + 3750 y(statements,)c(including)f(ho)n(w)h(to)g(print)g(them.)g(In)h + (Chapter)h(8,)e(we)h(e)o(xtend)f(this)g(capability)g(to)g(w)o(ork)396 + 3880 y(on)i(subsets.)396 4059 y(In)g(its)f(simplest)f(form,)h(an)h + Fq(Array)e Fu(stores)h(indi)n(vidual)f(v)n(alues,)g(permitting)g + (access)i(to)f(these)h(v)n(al-)396 4189 y(ues.)g(F)o(or)f(a)h(C++)g + (array)-6 b(,)25 b(the)f(desired)g(inde)o(x)g(is)g(speci\002ed)h + (within)e(square)h(brack)o(ets)h(follo)n(wing)d(the)396 + 4318 y(array')-5 b(s)29 b(name.)g(F)o(or)f(POOMA)h Fq(Array)p + Fu(s,)e(the)i(desired)f(inde)o(x)g(is)g(speci\002ed)h(within)e + (parentheses)396 4448 y(follo)n(wing)g(the)h Fq(Array)p + Fu(')-5 b(s)26 b(name.)i(The)h(same)f(notation)f(is)h(used)g(to)g(read) + h(and)f(write)g(v)n(alues.)f(F)o(or)396 4577 y(e)o(xample,)33 + b(the)i(follo)n(wing)d(code)i(prints)f(the)h(initial)f(v)n(alue)h(at)g + (inde)o(x)f(\(2,-2\))h(and)h(increments)e(its)396 4707 + y(v)n(alue,)24 b(printing)g(the)g(ne)n(w)h(v)n(alue:)635 + 5016 y Fn(Array<2,int,Brick>)56 b(a\(Interval<1>\(0,3\),)2010 + 5145 y(Interval<1>\(-2,4\),)p Black 3734 5547 a Fp(104)p + Black eop + %%Page: 105 105 + 105 104 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 1891 51 a Fn(ModelElement\(4\)\);)635 + 180 y(std::cout)58 b(<)6 b(<)59 b(a\(2,-2\))f(<)6 b(<)59 + b(std::endl;)635 310 y(++a\(2,-2\);)635 439 y(std::cout)f(<)6 + b(<)59 b(a\(2,-2\))f(<)6 b(<)59 b(std::endl;)396 698 + y Fq(4)34 b Fu(and)f(then)g Fq(5)g Fu(are)i(printed.)d(An)i(inde)o(x)e + (speci\002cation)h(for)h(an)g Fq(Array)e Fu(usually)g(has)i(as)f(man)o + (y)396 828 y(inte)o(gers)27 b(as)i(dimensions,)d(all)i(separated)g(by)g + (commas,)f(b)n(ut)h(the)g Fq(Array)p Fu(')-5 b(s)26 b(engine)i(may)g + (permit)396 957 y(other)d(notation)e(such)i(as)g(using)f(strings)f(or)i + (\003oating-point)e(numbers.)396 1137 y(F)o(or)k(read-only)g(access)h + (to)e(a)i(v)n(alue,)e(use)h(the)g Fq(read)f Fu(member)g(function,)g + (which)h(tak)o(es)g(the)f(same)396 1266 y(inde)o(x)e(notation)g(as)g + (its)g(nameless)h(read-write)g(counterpart:)635 1575 + y Fn(std::cout)58 b(<)6 b(<)59 b(a.read\(2,-2\))e(<)6 + b(<)59 b(std::endl;)396 1834 y Fu(Using)24 b Fq(read)g + Fu(sometimes)f(permits)h(the)h(optimizer)e(to)i(produce)g(f)o(aster)g + (e)o(x)o(ecuting)e(code.)396 2014 y(Cop)o(ying)35 b Fq(Array)p + Fu(s)g(requires)h(little)e(e)o(x)o(ecution)h(time)g(because)h + Fq(Array)p Fu(s)f(ha)n(v)o(e)g Fp(r)l(efer)l(ence)i(se-)396 + 2143 y(mantics)p Fu(.)24 b(That)h(is,)f(a)h(cop)o(y)f(of)h(an)g + Fq(Array)f Fu(and)h(the)f Fq(Array)g Fu(itself)g(share)h(the)g(same)g + (underlying)396 2273 y(data.)e(Changing)f(a)h(v)n(alue)f(in)h(one)g + (changes)f(it)g(in)h(the)f(other)-5 b(.)22 b(Example)g(5-1)h + (illustrates)e(this)h(beha)n(v-)396 2402 y(ior)-5 b(.)23 + b(Initially)-6 b(,)21 b(all)h(v)n(alues)h(in)f(the)h(array)h + Fq(a)f Fu(are)h(4.)f(The)g Fq(b)g Fu(array)h(is)e(initialized)g(using)g + Fq(a)h Fu(so)g(it)f(shares)396 2532 y(the)k(same)f(v)n(alues)g(as)h + Fq(a)p Fu(.)f(Thus,)g(changing)g(the)g(former')-5 b(s)26 + b(v)n(alue)f(also)g(changes)h(the)f(latter')-5 b(s)25 + b(v)n(alue.)396 2661 y(Function)c(ar)n(guments)g(are)h(also)f + (initialized)f(so)h(changing)g(their)g(underlying)g(v)n(alues)f(also)h + (changes)396 2791 y(the)30 b(calling)f(function')-5 b(s)29 + b(v)n(alues.)g(F)o(or)h(e)o(xample,)f(the)h Fq(changeValue)d + Fu(function)i(changes)h(the)396 2920 y(v)n(alue)24 b(at)h(inde)o(x)f + (\(0,0\))h(for)g(both)f(its)g(function)g(ar)n(gument)g(and)h + Fq(a)p Fu(.)396 3199 y Fr(Example)h(5-1.)e(Copying)h + Fo(Array)p Fr(s)635 3558 y Fn(#include)58 b("Pooma/Pooma.h")635 + 3687 y(#include)g("Pooma/Arrays.h")635 3817 y(#include)g()635 + 4076 y(//)i(Changes)e(the)h(Array)g(value)f(at)i(index)e(\(0,0\).)635 + 4205 y(void)h(changeValue\(Array<2,int,Brick>&)53 b(z\))635 + 4335 y({)60 b(z\(0,0\))e(=)i(6;)f(})635 4594 y(int)g(main\(int)f(argc,) + h(char)g(*argv[]\))635 4723 y({)755 4853 y + (Pooma::initialize\(argc,argv\);)755 5112 y(Array<2,int,Brick>)d + (a\(3,4,)i(ModelElement\(4\)\);)p Black 3734 5547 + a Fp(105)p Black eop + %%Page: 106 106 + 106 105 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 755 51 a Fn(std::cout)58 b(<)6 + b(<)59 b("Initial)f(value:\\n";)755 180 y(std::cout)g(<)6 + b(<)59 b("a:)g(")g(<)6 b(<)59 b(a\(0,0\))f(<)6 b(<)59 + b(std::endl;)755 439 y(//)g(Array)g(copies)f(share)h(the)g(same)g + (underlying)f(values.)755 698 y(//)h(Explicit)f(initialization)f(uses)i + (reference)f(semantics)755 828 y(//)h(so)h(changing)e(the)h(copy's)f + (value)h(at)g(\(0,0\))g(also)755 957 y(//)g(changes)f(the)i(original's) + d(value.)755 1087 y(Array<2,int,Brick>)f(b\(a\);)755 + 1217 y(b\(0,0\))i(=)i(5;)755 1346 y(std::cout)e(<)6 b(<)59 + b("After)f(explicit)g(initialization.\\n";)755 1476 y(std::cout)g(<)6 + b(<)59 b("a:)g(")g(<)6 b(<)59 b(a\(0,0\))f(<)6 b(<)59 + b(std::endl;)755 1605 y(std::cout)f(<)6 b(<)59 b("b:)g(")g(<)6 + b(<)59 b(b\(0,0\))f(<)6 b(<)59 b(std::endl;)755 1864 + y(//)g(Initialization)e(of)i(function)f(arguments)g(also)h(uses)755 + 1994 y(//)g(reference)f(semantics.)755 2123 y(std::cout)g(<)6 + b(<)59 b("After)f(function)g(call:\\n";)755 2253 y(changeValue\(a\);) + 755 2382 y(std::cout)g(<)6 b(<)59 b("a:)g(")g(<)6 b(<)59 + b(a\(0,0\))f(<)6 b(<)59 b(std::endl;)755 2512 y(std::cout)f(<)6 + b(<)59 b("b:)g(")g(<)6 b(<)59 b(b\(0,0\))f(<)6 b(<)59 + b(std::endl;)755 2771 y(Pooma::finalize\(\);)755 2900 + y(return)f(0;)635 3030 y(})396 3388 y Fu(The)38 b(separation)f(between) + h(a)g(higher)n(-le)n(v)o(el)e Fq(Array)g Fu(and)i(its)e(lo)n(wer)n(-le) + n(v)o(el)g Fq(Engine)g Fu(storage)396 3518 y(permits)24 + b(f)o(ast)g(cop)o(ying.)f(An)i Fq(Array)p Fu(')-5 b(s)22 + b(only)i(data)h(member)f(is)g(its)f(engine,)h(which)g(itself)g(has)g + (ref-)396 3647 y(erence)k(semantics)e(that)g(increments)g(a)h + (reference-counted)h(pointer)e(to)g(its)g(data.)h(Thus,)f(cop)o(ying) + 396 3777 y(an)34 b Fq(Array)f Fu(requires)h(creating)g(a)h(ne)n(w)e + (object)h(with)f(one)h(data)g(member)g(and)g(incrementing)f(a)396 + 3906 y(pointer')-5 b(s)24 b(reference)i(count.)e(Destruction)g(is)h + (similarly)e(ine)o(xpensi)n(v)o(e.)396 4086 y(Array)i(assignment)f + (does)g(not)g(ha)n(v)o(e)h(reference)h(semantics.)e(Thus,)g(the)g + (assignment)f Fq(a)66 b(=)f(b)25 b Fu(en-)396 4215 y(sures)f(that)g + (all)g(of)g Fq(a)p Fu(')-5 b(s)23 b(v)n(alues)h(are)h(the)f(same)g(as)g + Fq(b)g Fu(at)g(the)g(time)f(of)h(assignment)f(only)-6 + b(.)23 b(Subsequent)396 4345 y(changes)e(to)f Fq(a)p + Fu(')-5 b(s)20 b(v)n(alues)g(do)g(not)g(change)h Fq(b)p + Fu(')-5 b(s)20 b(v)n(alues)g(or)h(vice)g(v)o(ersa.)f(Assignment)f(is)h + (more)h(e)o(xpen-)396 4474 y(si)n(v)o(e)i(than)h(creating)h(a)g + (reference.)h(Creating)e(a)h(reference)h(requires)f(creating)f(a)h(v)o + (ery)f(small)g(object)396 4604 y(and)k(incrementing)f(a)h + (reference-counted)h(pointer)-5 b(.)27 b(An)h(assignment)e(requires)i + (storage)g(for)g(both)396 4733 y(the)22 b(left-hand)f(side)g(and)g + (right-hand)g(side)g(operands)g(and)h(tra)n(v)o(ersing)e(all)i(of)f + (the)h(right-hand)e(side')-5 b(s)396 4863 y(data.)p Black + 3732 5547 a Fp(106)p Black eop + %%Page: 107 107 + 107 106 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fu(The)f Fq(Array)f + Fu(class)h(has)g(internal)g(type)g(de\002nitions)f(and)h(constants)f + (useful)g(for)i(both)e(compile-)396 180 y(time)23 b(and)g(run-time)f + (computations.)g(See)i(T)-8 b(able)23 b(5-12.)g(These)g(may)g(be)h + (accessed)g(using)e(the)h Fq(Ar-)396 310 y(ray)p Fu(')-5 + b(s)30 b(type)g(and)h(the)f(scope)h(resolution)e(operator)i(\()p + Fq(::)p Fu(\).)g(The)f(table)h(be)o(gins)e(with)h(a)h(list)f(of)h(in-) + 396 439 y(ternal)e(type)f(de\002nitions,)f(e.g.,)i Fq + (Array::This_t)p Fu(.)23 b(A)29 b Fp(layout)g + Fu(maps)f(a)h(domain)396 569 y(inde)o(x)f(to)h(a)g(particular)g + (processor)g(and)g(memory)f(used)h(to)f(compute)h(the)f(associated)h(v) + n(alue.)f(The)396 698 y(tw)o(o)20 b(internal)f(enumerations)g + Fq(dimensions)f Fu(and)i Fq(rank)g Fu(both)f(record)i(the)f + Fq(Array)p Fu(')-5 b(s)18 b(dimen-)396 828 y(sion.)396 + 1107 y Fr(T)-9 b(able)26 b(5-12.)e Fo(Array)g Fr(Inter)o(nal)h(T)-7 + b(ype)25 b(De\002nitions)h(and)f(Compile-T)n(ime)g(Constants)396 + 1344 y Fv(internal)j(type)g(or)g(compile-time)396 1473 + y(constant)2140 1344 y(meaning)396 1615 y Fq(This_t)1348 + b Fu(the)24 b Fq(Array)p Fu(')-5 b(s)23 b(type)i Fq(Array)p + Fu(.)396 1756 y Fq(Engine_t)1216 b Fu(the)24 b Fq(Array)p + Fu(')-5 b(s)23 b Fq(Engine)h Fu(type)2140 1886 y Fq(Engine)p + Fu(.)396 2028 y Fq(EngineTag_t)1018 b Fu(the)24 b Fq(Array)p + Fu(')-5 b(s)23 b Fq(Engine)p Fu(')-5 b(s)23 b(tag)i Fq(E)p + Fu(.)396 2169 y Fq(Element_t)1150 b Fu(the)24 b(type)h + Fq(T)f Fu(of)h(v)n(alues)f(stored)h(in)f(the)h Fq(Array)p + Fu(.)396 2311 y Fq(ElementRef_t)952 b Fu(the)24 b(type)h(of)g + (references)h(to)e(v)n(alues)g(stored)h(in)2140 2440 + y(the)f Fq(Array)g Fu(\(usually)g Fq(T&)p Fu(\).)396 + 2582 y Fq(Domain_t)1216 b Fu(the)24 b(type)h(of)g(the)f + Fq(Array)p Fu(')-5 b(s)24 b(domain.)396 2724 y Fq(Layout_t)1216 + b Fu(the)24 b(type)h(of)g(the)f Fq(Array)p Fu(')-5 b(s)24 + b(layout.)396 2865 y Fq(const)65 b(int)g(dimensions)426 + b Fu(the)24 b(number)h(D)f(of)h(dimensions)e(of)i(the)2140 + 2995 y Fq(Array)p Fu(.)396 3137 y Fq(const)65 b(int)g(rank)822 + b Fu(synon)o(ym)22 b(for)k Fq(dimensions)p Fu(.)396 3329 + y(The)35 b Fq(Array)e Fu(class)i(has)f(se)n(v)o(eral)g(member)g + (functions)g(easing)g(access)h(to)f(its)g(domain)f(and)i(en-)396 + 3458 y(gine.)c(The)h(\002rst)g(ten)f(functions)g(listed)f(in)h(T)-8 + b(able)32 b(5-13)f(ease)h(access)g(to)g Fq(Array)e Fu(domains.)g(The) + 396 3588 y(\002rst)i(three)g(functions)f(are)i(synon)o(yms)d(all)h + (returning)g(the)h Fq(Array)p Fu(')-5 b(s)30 b(domain,)h(which)h(has)g + (type)396 3717 y Fq(Array::Domain_t)e Fu(\(abbre)n(viated)k + Fq(Domain_t)e Fu(in)j(the)f(table\).)h(The)f(ne)o(xt)396 + 3847 y(se)n(v)o(en)23 b(functions)f(query)h(the)g(domain.)g + Fq(first)p Fu(,)f Fq(last)p Fu(,)g(and)h Fq(length)f + Fu(return)i(the)f(\002rst)g(inde)o(x,)396 3976 y(last)38 + b(inde)o(x,)e(and)i(number)g(of)g(indices)f(for)h(the)g(speci\002ed)g + (dimension.)e(The)i(domain')-5 b(s)36 b(dimen-)396 4106 + y(sions)28 b(are)h(numbered)f(0,)h(1,)f(.)15 b(.)g(.)g(,)29 + b Fq(Array::dimensions)p Fu(-1.)22 b(If)30 b(these)e(v)n(alues) + 396 4235 y(are)34 b(needed)g(for)f(all)g(dimensions,)e(use)i + Fq(firsts)p Fu(,)f Fq(lasts)p Fu(,)g(and)h Fq(lengths)p + Fu(.)f(The)h(returned)396 4365 y Fq(Loc)p Fu(s)c(ha)n(v)o(e)h(D)h + (entries,)f(one)h(for)f(each)h(dimension.)e Fq(size)h + Fu(returns)g(the)g(total)g(number)g(of)396 4494 y(indices)d(in)f(the)h + (entire)g(domain.)f(This)h(is)f(the)h(product)g(of)g(all)g(the)g + (dimensions')e Fq(length)p Fu(s.)g(The)396 4624 y Fq(layout)30 + b Fu(member)g(function)g(returns)h(the)f Fq(Array)p Fu(')-5 + b(s)29 b(layout,)h(which)h(speci\002es)g(the)f(mapping)396 + 4753 y(of)21 b(indices)f(to)h(processors)f(and)h(memory)-6 + b(.)19 b(The)i(last)f(tw)o(o)g(functions)g(return)h(the)g + Fq(Array)p Fu(')-5 b(s)19 b(engine.)396 5032 y Fr(T)-9 + b(able)26 b(5-13.)e Fo(Array)g Fr(Accessors)p Black 3730 + 5547 a Fp(107)p Black eop + %%Page: 108 108 + 108 107 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 85 a Fo(Array)27 b Fv(member)g(function) + 579 b(result)396 226 y Fq(Domain_t)64 b(domain\(\))624 + b Fu(returns)24 b(the)h Fq(Array)p Fu(')-5 b(s)23 b(domain.)396 + 368 y Fq(Domain_t)64 b(physicalDomain\(\))96 b Fu(returns)24 + b(the)h Fq(Array)p Fu(')-5 b(s)23 b(domain.)396 510 y + Fq(Domain_t)64 b(totalDomain\(\))294 b Fu(returns)24 + b(the)h Fq(Array)p Fu(')-5 b(s)23 b(domain.)396 651 y + Fq(int)65 b(first\(int)f(dim\))559 b Fu(returns)24 b(the)h(\002rst)g + (inde)o(x)f(v)n(alue)g(for)h(the)2140 781 y(speci\002ed)g(dimension.) + 396 922 y Fq(int)65 b(last\(int)f(dim\))625 b Fu(returns)24 + b(the)h(last)f(inde)o(x)g(v)n(alue)g(for)h(the)g(speci\002ed)2140 + 1052 y(dimension.)396 1194 y Fq(int)65 b(length\(int)f(dim\))493 + b Fu(returns)24 b(the)h(number)f(of)h(indices)f(\(including)2140 + 1323 y(endpoints\))f(for)i(the)g(speci\002ed)g(dimension.)396 + 1465 y Fq(Loc)64 b(firsts\(\))624 b Fu(returns)24 + b(the)h(\002rst)g(inde)o(x)f(v)n(alues)g(for)h(all)f(the)2140 + 1594 y(dimensions.)396 1736 y Fq(Loc)64 b(lasts\(\))690 + b Fu(returns)24 b(the)h(last)f(inde)o(x)g(v)n(alues)g(for)h(all)g(the) + 2140 1866 y(speci\002ed)g(dimensions.)396 2007 y Fq(Loc)64 + b(lengths\(\))558 b Fu(returns)24 b(the)h(numbers)f(of)h(indices)f + (\(including)2140 2137 y(endpoints\))f(for)i(all)g(the)g(speci\002ed)g + (dimensions.)396 2278 y Fq(long)65 b(size\(\))1019 b + Fu(returns)24 b(the)h(total)f(number)g(of)h(indices)f(in)h(the)2140 + 2408 y(domain.)396 2550 y Fq(Layout_t)64 b(layout\(\))624 + b Fu(returns)24 b(the)h Fq(Array)p Fu(')-5 b(s)23 b(layout.)396 + 2691 y Fq(Engine_t)64 b(engine\(\))624 b Fu(returns)24 + b(the)h Fq(Array)p Fu(')-5 b(s)23 b(engine.)396 2833 + y Fq(const)65 b(Engine_t)f(engine\(\))229 b Fu(returns)24 + b(the)h Fq(Array)p Fu(')-5 b(s)23 b(engine.)396 2975 + y(Internal)h(type)g(de\002nitions,)f(e.g.,)h Fq(Domain_t)p + Fu(,)396 3104 y(are)i(listed)e(here)h(without)e(the)i(class)g(type)f + (pre\002x)396 3234 y Fq(Array::)p Fu(.)396 3463 + y(W)-8 b(e)44 b(illustrate)e(using)h Fq(Array)f Fu(member)h(functions)g + (in)g(Example)g(5-2.)g(The)g(program)g(com-)396 3592 + y(putes)e(the)h(total)e(number)h(of)h Fq(Array)p Fu(')-5 + b(s)40 b(indices,)g(comparing)h(the)g(result)g(with)g(in)l(v)n(oking)f + (its)396 3722 y Fq(size)22 b Fu(method.)f(Since)i(the)g + Fq(Array)p Fu(')-5 b(s)21 b(name)h(is)g Fq(a)p Fu(,)g + Fq(a.size\(\))f Fu(returns)h(its)g(size.)h(The)f Fq(com-)396 + 3851 y(puteArraySize)28 b Fu(function)i(also)h(computes)f(the)h + Fq(Array)p Fu(')-5 b(s)30 b(size.)h(This)f(templated)g(func-)396 + 3981 y(tion)g(uses)g(its)g(three)g(template)g(parameters)h(to)f(accept) + h(an)o(y)f Fq(Array)p Fu(,)f(re)o(gardless)h(of)g(its)g(dimen-)396 + 4110 y(sion,)35 b(v)n(alue)h(type,)g(or)g Fq(Engine)e + Fu(tag.)i(It)g(be)o(gins)f(by)h(obtaining)e(the)i(range)h(of)f(indices) + f(for)i(all)396 4240 y(dimensions)22 b(and)i(their)g(lengths.)e(Only)i + (the)f(latter)h(is)g(necessary)g(for)g(the)g(computation,)e(b)n(ut)h + (using)396 4369 y(the)k(former)h(further)g(illustrates)e(using)g + (member)h(functions.)f(The)h(domain')-5 b(s)26 b(size)i(is)f(the)g + (product)396 4499 y(of)32 b(the)g(length)f(of)i(each)f(dimension.)e + (Since)j(the)f(lengths)f(are)h(stored)g(in)g(the)g Fq(Loc)e(lens)p + Fu(,)396 4628 y Fq(lens[d])e Fu(is)h(a)g Fq(Loc<1>)p + Fu(,)f(for)h(which)g(its)f Fq(first)g Fu(member)h(function)g(e)o + (xtracts)f(the)h(length.)396 4758 y(The)c Fq(length)f(Array)f + Fu(member)i(function)f(is)g(used)g(in)h(the)f Fq(PAssert)p + Fu(.)p Black 3734 5547 a Fp(108)p Black eop + %%Page: 109 109 + 109 108 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fr(Example)26 b(5-2.)e(Using)h + Fo(Array)e Fr(Member)j(Functions)635 410 y Fn(#include)58 + b("Pooma/Pooma.h")635 539 y(#include)g("Pooma/Arrays.h")635 + 669 y(#include)g()635 928 y(//)i(Print)e(an)i(Array's)e(Size) + 635 1187 y(//)i(This)f(program)f(illustrates)f(using)i(the)g(Array)g + (member)635 1316 y(//)h(functions.)117 b(computeArraySize's)56 + b(computation)h(is)635 1446 y(//)j(redundant)d(because)i(Array's)f + (size\(\))g(function)g(computes)635 1575 y(//)i(the)f(same)g(value,)f + (but)h(it)h(illustrates)d(using)i(Array)635 1705 y(//)h(member)e + (functions.)635 1964 y(template)g()117 b Fi(\(1\))635 2093 y Fn(inline)635 2223 + y(long)59 b(computeArraySize\(const)c(Array&)f(a\)) + 635 2352 y({)755 2482 y(const)59 b(Loc)f(fs)h(=)g(a.firsts\(\);) + 118 b Fi(\(2\))755 2611 y Fn(const)59 b(Loc)f(ls)h(=)g + (a.lasts\(\);)755 2741 y(const)g(Loc)f(lens)g(=)i(a.lengths\(\);) + 755 2870 y(long)f(size)g(=)g(1;)755 3000 y(for)g(\(int)g(d)g(=)h(0;)f + (d)h(<)f(Dim;)g(++d\))g({)874 3129 y(size)g(*=)h(lens[d].first\(\);)116 + b Fi(\(3\))874 3259 y Fn(//)60 b(Check)e(that)h(lengths\(\))f(and)h + (our)g(computed)f(lengths)g(agree.)874 3388 y + (PAssert\(\(ls[d]-fs[d]+1\).first\(\)=)o(=a.l)o(ength)o(\(d\)\))o(;)114 + b Fi(\(4\))755 3518 y Fn(})755 3647 y(return)58 b(size;)635 + 3777 y(})635 4036 y(int)h(main\(int)f(argc,)h(char)g(*argv[]\))635 + 4165 y({)755 4295 y(Pooma::initialize\(argc,argv\);)755 + 4554 y(Array<3,int,Brick>)d(a\(3,4,5,)i(ModelElement\(4\)\);)755 + 4684 y(PAssert\(computeArraySize\(a\))c(==)59 b(a.size\(\)\);)117 + b Fi(\(5\))755 4813 y Fn(std::cout)58 b(<)6 b(<)874 4943 + y("The)59 b(array's)g(size)f(is)i(")f(<)6 b(<)59 b(a.size\(\))f(<)6 + b(<)59 b(".\\n";)p Black 3734 5547 a Fp(109)p Black eop + %%Page: 110 110 + 110 109 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 755 51 a Fn(Pooma::finalize\(\);)755 + 180 y(return)58 b(0;)635 310 y(})p Black 396 619 a Fr(\(1\))p + Black 34 w Fu(These)19 b(template)f(parameters,)h(used)f(in)h(the)f + Fq(Array)g Fu(parameter')-5 b(s)19 b(type,)f(permit)g(the)h(function) + 546 748 y(to)24 b(w)o(ork)h(with)f(an)o(y)g Fq(Array)p + Fu(.)p Black 396 928 a Fr(\(2\))p Black 34 w Fu(W)-8 + b(e)26 b(in)l(v)n(ok)o(e)f(these)g(three)h(member)f(functions)g(using)g + (the)g Fq(Array)p Fu(')-5 b(s)24 b(name)i Fq(a)p Fu(,)f(a)h(period,)f + (and)546 1057 y(the)f(functions')g(names.)h(These)f(functions)g(return) + h Fq(Loc)p Fu(s.)p Black 396 1236 a Fr(\(3\))p Black + 34 w Fq(lens[d])51 b Fu(returns)h(a)i Fq(Loc<1>)d Fu(for)i(dimension)e + Fq(d)p Fu(')-5 b(s)52 b(length.)g(In)l(v)n(oking)g Fq(Loc<1>)546 + 1366 y(first)23 b Fu(method)h(yields)g(its)g(v)n(alue.)p + Black 396 1545 a Fr(\(4\))p Black 34 w Fu(This)g(comparison)g(is)g + (unnecessary)h(b)n(ut)f(further)h(illustrates)e(using)h(member)g + (functions.)p Black 396 1725 a Fr(\(5\))p Black 34 w + Fu(The)f Fq(size)g Fu(is)g(in)l(v)n(ok)o(ed)f(by)i(prepending)e(the)i + Fq(Array)p Fu(')-5 b(s)21 b(name)j(follo)n(wed)e(by)h(a)h(period.)f + (This)546 1854 y(assertion)37 b(is)g(unnecessary)-6 b(,)38 + b(b)n(ut)f(the)h Fq(computeArraySize)c Fu(function)j(further)h(illus-) + 546 1984 y(trates)24 b(using)g(member)h(functions.)-2 + 2715 y Fx(5.6.)47 b Fg(DynamicArray)p Fx(s)396 2931 y + Fq(Array)p Fu(s)22 b(ha)n(v)o(e)g(\002x)o(ed)h(domains)e(so)i(the)f + (set)h(of)g(v)n(alid)e(indices)h(remains)h(\002x)o(ed)f(after)i + (creation.)e(The)396 3060 y Fj(DynamicArray)40 b Fp(class)33 + b Fu(supports)f(one-dimensional)g(domains)g(that)h(can)h(be)f(resized)h + (e)n(v)o(en)396 3190 y(while)25 b(the)f(array)i(is)e(used.)396 + 3369 y Fq(DynamicArray)p Fu(')-5 b(s)39 b(interf)o(ace)44 + b(e)o(xtends)d(the)i(one-dimensional)e(interf)o(ace)i(of)g(an)f + Fq(Array)396 3499 y Fu(by)g(adding)f(member)g(functions)f(to)i(change)f + (the)h(domain')-5 b(s)40 b(size.)h(It)h(is)f(declared)h(in)g + Ft(Pooma/)396 3628 y(DynamicArrays.h)p Fu(.)50 b(A)c + Fq(DynamicArray)e Fu(has)i(tw)o(o,)f(not)h(three,)g(template)f + (parameters,)396 3758 y(omitting)27 b(the)i(array')-5 + b(s)29 b(dimensionality)d(which)i(must)g(be)h(one.)f(The)h(\002rst)g + (parameter)g Fq(T)g Fu(speci\002es)396 3887 y(the)24 + b(type)g(of)g(stored)f(v)n(alues.)g(Its)h(def)o(ault)g(v)n(alue)f(is)h + (usually)f Fq(double)p Fu(,)f(b)n(ut)h(this)g(may)h(be)g(changed)396 + 4017 y(when)30 b(the)f(POOMA)g(T)-8 b(oolkit)28 b(is)h(con\002gured.)h + (The)f(second)h(parameter)f(speci\002es)h(an)g Fq(Engine)396 + 4146 y Fu(via)25 b(an)g Fq(Engine)f Fu(tag.)g(The)h(engine)g(must)f + (support)g(a)h(domain)f(with)g(dynamic)g(resizing.)h(F)o(or)f(e)o(x-) + 396 4276 y(ample,)i(the)g Fq(Dynamic)e(Engine)h Fu(is)h(analogous)f(to) + h(a)g(one-dimensional)f Fq(Brick)g(Engine)396 4405 y + Fu(supporting)k(a)i(dynamically-resizable)e(domain.)g(It)i(is)f(also)g + (usually)f(the)h(def)o(ault)h(v)n(alue)f(for)g(this)396 + 4535 y(tag.)g(F)o(or)h(e)o(xample,)e Fq(DynamicArray<>)62 + b(d0\(1\);)p Fu(,)29 b Fq(DynamicArray)396 4664 + y(d1\(1\);)p Fu(,)41 b(and)h Fq(DynamicArray)j(d2\(1\);)41 b Fu(all)h(declare)396 4794 + y(the)19 b(same)h Fq(DynamicArray)p Fu(s)c(e)o(xplicitly)h(storing)h + (one)i Fq(double)e Fu(v)n(alue.)g(A)i Fq(DynamicAr-)396 + 4923 y(ray)25 b Fu(automatically)f(allocates)h(its)f(initial)g(memory)h + (and)g(deallocates)g(its)f(\002nal)i(memory)-6 b(,)24 + b(just)g(as)396 5053 y(an)h Fq(Array)f Fu(does.)p Black + 3734 5547 a Fp(110)p Black eop + %%Page: 111 111 + 111 110 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fu(The)j Fq(create)d + Fu(and)j Fq(destroy)d Fu(member)i(functions)f(permit)h(changing)f(a)i + Fq(DynamicAr-)396 180 y(ray)p Fu(')-5 b(s)23 b(domain.)h(T)-8 + b(able)24 b(5-14)g(lists)f(these)i(member)e(functions)h(b)n(ut)g(omits) + f(functions)g(e)o(xclusi)n(v)o(ely)396 310 y(used)f(in)g(distrib)n + (uted)e(computation.)g(When)i(making)f(the)h(domain)f(lar)n(ger)l(,)i + (ne)n(w)e(indices)h(are)g(added)396 439 y(to)30 b(the)h(end)f(of)h(the) + g(one-dimensional)d(domain)i(and)h(the)f(corresponding)g(v)n(alues)f + (are)j(initialized)396 569 y(with)24 b(the)h(def)o(ault)g(v)n(alue)f + (for)h Fq(T)p Fu(.)f(Existing)f(v)n(alues)h(are)i(copied.)396 + 848 y Fr(T)-9 b(able)26 b(5-14.)e(Changing)h(a)g Fo(DynamicArray)p + Fr(')l(s)d(Domain)396 1085 y Fo(DynamicArray)j Fv(member)i(function)119 + b(description)396 1226 y Fq(void)65 b(create\(int)e(num\))428 + b Fu(e)o(xtend)24 b(the)g(current)h(domain)f(by)h(the)f(requested)2140 + 1356 y(number)g(of)h(elements.)396 1497 y Fq(void)65 + b(destroy\(const)e(Dom&)396 1627 y(killList\))2140 1497 + y Fu(remo)o(v)o(e)23 b(the)i(v)n(alues)f(speci\002ed)h(by)g(the)f + (indices)2140 1627 y(in)g(the)h(gi)n(v)o(en)e Fq(Domain)h + Fu(ar)n(gument.)g(The)2140 1756 y(\223Back\002ll\224)i(method)d(mo)o(v) + o(es)g(v)n(alues)h(from)h(the)2140 1886 y(end)f(of)h(the)g(domain)f(to) + g(replace)i(the)e(deleted)2140 2015 y(v)n(alues.)396 + 2157 y Fq(void)65 b(destroy\(Iter)396 2287 y(killBegin,)f(Iter)g + (killEnd\))2140 2157 y Fu(remo)o(v)o(e)23 b(the)i(v)n(alues)f + (speci\002ed)h(by)g(the)f(indices)2140 2287 y(in)g(the)h(container)f + (range)i([be)o(gin,end\))d(speci\002ed)2140 2416 y(by)h(the)h + (random-access)g(iterators.)f(The)2140 2546 y(\223Back\002ll\224)i + (method)d(mo)o(v)o(es)g(v)n(alues)h(from)h(the)2140 2675 + y(end)f(of)h(the)g(domain)f(to)g(replace)i(the)e(deleted)2140 + 2805 y(v)n(alues.)396 2946 y Fq(void)65 b(destroy\(const)e(Dom&)396 + 3076 y(killList,)h(const)396 3205 y(DeleteMethod&)f(method\))2140 + 2946 y Fu(remo)o(v)o(e)23 b(the)i(v)n(alues)f(speci\002ed)h(by)g(the)f + (indices)2140 3076 y(in)g(the)h(gi)n(v)o(en)e Fq(Domain)h + Fu(ar)n(gument.)g(Deleted)2140 3205 y(v)n(alues)g(can)h(be)g(replaced)g + (by)2140 3335 y Fq(BackFill)p Fu('ing,)d(i.e.,)j(mo)o(ving)d(data)j + (from)2140 3464 y(the)f(domain')-5 b(s)24 b(end)g(to)h(\002ll)f(remo)o + (v)o(ed)g(v)n(alues,)g(or)2140 3594 y(by)g Fq(ShiftUp)p + Fu('ing,)d(i.e.,)j(compacting)f(all)h(data)2140 3723 + y(b)n(ut)g(maintaining)f(the)i(relati)n(v)o(e)e(ordering.)396 + 3865 y Fq(void)65 b(destroy\(Iter)396 3995 y(killBegin,)f(Iter)g + (killEnd,)396 4124 y(const)h(DeleteMethod&)396 4254 y(method\))2140 + 3865 y Fu(remo)o(v)o(e)23 b(the)i(v)n(alues)f(speci\002ed)h(by)g(the)f + (indices)2140 3995 y(in)g(the)h(container)f(range)i([be)o(gin,end\))d + (speci\002ed)2140 4124 y(by)h(the)h(random-access)g(iterators.)f + (Deleted)2140 4254 y(v)n(alues)g(can)h(be)g(replaced)g(by)2140 + 4383 y Fq(BackFill)p Fu('ing,)d(i.e.,)j(mo)o(ving)d(data)j(from)2140 + 4513 y(the)f(domain')-5 b(s)24 b(end)g(to)h(\002ll)f(remo)o(v)o(ed)g(v) + n(alues,)g(or)2140 4642 y(by)g Fq(ShiftUp)p Fu('ing,)d(i.e.,)j + (compacting)f(all)h(data)2140 4772 y(b)n(ut)g(maintaining)f(the)i + (relati)n(v)o(e)e(ordering.)396 4913 y(This)h(table)h(omits)e(member)i + (functions)396 5043 y(designed)f(for)h(distrib)n(uted)f(computation.)p + Black 3734 5547 a Fp(111)p Black eop + %%Page: 112 112 + 112 111 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fu(The)41 b Fq(destroy)e + Fu(member)i(function)f(deletes)h(the)f(speci\002ed)h(indices.)g(The)f + (indices)h(may)f(be)396 180 y(speci\002ed)k(using)f(either)h(a)g + Fq(Domain)e Fu(object)i(\()p Fq(Interval<1>)p Fu(,)d + Fq(Range<1>)p Fu(,)h(or)i Fq(In-)396 310 y(directionList)p + Fu(\))i(or)j(by)f(random-access)h(iterators)f(pointing)f(into)h(a)h + (container)-5 b(.)48 b(F)o(or)396 439 y(e)o(xample,)60 + b(e)n(v)o(ery)g(other)g(v)n(alue)g(from)g(a)g(ten-v)n(alue)g(array)h + Fq(d)g Fu(might)e(be)h(remo)o(v)o(ed)f(using)396 569 + y Fq(Range<1>\(0,9,2\))p Fu(.)21 b(Alternati)n(v)o(ely)-6 + b(,)635 928 y Fn(int)59 b(killList[])f(=)i({0,)f(2,)g(4,)g(6,)h(8};)635 + 1057 y(d.destroy\(killList,)c(killList+5\);)396 1316 + y Fu(performs)24 b(the)g(same)g(deletions.)f(As)i(indices)e(are)i(remo) + o(v)o(ed,)e(other)h(indices)g(are)h(mo)o(v)o(ed)d(into)i(their)396 + 1446 y(positions.)h(Using)g(the)i Fq(BackFill)d Fu(method)i(mo)o(v)o + (es)f(the)h(last)g(inde)o(x)g(and)g(its)g(associated)g(v)n(alue)396 + 1575 y(into)f(deleted)h(inde)o(x')-5 b(s)25 b(position.)f(Thus,)h(the)h + (total)g(number)f(of)h(indices)g(is)f(decreased)i(by)f(one,)g(b)n(ut) + 396 1705 y(the)e(indices)g(are)h(reordered.)g(Using)f(the)g + Fq(ShiftUp)f Fu(method)g(ensures)h(the)h(order)f(of)h(the)f(indices)396 + 1834 y(is)g(preserv)o(ed)f(by)h(\223shifting\224)f(all)g(v)n(alues)g + (left)h(\(or)g(up\))g(so)f(all)h(\223gaps\224)f(between)h(indices)f + (disappear)-5 b(.)396 1964 y(F)o(or)25 b(e)o(xample,)f(consider)g(remo) + o(ving)g(the)g(\002rst)h(inde)o(x)f(from)h(a)g(domain.)396 + 2199 y(original)f(indices:)1098 b(0)24 b(1)h(2)g(3)396 + 2339 y Fq(destroy)e Fu(using)h Fq(BackFill)p Fu(:)462 + b(3)24 b(1)h(2)396 2478 y Fq(destroy)e Fu(using)h Fq(ShiftUp)p + Fu(:)528 b(1)24 b(2)h(3)396 2732 y(The)f Fq(BackFill)f + Fu(mo)o(v)o(es)f(the)i(rightmost)f(inde)o(x)g(3)h(into)f(the)h(remo)o + (v)o(ed)f(inde)o(x)g(0')-5 b(s)24 b(position.)e(The)396 + 2862 y Fq(ShiftUp)29 b Fu(mo)o(v)o(es)g(all)i(the)f(indices)h(one)f + (position)f(to)i(the)f(left.)h(This)f(illustrates)f(that)h + Fq(Back-)396 2992 y(Fill)36 b Fu(mo)o(v)o(es)f(e)o(xactly)i(as)g(man)o + (y)f(indices)g(as)h(are)h(deleted,)e(while)h Fq(ShiftUp)e + Fu(can)i(shift)g(all)396 3121 y(indices)30 b(in)h(a)g(domain.)e(Thus,)h + Fq(BackFill)f Fu(is)h(the)g(def)o(ault)h(method.)e(When)i(multiple)e + (indices)396 3251 y(are)34 b(deleted,)f(the)o(y)f(are)i(deleted)e(from) + h(the)g(last)g(\(lar)n(gest\))g(to)f(the)h(\002rst)g(\(smallest\).)f + (When)h(using)396 3380 y(the)i Fq(BackFill)d Fu(method,)i(some)g + (indices)f(may)i(be)f(mo)o(v)o(ed)f(repeatedly)-6 b(.)34 + b(F)o(or)h(e)o(xample,)e(con-)396 3510 y(sider)f(remo)o(ving)e(indices) + h(0)h(and)g(2)g(from)f(original)g(indices)g(of)h(0)g(1)g(2)f(3.)h(Remo) + o(ving)f(2)g(yields)g(0)396 3639 y(1)37 b(3)f(because)h(3)f(is)g(mo)o + (v)o(ed)f(into)h(2')-5 b(s)36 b(position.)e(Remo)o(ving)i(0)g(yields)g + (3)g(1)h(because)f(3)h(is)f(again)396 3769 y(mo)o(v)o(ed.)23 + b(Use)i(an)g(object)f(with)g(the)g(desired)h(type)f(to)g(indicate)h + (which)f(\002ll)g(method)g(is)g(desired,)h(i.e.,)396 + 3898 y Fq(BackFill\(\))e Fu(or)i Fq(ShiftUp\(\))p Fu(.)396 + 4077 y(W)-8 b(e)27 b(illustrate)e Fq(DynamicArray)e Fu(resizing)j(in)g + (Example)g(5-3.)g Fq(DynamicArray)p Fu(s)d(are)k(de-)396 + 4207 y(clared)k(in)g Ft(Pooma/DynamicArrays.h)p Fu(,)36 + b(not)30 b Ft(Pooma/Arrays.h)p Fu(.)k(Their)d(declarations)f(require) + 396 4336 y(tw)o(o,)39 b(not)g(three,)g(template)f(ar)n(guments)h + (because)h(the)f(array)h(must)e(be)h(one-dimensional.)e(The)396 + 4466 y(three)g(arrays,)g(each)g(ha)n(ving)e(one)i Fq(double)e + Fu(v)n(alue,)g(are)j(equi)n(v)n(alent.)c(\(The)j(POOMA)f(T)-8 + b(oolkit)396 4596 y(can)34 b(be)f(con\002gured)h(to)f(support)f(dif)n + (ferent)h(def)o(ault)g(template)g(v)n(alues.\))g(In)l(v)n(oking)f + Fq(d0)p Fu(')-5 b(s)32 b Fq(cre-)396 4725 y(ate)26 b + Fu(with)f(an)h(ar)n(gument)g(of)g(\002)n(v)o(e)g(increases)g(its)f + (domain)h(size)g(from)f(one)i(to)e(six.)h(The)g(additional)396 + 4855 y(indices)32 b(are)h(added)f(to)f(the)h(end)g(of)h(the)f(domain)f + (so)g(the)h(v)n(alue)g(at)g(inde)o(x)f(0)h(is)g(not)f(changed.)h(T)-8 + b(o)396 4984 y(illustrate)27 b(which)g(indices)g(are)h(remo)o(v)o(ed)f + (and)g(which)h(indices)f(are)h(reordered,)g(the)g(program)f(\002rst)396 + 5114 y(sets)g(all)g(v)n(alues)f(equal)h(to)g(their)f(indices.)h(This)f + (illustrates)g(that)g Fq(DynamicArray)e Fu(v)n(alues)j(are)p + Black 3734 5547 a Fp(112)p Black eop + %%Page: 113 113 + 113 112 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 396 51 a Fu(accessed)26 b(the)e(same)h(w)o + (ay)f(as)h Fq(Array)f Fu(v)n(alues.)f(F)o(or)i(e)o(xample,)f + Fq(d0\(i\))f Fu(accesses)i(the)g Fq(i)3574 11 y Fe(th)3645 + 51 y Fu(v)n(alue.)396 180 y(The)e Fq(destroy)f Fu(member)h(function)f + (remo)o(v)o(es)g(e)n(v)o(ery)h(other)g(inde)o(x)f(from)h(the)g(array)h + (because)f(the)396 310 y(one-dimensional)30 b Fq(Range)g + Fu(speci\002es)i(the)g(domain')-5 b(s)30 b(entire)h(interv)n(al)g(with) + f(a)i(stride)f(of)h(2.)f(The)396 439 y Fq(BackFill)37 + b Fu(function)h(call)g(creates)i(a)f Fq(BackFill)d Fu(object)i + (indicating)g(the)g Fq(BackFill)396 569 y Fu(method)24 + b(should)g(be)h(used.)f(W)-8 b(e)25 b(illustrate)f(the)g(steps)h(of)g + (this)e(method:)396 855 y(original)h(indices:)1098 b(0)24 + b(1)h(2)g(3)g(4)f(5)396 994 y(delete)h(inde)o(x)f(4:)1158 + b(0)24 b(1)h(2)g(3)g(5)396 1133 y(delete)g(inde)o(x)f(2:)1158 + b(0)24 b(1)h(5)g(3)396 1273 y(delete)g(inde)o(x)f(0:)1158 + b(3)24 b(1)h(5)396 1527 y(Since)e(multiple)e(indices)g(are)j + (speci\002ed,)e(the)g(rightmost)f(one)h(is)g(remo)o(v)o(ed)f(\002rst,)i + (i.e.,)f(inde)o(x)f(4.)h(The)396 1657 y(rightmost)27 + b(inde)o(x)h(5)h(is)g(mo)o(v)o(ed)e(into)h(4')-5 b(s)29 + b(position.)e(When)i(remo)o(ving)e(inde)o(x)h(2,)h(the)g(inde)o(x)f + (origi-)396 1786 y(nally)f(at)h(5)g(is)g(again)f(mo)o(v)o(ed)f(into)h + (2')-5 b(s)27 b(position.)f(Finally)-6 b(,)27 b(inde)o(x)g(0)g(is)h + (replaced)g(by)g(inde)o(x)f(3.)g(The)396 1916 y(rest)33 + b(of)g(the)g(program)g(repeats)g(the)g(computation,)e(using)h(the)h + (random-access)h(iterator)e(v)o(ersion)396 2045 y(of)i + Fq(destroy)p Fu(.)f(Since)h(this)f Fq(DynamicArray)p + Fu(')-5 b(s)31 b(indices)i(are)i(speci\002ed)f(using)f + Fq(int)p Fu(s,)g(the)396 2175 y Fq(killList)23 b Fu(e)o(xplicitly)f + (lists)h(the)i(indices)e(to)h(remo)o(v)o(e.)g(The)g Fq(destroy)f + Fu(call)h(uses)g(pointers)g(to)396 2304 y(the)29 b(be)o(ginning)f(and)h + (end)h(of)f(the)g Fq(killList)f Fu(array)i(to)f(specify)g(which)g(of)g + (its)g(indices)g(to)f(use.)396 2434 y(Since)f(no)e(replacement)h + (method)f(is)g(speci\002ed,)h(the)g(def)o(ault)f Fq(BackFill)f + Fu(method)h(is)g(used.)h(All)396 2563 y(the)f Fq(DynamicArray)p + Fu(s')d(unallocated)i(memory)g(is)g(deallocated.)396 + 2842 y Fr(Example)i(5-3.)e(Example)h(Using)g Fo(DynamicArray)p + Fr(s)635 3201 y Fn(#include)58 b("Pooma/Pooma.h")635 + 3330 y(#include)g("Pooma/DynamicArrays.h")115 b Fi(\(1\))635 + 3460 y Fn(#include)58 b()635 3719 y(//)i(Demonstrate)d(using) + i(DynamicArrays.)635 3978 y(int)g(main\(int)f(argc,)h(char)g(*argv[]\)) + 635 4107 y({)755 4237 y(Pooma::initialize\(argc,argv\);)755 + 4496 y(//)g(Create)g(a)g(DynamicArray)e(with)i(one)g(element.)118 + b Fi(\(2\))755 4625 y Fn(DynamicArray<>)57 b(d0\(1\);)755 + 4755 y(DynamicArray)e(d01\(1\);)755 4884 y + (DynamicArray)j(d02\(1\);)755 5143 + y(//)h(Add)g(five)g(more)g(elements.)118 b Fi(\(3\))p + Black 3734 5547 a Fp(113)p Black eop + %%Page: 114 114 + 114 113 bop Black 2627 -132 a Fp(Chapter)25 b(5.)g Fj(Array)32 + b Fp(Container)o(s)p Black 755 51 a Fn(d0.create\(5\);)755 + 180 y(//)59 b(Store)g(values)f(in)i(the)f(array.)755 + 310 y(for)g(\(int)g(i)g(=)h(d0.domain\(\).first\(\);)55 + b(i)60 b(<=)f(d0.domain\(\).last\(\);)d(++i\))874 439 + y(d0\(i\))j(=)h(i;)119 b Fi(\(4\))755 698 y Fn(//)59 + b(Delete)g(every)f(other)h(element.)118 b Fi(\(5\))755 + 828 y Fn(d0.destroy\(Range<1>\(d0.domain)o(\(\).fi)o(rst\()o(\),d0.)o + (doma)o(in\(\))o(.last)o(\(\),2)o(\),)54 b(BackFill\(\)\);)755 + 1087 y(//)59 b(Print)g(the)g(resulting)f(array.)755 1217 + y(std::cout)g(<)6 b(<)59 b(d0)g(<)6 b(<)59 b(std::endl;)755 + 1476 y(//)g(Use)g(the)g(iterator)f(form)h(of)h('destroy.')755 + 1605 y(DynamicArray<>)d(d1\(6\);)755 1735 y(for)i(\(int)g(i)g(=)h + (d1.domain\(\).first\(\);)55 b(i)60 b(<=)f(d1.domain\(\).last\(\);)d + (++i\))874 1864 y(d1\(i\))j(=)h(i;)755 1994 y(int)f(killList[])f(=)h({) + h(0,)f(2,)g(4)h(};)119 b Fi(\(6\))755 2123 y Fn(d1.destroy\(killList,) + 55 b(killList+3\);)755 2253 y(std::cout)j(<)6 b(<)59 + b(d1)g(<)6 b(<)59 b(std::endl;)755 2512 y(Pooma::finalize\(\);)755 + 2641 y(return)f(0;)635 2771 y(})p Black 396 3080 a Fr(\(1\))p + Black 34 w Fu(This)24 b(header)h(\002le)g(declares)h + Fq(DynamicArray)p Fu(s.)p Black 396 3259 a Fr(\(2\))p + Black 34 w Fu(These)34 b(three)g(declarations)g(yield)f(equi)n(v)n + (alent)f Fq(DynamicArray)p Fu(s,)f(storing)i(one)h Fq(dou-)546 + 3388 y(ble)24 b Fu(v)n(alue.)p Black 396 3568 a Fr(\(3\))p + Black 34 w Fu(This)g Fq(create)f Fu(member)i(function)f(call)g(adds)h + (\002)n(v)o(e)f(indices)g(to)h(the)f(end)h(of)g(the)g(domain.)p + Black 396 3747 a Fr(\(4\))p Black 34 w Fq(DynamicArray)d + Fu(v)n(alues)i(are)h(accessed)h(the)e(same)h(w)o(ay)g(as)g + Fq(Array)e Fu(v)n(alues.)p Black 396 3926 a Fr(\(5\))p + Black 34 w Fu(The)e Fq(Range)g Fu(object)g(speci\002es)h(that)g(e)n(v)o + (ery)f(other)g(inde)o(x)g(should)f(be)i(remo)o(v)o(ed.)f(The)g + Fq(Back-)546 4056 y(Fill\(\))i Fu(object)i(is)f(unnecessary)h(since)f + (it)h(is)f(the)h(def)o(ault)f(replacement)h(method.)p + Black 396 4235 a Fr(\(6\))p Black 34 w Fu(This)f Fq(destroy)f + Fu(call)i(is)f(equi)n(v)n(alent)f(to)h(the)h(pre)n(vious)f(one)g(b)n + (ut)h(uses)f(iterators.)p Black 3734 5547 a Fp(114)p + Black eop + %%Page: 115 115 + 115 114 bop Black Black -2 119 a Fy(Chapter)58 b(6.)f(Engines)396 + 416 y Fu(Each)28 b(container)g(has)g(one)g(or)g(more)f + Fq(Engine)p Fu(s)g(to)g(store)h(or)g(compute)f(its)g(v)n(alues.)g(As)g + (we)h(men-)396 545 y(tioned)36 b(in)f(Section)i(5.4,)e(a)i(container') + -5 b(s)35 b(role)i(is)e(high-le)n(v)o(el,)g(supporting)f(access)j(to)f + (groups)f(of)396 675 y(v)n(alues,)f(and)g(an)h(engine')-5 + b(s)34 b(role)g(is)g(lo)n(w-le)n(v)o(el,)f(storing)g(or)i(computing)e + (v)n(alues)g(and)i(supporting)396 804 y(access)30 b(to)f(indi)n(vidual) + f(v)n(alues.)g(This)h(separation)g(permits)f(optimizing)g(space)i(and)f + (computation)396 934 y(requirements.)396 1113 y(W)-8 + b(e)25 b(be)o(gin)f(this)f(chapter)i(by)f(introducing)g(the)g(concept)g + (of)h(an)g(engine)f(and)h(ho)n(w)e(it)h(is)g(used.)h(Then,)396 + 1243 y(we)e(describe)g(the)f(v)n(arious)g Fq(Engine)p + Fu(s)e(that)j(POOMA)f(pro)o(vides,)f(separating)h(them)g(into)g + (engines)396 1372 y(that)j(store)f(v)n(alues)g(and)h(engines)f(that)h + (compute)f(v)n(alues.)-2 1825 y Fx(6.1.)47 b(The)h(Concept)396 + 2040 y Fu(An)27 b(engine)g(performs)f(the)h(lo)n(w-le)n(v)o(el)e(v)n + (alue)h(storage,)h(computation,)e(and)i(element-wise)f(access)396 + 2170 y(for)38 b(a)g(container)-5 b(.)37 b(An)h(engine)f(has)h(a)g + (domain)f(and)h(accessor)g(functions)f(returning)g(indi)n(vidual)396 + 2300 y(elements.)f(The)h(POOMA)f Fq(Engine)f Fu(class)i(and)f(its)g + (specializations)f(implement)g(the)i(engine)396 2429 + y(concept.)e(Gi)n(v)o(en)f(an)i(inde)o(x)e(within)g(the)h(domain,)f(an) + i Fq(Engine)p Fu(')-5 b(s)33 b Fq(operator\(\))g Fu(function)396 + 2559 y(returns)h(the)g(associated)f(v)n(alue,)h(which)f(can)i(be)f + (used)g(or)g(changed.)g(Its)f Fq(read)g Fu(member)h(func-)396 + 2688 y(tion)f(returns)h(the)g(same)g(v)n(alue)f(b)n(ut)g(permitting)g + (only)g(use,)h(not)f(modi\002cation.)g(The)h(acceptable)396 + 2818 y(indices)23 b(are)h(determined)f(by)g(each)g Fq(Engine)p + Fu(.)f(Most)g(accept)i(indices)f(speci\002ed)g(using)g + Fq(int)f Fu(and)396 2947 y Fq(Loc)e Fu(parameters,)i(b)n(ut)f(an)g + Fq(Engine)f Fu(might)g(accept)i(string)f(or)g(\003oating-point)f + (parameters.)396 3077 y(An)28 b Fq(Engine)p Fu(')-5 b(s)25 + b(layout)i(speci\002es)g(maps)g(its)g(domain)f(indices)h(to)g(the)h + (processors)f(and)g(memory)396 3206 y(used)e(to)f(store)h(and)g + (compute)f(the)g(associated)h(v)n(alues.)396 3385 y(Since)34 + b(an)g(engine')-5 b(s)33 b(main)f(role)i(is)f(to)g(return)h(the)f(indi) + n(vidual)e(v)n(alues)i(associated)g(with)g(speci\002c)396 + 3515 y(domain)e(indices,)g(an)o(y)h(implementation)d(performing)j(this) + e(task)i(is)g(an)g(engine.)f(POOMA)h Fq(En-)396 3644 + y(gine)p Fu(s)24 b(f)o(all)h(into)f(three)h(cate)o(gories:)p + Black 396 3923 a Fs(\225)p Black 72 w Fq(Engine)p Fu(s)e(that)h(store)h + (v)n(alues.)p Black 396 4103 a Fs(\225)p Black 72 w Fq(Engine)p + Fu(s)e(that)h(compute)g(their)h(v)n(alues)f(using)g(other)g + Fq(Engine)p Fu(s')g(v)n(alues.)p Black 396 4282 a Fs(\225)p + Black 72 w Fq(Engine)p Fu(s)f(that)h(support)g(distrib)n(uted)f + (computation.)396 4412 y(F)o(or)38 b(e)o(xample,)g(the)g + Fq(Brick)f(Engine)g Fu(e)o(xplicitly)f(stores)i(all)g(its)f(v)n(alues,) + g(while)h(the)g Fq(Com-)396 4541 y(pressibleBrick)29 + b Fu(engine)j(adds)h(the)f(feature)h(of)g(reducing)f(its)f(storage)i + (requirements)e(if)396 4671 y(all)g(these)g(v)n(alues)f(are)h + (identical.)f(A)h Fq(UserFunction)d(Engine)i Fu(yields)g(v)n(alues)g + (by)h(apply-)396 4800 y(ing)f(a)g Fp(function)f(object)i + Fu(to)f(each)g(v)n(alue)g(returned)g(by)f(another)h Fq(Engine)p + Fu(.)f(A)h Fq(CompFwd)e(En-)396 4930 y(gine)e Fu(projects)h(components) + e(from)i(another)f Fq(Engine)p Fu(.)g(F)o(or)g(e)o(xample,)g + Fq(CompFwd)f Fu(will)h(use)396 5059 y(the)e(second)g(components)e(of)j + (each)f Fq(Vector)f Fu(in)g(an)h Fq(Array)f Fu(to)h(form)g(its)f(o)n + (wn)g Fq(Array)p Fu(.)g(Since)p Black 3734 5547 a Fp(115)p + Black eop + %%Page: 116 116 + 116 115 bop Black 3111 -132 a Fp(Chapter)25 b(6.)f(Engines)p + Black 396 51 a Fu(each)35 b(container)g(has)f(at)h(least)f(one)h + Fq(Engine)p Fu(,)e(we)i(can)f(also)h(describe)f(the)h(latter)f(cate)o + (gory)g(as)396 180 y(containers)28 b(that)f(compute)g(their)h(v)n + (alues)f(using)g(other)h(containers')g(v)n(alues.)f(A)h + Fq(MultiPatch)396 310 y(Engine)21 b Fu(distrib)n(utes)g(its)h(domain)g + (among)g(v)n(arious)f(processors)h(and)h(memory)f(spaces,)g(each)i(re-) + 396 439 y(sponsible)j(for)h(computing)e(v)n(alues)i(associated)f(with)g + (a)i(portion,)e(or)h(patch,)f(of)i(the)e(domain.)g(The)396 + 569 y Fq(Remote)d(Engine)f Fu(also)i(supports)e(distrib)n(uted)g + (computation.)396 748 y(Just)35 b(as)g(multiple)f(containers)h(can)g + (use)h(the)f(same)g(engine,)g(multiple)f Fq(Engine)p + Fu(s)f(can)j(use)f(the)396 878 y(same)d(underlying)f(data.)g(As)h(we)g + (mentioned)f(in)g(Section)h(5.5,)f Fq(Engine)p Fu(s)g(ha)n(v)o(e)g + Fp(r)l(efer)l(ence)i(se-)396 1007 y(mantics)p Fu(.)23 + b(A)h(cop)o(y)g(of)g(an)f Fq(Engine)g Fu(has)h(a)g(reference-counted)h + (pointer)e(to)h(the)f Fq(Engine)p Fu(')-5 b(s)22 b(data)396 + 1137 y(\(if)e(an)o(y)g(e)o(xists\).)e(Thus,)h(cop)o(ying)g(an)h + Fq(Engine)f Fu(or)h(a)g(container)g(requires)g(little)e(e)o(x)o + (ecution)h(time.)g(If)396 1266 y(an)24 b Fq(Engine)e + Fu(has)h(the)g(same)h(data)f(as)h(another)f Fq(Engine)f + Fu(b)n(ut)h(it)g(needs)g(its)g(o)n(wn)f(data)i(to)f(modify)-6 + b(,)396 1396 y(the)25 b Fq(makeOwnCopy)d Fu(member)i(function)g + (creates)i(such)e(a)i(cop)o(y)-6 b(.)396 1575 y Fq(Engine)p + Fu(s)28 b(are)h(rarely)h(e)o(xplicitly)d(declared.)i(Instead)g(a)g + (container)g(is)f(declared)i(using)e(an)h Fq(En-)396 + 1705 y(gine)38 b Fu(tag,)g(and)h(the)f(container)g(creates)i(the)e + (speci\002ed)h Fq(Engine)e Fu(to)h(deal)h(with)e(its)h(v)n(alues.)396 + 1834 y(F)o(or)24 b(e)o(xample,)f(a)i Fq(Brick)e(Engine)f + Fu(is)i(e)o(xplicitly)e(declared)i(as)g Fq(Engine)p + Fu(,)396 1964 y(b)n(ut)i(the)o(y)g(are)h(more)g(frequently)f(created)h + (by)f(containers,)g(e.g.,)h Fq(Array)p Fu(.)22 + b(An)396 2093 y Fq(Engine)p Fu(')-5 b(s)29 b(\002rst)i(tw)o(o)g + (template)f(parameters)h(specify)f(the)h(domain')-5 b(s)29 + b(dimensionality)g(and)h(the)396 2223 y(v)n(alue)23 b(type,)h(as)g + (described)f(in)h(Section)f(5.4.)h(Unlik)o(e)f(container)g + (declarations,)g(the)h(third)f(template)396 2352 y(parameter)l(,)35 + b(the)f Fq(Engine)f Fu(tag,)h(speci\002es)g(which)g Fq(Engine)f + Fu(specialization)g(to)h(use.)g(F)o(or)g(e)o(x-)396 2482 + y(ample,)28 b(the)f Fq(Brick)g(Engine)g Fu(tag)g(indicates)h(a)g + Fq(Brick)e(Engine)h Fu(should)g(be)h(used.)f(Some)396 + 2611 y Fq(Engine)p Fu(s,)g(such)i(as)g Fq(CompFwd)p Fu(,)e(are)j + (rarely)f(declared)h(e)n(v)o(en)e(using)g Fq(Engine)f + Fu(tags.)h(Instead)396 2741 y(the)38 b Fq(Array)p Fu(')-5 + b(s)36 b Fq(comp)h Fu(and)h Fq(readComp)e Fu(member)h(functions)g + (return)h(vie)n(ws)f(of)h(containers)396 2870 y(using)24 + b Fq(CompFwd)f(Engine)p Fu(s.)-2 3373 y Fx(6.2.)47 b(T)-10 + b(ypes)47 b(of)h Fg(Engine)p Fx(s)396 3588 y Fu(In)23 + b(this)f(section,)f(we)i(describe)g(the)f(dif)n(ferent)h(types)f(of)g + Fq(Engine)p Fu(s)f(and)i(illustrate)e(their)h(creation,)396 + 3718 y(when)38 b(appropriate.)g(First,)f(we)h(describe)g + Fq(Engine)p Fu(s)f(that)g(e)o(xplicitly)f(store)i(v)n(alues)f(and)h + (then)396 3847 y Fq(Engine)p Fu(s)23 b(that)i(compute)f(v)n(alues.)g + (See)h(T)-8 b(able)25 b(6-1.)396 4126 y Fr(T)-9 b(able)26 + b(6-1.)e(T)-7 b(ypes)25 b(of)g Fo(Engine)p Fr(s)396 4363 + y Fo(Engine)h Fv(ta)o(g)1174 b(description)396 4505 y + Fq(Engine)p Fu(s)23 b(That)i(Store)p 396 4533 3487 4 + v 396 4533 V 396 4650 a Fq(Brick)1414 b Fu(e)o(xplicitly)23 + b(stores)h(all)g(v)n(alues;)g(similar)g(to)g(C)2140 4779 + y(arrays.)396 4921 y Fq(CompressibleBrick)622 b Fu(stores)24 + b(all)h(v)n(alues,)e(reducing)i(storage)2140 5050 y(requirements)f + (when)g(all)h(v)n(alues)f(are)i(identical.)p Black 3732 + 5547 a Fp(116)p Black eop + %%Page: 117 117 + 117 116 bop Black 3111 -132 a Fp(Chapter)25 b(6.)f(Engines)p + Black 396 85 a Fo(Engine)i Fv(ta)o(g)1174 b(description)396 + 226 y Fq(Dynamic)1282 b Fu(is)24 b(a)h(one-dimensional)e + Fq(Brick)h Fu(with)2140 356 y(dynamically)f(resizable)i(domain.)f(This) + g(should)2140 485 y(be)h(used)f(with)g Fq(DynamicArray)p + Fu(,)e(not)2140 615 y Fq(Array)p Fu(.)396 757 y Fq(Engine)p + Fu(s)h(That)i(Compute)p 396 785 3487 4 v 396 785 V 396 + 902 a Fq(CompFwd)1282 b Fu(e)o(xtracts)24 b(speci\002ed)h(components)e + (of)i(an)2140 1031 y(engine')-5 b(s)24 b(v)o(ectors,)g(tensors,)g + (arrays,)h(etc.;)2140 1161 y(usually)e(created)j(using)e(the)g + Fq(comp)g Fu(container)2140 1290 y(function.)396 1432 + y Fq(ConstantFunction)688 b Fu(mak)o(es)24 b(a)h(scalar)h(v)n(alue)e + (beha)n(v)o(e)g(lik)o(e)h(a)2140 1561 y(container)-5 + b(.)396 1703 y Fq(IndexFunction)-169 + b Fu(mak)o(es)24 b(the)h Fq(FunctionObject)p Fu(')-5 + b(s)2140 1832 y(function)24 b(of)h(indices)f(beha)n(v)o(e)g(lik)o(e)h + (a)g(container)-5 b(.)396 1974 y Fq(ExpressionTag)490 + b Fu(e)n(v)n(aluates)23 b(an)i(e)o(xpression)f(tree;)h(usually)2140 + 2104 y(created)g(by)g(data-parallel)g(e)o(xpressions.)396 + 2245 y Fq(Stencil)2140 + 2245 y Fu(applies)f(a)h(stencil)f(computation)2140 2375 + y(\()p Fq(Function)p Fu(\))f(to)h(its)g(input)2140 2504 + y(\()p Fq(Expression)p Fu(\))f(which)h(is)g(usually)g(a)2140 + 2634 y(container;)g(usually)g(created)h(by)g(applying)e(a)2140 + 2763 y Fq(Stencil)g Fu(object)h(to)h(a)g(container)-5 + b(.)24 b(A)h(stencil)2140 2893 y(computation)e(can)i(use)g(multiple)e + (neighboring)2140 3022 y(input)g(v)n(alues.)396 3164 + y Fq(UserFunctionEngine)2140 + 3164 y Fu(applies)h(the)h(gi)n(v)o(en)e(function)h(\(or)h + Fp(function)2140 3294 y(object)r Fu(\))e(to)h(its)g(input)f(\()p + Fq(Expression)p Fu(\))f(which)2140 3423 y(is)i(usually)g(a)h + (container;)f(usually)g(created)i(by)2140 3553 y(applying)d(a)i + Fq(UserFunction)d Fu(object)j(to)f(a)2140 3682 y(container)-5 + b(.)24 b(The)h(function)f(implements)e(a)2140 3812 y(one-to-one)i + (mapping)g(from)g(its)g(input)g(to)2140 3941 y(v)n(alues.)396 + 4083 y Fq(Engine)p Fu(s)f(for)j(Distrib)n(uted)d(Computation)p + 396 4111 V 396 4111 V 396 4228 a Fq(MultiPatch) + -301 b Fu(runs)24 b(a)h(separate)h Fq(EngineTag)c(Engine)2140 + 4357 y Fu(on)i(each)i(conte)o(xt)d(\(patch\))i(speci\002ed)h(by)e(the) + 2140 4487 y(gi)n(v)o(en)f(layout.)h(This)g(is)g(the)h(usual)f + Fq(Engine)2140 4616 y Fu(for)h(distrib)n(uted)e(computation.)396 + 4758 y Fq(Remote)622 b Fu(runs)24 b(the)h + Fq(Engine)e Fu(speci\002ed)i(by)2140 4887 y Fq(EngineTag)d + Fu(on)j(a)g(speci\002ed)g(conte)o(xt.)p Black 3730 5547 + a Fp(117)p Black eop + %%Page: 118 118 + 118 117 bop Black 3111 -132 a Fp(Chapter)25 b(6.)f(Engines)p + Black 396 85 a Fo(Engine)i Fv(ta)o(g)1174 b(description)396 + 226 y Fq(Remote)754 b Fu(runs)24 b(a)h Fq(Dynamic)f + Fu(one-dimensional,)2140 356 y(resizable)h Fq(Engine)e + Fu(on)i(a)g(speci\002ed)g(conte)o(xt.)2140 485 y(This)f(is)g(a)h + (specialization)f(of)h Fq(Remote)p Fu(.)396 714 y Fj(Brick)49 + b(Engine)p Fp(s)c Fu(e)o(xplicitly)f(store)j(v)n(alues)e(just)h(lik)o + (e)g(C)h(arrays.)f Fq(Compressible-)396 844 y(Brick)32 + b(Engine)p Fu(s)f(optimize)h(their)g(storage)h(requirements)f(when)g + (all)h(v)n(alues)f(are)h(identical.)396 973 y(Man)o(y)f + Fq(Array)p Fu(s)g(use)h(one)g(of)g(these)g(tw)o(o)f Fq(Engine)p + Fu(s.)g Fq(Brick)p Fu(s)f(are)j(the)f(def)o(ault)g Fq(Engine)p + Fu(s)396 1103 y(for)f Fq(Array)f Fu(and)h Fq(Field)e + Fu(containers)i(because)g(the)o(y)f(e)o(xplicitly)e(store)j(each)g(v)n + (alue.)f(This)g(e)o(x-)396 1233 y(plicit)k(storage)h(can)h(require)f(a) + g(lar)n(ge)h(amount)e(of)h(space,)g(particularly)g(if)g(all)f(these)h + (v)n(alues)g(are)396 1362 y(the)k(same.)f(If)h(all)f(a)h(compressible)f + (brick)g Fq(Engine)p Fu(')-5 b(s)38 b(v)n(alues)g(are)j(identical,)d + (the)i Fq(Engine)396 1492 y Fu(stores)31 b(that)g(one)h(v)n(alue)e + (rather)i(than)f(man)o(y)-6 b(,)30 b(man)o(y)h(copies)g(of)g(the)g + (same)h(v)n(alue.)e(These)i(engines)396 1621 y(can)e(both)e(sa)n(v)o(e) + g(time)h(as)g(well)f(as)h(space.)h(Initializing)d(a)i(compressible)f + (engine)h(requires)f(setting)396 1751 y(only)h(one)g(v)n(alue,)f(not)g + (e)n(v)o(ery)h(v)n(alue.)f(Using)g(less)h(storage)g(space)g(may)g(also) + g(permit)f(more)h(useful)396 1880 y(v)n(alues)f(to)h(be)g(stored)f(in)h + (cache,)g(impro)o(ving)e(cache)j(performance.)f(Reading)g(a)g(v)n(alue) + g(in)f(a)h(com-)396 2010 y(pressed)j Fq(Engine)f Fu(using)g(the)g + Fq(read)h Fu(member)f(function)g(is)h(as)g(f)o(ast)g(as)g(reading)g(a)g + (v)n(alue)f(in)h(a)396 2139 y Fq(Brick)23 b(Engine)p + Fu(,)f(b)n(ut)i(writing)e(a)i(v)n(alue)g(al)o(w)o(ays)f(requires)h(e)o + (x)o(ecuting)e(an)i(additional)f Fq(if)g Fu(con-)396 + 2269 y(ditional.)28 b(Thus,)h(if)g(an)g Fq(Engine)f Fu(infrequently)g + (has)i(multiple)d(dif)n(ferent)i(v)n(alues)f(during)h(its)f(life)396 + 2398 y(time,)f(a)h Fq(CompressibleBrick)c(Engine)i Fu(may)i(be)g(f)o + (aster)g(than)f(a)h Fq(Brick)f(Engine)p Fu(.)396 2528 + y(If)k(an)g Fq(Engine)e Fu(is)h(created)h(and)g(its)e(v)n(alues)h(are)h + (mostly)e(read,)i(not)f(written,)g(a)g Fq(Compress-)396 + 2657 y(ibleBrick)h(Engine)h Fu(may)h(also)g(be)h(f)o(aster)-5 + b(.)33 b(Otherwise,)f(a)i Fq(Brick)e(Engine)g Fu(may)h(be)396 + 2787 y(preferable.)i(T)m(iming)d(the)h(same)h(program)g(using)e(the)i + (tw)o(o)f(dif)n(ferent)h Fq(Engine)e Fu(types)i(will)f(re-)396 + 2916 y(v)o(eal)22 b(which)g(is)g(f)o(aster)h(for)g(a)g(particular)f + (situation.)f(In)h(distrib)n(uted)f(computing,)f(man)o(y)i + Fq(Engine)p Fu(s)396 3046 y(may)h(ha)n(v)o(e)h(fe)n(w)f(nonzero)h(v)n + (alues)f(so)g Fq(CompressibleBrick)c(Engine)p Fu(s)j(may)h(be)h(prefer) + n(-)396 3175 y(able.)34 b(F)o(or)g(distrib)n(uted)f(computing,)f(a)j + (container')-5 b(s)33 b(domain)g(is)h(partitioned)e(into)i(re)o(gions)f + (each)396 3305 y(computed)27 b(by)h(a)h(separate)g(processor)f(and)g + Fq(Engine)p Fu(.)f(If)h(the)g(computation)f(is)g(concentrated)i(in)396 + 3434 y(sections)i(of)i(the)f(domain,)f(man)o(y)g Fq(Engine)p + Fu(s)f(may)i(ha)n(v)o(e)g(fe)n(w)-6 b(,)32 b(if)g(an)o(y)-6 + b(,)31 b(nonzero)h(v)n(alues.)f(Thus,)396 3564 y Fq(CompressibleBrick) + 21 b(Engine)p Fu(s)i(may)i(be)g(preferable)g(for)g(distrib)n(uted)e + (computing.)396 3743 y(Both)35 b Fq(Brick)g Fu(and)g + Fq(CompressibleBrick)c(Engine)p Fu(s)j(ha)n(v)o(e)h Fq(read)f + Fu(and)i Fq(opera-)396 3873 y(tor\(\))e Fu(member)h(functions)f(taking) + h Fq(int)g Fu(and)g Fq(Loc)f Fu(parameters.)i(The)f(parameters)g + (should)396 4002 y(match)e(the)f Fq(Array)p Fu(')-5 b(s)32 + b(dimensionality)-6 b(.)29 b(F)o(or)k(e)o(xample,)f(if)h + Fq(Array)f(a)g Fu(has)h(dimensionality)d(3,)396 4132 + y Fq(a.read\(int,)63 b(int,)i(int\))30 b Fu(and)i Fq(a\(int,)64 + b(int,)h(int\))30 b Fu(should)g(be)h(used.)g(The)396 + 4261 y(former)51 b(returns)f(a)h(v)n(alue)e(that)h(cannot)h(be)f + (modi\002ed,)g(while)g(the)g(latter)g(can)h(be)f(changed.)396 + 4391 y(Using)44 b(the)g Fq(read)g Fu(member)g(function)g(can)h(lead)g + (to)f(f)o(aster)h(code.)g(Alternati)n(v)o(ely)-6 b(,)42 + b(an)i(inde)o(x)396 4520 y(can)37 b(be)g(speci\002ed)g(using)e(a)i + Fq(Loc)p Fu(.)f(F)o(or)h(e)o(xample,)e Fq(a.read\(Loc<3>\(1,-2,5\)\))c + Fu(and)396 4650 y Fq(a\(Loc<3>\(1,-2,5\)\))46 b Fu(are)51 + b(equi)n(v)n(alent)d(to)i Fq(a.read\(1,-2,5\)\))c Fu(and)k + Fq(a\(1,-)396 4779 y(2,5\))p Fu(.)396 4959 y(The)29 b + Fq(Dynamic)f(Engine)g Fu(supports)g(changing)g(domain)g(sizes)h(while)g + (a)g(program)g(is)g(e)o(x)o(ecut-)396 5088 y(ing.)g(It)g(is)g + (basically)f(a)i(one-dimensional)d Fq(Brick)p Fu(,)h(e)o(xplicitly)f + (storing)h(v)n(alues,)g(b)n(ut)h(permitting)p Black 3734 + 5547 a Fp(118)p Black eop + %%Page: 119 119 + 119 118 bop Black 3111 -132 a Fp(Chapter)25 b(6.)f(Engines)p + Black 396 51 a Fu(the)32 b(number)g(and)g(order)h(of)f(stored)g(v)n + (alues)f(to)h(change.)g(Thus,)g(it)g(supports)f(the)h(same)g(interf)o + (ace)396 180 y(as)25 b Fq(Brick)e Fu(e)o(xcept)i(that)f(all)g(member)g + (functions)g(are)h(restricted)g(to)f(their)g(one-dimensional)f(v)o(er)n + (-)396 310 y(sions.)j(F)o(or)g(e)o(xample,)g Fq(read)g + Fu(and)g Fq(operator\(\))e Fu(tak)o(e)j Fq(Loc<1>)e Fu(or)i(one)g + Fq(int)e Fu(parameter)-5 b(.)396 439 y(In)35 b(addition,)f(the)h + (one-dimensional)e(domain)h(can)h(be)g(dynamically)f(resized)h(using)f + Fq(create)396 569 y Fu(and)25 b Fq(destroy)p Fu(.)p Black + 3734 5547 a Fp(119)p Black eop + %%Page: 120 120 + 120 119 bop Black Black -2 119 a Fy(Chapter)58 b(7.)f(Data-P)-6 + b(arallel)58 b(Expressions)396 416 y Fu(In)33 b(the)f(pre)n(vious)f + (chapters,)h(we)h(accessed)f(container)h(v)n(alues)e(one)h(at)h(a)f + (time.)g(Accessing)f(more)396 545 y(than)21 b(one)h(v)n(alue)e(in)h(a)h + (container)f(required)h(a)f(writing)g(an)g(e)o(xplicit)f(loop.)h + (Scientists)f(and)h(engineers)396 675 y(commonly)k(operate)i(on)f(sets) + g(of)h(v)n(alues,)f(treated)g(as)h(an)g(aggre)o(gate.)f(F)o(or)g(e)o + (xample,)g(a)h(v)o(ector)f(is)g(a)396 804 y(one-dimension)i(collection) + h(of)g(data)h(and)g(tw)o(o)f(v)o(ectors)g(can)h(be)f(added)h(together) + -5 b(.)28 b(A)i(matrix)f(is)g(a)396 934 y(tw)o(o-dimensional)22 + b(collection)h(of)g(data,)h(and)g(a)g(scalar)g(and)g(a)g(matrix)f(can)h + (be)g(multiplied.)d(A)j Fp(data-)396 1064 y(par)o(allel)36 + b(e)n(xpr)l(ession)h Fu(simultaneously)e(uses)i(multiple)e(container)j + (v)n(alues.)e(POOMA)i(supports)396 1193 y(data-parallel)25 + b(e)o(xpressions.)396 1372 y(After)19 b(introducing)f(data-parallel)h + (e)o(xpressions)e(and)i(statements,)f(we)h(present)f(the)h + (corresponding)396 1502 y(POOMA)30 b(syntax.)g(Then)g(we)g(present)g + (its)g(implementation,)e(which)h(uses)h(e)o(xpression-template)396 + 1631 y(technology)-6 b(.)30 b(A)i(na\357v)o(e)f(data-parallel)h + (implementation)d(might)i(generate)h(temporary)f(v)n(ariables,)396 + 1761 y(cluttering)38 b(a)i(program')-5 b(s)38 b(inner)h(loops)f(and)h + (slo)n(wing)f(its)g(e)o(x)o(ecution.)g(Instead,)h(POOMA)g(uses)396 + 1890 y(PETE,)c(the)g(Portable)g(Expression)e(T)-7 b(emplate)35 + b(Engine.)f(Using)g(e)o(xpression)f(templates,)h(it)g(con-)396 + 2020 y(structs)27 b(a)g(parse)g(tree)h(of)f(e)o(xpressions)e(and)j + (corresponding)e(types,)g(which)h(is)f(then)h(quickly)f(e)n(v)n(al-)396 + 2149 y(uated)f(without)e(the)i(need)g(for)g(temporary)f(v)n(ariables.) + -2 2602 y Fx(7.1.)47 b(Expressions)f(with)j(More)f(Than)g(One)-2 + 2826 y(Container)g(V)-10 b(alue)396 3041 y Fu(Science)21 + b(and)f(math)f(is)g(\002lled)g(with)g(aggre)o(gated)g(v)n(alues.)g(A)h + (v)o(ector)f(contains)g(se)n(v)o(eral)g(components,)396 + 3171 y(and)k(a)f(matrix)g(is)g(a)g(tw)o(o-dimensional)f(object.)g + (Operations)h(on)g(indi)n(vidual)e(v)n(alues)i(are)h(frequently)396 + 3300 y(e)o(xtended)37 b(to)h(operations)f(on)h(these)f(aggre)o(gated)g + (v)n(alues.)g(F)o(or)h(e)o(xample,)f(tw)o(o)h(v)o(ectors)f(ha)n(ving) + 396 3430 y(the)e(same)f(length)f(are)i(added)g(by)f(adding)g + (corresponding)f(components.)g(The)h(product)g(of)h(tw)o(o)396 + 3559 y(matrices)g(is)f(de\002ned)h(in)g(terms)f(of)h(sums)e(and)i + (products)f(on)h(its)f(components.)f(The)i(sine)f(of)h(an)396 + 3689 y(array)26 b(is)e(an)h(array)h(containing)d(the)i(sine)f(of)h(e)n + (v)o(ery)f(v)n(alue)h(in)f(it.)396 3868 y(A)40 b Fp(data-par)o(allel)e + (e)n(xpr)l(ession)h Fu(simultaneously)f(refers)j(to)f(multiple)e + (container)i(v)n(alues.)f(Data-)396 3998 y(parallel)29 + b(statements,)f(i.e.,)i(statements)e(using)g(data-parallel)h(e)o + (xpressions,)f(frequently)h(occur)h(in)396 4127 y(scienti\002c)25 + b(programs.)f(F)o(or)g(e)o(xample,)g(the)h(sum)e(of)i(tw)o(o)f(v)o + (ectors)g(v)h(and)g(w)f(is)h(written)f(as)g(v+w)-6 b(.)24 + b(Al-)396 4257 y(gorithms)d(frequently)h(use)g(data-parallel)h(syntax.) + e(Consider)l(,)h(for)h(e)o(xample,)e(computing)g(the)h(total)396 + 4386 y(ener)n(gy)31 b(E)f(as)h(the)f(sum)f(of)i(kinetic)e(ener)n(gy)i + (K)f(and)g(potential)f(ener)n(gy)i(U.)f(F)o(or)h(a)f(simple)f(particle) + 396 4516 y(subject)j(to)f(the)h(earth')-5 b(s)32 b(gra)n(vity)-6 + b(,)31 b(the)h(kinetic)g(ener)n(gy)g(K)g(equals)g(mv)2881 + 4476 y Fe(2)2910 4516 y Fu(/2,)g(and)g(the)g(potential)f(en-)396 + 4645 y(er)n(gy)23 b(U)f(equals)g(mgh.)f(These)h(formulae)g(apply)g(to)g + (both)f(an)i(indi)n(vidual)c(particle)j(with)g(a)g(particular)396 + 4775 y(mass)h(m)h(and)f(height)g(h)h(and)g(to)f(an)h(entire)g(\002eld)g + (of)g(particles)f(with)g(masses)g(m)g(and)h(heights)f(h.)g(Our)396 + 4904 y(algorithm)e(w)o(orks)h(with)f(data-parallel)h(syntax,)f(and)h + (we)h(w)o(ould)e(lik)o(e)h(to)f(write)h(the)g(corresponding)396 + 5034 y(computer)i(program)h(using)f(data-parallel)h(syntax)f(as)g + (well.)p Black 3734 5547 a Fp(120)p Black eop + %%Page: 121 121 + 121 120 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black -2 93 a Fx(7.2.)47 + b(Using)h(Data-P)-5 b(arallel)46 b(Expressions)396 309 + y Fu(POOMA)29 b(containers)f(can)h(be)f(used)h(in)f(data-parallel)g(e)o + (xpressions)f(and)i(statements.)e(The)h(basic)396 439 + y(guidelines)c(are)h(simple:)p Black 396 826 a Fs(\225)p + Black 72 w Fu(The)h(C++)i(b)n(uilt-in)d(and)h(mathematical)f(operators) + i(operate)f(on)h(an)f(entire)h(container)f(by)g(oper)n(-)496 + 956 y(ating)e(element-wise)g(on)h(its)f(v)n(alues.)p + Black 396 1135 a Fs(\225)p Black 72 w Fu(Binary)g(operators)f(operate)g + (only)g(on)g(containers)g(with)g(the)g(same)g(domain)f(types)h(and)g + (by)g(com-)496 1265 y(bining)h(v)n(alues)h(with)g(the)g(same)h + (indices.)e(If)i(the)g(result)f(is)g(a)h(container)l(,)f(it)g(has)h(a)g + (domain)e(equal)496 1394 y(to)g(the)h(left)g(operand')-5 + b(s)24 b(domain.)p Black 396 1574 a Fs(\225)p Black 72 + w Fu(F)o(or)g(assignment)f(operators,)i(the)f(domains)f(of)i(the)f + (left)h(operand)f(and)h(the)f(right)g(operand)g(must)496 + 1703 y(ha)n(v)o(e)g(the)h(same)g(type)f(and)h(be)g(conformable,)f + (i.e.,)h(ha)n(v)o(e)f(the)h(\223same)g(shape\224.)396 + 1882 y(The)h(data-parallel)g(operators)g(operate)g(element-wise)g(on)f + (containers')h(v)n(alues.)f(F)o(or)h(e)o(xample,)f(if)396 + 2012 y Fq(A)33 b Fu(is)g(a)g(one-dimensional)f(array)-6 + b(,)33 b Fq(-)p Fa(A)g Fu(is)g(a)g(one-dimensional)e(array)j(with)f + (the)g(same)f(size)i(such)396 2141 y(that)29 b(the)f(v)n(alue)h(at)g + (the)g(i)1248 2102 y Fe(th)1323 2141 y Fu(position)e(equals)h(-A\(i\).) + i(If)f Fq(A)g Fu(and)g Fq(B)f Fu(are)i(tw)o(o-dimensional)d + Fq(Array)p Fu(s)396 2271 y(on)c(the)h(same)f(domain,)f + Fa(A)p Fq(+)p Fa(B)i Fu(is)f(an)h(array)g(on)f(the)g(same)h(domain)e + (with)h(v)n(alues)f(equaling)h(the)g(sum)396 2400 y(of)i(corresponding) + f(v)n(alues)g(in)g Fq(A)h Fu(and)g Fq(B)p Fu(.)396 2580 + y(Binary)32 b(operators)f(operate)g(on)g(containers)f(with)h(the)g + (same)f(domain)h(types.)f(The)h(domain')-5 b(s)30 b(in-)396 + 2709 y(dices)e(need)g(not)g(be)g(the)f(same,)h(b)n(ut)f(the)h(result)g + (will)f(ha)n(v)o(e)g(a)i(domain)d(equal)i(to)g(the)g(left)f(operand.) + 396 2839 y(F)o(or)37 b(e)o(xample,)e(the)i(sum)f(of)g(an)h + Fq(Array)f(A)g Fu(with)g(a)h(one-dimensional)d(interv)n(al)i([0,3])h + (and)f(an)396 2968 y Fq(Array)28 b(B)h Fu(with)f(a)h(one-dimensional)f + (interv)n(al)f([1,2])i(is)g(well-de\002ned)g(because)g(both)g(domains) + 396 3098 y(are)35 b(one-dimensional)c(interv)n(als.)i(The)g(result)g + (is)h(an)f Fq(Array)g Fu(with)g(a)h(one-dimensional)d(inter)n(-)396 + 3227 y(v)n(al)i([0,3].)g(Its)g(\002rst)g(and)g(last)g(entries)g(equal)g + Fq(A)p Fu(')-5 b(s)33 b(\002rst)g(and)g(last)g(entries,)g(while)f(its)h + (middle)f(tw)o(o)396 3357 y(entries)e(are)h(the)f(sums)f + Fq(A\(1\)+B\(1\))f Fu(and)i Fq(A\(2\)+B\(2\))p Fu(.)d(W)-8 + b(e)31 b(assume)e(zero)i(is)f(the)g(def)o(ault)396 3486 + y(v)n(alue)k(for)g(the)h(type)e(of)i(v)n(alues)e(stored)h(in)g + Fq(B)p Fu(.)g(A)g(more)g(complicated)f(e)o(xample)h(of)g(adding)g(tw)o + (o)396 3616 y Fq(Array)p Fu(s)f(with)f(dif)n(ferent)i(domains)e(is)h + (illustrated)g(in)g(Figure)h(7-1.)f(Code)h(for)g(these)g + Fq(Array)p Fu(s)396 3745 y(could)25 b(be)635 4054 y Fn(Interval<1>)58 + b(H\(0,2\),)g(I\(1,3\),)g(J\(2,4\);)635 4184 y(Array<2,)g(double,)h + (Brick>)f(A\(I,I\),)g(B\(J,H\);)635 4313 y(//)i(...)f(fill)g(A)g(and)g + (B)h(with)f(values)f(...)635 4443 y(...)h(=)h(A)g(+)f(B;)p + Black 3734 5547 a Fp(121)p Black eop + %%Page: 122 122 + 122 121 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 51 a Fr(Figur)n(e)k(7-1.)e + (Adding)i Fo(Array)p Fr(s)d(with)i(Differ)n(ent)i(Domains)615 + 1187 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 615 1187 a @beginspecial -8 @llx -10 @lly 358 + @urx 112 @ury 3660 @rwi @setspecial + %%BeginDocument: figures/data-parallel.212 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -8 -10 358 112 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Times-Roman Times-Italic cmr10 + /ptmr8r /Times-Roman def + /ptmri8r /Times-Italic def + /cmr10 /cmr10 def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + 0 0.5 dtransform truncate idtransform setlinewidth pop + [3 3 ] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit + newpath 0 0 moveto + 19.84242 0 lineto + 19.84242 19.84242 lineto + 0 19.84242 lineto + closepath stroke + newpath 0 19.84242 moveto + 19.84242 19.84242 lineto + 19.84242 39.68484 lineto + 0 39.68484 lineto + closepath stroke + newpath 0 39.68484 moveto + 19.84242 39.68484 lineto + 19.84242 59.52727 lineto + 0 59.52727 lineto + closepath stroke + newpath 0 59.52727 moveto + 19.84242 59.52727 lineto + 19.84242 79.36969 lineto + 0 79.36969 lineto + closepath stroke + newpath 0 79.36969 moveto + 19.84242 79.36969 lineto + 19.84242 99.21211 lineto + 0 99.21211 lineto + closepath stroke + newpath 19.84242 0 moveto + 39.68484 0 lineto + 39.68484 19.84242 lineto + 19.84242 19.84242 lineto + closepath stroke + newpath 19.84242 19.84242 moveto + 39.68484 19.84242 lineto + 39.68484 39.68484 lineto + 19.84242 39.68484 lineto + closepath stroke + newpath 19.84242 39.68484 moveto + 39.68484 39.68484 lineto + 39.68484 59.52727 lineto + 19.84242 59.52727 lineto + closepath stroke + newpath 19.84242 59.52727 moveto + 39.68484 59.52727 lineto + 39.68484 79.36969 lineto + 19.84242 79.36969 lineto + closepath stroke + newpath 19.84242 79.36969 moveto + 39.68484 79.36969 lineto + 39.68484 99.21211 lineto + 19.84242 99.21211 lineto + closepath stroke + newpath 39.68484 0 moveto + 59.52727 0 lineto + 59.52727 19.84242 lineto + 39.68484 19.84242 lineto + closepath stroke + newpath 39.68484 19.84242 moveto + 59.52727 19.84242 lineto + 59.52727 39.68484 lineto + 39.68484 39.68484 lineto + closepath stroke + newpath 39.68484 39.68484 moveto + 59.52727 39.68484 lineto + 59.52727 59.52727 lineto + 39.68484 59.52727 lineto + closepath stroke + newpath 39.68484 59.52727 moveto + 59.52727 59.52727 lineto + 59.52727 79.36969 lineto + 39.68484 79.36969 lineto + closepath stroke + newpath 39.68484 79.36969 moveto + 59.52727 79.36969 lineto + 59.52727 99.21211 lineto + 39.68484 99.21211 lineto + closepath stroke + newpath 59.52727 0 moveto + 79.36969 0 lineto + 79.36969 19.84242 lineto + 59.52727 19.84242 lineto + closepath stroke + newpath 59.52727 19.84242 moveto + 79.36969 19.84242 lineto + 79.36969 39.68484 lineto + 59.52727 39.68484 lineto + closepath stroke + newpath 59.52727 39.68484 moveto + 79.36969 39.68484 lineto + 79.36969 59.52727 lineto + 59.52727 59.52727 lineto + closepath stroke + newpath 59.52727 59.52727 moveto + 79.36969 59.52727 lineto + 79.36969 79.36969 lineto + 59.52727 79.36969 lineto + closepath stroke + newpath 59.52727 79.36969 moveto + 79.36969 79.36969 lineto + 79.36969 99.21211 lineto + 59.52727 99.21211 lineto + closepath stroke + newpath 79.36969 0 moveto + 99.21211 0 lineto + 99.21211 19.84242 lineto + 79.36969 19.84242 lineto + closepath stroke + newpath 79.36969 19.84242 moveto + 99.21211 19.84242 lineto + 99.21211 39.68484 lineto + 79.36969 39.68484 lineto + closepath stroke + newpath 79.36969 39.68484 moveto + 99.21211 39.68484 lineto + 99.21211 59.52727 lineto + 79.36969 59.52727 lineto + closepath stroke + newpath 79.36969 59.52727 moveto + 99.21211 59.52727 lineto + 99.21211 79.36969 lineto + 79.36969 79.36969 lineto + closepath stroke + newpath 79.36969 79.36969 moveto + 99.21211 79.36969 lineto + 99.21211 99.21211 lineto + 79.36969 99.21211 lineto + closepath stroke + newpath 128.97575 0 moveto + 148.81818 0 lineto + 148.81818 19.84242 lineto + 128.97575 19.84242 lineto + closepath stroke + newpath 128.97575 19.84242 moveto + 148.81818 19.84242 lineto + 148.81818 39.68484 lineto + 128.97575 39.68484 lineto + closepath stroke + newpath 128.97575 39.68484 moveto + 148.81818 39.68484 lineto + 148.81818 59.52727 lineto + 128.97575 59.52727 lineto + closepath stroke + newpath 128.97575 59.52727 moveto + 148.81818 59.52727 lineto + 148.81818 79.36969 lineto + 128.97575 79.36969 lineto + closepath stroke + newpath 128.97575 79.36969 moveto + 148.81818 79.36969 lineto + 148.81818 99.21211 lineto + 128.97575 99.21211 lineto + closepath stroke + newpath 148.81818 0 moveto + 168.6606 0 lineto + 168.6606 19.84242 lineto + 148.81818 19.84242 lineto + closepath stroke + newpath 148.81818 19.84242 moveto + 168.6606 19.84242 lineto + 168.6606 39.68484 lineto + 148.81818 39.68484 lineto + closepath stroke + newpath 148.81818 39.68484 moveto + 168.6606 39.68484 lineto + 168.6606 59.52727 lineto + 148.81818 59.52727 lineto + closepath stroke + newpath 148.81818 59.52727 moveto + 168.6606 59.52727 lineto + 168.6606 79.36969 lineto + 148.81818 79.36969 lineto + closepath stroke + newpath 148.81818 79.36969 moveto + 168.6606 79.36969 lineto + 168.6606 99.21211 lineto + 148.81818 99.21211 lineto + closepath stroke + newpath 168.6606 0 moveto + 188.50302 0 lineto + 188.50302 19.84242 lineto + 168.6606 19.84242 lineto + closepath stroke + newpath 168.6606 19.84242 moveto + 188.50302 19.84242 lineto + 188.50302 39.68484 lineto + 168.6606 39.68484 lineto + closepath stroke + newpath 168.6606 39.68484 moveto + 188.50302 39.68484 lineto + 188.50302 59.52727 lineto + 168.6606 59.52727 lineto + closepath stroke + newpath 168.6606 59.52727 moveto + 188.50302 59.52727 lineto + 188.50302 79.36969 lineto + 168.6606 79.36969 lineto + closepath stroke + newpath 168.6606 79.36969 moveto + 188.50302 79.36969 lineto + 188.50302 99.21211 lineto + 168.6606 99.21211 lineto + closepath stroke + newpath 188.50302 0 moveto + 208.34544 0 lineto + 208.34544 19.84242 lineto + 188.50302 19.84242 lineto + closepath stroke + newpath 188.50302 19.84242 moveto + 208.34544 19.84242 lineto + 208.34544 39.68484 lineto + 188.50302 39.68484 lineto + closepath stroke + newpath 188.50302 39.68484 moveto + 208.34544 39.68484 lineto + 208.34544 59.52727 lineto + 188.50302 59.52727 lineto + closepath stroke + newpath 188.50302 59.52727 moveto + 208.34544 59.52727 lineto + 208.34544 79.36969 lineto + 188.50302 79.36969 lineto + closepath stroke + newpath 188.50302 79.36969 moveto + 208.34544 79.36969 lineto + 208.34544 99.21211 lineto + 188.50302 99.21211 lineto + closepath stroke + newpath 208.34544 0 moveto + 228.18787 0 lineto + 228.18787 19.84242 lineto + 208.34544 19.84242 lineto + closepath stroke + newpath 208.34544 19.84242 moveto + 228.18787 19.84242 lineto + 228.18787 39.68484 lineto + 208.34544 39.68484 lineto + closepath stroke + newpath 208.34544 39.68484 moveto + 228.18787 39.68484 lineto + 228.18787 59.52727 lineto + 208.34544 59.52727 lineto + closepath stroke + newpath 208.34544 59.52727 moveto + 228.18787 59.52727 lineto + 228.18787 79.36969 lineto + 208.34544 79.36969 lineto + closepath stroke + newpath 208.34544 79.36969 moveto + 228.18787 79.36969 lineto + 228.18787 99.21211 lineto + 208.34544 99.21211 lineto + closepath stroke + newpath 257.9515 0 moveto + 277.79393 0 lineto + 277.79393 19.84242 lineto + 257.9515 19.84242 lineto + closepath stroke + newpath 257.9515 19.84242 moveto + 277.79393 19.84242 lineto + 277.79393 39.68484 lineto + 257.9515 39.68484 lineto + closepath stroke + newpath 257.9515 39.68484 moveto + 277.79393 39.68484 lineto + 277.79393 59.52727 lineto + 257.9515 59.52727 lineto + closepath stroke + newpath 257.9515 59.52727 moveto + 277.79393 59.52727 lineto + 277.79393 79.36969 lineto + 257.9515 79.36969 lineto + closepath stroke + newpath 257.9515 79.36969 moveto + 277.79393 79.36969 lineto + 277.79393 99.21211 lineto + 257.9515 99.21211 lineto + closepath stroke + newpath 277.79393 0 moveto + 297.63635 0 lineto + 297.63635 19.84242 lineto + 277.79393 19.84242 lineto + closepath stroke + newpath 277.79393 19.84242 moveto + 297.63635 19.84242 lineto + 297.63635 39.68484 lineto + 277.79393 39.68484 lineto + closepath stroke + newpath 277.79393 39.68484 moveto + 297.63635 39.68484 lineto + 297.63635 59.52727 lineto + 277.79393 59.52727 lineto + closepath stroke + newpath 277.79393 59.52727 moveto + 297.63635 59.52727 lineto + 297.63635 79.36969 lineto + 277.79393 79.36969 lineto + closepath stroke + newpath 277.79393 79.36969 moveto + 297.63635 79.36969 lineto + 297.63635 99.21211 lineto + 277.79393 99.21211 lineto + closepath stroke + newpath 297.63635 0 moveto + 317.47878 0 lineto + 317.47878 19.84242 lineto + 297.63635 19.84242 lineto + closepath stroke + newpath 297.63635 19.84242 moveto + 317.47878 19.84242 lineto + 317.47878 39.68484 lineto + 297.63635 39.68484 lineto + closepath stroke + newpath 297.63635 39.68484 moveto + 317.47878 39.68484 lineto + 317.47878 59.52727 lineto + 297.63635 59.52727 lineto + closepath stroke + newpath 297.63635 59.52727 moveto + 317.47878 59.52727 lineto + 317.47878 79.36969 lineto + 297.63635 79.36969 lineto + closepath stroke + newpath 297.63635 79.36969 moveto + 317.47878 79.36969 lineto + 317.47878 99.21211 lineto + 297.63635 99.21211 lineto + closepath stroke + newpath 317.47878 0 moveto + 337.3212 0 lineto + 337.3212 19.84242 lineto + 317.47878 19.84242 lineto + closepath stroke + newpath 317.47878 19.84242 moveto + 337.3212 19.84242 lineto + 337.3212 39.68484 lineto + 317.47878 39.68484 lineto + closepath stroke + newpath 317.47878 39.68484 moveto + 337.3212 39.68484 lineto + 337.3212 59.52727 lineto + 317.47878 59.52727 lineto + closepath stroke + newpath 317.47878 59.52727 moveto + 337.3212 59.52727 lineto + 337.3212 79.36969 lineto + 317.47878 79.36969 lineto + closepath stroke + newpath 317.47878 79.36969 moveto + 337.3212 79.36969 lineto + 337.3212 99.21211 lineto + 317.47878 99.21211 lineto + closepath stroke + newpath 337.3212 0 moveto + 357.16362 0 lineto + 357.16362 19.84242 lineto + 337.3212 19.84242 lineto + closepath stroke + newpath 337.3212 19.84242 moveto + 357.16362 19.84242 lineto + 357.16362 39.68484 lineto + 337.3212 39.68484 lineto + closepath stroke + newpath 337.3212 39.68484 moveto + 357.16362 39.68484 lineto + 357.16362 59.52727 lineto + 337.3212 59.52727 lineto + closepath stroke + newpath 337.3212 59.52727 moveto + 357.16362 59.52727 lineto + 357.16362 79.36969 lineto + 337.3212 79.36969 lineto + closepath stroke + newpath 337.3212 79.36969 moveto + 357.16362 79.36969 lineto + 357.16362 99.21211 lineto + 337.3212 99.21211 lineto + closepath stroke + [] 0 setdash + newpath 19.84242 19.84242 moveto + 39.68484 19.84242 lineto + 39.68484 39.68484 lineto + 19.84242 39.68484 lineto + closepath stroke + newpath 19.84242 39.68484 moveto + 39.68484 39.68484 lineto + 39.68484 59.52727 lineto + 19.84242 59.52727 lineto + closepath stroke + newpath 19.84242 59.52727 moveto + 39.68484 59.52727 lineto + 39.68484 79.36969 lineto + 19.84242 79.36969 lineto + closepath stroke + newpath 39.68484 19.84242 moveto + 59.52727 19.84242 lineto + 59.52727 39.68484 lineto + 39.68484 39.68484 lineto + closepath stroke + newpath 39.68484 39.68484 moveto + 59.52727 39.68484 lineto + 59.52727 59.52727 lineto + 39.68484 59.52727 lineto + closepath stroke + newpath 39.68484 59.52727 moveto + 59.52727 59.52727 lineto + 59.52727 79.36969 lineto + 39.68484 79.36969 lineto + closepath stroke + newpath 59.52727 19.84242 moveto + 79.36969 19.84242 lineto + 79.36969 39.68484 lineto + 59.52727 39.68484 lineto + closepath stroke + newpath 59.52727 39.68484 moveto + 79.36969 39.68484 lineto + 79.36969 59.52727 lineto + 59.52727 59.52727 lineto + closepath stroke + newpath 59.52727 59.52727 moveto + 79.36969 59.52727 lineto + 79.36969 79.36969 lineto + 59.52727 79.36969 lineto + closepath stroke + newpath 148.81818 19.84242 moveto + 168.6606 19.84242 lineto + 168.6606 39.68484 lineto + 148.81818 39.68484 lineto + closepath stroke + newpath 148.81818 39.68484 moveto + 168.6606 39.68484 lineto + 168.6606 59.52727 lineto + 148.81818 59.52727 lineto + closepath stroke + newpath 148.81818 59.52727 moveto + 168.6606 59.52727 lineto + 168.6606 79.36969 lineto + 148.81818 79.36969 lineto + closepath stroke + newpath 168.6606 19.84242 moveto + 188.50302 19.84242 lineto + 188.50302 39.68484 lineto + 168.6606 39.68484 lineto + closepath stroke + newpath 168.6606 39.68484 moveto + 188.50302 39.68484 lineto + 188.50302 59.52727 lineto + 168.6606 59.52727 lineto + closepath stroke + newpath 168.6606 59.52727 moveto + 188.50302 59.52727 lineto + 188.50302 79.36969 lineto + 168.6606 79.36969 lineto + closepath stroke + newpath 188.50302 19.84242 moveto + 208.34544 19.84242 lineto + 208.34544 39.68484 lineto + 188.50302 39.68484 lineto + closepath stroke + newpath 188.50302 39.68484 moveto + 208.34544 39.68484 lineto + 208.34544 59.52727 lineto + 188.50302 59.52727 lineto + closepath stroke + newpath 188.50302 59.52727 moveto + 208.34544 59.52727 lineto + 208.34544 79.36969 lineto + 188.50302 79.36969 lineto + closepath stroke + newpath 297.63635 0 moveto + 317.47878 0 lineto + 317.47878 19.84242 lineto + 297.63635 19.84242 lineto + closepath stroke + newpath 297.63635 19.84242 moveto + 317.47878 19.84242 lineto + 317.47878 39.68484 lineto + 297.63635 39.68484 lineto + closepath stroke + newpath 297.63635 39.68484 moveto + 317.47878 39.68484 lineto + 317.47878 59.52727 lineto + 297.63635 59.52727 lineto + closepath stroke + newpath 317.47878 0 moveto + 337.3212 0 lineto + 337.3212 19.84242 lineto + 317.47878 19.84242 lineto + closepath stroke + newpath 317.47878 19.84242 moveto + 337.3212 19.84242 lineto + 337.3212 39.68484 lineto + 317.47878 39.68484 lineto + closepath stroke + newpath 317.47878 39.68484 moveto + 337.3212 39.68484 lineto + 337.3212 59.52727 lineto + 317.47878 59.52727 lineto + closepath stroke + newpath 337.3212 0 moveto + 357.16362 0 lineto + 357.16362 19.84242 lineto + 337.3212 19.84242 lineto + closepath stroke + newpath 337.3212 19.84242 moveto + 357.16362 19.84242 lineto + 357.16362 39.68484 lineto + 337.3212 39.68484 lineto + closepath stroke + newpath 337.3212 39.68484 moveto + 357.16362 39.68484 lineto + 357.16362 59.52727 lineto + 337.3212 59.52727 lineto + closepath stroke + 107.74608 47.2987 moveto + (=) ptmr8r 11.95514 fshow + 236.72183 46.59937 moveto + (+) ptmr8r 11.95514 fshow + 7.43057 -9.7944 moveto + (0) ptmr8r 9.96265 fshow + 27.273 -9.7944 moveto + (1) ptmr8r 9.96265 fshow + 47.11542 -9.7944 moveto + (2) ptmr8r 9.96265 fshow + 66.95784 -9.7944 moveto + (3) ptmr8r 9.96265 fshow + 86.80026 -9.7944 moveto + (4) ptmr8r 9.96265 fshow + -7.9813 6.59372 moveto + (0) ptmr8r 9.96265 fshow + -7.9813 26.36644 moveto + (1) ptmr8r 9.96265 fshow + -7.9813 46.20886 moveto + (2) ptmr8r 9.96265 fshow + -7.9813 66.12099 moveto + (3) ptmr8r 9.96265 fshow + -7.9813 85.8937 moveto + (4) ptmr8r 9.96265 fshow + 136.40633 -9.7944 moveto + (0) ptmr8r 9.96265 fshow + 156.24875 -9.7944 moveto + (1) ptmr8r 9.96265 fshow + 176.09117 -9.7944 moveto + (2) ptmr8r 9.96265 fshow + 195.9336 -9.7944 moveto + (3) ptmr8r 9.96265 fshow + 215.77602 -9.7944 moveto + (4) ptmr8r 9.96265 fshow + 120.99446 6.59372 moveto + (0) ptmr8r 9.96265 fshow + 120.99446 26.36644 moveto + (1) ptmr8r 9.96265 fshow + 120.99446 46.20886 moveto + (2) ptmr8r 9.96265 fshow + 120.99446 66.12099 moveto + (3) ptmr8r 9.96265 fshow + 120.99446 85.8937 moveto + (4) ptmr8r 9.96265 fshow + 265.38208 -9.7944 moveto + (0) ptmr8r 9.96265 fshow + 285.2245 -9.7944 moveto + (1) ptmr8r 9.96265 fshow + 305.06693 -9.7944 moveto + (2) ptmr8r 9.96265 fshow + 324.90935 -9.7944 moveto + (3) ptmr8r 9.96265 fshow + 344.75177 -9.7944 moveto + (4) ptmr8r 9.96265 fshow + 249.97021 6.59372 moveto + (0) ptmr8r 9.96265 fshow + 249.97021 26.36644 moveto + (1) ptmr8r 9.96265 fshow + 249.97021 46.20886 moveto + (2) ptmr8r 9.96265 fshow + 249.97021 66.12099 moveto + (3) ptmr8r 9.96265 fshow + 249.97021 85.8937 moveto + (4) ptmr8r 9.96265 fshow + 155.7506 25.81848 moveto + (9) ptmr8r 11.95514 fshow + 172.60422 25.68698 moveto + (11) ptmr8r 11.95514 fshow + 192.44664 25.77063 moveto + (13) ptmr8r 11.95514 fshow + 152.7618 45.5742 moveto + (17) ptmr8r 11.95514 fshow + 172.60422 45.6609 moveto + (19) ptmr8r 11.95514 fshow + 192.44664 45.5294 moveto + (21) ptmr8r 11.95514 fshow + 152.7618 65.45547 moveto + (25) ptmr8r 11.95514 fshow + 172.60422 65.41663 moveto + (27) ptmr8r 11.95514 fshow + 192.44664 65.50333 moveto + (29) ptmr8r 11.95514 fshow + 304.56877 5.9282 moveto + (3) ptmr8r 11.95514 fshow + 324.4112 5.9282 moveto + (5) ptmr8r 11.95514 fshow + 344.25362 5.97302 moveto + (7) ptmr8r 11.95514 fshow + 301.57997 25.68698 moveto + (11) ptmr8r 11.95514 fshow + 321.4224 25.77063 moveto + (13) ptmr8r 11.95514 fshow + 341.26482 25.77063 moveto + (15) ptmr8r 11.95514 fshow + 301.57997 45.6609 moveto + (19) ptmr8r 11.95514 fshow + 321.4224 45.5294 moveto + (21) ptmr8r 11.95514 fshow + 341.26482 45.61305 moveto + (23) ptmr8r 11.95514 fshow + 26.77484 25.81848 moveto + (9) ptmr8r 11.95514 fshow + 43.62846 25.68698 moveto + (22) ptmr8r 11.95514 fshow + 63.47089 25.77063 moveto + (26) ptmr8r 11.95514 fshow + 23.78604 45.5742 moveto + (17) ptmr8r 11.95514 fshow + 43.62846 45.61305 moveto + (38) ptmr8r 11.95514 fshow + 63.47089 45.5294 moveto + (42) ptmr8r 11.95514 fshow + 23.78604 65.45547 moveto + (25) ptmr8r 11.95514 fshow + 43.62846 65.41663 moveto + (27) ptmr8r 11.95514 fshow + 63.47089 65.50333 moveto + (29) ptmr8r 11.95514 fshow + 35.99657 103.18642 moveto + (A) ptmri8r 11.95514 fshow + 44.96156 103.18642 moveto + (+) cmr10 11.95514 fshow + 55.91107 103.18642 moveto + (B) ptmri8r 11.95514 fshow + 174.92952 102.21211 moveto + (A) ptmri8r 11.95514 fshow + 303.90527 102.21211 moveto + (B) ptmri8r 11.95514 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 615 1187 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 615 1187 a 396 1367 a Fu(Adding)d + Fq(Array)p Fu(s)g(with)g(dif)n(ferent)g(domains)g(is)g(supported.)g + (Solid)g(lines)g(indicate)h(the)f(domains')396 1496 y(e)o(xtent.)g(V) + -11 b(alues)25 b(with)f(the)g(same)h(indices)f(are)i(added.)396 + 1775 y(Both)35 b Fq(A)g Fu(and)g Fq(B)g Fu(ha)n(v)o(e)f(domains)g(of)h + (tw)o(o-dimensional)e(interv)n(als)g(so)i(the)o(y)f(may)h(be)g(added,)g + (b)n(ut)396 1905 y(their)e(domains')e(e)o(xtent)h(dif)n(fer)l(,)g(as)h + (indicated)f(by)g(the)g(solid)g(lines)g(in)g(the)g(\002gure.)h(The)g + (sum)e(has)396 2034 y(domain)25 b(equal)g(to)g(the)g(left)g(operand')-5 + b(s)25 b(domain.)f(V)-11 b(alues)25 b(with)g(the)g(same)g(indices)g + (are)h(added.)f(F)o(or)396 2164 y(e)o(xample,)30 b Fq(A\(2,2\))e + Fu(and)i Fq(B\(2,2\))f Fu(are)i(added.)f Fq(B)p Fu(')-5 + b(s)30 b(domain)f(does)h(not)g(include)f(inde)o(x)g(\(1,1\))396 + 2293 y(so,)g(when)g(adding)g Fq(A\(1,1\))f Fu(and)h Fq(B\(1,1\))p + Fu(,)f(the)h(def)o(ault)g(v)n(alue)f(for)i Fq(B)p Fu(')-5 + b(s)28 b(v)n(alue)h(type)g(is)g(used.)396 2423 y(Usually)24 + b(this)g(is)g(0.)h(Thus,)f Fq(A\(1,1\))64 b(+)i(B\(1,1\))23 + b Fu(equals)i Fq(9)65 b(+)h(0)p Fu(.)396 2602 y(Operations)30 + b(with)f(both)h Fq(Array)p Fu(s)f(and)h(scalar)h(v)n(alues)e(are)i + (supported.)e(Conceptually)-6 b(,)29 b(a)i(scalar)396 + 2732 y(v)n(alue)i(can)h(be)f(thought)f(of)i(as)f(an)h + Fq(Array)e Fu(with)h(an)o(y)g(desired)g(domain)f(and)i(ha)n(ving)e(the) + h(same)396 2861 y(v)n(alue)24 b(e)n(v)o(erywhere.)h(F)o(or)g(e)o + (xample,)f(consider)635 3170 y Fn(Array<1,)58 b(double,)h(Brick>)f + (D\(Interval<1>\(7,10\)\);)635 3299 y(D)i(+=)f(2*D)g(+)h(7;)396 + 3559 y Fq(2*D)30 b Fu(obe)o(ys)g(the)g(guidelines)g(because)h(the)f + (scalar)h Fq(2)g Fu(can)g(be)g(thought)e(of)i(as)f(an)h(array)h(with)d + (the)396 3688 y(same)22 b(domain)f(as)h Fq(D)p Fu(.)g(It)g(has)g(the)g + (same)g(v)n(alue)g Fq(2)g Fu(e)n(v)o(erywhere.)g(Lik)o(e)n(wise)f(the)h + (conceptual)f(domain)396 3818 y(for)j(the)g(scalar)h + Fq(7)f Fu(is)f(the)h(same)g(as)g Fq(2*D)p Fu(')-5 b(s)22 + b(domain.)h(Thus,)h Fq(2*D\(i\))64 b(+)h(7)24 b Fu(is)g(added)g(to)f + Fq(D\(i\))396 3947 y Fu(where)n(v)o(er)32 b(inde)o(x)e(i)i(is)f(in)g + Fq(D)p Fu(')-5 b(s)31 b(domain.)g(In)h(practice,)g(the)f(toolkit)f + (does)i(not)f(\002rst)h(con)l(v)o(ert)f(scalar)396 4077 + y(v)n(alues)24 b(to)h(arrays)g(b)n(ut)f(instead)g(uses)h(them)f + (directly)g(in)h(e)o(xpressions.)396 4256 y(Assignments)35 + b(to)h(containers)g(are)h(also)f(supported.)f(The)h(domain)g(types)g + (of)g(the)g(assignment')-5 b(s)396 4385 y(left-hand)32 + b(side)g(and)g(its)g(right-hand)f(side)h(must)f(be)h(the)g(same.)g + (Their)g(indices)g(need)g(not)g(be)g(the)396 4515 y(same,)26 + b(b)n(ut)f(the)o(y)g(must)f(correspond.)i(That)f(is,)g(the)h(domains)e + (must)h(be)h Fp(conformable)p Fu(,)e(or)i(ha)n(v)o(e)f(the)396 + 4644 y(\223same)k(shape\224,)g(i.e.,)g(ha)n(v)o(e)g(the)g(same)f + (number)h(of)g(indices)f(for)i(each)f(dimension.)e(F)o(or)i(e)o + (xample,)396 4774 y(the)f(one-dimensional)f(interv)n(al)g([0,3])h(is)f + (conformable)h(to)g(the)g(one-dimensional)e(interv)n(al)h([1,4])396 + 4903 y(because)g(the)o(y)e(both)h(ha)n(v)o(e)g(the)g(same)g(number)f + (of)i(indices)e(in)h(each)h(dimension.)d(The)i(domains)f(of)396 + 5033 y Fq(A)g Fu(and)g Fq(B)p Fu(,)f(as)h(declared)p + Black 3734 5547 a Fp(122)p Black eop + %%Page: 123 123 + 123 122 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 635 180 a Fn(Interval<1>)58 + b(H\(0,2\),)g(I\(1,3\),)g(J\(2,4\),)g(K\(0,4\);)635 310 + y(Array<2,)g(double,)h(Brick>)f(A\(I,I\),)g(B\(H,J\),)g(C\(I,K\);)396 + 569 y Fu(are)29 b(conformable)f(because)h(each)g(dimension)e(has)h(the) + g(same)g(number)g(of)g(indices.)g Fq(A)g Fu(and)g Fq(C)h + Fu(are)396 698 y(not)39 b(conformable)g(because,)g(while)g(their)g + (\002rst)h(dimensions)d(are)j(conformable,)f(their)g(second)396 + 828 y(dimensions)24 b(are)i(not)e(conformable.)h(It)g(has)h(three)f + (indices)g(while)g(the)g(other)g(has)g(\002)n(v)o(e.)g(W)-8 + b(e)26 b(de\002ne)396 957 y Fp(conformable)e(container)o(s)f + Fu(to)i(be)g(containers)f(with)g(conformable)g(domains.)396 + 1137 y(When)j(assigning)f(to)h(a)h(container)l(,)f(corresponding)f + (container)h(v)n(alues)f(are)i(assigned.)f(\(Since)g(the)396 + 1266 y(left-hand)j(side)f(and)g(the)g(right-hand)g(side)g(are)i + (conformable,)e(corresponding)f(v)n(alues)h(e)o(xist.\))f(In)396 + 1396 y(this)c(code)h(fragment,)635 1705 y Fn(Array<1,)58 + b(double,)h(Brick>)f(A\(Interval<1>\(0,1\)\);)635 1834 + y(Array<1,)g(double,)h(Brick>)f(B\(Interval<1>\(1,2\)\);)635 + 1964 y(A)i(=)f(B;)396 2223 y Fq(A\(0\))24 b Fu(is)h(assigned)f + Fq(B\(1\))f Fu(and)i Fq(A\(1\))f Fu(is)h(assigned)f Fq(B\(2\))p + Fu(.)396 2402 y(Assigning)h(a)i(scalar)g(v)n(alue)f(to)h(an)f + Fq(Array)g Fu(also)g(is)g(supported,)g(b)n(ut)g(assigning)f(an)i + Fq(Array)f Fu(to)g(a)396 2532 y(scalar)20 b(is)f(not.)g(A)g(scalar)h(v) + n(alue)f(is)g(conformable)g(to)g(an)o(y)g(domain)f(because,)i + (conceptually)e(it)h(can)h(be)396 2661 y(vie)n(wed)27 + b(as)g(an)g Fq(Array)e Fu(with)i(an)o(y)f(desired)h(domain)f(and)h(ha)n + (ving)f(the)h(same)f(v)n(alue)h(e)n(v)o(erywhere.)396 + 2791 y(Thus,)h(the)h(assignment)e Fq(B)66 b(=)f(3)29 + b Fu(ensures)g(e)n(v)o(ery)f(v)n(alue)g(in)h Fq(B)g Fu(equals)f(3.)h + (Ev)o(en)f(though)g(a)h(scalar)396 2920 y(v)n(alue)38 + b(is)g(conformable)g(to)g(an)o(y)g Fq(Array)p Fu(,)f(it)h(is)g(not)g + (an)g(l-v)n(alue)g(so)g(it)g(cannot)g(appear)h(on)f(the)396 + 3050 y(left-hand)25 b(side)f(of)h(an)g(assignment.)396 + 3229 y(Data-parallel)i(e)o(xpressions)e(can)j(in)l(v)n(olv)o(e)d + (typical)h(mathematical)g(functions)f(and)i(output)f(opera-)396 + 3358 y(tions.)d(F)o(or)h(e)o(xample,)f Fq(sin\(A\))g + Fu(yields)g(an)h Fq(Array)f Fu(with)g(v)n(alues)g(equal)h(to)g(the)g + (sine)f(of)i(each)f(of)396 3488 y Fq(Array)h(A)p Fu(')-5 + b(s)26 b(v)n(alues.)f Fq(dot\(A,B\))f Fu(has)i(v)n(alues)g(equaling)f + (the)h(dot)f(product)h(of)g(corresponding)396 3618 y(v)n(alues)h(in)h + Fq(Array)p Fu(s)e Fq(A)h Fu(and)h Fq(B)p Fu(.)g(The)f(contents)g(of)h + (an)g(entire)g Fq(Array)e Fu(can)i(be)g(easily)g(printed)f(to)396 + 3747 y(standard)e(output.)e(F)o(or)i(e)o(xample,)f(the)g(program)635 + 4056 y Fn(Array<1,)58 b(double,)h(Brick>)f(A\(Interval<1>\(0,2\)\);)635 + 4185 y(Array<1,)g(double,)h(Brick>)f(B\(Interval<1>\(1,3\)\);)635 + 4315 y(A)i(=)f(1.0;)635 4444 y(B)h(=)f(2.0;)635 4574 + y(std::cout)f(<)6 b(<)59 b(A-B)g(<)6 b(<)59 b(std::endl;)396 + 4833 y Fu(yields)108 b Fq(\(000:002:001\))63 b(=)i(1)h(-1)f(-1)p + Fu(.)42 b(The)h(initial)f Fq(\(000:002:001\))e Fu(indi-)396 + 4962 y(cates)33 b(the)g Fq(Array)p Fu(')-5 b(s)31 b(domain)g(ranges)i + (from)g(0)f(to)g(2)h(with)f(a)h(stride)f(of)h(1.)f(The)h(three)g(v)n + (alues)f(in)396 5092 y Fq(A-B)24 b Fu(follo)n(w)-6 b(.)p + Black 3734 5547 a Fp(123)p Black eop + %%Page: 124 124 + 124 123 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 51 a Fu(The)i(follo)n + (wing)d(four)j(tables)f(list)f(the)i(data-parallel)f(operators)g(that)g + (operate)h(on)f Fq(Array)p Fu(s.)f(T)-8 b(able)396 180 + y(7-1)28 b(lists)f(standard)h(C++)i(operators)e(that)g(can)g(be)h + (applied)e(to)h Fq(Array)p Fu(s)f(and)i(also)e(scalar)i(v)n(alues)396 + 310 y(if)c(appropriate.)f(Each)h(unary)g(operator)f(tak)o(es)h(an)f + Fq(Array)g Fu(parameter)h(and)f(returns)h(an)g Fq(Array)p + Fu(.)396 439 y(The)k(types)e(of)i(the)f(tw)o(o)f Fq(Array)p + Fu(s)g(need)i(not)e(be)i(the)f(same.)g(F)o(or)g(e)o(xample,)f + Fq(!)i Fu(can)f(tak)o(e)h(an)f Fq(Ar-)396 569 y(ray)p + Fu(,)22 b Fq(Array)p Fu(,)f Fq(Array)p Fu(,)g(or)j(an)o(y)f + (other)g(v)n(alue)h(type)f(to)g(which)g Fq(!)396 698 + y Fu(can)j(be)g(applied.)f(The)h(result)f(is)g(an)h Fq(Array)p + Fu(.)d(Each)j(binary)f(operator)h(also)f(returns)g(an)396 + 828 y Fq(Array)p Fu(.)i(When)h(specifying)g(tw)o(o)f + Fq(Array)p Fu(s)g(or)h(an)h Fq(Array)e Fu(and)h(a)g(scalar)h(v)n(alue,) + e(a)i(full)e(set)h(of)396 957 y(operators)f(is)f(supported.)f(When)i + (specifying)e(an)i Fq(Array)e Fu(and)i(a)g Fq(Tensor)p + Fu(,)e Fq(TinyMatrix)p Fu(,)396 1087 y(or)34 b Fq(Vector)p + Fu(,)e(a)i(more)f(limited)g(set)g(of)h(operators)f(is)g(supported.)g(F) + o(or)g(e)o(xample,)g Fq(==)g Fu(can)h(tak)o(e)396 1217 + y(tw)o(o)26 b Fq(Array)p Fu(s,)e(an)i Fq(Array)f Fu(and)h(a)g(scalar)h + (v)n(alue,)e(or)h(a)g(scalar)g(v)n(alue)g(and)g(an)g + Fq(Array)p Fu(.)e(If)j(gi)n(v)o(en)396 1346 y(tw)o(o)g + Fq(Array)p Fu(s,)e(corresponding)i(v)n(alues)f(are)h(used.)g(If)h(an)f + (ar)n(gument)f(is)h(a)g(scalar)h(v)n(alue,)e(its)g(same)396 + 1476 y(v)n(alue)21 b(is)f(the)h(used)f(with)g(each)i + Fq(Array)e Fu(v)n(alue.)g(The)h Fq(+)f Fu(supports)g(the)h(same)f(set)h + (of)g(parameters)g(b)n(ut)396 1605 y(also)i(supports)f(adding)g(an)h + Fq(Array)f Fu(and)h(a)g Fq(Tensor)p Fu(,)e(an)j Fq(Array)d + Fu(and)i(a)h Fq(TinyMatrix)p Fu(,)c(an)396 1735 y Fq(Array)29 + b Fu(and)g(a)h Fq(Vector)p Fu(,)e(a)h Fq(Tensor)f Fu(and)i(an)f + Fq(Array)p Fu(,)f(a)i Fq(TinyMatrix)d Fu(and)i(an)h Fq(Ar-)396 + 1864 y(ray)p Fu(,)e(and)g(a)h Fq(Vector)e Fu(and)h(an)h + Fq(Array)p Fu(.)e(F)o(or)h(these)h(cases,)f(the)h Fq(Array)e + Fu(must)g(ha)n(v)o(e)h(a)h(v)n(alue)396 1994 y(type)c(that)g(can)h(be)g + (added)f(to)g(the)g(other)g(ar)n(gument.)g(F)o(or)h(e)o(xample,)e(a)i + Fq(Vector)e Fu(can)i(be)f(added)h(to)396 2123 y(an)f + Fq(Array)f Fu(of)h Fq(Vector)p Fu(s.)396 2402 y Fr(T)-9 + b(able)26 b(7-1.)e(Operators)h(P)n(ermissible)g(f)n(or)f(Data-P)o + (arallel)g(Expr)n(essions)2140 2639 y Fv(suppor)r(ted)j(operator)o(s) + 396 2780 y Fu(unary)e(operators)1121 b Fq(+)p Fu(,)24 + b Fq(-)p Fu(,)h Fq(~)p Fu(,)f Fq(!)396 2922 y Fu(binary)h(operators)f + (with)g(at)h(least)g(one)f Fq(Array)396 3052 y Fu(and)h(at)g(most)f + (one)g(scalar)i(v)n(alue)2140 2922 y Fq(+)p Fu(,)e Fq(-)p + Fu(,)h Fq(*)p Fu(,)f Fq(/)p Fu(,)h Fq(\045)p Fu(,)g Fq(&)p + Fu(,)f Fq(|)p Fu(,)h Fq(^)p Fu(,)f Fq(<)p Fu(,)h Fq(<=)p + Fu(,)f Fq(>=)p Fu(,)g Fq(>)p Fu(,)h Fq(==)p Fu(,)2140 + 3052 y Fq(!=)p Fu(,)f Fq(&&)p Fu(,)g Fq(||)p Fu(,)h Fq(<)6 + b(<)p Fu(,)24 b Fq(>)11 b(>)396 3196 y Fu(binary)25 b(operators)f(with) + g(at)h(least)g(one)f Fq(Array)396 3325 y Fu(and)h(at)g(most)f(one)g + Fq(Tensor)p Fu(,)396 3455 y Fq(TinyMatrix)p Fu(,)f(or)i + Fq(Vector)2140 3196 y(+)p Fu(,)f Fq(-)p Fu(,)h Fq(*)p + Fu(,)f Fq(/)p Fu(,)h Fq(\045)p Fu(,)g Fq(&)p Fu(,)f Fq(|)p + Fu(,)h Fq(^)p Fu(,)f Fq(==)p Fu(,)h Fq(!=)396 3684 y + Fu(Mathematical)20 b(functions)f(that)h(can)g(be)h(used)f(in)g + (data-parallel)g(e)o(xpressions)f(appear)i(in)f(T)-8 + b(able)20 b(7-2.)396 3813 y(F)o(or)k(e)o(xample,)e(applying)h + Fq(cos)g Fu(to)g(an)h Fq(Array)e Fu(of)i(v)n(alues)f(with)f(type)i + Fq(T)f Fu(yields)g(an)h Fq(Array)e Fu(with)396 3943 y(the)j(same)g + (type.)f(The)h(functions)e(are)j(split)e(into)f(\002)n(v)o(e)i + (sections:)p Black 3734 5547 a Fp(124)p Black eop + %%Page: 125 125 + 125 124 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black Black 396 51 + a Fs(\225)p Black 72 w Fu(trigonometric)h(and)i(hyperbolic)e + (functions,)p Black 396 230 a Fs(\225)p Black 72 w Fu(functions)h + (computing)f(absolute)h(v)n(alues,)g(rounding)f(functions,)h(and)h + (modulus)e(functions,)p Black 396 410 a Fs(\225)p Black + 72 w Fu(functions)h(computing)f(po)n(wers,)h(e)o(xponentiation,)e(and)j + (logarithms,)p Black 396 589 a Fs(\225)p Black 72 w Fu(functions)f(in)l + (v)n(olving)e(comple)o(x)i(numbers,)g(and)p Black 396 + 768 a Fs(\225)p Black 72 w Fu(functions)g(for)h(operating)f(on)g + (matrices)h(and)g(tensors.)396 898 y(Se)n(v)o(eral)i(data-parallel)g + (functions)f(require)h(inclusion)f(of)h(header)g(\002les)g(declaring)g + (their)g(underly-)396 1027 y(ing)c(element-wise)f(function.)g(These)h + (header)h(\002les)f(are)h(listed)e(at)h(the)g(be)o(ginning)e(of)i(each) + h(section.)396 1157 y(F)o(or)34 b(the)f(data-parallel)h(operator)f(to)g + (be)h(applicable,)f(it)g(must)f(operate)i(on)g(the)f + Fq(Array)p Fu(')-5 b(s)32 b(type.)396 1286 y(F)o(or)24 + b(e)o(xample,)f Fq(cos)g Fu(can)h(be)g(applied)f(on)g + Fq(Array)p Fu(s)g(of)g Fq(int)p Fu(,)g Fq(double)p Fu(,)g(and)g(e)n(v)o + (en)g Fq(bool)p Fu(,)g(b)n(ut)396 1416 y(applying)h(on)g + Fq(Array)p Fu(s)g(of)h(pointers)f(is)g(not)g(supported)g(because)h + Fq(cos)g Fu(cannot)f(be)h(called)g(with)f(a)396 1545 + y(pointer)g(ar)n(gument.)396 1725 y(T)-8 b(w)o(o)31 b(functions)f + (deserv)o(e)i(special)f(e)o(xplanation.)e(The)i Fq(PETE_identity)e + Fu(function)h(applies)396 1854 y(the)k(identity)f(operation)h(to)f(the) + h(array)-6 b(.)35 b(That)f(is,)f(the)h(returned)h(array)g(has)f(v)n + (alues)f(equaling)g(the)396 1984 y(ar)n(gument')-5 b(s)35 + b(v)n(alues.)g Fq(pow2)p Fu(,)f Fq(pow3)p Fu(,)h(and)g + Fq(pow4)g Fu(pro)o(vide)g(f)o(ast)g(w)o(ays)h(to)f(compute)g(squares,) + 396 2113 y(cubes,)25 b(and)g(fourth)f(po)n(wers)g(of)h(their)g(ar)n + (guments.)396 2392 y Fr(T)-9 b(able)26 b(7-2.)e(Mathematical)h + (Functions)h(P)n(ermissible)e(f)n(or)h(Data-P)o(arallel)f(Expr)n + (essions)396 2629 y Fv(function)1351 b(eff)o(ect)396 + 2770 y Fu(T)m(rigonometric)23 b(and)i(Hyperbolic)f(Functions)111 + b Fq(#include)64 b()p 396 2799 3487 4 v 396 2799 + V 396 2915 a(Array)g(cos)h(\(const)396 3045 y(Array&)f(A\))2140 + 2915 y Fu(Returns)25 b(the)f(cosines)g(of)h(the)g Fq(Array)p + Fu(')-5 b(s)2140 3045 y(v)n(alues.)396 3187 y Fq(Array)64 + b(sin)h(\(const)396 3316 y(Array&)f(A\))2140 3187 + y Fu(Returns)25 b(the)f(sines)g(of)h(the)g Fq(Array)p + Fu(')-5 b(s)23 b(v)n(alues.)396 3458 y Fq(Array)64 + b(tan)h(\(const)396 3587 y(Array&)f(A\))2140 3458 + y Fu(Returns)25 b(the)f(tangents)g(of)h(the)g Fq(Array)p + Fu(')-5 b(s)2140 3587 y(v)n(alues.)396 3729 y Fq(Array)64 + b(acos)h(\(const)396 3858 y(Array&)f(A\))2140 3729 + y Fu(Returns)25 b(the)f(arc)i(cosines)e(of)h(the)g Fq(Array)p + Fu(')-5 b(s)2140 3858 y(v)n(alues.)396 4000 y Fq(Array)64 + b(asin)h(\(const)396 4130 y(Array&)f(A\))2140 4000 + y Fu(Returns)25 b(the)f(arc)i(sines)e(of)h(the)f Fq(Array)p + Fu(')-5 b(s)2140 4130 y(v)n(alues.)396 4271 y Fq(Array)64 + b(atan)h(\(const)396 4401 y(Array&)f(A\))2140 4271 + y Fu(Returns)25 b(the)f(arc)i(tangents)e(of)h(the)f Fq(Array)p + Fu(')-5 b(s)2140 4401 y(v)n(alues.)396 4542 y Fq(Array)64 + b(atan2)h(\(const)396 4672 y(Array&)f(A,)h(const)396 + 4802 y(Array&)f(B\))2140 4542 y Fu(Computes)24 b(the)g(arc)i + (tangents)e(of)h(the)f(v)n(alues)2140 4672 y(from)g(the)h(di)n(vision)d + (of)j(elements)f(in)h Fq(B)g Fu(by)f(the)2140 4802 y(elements)g(in)g + Fq(A)p Fu(.)h(The)g(resulting)e(v)n(alues)h(are)i(the)2140 + 4931 y(signed)e(angles)g(in)h(the)f(range)h(-)p Fb(\031)k + Fu(to)c Fb(\031)t Fu(,)2140 5061 y(inclusi)n(v)o(e.)p + Black 3734 5547 a Fp(125)p Black eop + %%Page: 126 126 + 126 125 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 85 a Fv(function)1351 + b(eff)o(ect)396 226 y Fq(Array)64 b(atan2)h(\(const)396 + 356 y(Array&)f(A,)h(const)f(T2&)h(r\))2140 226 y + Fu(Computes)24 b(the)g(arc)i(tangents)e(of)h(the)f(v)n(alues)2140 + 356 y(from)g(the)f(di)n(vision)f(of)i Fq(r)g Fu(by)g(the)g(elements)f + (in)h Fq(A)p Fu(.)2140 485 y(The)h(resulting)e(v)n(alues)h(are)i(the)e + (signed)g(angles)2140 615 y(in)g(the)h(range)g(-)p Fb(\031)k + Fu(to)24 b Fb(\031)t Fu(,)h(inclusi)n(v)o(e.)396 757 + y Fq(Array)64 b(atan2)h(\(const)f(T1&)396 886 y(l,)i(const)e + (Array&)f(B\))2140 757 y Fu(Computes)24 b(the)g(arc)i(tangents)e + (of)h(the)f(v)n(alues)2140 886 y(from)g(the)h(di)n(vision)d(of)j + (elements)f(in)h Fq(B)g Fu(by)f Fq(l)p Fu(.)2140 1016 + y(The)h(resulting)e(v)n(alues)h(are)i(the)e(signed)g(angles)2140 + 1145 y(in)g(the)h(range)g(-)p Fb(\031)k Fu(to)24 b Fb(\031)t + Fu(,)h(inclusi)n(v)o(e.)396 1287 y Fq(Array)64 b(cosh)h(\(const)396 + 1416 y(Array&)f(A\))2140 1287 y Fu(Returns)25 b(the)f(hyperbolic)g + (cosines)g(of)h(the)2140 1416 y Fq(Array)p Fu(')-5 b(s)23 + b(v)n(alues.)396 1558 y Fq(Array)64 b(sinh)h(\(const)396 + 1687 y(Array&)f(A\))2140 1558 y Fu(Returns)25 b(the)f(hyperbolic)g + (sines)g(of)h(the)2140 1687 y Fq(Array)p Fu(')-5 b(s)23 + b(v)n(alues.)396 1829 y Fq(Array)64 b(tanh)h(\(const)396 + 1959 y(Array&)f(A\))2140 1829 y Fu(Returns)25 b(the)f(hyperbolic)g + (tangents)g(of)h(the)2140 1959 y Fq(Array)p Fu(')-5 b(s)23 + b(v)n(alues.)396 2100 y(Absolute)h(V)-11 b(alue,)25 b(Rounding,)e(and)i + (Modulus)396 2230 y(Functions)2140 2100 y Fq(#include)64 + b()p 396 2258 3487 4 v 396 2258 V 396 2375 a(Array)g(fabs)h + (\(const)396 2504 y(Array&)f(A\))2140 2375 y Fu(Returns)25 + b(the)f(absolute)g(v)n(alues)g(of)h(the)g(\003oating)2140 + 2504 y(point)e(numbers)h(in)h(the)g Fq(Array)p Fu(.)396 + 2646 y Fq(Array)64 b(ceil)h(\(const)396 2775 y(Array&)f(A\))2140 + 2646 y Fu(F)o(or)25 b(each)g(of)g(the)f Fq(Array)p Fu(')-5 + b(s)24 b(v)n(alues,)f(return)i(the)2140 2775 y(inte)o(ger)f(lar)n(ger)h + (than)g(or)g(equal)f(to)h(it)f(\(as)h(a)2140 2905 y(\003oating)f(point) + g(number\).)396 3047 y Fq(Array)64 b(floor)h(\(const)396 + 3176 y(Array&)f(A\))2140 3047 y Fu(F)o(or)25 b(each)g(of)g(the)f + Fq(Array)p Fu(')-5 b(s)24 b(v)n(alues,)f(return)i(the)2140 + 3176 y(inte)o(ger)f(smaller)g(than)g(or)h(equal)g(to)f(it)h(\(as)g(a) + 2140 3306 y(\003oating)f(point)g(number\).)396 3447 y + Fq(Array)64 b(fmod)h(\(const)396 3577 y(Array&)f(A,)h(const)396 + 3706 y(Array&)f(B\))2140 3447 y Fu(Computes)24 b(the)g + (\003oating-point)g(modulus)2140 3577 y(\(remainder\))h(of)g + Fq(A)p Fu(')-5 b(s)24 b(v)n(alues)g(with)g(the)2140 3706 + y(corresponding)g(v)n(alue)g(in)g Fq(B)p Fu(.)h(The)g(results)f(ha)n(v) + o(e)2140 3836 y(the)g(same)h(signs)f(as)h Fq(A)f Fu(and)h(absolute)f(v) + n(alues)2140 3965 y(less)g(than)h(the)f(absolute)g(v)n(alues)g(of)h + Fq(B)p Fu(.)396 4107 y Fq(Array)64 b(fmod)h(\(const)396 + 4237 y(Array&)f(A,)h(const)f(T2&)h(r\))2140 4107 + y Fu(Computes)24 b(the)g(\003oating-point)g(modulus)2140 + 4237 y(\(remainder\))h(of)g Fq(A)p Fu(')-5 b(s)24 b(v)n(alues)g(with)g + Fq(r)p Fu(.)g(The)2140 4366 y(results)g(ha)n(v)o(e)g(the)h(same)g + (signs)e(as)i Fq(A)g Fu(and)2140 4496 y(absolute)f(v)n(alues)g(less)g + (than)g(the)h(absolute)f(v)n(alue)2140 4625 y(of)h Fq(r)p + Fu(.)p Black 3732 5547 a Fp(126)p Black eop + %%Page: 127 127 + 127 126 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 85 a Fv(function)1351 + b(eff)o(ect)396 226 y Fq(Array)64 b(fmod)h(\(const)f(T1&)396 + 356 y(l,)i(const)e(Array&)f(B\))2140 226 y Fu(Computes)24 + b(the)g(\003oating-point)g(modulus)2140 356 y(\(remainder\))h(of)g + Fq(l)f Fu(with)g(the)h(v)n(alues)f(in)g Fq(B)p Fu(.)h(The)2140 + 485 y(results)f(ha)n(v)o(e)g(the)h(same)g(signs)e(as)i + Fq(l)g Fu(and)2140 615 y(absolute)f(v)n(alues)g(less)g(than)g(the)h + (absolute)2140 744 y(v)n(alues)f(of)h Fq(B)p Fu(.)396 + 886 y(Po)n(wers,)g(Exponentiation,)e(and)h(Logarithmic)396 + 1016 y(Functions)2140 886 y Fq(#include)64 b()p + 396 1044 3487 4 v 396 1044 V 396 1161 a(Array)g(PETE_identity)396 + 1290 y(\(const)h(Array&)e(A\))2140 1161 y Fu(Returns)25 + b(the)f Fq(Array)p Fu(.)g(That)g(is,)h(it)f(applies)g(the)2140 + 1290 y(identity)f(operation.)396 1432 y Fq(Array)64 + b(sqrt)h(\(const)396 1561 y(Array&)f(A\))2140 1432 + y Fu(Returns)25 b(the)f(square)h(roots)f(of)h(the)g Fq(Array)p + Fu(')-5 b(s)2140 1561 y(v)n(alues.)396 1703 y Fq(Array)64 + b(pow)h(\(const)396 1832 y(Array&)f(A,)h(const)396 + 1962 y(Array&)f(B\))2140 1703 y Fu(Raises)25 b Fq(A)p + Fu(')-5 b(s)24 b(v)n(alues)g(by)g(the)h(corresponding)2140 + 1832 y(po)n(wer)f(in)h Fq(B)p Fu(.)396 2104 y Fq(Array)64 + b(pow)h(\(const)396 2233 y(Array&)f(A,)h(const)f(T2&)h(r\))2140 + 2104 y Fu(Raises)25 b Fq(A)p Fu(')-5 b(s)24 b(v)n(alues)g(by)g(the)h + (po)n(wer)f Fq(r)p Fu(.)396 2375 y Fq(Array)64 b(pow)h(\(const)f + (T1&)h(l,)396 2504 y(const)g(Array&)e(B\))2140 2375 + y Fu(Raises)25 b Fq(l)f Fu(by)h(the)g(po)n(wers)f(in)g + Fq(B)p Fu(.)396 2646 y Fq(Array)64 b(pow2)h(\(const)396 + 2775 y(Array&)f(A\))2140 2646 y Fu(Returns)25 b(the)f(squares)h(of)g + Fq(A)p Fu(')-5 b(s)24 b(v)n(alues.)396 2917 y Fq(Array)64 + b(pow3)h(\(const)396 3047 y(Array&)f(A\))2140 2917 + y Fu(Returns)25 b(the)f(cubes)h(of)g Fq(A)p Fu(')-5 b(s)24 + b(v)n(alues.)396 3188 y Fq(Array)64 b(pow4)h(\(const)396 + 3318 y(Array&)f(A\))2140 3188 y Fu(Returns)25 b(the)f(fourth)h(po)n + (wers)f(of)h Fq(A)p Fu(')-5 b(s)24 b(v)n(alues.)396 3460 + y Fq(Array)64 b(ldexp)h(\(const)396 3589 y(Array&)f(A,)h(const) + 396 3719 y(Array&)e(B\))2140 3460 y Fu(Multiplies)22 + b Fq(A)p Fu(')-5 b(s)24 b(v)n(alues)g(by)h(tw)o(o)f(raised)h(to)f(the) + 2140 3589 y(corresponding)g(v)n(alue)g(in)g Fq(B)p Fu(.)396 + 3860 y Fq(Array)64 b(ldexp)h(\(const)396 3990 y(Array&)f(A,)h + (int)g(r\))2140 3860 y Fu(Multiplies)22 b Fq(A)p Fu(')-5 + b(s)24 b(v)n(alues)g(by)h(tw)o(o)f(raised)h(to)f(the)2140 + 3990 y Fq(r)p Fe(th)g Fu(po)n(wer)-5 b(.)396 4131 y Fq(Array)64 + b(ldexp)h(\(const)f(T1&)396 4261 y(l,)i(const)e(Array&)f(B\))2140 + 4131 y Fu(Multiplies)22 b Fq(l)j Fu(by)f(tw)o(o)h(raised)g(to)f(the)h + (v)n(alues)2140 4261 y(in)f Fq(B)p Fu(.)396 4403 y Fq(Array)64 + b(exp)h(\(const)396 4532 y(Array&)f(A\))2140 4403 + y Fu(Returns)25 b(the)f(e)o(xponentiations)f(of)h(the)2140 + 4532 y Fq(Array)p Fu(')-5 b(s)23 b(v)n(alues.)396 4674 + y Fq(Array)64 b(log)h(\(const)396 4803 y(Array&)f(A\))2140 + 4674 y Fu(Returns)25 b(the)f(natural)h(logarithms)d(of)j(the)2140 + 4803 y Fq(Array)p Fu(')-5 b(s)23 b(v)n(alues.)396 4945 + y Fq(Array)64 b(log10)h(\(const)396 5074 y(Array&)f(A\))2140 + 4945 y Fu(Returns)25 b(the)f(base-10)h(logarithms)e(of)h(the)2140 + 5074 y Fq(Array)p Fu(')-5 b(s)23 b(v)n(alues.)p Black + 3730 5547 a Fp(127)p Black eop + %%Page: 128 128 + 128 127 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 85 a Fv(function)1351 + b(eff)o(ect)396 226 y Fu(Functions)24 b(In)l(v)n(olving)g(Comple)o(x)f + (Numbers)165 b Fq(#include)64 b()p 396 255 3487 + 4 v 396 255 V 396 371 a(Array)g(real)h(\(const)396 + 501 y(Array)11 b(>&)62 b(A\))2140 371 y Fu(Returns)25 + b(the)f(real)h(parts)g(of)g Fq(A)p Fu(')-5 b(s)24 b(comple)o(x)2140 + 501 y(numbers.)396 642 y Fq(Array)64 b(imag)h(\(const)396 + 772 y(Array)11 b(>&)62 b(A\))2140 642 y Fu(Returns)25 + b(the)f(imaginary)g(parts)h(of)g Fq(A)p Fu(')-5 b(s)24 + b(comple)o(x)2140 772 y(numbers.)396 914 y Fq(Array)64 + b(abs)h(\(const)396 1043 y(Array)11 b(>&)62 + b(A\))2140 914 y Fu(Returns)25 b(the)f(absolute)g(v)n(alues)g + (\(magnitudes\))2140 1043 y(of)h Fq(A)p Fu(')-5 b(s)24 + b(comple)o(x)f(numbers.)396 1185 y Fq(Array)64 b(abs)h(\(const)396 + 1314 y(Array&)f(A\))2140 1185 y Fu(Returns)25 b(the)f(absolute)g(v)n + (alues)g(of)h Fq(A)p Fu(')-5 b(s)24 b(v)n(alues.)396 + 1456 y Fq(Array)64 b(arg)h(\(const)396 1586 y(Array)11 + b(>&)62 b(A\))2140 1456 y Fu(Returns)25 b(the)f(angle)h + (representations)f(\(in)2140 1586 y(radians\))h(of)f(the)h(polar)g + (representations)f(of)h Fq(A)p Fu(')-5 b(s)2140 1715 + y(comple)o(x)23 b(numbers.)396 1857 y Fq(Array)64 + b(norm)h(\(const)396 1986 y(Array)11 b(>&)62 + b(A\))2140 1857 y Fu(Returns)25 b(the)f(squared)h(absolute)f(v)n(alues) + g(of)h Fq(A)p Fu(')-5 b(s)2140 1986 y(comple)o(x)23 b(numbers.)396 + 2128 y Fq(Array)11 b(>)62 b(conj)396 2257 + y(\(const)j(Array)11 b(>&)396 2387 y(A\))2140 + 2128 y Fu(Returns)25 b(the)f(comple)o(x)g(conjugates)f(of)i + Fq(A)p Fu(')-5 b(s)2140 2257 y(comple)o(x)23 b(numbers.)396 + 2529 y Fq(Array)11 b(>)62 b(polar)396 2658 + y(\(const)j(Array&)e(A,)i(const)396 2788 y(Array&)f(B\))2140 + 2529 y Fu(Returns)25 b(the)f(comple)o(x)g(numbers)g(created)h(from)2140 + 2658 y(polar)f(coordinates)h(\(magnitudes)e(and)i(phase)2140 + 2788 y(angles\))f(in)h(corresponding)f Fq(Array)p Fu(s.)396 + 2929 y Fq(Array)11 b(>)62 b(polar)396 3059 + y(\(const)j(T1&)g(l,)g(const)396 3188 y(Array&)f(A\))2140 + 2929 y Fu(Returns)25 b(the)f(comple)o(x)g(numbers)g(created)h(from)2140 + 3059 y(polar)f(coordinates)h(with)f(magnitude)f Fq(l)i + Fu(and)2140 3188 y(phase)f(angles)h(in)f(the)h Fq(Array)p + Fu(.)396 3330 y Fq(Array)11 b(>)62 b(polar)396 + 3460 y(\(const)j(Array&)e(A,)i(const)396 3589 y(T2&)g(r\))2140 + 3330 y Fu(Returns)25 b(the)f(comple)o(x)g(numbers)g(created)h(from)2140 + 3460 y(polar)f(coordinates)h(with)f(magnitudes)f(in)h(the)2140 + 3589 y Fq(Array)f Fu(and)i(phase)g(angle)g Fq(r)p Fu(.)396 + 3731 y(Functions)f(In)l(v)n(olving)g(Matrices)g(and)h(T)-7 + b(ensors)68 b Fq(#include)c("Pooma/Tiny.h")p 396 3759 + V 396 3759 V 396 3876 a(T)i(trace)e(\(const)h(Array&)396 + 4005 y(A\))2140 3876 y Fu(Returns)25 b(the)f(sum)g(of)h(the)g + Fq(A)p Fu(')-5 b(s)24 b(diagonal)g(entries,)2140 4005 + y(vie)n(wed)g(as)h(a)g(matrix.)396 4147 y Fq(T)66 b(det)f(\(const)f + (Array&)g(A\))99 b Fu(Returns)25 b(the)f(determinant)g(of)h + Fq(A)p Fu(,)f(vie)n(wed)h(as)g(a)2140 4276 y(matrix.)396 + 4418 y Fq(Array)64 b(transpose)g(\(const)396 4548 + y(Array&)g(A\))2140 4418 y Fu(Returns)25 b(the)f(transpose)g(of)h + Fq(A)p Fu(,)g(vie)n(wed)f(as)h(a)2140 4548 y(matrix.)396 + 4689 y Fq(Array)64 b(symmetrize)f(\(const)396 4819 + y(Array&)h(A\))2140 4689 y Fu(Returns)25 b(the)f(tensors)g(of)h + Fq(A)g Fu(with)f(the)h(requested)2140 4819 y(output)e(symmetry)-6 + b(.)p Black 3734 5547 a Fp(128)p Black eop + %%Page: 129 129 + 129 128 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 85 a Fv(function)1351 + b(eff)o(ect)396 226 y Fq(Array)64 b(dot)h(\(const)396 + 356 y(Array&)f(A,)h(const)396 485 y(Array&)f(B\))2140 + 226 y Fu(Returns)25 b(the)f(dot)g(products)g(of)h(v)n(alues)f(in)h(the) + 2140 356 y(tw)o(o)f Fq(Array)p Fu(s.)f(V)-11 b(alue)25 + b(type)g Fq(T)f Fu(equals)h(the)f(type)2140 485 y(of)h(the)f + Fq(dot)g Fu(operating)h(on)f Fq(T1)h Fu(and)f Fq(T2)p + Fu(.)396 627 y Fq(Array)64 b(dot)h(\(const)396 757 + y(Array&)f(A,)h(const)f(T2&)h(r\))2140 627 y Fu(Returns)25 + b(the)f(dot)g(products)g(of)h(v)n(alues)f(in)h(the)2140 + 757 y Fq(Array)e Fu(with)h Fq(r)p Fu(.)h(V)-11 b(alue)25 + b(type)f Fq(T)h Fu(equals)f(the)2140 886 y(type)g(of)h(the)g + Fq(dot)f Fu(operating)g(on)h Fq(T1)f Fu(and)h Fq(T2)p + Fu(.)396 1028 y Fq(Array)64 b(dot)h(\(const)f(T1&)h(l,)396 + 1157 y(const)g(Array&)e(A\))2140 1028 y Fu(Returns)25 + b(the)f(dot)g(products)g(of)h Fq(l)g Fu(with)f(v)n(alues)2140 + 1157 y(in)g(the)h Fq(Array)p Fu(.)e(V)-11 b(alue)25 b(type)g + Fq(T)f Fu(equals)h(the)2140 1287 y(type)f(of)h(the)g + Fq(dot)f Fu(operating)g(on)h Fq(T1)f Fu(and)h Fq(T2)p + Fu(.)396 1428 y Fq(Array)11 b(>)396 1558 y(outerProduct)63 + b(\(const)396 1687 y(Array&)h(A,)h(const)396 1817 + y(Array&)f(B\))2140 1428 y Fu(Returns)25 b(tensors)f(created)h(by)g + (computing)e(the)2140 1558 y(outer)h(product)h(of)g(corresponding)e(v)o + (ectors)i(in)2140 1687 y(the)f(tw)o(o)h Fq(Array)p Fu(s.)e(V)-11 + b(alue)25 b(type)f Fq(T)h Fu(equals)f(the)2140 1817 y(type)g(of)h(the)g + (product)f(of)h Fq(T1)f Fu(and)h Fq(T2)p Fu(.)f(The)2140 + 1946 y(v)o(ectors)g(must)g(ha)n(v)o(e)g(the)h(same)f(length.)396 + 2088 y Fq(Array)11 b(>)396 2218 y(outerProduct)63 + b(\(const)h(T1&)h(l,)396 2347 y(const)g(Array&)e(A\))2140 + 2088 y Fu(Returns)25 b(tensors)f(created)h(by)g(computing)e(the)2140 + 2218 y(outer)h(product)h(of)g Fq(l)f Fu(with)g(the)h(v)o(ectors)f(in)g + (the)2140 2347 y Fq(Array)p Fu(.)f(V)-11 b(alue)25 b(type)g + Fq(T)f Fu(equals)h(the)f(type)h(of)2140 2477 y(the)f(product)h(of)g + Fq(T1)f Fu(and)h Fq(T2)p Fu(.)f(The)h(v)o(ectors)2140 + 2606 y(must)e(ha)n(v)o(e)i(the)g(same)f(length.)396 2748 + y Fq(Array)11 b(>)396 2877 y(outerProduct)63 + b(\(const)396 3007 y(Array&)h(A,)h(const)f(T2&)h(r\))2140 + 2748 y Fu(Returns)25 b(tensors)f(created)h(by)g(computing)e(the)2140 + 2877 y(outer)h(product)h(of)g(v)o(ectors)f(in)g(the)h + Fq(Array)2140 3007 y Fu(with)f Fq(r)p Fu(.)g(V)-11 b(alue)25 + b(type)g Fq(T)f Fu(equals)h(the)f(type)h(of)g(the)2140 + 3136 y(product)f(of)h Fq(T1)f Fu(and)h Fq(T2)p Fu(.)f(The)h(v)o(ectors) + f(must)2140 3266 y(ha)n(v)o(e)g(the)h(same)g(length.)396 + 3408 y Fq(TinyMatrix)396 3537 y(outerProductAsTinyMatrix)396 + 3667 y(\(const)65 b(Array&)e(A,)i(const)396 3796 + y(Array&)f(B\))2140 3408 y Fu(Returns)25 b(matrices)f(created)i(by) + e(computing)f(the)2140 3537 y(outer)h(product)h(of)g(corresponding)e(v) + o(ectors)i(in)2140 3667 y(the)f(tw)o(o)h Fq(Array)p Fu(s.)e(V)-11 + b(alue)25 b(type)f Fq(T)h Fu(equals)f(the)2140 3796 y(type)g(of)h(the)g + (product)f(of)h Fq(T1)f Fu(and)h Fq(T2)p Fu(.)f(The)2140 + 3926 y(v)o(ectors)g(must)g(ha)n(v)o(e)g(the)h(same)f(length.)396 + 4067 y Fq(TinyMatrix)396 4197 y(outerProductAsTinyMatrix)396 + 4326 y(\(const)65 b(T1&)g(l,)g(const)396 4456 y(Array&)f(A\))2140 + 4067 y Fu(Returns)25 b(matrices)f(created)i(by)e(computing)f(the)2140 + 4197 y(outer)h(product)h(of)g Fq(l)f Fu(with)g(the)h(v)o(ectors)f(in)g + (the)2140 4326 y Fq(Array)p Fu(.)f(V)-11 b(alue)25 b(type)g + Fq(T)f Fu(equals)h(the)f(type)h(of)2140 4456 y(the)f(product)h(of)g + Fq(T1)f Fu(and)h Fq(T2)p Fu(.)f(The)h(v)o(ectors)2140 + 4585 y(must)e(ha)n(v)o(e)i(the)g(same)f(length.)p Black + 3734 5547 a Fp(129)p Black eop + %%Page: 130 130 + 130 129 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 85 a Fv(function)1351 + b(eff)o(ect)396 226 y Fq(TinyMatrix)396 356 y + (outerProductAsTinyMatrix)396 485 y(\(const)65 b(Array&)e(A,)i + (const)396 615 y(T2&)g(r\))2140 226 y Fu(Returns)25 b(matrices)f + (created)i(by)e(computing)f(the)2140 356 y(outer)h(product)h(of)g(the)f + (v)o(ectors)g(in)h(the)f Fq(Array)2140 485 y Fu(with)g + Fq(r)p Fu(.)g(V)-11 b(alue)25 b(type)g Fq(T)f Fu(equals)h(the)f(type)h + (of)g(the)2140 615 y(product)f(of)h Fq(T1)f Fu(and)h + Fq(T2)p Fu(.)f(The)h(v)o(ectors)f(must)2140 744 y(ha)n(v)o(e)g(the)h + (same)g(length.)2140 886 y(T)-8 b(ype)24 b(restrictions)g(from)h(ho)n + (w)f(the)g(underlying)2140 1016 y(functions)f(operate)j(on)e(indi)n + (vidual)f(elements)2140 1145 y(may)h(restrict)h(permissible)e(choices)i + (for)g(the)2140 1275 y(template)f(type)g(parameters.)396 + 1504 y(Comparison)g(functions)g(appear)i(in)e(T)-8 b(able)25 + b(7-3.)g Fq(max)f Fu(and)h Fq(min)f Fu(functions)g(supplement)g(named) + 396 1633 y(comparison)30 b(functions.)g(F)o(or)g(e)o(xample,)g + Fq(LT)h Fu(and)g Fq(LE)f Fu(compute)g(the)h(same)f(thing)g(as)h(the)g + Fq(<)f Fu(and)396 1763 y Fq(<=)25 b Fu(operators.)396 + 2042 y Fr(T)-9 b(able)26 b(7-3.)e(Comparison)h(Functions)h(P)n + (ermissible)e(f)n(or)h(Data-P)o(arallel)f(Expr)n(essions)396 + 2278 y Fv(function)1351 b(eff)o(ect)396 2420 y Fq(Array)64 + b(max)h(\(const)396 2549 y(Array&)f(A,)h(const)396 + 2679 y(Array&)f(B\))2140 2420 y Fu(Returns)25 b(the)f(maximum)f(of) + i(corresponding)2140 2549 y Fq(Array)e Fu(v)n(alues.)396 + 2821 y Fq(Array)64 b(max)h(\(const)f(T1&)h(l,)396 + 2950 y(const)g(Array&)e(A\))2140 2821 y Fu(Returns)25 + b(the)f(maximums)f(of)i Fq(l)g Fu(with)f(the)2140 2950 + y Fq(Array)p Fu(')-5 b(s)23 b(v)n(alues.)396 3092 y Fq(Array)64 + b(max)h(\(const)396 3221 y(Array&)f(A,)h(const)f(T2&)h(r\))2140 + 3092 y Fu(Returns)25 b(the)f(maximums)f(of)i(the)f Fq(Array)p + Fu(')-5 b(s)2140 3221 y(v)n(alues)24 b(with)g Fq(r)p + Fu(.)396 3363 y Fq(Array)64 b(min)h(\(const)396 3493 + y(Array&)f(A,)h(const)396 3622 y(Array&)f(B\))2140 + 3363 y Fu(Returns)25 b(the)f(minimum)f(of)i(corresponding)2140 + 3493 y Fq(Array)e Fu(v)n(alues.)396 3764 y Fq(Array)64 + b(min)h(\(const)f(T1&)h(l,)396 3893 y(const)g(Array&)e(A\))2140 + 3764 y Fu(Returns)25 b(the)f(minimums)e(of)j Fq(l)g Fu(with)f(the)2140 + 3893 y Fq(Array)p Fu(')-5 b(s)23 b(v)n(alues.)396 4035 + y Fq(Array)64 b(min)h(\(const)396 4164 y(Array&)f(A,)h(const)f + (T2&)h(r\))2140 4035 y Fu(Returns)25 b(the)f(minimums)e(of)j(the)g + Fq(Array)p Fu(')-5 b(s)2140 4164 y(v)n(alues)24 b(with)g + Fq(r)p Fu(.)396 4306 y Fq(Array)63 b(LT)j(\(const)396 + 4436 y(Array&)e(A,)h(const)396 4565 y(Array&)f(B\))2140 + 4306 y Fu(Returns)25 b(booleans)f(from)g(using)g(the)h(less-than)2140 + 4436 y(operator)g Fq(<)f Fu(to)h(compare)g(corresponding)2140 + 4565 y Fq(Array)e Fu(v)n(alues)h(in)h Fq(A)f Fu(and)h + Fq(B)p Fu(.)396 4707 y Fq(Array)63 b(LT)j(\(const)e(T1&)396 + 4836 y(r,)i(const)e(Array&)f(A\))2140 4707 y Fu(Returns)25 + b(booleans)f(from)g(using)g(the)h(less-than)2140 4836 + y(operator)g Fq(<)f Fu(to)h(compare)g Fq(l)f Fu(with)g(the)2140 + 4966 y Fq(Array)p Fu(')-5 b(s)23 b(v)n(alues.)p Black + 3734 5547 a Fp(130)p Black eop + %%Page: 131 131 + 131 130 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 85 a Fv(function)1351 + b(eff)o(ect)396 226 y Fq(Array)63 b(LT)j(\(const)396 + 356 y(Array&)e(A,)h(const)f(T2&)h(r\))2140 226 y + Fu(Returns)25 b(booleans)f(from)g(using)g(the)h(less-than)2140 + 356 y(operator)g Fq(<)f Fu(to)h(compare)g(the)f Fq(Array)p + Fu(')-5 b(s)23 b(v)n(alues)2140 485 y(with)h Fq(r)p Fu(.)396 + 627 y Fq(Array)63 b(LE)j(\(const)396 757 y(Array&)e(A,)h + (const)396 886 y(Array&)f(B\))2140 627 y Fu(Returns)25 + b(booleans)f(from)g(using)g(the)2140 757 y(less-than-or)n(-equal)g + (operator)h Fq(<=)f Fu(to)h(compare)2140 886 y Fq(Array)e + Fu(v)n(alues)h(in)h Fq(A)f Fu(and)h Fq(B)p Fu(.)396 1028 + y Fq(Array)63 b(LE)j(\(const)e(T1&)396 1157 y(l,)i(const)e + (Array&)f(A\))2140 1028 y Fu(Returns)25 b(booleans)f(from)g(using)g + (the)2140 1157 y(less-than-or)n(-equal)g(operator)h Fq(<=)f + Fu(to)h(compare)2140 1287 y Fq(l)f Fu(with)g(the)h Fq(Array)p + Fu(')-5 b(s)23 b(v)n(alues.)396 1428 y Fq(Array)63 + b(LE)j(\(const)396 1558 y(Array&)e(A,)h(const)f(T2&)h(r\))2140 + 1428 y Fu(Returns)25 b(booleans)f(from)g(using)g(the)2140 + 1558 y(less-than-or)n(-equal)g(operator)h Fq(<=)f Fu(to)h(compare)2140 + 1687 y(the)f Fq(Array)p Fu(')-5 b(s)23 b(v)n(alues)h(with)g + Fq(r)p Fu(.)396 1829 y Fq(Array)63 b(GE)j(\(const)396 + 1959 y(Array&)e(A,)h(const)396 2088 y(Array&)f(B\))2140 + 1829 y Fu(Returns)25 b(booleans)f(from)g(using)g(the)2140 + 1959 y(greater)n(-than-or)n(-equal)h(operator)g Fq(>=)f + Fu(to)2140 2088 y(compare)h Fq(Array)e Fu(v)n(alues)h(in)h + Fq(A)f Fu(and)h Fq(B)p Fu(.)396 2230 y Fq(Array)63 + b(GE)j(\(const)e(T1&)396 2359 y(l,)i(const)e(Array&)f(A\))2140 + 2230 y Fu(Returns)25 b(booleans)f(from)g(using)g(the)2140 + 2359 y(greater)n(-than-or)n(-equal)h(operator)g Fq(>=)f + Fu(to)2140 2489 y(compare)h Fq(l)f Fu(with)g(the)h Fq(Array)p + Fu(')-5 b(s)23 b(v)n(alues.)396 2630 y Fq(Array)63 + b(GE)j(\(const)396 2760 y(Array&)e(A,)h(const)f(T2&)h(r\))2140 + 2630 y Fu(Returns)25 b(booleans)f(from)g(using)g(the)2140 + 2760 y(greater)n(-than-or)n(-equal)h(operator)g Fq(>=)f + Fu(to)2140 2890 y(compare)h(the)f Fq(Array)p Fu(')-5 + b(s)23 b(v)n(alues)h(with)g Fq(r)p Fu(.)396 3031 y Fq(Array)63 + b(GT)j(\(const)396 3161 y(Array&)e(A,)h(const)396 + 3290 y(Array&)f(B\))2140 3031 y Fu(Returns)25 b(booleans)f(from)g + (using)g(the)2140 3161 y(greater)n(-than)h(operator)g + Fq(>)f Fu(to)h(compare)2140 3290 y Fq(Array)e Fu(v)n(alues)h(in)h + Fq(A)f Fu(and)h Fq(B)p Fu(.)396 3432 y Fq(Array)63 + b(GT)j(\(const)e(T1&)396 3561 y(l,)i(const)e(Array&)f(A\))2140 + 3432 y Fu(Returns)25 b(booleans)f(from)g(using)g(the)2140 + 3561 y(greater)n(-than)h(operator)g Fq(>)f Fu(to)h(compare)g + Fq(l)f Fu(with)2140 3691 y(the)g Fq(Array)p Fu(')-5 b(s)23 + b(v)n(alues.)396 3833 y Fq(Array)63 b(GT)j(\(const)396 + 3962 y(Array&)e(A,)h(const)f(T2&)h(r\))2140 3833 + y Fu(Returns)25 b(booleans)f(from)g(using)g(the)2140 + 3962 y(greater)n(-than)h(operator)g Fq(>)f Fu(to)h(compare)g(the)2140 + 4092 y Fq(Array)p Fu(')-5 b(s)23 b(v)n(alues)h(with)g + Fq(r)p Fu(.)396 4233 y Fq(Array)63 b(EQ)j(\(const)396 + 4363 y(Array&)e(A,)h(const)396 4492 y(Array&)f(B\))2140 + 4233 y Fu(Returns)25 b(booleans)f(from)g(determining)2140 + 4363 y(whether)h(corresponding)e Fq(Array)h Fu(v)n(alues)g(in)g + Fq(A)2140 4492 y Fu(and)g Fq(B)h Fu(are)h(equal.)396 + 4634 y Fq(Array)63 b(EQ)j(\(const)e(T1&)396 4763 + y(l,)i(const)e(Array&)f(A\))2140 4634 y Fu(Returns)25 + b(booleans)f(from)g(determining)2140 4763 y(whether)h + Fq(l)f Fu(equals)h(the)f Fq(Array)p Fu(')-5 b(s)23 b(v)n(alues.)396 + 4905 y Fq(Array)63 b(EQ)j(\(const)396 5035 y(Array&)e(A,)h + (const)f(T2&)h(r\))2140 4905 y Fu(Returns)25 b(booleans)f(from)g + (determining)2140 5035 y(whether)h(the)f Fq(Array)p Fu(')-5 + b(s)23 b(v)n(alues)h(equal)h Fq(r)p Fu(.)p Black 3734 + 5547 a Fp(131)p Black eop + %%Page: 132 132 + 132 131 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 85 a Fv(function)1351 + b(eff)o(ect)396 226 y Fq(Array)63 b(NE)j(\(const)396 + 356 y(Array&)e(A,)h(const)396 485 y(Array&)f(B\))2140 + 226 y Fu(Returns)25 b(booleans)f(from)g(determining)2140 + 356 y(whether)h(corresponding)e Fq(Array)h Fu(v)n(alues)g(in)g + Fq(A)2140 485 y Fu(and)g Fq(B)h Fu(are)h(not)e(equal.)396 + 627 y Fq(Array)63 b(NE)j(\(const)e(T1&)396 757 + y(l,)i(const)e(Array&)f(A\))2140 627 y Fu(Returns)25 + b(booleans)f(from)g(determining)2140 757 y(whether)h + Fq(l)f Fu(does)h(not)f(equal)h(the)f Fq(Array)p Fu(')-5 + b(s)2140 886 y(v)n(alues.)396 1028 y Fq(Array)63 + b(NE)j(\(const)396 1157 y(Array&)e(A,)h(const)f(T2&)h(r\))2140 + 1028 y Fu(Returns)25 b(booleans)f(from)g(determining)2140 + 1157 y(whether)h(the)f Fq(Array)p Fu(')-5 b(s)23 b(v)n(alues)h(are)i + (not)e(equal)2140 1287 y(to)g Fq(r)p Fu(.)396 1516 y(The)30 + b(table)g(of)g(miscellaneous)e(functions)h(\(T)-8 b(able)30 + b(7-4\))g(contains)f(tw)o(o)g(functions.)g Fq(peteCast)396 + 1645 y Fu(casts)i(all)g(v)n(alues)f(in)g(an)i Fq(Array)d + Fu(to)i(the)g(type)f(speci\002ed)i(by)e(its)h(\002rst)g(parameter)-5 + b(.)30 b(The)h Fq(where)396 1775 y Fu(function)20 b(generalizes)h(the)f + (trinary)g Fq(?:)g Fu(operator)-5 b(.)21 b(Using)e(its)h(\002rst)h + Fq(Array)e Fu(ar)n(gument)h(as)h(boolean)396 1904 y(v)n(alues,)j(it)g + (returns)h(an)g Fq(Array)f Fu(of)h(just)e(tw)o(o)i(v)n(alues:)e + Fm(t)i Fu(and)g Fm(f)6 b Fu(.)396 2183 y Fr(T)-9 b(able)26 + b(7-4.)e(Miscellaneous)h(Functions)g(P)n(ermissible)g(f)n(or)g(Data-P)o + (arallel)e(Expr)n(essions)396 2420 y Fv(function)1351 + b(eff)o(ect)396 2562 y Fq(Array)64 b(peteCast)g(\(const)396 + 2691 y(T1&,)h(const)g(Array&)e(A\))2140 2562 y Fu(Returns)25 + b(the)f(casting)g(of)h(the)g Fq(Array)p Fu(')-5 b(s)23 + b(v)n(alues)2140 2691 y(to)h(type)h Fq(T1)p Fu(.)396 + 2833 y Fq(Array)64 b(where)h(\(const)396 2962 y(Array&)f(A,)h + (const)f(T2&)h(t,)396 3092 y(const)g(T3&)g(f\))2140 2833 + y Fu(Generalizes)25 b(the)g Fq(?:)f Fu(operator)l(,)h(returning)f(an) + 2140 2962 y Fq(Array)f Fu(of)i Fq(t)g Fu(and)g Fq(f)f + Fu(v)n(alues)g(depending)g(on)2140 3092 y(whether)h Fq(A)p + Fu(')-5 b(s)24 b(v)n(alues)g(are)h(true)g(or)g(f)o(alse,)2140 + 3221 y(respecti)n(v)o(ely)-6 b(.)396 3451 y(Throughout)20 + b(this)g(chapter)l(,)i(we)f(illustrate)f(data-parallel)h(e)o + (xpressions)f(and)h(statements)f(operating)396 3580 y(on)30 + b(all)g(of)g(a)h(container')-5 b(s)30 b(v)n(alues.)f(Frequently)-6 + b(,)29 b(operating)h(on)g(a)g(subset)g(is)g(useful.)f(In)i(POOMA,)396 + 3710 y(a)c(subset)f(of)h(a)f(container')-5 b(s)26 b(v)n(alues)g(is)g + (called)h(a)f(vie)n(w)-6 b(.)26 b(Combining)f(vie)n(ws)g(and)i + (data-parallel)f(e)o(x-)396 3839 y(pressions)20 b(will)f(enable)i(us)f + (to)g(more)g(succinctly)g(and)g(more)g(easily)g(write)h(the)f + Fq(Doof2d)f Fu(dif)n(fusion)396 3969 y(program.)25 b(V)-6 + b(ie)n(ws)24 b(are)h(discussed)f(in)g(the)h(ne)o(xt)f(chapter)-5 + b(.)-2 4471 y Fx(7.3.)47 b(Implementation)h(of)g(Data-P)-5 + b(arallel)47 b(Statements)396 4687 y Fu(Data-parallel)26 + b(statements)e(in)l(v)n(olving)g(containers)h(occur)h(frequently)g(in)f + (the)g(inner)h(loops)f(of)g(sci-)396 4816 y(enti\002c)34 + b(programs)g(so)g(their)f(ef)n(\002cient)h(e)o(x)o(ecution)f(is)g + (important.)g(A)h(na\357v)o(e)f(implementation)f(for)396 + 4946 y(these)f(statements)e(may)i(create)g(and)g(destro)o(y)f + (containers)g(holding)g(intermediate)g(v)n(alues,)f(slo)n(w-)396 + 5075 y(ing)24 b(e)o(x)o(ecution)g(considerably)-6 b(.)23 + b(In)i(1995,)f(T)-8 b(odd)24 b(V)-11 b(eldhuizen)24 b(and)h(Da)n(vid)g + (V)-11 b(ande)n(v)n(oorde)24 b(each)h(de-)p Black 3734 + 5547 a Fp(132)p Black eop + %%Page: 133 133 + 133 132 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 51 a Fu(v)o(eloped)34 + b(an)g(e)o(xpression-template)f(technique)h(to)g(transform)g + (arithmetic)f(e)o(xpressions)g(in)l(v)n(olv-)396 180 + y(ing)27 b(array-lik)o(e)g(containers)f(into)g(ef)n(\002cient)h(loops)f + (without)f(using)h(temporaries.)g(Despite)h(its)f(per)n(-)396 + 310 y(cei)n(v)o(ed)f(comple)o(xity)-6 b(,)23 b(POOMA)i(incorporated)g + (the)g(technology)-6 b(.)24 b(The)i(frame)n(w)o(ork)f(called)g(PETE,) + 396 439 y(the)30 b(Portable)g(Expression)f(T)-7 b(emplate)29 + b(Engine)h(frame)n(w)o(ork,)f(is)h(also)f(a)n(v)n(ailable)h(separately) + g(from)396 569 y(POOMA)25 b(at)g Ft(http://www.acl.lanl.gov/pet)q(e/)p + Fu(.)396 748 y(In)e(this)e(chapter)l(,)i(we)g(\002rst)f(describe)h(ho)n + (w)f(a)g(na\357v)o(e)g(implementation)e(may)i(slo)n(w)g(e)o(x)o + (ecution.)f(Then,)396 878 y(we)h(describe)f(PETE')-5 + b(s)21 b(f)o(aster)h(implementation.)d(PETE)i(con)l(v)o(erts)g(a)g + (data-parallel)h(statement)e(into)396 1007 y(a)33 b(parse)g(tree,)h + (rather)f(than)f(immediately)f(e)n(v)n(aluating)g(it.)h(The)h(parse)g + (tree)h(has)e(tw)o(o)h(representa-)396 1137 y(tions.)24 + b(Its)i(run-time)e(representation)h(holds)g(run-time)f(v)n(alues.)h + (Its)g(compile-time)f(representation)396 1266 y(records)29 + b(the)g(types)f(of)h(the)f(tree')-5 b(s)29 b(v)n(alues.)e(After)i(a)g + (parse)g(tree)g(for)g(the)g(entire)f(statement)g(is)g(con-)396 + 1396 y(structed,)g(it)h(is)f(e)n(v)n(aluated.)f(Since)j(it)e(is)g(a)h + (data-parallel)g(statement,)f(this)f(e)n(v)n(aluation)g(in)l(v)n(olv)o + (es)g(at)396 1525 y(least)j(one)g(loop.)f(At)g(run)h(time,)f(for)h + (each)g(loop)f(iteration,)g(the)h(v)n(alue)f(of)h(one)g(container)g(v)n + (alue)f(is)396 1655 y(computed)j(and)g(assigned.)f(At)h(compile)g + (time,)f(when)i(the)f(code)g(for)h(the)f(loop)g(iteration)f(is)h(pro-) + 396 1784 y(duced,)23 b(the)f(parse)h(tree')-5 b(s)23 + b(types)f(are)h(tra)n(v)o(ersed)f(and)h(code)g(is)f(produced)g(without) + g(the)g(need)h(for)g(an)o(y)396 1914 y(intermediate)e(v)n(alues.)f(W)-8 + b(e)22 b(present)f(the)g(implementation)e(in)i(Section)h(7.3.2,)e(b)n + (ut)h(\002rst)h(we)f(e)o(xplain)396 2043 y(the)k(dif)n(\002culties)f + (caused)h(by)f(the)h(na\357v)o(e)f(implementation.)-2 + 2437 y Fk(7.3.1.)39 b(Na\357ve)f(Implementation)396 2638 + y Fu(A)k(con)l(v)o(entional)e(implementation)g(to)i(e)n(v)n(aluate)f + (data-parallel)h(e)o(xpressions)e(might)h(o)o(v)o(erload)396 + 2768 y(arithmetic)24 b(operator)h(functions.)f(Consider)g(this)g + (program)h(fragment:)635 3099 y Fn(Interval<1>)58 b(I\(0,3\);)635 + 3228 y(Array<1,)g(double,)h(Brick>)f(A\(I\),)h(B\(I\);)635 + 3358 y(A)h(=)f(1.0;)635 3487 y(B)h(=)f(2.0;)635 3617 + y(A)h(+=)f(-A)h(+)f(2*B;)635 3746 y(std::cout)f(<)6 b(<)59 + b(A)h(<)6 b(<)58 b(std::endl;)396 4005 y Fu(Our)31 b(goal)f(is)g(to)g + (transform)g(the)g(data-parallel)g(statement)g Fq(A)65 + b(+=)g(-A)h(+)f(2*B)30 b Fu(into)f(a)i(single)396 4135 + y(loop,)39 b(preferably)h(without)d(using)i(intermediary)f(containers.) + h(T)-8 b(o)39 b(simplify)f(notation,)g(let)h Fq(Ar)396 + 4264 y Fu(abbre)n(viate)25 b(the)f(type)h Fq(Array<1,)64 + b(double,)g(Brick>)p Fu(.)396 4444 y(Using)33 b(o)o(v)o(erloaded)f + (arithmetic)h(operators)g(w)o(ould)g(require)h(using)f(intermediate)f + (containers)i(to)396 4573 y(e)n(v)n(aluate)j(the)h(statement.)g(F)o(or) + g(e)o(xample,)f(the)h(sum')-5 b(s)37 b(left)h(operand)g + Fq(-A)g Fu(w)o(ould)f(be)h(computed)396 4703 y(by)c(the)g(o)o(v)o + (erloaded)e(unary)i(operator)g Fq(Ar)66 b(operator-\(const)c(Ar&\))p + Fu(,)33 b(which)g(w)o(ould)396 4832 y(produce)46 b(an)f(intermediate)g + Fq(Array)p Fu(.)f Fq(Ar)65 b(operator*\(double,)d(const)i(Ar&\))396 + 4962 y Fu(w)o(ould)37 b(produce)g(another)g(intermediate)f + Fq(Array)g Fu(holding)g Fq(2*B)p Fu(.)g(Y)-10 b(et)37 + b(another)g(intermediate)396 5091 y(container)24 b(w)o(ould)e(hold)h + (their)g(sum,)g(all)g(before)h(performing)f(the)g(assignment.)f(Thus,)h + (three)g(inter)n(-)p Black 3734 5547 a Fp(133)p Black + eop + %%Page: 134 134 + 134 133 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 51 a Fu(mediate)i + (containers)h(w)o(ould)e(be)i(created)h(and)e(destro)o(yed.)g(Belo)n(w) + -6 b(,)24 b(we)h(sho)n(w)e(these)i(are)g(unneces-)396 + 180 y(sary)-6 b(.)-2 624 y Fk(7.3.2.)39 b(P)-6 b(or)s(tab)o(le)37 + b(Expression)g(T)-9 b(emplate)38 b(Engine)396 825 y Fu(POOMA)28 + b(uses)g(PETE,)g(the)g(Portable)g(Expression)f(T)-7 b(emplate)27 + b(Engine)h(frame)n(w)o(ork,)g(to)f(e)n(v)n(aluate)396 + 955 y(data-parallel)36 b(statements)f(using)g(ef)n(\002cient)h(loops)e + (without)h(intermediate)g(v)n(alues.)g(PETE)h(uses)396 + 1084 y(e)o(xpression-template)22 b(technology)-6 b(.)22 + b(Instead)h(of)h(e)n(v)n(aluating)e(a)h(data-parallel)h(statement')-5 + b(s)22 b(sube)o(x-)396 1214 y(pressions)35 b(at)h(solely)e(at)i(run)g + (time,)f(it)g(e)n(v)n(aluates)f(the)i(code)g(at)f(both)g(run)h(time)f + (and)g(at)h(compile)396 1343 y(time.)f(At)g(compile)g(time,)f(it)h(b)n + (uilds)f(a)i(parse)g(tree)g(of)f(the)h(required)f(computations.)e(The)j + (parse)396 1473 y(tree')-5 b(s)28 b(type)g(records)h(the)f(types)g(of)g + (each)h(of)f(its)g(subtrees.)g(Then,)g(the)g(parse)h(tree)f(is)g(e)n(v) + n(aluated)f(at)396 1602 y(compile)e(time)g(using)g(an)i(e)n(v)n + (aluator)d(determined)i(by)f(the)h(left-hand)g(side')-5 + b(s)25 b(type.)g(This)g(container)396 1732 y(type)f(determines)e(ho)n + (w)h(to)g(loop)g(through)g(its)g(domain.)f(Each)i(loop)f(iteration)g + (of)h(the)f(resulting)f(run)396 1861 y(time)k(code,)h(the)g + (corresponding)f(v)n(alue)g(of)h(the)g(right-hand)f(side)g(is)h(e)n(v)n + (aluated.)e(No)i(intermediate)396 1991 y(loops)d(or)h(temporary)f(v)n + (alues)g(are)i(needed.)396 2170 y(Before)34 b(e)o(xplaining)c(the)i + (implementation,)e(let)i(us)g(illustrate)f(using)g(our)h(e)o(xample)f + (statement)g Fq(A)396 2300 y(+=)66 b(-A)f(+)g(2*B)p Fu(.)25 + b(Ev)n(aluating)g(the)g(right-hand)g(side)h(creates)h(a)f(parse)g(tree) + g(similar)f(to)h(the)f(one)396 2429 y(in)39 b(Figure)g(7-2.)f(F)o(or)h + (e)o(xample,)f(the)g(o)o(v)o(erloaded)g(unary)g(minus)g(operator)g + (yields)g(a)h(tree)h(node)396 2559 y(representing)25 + b Fq(-A)p Fu(,)f(ha)n(ving)g(a)h(unary-minus)f(function)g(object,)g + (and)h(ha)n(ving)f(type)635 2868 y Fn(Expression)11 b(>)396 3127 y Fu(The)29 b(binary)g(nodes)f(continue)g(the)h + (construction)f(process)g(yielding)g(a)h(parse)g(tree)h(object)e(for)h + (the)396 3256 y(entire)c(right-hand)f(side)g(and)h(ha)n(ving)f(type)635 + 3515 y Fn(Expression<)755 3645 y(BinaryNode,)1412 3904 y + (BinaryNode,Ar)o(>)11 b(>)g(>)396 + 4163 y Fu(Ev)n(aluating)23 b(the)i(left-hand)g(side)f(yields)g(an)h + (object)f(representing)h Fq(A)p Fu(.)p Black 3734 5547 + a Fp(134)p Black eop + %%Page: 135 135 + 135 134 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 51 a Fr(Figur)n(e)k(7-2.)e + (Annotated)i(P)o(arse)f(T)-7 b(r)n(ee)26 b(f)n(or)f Fo(-A)65 + b(+)h(2*B)652 1254 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 652 1254 a @beginspecial -164 @llx + -107 @lly 193 @urx 23 @ury 3570 @rwi @setspecial + %%BeginDocument: figures/data-parallel.101 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -164 -107 193 23 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -3.58655 -2.8154 moveto + (+) pcrr8r 11.95514 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath 10.17311 0 moveto + 10.17311 5.61845 5.61845 10.17311 0 10.17311 curveto + -5.61845 10.17311 -10.17311 5.61845 -10.17311 0 curveto + -10.17311 -5.61845 -5.61845 -10.17311 0 -10.17311 curveto + 5.61845 -10.17311 10.17311 -5.61845 10.17311 0 curveto closepath stroke + -24.84637 -44.22328 moveto + (-) pcrr8r 11.95514 fshow + newpath -11.08672 -42.51968 moveto + -11.08672 -36.90123 -15.64137 -32.34657 -21.25983 -32.34657 curveto + -26.87828 -32.34657 -31.43294 -36.90123 -31.43294 -42.51968 curveto + -31.43294 -48.13814 -26.87828 -52.6928 -21.25983 -52.6928 curveto + -15.64137 -52.6928 -11.08672 -48.13814 -11.08672 -42.51968 curveto closepath + stroke + -46.10622 -88.42567 moveto + (A) pcrr8r 11.95514 fshow + newpath -32.34656 -85.03937 moveto + -32.34656 -79.42091 -36.90121 -74.86626 -42.51967 -74.86626 curveto + -48.13812 -74.86626 -52.69278 -79.42091 -52.69278 -85.03937 curveto + -52.69278 -90.65782 -48.13812 -95.21248 -42.51967 -95.21248 curveto + -36.90121 -95.21248 -32.34656 -90.65782 -32.34656 -85.03937 curveto closepath + stroke + 17.67328 -46.18988 moveto + (*) pcrr8r 11.95514 fshow + newpath 31.43294 -42.51968 moveto + 31.43294 -36.90123 26.87828 -32.34657 21.25983 -32.34657 curveto + 15.64137 -32.34657 11.08672 -36.90123 11.08672 -42.51968 curveto + 11.08672 -48.13814 15.64137 -52.6928 21.25983 -52.6928 curveto + 26.87828 -52.6928 31.43294 -48.13814 31.43294 -42.51968 curveto closepath + stroke + -3.58653 -88.70956 moveto + (2) pcrr8r 11.95514 fshow + newpath 10.17313 -85.03937 moveto + 10.17313 -79.42091 5.61847 -74.86626 0.00002 -74.86626 curveto + -5.61844 -74.86626 -10.1731 -79.42091 -10.1731 -85.03937 curveto + -10.1731 -90.65782 -5.61844 -95.21248 0.00002 -95.21248 curveto + 5.61847 -95.21248 10.17313 -90.65782 10.17313 -85.03937 curveto closepath + stroke + 38.93312 -88.42567 moveto + (B) pcrr8r 11.95514 fshow + newpath 52.69278 -85.03937 moveto + 52.69278 -79.42091 48.13812 -74.86626 42.51967 -74.86626 curveto + 36.90121 -74.86626 32.34656 -79.42091 32.34656 -85.03937 curveto + 32.34656 -90.65782 36.90121 -95.21248 42.51967 -95.21248 curveto + 48.13812 -95.21248 52.69278 -90.65782 52.69278 -85.03937 curveto closepath + stroke + 1 setlinecap + newpath -4.55067 -9.10135 moveto + -16.70929 -33.41856 lineto stroke + newpath 4.55067 -9.10135 moveto + 16.70929 -33.41856 lineto stroke + newpath -25.8105 -51.62103 moveto + -37.96912 -75.93825 lineto stroke + newpath 16.70915 -51.62103 moveto + 4.55055 -75.93825 lineto stroke + newpath 25.8105 -51.62103 moveto + 37.96912 -75.93825 lineto stroke + -35.86551 15.01411 moveto + (Expression) pcrr8r 11.95514 fshow + 13.17311 -3.0426 moveto + (BinaryNode) pcrr8r 11.95514 fshow + 55.69278 -88.42567 moveto + (Ar) pcrr8r 11.95514 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 652 1254 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 652 1254 a 396 1433 a Fu(The)37 + b(parse)h(tree)g(for)f Fq(-A)65 b(+)h(2*B)36 b Fu(with)h(type)g + (annotations.)e(The)i(complete)g(type)g(of)g(a)h(node)396 + 1563 y(equals)25 b(the)f(concatenation)h(of)f(the)h(preorder)g(tra)n(v) + o(ersal)g(of)g(annotated)f(types.)396 1842 y(Finally)-6 + b(,)33 b(the)h(assignment)f(operator)h Fq(+=)g Fu(calls)g(the)g + Fq(evaluate)e Fu(function)h(corresponding)h(to)396 1971 + y(the)i(left-hand)h(side')-5 b(s)35 b(type.)h(At)g(compile)f(time,)h + (it)g(produces)g(the)g(code)g(for)h(the)f(computation.)396 + 2101 y(Since)c(this)e(templated)g(function)g(is)h(specialized)g(on)g + (the)g(type)f(of)i(the)f(left-hand)g(side,)f(it)h(gener)n(-)396 + 2230 y(ates)i(a)h(loop)e(iterating)g(through)g(the)h(left-hand)f(side') + -5 b(s)32 b(container)-5 b(.)33 b(T)-8 b(o)32 b(produce)h(the)g(loop)g + (body)-6 b(,)396 2360 y(the)31 b Fq(forEach)d Fu(function)i(produces)g + (code)h(for)g(the)f(right-hand)f(side)h(e)o(xpression)g(at)g(a)h + (speci\002c)396 2489 y(position)36 b(using)h(a)i(post-order)e + (parse-tree)i(tra)n(v)o(ersal.)f(At)g(a)g(leaf,)g(this)f(e)n(v)n + (aluation)g(queries)g(the)396 2619 y(leaf)5 b(')-5 b(s)31 + b(container)g(for)g(a)g(speci\002ed)g(v)n(alue)f(or)g(e)o(xtracts)g(a)h + (scalar)h(v)n(alue.)d(At)i(an)g(interior)f(node,)g(its)396 + 2748 y(children')-5 b(s)22 b(results)g(are)i(combined)d(using)h(its)g + (function)g(operator)-5 b(.)22 b(One)h(loop)f(performs)h(the)f(entire) + 396 2878 y(assignment.)h(It)h(is)g(important)f(to)i(note)f(that)g(the)g + (type)g(of)h(the)f(entire)g(right-hand)g(side)g(is)g(kno)n(wn)f(at)396 + 3008 y(compile)j(time.)h(Thus,)f(all)h(of)g(these)f Fq(evaluate)p + Fu(,)f Fq(forEach)p Fu(,)h(and)h(function)f(operator)h(func-)396 + 3137 y(tion)34 b(calls)g(can)h(be)f(inlined)g(at)g(compile)g(time)f(to) + h(yield)g(simple)f(code)i(without)e(an)o(y)h(temporary)396 + 3267 y(containers)25 b(and)f(hopefully)g(as)h(f)o(ast)g(as)g + (hand-written)f(loops!)396 3446 y(T)-8 b(o)20 b(implement)f(this)g + (scheme,)h(we)g(need)g(POOMA)g(\(really)g(PETE\))h(code)f(to)g(both)f + (create)i(the)f(parse)396 3575 y(tree)k(and)g(to)f(e)n(v)n(aluate)f + (it.)h(W)-8 b(e)24 b(describe)g(parse)f(tree)h(creation)g(\002rst.)f(P) + o(arse)h(trees)g(consist)e(of)i(lea)n(v)o(es,)396 3705 + y Fq(UnaryNode)p Fu(s,)37 b Fq(BinaryNode)p Fu(s,)f(and)j + Fq(TrinaryNode)p Fu(s.)e(Since)i Fq(TrinaryNode)p Fu(s)396 + 3834 y(are)e(similar)d(to)h Fq(BinaryNode)p Fu(s,)e(we)j(omit)e + (describing)h(them.)g(A)g Fq(BinaryNode)p Fu(')-5 b(s)33 + b(three)396 3964 y(template)24 b(parameters)h(correspond)g(to)f(the)h + (three)g(things)e(it)i(must)e(store:)396 4243 y Fq(Op)p + Black Black 596 4422 a Fu(the)k(type)g(of)h(the)g(node')-5 + b(s)27 b(operation.)g(F)o(or)g(e)o(xample,)g(the)g Fq(OpAdd)g + Fu(type)g(represents)h(adding)596 4552 y(tw)o(o)c(operands)g(together) + -5 b(.)396 4781 y Fq(Left)p Black Black 596 4960 a Fu(the)24 + b(type)h(of)g(the)f(left)h(child.)p Black 3734 5547 a + Fp(135)p Black eop + %%Page: 136 136 + 136 135 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 51 a Fq(Right)p + Black Black 596 230 a Fu(the)i(type)h(of)g(the)f(right)g(child.)396 + 410 y(The)h(node)g(stores)f(the)h(left)f(and)h(right)f(children')-5 + b(s)24 b(nodes.)396 589 y Fq(BinaryNode)42 b Fu(does)i(not)g(need)g(to) + g(store)g(an)o(y)g(representation)f(of)i(the)f(node')-5 + b(s)43 b(operation.)396 718 y(Instead)f(the)g Fq(Op)g + Fu(type)f(is)h(an)g(empty)f(structure)h(de\002ning)f(a)i(function)e + (object.)g(F)o(or)h(e)o(xample,)396 848 y Fq(OpAdd)p + Fu(')-5 b(s)23 b(function)h(object)h(is)f(declared)h(as)635 + 1157 y Fn(template)635 1286 + y(inline)g(typename)f(BinaryReturn::Type_t)635 + 1416 y(operator\(\)\(const)e(T1)i(&a,)g(const)g(T2)g(&b\))g(const)635 + 1545 y({)755 1675 y(return)f(\(a)i(+)f(b\);)635 1804 + y(})396 2063 y Fu(Since)51 b(it)f(has)g(tw)o(o)g(template)g(ar)n + (guments,)g(it)g(can)h(be)f(applied)g(to)g(operands)g(of)h(an)o(y)f + (type.)396 2193 y(Because)i(of)e(C++)h(type)f(con)l(v)o(ersions,)f(the) + h(type)g(of)g(the)g(result)g(is)g(determined)f(using)g(the)396 + 2322 y Fq(BinaryReturn)39 b Fu(traits)j(class.)g(Consider)f(adding)h + (an)g Fq(int)f Fu(and)h(a)h Fq(double)p Fu(.)d Fq(Bina-)396 + 2452 y(ryReturn::Type_t)40 + b Fu(equals)j Fq(double)p Fu(.)f(Inlining)396 2581 y(the)25 + b(function)f(ensures)h(all)f(this)g(syntax)g(is)g(eliminated,)g(lea)n + (ving)g(behind)g(just)g(an)h(addition.)396 2761 y Fq(UnaryNode)p + Fu(s)30 b(are)i(similar)f(b)n(ut)g(ha)n(v)o(e)h(only)f(tw)o(o)h + (template)f(parameters)h(and)g(store)f(only)g(one)396 + 2890 y(child.)396 3070 y(P)o(arse)i(tree)g(lea)n(v)o(es)f(are)i + (created)f(by)f(the)g Fq(CreateLeaf)f Fu(class)h(and)g(its)g + (specializations.)f(The)396 3199 y(def)o(ault)25 b(leaf)g(is)f(a)i + (scalar)f(so)f(it)h(has)f(the)h(most)f(general)h(de\002nition:)635 + 3508 y Fn(template)635 3637 y(struct)i(CreateLeaf)635 + 3767 y({)755 3896 y(typedef)f(Scalar)g(Leaf_t;)755 + 4156 y(inline)g(static)755 4285 y(Leaf_t)g(make\(const)g(T)h(&a\))755 + 4415 y({)874 4544 y(return)g(Scalar\(a\);)755 4674 + y(})635 4803 y(};)p Black 3732 5547 a Fp(136)p Black + eop + %%Page: 137 137 + 137 136 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 180 a Fu(The)33 + b Fq(Scalar)f Fu(class)g(stores)h(the)g(scalar)g(v)n(alue.)f(The)h + Fq(CreateLeaf)p Fu(')-5 b(s)30 b Fq(Leaf_t)i Fu(type)h(in-)396 + 310 y(dicates)j(its)f(type.)g(The)h Fq(static)e(make)h + Fu(function)g(is)g(in)l(v)n(ok)o(ed)g(by)g(an)h(o)o(v)o(erloaded)e + (operator)396 439 y(function)24 b(when)h(creating)g(its)f(children.)396 + 619 y(The)h Fq(CreateLeaf)e Fu(class)h(is)g(specialized)h(for)g + Fq(Array)p Fu(s:)635 928 y Fn(template)635 1057 y(struct)g(CreateLeaf)f(>)635 1187 y({)755 1316 y(typedef)g(Array)f(Input_t;)755 1446 y(typedef)g(Reference)e + (Leaf_t;)755 1575 y(typedef)i(Leaf_t)h(Return_t;)755 + 1705 y(inline)f(static)755 1834 y(Return_t)g(make\(const)f(Input_t)i + (&a\))874 1964 y({)994 2093 y(return)f(Leaf_t\(a\);)874 + 2223 y(})635 2352 y(};)396 2611 y Fu(The)25 b Fq(Array)f + Fu(object)g(is)h(stored)f(as)h(a)g Fq(Reference)p Fu(,)e(rather)i(than) + f(directly)g(as)h(for)g(scalars.)396 2791 y(T)-8 b(o)22 + b(simplify)d(the)j(ne)o(xt)f(step)g(of)g(o)o(v)o(erloading)f + (arithmetic)g(operators,)i(a)g(parse)f(tree')-5 b(s)22 + b(topmost)e(type)396 2920 y(is)25 b(an)g Fq(Expression)p + Fu(.)396 3099 y(No)n(w)43 b(that)h(we)g(ha)n(v)o(e)g(de\002ned)g(the)g + (node)f(classes,)h(the)g(C++)h(arithmetic)e(operators)g(must)g(be)396 + 3229 y(o)o(v)o(erloaded)38 b(to)h(return)h(the)f(appropriate)g(parse)h + (tree.)g(F)o(or)f(e)o(xample,)f(the)i(unary)f(minus)f(oper)n(-)396 + 3358 y(ator)h Fq(operator-)f Fu(is)g(o)o(v)o(erloaded)g(to)h(accept)h + (an)f Fq(Array)f Fu(ar)n(gument.)h(It)g(should)f(create)i(a)396 + 3488 y Fq(UnaryNode)23 b Fu(ha)n(ving)h(an)h Fq(Array)f + Fu(as)h(its)f(child,)g(which)g(will)g(be)h(a)g(leaf:)635 + 3797 y Fn(template)635 + 3926 y(inline)h(typename)f(MakeReturn)11 b(>::)o(Leaf_)o(t>)g + (>::)874 4185 y(Expression_t)635 4315 y(operator-\(const)57 + b(Array)f(&)k(l\))635 4444 y({)755 4574 y(typedef)e + (UnaryNode)c(>::Leaf_t>)k(Tree_t;)755 + 4833 y(return)g(MakeReturn::make\(Tree_t)o(\()874 + 4962 y(CreateLeaf)c(>::make\(l\)\)\);)635 + 5092 y(})p Black 3730 5547 a Fp(137)p Black eop + %%Page: 138 138 + 138 137 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 180 a Fq(Tree_t)c + Fu(speci\002es)i(the)f(node')-5 b(s)18 b(unique)h(type.)g(Constructing) + f(the)h(object)g(\002rst)h(in)l(v)n(olv)o(es)d(creating)396 + 310 y(a)25 b(leaf)h(containing)d(the)i Fq(Array)e Fu(reference)k + (through)d(the)g(call)h(to)635 569 y Fn(CreateLeaf)54 + b(>::make)396 828 y Fu(The)31 b(call)f(to)g Fq + (MakeReturn::make)24 b Fu(permits)30 b(programmers)f(to)h + (store)g(trees)396 957 y(in)21 b(dif)n(ferent)f(formats.)g(The)h(POOMA) + g(implementation)d(stores)i(them)g(as)h Fq(Expression)p + Fu(s.)d(The)396 1087 y(function')-5 b(s)33 b(return)h(type)g(is)f + (similar)g(to)h(the)g Fq(return)f Fu(statement)g(e)o(xcept)h(it)f(e)o + (xtracts)h(the)g(type)396 1217 y(from)25 b Fq(Expression)p + Fu(')-5 b(s)22 b(internal)i Fq(Expression_t)e Fu(type.)396 + 1396 y(Specializing)i(all)g(the)g(operators)g(for)h Fq(Array)p + Fu(s)e(using)g(such)h(complicated)f(functions)h(is)f(lik)o(ely)h(to)396 + 1525 y(be)f(error)n(-prone)h(so)f(PETE)g(pro)o(vides)f(a)h(w)o(ay)g(to) + g(automate)f(their)h(creation.)g(Using)f(its)g Fq(MakeOp-)396 + 1655 y(erators)h Fu(command)h(with)g(this)g(input:)635 + 1964 y Fn(classes)635 2093 y(---)755 2223 y(ARG)179 b(=)59 + b("int)g(D[n],class)f(T[n],class)f(E[n]")755 2352 y(CLASS)i(=)g + ("Array")396 2611 y Fu(automatically)26 + b(generates)i(code)g(for)f(all)g(the)h(needed)f(operators.)g(The)h + (\223[n]\224)g(strings)e(are)j(used)e(to)396 2741 y(number)e(ar)n + (guments)f(for)h(binary)f(and)h(ternary)g(operators.)396 + 2920 y(Assignment)34 b(operators)h(must)g(also)g(be)g(specialized)h + (for)f Fq(Array)p Fu(.)g(Inside)g(the)g Fq(Array)g Fu(class)396 + 3050 y(de\002nition,)26 b(each)i(such)e(operator)h(just)f(in)l(v)n(ok)o + (es)g(the)h Fq(assign)e Fu(function)h(with)g(a)h(corresponding)396 + 3179 y(function)40 b(object.)g(F)o(or)h(e)o(xample,)f + Fq(operator+=)e Fu(in)l(v)n(ok)o(es)i Fq(assign\(*this,)62 + b(rhs,)396 3309 y(OpAddAssign\(\)\))p Fu(.)35 b Fq(rhs)j + Fu(is)f(the)h(parse)h(tree)f(object)g(for)h(the)f(right-hand)f(side.)h + (Calling)396 3438 y(this)24 b(function)g(in)l(v)n(ok)o(es)g + Fq(evaluate)p Fu(,)f(which)h(be)o(gins)g(the)g(e)n(v)n(aluation.)396 + 3618 y(Before)39 b(we)e(e)o(xplain)g(the)g(e)n(v)n(aluation,)e(let)i + (us)g(summarize)g(the)g(ef)n(fect)h(of)f(the)g(code)h(so)f(f)o(ar)h + (de-)396 3747 y(scribed.)i(If)g(we)h(are)f(considering)f(run)h(time)f + (e)n(v)n(aluation,)f(parse)i(trees)h(for)f(the)g(left-hand)f(and)396 + 3877 y(right-hand)28 b(sides)g(ha)n(v)o(e)g(been)g(constructed.)g(If)h + (we)g(are)g(considering)e(compile)h(time)f(e)n(v)n(aluation,)396 + 4006 y(the)35 b(types)f(of)g(these)h(parse)g(trees)g(are)g(kno)n(wn.)e + (At)i(compile)e(time,)h(the)g Fq(evaluate)f Fu(function)396 + 4136 y(described)25 b(belo)n(w)e(will)h(generate)h(a)g(loop)f + (iterating)g(through)g(the)g(left-hand)g(side)h(container')-5 + b(s)23 b(do-)396 4265 y(main.)29 b(The)g(loop')-5 b(s)28 + b(body)h(will)g(ha)n(v)o(e)g(code)g(computing)f(a)i(container')-5 + b(s)29 b(v)n(alue.)f(At)h(run)h(time,)e(this)396 4395 + y(code)i(will)f(read)h(v)n(alues)f(from)h(containers,)f(b)n(ut)g(the)h + (run-time)e(parse)j(tree)f(object)f(itself)g(will)g(not)396 + 4524 y(tra)n(v)o(ersed!)396 4703 y(W)-8 b(e)32 b(no)n(w)f(e)o(xplore)f + (the)i(e)n(v)n(aluation,)d(concentrating)i(on)g(compile)f(time,)h(not)g + (run)g(time.)f Fq(eval-)396 4833 y(uate)k Fu(is)h(an)g(o)o(v)o + (erloaded)f(function)g(specialized)g(on)h(the)g(type)f(of)h(the)g + (left-hand)g(side.)f(In)h(our)396 4962 y(e)o(xample,)j(the)g(left-hand) + g(side)g(is)g(a)h(one-dimensional)d Fq(Array)p Fu(,)i(so)g + Fq(evaluate\(const)396 5092 y(Ar&)65 b(a,)h(const)e(Op&)h(op,)g(const)g + (RHS&)f(rhs\))24 b Fu(is)h(inlined)e(into)h(a)h(loop)f(lik)o(e)p + Black 3734 5547 a Fp(138)p Black eop + %%Page: 139 139 + 139 138 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 635 180 a Fn(int)59 + b(end)h(=)f(a's)g(domain[0].first\(\))d(+)k(a's)f + (domain[0].length\(\);)635 310 y(for)g(\(int)g(i)h(=)f(a's)h + (domain[0].first\(\);)55 b(i)60 b(<)f(end;)g(++i\))755 + 439 y(op\(a\(i\),)f(rhs.read\(i\)\);)396 698 y Fq(a)28 + b Fu(is)f(the)g(array)-6 b(,)28 b Fq(op)f Fu(is)g(a)h(function)f + (object)g(representing)g(the)h(assignment)e(operation,)g(and)i + Fq(rhs)396 828 y Fu(is)d(the)f(right-hand)g(side')-5 + b(s)24 b(parse)h(tree.)396 1007 y(Ev)n(aluating)j Fq(rhs.read\(i\))e + Fu(inlines)i(into)g(a)i(call)f(to)g(the)g Fq(forEach)e + Fu(function.)i(This)f(func-)396 1137 y(tion)c(performs)h(a)g + Fp(compile-time)f Fu(post-order)g(parse-tree)i(tra)n(v)o(ersal.)e(Its)h + (general)g(form)f(is)635 1446 y Fn(forEach\(const)57 + b(Expression&)h(e,)h(const)g(LeafTag&)f(f,)1114 1575 + y(const)g(CombineTag&)g(c\).)396 1834 y Fu(That)28 b(is,)g(it)g(tra)n + (v)o(erses)g(the)g(nodes)g(of)h(the)f Fq(Expression)e + Fu(object)i Fq(e)p Fu(.)g(At)g(lea)n(v)o(es,)g(it)g(applies)f(the)396 + 1964 y(operation)c(speci\002ed)g(by)f Fq(LeafTag)g(f)p + Fu(.)g(At)h(interior)f(nodes,)g(it)h(combines)f(the)g(results)h(using)e + (the)396 2093 y Fq(CombineTag)i Fu(operator)i Fq(c)p + Fu(.)f(It)h(inlines)f(into)f(a)j(call)e(to)635 2352 y + Fn(ForEach::apply\(e,)d(f,)k + (c\))396 2611 y Fu(The)22 b Fq(apply)f Fu(function)g(continues)f(the)i + (tra)n(v)o(ersal)f(through)g(the)h(tree.)g(F)o(or)g(our)g(e)o(xample,)e + Fq(Leaf-)396 2741 y(Tag)j Fu(equals)g Fq(EvalLeaf<1>)p + Fu(,)e(and)i Fq(CombineTag)e Fu(equals)i Fq(OpCombine)p + Fu(.)f(The)h(former)396 2870 y(indicates)39 b(that,)f(when)h(reaching)h + (a)f(leaf,)h(the)f(leaf)g(should)f(be)i(a)f(one-dimensional)e + (container)396 3000 y(which)31 b(should)e(be)i(e)n(v)n(aluated)f(at)h + (the)g(position)e(stored)h(in)h(the)g Fq(EvalLeaf)e Fu(object.)h(The)h + Fq(Op-)396 3129 y(Combine)23 b Fu(class)i(applies)f(an)h(interior)f + (node')-5 b(s)24 b Fq(Op)h Fu(to)f(the)h(results)f(of)h(its)f + (children.)396 3309 y Fq(ForEach)i Fu(structures)h(are)h(specialized)g + (for)g(the)f(v)n(arious)f(node)i(types.)f(F)o(or)g(e)o(xample,)g(the)g + (spe-)396 3438 y(cialization)d(for)h Fq(UnaryNode)e Fu(is)635 + 3747 y Fn(template)635 3877 y(struct)g(ForEach,)k(FTag,)g + (CTag>)635 4006 y({)755 4136 y(typedef)f(typename)g + (ForEach::Type_t)c(TypeA_t;)755 4265 y(typedef)k(typename) + 874 4395 y(Combine1::Type_)o(t)c(Type_t;)755 + 4524 y(inline)k(static)755 4654 y(Type_t)g(apply\(const)g + (UnaryNode&expr,const)c(FTag&f,)874 4783 y(const)59 + b(CTag&)g(c\))755 4913 y({)874 5042 y(return)g(Combine1::)p Black 3734 5547 a Fp(139)p Black eop + %%Page: 140 140 + 140 139 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 994 51 a Fn + (combine\(ForEach::)1114 180 y + (apply\(expr.child\(\),)d(f,)k(c\),)h(c\);)755 310 y(})635 + 439 y(};)396 698 y Fu(Since)21 b(this)f(structure)g(is)f(specialized)i + (for)f Fq(UnaryNode)p Fu(s,)e(the)i(\002rst)h(parameter)g(of)f(its)g + Fq(static)396 828 y(apply)31 b Fu(function)f(is)i(a)g + Fq(UnaryNode)p Fu(.)d(After)j(recursi)n(v)o(ely)e(calling)h(its)g + (child,)g(it)g(in)l(v)n(ok)o(es)f(the)396 957 y(combination)f(function) + g(indicated)g(by)h(the)g Fq(Combine1)e Fu(traits)i(class.)f(In)h(our)g + (e)o(xample,)g(the)f Fq(c)396 1087 y Fu(function)i(object)g(should)g + (be)h(applied.)f(Other)h(combiners)e(ha)n(v)o(e)i(dif)n(ferent)f + (roles.)h(F)o(or)f(e)o(xample,)396 1217 y(using)c(the)h + Fq(NullCombine)d Fu(tag)j(indicates)f(the)h(child')-5 + b(s)27 b(result)g(should)g(not)g(be)h(combined)f(b)n(ut)396 + 1346 y(occurs)e(just)f(for)h(side)g(ef)n(fects.)396 1525 + y(Lea)n(v)o(es)g(are)g(treated)g(as)g(the)g(def)o(ault)f(beha)n(vior)h + (so)f(the)o(y)g(are)i(not)e(specialized:)635 1834 y Fn(template)635 1964 y(struct)g(ForEach) + 635 2093 y({)755 2223 y(typedef)f(typename)874 2352 y + (LeafFunctor::Type_t)h(Type_t;)755 2482 + y(inline)h(static)755 2611 y(Type_t)g(apply\(const)g(Expr&expr,const)e + (FTag&f,const)h(CTag&\))755 2741 y({)874 2870 y(return)i + (LeafFunctor::apply\(expr,)g(f\);)755 3000 + y(})635 3129 y(};)396 3388 y Fu(Thus,)30 b Fq(LeafFunctor)p + Fu(')-5 b(s)27 b Fq(apply)j Fu(member)g(is)g(called.)g + Fq(Expr)g Fu(represents)g(the)h(e)o(xpression)396 3518 + y(type,)h(e.g.,)h(an)f Fq(Array)p Fu(,)f(and)i Fq(FTag)e + Fu(is)h(the)h Fq(LeafTag)p Fu(,)d(e.g.,)j Fq(EvalLeaf)p + Fu(.)d(The)i Fq(Leaf-)396 3647 y(Functor)p Fu(specialization)18 + b(for)i Fq(Array)f Fu(passes)h(the)g(inde)o(x)f(stored)h(by)g(the)g + Fq(EvalLeaf)f Fu(object)396 3777 y(to)25 b(the)f Fq(Array)p + Fu(')-5 b(s)23 b(engine,)i(which)f(returns)h(the)f(corresponding)g(v)n + (alue.)396 3956 y(If)38 b(one)f(uses)g(an)g(aggressi)n(v)o(e)f + (optimizing)f(compiler)l(,)h(code)h(resulting)f(from)h(the)g + Fq(evaluate)396 4086 y Fu(function)24 b(corresponds)h(to)f(this)g + (pseudocode:)635 4395 y Fn(int)59 b(end)h(=)f(A.domain[0].first\(\))d + (+)j(A.domain[0].length\(\);)635 4524 y(for)g(\(int)g(i)h(=)f + (A.domain[0].first\(\);)d(i)j(<)h(end;)f(++i\))755 4654 + y(A.engine\(i\))e(+=)j(-A.engine.read\(i\)+2*B.engine)o(.rea)o(d\(i\))o + (;)396 4913 y Fu(The)27 b(loop)f(iterates)g(through)g + Fq(A)p Fu(')-5 b(s)26 b(domain,)f(using)h Fq(Array)p + Fu(')-5 b(s)25 b(engines)h(to)g(obtain)g(v)n(alues)f(and)i(as-)396 + 5042 y(signing)33 b(v)n(alues.)g(Notice)h(there)h(is)f(no)f(use)i(of)f + (the)g(run-time)f(parse)i(tree)g(so)f(the)g(optimizer)f(can)p + Black 3734 5547 a Fp(140)p Black eop + %%Page: 141 141 + 141 140 bop Black 2380 -132 a Fp(Chapter)24 b(7.)h(Data-P)-8 + b(ar)o(allel)22 b(Expr)l(essions)p Black 396 51 a Fu(eliminate)28 + b(the)g(code)h(to)f(construct)f(it.)h(All)g(the)g(w)o(ork)h(to)f + (construct)f(the)i(parse)f(tree)h(by)f(o)o(v)o(erload-)396 + 180 y(ing)33 b(operators)h(is)f(unimportant)e(at)j(run)f(time,)g(b)n + (ut)g(it)g(certainly)g(helped)g(the)h(compiler)e(produce)396 + 310 y(impro)o(v)o(ed)23 b(code.)396 489 y(PETE')-5 b(s)23 + b(e)o(xpression)e(template)i(technology)e(may)i(be)g(complicated,)f + (using)g(parse)h(trees)h(and)f(their)396 619 y(types,)j(b)n(ut)h(the)f + (produced)h(code)g(is)f(not.)h(Using)e(the)i(technology)f(is)g(also)h + (easy)-6 b(.)26 b(All)g(data-parallel)396 748 y(statements)32 + b(are)i(automatically)d(con)l(v)o(erted.)i(In)g(the)g(ne)o(xt)f + (chapter)l(,)h(we)h(e)o(xplore)e(vie)n(ws)g(of)h(con-)396 + 878 y(tainers,)f(permitting)e(use)h(of)h(container)g(subsets)f(and)g + (making)g(data-parallel)h(e)o(xpressions)e(e)n(v)o(en)396 + 1007 y(more)25 b(useful.)p Black 3734 5547 a Fp(141)p + Black eop + %%Page: 142 142 + 142 141 bop Black Black -2 119 a Fy(Chapter)58 b(8.)f(Container)i(Vie)m + (ws)396 416 y Fu(A)30 b Fp(vie)o(w)g(of)f(a)g(container)i + Fu(is)f(a)f(container)h(accessing)f(a)h(subset)f(of)h(C')-5 + b(s)29 b(domain)g(and)h(v)n(alues.)e(The)396 545 y(subset)i(can)h + (include)e(all)h(of)h(the)f(container')-5 b(s)30 b(domain.)f(A)h + (\223vie)n(w\224)g(is)g(so)g(named)g(because)h(it)f(is)g(a)396 + 675 y(dif)n(ferent)g(w)o(ay)h(to)e(access,)i(or)f(vie)n(w)-6 + b(,)29 b(another)i(container')-5 b(s)29 b(v)n(alues.)g(Both)i(the)f + (container)g(and)g(its)396 804 y(vie)n(w)c(share)h(the)g(same)g + (underlying)e(engine)i(so)f(changing)g(v)n(alues)g(in)h(one)f(also)h + (changes)g(them)f(in)396 934 y(the)f(other)-5 b(.)396 + 1113 y(A)26 b(vie)n(w)f(is)g(created)i(by)e(follo)n(wing)f(a)i + (container')-5 b(s)25 b(name)g(by)g(parentheses)h(containing)e(a)i + (domain.)396 1243 y(F)o(or)f(e)o(xample,)f(consider)g(this)g(code)h(e)o + (xtracted)g(from)f(Example)g(3-3)h(in)g(Section)f(3.3.)635 + 1552 y Fn(Interval<1>)58 b(N\(0,)h(n-1\);)635 1681 y(Interval<2>)f + (vertDomain\(N,)f(N\);)635 1811 y(Interval<1>)h(I\(1,n-2\);)635 + 1940 y(Interval<1>)g(J\(1,n-2\);)635 2070 y(Array<2,)g(double,)h + (Brick>)f(a\(vertDomain\);)635 2199 y(Array<2,)g(double,)h(Brick>)f + (b\(vertDomain\);)635 2329 y(a\(I,J\))h(=)g(\(1.0/9.0\))f(*)755 + 2458 y(\(b\(I+1,J+1\))f(+)j(b\(I+1,J)118 b(\))59 b(+)h(b\(I+1,J-1\))d + (+)815 2588 y(b\(I)119 b(,J+1\))58 b(+)i(b\(I)119 b(,J)g(\))59 + b(+)h(b\(I)119 b(,J-1\))58 b(+)815 2717 y(b\(I-1,J+1\))f(+)j(b\(I-1,J) + 118 b(\))59 b(+)h(b\(I-1,J-1\)\);)396 2976 y Fu(The)28 + b(last)f(statement)g(creates)h(ten)g(vie)n(ws.)f(F)o(or)g(e)o(xample,)g + Fq(a\(I,J\))f Fu(creates)j(a)f(vie)n(w)f(of)h Fq(a)f + Fu(using)396 3106 y(the)20 b(smaller)f(domain)f(speci\002ed)i(by)f + Fq(I)h Fu(and)f Fq(J)p Fu(.)h(This)e(omits)h(the)g(outermost)f(ro)n(ws) + h(of)h(columns)e(of)i Fq(a)p Fu(.)396 3235 y(The)30 b(vie)n(ws)f(of)h + Fq(b)f Fu(illustrate)g(the)h(use)f(of)h(vie)n(ws)f(in)g(data-parallel)h + (statements.)f Fq(b\(I-1,J-1\))396 3365 y Fu(has)c(a)g(subset)f + (shifted)g(up)h(one)f(ro)n(w)h(and)g(left)f(one)h(column)f(compared)h + (with)f Fq(b\(I,J\))p Fu(.)p Black 3734 5547 a Fp(142)p + Black eop + %%Page: 143 143 + 143 142 bop Black Black -2 119 a Fy(Appendix)58 b(A.)g(D)-8 + b(ANGER:)57 b(Pr)l(ogramming)-2 387 y(with)g(T)-12 b(emplates)396 + 685 y Fu(POOMA)28 b(e)o(xtensi)n(v)o(ely)d(uses)i(C++)i + Fp(template)p Fu(s)d(to)h(support)g(type)g(polymorphism)e(without)h + (incur)n(-)396 814 y(ring)39 b(an)o(y)f(run-time)g(cost.)h(In)g(this)f + (chapter)l(,)h(we)g(brie\003y)h(introduce)e(using)g(templates)g(in)g + (C++)396 944 y(programs)d(by)g(relating)g(them)g(to)g(\223ordinary\224) + h(C++)h(constructs)d(such)h(as)h(v)n(alues,)f(objects,)f(and)396 + 1073 y(classes.)25 b(The)g(tw)o(o)f(main)g(concepts)h(underlying)e(C++) + j(templates)e(will)g(occur)h(repeatedly:)p Black 396 + 1512 a Fs(\225)p Black 72 w Fu(T)-7 b(emplate)21 b(programming)e + (constructs)i(e)o(x)o(ecute)f(at)i(compile)e(time,)g(not)h(run)g(time.) + g(That)g(is,)g(tem-)496 1642 y(plate)j(operations)g(occur)i(within)d + (the)i(compiler)l(,)f(not)g(when)h(a)g(program)f(runs.)p + Black 396 1821 a Fs(\225)p Black 72 w Fu(T)-7 b(emplates)39 + b(permit)g(declaring)h(f)o(amilies)f(of)h(classes)g(using)f(a)h(single) + f(declaration.)h(F)o(or)f(e)o(x-)496 1951 y(ample,)28 + b(the)h Fq(Array)p Fu(template)f(declaration)g(permits)g(using)h + Fq(Array)p Fu(s)e(with)i(man)o(y)f(dif)n(ferent)496 2080 + y(v)n(alue)k(types,)h(e.g.,)g(arrays)g(of)g(inte)o(gers,)f(arrays)i(of) + f(\003oating)g(point)e(numbers,)i(and)g(arrays)g(of)496 + 2210 y(arrays.)396 2339 y(F)o(or)40 b(those)f(interested)f(in)h(the)h + (implementation)d(of)i(POOMA,)g(we)h(close)f(the)h(section)e(with)h(a) + 396 2469 y(discussion)24 b(of)i(some)f(template)g(programming)f + (concepts)i(used)f(in)h(the)f(implementation)f(b)n(ut)h(not)396 + 2598 y(lik)o(ely)f(to)h(be)f(used)h(by)g(POOMA)f(users.)-2 + 3051 y Fx(A.1.)47 b(T)-10 b(emplates)47 b(Ex)n(ecute)h(at)g + (Compile-Time)396 3267 y Fu(POOMA)26 b(uses)g(C++)h(templates)e(to)h + (support)f(type)g(polymorphism)f(without)g(incurring)i(an)o(y)f(run-) + 396 3396 y(time)g(cost)f(as)h(a)h(program)f(e)o(x)o(ecutes.)f(All)g + (template)h(operations)f(are)i(performed)f(at)g(compile)f(time)396 + 3526 y(by)h(the)f(compiler)-5 b(.)396 3705 y(Prior)25 + b(to)f(the)h(introduction)e(of)h(templates,)g(almost)f(all)h(of)h(a)g + (program')-5 b(s)24 b(interesting)f(computation)396 3834 + y(occurred)e(when)f(it)g(w)o(as)h(e)o(x)o(ecuted.)e(When)i(writing)e + (the)h(program,)g(the)g(programmer)l(,)g(at)g Fp(pr)l(o)o(gr)o(am-)396 + 3964 y(ming)25 b(time)p Fu(,)h(w)o(ould)f(specify)g(which)g(statements) + g(and)h(e)o(xpressions)e(will)h(occur)h(and)g(which)f(types)396 + 4093 y(to)j(use.)h(At)f Fp(compile)g(time)p Fu(,)g(the)g(compiler)g(w)o + (ould)g(con)l(v)o(ert)f(the)i(program')-5 b(s)27 b(source)i(code)g + (into)e(an)396 4223 y(e)o(x)o(ecutable)22 b(program.)g(Ev)o(en)g + (though)g(the)h(compiler)f(uses)g(the)h(types)f(to)g(produce)h(the)f(e) + o(x)o(ecutable,)396 4352 y(no)28 b(interesting)g(computation)e(w)o + (ould)i(occur)-5 b(.)28 b(At)g Fp(run)g(time)p Fu(,)g(the)h(resulting)e + (e)o(x)o(ecutable)h(program)396 4482 y(w)o(ould)c(actually)h(perform)f + (the)h(operations.)396 4661 y(The)k(introduction)e(of)h(templates)g + (permits)g(interesting)f(computation)g(to)h(occur)h(while)f(the)g(com-) + 396 4791 y(piler)22 b(produces)f(the)h(e)o(x)o(ecutable.)f(Most)g + (interesting)f(is)i(template)f(instantiation,)e(which)j(produces)396 + 4920 y(a)36 b(type)e(at)h(compile)g(time.)f(F)o(or)h(e)o(xample,)f(the) + h Fq(Array)f Fu(\223type\224)h(de\002nition)f(requires)h(template)396 + 5050 y(parameters)24 b Fq(Dim)p Fu(,)e Fq(T)p Fu(,)h(and)g + Fq(EngineTag)p Fu(,)e(specifying)i(its)f(dimension,)g(the)h(type)f(of)i + (its)e(v)n(alues,)p Black 3734 5547 a Fp(143)p Black + eop + %%Page: 144 144 + 144 143 bop Black 1750 -132 a Fp(Appendix)24 b(A.)h(D)m(ANGER:)f(Pr)l + (o)o(gr)o(amming)e(with)j(T)-9 b(emplates)p Black 396 + 51 a Fu(and)30 b(its)e Fq(Engine)g Fu(type.)h(T)-8 b(o)30 + b(use)f(this,)f(a)i(programmer)f(speci\002es)h(v)n(alues)e(for)i(the)f + (template)g(pa-)396 180 y(rameters:)23 b Fa(Array<2,double,Brick)q(>)29 + b Fu(speci\002es)23 b(a)h(dimension)d(of)i(2,)g(a)g(v)n(alue)g(type)396 + 310 y(of)29 b Fq(double)p Fu(,)f(and)h(the)g Fq(Brick)f(Engine)g + Fu(type.)h(At)f(compile)h(time,)f(the)h(compiler)f(creates)i(a)396 + 439 y(type)c(de\002nition)f(by)h(substituting)d(the)j(v)n(alues)f(for)h + (the)g(template)f(parameters)h(in)g(the)f(templatized)396 + 569 y(type)e(de\002nition.)e(The)i(substitution)d(is)i(analogous)g(to)g + (the)h(run-time)f(application)f(of)i(a)g(function)f(to)396 + 698 y(speci\002c)k(v)n(alues.)396 878 y(All)e(computation)f(not)h(in)l + (v)n(olving)f(run-time)h(input)f(or)i(output)e(can)i(occur)g(at)g + (programming)e(time,)396 1007 y(compile)j(time,)h(or)g(run)g(time,)f + (whiche)n(v)o(er)g(is)h(more)g(con)l(v)o(enient.)e(At)i(programming)f + (time,)g(a)h(pro-)396 1137 y(grammer)38 b(can)g(perform)g(computations) + e(by)i(hand)g(rather)g(than)g(writing)f(code)h(to)g(compute)f(it.)396 + 1266 y(C++)30 b(templates)f(are)h(T)l(uring-complete)d(so)i(the)o(y)f + (can)i(compute)e(an)o(ything)g(computable.)g(Unfor)n(-)396 + 1396 y(tunately)-6 b(,)28 b(syntax)g(for)i(compile-time)d(computation)h + (is)h(more)g(dif)n(\002cult)f(than)h(for)g(run-time)f(com-)396 + 1525 y(putation.)22 b(Also)g(current)h(compilers)g(are)g(not)g(as)g(ef) + n(\002cient)g(as)g(code)g(e)o(x)o(ecuted)g(by)f(hardw)o(are.)i(Run-)396 + 1655 y(time)30 b(C++)i(constructs)e(are)i(T)l(uring-complete)d(so)i + (using)f(templates)g(is)g(unnecessary)-6 b(.)31 b(Thus,)f(we)396 + 1784 y(can)35 b(shift)e(computation)g(to)h(the)g(time)f(which)h(best)g + (trades)g(of)n(f)g(the)g(ease)h(of)f(e)o(xpressing)f(syntax)396 + 1914 y(with)39 b(the)g(speed)g(of)h(computation)d(by)j(programmer)l(,)e + (compiler)l(,)h(or)g(computer)g(chip.)g(F)o(or)g(e)o(x-)396 + 2043 y(ample,)d(POOMA)g(uses)g(e)o(xpression)e(template)i(technology)f + (to)g(speed)h(run-time)g(e)o(x)o(ecution)e(of)396 2173 + y(data-parallel)23 b(statements.)d(The)j(POOMA)f(de)n(v)o(elopers)f + (decided)h(to)f(shift)h(some)g(of)g(the)g(computa-)396 + 2302 y(tion)f(from)h(run-time)f(to)g(compile-time)f(using)h(template)g + (computations.)f(The)i(resulting)e(run-time)396 2432 + y(code)30 b(runs)f(more)h(quickly)-6 b(,)28 b(b)n(ut)g(compiling)g(the) + i(code)f(tak)o(es)h(longer)-5 b(.)28 b(Also,)h(programming)f(time)396 + 2561 y(for)39 b(the)e(POOMA)h(de)n(v)o(elopers)f(increased)h + (signi\002cantly)-6 b(,)37 b(b)n(ut,)g(most)g(users,)h(who)g(are)g + (usually)396 2691 y(most)24 b(concerned)h(about)f(decreasing)h(run)g + (times,)f(bene\002ted.)-2 3193 y Fx(A.2.)47 b(T)-10 b(emplate)48 + b(Pr)m(ogramming)f(f)m(or)h(POOMA)g(User)m(s)396 3409 + y Fu(Most)26 b(POOMA)g(users)h(need)g(only)e(understand)h(a)h(subset)f + (of)h(a)n(v)n(ailable)f(constructs)f(for)i(template)396 + 3538 y(programming.)c(These)i(constructs)f(include)p + Black 396 3926 a Fs(\225)p Black 72 w Fu(reading)j(template)g + (declarations)f(and)i(understanding)e(template)g(parameters,)i(both)e + (of)i(which)496 4056 y(are)d(used)g(in)f(this)g(book.)p + Black 396 4235 a Fs(\225)p Black 72 w Fu(template)i(instantiation,)f + (i.e.,)j(specifying)e(a)i(particular)f(type)g(by)g(specifying)f(v)n + (alues)h(for)h(tem-)496 4365 y(plate)c(parameters.)p + Black 396 4544 a Fs(\225)p Black 72 w Fu(nested)g(type)h(names,)49 + b(which)24 b(are)i(types)e(speci\002ed)h(within)f(a)h(class)g + (de\002nition.)396 4673 y(W)-8 b(e)25 b(discuss)f(each)i(of)f(these)f + (belo)n(w)-6 b(.)396 4853 y(T)f(emplates)27 b(generalize)g(writing)f + (class)h(declarations)g(by)g(permitting)e(class)i(declarations)g + (depen-)396 4982 y(dent)f(on)h(other)f(types.)g(F)o(or)g(e)o(xample,)f + (consider)i(writing)e(a)i(class)f(storing)f(a)i(pair)f(of)h(inte)o + (gers)e(and)396 5112 y(a)30 b(class)g(storing)e(a)i(pair)g(of)f + (doubles.)g(See)i(Example)d(A-1.)i(Almost)e(all)h(of)h(the)g(code)f + (for)h(the)g(tw)o(o)p Black 3734 5547 a Fp(144)p Black + eop + %%Page: 145 145 + 145 144 bop Black 1750 -132 a Fp(Appendix)24 b(A.)h(D)m(ANGER:)f(Pr)l + (o)o(gr)o(amming)e(with)j(T)-9 b(emplates)p Black 396 + 51 a Fu(de\002nitions)31 b(is)h(the)g(same.)g(Both)g(of)g(these)g + (de\002nitions)f(de\002ne)i(a)f(class)g(with)f(a)i(constructor)e(and) + 396 180 y(storing)e(tw)o(o)g(v)n(alues)f(named)i Fq(left)e + Fu(and)i Fq(right)e Fu(ha)n(ving)h(the)h(same)f(type.)g(Only)g(the)g + (classes')396 310 y(names)c(and)f(its)h(use)f(of)h(types)f(dif)n(fer)-5 + b(.)396 589 y Fr(Example)26 b(A-1.)e(Classes)g(Storing)i(P)o(airs)e(of) + h(V)-9 b(alues)635 948 y Fn(//)60 b(Declare)e(a)h(class)g(storing)f(a)i + (pair)f(of)g(integers.)635 1077 y(struct)g(pairOfInts)e({)755 + 1207 y(pairOfInts\(const)f(int&)j(left,)g(const)f(int&)h(right\))874 + 1336 y(:)h(left_\(left\),)d(right_\(right\))g({})755 + 1595 y(int)i(left_;)755 1725 y(int)g(right_;)635 1854 + y(};)635 2113 y(//)h(Declare)e(a)h(class)g(storing)f(a)i(pair)f(of)g + (doubles.)635 2243 y(struct)g(pairOfDoubles)e({)755 2372 + y(pairOfDoubles\(const)e(double&)k(left,)f(const)h(double&)f(right\)) + 874 2502 y(:)i(left_\(left\),)d(right_\(right\))g({})755 + 2761 y(double)h(left_;)755 2890 y(double)g(right_;)635 + 3020 y(};)396 3378 y Fu(Using)34 b(templates,)f(we)i(can)g(use)f(a)h + (template)e(parameter)i(to)f(represent)h(their)f(dif)n(ferent)g(uses)g + (of)396 3508 y(types)d(and)f(write)h(one)g(templated)f(class)g + (de\002nition.)g(See)i(Example)e(A-2.)h(The)g(templated)f(class)396 + 3637 y(de\002nition)g(is)g(a)h(cop)o(y)f(of)h(the)f(common)f(portions)h + (of)g(the)g(tw)o(o)h(preceding)f(de\002nitions.)f(Because)396 + 3767 y(the)g(tw)o(o)e(de\002nitions)h(dif)n(fer)g(only)g(in)g(their)g + (use)g(of)h(the)f Fq(int)g Fu(and)g Fq(double)f Fu(types,)h(we)h + (replace)396 3896 y(these)38 b(concrete)h(types)e(with)g(a)i(template)e + (parameter)h Fq(T)p Fu(.)g(W)-8 b(e)38 b Fp(pr)l(ecede)p + Fu(,)h(not)f(follo)n(w)-6 b(,)36 b(the)i(class)396 4026 + y(de\002nition)28 b(with)g Fq(template)63 b()p + Fu(.)28 b(The)h(constructor')-5 b(s)27 b(parameters')i(types)396 + 4156 y(are)d(changed)f(to)f Fq(T)p Fu(,)h(as)g(are)g(the)g(data)g + (members')f(types.)396 4434 y Fr(Example)i(A-2.)e(T)-9 + b(emplated)26 b(Class)e(Storing)i(P)o(airs)e(of)h(V)-9 + b(alues)635 4793 y Fn(//)60 b(Declare)e(a)h(template)f(class)h(storing) + f(a)i(pair)f(of)g(values)635 4923 y(//)h(with)f(the)g(same)g(type.)635 + 5052 y(template)f()119 b(//)60 b Fi(\(1\))p + Black 3734 5547 a Fp(145)p Black eop + %%Page: 146 146 + 146 145 bop Black 1750 -132 a Fp(Appendix)24 b(A.)h(D)m(ANGER:)f(Pr)l + (o)o(gr)o(amming)e(with)j(T)-9 b(emplates)p Black 635 + 51 a Fn(struct)59 b(pair)g({)755 180 y(pair\(const)e(T&)j(left,)e + (const)h(T&)g(right\))119 b(//)59 b Fi(\(2\))874 310 + y Fn(:)h(left_\(left\),)d(right_\(right\))g({})755 569 + y(T)i(left_;)119 b(//)59 b Fi(\(3\))755 698 y Fn(T)g(right_;)635 + 828 y(};)635 1087 y(//)h(Use)f(a)g(class)g(storing)f(a)i(pair)f(of)g + (integers.)f Fi(\(4\))635 1217 y Fn(pair)g(pair1;)635 + 1476 y(//)i(Use)f(a)g(class)g(storing)f(a)i(pair)f(of)g(doubles;)635 + 1605 y(pair)e(pair2;)p Black 396 1914 a Fr(\(1\))p + Black 34 w Fu(T)-7 b(emplate)24 b(parameters)h(are)g(written)g(before,) + g(not)f(after)l(,)h(a)h(class)e(name.)p Black 396 2093 + a Fr(\(2\))p Black 34 w Fu(The)h(constructor)f(has)g(tw)o(o)h + (parameters)g(of)g(type)f Fq(const)65 b(T&)p Fu(.)p Black + 396 2273 a Fr(\(3\))p Black 34 w Fu(An)24 b(object)h(stores)f(tw)o(o)g + (v)n(alues)g(ha)n(ving)g(type)h Fq(T)p Fu(.)p Black 396 + 2452 a Fr(\(4\))p Black 34 w Fu(T)-8 b(o)24 b(use)g(a)g(templated)f + (class,)h(specify)g(the)g(template)f(parameter')-5 b(s)24 + b(ar)n(gument)f(after)i(the)f(class')-5 b(s)546 2581 + y(name)24 b(and)h(surrounded)f(by)h(angle)g(brack)o(ets)f(\()p + Fq(<>)p Fu(\).)396 2990 y(T)-8 b(o)47 b(use)g(a)g(template)g(class)f + (de\002nition,)g(template)h(ar)n(guments)f(follo)n(w)g(the)h(class)f + (name)h(sur)n(-)396 3119 y(rounded)35 b(by)h(angle)f(brack)o(ets)h(\()p + Fq(<>)p Fu(\).)g(F)o(or)f(e)o(xample,)g Fq(pair)e + Fp(instantiates)h Fu(the)h Fq(pair)396 3249 y Fu(template)25 + b(class)g(de\002nition)g(with)f Fq(T)h Fu(equal)h(to)f + Fq(int)p Fu(.)f(That)i(is,)e(the)i(compiler)e(creates)i(a)g + (de\002nition)396 3378 y(for)39 b Fq(pair)d Fu(by)i(cop)o(ying)f + Fq(pair)p Fu(')-5 b(s)37 b(template)g(de\002nition)g(and)h + (substituting)e Fq(int)h Fu(for)396 3508 y(each)27 b(occurrence)h(of)f + Fq(T)p Fu(.)f(The)g(cop)o(y)h(omits)e(the)h(template)g(parameter)h + (declaration)f Fq(template)396 3637 y()30 + b Fu(at)h(the)f(be)o(ginning)f(of)h(its)g(de\002nition.)g(The)g(result) + g(is)g(a)h(de\002nition)f(e)o(xactly)396 3767 y(the)25 + b(same)g(as)f Fq(pairOfInts)p Fu(.)396 3946 y(As)29 b(we)h(mentioned)e + (abo)o(v)o(e,)g(template)h(instantiation)e(is)i(analogous)g(to)g + (function)f(application.)g(A)396 4076 y(template)33 b(class)g(is)g + (analogous)g(to)g(a)h(function;)e(it)h(is)g(a)h(function)f(from)g + (types)g(and)g(constants)g(to)396 4205 y(classes.)e(The)g(analogy)g + (between)g(compile-time)e(and)i(run-time)f(programming)g(constructs)g + (can)396 4335 y(be)36 b(e)o(xtended.)e(T)-8 b(able)36 + b(A-1)f(lists)f(these)h(correspondences.)g(F)o(or)h(e)o(xample,)e(at)h + (run)h(time,)e(v)n(alues)396 4464 y(consist)d(of)h(things)e(such)i(as)g + (inte)o(gers,)f(\003oating)g(point)g(numbers,)g(pointers,)g(functions,) + g(and)g(ob-)396 4594 y(jects.)24 b(Programs)g(compute)f(by)h(operating) + f(on)h(these)g(v)n(alues.)f(The)h(compile-time)f(v)n(alues)g(include) + 396 4723 y(types,)g(and)g(compile-time)f(operations)g(use)h(these)g + (types.)g(F)o(or)g(both)f(run-time)h(and)g(compile-time)396 + 4853 y(programming,)35 b(C++)i(de\002nes)f(def)o(ault)g(sets)g(of)g(v)n + (alues)f(that)h(all)f(conforming)g(compilers)g(must)396 + 4982 y(support.)26 b(F)o(or)h(e)o(xample,)e Fq(3)i Fu(and)g + Fq(6.022e+23)d Fu(are)k(run-time)e(v)n(alues)g(that)g(an)o(y)g(C++)i + (compiler)396 5112 y(must)c(accept.)h(It)g(must)f(also)g(accept)h(the)g + Fq(int)p Fu(,)f Fq(bool)p Fu(,)g(and)h Fq(int*)f Fu(types.)p + Black 3732 5547 a Fp(146)p Black eop + %%Page: 147 147 + 147 146 bop Black 1750 -132 a Fp(Appendix)24 b(A.)h(D)m(ANGER:)f(Pr)l + (o)o(gr)o(amming)e(with)j(T)-9 b(emplates)p Black 396 + 51 a Fr(T)g(able)26 b(A-1.)e(Corr)n(espondences)j(Between)g(Run-T)n + (ime)f(and)g(Compile-T)n(ime)f(Constructs)396 288 y Fv(pr)n(ogramming)h + (construct)42 b(run)27 b(time)769 b(compile)27 b(time)396 + 429 y Fu(v)n(alues)910 b(inte)o(gers,)23 b(strings,)h(objects,)1559 + 559 y(functions,)f(.)15 b(.)g(.)2721 429 y(types,)24 + b(.)15 b(.)g(.)396 700 y(create)26 b(a)f(v)n(alue)f(to)h(store)396 + 830 y(multiple)e(v)n(alues)1559 700 y(object)h(creation)573 + b(class)24 b(de\002nition)396 972 y(v)n(alues)g(stored)h(within)e(a)396 + 1101 y(collection)1559 972 y(data)h(member)l(,)h(member)1559 + 1101 y(function)2721 972 y(nested)f(type)h(name,)f(nested)2721 + 1101 y(class,)g(static)h(member)2721 1231 y(function,)f(constant)g + (inte)o(gral)2721 1360 y(v)n(alues)396 1502 y(placeholder)h(for)g + (\223an)o(y)396 1631 y(particular)g(v)n(alue\224)1559 + 1502 y(v)n(ariable,)f(e.g.,)g(\223an)o(y)h(int\224)239 + b(template)24 b(ar)n(gument,)g(e.g.,)2721 1631 y(\223an)o(y)g(type\224) + 396 1773 y(packaging)h(repeated)396 1902 y(operations)1559 + 1773 y(A)f(function)g(generalizes)h(a)1559 1902 y(particular)f + (operation)g(applied)1559 2032 y(to)g(dif)n(ferent)g(v)n(alues.)g(The) + 1559 2161 y(function)g(parameters)g(are)1559 2291 y(placeholders)g(for) + h(particular)1559 2421 y(v)n(alues.)2721 1773 y(A)g(template)f(class)g + (generalizes)2721 1902 y(a)h(particular)g(class)f(de\002nition)2721 + 2032 y(using)g(dif)n(ferent)g(types.)g(The)2721 2161 + y(template)g(parameters)h(are)2721 2291 y(placeholders)f(for)h + (particular)2721 2421 y(v)n(alues.)396 2562 y(application)719 + b(Use)24 b(a)i(function)d(by)i(appending)1559 2692 y(function)f(ar)n + (guments)1559 2821 y(surrounded)g(by)g(parentheses.)2721 + 2562 y(Use)h(a)g(template)f(class)g(by)2721 2692 y(appending)g + (template)2721 2821 y(ar)n(guments)g(surrounded)g(by)2721 + 2951 y(angle)h(brack)o(ets)f(\(<>\).)396 3180 y(The)19 + b(set)g(of)h(supported)e(run-time)g(and)h(compile-time)f(v)n(alues)g + (can)i(be)f(e)o(xtended.)f(Run-time)h(v)n(alues)396 3309 + y(can)27 b(be)f(e)o(xtended)g(by)g(creating)g(ne)n(w)g(objects.)g + (Although)e(not)i(part)g(of)h(the)f(def)o(ault)g(set)g(of)g(v)n(alues,) + 396 3439 y(these)32 b(objects)f(are)i(treated)f(and)g(operated)g(on)f + (as)h(v)n(alues.)f(T)-8 b(o)32 b(e)o(xtend)f(the)g(set)h(of)g + (compile-time)396 3568 y(v)n(alues,)25 b(class)h(de\002nitions)e(are)j + (written.)e(F)o(or)h(e)o(xample,)f(Example)g(A-1)h(declares)g(tw)o(o)f + (ne)n(w)h(types)396 3698 y Fq(pairOfInts)18 b Fu(and)i + Fq(pairOfDoubles)p Fu(.)d(Although)i(not)g(part)h(of)g(the)g(set)g(of)g + (b)n(uilt-in)f(types,)396 3827 y(these)24 b(types)f(can)g(be)h(used)f + (in)h(the)f(same)g(w)o(ay)h(that)f(an)o(y)g(other)g(types)g(can)h(be)g + (used,)f(e.g.,)g(declaring)396 3957 y(v)n(ariables.)396 + 4136 y(Functions)c(generalize)i(similar)e(run-time)g(operations,)g + (while)g(template)g(class)h(generalize)g(similar)396 + 4266 y(class)35 b(de\002nitions.)f(A)h(function)f(de\002nition)g + (generalizes)h(a)g(repeated)h(run-time)e(operation.)g(F)o(or)396 + 4395 y(e)o(xample,)24 b(consider)h(repeatedly)f(printing)g(the)g(lar)n + (gest)h(of)g(tw)o(o)f(numbers:)635 4704 y Fn(std::cout)58 + b(<)6 b(<)59 b(\(3)g(>)h(4)f(?)h(3)g(:)f(4\))g(<)6 b(<)59 + b(std::endl;)635 4834 y(std::cout)f(<)6 b(<)59 b(\(4)g(>)h(-13)f(?)h(4) + f(:)h(-13\))f(<)6 b(<)58 b(std::endl;)635 4963 y(std::cout)g(<)6 + b(<)59 b(\(23)g(>)h(4)f(?)h(23)f(:)h(4\))f(<)6 b(<)59 + b(std::endl;)635 5093 y(std::cout)f(<)6 b(<)59 b(\(0)g(>)h(3)f(?)h(0)g + (:)f(3\))g(<)6 b(<)59 b(std::endl;)p Black 3730 5547 + a Fp(147)p Black eop + %%Page: 148 148 + 148 147 bop Black 1750 -132 a Fp(Appendix)24 b(A.)h(D)m(ANGER:)f(Pr)l + (o)o(gr)o(amming)e(with)j(T)-9 b(emplates)p Black 396 + 180 a Fu(Each)35 b(statement)f(is)g(e)o(xactly)h(the)f(same)h(e)o + (xcept)f(for)h(the)g(repeated)h(tw)o(o)e(v)n(alues.)g(Thus,)g(we)h(can) + 396 310 y(generalize)26 b(these)e(statements)g(writing)f(a)j(function:) + 635 569 y Fn(void)59 b(maxOut\(int)f(a,)h(int)g(b\))635 + 698 y({)h(std::cout)e(<)6 b(<)59 b(\(a)g(>)g(b)h(?)g(a)f(:)h(b\))f(<)6 + b(<)59 b(std::endl;)e(})396 957 y Fu(The)25 b(function')-5 + b(s)23 b(body)h(consists)f(of)i(the)f(statement)g(with)g(v)n(ariables)g + (substituted)e(for)j(the)g(tw)o(o)f(par)n(-)396 1087 + y(ticular)j(v)n(alues.)e(Each)i(parameter)g(v)n(ariable)g(is)f(a)h + (placeholder)f(that,)h(when)f(used,)g(holds)g(one)h(par)n(-)396 + 1217 y(ticular)i(v)n(alue)f(among)h(the)g(set)f(of)i(possible)d(inte)o + (gral)h(v)n(alues.)h(The)g(function)f(must)g(be)h(named)g(to)396 + 1346 y(permit)23 b(its)f(use,)h(and)h(declarations)e(for)i(its)e(tw)o + (o)h(parameters)h(follo)n(w)-6 b(.)21 b(Using)h(the)h(function)g + (simpli-)396 1476 y(\002es)j(the)e(code:)635 1735 y Fn(maxOut\(3,)58 + b(4\);)635 1864 y(maxOut\(4,)g(-13\);)635 1994 y(maxOut\(23,)g(4\);)635 + 2123 y(maxOut\(0,)g(3\);)396 2382 y Fu(T)-8 b(o)24 b(use)g(a)g + (function,)f(the)g(function')-5 b(s)23 b(name)g(precedes)i(parentheses) + e(surrounding)g(speci\002c)h(v)n(alues)396 2512 y(for)h(its)f + (parameters,)h(b)n(ut)f(the)h(function')-5 b(s)24 b(return)g(type)h(is) + f(omitted.)396 2691 y(A)e(template)f(class)h(de\002nition)f + (generalizes)h(repeated)h(class)e(de\002nitions.)g(If)h(tw)o(o)g(class) + f(de\002nitions)396 2821 y(dif)n(fer)32 b(only)g(in)g(a)h(fe)n(w)f + (types,)g(template)f(parameters)65 b(can)33 b(be)f(substituted.)e(Each) + j(parameter)g(is)396 2950 y(a)h(placeholder)g(that,)e(when)i(used,)f + (holds)g(one)g(particular)g(v)n(alue,)g(i.e.,)h(type,)f(among)g(the)g + (set)g(of)396 3080 y(possible)27 b(v)n(alues.)g(The)i(class)e + (de\002nition)h(is)f(named)h(to)g(permit)f(its)h(use,)g(and)g + (declarations)g(for)g(its)396 3209 y(parameters)i(precede)g(it.)f(The)h + (e)o(xample)f(found)g(in)g(the)g(pre)n(vious)g(section)g(illustrates)f + (this)g(trans-)396 3339 y(formation.)36 b(Compare)i(the)f(original,)f + (untemplated)g(classes)h(in)g(Example)f(A-1)h(with)g(the)g(tem-)396 + 3468 y(plated)23 b(class)f(in)g(Example)g(A-2.)h(Note)f(the)h(notation) + e(for)i(the)g(template)f(class)g(parameters.)h Fq(tem-)396 + 3598 y(plate)65 b()29 b Fp(pr)l(ecedes)h + Fu(the)f(class)g(de\002nition.)f(The)h(k)o(e)o(yw)o(ord)f + Fq(typename)432 3727 y Fu(indicates)34 b(the)i(template)e(parameter)i + (is)f(a)h(type.)e Fq(T)i Fu(is)f(the)g(template)f(parameter')-5 + b(s)36 b(name.)f(\(W)-8 b(e)396 3857 y(could)37 b(ha)n(v)o(e)f(used)h + (an)o(y)f(other)h(identi\002er)g(such)g(as)g Fq(pairElementType)c + Fu(or)k Fq(foo)p Fu(.\))g(Note)396 3986 y(that)22 b(using)g + Fq(class)43 b Fu(is)22 b(equi)n(v)n(alent)f(to)h(using)f + Fq(typename)g Fu(so)h Fq(template)63 b()396 + 4116 y Fu(is)24 b(equi)n(v)n(alent)f(to)h Fq(template)64 + b()p Fu(.)24 b(While)g(declaring)h(a)g(template)e(class)i + (re-)396 4245 y(quires)20 b(pre\002x)g(notation,)e(using)h(a)h + (templated)f(class)g(requires)h(post\002x)f(notation.)g(The)g(class')-5 + b(s)19 b(name)396 4375 y(precedes)28 b(angle)e(brack)o(ets)h(\(<>\))h + (surrounding)d(speci\002c)j(v)n(alues,)d(i.e.,)i(types,)f(for)h(its)f + (parameters.)396 4504 y(As)j(we)h(sho)n(wed)e(abo)o(v)o(e,)g + Fq(pair)f Fp(instantiates)56 b Fu(the)29 b(template)f(class)h + Fq(pair)g Fu(with)f Fq(int)396 4634 y Fu(for)d(its)f(type)h(parameter)g + Fq(T)p Fu(.)396 4813 y(In)30 b(template)f(programming,)f(nested)h(type) + h(names)f(store)h(compile-time)e(data)h(that)h(can)g(be)g(used)396 + 4943 y(within)c(template)h(classes.)g(Since)h(compile-time)d(class)j + (de\002nitions)e(are)i(analogous)e(to)h(run-time)396 + 5072 y(objects)38 b(and)g(the)g(latter)g(stores)g(named)g(v)n(alues,)f + (nested)h(type)g(names)g(are)h(v)n(alues,)e(i.e.,)h(types,)p + Black 3734 5547 a Fp(148)p Black eop + %%Page: 149 149 + 149 148 bop Black 1750 -132 a Fp(Appendix)24 b(A.)h(D)m(ANGER:)f(Pr)l + (o)o(gr)o(amming)e(with)j(T)-9 b(emplates)p Black 396 + 51 a Fu(stored)32 b(within)e(class)i(de\002nitions.)e(F)o(or)i(e)o + (xample,)f(the)h(template)f(class)g Fq(Array)g Fu(has)h(an)g(nested)396 + 180 y(type)25 b(name)f(for)h(the)g(type)g(of)f(its)h(domain:)635 + 489 y Fn(typedef)59 b(typename)f(Engine_t::Domain_t)d(Domain_t;)396 + 748 y Fu(This)50 b Fq(typedef)p Fu(,)f(i.e.,)h(type)g(de\002nition,)f + (de\002nes)i(the)f(type)g Fq(Domain_t)f Fu(as)h(equi)n(v)n(alent)396 + 878 y(to)i Fq(Engine_t::Domain_t)p Fu(.)47 b(The)52 b + Fq(::)f Fu(operator)h(selects)f(the)h Fq(Domain_t)e Fu(nested)396 + 1007 y(type)i(from)h(inside)e(the)i Fq(Engine_t)d Fu(type.)i(This)g + (illustrates)f(ho)n(w)h(to)g(access)h Fq(Array)p Fu(')-5 + b(s)396 1137 y Fq(Domain_t)54 b Fu(when)h(not)g(within)f + Fq(Array)p Fu(')-5 b(s)53 b(scope:)i Fq(Array::Domain_t)p Fu(.)31 b(The)j(analogy)f + (between)h(object)f(members)h(and)g(nested)f(type)h(names)396 + 1396 y(alludes)22 b(to)f(its)h(usefulness.)f(Just)g(as)h(run-time)f + (object)h(members)f(store)h(information)f(for)h(later)g(use,)396 + 1525 y(nested)35 b(type)g(names)f(store)h(type)g(information)f(for)h + (later)g(use)g(at)g(compile)f(time.)g(Using)h(nested)396 + 1655 y(type)25 b(names)f(has)h(no)f(impact)g(on)h(the)g(speed)f(of)h(e) + o(x)o(ecuting)f(programs.)-2 2157 y Fx(A.3.)47 b(T)-10 + b(emplate)48 b(Pr)m(ogramming)f(Used)h(to)g(Write)-2 + 2381 y(POOMA)396 2597 y Fu(The)29 b(preceding)g(section)g(presented)g + (template)f(programming)g(tools)g(needed)h(to)g(read)h(this)e(book)396 + 2726 y(and)c(write)f(programs)g(using)g(the)g(POOMA)g(T)-8 + b(oolkit.)22 b(In)i(this)f(section,)f(we)i(present)f(template)g(pro-) + 396 2856 y(gramming)30 b(techniques)g(used)h(to)g(implement)e(POOMA.)i + (W)-8 b(e)31 b(e)o(xtend)g(the)g(correspondence)g(be-)396 + 2985 y(tween)22 b(compile-time)e(template)g(programming)g(constructs)h + (and)g(run-time)g(constructs)g(started)g(in)396 3115 + y(the)g(pre)n(vious)f(section.)h(Reading)g(this)f(section)h(is)g(not)f + (necessary)i(unless)e(you)h(wish)f(to)h(understand)396 + 3244 y(ho)n(w)j(POOMA)h(is)f(implemented.)396 3424 y(In)29 + b(the)f(pre)n(vious)g(section,)g(we)h(used)f(a)h(correspondence)g + (between)f(run-time)g(and)h(compile-time)396 3553 y(programming)i + (constructs)g(to)h(introduce)g(template)f(programming)g(concepts,)h + (which)g(occur)g(at)396 3683 y(compile)27 b(time.)g(See)h(T)-8 + b(able)28 b(A-1.)f(In)h(implementing)d(POOMA,)i(more)h(constructs)e + (are)j(used.)e(W)-8 b(e)396 3812 y(list)24 b(these)h(in)f(T)-8 + b(able)25 b(A-2.)396 4091 y Fr(T)-9 b(able)42 b(A-2.)f(Mor)n(e)h(Corr)n + (espondences)h(Between)g(Run-T)n(ime)f(and)g(Compile-T)n(ime)g(Con-)396 + 4221 y(structs)396 4438 y Fv(pr)n(ogramming)26 b(construct)42 + b(run)27 b(time)769 b(compile)27 b(time)396 4580 y Fu(v)n(alues)910 + b(inte)o(gers,)23 b(strings,)h(objects,)1559 4709 y(functions,)f(.)15 + b(.)g(.)2721 4580 y(types,)24 b(constant)g(inte)o(gers)g(and)2721 + 4709 y(enumerations,)f(pointers)h(and)2721 4839 y(references)i(to)e + (objects)h(and)2721 4968 y(functions,)e(e)o(x)o(ecutable)h(code,)2721 + 5098 y(.)15 b(.)g(.)p Black 3734 5547 a Fp(149)p Black + eop + %%Page: 150 150 + 150 149 bop Black 1750 -132 a Fp(Appendix)24 b(A.)h(D)m(ANGER:)f(Pr)l + (o)o(gr)o(amming)e(with)j(T)-9 b(emplates)p Black 396 + 85 a Fv(pr)n(ogramming)26 b(construct)42 b(run)27 b(time)769 + b(compile)27 b(time)396 226 y Fu(operations)d(on)h(v)n(alues)345 + b(Inte)o(gral)24 b(v)n(alues)g(support)g Fq(+)p Fu(,)g + Fq(-)p Fu(,)1559 356 y Fq(>)p Fu(,)g Fq(==)p Fu(,)g(.)15 + b(.)g(.)g(.)25 b(String)f(v)n(alues)1559 485 y(support)f + Fq([])p Fu(,)i Fq(==)p Fu(,)f(.)15 b(.)g(.)g(.)2721 226 + y(T)-8 b(ypes)24 b(may)h(be)g(declared)g(and)2721 356 + y(used.)f(Constant)g(inte)o(gral)g(and)2721 485 y(enumeration)g(v)n + (alues)g(can)h(be)2721 615 y(combined)f(using)g Fq(+)p + Fu(,)g Fq(-)p Fu(,)h Fq(>)p Fu(,)f Fq(==)p Fu(,)2721 + 744 y(.)15 b(.)g(.)g(.)24 b(There)h(are)h(no)f(permitted)2721 + 874 y(operations)f(on)g(code.)396 1016 y(v)n(alues)g(stored)h(in)f(a)h + (collection)52 b(An)24 b(object)h(stores)f(v)n(alues.)212 + b(A)24 b Fp(tr)o(aits)f(class)h Fu(contains)f(v)n(alues)2721 + 1145 y(describing)h(a)h(type.)396 1287 y(e)o(xtracting)f(v)n(alues)g + (from)396 1416 y(collections)1559 1287 y(An)g(object')-5 + b(s)24 b(named)h(v)n(alues)1559 1416 y(are)g(e)o(xtracted)g(using)e + (the)1559 1546 y Fq(.)h Fu(operator)-5 b(.)2721 1287 + y(A)25 b(class')-5 b(s)24 b(nested)g(types)g(and)2721 + 1416 y(classes)g(are)i(e)o(xtracted)f(using)2721 1546 + y(the)g Fq(::)f Fu(operator)-5 b(.)396 1687 y(control)24 + b(\003o)n(w)h(to)f(choose)396 1817 y(among)g(operations)1559 + 1687 y Fq(if)p Fu(,)g Fq(while)p Fu(,)f Fq(goto)p Fu(,)h(.)15 + b(.)g(.)185 b(template)24 b(class)2721 1817 y(specializations)f(with)h + (pattern)2721 1946 y(matching)396 2176 y(The)39 b(only)g(compile-time)e + (v)n(alues)i(described)g(in)g(the)g(pre)n(vious)e(section)i(were)h + (types,)e(b)n(ut)h(an)o(y)396 2305 y(compile-time)31 + b(constant)h(can)h(also)f(be)h(used.)f(Inte)o(gral)g(literals,)g + Fq(const)f Fu(v)n(ariables,)h(and)g(other)396 2435 y(constructs)c(can)i + (be)f(used,)g(b)n(ut)f(the)h(main)f(use)h(is)g(enumerations.)f(An)h + Fp(enumer)o(ation)e Fu(is)h(a)i(distinct)396 2564 y(inte)o(gral)d(type) + h(with)f(named)h(constants.)e(F)o(or)i(e)o(xample,)f(the)h + Fq(Array)f Fu(declaration)g(declares)i(tw)o(o)396 2694 + y(separate)d(enumerations:)635 3052 y Fn(template)635 3182 y(class)g(Array)635 + 3311 y({)635 3441 y(public:)755 3570 y(typedef)f(Engine)d(Engine_t;)755 3700 y(enum)i({)g(dimensions)f(=)h + (Engine_t::dimensions)d(};)755 3829 y(enum)j({)g(rank)g(=)h + (Engine_t::dimensions)55 b(};)635 3959 y(...)396 4218 + y Fu(The)28 b(\002rst)f(enumeration)g(declares)h(the)f(constant)g + Fq(dimensions)e Fu(to)i(be)h(equal)f(to)g(the)g(v)n(alue)g(of)396 + 4347 y(the)i Fq(dimensions)d Fu(within)i(the)h Fq(Array)p + Fu(')-5 b(s)27 b Fq(Engine)p Fu(.)g(The)i(second)g(enumeration)f + (declares)396 4477 y(the)h(constant)e Fq(rank)h Fu(to)g(ha)n(v)o(e)g + (the)g(same)g(v)n(alue.)g(Semantically)-6 b(,)27 b(both)h(indicate)g + (the)g(dimension-)396 4606 y(ality)f(of)h(the)f(array')-5 + b(s)28 b(domain.)f(Enumeration)f(constants)h(ha)n(v)o(e)g(inte)o(gral)g + (v)n(alues)g(so)g(the)o(y)g(may)g(be)396 4736 y(used)e(where)n(v)o(er)f + (inte)o(gers)g(can)h(be)g(used.)g(F)o(or)f(e)o(xample,)635 + 4995 y Fn(enum)59 b({)h(dimensionPlusRank)c(=)j(dimensions)f(+)h(rank)g + (};)p Black 3734 5547 a Fp(150)p Black eop + %%Page: 151 151 + 151 150 bop Black 1750 -132 a Fp(Appendix)24 b(A.)h(D)m(ANGER:)f(Pr)l + (o)o(gr)o(amming)e(with)j(T)-9 b(emplates)p Black 396 + 180 a Fu(could)26 b(be)g(added)f(to)h(the)f Fq(Array)g + Fu(declaration.)h(Declaring)f(an)h(enumeration)f(is)h(a)g(compile-time) + 396 310 y(construct)e(analogous)g(to)g(assigning)f(an)i(inte)o(gral)e + (v)n(alue)h(to)g(a)h(v)n(ariable)f(at)h(run)f(time.)g(Note)g(that)g(an) + 396 439 y(enumerated)h(constant')-5 b(s)23 b(v)n(alue)i(cannot)f(be)h + (changed.)396 619 y(Enumerations)f(are)h(frequently)g(used)f(in)g + (template)g(programming)g(because)p Black 396 898 a Fs(\225)p + Black 72 w Fu(an)g(enumeration)e(declares)i(a)g(ne)n(w)f(type,)h(which) + f(ensures)g(it)g(is)g(a)n(v)n(ailable)g(at)h(compile)f(time)f(and)p + Black 396 1077 a Fs(\225)p Black 72 w Fu(constant)29 + b(inte)o(gral)g(v)n(alues,)f(and)i(thus)f(enumerated)h(constants,)e + (can)j(be)f(used)f(in)g(all)h(compile-)496 1207 y(time)24 + b(e)o(xpressions)f(and)i(as)g(template)f(ar)n(guments.)396 + 1336 y(The)j(use)g(of)g(non-inte)o(gral)f(constant)g(v)n(alues)g(such)h + (as)g(\003oating-point)f(numbers)g(at)h(compile)f(time)396 + 1466 y(is)f(restricted.)396 1645 y(Other)31 b(compile-time)f(v)n(alues) + g(include)h(pointers)f(to)h(objects)f(and)h(functions,)f(references)j + (to)d(ob-)396 1774 y(jects)36 b(and)f(functions,)f(and)i(e)o(x)o + (ecutable)f(code.)g(F)o(or)h(e)o(xample,)e(a)i(pointer)f(to)g(a)h + (function)f(some-)396 1904 y(times)21 b(is)g(passed)h(to)f(a)h + (template)f(function)g(to)h(perform)g(a)g(speci\002c)g(task.)f(Ev)o(en) + h(though)e(e)o(x)o(ecutable)396 2033 y(code)30 b(cannot)f(be)h + (directly)f(represented)h(in)f(a)h(program,)f(it)g(is)g(a)h + (compile-time)e(v)n(alue)h(which)g(the)396 2163 y(compiler)23 + b(uses.)f(A)i(simple)e(e)o(xample)g(is)h(a)g(class)g(that)g(is)f + (created)i(by)f(template)g(instantiation,)d(e.g.,)396 + 2292 y Fq(pair)p Fu(.)j(Conceptually)-6 b(,)24 b(the)h + Fq(int)f Fu(template)h(ar)n(gument)f(is)h(substituted)e(throughout)g + (the)396 2422 y Fq(pair)34 b Fu(template)f(class)h(to)g(produce)g(a)g + (class)g(de\002nition.)f(Although)g(neither)h(the)g(programmer)396 + 2552 y(nor)f(the)f(user)h(sees)g(this)e(class)i(de\002nition,)e(it)i + (is)f(represented)h(inside)e(the)i(compiler)l(,)f(which)g(can)396 + 2681 y(use)25 b(and)g(manipulate)e(the)i(code.)396 2860 + y(Through)36 b(template)h(programming,)e(the)i(compiler')-5 + b(s)36 b(optimizer)f(can)j(transform)e(complicated)396 + 2990 y(code)23 b(into)e(much)h(simpler)f(code.)i(In)f(Section)g(7.3,)g + (we)h(describe)f(the)g(complicated)g(template)f(code)396 + 3119 y(used)36 b(to)g(implement)f(ef)n(\002ciently)h(data-parallel)h + (operations.)e(Although)g(the)h(template)g(code)h(is)396 + 3249 y(complicated,)29 b(the)h(compiler)f(optimization)e(frequently)j + (greatly)f(simpli\002es)g(it)g(to)g(yield)h(simple,)396 + 3378 y(f)o(ast)25 b(loops.)f(W)-8 b(e)25 b(illustrate)f(this)f(with)h + (a)i(simple)d(template)h(class:)635 3687 y Fn(template)58 + b()635 3817 y(struct)g(usuallySimpleClass)d({) + 755 3946 y(usuallySimpleClass\(\))f({)874 4076 y(if)60 + b(\(complicatedCase\))994 4205 y(i)g(=)f + (do_some_very_complicated_compu)o(tatio)o(n\(\);)874 + 4335 y(else)994 4464 y(i)h(=)f(0;)755 4594 y(})755 4723 + y(int)g(i;)635 4853 y(};)p Black 3734 5547 a Fp(151)p + Black eop + %%Page: 152 152 + 152 151 bop Black 1750 -132 a Fp(Appendix)24 b(A.)h(D)m(ANGER:)f(Pr)l + (o)o(gr)o(amming)e(with)j(T)-9 b(emplates)p Black 396 + 180 a Fu(The)23 b Fq(usuallySimpleClass)18 b Fu(has)k(one)g(boolean)g + (template)g(parameter)h Fq(complicat-)396 310 y(edCase)p + Fu(,)29 b(which)h(should)f(be)i(true)f(only)g(if)g(the)g(constructor)g + (must)f(perform)i(some)e(v)o(ery)h(com-)396 439 y(plicated,)39 + b(time-e)o(xpensi)n(v)o(e)e(computation.)g(When)j(instantiated)e(with)h + Fq(false)p Fu(,)f(the)h(compiler)396 569 y(substitutes)24 + b(this)h(v)n(alue)g(into)g(the)h(template)f(class)g(de\002nition.)g + (Since)h(the)g Fq(if)f Fu(statement')-5 b(s)25 b(condi-)396 + 698 y(tional)c(is)h(f)o(alse,)g(the)g(compiler)g(optimizer)f(can)i + (eliminate)e(the)h(statement,)f(yielding)f(internal)i(code)396 + 828 y(similar)i(to)635 1087 y Fn(struct)59 b(usuallySimpleClass) + 54 b({)755 1217 y(usuallySimpleClass\(\))h({)874 1346 + y(i)60 b(=)g(0;)755 1476 y(})755 1605 y(int)f(i;)635 + 1735 y(};)396 1994 y Fu(The)26 b(optimizer)f(might)f(further)i + (simplify)e(the)i(code)g(by)g(inlining)e(the)h(constructor')-5 + b(s)25 b(assignment.)396 2123 y(Because)h(the)e(resulting)f(code)h(is)g + (ne)n(v)o(er)g(displayed,)f(the)h(programmer)g(does)g(not)f(kno)n(w)h + (ho)n(w)f(sim-)396 2253 y(pli\002ed)h(it)g(is)g(without)g(in)l(v)o + (estigating)d(the)j(resulting)f(assembly)h(code.)g(C++)i(compilers)d + (that)h(trans-)396 2382 y(late)g(C++)g(code)f(into)g(C)h(code)f(may)g + (permit)g(inspecting)f(the)h(resulting)f(code.)i(F)o(or)f(e)o(xample,)f + (using)396 2512 y(the)k Fq(-)6 b(-keep_gen_c)22 b Fu(command-line)i + (option)h(with)g(the)g(KAI)h(C++)h(compiler)e(creates)h(a)g(\002le)396 + 2641 y(containing)g(the)h(intermediate)f(code.)i(Unfortunately)-6 + b(,)25 b(reading)i(and)h(understanding)d(the)i(code)h(is)396 + 2771 y(frequently)d(dif)n(\002cult.)396 2950 y(Each)i(cate)o(gory)e(of) + h(v)n(alues)f(supports)g(a)i(distinct)d(set)i(of)g(operations.)f(F)o + (or)h(e)o(xample,)f(the)h(run-time)396 3080 y(cate)o(gory)32 + b(of)g(inte)o(ger)f(v)n(alues)g(supports)f(combination)h(using)f + Fq(+)i Fu(and)g Fq(-)g Fu(and)f(comparison)g(using)396 + 3209 y Fq(>)k Fu(and)f Fq(==)p Fu(.)g(At)h(run)f(time,)g(the)h(cate)o + (gory)f(of)g(strings)g(can)h(be)g(compared)f(using)g + Fq(==)g Fu(and)h(char)n(-)396 3339 y(acters)27 b(can)g(be)g(e)o + (xtracted)f(using)g(subscripts)f(with)h(the)h Fq([])f + Fu(operator)-5 b(.)26 b(Compile-time)f(operations)396 + 3468 y(are)33 b(more)g(limited.)d(T)-8 b(ypes)32 b(may)g(be)h(declared) + g(and)f(used.)g(The)h Fq(sizeof)e Fu(operator)h(yields)f(the)396 + 3598 y(number)37 b(of)g(bytes)f(to)g(represent)h(an)g(object)g(of)g + (the)f(speci\002ed)h(type.)g(Enumerations,)e(constant)396 + 3727 y(inte)o(gers,)c Fq(sizeof)g Fu(e)o(xpressions,)f(and)j(simple)d + (arithmetic)i(and)g(comparison)f(operators)h(such)396 + 3857 y(as)k Fq(+)g Fu(and)g Fq(==)f Fu(can)h(form)g(constant)f(e)o + (xpressions)f(that)h(can)h(be)g(used)g(at)f(compile)g(time.)g(These)396 + 3986 y(v)n(alues)30 b(can)h(initialize)e(enumerations)g(and)i(inte)o + (ger)e(constants)h(and)g(be)g(used)h(as)f(template)g(ar)n(gu-)396 + 4116 y(ments.)25 b(At)g(compile)f(time,)g(pointers)h(and)g(references)h + (to)f(objects)g(and)g(functions)f(can)i(be)f(used)g(as)396 + 4245 y(template)e(ar)n(guments,)g(while)g(the)h(cate)o(gory)f(of)h(e)o + (x)o(ecutable)f(code)h(supports)e(no)h(operations.)g(\(The)396 + 4375 y(compiler')-5 b(s)24 b(optimizer)g(may)g(simplify)f(it,)h + (though.\))396 4554 y(At)37 b(run)g(time,)f(an)h(object)f(can)i(store)f + (multiple)e(v)n(alues,)h(each)h(ha)n(ving)f(its)h(o)n(wn)f(name.)h(F)o + (or)f(e)o(x-)396 4684 y(ample,)28 b(a)h Fq(pair)e + Fu(object)h Fq(p)g Fu(stores)g(tw)o(o)g Fq(int)p Fu(s)g(named)g + Fq(left_)g Fu(and)g Fq(right_)p Fu(.)f(The)396 4813 y + Fq(.)40 b Fu(operator)g(e)o(xtracts)f(a)h(named)f(member)h(from)f(an)h + (object:)f Fq(p.left_)p Fu(.)f(At)h(compile)g(time,)396 + 4943 y(a)44 b(class)f(can)h(store)f(multiple)f(v)n(alues,)h(each)h(ha)n + (ving)f(its)f(o)n(wn)h(name.)g(These)h(are)g(sometimes)396 + 5072 y(called)25 b Fp(tr)o(aits)e(classes)p Fu(.)g(F)o(or)i(e)o + (xample,)f(implementing)e(data-parallel)j(operations)f(requiring)g + (stor)n(-)p Black 3734 5547 a Fp(152)p Black eop + %%Page: 153 153 + 153 152 bop Black 1750 -132 a Fp(Appendix)24 b(A.)h(D)m(ANGER:)f(Pr)l + (o)o(gr)o(amming)e(with)j(T)-9 b(emplates)p Black 396 + 51 a Fu(ing)43 b(a)g(tree)h(of)g(types.)e(The)h Fq + (ExpressionTraits)11 b(>)30 b Fu(traits)h(class)g(stores)g(the)g(types)g(of)g(a) + h(binary)f(node)g(representing)g(the)g(operation)g(of)396 + 310 y Fq(Op)25 b Fu(on)f(left)h(and)g(right)f(children.)g(Its)h + (de\002nition)635 619 y Fn(template)635 748 y(struct)g(ExpressionTraits)11 b(>)635 878 y({)755 1007 y(typedef)58 + b(typename)g(ExpressionTraits::Type_t)53 b(Left_t;)755 + 1137 y(typedef)58 b(typename)g(ExpressionTraits::Type_)o(t)c + (Right_t;)755 1266 y(typedef)k(typename)874 1396 y + (CombineExpressionTraits::Type_t)j(Type_t;)635 + 1525 y(};)396 1784 y Fu(consists)22 b(of)h(a)h(class)f(de\002nition)f + (and)h(internal)f(type)h(de\002nitions.)f(This)g(traits)h(class)g + (contains)f(three)396 1914 y(v)n(alues,)f(all)g(types)g(and)g(named)g + Fq(Left_t)p Fu(,)f Fq(Right_t)p Fu(,)g(and)h Fq(Type_t)p + Fu(,)f(representing)h(the)h(type)396 2043 y(of)33 b(the)f(left)g + (child,)f(the)h(right)g(child,)f(and)h(the)h(entire)f(node,)g(respecti) + n(v)o(ely)-6 b(.)30 b(Man)o(y)h(traits)h(classes,)396 + 2173 y(such)d(as)h(this)e(one,)h(use)h(internal)f(type)g(de\002nitions) + f(to)h(store)g(v)n(alues.)f(No)h(enumerations)g(or)g(con-)396 + 2302 y(stant)i(v)n(alues)f(occur)h(in)g(this)f(traits)h(class,)f(b)n + (ut)h(other)g(such)g(classes)f(include)h(them.)f(See)i(Section)396 + 2432 y(7.3)25 b(for)g(more)f(details)g(re)o(garding)g(the)h + (implementation)d(of)j(data-parallel)g(operators.)396 + 2611 y(The)h(e)o(xample)e(also)i(illustrates)e(using)g(the)h + Fq(::)h Fu(operator)f(to)g(e)o(xtract)g(a)h(member)f(of)h(a)g(traits)f + (class.)396 2741 y(The)44 b(type)e Fq(ExpressionTraits)c + Fu(contains)43 b(an)g(internal)g(type)g(de\002nition)f(of)396 + 2870 y Fq(Type_t)p Fu(.)18 b(Using)g(the)g Fq(::)h Fu(operator)g(e)o + (xtracts)f(it:)g Fq(ExpressionTraits::Ty)o(pe_t)o + Fu(.)396 3000 y(Enumerations)h(and)g(other)h(v)n(alues)f(can)h(also)f + (be)h(e)o(xtracted.)g(F)o(or)g(e)o(xample,)e Fq(Array<2,)64 + b(int,)396 3129 y(Brick>::dimensions)21 b Fu(yields)j(the)g(dimension)f + (of)i(the)g(array')-5 b(s)25 b(domain.)396 3309 y(Control)j(\003o)n(w)g + (determines)f(which)g(code)i(is)e(used.)h(At)g(run)g(time,)f + (control-\003o)n(w)g(statements)g(such)396 3438 y(as)f + Fq(if)p Fu(,)f Fq(while)p Fu(,)f(and)h Fq(goto)g Fu(determine)g(which)g + (statements)f(to)h(e)o(x)o(ecute.)g(T)-7 b(emplate)24 + b(program-)396 3568 y(ming)i(uses)g(tw)o(o)f(mechanisms:)g(template)h + (class)g(specializations)f(and)h(pattern)g(matching.)f(These)396 + 3697 y(are)j(similar)e(to)h(control)f(\003o)n(w)h(in)g(functional)f + (programming)g(languages.)g(A)h Fp(template)g(class)f(spe-)396 + 3827 y(cialization)20 b Fu(is)i(a)g(class)g(de\002nition)f(speci\002c)h + (to)g(one)g(or)g(more)g(template)f(ar)n(guments.)g(F)o(or)h(e)o + (xample,)396 3956 y(the)f(implementation)d(for)j(data-parallel)g + (operations)e(uses)i(the)f(templated)g Fq(CreateLeaf)p + Fu(.)e(The)396 4086 y(def)o(ault)25 b(de\002nition)f(w)o(orks)g(for)h + (an)o(y)f(template)g(ar)n(gument)h Fq(T)p Fu(:)635 4395 + y Fn(template)635 4524 y(struct)i(CreateLeaf)635 + 4654 y({)755 4783 y(typedef)f(Scalar)g(Leaf_t;)755 + 4913 y(...)635 5042 y(};)p Black 3734 5547 a Fp(153)p + Black eop + %%Page: 154 154 + 154 153 bop Black 1750 -132 a Fp(Appendix)24 b(A.)h(D)m(ANGER:)f(Pr)l + (o)o(gr)o(amming)e(with)j(T)-9 b(emplates)p Black 396 + 180 a Fu(The)25 b(code)g(is)f(dif)n(ferent)h(for)g Fq(Expression)d + Fu(specializations:)635 439 y Fn(template)635 + 569 y(struct)i(CreateLeaf)11 b(>)635 698 + y({)755 828 y(typedef)58 b(typename)g(Expression::Expression_t)c + (Leaf_t;)755 957 y(...)635 1087 y(};)396 1346 y Fu(The)20 + b(latter)f(code)h(is)f(only)f(used)i(when)f Fq(CreateLeaf)p + Fu(')-5 b(s)17 b(template)h(ar)n(gument)h(is)g(an)h Fq(Expres-)396 + 1476 y(sion)k Fu(type.)396 1655 y(P)o(attern)k(matching)e(of)h + (template)g(ar)n(guments)g(to)g(template)f(parameters)i(determines)f + (which)g(tem-)396 1784 y(plate)20 b(code)g(is)g(used.)f(The)h(code)g + (associated)g(with)f(the)h(match)f(that)h(is)f(most)g(speci\002c)i(is)e + (the)h(one)g(that)396 1914 y(is)g(used.)f(F)o(or)h(e)o(xample,)f + Fq(CreateLeaf)e Fu(uses)i(the)h(\002rst,)g(more)g(general)g + (template)g(class)396 2043 y(de\002nition)i(because)h(the)g + Fq(int)f Fu(template)g(ar)n(gument)g(does)h(not)f(match)g + Fq(Expression)e Fu(for)396 2173 y(an)o(y)37 b(v)n(alue)f(of)h + Fq(T)p Fu(.)g(On)f(the)h(other)g(hand,)f Fq(CreateLeaf) + 11 b(>)31 b Fu(uses)396 2302 y(the)38 b(second)g(de\002nition)g + (because)g(both)g(the)g(general)g(and)g(the)g(specialized)g(template)g + (parame-)396 2432 y(ters)k(match)f(so)g(the)g(more)g(specialized)h + (ones)f(are)h(preferred.)h(In)e(this)g(case,)h Fq(T)f + Fu(equals)g Fq(int)p Fu(.)396 2561 y Fq(CreateLeaf)11 b(>)g(>)16 b Fu(also)21 b(matches)g(the)g(more)396 + 2691 y(specialized)k(de\002nition)f(with)g Fq(T)g Fu(equaling)g + Fq(Expression)p Fu(.)396 2870 y(Control)f(\003o)n(w)g(using)f + (template)g(specializations)g(and)h(pattern)g(matching)f(is)h(similar)f + (to)h Fq(switch)396 3000 y Fu(statements.)j(A)i Fq(switch)d + Fu(statement)i(has)g(a)h(condition)d(and)j(one)f(or)g(more)g(pairs)h + (of)f(case)h(labels)396 3129 y(and)i(associated)f(code.)h(The)g(code)g + (associated)f(with)g(the)h(case)g(label)g(whose)f(v)n(alue)g(matches)g + (the)396 3259 y(condition)20 b(is)h(e)o(x)o(ecuted.)g(If)h(no)f(case)i + (label)e(matches)g(the)h(condition,)e(the)h(def)o(ault)g(code,)h(if)g + (present,)396 3388 y(is)j(used.)f(In)h(template)f(programming,)f + (instantiating)g(a)i(template,)f(e.g.,)635 3697 y Fn + (CreateLeaf)11 b(>)396 3956 y Fu(serv)o(es)26 + b(as)g(the)g(condition.)e(The)i(set)g(of)g(template)g(parameters)g(for) + g(the)g(indicated)f(template)h(class,)396 4086 y(e.g.,)20 + b Fq(CreateLeaf)p Fu(,)d(are)k(analogous)e(to)g(the)h(case)g(labels,)g + (and)f(each)i(has)f(an)g(associated)f(de\002ni-)396 4215 + y(tion.)h(In)h(our)g(e)o(xample,)f(the)g(set)h(of)g(template)f + (parameters)h(are)h Fq()20 b Fu(and)h Fq()11 b(>)p Fu(.)26 b(The)h(\223best)f + (match\224,)h(if)g(an)o(y)-6 b(,)26 b(indicates)g(the)h(matching)f + (code)h(that)f(will)396 4474 y(be)j(used.)f(In)g(our)h(e)o(xample,)e + (the)h Fq()28 b Fu(parameter)g(serv)o(es)g(as)h(the)f + (def)o(ault)g(label)g(since)396 4604 y(it)g(matches)f(an)o(y)h(ar)n + (guments.)f(If)i(no)f(set)g(of)g(template)f(parameters)h(match)g + (\(which)g(is)f(impossible)396 4733 y(for)e(our)g(e)o(xample\))f(or)h + (if)g(more)f(than)h(one)g(set)f(are)i(best)e(matches,)h(the)f(code)h + (is)g(incorrect.)396 4913 y(Functions)30 b(as)h(well)g(as)f(classes)h + (may)f(be)h(templated.)f(All)g(the)h(concepts)g(needed)g(to)f + (understand)396 5042 y(function)24 b(templates)g(ha)n(v)o(e)h(already)h + (been)f(introduced)f(so)h(we)g(illustrate)f(using)g(an)h(e)o(xample.)f + (The)p Black 3734 5547 a Fp(154)p Black eop + %%Page: 155 155 + 155 154 bop Black 1750 -132 a Fp(Appendix)24 b(A.)h(D)m(ANGER:)f(Pr)l + (o)o(gr)o(amming)e(with)j(T)-9 b(emplates)p Black 396 + 51 a Fu(templated)24 b(function)g Fq(f)h Fu(tak)o(es)f(one)h(parameter) + g(of)g(an)o(y)f(type:)635 360 y Fn(template)58 b()635 + 489 y(void)h(f\(const)f(T&)i(t\))f({)h(...)f(})396 748 + y Fu(A)36 b Fp(function)e(template)h Fu(de\002nes)g(an)h(unbounded)e + (set)i(of)f(related)h(functions,)e(all)h(with)g(the)g(same)396 + 878 y(name.)f(Our)h(e)o(xample)e(de\002nes)h(functions)g(equi)n(v)n + (alent)e(to)i Fq(f\(const)64 b(int&\))p Fu(,)33 b Fq(f\(const)396 + 1007 y(bool&\))p Fu(,)28 b Fq(f\(const)64 b(int*&\))p + Fu(,)28 b(.)15 b(.)g(.)g(.)29 b(Using)g(a)g(templated)g(class)g + (de\002nition)f(with)h(a)h(static)396 1137 y(member)25 + b(function,)f(we)h(can)g(de\002ne)g(an)g(equi)n(v)n(alent)e(function:) + 635 1396 y Fn(template)58 b()635 1525 y(class)h(F)h({)755 + 1655 y(static)e(void)h(f\(const)f(T&)i(t\))f({)h(...)f(})635 + 1784 y(};)396 2043 y Fu(Both)27 b(the)f(templated)g(class)h(and)f(the)h + (templated)e(function)h(tak)o(e)h(the)g(same)f(template)g(ar)n + (guments,)396 2173 y(b)n(ut)33 b(the)g(class)g(uses)g(a)h(static)f + (member)g(function.)f(Thus,)h(the)g(notation)f(to)h(in)l(v)n(ok)o(e)f + (it)h(is)g(slightly)396 2302 y(more)25 b(v)o(erbose:)f + Fq(F::f\(t\))p Fu(.)396 2482 y(The)29 b(adv)n(antage)e(of)i(a)f + (function)g(template)f(is)h(that)g(it)g(can)g(be)h(o)o(v)o(erloaded,)e + (particularly)g(operator)396 2611 y(functions.)21 b(F)o(or)g(e)o + (xample,)f(the)i Fq(+)f Fu(operator)g(is)g(o)o(v)o(erloaded)g(to)g(add) + g(tw)o(o)g Fq(Array)p Fu(s,)f(which)h(require)396 2741 + y(template)j(parameters)h(to)g(specify:)635 3050 y Fn(template)58 + b()635 3309 y(//)i(complicated)d(return)h(type)h(omitted) + 635 3438 y(operator+\(const)e(Array)f(&)k(l,)1233 + 3568 y(const)f(Array)d(&)k(r\);)396 3827 y + Fu(W)l(ithout)35 b(using)f(function)h(templates,)g(it)g(w)o(ould)g(not) + g(be)h(possible)e(to)i(write)f(e)o(xpressions)g(such)396 + 3956 y(as)k Fq(a1)65 b(+)g(a2)p Fu(.)38 b(Member)g(functions)f(can)i + (also)f(be)g(templated.)f(This)h(permits,)f(for)h(e)o(xample,)396 + 4086 y(o)o(v)o(erloading)23 b(of)i(assignment)e(operators)i(de\002ned)g + (within)f(templated)f(classes.)396 4265 y(Function)i(objects)h(are)g + (frequently)g(useful)f(in)g(run-time)g(code.)h(The)o(y)f(consist)g(of)h + (a)g(function)f(plus)396 4395 y(some)30 b(additional)g(storage)g(and)h + (are)g(usually)f(implemented)f(as)h(structures)g(with)g(data)h(members) + 396 4524 y(and)d(a)h(function)e(call)h(operator)-5 b(.)27 + b(Analogous)g(classes)h(can)g(be)g(used)g(at)g(compile)f(time.)g(Using) + g(the)396 4654 y(transformation)33 b(introduced)h(in)f(the)h(pre)n + (vious)f(paragraph,)i(we)f(see)h(that)f(an)o(y)f(function)h(can)g(be) + 396 4783 y(transformed)29 b(into)g(a)h(class)f(containing)g(a)h(static) + f(member)g(function.)g(Internal)g(type)h(de\002nitions,)396 + 4913 y(enumerations,)g(and)h(static)g(constant)f(v)n(alues)h(can)g(be)h + (added)f(to)g(the)g(class.)g(The)g(static)g(member)p + Black 3734 5547 a Fp(155)p Black eop + %%Page: 156 156 + 156 155 bop Black 1750 -132 a Fp(Appendix)24 b(A.)h(D)m(ANGER:)f(Pr)l + (o)o(gr)o(amming)e(with)j(T)-9 b(emplates)p Black 396 + 51 a Fu(function)36 b(can)g(use)h(these)f(v)n(alues)f(during)h(its)f + (computation.)f(The)j Fq(CreateLeaf)d Fu(structure,)396 + 180 y(introduced)24 b(abo)o(v)o(e,)g(illustrates)f(this.)635 + 489 y Fn(template)635 619 y(struct)i(CreateLeaf)635 + 748 y({)755 878 y(typedef)f(Scalar)g(Leaf_t;)755 1007 + y(inline)g(static)h(Leaf_t)f(make\(const)g(T&)h(a\))874 + 1137 y({)h(return)e(Scalar\(a\);)f(})635 1266 y(};)396 + 1525 y Fu(Thus,)23 b Fq(CreateLeaf::make)18 b Fu(is)23 + b(a)h(function)e(with)h(a)g(complicated)g(name)g(and)g(ha)n(ving)396 + 1655 y(access)h(to)f(the)h(class)f(member)g(named)g Fq(Leaf_t)p + Fu(.)f(Unlik)o(e)g(for)i(function)f(objects,)f(the)i(function')-5 + b(s)396 1784 y(name)25 b(within)f(the)g(class)h(must)e(be)i(gi)n(v)o + (en)f(a)h(name.)p Black 3732 5547 a Fp(156)p Black eop + %%Page: 157 157 + 157 156 bop Black Black -2 119 a Fy(Appendix)58 b(B.)g(D)-8 + b(ANGER:)57 b(Over)r(vie)m(w)h(of)-2 387 y(POOMA)f(Sour)l(ces)396 + 685 y Fu(In)32 b(this)f(chapter)l(,)h(we)g(outline)f(the)h(POOMA)g + (source)g(code)g(structure)f(and)h(coding)f(con)l(v)o(entions)396 + 814 y(for)25 b(those)g(who)f(are)i(interested)e(in)g(reading)h(the)g + (code.)-2 1267 y Fx(B.1.)47 b(Structure)h(of)h(the)f(Files)396 + 1482 y Fu(The)29 b(POOMA)g(T)-8 b(oolkit)28 b(\002les)i(are)f(di)n + (vided)f(into)g(directories)h(according)g(to)g(their)g(purposes.)f(See) + 396 1612 y(T)-8 b(able)25 b(B-1.)g(In)g(that)g(table,)f(directories)g + (and)h(\002les)g(are)h(cate)o(gorized:)396 1927 y(use)p + Black Black 596 2106 a(introductions)c(to)j(the)f(toolkit,)f(its)h + (installation,)f(and)i(its)f(use)396 2335 y(user)h(code)p + Black Black 596 2515 a(source)38 b(code)h(for)g(POOMA)f(programs.)g + (POOMA)g(users)g(can)h(read)g(these)f(programs)g(as)596 + 2644 y(e)o(xamples)23 b(ho)n(w)h(to)h(use)f(the)h(toolkit.)396 + 2873 y(documentation)p Black Black 596 3053 a(user)n(-le)n(v)o(el)e(e)o + (xplanations)g(of)i(ho)n(w)f(to)h(use)f(the)h(toolkit')-5 + b(s)23 b(features)396 3282 y(source)i(code)p Black Black + 596 3461 a(C++)32 b(\002les)f(implementing)e(the)i(toolkit.)f(In)h + (their)g(programs,)g(users)g(may)g(need)g(to)g(refer)i(to)596 + 3591 y(header)22 b(\002les.)h(Otherwise,)e(these)h(\002les)h(are)g + (mainly)e(read)i(by)e(de)n(v)o(elopers.)g(Source)i(code)g(sub-)596 + 3720 y(directories)h(are)h(described)g(in)g(T)-8 b(able)24 + b(B-2.)396 3949 y(de)n(v)o(elopment)p Black Black 596 + 4129 a(used)g(by)h(POOMA)f(de)n(v)o(elopers)g(when)g(writing)g(and)h + (preparing)g(toolkit)e(\002les)396 4358 y(installation)p + Black Black 596 4537 a(used)k(when)h(con)l(v)o(erting)f(the)h(toolkit)f + (source)h(code)h(into)e(an)h(e)o(x)o(ecutable)f(library)-6 + b(.)28 b(This)f(pro-)596 4667 y(cess)d(can)i(in)l(v)n(olv)o(e)d + (architecture-)i(and)g(machine-dependent)f(code.)396 + 4846 y(The)29 b Ft(src)g Fu(directory)-6 b(,)27 b(containing)g(source)h + (code,)h(contains)e(man)o(y)h(\002les)g(so)g(it)g(is)f(described)i(in)e + (the)396 4975 y(separate)33 b(table)f(T)-8 b(able)32 + b(B-2.)g Ft(CVS)h Fu(subdirectories)e(are)i(scattered)f(throughout)e + (the)i(source)g(code.)p Black 3730 5547 a Fp(157)p Black + eop + %%Page: 158 158 + 158 157 bop Black 1731 -132 a Fp(Appendix)24 b(B.)h(D)m(ANGER:)f + (Overvie)o(w)i(of)e(POOMA)g(Sour)l(ces)p Black 396 51 + a Fu(The)33 b(Concurrent)g(V)-11 b(ersions)32 b(System)h(is)f(a)h(v)o + (ersion)f(control)g(system.)g(The)h(subdirectories)f(ha)n(v)o(e)396 + 180 y(\002les)25 b(storing)f(the)h(CVS)g(state.)g(Ignore)g(these)f + (subdirectories.)396 459 y Fr(T)-9 b(able)26 b(B-1.)f(T)-9 + b(oolkit)25 b(Dir)n(ectories)g(and)g(Files)396 677 y + Fv(director)q(y)j(or)g(\002le)436 b(type)958 b(contents)396 + 819 y Ft(benchmarks)653 b Fu(user)24 b(code)784 b(source)25 + b(code)g(for)g(programs)2721 948 y(used)f(to)h(test)f(the)h(toolkit')-5 + b(s)2721 1078 y(speed)396 1219 y Ft(bin)1010 b Fu(de)n(v)o(elopment)649 + b(scripts)24 b(useful)g(for)h(creating)2721 1349 y(releases)396 + 1490 y Ft(config)857 b Fu(installation)717 b(\002les)25 + b(used)f(to)h(con\002gure)g(the)2721 1620 y(library)396 + 1762 y Ft(config/arch)602 b Fu(installation)717 b(machine-)24 + b(and)2721 1891 y(compiler)n(-speci\002c)2721 2021 y(con\002guration)g + (\002les)396 2162 y Ft(config/Shared)500 b Fu(installation)717 + b(machine-independent)2721 2292 y(con\002guration)24 + b(and)h(mak)o(e)g(\002les)396 2434 y Ft(configure)704 + b Fu(installation)717 b(script)24 b(used)h(by)f(user)h(to)2721 + 2563 y(con\002gure)g(the)g(library)396 2705 y Ft(docs)959 + b Fu(documentation)568 b(documentation)23 b(describing)2721 + 2834 y(using)h(the)g(toolkit)396 2976 y Ft(docs/manual)602 + b Fu(documentation)568 b(documentation)23 b(describing)2721 + 3105 y(using)h(the)g(R2.4)h(toolkit)396 3247 y Ft(examples)755 + b Fu(user)24 b(code)784 b(source)25 b(code)g(for)g(programs)2721 + 3377 y(used)f(to)h(illustrate)e(using)h(the)2721 3506 + y(toolkit)396 3648 y Ft(ide)1010 b Fu(de)n(v)o(elopment)649 + b(\002les)25 b(to)f(support)g(using)2721 3777 y(inte)o(grated)g(de)n(v) + o(elopment)2721 3907 y(en)l(vironments)f(to)i(de)n(v)o(elop)2721 + 4036 y(POOMA)396 4178 y Ft(lib)1010 b Fu(installation)717 + b(directory)24 b(where)i(POOMA)2721 4308 y(library)e(is)h(placed)396 + 4449 y Ft(LICENSE)806 b Fu(use)1029 b(description)24 + b(of)g(rules)h(for)g(using)2721 4579 y(the)g(POOMA)f(T)-8 + b(oolkit)396 4720 y Ft(makefile)755 b Fu(installation)717 + b(mak)o(e\002le)25 b(rules)f(to)h(create)h(the)2721 4850 + y(toolkit)396 4992 y Ft(README)857 b Fu(use)1029 b(release)25 + b(notes)g(for)g(v)n(arious)2721 5121 y(v)o(ersions)p + Black 3734 5547 a Fp(158)p Black eop + %%Page: 159 159 + 159 158 bop Black 1731 -132 a Fp(Appendix)24 b(B.)h(D)m(ANGER:)f + (Overvie)o(w)i(of)e(POOMA)g(Sour)l(ces)p Black 396 85 + a Fv(director)q(y)k(or)g(\002le)436 b(type)958 b(contents)396 + 226 y Ft(scripts)806 b Fu(installation)717 b(scripts)24 + b(to)g(install)g(POOMA)2721 356 y(and)h(related)g(libraries)396 + 497 y Ft(src)1010 b Fu(source)25 b(code)689 b(toolkit)23 + b(source)i(code.)g(See)2721 627 y(T)-8 b(able)25 b(B-2.)396 + 769 y(Not)g(all)f(directories)h(and)f(\002les)396 898 + y(are)i(listed.)396 1227 y Fr(T)-9 b(able)26 b(B-2.)f(Sour)n(ce)h(Code) + g(Dir)n(ectories)f(\(W)n(ithin)g Ft(src)p Fr(\))396 1461 + y Ft(src)k Fv(subdirector)q(y)958 b(contents)396 1602 + y Ft(arch)1540 b Fu(\002les)25 b(necessary)g(for)g(using)f(speci\002c) + 2140 1732 y(architectures)h(or)g(compilers.)e(Some)i(replace)2140 + 1861 y(missing)e(header)i(\002les.)g(Others)f(modify)2140 + 1991 y(POOMA)g(\002les.)396 2133 y Ft(Array)1489 b Fu(declaration)24 + b(and)h(implementation)d(of)j(the)2140 2262 y Fj(Array)32 + b Fu(container)25 b(class)396 2404 y Ft(Array/tests)1183 + b Fu(programs)24 b(testing)g(the)g Fj(Array)33 b Fu(code)25 + b(and)2140 2533 y(features)396 2675 y Ft(CoordinateSystems)877 + b Fu(Cartesian,)25 b(c)o(ylindrical,)e(and)i(spherical)2140 + 2804 y(coordinate)f(system)g(classes)g(useful)h(with)2140 + 2934 y(meshes)396 3076 y Ft(Domain)1438 b Fj(Domain)23 + b Fu(declarations)h(and)2140 3205 y(implementations)396 + 3347 y Ft(Domain/tests)1132 b Fu(programs)24 b(testing)g(the)g + Fj(Domain)g Fu(code)h(and)2140 3476 y(features)396 3618 + y Ft(DynamicArray)1132 b Fu(declaration)24 b(and)h(implementation)d(of) + j(the)2140 3747 y Fj(DynamicArray)31 b Fu(container)24 + b(class)396 3889 y Ft(DynamicArray/tests)826 b Fu(programs)24 + b(testing)g(the)g Fj(DynamicArray)2140 4019 y Fu(code)h(and)f(features) + 396 4160 y Ft(Engine)1438 b Fu(declarations)24 b(and)h(implementations) + d(of)j(the)2140 4290 y Fj(Engine)e Fu(classes)396 4432 + y Ft(Engine/tests)1132 b Fu(programs)24 b(testing)g(the)g + Fj(Engine)g Fu(code)h(and)2140 4561 y(features)396 4703 + y Ft(Evaluator)1285 b Fu(classes)24 b(e)n(v)n(aluating)f(e)o + (xpressions)h(quickly)-6 b(.)23 b(F)o(or)2140 4832 y(e)o(xample,)h(one) + g Fq(Evaluator)f Fu(e)n(v)n(aluates)2140 4962 y(data-parallel)i(e)o + (xpressions.)396 5103 y Ft(Evaluator/tests)979 b Fu(programs)24 + b(testing)g(the)g Fq(Evaluator)f Fu(code)p Black 3734 + 5547 a Fp(159)p Black eop + %%Page: 160 160 + 160 159 bop Black 1731 -132 a Fp(Appendix)24 b(B.)h(D)m(ANGER:)f + (Overvie)o(w)i(of)e(POOMA)g(Sour)l(ces)p Black 396 85 + a Ft(src)29 b Fv(subdirector)q(y)958 b(contents)396 226 + y Ft(Field)1489 b Fu(declaration)24 b(and)h(implementation)d(of)j(the) + 2140 356 y Fj(Field)j Fu(container)c(class)396 497 y + Ft(Field/DiffOps)1081 b Fu(implementation)22 b(of)j Fj(Field)j + Fp(stencils)396 639 y Ft(Field/Mesh)1234 b Fu(declarations)24 + b(and)h(implementations)d(of)2140 769 y Fp(meshes)p Fu(,)i(which)h + (specify)f(a)h Fp(\002eld)s Fu(')-5 b(s)24 b(spatial)2140 + 898 y(e)o(xtent)396 1040 y Ft(Field/Relations)979 b Fu(declarations)24 + b(and)h(implementations)d(of)2140 1169 y Fp(r)l(elations)h + Fu(among)h Fq(Field)p Fu(s,)g(supporting)2140 1299 y(automatic)g + (computation)f(of)h(\002eld)i(v)n(alues)396 1441 y Ft(Field/tests)1183 + b Fu(programs)24 b(testing)g(the)g Fj(Field)k Fu(code)d(and)2140 + 1570 y(features)396 1712 y Ft(FileTemplates)1081 b Fu(\002les)25 + b(illustrating)d(the)j(usual)f(structure)h(of)2140 1841 + y(source)g(code)g(\002les)396 1983 y Ft(Functions)1285 + b Fu(unsupported)23 b(\002les)i(currently)g(under)2140 + 2112 y(de)n(v)o(elopment)396 2254 y Ft(IO)1642 b Fu(declarations)24 + b(and)h(implementation)d(of)2140 2384 y(input-output)g(classes)j(to)f + (store)h(containers)f(in)2140 2513 y(\002les)396 2655 + y Ft(IO/tests)1336 b Fu(programs)24 b(testing)g(the)g(input-output)f + (\(IO\))i(code)396 2926 y Ft(Layout)1438 b Fu(declarations)24 + b(and)h(implementations)d(of)j(the)2140 3055 y Fj(Layout)e + Fu(classes,)i(which)f(specify)h(the)2140 3185 y(mappings)e(between)i + (processors)f(and)2140 3315 y(container)g(v)n(alues)396 + 3456 y Ft(Layout/tests)1132 b Fu(programs)24 b(testing)g(the)g + Fj(Layout)g Fu(code)h(and)2140 3586 y(features)396 3727 + y Ft(Particles)1285 b Fu(declares)24 b(and)f(implements)f(the)h + Fq(Particles)2140 3857 y Fu(class,)h(which)h(is)f(not)g(currently)h + (supported)396 3999 y Ft(Particles/tests)979 b Fu(programs)24 + b(testing)g(the)g(unsupported)2140 4128 y Fq(Particles)e + Fu(class)j(code)g(and)g(features)396 4270 y Ft(Partition)1285 + b Fu(declares)25 b(and)g(implements)e Fp(partitions)p + Fu(,)f(which)2140 4399 y(specify)i(ho)n(w)g(a)h(container')-5 + b(s)25 b(domain)e(is)i(split)2140 4529 y(into)f(patches)g(for)h + (distrib)n(uted)f(computation)396 4670 y Ft(Partition/tests)979 + b Fu(programs)24 b(testing)g(partition)f(code)i(and)2140 + 4800 y(features)396 4942 y Ft(PETE)1540 b Fu(implements)23 + b(the)h(PETE)h(frame)n(w)o(ork)396 5083 y Ft(Pooma)1489 + b Fu(header)25 b(\002les)g(declaring)g(all)f(user)n(-le)n(v)o(el)g + (classes)p Black 3734 5547 a Fp(160)p Black eop + %%Page: 161 161 + 161 160 bop Black 1731 -132 a Fp(Appendix)24 b(B.)h(D)m(ANGER:)f + (Overvie)o(w)i(of)e(POOMA)g(Sour)l(ces)p Black 396 85 + a Ft(src)29 b Fv(subdirector)q(y)958 b(contents)396 226 + y Ft(Pooma/PETE)1234 b Fu(input)23 b(\002les)i(inte)o(grating)f(POOMA)g + (containers)2140 356 y(into)g(the)g(PETE)h(frame)n(w)o(ork)g(for)g(f)o + (ast)2140 485 y(data-parallel)g(e)o(xpressions)396 627 + y Ft(Pooma/tests)1183 b Fu(programs)24 b(testing)g(simple)f(POOMA)i + (programs)396 898 y Ft(Threads)1387 b Fu(classes)24 b(inte)o(grating)f + (Smarts)i(threads)g(into)2140 1028 y(POOMA)396 1169 y + Ft(Tiny)1540 b Fu(declarations)24 b(and)h(implementations)d(of)2140 + 1299 y Fq(TinyMatrix)p Fu(,)g Fq(Tensor)p Fu(,)h(and)i + Fq(Vector)396 1441 y Ft(Tiny/tests)1234 b Fu(programs)24 + b(testing)g Fq(TinyMatrix)p Fu(,)2140 1570 y Fq(Tensor)p + Fu(,)f(and)i Fq(Vector)e Fu(classes)396 1712 y Ft(Tulip)1489 + b Fu(interf)o(ace)25 b(between)g(POOMA)g(and)f(the)2140 + 1841 y(Cheetah)h(messaging)f(library)396 1983 y Ft(Tulip/tests)1183 + b Fu(programs)24 b(testing)g(the)g(interf)o(ace)i(between)2140 + 2112 y(POOMA)e(and)h(the)g(Cheetah)g(messaging)2140 2242 + y(library)396 2384 y Ft(Utilities)1285 b Fu(declarations)24 + b(and)h(implementations)d(of)2140 2513 y(classes)i(used)h(throughout)e + (the)i(toolkit)396 2655 y Ft(Utilities/tests)979 b Fu(programs)24 + b(testing)g(utility)f(classes)396 2796 y(Not)i(all)f(directories)h(and) + f(\002les)h(are)h(listed.)396 3026 y(A)33 b(\002lename')-5 + b(s)32 b(suf)n(\002x)g(indicates)g(its)g(purpose.)g(See)h(T)-8 + b(able)33 b(B-3.)g(Implementations)d(of)j(template)396 + 3155 y(classes)24 b(are)g(usually)f(stored)g(in)h(header)g(\002les)g + (so)f(the)h(C++)h(compiler)e(can)h(instantiate)e(the)i(classes.)396 + 3285 y(Sometimes)g(some)g(of)g(the)g(implementation)f(of)h(longer)g + (functions)g(is)g(stored)g(in)g Ft(.cc)h Fu(\002les,)g(which)396 + 3414 y(are)d(included)f(by)g(the)g(preprocessor)g(in)g(the)g + (corresponding)g(header)g(\002les.)h(When)f(C++)h(compilers)396 + 3544 y(and)38 b(link)o(ers)g(fully)f(support)g(template)g(class)h + (compilation,)e(the)i(inclusion)f(will)g(no)g(longer)h(be)396 + 3673 y(necessary)-6 b(.)396 3952 y Fr(T)d(able)26 b(B-3.)f(Filename)g + (Suf\002xes)396 4170 y Fv(\002lename)j(suf\002x)1047 + b(meaning)396 4311 y Fu(Source)26 b(Code)f(Files)p 396 + 4340 3487 4 v 396 4340 V 396 4456 a Ft(.c)1642 b Fu(C-language)25 + b(\002le,)g(usually)f(containing)f(an)2140 4586 y(entire)h(C)i(program) + p Black 3734 5547 a Fp(161)p Black eop + %%Page: 162 162 + 162 161 bop Black 1731 -132 a Fp(Appendix)24 b(B.)h(D)m(ANGER:)f + (Overvie)o(w)i(of)e(POOMA)g(Sour)l(ces)p Black 396 85 + a Fv(\002lename)k(suf\002x)1047 b(meaning)396 226 y Ft(.cpp)1540 + b Fu(C++-language)25 b(\002le,)g(frequently)g(containing)2140 + 356 y(an)g(entire)f(C++)i(POOMA)f(program.)2140 485 y(Sometimes)e + (these)i(illustrate)f(using)f(POOMA)2140 615 y(or)i(test)f(the)h + (source)f(code.)h(Others)g(contain)f(long)2140 744 y(de\002nitions)f + (of)i(template)f(class)h(functions.)396 886 y Ft(.cmpl.cpp)1285 + b Fu(C++)25 b(class)g(implementation)d(\002le)k(to)e(be)2140 + 1016 y(compiled)f(and)i(included)f(in)h(the)f(POOMA)2140 + 1145 y(library)-6 b(.)24 b(Only)g(non-templated)f(classes)i(occur)2140 + 1275 y(in)f(these)h(\002les.)396 1416 y Ft(.h)1642 b + Fu(C++)25 b(header)h(\002le.)f(Some)g(are)g(included)f(directly)2140 + 1546 y(in)g(user)h(programs.)f(Others)h(declare)g(and)2140 + 1675 y(implement)e(classes,)h(particularly)g(templated)2140 + 1805 y(classes.)g(A)h(fe)n(w)g(are)g(C)h(header)f(\002les.)396 + 1946 y Ft(.in)1591 b Fu(PETE)25 b(input)e(\002le)396 + 2088 y Ft(.inst.cpp)1285 b Fu(preinstantiations)22 b(of)j(templated)f + (C++)i(classes.)396 2230 y(Compilation)d(and)i(Ex)o(ecution)f(Files)p + 396 2258 3487 4 v 396 2258 V 396 2375 a Ft(.a)1642 b + Fu(POOMA)24 b(library)396 2516 y Ft(.mk)1591 b Fu(\002le)25 + b(containing)e(Mak)o(e)i(rules,)g(typically)2140 2646 + y(included)f(within)f(another)i Ft(makefile)396 2788 + y(.info)1489 b Fu(log)24 b(\002le)h(created)h(when)e(compiling)f(POOMA) + 2140 2917 y(source)396 3059 y(Documentation)g(Files)p + 396 3087 V 396 3087 V 396 3204 a Ft(.dsl)1540 b Fu(DSSSL)26 + b(stylesheet)d(used)i(to)f(con)l(v)o(ert)2140 3333 y(documentation)f + (in)h(DocBook)h(format)g(into)2140 3463 y(other)f(formats)396 + 3604 y Ft(.gif)1540 b Fu(Graphics)24 b(Interchange)h(F)o(ormat)g + (\002le)2140 3734 y(containing)e(a)i(\002gure)h(suitable)e(for)h + (display)e(via)2140 3864 y(the)h(WWW)396 4005 y Ft(.html)1489 + b Fu(HTML)24 b(documentation)f(\002le)i(suitable)f(for)2140 + 4135 y(display)f(via)i(the)g(WWW)396 4276 y Ft(.mp)1591 + b Fu(MetaPost)24 b(source)h(code)g(for)g(manual)2140 + 4406 y(illustrations.)396 4548 y Ft(.pdf)1540 b Fu(Portable)25 + b(Document)f(F)o(ormat)g(\(PDF\))i(\002le,)2140 4677 + y(usually)d(containing)h(toolkit)f(documentation)396 + 4819 y Ft(.png)1540 b Fu(Portable)25 b(Netw)o(ork)f(Graphics)h(\002le)g + (suitable)f(for)2140 4948 y(display)f(via)i(the)g(WWW)p + Black 3734 5547 a Fp(162)p Black eop + %%Page: 163 163 + 163 162 bop Black 1731 -132 a Fp(Appendix)24 b(B.)h(D)m(ANGER:)f + (Overvie)o(w)i(of)e(POOMA)g(Sour)l(ces)p Black 396 85 + a Fv(\002lename)k(suf\002x)1047 b(meaning)396 226 y Ft(.xml)1540 + b Fu(eXtended)24 b(Markup)h(Language)f(\(XML\))h(\002le,)2140 + 356 y(usually)e(containing)h(toolkit)f(documentation)-2 + 908 y Fx(B.2.)47 b(POOMA)i(Coding)f(Con)-7 b(ventions)396 + 1124 y Fu(POOMA)20 b(has)h(been)f(written)g(by)g(se)n(v)o(eral)g(dif)n + (ferent)f(sets)h(of)h(de)n(v)o(elopers.)e(W)-8 b(e)20 + b(describe)h(the)f(coding)396 1253 y(con)l(v)o(entions)34 + b(generally)i(used)g(throughout)e(the)i(code,)g(b)n(ut)g(there)g(are,)h + (of)f(course,)g(e)o(xceptions.)396 1383 y(T)-8 b(o)34 + b(see)g(the)f(coding)g(con)l(v)o(entions)f(in)h(practice,)h(vie)n(w)f + (random)g(\002les)h(in)g(the)f Ft(src)i Fu(subdirectory)-6 + b(.)396 1512 y(The)24 b Ft(src/FileTemplates)29 b Fu(subdirectory)23 + b(contains)h(v)o(ery)g(short)f(\002les)h(illustrating)f(some)g(of)h + (the)396 1642 y(coding)g(con)l(v)o(entions.)-2 2035 y + Fk(B.2.1.)38 b(POOMA)g(Namespace)396 2237 y Fu(Most)31 + b(implementation)e(functions)h(and)i(classes)f(are)h(placed)g(within)e + (the)i Fq(Pooma)e Fu(namespace.)396 2366 y(Some)19 b(user)n(-le)n(v)o + (el)f(functions)g(are)h(also)g(within)e(this)h(namespace,)h(e.g.,)g + Fq(Pooma::initialize)396 2496 y Fu(and)43 b Fq(Pooma::finalize)p + Fu(.)c(This)j(is)h(incompletely)e(implemented)g(because)i(some)f(C++) + 396 2625 y(compilers)24 b(did)g(not)h(correctly)g(implement)e + (namespaces.)-2 3069 y Fk(B.2.2.)38 b(Formatting)396 + 3270 y Fu(Indentation)23 b(follo)n(ws)e(the)j(GNU)f(Emacs')-5 + b(s)23 b(C++)h(mode)f(guidelines.)f(Most)g(increases)i(in)f(indenta-) + 396 3399 y(tion)h(le)n(v)o(els)g(start)g(tw)o(o)g(characters)i(to)e + (the)h(right.)396 3579 y(Most)k(brack)o(ets,)h(e.g.,)g(in)g(function)f + (de\002nitions,)g(occur)h(on)g(separate)g(lines.)f(Exceptions)g(are)i + (for)396 3708 y(v)o(ery)25 b(short)f(functions.)396 3888 + y(There)i(is)f(no)g(space)g(between)h(a)f(function')-5 + b(s)24 b(name)h(and)g(the)h(left)f(parenthesis)f(starting)h(its)f + (param-)396 4017 y(eter)i(list.)-2 4461 y Fk(B.2.3.)38 + b(Prepr)m(ocessor)396 4805 y Fw(B.2.3.1.)e(Comments)396 + 4995 y Fu(Almost)18 b(all)h(comments)f(be)o(gin)h(with)f + Fq(//)p Fu(.)h Fq(/*)65 b(...)g(*/)19 b Fu(comments)f(occasionally)h + (occur)g(when)396 5124 y(commenting)k(an)i(intraline)f(v)n(alue.)p + Black 3734 5547 a Fp(163)p Black eop + %%Page: 164 164 + 164 163 bop Black 1731 -132 a Fp(Appendix)24 b(B.)h(D)m(ANGER:)f + (Overvie)o(w)i(of)e(POOMA)g(Sour)l(ces)p Black 396 51 + a Fu(C)i(\002les,)f(including)e(header)i(\002les,)g(e)o(xclusi)n(v)o + (ely)d(use)j Fq(/*)65 b(...)g(*/)25 b Fu(comments.)396 + 455 y Fw(B.2.3.2.)36 b(Prepr)n(ocessor)e(Symbols)396 + 645 y Fu(Preprocessor)53 b(symbols)d(are)j(used)f(only)f(for)i + (preprocessor)f(conditional)e(e)o(xpressions,)h(not)396 + 774 y(to)59 b(de\002ne)i(constants.)d(Such)i(symbols)e(consist)g(of)i + (all)f(capital)g(letters)g(with)g(underscore)396 904 + y(symbols)c(separating)h(w)o(ords.)g(The)o(y)g(be)o(gin)g(with)f(a)i + Fq(POOMA_)e Fu(pre\002x.)i(F)o(or)g(e)o(xample,)e(if)396 + 1033 y Fq(POOMA_BOUNDS_CHECK)25 b Fu(represents)k(a)h(true)f(v)n(alue,) + f(then)h(conditionally)e(included)h(code)396 1163 y(to)d(check)g(that)f + (indices)g(are)i(within)d(a)j(domain)d(should)h(be)h(included.)396 + 1342 y(Header)42 b(guards)e(also)g(consist)g(of)h(all)f(capital)h + (letters)f(with)g(underscore)h(symbols)e(separating)396 + 1472 y(w)o(ords.)e(The)o(y)f(be)o(gin)f(with)i Fq(POOMA_)p + Fu(,)e(continue)h(with)g(names)g(of)h(directories)g(and)f(\002les,)h + (and)396 1601 y(end)46 b(with)e Fq(_H)p Fu(.)h(F)o(or)h(e)o(xample,)e + Fq(POOMA_UTILITIES_MODELELEMENT_)o(H)c Fu(guards)396 + 1731 y Ft(src/Utilities/ModelElemen)q(t.h)p Fu(.)396 + 2135 y Fw(B.2.3.3.)c(Prepr)n(ocessor)e(Macr)n(os)396 + 2324 y Fu(Inline)44 b(functions)f(are)i(preferred)h(o)o(v)o(er)d + (preprocessor)i(macros.)f(The)g(latter)g(do)g(occasionally)396 + 2454 y(occur)-5 b(.)49 b(Usually)g(their)g(scope)g(is)g(quite)f + (limited)g(\(sometimes)g(to)h(just)f(one)i(\002le\),)f(and)h(their)396 + 2583 y(purpose)38 b(is)h(to)f(a)n(v)n(oid)g(writing)g(repetiti)n(v)o(e) + f(code.)i(F)o(or)g(e)o(xample,)e Ft(src/PETE/PETE.h)43 + b Fu(de\002nes)396 2713 y Fq(PETE_EMPTY_CONSTRUCTORS\(CLAS)o(S\))24 + b Fu(as)31 b(the)f(three)h(types)f(of)g(constructors)g(for)396 + 2842 y(classes)25 b(with)f(parameterless)h(constructors.)396 + 3022 y(The)62 b(main)f(other)g(use)h(is)f(to)g(de\002ne)i(macros)e + (that)g(need)h(access)g(to)g(the)f Fq(__FILE__)396 3151 + y Fu(and)54 b Fq(__LINE__)e Fu(preprocessor)i(symbols)e(to)h(produce)h + (error)g(messages.)f(F)o(or)h(e)o(xample,)396 3281 y + Fq(CTAssert)23 b Fu(in)i Ft(src/Utilities/PAssert.h)30 + b Fu(uses)25 b(this.)-2 3824 y Fk(B.2.4.)38 b(Global)h(V)-9 + b(ariab)o(les)396 4025 y Fu(Global)30 b(v)n(ariables)g(are)i(a)n(v)n + (oided)e(whene)n(v)o(er)g(possible.)f(Where)j(necessary)-6 + b(,)30 b(their)h(names)f(are)h(the)396 4155 y(concatenation)23 + b(of)g(capitalized)g(w)o(ords)g(such)g(that)f(the)h(\002rst)h(w)o(ord)f + (is)g(not)f(capitalized)h(and)g(a)h(suf)n(\002x)396 4284 + y(of)h Ft(_g)h Fu(is)e(appended,)h(e.g.,)f Fq(veryFewGlobalVariables_g) + p Fu(.)-2 4728 y Fk(B.2.5.)38 b(Classes)396 4929 y Fu(In)25 + b(this)e(section,)g(we)i(describe)f(coding)f(con)l(v)o(entions)g(for)h + (classes,)g(both)g(templated)f(and)h(not)g(tem-)396 5059 + y(plated.)p Black 3734 5547 a Fp(164)p Black eop + %%Page: 165 165 + 165 164 bop Black 1731 -132 a Fp(Appendix)24 b(B.)h(D)m(ANGER:)f + (Overvie)o(w)i(of)e(POOMA)g(Sour)l(ces)p Black 396 51 + a Fu(In)i(\002les)g(declaring)g(classes,)g(the)f(comments)g(near)i(the) + e(be)o(ginning)f(frequently)i(be)o(gin)f(with)g(a)h(list-)396 + 180 y(ing)j(of)h(the)f(classes)g(follo)n(wed)f(by)h(a)h(high-le)n(v)o + (el)d(e)o(xplanation)h(of)i(the)f(classes')g(public)g(interf)o(ace.)396 + 310 y(A)24 b(longer)g(e)o(xplanation)e(including)g(implementation)g + (details)h(usually)g(precedes)h(the)g(class)g(decla-)396 + 439 y(ration.)396 619 y(Class)32 b(names)f(tend)h(to)f(be)h + (concatenations)f(of)h(capitalized)f(w)o(ords)h(without)e(underscores,) + h(e.g.,)396 748 y Fq(Field)24 b Fu(and)h Fq(RefCountedPtr)p + Fu(.)396 928 y(Most)d(classes)g(are)i(declared)f(using)e + Fq(class)p Fu(,)h(not)g Fq(struct)p Fu(.)f(The)i(latter)f(is)g + (frequently)h(used)f(for)396 1057 y(implementation)h(and)h + (compile-time)g(classes)g(that)g(ha)n(v)o(e)h(only)f(public)g(members.) + 396 1236 y(T)-7 b(emplate)30 b(parameters)g(are)g(declared)h(using)e + (the)h Fq(class)f Fu(k)o(e)o(yw)o(ord,)g(rather)h(than)g(the)f + Fq(type-)396 1366 y(name)24 b Fu(k)o(e)o(yw)o(ord.)g(The)h(latter)g(is) + f(used)g(when)h(required)g(by)g(C++)g(to)g(resolv)o(e)f(parsing)g + (problems.)396 1545 y(Def)o(ault)h(template)f(parameters)h(are)g + (sometimes)f(used.)396 1725 y(The)h(order)g(of)g(class)g(members)f(is)g + (usually:)396 2004 y(public)p Black Black 596 2462 a(internal)g(types)p + Black Black 795 2641 a(Usually)c(end)h(with)f Fq(_t)p + Fu(.)h(Name)g(consists)e(of)j(the)e(concatenation)h(of)g(capitalized)g + (w)o(ords)795 2771 y(without)i(interv)o(ening)g(underscores.)596 + 3000 y(constructors)p Black Black 596 3408 a(destructors)p + Black Black 596 3817 a(member)h(functions)p Black Black + 795 3996 a(Usually)g(named)g(by)h(the)f(concatenation)h(of)g + (capitalized)f(w)o(ords)h(without)e(interv)o(ening)795 + 4126 y(underscores)h(b)n(ut)h(ha)n(ving)f(an)h(uncapitalized)f(\002rst) + h(w)o(ord.)396 4534 y(protected)p Black Black 596 4713 + a(This)f(section)g(is)g(frequently)g(empty)-6 b(.)24 + b(If)h(so,)f(do)h(not)f(list)g(the)h Fq(protected)d Fu(tag.)p + Black 3734 5547 a Fp(165)p Black eop + %%Page: 166 166 + 166 165 bop Black 1731 -132 a Fp(Appendix)24 b(B.)h(D)m(ANGER:)f + (Overvie)o(w)i(of)e(POOMA)g(Sour)l(ces)p Black 396 51 + a Fu(pri)n(v)n(ate)p Black Black 596 230 a(This)e(section)h(contains)f + (pri)n(v)n(ate)g(data)h(members)g(and)g(less)g(frequently)g(pri)n(v)n + (ate)f(functions.)g(If)596 360 y(this)h(section)i(is)f(empty)-6 + b(,)23 b(do)i(not)f(list)g(the)g Fq(private)g Fu(tag.)396 + 539 y(The)29 b(order)g(sometimes)e(changes)i(if)g(required)f(to)h(be)g + (correct)g(C++)h(or)f(eases)g(the)f(ordering.)h(T)-8 + b(w)o(o)396 669 y(dif)n(ferent)29 b(sections)f(are)h(frequently)f + (separated)h(by)g(a)g(one-line)f(comment)g(with)g(se)n(v)o(enty-six)f + (hy-)396 798 y(phens.)e(An)f(e)o(xplanatory)g(comment)g(usually)f + (precedes)j(each)f(member)-5 b(.)396 977 y(Member)25 + b(data)g(is)f(almost)g(al)o(w)o(ays)g(pri)n(v)n(ate)g(or)h(protected.)f + (Function)g(accessors)h(permit)f(access.)396 1157 y(Names)32 + b(of)g(internal)f(types)g(usually)g(are)i(formed)f(by)f(the)h + (concatenation)f(of)h(capitalized)g(w)o(ords)396 1286 + y(without)25 b(interv)o(ening)g(underscores)h(follo)n(wed)f(by)h + Fq(_t)p Fu(.)g(Names)g(of)h(member)f(functions)f(are)i(sim-)396 + 1416 y(ilar)33 b(e)o(xcept)g(the)f(\002rst)h(w)o(ord)g(is)f(not)h + (usually)f(capitalized)g(and)h(the)o(y)f(ha)n(v)o(e)h(no)f(suf)n + (\002x.)h(Names)f(of)396 1545 y(member)25 b(data)g(are)g(similar)f(to)g + (names)h(of)f(member)h(functions)f(e)o(xcept)g(the)o(y)g(end)h(with)f + Fq(_m)p Fu(.)396 1725 y(Most)30 b(functions)g(are)i(de\002ned)g + (directly)e(in)h(the)g(class)f(declaration.)h(Functions)f(with)h(long)f + (func-)396 1854 y(tion)i(bodies)g(are)h(de\002ned)g(in)f + Ft(.cpp)i Fu(\002les)f(for)g(templated)e(classes)i(and)f(in)g + Ft(.cmpl.cpp)j Fu(\002les)e(for)396 1984 y(untemplated)24 + b(classes.)396 2163 y(Functions)19 b(mak)o(e)g(liberal)g(use)h(of)f + Fq(const)f Fu(both)h(to)g(modify)f(parameters)i(and)f(member)g + (functions.)396 2342 y(T)-7 b(emplated)24 b(member)h(functions)e(are)j + (permitted.)396 2522 y(Ov)o(erloaded)e(member)h(functions)f(are)h + (permitted.)f(Operator)h(o)o(v)o(erloading)e(is)h(permitted.)396 + 2701 y(Def)o(ault)h(ar)n(guments)f(are)i(permitted.)396 + 2880 y(Man)o(y)32 b(functions)f(are)i(mark)o(ed)f Fq(inline)p + Fu(.)f(This)g(assumes)g(the)h(optimizer)g(can)g(handle)g(a)h(lar)n(ge) + 396 3010 y(number)20 b(of)h(inlined)e(functions.)h(Ev)o(en)g(functions) + f(de\002ned)i(inside)f(class)g(declarations)g(are)h(mark)o(ed)396 + 3139 y Fq(inline)27 b Fu(e)n(v)o(en)g(though)g(the)h(C++)g(standard)g + (requires)g(them)f(to)h(be)g(inlined)f(if)h(possible)e(e)n(v)o(en)h(if) + 396 3269 y(not)34 b(so)g(mark)o(ed.)g(This)f(is)h(because)h(some)e + (optimizers)g(attempt)h(more)g(aggressi)n(v)o(e)f(inlining)f(for)396 + 3398 y(e)o(xplicitly)23 b(mark)o(ed)i(member)f(functions.)396 + 3578 y(The)29 b(POOMA)g(inheritance)g(hierarchy)g(is)f(quite)g(shallo)n + (w)-6 b(,)27 b(both)i(from)f(the)h(user')-5 b(s)29 b(and)g(from)f(the) + 396 3707 y(implementation)g(point)h(of)h(vie)n(w)-6 b(.)28 + b(A)i(majority)f(of)h(the)g(uses)f(of)h(inheritance)g(are)h(to)e(f)o + (actor)i(out)e(a)396 3837 y(common)24 b(implementation)e(and)j(reduce)g + (coding.)396 4016 y(V)-6 b(irtual)24 b(functions)g(are)i(usually)d(a)n + (v)n(oided)i(because)g(the)o(y)f(can)h(e)o(x)o(ecute)f(slo)n(wly)-6 + b(.)-2 4460 y Fk(B.2.6.)38 b(Functions)396 4661 y Fu(Class)24 + b(member)e(functions)h(are)h(preferred)g(o)o(v)o(er)e(global)h + (functions)f(when)h(the)o(y)g(achie)n(v)o(e)f(the)h(same)396 + 4790 y(purpose.)34 b(Guidelines)f(for)i(global)e(functions)g(are)i(the) + g(same)f(as)g(for)h(class)f(member)g(functions:)396 4920 + y(A)29 b(function)f(name)g(is)g(a)h(concatenation)f(of)h(capitalized)f + (w)o(ords)h(without)e(underscores)h(and)h(with)396 5049 + y(the)f(\002rst)h(w)o(ord)f(not)g(capitalized.)g Fq(inline)f + Fu(and)h Fq(const)f Fu(are)j(aggressi)n(v)o(ely)c(used.)i(T)-7 + b(emplated)p Black 3732 5547 a Fp(166)p Black eop + %%Page: 167 167 + 167 166 bop Black 1731 -132 a Fp(Appendix)24 b(B.)h(D)m(ANGER:)f + (Overvie)o(w)i(of)e(POOMA)g(Sour)l(ces)p Black 396 51 + a Fu(member)j(functions,)f(o)o(v)o(erloaded)g(member)g(functions,)g + (operator)i(o)o(v)o(erloading,)d(and)i(def)o(ault)g(ar)n(-)396 + 180 y(guments)d(are)h(permitted.)396 360 y(Functions)f(return)h + (references)h(and)f(constant)f(references)i(when)f(appropriate.)-2 + 803 y Fk(B.2.7.)38 b(Friends)396 1005 y Fu(Friend)26 + b(functions)f(are)h(rare)h(and)f(are)g(usually)f(de\002ned)h(directly)f + (within)g(the)g(class)h(of)g(which)f(the)o(y)396 1134 + y(are)h(a)f(friend.)g(Friend)g(class)f(declarations)h(do)f(occur)-5 + b(.)-2 1578 y Fk(B.2.8.)38 b(Compile-Time)f(Pr)m(ogramming)396 + 1779 y Fu(Compile-time)g(structures)g(and)h(static)f(functions)g(occur) + i(throughout)d(the)i(code.)g(Most)e(of)i(the)396 1908 + y(classes)c(are)h Fq(struct)p Fu(s)e(since)h(the)o(y)f(ha)n(v)o(e)h + (only)g(public)f(members.)g(The)i(coding)e(con)l(v)o(entions)396 + 2038 y(follo)n(w)i(those)g(for)h(run-time)f(code.)g(Enumerations)g(are) + h(a)g(preferred)h(w)o(ay)f(to)f(declare)h(inte)o(gral)396 + 2167 y(constants.)-2 2611 y Fk(B.2.9.)i(Constants)396 + 2812 y Fu(Enumerations)24 b(are)h(preferred)h(o)o(v)o(er)e(declaring)h + (constant)f(inte)o(gers.)396 2991 y(Use)h(the)g Fq(const)e + Fu(k)o(e)o(yw)o(ord,)h(not)h(preprocessor)f(de\002nitions,)g(to)g + (de\002ne)i(constants.)-2 3435 y Fk(B.2.10.)38 b(T)-9 + b(ype)39 b(Casting)396 3636 y Fu(T)-8 b(ype)34 b(casting)f(usually)g + (indicates)g(a)h(design)f(\003a)o(w)g(so)h(it)f(is)g(rarely)h(used.)g + (When)g(it)f(is)g(used,)g(use)396 3766 y Fq(static_cast)p + Fu(,)22 b Fq(dynamic_cast)p Fu(,)g(or)j Fq(reinterpret_cast)p + Fu(.)-2 4209 y Fk(B.2.11.)38 b(Err)m(or)n(s)h(and)f(Exceptions)396 + 4411 y Fu(POOMA)24 b(code)g(uses)f(v)o(ery)h(fe)n(w)f(e)o(xceptions)g + (since)h(not)f(all)g(C++)i(compilers)e(adequately)g(support)396 + 4540 y(e)o(xceptions.)f(Thus,)h(all)g(uses)h(must)e(also)h(ha)n(v)o(e)g + (corresponding)g(code)h(not)f(using)f(e)o(xceptions.)g(See,)396 + 4670 y(e.g.,)j Fq(POOMA_EXCEPTIONS)c Fu(in)j(the)h(code.)p + Black 3730 5547 a Fp(167)p Black eop + %%Page: 168 168 + 168 167 bop Black Black -2 119 a Fy(Appendix)58 b(C.)g(UML)g(Class)g + (Dia)n(grams)396 416 y Fu(In)28 b(this)f(chapter)l(,)h(we)h(present)e + (Uni\002ed)h(Modeling)f(Language)h(\(UML\))g(class)f(diagrams)g(for)i + (se)n(v-)396 545 y(eral)34 b(POOMA)f(classes.)f(These)h(diagrams)g(are) + h(created)f(at)g(the)g Fp(speci\002cation)f Fu(le)n(v)o(el,)g(which)h + (in-)396 675 y(dicates)h(the)g(softw)o(are)f(interf)o(ace,)i(not)e(its) + g(implementation.)e(Figure)k(4-1)e(pro)o(vides)g(a)h(top-le)n(v)o(el) + 396 804 y(o)o(v)o(ervie)n(w)23 b(of)h(the)g(relationships)e(between)i + (classes.)g(Readers)h(interested)e(in)h(the)g(implementation)396 + 934 y(are)30 b(encouraged)f(to)g(read)h(the)f(corresponding)f(source)h + (code.)g(More)g(e)o(xtensi)n(v)o(e)e(e)o(xplanations)g(of)396 + 1064 y(these)e(classes)f(appear)i(in)e(the)h(main)f(chapters)h(of)g + (this)f(book.)396 1342 y Fr(Figur)n(e)i(C-1.)e(Explanation)i(of)f(UML)g + (Class)f(Diagrams)396 3829 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 396 3829 a @beginspecial + -155 @llx -260 @lly 271 @urx 24 @ury 4260 @rwi @setspecial + %%BeginDocument: figures/explanation-uml.1 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -155 -260 271 24 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -29.88791 -2.391 moveto + (Classname1) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -54.70605 -8.9776 moveto + 54.70605 -8.9776 lineto + 54.70605 8.9776 lineto + -54.70605 8.9776 lineto + closepath stroke + newpath -54.70605 -26.9328 moveto + 54.70605 -26.9328 lineto + 54.70605 -8.9776 lineto + -54.70605 -8.9776 lineto + closepath stroke + -45.72845 -37.604 moveto + (member) pcrr8r 8.96632 fshow + -8.06975 -37.604 moveto + (function) pcrr8r 8.96632 fshow + 40.34865 -37.604 moveto + (1) pcrr8r 8.96632 fshow + -45.72845 -48.563 moveto + (member) pcrr8r 8.96632 fshow + -8.06975 -48.563 moveto + (function) pcrr8r 8.96632 fshow + 40.34865 -48.563 moveto + (2) pcrr8r 8.96632 fshow + -45.72845 -59.52191 moveto + (member) pcrr8r 8.96632 fshow + -8.06975 -59.52191 moveto + (function) pcrr8r 8.96632 fshow + 40.34865 -59.52191 moveto + (3) pcrr8r 8.96632 fshow + newpath -54.70605 -65.8096 moveto + 54.70605 -65.8096 lineto + 54.70605 -26.9328 lineto + -54.70605 -26.9328 lineto + closepath stroke + -29.88791 -142.93163 moveto + (Classname2) pcrr8r 9.96265 fshow + newpath -70.8455 -149.51822 moveto + 70.8455 -149.51822 lineto + 70.8455 -131.56302 lineto + -70.8455 -131.56302 lineto + closepath stroke + newpath -70.8455 -167.47342 moveto + 70.8455 -167.47342 lineto + 70.8455 -149.51822 lineto + -70.8455 -149.51822 lineto + closepath stroke + -61.8679 -178.1446 moveto + (void) pcrr8r 8.96632 fshow + -34.96881 -178.1446 moveto + (foo\(const) pcrr8r 8.96632 fshow + 18.82939 -178.1446 moveto + (X[1-3]&\)) pcrr8r 8.96632 fshow + newpath -70.8455 -184.43231 moveto + 70.8455 -184.43231 lineto + 70.8455 -167.47342 lineto + -70.8455 -167.47342 lineto + closepath stroke + -38.85431 -252.49382 moveto + (Classname2<1>) pcrr8r 9.96265 fshow + newpath -41.85431 -259.08041 moveto + 41.85431 -259.08041 lineto + 41.85431 -241.12521 lineto + -41.85431 -241.12521 lineto + closepath stroke + 1 setgray + newpath 29.88791 5.9776 moveto + 155.43951 5.9776 lineto + 155.43951 22.9365 lineto + 29.88791 22.9365 lineto + closepath fill + 0 setgray + 38.86551 12.2653 moveto + (template) pcrr8r 8.96632 fshow + 87.2839 12.2653 moveto + (parameter) pcrr8r 8.96632 fshow + 141.0821 12.2653 moveto + (T) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 29.88791 5.9776 moveto + 155.43951 5.9776 lineto + 155.43951 22.9365 lineto + 29.88791 22.9365 lineto + closepath stroke + 1 setgray + newpath 29.88791 -134.56302 moveto + 155.43951 -134.56302 lineto + 155.43951 -117.60413 lineto + 29.88791 -117.60413 lineto + closepath fill + 0 setgray + 38.86551 -128.27531 moveto + (template) pcrr8r 8.96632 fshow + 87.2839 -128.27531 moveto + (parameter) pcrr8r 8.96632 fshow + 141.0821 -128.27531 moveto + (T) pcrr8r 8.96632 fshow + newpath 29.88791 -134.56302 moveto + 155.43951 -134.56302 lineto + 155.43951 -117.60413 lineto + 29.88791 -117.60413 lineto + closepath stroke + 8.9776 -74.3887 moveto + (implementation) pcrr8r 6.97382 fshow + 71.7422 -74.3887 moveto + (file) pcrr8r 6.97382 fshow + 92.6637 -74.3887 moveto + (1) pcrr8r 6.97382 fshow + 8.9776 -82.35881 moveto + (implementation) pcrr8r 6.97382 fshow + 71.7422 -82.35881 moveto + (file) pcrr8r 6.97382 fshow + 92.6637 -82.35881 moveto + (2) pcrr8r 6.97382 fshow + 8.9776 -193.0113 moveto + (implementation) pcrr8r 6.97382 fshow + 71.7422 -193.0113 moveto + (file) pcrr8r 6.97382 fshow + 92.6637 -193.0113 moveto + (a) pcrr8r 6.97382 fshow + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath 0 -241.12521 moveto + 0 -184.43231 lineto stroke + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + newpath 3.06157 -191.8234 moveto + 0 -184.43231 lineto + -3.06157 -191.8234 lineto + closepath + gsave fill grestore stroke + newpath 0 -65.8096 moveto + -7.08662 -78.08401 lineto + 7.08662 -78.08401 lineto + closepath stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath 0 -131.56302 moveto + 0 -111.7206 lineto stroke + newpath 0 -78.08401 moveto + 0 -111.7206 lineto stroke + 57.70605 -20.274 moveto + (Public) ptmr8r 9.96265 fshow + 85.66086 -20.274 moveto + (data) ptmr8r 9.96265 fshow + 104.74905 -20.274 moveto + (members,) ptmr8r 9.96265 fshow + 146.25296 -20.274 moveto + (if) ptmr8r 9.96265 fshow + 154.83066 -20.274 moveto + (an) ptmr8r 9.96265 fshow + 164.08595 -20.274 moveto + (y) ptmr8r 9.96265 fshow + 168.41986 -20.274 moveto + (,) ptmr8r 9.96265 fshow + 173.40115 -20.274 moveto + (w) ptmr8r 9.96265 fshow + 180.49455 -20.274 moveto + (ould) ptmr8r 9.96265 fshow + 200.69865 -20.274 moveto + (be) ptmr8r 9.96265 fshow + 212.59395 -20.274 moveto + (listed) ptmr8r 9.96265 fshow + 236.67316 -20.274 moveto + (here.) ptmr8r 9.96265 fshow + 57.70605 -48.69 moveto + (Public) ptmr8r 9.96265 fshow + 85.66086 -48.69 moveto + (member) ptmr8r 9.96265 fshow + 120.79875 -48.69 moveto + (functions,) ptmr8r 9.96265 fshow + 162.86055 -48.69 moveto + (if) ptmr8r 9.96265 fshow + 171.43825 -48.69 moveto + (an) ptmr8r 9.96265 fshow + 180.69356 -48.69 moveto + (y) ptmr8r 9.96265 fshow + 185.02745 -48.69 moveto + (,) ptmr8r 9.96265 fshow + 190.00876 -48.69 moveto + (are) ptmr8r 9.96265 fshow + 204.66365 -48.69 moveto + (listed) ptmr8r 9.96265 fshow + 228.74286 -48.69 moveto + (here.) ptmr8r 9.96265 fshow + 73.8455 -178.27167 moveto + (This) ptmr8r 9.96265 fshow + 94.0495 -178.27167 moveto + (class) ptmr8r 9.96265 fshow + 115.9071 -178.27167 moveto + (adds) ptmr8r 9.96265 fshow + 136.6591 -178.27167 moveto + (one) ptmr8r 9.96265 fshow + 153.53581 -178.27167 moveto + (ne) ptmr8r 9.96265 fshow + 162.6914 -178.27167 moveto + (w) ptmr8r 9.96265 fshow + 172.375 -178.27167 moveto + (public) ptmr8r 9.96265 fshow + 199.772 -178.27167 moveto + (member) ptmr8r 9.96265 fshow + 234.90991 -178.27167 moveto + (function.) ptmr8r 9.96265 fshow + 82.20874 -143.45741 moveto + (T) ptmr8r 9.96265 fshow + 87.59854 -143.45741 moveto + (emplate) ptmr8r 9.96265 fshow + 121.63045 -143.45741 moveto + (parameters) ptmr8r 9.96265 fshow + 167.82654 -143.45741 moveto + (occur) ptmr8r 9.96265 fshow + 192.44405 -143.45741 moveto + (in) ptmr8r 9.96265 fshow + 202.68555 -143.45741 moveto + (dashed) ptmr8r 9.96265 fshow + 232.84224 -143.45741 moveto + (box) ptmr8r 9.96265 fshow + 247.63684 -143.45741 moveto + (es.) ptmr8r 9.96265 fshow + 108.82562 -193.73616 moveto + (Files) ptmr8r 9.96265 fshow + 130.69322 -193.73616 moveto + (implementing) ptmr8r 9.96265 fshow + 188.53552 -193.73616 moveto + (the) ptmr8r 9.96265 fshow + 203.20032 -193.73616 moveto + (class) ptmr8r 9.96265 fshow + 3 -227.44467 moveto + (A) ptmr8r 9.96265 fshow + 12.6837 -227.44467 moveto + (dashed) ptmr8r 9.96265 fshow + 42.8403 -227.44467 moveto + (arro) ptmr8r 9.96265 fshow + 58.631 -227.44467 moveto + (w) ptmr8r 9.96265 fshow + 68.3146 -227.44467 moveto + (indicates) ptmr8r 9.96265 fshow + 106.2219 -227.44467 moveto + (an) ptmr8r 9.96265 fshow + 118.1172 -227.44467 moveto + (instantiated) ptmr8r 9.96265 fshow + 166.5448 -227.44467 moveto + (class.) ptmr8r 9.96265 fshow + -148.4425 -95.09978 moveto + (Class) ptmr8r 9.96265 fshow + -124.36331 -95.09978 moveto + (specialization) ptmr8r 9.96265 fshow + -67.089 -95.09978 moveto + (is) ptmr8r 9.96265 fshow + -57.9535 -95.09978 moveto + (indicated) ptmr8r 9.96265 fshow + -18.9402 -95.09978 moveto + (by) ptmr8r 9.96265 fshow + -148.4425 -107.05487 moveto + (an) ptmr8r 9.96265 fshow + -136.54721 -107.05487 moveto + (arro) ptmr8r 9.96265 fshow + -120.7565 -107.05487 moveto + (w) ptmr8r 9.96265 fshow + -111.0729 -107.05487 moveto + (with) ptmr8r 9.96265 fshow + -90.86891 -107.05487 moveto + (a) ptmr8r 9.96265 fshow + -83.95491 -107.05487 moveto + (lar) ptmr8r 9.96265 fshow + -73.62381 -107.05487 moveto + (ge) ptmr8r 9.96265 fshow + -61.72841 -107.05487 moveto + (triangle.) ptmr8r 9.96265 fshow + 44.85431 -252.42162 moveto + (This) ptmr8r 9.96265 fshow + 65.0583 -252.42162 moveto + (class') ptmr8r 9.96265 fshow + 87.19492 -252.42162 moveto + (s) ptmr8r 9.96265 fshow + 93.56091 -252.42162 moveto + (details) ptmr8r 9.96265 fshow + 122.0635 -252.42162 moveto + (are) ptmr8r 9.96265 fshow + 136.71841 -252.42162 moveto + (presented) ptmr8r 9.96265 fshow + 177.3854 -252.42162 moveto + (else) ptmr8r 9.96265 fshow + 192.62791 -252.42162 moveto + (where.) ptmr8r 9.96265 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 396 3829 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 396 3829 a 229 x Fu(Figure)41 + b(C-1)h(illustrates)d(a)i(typical)f(UML)g(class)h(diagram.)f(The)h + (diagram)f(has)h(three)g(classes:)396 4188 y Fq(Classname1)p + Fu(,)34 b Fq(Classname2)p Fu(,)h(and)h Fq(Classname2<1>)p + Fu(.)e(Most)h(classes)i(are)g(repre-)396 4317 y(sented)g(by)g + (three-part)h(box)o(es.)e(The)h(top)g(part)g(lists)f(the)h(class')-5 + b(s)36 b(name.)h(The)g(middle)f(part)i(lists)396 4447 + y(public)c(data)i(members,)e(if)h(an)o(y)-6 b(.)34 b(Fe)n(w)h(POOMA)g + (classes)g(ha)n(v)o(e)g(public)f(data)h(members)f(so)h(this)396 + 4576 y(section)22 b(is)g(frequently)g(empty)-6 b(.)21 + b(The)i(bottom)e(part)i(lists)e(public)h(member)g(functions,)f(if)h(an) + o(y)-6 b(.)22 b(\223Free)396 4706 y(parameter)e(types\224)f(indicate)g + (templated)f(parameters.)i Fq(Classname2<1>)c Fu(has)j(only)g(one)g + (part,)396 4835 y(not)j(three.)h(Its)f(three-part)h(box)f(appears)h(in) + f(another)h(diagram,)f(presumably)f(because)i(there)g(is)f(not)396 + 4965 y(enough)k(room)f(in)g(this)g(one.)h(Both)g Fq(Classname1)d + Fu(and)j Fq(Classname2)d Fu(ha)n(v)o(e)j(template)f(pa-)396 + 5094 y(rameters,)31 b(each)h(named)f Fq(T)p Fu(.)g(These)g(occur)g(in)g + (dashed)g(box)o(es)f(at)h(the)g(upper)n(-right)g(corner)g(of)g(the)p + Black 3734 5547 a Fp(168)p Black eop + %%Page: 169 169 + 169 168 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fu(class)g(box)o(es.)g(Files)g(implementing) + e(a)j(class)f(are)h(listed)f(at)g(the)h(lo)n(wer)l(,)e(right)h(corner)h + (of)g(the)f(class')-5 b(s)396 180 y(box.)37 b(These)g(implementation)d + (\002les)j(may)g(be)g(dif)n(ferent)g(from)f(the)h(header)h(\002les)f + (to)f(include)h(in)396 310 y(one')-5 b(s)24 b(program)h(to)f(use)h + (these)g(classes.)396 489 y(Lines)35 b(connect)h(classes.)f(The)h + (solid)e(arro)n(w)i(with)e(lar)n(ge)i(triangular)f(arro)n(whead)h + (indicates)f(that)396 619 y Fq(Classname2)40 b Fu(is)i(a)h(subtype)f + (of)g Fq(Classname1)p Fu(.)e(Since)j(this)f(diagram)g(represents)g(the) + 396 748 y(speci\002cation)28 b(le)n(v)o(el,)f(subtyping)g(does)h(not)g + (necessarily)g(correspond)g(to)g(C++)i(type)e(inheritance.)396 + 878 y(Also,)22 b(subtype)f(class)h(box)o(es)f(need)h(only)g(list)f + (members)h(not)f(a)n(v)n(ailable)h(in)f(the)h(supertype.)g(F)o(or)g + (this)396 1007 y(case,)i Fq(Classname2)d Fu(has)i(one)g(ne)n(w)g + (member)f(not)h(pro)o(vided)f(by)h Fq(Classname1)p Fu(.)d(A)k(dashed) + 396 1137 y(arro)n(w)38 b(indicates)f(a)h(class)g(formed)f(by)h(a)g + (template)f(instantiation.)e(The)j(class)f(name)h(indicates)396 + 1266 y(which)33 b(template)g(parameters)g(are)h(bound.)e(F)o(or)h(e)o + (xample,)g Fq(Classname2<1>)d Fu(instantiates)396 1396 + y Fq(Classname2)23 b Fu(with)h Fq(T)g Fu(equal)h(to)g(1.)396 + 1575 y(Some)30 b(of)g(the)g(functions)f(require)h(man)o(y)-6 + b(,)28 b(similar)h(function)g(ar)n(guments.)g(W)-8 b(e)30 + b(introduce)g(re)o(gular)396 1705 y(e)o(xpression)24 + b(notation)f(to)i(reduce)g(the)g(length)f(of)h(the)f(function)g + (prototype.)g(F)o(or)h(e)o(xample,)635 2014 y Fn(void)59 + b(foo\(const)f(X[1-3]&\))396 2273 y Fu(abbre)n(viates)635 + 2532 y Fn(void)h(foo\(const)f(X1&,)h(const)g(X2&,)f(const)h(X3&\))396 + 2791 y Fq(X[1-3])37 b Fu(abbre)n(viates)h Fq(X1)p Fu(,)g(X2,)g + Fq(X3)p Fu(.)g(W)-8 b(e)39 b(assume)f(this)f(distrib)n(utes)g(o)o(v)o + (er)g Fq(const)65 b(&,)38 b Fu(to)396 2920 y(yield)24 + b(C++)i(code.)396 3099 y(These)h(diagrams)e(omit)h(a)g(lot)g(of)g + (details.)g(Pri)n(v)n(ate)g(and)g(protected)g(data)h(members)e(are)j + (not)d(listed.)396 3229 y(Compile-time)d(types)h(and)h(v)n(alues)e(are) + j(not)e(listed.)f(No)h(indication)g(is)g(gi)n(v)o(en)f(of)h(the)h + (actual)f(imple-)396 3358 y(mentation.)h(Some)g(template)g(ar)n + (guments)h(of)f(parameters)h(ha)n(v)o(e)g(been)g(suppressed.)p + Black 3734 5547 a Fp(169)p Black eop + %%Page: 170 170 + 170 169 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black -2 93 a Fx(C.1.)47 b Fg(Array)p Fx(s)396 + 409 y Fr(Figur)n(e)26 b(C-2.)e(Relationship)h(Between)i + Fo(Array)c Fr(and)j Fo(DynamicArray)p Fr(s)1206 1612 + y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 1206 1612 a @beginspecial -67 @llx -84 @lly 157 @urx + 46 @ury 2240 @rwi @setspecial + %%BeginDocument: figures/array-uml.1 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -67 -84 157 46 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -14.94395 -2.391 moveto + (Array) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -65.76465 -8.9776 moveto + 65.76465 -8.9776 lineto + 65.76465 8.9776 lineto + -65.76465 8.9776 lineto + closepath stroke + -62.76465 -77.03911 moveto + (DynamicArray<1,T,Tag>) pcrr8r 9.96265 fshow + newpath -65.76465 -83.6257 moveto + 65.76465 -83.6257 lineto + 65.76465 -65.6705 lineto + -65.76465 -65.6705 lineto + closepath stroke + 1 setgray + newpath 62.76465 5.9776 moveto + 156.03735 5.9776 lineto + 156.03735 44.8544 lineto + 62.76465 44.8544 lineto + closepath fill + 0 setgray + 71.74225 34.1832 moveto + (dimension) pcrr8r 8.96632 fshow + 125.54045 34.1832 moveto + (D) pcrr8r 8.96632 fshow + 71.74225 23.2242 moveto + (value) pcrr8r 8.96632 fshow + 104.02115 23.2242 moveto + (type) pcrr8r 8.96632 fshow + 130.92024 23.2242 moveto + (T) pcrr8r 8.96632 fshow + 71.74225 12.26529 moveto + (engine) pcrr8r 8.96632 fshow + 109.40096 12.26529 moveto + (tag) pcrr8r 8.96632 fshow + 130.92024 12.26529 moveto + (Tag) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 62.76465 5.9776 moveto + 156.03735 5.9776 lineto + 156.03735 44.8544 lineto + 62.76465 44.8544 lineto + closepath stroke + 1 setgray + newpath 62.76465 -68.6705 moveto + 156.03735 -68.6705 lineto + 156.03735 -40.75269 lineto + 62.76465 -40.75269 lineto + closepath fill + 0 setgray + 71.74225 -51.4239 moveto + (value) pcrr8r 8.96632 fshow + 104.02115 -51.4239 moveto + (type) pcrr8r 8.96632 fshow + 130.92024 -51.4239 moveto + (T) pcrr8r 8.96632 fshow + 71.74225 -62.3828 moveto + (engine) pcrr8r 8.96632 fshow + 109.40096 -62.3828 moveto + (tag) pcrr8r 8.96632 fshow + 130.92024 -62.3828 moveto + (Tag) pcrr8r 8.96632 fshow + newpath 62.76465 -68.6705 moveto + 156.03735 -68.6705 lineto + 156.03735 -40.75269 lineto + 62.76465 -40.75269 lineto + closepath stroke + [] 0 setdash + newpath 0 -8.9776 moveto + -7.08662 -21.25201 lineto + 7.08662 -21.25201 lineto + closepath stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath 0 -21.25201 moveto + 0 -65.6705 lineto stroke + showpage + %%EOF + + %%EndDocument + @endspecial 1206 1612 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 1206 1612 a 396 1841 a Fu(Both)c + Fq(Array)p Fu(s)e(and)h Fq(DynamicArray)p Fu(s)e(ha)n(v)o(e)i(so)g(man) + o(y)g(member)g(functions)f(that)h(their)h(class)396 1971 + y(box)o(es)33 b(appear)g(in)g(separate)h(diagrams.)f(Figure)g(C-2)h + (indicates)f(that)f Fq(DynamicArray)p Fu(s)f(are)396 + 2100 y(subtypes)38 b(of)g Fq(Array)p Fu(s.)f(Both)h(ha)n(v)o(e)h(v)n + (alue)e(type)i(and)f(engine)g(tag)h(template)e(parameters)i(b)n(ut)396 + 2230 y Fq(DynamicArray)p Fu(')-5 b(s)22 b(dimension)h(must)g(be)i(one.) + 396 2409 y(Implementation)e(\002les)i(are)h(located)e(within)g(the)g + Ft(src/Array)k Fu(directory)-6 b(.)p Black 3734 5547 + a Fp(170)p Black eop + %%Page: 171 171 + 171 170 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-3.)e Fo(Array)g + Fr(Diagram)698 5554 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 698 5554 a @beginspecial -150 @llx + -600 @lly 196 @urx 46 @ury 3460 @rwi @setspecial + %%BeginDocument: figures/array-uml.2 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -150 -600 196 46 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -14.94395 -2.391 moveto + (Array) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -148.8529 -8.9776 moveto + 148.8529 -8.9776 lineto + 148.8529 8.9776 lineto + -148.8529 8.9776 lineto + closepath stroke + newpath -148.8529 -26.9328 moveto + 148.8529 -26.9328 lineto + 148.8529 -8.9776 lineto + -148.8529 -8.9776 lineto + closepath stroke + -139.8753 -37.60402 moveto + (Array\(\)) pcrr8r 8.96632 fshow + -139.8753 -48.56291 moveto + (Array\(Array\)) pcrr8r 8.96632 fshow + -139.8753 -59.52182 moveto + (Array\(Array,) pcrr8r 8.96632 fshow + -69.9376 -59.52182 moveto + (Domain\)) pcrr8r 8.96632 fshow + -139.8753 -70.48071 moveto + (Array\(const) pcrr8r 8.96632 fshow + -75.3175 -70.48071 moveto + (Domain&\)) pcrr8r 8.96632 fshow + -139.8753 -81.43962 moveto + (Array\(const) pcrr8r 8.96632 fshow + -75.3175 -81.43962 moveto + (Domain[1-2]&\)) pcrr8r 8.96632 fshow + -139.8753 -92.39851 moveto + (Array\(const) pcrr8r 8.96632 fshow + -75.3175 -92.39851 moveto + (Domain[1-3]&\)) pcrr8r 8.96632 fshow + -139.8753 -103.35742 moveto + (Array\(const) pcrr8r 8.96632 fshow + -75.3175 -103.35742 moveto + (Domain[1-4]&\)) pcrr8r 8.96632 fshow + -139.8753 -114.31631 moveto + (Array\(const) pcrr8r 8.96632 fshow + -75.3175 -114.31631 moveto + (Domain[1-5]&\)) pcrr8r 8.96632 fshow + -139.8753 -125.27522 moveto + (Array\(const) pcrr8r 8.96632 fshow + -75.3175 -125.27522 moveto + (Domain[1-6]&\)) pcrr8r 8.96632 fshow + -139.8753 -136.23412 moveto + (Array\(const) pcrr8r 8.96632 fshow + -75.3175 -136.23412 moveto + (Domain[1-7]&\)) pcrr8r 8.96632 fshow + -139.8753 -147.19302 moveto + (Array\(const) pcrr8r 8.96632 fshow + -75.3175 -147.19302 moveto + (Domain&,) pcrr8r 8.96632 fshow + -26.89911 -147.19302 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -158.15192 moveto + (Array\(const) pcrr8r 8.96632 fshow + -75.3175 -158.15192 moveto + (Domain[1-2]&,) pcrr8r 8.96632 fshow + 0 -158.15192 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -169.11092 moveto + (Array\(const) pcrr8r 8.96632 fshow + -75.3175 -169.11092 moveto + (Domain[1-3]&,) pcrr8r 8.96632 fshow + 0 -169.11092 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -180.06982 moveto + (Array\(const) pcrr8r 8.96632 fshow + -75.3175 -180.06982 moveto + (Domain[1-4]&,) pcrr8r 8.96632 fshow + 0 -180.06982 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -191.02872 moveto + (Array\(const) pcrr8r 8.96632 fshow + -75.3175 -191.02872 moveto + (Domain[1-5]&,) pcrr8r 8.96632 fshow + 0 -191.02872 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -201.98763 moveto + (Array\(const) pcrr8r 8.96632 fshow + -75.3175 -201.98763 moveto + (Domain[1-6]&,) pcrr8r 8.96632 fshow + 0 -201.98763 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -212.94652 moveto + (Array\(const) pcrr8r 8.96632 fshow + -75.3175 -212.94652 moveto + (Domain[1-7]&,) pcrr8r 8.96632 fshow + 0 -212.94652 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -223.90543 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -223.90543 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -223.90543 moveto + (Domain&\)) pcrr8r 8.96632 fshow + -139.8753 -234.86432 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -234.86432 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -234.86432 moveto + (Domain[1-2]&\)) pcrr8r 8.96632 fshow + -139.8753 -245.82321 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -245.82321 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -245.82321 moveto + (Domain[1-3]&\)) pcrr8r 8.96632 fshow + -139.8753 -256.78212 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -256.78212 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -256.78212 moveto + (Domain[1-4]&\)) pcrr8r 8.96632 fshow + -139.8753 -267.74101 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -267.74101 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -267.74101 moveto + (Domain[1-5]&\)) pcrr8r 8.96632 fshow + -139.8753 -278.69992 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -278.69992 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -278.69992 moveto + (Domain[1-6]&\)) pcrr8r 8.96632 fshow + -139.8753 -289.65881 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -289.65881 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -289.65881 moveto + (Domain[1-7]&\)) pcrr8r 8.96632 fshow + -139.8753 -300.61772 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -300.61772 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -300.61772 moveto + (Domain&,) pcrr8r 8.96632 fshow + 26.8991 -300.61772 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -311.57661 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -311.57661 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -311.57661 moveto + (Domain[1-2]&,) pcrr8r 8.96632 fshow + 53.79819 -311.57661 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -322.53552 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -322.53552 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -322.53552 moveto + (Domain[1-3]&,) pcrr8r 8.96632 fshow + 53.79819 -322.53552 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -333.49442 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -333.49442 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -333.49442 moveto + (Domain[1-4]&,) pcrr8r 8.96632 fshow + 53.79819 -333.49442 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -344.45332 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -344.45332 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -344.45332 moveto + (Domain[1-5]&,) pcrr8r 8.96632 fshow + 53.79819 -344.45332 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -355.41222 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -355.41222 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -355.41222 moveto + (Domain[1-6]&,) pcrr8r 8.96632 fshow + 53.79819 -355.41222 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -366.37112 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -366.37112 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -366.37112 moveto + (Domain[1-7]&,) pcrr8r 8.96632 fshow + 53.79819 -366.37112 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -377.33002 moveto + (read\(\);) pcrr8r 8.96632 fshow + -96.8367 -377.33002 moveto + (operator\(\)\(\)) pcrr8r 8.96632 fshow + -139.8753 -388.28893 moveto + (read\(const) pcrr8r 8.96632 fshow + -80.69731 -388.28893 moveto + (X1&\);) pcrr8r 8.96632 fshow + -48.41841 -388.28893 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 43.03859 -388.28893 moveto + (X1&\)) pcrr8r 8.96632 fshow + -139.8753 -399.24782 moveto + (read\(const) pcrr8r 8.96632 fshow + -80.69731 -399.24782 moveto + (X[1-2]&\);) pcrr8r 8.96632 fshow + -26.89911 -399.24782 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 64.5578 -399.24782 moveto + (X[1-2]&\)) pcrr8r 8.96632 fshow + -139.8753 -410.20671 moveto + (read\(const) pcrr8r 8.96632 fshow + -80.69731 -410.20671 moveto + (X[1-3]&\);) pcrr8r 8.96632 fshow + -26.89911 -410.20671 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 64.5578 -410.20671 moveto + (X[1-3]&\)) pcrr8r 8.96632 fshow + -139.8753 -421.16562 moveto + (read\(const) pcrr8r 8.96632 fshow + -80.69731 -421.16562 moveto + (X[1-4]&\);) pcrr8r 8.96632 fshow + -26.89911 -421.16562 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 64.5578 -421.16562 moveto + (X[1-4]&\)) pcrr8r 8.96632 fshow + -139.8753 -432.12462 moveto + (read\(const) pcrr8r 8.96632 fshow + -80.69731 -432.12462 moveto + (X[1-5]&\);) pcrr8r 8.96632 fshow + -26.89911 -432.12462 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 64.5578 -432.12462 moveto + (X[1-5]&\)) pcrr8r 8.96632 fshow + -139.8753 -443.08351 moveto + (read\(const) pcrr8r 8.96632 fshow + -80.69731 -443.08351 moveto + (X[1-6]&\);) pcrr8r 8.96632 fshow + -26.89911 -443.08351 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 64.5578 -443.08351 moveto + (X[1-6]&\)) pcrr8r 8.96632 fshow + -139.8753 -454.04242 moveto + (read\(const) pcrr8r 8.96632 fshow + -80.69731 -454.04242 moveto + (X[1-7]&\);) pcrr8r 8.96632 fshow + -26.89911 -454.04242 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 64.5578 -454.04242 moveto + (X[1-7]&\)) pcrr8r 8.96632 fshow + -139.8753 -465.00131 moveto + (domain\(\)) pcrr8r 8.96632 fshow + -139.8753 -475.96022 moveto + (physicalDomain\(\)) pcrr8r 8.96632 fshow + -139.8753 -486.91911 moveto + (totalDomain\(\)) pcrr8r 8.96632 fshow + -139.8753 -497.87802 moveto + (first\(int\);) pcrr8r 8.96632 fshow + -75.3175 -497.87802 moveto + (last\(int\)) pcrr8r 8.96632 fshow + -139.8753 -508.83691 moveto + (length\(int\)) pcrr8r 8.96632 fshow + -139.8753 -519.79582 moveto + (firsts\(\);) pcrr8r 8.96632 fshow + -86.0771 -519.79582 moveto + (lasts\(\)) pcrr8r 8.96632 fshow + -139.8753 -530.75471 moveto + (lengths\(\)) pcrr8r 8.96632 fshow + -139.8753 -541.71362 moveto + (size\(\)) pcrr8r 8.96632 fshow + -139.8753 -552.67252 moveto + (layout\(\)) pcrr8r 8.96632 fshow + -139.8753 -563.63142 moveto + (engine\(\)) pcrr8r 8.96632 fshow + -139.8753 -574.59032 moveto + (operator<<\(\)) pcrr8r 8.96632 fshow + newpath -148.8529 -580.87802 moveto + 148.8529 -580.87802 lineto + 148.8529 -26.9328 lineto + -148.8529 -26.9328 lineto + closepath stroke + 1 setgray + newpath 102.21655 5.9776 moveto + 195.48926 5.9776 lineto + 195.48926 44.8544 lineto + 102.21655 44.8544 lineto + closepath fill + 0 setgray + 111.19415 34.1832 moveto + (dimension) pcrr8r 8.96632 fshow + 164.99236 34.1832 moveto + (D) pcrr8r 8.96632 fshow + 111.19415 23.2242 moveto + (value) pcrr8r 8.96632 fshow + 143.47305 23.2242 moveto + (type) pcrr8r 8.96632 fshow + 170.37215 23.2242 moveto + (T) pcrr8r 8.96632 fshow + 111.19415 12.26529 moveto + (engine) pcrr8r 8.96632 fshow + 148.85286 12.26529 moveto + (tag) pcrr8r 8.96632 fshow + 170.37215 12.26529 moveto + (Tag) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 102.21655 5.9776 moveto + 195.48926 5.9776 lineto + 195.48926 44.8544 lineto + 102.21655 44.8544 lineto + closepath stroke + 8.9776 -589.45712 moveto + (Array.h) pcrr8r 6.97382 fshow + 8.9776 -597.42723 moveto + (PrintArray.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 698 5554 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 698 5554 a Black 3734 5547 a + Fp(171)p Black eop + %%Page: 172 172 + 172 171 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-4.)e Fo(DynamicArray)e + Fr(Diagram)698 4762 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 698 4762 a @beginspecial -150 @llx + -516 @lly 196 @urx 35 @ury 3460 @rwi @setspecial + %%BeginDocument: figures/array-uml.3 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -150 -516 196 35 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier cmmi9 + /pcrr8r /Courier def + /cmmi9 /cmmi9 def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -62.76465 -2.391 moveto + (DynamicArray<1,T,Tag>) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -148.8529 -8.9776 moveto + 148.8529 -8.9776 lineto + 148.8529 8.9776 lineto + -148.8529 8.9776 lineto + closepath stroke + newpath -148.8529 -26.9328 moveto + 148.8529 -26.9328 lineto + 148.8529 -8.9776 lineto + -148.8529 -8.9776 lineto + closepath stroke + -139.8753 -37.60402 moveto + (DynamicArray\(\)) pcrr8r 8.96632 fshow + -139.8753 -48.56293 moveto + (DynamicArray\(Domain\)) pcrr8r 8.96632 fshow + -139.8753 -59.52182 moveto + (DynamicArray\(Domain,) pcrr8r 8.96632 fshow + -26.89911 -59.52182 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -70.48073 moveto + (DynamicArray\(DynamicArray\)) pcrr8r 8.96632 fshow + -139.8753 -81.43962 moveto + (DynamicArray\(DynamicArray,) pcrr8r 8.96632 fshow + 5.37979 -81.43962 moveto + (Domain\)) pcrr8r 8.96632 fshow + -139.8753 -92.39862 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -92.39862 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -92.39862 moveto + (Domain&\)) pcrr8r 8.96632 fshow + -139.8753 -103.35753 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -103.35753 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -103.35753 moveto + (Domain[1-2]&\)) pcrr8r 8.96632 fshow + -139.8753 -114.31642 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -114.31642 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -114.31642 moveto + (Domain[1-3]&\)) pcrr8r 8.96632 fshow + -139.8753 -125.27531 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -125.27531 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -125.27531 moveto + (Domain[1-4]&\)) pcrr8r 8.96632 fshow + -139.8753 -136.23422 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -136.23422 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -136.23422 moveto + (Domain[1-5]&\)) pcrr8r 8.96632 fshow + -139.8753 -147.19312 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -147.19312 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -147.19312 moveto + (Domain[1-6]&\)) pcrr8r 8.96632 fshow + -139.8753 -158.15202 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -158.15202 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -158.15202 moveto + (Domain[1-7]&\)) pcrr8r 8.96632 fshow + -139.8753 -169.11092 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -169.11092 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -169.11092 moveto + (Domain&,) pcrr8r 8.96632 fshow + 26.8991 -169.11092 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -180.06982 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -180.06982 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -180.06982 moveto + (Domain[1-2]&,) pcrr8r 8.96632 fshow + 53.79819 -180.06982 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -191.02872 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -191.02872 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -191.02872 moveto + (Domain[1-3]&,) pcrr8r 8.96632 fshow + 53.79819 -191.02872 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -201.98763 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -201.98763 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -201.98763 moveto + (Domain[1-4]&,) pcrr8r 8.96632 fshow + 53.79819 -201.98763 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -212.94652 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -212.94652 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -212.94652 moveto + (Domain[1-5]&,) pcrr8r 8.96632 fshow + 53.79819 -212.94652 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -223.90543 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -223.90543 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -223.90543 moveto + (Domain[1-6]&,) pcrr8r 8.96632 fshow + 53.79819 -223.90543 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -234.86432 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -234.86432 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -234.86432 moveto + (Domain[1-7]&,) pcrr8r 8.96632 fshow + 53.79819 -234.86432 moveto + (ModelElement\)) pcrr8r 8.96632 fshow + -139.8753 -245.82323 moveto + (read\(\);) pcrr8r 8.96632 fshow + -96.8367 -245.82323 moveto + (operator\(\)\(\)) pcrr8r 8.96632 fshow + -139.8753 -256.78212 moveto + (read\(const) pcrr8r 8.96632 fshow + -80.69731 -256.78212 moveto + (X1&\);) pcrr8r 8.96632 fshow + -48.41841 -256.78212 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 43.03859 -256.78212 moveto + (X1&\)) pcrr8r 8.96632 fshow + -139.8753 -267.74103 moveto + (read\(const) pcrr8r 8.96632 fshow + -80.69731 -267.74103 moveto + (X[1-2]&\);) pcrr8r 8.96632 fshow + -26.89911 -267.74103 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 64.5578 -267.74103 moveto + (X[1-2]&\)) pcrr8r 8.96632 fshow + -139.8753 -278.69992 moveto + (read\(const) pcrr8r 8.96632 fshow + -80.69731 -278.69992 moveto + (X[1-3]&\);) pcrr8r 8.96632 fshow + -26.89911 -278.69992 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 64.5578 -278.69992 moveto + (X[1-3]&\)) pcrr8r 8.96632 fshow + -139.8753 -289.65883 moveto + (read\(const) pcrr8r 8.96632 fshow + -80.69731 -289.65883 moveto + (X[1-4]&\);) pcrr8r 8.96632 fshow + -26.89911 -289.65883 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 64.5578 -289.65883 moveto + (X[1-4]&\)) pcrr8r 8.96632 fshow + -139.8753 -300.61772 moveto + (read\(const) pcrr8r 8.96632 fshow + -80.69731 -300.61772 moveto + (X[1-5]&\);) pcrr8r 8.96632 fshow + -26.89911 -300.61772 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 64.5578 -300.61772 moveto + (X[1-5]&\)) pcrr8r 8.96632 fshow + -139.8753 -311.57661 moveto + (read\(const) pcrr8r 8.96632 fshow + -80.69731 -311.57661 moveto + (X[1-6]&\);) pcrr8r 8.96632 fshow + -26.89911 -311.57661 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 64.5578 -311.57661 moveto + (X[1-6]&\)) pcrr8r 8.96632 fshow + -139.8753 -322.53552 moveto + (read\(const) pcrr8r 8.96632 fshow + -80.69731 -322.53552 moveto + (X[1-7]&\);) pcrr8r 8.96632 fshow + -26.89911 -322.53552 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 64.5578 -322.53552 moveto + (X[1-7]&\)) pcrr8r 8.96632 fshow + -139.8753 -333.49442 moveto + (domain\(\)) pcrr8r 8.96632 fshow + -139.8753 -344.45332 moveto + (physicalDomain\(\)) pcrr8r 8.96632 fshow + -139.8753 -355.41232 moveto + (totalDomain\(\)) pcrr8r 8.96632 fshow + -139.8753 -366.37122 moveto + (first\(int\);) pcrr8r 8.96632 fshow + -75.3175 -366.37122 moveto + (last\(int\)) pcrr8r 8.96632 fshow + -139.8753 -377.33012 moveto + (length\(int\)) pcrr8r 8.96632 fshow + -139.8753 -388.28902 moveto + (firsts\(\);) pcrr8r 8.96632 fshow + -86.0771 -388.28902 moveto + (lasts\(\)) pcrr8r 8.96632 fshow + -139.8753 -399.24792 moveto + (lengths\(\)) pcrr8r 8.96632 fshow + -139.8753 -410.20682 moveto + (size\(\)) pcrr8r 8.96632 fshow + -139.8753 -421.16573 moveto + (layout\(\)) pcrr8r 8.96632 fshow + -139.8753 -432.12462 moveto + (engine\(\)) pcrr8r 8.96632 fshow + -139.8753 -443.08353 moveto + (operator<<\(\)) pcrr8r 8.96632 fshow + -139.8753 -454.04242 moveto + (array\(\)) pcrr8r 8.96632 fshow + -139.8753 -465.00133 moveto + (arrayAll\(\)) pcrr8r 8.96632 fshow + -139.8753 -476.16052 moveto + (create\(CreateSize) pcrr8r 8.96632 fshow + -47.97351 -474.51563 moveto + (\177) cmmi9 8.96637 fshow + -48.41841 -476.16052 moveto + (\)) pcrr8r 8.96632 fshow + -139.8753 -487.11942 moveto + (destroy\(Domain\)) pcrr8r 8.96632 fshow + -139.8753 -498.07832 moveto + (destroy\(Iter,) pcrr8r 8.96632 fshow + -64.5578 -498.07832 moveto + (Iter\)) pcrr8r 8.96632 fshow + newpath -148.8529 -504.36603 moveto + 148.8529 -504.36603 lineto + 148.8529 -26.9328 lineto + -148.8529 -26.9328 lineto + closepath stroke + 1 setgray + newpath 102.21655 5.9776 moveto + 195.48926 5.9776 lineto + 195.48926 33.89542 lineto + 102.21655 33.89542 lineto + closepath fill + 0 setgray + 111.19415 23.2242 moveto + (value) pcrr8r 8.96632 fshow + 143.47305 23.2242 moveto + (type) pcrr8r 8.96632 fshow + 170.37215 23.2242 moveto + (T) pcrr8r 8.96632 fshow + 111.19415 12.2653 moveto + (engine) pcrr8r 8.96632 fshow + 148.85286 12.2653 moveto + (tag) pcrr8r 8.96632 fshow + 170.37215 12.2653 moveto + (Tag) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 102.21655 5.9776 moveto + 195.48926 5.9776 lineto + 195.48926 33.89542 lineto + 102.21655 33.89542 lineto + closepath stroke + 8.9776 -512.94502 moveto + (DynamicArray.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 698 4762 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 698 4762 a Black 3734 5547 a + Fp(172)p Black eop + %%Page: 173 173 + 173 172 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black -2 94 a Fx(C.2.)47 b Fg(Field)p Fx(s,)f + Fg(Mesh)p Fx(es,)f(and)j Fg(Centering)p Fx(s)396 310 + y Fu(A)25 b Fq(Field)f Fu(has)g(a)i(mesh)e(and)h(a)g(centering.)f(It)h + (is)f(implemented)g(in)g Ft(src/Field/Field.h)p Fu(.)p + Black 3734 5547 a Fp(173)p Black eop + %%Page: 174 174 + 174 173 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-5.)e Fo(Field)415 + 5554 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 415 5554 a @beginspecial -185 @llx -600 @lly 229 + @urx 46 @ury 4140 @rwi @setspecial + %%BeginDocument: figures/field-uml.10 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -185 -600 229 46 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -14.94395 -2.391 moveto + (Field) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -183.82176 -8.9776 moveto + 183.82176 -8.9776 lineto + 183.82176 8.9776 lineto + -183.82176 8.9776 lineto + closepath stroke + newpath -183.82176 -26.9328 moveto + 183.82176 -26.9328 lineto + 183.82176 -8.9776 lineto + -183.82176 -8.9776 lineto + closepath stroke + -174.84413 -37.60402 moveto + (Field\(\)) pcrr8r 8.96632 fshow + -174.84413 -48.56291 moveto + (Field\(const) pcrr8r 8.96632 fshow + -110.28633 -48.56291 moveto + (X&\)) pcrr8r 8.96632 fshow + -174.84413 -59.52182 moveto + (Field\(const) pcrr8r 8.96632 fshow + -110.28633 -59.52182 moveto + (Centering&,) pcrr8r 8.96632 fshow + -45.72842 -59.52182 moveto + (const) pcrr8r 8.96632 fshow + -13.44954 -59.52182 moveto + (Layout&,) pcrr8r 8.96632 fshow + 34.96887 -59.52182 moveto + (const) pcrr8r 8.96632 fshow + 67.24777 -59.52182 moveto + (M&\)) pcrr8r 8.96632 fshow + -174.84413 -70.48071 moveto + (Field\(int,) pcrr8r 8.96632 fshow + -115.66614 -70.48071 moveto + (const) pcrr8r 8.96632 fshow + -83.38724 -70.48071 moveto + (Centering&,) pcrr8r 8.96632 fshow + -18.82933 -70.48071 moveto + (const) pcrr8r 8.96632 fshow + 13.44957 -70.48071 moveto + (Layout&,) pcrr8r 8.96632 fshow + 61.86797 -70.48071 moveto + (const) pcrr8r 8.96632 fshow + 94.14687 -70.48071 moveto + (M&\)) pcrr8r 8.96632 fshow + -174.84413 -81.43962 moveto + (Field\(const) pcrr8r 8.96632 fshow + -110.28633 -81.43962 moveto + (Centering&,) pcrr8r 8.96632 fshow + -45.72842 -81.43962 moveto + (const) pcrr8r 8.96632 fshow + -13.44954 -81.43962 moveto + (Layout&,) pcrr8r 8.96632 fshow + 34.96887 -81.43962 moveto + (const) pcrr8r 8.96632 fshow + 67.24777 -81.43962 moveto + (X1&,) pcrr8r 8.96632 fshow + 94.14687 -81.43962 moveto + (const) pcrr8r 8.96632 fshow + 126.42577 -81.43962 moveto + (X2&\)) pcrr8r 8.96632 fshow + -174.84413 -92.39851 moveto + (Field\(const) pcrr8r 8.96632 fshow + -110.28633 -92.39851 moveto + (Centering&,) pcrr8r 8.96632 fshow + -45.72842 -92.39851 moveto + (const) pcrr8r 8.96632 fshow + -13.44954 -92.39851 moveto + (Layout&\)) pcrr8r 8.96632 fshow + -174.84413 -103.35742 moveto + (Field\(int,) pcrr8r 8.96632 fshow + -115.66614 -103.35742 moveto + (const) pcrr8r 8.96632 fshow + -83.38724 -103.35742 moveto + (Centering&,) pcrr8r 8.96632 fshow + -18.82933 -103.35742 moveto + (const) pcrr8r 8.96632 fshow + 13.44957 -103.35742 moveto + (Layout&,) pcrr8r 8.96632 fshow + 61.86797 -103.35742 moveto + (const) pcrr8r 8.96632 fshow + 94.14687 -103.35742 moveto + (X1&,) pcrr8r 8.96632 fshow + 121.04597 -103.35742 moveto + (const) pcrr8r 8.96632 fshow + 153.32487 -103.35742 moveto + (X2&\)) pcrr8r 8.96632 fshow + -174.84413 -114.31631 moveto + (Field\(const) pcrr8r 8.96632 fshow + -110.28633 -114.31631 moveto + (Field&\)) pcrr8r 8.96632 fshow + -174.84413 -125.27522 moveto + (void) pcrr8r 8.96632 fshow + -147.94504 -125.27522 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -56.48813 -125.27522 moveto + (Centering&,) pcrr8r 8.96632 fshow + 8.06976 -125.27522 moveto + (const) pcrr8r 8.96632 fshow + 40.34866 -125.27522 moveto + (Layout&,) pcrr8r 8.96632 fshow + 88.76707 -125.27522 moveto + (const) pcrr8r 8.96632 fshow + 121.04597 -125.27522 moveto + (M&\)) pcrr8r 8.96632 fshow + -174.84413 -136.23412 moveto + (void) pcrr8r 8.96632 fshow + -147.94504 -136.23412 moveto + (initialize\(int,) pcrr8r 8.96632 fshow + -61.86794 -136.23412 moveto + (const) pcrr8r 8.96632 fshow + -29.58904 -136.23412 moveto + (Centering&,) pcrr8r 8.96632 fshow + 34.96887 -136.23412 moveto + (const) pcrr8r 8.96632 fshow + 67.24777 -136.23412 moveto + (Layout&,) pcrr8r 8.96632 fshow + 115.66617 -136.23412 moveto + (const) pcrr8r 8.96632 fshow + 147.94507 -136.23412 moveto + (M&\)) pcrr8r 8.96632 fshow + -174.84413 -147.19302 moveto + (void) pcrr8r 8.96632 fshow + -147.94504 -147.19302 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -56.48813 -147.19302 moveto + (Centering&,) pcrr8r 8.96632 fshow + 8.06976 -147.19302 moveto + (const) pcrr8r 8.96632 fshow + 40.34866 -147.19302 moveto + (Layout&\)) pcrr8r 8.96632 fshow + -174.84413 -158.15192 moveto + (void) pcrr8r 8.96632 fshow + -147.94504 -158.15192 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -56.48813 -158.15192 moveto + (Field&\)) pcrr8r 8.96632 fshow + -176.33704 -169.11092 moveto + (\230) ptmr8r 8.96632 fshow + -173.34943 -169.11092 moveto + (Field\(\)) pcrr8r 8.96632 fshow + -174.84413 -180.06982 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -180.06982 moveto + (Engine&) pcrr8r 8.96632 fshow + -99.52663 -180.06982 moveto + (engine\(\)) pcrr8r 8.96632 fshow + -174.84413 -191.02872 moveto + (Engine&) pcrr8r 8.96632 fshow + -131.80553 -191.02872 moveto + (engine\(\)) pcrr8r 8.96632 fshow + -174.84413 -201.98763 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -201.98763 moveto + (FieldEngine&) pcrr8r 8.96632 fshow + -72.62753 -201.98763 moveto + (fieldEngine\(\)) pcrr8r 8.96632 fshow + -174.84413 -212.94652 moveto + (FieldEngine&) pcrr8r 8.96632 fshow + -104.90643 -212.94652 moveto + (fieldEngine\(\)) pcrr8r 8.96632 fshow + -174.84413 -223.90543 moveto + (int) pcrr8r 8.96632 fshow + -153.32483 -223.90543 moveto + (numSubFields\(\)) pcrr8r 8.96632 fshow + -174.84413 -234.86432 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -234.86432 moveto + (Centering&) pcrr8r 8.96632 fshow + -83.38724 -234.86432 moveto + (centering\(\)) pcrr8r 8.96632 fshow + -174.84413 -245.82321 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -245.82321 moveto + (Centering) pcrr8r 8.96632 fshow + -88.76703 -245.82321 moveto + (centering\(int\)) pcrr8r 8.96632 fshow + -174.84413 -256.78212 moveto + (int) pcrr8r 8.96632 fshow + -153.32483 -256.78212 moveto + (centeringSize\(\)) pcrr8r 8.96632 fshow + -174.84413 -267.74101 moveto + (int) pcrr8r 8.96632 fshow + -153.32483 -267.74101 moveto + (numMaterials\(\)) pcrr8r 8.96632 fshow + -174.84413 -278.69992 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -278.69992 moveto + (Domain) pcrr8r 8.96632 fshow + -104.90643 -278.69992 moveto + (physicalCellDomain\(\)) pcrr8r 8.96632 fshow + -174.84413 -289.65881 moveto + (Domain) pcrr8r 8.96632 fshow + -137.18542 -289.65881 moveto + (totalCellDomain\(\)) pcrr8r 8.96632 fshow + -174.84413 -300.61772 moveto + (Domain) pcrr8r 8.96632 fshow + -137.18542 -300.61772 moveto + (physicalDomain\(int\)) pcrr8r 8.96632 fshow + -174.84413 -311.57661 moveto + (Domain) pcrr8r 8.96632 fshow + -137.18542 -311.57661 moveto + (totalDomain\(int\)) pcrr8r 8.96632 fshow + -174.84413 -322.53552 moveto + (Domain) pcrr8r 8.96632 fshow + -137.18542 -322.53552 moveto + (physicalDomain\(\)) pcrr8r 8.96632 fshow + -174.84413 -333.49442 moveto + (Domain) pcrr8r 8.96632 fshow + -137.18542 -333.49442 moveto + (totalDomain\(\)) pcrr8r 8.96632 fshow + -174.84413 -344.45332 moveto + (Domain) pcrr8r 8.96632 fshow + -137.18542 -344.45332 moveto + (domain\(\)) pcrr8r 8.96632 fshow + -174.84413 -355.41222 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -355.41222 moveto + (Mesh&) pcrr8r 8.96632 fshow + -110.28633 -355.41222 moveto + (mesh\(\)) pcrr8r 8.96632 fshow + -174.84413 -366.37112 moveto + (Layout) pcrr8r 8.96632 fshow + -137.18542 -366.37112 moveto + (layout\(\)) pcrr8r 8.96632 fshow + -174.84413 -377.33002 moveto + (Field&) pcrr8r 8.96632 fshow + -137.18542 -377.33002 moveto + (operator=\(const) pcrr8r 8.96632 fshow + -51.10834 -377.33002 moveto + (Field&\)) pcrr8r 8.96632 fshow + -174.84413 -388.28893 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -388.28893 moveto + (Field&) pcrr8r 8.96632 fshow + -104.90643 -388.28893 moveto + (operator=\(const) pcrr8r 8.96632 fshow + -18.82933 -388.28893 moveto + (Field&\)) pcrr8r 8.96632 fshow + -174.84413 -399.24782 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -399.24782 moveto + (Field&) pcrr8r 8.96632 fshow + -104.90643 -399.24782 moveto + (operator=\(const) pcrr8r 8.96632 fshow + -18.82933 -399.24782 moveto + (X&\)) pcrr8r 8.96632 fshow + -174.84413 -410.20671 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -410.20671 moveto + (Field&) pcrr8r 8.96632 fshow + -104.90643 -410.20671 moveto + (operator+=\(const) pcrr8r 8.96632 fshow + -13.44954 -410.20671 moveto + (X&\)) pcrr8r 8.96632 fshow + -174.84413 -421.16562 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -421.16562 moveto + (Field&) pcrr8r 8.96632 fshow + -104.90643 -421.16562 moveto + (operator-=\(const) pcrr8r 8.96632 fshow + -13.44954 -421.16562 moveto + (X&\)) pcrr8r 8.96632 fshow + -174.84413 -432.12462 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -432.12462 moveto + (Field&) pcrr8r 8.96632 fshow + -104.90643 -432.12462 moveto + (operator*=\(const) pcrr8r 8.96632 fshow + -13.44954 -432.12462 moveto + (X&\)) pcrr8r 8.96632 fshow + -174.84413 -443.08351 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -443.08351 moveto + (Field&) pcrr8r 8.96632 fshow + -104.90643 -443.08351 moveto + (operator/=\(const) pcrr8r 8.96632 fshow + -13.44954 -443.08351 moveto + (X&\)) pcrr8r 8.96632 fshow + -174.84413 -454.04242 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -454.04242 moveto + (Field&) pcrr8r 8.96632 fshow + -104.90643 -454.04242 moveto + (operator%=\(const) pcrr8r 8.96632 fshow + -13.44954 -454.04242 moveto + (X&\)) pcrr8r 8.96632 fshow + -174.84413 -465.00131 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -465.00131 moveto + (Field&) pcrr8r 8.96632 fshow + -104.90643 -465.00131 moveto + (operator|=\(const) pcrr8r 8.96632 fshow + -13.44954 -465.00131 moveto + (X&\)) pcrr8r 8.96632 fshow + -174.84413 -475.96022 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -475.96022 moveto + (Field&) pcrr8r 8.96632 fshow + -104.90643 -475.96022 moveto + (operator&=\(const) pcrr8r 8.96632 fshow + -13.44954 -475.96022 moveto + (X&\)) pcrr8r 8.96632 fshow + -174.84413 -486.91911 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -486.91911 moveto + (Field&) pcrr8r 8.96632 fshow + -104.90643 -486.91911 moveto + (operator) pcrr8r 8.96632 fshow + -61.86794 -487.32701 moveto + (\210) pcrr8r 8.96632 fshow + -61.86794 -486.91911 moveto + (=\(const) pcrr8r 8.96632 fshow + -18.82933 -486.91911 moveto + (X&\)) pcrr8r 8.96632 fshow + -174.84413 -497.87802 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -497.87802 moveto + (Field&) pcrr8r 8.96632 fshow + -104.90643 -497.87802 moveto + (operator<<=\(const) pcrr8r 8.96632 fshow + -8.06973 -497.87802 moveto + (X&\)) pcrr8r 8.96632 fshow + -174.84413 -508.83691 moveto + (const) pcrr8r 8.96632 fshow + -142.56523 -508.83691 moveto + (Field&) pcrr8r 8.96632 fshow + -104.90643 -508.83691 moveto + (operator>>=\(const) pcrr8r 8.96632 fshow + -8.06973 -508.83691 moveto + (X&\)) pcrr8r 8.96632 fshow + -174.84413 -519.79582 moveto + (void) pcrr8r 8.96632 fshow + -147.94504 -519.79582 moveto + (addRelation\(RelationListItem*\)) pcrr8r 8.96632 fshow + -174.84413 -530.75471 moveto + (void) pcrr8r 8.96632 fshow + -147.94504 -530.75471 moveto + (removeRelations\(\)) pcrr8r 8.96632 fshow + -174.84413 -541.71362 moveto + (void) pcrr8r 8.96632 fshow + -147.94504 -541.71362 moveto + (applyRelations\(\)) pcrr8r 8.96632 fshow + -174.84413 -552.67252 moveto + (void) pcrr8r 8.96632 fshow + -147.94504 -552.67252 moveto + (applyRelations\(bool\)) pcrr8r 8.96632 fshow + -174.84413 -563.63142 moveto + (void) pcrr8r 8.96632 fshow + -147.94504 -563.63142 moveto + (setDirty\(\)) pcrr8r 8.96632 fshow + -174.84413 -574.59032 moveto + (void) pcrr8r 8.96632 fshow + -147.94504 -574.59032 moveto + (clearDirty\(\)) pcrr8r 8.96632 fshow + newpath -183.82173 -580.87802 moveto + 183.82176 -580.87802 lineto + 183.82176 -26.9328 lineto + -183.82173 -26.9328 lineto + closepath stroke + 1 setgray + newpath 139.87535 5.9776 moveto + 227.76817 5.9776 lineto + 227.76817 44.8544 lineto + 139.87535 44.8544 lineto + closepath fill + 0 setgray + 148.85295 34.1832 moveto + (mesh) pcrr8r 8.96632 fshow + 175.75204 34.1832 moveto + (M) pcrr8r 8.96632 fshow + 148.85295 23.2242 moveto + (value) pcrr8r 8.96632 fshow + 181.13185 23.2242 moveto + (type) pcrr8r 8.96632 fshow + 208.03094 23.2242 moveto + (T) pcrr8r 8.96632 fshow + 148.85295 12.26529 moveto + (engine) pcrr8r 8.96632 fshow + 186.51166 12.26529 moveto + (type) pcrr8r 8.96632 fshow + 213.41075 12.26529 moveto + (E) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 139.87535 5.9776 moveto + 227.76817 5.9776 lineto + 227.76817 44.8544 lineto + 139.87535 44.8544 lineto + closepath stroke + 8.97762 -589.45712 moveto + (Field.h) pcrr8r 6.97382 fshow + 8.97762 -597.42723 moveto + (PrintField.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 415 5554 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 415 5554 a Black 3734 5547 a + Fp(174)p Black eop + %%Page: 175 175 + 175 174 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black -2 73 a Fk(C.2.1.)38 b Fh(Mesh)p Fk(es)396 + 274 y Fu(A)24 b(mesh)f(speci\002es)h(a)h Fq(Field)p Fu(')-5 + b(s)22 b(spatial)h(e)o(xtent.)g(A)g Fq(Mesh)g Fu(class)h(only)f(e)o + (xists)f(conceptually)-6 b(,)23 b(b)n(ut)396 403 y Fq(NoMesh)k + Fu(and)h Fq(UniformRectilinearMesh)23 b Fu(are)29 b(de\002ned)g(within) + e(the)h Ft(src/Field/)396 533 y(Mesh)e Fu(directory)-6 + b(.)396 812 y Fr(Figur)n(e)26 b(C-6.)e Fo(Mesh)p Fr(es)831 + 3090 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 831 3090 a @beginspecial -84 @llx -233 @lly 230 + @urx 26 @ury 3140 @rwi @setspecial + %%BeginDocument: figures/field-uml.3 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -84 -233 230 26 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman Courier-Oblique + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /pcrro8r /Courier-Oblique def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + 0 0 moveto + (Mesh) pcrro8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -83.09956 -6.5866 moveto + 107.00987 -6.5866 lineto + 107.00987 11.3686 lineto + -83.09956 11.3686 lineto + closepath stroke + newpath -83.09956 -24.5418 moveto + 107.00987 -24.5418 lineto + 107.00987 -6.5866 lineto + -83.09956 -6.5866 lineto + closepath stroke + -74.12193 -35.21301 moveto + (Mesh\(\)) pcrr8r 8.96632 fshow + -74.12193 -46.1719 moveto + (Mesh\(const) pcrr8r 8.96632 fshow + -14.94394 -46.1719 moveto + (Layout&\)) pcrr8r 8.96632 fshow + -74.12193 -57.13081 moveto + (Mesh\(const) pcrr8r 8.96632 fshow + -14.94394 -57.13081 moveto + (Mesh&\)) pcrr8r 8.96632 fshow + -74.12193 -68.0897 moveto + (Mesh\(const) pcrr8r 8.96632 fshow + -14.94394 -68.0897 moveto + (Mesh&,) pcrr8r 8.96632 fshow + 22.71487 -68.0897 moveto + (const) pcrr8r 8.96632 fshow + 54.99377 -68.0897 moveto + (Dom&\)) pcrr8r 8.96632 fshow + -74.12193 -79.04861 moveto + (Mesh&) pcrr8r 8.96632 fshow + -41.84303 -79.04861 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 44.23407 -79.04861 moveto + (Mesh&\)) pcrr8r 8.96632 fshow + -75.61484 -90.0075 moveto + (\230) ptmr8r 8.96632 fshow + -72.62723 -90.0075 moveto + (Mesh\(\)) pcrr8r 8.96632 fshow + -74.12193 -100.96642 moveto + (Interval&) pcrr8r 8.96632 fshow + -20.32373 -100.96642 moveto + (physicalVertexDomain\(\)) pcrr8r 8.96632 fshow + -74.12193 -111.92531 moveto + (Interval&) pcrr8r 8.96632 fshow + -20.32373 -111.92531 moveto + (physicalCellDomain\(\)) pcrr8r 8.96632 fshow + -74.12193 -122.88422 moveto + (Interval&) pcrr8r 8.96632 fshow + -20.32373 -122.88422 moveto + (totalVertexDomain\(\)) pcrr8r 8.96632 fshow + -74.12193 -133.84311 moveto + (Interval&) pcrr8r 8.96632 fshow + -20.32373 -133.84311 moveto + (totalCellDomain\(\)) pcrr8r 8.96632 fshow + newpath -83.09953 -140.13081 moveto + 107.00987 -140.13081 lineto + 107.00987 -24.5418 lineto + -83.09953 -24.5418 lineto + closepath stroke + 14.95517 -179.84587 moveto + (NoMesh) pcrr8r 9.96265 fshow + newpath 11.95517 -186.43246 moveto + 53.82068 -186.43246 lineto + 53.82068 -168.47726 lineto + 11.95517 -168.47726 lineto + closepath stroke + 14.95517 -226.14752 moveto + (UniformRectilinearMesh) pcrr8r 9.96265 fshow + newpath 11.95517 -232.73412 moveto + 149.46198 -232.73412 lineto + 149.46198 -214.77892 lineto + 11.95517 -214.77892 lineto + closepath stroke + 1 setgray + newpath 68.44327 8.3686 moveto + 145.57648 8.3686 lineto + 145.57648 25.3275 lineto + 68.44327 25.3275 lineto + closepath fill + 0 setgray + 77.42087 14.65631 moveto + (dimension) pcrr8r 8.96632 fshow + 131.21907 14.65631 moveto + (D) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 68.44327 8.3686 moveto + 145.57648 8.3686 lineto + 145.57648 25.3275 lineto + 68.44327 25.3275 lineto + closepath stroke + 1 setgray + newpath 50.82068 -171.47726 moveto + 127.95389 -171.47726 lineto + 127.95389 -154.51837 lineto + 50.82068 -154.51837 lineto + closepath fill + 0 setgray + 59.79828 -165.18956 moveto + (dimension) pcrr8r 8.96632 fshow + 113.59648 -165.18956 moveto + (D) pcrr8r 8.96632 fshow + newpath 50.82068 -171.47726 moveto + 127.95389 -171.47726 lineto + 127.95389 -154.51837 lineto + 50.82068 -154.51837 lineto + closepath stroke + 1 setgray + newpath 146.46198 -217.77892 moveto + 228.97498 -217.77892 lineto + 228.97498 -189.8611 lineto + 146.46198 -189.8611 lineto + closepath fill + 0 setgray + 155.43958 -200.53232 moveto + (dimension) pcrr8r 8.96632 fshow + 209.23778 -200.53232 moveto + (D) pcrr8r 8.96632 fshow + 155.43958 -211.49121 moveto + (value) pcrr8r 8.96632 fshow + 187.71848 -211.49121 moveto + (type) pcrr8r 8.96632 fshow + 214.61757 -211.49121 moveto + (T) pcrr8r 8.96632 fshow + newpath 146.46198 -217.77892 moveto + 228.97498 -217.77892 lineto + 228.97498 -189.8611 lineto + 146.46198 -189.8611 lineto + closepath stroke + [] 0 setdash + newpath -45.07823 -140.13081 moveto + -52.16486 -152.40523 lineto + -37.99161 -152.40523 lineto + closepath stroke + [3 3 ] 0 setdash + newpath 11.95517 -177.45486 moveto + -45.07823 -177.45486 lineto stroke + newpath 11.95517 -223.75652 moveto + -45.07823 -223.75652 lineto stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath -45.07823 -223.75652 moveto + -45.07823 -152.40523 lineto stroke + showpage + %%EOF + + %%EndDocument + @endspecial 831 3090 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 831 3090 a Black 3734 5547 a + Fp(175)p Black eop + %%Page: 176 176 + 176 175 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-7.)e Fo(NoMesh)869 + 1929 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 869 1929 a @beginspecial -133 @llx -187 @lly 172 + @urx 24 @ury 3050 @rwi @setspecial + %%BeginDocument: figures/field-uml.1 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -133 -187 172 24 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -17.93275 -2.391 moveto + (NoMesh) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -132.71346 -8.9776 moveto + 132.71346 -8.9776 lineto + 132.71346 8.9776 lineto + -132.71346 8.9776 lineto + closepath stroke + newpath -132.71346 -26.9328 moveto + 132.71346 -26.9328 lineto + 132.71346 -8.9776 lineto + -132.71346 -8.9776 lineto + closepath stroke + -123.73586 -37.60402 moveto + (NoMesh\(\)) pcrr8r 8.96632 fshow + -123.73586 -48.56291 moveto + (NoMesh\(const) pcrr8r 8.96632 fshow + -53.79816 -48.56291 moveto + (Layout&\)) pcrr8r 8.96632 fshow + -123.73586 -59.52182 moveto + (NoMesh\(const) pcrr8r 8.96632 fshow + -53.79816 -59.52182 moveto + (NoMesh&\)) pcrr8r 8.96632 fshow + -123.73586 -70.48071 moveto + (NoMesh\(const) pcrr8r 8.96632 fshow + -53.79816 -70.48071 moveto + (NoMesh&,) pcrr8r 8.96632 fshow + -5.37985 -70.48071 moveto + (const) pcrr8r 8.96632 fshow + 26.89905 -70.48071 moveto + (Interval&\)) pcrr8r 8.96632 fshow + -123.73586 -81.43962 moveto + (NoMesh\(const) pcrr8r 8.96632 fshow + -53.79816 -81.43962 moveto + (NoMesh&,) pcrr8r 8.96632 fshow + -5.37985 -81.43962 moveto + (const) pcrr8r 8.96632 fshow + 26.89905 -81.43962 moveto + (INode&\)) pcrr8r 8.96632 fshow + -123.73586 -92.39851 moveto + (NoMesh\(const) pcrr8r 8.96632 fshow + -53.79816 -92.39851 moveto + (NoMesh&,) pcrr8r 8.96632 fshow + -5.37985 -92.39851 moveto + (const) pcrr8r 8.96632 fshow + 26.89905 -92.39851 moveto + (FieldEnginePatch&\)) pcrr8r 8.96632 fshow + -123.73586 -103.35751 moveto + (NoMesh\(const) pcrr8r 8.96632 fshow + -53.79816 -103.35751 moveto + (Mesh&,) pcrr8r 8.96632 fshow + -16.13945 -103.35751 moveto + (const) pcrr8r 8.96632 fshow + 16.13945 -103.35751 moveto + (Dom&\)) pcrr8r 8.96632 fshow + -123.73586 -114.31642 moveto + (NoMesh&) pcrr8r 8.96632 fshow + -80.69725 -114.31642 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 5.37985 -114.31642 moveto + (NoMesh&\)) pcrr8r 8.96632 fshow + -125.22876 -125.27531 moveto + (\230) ptmr8r 8.96632 fshow + -122.24115 -125.27531 moveto + (NoMesh\(\)) pcrr8r 8.96632 fshow + -123.73586 -136.23422 moveto + (Interval&) pcrr8r 8.96632 fshow + -69.93765 -136.23422 moveto + (physicalVertexDomain\(\)) pcrr8r 8.96632 fshow + -123.73586 -147.19312 moveto + (Interval&) pcrr8r 8.96632 fshow + -69.93765 -147.19312 moveto + (physicalCellDomain\(\)) pcrr8r 8.96632 fshow + -123.73586 -158.15202 moveto + (Interval&) pcrr8r 8.96632 fshow + -69.93765 -158.15202 moveto + (totalVertexDomain\(\)) pcrr8r 8.96632 fshow + -123.73586 -169.11092 moveto + (Interval&) pcrr8r 8.96632 fshow + -69.93765 -169.11092 moveto + (totalCellDomain\(\)) pcrr8r 8.96632 fshow + newpath -132.71346 -175.39862 moveto + 132.71346 -175.39862 lineto + 132.71346 -26.9328 lineto + -132.71346 -26.9328 lineto + closepath stroke + 1 setgray + newpath 94.14685 5.9776 moveto + 171.28006 5.9776 lineto + 171.28006 22.9365 lineto + 94.14685 22.9365 lineto + closepath fill + 0 setgray + 103.12445 12.2653 moveto + (dimension) pcrr8r 8.96632 fshow + 156.92265 12.2653 moveto + (D) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 94.14685 5.9776 moveto + 171.28006 5.9776 lineto + 171.28006 22.9365 lineto + 94.14685 22.9365 lineto + closepath stroke + 8.9776 -183.97762 moveto + (NoMesh.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 869 1929 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 869 1929 a 396 2158 a Fu(In)19 + b(the)g(follo)n(wing)e(\002gure,)i(we)g(abbre)n(viate)f + Fq(UniformRectilinearMesh)c Fu(with)k(\223URM\224.)p + Black 3732 5547 a Fp(176)p Black eop + %%Page: 177 177 + 177 176 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-8.)e Fo + (UniformRectilinearMesh)440 3021 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 440 3021 a @beginspecial + -190 @llx -307 @lly 218 @urx 35 @ury 4080 @rwi @setspecial + %%BeginDocument: figures/field-uml.2 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -190 -307 218 35 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -65.7534 -2.391 moveto + (UniformRectilinearMesh) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -189.20155 -8.9776 moveto + 189.20155 -8.9776 lineto + 189.20155 8.9776 lineto + -189.20155 8.9776 lineto + closepath stroke + newpath -189.20155 -26.9328 moveto + 189.20155 -26.9328 lineto + 189.20155 -8.9776 lineto + -189.20155 -8.9776 lineto + closepath stroke + -180.22395 -37.604 moveto + (UniformRectilinearMesh\(\)) pcrr8r 8.96632 fshow + -180.22395 -48.5629 moveto + (UniformRectilinearMesh\(const) pcrr8r 8.96632 fshow + -24.20915 -48.5629 moveto + (Layout&\)) pcrr8r 8.96632 fshow + -180.22395 -59.5218 moveto + (UniformRectilinearMesh\(const) pcrr8r 8.96632 fshow + -24.20915 -59.5218 moveto + (Layout&,) pcrr8r 8.96632 fshow + 24.20915 -59.5218 moveto + (const) pcrr8r 8.96632 fshow + 56.48814 -59.5218 moveto + (Vector&,) pcrr8r 8.96632 fshow + 104.90645 -59.5218 moveto + (const) pcrr8r 8.96632 fshow + 137.18544 -59.5218 moveto + (Vector&\)) pcrr8r 8.96632 fshow + -180.22395 -70.4807 moveto + (UniformRectilinearMesh\(const) pcrr8r 8.96632 fshow + -24.20915 -70.4807 moveto + (UniformRectilinearMesh&\)) pcrr8r 8.96632 fshow + -180.22395 -81.4396 moveto + (UniformRectilinearMesh\(const) pcrr8r 8.96632 fshow + -24.20915 -81.4396 moveto + (URM&,) pcrr8r 8.96632 fshow + 8.06975 -81.4396 moveto + (const) pcrr8r 8.96632 fshow + 40.34865 -81.4396 moveto + (Interval&\)) pcrr8r 8.96632 fshow + -180.22395 -92.3985 moveto + (UniformRectilinearMesh\(const) pcrr8r 8.96632 fshow + -24.20915 -92.3985 moveto + (UniformRectilinearMesh&,) pcrr8r 8.96632 fshow + 110.28635 -92.3985 moveto + (const) pcrr8r 8.96632 fshow + 142.56525 -92.3985 moveto + (INode&\)) pcrr8r 8.96632 fshow + -180.22395 -103.35739 moveto + (UniformRectilinearMesh\(const) pcrr8r 8.96632 fshow + -24.20915 -103.35739 moveto + (URM&,) pcrr8r 8.96632 fshow + 8.06975 -103.35739 moveto + (const) pcrr8r 8.96632 fshow + 40.34865 -103.35739 moveto + (FieldEnginePatch&\)) pcrr8r 8.96632 fshow + -180.22395 -114.3163 moveto + (UniformRectilinearMesh\(const) pcrr8r 8.96632 fshow + -24.20915 -114.3163 moveto + (Mesh&,) pcrr8r 8.96632 fshow + 13.44954 -114.3163 moveto + (const) pcrr8r 8.96632 fshow + 45.72844 -114.3163 moveto + (Dom&\)) pcrr8r 8.96632 fshow + -180.22395 -125.27519 moveto + (UniformRectilinearMesh&) pcrr8r 8.96632 fshow + -51.10825 -125.27519 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 34.96884 -125.27519 moveto + (UniformRectilinearMesh&\)) pcrr8r 8.96632 fshow + -181.71686 -136.2341 moveto + (\230) ptmr8r 8.96632 fshow + -178.72925 -136.2341 moveto + (UniformRectilinearMesh\(\)) pcrr8r 8.96632 fshow + -180.22395 -147.193 moveto + (const) pcrr8r 8.96632 fshow + -147.94505 -147.193 moveto + (Interval&) pcrr8r 8.96632 fshow + -94.14685 -147.193 moveto + (physicalVertexDomain\(\)) pcrr8r 8.96632 fshow + -180.22395 -158.1519 moveto + (const) pcrr8r 8.96632 fshow + -147.94505 -158.1519 moveto + (Interval&) pcrr8r 8.96632 fshow + -94.14685 -158.1519 moveto + (physicalCellDomain\(\)) pcrr8r 8.96632 fshow + -180.22395 -169.1108 moveto + (const) pcrr8r 8.96632 fshow + -147.94505 -169.1108 moveto + (Interval&) pcrr8r 8.96632 fshow + -94.14685 -169.1108 moveto + (totalVertexDomain\(\)) pcrr8r 8.96632 fshow + -180.22395 -180.0697 moveto + (const) pcrr8r 8.96632 fshow + -147.94505 -180.0697 moveto + (Interval&) pcrr8r 8.96632 fshow + -94.14685 -180.0697 moveto + (totalCellDomain\(\)) pcrr8r 8.96632 fshow + -180.22395 -191.0286 moveto + (const) pcrr8r 8.96632 fshow + -147.94505 -191.0286 moveto + (Vector&) pcrr8r 8.96632 fshow + -104.90645 -191.0286 moveto + (spacings\(\)) pcrr8r 8.96632 fshow + -180.22395 -201.9875 moveto + (const) pcrr8r 8.96632 fshow + -147.94505 -201.9875 moveto + (Vector&) pcrr8r 8.96632 fshow + -104.90645 -201.9875 moveto + (origin\(\)) pcrr8r 8.96632 fshow + -180.22395 -212.9464 moveto + (const) pcrr8r 8.96632 fshow + -147.94505 -212.9464 moveto + (Vector&) pcrr8r 8.96632 fshow + -104.90645 -212.9464 moveto + (cellContaining\(const) pcrr8r 8.96632 fshow + 8.06975 -212.9464 moveto + (Vector&\)) pcrr8r 8.96632 fshow + -180.22395 -223.9053 moveto + (const) pcrr8r 8.96632 fshow + -147.94505 -223.9053 moveto + (Vector&) pcrr8r 8.96632 fshow + -104.90645 -223.9053 moveto + (vertexPosition\(const) pcrr8r 8.96632 fshow + 8.06975 -223.9053 moveto + (Loc&\)) pcrr8r 8.96632 fshow + -180.22395 -234.8642 moveto + (void) pcrr8r 8.96632 fshow + -153.32486 -234.8642 moveto + (initializePositions\(Engine&,) pcrr8r 8.96632 fshow + 2.68994 -234.8642 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -234.8642 moveto + (Centering&\)) pcrr8r 8.96632 fshow + -180.22395 -245.8231 moveto + (void) pcrr8r 8.96632 fshow + -153.32486 -245.8231 moveto + (initializeNormals\(Engine&,) pcrr8r 8.96632 fshow + -8.06975 -245.8231 moveto + (const) pcrr8r 8.96632 fshow + 24.20915 -245.8231 moveto + (Centering&\)) pcrr8r 8.96632 fshow + -180.22395 -256.782 moveto + (void) pcrr8r 8.96632 fshow + -153.32486 -256.782 moveto + (initializeNormals\(Engine&,) pcrr8r 8.96632 fshow + -8.06975 -256.782 moveto + (const) pcrr8r 8.96632 fshow + 24.20915 -256.782 moveto + (Centering&,) pcrr8r 8.96632 fshow + 88.76704 -256.782 moveto + (bool\)) pcrr8r 8.96632 fshow + -180.22395 -267.74089 moveto + (void) pcrr8r 8.96632 fshow + -153.32486 -267.74089 moveto + (initializeCellVolumes\(Engine&,) pcrr8r 8.96632 fshow + 13.44954 -267.74089 moveto + (const) pcrr8r 8.96632 fshow + 45.72844 -267.74089 moveto + (Centering&\)) pcrr8r 8.96632 fshow + -180.22395 -278.6998 moveto + (void) pcrr8r 8.96632 fshow + -153.32486 -278.6998 moveto + (initializeFaceAreas\(Engine&,) pcrr8r 8.96632 fshow + 2.68994 -278.6998 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -278.6998 moveto + (Centering&\)) pcrr8r 8.96632 fshow + -180.22395 -289.6588 moveto + (void) pcrr8r 8.96632 fshow + -153.32486 -289.6588 moveto + (initializeEdgeLengths\(Engine&,) pcrr8r 8.96632 fshow + 13.44954 -289.6588 moveto + (const) pcrr8r 8.96632 fshow + 45.72844 -289.6588 moveto + (Centering&\)) pcrr8r 8.96632 fshow + newpath -189.20155 -295.9465 moveto + 189.20155 -295.9465 lineto + 189.20155 -26.9328 lineto + -189.20155 -26.9328 lineto + closepath stroke + 1 setgray + newpath 161.39459 5.9776 moveto + 217.00851 5.9776 lineto + 217.00851 33.89542 lineto + 161.39459 33.89542 lineto + closepath fill + 0 setgray + 170.3722 23.2242 moveto + (dim) pcrr8r 8.96632 fshow + 191.8915 23.2242 moveto + (D) pcrr8r 8.96632 fshow + 170.3722 12.2653 moveto + (value) pcrr8r 8.96632 fshow + 202.6511 12.2653 moveto + (T) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 161.39459 5.9776 moveto + 217.00851 5.9776 lineto + 217.00851 33.89542 lineto + 161.39459 33.89542 lineto + closepath stroke + 8.9776 -304.5255 moveto + (UniformRectilinearMesh.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 440 3021 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 440 3021 a -2 3514 a Fk(C.2.2.)38 + b Fh(Centering)p Fk(s)396 3715 y Fu(A)g Fq(Centering)e + Fu(speci\002es)i(the)g(location)f(of)h(v)n(alues)f(within)f(a)j(cell.)e + Fq(CanonicalCen-)396 3845 y(tering)26 b Fu(is)h(a)g(helper)h(class)f + (returning)f(common)g(centerings.)h(Both)g(are)h(implemented)e(within) + 396 3974 y(the)f Ft(src/Field)i Fu(subdirectory)-6 b(.)p + Black 3730 5547 a Fp(177)p Black eop + %%Page: 178 178 + 178 177 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-9.)e(Centering)i(Classes) + 511 3296 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 511 3296 a @beginspecial -144 @llx -351 @lly + 247 @urx 24 @ury 3910 @rwi @setspecial + %%BeginDocument: figures/field-uml.11 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -144 -351 247 24 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -26.89915 -2.391 moveto + (Centering) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -143.47311 -8.9776 moveto + 143.47311 -8.9776 lineto + 143.47311 8.9776 lineto + -143.47311 8.9776 lineto + closepath stroke + newpath -143.47311 -26.9328 moveto + 143.47311 -26.9328 lineto + 143.47311 -8.9776 lineto + -143.47311 -8.9776 lineto + closepath stroke + -134.49548 -37.604 moveto + (Centering\(\)) pcrr8r 8.96632 fshow + -134.49548 -48.56291 moveto + (Centering\(CenteringType\)) pcrr8r 8.96632 fshow + -134.49548 -59.5218 moveto + (Centering\(CenteringType,) pcrr8r 8.96632 fshow + 0.00002 -59.5218 moveto + (ContinuityType\)) pcrr8r 8.96632 fshow + -134.49548 -70.48071 moveto + (Centering\(CenteringType,) pcrr8r 8.96632 fshow + 0.00002 -70.48071 moveto + (ContinuityType,) pcrr8r 8.96632 fshow + -134.49548 -81.4396 moveto + (const) pcrr8r 8.96632 fshow + -102.21658 -81.4396 moveto + (Orientations&,) pcrr8r 8.96632 fshow + -21.51929 -81.4396 moveto + (const) pcrr8r 8.96632 fshow + 10.75961 -81.4396 moveto + (Positions&\)) pcrr8r 8.96632 fshow + -135.98839 -92.39851 moveto + (\230) ptmr8r 8.96632 fshow + -133.00078 -92.39851 moveto + (Centering\(\)) pcrr8r 8.96632 fshow + -134.49548 -103.3574 moveto + (const) pcrr8r 8.96632 fshow + -102.21658 -103.3574 moveto + (CenteringType¢eringType\(\)) pcrr8r 8.96632 fshow + -134.49548 -114.3164 moveto + (bool) pcrr8r 8.96632 fshow + -107.59639 -114.3164 moveto + (discontinuous\(\)) pcrr8r 8.96632 fshow + -134.49548 -125.27531 moveto + (bool) pcrr8r 8.96632 fshow + -107.59639 -125.27531 moveto + (continuous\(\)) pcrr8r 8.96632 fshow + -134.49548 -136.2342 moveto + (const) pcrr8r 8.96632 fshow + -102.21658 -136.2342 moveto + (Orientations&) pcrr8r 8.96632 fshow + -26.89908 -136.2342 moveto + (orientations\(\)) pcrr8r 8.96632 fshow + -134.49548 -147.19312 moveto + (const) pcrr8r 8.96632 fshow + -102.21658 -147.19312 moveto + (Positions&) pcrr8r 8.96632 fshow + -43.03859 -147.19312 moveto + (positions\(\)) pcrr8r 8.96632 fshow + -134.49548 -158.15201 moveto + (const) pcrr8r 8.96632 fshow + -102.21658 -158.15201 moveto + (Orientation&) pcrr8r 8.96632 fshow + -32.27888 -158.15201 moveto + (orientation\(int\)) pcrr8r 8.96632 fshow + -134.49548 -169.11092 moveto + (const) pcrr8r 8.96632 fshow + -102.21658 -169.11092 moveto + (Position&) pcrr8r 8.96632 fshow + -48.41838 -169.11092 moveto + (position\(int\)) pcrr8r 8.96632 fshow + -134.49548 -180.06981 moveto + (int) pcrr8r 8.96632 fshow + -112.97618 -180.06981 moveto + (size\(\)) pcrr8r 8.96632 fshow + -134.49548 -191.02872 moveto + (void) pcrr8r 8.96632 fshow + -107.59639 -191.02872 moveto + (addValue\(const) pcrr8r 8.96632 fshow + -26.89908 -191.02872 moveto + (Orientation&,) pcrr8r 8.96632 fshow + 48.41841 -191.02872 moveto + (const) pcrr8r 8.96632 fshow + 80.69731 -191.02872 moveto + (Position&\)) pcrr8r 8.96632 fshow + newpath -143.47308 -197.3164 moveto + 143.47311 -197.3164 lineto + 143.47311 -26.9328 lineto + -143.47308 -26.9328 lineto + closepath stroke + -21.51933 -265.37791 moveto + (CanonicalCentering) pcrr8r 9.96265 fshow + newpath -143.47308 -271.96451 moveto + 208.03091 -271.96451 lineto + 208.03091 -254.00931 lineto + -143.47308 -254.00931 lineto + closepath stroke + newpath -143.47308 -289.91971 moveto + 208.03091 -289.91971 lineto + 208.03091 -271.96451 lineto + -143.47308 -271.96451 lineto + closepath stroke + -134.49548 -300.59091 moveto + (CanonicalCentering\(\)) pcrr8r 8.96632 fshow + -135.98839 -311.54982 moveto + (\230) ptmr8r 8.96632 fshow + -133.00078 -311.54982 moveto + (CanonicalCentering\(\)) pcrr8r 8.96632 fshow + -134.49548 -322.50871 moveto + (Centering) pcrr8r 8.96632 fshow + -80.69728 -322.50871 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 10.75961 -322.50871 moveto + (CenteringType,) pcrr8r 8.96632 fshow + 91.45691 -322.50871 moveto + (ContinuityType\)) pcrr8r 8.96632 fshow + -134.49548 -333.46762 moveto + (Centering) pcrr8r 8.96632 fshow + -80.69728 -333.46762 moveto + (operator\(\)\(const) pcrr8r 8.96632 fshow + 10.75961 -333.46762 moveto + (CenteringType,) pcrr8r 8.96632 fshow + 91.45691 -333.46762 moveto + (ContinuityType,) pcrr8r 8.96632 fshow + 177.53401 -333.46762 moveto + (int\)) pcrr8r 8.96632 fshow + newpath -143.47308 -339.75531 moveto + 208.03091 -339.75531 lineto + 208.03091 -289.91971 lineto + -143.47308 -289.91971 lineto + closepath stroke + 1 setgray + newpath 104.90651 5.9776 moveto + 182.03972 5.9776 lineto + 182.03972 22.9365 lineto + 104.90651 22.9365 lineto + closepath fill + 0 setgray + 113.88411 12.2653 moveto + (dimension) pcrr8r 8.96632 fshow + 167.68231 12.2653 moveto + (D) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 104.90651 5.9776 moveto + 182.03972 5.9776 lineto + 182.03972 22.9365 lineto + 104.90651 22.9365 lineto + closepath stroke + 1 setgray + newpath 169.46431 -257.00931 moveto + 246.59752 -257.00931 lineto + 246.59752 -240.05042 lineto + 169.46431 -240.05042 lineto + closepath fill + 0 setgray + 178.44191 -250.7216 moveto + (dimension) pcrr8r 8.96632 fshow + 232.24011 -250.7216 moveto + (D) pcrr8r 8.96632 fshow + newpath 169.46431 -257.00931 moveto + 246.59752 -257.00931 lineto + 246.59752 -240.05042 lineto + 169.46431 -240.05042 lineto + closepath stroke + 8.97762 -205.8954 moveto + (FieldCentering.h) pcrr8r 6.97382 fshow + 41.25652 -348.3343 moveto + (FieldCentering.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 511 3296 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 511 3296 a -2 3948 a Fx(C.3.)47 + b Fg(Vector)p Fx(s,)e Fg(TinyMatrix)p Fx(s,)f Fg(Tensor)p + Fx(s)396 4163 y Fu(In)28 b(this)f(section,)h(we)g(present)g(UML)f + (class)h(diagrams)g(for)g(the)g(mathematical)f(objects)g(of)h + Fq(Vec-)396 4293 y(tor)p Fu(s,)h Fq(TinyMatrix)p Fu(s,)f(and)i + Fq(Tensor)p Fu(s.)e(All)i(these)g(classes)g(ha)n(v)o(e)g(similar)f + (interf)o(aces)h(and)396 4422 y(relationships.)21 b(F)o(or)h(e)o + (xample,)f Fq(Vector)g Fu(requires)h(a)h Fq(VectorEngine)p + Fu(,)c(which)j(has)g(no)g(pub-)396 4552 y(lic)36 b(interf)o(ace.)h(The) + f(only)f(template)h(specialization)f(is)h Fq(VectorEngine)p + Fu(.)396 4681 y Fq(TinyMatrix)p Fu(s)23 b(are)j(similar)-5 + b(.)23 b(T)-7 b(ensors)25 b(ha)n(v)o(e)g(four)g(dif)n(ferent)g + (engines,)f(supporting)g(the)h(tensor)396 4811 y(specializations)f(of)h + Fq(Antisymmetric)p Fu(,)c Fq(Symmetric)p Fu(,)i(and)i + Fq(Diagonal)p Fu(.)396 4990 y(All)f(of)h(the)g(source)g(\002les)g(are)g + (located)g(in)g(the)f Ft(src/Tiny)j Fu(subdirectory)-6 + b(.)p Black 3734 5547 a Fp(178)p Black eop + %%Page: 179 179 + 179 178 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-10.)e Fo(Vector)p + Fr(s)698 4954 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 698 4954 a @beginspecial -152 @llx -528 + @lly 194 @urx 46 @ury 3460 @rwi @setspecial + %%BeginDocument: figures/math-objs-uml.1 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -152 -528 194 46 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -17.93275 -2.391 moveto + (Vector) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -135.40337 -8.9776 moveto + 135.40337 -8.9776 lineto + 135.40337 8.9776 lineto + -135.40337 8.9776 lineto + closepath stroke + newpath -135.40337 -26.9328 moveto + 135.40337 -26.9328 lineto + 135.40337 -8.9776 lineto + -135.40337 -8.9776 lineto + closepath stroke + -126.42574 -37.60402 moveto + (Vector\(\)) pcrr8r 8.96632 fshow + -126.42574 -48.56291 moveto + (Vector\(const) pcrr8r 8.96632 fshow + -56.48804 -48.56291 moveto + (Vector&\)) pcrr8r 8.96632 fshow + -126.42574 -59.52182 moveto + (Vector\(const) pcrr8r 8.96632 fshow + -56.48804 -59.52182 moveto + (X&\)) pcrr8r 8.96632 fshow + -126.42574 -70.48071 moveto + (Vector\(const) pcrr8r 8.96632 fshow + -56.48804 -70.48071 moveto + (X1&,const) pcrr8r 8.96632 fshow + -2.68994 -70.48071 moveto + (X2&\)) pcrr8r 8.96632 fshow + -126.42574 -81.43962 moveto + (Vector\(const) pcrr8r 8.96632 fshow + -56.48804 -81.43962 moveto + (X1&,const) pcrr8r 8.96632 fshow + -2.68994 -81.43962 moveto + (X2&,const) pcrr8r 8.96632 fshow + 51.10826 -81.43962 moveto + (X3&\)) pcrr8r 8.96632 fshow + -126.42574 -92.39851 moveto + (Vector\(const) pcrr8r 8.96632 fshow + -56.48804 -92.39851 moveto + (X1&,const) pcrr8r 8.96632 fshow + -2.68994 -92.39851 moveto + (X2&,const) pcrr8r 8.96632 fshow + 51.10826 -92.39851 moveto + (X3&,const) pcrr8r 8.96632 fshow + 104.90646 -92.39851 moveto + (X4&\)) pcrr8r 8.96632 fshow + -127.91864 -103.35742 moveto + (\230) ptmr8r 8.96632 fshow + -124.93103 -103.35742 moveto + (Vector\(\)) pcrr8r 8.96632 fshow + -126.42574 -114.31631 moveto + (Vector&) pcrr8r 8.96632 fshow + -83.38713 -114.31631 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 2.68997 -114.31631 moveto + (Vector&\)) pcrr8r 8.96632 fshow + -126.42574 -125.27522 moveto + (Vector&) pcrr8r 8.96632 fshow + -83.38713 -125.27522 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 2.68997 -125.27522 moveto + (X&\)) pcrr8r 8.96632 fshow + -126.42574 -136.23412 moveto + (const) pcrr8r 8.96632 fshow + -94.14684 -136.23412 moveto + (T&) pcrr8r 8.96632 fshow + -78.00734 -136.23412 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + -126.42574 -147.19302 moveto + (T&) pcrr8r 8.96632 fshow + -110.28624 -147.19302 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + -126.42574 -158.15192 moveto + (const) pcrr8r 8.96632 fshow + -94.14684 -158.15192 moveto + (Engine&) pcrr8r 8.96632 fshow + -51.10823 -158.15192 moveto + (engine\(\)) pcrr8r 8.96632 fshow + -126.42574 -169.11082 moveto + (Engine&) pcrr8r 8.96632 fshow + -83.38713 -169.11082 moveto + (engine\(\)) pcrr8r 8.96632 fshow + -126.42574 -180.06972 moveto + (void) pcrr8r 8.96632 fshow + -99.52664 -180.06972 moveto + (print\(Out&\)) pcrr8r 8.96632 fshow + newpath -135.40334 -186.35742 moveto + 135.40337 -186.35742 lineto + 135.40337 -26.9328 lineto + -135.40334 -26.9328 lineto + closepath stroke + -35.8655 -282.76538 moveto + (VectorEngine) pcrr8r 9.96265 fshow + newpath -38.8655 -289.35197 moveto + 38.86552 -289.35197 lineto + 38.86552 -271.39677 lineto + -38.8655 -271.39677 lineto + closepath stroke + newpath -38.8655 -307.30717 moveto + 38.86552 -307.30717 lineto + 38.86552 -289.35197 lineto + -38.8655 -289.35197 lineto + closepath stroke + newpath -38.8655 -325.26237 moveto + 38.86552 -325.26237 lineto + 38.86552 -307.30717 lineto + -38.8655 -307.30717 lineto + closepath stroke + -65.75339 -364.97743 moveto + (VectorEngine) pcrr8r 9.96265 fshow + newpath -151.54279 -371.56403 moveto + 151.54282 -371.56403 lineto + 151.54282 -353.60883 lineto + -151.54279 -353.60883 lineto + closepath stroke + newpath -151.54279 -389.51923 moveto + 151.54282 -389.51923 lineto + 151.54282 -371.56403 lineto + -151.54279 -371.56403 lineto + closepath stroke + -142.56519 -400.19043 moveto + (VectorEngine\(\)) pcrr8r 8.96632 fshow + -142.56519 -411.14934 moveto + (VectorEngine\(const) pcrr8r 8.96632 fshow + -40.34859 -411.14934 moveto + (VectorEngine&\)) pcrr8r 8.96632 fshow + -142.56519 -422.10823 moveto + (VectorEngine\(const) pcrr8r 8.96632 fshow + -40.34859 -422.10823 moveto + (X&\)) pcrr8r 8.96632 fshow + -142.56519 -433.06714 moveto + (VectorEngine\(const) pcrr8r 8.96632 fshow + -40.34859 -433.06714 moveto + (X1&,const) pcrr8r 8.96632 fshow + 13.44962 -433.06714 moveto + (X2&\)) pcrr8r 8.96632 fshow + -142.56519 -444.02603 moveto + (VectorEngine\(const) pcrr8r 8.96632 fshow + -40.34859 -444.02603 moveto + (X1&,const) pcrr8r 8.96632 fshow + 13.44962 -444.02603 moveto + (X2&,const) pcrr8r 8.96632 fshow + 67.24782 -444.02603 moveto + (X3&\)) pcrr8r 8.96632 fshow + -142.56519 -454.98503 moveto + (VectorEngine\(const) pcrr8r 8.96632 fshow + -40.34859 -454.98503 moveto + (X1&,const) pcrr8r 8.96632 fshow + 13.44962 -454.98503 moveto + (X2&,const) pcrr8r 8.96632 fshow + 67.24782 -454.98503 moveto + (X3&,const) pcrr8r 8.96632 fshow + 121.04602 -454.98503 moveto + (X4&\)) pcrr8r 8.96632 fshow + -144.05809 -465.94394 moveto + (\230) ptmr8r 8.96632 fshow + -141.07048 -465.94394 moveto + (VectorEngine\(\)) pcrr8r 8.96632 fshow + -142.56519 -476.90283 moveto + (VectorEngine&) pcrr8r 8.96632 fshow + -67.24768 -476.90283 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 18.8294 -476.90283 moveto + (VectorEngine&\)) pcrr8r 8.96632 fshow + -142.56519 -487.86174 moveto + (VectorEngine&) pcrr8r 8.96632 fshow + -67.24768 -487.86174 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 18.8294 -487.86174 moveto + (X&\)) pcrr8r 8.96632 fshow + -142.56519 -498.82063 moveto + (const) pcrr8r 8.96632 fshow + -110.28629 -498.82063 moveto + (T&) pcrr8r 8.96632 fshow + -94.14679 -498.82063 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + -142.56519 -509.77954 moveto + (T&) pcrr8r 8.96632 fshow + -126.42569 -509.77954 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + newpath -151.54279 -516.06723 moveto + 151.54282 -516.06723 lineto + 151.54282 -389.51923 lineto + -151.54279 -389.51923 lineto + closepath stroke + 1 setgray + newpath 91.45695 5.9776 moveto + 179.34978 5.9776 lineto + 179.34978 44.8544 lineto + 91.45695 44.8544 lineto + closepath fill + 0 setgray + 100.43456 34.1832 moveto + (dimension) pcrr8r 8.96632 fshow + 154.23276 34.1832 moveto + (D) pcrr8r 8.96632 fshow + 100.43456 23.2242 moveto + (value) pcrr8r 8.96632 fshow + 132.71346 23.2242 moveto + (type) pcrr8r 8.96632 fshow + 159.61255 23.2242 moveto + (T) pcrr8r 8.96632 fshow + 100.43456 12.26529 moveto + (engine) pcrr8r 8.96632 fshow + 138.09326 12.26529 moveto + (type) pcrr8r 8.96632 fshow + 164.99236 12.26529 moveto + (E) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 91.45695 5.9776 moveto + 179.34978 5.9776 lineto + 179.34978 44.8544 lineto + 91.45695 44.8544 lineto + closepath stroke + 1 setgray + newpath 35.86552 -274.39677 moveto + 123.75835 -274.39677 lineto + 123.75835 -235.51997 lineto + 35.86552 -235.51997 lineto + closepath fill + 0 setgray + 44.84312 -246.19118 moveto + (dimension) pcrr8r 8.96632 fshow + 98.64133 -246.19118 moveto + (D) pcrr8r 8.96632 fshow + 44.84312 -257.15018 moveto + (value) pcrr8r 8.96632 fshow + 77.12202 -257.15018 moveto + (type) pcrr8r 8.96632 fshow + 104.02112 -257.15018 moveto + (T) pcrr8r 8.96632 fshow + 44.84312 -268.10909 moveto + (engine) pcrr8r 8.96632 fshow + 82.50183 -268.10909 moveto + (type) pcrr8r 8.96632 fshow + 109.40092 -268.10909 moveto + (E) pcrr8r 8.96632 fshow + newpath 35.86552 -274.39677 moveto + 123.75835 -274.39677 lineto + 123.75835 -235.51997 lineto + 35.86552 -235.51997 lineto + closepath stroke + 1 setgray + newpath 110.28632 -356.60883 moveto + 192.79932 -356.60883 lineto + 192.79932 -328.69101 lineto + 110.28632 -328.69101 lineto + closepath fill + 0 setgray + 119.26392 -339.36223 moveto + (dimension) pcrr8r 8.96632 fshow + 173.06212 -339.36223 moveto + (D) pcrr8r 8.96632 fshow + 119.26392 -350.32112 moveto + (value) pcrr8r 8.96632 fshow + 151.54282 -350.32112 moveto + (type) pcrr8r 8.96632 fshow + 178.44191 -350.32112 moveto + (T) pcrr8r 8.96632 fshow + newpath 110.28632 -356.60883 moveto + 192.79932 -356.60883 lineto + 192.79932 -328.69101 lineto + 110.28632 -328.69101 lineto + closepath stroke + 8.97762 -194.93642 moveto + (Vector.h) pcrr8r 6.97382 fshow + 8.97762 -333.84137 moveto + (VectorEngine.h) pcrr8r 6.97382 fshow + 8.97762 -524.64622 moveto + (Vector.h) pcrr8r 6.97382 fshow + [] 0 setdash + newpath 0.00002 -325.26237 moveto + -7.08661 -337.53679 lineto + 7.08664 -337.53679 lineto + closepath stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath 0.00002 -353.60883 moveto + 0.00002 -337.53679 lineto stroke + showpage + %%EOF + + %%EndDocument + @endspecial 698 4954 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 698 4954 a Black 3734 5547 a + Fp(179)p Black eop + %%Page: 180 180 + 180 179 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-11.)e Fo(TinyMatrix)p + Fr(s)981 2937 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 981 2937 a @beginspecial -117 @llx -275 + @lly 161 @urx 57 @ury 2780 @rwi @setspecial + %%BeginDocument: figures/math-objs-uml.10 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -117 -275 161 57 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -29.88791 -2.391 moveto + (TinyMatrix) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -116.574 -8.9776 moveto + 116.574 -8.9776 lineto + 116.574 8.9776 lineto + -116.574 8.9776 lineto + closepath stroke + newpath -116.574 -26.9328 moveto + 116.574 -26.9328 lineto + 116.574 -8.9776 lineto + -116.574 -8.9776 lineto + closepath stroke + -107.5964 -37.60402 moveto + (TinyMatrix\(\)) pcrr8r 8.96632 fshow + -107.5964 -48.56293 moveto + (TinyMatrix\(const) pcrr8r 8.96632 fshow + -16.13951 -48.56293 moveto + (TinyMatrix&\)) pcrr8r 8.96632 fshow + -107.5964 -59.52182 moveto + (TinyMatrix\(const) pcrr8r 8.96632 fshow + -16.13951 -59.52182 moveto + (X1&\)) pcrr8r 8.96632 fshow + -107.5964 -70.48071 moveto + (TinyMatrix\(const) pcrr8r 8.96632 fshow + -16.13951 -70.48071 moveto + (X[1-2]&\)) pcrr8r 8.96632 fshow + -107.5964 -81.43962 moveto + (TinyMatrix\(const) pcrr8r 8.96632 fshow + -16.13951 -81.43962 moveto + (X[1-3]&\)) pcrr8r 8.96632 fshow + -107.5964 -92.39851 moveto + (TinyMatrix\(const) pcrr8r 8.96632 fshow + -16.13951 -92.39851 moveto + (X[1-4]&\)) pcrr8r 8.96632 fshow + -107.5964 -103.35742 moveto + (TinyMatrix\(const) pcrr8r 8.96632 fshow + -16.13951 -103.35742 moveto + (X[1-5]&\)) pcrr8r 8.96632 fshow + -107.5964 -114.31631 moveto + (TinyMatrix\(const) pcrr8r 8.96632 fshow + -16.13951 -114.31631 moveto + (X[1-6]&\)) pcrr8r 8.96632 fshow + -107.5964 -125.27522 moveto + (TinyMatrix\(const) pcrr8r 8.96632 fshow + -16.13951 -125.27522 moveto + (X[1-7]&\)) pcrr8r 8.96632 fshow + -107.5964 -136.23412 moveto + (TinyMatrix\(const) pcrr8r 8.96632 fshow + -16.13951 -136.23412 moveto + (X[1-8]&\)) pcrr8r 8.96632 fshow + -107.5964 -147.19312 moveto + (TinyMatrix\(const) pcrr8r 8.96632 fshow + -16.13951 -147.19312 moveto + (X[1-9]&\)) pcrr8r 8.96632 fshow + -109.08931 -158.15202 moveto + (\230) ptmr8r 8.96632 fshow + -106.1017 -158.15202 moveto + (TinyMatrix\(\)) pcrr8r 8.96632 fshow + -107.5964 -169.11092 moveto + (TinyMatrix&) pcrr8r 8.96632 fshow + -43.0386 -169.11092 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 43.0385 -169.11092 moveto + (TinyMatrix&\)) pcrr8r 8.96632 fshow + -107.5964 -180.06982 moveto + (TinyMatrix&) pcrr8r 8.96632 fshow + -43.0386 -180.06982 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 43.0385 -180.06982 moveto + (X&\)) pcrr8r 8.96632 fshow + -107.5964 -191.02872 moveto + (const) pcrr8r 8.96632 fshow + -75.3175 -191.02872 moveto + (T&) pcrr8r 8.96632 fshow + -59.17801 -191.02872 moveto + (operator\(\)\(int,int\)) pcrr8r 8.96632 fshow + -107.5964 -201.98763 moveto + (T&) pcrr8r 8.96632 fshow + -91.45691 -201.98763 moveto + (operator\(\)\(int,int\)) pcrr8r 8.96632 fshow + -107.5964 -212.94652 moveto + (const) pcrr8r 8.96632 fshow + -75.3175 -212.94652 moveto + (T&) pcrr8r 8.96632 fshow + -59.17801 -212.94652 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + -107.5964 -223.90543 moveto + (T&) pcrr8r 8.96632 fshow + -91.45691 -223.90543 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + -107.5964 -234.86432 moveto + (const) pcrr8r 8.96632 fshow + -75.3175 -234.86432 moveto + (Engine&) pcrr8r 8.96632 fshow + -32.2789 -234.86432 moveto + (engine\(\)) pcrr8r 8.96632 fshow + -107.5964 -245.82323 moveto + (Engine&) pcrr8r 8.96632 fshow + -64.5578 -245.82323 moveto + (engine\(\)) pcrr8r 8.96632 fshow + -107.5964 -256.78212 moveto + (void) pcrr8r 8.96632 fshow + -80.69731 -256.78212 moveto + (print\(Out&\)) pcrr8r 8.96632 fshow + newpath -116.574 -263.06982 moveto + 116.574 -263.06982 lineto + 116.574 -26.9328 lineto + -116.574 -26.9328 lineto + closepath stroke + 1 setgray + newpath 72.6276 5.9776 moveto + 160.52042 5.9776 lineto + 160.52042 55.8132 lineto + 72.6276 55.8132 lineto + closepath fill + 0 setgray + 81.6052 45.142 moveto + (dimension) pcrr8r 8.96632 fshow + 135.4034 45.142 moveto + (D1) pcrr8r 8.96632 fshow + 81.6052 34.18309 moveto + (dimension) pcrr8r 8.96632 fshow + 135.4034 34.18309 moveto + (D2) pcrr8r 8.96632 fshow + 81.6052 23.2242 moveto + (value) pcrr8r 8.96632 fshow + 113.8841 23.2242 moveto + (type) pcrr8r 8.96632 fshow + 140.78319 23.2242 moveto + (T) pcrr8r 8.96632 fshow + 81.6052 12.26529 moveto + (engine) pcrr8r 8.96632 fshow + 119.2639 12.26529 moveto + (type) pcrr8r 8.96632 fshow + 146.163 12.26529 moveto + (E) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 72.6276 5.9776 moveto + 160.52042 5.9776 lineto + 160.52042 55.8132 lineto + 72.6276 55.8132 lineto + closepath stroke + 8.9776 -271.64882 moveto + (TinyMatrix.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 981 2937 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 981 2937 a Black 3734 5547 a + Fp(180)p Black eop + %%Page: 181 181 + 181 180 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-12.)e Fo(TinyMatrixEngine)p + Fr(s)719 3246 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 719 3246 a @beginspecial -150 @llx -670 + @lly 191 @urx -301 @ury 3410 @rwi @setspecial + %%BeginDocument: figures/math-objs-uml.11 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -150 -670 191 -301 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -47.82065 -359.47778 moveto + (TinyMatrixEngine) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -50.82065 -366.06438 moveto + 50.82065 -366.06438 lineto + 50.82065 -348.10918 lineto + -50.82065 -348.10918 lineto + closepath stroke + newpath -50.82065 -384.01958 moveto + 50.82065 -384.01958 lineto + 50.82065 -366.06438 lineto + -50.82065 -366.06438 lineto + closepath stroke + newpath -50.82065 -401.97478 moveto + 50.82065 -401.97478 lineto + 50.82065 -384.01958 lineto + -50.82065 -384.01958 lineto + closepath stroke + -89.66376 -441.68983 moveto + (TinyMatrixEngine) pcrr8r 9.96265 fshow + newpath -148.8529 -448.27643 moveto + 148.8529 -448.27643 lineto + 148.8529 -430.32123 lineto + -148.8529 -430.32123 lineto + closepath stroke + newpath -148.8529 -466.23163 moveto + 148.8529 -466.23163 lineto + 148.8529 -448.27643 lineto + -148.8529 -448.27643 lineto + closepath stroke + -139.8753 -476.90285 moveto + (TinyMatrixEngine\(\)) pcrr8r 8.96632 fshow + -139.8753 -487.86174 moveto + (TinyMatrixEngine\(const) pcrr8r 8.96632 fshow + -16.13951 -487.86174 moveto + (TinyMatrixEngine&\)) pcrr8r 8.96632 fshow + -139.8753 -498.82065 moveto + (TinyMatrixEngine\(const) pcrr8r 8.96632 fshow + -16.13951 -498.82065 moveto + (X&\)) pcrr8r 8.96632 fshow + -139.8753 -509.77954 moveto + (TinyMatrixEngine\(const) pcrr8r 8.96632 fshow + -16.13951 -509.77954 moveto + (X[1-2]&\)) pcrr8r 8.96632 fshow + -139.8753 -520.73845 moveto + (TinyMatrixEngine\(const) pcrr8r 8.96632 fshow + -16.13951 -520.73845 moveto + (X[1-3]&\)) pcrr8r 8.96632 fshow + -139.8753 -531.69734 moveto + (TinyMatrixEngine\(const) pcrr8r 8.96632 fshow + -16.13951 -531.69734 moveto + (X[1-4]&\)) pcrr8r 8.96632 fshow + -139.8753 -542.65625 moveto + (TinyMatrixEngine\(const) pcrr8r 8.96632 fshow + -16.13951 -542.65625 moveto + (X[1-5]&\)) pcrr8r 8.96632 fshow + -139.8753 -553.61514 moveto + (TinyMatrixEngine\(const) pcrr8r 8.96632 fshow + -16.13951 -553.61514 moveto + (X[1-6]&\)) pcrr8r 8.96632 fshow + -139.8753 -564.57414 moveto + (TinyMatrixEngine\(const) pcrr8r 8.96632 fshow + -16.13951 -564.57414 moveto + (X[1-7]&\)) pcrr8r 8.96632 fshow + -139.8753 -575.53305 moveto + (TinyMatrixEngine\(const) pcrr8r 8.96632 fshow + -16.13951 -575.53305 moveto + (X[1-8]&\)) pcrr8r 8.96632 fshow + -139.8753 -586.49194 moveto + (TinyMatrixEngine\(const) pcrr8r 8.96632 fshow + -16.13951 -586.49194 moveto + (X[1-9]&\)) pcrr8r 8.96632 fshow + -141.36821 -597.45085 moveto + (\230) ptmr8r 8.96632 fshow + -138.3806 -597.45085 moveto + (TinyMatrixEngine\(\)) pcrr8r 8.96632 fshow + -139.8753 -608.40974 moveto + (TinyMatrixEngine&) pcrr8r 8.96632 fshow + -43.0385 -608.40974 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 43.03859 -608.40974 moveto + (TinyMatrixEngine&\)) pcrr8r 8.96632 fshow + -139.8753 -619.36865 moveto + (TinyMatrixEngine&) pcrr8r 8.96632 fshow + -43.0385 -619.36865 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 43.03859 -619.36865 moveto + (X&\)) pcrr8r 8.96632 fshow + -139.8753 -630.32755 moveto + (const) pcrr8r 8.96632 fshow + -107.5964 -630.32755 moveto + (T&) pcrr8r 8.96632 fshow + -91.45691 -630.32755 moveto + (operator\(\)\(int,int\)) pcrr8r 8.96632 fshow + -139.8753 -641.28645 moveto + (T&) pcrr8r 8.96632 fshow + -123.73581 -641.28645 moveto + (operator\(\)\(int,int\)) pcrr8r 8.96632 fshow + -16.13951 -641.28645 moveto + (const) pcrr8r 8.96632 fshow + 16.1395 -641.28645 moveto + (T&) pcrr8r 8.96632 fshow + 32.2789 -641.28645 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + -139.8753 -652.24535 moveto + (T&) pcrr8r 8.96632 fshow + -123.73581 -652.24535 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + newpath -148.8529 -658.53305 moveto + 148.8529 -658.53305 lineto + 148.8529 -466.23163 lineto + -148.8529 -466.23163 lineto + closepath stroke + 1 setgray + newpath 47.82065 -351.10918 moveto + 135.71347 -351.10918 lineto + 135.71347 -301.27357 lineto + 47.82065 -301.27357 lineto + closepath fill + 0 setgray + 56.79825 -311.94478 moveto + (dimension) pcrr8r 8.96632 fshow + 110.59645 -311.94478 moveto + (D1) pcrr8r 8.96632 fshow + 56.79825 -322.90369 moveto + (dimension) pcrr8r 8.96632 fshow + 110.59645 -322.90369 moveto + (D2) pcrr8r 8.96632 fshow + 56.79825 -333.86258 moveto + (value) pcrr8r 8.96632 fshow + 89.07715 -333.86258 moveto + (type) pcrr8r 8.96632 fshow + 115.97624 -333.86258 moveto + (T) pcrr8r 8.96632 fshow + 56.79825 -344.82149 moveto + (engine) pcrr8r 8.96632 fshow + 94.45695 -344.82149 moveto + (type) pcrr8r 8.96632 fshow + 121.35605 -344.82149 moveto + (E) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 47.82065 -351.10918 moveto + 135.71347 -351.10918 lineto + 135.71347 -301.27357 lineto + 47.82065 -301.27357 lineto + closepath stroke + 1 setgray + newpath 107.5964 -433.32123 moveto + 190.1094 -433.32123 lineto + 190.1094 -405.40341 lineto + 107.5964 -405.40341 lineto + closepath fill + 0 setgray + 116.574 -416.07463 moveto + (dimension) pcrr8r 8.96632 fshow + 170.37221 -416.07463 moveto + (D) pcrr8r 8.96632 fshow + 116.574 -427.03352 moveto + (value) pcrr8r 8.96632 fshow + 148.8529 -427.03352 moveto + (type) pcrr8r 8.96632 fshow + 175.752 -427.03352 moveto + (T) pcrr8r 8.96632 fshow + newpath 107.5964 -433.32123 moveto + 190.1094 -433.32123 lineto + 190.1094 -405.40341 lineto + 107.5964 -405.40341 lineto + closepath stroke + 8.9776 -410.55377 moveto + (TinyMatrixEngine.h) pcrr8r 6.97382 fshow + 8.9776 -667.11205 moveto + (TinyMatrix.h) pcrr8r 6.97382 fshow + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth [] 0 setdash + newpath 0 -430.32123 moveto + 0 -414.24919 lineto stroke + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath 0 -401.97478 moveto + -7.08662 -414.24919 lineto + 7.08662 -414.24919 lineto + closepath stroke + showpage + %%EOF + + %%EndDocument + @endspecial 719 3246 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 719 3246 a Black 3734 5547 a + Fp(181)p Black eop + %%Page: 182 182 + 182 181 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-13.)e Fo(Tensor)p + Fr(s)f(and)j Fo(TensorEngine)p Fr(s)440 4662 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 440 4662 + a @beginspecial -125 @llx -493 @lly 283 @urx 46 @ury + 4080 @rwi @setspecial + %%BeginDocument: figures/math-objs-uml.2 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -125 -493 283 46 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -17.93275 -2.391 moveto + (Tensor) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -124.6437 -8.9776 moveto + 124.6437 -8.9776 lineto + 124.6437 8.9776 lineto + -124.6437 8.9776 lineto + closepath stroke + newpath -124.6437 -26.9328 moveto + 124.6437 -26.9328 lineto + 124.6437 -8.9776 lineto + -124.6437 -8.9776 lineto + closepath stroke + -115.6661 -37.60402 moveto + (Tensor\(\)) pcrr8r 8.96632 fshow + -115.6661 -48.56291 moveto + (Tensor\(const) pcrr8r 8.96632 fshow + -45.72841 -48.56291 moveto + (Tensor&\)) pcrr8r 8.96632 fshow + -115.6661 -59.52182 moveto + (Tensor\(const) pcrr8r 8.96632 fshow + -45.72841 -59.52182 moveto + (X1&\)) pcrr8r 8.96632 fshow + -115.6661 -70.48071 moveto + (Tensor\(const) pcrr8r 8.96632 fshow + -45.72841 -70.48071 moveto + (X[1-2]&\)) pcrr8r 8.96632 fshow + -115.6661 -81.4396 moveto + (Tensor\(const) pcrr8r 8.96632 fshow + -45.72841 -81.4396 moveto + (X[1-3]&\)) pcrr8r 8.96632 fshow + -115.6661 -92.39851 moveto + (Tensor\(const) pcrr8r 8.96632 fshow + -45.72841 -92.39851 moveto + (X[1-4]&\)) pcrr8r 8.96632 fshow + -115.6661 -103.3574 moveto + (Tensor\(const) pcrr8r 8.96632 fshow + -45.72841 -103.3574 moveto + (X[1-5]&\)) pcrr8r 8.96632 fshow + -115.6661 -114.31631 moveto + (Tensor\(const) pcrr8r 8.96632 fshow + -45.72841 -114.31631 moveto + (X[1-6]&\)) pcrr8r 8.96632 fshow + -115.6661 -125.2752 moveto + (Tensor\(const) pcrr8r 8.96632 fshow + -45.72841 -125.2752 moveto + (X[1-7]&\)) pcrr8r 8.96632 fshow + -115.6661 -136.23412 moveto + (Tensor\(const) pcrr8r 8.96632 fshow + -45.72841 -136.23412 moveto + (X[1-8]&\)) pcrr8r 8.96632 fshow + -115.6661 -147.19301 moveto + (Tensor\(const) pcrr8r 8.96632 fshow + -45.72841 -147.19301 moveto + (X[1-9]&\)) pcrr8r 8.96632 fshow + -117.15901 -158.15192 moveto + (\230) ptmr8r 8.96632 fshow + -114.1714 -158.15192 moveto + (Tensor\(\)) pcrr8r 8.96632 fshow + -115.6661 -169.11081 moveto + (Tensor&) pcrr8r 8.96632 fshow + -72.6275 -169.11081 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 13.4496 -169.11081 moveto + (Tensor&\)) pcrr8r 8.96632 fshow + -115.6661 -180.06972 moveto + (Tensor&) pcrr8r 8.96632 fshow + -72.6275 -180.06972 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 13.4496 -180.06972 moveto + (Tensor&\)) pcrr8r 8.96632 fshow + -115.6661 -191.02861 moveto + (Tensor&) pcrr8r 8.96632 fshow + -72.6275 -191.02861 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 13.4496 -191.02861 moveto + (X&\)) pcrr8r 8.96632 fshow + -115.6661 -201.98752 moveto + (const) pcrr8r 8.96632 fshow + -83.3872 -201.98752 moveto + (T&) pcrr8r 8.96632 fshow + -67.24771 -201.98752 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + -115.6661 -212.94641 moveto + (T&) pcrr8r 8.96632 fshow + -99.52661 -212.94641 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + -115.6661 -223.90532 moveto + (const) pcrr8r 8.96632 fshow + -83.3872 -223.90532 moveto + (Engine&) pcrr8r 8.96632 fshow + -40.3486 -223.90532 moveto + (engine\(\)) pcrr8r 8.96632 fshow + -115.6661 -234.86421 moveto + (Engine&) pcrr8r 8.96632 fshow + -72.6275 -234.86421 moveto + (engine\(\)) pcrr8r 8.96632 fshow + -115.6661 -245.8231 moveto + (void) pcrr8r 8.96632 fshow + -88.76701 -245.8231 moveto + (print\(Out&\)) pcrr8r 8.96632 fshow + newpath -124.6437 -252.11081 moveto + 124.6437 -252.11081 lineto + 124.6437 -26.9328 lineto + -124.6437 -26.9328 lineto + closepath stroke + -121.6437 -376.86522 moveto + (TensorEngine) pcrr8r 9.96265 fshow + newpath -124.6437 -383.45181 moveto + -46.91269 -383.45181 lineto + -46.91269 -365.49661 lineto + -124.6437 -365.49661 lineto + closepath stroke + newpath -124.6437 -401.40701 moveto + -46.91269 -401.40701 lineto + -46.91269 -383.45181 lineto + -124.6437 -383.45181 lineto + closepath stroke + newpath -124.6437 -419.36221 moveto + -46.91269 -419.36221 lineto + -46.91269 -401.40701 lineto + -124.6437 -401.40701 lineto + closepath stroke + 68.02582 -304.1081 moveto + (TensorEngine) pcrr8r 9.96265 fshow + newpath 38.12666 -310.69469 moveto + 229.43178 -310.69469 lineto + 229.43178 -292.73949 lineto + 38.12666 -292.73949 lineto + closepath stroke + 41.12666 -364.58298 moveto + (TensorEngine) pcrr8r 9.96265 fshow + newpath 38.12666 -371.16957 moveto + 229.43178 -371.16957 lineto + 229.43178 -353.21437 lineto + 38.12666 -353.21437 lineto + closepath stroke + 53.08182 -425.05786 moveto + (TensorEngine) pcrr8r 9.96265 fshow + newpath 38.12666 -431.64445 moveto + 229.43178 -431.64445 lineto + 229.43178 -413.68925 lineto + 38.12666 -413.68925 lineto + closepath stroke + 56.07062 -485.53275 moveto + (TensorEngine) pcrr8r 9.96265 fshow + newpath 38.12666 -492.11934 moveto + 229.43178 -492.11934 lineto + 229.43178 -474.16414 lineto + 38.12666 -474.16414 lineto + closepath stroke + 1 setgray + newpath 80.6973 5.9776 moveto + 168.59012 5.9776 lineto + 168.59012 44.8544 lineto + 80.6973 44.8544 lineto + closepath fill + 0 setgray + 89.6749 34.1832 moveto + (dimension) pcrr8r 8.96632 fshow + 143.4731 34.1832 moveto + (D) pcrr8r 8.96632 fshow + 89.6749 23.2242 moveto + (value) pcrr8r 8.96632 fshow + 121.9538 23.2242 moveto + (type) pcrr8r 8.96632 fshow + 148.85289 23.2242 moveto + (T) pcrr8r 8.96632 fshow + 89.6749 12.26529 moveto + (engine) pcrr8r 8.96632 fshow + 127.3336 12.26529 moveto + (type) pcrr8r 8.96632 fshow + 154.2327 12.26529 moveto + (E) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 80.6973 5.9776 moveto + 168.59012 5.9776 lineto + 168.59012 44.8544 lineto + 80.6973 44.8544 lineto + closepath stroke + 1 setgray + newpath -49.91269 -368.49661 moveto + 11.08102 -368.49661 lineto + 11.08102 -329.61981 lineto + -49.91269 -329.61981 lineto + closepath fill + 0 setgray + -40.93509 -340.29102 moveto + (dim) pcrr8r 8.96632 fshow + -19.41579 -340.29102 moveto + (D) pcrr8r 8.96632 fshow + -40.93509 -351.25002 moveto + (value) pcrr8r 8.96632 fshow + -8.65619 -351.25002 moveto + (T) pcrr8r 8.96632 fshow + -40.93509 -362.20892 moveto + (engine) pcrr8r 8.96632 fshow + -3.27638 -362.20892 moveto + (E) pcrr8r 8.96632 fshow + newpath -49.91269 -368.49661 moveto + 11.08102 -368.49661 lineto + 11.08102 -329.61981 lineto + -49.91269 -329.61981 lineto + closepath stroke + 1 setgray + newpath 201.62482 -295.73949 moveto + 257.23874 -295.73949 lineto + 257.23874 -267.82167 lineto + 201.62482 -267.82167 lineto + closepath fill + 0 setgray + 210.60242 -278.49289 moveto + (dim) pcrr8r 8.96632 fshow + 232.12172 -278.49289 moveto + (D) pcrr8r 8.96632 fshow + 210.60242 -289.45178 moveto + (value) pcrr8r 8.96632 fshow + 242.88132 -289.45178 moveto + (T) pcrr8r 8.96632 fshow + newpath 201.62482 -295.73949 moveto + 257.23874 -295.73949 lineto + 257.23874 -267.82167 lineto + 201.62482 -267.82167 lineto + closepath stroke + 1 setgray + newpath 226.43178 -356.21437 moveto + 282.0457 -356.21437 lineto + 282.0457 -328.29655 lineto + 226.43178 -328.29655 lineto + closepath fill + 0 setgray + 235.40938 -338.96777 moveto + (dim) pcrr8r 8.96632 fshow + 256.92868 -338.96777 moveto + (D) pcrr8r 8.96632 fshow + 235.40938 -349.92667 moveto + (value) pcrr8r 8.96632 fshow + 267.68828 -349.92667 moveto + (T) pcrr8r 8.96632 fshow + newpath 226.43178 -356.21437 moveto + 282.0457 -356.21437 lineto + 282.0457 -328.29655 lineto + 226.43178 -328.29655 lineto + closepath stroke + 1 setgray + newpath 214.47662 -416.68925 moveto + 270.09055 -416.68925 lineto + 270.09055 -388.77144 lineto + 214.47662 -388.77144 lineto + closepath fill + 0 setgray + 223.45422 -399.44266 moveto + (dim) pcrr8r 8.96632 fshow + 244.97353 -399.44266 moveto + (D) pcrr8r 8.96632 fshow + 223.45422 -410.40155 moveto + (value) pcrr8r 8.96632 fshow + 255.73312 -410.40155 moveto + (T) pcrr8r 8.96632 fshow + newpath 214.47662 -416.68925 moveto + 270.09055 -416.68925 lineto + 270.09055 -388.77144 lineto + 214.47662 -388.77144 lineto + closepath stroke + 1 setgray + newpath 211.48782 -477.16414 moveto + 267.10175 -477.16414 lineto + 267.10175 -449.24632 lineto + 211.48782 -449.24632 lineto + closepath fill + 0 setgray + 220.46542 -459.91754 moveto + (dim) pcrr8r 8.96632 fshow + 241.98473 -459.91754 moveto + (D) pcrr8r 8.96632 fshow + 220.46542 -470.87643 moveto + (value) pcrr8r 8.96632 fshow + 252.74432 -470.87643 moveto + (T) pcrr8r 8.96632 fshow + newpath 211.48782 -477.16414 moveto + 267.10175 -477.16414 lineto + 267.10175 -449.24632 lineto + 211.48782 -449.24632 lineto + closepath stroke + 8.9776 -260.6898 moveto + (Tensor.h) pcrr8r 6.97382 fshow + -76.8006 -427.94121 moveto + (TensorEngine.h) pcrr8r 6.97382 fshow + [] 0 setdash + newpath -46.91269 -392.42941 moveto + -34.63828 -399.51604 lineto + -34.63828 -385.34279 lineto + closepath stroke + newpath -34.63828 -392.42941 moveto + 24.60385 -392.42941 lineto stroke + newpath 24.60385 -301.71709 moveto + 38.12666 -301.71709 lineto stroke + newpath 24.60385 -362.19197 moveto + 38.12666 -362.19197 lineto stroke + newpath 24.60385 -422.66685 moveto + 38.12666 -422.66685 lineto stroke + newpath 24.60385 -483.14174 moveto + 38.12666 -483.14174 lineto stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath 24.60385 -301.71709 moveto + 24.60385 -483.14174 lineto stroke + showpage + %%EOF + + %%EndDocument + @endspecial 440 4662 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 440 4662 a Black 3734 5547 a + Fp(182)p Black eop + %%Page: 183 183 + 183 182 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-14.)e Fo(Full)g + Fr(and)i Fo(Diagonal)d(TensorEngine)p Fr(s)811 4212 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + + 811 4212 a @beginspecial -136 @llx -450 @lly 183 @urx + 35 @ury 3190 @rwi @setspecial + %%BeginDocument: figures/math-objs-uml.3 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -136 -450 183 35 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -65.7534 -2.391 moveto + (TensorEngine) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -135.40335 -8.9776 moveto + 135.40335 -8.9776 lineto + 135.40335 8.9776 lineto + -135.40335 8.9776 lineto + closepath stroke + newpath -135.40335 -26.9328 moveto + 135.40335 -26.9328 lineto + 135.40335 -8.9776 lineto + -135.40335 -8.9776 lineto + closepath stroke + -126.42575 -37.604 moveto + (TensorEngine\(\)) pcrr8r 8.96632 fshow + -126.42575 -48.56291 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -24.20915 -48.56291 moveto + (TensorEngine&\)) pcrr8r 8.96632 fshow + -126.42575 -59.5218 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -24.20915 -59.5218 moveto + (T&\)) pcrr8r 8.96632 fshow + -126.42575 -70.48071 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -24.20915 -70.48071 moveto + (X&\)) pcrr8r 8.96632 fshow + -126.42575 -81.4396 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -24.20915 -81.4396 moveto + (X[1-4]&\)) pcrr8r 8.96632 fshow + -126.42575 -92.39851 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -24.20915 -92.39851 moveto + (X[1-9]&\)) pcrr8r 8.96632 fshow + -127.91866 -103.3574 moveto + (\230) ptmr8r 8.96632 fshow + -124.93105 -103.3574 moveto + (TensorEngine\(\)) pcrr8r 8.96632 fshow + -126.42575 -114.31631 moveto + (TensorEngine&) pcrr8r 8.96632 fshow + -51.10825 -114.31631 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 34.96884 -114.31631 moveto + (TensorEngine&\)) pcrr8r 8.96632 fshow + -126.42575 -125.2752 moveto + (TensorEngine&) pcrr8r 8.96632 fshow + -51.10825 -125.2752 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 34.96884 -125.2752 moveto + (X&\)) pcrr8r 8.96632 fshow + -126.42575 -136.23412 moveto + (const) pcrr8r 8.96632 fshow + -94.14685 -136.23412 moveto + (T&) pcrr8r 8.96632 fshow + -78.00735 -136.23412 moveto + (operator\(\)\(int,int\)) pcrr8r 8.96632 fshow + -126.42575 -147.19301 moveto + (T&) pcrr8r 8.96632 fshow + -110.28625 -147.19301 moveto + (operator\(\)\(int,int\)) pcrr8r 8.96632 fshow + -2.68996 -147.19301 moveto + (const) pcrr8r 8.96632 fshow + 29.58905 -147.19301 moveto + (T&) pcrr8r 8.96632 fshow + 45.72845 -147.19301 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + -126.42575 -158.15192 moveto + (T&) pcrr8r 8.96632 fshow + -110.28625 -158.15192 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + newpath -135.40335 -164.4396 moveto + 135.40335 -164.4396 lineto + 135.40335 -26.9328 lineto + -135.40335 -26.9328 lineto + closepath stroke + -75.0187 -232.50111 moveto + (TensorEngine) pcrr8r 9.96265 fshow + newpath -135.40335 -239.0877 moveto + 140.78314 -239.0877 lineto + 140.78314 -221.1325 lineto + -135.40335 -221.1325 lineto + closepath stroke + newpath -135.40335 -257.04291 moveto + 140.78314 -257.04291 lineto + 140.78314 -239.0877 lineto + -135.40335 -239.0877 lineto + closepath stroke + -126.42575 -267.71413 moveto + (TensorEngine\(\)) pcrr8r 8.96632 fshow + -126.42575 -278.67302 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -24.20915 -278.67302 moveto + (TensorEngine&\)) pcrr8r 8.96632 fshow + -126.42575 -289.63191 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -24.20915 -289.63191 moveto + (T&\)) pcrr8r 8.96632 fshow + -126.42575 -300.59082 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -24.20915 -300.59082 moveto + (X&\)) pcrr8r 8.96632 fshow + -126.42575 -311.54971 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -24.20915 -311.54971 moveto + (X[1-2]&\)) pcrr8r 8.96632 fshow + -126.42575 -322.50862 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -24.20915 -322.50862 moveto + (X[1-3]&\)) pcrr8r 8.96632 fshow + -126.42575 -333.46751 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -24.20915 -333.46751 moveto + (X[1-4]&\)) pcrr8r 8.96632 fshow + -126.42575 -344.42642 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -24.20915 -344.42642 moveto + (X[1-5]&\)) pcrr8r 8.96632 fshow + -126.42575 -355.38531 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -24.20915 -355.38531 moveto + (X[1-6]&\)) pcrr8r 8.96632 fshow + -126.42575 -366.34422 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -24.20915 -366.34422 moveto + (X[1-7]&\)) pcrr8r 8.96632 fshow + -127.91866 -377.30312 moveto + (\230) ptmr8r 8.96632 fshow + -124.93105 -377.30312 moveto + (TensorEngine\(\)) pcrr8r 8.96632 fshow + -126.42575 -388.26202 moveto + (TensorEngine&) pcrr8r 8.96632 fshow + -51.10825 -388.26202 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 34.96884 -388.26202 moveto + (TensorEngine&\)) pcrr8r 8.96632 fshow + -126.42575 -399.22092 moveto + (TensorEngine&) pcrr8r 8.96632 fshow + -51.10825 -399.22092 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 34.96884 -399.22092 moveto + (X&\)) pcrr8r 8.96632 fshow + -126.42575 -410.17982 moveto + (const) pcrr8r 8.96632 fshow + -94.14685 -410.17982 moveto + (T&) pcrr8r 8.96632 fshow + -78.00735 -410.17982 moveto + (operator\(\)\(int,int\)) pcrr8r 8.96632 fshow + -126.42575 -421.13872 moveto + (T&) pcrr8r 8.96632 fshow + -110.28625 -421.13872 moveto + (operator\(\)\(int,int\)) pcrr8r 8.96632 fshow + -2.68996 -421.13872 moveto + (const) pcrr8r 8.96632 fshow + 29.58905 -421.13872 moveto + (T&) pcrr8r 8.96632 fshow + 45.72845 -421.13872 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + -126.42575 -432.09763 moveto + (T&) pcrr8r 8.96632 fshow + -110.28625 -432.09763 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + newpath -135.40335 -438.38531 moveto + 140.78314 -438.38531 lineto + 140.78314 -257.04291 lineto + -135.40335 -257.04291 lineto + closepath stroke + 1 setgray + newpath 94.14685 5.9776 moveto + 176.65985 5.9776 lineto + 176.65985 33.89542 lineto + 94.14685 33.89542 lineto + closepath fill + 0 setgray + 103.12445 23.2242 moveto + (dimension) pcrr8r 8.96632 fshow + 156.92265 23.2242 moveto + (D) pcrr8r 8.96632 fshow + 103.12445 12.2653 moveto + (value) pcrr8r 8.96632 fshow + 135.40335 12.2653 moveto + (type) pcrr8r 8.96632 fshow + 162.30244 12.2653 moveto + (T) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 94.14685 5.9776 moveto + 176.65985 5.9776 lineto + 176.65985 33.89542 lineto + 94.14685 33.89542 lineto + closepath stroke + 1 setgray + newpath 99.52664 -224.1325 moveto + 182.03964 -224.1325 lineto + 182.03964 -196.21469 lineto + 99.52664 -196.21469 lineto + closepath fill + 0 setgray + 108.50424 -206.88591 moveto + (dimension) pcrr8r 8.96632 fshow + 162.30244 -206.88591 moveto + (D) pcrr8r 8.96632 fshow + 108.50424 -217.8448 moveto + (value) pcrr8r 8.96632 fshow + 140.78314 -217.8448 moveto + (type) pcrr8r 8.96632 fshow + 167.68224 -217.8448 moveto + (T) pcrr8r 8.96632 fshow + newpath 99.52664 -224.1325 moveto + 182.03964 -224.1325 lineto + 182.03964 -196.21469 lineto + 99.52664 -196.21469 lineto + closepath stroke + 8.9776 -173.0186 moveto + (Tensor.h) pcrr8r 6.97382 fshow + 11.6675 -446.96431 moveto + (Tensor.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 811 4212 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 811 4212 a Black 3734 5547 a + Fp(183)p Black eop + %%Page: 184 184 + 184 183 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-15.)e Fo(Antisymmetric)e + Fr(and)j Fo(Symmetric)e(TensorEngine)p Fr(s)719 3846 + y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 719 3846 a @beginspecial -150 @llx -406 @lly 191 @urx + 35 @ury 3410 @rwi @setspecial + %%BeginDocument: figures/math-objs-uml.4 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -150 -406 191 35 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -92.65256 -2.391 moveto + (TensorEngine) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -148.8529 -8.9776 moveto + 148.8529 -8.9776 lineto + 148.8529 8.9776 lineto + -148.8529 8.9776 lineto + closepath stroke + newpath -148.8529 -26.9328 moveto + 148.8529 -26.9328 lineto + 148.8529 -8.9776 lineto + -148.8529 -8.9776 lineto + closepath stroke + -139.8753 -37.604 moveto + (TensorEngine\(\)) pcrr8r 8.96632 fshow + -139.8753 -48.56291 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -37.6587 -48.56291 moveto + (TensorEngine&\)) pcrr8r 8.96632 fshow + -139.8753 -59.5218 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -37.6587 -59.5218 moveto + (T&\)) pcrr8r 8.96632 fshow + -139.8753 -70.48071 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -37.6587 -70.48071 moveto + (X&\)) pcrr8r 8.96632 fshow + -139.8753 -81.4396 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -37.6587 -81.4396 moveto + (X[1-3]&\)) pcrr8r 8.96632 fshow + -139.8753 -92.39851 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -37.6587 -92.39851 moveto + (X[1-6]&\)) pcrr8r 8.96632 fshow + -141.36821 -103.3574 moveto + (\230) ptmr8r 8.96632 fshow + -138.3806 -103.3574 moveto + (TensorEngine\(\)) pcrr8r 8.96632 fshow + -139.8753 -114.31631 moveto + (TensorEngine&) pcrr8r 8.96632 fshow + -64.5578 -114.31631 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 21.51929 -114.31631 moveto + (TensorEngine&\)) pcrr8r 8.96632 fshow + -139.8753 -125.2752 moveto + (TensorEngine&) pcrr8r 8.96632 fshow + -64.5578 -125.2752 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 21.51929 -125.2752 moveto + (X&\)) pcrr8r 8.96632 fshow + -139.8753 -136.23412 moveto + (const) pcrr8r 8.96632 fshow + -107.5964 -136.23412 moveto + (T&) pcrr8r 8.96632 fshow + -91.45691 -136.23412 moveto + (operator\(\)\(int,int\)) pcrr8r 8.96632 fshow + -139.8753 -147.19301 moveto + (T&) pcrr8r 8.96632 fshow + -123.73581 -147.19301 moveto + (operator\(\)\(int,int\)) pcrr8r 8.96632 fshow + -16.13951 -147.19301 moveto + (const) pcrr8r 8.96632 fshow + 16.1395 -147.19301 moveto + (T&) pcrr8r 8.96632 fshow + 32.2789 -147.19301 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + -139.8753 -158.15192 moveto + (T&) pcrr8r 8.96632 fshow + -123.73581 -158.15192 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + newpath -148.8529 -164.4396 moveto + 148.8529 -164.4396 lineto + 148.8529 -26.9328 lineto + -148.8529 -26.9328 lineto + closepath stroke + -91.45706 -232.50111 moveto + (TensorEngine) pcrr8r 9.96265 fshow + newpath -148.8529 -239.0877 moveto + 127.33359 -239.0877 lineto + 127.33359 -221.1325 lineto + -148.8529 -221.1325 lineto + closepath stroke + newpath -148.8529 -257.04291 moveto + 127.33359 -257.04291 lineto + 127.33359 -239.0877 lineto + -148.8529 -239.0877 lineto + closepath stroke + -139.8753 -267.71411 moveto + (TensorEngine\(\)) pcrr8r 8.96632 fshow + -139.8753 -278.67302 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -37.6587 -278.67302 moveto + (TensorEngine&\)) pcrr8r 8.96632 fshow + -139.8753 -289.63191 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -37.6587 -289.63191 moveto + (T&\)) pcrr8r 8.96632 fshow + -139.8753 -300.59082 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -37.6587 -300.59082 moveto + (X&\)) pcrr8r 8.96632 fshow + -139.8753 -311.54971 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -37.6587 -311.54971 moveto + (X[1-3]&\)) pcrr8r 8.96632 fshow + -139.8753 -322.50862 moveto + (TensorEngine\(const) pcrr8r 8.96632 fshow + -37.6587 -322.50862 moveto + (X[1-6]&\)) pcrr8r 8.96632 fshow + -141.36821 -333.46751 moveto + (\230) ptmr8r 8.96632 fshow + -138.3806 -333.46751 moveto + (TensorEngine\(\)) pcrr8r 8.96632 fshow + -139.8753 -344.42642 moveto + (TensorEngine&) pcrr8r 8.96632 fshow + -64.5578 -344.42642 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 21.51929 -344.42642 moveto + (TensorEngine&\)) pcrr8r 8.96632 fshow + -139.8753 -355.38531 moveto + (TensorEngine&) pcrr8r 8.96632 fshow + -64.5578 -355.38531 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 21.51929 -355.38531 moveto + (X&\)) pcrr8r 8.96632 fshow + -139.8753 -366.34422 moveto + (const) pcrr8r 8.96632 fshow + -107.5964 -366.34422 moveto + (T&) pcrr8r 8.96632 fshow + -91.45691 -366.34422 moveto + (operator\(\)\(int,int\)) pcrr8r 8.96632 fshow + -139.8753 -377.30312 moveto + (T&) pcrr8r 8.96632 fshow + -123.73581 -377.30312 moveto + (operator\(\)\(int,int\)) pcrr8r 8.96632 fshow + -16.13951 -377.30312 moveto + (const) pcrr8r 8.96632 fshow + 16.1395 -377.30312 moveto + (T&) pcrr8r 8.96632 fshow + 32.2789 -377.30312 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + -139.8753 -388.26202 moveto + (T&) pcrr8r 8.96632 fshow + -123.73581 -388.26202 moveto + (operator\(\)\(int\)) pcrr8r 8.96632 fshow + newpath -148.8529 -394.54971 moveto + 127.33359 -394.54971 lineto + 127.33359 -257.04291 lineto + -148.8529 -257.04291 lineto + closepath stroke + 1 setgray + newpath 107.5964 5.9776 moveto + 190.1094 5.9776 lineto + 190.1094 33.89542 lineto + 107.5964 33.89542 lineto + closepath fill + 0 setgray + 116.574 23.2242 moveto + (dimension) pcrr8r 8.96632 fshow + 170.37221 23.2242 moveto + (D) pcrr8r 8.96632 fshow + 116.574 12.2653 moveto + (value) pcrr8r 8.96632 fshow + 148.8529 12.2653 moveto + (type) pcrr8r 8.96632 fshow + 175.752 12.2653 moveto + (T) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 107.5964 5.9776 moveto + 190.1094 5.9776 lineto + 190.1094 33.89542 lineto + 107.5964 33.89542 lineto + closepath stroke + 1 setgray + newpath 86.07709 -224.1325 moveto + 168.59009 -224.1325 lineto + 168.59009 -196.21469 lineto + 86.07709 -196.21469 lineto + closepath fill + 0 setgray + 95.05469 -206.88591 moveto + (dimension) pcrr8r 8.96632 fshow + 148.85289 -206.88591 moveto + (D) pcrr8r 8.96632 fshow + 95.05469 -217.8448 moveto + (value) pcrr8r 8.96632 fshow + 127.33359 -217.8448 moveto + (type) pcrr8r 8.96632 fshow + 154.23268 -217.8448 moveto + (T) pcrr8r 8.96632 fshow + newpath 86.07709 -224.1325 moveto + 168.59009 -224.1325 lineto + 168.59009 -196.21469 lineto + 86.07709 -196.21469 lineto + closepath stroke + 8.9776 -173.0186 moveto + (Tensor.h) pcrr8r 6.97382 fshow + -1.78206 -403.12871 moveto + (Tensor.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 719 3846 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 719 3846 a -2 4398 a Fx(C.4.)47 + b Fg(Domain)p Fx(s)396 4614 y Fq(Domain)p Fu(s)25 b(and)i(its)f + (subtypes)f(are)i(sho)n(wn)f(in)g(Figure)h(C-16.)g(All)f(classes)g(are) + h(instantiated)f(from)396 4743 y(or)i(subtypes)e(of)h + Fq(Domain)p Fu(.)f(As)h(mentioned)f(in)h(Section)g(5.3,)g(the)g + Fq(Domain<1>)e Fu(template)i(in-)396 4873 y(stantiation)22 + b(has)i(additional)e(member)h(functions.)g(It)g(uses)g(the)h + Fq(Domain<1>::iterator)p Fu(.)396 5002 y(The)30 b(four)g + Fq(Domain)e Fu(subtypes)h(appear)h(in)f(the)h(bottom)e(half)h(of)h(the) + g(\002gure.)g(Each)g(requires)f(the)396 5132 y(same)23 + b(template)f(parameter)i(as)f Fq(Domain)p Fu(.)f(Each)h(of)g(these)g + (has)g(a)g(template)f(instantiation)f(for)i(the)p Black + 3734 5547 a Fp(184)p Black eop + %%Page: 185 185 + 185 184 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fu(one-dimensional)e(case.)h(W)-8 + b(e)24 b(omit)d(listing)h(their)g(additional)g(member)h(functions)f + (since)h(these)g(are)396 180 y(the)i(same)g(as)f(for)i + Fq(Domain<1>)p Fu(.)396 360 y(Implementation)d(\002les)i(are)h(located) + e(within)g(the)g Ft(src/Domain)k Fu(directory)-6 b(.)396 + 639 y Fr(Figur)n(e)26 b(C-16.)e Fo(Domain)p Fr(s)396 + 3434 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 396 3434 a @beginspecial -63 @llx -297 @lly 372 + @urx 24 @ury 4350 @rwi @setspecial + %%BeginDocument: figures/domain-uml.1 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -63 -297 372 24 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -17.93275 -2.391 moveto + (Domain) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -61.99567 -8.9776 moveto + 61.99567 -8.9776 lineto + 61.99567 8.9776 lineto + -61.99567 8.9776 lineto + closepath stroke + newpath -61.99567 -26.9328 moveto + 61.99567 -26.9328 lineto + 61.99567 -8.9776 lineto + -61.99567 -8.9776 lineto + closepath stroke + -53.01804 -37.604 moveto + (long) pcrr8r 8.96632 fshow + -26.11894 -37.604 moveto + (size\(\)) pcrr8r 8.96632 fshow + -53.01804 -48.56291 moveto + (bool) pcrr8r 8.96632 fshow + -26.11894 -48.56291 moveto + (empty\(\)) pcrr8r 8.96632 fshow + -53.01804 -59.5218 moveto + (Domain<1>) pcrr8r 8.96632 fshow + -49.19844 -70.48071 moveto + (operator[]\(int) pcrr8r 8.96632 fshow + 31.49887 -70.48071 moveto + (dim\)) pcrr8r 8.96632 fshow + newpath -61.99564 -76.7684 moveto + 61.99567 -76.7684 lineto + 61.99567 -26.9328 lineto + -61.99564 -26.9328 lineto + closepath stroke + 115.45912 -2.391 moveto + (Domain<1>) pcrr8r 9.96265 fshow + newpath 90.34212 -8.9776 moveto + 194.37444 -8.9776 lineto + 194.37444 8.9776 lineto + 90.34212 8.9776 lineto + closepath stroke + newpath 90.34212 -26.9328 moveto + 194.37444 -26.9328 lineto + 194.37444 -8.9776 lineto + 90.34212 -8.9776 lineto + closepath stroke + 99.31972 -37.60402 moveto + (long) pcrr8r 8.96632 fshow + 126.21881 -37.60402 moveto + (length\(\)) pcrr8r 8.96632 fshow + 99.31972 -48.56291 moveto + (int) pcrr8r 8.96632 fshow + 120.83902 -48.56291 moveto + (first\(\)) pcrr8r 8.96632 fshow + 99.31972 -59.52182 moveto + (int) pcrr8r 8.96632 fshow + 120.83902 -59.52182 moveto + (last\(\)) pcrr8r 8.96632 fshow + 99.31972 -70.48071 moveto + (int) pcrr8r 8.96632 fshow + 120.83902 -70.48071 moveto + (min\(\)) pcrr8r 8.96632 fshow + 99.31972 -81.43971 moveto + (int) pcrr8r 8.96632 fshow + 120.83902 -81.43971 moveto + (max\(\)) pcrr8r 8.96632 fshow + 99.31972 -92.39862 moveto + (Domain<1>::iter-) pcrr8r 8.96632 fshow + 103.13931 -103.35751 moveto + (ator) pcrr8r 8.96632 fshow + 130.03842 -103.35751 moveto + (begin\(\)) pcrr8r 8.96632 fshow + 99.31972 -114.31642 moveto + (Domain<1>::iter-) pcrr8r 8.96632 fshow + 103.13931 -125.27531 moveto + (ator) pcrr8r 8.96632 fshow + 130.03842 -125.27531 moveto + (end\(\)) pcrr8r 8.96632 fshow + newpath 90.34212 -131.56302 moveto + 194.37444 -131.56302 lineto + 194.37444 -26.9328 lineto + 90.34212 -26.9328 lineto + closepath stroke + 225.72089 -2.391 moveto + (Domain<1>::iterator) pcrr8r 9.96265 fshow + newpath 222.72089 -8.9776 moveto + 342.29498 -8.9776 lineto + 342.29498 8.9776 lineto + 222.72089 8.9776 lineto + closepath stroke + newpath 222.72089 -26.9328 moveto + 342.29498 -26.9328 lineto + 342.29498 -8.9776 lineto + 222.72089 -8.9776 lineto + closepath stroke + 250.22903 -37.604 moveto + (operator*\(\)) pcrr8r 8.96632 fshow + 250.22903 -48.563 moveto + (operator++\(\)) pcrr8r 8.96632 fshow + 250.22903 -59.52191 moveto + (operator->\(\)) pcrr8r 8.96632 fshow + newpath 222.72089 -65.8096 moveto + 342.29498 -65.8096 lineto + 342.29498 -26.9328 lineto + 222.72089 -26.9328 lineto + closepath stroke + -35.08533 -171.27808 moveto + (Loc) pcrr8r 9.96265 fshow + newpath -61.99564 -177.86467 moveto + 9.75778 -177.86467 lineto + 9.75778 -159.90947 lineto + -61.99564 -159.90947 lineto + closepath stroke + newpath -61.99564 -195.81987 moveto + 9.75778 -195.81987 lineto + 9.75778 -177.86467 lineto + -61.99564 -177.86467 lineto + closepath stroke + newpath -61.99564 -213.77507 moveto + 9.75778 -213.77507 lineto + 9.75778 -195.81987 lineto + -61.99564 -195.81987 lineto + closepath stroke + -44.05168 -253.49013 moveto + (Loc<1>) pcrr8r 9.96265 fshow + newpath -61.99564 -260.07672 moveto + 9.75778 -260.07672 lineto + 9.75778 -242.12152 lineto + -61.99564 -242.12152 lineto + closepath stroke + newpath -61.99564 -278.03192 moveto + 9.75778 -278.03192 lineto + 9.75778 -260.07672 lineto + -61.99564 -260.07672 lineto + closepath stroke + newpath -61.99564 -295.98712 moveto + 9.75778 -295.98712 lineto + 9.75778 -278.03192 lineto + -61.99564 -278.03192 lineto + closepath stroke + 50.07059 -171.27808 moveto + (Interval) pcrr8r 9.96265 fshow + newpath 38.10423 -177.86467 moveto + 109.85765 -177.86467 lineto + 109.85765 -159.90947 lineto + 38.10423 -159.90947 lineto + closepath stroke + newpath 38.10423 -195.81987 moveto + 109.85765 -195.81987 lineto + 109.85765 -177.86467 lineto + 38.10423 -177.86467 lineto + closepath stroke + newpath 38.10423 -213.77507 moveto + 109.85765 -213.77507 lineto + 109.85765 -195.81987 lineto + 38.10423 -195.81987 lineto + closepath stroke + 41.10423 -253.49013 moveto + (Interval<1>) pcrr8r 9.96265 fshow + newpath 38.10423 -260.07672 moveto + 109.85765 -260.07672 lineto + 109.85765 -242.12152 lineto + 38.10423 -242.12152 lineto + closepath stroke + newpath 38.10423 -278.03192 moveto + 109.85765 -278.03192 lineto + 109.85765 -260.07672 lineto + 38.10423 -260.07672 lineto + closepath stroke + newpath 38.10423 -295.98712 moveto + 109.85765 -295.98712 lineto + 109.85765 -278.03192 lineto + 38.10423 -278.03192 lineto + closepath stroke + 187.4833 -171.27808 moveto + (Range) pcrr8r 9.96265 fshow + newpath 166.55055 -177.86467 moveto + 238.30397 -177.86467 lineto + 238.30397 -159.90947 lineto + 166.55055 -159.90947 lineto + closepath stroke + newpath 166.55055 -195.81987 moveto + 238.30397 -195.81987 lineto + 238.30397 -177.86467 lineto + 166.55055 -177.86467 lineto + closepath stroke + newpath 166.55055 -213.77507 moveto + 238.30397 -213.77507 lineto + 238.30397 -195.81987 lineto + 166.55055 -195.81987 lineto + closepath stroke + 178.5169 -253.49013 moveto + (Range<1>) pcrr8r 9.96265 fshow + newpath 166.55055 -260.07672 moveto + 238.30397 -260.07672 lineto + 238.30397 -242.12152 lineto + 166.55055 -242.12152 lineto + closepath stroke + newpath 166.55055 -278.03192 moveto + 238.30397 -278.03192 lineto + 238.30397 -260.07672 lineto + 166.55055 -260.07672 lineto + closepath stroke + newpath 166.55055 -295.98712 moveto + 238.30397 -295.98712 lineto + 238.30397 -278.03192 lineto + 166.55055 -278.03192 lineto + closepath stroke + 290.57198 -171.27808 moveto + (Grid) pcrr8r 9.96265 fshow + newpath 266.65042 -177.86467 moveto + 338.40384 -177.86467 lineto + 338.40384 -159.90947 lineto + 266.65042 -159.90947 lineto + closepath stroke + newpath 266.65042 -195.81987 moveto + 338.40384 -195.81987 lineto + 338.40384 -177.86467 lineto + 266.65042 -177.86467 lineto + closepath stroke + newpath 266.65042 -213.77507 moveto + 338.40384 -213.77507 lineto + 338.40384 -195.81987 lineto + 266.65042 -195.81987 lineto + closepath stroke + 281.60558 -253.49013 moveto + (Grid<1>) pcrr8r 9.96265 fshow + newpath 266.65042 -260.07672 moveto + 338.40384 -260.07672 lineto + 338.40384 -242.12152 lineto + 266.65042 -242.12152 lineto + closepath stroke + newpath 266.65042 -278.03192 moveto + 338.40384 -278.03192 lineto + 338.40384 -260.07672 lineto + 266.65042 -260.07672 lineto + closepath stroke + newpath 266.65042 -295.98712 moveto + 338.40384 -295.98712 lineto + 338.40384 -278.03192 lineto + 266.65042 -278.03192 lineto + closepath stroke + 1 setgray + newpath 39.56851 5.9776 moveto + 84.42282 5.9776 lineto + 84.42282 22.9365 lineto + 39.56851 22.9365 lineto + closepath fill + 0 setgray + 48.54611 12.2653 moveto + (dim) pcrr8r 8.96632 fshow + 70.06541 12.2653 moveto + (D) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 39.56851 5.9776 moveto + 84.42282 5.9776 lineto + 84.42282 22.9365 lineto + 39.56851 22.9365 lineto + closepath stroke + 1 setgray + newpath -12.66937 -162.90947 moveto + 32.18494 -162.90947 lineto + 32.18494 -145.95058 lineto + -12.66937 -145.95058 lineto + closepath fill + 0 setgray + -3.69177 -156.62177 moveto + (dim) pcrr8r 8.96632 fshow + 17.82753 -156.62177 moveto + (D) pcrr8r 8.96632 fshow + newpath -12.66937 -162.90947 moveto + 32.18494 -162.90947 lineto + 32.18494 -145.95058 lineto + -12.66937 -145.95058 lineto + closepath stroke + 1 setgray + newpath 97.8913 -162.90947 moveto + 142.7456 -162.90947 lineto + 142.7456 -145.95058 lineto + 97.8913 -145.95058 lineto + closepath fill + 0 setgray + 106.8689 -156.62177 moveto + (dim) pcrr8r 8.96632 fshow + 128.3882 -156.62177 moveto + (D) pcrr8r 8.96632 fshow + newpath 97.8913 -162.90947 moveto + 142.7456 -162.90947 lineto + 142.7456 -145.95058 lineto + 97.8913 -145.95058 lineto + closepath stroke + 1 setgray + newpath 217.37122 -162.90947 moveto + 262.22552 -162.90947 lineto + 262.22552 -145.95058 lineto + 217.37122 -145.95058 lineto + closepath fill + 0 setgray + 226.34882 -156.62177 moveto + (dim) pcrr8r 8.96632 fshow + 247.86812 -156.62177 moveto + (D) pcrr8r 8.96632 fshow + newpath 217.37122 -162.90947 moveto + 262.22552 -162.90947 lineto + 262.22552 -145.95058 lineto + 217.37122 -145.95058 lineto + closepath stroke + 1 setgray + newpath 315.97668 -162.90947 moveto + 360.831 -162.90947 lineto + 360.831 -145.95058 lineto + 315.97668 -145.95058 lineto + closepath fill + 0 setgray + 324.95428 -156.62177 moveto + (dim) pcrr8r 8.96632 fshow + 346.47359 -156.62177 moveto + (D) pcrr8r 8.96632 fshow + newpath 315.97668 -162.90947 moveto + 360.831 -162.90947 lineto + 360.831 -145.95058 lineto + 315.97668 -145.95058 lineto + closepath stroke + 8.97762 -85.34741 moveto + (Domain.h) pcrr8r 6.97382 fshow + 8.97762 -93.3175 moveto + (DomainBase.h) pcrr8r 6.97382 fshow + 8.97762 -101.28761 moveto + (DomainTraits.h) pcrr8r 6.97382 fshow + 291.48553 -74.3886 moveto + (DomainIterator.h) pcrr8r 6.97382 fshow + -17.14133 -222.35417 moveto + (Loc.h) pcrr8r 6.97382 fshow + -17.14133 -230.32428 moveto + (DomainTraits.Loc.h) pcrr8r 6.97382 fshow + 82.95854 -222.35417 moveto + (Interval.h) pcrr8r 6.97382 fshow + 82.95854 -230.32428 moveto + (DomainTraits.Interval.h) pcrr8r 6.97382 fshow + 211.40486 -222.35417 moveto + (Range.h) pcrr8r 6.97382 fshow + 211.40486 -230.32428 moveto + (DomainTraits.Range.h) pcrr8r 6.97382 fshow + 311.50473 -222.35408 moveto + (Grid.h) pcrr8r 6.97382 fshow + 311.50473 -230.32417 moveto + (Domain-) pcrr8r 6.97382 fshow + 311.50473 -238.29428 moveto + (Traits.Grid.h) pcrr8r 6.97382 fshow + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath -26.11893 -242.12152 moveto + -26.11893 -213.77507 lineto stroke + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + newpath -23.05736 -221.16615 moveto + -26.11893 -213.77507 lineto + -29.1805 -221.16615 lineto + closepath + gsave fill grestore stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + [3 3 ] 0 setdash + newpath 73.98094 -242.12152 moveto + 73.98094 -213.77507 lineto stroke + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + newpath 77.04251 -221.16615 moveto + 73.98094 -213.77507 lineto + 70.91937 -221.16615 lineto + closepath + gsave fill grestore stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + [3 3 ] 0 setdash + newpath 202.42726 -242.12152 moveto + 202.42726 -213.77507 lineto stroke + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + newpath 205.48883 -221.16615 moveto + 202.42726 -213.77507 lineto + 199.36569 -221.16615 lineto + closepath + gsave fill grestore stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + [3 3 ] 0 setdash + newpath 302.52713 -242.12152 moveto + 302.52713 -213.77507 lineto stroke + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + newpath 305.5887 -221.16615 moveto + 302.52713 -213.77507 lineto + 299.46556 -221.16615 lineto + closepath + gsave fill grestore stroke + [3 3 ] 0 setdash + newpath 90.34212 -17.9552 moveto + 61.99567 -17.9552 lineto stroke + [] 0 setdash + newpath 69.38675 -14.89363 moveto + 61.99567 -17.9552 lineto + 69.38675 -21.01677 lineto + closepath + gsave fill grestore stroke + newpath 222.72089 -17.9552 moveto + 194.37444 -17.9552 lineto stroke + newpath 0.00002 -76.7684 moveto + -7.08661 -89.04282 lineto + 7.08664 -89.04282 lineto + closepath stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath -26.11893 -159.90947 moveto + -26.11893 -140.06705 lineto stroke + newpath 73.98094 -159.90947 moveto + 73.98094 -140.06705 lineto stroke + newpath 202.42726 -159.90947 moveto + 202.42726 -140.06705 lineto stroke + newpath 302.52713 -159.90947 moveto + 302.52713 -140.06705 lineto stroke + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -26.11893 -140.06705 moveto + 302.52713 -140.06705 lineto stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath 0.00002 -89.04282 moveto + 0.00002 -140.06705 lineto stroke + showpage + %%EOF + + %%EndDocument + @endspecial 396 3434 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 396 3434 a -2 3986 a Fx(C.5.)47 + b Fg(Engine)p Fx(s)396 4201 y Fq(Engine)p Fu(s)27 b(and)h(its)f + (subtypes)g(are)i(sho)n(wn)d(in)i(Figure)g(C-17.)h(Fi)n(v)o(e)e + (subtypes)g(of)h Fq(Engine)p Fu(s)f(are)396 4331 y(sho)n(wn.)22 + b(Details)g(appear)h(in)g(subsequent)e(diagrams.)h(The)h + Fq(Engine)f Fu(class)g(box)h(sho)n(ws)e(no)i(mem-)396 + 4460 y(bers)37 b(because)g(it)g(has)f(no)h(members.)f(Only)g(subtypes)g + (ha)n(v)o(e)g(members.)g(More)h(e)o(xplanation)e(of)396 + 4590 y(these)22 b(classes)g(can)h(be)f(found)g(in)g(Chapter)h(6.)f(The) + g(implementation)e(\002les)i(in)g(Figure)h(C-18)f(use)g(the)396 + 4719 y Fq([1-7])i Fu(re)o(gular)g(e)o(xpression)g(to)g(indicate)h(1,)f + (2,)h(.)15 b(.)g(.)g(,)24 b(or)h(7.)396 4899 y(Implementation)e + (\002les)i(are)h(located)e(within)g(the)g Ft(src/Engine)k + Fu(directory)-6 b(.)p Black 3734 5547 a Fp(185)p Black + eop + %%Page: 186 186 + 186 185 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-17.)e Fo(Engine)p + Fr(s)511 3637 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 511 3637 a @beginspecial -207 @llx -368 + @lly 184 @urx 48 @ury 3910 @rwi @setspecial + %%BeginDocument: figures/engine-uml.1 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -207 -368 184 48 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + 26.8991 0 moveto + (Engine) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -3 -6.5866 moveto + 92.66382 -6.5866 lineto + 92.66382 11.3686 lineto + -3 11.3686 lineto + closepath stroke + newpath -3 -24.5418 moveto + 92.66382 -24.5418 lineto + 92.66382 -6.5866 lineto + -3 -6.5866 lineto + closepath stroke + newpath -3 -42.497 moveto + 92.66382 -42.497 lineto + 92.66382 -24.5418 lineto + -3 -24.5418 lineto + closepath stroke + 26.8991 0 moveto + (Engine) pcrr8r 9.96265 fshow + newpath -3 -6.5866 moveto + 92.66382 -6.5866 lineto + 92.66382 11.3686 lineto + -3 11.3686 lineto + closepath stroke + -202.90297 -78.78342 moveto + (Engine) pcrr8r 9.96265 fshow + newpath -205.90297 -85.37001 moveto + -98.28407 -85.37001 lineto + -98.28407 -67.41481 lineto + -205.90297 -67.41481 lineto + closepath stroke + -202.90297 -132.99484 moveto + (Engine) pcrr8r 9.96265 fshow + newpath -205.90297 -139.58144 moveto + -26.55305 -139.58144 lineto + -26.55305 -121.62624 lineto + -205.90297 -121.62624 lineto + closepath stroke + -202.90297 -176.24734 moveto + (Engine<1,T,Dynamic>) pcrr8r 9.96265 fshow + newpath -205.90297 -182.83394 moveto + -86.32887 -182.83394 lineto + -86.32887 -164.87874 lineto + -205.90297 -164.87874 lineto + closepath stroke + -202.90297 -252.37656 moveto + (Engine) pcrr8r 9.96265 fshow + -29.55307 -252.37656 moveto + (>) pcrr8r 9.96265 fshow + newpath -205.90297 -258.96315 moveto + -20.57545 -258.96315 lineto + -20.57545 -241.00795 lineto + -205.90297 -241.00795 lineto + closepath stroke + -202.90297 -317.54697 moveto + (Engine) pcrr8r 9.96265 fshow + -65.41856 -317.54697 moveto + (>) pcrr8r 9.96265 fshow + newpath -205.90297 -324.13356 moveto + -56.44096 -324.13356 lineto + -56.44096 -306.17836 lineto + -205.90297 -306.17836 lineto + closepath stroke + -202.90297 -360.79947 moveto + (Engine<1,T,Remote) pcrr8r 9.96265 fshow + -41.50816 -360.79947 moveto + (>) pcrr8r 9.96265 fshow + newpath -205.90297 -367.38606 moveto + -32.53056 -367.38606 lineto + -32.53056 -349.43086 lineto + -205.90297 -349.43086 lineto + closepath stroke + 1 setgray + newpath 89.66382 8.3686 moveto + 182.93652 8.3686 lineto + 182.93652 47.2454 lineto + 89.66382 47.2454 lineto + closepath fill + 0 setgray + 98.64142 36.5742 moveto + (dim) pcrr8r 8.96632 fshow + 120.16072 36.5742 moveto + (D) pcrr8r 8.96632 fshow + 98.64142 25.6152 moveto + (value) pcrr8r 8.96632 fshow + 130.92032 25.6152 moveto + (type) pcrr8r 8.96632 fshow + 157.81941 25.6152 moveto + (T) pcrr8r 8.96632 fshow + 98.64142 14.6563 moveto + (engine) pcrr8r 8.96632 fshow + 136.30013 14.6563 moveto + (tag) pcrr8r 8.96632 fshow + 157.81941 14.6563 moveto + (Tag) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 89.66382 8.3686 moveto + 182.93652 8.3686 lineto + 182.93652 47.2454 lineto + 89.66382 47.2454 lineto + closepath stroke + 1 setgray + newpath -101.28407 -70.41481 moveto + -18.77107 -70.41481 lineto + -18.77107 -42.497 lineto + -101.28407 -42.497 lineto + closepath fill + 0 setgray + -92.30647 -53.16821 moveto + (dim) pcrr8r 8.96632 fshow + -70.78717 -53.16821 moveto + (D) pcrr8r 8.96632 fshow + -92.30647 -64.1271 moveto + (value) pcrr8r 8.96632 fshow + -60.02757 -64.1271 moveto + (type) pcrr8r 8.96632 fshow + -33.12848 -64.1271 moveto + (T) pcrr8r 8.96632 fshow + newpath -101.28407 -70.41481 moveto + -18.77107 -70.41481 lineto + -18.77107 -42.497 lineto + -101.28407 -42.497 lineto + closepath stroke + 1 setgray + newpath -29.55305 -124.62624 moveto + 52.95995 -124.62624 lineto + 52.95995 -96.70842 lineto + -29.55305 -96.70842 lineto + closepath fill + 0 setgray + -20.57545 -107.37964 moveto + (dim) pcrr8r 8.96632 fshow + 0.94385 -107.37964 moveto + (D) pcrr8r 8.96632 fshow + -20.57545 -118.33853 moveto + (value) pcrr8r 8.96632 fshow + 11.70345 -118.33853 moveto + (type) pcrr8r 8.96632 fshow + 38.60254 -118.33853 moveto + (T) pcrr8r 8.96632 fshow + newpath -29.55305 -124.62624 moveto + 52.95995 -124.62624 lineto + 52.95995 -96.70842 lineto + -29.55305 -96.70842 lineto + closepath stroke + 1 setgray + newpath -89.32887 -167.87874 moveto + -6.81587 -167.87874 lineto + -6.81587 -150.91985 lineto + -89.32887 -150.91985 lineto + closepath fill + 0 setgray + -80.35127 -161.59103 moveto + (value) pcrr8r 8.96632 fshow + -48.07237 -161.59103 moveto + (type) pcrr8r 8.96632 fshow + -21.17328 -161.59103 moveto + (T) pcrr8r 8.96632 fshow + newpath -89.32887 -167.87874 moveto + -6.81587 -167.87874 lineto + -6.81587 -150.91985 lineto + -89.32887 -150.91985 lineto + closepath stroke + 1 setgray + newpath -23.57545 -244.00795 moveto + 64.31737 -244.00795 lineto + 64.31737 -194.17235 lineto + -23.57545 -194.17235 lineto + closepath fill + 0 setgray + -14.59785 -204.84355 moveto + (dim) pcrr8r 8.96632 fshow + 6.92145 -204.84355 moveto + (D) pcrr8r 8.96632 fshow + -14.59785 -215.80246 moveto + (value) pcrr8r 8.96632 fshow + 17.68105 -215.80246 moveto + (type) pcrr8r 8.96632 fshow + 44.58014 -215.80246 moveto + (T) pcrr8r 8.96632 fshow + -14.59785 -226.76135 moveto + (layout) pcrr8r 8.96632 fshow + 23.06085 -226.76135 moveto + (tag) pcrr8r 8.96632 fshow + 44.58014 -226.76135 moveto + (LT) pcrr8r 8.96632 fshow + -14.59785 -237.72026 moveto + (patch) pcrr8r 8.96632 fshow + 17.68105 -237.72026 moveto + (tag) pcrr8r 8.96632 fshow + 39.20035 -237.72026 moveto + (PT) pcrr8r 8.96632 fshow + newpath -23.57545 -244.00795 moveto + 64.31737 -244.00795 lineto + 64.31737 -194.17235 lineto + -23.57545 -194.17235 lineto + closepath stroke + 1 setgray + newpath -59.44096 -309.17836 moveto + 33.83174 -309.17836 lineto + 33.83174 -270.30156 lineto + -59.44096 -270.30156 lineto + closepath fill + 0 setgray + -50.46336 -280.97276 moveto + (dim) pcrr8r 8.96632 fshow + -28.94406 -280.97276 moveto + (D) pcrr8r 8.96632 fshow + -50.46336 -291.93176 moveto + (value) pcrr8r 8.96632 fshow + -18.18446 -291.93176 moveto + (type) pcrr8r 8.96632 fshow + 8.71463 -291.93176 moveto + (T) pcrr8r 8.96632 fshow + -50.46336 -302.89067 moveto + (engine) pcrr8r 8.96632 fshow + -12.80466 -302.89067 moveto + (tag) pcrr8r 8.96632 fshow + 8.71463 -302.89067 moveto + (Tag) pcrr8r 8.96632 fshow + newpath -59.44096 -309.17836 moveto + 33.83174 -309.17836 lineto + 33.83174 -270.30156 lineto + -59.44096 -270.30156 lineto + closepath stroke + 1 setgray + newpath -35.53056 -352.43086 moveto + 46.98244 -352.43086 lineto + 46.98244 -335.47197 lineto + -35.53056 -335.47197 lineto + closepath fill + 0 setgray + -26.55296 -346.14316 moveto + (value) pcrr8r 8.96632 fshow + 5.72594 -346.14316 moveto + (type) pcrr8r 8.96632 fshow + 32.62503 -346.14316 moveto + (T) pcrr8r 8.96632 fshow + newpath -35.53056 -352.43086 moveto + 46.98244 -352.43086 lineto + 46.98244 -335.47197 lineto + -35.53056 -335.47197 lineto + closepath stroke + 53.80951 -51.07599 moveto + (Engine.h) pcrr8r 6.97382 fshow + newpath -98.28407 -76.39241 moveto + 92.66382 -76.39241 lineto stroke + newpath -26.55305 -130.60384 moveto + 92.66382 -130.60384 lineto stroke + newpath -86.32887 -173.85634 moveto + 92.66382 -173.85634 lineto stroke + newpath -20.57545 -249.98555 moveto + 92.66382 -249.98555 lineto stroke + newpath -56.44096 -315.15596 moveto + 92.66382 -315.15596 lineto stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath 92.66382 -315.15596 moveto + 92.66382 -42.497 lineto stroke + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + newpath 95.72554 -49.88846 moveto + 92.66382 -42.497 lineto + 89.6021 -49.88846 lineto + closepath + gsave fill grestore stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + [3 3 ] 0 setdash + newpath -131.17197 -349.43086 moveto + -131.17197 -324.13356 lineto stroke + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + newpath -128.11046 -331.52452 moveto + -131.17197 -324.13356 lineto + -134.23347 -331.52452 lineto + closepath + gsave fill grestore stroke + showpage + %%EOF + + %%EndDocument + @endspecial 511 3637 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 511 3637 a Black 3732 5547 a + Fp(186)p Black eop + %%Page: 187 187 + 187 186 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-18.)e Fo(Brick)g + Fr(and)h Fo(CompressibleBrick)c(Engine)p Fr(s)1052 4212 + y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 1052 4212 a @beginspecial -61 @llx -450 @lly 200 @urx + 35 @ury 2610 @rwi @setspecial + %%BeginDocument: figures/engine-uml.2 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -61 -450 200 35 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -50.80945 -2.391 moveto + (Engine) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -60.0859 -8.9776 moveto + 60.0859 -8.9776 lineto + 60.0859 8.9776 lineto + -60.0859 8.9776 lineto + closepath stroke + newpath -60.0859 -26.9328 moveto + 60.0859 -26.9328 lineto + 60.0859 -8.9776 lineto + -60.0859 -8.9776 lineto + closepath stroke + -51.1083 -37.604 moveto + (Engine\(\)) pcrr8r 8.96632 fshow + -51.1083 -48.56291 moveto + (Engine\(Domain\)) pcrr8r 8.96632 fshow + -51.1083 -59.5218 moveto + (Engine\(Domain,T\)) pcrr8r 8.96632 fshow + -51.1083 -70.48071 moveto + (Engine\(Layout\)) pcrr8r 8.96632 fshow + -51.1083 -81.4396 moveto + (Engine\(Engine\)) pcrr8r 8.96632 fshow + -51.1083 -92.3986 moveto + (read\(Loc\)) pcrr8r 8.96632 fshow + -51.1083 -103.35751 moveto + (read\(int) pcrr8r 8.96632 fshow + -2.68991 -103.35751 moveto + (...\)) pcrr8r 8.96632 fshow + -51.1083 -114.3164 moveto + (operator\(\)\(Loc\)) pcrr8r 8.96632 fshow + -51.1083 -125.27531 moveto + (operator\(\)\(int) pcrr8r 8.96632 fshow + 29.58899 -125.27531 moveto + (...\)) pcrr8r 8.96632 fshow + -51.1083 -136.2342 moveto + (domain\(\)) pcrr8r 8.96632 fshow + -51.1083 -147.19312 moveto + (layout\(\)) pcrr8r 8.96632 fshow + newpath -60.0859 -153.4808 moveto + 60.0859 -153.4808 lineto + 60.0859 -26.9328 lineto + -60.0859 -26.9328 lineto + closepath stroke + -57.0859 -271.93439 moveto + (Engine) pcrr8r 9.96265 fshow + newpath -60.0859 -278.52098 moveto + 119.264 -278.52098 lineto + 119.264 -260.56578 lineto + -60.0859 -260.56578 lineto + closepath stroke + newpath -60.0859 -296.47618 moveto + 119.264 -296.47618 lineto + 119.264 -278.52098 lineto + -60.0859 -278.52098 lineto + closepath stroke + -21.51926 -307.14738 moveto + (Engine\(\)) pcrr8r 8.96632 fshow + -21.51926 -318.1063 moveto + (Engine\(Domain\)) pcrr8r 8.96632 fshow + -21.51926 -329.06519 moveto + (Engine\(Domain,T\)) pcrr8r 8.96632 fshow + -21.51926 -340.0241 moveto + (Engine\(Layout\)) pcrr8r 8.96632 fshow + -21.51926 -350.98299 moveto + (Engine\(Engine\)) pcrr8r 8.96632 fshow + -21.51926 -361.94199 moveto + (read\(Loc\)) pcrr8r 8.96632 fshow + -21.51926 -372.9009 moveto + (read\(int) pcrr8r 8.96632 fshow + 26.89914 -372.9009 moveto + (...\)) pcrr8r 8.96632 fshow + -21.51926 -383.85979 moveto + (operator\(\)\(Loc\)) pcrr8r 8.96632 fshow + -21.51926 -394.8187 moveto + (operator\(\)\(int) pcrr8r 8.96632 fshow + 59.17804 -394.8187 moveto + (...\)) pcrr8r 8.96632 fshow + -21.51926 -405.77759 moveto + (domain\(\)) pcrr8r 8.96632 fshow + -21.51926 -416.7365 moveto + (layout\(\)) pcrr8r 8.96632 fshow + newpath -60.0859 -423.02419 moveto + 119.264 -423.02419 lineto + 119.264 -296.47618 lineto + -60.0859 -296.47618 lineto + closepath stroke + 1 setgray + newpath 50.80945 5.9776 moveto + 133.32245 5.9776 lineto + 133.32245 33.89542 lineto + 50.80945 33.89542 lineto + closepath fill + 0 setgray + 59.78705 23.2242 moveto + (dim) pcrr8r 8.96632 fshow + 81.30635 23.2242 moveto + (D) pcrr8r 8.96632 fshow + 59.78705 12.2653 moveto + (value) pcrr8r 8.96632 fshow + 92.06595 12.2653 moveto + (type) pcrr8r 8.96632 fshow + 118.96504 12.2653 moveto + (T) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 50.80945 5.9776 moveto + 133.32245 5.9776 lineto + 133.32245 33.89542 lineto + 50.80945 33.89542 lineto + closepath stroke + 1 setgray + newpath 116.264 -263.56578 moveto + 198.77701 -263.56578 lineto + 198.77701 -235.64796 lineto + 116.264 -235.64796 lineto + closepath fill + 0 setgray + 125.24161 -246.31918 moveto + (dim) pcrr8r 8.96632 fshow + 146.76091 -246.31918 moveto + (D) pcrr8r 8.96632 fshow + 125.24161 -257.27808 moveto + (value) pcrr8r 8.96632 fshow + 157.52051 -257.27808 moveto + (type) pcrr8r 8.96632 fshow + 184.4196 -257.27808 moveto + (T) pcrr8r 8.96632 fshow + newpath 116.264 -263.56578 moveto + 198.77701 -263.56578 lineto + 198.77701 -235.64796 lineto + 116.264 -235.64796 lineto + closepath stroke + 8.9776 -162.0599 moveto + (BrickEngine.h) pcrr8r 6.97382 fshow + 8.9776 -170.03001 moveto + (BrickEngine.cpp) pcrr8r 6.97382 fshow + 8.9776 -178.0001 moveto + (BrickEngine.[1-7].inst.cpp) pcrr8r 6.97382 fshow + 8.9776 -185.97021 moveto + (BrickBase.h) pcrr8r 6.97382 fshow + 8.9776 -193.9403 moveto + (BrickBase.cpp) pcrr8r 6.97382 fshow + 8.9776 -201.91042 moveto + (BrickBase[1-7].cmpl.cpp) pcrr8r 6.97382 fshow + 38.56665 -431.6032 moveto + (CompressibleBrick.h) pcrr8r 6.97382 fshow + 38.56665 -439.57329 moveto + (CompressibleBlock.h) pcrr8r 6.97382 fshow + 38.56665 -447.5434 moveto + (CompressedFraction.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 1052 4212 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 1052 4212 a Black 3730 5547 + a Fp(187)p Black eop + %%Page: 188 188 + 188 187 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-19.)e Fo(Dynamic)f + Fr(and)j Fo(MultiPatch)c(Engine)p Fr(s)1011 4087 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 1011 + 4087 a @beginspecial -62 @llx -446 @lly 209 @urx 24 @ury + 2710 @rwi @setspecial + %%BeginDocument: figures/engine-uml.3 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -62 -446 209 24 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -56.78705 -2.391 moveto + (Engine<1,T,Dynamic>) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -61.69986 -8.9776 moveto + 61.69986 -8.9776 lineto + 61.69986 8.9776 lineto + -61.69986 8.9776 lineto + closepath stroke + newpath -61.69986 -26.9328 moveto + 61.69986 -26.9328 lineto + 61.69986 -8.9776 lineto + -61.69986 -8.9776 lineto + closepath stroke + -52.72226 -37.60402 moveto + (Engine\(\)) pcrr8r 8.96632 fshow + -52.72226 -48.56291 moveto + (Engine\(Domain\)) pcrr8r 8.96632 fshow + -52.72226 -59.52182 moveto + (Engine\(Domain,T\)) pcrr8r 8.96632 fshow + -52.72226 -70.48071 moveto + (Engine\(Layout\)) pcrr8r 8.96632 fshow + -52.72226 -81.43962 moveto + (Engine\(Engine\)) pcrr8r 8.96632 fshow + -52.72226 -92.39851 moveto + (read\(Loc\)) pcrr8r 8.96632 fshow + -52.72226 -103.35742 moveto + (read\(int) pcrr8r 8.96632 fshow + -4.30386 -103.35742 moveto + (...\)) pcrr8r 8.96632 fshow + -52.72226 -114.31631 moveto + (operator\(\)\(Loc\)) pcrr8r 8.96632 fshow + -52.72226 -125.27522 moveto + (operator\(\)\(int) pcrr8r 8.96632 fshow + 27.97504 -125.27522 moveto + (...\)) pcrr8r 8.96632 fshow + -52.72226 -136.23412 moveto + (domain\(\)) pcrr8r 8.96632 fshow + -52.72226 -147.19302 moveto + (layout\(\)) pcrr8r 8.96632 fshow + -52.72226 -158.15192 moveto + (create\(CreateSize) pcrr8r 8.96632 fshow + 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap + newpath 39.27264 -157.95271 moveto + 41.96254 -157.95271 lineto stroke + 41.96254 -158.15192 moveto + (t\)) pcrr8r 8.96632 fshow + -52.72226 -169.11082 moveto + (destroy\(Domain\)) pcrr8r 8.96632 fshow + -52.72226 -180.06972 moveto + (destroy\(Iter,) pcrr8r 8.96632 fshow + 22.59525 -180.06972 moveto + (Iter\)) pcrr8r 8.96632 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -61.69986 -186.35742 moveto + 61.69986 -186.35742 lineto + 61.69986 -26.9328 lineto + -61.69986 -26.9328 lineto + closepath stroke + -58.69986 -294.84839 moveto + (Engine) pcrr8r 9.96265 fshow + 114.65004 -294.84839 moveto + (>) pcrr8r 9.96265 fshow + newpath -61.69986 -301.43498 moveto + 123.62766 -301.43498 lineto + 123.62766 -283.47978 lineto + -61.69986 -283.47978 lineto + closepath stroke + newpath -61.69986 -319.39018 moveto + 123.62766 -319.39018 lineto + 123.62766 -301.43498 lineto + -61.69986 -301.43498 lineto + closepath stroke + -20.14441 -330.0614 moveto + (Engine\(\)) pcrr8r 8.96632 fshow + -20.14441 -341.0203 moveto + (Engine\(Layout\)) pcrr8r 8.96632 fshow + -20.14441 -351.9792 moveto + (Engine\(Engine\)) pcrr8r 8.96632 fshow + -20.14441 -362.9381 moveto + (read\(Loc\)) pcrr8r 8.96632 fshow + -20.14441 -373.897 moveto + (read\(int) pcrr8r 8.96632 fshow + 28.27399 -373.897 moveto + (...\)) pcrr8r 8.96632 fshow + -20.14441 -384.8559 moveto + (operator\(\)\(Loc\)) pcrr8r 8.96632 fshow + -20.14441 -395.8148 moveto + (operator\(\)\(int) pcrr8r 8.96632 fshow + 60.55289 -395.8148 moveto + (...\)) pcrr8r 8.96632 fshow + -20.14441 -406.7737 moveto + (domain\(\)) pcrr8r 8.96632 fshow + -20.14441 -417.7326 moveto + (innerDomain\(\)) pcrr8r 8.96632 fshow + -20.14441 -428.6915 moveto + (layout\(\)) pcrr8r 8.96632 fshow + newpath -61.69986 -434.9792 moveto + 123.62766 -434.9792 lineto + 123.62766 -319.39018 lineto + -61.69986 -319.39018 lineto + closepath stroke + 1 setgray + newpath 56.78705 5.9776 moveto + 139.30005 5.9776 lineto + 139.30005 22.9365 lineto + 56.78705 22.9365 lineto + closepath fill + 0 setgray + 65.76465 12.2653 moveto + (value) pcrr8r 8.96632 fshow + 98.04355 12.2653 moveto + (type) pcrr8r 8.96632 fshow + 124.94264 12.2653 moveto + (T) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 56.78705 5.9776 moveto + 139.30005 5.9776 lineto + 139.30005 22.9365 lineto + 56.78705 22.9365 lineto + closepath stroke + 1 setgray + newpath 120.62766 -286.47978 moveto + 208.52048 -286.47978 lineto + 208.52048 -236.64418 lineto + 120.62766 -236.64418 lineto + closepath fill + 0 setgray + 129.60526 -247.31538 moveto + (dim) pcrr8r 8.96632 fshow + 151.12456 -247.31538 moveto + (D) pcrr8r 8.96632 fshow + 129.60526 -258.27429 moveto + (value) pcrr8r 8.96632 fshow + 161.88416 -258.27429 moveto + (type) pcrr8r 8.96632 fshow + 188.78325 -258.27429 moveto + (T) pcrr8r 8.96632 fshow + 129.60526 -269.23318 moveto + (layout) pcrr8r 8.96632 fshow + 167.26396 -269.23318 moveto + (tag) pcrr8r 8.96632 fshow + 188.78325 -269.23318 moveto + (LT) pcrr8r 8.96632 fshow + 129.60526 -280.1921 moveto + (patch) pcrr8r 8.96632 fshow + 161.88416 -280.1921 moveto + (tag) pcrr8r 8.96632 fshow + 183.40346 -280.1921 moveto + (PT) pcrr8r 8.96632 fshow + newpath 120.62766 -286.47978 moveto + 208.52048 -286.47978 lineto + 208.52048 -236.64418 lineto + 120.62766 -236.64418 lineto + closepath stroke + 8.9776 -194.93652 moveto + (DynamicEngine.h) pcrr8r 6.97382 fshow + 8.9776 -202.90663 moveto + (DynamicEngine.cpp) pcrr8r 6.97382 fshow + 39.9415 -443.5582 moveto + (MultiPatchEngine.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 1011 4087 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 1011 4087 a Black 3734 5547 + a Fp(188)p Black eop + %%Page: 189 189 + 189 188 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-20.)e Fo(Remote)g(Engine)p + Fr(s)1081 3846 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 1081 3846 a @beginspecial -75 @llx -395 + @lly 179 @urx 46 @ury 2540 @rwi @setspecial + %%BeginDocument: figures/engine-uml.4 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -75 -395 179 46 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -71.731 -2.391 moveto + (Engine) pcrr8r 9.96265 fshow + 65.7534 -2.391 moveto + (>) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -74.731 -8.9776 moveto + 74.731 -8.9776 lineto + 74.731 8.9776 lineto + -74.731 8.9776 lineto + closepath stroke + newpath -74.731 -26.9328 moveto + 74.731 -26.9328 lineto + 74.731 -8.9776 lineto + -74.731 -8.9776 lineto + closepath stroke + -51.10832 -37.60402 moveto + (Engine\(\)) pcrr8r 8.96632 fshow + -51.10832 -48.56291 moveto + (Engine\(Domain\)) pcrr8r 8.96632 fshow + -51.10832 -59.52182 moveto + (Engine\(Domain,T\)) pcrr8r 8.96632 fshow + -51.10832 -70.48071 moveto + (Engine\(Layout\)) pcrr8r 8.96632 fshow + -51.10832 -81.43962 moveto + (Engine\(Engine\)) pcrr8r 8.96632 fshow + -51.10832 -92.39851 moveto + (read\(Loc\)) pcrr8r 8.96632 fshow + -51.10832 -103.35742 moveto + (read\(int) pcrr8r 8.96632 fshow + -2.68993 -103.35742 moveto + (...\)) pcrr8r 8.96632 fshow + -51.10832 -114.31631 moveto + (operator\(\)\(Loc\)) pcrr8r 8.96632 fshow + -51.10832 -125.27522 moveto + (operator\(\)\(int) pcrr8r 8.96632 fshow + 29.58897 -125.27522 moveto + (...\)) pcrr8r 8.96632 fshow + -51.10832 -136.23412 moveto + (domain\(\)) pcrr8r 8.96632 fshow + newpath -74.73103 -142.52182 moveto + 74.731 -142.52182 lineto + 74.731 -26.9328 lineto + -74.73103 -26.9328 lineto + closepath stroke + -71.731 -210.16586 moveto + (Engine<1,T,Remote) pcrr8r 9.96265 fshow + 89.6638 -210.16586 moveto + (>) pcrr8r 9.96265 fshow + newpath -74.731 -216.75246 moveto + 98.6414 -216.75246 lineto + 98.6414 -198.79726 lineto + -74.731 -198.79726 lineto + closepath stroke + newpath -74.731 -234.70766 moveto + 98.6414 -234.70766 lineto + 98.6414 -216.75246 lineto + -74.731 -216.75246 lineto + closepath stroke + -40.76707 -245.37888 moveto + (Engine\(\)) pcrr8r 8.96632 fshow + -40.76707 -256.33777 moveto + (Engine\(Domain\)) pcrr8r 8.96632 fshow + -40.76707 -267.29668 moveto + (Engine\(Domain,T\)) pcrr8r 8.96632 fshow + -40.76707 -278.25557 moveto + (Engine\(Layout\)) pcrr8r 8.96632 fshow + -40.76707 -289.21448 moveto + (Engine\(Engine\)) pcrr8r 8.96632 fshow + -40.76707 -300.17337 moveto + (read\(Loc\)) pcrr8r 8.96632 fshow + -40.76707 -311.13237 moveto + (read\(int) pcrr8r 8.96632 fshow + 7.65132 -311.13237 moveto + (...\)) pcrr8r 8.96632 fshow + -40.76707 -322.09128 moveto + (operator\(\)\(Loc\)) pcrr8r 8.96632 fshow + -40.76707 -333.05017 moveto + (operator\(\)\(int) pcrr8r 8.96632 fshow + 39.93022 -333.05017 moveto + (...\)) pcrr8r 8.96632 fshow + -40.76707 -344.00908 moveto + (domain\(\)) pcrr8r 8.96632 fshow + -40.76707 -354.96797 moveto + (create\(CreateSize) pcrr8r 8.96632 fshow + 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap + newpath 51.22783 -354.76868 moveto + 53.91772 -354.76868 lineto stroke + 53.91772 -354.96797 moveto + (t\)) pcrr8r 8.96632 fshow + -40.76707 -365.92688 moveto + (destroy\(Domain\)) pcrr8r 8.96632 fshow + -40.76707 -376.88577 moveto + (destroy\(Iter,) pcrr8r 8.96632 fshow + 34.55043 -376.88577 moveto + (Iter\)) pcrr8r 8.96632 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -74.73103 -383.17348 moveto + 98.6414 -383.17348 lineto + 98.6414 -234.70766 lineto + -74.73103 -234.70766 lineto + closepath stroke + 1 setgray + newpath 71.731 5.9776 moveto + 165.00371 5.9776 lineto + 165.00371 44.8544 lineto + 71.731 44.8544 lineto + closepath fill + 0 setgray + 80.7086 34.1832 moveto + (dim) pcrr8r 8.96632 fshow + 102.2279 34.1832 moveto + (D) pcrr8r 8.96632 fshow + 80.7086 23.2242 moveto + (value) pcrr8r 8.96632 fshow + 112.9875 23.2242 moveto + (type) pcrr8r 8.96632 fshow + 139.8866 23.2242 moveto + (T) pcrr8r 8.96632 fshow + 80.7086 12.26529 moveto + (engine) pcrr8r 8.96632 fshow + 118.36731 12.26529 moveto + (tag) pcrr8r 8.96632 fshow + 139.8866 12.26529 moveto + (Tag) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 71.731 5.9776 moveto + 165.00371 5.9776 lineto + 165.00371 44.8544 lineto + 71.731 44.8544 lineto + closepath stroke + 1 setgray + newpath 95.6414 -201.79726 moveto + 178.1544 -201.79726 lineto + 178.1544 -184.83836 lineto + 95.6414 -184.83836 lineto + closepath fill + 0 setgray + 104.619 -195.50955 moveto + (value) pcrr8r 8.96632 fshow + 136.8979 -195.50955 moveto + (type) pcrr8r 8.96632 fshow + 163.797 -195.50955 moveto + (T) pcrr8r 8.96632 fshow + newpath 95.6414 -201.79726 moveto + 178.1544 -201.79726 lineto + 178.1544 -184.83836 lineto + 95.6414 -184.83836 lineto + closepath stroke + 8.97758 -151.10081 moveto + (RemoteEngine.h) pcrr8r 6.97382 fshow + 20.93279 -391.75247 moveto + (RemoteDynamicEngine.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 1081 3846 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 1081 3846 a -2 4398 a Fx(C.6.)47 + b(Distrib)m(uted)h(Computation)396 4614 y Fu(In)38 b(this)e(section,)g + (we)i(present)f(UML)f(class)h(diagrams)g(for)g(the)g(classes)g(used)g + (when)g(declaring)396 4743 y(distrib)n(uted)23 b(computation.)g(W)-8 + b(e)26 b(use)e(abbre)n(viations)f(in)i(parameter)g(lists:)396 + 5022 y Fr(T)-9 b(able)26 b(C-1.)e(Ab)o(br)n(e)o(viations)p + Black 3734 5547 a Fp(189)p Black eop + %%Page: 190 190 + 190 189 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 85 a Fv(abbre)o(viation)1153 b(meaning)396 + 226 y Fu(CM)1589 b Fq(ContextMapper)396 368 y Fu(DT)1611 + b Fq(DistributedTag)396 510 y Fu(GL)g Fq(GuardLayers)396 + 651 y Fu(Iv)1661 b Fq(Interval)396 793 y Fu(List_t)1510 + b Fq(std::vector)22 b Fu(of)j(pointers)f(to)g Fq(Node)p + Fu(s)g(of)2140 922 y Fq(Domain)p Fu(s)396 1064 y(P)o(atchList_t)1290 + b Fq(std::vector)22 b Fu(of)2140 1194 y Fq(Interval)p + Fu(s)396 1335 y(R)-6 b(T)1623 b Fq(ReplicatedTag)396 + 1477 y Fu(SpTlLa)1445 b Fq(SparseTileLayout)396 1706 + y Fu(P)o(artitions)25 b(specify)h(ho)n(w)g(a)g(domain)g(will)f(be)h + (split)g(into)f(patches,)h(or)g(pieces.)h(Figure)f(C-21)h(intro-)396 + 1836 y(duces)e(the)g(abstract)h(\223P)o(artition\224)e(class.)h(The)g + (class)g(e)o(xists)f(only)g(conceptually)-6 b(,)24 b(not)h(appearing)g + (in)396 1965 y(an)o(y)d(source)g(code.)g(Instead)f(four)h(classes,)g + (appearing)g(in)f(subsequent)g(diagrams,)g(realize)i(it.)e(Ev)o(en)396 + 2095 y(though)26 b(users)i(rarely)f(use)h(an)o(y)e(of)i(their)f(member) + g(functions,)f(the)h(diagrams)g(list)f(them.)g(All)h(\002les)396 + 2224 y(are)f(relati)n(v)o(e)e(to)g(the)h Ft(src/Partition)j + Fu(subdirectory)-6 b(.)p Black 3734 5547 a Fp(190)p Black + eop + %%Page: 191 191 + 191 190 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-21.)e(P)o(artitions)719 + 3287 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 719 3287 a @beginspecial -159 @llx -350 @lly 182 + @urx 24 @ury 3410 @rwi @setspecial + %%BeginDocument: figures/distributed-uml.5 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -159 -350 182 24 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman Courier-Oblique + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /pcrro8r /Courier-Oblique def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -26.89915 -2.391 moveto + (Partition) pcrro8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -158.5366 -8.9776 moveto + 158.5366 -8.9776 lineto + 158.5366 8.9776 lineto + -158.5366 8.9776 lineto + closepath stroke + newpath -158.5366 -26.9328 moveto + 158.5366 -26.9328 lineto + 158.5366 -8.9776 lineto + -158.5366 -8.9776 lineto + closepath stroke + -149.559 -37.604 moveto + (Partition\(\)) pcrr8r 8.96632 fshow + -149.559 -48.56291 moveto + (Partition\(const) pcrr8r 8.96632 fshow + -63.4819 -48.56291 moveto + (Partition&\)) pcrr8r 8.96632 fshow + -151.05191 -59.5218 moveto + (\230) ptmr8r 8.96632 fshow + -148.0643 -59.5218 moveto + (Partition\(\)) pcrr8r 8.96632 fshow + -149.559 -70.48071 moveto + (Partition&) pcrr8r 8.96632 fshow + -90.38101 -70.48071 moveto + (operator=\(const) pcrr8r 8.96632 fshow + -4.30391 -70.48071 moveto + (Partition&\)) pcrr8r 8.96632 fshow + -149.559 -81.4396 moveto + (int) pcrr8r 8.96632 fshow + -128.0397 -81.4396 moveto + (maxSize\(\)) pcrr8r 8.96632 fshow + -149.559 -92.39851 moveto + (bool) pcrr8r 8.96632 fshow + -122.65991 -92.39851 moveto + (hasGuards\(\)) pcrr8r 8.96632 fshow + -149.559 -103.3574 moveto + (bool) pcrr8r 8.96632 fshow + -122.65991 -103.3574 moveto + (hasInternalGuards\(\)) pcrr8r 8.96632 fshow + -149.559 -114.31631 moveto + (bool) pcrr8r 8.96632 fshow + -122.65991 -114.31631 moveto + (hasExternalGuards\(\)) pcrr8r 8.96632 fshow + -149.559 -125.2752 moveto + (const) pcrr8r 8.96632 fshow + -117.2801 -125.2752 moveto + (GuardLayers&) pcrr8r 8.96632 fshow + -47.3424 -125.2752 moveto + (internalGuards\(\)) pcrr8r 8.96632 fshow + -149.559 -136.23412 moveto + (const) pcrr8r 8.96632 fshow + -117.2801 -136.23412 moveto + (GuardLayers&) pcrr8r 8.96632 fshow + -47.3424 -136.23412 moveto + (externalGuards\(\)) pcrr8r 8.96632 fshow + -149.559 -147.19301 moveto + (int) pcrr8r 8.96632 fshow + -128.0397 -147.19301 moveto + (partition\(const) pcrr8r 8.96632 fshow + -41.9626 -147.19301 moveto + (Dom&,) pcrr8r 8.96632 fshow + -9.6837 -147.19301 moveto + (List) pcrr8r 8.96632 fshow + 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap + newpath 12.37349 -146.9938 moveto + 15.06349 -146.9938 lineto stroke + 15.06349 -147.19301 moveto + (t&,) pcrr8r 8.96632 fshow + 36.5828 -147.19301 moveto + (const) pcrr8r 8.96632 fshow + 68.8617 -147.19301 moveto + (ContextMapper&\)) pcrr8r 8.96632 fshow + -149.559 -158.15192 moveto + (int) pcrr8r 8.96632 fshow + -128.0397 -158.15192 moveto + (partition\(const) pcrr8r 8.96632 fshow + -41.9626 -158.15192 moveto + (Dom&,) pcrr8r 8.96632 fshow + -9.6837 -158.15192 moveto + (List) pcrr8r 8.96632 fshow + newpath 12.37349 -157.95271 moveto + 15.06349 -157.95271 lineto stroke + 15.06349 -158.15192 moveto + (t&\)) pcrr8r 8.96632 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -158.5366 -164.4396 moveto + 158.5366 -164.4396 lineto + 158.5366 -26.9328 lineto + -158.5366 -26.9328 lineto + closepath stroke + -155.5366 -204.15466 moveto + (GridPartition) pcrr8r 9.96265 fshow + newpath -158.5366 -210.74126 moveto + -74.82799 -210.74126 lineto + -74.82799 -192.78606 lineto + -158.5366 -192.78606 lineto + closepath stroke + -155.5366 -250.45631 moveto + (SpatialPartition) pcrr8r 9.96265 fshow + newpath -158.5366 -257.04291 moveto + -56.89531 -257.04291 lineto + -56.89531 -239.0877 lineto + -158.5366 -239.0877 lineto + closepath stroke + -155.5366 -296.75797 moveto + (TilePartition) pcrr8r 9.96265 fshow + newpath -158.5366 -303.34456 moveto + -74.82799 -303.34456 lineto + -74.82799 -285.38936 lineto + -158.5366 -285.38936 lineto + closepath stroke + -155.5366 -343.05962 moveto + (UniformGridPartition) pcrr8r 9.96265 fshow + newpath -158.5366 -349.64621 moveto + -32.98491 -349.64621 lineto + -32.98491 -331.69101 lineto + -158.5366 -331.69101 lineto + closepath stroke + 1 setgray + newpath 136.10945 5.9776 moveto + 180.96376 5.9776 lineto + 180.96376 22.9365 lineto + 136.10945 22.9365 lineto + closepath fill + 0 setgray + 145.08705 12.2653 moveto + (dim) pcrr8r 8.96632 fshow + 166.60635 12.2653 moveto + (D) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 136.10945 5.9776 moveto + 180.96376 5.9776 lineto + 180.96376 22.9365 lineto + 136.10945 22.9365 lineto + closepath stroke + 1 setgray + newpath -77.82799 -195.78606 moveto + -32.97368 -195.78606 lineto + -32.97368 -178.82716 lineto + -77.82799 -178.82716 lineto + closepath fill + 0 setgray + -68.85039 -189.49835 moveto + (dim) pcrr8r 8.96632 fshow + -47.33109 -189.49835 moveto + (D) pcrr8r 8.96632 fshow + newpath -77.82799 -195.78606 moveto + -32.97368 -195.78606 lineto + -32.97368 -178.82716 lineto + -77.82799 -178.82716 lineto + closepath stroke + 1 setgray + newpath -59.89531 -242.0877 moveto + 6.47829 -242.0877 lineto + 6.47829 -225.12881 lineto + -59.89531 -225.12881 lineto + closepath fill + 0 setgray + -50.91771 -235.8 moveto + (RefLayout) pcrr8r 8.96632 fshow + newpath -59.89531 -242.0877 moveto + 6.47829 -242.0877 lineto + 6.47829 -225.12881 lineto + -59.89531 -225.12881 lineto + closepath stroke + 1 setgray + newpath -77.82799 -288.38936 moveto + -32.97368 -288.38936 lineto + -32.97368 -271.43047 lineto + -77.82799 -271.43047 lineto + closepath fill + 0 setgray + -68.85039 -282.10165 moveto + (dim) pcrr8r 8.96632 fshow + -47.33109 -282.10165 moveto + (D) pcrr8r 8.96632 fshow + newpath -77.82799 -288.38936 moveto + -32.97368 -288.38936 lineto + -32.97368 -271.43047 lineto + -77.82799 -271.43047 lineto + closepath stroke + 1 setgray + newpath -35.98491 -334.69101 moveto + 8.8694 -334.69101 lineto + 8.8694 -317.73212 lineto + -35.98491 -317.73212 lineto + closepath fill + 0 setgray + -27.00731 -328.4033 moveto + (dim) pcrr8r 8.96632 fshow + -5.488 -328.4033 moveto + (D) pcrr8r 8.96632 fshow + newpath -35.98491 -334.69101 moveto + 8.8694 -334.69101 lineto + 8.8694 -317.73212 lineto + -35.98491 -317.73212 lineto + closepath stroke + [] 0 setdash + newpath 63.41368 -164.4396 moveto + 56.32706 -176.71402 lineto + 70.5003 -176.71402 lineto + closepath stroke + [3 3 ] 0 setdash + newpath -74.82799 -201.76366 moveto + 63.41368 -201.76366 lineto stroke + newpath -56.89531 -248.0653 moveto + 63.41368 -248.0653 lineto stroke + newpath -74.82799 -294.36696 moveto + 63.41368 -294.36696 lineto stroke + newpath -32.98491 -340.66861 moveto + 63.41368 -340.66861 lineto stroke + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath 63.41368 -340.66861 moveto + 63.41368 -176.71402 lineto stroke + showpage + %%EOF + + %%EndDocument + @endspecial 719 3287 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 719 3287 a Black 3734 5547 a + Fp(191)p Black eop + %%Page: 192 192 + 192 191 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-22.)e(Grid)h(P)o(artitions) + 486 3754 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 486 3754 a @beginspecial -187 @llx -406 @lly + 210 @urx 24 @ury 3970 @rwi @setspecial + %%BeginDocument: figures/distributed-uml.4 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -187 -406 210 24 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -38.85431 -2.391 moveto + (GridPartition) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -186.51166 -8.9776 moveto + 186.51166 -8.9776 lineto + 186.51166 8.9776 lineto + -186.51166 8.9776 lineto + closepath stroke + newpath -186.51166 -26.9328 moveto + 186.51166 -26.9328 lineto + 186.51166 -8.9776 lineto + -186.51166 -8.9776 lineto + closepath stroke + -177.53406 -37.604 moveto + (GridPartition\(\)) pcrr8r 8.96632 fshow + -177.53406 -48.56291 moveto + (GridPartition\(const) pcrr8r 8.96632 fshow + -69.93765 -48.56291 moveto + (Grid&\)) pcrr8r 8.96632 fshow + -177.53406 -59.5218 moveto + (GridPartition\(const) pcrr8r 8.96632 fshow + -69.93765 -59.5218 moveto + (Grid&,) pcrr8r 8.96632 fshow + -32.27896 -59.5218 moveto + (const) pcrr8r 8.96632 fshow + -0.00006 -59.5218 moveto + (GuardLayers&\)) pcrr8r 8.96632 fshow + -177.53406 -70.48071 moveto + (GridPartition\(const) pcrr8r 8.96632 fshow + -69.93765 -70.48071 moveto + (Grid&,) pcrr8r 8.96632 fshow + -32.27896 -70.48071 moveto + (const) pcrr8r 8.96632 fshow + -0.00006 -70.48071 moveto + (GuardLayers&,) pcrr8r 8.96632 fshow + 75.31744 -70.48071 moveto + (const) pcrr8r 8.96632 fshow + 107.59634 -70.48071 moveto + (GuardLayers&\)) pcrr8r 8.96632 fshow + -177.53406 -81.4396 moveto + (GridPartition\(const) pcrr8r 8.96632 fshow + -69.93765 -81.4396 moveto + (Loc&\)) pcrr8r 8.96632 fshow + -177.53406 -92.39851 moveto + (GridPartition\(const) pcrr8r 8.96632 fshow + -69.93765 -92.39851 moveto + (Loc&,) pcrr8r 8.96632 fshow + -37.65875 -92.39851 moveto + (const) pcrr8r 8.96632 fshow + -5.37985 -92.39851 moveto + (GuardLayers&\)) pcrr8r 8.96632 fshow + -177.53406 -103.3574 moveto + (GridPartition\(const) pcrr8r 8.96632 fshow + -69.93765 -103.3574 moveto + (Loc&,) pcrr8r 8.96632 fshow + -37.65875 -103.3574 moveto + (const) pcrr8r 8.96632 fshow + -5.37985 -103.3574 moveto + (GuardLayers&,) pcrr8r 8.96632 fshow + 69.93764 -103.3574 moveto + (const) pcrr8r 8.96632 fshow + 102.21654 -103.3574 moveto + (GuardLayers&\)) pcrr8r 8.96632 fshow + -177.53406 -114.3164 moveto + (GridPartition\(const) pcrr8r 8.96632 fshow + -69.93765 -114.3164 moveto + (GridPartition&\)) pcrr8r 8.96632 fshow + -177.53406 -125.27531 moveto + (GridPartition\(const) pcrr8r 8.96632 fshow + -69.93765 -125.27531 moveto + (UniformGridPartition&\)) pcrr8r 8.96632 fshow + -179.02696 -136.2342 moveto + (\230) ptmr8r 8.96632 fshow + -176.03935 -136.2342 moveto + (GridPartition\(\)) pcrr8r 8.96632 fshow + -177.53406 -147.19312 moveto + (GridPartition&) pcrr8r 8.96632 fshow + -96.83676 -147.19312 moveto + (operator=\(const) pcrr8r 8.96632 fshow + -10.75966 -147.19312 moveto + (GridPartition&\)) pcrr8r 8.96632 fshow + -177.53406 -158.15201 moveto + (const) pcrr8r 8.96632 fshow + -145.25516 -158.15201 moveto + (Loc&) pcrr8r 8.96632 fshow + -118.35606 -158.15201 moveto + (blocks\(\)) pcrr8r 8.96632 fshow + -177.53406 -169.11092 moveto + (bool) pcrr8r 8.96632 fshow + -150.63496 -169.11092 moveto + (hasCustomEdgeGuards\(\)) pcrr8r 8.96632 fshow + -177.53406 -180.06981 moveto + (const) pcrr8r 8.96632 fshow + -145.25516 -180.06981 moveto + (Grid&) pcrr8r 8.96632 fshow + -112.97626 -180.06981 moveto + (grid\(\)) pcrr8r 8.96632 fshow + -177.53406 -191.02872 moveto + (void) pcrr8r 8.96632 fshow + -150.63496 -191.02872 moveto + (print\(Out&\);) pcrr8r 8.96632 fshow + newpath -186.51166 -197.3164 moveto + 186.51166 -197.3164 lineto + 186.51166 -26.9328 lineto + -186.51166 -26.9328 lineto + closepath stroke + -75.9153 -265.37791 moveto + (UniformGridPartition) pcrr8r 9.96265 fshow + newpath -186.51166 -271.96451 moveto + 154.23276 -271.96451 lineto + 154.23276 -254.00931 lineto + -186.51166 -254.00931 lineto + closepath stroke + newpath -186.51166 -289.91971 moveto + 154.23276 -289.91971 lineto + 154.23276 -271.96451 lineto + -186.51166 -271.96451 lineto + closepath stroke + -177.53406 -300.59093 moveto + (UniformGridPartition\(\)) pcrr8r 8.96632 fshow + -177.53406 -311.54982 moveto + (UniformGridPartition\(const) pcrr8r 8.96632 fshow + -32.27896 -311.54982 moveto + (GL&\)) pcrr8r 8.96632 fshow + -177.53406 -322.50873 moveto + (UniformGridPartition\(const) pcrr8r 8.96632 fshow + -32.27896 -322.50873 moveto + (Loc&\)) pcrr8r 8.96632 fshow + -177.53406 -333.46762 moveto + (UniformGridPartition\(const) pcrr8r 8.96632 fshow + -32.27896 -333.46762 moveto + (Loc&,) pcrr8r 8.96632 fshow + -0.00006 -333.46762 moveto + (const) pcrr8r 8.96632 fshow + 32.27895 -333.46762 moveto + (GL&\)) pcrr8r 8.96632 fshow + -177.53406 -344.42662 moveto + (UniformGridPartition\(const) pcrr8r 8.96632 fshow + -32.27896 -344.42662 moveto + (Loc&,) pcrr8r 8.96632 fshow + -0.00006 -344.42662 moveto + (const) pcrr8r 8.96632 fshow + 32.27895 -344.42662 moveto + (GL&,) pcrr8r 8.96632 fshow + 59.17804 -344.42662 moveto + (const) pcrr8r 8.96632 fshow + 91.45694 -344.42662 moveto + (GL&\)) pcrr8r 8.96632 fshow + -177.53406 -355.38553 moveto + (UniformGridPartition\(const) pcrr8r 8.96632 fshow + -32.27896 -355.38553 moveto + (UniformGridPartition&\)) pcrr8r 8.96632 fshow + -179.02696 -366.34442 moveto + (\230) ptmr8r 8.96632 fshow + -176.03935 -366.34442 moveto + (UniformGridPartition\(\)) pcrr8r 8.96632 fshow + -177.53406 -377.30333 moveto + (UniformGridPartition&) pcrr8r 8.96632 fshow + -59.17805 -377.30333 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 26.89905 -377.30333 moveto + (UniformGridPartition&\)) pcrr8r 8.96632 fshow + -177.53406 -388.26222 moveto + (const) pcrr8r 8.96632 fshow + -145.25516 -388.26222 moveto + (Loc&) pcrr8r 8.96632 fshow + -118.35606 -388.26222 moveto + (blocks\(\)) pcrr8r 8.96632 fshow + newpath -186.51166 -394.54993 moveto + 154.23276 -394.54993 lineto + 154.23276 -289.91971 lineto + -186.51166 -289.91971 lineto + closepath stroke + 1 setgray + newpath 164.0845 5.9776 moveto + 208.93881 5.9776 lineto + 208.93881 22.9365 lineto + 164.0845 22.9365 lineto + closepath fill + 0 setgray + 173.0621 12.2653 moveto + (dim) pcrr8r 8.96632 fshow + 194.5814 12.2653 moveto + (D) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 164.0845 5.9776 moveto + 208.93881 5.9776 lineto + 208.93881 22.9365 lineto + 164.0845 22.9365 lineto + closepath stroke + 1 setgray + newpath 131.8056 -257.00931 moveto + 176.65991 -257.00931 lineto + 176.65991 -240.05042 lineto + 131.8056 -240.05042 lineto + closepath fill + 0 setgray + 140.7832 -250.7216 moveto + (dim) pcrr8r 8.96632 fshow + 162.3025 -250.7216 moveto + (D) pcrr8r 8.96632 fshow + newpath 131.8056 -257.00931 moveto + 176.65991 -257.00931 lineto + 176.65991 -240.05042 lineto + 131.8056 -240.05042 lineto + closepath stroke + 8.9776 -205.8954 moveto + (GridPartition.h) pcrr8r 6.97382 fshow + -7.16185 -403.12892 moveto + (UniformGridPartition.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 486 3754 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 486 3754 a Black 3734 5547 a + Fp(192)p Black eop + %%Page: 193 193 + 193 192 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-23.)e(Other)i(P)o + (artitions)515 3296 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 515 3296 a @beginspecial -150 @llx + -351 @lly 240 @urx 24 @ury 3900 @rwi @setspecial + %%BeginDocument: figures/distributed-uml.3 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -150 -351 240 24 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -47.82065 -2.391 moveto + (SpatialPartition) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -148.8529 -8.9776 moveto + 148.8529 -8.9776 lineto + 148.8529 8.9776 lineto + -148.8529 8.9776 lineto + closepath stroke + newpath -148.8529 -26.9328 moveto + 148.8529 -26.9328 lineto + 148.8529 -8.9776 lineto + -148.8529 -8.9776 lineto + closepath stroke + -139.8753 -37.60402 moveto + (SpatialPartition\(const) pcrr8r 8.96632 fshow + -16.13951 -37.60402 moveto + (RefLayout&\)) pcrr8r 8.96632 fshow + -139.8753 -48.56291 moveto + (SpatialPartition\(const) pcrr8r 8.96632 fshow + -16.13951 -48.56291 moveto + (SpatialPartition&\)) pcrr8r 8.96632 fshow + -141.36821 -59.52182 moveto + (\230) ptmr8r 8.96632 fshow + -138.3806 -59.52182 moveto + (SpatialPartition\(\)) pcrr8r 8.96632 fshow + -139.8753 -70.48071 moveto + (SpatialPartition&) pcrr8r 8.96632 fshow + -43.0385 -70.48071 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 43.03859 -70.48071 moveto + (SpatialPartition&\)) pcrr8r 8.96632 fshow + -139.8753 -81.43971 moveto + (Loc<1>) pcrr8r 8.96632 fshow + -102.2166 -81.43971 moveto + (blocks\(\)) pcrr8r 8.96632 fshow + -139.8753 -92.39862 moveto + (int) pcrr8r 8.96632 fshow + -118.356 -92.39862 moveto + (context\(\)) pcrr8r 8.96632 fshow + -139.8753 -103.35751 moveto + (bool) pcrr8r 8.96632 fshow + -112.97621 -103.35751 moveto + (hasCustomEdgeGuards\(\)) pcrr8r 8.96632 fshow + -139.8753 -114.31642 moveto + (const) pcrr8r 8.96632 fshow + -107.5964 -114.31642 moveto + (RefLayout&) pcrr8r 8.96632 fshow + -48.41841 -114.31642 moveto + (reference\(\)) pcrr8r 8.96632 fshow + -139.8753 -125.27531 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -125.27531 moveto + (print\(Out&\)) pcrr8r 8.96632 fshow + newpath -148.8529 -131.56302 moveto + 148.8529 -131.56302 lineto + 148.8529 -26.9328 lineto + -148.8529 -26.9328 lineto + closepath stroke + -4.96146 -199.62453 moveto + (TilePartition) pcrr8r 9.96265 fshow + newpath -148.8529 -206.21112 moveto + 216.63861 -206.21112 lineto + 216.63861 -188.25592 lineto + -148.8529 -188.25592 lineto + closepath stroke + newpath -148.8529 -224.16632 moveto + 216.63861 -224.16632 lineto + 216.63861 -206.21112 lineto + -148.8529 -206.21112 lineto + closepath stroke + -139.8753 -234.83754 moveto + (TilePartition\(\)) pcrr8r 8.96632 fshow + -139.8753 -245.79643 moveto + (TilePartition\(const) pcrr8r 8.96632 fshow + -32.2789 -245.79643 moveto + (PatchList) pcrr8r 8.96632 fshow + 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap + newpath 16.6774 -245.59714 moveto + 19.3674 -245.59714 lineto stroke + 19.3674 -245.79643 moveto + (t&\)) pcrr8r 8.96632 fshow + -139.8753 -256.75534 moveto + (TilePartition\(const) pcrr8r 8.96632 fshow + -32.2789 -256.75534 moveto + (PatchList) pcrr8r 8.96632 fshow + newpath 16.6774 -256.55605 moveto + 19.3674 -256.55605 lineto stroke + 19.3674 -256.75534 moveto + (t&,) pcrr8r 8.96632 fshow + 40.8866 -256.75534 moveto + (const) pcrr8r 8.96632 fshow + 73.16559 -256.75534 moveto + (GL&\)) pcrr8r 8.96632 fshow + -139.8753 -267.71423 moveto + (TilePartition\(const) pcrr8r 8.96632 fshow + -32.2789 -267.71423 moveto + (PatchList) pcrr8r 8.96632 fshow + newpath 16.6774 -267.51494 moveto + 19.3674 -267.51494 lineto stroke + 19.3674 -267.71423 moveto + (t&,) pcrr8r 8.96632 fshow + 40.8866 -267.71423 moveto + (const) pcrr8r 8.96632 fshow + 73.16559 -267.71423 moveto + (GL&,) pcrr8r 8.96632 fshow + 126.96379 -267.71423 moveto + (const) pcrr8r 8.96632 fshow + 159.24269 -267.71423 moveto + (GL&\)) pcrr8r 8.96632 fshow + -139.8753 -278.67314 moveto + (TilePartition\(const) pcrr8r 8.96632 fshow + -32.2789 -278.67314 moveto + (TilePartition&\)) pcrr8r 8.96632 fshow + -141.36821 -289.63203 moveto + (\230) ptmr8r 8.96632 fshow + -138.3806 -289.63203 moveto + (TilePartition\(\)) pcrr8r 8.96632 fshow + -139.8753 -300.59094 moveto + (TilePartition&) pcrr8r 8.96632 fshow + -59.17801 -300.59094 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 26.8991 -300.59094 moveto + (TilePartition&\)) pcrr8r 8.96632 fshow + -139.8753 -311.54984 moveto + (PatchList) pcrr8r 8.96632 fshow + newpath -90.919 -311.35063 moveto + -88.229 -311.35063 lineto stroke + -88.229 -311.54984 moveto + (t) pcrr8r 8.96632 fshow + -77.4694 -311.54984 moveto + (tileList\(\)) pcrr8r 8.96632 fshow + -139.8753 -322.50874 moveto + (bool) pcrr8r 8.96632 fshow + -112.97621 -322.50874 moveto + (hasCustomEdgeGuards\(\)) pcrr8r 8.96632 fshow + -139.8753 -333.46764 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -333.46764 moveto + (print\(Out&\)) pcrr8r 8.96632 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -148.8529 -339.75534 moveto + 216.63861 -339.75534 lineto + 216.63861 -224.16632 lineto + -148.8529 -224.16632 lineto + closepath stroke + 1 setgray + newpath 115.6661 5.9776 moveto + 182.0397 5.9776 lineto + 182.0397 22.9365 lineto + 115.6661 22.9365 lineto + closepath fill + 0 setgray + 124.6437 12.2653 moveto + (RefLayout) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 115.6661 5.9776 moveto + 182.0397 5.9776 lineto + 182.0397 22.9365 lineto + 115.6661 22.9365 lineto + closepath stroke + 1 setgray + newpath 194.21146 -191.25592 moveto + 239.06577 -191.25592 lineto + 239.06577 -174.29703 lineto + 194.21146 -174.29703 lineto + closepath fill + 0 setgray + 203.18906 -184.96822 moveto + (dim) pcrr8r 8.96632 fshow + 224.70836 -184.96822 moveto + (D) pcrr8r 8.96632 fshow + newpath 194.21146 -191.25592 moveto + 239.06577 -191.25592 lineto + 239.06577 -174.29703 lineto + 194.21146 -174.29703 lineto + closepath stroke + 8.9776 -140.14201 moveto + (SpatialPartition.h) pcrr8r 6.97382 fshow + 42.87045 -348.33434 moveto + (TilePartition.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 515 3296 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 515 3296 a 396 3525 a Fu(Guard)d(layers)h + (surround)e(domains)g(and)h(patches)g(to)g(ease)g(programming)f(and)h + (decrease)h(commu-)396 3654 y(nication.)e(W)-8 b(e)24 + b(list)d(more)i(member)g(functions)f(than)g(most)g(users)h(require.)g + (All)f(\002les)h(are)h(relati)n(v)o(e)e(to)396 3784 y(the)j + Ft(src/Layout)i Fu(subdirectory)-6 b(.)p Black 3734 5547 + a Fp(193)p Black eop + %%Page: 194 194 + 194 193 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-24.)e(Guard)h(Lay)o(ers)690 + 2479 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 690 2479 a @beginspecial -163 @llx -253 @lly 185 + @urx 24 @ury 3480 @rwi @setspecial + %%BeginDocument: figures/distributed-uml.30 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -163 -253 185 24 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -32.87671 -2.391 moveto + (GuardLayers) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -162.30246 -8.9776 moveto + 162.30246 -8.9776 lineto + 162.30246 8.9776 lineto + -162.30246 8.9776 lineto + closepath stroke + newpath -162.30246 -26.9328 moveto + 162.30246 -26.9328 lineto + 162.30246 -8.9776 lineto + -162.30246 -8.9776 lineto + closepath stroke + -153.32486 -37.60402 moveto + (GuardLayers\(\)) pcrr8r 8.96632 fshow + -153.32486 -48.56291 moveto + (GuardLayers\(int\)) pcrr8r 8.96632 fshow + -153.32486 -59.5218 moveto + (GuardLayers\(int,) pcrr8r 8.96632 fshow + -61.86797 -59.5218 moveto + (int\)) pcrr8r 8.96632 fshow + -153.32486 -70.48071 moveto + (GuardLayers\(const) pcrr8r 8.96632 fshow + -56.48805 -70.48071 moveto + (Loc&,) pcrr8r 8.96632 fshow + -24.20915 -70.48071 moveto + (const) pcrr8r 8.96632 fshow + 8.06973 -70.48071 moveto + (Loc&\)) pcrr8r 8.96632 fshow + -153.32486 -81.4396 moveto + (void) pcrr8r 8.96632 fshow + -126.42577 -81.4396 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -34.96886 -81.4396 moveto + (Loc&,) pcrr8r 8.96632 fshow + -2.68996 -81.4396 moveto + (const) pcrr8r 8.96632 fshow + 29.58904 -81.4396 moveto + (Loc&\)) pcrr8r 8.96632 fshow + -153.32486 -92.39851 moveto + (void) pcrr8r 8.96632 fshow + -126.42577 -92.39851 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -34.96886 -92.39851 moveto + (GuardLayers&\)) pcrr8r 8.96632 fshow + -153.32486 -103.3574 moveto + (int) pcrr8r 8.96632 fshow + -131.80556 -103.3574 moveto + (lower\(int\)) pcrr8r 8.96632 fshow + -153.32486 -114.31631 moveto + (int) pcrr8r 8.96632 fshow + -131.80556 -114.31631 moveto + (upper\(int\)) pcrr8r 8.96632 fshow + -153.32486 -125.2752 moveto + (int&) pcrr8r 8.96632 fshow + -126.42577 -125.2752 moveto + (lower\(int\)) pcrr8r 8.96632 fshow + -153.32486 -136.2342 moveto + (int&) pcrr8r 8.96632 fshow + -126.42577 -136.2342 moveto + (upper\(int\)) pcrr8r 8.96632 fshow + -153.32486 -147.19312 moveto + (bool) pcrr8r 8.96632 fshow + -126.42577 -147.19312 moveto + (operator==\(const) pcrr8r 8.96632 fshow + -34.96886 -147.19312 moveto + (GuardLayers&\)) pcrr8r 8.96632 fshow + -153.32486 -158.15201 moveto + (bool) pcrr8r 8.96632 fshow + -126.42577 -158.15201 moveto + (operator==\(int\)) pcrr8r 8.96632 fshow + -153.32486 -169.11092 moveto + (bool) pcrr8r 8.96632 fshow + -126.42577 -169.11092 moveto + (operator!=\(const) pcrr8r 8.96632 fshow + -34.96886 -169.11092 moveto + (GuardLayers&\)) pcrr8r 8.96632 fshow + -153.32486 -180.06981 moveto + (bool) pcrr8r 8.96632 fshow + -126.42577 -180.06981 moveto + (operator!=\(int\)) pcrr8r 8.96632 fshow + -153.32486 -191.02872 moveto + (GuardLayers) pcrr8r 8.96632 fshow + -88.76706 -191.02872 moveto + (operator-\(const) pcrr8r 8.96632 fshow + -2.68996 -191.02872 moveto + (GuardLayers&\)) pcrr8r 8.96632 fshow + -153.32486 -201.98761 moveto + (GuardLayers) pcrr8r 8.96632 fshow + -88.76706 -201.98761 moveto + (operator-\(int\)) pcrr8r 8.96632 fshow + -153.32486 -212.94652 moveto + (static) pcrr8r 8.96632 fshow + -115.66615 -212.94652 moveto + (void) pcrr8r 8.96632 fshow + -88.76706 -212.94652 moveto + (addGuardLayers\(Interval&,) pcrr8r 8.96632 fshow + 51.10825 -212.94652 moveto + (const) pcrr8r 8.96632 fshow + 83.38724 -212.94652 moveto + (GuardLayers&\)) pcrr8r 8.96632 fshow + -153.32486 -223.90541 moveto + (Interval) pcrr8r 8.96632 fshow + -104.90646 -223.90541 moveto + (addGuardLayersToDomain\(const) pcrr8r 8.96632 fshow + 51.10825 -223.90541 moveto + (Interval&\)) pcrr8r 8.96632 fshow + -153.32486 -234.86432 moveto + (void) pcrr8r 8.96632 fshow + -126.42577 -234.86432 moveto + (print\(Ostream&\)) pcrr8r 8.96632 fshow + newpath -162.30246 -241.15201 moveto + 162.30246 -241.15201 lineto + 162.30246 -26.9328 lineto + -162.30246 -26.9328 lineto + closepath stroke + 1 setgray + newpath 139.8753 5.9776 moveto + 184.72961 5.9776 lineto + 184.72961 22.9365 lineto + 139.8753 22.9365 lineto + closepath fill + 0 setgray + 148.8529 12.2653 moveto + (dim) pcrr8r 8.96632 fshow + 170.37221 12.2653 moveto + (D) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 139.8753 5.9776 moveto + 184.72961 5.9776 lineto + 184.72961 22.9365 lineto + 139.8753 22.9365 lineto + closepath stroke + 8.9776 -249.731 moveto + (GuardLayers.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 690 2479 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 690 2479 a 396 2708 a Fu(A)20 + b(layout)g(maps)f(a)i(domain)e(inde)o(x)g(to)h(processors)g(and)g + (memory)g(used)f(to)h(compute)g(the)g(associated)396 + 2838 y(v)n(alue.)j(There)i(is)e(no)g(base)h(class)g(so)f(we)h(just)f + (present)h(the)f(class)h(diagrams.)f(W)-8 b(e)24 b(list)f(only)g + (member)396 2967 y(functions)j(related)h(to)f(construction,)f + (destruction,)g(and)i(printing)e(since)i(those)f(are)h(the)f(functions) + 396 3097 y(that)f(almost)e(all)i(users)f(use.)h(All)f(\002les)h(are)h + (relati)n(v)o(e)d(to)i(the)g Ft(src/Layout)i Fu(subdirectory)-6 + b(.)396 3376 y Fr(Figur)n(e)26 b(C-25.)e Fo(DomainLayout)798 + 4887 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 798 4887 a @beginspecial -150 @llx -143 @lly 172 + @urx 24 @ury 3220 @rwi @setspecial + %%BeginDocument: figures/distributed-uml.22 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -150 -143 172 24 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -35.86551 -2.391 moveto + (DomainLayout) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -148.8529 -8.9776 moveto + 148.8529 -8.9776 lineto + 148.8529 8.9776 lineto + -148.8529 8.9776 lineto + closepath stroke + newpath -148.8529 -26.9328 moveto + 148.8529 -26.9328 lineto + 148.8529 -8.9776 lineto + -148.8529 -8.9776 lineto + closepath stroke + -139.8753 -37.60402 moveto + (DomainLayout\(\)) pcrr8r 8.96632 fshow + -139.8753 -48.56291 moveto + (DomainLayout\(const) pcrr8r 8.96632 fshow + -37.6587 -48.56291 moveto + (Interval&\)) pcrr8r 8.96632 fshow + -139.8753 -59.52182 moveto + (DomainLayout\(const) pcrr8r 8.96632 fshow + -37.6587 -59.52182 moveto + (Interval&,) pcrr8r 8.96632 fshow + 21.51929 -59.52182 moveto + (const) pcrr8r 8.96632 fshow + 53.79819 -59.52182 moveto + (GL&\)) pcrr8r 8.96632 fshow + -139.8753 -70.48071 moveto + (DomainLayout\(const) pcrr8r 8.96632 fshow + -37.6587 -70.48071 moveto + (Interval&,) pcrr8r 8.96632 fshow + 21.51929 -70.48071 moveto + (const) pcrr8r 8.96632 fshow + 53.79819 -70.48071 moveto + (Node&\)) pcrr8r 8.96632 fshow + -139.8753 -81.43971 moveto + (DomainLayout\(const) pcrr8r 8.96632 fshow + -37.6587 -81.43971 moveto + (DomainLayout&\)) pcrr8r 8.96632 fshow + -141.36821 -92.39862 moveto + (\230) ptmr8r 8.96632 fshow + -138.3806 -92.39862 moveto + (DomainLayout\(\)) pcrr8r 8.96632 fshow + -139.8753 -103.35751 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -103.35751 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -103.35751 moveto + (Interval&\)) pcrr8r 8.96632 fshow + -139.8753 -114.31642 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -114.31642 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -114.31642 moveto + (Interval&,) pcrr8r 8.96632 fshow + 37.65869 -114.31642 moveto + (const) pcrr8r 8.96632 fshow + 69.9377 -114.31642 moveto + (GL&\)) pcrr8r 8.96632 fshow + -139.8753 -125.27531 moveto + (void) pcrr8r 8.96632 fshow + -112.97621 -125.27531 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -21.5193 -125.27531 moveto + (DomainLayout&\)) pcrr8r 8.96632 fshow + newpath -148.8529 -131.56302 moveto + 148.8529 -131.56302 lineto + 148.8529 -26.9328 lineto + -148.8529 -26.9328 lineto + closepath stroke + 1 setgray + newpath 126.42575 5.9776 moveto + 171.28006 5.9776 lineto + 171.28006 22.9365 lineto + 126.42575 22.9365 lineto + closepath fill + 0 setgray + 135.40335 12.2653 moveto + (dim) pcrr8r 8.96632 fshow + 156.92265 12.2653 moveto + (D) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 126.42575 5.9776 moveto + 171.28006 5.9776 lineto + 171.28006 22.9365 lineto + 126.42575 22.9365 lineto + closepath stroke + 8.9776 -140.14201 moveto + (DomainLayout.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 798 4887 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 798 4887 a Black 3734 5547 a + Fp(194)p Black eop + %%Page: 195 195 + 195 194 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-26.)e Fo(DynamicLayout)515 + 2087 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 515 2087 a @beginspecial -195 @llx -220 @lly 195 + @urx 10 @ury 3900 @rwi @setspecial + %%BeginDocument: figures/distributed-uml.23 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -195 -220 195 10 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -38.85431 -2.391 moveto + (DynamicLayout) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -194.58136 -8.9776 moveto + 194.58136 -8.9776 lineto + 194.58136 8.9776 lineto + -194.58136 8.9776 lineto + closepath stroke + newpath -194.58136 -26.9328 moveto + 194.58136 -26.9328 lineto + 194.58136 -8.9776 lineto + -194.58136 -8.9776 lineto + closepath stroke + -185.60376 -37.60402 moveto + (DynamicLayout\(\)) pcrr8r 8.96632 fshow + -185.60376 -48.56291 moveto + (DynamicLayout\(const) pcrr8r 8.96632 fshow + -78.00735 -48.56291 moveto + (Interval<1>&\)) pcrr8r 8.96632 fshow + -185.60376 -59.5218 moveto + (DynamicLayout\(const) pcrr8r 8.96632 fshow + -78.00735 -59.5218 moveto + (Interval<1>&,) pcrr8r 8.96632 fshow + -2.68987 -59.5218 moveto + (int\)) pcrr8r 8.96632 fshow + -185.60376 -70.48071 moveto + (DynamicLayout\(const) pcrr8r 8.96632 fshow + -78.00735 -70.48071 moveto + (Grid<1>&\)) pcrr8r 8.96632 fshow + -185.60376 -81.4396 moveto + (DynamicLayout\(const) pcrr8r 8.96632 fshow + -78.00735 -81.4396 moveto + (Interval<1>&,) pcrr8r 8.96632 fshow + -2.68987 -81.4396 moveto + (const) pcrr8r 8.96632 fshow + 29.58904 -81.4396 moveto + (Partitioner&\)) pcrr8r 8.96632 fshow + -185.60376 -92.39851 moveto + (DynamicLayout\(const) pcrr8r 8.96632 fshow + -78.00735 -92.39851 moveto + (Interval<1>&,) pcrr8r 8.96632 fshow + -2.68987 -92.39851 moveto + (const) pcrr8r 8.96632 fshow + 29.58904 -92.39851 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 104.90654 -92.39851 moveto + (const) pcrr8r 8.96632 fshow + 137.18544 -92.39851 moveto + (CM<1>&\)) pcrr8r 8.96632 fshow + -185.60376 -103.3574 moveto + (DynamicLayout\(const) pcrr8r 8.96632 fshow + -78.00735 -103.3574 moveto + (DynamicLayout&\)) pcrr8r 8.96632 fshow + -185.60376 -114.31631 moveto + (DynamicLayout&) pcrr8r 8.96632 fshow + -104.90646 -114.31631 moveto + (operator=\(const) pcrr8r 8.96632 fshow + -18.82936 -114.31631 moveto + (DynamicLayout&\)) pcrr8r 8.96632 fshow + -187.09666 -125.2752 moveto + (\230) ptmr8r 8.96632 fshow + -184.10905 -125.2752 moveto + (DynamicLayout\(\)) pcrr8r 8.96632 fshow + -185.60376 -136.23412 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -136.23412 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -136.23412 moveto + (Interval<1>&\)) pcrr8r 8.96632 fshow + -185.60376 -147.19301 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -147.19301 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -147.19301 moveto + (Interval<1>&,) pcrr8r 8.96632 fshow + 8.06973 -147.19301 moveto + (const) pcrr8r 8.96632 fshow + 40.34863 -147.19301 moveto + (Grid<1>&\)) pcrr8r 8.96632 fshow + -185.60376 -158.15192 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -158.15192 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -158.15192 moveto + (Grid<1>&\)) pcrr8r 8.96632 fshow + -185.60376 -169.11081 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -169.11081 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -169.11081 moveto + (Interval<1>&,) pcrr8r 8.96632 fshow + 8.06973 -169.11081 moveto + (const) pcrr8r 8.96632 fshow + 40.34863 -169.11081 moveto + (Partitioner&\)) pcrr8r 8.96632 fshow + -185.60376 -180.06972 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -180.06972 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -180.06972 moveto + (Interval<1>&,) pcrr8r 8.96632 fshow + 8.06973 -180.06972 moveto + (const) pcrr8r 8.96632 fshow + 40.34863 -180.06972 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 115.66614 -180.06972 moveto + (const) pcrr8r 8.96632 fshow + 147.94504 -180.06972 moveto + (CM<1>&\)) pcrr8r 8.96632 fshow + -185.60376 -191.02861 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -191.02861 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -191.02861 moveto + (Interval<1>&,) pcrr8r 8.96632 fshow + 8.06973 -191.02861 moveto + (const) pcrr8r 8.96632 fshow + 40.34863 -191.02861 moveto + (List) pcrr8r 8.96632 fshow + 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap + newpath 62.40594 -190.8294 moveto + 65.09584 -190.8294 lineto stroke + 65.09584 -191.02861 moveto + (t&\)) pcrr8r 8.96632 fshow + -185.60376 -201.98752 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -201.98752 moveto + (print\(Ostream&\)) pcrr8r 8.96632 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -194.58136 -208.2752 moveto + 194.58136 -208.2752 lineto + 194.58136 -26.9328 lineto + -194.58136 -26.9328 lineto + closepath stroke + 8.9776 -216.8542 moveto + (DynamicLayout.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 515 2087 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 515 2087 a Black 3734 5547 a + Fp(195)p Black eop + %%Page: 196 196 + 196 195 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-27.)e Fo(GridLayout)419 + 4854 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 419 4854 a @beginspecial -195 @llx -538 @lly 218 + @urx 24 @ury 4130 @rwi @setspecial + %%BeginDocument: figures/distributed-uml.24 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -195 -538 218 24 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -29.88791 -2.391 moveto + (GridLayout) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -194.58136 -8.9776 moveto + 194.58136 -8.9776 lineto + 194.58136 8.9776 lineto + -194.58136 8.9776 lineto + closepath stroke + newpath -194.58136 -26.9328 moveto + 194.58136 -26.9328 lineto + 194.58136 -8.9776 lineto + -194.58136 -8.9776 lineto + closepath stroke + -185.60376 -37.604 moveto + (GridLayout\(\)) pcrr8r 8.96632 fshow + -185.60376 -48.56291 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -48.56291 moveto + (Interval&,) pcrr8r 8.96632 fshow + -34.96886 -48.56291 moveto + (const) pcrr8r 8.96632 fshow + -2.68987 -48.56291 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -59.5218 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -59.5218 moveto + (Interval&,) pcrr8r 8.96632 fshow + -34.96886 -59.5218 moveto + (const) pcrr8r 8.96632 fshow + -2.68987 -59.5218 moveto + (GL&,) pcrr8r 8.96632 fshow + 24.20924 -59.5218 moveto + (const) pcrr8r 8.96632 fshow + 56.48814 -59.5218 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -70.48071 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -70.48071 moveto + (Interval&,) pcrr8r 8.96632 fshow + -34.96886 -70.48071 moveto + (const) pcrr8r 8.96632 fshow + -2.68987 -70.48071 moveto + (Loc&,) pcrr8r 8.96632 fshow + 29.58904 -70.48071 moveto + (const) pcrr8r 8.96632 fshow + 61.86794 -70.48071 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -81.4396 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -81.4396 moveto + (Interval&,) pcrr8r 8.96632 fshow + -34.96886 -81.4396 moveto + (const) pcrr8r 8.96632 fshow + -2.68987 -81.4396 moveto + (Loc&,) pcrr8r 8.96632 fshow + 29.58904 -81.4396 moveto + (const) pcrr8r 8.96632 fshow + 61.86794 -81.4396 moveto + (GL&,) pcrr8r 8.96632 fshow + 88.76704 -81.4396 moveto + (const) pcrr8r 8.96632 fshow + 121.04594 -81.4396 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -92.39851 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -92.39851 moveto + (Iv&,) pcrr8r 8.96632 fshow + -67.24776 -92.39851 moveto + (const) pcrr8r 8.96632 fshow + -34.96886 -92.39851 moveto + (Loc&,) pcrr8r 8.96632 fshow + -2.68987 -92.39851 moveto + (const) pcrr8r 8.96632 fshow + 29.58904 -92.39851 moveto + (GL&,) pcrr8r 8.96632 fshow + 56.48814 -92.39851 moveto + (const) pcrr8r 8.96632 fshow + 88.76704 -92.39851 moveto + (GL&,) pcrr8r 8.96632 fshow + 115.66614 -92.39851 moveto + (const) pcrr8r 8.96632 fshow + 147.94504 -92.39851 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -103.3574 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -103.3574 moveto + (Interval&,) pcrr8r 8.96632 fshow + -34.96886 -103.3574 moveto + (const) pcrr8r 8.96632 fshow + -2.68987 -103.3574 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 72.62753 -103.3574 moveto + (const) pcrr8r 8.96632 fshow + 104.90654 -103.3574 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -114.31631 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -114.31631 moveto + (Grid&,) pcrr8r 8.96632 fshow + -56.48805 -114.31631 moveto + (const) pcrr8r 8.96632 fshow + -24.20917 -114.31631 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -125.2752 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -125.2752 moveto + (Grid&,) pcrr8r 8.96632 fshow + -56.48805 -125.2752 moveto + (const) pcrr8r 8.96632 fshow + -24.20917 -125.2752 moveto + (GL&,) pcrr8r 8.96632 fshow + 2.68994 -125.2752 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -125.2752 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -136.23412 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -136.23412 moveto + (Grid&,) pcrr8r 8.96632 fshow + -56.48805 -136.23412 moveto + (const) pcrr8r 8.96632 fshow + -24.20917 -136.23412 moveto + (GL&,) pcrr8r 8.96632 fshow + 2.68994 -136.23412 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -136.23412 moveto + (GL&,) pcrr8r 8.96632 fshow + 61.86794 -136.23412 moveto + (const) pcrr8r 8.96632 fshow + 94.14684 -136.23412 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -147.19301 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -147.19301 moveto + (Interval&,) pcrr8r 8.96632 fshow + -34.96886 -147.19301 moveto + (const) pcrr8r 8.96632 fshow + -2.68987 -147.19301 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -158.15192 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -158.15192 moveto + (Interval&,) pcrr8r 8.96632 fshow + -34.96886 -158.15192 moveto + (const) pcrr8r 8.96632 fshow + -2.68987 -158.15192 moveto + (GL&,) pcrr8r 8.96632 fshow + 24.20924 -158.15192 moveto + (const) pcrr8r 8.96632 fshow + 56.48814 -158.15192 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -169.11081 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -169.11081 moveto + (Interval&,) pcrr8r 8.96632 fshow + -34.96886 -169.11081 moveto + (const) pcrr8r 8.96632 fshow + -2.68987 -169.11081 moveto + (Loc&,) pcrr8r 8.96632 fshow + 29.58904 -169.11081 moveto + (const) pcrr8r 8.96632 fshow + 61.86794 -169.11081 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -180.06972 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -180.06972 moveto + (Interval&,) pcrr8r 8.96632 fshow + -34.96886 -180.06972 moveto + (const) pcrr8r 8.96632 fshow + -2.68987 -180.06972 moveto + (Loc&,) pcrr8r 8.96632 fshow + 29.58904 -180.06972 moveto + (const) pcrr8r 8.96632 fshow + 61.86794 -180.06972 moveto + (GL&,) pcrr8r 8.96632 fshow + 88.76704 -180.06972 moveto + (const) pcrr8r 8.96632 fshow + 121.04594 -180.06972 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -191.02861 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -191.02861 moveto + (Iv&,) pcrr8r 8.96632 fshow + -67.24776 -191.02861 moveto + (const) pcrr8r 8.96632 fshow + -34.96886 -191.02861 moveto + (Loc&,) pcrr8r 8.96632 fshow + -2.68987 -191.02861 moveto + (const) pcrr8r 8.96632 fshow + 29.58904 -191.02861 moveto + (GL&,) pcrr8r 8.96632 fshow + 56.48814 -191.02861 moveto + (const) pcrr8r 8.96632 fshow + 88.76704 -191.02861 moveto + (GL&,) pcrr8r 8.96632 fshow + 115.66614 -191.02861 moveto + (const) pcrr8r 8.96632 fshow + 147.94504 -191.02861 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -201.9875 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -201.9875 moveto + (Interval&,) pcrr8r 8.96632 fshow + -34.96886 -201.9875 moveto + (const) pcrr8r 8.96632 fshow + -2.68987 -201.9875 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 72.62753 -201.9875 moveto + (const) pcrr8r 8.96632 fshow + 104.90654 -201.9875 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -212.94641 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -212.94641 moveto + (Grid&,) pcrr8r 8.96632 fshow + -56.48805 -212.94641 moveto + (const) pcrr8r 8.96632 fshow + -24.20917 -212.94641 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -223.9053 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -223.9053 moveto + (Grid&,) pcrr8r 8.96632 fshow + -56.48805 -223.9053 moveto + (const) pcrr8r 8.96632 fshow + -24.20917 -223.9053 moveto + (GL&,) pcrr8r 8.96632 fshow + 2.68994 -223.9053 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -223.9053 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -234.86421 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -234.86421 moveto + (Grid&,) pcrr8r 8.96632 fshow + -56.48805 -234.86421 moveto + (const) pcrr8r 8.96632 fshow + -24.20917 -234.86421 moveto + (GL&,) pcrr8r 8.96632 fshow + 2.68994 -234.86421 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -234.86421 moveto + (GL&,) pcrr8r 8.96632 fshow + 61.86794 -234.86421 moveto + (const) pcrr8r 8.96632 fshow + 94.14684 -234.86421 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -245.8231 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -245.8231 moveto + (Interval&,) pcrr8r 8.96632 fshow + -34.96886 -245.8231 moveto + (const) pcrr8r 8.96632 fshow + -2.68987 -245.8231 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 72.62753 -245.8231 moveto + (const) pcrr8r 8.96632 fshow + 104.90654 -245.8231 moveto + (ContextMapper&\)) pcrr8r 8.96632 fshow + -185.60376 -256.78201 moveto + (GridLayout\(const) pcrr8r 8.96632 fshow + -94.14687 -256.78201 moveto + (GridLayout&\)) pcrr8r 8.96632 fshow + -185.60376 -267.7409 moveto + (GridLayout&) pcrr8r 8.96632 fshow + -121.04596 -267.7409 moveto + (operator=\(const) pcrr8r 8.96632 fshow + -34.96886 -267.7409 moveto + (GridLayout&\)) pcrr8r 8.96632 fshow + -187.09666 -278.6999 moveto + (\230) ptmr8r 8.96632 fshow + -184.10905 -278.6999 moveto + (GridLayout\(\)) pcrr8r 8.96632 fshow + -185.60376 -289.65881 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -289.65881 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -289.65881 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -289.65881 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -289.65881 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -300.6177 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -300.6177 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -300.6177 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -300.6177 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -300.6177 moveto + (GL&,) pcrr8r 8.96632 fshow + 51.10834 -300.6177 moveto + (const) pcrr8r 8.96632 fshow + 83.38724 -300.6177 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -311.57661 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -311.57661 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -311.57661 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -311.57661 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -311.57661 moveto + (Loc&,) pcrr8r 8.96632 fshow + 56.48814 -311.57661 moveto + (const) pcrr8r 8.96632 fshow + 88.76704 -311.57661 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -322.5355 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -322.5355 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -322.5355 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -322.5355 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -322.5355 moveto + (Loc&,) pcrr8r 8.96632 fshow + 56.48814 -322.5355 moveto + (const) pcrr8r 8.96632 fshow + 88.76704 -322.5355 moveto + (GL&,) pcrr8r 8.96632 fshow + 115.66614 -322.5355 moveto + (const) pcrr8r 8.96632 fshow + 147.94504 -322.5355 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -333.49442 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -333.49442 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -333.49442 moveto + (Iv&,const) pcrr8r 8.96632 fshow + -13.44955 -333.49442 moveto + (Loc&,const) pcrr8r 8.96632 fshow + 45.72844 -333.49442 moveto + (GL&,const) pcrr8r 8.96632 fshow + 99.52664 -333.49442 moveto + (GL&,const) pcrr8r 8.96632 fshow + 153.32484 -333.49442 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -344.45331 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -344.45331 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -344.45331 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -344.45331 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -344.45331 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 99.52664 -344.45331 moveto + (const) pcrr8r 8.96632 fshow + 131.80563 -344.45331 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -355.41222 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -355.41222 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -355.41222 moveto + (Grid&,) pcrr8r 8.96632 fshow + -29.58896 -355.41222 moveto + (const) pcrr8r 8.96632 fshow + 2.68994 -355.41222 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -366.37111 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -366.37111 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -366.37111 moveto + (Grid&,) pcrr8r 8.96632 fshow + -29.58896 -366.37111 moveto + (const) pcrr8r 8.96632 fshow + 2.68994 -366.37111 moveto + (GL&,) pcrr8r 8.96632 fshow + 29.58904 -366.37111 moveto + (const) pcrr8r 8.96632 fshow + 61.86794 -366.37111 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -377.33002 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -377.33002 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -377.33002 moveto + (Grid&,) pcrr8r 8.96632 fshow + -29.58896 -377.33002 moveto + (const) pcrr8r 8.96632 fshow + 2.68994 -377.33002 moveto + (GL&,) pcrr8r 8.96632 fshow + 29.58904 -377.33002 moveto + (const) pcrr8r 8.96632 fshow + 61.86794 -377.33002 moveto + (GL&,) pcrr8r 8.96632 fshow + 88.76704 -377.33002 moveto + (const) pcrr8r 8.96632 fshow + 121.04594 -377.33002 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -388.28891 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -388.28891 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -388.28891 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -388.28891 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -388.28891 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -399.2478 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -399.2478 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -399.2478 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -399.2478 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -399.2478 moveto + (GL&,) pcrr8r 8.96632 fshow + 51.10834 -399.2478 moveto + (const) pcrr8r 8.96632 fshow + 83.38724 -399.2478 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -410.20671 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -410.20671 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -410.20671 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -410.20671 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -410.20671 moveto + (Loc&,) pcrr8r 8.96632 fshow + 56.48814 -410.20671 moveto + (const) pcrr8r 8.96632 fshow + 88.76704 -410.20671 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -421.1656 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -421.1656 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -421.1656 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -421.1656 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -421.1656 moveto + (Loc&,) pcrr8r 8.96632 fshow + 56.48814 -421.1656 moveto + (const) pcrr8r 8.96632 fshow + 88.76704 -421.1656 moveto + (GL&,) pcrr8r 8.96632 fshow + 115.66614 -421.1656 moveto + (const) pcrr8r 8.96632 fshow + 147.94504 -421.1656 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -432.12451 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -432.12451 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -432.12451 moveto + (Iv&,const) pcrr8r 8.96632 fshow + -13.44955 -432.12451 moveto + (Loc&,const) pcrr8r 8.96632 fshow + 45.72844 -432.12451 moveto + (GL&,const) pcrr8r 8.96632 fshow + 99.52664 -432.12451 moveto + (GL&,const) pcrr8r 8.96632 fshow + 153.32484 -432.12451 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -443.0834 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -443.0834 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -443.0834 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -443.0834 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -443.0834 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 99.52664 -443.0834 moveto + (const) pcrr8r 8.96632 fshow + 131.80563 -443.0834 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -454.04231 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -454.04231 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -454.04231 moveto + (Grid&,) pcrr8r 8.96632 fshow + -29.58896 -454.04231 moveto + (const) pcrr8r 8.96632 fshow + 2.68994 -454.04231 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -465.0012 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -465.0012 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -465.0012 moveto + (Grid&,) pcrr8r 8.96632 fshow + -29.58896 -465.0012 moveto + (const) pcrr8r 8.96632 fshow + 2.68994 -465.0012 moveto + (GL&,) pcrr8r 8.96632 fshow + 29.58904 -465.0012 moveto + (const) pcrr8r 8.96632 fshow + 61.86794 -465.0012 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -475.96011 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -475.96011 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -475.96011 moveto + (Grid&,) pcrr8r 8.96632 fshow + -29.58896 -475.96011 moveto + (const) pcrr8r 8.96632 fshow + 2.68994 -475.96011 moveto + (GL&,) pcrr8r 8.96632 fshow + 29.58904 -475.96011 moveto + (const) pcrr8r 8.96632 fshow + 61.86794 -475.96011 moveto + (GL&,) pcrr8r 8.96632 fshow + 88.76704 -475.96011 moveto + (const) pcrr8r 8.96632 fshow + 121.04594 -475.96011 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -486.919 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -486.919 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -486.919 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -486.919 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -486.919 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 99.52664 -486.919 moveto + (const) pcrr8r 8.96632 fshow + 131.80563 -486.919 moveto + (CM&\)) pcrr8r 8.96632 fshow + -185.60376 -497.87791 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -497.87791 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -497.87791 moveto + (Iv&,const) pcrr8r 8.96632 fshow + -13.44955 -497.87791 moveto + (List) pcrr8r 8.96632 fshow + 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap + newpath 8.60774 -497.67871 moveto + 11.29764 -497.67871 lineto stroke + 11.29764 -497.87791 moveto + (t&,const) pcrr8r 8.96632 fshow + 59.71603 -497.87791 moveto + (Loc&,bool,bool,) pcrr8r 8.96632 fshow + -185.60376 -508.8368 moveto + (const) pcrr8r 8.96632 fshow + -153.32486 -508.8368 moveto + (GL&,const) pcrr8r 8.96632 fshow + -99.52666 -508.8368 moveto + (GL&\)) pcrr8r 8.96632 fshow + -185.60376 -519.79572 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -519.79572 moveto + (print\(Ostream&\)) pcrr8r 8.96632 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -194.58136 -526.0834 moveto + 194.58136 -526.0834 lineto + 194.58136 -26.9328 lineto + -194.58136 -26.9328 lineto + closepath stroke + 1 setgray + newpath 172.1542 5.9776 moveto + 217.00851 5.9776 lineto + 217.00851 22.9365 lineto + 172.1542 22.9365 lineto + closepath fill + 0 setgray + 181.1318 12.2653 moveto + (dim) pcrr8r 8.96632 fshow + 202.65111 12.2653 moveto + (D) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 172.1542 5.9776 moveto + 217.00851 5.9776 lineto + 217.00851 22.9365 lineto + 172.1542 22.9365 lineto + closepath stroke + 8.9776 -534.6624 moveto + (GridLayout.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 419 4854 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 419 4854 a Black 3732 5547 a + Fp(196)p Black eop + %%Page: 197 197 + 197 196 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-28.)e Fo(UniformGridLayout) + 419 3937 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 419 3937 a @beginspecial -195 @llx -428 @lly + 218 @urx 24 @ury 4130 @rwi @setspecial + %%BeginDocument: figures/distributed-uml.20 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -195 -428 218 24 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -50.80945 -2.391 moveto + (UniformGridLayout) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -194.58136 -8.9776 moveto + 194.58136 -8.9776 lineto + 194.58136 8.9776 lineto + -194.58136 8.9776 lineto + closepath stroke + newpath -194.58136 -26.9328 moveto + 194.58136 -26.9328 lineto + 194.58136 -8.9776 lineto + -194.58136 -8.9776 lineto + closepath stroke + -185.60376 -37.60402 moveto + (UniformGridLayout\(\)) pcrr8r 8.96632 fshow + -185.60376 -48.56291 moveto + (UniformGridLayout\(const) pcrr8r 8.96632 fshow + -56.48805 -48.56291 moveto + (Interval&,) pcrr8r 8.96632 fshow + 2.68994 -48.56291 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -48.56291 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -59.52182 moveto + (UniformGridLayout\(const) pcrr8r 8.96632 fshow + -56.48805 -59.52182 moveto + (Interval&,) pcrr8r 8.96632 fshow + 2.68994 -59.52182 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -59.52182 moveto + (GL&,) pcrr8r 8.96632 fshow + 61.86794 -59.52182 moveto + (const) pcrr8r 8.96632 fshow + 94.14684 -59.52182 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -70.48071 moveto + (UniformGridLayout\(const) pcrr8r 8.96632 fshow + -56.48805 -70.48071 moveto + (Interval&,) pcrr8r 8.96632 fshow + 2.68994 -70.48071 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -70.48071 moveto + (Loc&,) pcrr8r 8.96632 fshow + 67.24774 -70.48071 moveto + (const) pcrr8r 8.96632 fshow + 99.52664 -70.48071 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -81.43962 moveto + (UniformGridLayout\(const) pcrr8r 8.96632 fshow + -56.48805 -81.43962 moveto + (Interval&,) pcrr8r 8.96632 fshow + 2.68994 -81.43962 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -81.43962 moveto + (Loc&,) pcrr8r 8.96632 fshow + 67.24774 -81.43962 moveto + (const) pcrr8r 8.96632 fshow + 99.52664 -81.43962 moveto + (GL&,) pcrr8r 8.96632 fshow + 126.42574 -81.43962 moveto + (const) pcrr8r 8.96632 fshow + 158.70474 -81.43962 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -92.39851 moveto + (UniformGridLayout\(const) pcrr8r 8.96632 fshow + -56.48805 -92.39851 moveto + (Iv&,const) pcrr8r 8.96632 fshow + -2.68987 -92.39851 moveto + (Loc&,const) pcrr8r 8.96632 fshow + 56.48814 -92.39851 moveto + (GL&,const) pcrr8r 8.96632 fshow + 110.28635 -92.39851 moveto + (GL&,const) pcrr8r 8.96632 fshow + 164.08453 -92.39851 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -103.35742 moveto + (UniformGridLayout\(const) pcrr8r 8.96632 fshow + -56.48805 -103.35742 moveto + (Interval&,) pcrr8r 8.96632 fshow + 2.68994 -103.35742 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -103.35742 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -114.31631 moveto + (UniformGridLayout\(const) pcrr8r 8.96632 fshow + -56.48805 -114.31631 moveto + (Interval&,) pcrr8r 8.96632 fshow + 2.68994 -114.31631 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -114.31631 moveto + (GL&,) pcrr8r 8.96632 fshow + 61.86794 -114.31631 moveto + (const) pcrr8r 8.96632 fshow + 94.14684 -114.31631 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -125.27522 moveto + (UniformGridLayout\(const) pcrr8r 8.96632 fshow + -56.48805 -125.27522 moveto + (Interval&,) pcrr8r 8.96632 fshow + 2.68994 -125.27522 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -125.27522 moveto + (Loc&,) pcrr8r 8.96632 fshow + 67.24774 -125.27522 moveto + (const) pcrr8r 8.96632 fshow + 99.52664 -125.27522 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -136.23412 moveto + (UniformGridLayout\(const) pcrr8r 8.96632 fshow + -56.48805 -136.23412 moveto + (Interval&,) pcrr8r 8.96632 fshow + 2.68994 -136.23412 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -136.23412 moveto + (Loc&,) pcrr8r 8.96632 fshow + 67.24774 -136.23412 moveto + (const) pcrr8r 8.96632 fshow + 99.52664 -136.23412 moveto + (GL&,) pcrr8r 8.96632 fshow + 126.42574 -136.23412 moveto + (const) pcrr8r 8.96632 fshow + 158.70474 -136.23412 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -147.19301 moveto + (UniformGridLayout\(const) pcrr8r 8.96632 fshow + -56.48805 -147.19301 moveto + (Iv&,const) pcrr8r 8.96632 fshow + -2.68987 -147.19301 moveto + (Loc&,const) pcrr8r 8.96632 fshow + 56.48814 -147.19301 moveto + (GL&,const) pcrr8r 8.96632 fshow + 110.28635 -147.19301 moveto + (GL&,const) pcrr8r 8.96632 fshow + 164.08453 -147.19301 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -158.15192 moveto + (UniformGridLayout\(const) pcrr8r 8.96632 fshow + -56.48805 -158.15192 moveto + (Interval&,) pcrr8r 8.96632 fshow + 2.68994 -158.15192 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -158.15192 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 110.28635 -158.15192 moveto + (const) pcrr8r 8.96632 fshow + 142.56525 -158.15192 moveto + (CM&\)) pcrr8r 8.96632 fshow + -185.60376 -169.11081 moveto + (UniformGridLayout\(const) pcrr8r 8.96632 fshow + -56.48805 -169.11081 moveto + (Interval&,) pcrr8r 8.96632 fshow + 2.68994 -169.11081 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -169.11081 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 110.28635 -169.11081 moveto + (const) pcrr8r 8.96632 fshow + 142.56525 -169.11081 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -180.06972 moveto + (UniformGridLayout\(const) pcrr8r 8.96632 fshow + -56.48805 -180.06972 moveto + (Interval&,) pcrr8r 8.96632 fshow + 2.68994 -180.06972 moveto + (const) pcrr8r 8.96632 fshow + 34.96884 -180.06972 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 110.28635 -180.06972 moveto + (const) pcrr8r 8.96632 fshow + 142.56525 -180.06972 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -191.02861 moveto + (UniformGridLayout\(const) pcrr8r 8.96632 fshow + -56.48805 -191.02861 moveto + (UniformGridLayout&\)) pcrr8r 8.96632 fshow + -185.60376 -201.98752 moveto + (UniformGridLayout&) pcrr8r 8.96632 fshow + -83.38716 -201.98752 moveto + (operator=\(const) pcrr8r 8.96632 fshow + 2.68994 -201.98752 moveto + (UniformGridLayout&\)) pcrr8r 8.96632 fshow + -187.09666 -212.94641 moveto + (\230) ptmr8r 8.96632 fshow + -184.10905 -212.94641 moveto + (UniformGridLayout\(\)) pcrr8r 8.96632 fshow + -185.60376 -223.90541 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -223.90541 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -223.90541 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -223.90541 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -223.90541 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -234.86432 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -234.86432 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -234.86432 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -234.86432 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -234.86432 moveto + (GL&,) pcrr8r 8.96632 fshow + 51.10834 -234.86432 moveto + (const) pcrr8r 8.96632 fshow + 83.38724 -234.86432 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -245.82321 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -245.82321 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -245.82321 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -245.82321 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -245.82321 moveto + (Loc&,) pcrr8r 8.96632 fshow + 56.48814 -245.82321 moveto + (const) pcrr8r 8.96632 fshow + 88.76704 -245.82321 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -256.78212 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -256.78212 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -256.78212 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -256.78212 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -256.78212 moveto + (Loc&,) pcrr8r 8.96632 fshow + 56.48814 -256.78212 moveto + (const) pcrr8r 8.96632 fshow + 88.76704 -256.78212 moveto + (GL&,) pcrr8r 8.96632 fshow + 115.66614 -256.78212 moveto + (const) pcrr8r 8.96632 fshow + 147.94504 -256.78212 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -267.74101 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -267.74101 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -267.74101 moveto + (Iv&,const) pcrr8r 8.96632 fshow + -13.44955 -267.74101 moveto + (Loc&,const) pcrr8r 8.96632 fshow + 45.72844 -267.74101 moveto + (GL&,const) pcrr8r 8.96632 fshow + 99.52664 -267.74101 moveto + (GL&,const) pcrr8r 8.96632 fshow + 153.32484 -267.74101 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -278.69992 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -278.69992 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -278.69992 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -278.69992 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -278.69992 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -289.65881 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -289.65881 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -289.65881 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -289.65881 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -289.65881 moveto + (GL&,) pcrr8r 8.96632 fshow + 51.10834 -289.65881 moveto + (const) pcrr8r 8.96632 fshow + 83.38724 -289.65881 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -300.61772 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -300.61772 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -300.61772 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -300.61772 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -300.61772 moveto + (Loc&,) pcrr8r 8.96632 fshow + 56.48814 -300.61772 moveto + (const) pcrr8r 8.96632 fshow + 88.76704 -300.61772 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -311.57661 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -311.57661 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -311.57661 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -311.57661 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -311.57661 moveto + (Loc&,) pcrr8r 8.96632 fshow + 56.48814 -311.57661 moveto + (const) pcrr8r 8.96632 fshow + 88.76704 -311.57661 moveto + (GL&,) pcrr8r 8.96632 fshow + 115.66614 -311.57661 moveto + (const) pcrr8r 8.96632 fshow + 147.94504 -311.57661 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -322.53552 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -322.53552 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -322.53552 moveto + (Iv&,const) pcrr8r 8.96632 fshow + -13.44955 -322.53552 moveto + (Loc&,const) pcrr8r 8.96632 fshow + 45.72844 -322.53552 moveto + (GL&,const) pcrr8r 8.96632 fshow + 99.52664 -322.53552 moveto + (GL&,const) pcrr8r 8.96632 fshow + 153.32484 -322.53552 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -333.49442 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -333.49442 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -333.49442 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -333.49442 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -333.49442 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 99.52664 -333.49442 moveto + (const) pcrr8r 8.96632 fshow + 131.80563 -333.49442 moveto + (CM&\)) pcrr8r 8.96632 fshow + -185.60376 -344.45331 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -344.45331 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -344.45331 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -344.45331 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -344.45331 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 99.52664 -344.45331 moveto + (const) pcrr8r 8.96632 fshow + 131.80563 -344.45331 moveto + (DT&\)) pcrr8r 8.96632 fshow + -185.60376 -355.41222 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -355.41222 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -355.41222 moveto + (Interval&,) pcrr8r 8.96632 fshow + -8.06976 -355.41222 moveto + (const) pcrr8r 8.96632 fshow + 24.20924 -355.41222 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 99.52664 -355.41222 moveto + (const) pcrr8r 8.96632 fshow + 131.80563 -355.41222 moveto + (RT&\)) pcrr8r 8.96632 fshow + -185.60376 -366.37111 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -366.37111 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -366.37111 moveto + (UniformGridLayout&\)) pcrr8r 8.96632 fshow + -185.60376 -377.33002 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -377.33002 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -67.24776 -377.33002 moveto + (Iv&,const) pcrr8r 8.96632 fshow + -13.44955 -377.33002 moveto + (List) pcrr8r 8.96632 fshow + 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap + newpath 8.60774 -377.13081 moveto + 11.29764 -377.13081 lineto stroke + 11.29764 -377.33002 moveto + (t&,const) pcrr8r 8.96632 fshow + 59.71603 -377.33002 moveto + (Loc&,bool,bool,) pcrr8r 8.96632 fshow + -185.60376 -388.28891 moveto + (const) pcrr8r 8.96632 fshow + -153.32486 -388.28891 moveto + (GL&,const) pcrr8r 8.96632 fshow + -99.52666 -388.28891 moveto + (GL&\)) pcrr8r 8.96632 fshow + -185.60376 -399.24782 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -399.24782 moveto + (notify\(Interval&,) pcrr8r 8.96632 fshow + -61.86797 -399.24782 moveto + (const) pcrr8r 8.96632 fshow + -29.58896 -399.24782 moveto + (ObserverEvent&\)) pcrr8r 8.96632 fshow + -185.60376 -410.20671 moveto + (void) pcrr8r 8.96632 fshow + -158.70467 -410.20671 moveto + (print\(Ostream&\)) pcrr8r 8.96632 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -194.58136 -416.49442 moveto + 194.58136 -416.49442 lineto + 194.58136 -26.9328 lineto + -194.58136 -26.9328 lineto + closepath stroke + 1 setgray + newpath 172.1542 5.9776 moveto + 217.00851 5.9776 lineto + 217.00851 22.9365 lineto + 172.1542 22.9365 lineto + closepath fill + 0 setgray + 181.1318 12.2653 moveto + (dim) pcrr8r 8.96632 fshow + 202.65111 12.2653 moveto + (D) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 172.1542 5.9776 moveto + 217.00851 5.9776 lineto + 217.00851 22.9365 lineto + 172.1542 22.9365 lineto + closepath stroke + 8.9776 -425.07341 moveto + (UniformGridLayout.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 419 3937 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 419 3937 a Black 3730 5547 a + Fp(197)p Black eop + %%Page: 198 198 + 198 197 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-29.)e Fo(SparseTileLayout) + 406 2929 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 406 2929 a @beginspecial -197 @llx -307 @lly + 219 @urx 24 @ury 4160 @rwi @setspecial + %%BeginDocument: figures/distributed-uml.21 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -197 -307 219 24 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -47.82065 -2.391 moveto + (SparseTileLayout) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -196.1953 -8.9776 moveto + 196.1953 -8.9776 lineto + 196.1953 8.9776 lineto + -196.1953 8.9776 lineto + closepath stroke + newpath -196.1953 -26.9328 moveto + 196.1953 -26.9328 lineto + 196.1953 -8.9776 lineto + -196.1953 -8.9776 lineto + closepath stroke + -187.2177 -37.604 moveto + (SparseTileLayout\(\)) pcrr8r 8.96632 fshow + -187.2177 -48.5629 moveto + (SparseTileLayout\(const) pcrr8r 8.96632 fshow + -63.4819 -48.5629 moveto + (Interval&\)) pcrr8r 8.96632 fshow + -187.2177 -59.5218 moveto + (SparseTileLayout\(const) pcrr8r 8.96632 fshow + -63.4819 -59.5218 moveto + (Interval&,) pcrr8r 8.96632 fshow + -4.3038 -59.5218 moveto + (const) pcrr8r 8.96632 fshow + 27.9751 -59.5218 moveto + (GL&\)) pcrr8r 8.96632 fshow + -187.2177 -70.4807 moveto + (SparseTileLayout\(const) pcrr8r 8.96632 fshow + -63.4819 -70.4807 moveto + (Interval&,) pcrr8r 8.96632 fshow + -4.3038 -70.4807 moveto + (const) pcrr8r 8.96632 fshow + 27.9751 -70.4807 moveto + (GL&,) pcrr8r 8.96632 fshow + 54.8742 -70.4807 moveto + (const) pcrr8r 8.96632 fshow + 87.1531 -70.4807 moveto + (GL&\)) pcrr8r 8.96632 fshow + -187.2177 -81.4396 moveto + (SparseTileLayout\(Interval&,) pcrr8r 8.96632 fshow + -36.5828 -81.4396 moveto + (const) pcrr8r 8.96632 fshow + -4.3038 -81.4396 moveto + (PatchList) pcrr8r 8.96632 fshow + 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap + newpath 44.6525 -81.2403 moveto + 47.3424 -81.2403 lineto stroke + 47.3424 -81.4396 moveto + (t&,) pcrr8r 8.96632 fshow + 68.86171 -81.4396 moveto + (const) pcrr8r 8.96632 fshow + 101.14061 -81.4396 moveto + (RT&\)) pcrr8r 8.96632 fshow + -187.2177 -92.3985 moveto + (SparseTileLayout\(const) pcrr8r 8.96632 fshow + -63.4819 -92.3985 moveto + (Iv&,) pcrr8r 8.96632 fshow + -36.5828 -92.3985 moveto + (const) pcrr8r 8.96632 fshow + -4.3038 -92.3985 moveto + (GL&,) pcrr8r 8.96632 fshow + 22.5953 -92.3985 moveto + (const) pcrr8r 8.96632 fshow + 54.8742 -92.3985 moveto + (PatchList) pcrr8r 8.96632 fshow + newpath 103.8305 -92.1992 moveto + 106.52051 -92.1992 lineto stroke + 106.52051 -92.3985 moveto + (t&,) pcrr8r 8.96632 fshow + 128.0397 -92.3985 moveto + (const) pcrr8r 8.96632 fshow + 160.31871 -92.3985 moveto + (RT&\)) pcrr8r 8.96632 fshow + -187.2177 -103.35739 moveto + (SpTlLa\(const) pcrr8r 8.96632 fshow + -117.28 -103.35739 moveto + (Iv&,) pcrr8r 8.96632 fshow + -90.38089 -103.35739 moveto + (const) pcrr8r 8.96632 fshow + -58.10199 -103.35739 moveto + (GL&,) pcrr8r 8.96632 fshow + -31.2029 -103.35739 moveto + (const) pcrr8r 8.96632 fshow + 1.076 -103.35739 moveto + (GL&,) pcrr8r 8.96632 fshow + 27.9751 -103.35739 moveto + (const) pcrr8r 8.96632 fshow + 60.254 -103.35739 moveto + (PatchList) pcrr8r 8.96632 fshow + newpath 109.2103 -103.1581 moveto + 111.9003 -103.1581 lineto stroke + 111.9003 -103.35739 moveto + (t&,) pcrr8r 8.96632 fshow + 133.4196 -103.35739 moveto + (const) pcrr8r 8.96632 fshow + 165.6985 -103.35739 moveto + (RT&\)) pcrr8r 8.96632 fshow + -187.2177 -114.3163 moveto + (SparseTileLayout\(const) pcrr8r 8.96632 fshow + -63.4819 -114.3163 moveto + (Interval&,) pcrr8r 8.96632 fshow + -4.3038 -114.3163 moveto + (const) pcrr8r 8.96632 fshow + 27.9751 -114.3163 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 103.2926 -114.3163 moveto + (const) pcrr8r 8.96632 fshow + 135.5715 -114.3163 moveto + (RT&\)) pcrr8r 8.96632 fshow + -187.2177 -125.27519 moveto + (SparseTileLayout\(Interval&,) pcrr8r 8.96632 fshow + -36.5828 -125.27519 moveto + (const) pcrr8r 8.96632 fshow + -4.3038 -125.27519 moveto + (PatchList) pcrr8r 8.96632 fshow + newpath 44.6525 -125.0759 moveto + 47.3424 -125.0759 lineto stroke + 47.3424 -125.27519 moveto + (t&,) pcrr8r 8.96632 fshow + 68.86171 -125.27519 moveto + (const) pcrr8r 8.96632 fshow + 101.14061 -125.27519 moveto + (DT&\)) pcrr8r 8.96632 fshow + -187.2177 -136.2341 moveto + (SparseTileLayout\(const) pcrr8r 8.96632 fshow + -63.4819 -136.2341 moveto + (Iv&,) pcrr8r 8.96632 fshow + -36.5828 -136.2341 moveto + (const) pcrr8r 8.96632 fshow + -4.3038 -136.2341 moveto + (GL&,) pcrr8r 8.96632 fshow + 22.5953 -136.2341 moveto + (const) pcrr8r 8.96632 fshow + 54.8742 -136.2341 moveto + (PatchList) pcrr8r 8.96632 fshow + newpath 103.8305 -136.0348 moveto + 106.52051 -136.0348 lineto stroke + 106.52051 -136.2341 moveto + (t&,) pcrr8r 8.96632 fshow + 128.0397 -136.2341 moveto + (const) pcrr8r 8.96632 fshow + 160.31871 -136.2341 moveto + (DT&\)) pcrr8r 8.96632 fshow + -187.2177 -147.193 moveto + (SpTlLa\(const) pcrr8r 8.96632 fshow + -117.28 -147.193 moveto + (Iv&,) pcrr8r 8.96632 fshow + -90.38089 -147.193 moveto + (const) pcrr8r 8.96632 fshow + -58.10199 -147.193 moveto + (GL&,) pcrr8r 8.96632 fshow + -31.2029 -147.193 moveto + (const) pcrr8r 8.96632 fshow + 1.076 -147.193 moveto + (GL&,) pcrr8r 8.96632 fshow + 27.9751 -147.193 moveto + (const) pcrr8r 8.96632 fshow + 60.254 -147.193 moveto + (PatchList) pcrr8r 8.96632 fshow + newpath 109.2103 -146.9937 moveto + 111.9003 -146.9937 lineto stroke + 111.9003 -147.193 moveto + (t&,) pcrr8r 8.96632 fshow + 133.4196 -147.193 moveto + (const) pcrr8r 8.96632 fshow + 165.6985 -147.193 moveto + (DT&\)) pcrr8r 8.96632 fshow + -187.2177 -158.1519 moveto + (SparseTileLayout\(const) pcrr8r 8.96632 fshow + -63.4819 -158.1519 moveto + (Interval&,) pcrr8r 8.96632 fshow + -4.3038 -158.1519 moveto + (const) pcrr8r 8.96632 fshow + 27.9751 -158.1519 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 103.2926 -158.1519 moveto + (const) pcrr8r 8.96632 fshow + 135.5715 -158.1519 moveto + (DT&\)) pcrr8r 8.96632 fshow + -187.2177 -169.1108 moveto + (SparseTileLayout\(const) pcrr8r 8.96632 fshow + -63.4819 -169.1108 moveto + (Interval&,) pcrr8r 8.96632 fshow + -4.3038 -169.1108 moveto + (const) pcrr8r 8.96632 fshow + 27.9751 -169.1108 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 103.2926 -169.1108 moveto + (const) pcrr8r 8.96632 fshow + 135.5715 -169.1108 moveto + (CM&\)) pcrr8r 8.96632 fshow + -187.2177 -180.0697 moveto + (SparseTileLayout\(const) pcrr8r 8.96632 fshow + -63.4819 -180.0697 moveto + (SparseTileLayout&\)) pcrr8r 8.96632 fshow + -187.2177 -191.0286 moveto + (SparseTileLayout&) pcrr8r 8.96632 fshow + -90.38089 -191.0286 moveto + (operator=\(const) pcrr8r 8.96632 fshow + -4.3038 -191.0286 moveto + (SparseTileLayout&\)) pcrr8r 8.96632 fshow + -188.7106 -201.9875 moveto + (\230) ptmr8r 8.96632 fshow + -185.72299 -201.9875 moveto + (SparseTileLayout\(\)) pcrr8r 8.96632 fshow + -187.2177 -212.9464 moveto + (void) pcrr8r 8.96632 fshow + -160.3186 -212.9464 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -68.8617 -212.9464 moveto + (Interval&\)) pcrr8r 8.96632 fshow + -187.2177 -223.9053 moveto + (void) pcrr8r 8.96632 fshow + -160.3186 -223.9053 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -68.8617 -223.9053 moveto + (Interval&,) pcrr8r 8.96632 fshow + -9.6837 -223.9053 moveto + (const) pcrr8r 8.96632 fshow + 22.5953 -223.9053 moveto + (GL&\)) pcrr8r 8.96632 fshow + -187.2177 -234.8642 moveto + (void) pcrr8r 8.96632 fshow + -160.3186 -234.8642 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -68.8617 -234.8642 moveto + (Interval&,) pcrr8r 8.96632 fshow + -9.6837 -234.8642 moveto + (const) pcrr8r 8.96632 fshow + 22.5953 -234.8642 moveto + (GL&,) pcrr8r 8.96632 fshow + 49.4944 -234.8642 moveto + (const) pcrr8r 8.96632 fshow + 81.7733 -234.8642 moveto + (PatchList) pcrr8r 8.96632 fshow + newpath 130.7296 -234.665 moveto + 133.4196 -234.665 lineto stroke + 133.4196 -234.8642 moveto + (t&\)) pcrr8r 8.96632 fshow + -187.2177 -245.8231 moveto + (void) pcrr8r 8.96632 fshow + -160.3186 -245.8231 moveto + (initialize\(const) pcrr8r 8.96632 fshow + -68.8617 -245.8231 moveto + (Interval&,) pcrr8r 8.96632 fshow + -9.6837 -245.8231 moveto + (const) pcrr8r 8.96632 fshow + 22.5953 -245.8231 moveto + (Partitioner&\)) pcrr8r 8.96632 fshow + -187.2177 -256.782 moveto + (BorderFillIterator) pcrr8r 8.96632 fshow + newpath -89.843 -256.5828 moveto + -87.153 -256.5828 lineto stroke + -87.153 -256.782 moveto + (t) pcrr8r 8.96632 fshow + -76.3934 -256.782 moveto + (beginBorderFillList\(\)) pcrr8r 8.96632 fshow + -187.2177 -267.74089 moveto + (BorderFillIterator) pcrr8r 8.96632 fshow + newpath -89.843 -267.5417 moveto + -87.153 -267.5417 lineto stroke + -87.153 -267.74089 moveto + (t) pcrr8r 8.96632 fshow + -76.3934 -267.74089 moveto + (endBorderFillList\(\)) pcrr8r 8.96632 fshow + -187.2177 -278.6998 moveto + (void) pcrr8r 8.96632 fshow + -160.3186 -278.6998 moveto + (notify\(Interval&,) pcrr8r 8.96632 fshow + -63.4819 -278.6998 moveto + (const) pcrr8r 8.96632 fshow + -31.2029 -278.6998 moveto + (ObserverEvent&\)) pcrr8r 8.96632 fshow + -187.2177 -289.6588 moveto + (void) pcrr8r 8.96632 fshow + -160.3186 -289.6588 moveto + (print\(Ostream&\)) pcrr8r 8.96632 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -196.1953 -295.9465 moveto + 196.1953 -295.9465 lineto + 196.1953 -26.9328 lineto + -196.1953 -26.9328 lineto + closepath stroke + 1 setgray + newpath 173.76814 5.9776 moveto + 218.62245 5.9776 lineto + 218.62245 22.9365 lineto + 173.76814 22.9365 lineto + closepath fill + 0 setgray + 182.74574 12.2653 moveto + (dim) pcrr8r 8.96632 fshow + 204.26505 12.2653 moveto + (D) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 173.76814 5.9776 moveto + 218.62245 5.9776 lineto + 218.62245 22.9365 lineto + 173.76814 22.9365 lineto + closepath stroke + 8.9776 -304.5255 moveto + (SparseTileLayout.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 406 2929 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 406 2929 a 396 3158 a Fu(Conte)o(xt)38 + b(mappers)g(map)g(domain)f(patches)h(to)g(conte)o(xts.)f(Ef)n(fecti)n + (v)o(ely)-6 b(,)36 b(the)o(y)h(map)h(pieces)h(of)f(a)396 + 3288 y(domain)27 b(to)h(processors.)f(Ev)o(en)g(though)g(users)h + (rarely)g(use)g(an)o(y)f(of)h(their)f(member)h(functions,)e(the)396 + 3417 y(diagrams)h(list)g(them.)g(The)g(type)g Fq(List_t)g + Fu(abbre)n(viates)g(an)g Fq(std::vector)e Fu(of)j(pointers)f(to)396 + 3547 y Fq(Node)p Fu(s)36 b(of)g Fq(Domain)p Fu(s.)f Fq(GL)i + Fu(abbre)n(viates)f Fq(GuardLayers)p Fu(.)d(All)k(\002les)f(are)i + (relati)n(v)o(e)d(to)h(the)396 3676 y Ft(src/Partition)28 + b Fu(subdirectory)-6 b(.)p Black 3734 5547 a Fp(198)p + Black eop + %%Page: 199 199 + 199 198 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-30.)e(Relationships)h + (Among)g(Context)g(Mappers)515 1987 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 515 1987 a @beginspecial + -92 @llx -129 @lly 298 @urx 89 @ury 3900 @rwi @setspecial + %%BeginDocument: figures/distributed-uml.10 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -92 -129 298 89 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier + /pcrr8r /Courier def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -38.85431 -2.391 moveto + (ContextMapper) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -91.28886 -8.9776 moveto + 91.28886 -8.9776 lineto + 91.28886 8.9776 lineto + -91.28886 8.9776 lineto + closepath stroke + newpath -91.28886 -26.9328 moveto + 91.28886 -26.9328 lineto + 91.28886 -8.9776 lineto + -91.28886 -8.9776 lineto + closepath stroke + -82.31123 -37.60402 moveto + (ContextMapper\(\)) pcrr8r 8.96632 fshow + -82.31123 -48.56291 moveto + (void) pcrr8r 8.96632 fshow + -55.41214 -48.56291 moveto + (setAffinity\(const) pcrr8r 8.96632 fshow + 41.42456 -48.56291 moveto + (List) pcrr8r 8.96632 fshow + 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap + newpath 63.48187 -48.36371 moveto + 66.17177 -48.36371 lineto stroke + 66.17177 -48.56291 moveto + (t&\)) pcrr8r 8.96632 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -91.28883 -54.85062 moveto + 91.28886 -54.85062 lineto + 91.28886 -26.9328 lineto + -91.28883 -26.9328 lineto + closepath stroke + 168.91452 63.2795 moveto + (LocalMapper) pcrr8r 9.96265 fshow + newpath 147.98177 56.6929 moveto + 255.6007 56.6929 lineto + 255.6007 74.6481 lineto + 147.98177 74.6481 lineto + closepath stroke + 150.98177 16.97784 moveto + (DistributedMapper) pcrr8r 9.96265 fshow + newpath 147.98177 10.39125 moveto + 255.60066 10.39125 lineto + 255.60066 28.34645 lineto + 147.98177 28.34645 lineto + closepath stroke + 153.97057 -29.3238 moveto + (ContiguousMapper) pcrr8r 9.96265 fshow + newpath 147.98177 -35.9104 moveto + 255.60066 -35.9104 lineto + 255.60066 -17.9552 lineto + 147.98177 -17.9552 lineto + closepath stroke + 156.95932 -75.62546 moveto + (BisectionMapper) pcrr8r 9.96265 fshow + newpath 147.98177 -82.21205 moveto + 255.6007 -82.21205 lineto + 255.6007 -64.25685 lineto + 147.98177 -64.25685 lineto + closepath stroke + 162.93692 -121.92711 moveto + (UniformMapper) pcrr8r 9.96265 fshow + newpath 147.98177 -128.5137 moveto + 255.6007 -128.5137 lineto + 255.6007 -110.5585 lineto + 147.98177 -110.5585 lineto + closepath stroke + 1 setgray + newpath 68.86171 5.9776 moveto + 113.71602 5.9776 lineto + 113.71602 22.9365 lineto + 68.86171 22.9365 lineto + closepath fill + 0 setgray + 77.83931 12.2653 moveto + (dim) pcrr8r 8.96632 fshow + 99.35861 12.2653 moveto + (D) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 68.86171 5.9776 moveto + 113.71602 5.9776 lineto + 113.71602 22.9365 lineto + 68.86171 22.9365 lineto + closepath stroke + 1 setgray + newpath 234.66794 71.6481 moveto + 279.52225 71.6481 lineto + 279.52225 88.607 lineto + 234.66794 88.607 lineto + closepath fill + 0 setgray + 243.64554 77.9358 moveto + (dim) pcrr8r 8.96632 fshow + 265.16484 77.9358 moveto + (D) pcrr8r 8.96632 fshow + newpath 234.66794 71.6481 moveto + 279.52225 71.6481 lineto + 279.52225 88.607 lineto + 234.66794 88.607 lineto + closepath stroke + 1 setgray + newpath 252.60066 25.34645 moveto + 297.45497 25.34645 lineto + 297.45497 42.30534 lineto + 252.60066 42.30534 lineto + closepath fill + 0 setgray + 261.57826 31.63416 moveto + (dim) pcrr8r 8.96632 fshow + 283.09756 31.63416 moveto + (D) pcrr8r 8.96632 fshow + newpath 252.60066 25.34645 moveto + 297.45497 25.34645 lineto + 297.45497 42.30534 lineto + 252.60066 42.30534 lineto + closepath stroke + 1 setgray + newpath 249.61186 -20.9552 moveto + 294.46617 -20.9552 lineto + 294.46617 -3.9963 lineto + 249.61186 -3.9963 lineto + closepath fill + 0 setgray + 258.58946 -14.6675 moveto + (dim) pcrr8r 8.96632 fshow + 280.10876 -14.6675 moveto + (D) pcrr8r 8.96632 fshow + newpath 249.61186 -20.9552 moveto + 294.46617 -20.9552 lineto + 294.46617 -3.9963 lineto + 249.61186 -3.9963 lineto + closepath stroke + 1 setgray + newpath 246.62314 -67.25685 moveto + 291.47745 -67.25685 lineto + 291.47745 -50.29796 lineto + 246.62314 -50.29796 lineto + closepath fill + 0 setgray + 255.60074 -60.96915 moveto + (dim) pcrr8r 8.96632 fshow + 277.12004 -60.96915 moveto + (D) pcrr8r 8.96632 fshow + newpath 246.62314 -67.25685 moveto + 291.47745 -67.25685 lineto + 291.47745 -50.29796 lineto + 246.62314 -50.29796 lineto + closepath stroke + 8.97762 -63.42961 moveto + (ContextMapper.h) pcrr8r 6.97382 fshow + [] 0 setdash + newpath 91.28886 -17.9552 moveto + 103.56328 -25.04182 lineto + 103.56328 -10.86858 lineto + closepath stroke + newpath 103.56328 -17.9552 moveto + 119.63531 -17.9552 lineto stroke + newpath 119.63531 65.6705 moveto + 147.98177 65.6705 lineto stroke + newpath 119.63531 19.36885 moveto + 147.98177 19.36885 lineto stroke + newpath 119.63531 -26.9328 moveto + 147.98177 -26.9328 lineto stroke + newpath 119.63531 -73.23445 moveto + 147.98177 -73.23445 lineto stroke + newpath 119.63531 -119.5361 moveto + 147.98177 -119.5361 lineto stroke + 124.84215 -116.5361 moveto + (<1>) pcrr8r 9.96265 fshow + 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth + newpath 119.63531 65.6705 moveto + 119.63531 -119.5361 lineto stroke + showpage + %%EOF + + %%EndDocument + @endspecial 515 1987 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 515 1987 a Black 3734 5547 a + Fp(199)p Black eop + %%Page: 200 200 + 200 199 bop Black 2488 -132 a Fp(Appendix)24 b(C.)h(UML)h(Class)e(Dia)o + (gr)o(ams)p Black 396 51 a Fr(Figur)n(e)i(C-31.)e(Context)i(Mappers)890 + 5104 y + currentpoint currentpoint translate 1 1 scale neg exch neg exch translate + 890 5104 a @beginspecial -93 @llx -568 @lly 207 + @urx 24 @ury 3000 @rwi @setspecial + %%BeginDocument: figures/distributed-uml.11 + %!PS-Adobe-3.0 EPSF-3.0 + %%BoundingBox: -93 -568 207 24 + %%Creator: MetaPost + %%CreationDate: 2001.09.07:1117 + %%Pages: 1 + %%DocumentFonts: Courier Times-Roman + /pcrr8r /Courier def + /ptmr8r /Times-Roman def + /fshow {exch findfont exch scalefont setfont show}bind def + %%EndProlog + %%Page: 1 1 + -32.87671 -2.391 moveto + (LocalMapper) pcrr8r 9.96265 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash + 1 setlinejoin 10 setmiterlimit + newpath -92.3648 -8.9776 moveto + 92.3648 -8.9776 lineto + 92.3648 8.9776 lineto + -92.3648 8.9776 lineto + closepath stroke + newpath -92.3648 -26.9328 moveto + 92.3648 -26.9328 lineto + 92.3648 -8.9776 lineto + -92.3648 -8.9776 lineto + closepath stroke + -83.3872 -37.604 moveto + (LocalMapper\(\)) pcrr8r 8.96632 fshow + -83.3872 -48.563 moveto + (LocalMapper\(const) pcrr8r 8.96632 fshow + 13.4496 -48.563 moveto + (Partitioner&\)) pcrr8r 8.96632 fshow + -83.3872 -59.52191 moveto + (void) pcrr8r 8.96632 fshow + -56.48811 -59.52191 moveto + (map\(const) pcrr8r 8.96632 fshow + -2.68991 -59.52191 moveto + (List) pcrr8r 8.96632 fshow + 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap + newpath 19.3673 -59.3226 moveto + 22.0573 -59.3226 lineto stroke + 22.0573 -59.52191 moveto + (t&\)) pcrr8r 8.96632 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -92.3648 -65.8096 moveto + 92.3648 -65.8096 lineto + 92.3648 -26.9328 lineto + -92.3648 -26.9328 lineto + closepath stroke + -34.67 -119.69789 moveto + (DistributedMapper) pcrr8r 9.96265 fshow + newpath -92.3648 -126.28448 moveto + 124.6437 -126.28448 lineto + 124.6437 -108.32928 lineto + -92.3648 -108.32928 lineto + closepath stroke + newpath -92.3648 -144.23969 moveto + 124.6437 -144.23969 lineto + 124.6437 -126.28448 lineto + -92.3648 -126.28448 lineto + closepath stroke + -83.3872 -154.9109 moveto + (DistributedMapper\(const) pcrr8r 8.96632 fshow + 45.7285 -154.9109 moveto + (Partitioner&\)) pcrr8r 8.96632 fshow + -83.3872 -165.8698 moveto + (void) pcrr8r 8.96632 fshow + -56.48811 -165.8698 moveto + (map\(const) pcrr8r 8.96632 fshow + -2.68991 -165.8698 moveto + (List) pcrr8r 8.96632 fshow + 0 0.3985 dtransform truncate idtransform setlinewidth pop + newpath 19.3673 -165.6706 moveto + 22.0573 -165.6706 lineto stroke + 22.0573 -165.8698 moveto + (t&\)) pcrr8r 8.96632 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -92.3648 -172.1575 moveto + 124.6437 -172.1575 lineto + 124.6437 -144.23969 lineto + -92.3648 -144.23969 lineto + closepath stroke + -2.09221 -226.04579 moveto + (ContiguousMapper) pcrr8r 9.96265 fshow + newpath -92.3648 -232.63239 moveto + 183.82169 -232.63239 lineto + 183.82169 -214.67719 lineto + -92.3648 -214.67719 lineto + closepath stroke + newpath -92.3648 -250.58759 moveto + 183.82169 -250.58759 lineto + 183.82169 -232.63239 lineto + -92.3648 -232.63239 lineto + closepath stroke + -83.3872 -261.25879 moveto + (ContiguousMapper\(const) pcrr8r 8.96632 fshow + 40.34859 -261.25879 moveto + (Partitioner&\)) pcrr8r 8.96632 fshow + -83.3872 -272.21779 moveto + (ContiguousMapper\(const) pcrr8r 8.96632 fshow + 40.34859 -272.21779 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 115.66609 -272.21779 moveto + (const) pcrr8r 8.96632 fshow + 147.94499 -272.21779 moveto + (Loc&\)) pcrr8r 8.96632 fshow + -83.3872 -283.1767 moveto + (void) pcrr8r 8.96632 fshow + -56.48811 -283.1767 moveto + (map\(const) pcrr8r 8.96632 fshow + -2.68991 -283.1767 moveto + (List) pcrr8r 8.96632 fshow + 0 0.3985 dtransform truncate idtransform setlinewidth pop + newpath 19.3673 -282.97739 moveto + 22.0573 -282.97739 lineto stroke + 22.0573 -283.1767 moveto + (t&\)) pcrr8r 8.96632 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -92.3648 -289.46439 moveto + 183.82169 -289.46439 lineto + 183.82169 -250.58759 lineto + -92.3648 -250.58759 lineto + closepath stroke + -1.79335 -343.35268 moveto + (BisectionMapper) pcrr8r 9.96265 fshow + newpath -92.3648 -349.93927 moveto + 178.44193 -349.93927 lineto + 178.44193 -331.98407 lineto + -92.3648 -331.98407 lineto + closepath stroke + newpath -92.3648 -367.89447 moveto + 178.44193 -367.89447 lineto + 178.44193 -349.93927 lineto + -92.3648 -349.93927 lineto + closepath stroke + -83.38718 -378.56567 moveto + (BisectionMapper\(const) pcrr8r 8.96632 fshow + 34.96883 -378.56567 moveto + (Loc&\)) pcrr8r 8.96632 fshow + -83.38718 -389.52458 moveto + (BisectionMapper\(const) pcrr8r 8.96632 fshow + 34.96883 -389.52458 moveto + (Partitioner&\)) pcrr8r 8.96632 fshow + -83.38718 -400.48347 moveto + (BisectionMapper\(const) pcrr8r 8.96632 fshow + 34.96883 -400.48347 moveto + (Partitioner&,) pcrr8r 8.96632 fshow + 110.28632 -400.48347 moveto + (const) pcrr8r 8.96632 fshow + 142.56522 -400.48347 moveto + (Loc&\)) pcrr8r 8.96632 fshow + -83.38718 -411.44238 moveto + (void) pcrr8r 8.96632 fshow + -56.48808 -411.44238 moveto + (map\(const) pcrr8r 8.96632 fshow + -2.68988 -411.44238 moveto + (List) pcrr8r 8.96632 fshow + 0 0.3985 dtransform truncate idtransform setlinewidth pop + newpath 19.36732 -411.24318 moveto + 22.05733 -411.24318 lineto stroke + 22.05733 -411.44238 moveto + (t&\)) pcrr8r 8.96632 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -92.36478 -417.73007 moveto + 178.44193 -417.73007 lineto + 178.44193 -367.89447 lineto + -92.36478 -367.89447 lineto + closepath stroke + -33.47447 -471.61836 moveto + (UniformMapper) pcrr8r 9.96265 fshow + newpath -92.36478 -478.20496 moveto + 103.12445 -478.20496 lineto + 103.12445 -460.24976 lineto + -92.36478 -460.24976 lineto + closepath stroke + newpath -92.36478 -496.16016 moveto + 103.12445 -496.16016 lineto + 103.12445 -478.20496 lineto + -92.36478 -478.20496 lineto + closepath stroke + -83.38715 -506.83138 moveto + (UniformMapper\(const) pcrr8r 8.96632 fshow + 24.20926 -506.83138 moveto + (Loc<1>&\)) pcrr8r 8.96632 fshow + -83.38715 -517.79027 moveto + (UniformMapper\(const) pcrr8r 8.96632 fshow + 24.20926 -517.79027 moveto + (Partitioner&\)) pcrr8r 8.96632 fshow + -83.38715 -528.74927 moveto + (UniformMapper\(int\)) pcrr8r 8.96632 fshow + -84.88005 -539.70818 moveto + (\230) ptmr8r 8.96632 fshow + -81.89244 -539.70818 moveto + (UniformMapper\(\)) pcrr8r 8.96632 fshow + -83.38715 -550.66707 moveto + (void) pcrr8r 8.96632 fshow + -56.48805 -550.66707 moveto + (map\(const) pcrr8r 8.96632 fshow + -2.68985 -550.66707 moveto + (List) pcrr8r 8.96632 fshow + 0 0.3985 dtransform truncate idtransform setlinewidth pop + newpath 19.36736 -550.46777 moveto + 22.05736 -550.46777 lineto stroke + 22.05736 -550.66707 moveto + (t&\)) pcrr8r 8.96632 fshow + 0 0.5 dtransform truncate idtransform setlinewidth pop + newpath -92.36475 -556.95477 moveto + 103.12445 -556.95477 lineto + 103.12445 -496.16016 lineto + -92.36475 -496.16016 lineto + closepath stroke + 1 setgray + newpath 69.93765 5.9776 moveto + 114.79196 5.9776 lineto + 114.79196 22.9365 lineto + 69.93765 22.9365 lineto + closepath fill + 0 setgray + 78.91525 12.2653 moveto + (dim) pcrr8r 8.96632 fshow + 100.43456 12.2653 moveto + (D) pcrr8r 8.96632 fshow + [3 3 ] 0 setdash 1 setlinecap + newpath 69.93765 5.9776 moveto + 114.79196 5.9776 lineto + 114.79196 22.9365 lineto + 69.93765 22.9365 lineto + closepath stroke + 1 setgray + newpath 102.21655 -111.32928 moveto + 147.07086 -111.32928 lineto + 147.07086 -94.37039 lineto + 102.21655 -94.37039 lineto + closepath fill + 0 setgray + 111.19415 -105.04158 moveto + (dim) pcrr8r 8.96632 fshow + 132.71346 -105.04158 moveto + (D) pcrr8r 8.96632 fshow + newpath 102.21655 -111.32928 moveto + 147.07086 -111.32928 lineto + 147.07086 -94.37039 lineto + 102.21655 -94.37039 lineto + closepath stroke + 1 setgray + newpath 161.39453 -217.67719 moveto + 206.24884 -217.67719 lineto + 206.24884 -200.71829 lineto + 161.39453 -200.71829 lineto + closepath fill + 0 setgray + 170.37213 -211.38948 moveto + (dim) pcrr8r 8.96632 fshow + 191.89143 -211.38948 moveto + (D) pcrr8r 8.96632 fshow + newpath 161.39453 -217.67719 moveto + 206.24884 -217.67719 lineto + 206.24884 -200.71829 lineto + 161.39453 -200.71829 lineto + closepath stroke + 1 setgray + newpath 156.01477 -334.98407 moveto + 200.86908 -334.98407 lineto + 200.86908 -318.02518 lineto + 156.01477 -318.02518 lineto + closepath fill + 0 setgray + 164.99237 -328.69637 moveto + (dim) pcrr8r 8.96632 fshow + 186.51167 -328.69637 moveto + (D) pcrr8r 8.96632 fshow + newpath 156.01477 -334.98407 moveto + 200.86908 -334.98407 lineto + 200.86908 -318.02518 lineto + 156.01477 -318.02518 lineto + closepath stroke + 8.9776 -74.3886 moveto + (ContextMapper.h) pcrr8r 6.97382 fshow + 25.11705 -180.7365 moveto + (DistributedMapper.h) pcrr8r 6.97382 fshow + 54.70604 -298.04338 moveto + (ContiguousMapper.h) pcrr8r 6.97382 fshow + 52.01617 -426.30907 moveto + (BisectionMapper.h) pcrr8r 6.97382 fshow + 14.35745 -565.53377 moveto + (UniformMapper.h) pcrr8r 6.97382 fshow + showpage + %%EOF + + %%EndDocument + @endspecial 890 5104 a + currentpoint currentpoint translate 1 1 div 1 1 div scale neg exch + neg exch translate + 890 5104 a Black 3734 5547 a + Fp(200)p Black eop + %%Page: 201 201 + 201 200 bop Black Black -2 119 a Fy(Glossar)r(y)-2 639 + y Fx(A)396 855 y Fv(ar)n(c)o(hitecture)596 1084 y Fu(particular)28 + b(hardw)o(are)i(\(processor\))f(interf)o(ace.)g(Examples)f + (architectures)h(include)f(\223linux\224,)596 1214 y(\223sgin32\224,)23 + b(\223sgi64\224,)i(and)f(\223sun\224.)396 1597 y Fo(Array)596 + 1826 y Fu(a)58 b(POOMA)g(container)g(generalizing)f(C)i(arrays)f(and)g + (mapping)f(indices)h(to)f(v)n(alues.)596 1956 y(Constant-time)41 + b(access)j(to)f(v)n(alues)f(is)h(supported,)f(ignoring)g(the)h(time)f + (to)h(compute)f(the)596 2085 y(v)n(alues)47 b(if)i(applicable.)f + Fq(Array)p Fu(s)g(are)h(\002rst-class)g(objects.)f Fq(DynamicArray)p + Fu(s)d(and)596 2215 y Fq(Field)p Fu(s)23 b(generalize)i + Fq(Array)p Fu(.)596 2394 y Fp(See)g(Also:)f Fu(container)p + Fp(,)g Fq(DynamicArray)p Fp(,)e Fq(Field)p Fu(.)-2 2897 + y Fx(B)396 3112 y Fo(Brick)27 b(Engine)596 3341 y Fu(an)22 + b Fq(Engine)f Fu(e)o(xplicitly)g(storing)g(each)i(of)g(its)e(v)n + (alues.)h(Its)g(space)h(requirements)f(are)h(at)g(least)596 + 3471 y(the)h(size)h(of)g(the)g Fq(Engine)p Fu(')-5 b(s)22 + b(domain.)596 3650 y Fp(See)j(Also:)f Fu(engine.)-2 4152 + y Fx(C)396 4368 y Fv(cell)596 4597 y Fu(a)31 b(domain)g(element)g(of)g + (a)h Fq(Field)p Fu(.)e(Both)h Fq(Array)g Fu(and)g Fq(Field)f + Fu(domain)h(elements)g(are)596 4727 y(denoted)c(by)g(indices,)f(b)n(ut) + h(a)h(cell)g(e)o(xists)e(in)h(space.)h(F)o(or)f(e)o(xample,)g(it)g + (might)f(be)h(a)h(rectangle)596 4856 y(or)c(rectangular)h + (parallelepiped.)596 5036 y Fp(See)g(Also:)f Fu(cell)h(size)p + Fp(,)f Fq(Field)p Fp(,)g Fu(mesh.)p Black 3734 5547 a + Fp(201)p Black eop + %%Page: 202 202 + 202 201 bop Black 3523 -132 a Fp(Glossary)p Black 396 + 51 a Fv(cell)28 b(siz)q(e)596 280 y Fu(speci\002es)e(a)g + Fq(Field)e Fu(cell')-5 b(s)25 b(dimensions)f(e.g.,)i(its)f(width,)g + (height,)g(and)g(depth,)g(in)h Ff(R)3625 240 y Fe(d)3655 + 280 y Fu(.)g(This)596 410 y(is)e(frequently)g(used)h(to)f(specify)h(a)g + (mesh.)596 589 y Fp(See)g(Also:)f Fu(cell)p Fp(,)h Fu(mesh)p + Fp(,)f Fu(corner)h(position.)396 793 y Fv(comm)n(unication)i(librar)q + (y)596 1022 y Fu(softw)o(are)d(library)h(passing)f(information)f(among) + h Fp(conte)n(xts)p Fu(,)g(usually)g(using)g(messages.)596 + 1202 y Fp(See)h(Also:)f Fu(distrib)n(uted)f(computing)g(en)l + (vironment.)396 1406 y Fv(compilation)k(time)596 1585 + y Fp(See:)e Fu(compile)f(time)396 1789 y Fv(compile)j(time)596 + 2019 y Fu(in)h(the)h(process)g(from)g(writing)g(a)g(program)g(to)g(e)o + (x)o(ecuting)e(it,)i(the)g(time)g(when)g(the)g(program)596 + 2148 y(is)24 b(compiled)g(by)g(a)h(compiler)-5 b(.)24 + b(This)g(is)g(also)h(called)f Fp(compilation)f(time)p + Fu(.)596 2327 y Fp(See)i(Also:)f Fu(programming)f(time)p + Fp(,)h Fu(run)h(time.)396 2532 y Fv(computing)i(en)l(vir)n(onment)596 + 2761 y Fu(computer)-5 b(.)22 b(More)h(precisely)-6 b(,)22 + b(a)i(computer)e(with)h(its)f(arrangement)h(of)g(processors)g(and)g + (asso-)596 2890 y(ciated)h(memory)-6 b(,)24 b(possibly)f(shared)i + (among)f(processors.)596 3070 y Fp(See)h(Also:)f Fu(sequential)g + (computing)f(en)l(vironment)p Fp(,)g Fu(distrib)n(uted)g(computing)h + (en)l(vironment.)396 3274 y Fv(conf)n(ormab)o(le)k(container)o(s)596 + 3503 y Fu(containers)c(with)g(conformable)g(domains.)596 + 3682 y Fp(See)h(Also:)f Fu(conformable)g(domains)p Fp(,)g + Fu(data)h(parallel.)396 3887 y Fv(conf)n(ormab)o(le)j(domains)596 + 4116 y Fu(domains)j(with)g(the)i(\223same)f(shape\224)h(so)f(that)g + (corresponding)g(dimensions)e(ha)n(v)o(e)i(the)g(same)596 + 4245 y(number)45 b(of)h(elements.)f(Scalars,)i(deemed)f(conformable)f + (with)g(an)o(y)h(domain,)e(get)i(\223e)o(x-)596 4375 + y(panded\224)33 b(to)g(the)g(domain')-5 b(s)32 b(shape.)h(Assignment)f + (can)i(operate)f(on)h(containers)f(with)f(con-)596 4504 + y(formable)24 b(domains.)596 4684 y Fp(See)h(Also:)f + Fu(conformable)g(containers)p Fp(,)h Fu(data)f(parallel.)p + Black 3734 5547 a Fp(202)p Black eop + %%Page: 203 203 + 203 202 bop Black 3523 -132 a Fp(Glossary)p Black 396 + 51 a Fv(container)596 280 y Fu(an)22 b(object)f(that)g(stores)h(other)f + (objects,)g(controlling)g(their)g(allocation,)g(deallocation,)g(and)h + (ac-)596 410 y(cess.)29 b(Similar)f(to)h(C++)h(containers,)f(the)g + (most)f(important)f(POOMA)i(containers)g(are)h Fq(Ar-)596 + 539 y(ray)p Fu(s)23 b(and)i Fq(Field)p Fu(s.)596 718 + y Fp(See)52 b(Also:)g Fq(Array)p Fp(,)g Fq(DynamicArray)p + Fp(,)d Fq(Field)p Fp(,)j Fq(Tensor)p Fp(,)f Fq(TinyMatrix)p + Fp(,)596 848 y Fq(Vector)p Fu(.)396 1052 y Fv(container)28 + b(v)n(alue)596 1281 y Fu(object)j(stored)h(within)f(a)h(container)g + (and)h(usually)e(addressable)h(via)g(an)g(inde)o(x.)f(Synon)o(yms)596 + 1411 y(include)24 b(\223element\224)h(and)f(\223v)n(alue\224.)396 + 1794 y Fv(conte)o(xt)596 2023 y Fu(a)h(collection)f(of)g(shared)h + (memory)f(and)h(processors)g(that)f(can)h(e)o(x)o(ecute)f(a)i(program)e + (or)h(a)g(por)n(-)596 2153 y(tion)c(of)i(a)f(program.)g(It)h(can)g(ha)n + (v)o(e)f(one)g(or)h(more)f(processors,)g(b)n(ut)g(all)g(these)g + (processors)g(must)596 2283 y(access)34 b(the)f(same)h(shared)g(memory) + -6 b(.)32 b(Usually)h(the)h(computer)f(and)g(its)g(operating)h(system,) + 596 2412 y(not)24 b(the)g(programmer)l(,)h(determine)f(the)h(a)n(v)n + (ailable)f(conte)o(xts.)596 2591 y Fp(See)h(Also:)f Fu(distrib)n(uted)f + (computing)g(en)l(vironment)p Fp(,)h Fu(layout.)396 2796 + y Fv(conte)o(xt)29 b(mapper)596 3025 y Fu(indicates)c(ho)n(w)h(a)h + (container')-5 b(s)26 b(patches)h(are)g(mapped)g(to)f(processors)g(and) + h(shared)g(memory)-6 b(.)596 3154 y(T)e(w)o(o)33 b(common)f(choices)h + (are)h(distrib)n(ution)d(among)i(the)g(v)n(arious)g(processors)g(and)g + (replica-)596 3284 y(tion.)596 3463 y Fp(See)25 b(Also:)f + Fu(conte)o(xt)p Fp(,)g Fu(patch.)396 3667 y Fv(corner)k(position)596 + 3896 y Fu(speci\002es)d(the)f Ff(R)1192 3857 y Fe(d)1247 + 3896 y Fu(point)g(corresponding)g(to)g(a)i Fq(Field)d + Fu(domain')-5 b(s)24 b(lo)n(wer)l(,)g(left)g(corner)-5 + b(.)596 4076 y Fp(See)25 b(Also:)f Fu(mesh)p Fp(,)g Fu(cell)h(size.)-2 + 4578 y Fx(D)396 4794 y Fv(data)k(parallel)596 5023 y + Fu(describes)e(an)g(e)o(xpression)f(in)l(v)n(olving)f(a)j + (\(non-singleton\))d(subset)i(of)g(a)h(container')-5 + b(s)26 b(v)n(alues.)p Black 3734 5547 a Fp(203)p Black + eop + %%Page: 204 204 + 204 203 bop Black 3523 -132 a Fp(Glossary)p Black 596 + 51 a Fu(F)o(or)24 b(e)o(xample,)g Fq(sin\(C\))g Fu(is)g(an)h(e)o + (xpression)e(indicating)h(that)g(the)h Fq(sin)f Fu(is)g(applied)g(to)h + (each)596 180 y(v)n(alue)f(in)g(container)h(C.)596 360 + y Fp(See)g(Also:)f Fu(element)g(wise)p Fp(,)h Fu(relation)p + Fp(,)f Fu(stencil.)396 564 y Fv(distrib)n(uted)k(computing)f(en)l(vir)n + (onment)596 793 y Fu(computing)22 b(en)l(vironment)g(with)h(one)h(or)g + (more)f(processors)h(each)g(ha)n(ving)f(associated)h(mem-)596 + 923 y(ory)-6 b(,)23 b(possibly)f(shared.)i(In)g(some)g(conte)o(xts,)f + (it)g(refers)i(to)f(strictly)f(multiprocessor)f(computa-)596 + 1052 y(tion.)596 1231 y Fp(See)j(Also:)f Fu(computing)f(en)l(vironment) + p Fp(,)g Fu(sequential)h(computing)f(en)l(vironment.)396 + 1436 y Fv(domain)596 1665 y Fu(a)e(set)g(of)h(points)e(on)h(which)g(a)h + (container)f(can)h(de\002ne)g(v)n(alues.)e(F)o(or)i(e)o(xample,)e(a)i + (set)f(of)g(discrete)596 1794 y(inte)o(gral)i(n-tuples)h(in)h + (n-dimensional)e(space)i(frequently)f(serv)o(e)h(as)g(container)f + (domains.)596 1974 y Fp(See)h(Also:)f Fu(container)p + Fp(,)g Fu(interv)n(al)p Fp(,)g Fu(stride)p Fp(,)g Fu(range.)396 + 2178 y Fv(domain)j(triplet)h(notation)596 2407 y Fu(notation)19 + b([)p Fq(begin)p Fu(:)p Fq(end)p Fu(:)p Fq(stride)p Fu(])e + (representing)j(the)g(mathematical)g(set)g({be)o(gin,)f(be)o(gin)596 + 2537 y(+)25 b(stride,)g(be)o(gin)g(+)h(2stride,)e(.)15 + b(.)g(.)g(,)25 b(end}.)h Fq(end)e Fu(is)h(in)h(the)f(set)g(only)g(if)h + (it)f(equals)g Fq(begin)f Fu(plus)596 2666 y(some)29 + b(inte)o(gral)g(multiple)g(of)h Fq(stride)p Fu(.)f(This)g(notation)g + (can)i(abbre)n(viate)e(man)o(y)h(domains.)596 2796 y(It)24 + b(is)f(e)o(xtended)g(to)h(multiple)e(dimensions)g(by)i(separating)g + (the)f(dimensions')g(sets)g(with)g(com-)596 2925 y(mas:)h([)p + Fq(begin0)p Fu(:)p Fq(end0)p Fu(:)p Fq(stride0)p Fu(,)p + Fq(begin1)o Fu(:)p Fq(end)o(1)p Fu(:)p Fq(st)o(ride)o(1)p + Fu(].)596 3104 y Fp(See)h(Also:)f Fu(domain.)396 3309 + y Fo(DynamicArray)596 3538 y Fu(a)c(POOMA)h(container)f(generalizing)g + (one-dimensional)e Fq(Array)p Fu(s)h(by)i(supporting)d(domain)596 + 3667 y(resizing)k(at)h(run-time.)f(It)h(maps)g(indices)f(to)h(v)n + (alues)f(in)g(constant)h(time,)f(ignoring)g(the)g(time)h(to)596 + 3797 y(compute)h(the)g(v)n(alues)g(if)h(applicable.)f + Fq(DynamicArray)p Fu(s)e(are)j(\002rst-class)g(objects.)596 + 3976 y Fp(See)g(Also:)f Fu(container)p Fp(,)g Fq(Array)p + Fp(,)g Fq(Field)p Fu(.)-2 4479 y Fx(E)396 4694 y Fv(element)596 + 4873 y Fp(See:)h Fu(container)f(v)n(alue)p Black 3734 + 5547 a Fp(204)p Black eop + %%Page: 205 205 + 205 204 bop Black 3523 -132 a Fp(Glossary)p Black 396 + 51 a Fv(element)28 b(wise)596 280 y Fu(describes)19 b(accesses)i(to)f + (indi)n(vidual)d(v)n(alues)i(within)g(a)i(container)-5 + b(.)19 b(F)o(or)h(e)o(xample,)f Fq(C\(-4,3\))596 410 + y Fu(represents)24 b(one)h(particular)g(v)n(alue)f(in)g(the)h + (container)g(C.)596 589 y Fp(See)g(Also:)f Fu(data)h(parallel)p + Fp(,)f Fu(relation)p Fp(,)h Fu(stencil.)396 793 y Fv(engine)596 + 1022 y Fu(stores)35 b(or)h(computes)f(a)h(container')-5 + b(s)35 b(v)n(alues.)g(These)h(can)g(be)g(specialized,)g(e.g.,)g(to)f + (mini-)596 1152 y(mize)24 b(storage)g(when)g(a)h(domain)e(has)i(fe)n(w) + f(distinct)f(v)n(alues.)g(Separating)i(a)g(container)f(and)g(its)596 + 1281 y(storage)g(also)h(permits)e(vie)n(ws)h(of)h(a)g(container)-5 + b(.)596 1461 y Fp(See)25 b(Also:)f Fq(Brick)g(Engine)p + Fp(,)f Fu(container)p Fp(,)h Fu(vie)n(w)h(of)f(a)i(container.)396 + 1665 y Fv(en)o(umeration)596 1894 y Fu(C++)39 b(inte)o(gral)e(type)h + (with)g(named)g(constants.)f(These)i(are)g(frequently)f(used)g(in)g + (template)596 2023 y(programming)23 b(because)i(the)o(y)f(can)h(be)g + (used)g(as)g(template)f(ar)n(guments.)396 2407 y Fv(e)o(x)o(ecution)29 + b(time)596 2586 y Fp(See:)c Fu(run)g(time)396 2791 y + Fv(e)o(xternal)k(guar)n(d)e(la)n(y)o(er)596 3020 y Fu(guard)i(layer)h + (surrounding)e(a)i(container')-5 b(s)29 b(domain)g(used)g(to)g(ease)h + (computation)e(along)h(the)596 3149 y(domain')-5 b(s)26 + b(edges)h(by)g(permitting)f(the)i(same)f(computations)f(as)h(for)h + (more)g(internal)f(compu-)596 3279 y(tations.)c(It)i(is)f(an)h + (optimization,)e(not)h(required)h(for)g(program)f(correctness.)596 + 3458 y Fp(See)h(Also:)f Fu(guard)h(layer)p Fp(,)g Fu(internal)f(guard)h + (layer)p Fp(,)g Fu(patch.)-2 3960 y Fx(F)396 4176 y Fo(Field)596 + 4405 y Fu(a)30 b(POOMA)g(container)g(representing)g(an)h + Fq(Array)e Fu(with)h(spatial)f(e)o(xtent.)g(It)i(also)f(supports)596 + 4535 y(multiple)g(v)n(alues)i(and)g(multiple)f(materials)h(ha)n(ving)g + (the)g(same)g(inde)o(x.)g(It)g(maps)g(indices)g(to)596 + 4664 y(v)n(alues)g(in)h(constant)g(time,)g(ignoring)f(the)h(time)g(to)g + (compute)g(the)g(v)n(alues)g(if)g(applicable.)g(It)596 + 4794 y(also)c(supports)g(geometric)h(computations)e(such)i(as)g(the)h + (distance)e(between)i(tw)o(o)e(cells)h(and)596 4923 y(normals)23 + b(to)i(a)g(cell.)g Fq(Field)p Fu(s)e(are)j(\002rst-class)e(objects.)596 + 5103 y Fp(See)h(Also:)f Fu(container)p Fp(,)g Fu(cell)p + Fp(,)h Fu(mesh)p Fp(,)f Fq(Array)p Fp(,)g Fq(DynamicArray)p + Fu(.)p Black 3734 5547 a Fp(205)p Black eop + %%Page: 206 206 + 206 205 bop Black 3523 -132 a Fp(Glossary)p Black 396 + 51 a Fv(\002r)o(st-c)n(lass)29 b(type)596 280 y Fu(a)21 + b(type)g(of)g(object)g(with)g(all)f(the)i(capabilities)e(of)h(the)g(b)n + (uilt-in)f(type)h(ha)n(ving)f(the)h(most)f(capabil-)596 + 410 y(ities.)e(F)o(or)h(e)o(xample,)g Fq(char)g Fu(and)g + Fq(int)g Fu(are)h(\002rst-class)f(types)g(in)g(C++)i(because)e(the)o(y) + g(may)g(be)596 539 y(declared)28 b(an)o(ywhere,)f(stored)g(in)h + (automatic)e(v)n(ariables,)h(accessed)i(an)o(ywhere,)e(copied,)g(and) + 596 669 y(passed)i(by)g(both)g(v)n(alue)g(and)h(reference.)h(POOMA)f + Fq(Array)f Fu(and)g Fq(Field)g Fu(are)h(\002rst-class)596 + 798 y(types.)396 1182 y Fv(function)e(object)596 1411 + y Fu(object)g(that)h(can)g(beha)n(v)o(e)g(as)g(a)g(function.)g(The)g + (object)f(can)i(store)e(v)n(alues)h(that)f(the)h(function)596 + 1540 y(uses.)c(If)h(its)f(function)g(is)h(called)f Fq(operator\(\))p + Fu(,)f(the)h(object)h(can)g(be)g(in)l(v)n(ok)o(ed)f(as)h(a)g(func-)596 + 1670 y(tion.)396 2053 y Fv(function)i(template)596 2283 + y Fu(a)c(de\002nition)g(of)h(an)f(unbounded)g(set)g(of)h(related)f + (functions,)g(all)g(ha)n(ving)g(the)g(same)g(name)h(b)n(ut)596 + 2412 y(whose)d(types)g(can)g(depend)h(on)f(template)g(parameters.)g + (The)o(y)g(are)h(particularly)f(useful)g(when)596 2542 + y(o)o(v)o(erloading)79 b Fp(oper)o(ator)26 b(functions)80 + b Fu(to)27 b(accept)h(parameters)f(that)g(themselv)o(es)f(depend)h(on) + 596 2671 y(templates.)-2 3353 y Fx(G)396 3568 y Fv(guar)n(d)h(la)n(y)o + (er)596 3797 y Fu(domain)d(surrounding)g(each)j(patch)e(of)h(a)g + (container')-5 b(s)25 b(domain.)h(It)h(contains)e(read-only)i(v)n(al-) + 596 3927 y(ues.)43 b(External)h(guard)g(layers)g(ease)g(programming,)e + (while)i(internal)f(guard)h(layers)g(per)n(-)596 4057 + y(mit)35 b(each)h(patch')-5 b(s)35 b(computation)g(to)g(be)h(occur)h + (without)d(cop)o(ying)h(v)n(alues)g(from)h(adjacent)596 + 4186 y(patches.)24 b(The)o(y)g(are)i(optimizations,)c(not)i(required)h + (for)g(program)g(correctness.)596 4365 y Fp(See)g(Also:)f + Fu(e)o(xternal)g(guard)h(layer)p Fp(,)g Fu(internal)f(guard)h(layer)p + Fp(,)g Fu(partition)p Fp(,)e Fu(patch)p Fp(,)i Fu(domain.)p + Black 3732 5547 a Fp(206)p Black eop + %%Page: 207 207 + 207 206 bop Black 3523 -132 a Fp(Glossary)p Black -2 + 90 a Fx(I)396 305 y Fv(inde)o(x)596 534 y Fu(a)30 b(position)f(in)g(a)i + (domain)e(usually)h(denoted)f(by)h(an)h(ordered)f(tuple.)g(More)g(than) + g(one)g(inde)o(x)596 664 y(are)25 b(called)g(indices.)596 + 843 y Fp(See)g(Also:)f Fu(domain.)396 1048 y Fv(instantiation)596 + 1227 y Fp(See:)h Fu(template)f(instantiation)396 1431 + y Fv(indices)596 1660 y Fu(More)g(than)h(one)f(inde)o(x.)596 + 1840 y Fp(See)h(Also:)f Fu(inde)o(x.)396 2044 y Fv(internal)k(guar)n(d) + f(la)n(y)o(er)596 2273 y Fu(guard)33 b(layer)h(containing)f(copies)h + (of)f(adjacent)h(patches')g(v)n(alues.)f(These)h(copies)g(can)g(per)n + (-)596 2402 y(mit)23 b(an)h(indi)n(vidual)e(patch')-5 + b(s)24 b(computation)e(to)i(occur)h(without)e(asking)g(adjacent)i + (patches)f(for)596 2532 y(v)n(alues.)f(This)h(can)i(speed)e + (computation)f(b)n(ut)i(are)g(not)f(required)h(for)g(program)g + (correctness.)596 2711 y Fp(See)g(Also:)f Fu(guard)h(layer)p + Fp(,)g Fu(e)o(xternal)f(guard)h(layer)p Fp(,)g Fu(patch.)396 + 2916 y Fv(inter)q(v)n(al)596 3145 y Fu(a)35 b(set)g(of)g(inte)o(gral)f + (points)f(between)i(tw)o(o)g(endpoints.)e(This)h(domain)g(is)h + (frequently)f(repre-)596 3274 y(sented)28 b(using)g(mathematical)g + (interv)n(al)g(notation)f([a,b])j(e)n(v)o(en)e(though)g(it)g(contains)g + (only)g(the)596 3404 y(inte)o(gral)19 b(points,)h(e.g.,)g(a,)h(a+1,)g + (a+2,)h(.)15 b(.)g(.)g(,)20 b(b)l(.)h(It)f(is)h(also)f(generalized)h + (to)g(an)g(n-dimensional)e(in-)596 3533 y(terv)n(al)g(as)i(the)f + (direct)g(product)g(of)g(one-dimensional)e(interv)n(als.)h(Man)o(y)h + (containers')g(domains)596 3663 y(consist)j(of)i(these)g(sets)f(of)h + (ordered)g(tuples.)596 3842 y Fp(See)g(Also:)f Fu(domain)p + Fp(,)g Fu(stride)p Fp(,)g Fu(range.)-2 4344 y Fx(L)396 + 4560 y Fv(la)n(y)n(out)596 4789 y Fu(a)k(map)f(from)g(an)h(inde)o(x)f + (to)g(processor\(s\))h(and)g(memory)f(used)g(to)h(compute)e(the)i + (container')-5 b(s)596 4919 y(associated)32 b(v)n(alue.)g(F)o(or)g(a)h + (uniprocessor)f(implementation,)e(a)j(container')-5 b(s)32 + b(layout)g(al)o(w)o(ays)596 5048 y(consists)25 b(of)i(its)f(domain,)g + (the)h(processor)l(,)g(and)g(its)f(memory)-6 b(.)26 b(F)o(or)h(a)g + (multiprocessor)e(imple-)p Black 3730 5547 a Fp(207)p + Black eop + %%Page: 208 208 + 208 207 bop Black 3523 -132 a Fp(Glossary)p Black 596 + 51 a Fu(mentation,)18 b(the)h(layout)g(maps)g(portions)f(of)h(the)h + (domain)e(to)h(\(possibly)f(dif)n(ferent\))i(processors)596 + 180 y(and)k(memory)-6 b(.)596 360 y Fp(See)25 b(Also:)f + Fu(container)p Fp(,)g Fu(domain.)-2 862 y Fx(M)396 1078 + y Fv(matrix)596 1257 y Fp(See:)h Fq(TinyMatrix)396 1461 + y Fv(mesh)596 1690 y Fu(a)32 b Fq(Field)p Fu(')-5 b(s)31 + b(map)h(from)g(indices)g(to)f(geometric)h(v)n(alues)g(such)g(as)g(cell) + g(size,)h(edge)f(length,)596 1820 y(and)24 b(cell)h(normals.)f(In)h + (other)f(w)o(ords,)h(it)f(speci\002es)h(a)g Fq(Field)p + Fu(')-5 b(s)23 b(\223spatial)i(e)o(xtent\224.)596 1999 + y Fp(See)g(Also:)f Fq(Field)p Fp(,)f Fu(cell)p Fp(,)i + Fu(cell)g(size)p Fp(,)g Fu(corner)g(position)p Fp(,)e + Fu(layout.)-2 2502 y Fx(O)396 2717 y Fv(operator)28 b(function)596 + 2946 y Fu(function)e(de\002ning)h(a)h(function)f(in)l(v)n(ok)o(ed)g + (using)f(a)i(C++)g(operator)-5 b(.)27 b(F)o(or)h(e)o(xample,)f(the)g + Fq(op-)596 3076 y(erator+)c Fu(function)h(de\002nes)h(the)f(result)h + (of)g(using)e(the)i Fq(+)p Fu(.)-2 3758 y Fx(P)396 3973 + y Fv(par)r(tition)596 4202 y Fu(a)d(speci\002cation)g(ho)n(w)f(to)h(di) + n(vide)f(a)i(container')-5 b(s)21 b(domain)g(into)g(patches)i(for)f + (distrib)n(uted)e(com-)596 4332 y(putation.)31 b(It)h(can)h(be)g + (independent)e(of)i(the)f(domain')-5 b(s)31 b(size.)h(F)o(or)h(e)o + (xample,)f(it)f(di)n(vide)h(each)596 4461 y(domain)26 + b(into)h(halv)o(es,)g(yielding)f(a)i(total)f(of)h(eight)f(patches)h(in) + f(three)h(dimensions.)d(See)k(Fig-)596 4591 y(ure)c(3-4)f(for)h(an)g + (illustration.)596 4770 y Fp(See)g(Also:)f Fu(guard)h(layer)p + Fp(,)g Fu(patch)p Fp(,)f Fu(domain.)p Black 3734 5547 + a Fp(208)p Black eop + %%Page: 209 209 + 209 208 bop Black 3523 -132 a Fp(Glossary)p Black 396 + 51 a Fv(patc)o(h)596 280 y Fu(subset)35 b(of)i(a)g(container')-5 + b(s)35 b(domain)h(with)f(v)n(alues)h(computed)g(by)g(a)h(particular)f + (conte)o(xt.)f(A)596 410 y(partition)19 b(splits)h(a)h(domain)g(into)f + (patches.)h(It)g(may)g(be)g(surrounded)f(by)h(e)o(xternal)g(and)g + (internal)596 539 y(guard)j(layers.)596 718 y Fp(See)h(Also:)f + Fu(partition)p Fp(,)f Fu(guard)i(layer)p Fp(,)g Fu(domain.)396 + 923 y Fv(point)596 1152 y Fu(a)32 b(location)g(in)g(multidimensional)d + (space)k Ff(R)2202 1112 y Fe(d)2232 1152 y Fu(.)g(In)f(contrast,)g + (indices)g(specify)g(positions)f(in)596 1281 y(container)24 + b(domains.)596 1461 y Fp(See)h(Also:)f Fq(Field)p Fp(,)f + Fu(mesh)p Fp(,)i Fu(inde)o(x.)396 1665 y Fv(pr)n(ogramming)h(time)596 + 1894 y Fu(in)i(the)h(process)g(from)g(writing)g(a)g(program)g(to)g(e)o + (x)o(ecuting)e(it,)i(the)g(time)g(when)g(the)g(program)596 + 2023 y(is)24 b(being)g(written)g(by)h(a)g(programmer)-5 + b(.)596 2203 y Fp(See)25 b(Also:)f Fu(compile)g(time)p + Fp(,)g Fu(run)g(time.)-2 2705 y Fx(R)396 2921 y Fv(rang)q(e)596 + 3150 y Fu(a)29 b(set)h(of)f(inte)o(gral)g(points)f(between)i(tw)o(o)f + (endpoints)f(and)i(separated)f(by)h(a)g(stride.)f(This)f(do-)596 + 3279 y(main,)37 b(frequently)i(represented)g(by)f(domain)g(triplets)f + ([b:e:s],)i(can)g(also)f(be)h(represented)596 3409 y(mathematically)22 + b(as)i(an)g(inte)o(gral)f(interv)n(al)f([b,e])j(with)e(stride)g(s,)h + (i.e.,)f({a,)h(a+s,)g(a+2s,)g(.)15 b(.)g(.)g(,)24 b(b}.)596 + 3538 y(It)d(is)f(generalized)i(to)f(an)g(n-dimensional)e(range)j(as)f + (the)g(direct)g(product)g(of)g(one-dimensional)596 3668 + y(ranges.)596 3847 y Fp(See)k(Also:)f Fu(stride)p Fp(,)g + Fu(interv)n(al)p Fp(,)g Fu(domain.)396 4052 y Fv(ref)o(erence)29 + b(semantics)596 4281 y Fu(a)37 b(cop)o(y)h(of)f(an)h(object)f + Fq(o)g Fu(refers)h(to)f(the)h(object)f Fq(o)g Fu(such)g(that)g + (changing)g(either)g(one)h(also)596 4410 y(changes)24 + b(the)h(other)-5 b(.)24 b(This)g(is)g(the)h(opposite)f(of)h(v)n(alue)f + (semantics.)396 4794 y Fv(relation)596 5023 y Fu(dependence)j(between)g + (a)h(dependent)e(container)h(and)g(one)g(or)h(more)f(independent)f + (contain-)p Black 3734 5547 a Fp(209)p Black eop + %%Page: 210 210 + 210 209 bop Black 3523 -132 a Fp(Glossary)p Black 596 + 51 a Fu(ers)34 b(and)g(an)g(associated)g(function.)f(If)h(a)h + (dependent)f(container')-5 b(s)33 b(v)n(alues)g(are)i(needed)f(and)596 + 180 y(one)h(or)i(more)e(of)h(the)g(independent)f(containers')h(v)n + (alues)f(ha)n(v)o(e)h(changed,)g(the)g(dependent)596 + 310 y(container')-5 b(s)32 b(v)n(alues)h(are)h(computed)e(using)h(the)g + (function)g(and)g(the)g(independent)g(contain-)596 439 + y(ers')25 b(v)n(alues.)f(Relations)g(implement)f(\223lazy)i(e)n(v)n + (aluation\224.)596 619 y Fp(See)g(Also:)f Fu(data)h(parallel)p + Fp(,)f Fu(element)h(wise)p Fp(,)f Fu(stencil.)396 823 + y Fv(run)j(time)596 1052 y Fu(in)h(the)h(process)g(from)g(writing)g(a)g + (program)g(to)g(e)o(x)o(ecuting)e(it,)i(the)g(time)g(when)g(the)g + (program)596 1182 y(is)24 b(e)o(x)o(ecuted.)g(This)g(is)g(also)h + (called)f Fp(e)n(xecution)h(time)p Fu(.)596 1361 y Fp(See)g(Also:)f + Fu(compile)g(time)p Fp(,)g Fu(programming)f(time.)-2 + 1863 y Fx(S)396 2079 y Fv(sequential)29 b(computing)e(en)l(vir)n + (onment)596 2308 y Fu(a)37 b(computing)e(en)l(vironment)g(with)h(one)h + (processor)f(and)h(associated)f(memory)-6 b(.)35 b(Only)h(one)596 + 2438 y(processor)24 b(e)o(x)o(ecutes)g(a)h(program)g(e)n(v)o(en)f(if)g + (the)h(computer)f(itself)g(has)h(multiple)e(processors.)596 + 2617 y Fp(See)i(Also:)f Fu(computing)f(en)l(vironment)p + Fp(,)g Fu(distrib)n(uted)h(computing)f(en)l(vironment.)396 + 2821 y Fv(stencil)596 3050 y Fu(set)34 b(of)g(v)n(alues)g(neighboring)f + (a)i(container)f(inde)o(x)g(and)g(a)h(function)f(using)f(those)h(v)n + (alues)g(to)596 3180 y(compute)h(it.)g(F)o(or)h(e)o(xample,)f(the)h + (stencil)f(in)g(a)h(tw)o(o-dimensional)e(Conw)o(ay)i(game)f(of)h(life) + 596 3309 y(consists)26 b(of)i(an)g(inde)o(x')-5 b(s)26 + b(eight)h(neighbors)g(and)g(a)i(function)d(that)i(sets)f(its)g(v)n + (alue)g(to)h(\223li)n(v)o(e\224)e(if)596 3439 y(it)e(is)g(already)h(li) + n(v)o(e)f(and)g(it)h(has)f(tw)o(o)h(neighbors)f(or)g(it)h(has)f(e)o + (xactly)h(three)g(li)n(v)o(e)e(neighbors.)596 3618 y + Fp(See)i(Also:)f Fu(data)h(parallel)p Fp(,)f Fu(element)h(wise)p + Fp(,)f Fu(relation.)396 3822 y Fv(stride)596 4052 y Fu(spacing)19 + b(between)h(re)o(gularly-spaced)g(points)f(in)h(a)g(domain.)f(F)o(or)h + (e)o(xample,)f(the)h(set)g(of)h(points)596 4181 y(a,)k(a+2,)g(a+4,)g(.) + 15 b(.)g(.)g(,)24 b(b-2,)h(b)f(is)h(speci\002ed)g(by)f([a,b])i(with)e + (stride)g(2.)g(It)h(is)g(a)g(domain.)596 4360 y Fp(See)g(Also:)f + Fu(range)p Fp(,)h Fu(interv)n(al)p Fp(,)f Fu(domain.)396 + 4565 y Fv(suite)k(name)596 4794 y Fu(an)41 b(arbitrary)g(string)f + (denoting)g(a)i(particular)f(toolkit)f(con\002guration.)g(F)o(or)h(e)o + (xample,)f(the)596 4923 y(string)25 b(\223SUNKCC-deb)n(ug\224)k(might)c + (indicate)i(a)g(con\002guration)f(for)h(the)g(Sun\231)g(Solaris)f(op-)p + Black 3734 5547 a Fp(210)p Black eop + %%Page: 211 211 + 211 210 bop Black 3523 -132 a Fp(Glossary)p Black 596 + 51 a Fu(erating)22 b(system)f(and)i(the)f(KCC)i(C++)g(compiler)d(with)h + (deb)n(ugging)g(support.)f(By)i(def)o(ault,)f(the)596 + 180 y(suite)i(name)g(it)h(is)f(equal)h(to)f(the)h(con\002guration')-5 + b(s)23 b(architecture)j(name.)-2 862 y Fx(T)396 1078 + y Fv(template)596 1307 y Fu(class)i(or)i(function)e(de\002nition)g(ha)n + (ving)g(template)h(parameters.)g(These)g(parameters')g(v)n(alues)596 + 1436 y(are)19 b(used)g(at)h(compile)e(time,)g(not)h(run)g(time,)f(so)h + (the)o(y)g(may)g(include)f(types)h(and)g(other)g(compile-)596 + 1566 y(time)24 b(v)n(alues.)596 1745 y Fp(See)h(Also:)f + Fu(template)g(instantiation)p Fp(,)e Fu(template)i(specialization.)396 + 1949 y Fv(template)29 b(instantiation)596 2179 y Fu(applying)22 + b(a)i(template)e(class)i(to)f(template)g(parameter)h(ar)n(guments)e(to) + i(create)g(a)g(type.)f(F)o(or)g(e)o(x-)596 2308 y(ample,)g + Fq(foo)e Fu(instantiates)h Fq(template)64 b()g(class)f(foo)31 b Fu(with)g(the)g(type)h + Fq(double)e Fu(and)h(the)h(constant)f(inte)o(ger)f(3.)i(T)-7 + b(emplate)596 2567 y(instantiation)22 b(is)i(analogous)g(to)h(applying) + e(a)i(function)f(to)h(function)f(ar)n(guments.)596 2746 + y Fp(See)h(Also:)f Fu(template.)396 2951 y Fv(template)29 + b(specialization)596 3180 y Fu(class)24 b(or)h(function)f(de\002nition) + g(for)h(a)g(particular)g(\(special\))g(subset)f(of)g(template)g(ar)n + (guments.)596 3359 y Fp(See)h(Also:)f Fu(template.)396 + 3563 y Fo(Tensor)596 3793 y Fu(a)d(POOMA)g(container)h(implementing)d + (multidimensional)f(mathematical)i(tensors)h(as)g(\002rst-)596 + 3922 y(class)j(objects.)596 4101 y Fp(See)h(Also:)f Fq(TinyMatrix)p + Fp(,)e Fq(Vector)p Fu(.)396 4306 y Fo(TinyMatrix)596 + 4535 y Fu(a)47 b(POOMA)h(container)f(implementing)e(tw)o(o-dimensional) + h(mathematical)g(matrices)h(as)596 4664 y(\002rst-class)24 + b(objects.)596 4844 y Fp(See)h(Also:)f Fq(Tensor)p Fp(,)f + Fq(Vector)p Fu(.)p Black 3734 5547 a Fp(211)p Black eop + %%Page: 212 212 + 212 211 bop Black 3523 -132 a Fp(Glossary)p Black 396 + 51 a Fv(trait)596 280 y Fu(a)25 b(characteristic)g(of)g(a)g(type.)596 + 459 y Fp(See)g(Also:)f Fu(traits)g(class.)396 664 y Fv(traits)29 + b(c)n(lass)596 893 y Fu(a)g(class)h(containing)e(one)h(or)h(more)f + (traits)g(all)g(describing)g(a)h(particular)f(type')-5 + b(s)29 b(characteris-)596 1022 y(tics.)596 1202 y Fp(See)c(Also:)f + Fu(trait.)396 1406 y Fv(T)-9 b(uring)27 b(complete)596 + 1635 y Fu(describes)e(a)i(language)f(that)f(can)h(compute)g(an)o + (ything)e(that)i(can)g(be)g(computed.)f(That)h(is,)f(the)596 + 1764 y(language)j(for)i(computation)d(is)h(as)h(po)n(werful)g(as)g(it)f + (can)i(be.)f(Most)f(wide-spread)g(program-)596 1894 y(ming)23 + b(languages)i(are)g(T)l(uring-complete,)e(including)g(C++,)j(C,)f(and)g + (F)o(ortran.)-2 2576 y Fx(V)396 2791 y Fv(v)n(alue)596 + 2971 y Fp(See:)g Fu(container)f(v)n(alue)396 3175 y Fo(Vector)596 + 3404 y Fu(a)d(POOMA)h(container)f(implementing)e(multidimensional)g + (mathematical)h(v)o(ectors,)h(i.e.,)g(an)596 3533 y(ordered)k(tuple)f + (of)h(components,)e(as)i(\002rst-class)g(objects.)596 + 3713 y Fp(See)g(Also:)f Fq(Tensor)p Fp(,)f Fq(TinyMatrix)p + Fu(.)396 3917 y Fv(vie)o(w)k(of)h(a)g(container)596 4146 + y Fu(a)38 b(container)f(deri)n(v)o(ed)g(from)h(another)-5 + b(.)37 b(The)h(vie)n(w')-5 b(s)37 b(domain)g(is)g(a)h(subset)f(of)h + (the)g(latter')-5 b(s,)596 4276 y(b)n(ut,)31 b(where)h(the)g(domains)f + (intersect,)g(accessing)h(a)h(v)n(alue)e(through)g(the)h(vie)n(w)f(is)h + (the)f(same)596 4405 y(as)d(accessing)g(it)f(through)h(the)g(original)f + (container)-5 b(.)27 b(In)i(F)o(ortran)f(90,)f(these)h(are)h(called)g + (array)596 4535 y(sections.)23 b(Only)h Fq(Array)p Fu(s,)g + Fq(DynamicArray)p Fu(s,)d(and)k Fq(Field)p Fu(s)f(support)f(vie)n(ws.) + 596 4714 y Fp(See)i(Also:)f Fu(container.)p Black 3734 + 5547 a Fp(212)p Black eop + %%Trailer + end + userdict /end-hook known{end-hook}if + %%EOF Index: wrap-programlisting.pl =================================================================== RCS file: wrap-programlisting.pl diff -N wrap-programlisting.pl *** /dev/null Fri Mar 23 21:37:44 2001 --- wrap-programlisting.pl Mon Mar 18 10:26:37 2002 *************** *** 0 **** --- 1,15 ---- + #! /usr/bin/perl -w + ## + ## Oldham, Jeffrey D. + ## 2002Feb11 + ## VSIPL++ + ## + ## Enclose Program Code Within Tag + + print(""); + print(") { + print; + } + print("]]>"); + print("\n"); From mark at codesourcery.com Mon Mar 18 17:35:33 2002 From: mark at codesourcery.com (Mark Mitchell) Date: Mon, 18 Mar 2002 09:35:33 -0800 Subject: generated files in CVS In-Reply-To: <1016472768.23385.ezmlm@pooma.codesourcery.com> References: <1016472768.23385.ezmlm@pooma.codesourcery.com> Message-ID: <11810000.1016472933@gandalf.codesourcery.com> It is generally a bad idea to add generated files to CVS because: 1. You have to update both the original and the generated file. 2. People forget. 3. People update the generated file, but not the original, and their changes get overwritten. Wouldn't it make more sense simply to include these in the distribution tarball, but not put them in CVS? -- Mark Mitchell mark at codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From oldham at codesourcery.com Mon Mar 18 17:50:41 2002 From: oldham at codesourcery.com (Jeffrey Oldham) Date: Mon, 18 Mar 2002 09:50:41 -0800 Subject: [pooma-dev] Re: generated files in CVS In-Reply-To: <11810000.1016472933@gandalf.codesourcery.com>; from mark@codesourcery.com on Mon, Mar 18, 2002 at 09:35:33AM -0800 References: <1016472768.23385.ezmlm@pooma.codesourcery.com> <11810000.1016472933@gandalf.codesourcery.com> Message-ID: <20020318095041.B17486@codesourcery.com> On Mon, Mar 18, 2002 at 09:35:33AM -0800, Mark Mitchell wrote: > It is generally a bad idea to add generated files to CVS because: > > 1. You have to update both the original and the generated file. > > 2. People forget. > > 3. People update the generated file, but not the original, and their > changes get overwritten. > > Wouldn't it make more sense simply to include these in the distribution > tarball, but not put them in CVS? OK. I will reverse these changes. Jeffrey D. Oldham oldham at codesourcery.com From andrius.kurtinaitis at maf.vu.lt Thu Mar 21 10:01:34 2002 From: andrius.kurtinaitis at maf.vu.lt (Andrius Kurtinaitis) Date: Thu, 21 Mar 2002 12:01:34 +0200 Subject: POOMA and Cygwin Message-ID: <3C99AF7E.1030009@maf.vu.lt> Hello, Are there any tips for building POOMA on cygwin? I tried it today and failed... :-( Thank you. Andrius Kurtinaitis From mark at codesourcery.com Thu Mar 21 17:33:52 2002 From: mark at codesourcery.com (Mark Mitchell) Date: Thu, 21 Mar 2002 09:33:52 -0800 Subject: POOMA and Cygwin In-Reply-To: <3C99AF7E.1030009@maf.vu.lt> References: <3C99AF7E.1030009@maf.vu.lt> Message-ID: <7270000.1016732031@gandalf.codesourcery.com> --On Thursday, March 21, 2002 12:01:34 PM +0200 Andrius Kurtinaitis wrote: > Hello, > > Are there any tips for building POOMA on cygwin? People have done it before, but we have not done it recently, so I'm not sure what the tricks are. Does anyone else know? -- Mark Mitchell mark at codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From jhh at caverns.com Fri Mar 22 06:29:38 2002 From: jhh at caverns.com (John Hall) Date: Thu, 21 Mar 2002 23:29:38 -0700 Subject: Our progress Message-ID: <2F6A25F4-3D5E-11D6-8066-0003938E6E0A@caverns.com> Gang: I just thought I would tell you about our status in our unfunded migration to the head version of Pooma R2. We are there. All of our open code base is now sitting on top of the head version of Pooma R2 and we are using all the new features except the extended centering options (this will require another pass). All of the regression tests I have run so far have passed as of this night. This is a lot of code and it puts Pooma through a grinder. Everything looks terrific though. We will probably try and get some timings to compare it to the old version in a little while. Thanks for all your hard work. In some other news, Jean Marshall has just gotten a job with Embarcadero Technologies, the makers of Describe (formerly GDPro) and she will be leaving the lab by either retirement or entreprenurial leave. Don Marshall is still a year away from retiring and is currently trying to work on Shavano. Dave Nystrom has moved to X-2 and is working on Crestone. There is a possibility that instead of quitting the lab like I had intended, I might finally be granted a change of station to Carlsbad, NM by Bill Press. There is an office for LANL there with around 35 people. If that continues to move forward then I will be working 1/2 time for Brown Rogers of X-4 and 1/2 time for Jim Morel of CCS-4. Even if I leave, I intend to find a way to finish the project that Don, Jean, Dave and I had started. Since KCC has been discontinued by Intel, there will probably be a renewed interest in GCC by LANL. I have already put Mark Mitchell into contact with Marv Alme from the Antero team and it looks like a new contract for GCC might eventually be forthcoming there. Marv is excited by the work Mark has been doing. Does anyone know the status of gcc/mpi/smarts/mm... on the new unix based Mac OS-X. Can I prototype parallel code on my G4 powerbook? This would go a long ways toward my getting the new version of our code running in parallel. Everything to this point has been CodeWarrior in serial on a mac and a PC. Thanks, John Hall From cummings at linkline.com Sat Mar 23 22:09:47 2002 From: cummings at linkline.com (Julian C. Cummings) Date: Sat, 23 Mar 2002 14:09:47 -0800 Subject: [pooma-dev] POOMA and Cygwin In-Reply-To: <3C99AF7E.1030009@maf.vu.lt> Message-ID: Andrius, Can you please give some more details on exactly what is going wrong when you try to build Pooma under Cygwin? I have done this successfully many times in the past, so perhaps I can help you sort out the problem. Are you using a current version of gcc such as version 3.0? -- Julian C. Dr. Julian C. Cummings Staff Scientist, CACR/Caltech (626) 395-2543 cummings at cacr.caltech.edu > -----Original Message----- > From: Andrius Kurtinaitis [mailto:andrius.kurtinaitis at maf.vu.lt] > Sent: Thursday, March 21, 2002 2:02 AM > To: pooma-dev at pooma.codesourcery.com > Subject: [pooma-dev] POOMA and Cygwin > > > Hello, > > Are there any tips for building POOMA on cygwin? > I tried it today and failed... > :-( > Thank you. > > Andrius Kurtinaitis > > From mark at codesourcery.com Mon Mar 25 17:50:16 2002 From: mark at codesourcery.com (Mark Mitchell) Date: Mon, 25 Mar 2002 09:50:16 -0800 Subject: Our progress In-Reply-To: <2F6A25F4-3D5E-11D6-8066-0003938E6E0A@caverns.com> References: <2F6A25F4-3D5E-11D6-8066-0003938E6E0A@caverns.com> Message-ID: <8490000.1017078615@gandalf.codesourcery.com> --On Thursday, March 21, 2002 11:29:38 PM -0700 John Hall wrote: > Gang: > I just thought I would tell you about our status in our unfunded > migration to the head version of Pooma R2. We are there. That's great; I'm glad there haven't been any major problems. > In some other news, Jean Marshall has just gotten a job with Embarcadero > Technologies, the makers of Describe (formerly GDPro) and she will be > leaving the lab by either retirement or entreprenurial leave. Don Wow, everyone is scattering. Do you have new email address for Jean and Dave? Please extend our best wishes to all of the R2 users -- including yourself of course -- in your various new careers. > Does anyone know the status of gcc/mpi/smarts/mm... on the new unix based > Mac OS-X. Can I prototype parallel code on my G4 powerbook? This would go > a long ways toward my getting the new version of our code running in > parallel. Everything to this point has been CodeWarrior in serial on a > mac and a PC. I have a MacOS X box -- but I haven't booted it up in about a year, so I really have no idea as to the current state of the GNU tools there. I do know that Apple has a large and proficient compiler group, and that they're working on a variety of projects, but I don't know the details. Yours, -- Mark Mitchell mark at codesourcery.com CodeSourcery, LLC http://www.codesourcery.com From andrius.kurtinaitis at maf.vu.lt Wed Mar 27 10:33:02 2002 From: andrius.kurtinaitis at maf.vu.lt (Andrius Kurtinaitis) Date: Wed, 27 Mar 2002 12:33:02 +0200 Subject: [pooma-dev] POOMA and Cygwin References: Message-ID: <3CA19FDE.9000802@maf.vu.lt> Hello, Thank you for the quick response! First of all, I do not know, where to get the Cygwin's gcc version 3.0. The last version I could find is 2.95.3-5. But I tried to compile the version 2.3.0, which does not require gcc 3.0. Today I reinstalled Cygwin and finally succeeded to compile Pooma. The only problem was that "configure" script could not find the directory "lib/LINUXEGCS". I created the dir manually and then everything was ok. The problem was, I suppose, with file system permissions on my Win2k box or an incomplete Cygwin installation. Could you please tell me, how to get cygwin with gcc 3.0 for the case if I decide to upgrade to pooma 2.4? Andrius Kurtinaitis From oldham at codesourcery.com Wed Mar 27 14:44:45 2002 From: oldham at codesourcery.com (Jeffrey Oldham) Date: Wed, 27 Mar 2002 06:44:45 -0800 Subject: [pooma-dev] POOMA and Cygwin In-Reply-To: <3CA19FDE.9000802@maf.vu.lt>; from andrius.kurtinaitis@maf.vu.lt on Wed, Mar 27, 2002 at 12:33:02PM +0200 References: <3CA19FDE.9000802@maf.vu.lt> Message-ID: <20020327064445.A3257@codesourcery.com> On Wed, Mar 27, 2002 at 12:33:02PM +0200, Andrius Kurtinaitis wrote: > Hello, > > Thank you for the quick response! > First of all, I do not know, where to get the Cygwin's gcc version 3.0. > The last version I could find is 2.95.3-5. > But I tried to compile the version 2.3.0, which does not require gcc 3.0. > > Today I reinstalled Cygwin and finally succeeded to compile Pooma. The > only problem was that "configure" script could not find the directory > "lib/LINUXEGCS". I created the dir manually and then everything was ok. > > The problem was, I suppose, with file system permissions on my Win2k box > or an incomplete Cygwin installation. Good news. > Could you please tell me, how to get cygwin with gcc 3.0 for the case if > I decide to upgrade to pooma 2.4? gcc 3.0.4 is available off http://gcc.gnu.org/releases.html. Thanks, Jeffrey D. Oldham oldham at codesourcery.com From andrius.kurtinaitis at maf.vu.lt Wed Mar 27 15:00:52 2002 From: andrius.kurtinaitis at maf.vu.lt (Andrius Kurtinaitis) Date: Wed, 27 Mar 2002 17:00:52 +0200 Subject: [pooma-dev] POOMA and Cygwin References: <3CA19FDE.9000802@maf.vu.lt> <20020327064445.A3257@codesourcery.com> Message-ID: <3CA1DEA4.4060302@maf.vu.lt> > gcc 3.0.4 is available off http://gcc.gnu.org/releases.html. But not Cygwin. I don't know if it is easy to compile it for windows... Andrius