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 + % @@address@hidden + % 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 + /@address@hidden div/hsc X}B/@address@hidden 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");