diff --git a/src/cell.h b/src/cell.h index 5e3b07f298d3a5f6de2c69a9d76aaacc59f33332..19bb11a7b9b4c49bcc4c04dc33019d5391749221 100644 --- a/src/cell.h +++ b/src/cell.h @@ -29,7 +29,12 @@ struct space; /* Some constants. */ #define cell_sid_dt 13 -#define cell_max_tag (1 << 16) + +/* Max tag size set to 2^29 to take into account some MPI implementations + * that use 2^31 as the upper bound on MPI tags and the fact that + * cell_next_tag is multiplied by 2 when passed to an MPI function. + * The maximum was lowered by a further factor of 2 to be on the safe side.*/ +#define cell_max_tag (1 << 29) /* Global variables. */ extern int cell_next_tag; diff --git a/theory/paper_pasc/Figures/Hierarchy3.pdf b/theory/paper_pasc/Figures/Hierarchy3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..235cd289b1dbda5ac509e46f5432bdaa7d636724 Binary files /dev/null and b/theory/paper_pasc/Figures/Hierarchy3.pdf differ diff --git a/theory/paper_pasc/Figures/Hierarchy3.svg b/theory/paper_pasc/Figures/Hierarchy3.svg new file mode 100644 index 0000000000000000000000000000000000000000..5731bcbf2a2e64891b9ddd01c75a1e1c7babfe37 --- /dev/null +++ b/theory/paper_pasc/Figures/Hierarchy3.svg @@ -0,0 +1,1306 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1052.3622" + height="744.09448" + id="svg2" + version="1.1" + inkscape:version="0.48.4 r9939" + sodipodi:docname="Hierarchy3.svg"> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2" + inkscape:cx="335.14507" + inkscape:cy="476.92781" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + inkscape:window-width="1920" + inkscape:window-height="1033" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1"> + <inkscape:grid + snapvisiblegridlinesonly="true" + enabled="true" + visible="true" + empspacing="5" + id="grid2985" + type="xygrid" /> + </sodipodi:namedview> + <defs + id="defs4"> + <marker + inkscape:stockid="Arrow2Mstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Mstart" + style="overflow:visible"> + <path + id="path8983" + style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(0.6) translate(0,0)" /> + </marker> + <linearGradient + id="linearGradient6436"> + <stop + style="stop-color:#34ff00;stop-opacity:1;" + offset="0" + id="stop6438" /> + <stop + id="stop6444" + offset="0.40000001" + style="stop-color:#34ff00;stop-opacity:1;" /> + <stop + id="stop6442" + offset="0.60000002" + style="stop-color:#ff43f8;stop-opacity:1;" /> + <stop + style="stop-color:#ff43f8;stop-opacity:1;" + offset="1" + id="stop6440" /> + </linearGradient> + <linearGradient + id="linearGradient6395"> + <stop + style="stop-color:#ffca1a;stop-opacity:1;" + offset="0" + id="stop6397" /> + <stop + id="stop6418" + offset="0.40000001" + style="stop-color:#ffca1a;stop-opacity:1;" /> + <stop + id="stop6416" + offset="0.60000002" + style="stop-color:#ff43f8;stop-opacity:1;" /> + <stop + style="stop-color:#ff43f8;stop-opacity:1;" + offset="1" + id="stop6399" /> + </linearGradient> + <linearGradient + id="linearGradient6359"> + <stop + style="stop-color:#74abff;stop-opacity:1;" + offset="0" + id="stop6375" /> + <stop + id="stop6412" + offset="0.40000001" + style="stop-color:#74abff;stop-opacity:1;" /> + <stop + style="stop-color:#ff43f8;stop-opacity:1;" + offset="0.60000002" + id="stop6414" /> + <stop + id="stop6377" + offset="1" + style="stop-color:#ff43f8;stop-opacity:1;" /> + </linearGradient> + <marker + style="overflow:visible;" + id="Arrow2Mend" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mend"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" + id="path4067" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Sstart" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Sstart"> + <path + transform="scale(0.3) translate(-2.3,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round" + id="path4070" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2Send" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Send"> + <path + transform="scale(0.3) rotate(180) translate(-2.3,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" + id="path4073" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow1Mend" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="scale(0.4) rotate(180) translate(10,0)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + id="path4049" /> + </marker> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="402.36218" + x2="571" + y1="402.36218" + x1="549" + id="linearGradient6365" + xlink:href="#linearGradient6359" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="402.36218" + x2="571" + y1="402.36218" + x1="549" + id="linearGradient6371" + xlink:href="#linearGradient6359" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="402.36218" + x2="591" + y1="402.36218" + x1="569" + id="linearGradient6385" + xlink:href="#linearGradient6395" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="402.36218" + x2="591" + y1="402.36218" + x1="569" + id="linearGradient6393" + xlink:href="#linearGradient6395" + inkscape:collect="always" /> + <marker + style="overflow:visible;" + id="Arrow2Mendv" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mendv"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#000000;stroke-width:0.62500000;fill:#000000;fill-rule:evenodd" + id="path7727" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2Mendk" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mendk"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#000000;stroke-width:0.62500000;fill:#000000;fill-rule:evenodd" + id="path7730" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2MendG" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2MendG"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#000000;stroke-width:0.62500000;fill:#000000;fill-rule:evenodd" + id="path7733" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2Mendd" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mendd"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#000000;stroke-width:0.62500000;fill:#000000;fill-rule:evenodd" + id="path7736" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2Mendo" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mendo"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#000000;stroke-width:0.62500000;fill:#000000;fill-rule:evenodd" + id="path7739" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2Mende" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mende"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#000000;stroke-width:0.62500000;fill:#000000;fill-rule:evenodd" + id="path7742" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2MendV" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2MendV"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#000000;stroke-width:0.62500000;fill:#000000;fill-rule:evenodd" + id="path7745" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2Mendm" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mendm"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#000000;stroke-width:0.62500000;fill:#000000;fill-rule:evenodd" + id="path7748" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2Mend1" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mend1"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#000000;stroke-width:0.62500000;fill:#000000;fill-rule:evenodd" + id="path7751" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2Mendi" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mendi"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#000000;stroke-width:0.62500000;fill:#000000;fill-rule:evenodd" + id="path7754" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2MendH" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2MendH"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#000000;stroke-width:0.62500000;fill:#000000;fill-rule:evenodd" + id="path7757" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2MendT" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2MendT"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#000000;stroke-width:0.62500000;fill:#000000;fill-rule:evenodd" + id="path7760" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2Mendx" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mendx"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#d9d9d9;stroke-width:0.62500000;fill:#d9d9d9;fill-rule:evenodd" + id="path6177" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2MendTh" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2MendTh"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#d9d9d9;stroke-width:0.62500000;fill:#d9d9d9;fill-rule:evenodd" + id="path6180" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2MendA" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2MendA"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#d9d9d9;stroke-width:0.62500000;fill:#d9d9d9;fill-rule:evenodd" + id="path6183" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2Mend5" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mend5"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#d9d9d9;stroke-width:0.62500000;fill:#d9d9d9;fill-rule:evenodd" + id="path6186" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2MendT6" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2MendT6"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#d9d9d9;stroke-width:0.62500000;fill:#d9d9d9;fill-rule:evenodd" + id="path6189" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2MendK" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2MendK"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#d9d9d9;stroke-width:0.62500000;fill:#d9d9d9;fill-rule:evenodd" + id="path6192" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2MendB" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2MendB"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#ff0000;stroke-width:0.62500000;fill:#ff0000;fill-rule:evenodd" + id="path6997" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2Mend2" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mend2"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#ff0000;stroke-width:0.62500000;fill:#ff0000;fill-rule:evenodd" + id="path7000" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2Menda" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Menda"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#ff0000;stroke-width:0.62500000;fill:#ff0000;fill-rule:evenodd" + id="path7003" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2MendW" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2MendW"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#ff0000;stroke-width:0.62500000;fill:#ff0000;fill-rule:evenodd" + id="path7006" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2Mendu" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mendu"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#ff0000;stroke-width:0.62500000;fill:#ff0000;fill-rule:evenodd" + id="path7009" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow2Mend4" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mend4"> + <path + transform="scale(0.6) rotate(180) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="stroke-linejoin:round;stroke:#ff0000;stroke-width:0.62500000;fill:#ff0000;fill-rule:evenodd" + id="path7012" /> + </marker> + </defs> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(0,-308.2677)" + id="layer1" + inkscape:groupmode="layer" + inkscape:label="Layer 1"> + <g + style="fill:#74abff;fill-opacity:1" + transform="translate(-310,90)" + id="g10633"> + <rect + style="fill:#74abff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="rect10635" + width="20" + height="20" + x="550" + y="392.36218" /> + </g> + <g + id="g10675" + transform="translate(-310,260)" + style="fill:#74abff;fill-opacity:1"> + <rect + y="392.36218" + x="550" + height="20" + width="20" + id="rect10677" + style="fill:#74abff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + </g> + <path + sodipodi:type="star" + style="fill:#74abff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="path11059" + sodipodi:sides="3" + sodipodi:cx="110" + sodipodi:cy="194.09448" + sodipodi:r1="20" + sodipodi:r2="10" + sodipodi:arg1="-1.5707963" + sodipodi:arg2="-0.52359878" + inkscape:flatsided="true" + inkscape:rounded="0" + inkscape:randomized="0" + d="m 110,174.09448 17.32051,30 -34.641018,0 z" + transform="translate(124,388.2677)" + inkscape:transform-center-y="-5" /> + <path + inkscape:transform-center-y="-5" + transform="translate(176,388.2677)" + d="m 110,174.09448 17.32051,30 -34.641018,0 z" + inkscape:randomized="0" + inkscape:rounded="0" + inkscape:flatsided="true" + sodipodi:arg2="-0.52359878" + sodipodi:arg1="-1.5707963" + sodipodi:r2="10" + sodipodi:r1="20" + sodipodi:cy="194.09448" + sodipodi:cx="110" + sodipodi:sides="3" + id="path11061" + style="fill:none;fill-opacity:1;stroke:#d9d9d9;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + sodipodi:type="star" /> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:bold;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold" + x="160" + y="496.36218" + id="text13273" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan13275" + x="160" + y="496.36218">force</tspan></text> + <text + sodipodi:linespacing="125%" + id="text13277" + y="666.36218" + x="160" + style="font-size:12px;font-style:normal;font-weight:bold;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold" + xml:space="preserve"><tspan + y="666.36218" + x="160" + id="tspan13279" + sodipodi:role="line">density</tspan></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:bold;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold" + x="160" + y="582.36218" + id="text13281" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan13283" + x="160" + y="582.36218">ghost</tspan></text> + <path + transform="translate(-205,648.2677)" + d="m 460,99.094482 c 0,8.284268 -6.71573,14.999998 -15,14.999998 -8.28427,0 -15,-6.71573 -15,-14.999998 0,-8.284271 6.71573,-15 15,-15 8.28427,0 15,6.715729 15,15 z" + sodipodi:ry="15" + sodipodi:rx="15" + sodipodi:cy="99.094482" + sodipodi:cx="445" + id="path3949" + style="fill:#74abff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="fill:#ffca1a;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="path3951" + sodipodi:cx="445" + sodipodi:cy="99.094482" + sodipodi:rx="15" + sodipodi:ry="15" + d="m 460,99.094482 c 0,8.284268 -6.71573,14.999998 -15,14.999998 -8.28427,0 -15,-6.71573 -15,-14.999998 0,-8.284271 6.71573,-15 15,-15 8.28427,0 15,6.715729 15,15 z" + transform="translate(-165,648.2677)" /> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:bold;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold" + x="160" + y="746.36218" + id="text5455" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan5457" + x="160" + y="746.36218">sort</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" + d="m 235,592.36218 c 0,20 15,35 15,60" + id="path5490" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path6576" + d="m 285,592.36218 c 0,20 -15,35 -15,60" + style="stroke-linejoin:miter;marker-end:url(#Arrow2Mendx);stroke-opacity:1;fill-opacity:1;stroke:#d9d9d9;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:none" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path6578" + d="m 250,672.36218 c 0,20 -10,35 -10,60" + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" /> + <path + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" + d="m 270,672.36218 c 0,20 10,35 10,60" + id="path6580" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" + d="m 250,502.36218 c 0,20 -15,35 -15,60" + id="path6582" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path6584" + d="m 270,502.36218 c 0,20 15,35 15,60" + style="stroke-linejoin:miter;marker-end:url(#Arrow2MendT6);stroke-opacity:1;fill-opacity:1;stroke:#d9d9d9;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:none" /> + <g + id="g6629" + transform="translate(-265,90)" + style="fill:none;fill-opacity:1;stroke:#d9d9d9;stroke-opacity:1"> + <rect + style="fill:none;fill-opacity:1;stroke:#d9d9d9;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="rect6631" + width="20" + height="20" + x="570" + y="392.36218" /> + </g> + <g + id="g6633" + transform="translate(-355,90)" + style="fill:#74abff;fill-opacity:1"> + <rect + y="392.36218" + x="550" + height="20" + width="20" + id="rect6635" + style="fill:#74abff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2, 2;stroke-dashoffset:0" + d="m 215,492.36218 25,0" + id="path6637" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + inkscape:connector-curvature="0" + id="path6639" + d="m 280,492.36218 25,0" + style="fill:none;stroke:#d9d9d9;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2, 2;stroke-dashoffset:0;fill-opacity:1" + sodipodi:nodetypes="cc" /> + <path + inkscape:connector-curvature="0" + id="path6641" + d="m 215,662.36218 16.5,0 8.5,0" + style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2, 2;stroke-dashoffset:0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#d9d9d9;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2, 2;stroke-dashoffset:0;fill-opacity:1" + d="m 280,662.36218 25,0" + id="path6643" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <g + style="fill:none;fill-opacity:1;stroke:#d9d9d9;stroke-opacity:1" + transform="translate(-265,260)" + id="g6645"> + <rect + y="392.36218" + x="570" + height="20" + width="20" + id="rect6647" + style="fill:none;fill-opacity:1;stroke:#d9d9d9;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + </g> + <g + style="fill:#74abff;fill-opacity:1" + transform="translate(-355,260)" + id="g6649"> + <rect + style="fill:#74abff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="rect6651" + width="20" + height="20" + x="550" + y="392.36218" /> + </g> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path6653" + d="m 235,592.36218 c 0,20 -30,35 -30,60" + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" /> + <path + style="stroke-linejoin:miter;marker-end:url(#Arrow2MendTh);stroke-opacity:1;fill-opacity:1;stroke:#d9d9d9;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:none" + d="m 285,592.36218 c 0,20 30,35 30,60" + id="path6655" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path6657" + d="m 205,502.36218 c 0,20 30,35 30,60" + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" /> + <path + style="stroke-linejoin:miter;marker-end:url(#Arrow2Mend5);stroke-opacity:1;fill-opacity:1;stroke:#d9d9d9;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:none" + d="m 315,502.36218 c 0,20 -30,35 -30,60" + id="path6659" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + inkscape:transform-center-y="5.0000047" + transform="matrix(1,0,0,-1,124,596.45667)" + d="m 110,174.09448 17.32051,30 -34.641018,0 z" + inkscape:randomized="0" + inkscape:rounded="0" + inkscape:flatsided="true" + sodipodi:arg2="-0.52359878" + sodipodi:arg1="-1.5707963" + sodipodi:r2="10" + sodipodi:r1="20" + sodipodi:cy="194.09448" + sodipodi:cx="110" + sodipodi:sides="3" + id="path5337" + style="fill:#74abff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + sodipodi:type="star" /> + <path + sodipodi:type="star" + style="fill:none;fill-opacity:1;stroke:#d9d9d9;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="path5339" + sodipodi:sides="3" + sodipodi:cx="110" + sodipodi:cy="194.09448" + sodipodi:r1="20" + sodipodi:r2="10" + sodipodi:arg1="-1.5707963" + sodipodi:arg2="-0.52359878" + inkscape:flatsided="true" + inkscape:rounded="0" + inkscape:randomized="0" + d="m 110,174.09448 17.32051,30 -34.641018,0 z" + transform="matrix(1,0,0,-1,176,596.45667)" + inkscape:transform-center-y="5.0000047" /> + <text + sodipodi:linespacing="125%" + id="text5341" + y="412.36218" + x="160" + style="font-size:12px;font-style:normal;font-weight:bold;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold" + xml:space="preserve"><tspan + y="412.36218" + x="160" + id="tspan5343" + sodipodi:role="line">integrator</tspan></text> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5345" + d="m 235,422.36218 c 0,20 15,35 15,60" + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" /> + <path + style="stroke-linejoin:miter;marker-end:url(#Arrow2MendK);stroke-opacity:1;fill-opacity:1;stroke:#d9d9d9;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:none" + d="m 285,422.36218 c 0,20 -15,35 -15,60" + id="path5347" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" + d="m 235,422.36218 c 0,20 -30,35 -30,60" + id="path5349" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5351" + d="m 285,422.36218 c 0,20 30,35 30,60" + style="stroke-linejoin:miter;marker-end:url(#Arrow2MendA);stroke-opacity:1;fill-opacity:1;stroke:#d9d9d9;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:none" /> + <g + id="g5429" + transform="matrix(-1,0,0,1,1094,90)" + style="fill:#d874c8;fill-opacity:1"> + <rect + y="392.36218" + x="550" + height="20" + width="20" + id="rect5431" + style="fill:#d874c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + </g> + <g + id="g5433" + transform="matrix(-1,0,0,1,1094,90)" + style="fill:#ffca1a;fill-opacity:1"> + <rect + style="fill:#ffca1a;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="rect5435" + width="20" + height="20" + x="570" + y="392.36218" /> + </g> + <g + style="fill:#d874c8;fill-opacity:1" + transform="matrix(-1,0,0,1,1094,260)" + id="g5437"> + <rect + style="fill:#d874c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="rect5439" + width="20" + height="20" + x="550" + y="392.36218" /> + </g> + <g + style="fill:#ffca1a;fill-opacity:1" + transform="matrix(-1,0,0,1,1094,260)" + id="g5441"> + <rect + y="392.36218" + x="570" + height="20" + width="20" + id="rect5443" + style="fill:#ffca1a;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + </g> + <path + inkscape:transform-center-y="-5" + transform="matrix(-1,0,0,1,660,388.2677)" + d="m 110,174.09448 17.32051,30 -34.641018,0 z" + inkscape:randomized="0" + inkscape:rounded="0" + inkscape:flatsided="true" + sodipodi:arg2="-0.52359878" + sodipodi:arg1="-1.5707963" + sodipodi:r2="10" + sodipodi:r1="20" + sodipodi:cy="194.09448" + sodipodi:cx="110" + sodipodi:sides="3" + id="path5445" + style="fill:#d874c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + sodipodi:type="star" /> + <path + sodipodi:type="star" + style="fill:#ffca1a;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="path5447" + sodipodi:sides="3" + sodipodi:cx="110" + sodipodi:cy="194.09448" + sodipodi:r1="20" + sodipodi:r2="10" + sodipodi:arg1="-1.5707963" + sodipodi:arg2="-0.52359878" + inkscape:flatsided="true" + inkscape:rounded="0" + inkscape:randomized="0" + d="m 110,174.09448 17.32051,30 -34.641018,0 z" + transform="matrix(-1,0,0,1,608,388.2677)" + inkscape:transform-center-y="-5" /> + <path + sodipodi:type="arc" + style="fill:#d874c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="path5449" + sodipodi:cx="445" + sodipodi:cy="99.094482" + sodipodi:rx="15" + sodipodi:ry="15" + d="m 460,99.094482 c 0,8.284268 -6.71573,14.999998 -15,14.999998 -8.28427,0 -15,-6.71573 -15,-14.999998 0,-8.284271 6.71573,-15 15,-15 8.28427,0 15,6.715729 15,15 z" + transform="matrix(-1,0,0,1,989,648.2677)" /> + <path + transform="matrix(-1,0,0,1,949,648.2677)" + d="m 460,99.094482 c 0,8.284268 -6.71573,14.999998 -15,14.999998 -8.28427,0 -15,-6.71573 -15,-14.999998 0,-8.284271 6.71573,-15 15,-15 8.28427,0 15,6.715729 15,15 z" + sodipodi:ry="15" + sodipodi:rx="15" + sodipodi:cy="99.094482" + sodipodi:cx="445" + id="path5451" + style="fill:#ffca1a;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + sodipodi:type="arc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5453" + d="m 549,592.36218 c 0,20 -15,35 -15,60" + style="fill:#d874c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" /> + <path + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" + d="m 499,592.36218 c 0,20 15,35 15,60" + id="path5455" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" + d="m 534,672.36218 c 0,20 10,35 10,60" + id="path5457" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5459" + d="m 514,672.36218 c 0,20 -10,35 -10,60" + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5461" + d="m 534,502.36218 c 0,20 15,35 15,60" + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" /> + <path + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" + d="m 514,502.36218 c 0,20 -15,35 -15,60" + id="path5463" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <g + style="fill:#ffca1a;fill-opacity:1" + transform="matrix(-1,0,0,1,1049,90)" + id="g5465"> + <rect + y="392.36218" + x="570" + height="20" + width="20" + id="rect5467" + style="fill:#ffca1a;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + </g> + <g + style="fill:#d874c8;fill-opacity:1" + transform="matrix(-1,0,0,1,1139,90)" + id="g5469"> + <rect + style="fill:#d874c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="rect5471" + width="20" + height="20" + x="550" + y="392.36218" /> + </g> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5473" + d="m 569,492.36218 -25,0" + style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2, 2;stroke-dashoffset:0" /> + <path + sodipodi:nodetypes="cc" + style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2, 2;stroke-dashoffset:0" + d="m 504,492.36218 -25,0" + id="path5475" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="ccc" + style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2, 2;stroke-dashoffset:0" + d="m 569,662.36218 -16.5,0 -8.5,0" + id="path5477" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5479" + d="m 504,662.36218 -25,0" + style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2, 2;stroke-dashoffset:0" /> + <g + id="g5481" + transform="matrix(-1,0,0,1,1049,260)" + style="fill:#ffca1a;fill-opacity:1"> + <rect + style="fill:#ffca1a;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="rect5483" + width="20" + height="20" + x="570" + y="392.36218" /> + </g> + <g + id="g5485" + transform="matrix(-1,0,0,1,1139,260)" + style="fill:#d874c8;fill-opacity:1"> + <rect + y="392.36218" + x="550" + height="20" + width="20" + id="rect5487" + style="fill:#d874c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" + d="m 549,592.36218 c 0,20 30,35 30,60" + id="path5489" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5491" + d="m 499,592.36218 c 0,20 -30,35 -30,60" + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" /> + <path + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" + d="m 579,502.36218 c 0,20 -30,35 -30,60" + id="path5493" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5495" + d="m 469,502.36218 c 0,20 30,35 30,60" + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" /> + <path + sodipodi:type="star" + style="fill:#d874c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="path5497" + sodipodi:sides="3" + sodipodi:cx="110" + sodipodi:cy="194.09448" + sodipodi:r1="20" + sodipodi:r2="10" + sodipodi:arg1="-1.5707963" + sodipodi:arg2="-0.52359878" + inkscape:flatsided="true" + inkscape:rounded="0" + inkscape:randomized="0" + d="m 110,174.09448 17.32051,30 -34.641018,0 z" + transform="matrix(-1,0,0,-1,660,596.45667)" + inkscape:transform-center-y="5.0000047" /> + <path + inkscape:transform-center-y="5.0000047" + transform="matrix(-1,0,0,-1,608,596.45667)" + d="m 110,174.09448 17.32051,30 -34.641018,0 z" + inkscape:randomized="0" + inkscape:rounded="0" + inkscape:flatsided="true" + sodipodi:arg2="-0.52359878" + sodipodi:arg1="-1.5707963" + sodipodi:r2="10" + sodipodi:r1="20" + sodipodi:cy="194.09448" + sodipodi:cx="110" + sodipodi:sides="3" + id="path5499" + style="fill:#ffca1a;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + sodipodi:type="star" /> + <path + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" + d="m 549,422.36218 c 0,20 -15,35 -15,60" + id="path5501" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5503" + d="m 499,422.36218 c 0,20 15,35 15,60" + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5505" + d="m 549,422.36218 c 0,20 30,35 30,60" + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" /> + <path + style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" + d="m 499,422.36218 c 0,20 -30,35 -30,60" + id="path5507" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <g + style="fill:#ffca1a;fill-opacity:1" + transform="translate(-310,90)" + id="g10637"> + <rect + y="392.36218" + x="570" + height="20" + width="20" + id="rect10639" + style="fill:#ffca1a;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + </g> + <g + id="g10679" + transform="translate(-310,260)" + style="fill:#ffca1a;fill-opacity:1"> + <rect + style="fill:#ffca1a;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="rect10681" + width="20" + height="20" + x="570" + y="392.36218" /> + </g> + <rect + transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)" + y="595.89276" + x="-156.27361" + height="20" + width="20" + id="rect6445" + style="stroke-opacity:1;fill-opacity:1;stroke-dashoffset:0;stroke:#ff0000;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:#ffca1a" /> + <rect + style="stroke-opacity:1;fill-opacity:1;stroke-dashoffset:0;stroke:#ff0000;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:#ffca1a" + id="rect6447" + width="20" + height="20" + x="-276.48157" + y="716.10242" + transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)" /> + <rect + style="stroke-opacity:1;fill-opacity:1;stroke-dashoffset:0;stroke:#ff0000;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:#ffca1a" + id="rect6453" + width="20" + height="20" + x="-92.633995" + y="659.53259" + transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)" /> + <rect + transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)" + y="779.74225" + x="-212.84195" + height="20" + width="20" + id="rect6455" + style="stroke-opacity:1;fill-opacity:1;stroke-dashoffset:0;stroke:#ff0000;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:#ffca1a" /> + <path + transform="translate(0,308.2677)" + inkscape:connector-curvature="0" + id="path6457" + d="m 370,59.094482 0,409.999998" + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path6459" + d="m 270,502.36218 c 0,20 25,0 45,20" + style="stroke-linejoin:miter;marker-end:url(#Arrow2Mend2);stroke-opacity:1;stroke:#ff0000;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:none" /> + <path + style="stroke-linejoin:miter;marker-end:url(#Arrow2MendB);stroke-opacity:1;stroke:#ff0000;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:none" + d="m 422,539.36218 c 17,18 77,-2 77,23" + id="path6461" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="stroke-linejoin:miter;marker-end:url(#Arrow2Menda);stroke-opacity:1;stroke:#ff0000;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:none" + d="m 270,672.36218 c 0,20 25,0 45,20" + id="path6463" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path6465" + d="m 295,742.36218 c 20,-15 5,-15 23,-32" + style="stroke-linejoin:miter;marker-end:url(#Arrow2MendW);stroke-opacity:1;stroke:#ff0000;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:none" /> + <path + sodipodi:nodetypes="cc" + transform="translate(0,308.2677)" + inkscape:connector-curvature="0" + id="path6467" + d="m 395,224.09448 -45,0" + style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Arrow2Send)" /> + <path + style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Arrow2Send)" + d="m 395,702.36218 -45,0" + id="path6921" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path6923" + d="m 499,422.36218 c 0,20 -84,35 -84,95" + style="stroke-linejoin:miter;marker-end:url(#Arrow2Mend4);stroke-opacity:1;stroke:#ff0000;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:none" /> + <path + style="stroke-linejoin:miter;marker-end:url(#Arrow2Mendu);stroke-opacity:1;stroke:#ff0000;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:2;fill:none" + d="m 498.5,592.86218 c 0,20 -83.5,34.5 -84,95" + id="path6925" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold" + x="324.78302" + y="533.97424" + id="text7315" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan7323" + x="324.78302" + y="533.97424">ρ</tspan></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold" + x="325.34085" + y="704.52594" + id="text7319" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan7321" + x="325.34085" + y="704.52594">x</tspan></text> + <text + sodipodi:linespacing="125%" + id="text7325" + y="533.97424" + x="414.78302" + style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold" + xml:space="preserve"><tspan + y="533.97424" + x="414.78302" + id="tspan7327" + sodipodi:role="line">ρ</tspan></text> + <text + sodipodi:linespacing="125%" + id="text7329" + y="704.52594" + x="415.34085" + style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold" + xml:space="preserve"><tspan + y="704.52594" + x="415.34085" + id="tspan7331" + sodipodi:role="line">x</tspan></text> + </g> +</svg> diff --git a/theory/paper_pasc/Figures/cosmoVolume.png b/theory/paper_pasc/Figures/cosmoVolume.png new file mode 100644 index 0000000000000000000000000000000000000000..ed591aff7a35e3c68c6dea575588c79d083966d6 Binary files /dev/null and b/theory/paper_pasc/Figures/cosmoVolume.png differ diff --git a/theory/paper_pasc/Figures/domains.png b/theory/paper_pasc/Figures/domains.png new file mode 100644 index 0000000000000000000000000000000000000000..facdfca23f42d9dcce6837c4d6ac65bd703da35c Binary files /dev/null and b/theory/paper_pasc/Figures/domains.png differ diff --git a/theory/paper_pasc/Figures/scalingBlueGene.pdf b/theory/paper_pasc/Figures/scalingBlueGene.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f84412ec064cc65f30dfd15bcf103cf16ac3f220 Binary files /dev/null and b/theory/paper_pasc/Figures/scalingBlueGene.pdf differ diff --git a/theory/paper_pasc/Figures/scalingCosma.pdf b/theory/paper_pasc/Figures/scalingCosma.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c63e6e3c76713bdfbfc1b2d128bae33d9eb49c19 Binary files /dev/null and b/theory/paper_pasc/Figures/scalingCosma.pdf differ diff --git a/theory/paper_pasc/Figures/scalingInNode.pdf b/theory/paper_pasc/Figures/scalingInNode.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b6477edb7315ce99ab71db3b81dbe185a85b4d18 Binary files /dev/null and b/theory/paper_pasc/Figures/scalingInNode.pdf differ diff --git a/theory/paper_pasc/Figures/scalingSuperMUC.pdf b/theory/paper_pasc/Figures/scalingSuperMUC.pdf new file mode 100644 index 0000000000000000000000000000000000000000..31c7c600d3015339008fb711f5cf0bc7a16612e3 Binary files /dev/null and b/theory/paper_pasc/Figures/scalingSuperMUC.pdf differ diff --git a/theory/paper_pasc/Figures/task_graph_cut.pdf b/theory/paper_pasc/Figures/task_graph_cut.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5701b51a458bc8d7a3fb15058bfdb86a5e3374ff Binary files /dev/null and b/theory/paper_pasc/Figures/task_graph_cut.pdf differ diff --git a/theory/paper_pasc/Figures/task_graph_cut.svg b/theory/paper_pasc/Figures/task_graph_cut.svg new file mode 100644 index 0000000000000000000000000000000000000000..7e5ea63b7f479db6367a04e965ea233f0089d9ee --- /dev/null +++ b/theory/paper_pasc/Figures/task_graph_cut.svg @@ -0,0 +1,350 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="744.09448819" + height="1052.3622047" + id="svg2" + version="1.1" + inkscape:version="0.48.4 r9939" + sodipodi:docname="task_graph_cut.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.4142136" + inkscape:cx="297.84024" + inkscape:cy="552.29616" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + inkscape:snap-global="true" + inkscape:window-width="1366" + inkscape:window-height="721" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1"> + <inkscape:grid + type="xygrid" + id="grid2985" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <rect + style="fill:#fd7620;stroke:#000000;stroke-width:1.60000001999999997;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" + id="rect3757" + width="56.692913" + height="28.346457" + x="135.9355" + y="518.08435" + ry="5.669302" /> + <path + transform="matrix(0.69421659,0,0,0.69421659,216.70585,128.13543)" + d="m 124.01575,449.99997 a 17.716536,17.716536 0 1 1 -35.433076,0 17.716536,17.716536 0 1 1 35.433076,0 z" + sodipodi:ry="17.716536" + sodipodi:rx="17.716536" + sodipodi:cy="449.99997" + sodipodi:cx="106.29921" + id="path3775" + style="fill:#66dc5b;stroke:#000000;stroke-width:2.30475616000000016;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" + sodipodi:type="arc" /> + <rect + ry="5.669302" + y="602.23004" + x="229.98071" + height="28.346457" + width="56.692913" + id="rect3805" + style="fill:#fd7620;stroke:#000000;stroke-width:1.60000001999999997;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" /> + <rect + style="fill:#fd7620;stroke:#000000;stroke-width:1.60000001999999997;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" + id="rect3807" + width="56.692913" + height="28.346457" + x="262.50763" + y="474.24368" + ry="5.669302" /> + <rect + ry="5.669302" + y="431.81729" + x="83.609612" + height="28.346457" + width="56.692913" + id="rect3809" + style="fill:#15bee8;stroke:#000000;stroke-width:1.60000001999999997;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" /> + <rect + style="fill:#15bee8;stroke:#000000;stroke-width:1.60000001999999997;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" + id="rect3811" + width="56.692913" + height="28.346457" + x="127.45023" + y="346.25735" + ry="5.669302" /> + <rect + ry="5.669302" + y="380.90558" + x="265.33606" + height="28.346457" + width="56.692913" + id="rect3813" + style="fill:#15bee8;stroke:#000000;stroke-width:1.60000001999999997;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" /> + <rect + style="fill:#fd7620;stroke:#000000;stroke-width:1.60000001999999997;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" + id="rect3815" + width="56.692913" + height="28.346457" + x="66.639061" + y="598.69446" + ry="5.669302" /> + <path + sodipodi:type="arc" + style="fill:#09b6d4;stroke:#000000;stroke-width:2.30475616000000016;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:0.33870968" + id="path3817" + sodipodi:cx="106.29921" + sodipodi:cy="449.99997" + sodipodi:rx="17.716536" + sodipodi:ry="17.716536" + d="m 124.01575,449.99997 a 17.716536,17.716536 0 1 1 -35.433076,0 17.716536,17.716536 0 1 1 35.433076,0 z" + transform="matrix(0.69421659,0,0,0.69421659,128.3175,96.315623)" /> + <path + transform="matrix(0.69421659,0,0,0.69421659,27.908336,85.709022)" + d="m 124.01575,449.99997 a 17.716536,17.716536 0 1 1 -35.433076,0 17.716536,17.716536 0 1 1 35.433076,0 z" + sodipodi:ry="17.716536" + sodipodi:rx="17.716536" + sodipodi:cy="449.99997" + sodipodi:cx="106.29921" + id="path3819" + style="fill:#09b6d4;stroke:#000000;stroke-width:2.30475616000000016;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:0.33870968" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="fill:#66dc5b;stroke:#000000;stroke-width:2.30475616000000016;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" + id="path3821" + sodipodi:cx="106.29921" + sodipodi:cy="449.99997" + sodipodi:rx="17.716536" + sodipodi:ry="17.716536" + d="m 124.01575,449.99997 a 17.716536,17.716536 0 1 1 -35.433076,0 17.716536,17.716536 0 1 1 35.433076,0 z" + transform="matrix(0.69421659,0,0,0.69421659,126.90329,154.29838)" /> + <path + transform="matrix(0.69421659,0,0,0.69421659,4.5738158,203.08875)" + d="m 124.01575,449.99997 a 17.716536,17.716536 0 1 1 -35.433076,0 17.716536,17.716536 0 1 1 35.433076,0 z" + sodipodi:ry="17.716536" + sodipodi:rx="17.716536" + sodipodi:cy="449.99997" + sodipodi:cx="106.29921" + id="path3823" + style="fill:#66dc5b;stroke:#000000;stroke-width:2.30475616000000016;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="fill:#fd7620;stroke:#000000;stroke-width:2.30475616000000016;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:0.36021507" + id="path3825" + sodipodi:cx="106.29921" + sodipodi:cy="449.99997" + sodipodi:rx="17.716536" + sodipodi:ry="17.716536" + d="m 124.01575,449.99997 a 17.716536,17.716536 0 1 1 -35.433076,0 17.716536,17.716536 0 1 1 35.433076,0 z" + transform="matrix(0.69421659,0,0,0.69421659,200.4424,232.78723)" /> + <path + transform="matrix(0.69421659,0,0,0.69421659,102.15456,275.92074)" + d="m 124.01575,449.99997 a 17.716536,17.716536 0 1 1 -35.433076,0 17.716536,17.716536 0 1 1 35.433076,0 z" + sodipodi:ry="17.716536" + sodipodi:rx="17.716536" + sodipodi:cy="449.99997" + sodipodi:cx="106.29921" + id="path3827" + style="fill:#fd7620;stroke:#000000;stroke-width:2.30475616000000016;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:0.36021507" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="fill:#fd7620;stroke:#000000;stroke-width:2.30475616000000016;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:0.36021507" + id="path3829" + sodipodi:cx="106.29921" + sodipodi:cy="449.99997" + sodipodi:rx="17.716536" + sodipodi:ry="17.716536" + d="m 124.01575,449.99997 a 17.716536,17.716536 0 1 1 -35.433076,0 17.716536,17.716536 0 1 1 35.433076,0 z" + transform="matrix(0.69421659,0,0,0.69421659,100.74034,321.88268)" /> + <path + transform="matrix(0.69421659,0,0,0.69421659,173.57234,36.918648)" + d="m 124.01575,449.99997 a 17.716536,17.716536 0 1 1 -35.433076,0 17.716536,17.716536 0 1 1 35.433076,0 z" + sodipodi:ry="17.716536" + sodipodi:rx="17.716536" + sodipodi:cy="449.99997" + sodipodi:cx="106.29921" + id="path3831" + style="fill:#09b6d4;stroke:#000000;stroke-width:2.30475616000000016;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:0.33870968" + sodipodi:type="arc" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 177.16535,575.47242 0,-28.34645" + id="path3835" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3837" + d="M 229.25512,611.96219 186.50866,594.06927" + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 123.65512,609.96219 40.45354,-15.89292" + id="path3839" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3841" + d="m 123.45512,618.76219 38.85354,12.50708" + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 229.25512,618.76219 -42.74646,12.50708" + id="path3843" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3845" + d="m 259.16535,602.27242 12,-45.94645" + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 279.16535,533.67242 10,-30.74645" + id="path3847" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3849" + d="m 261.16535,541.47242 -68,-8.34645" + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 135.56535,529.27242 -44.8,-11.94645" + id="path3851" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3853" + d="m 95.76535,459.87242 -15.2,42.85355" + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 95.76535,597.67242 -17.2,-70.74645" + id="path3855" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 99.16535,411.47242 0,19.65355" + id="path3857" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3859" + d="m 110.16535,391.07242 18,-17.54645" + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3861" + d="m 289.16535,426.87242 0,-17.14645" + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 289.16535,472.67242 0,-20.74645" + id="path3863" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3865" + d="m 178.56535,516.67242 15.2,-40.74645" + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 140.96535,451.07242 46.4,12.45355" + id="path3867" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3869" + d="m 213.16535,469.27242 48,14.05355" + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 139.36535,439.87242 53.6,-23.14645" + id="path3871" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3873" + d="m 181.96535,373.67242 14.4,23.25355" + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3875" + d="m 214.59843,408.56691 50.56692,-13.04094" + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 185.16535,357.47242 50,-6.34645" + id="path3877" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path3879" + d="m 266.36535,380.47242 -10.4,-22.34645" + style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:5, 5;stroke-dashoffset:0" + d="m 53.149606,520.86612 c 0,0 0,0 23.716536,-6 23.716538,-6 85.108658,-50.16394 124.015748,-47.14961 38.90709,3.01433 64.86614,-17.71653 88.58268,-25.71653 23.71654,-8 29.43307,-9.71654 29.43307,-9.71654" + id="path3900" + inkscape:connector-curvature="0" + sodipodi:nodetypes="czzzc" /> + </g> +</svg> diff --git a/theory/paper_pasc/acmcopyright.sty b/theory/paper_pasc/acmcopyright.sty new file mode 100644 index 0000000000000000000000000000000000000000..e8de127a37213e171817b5eed65106ae4f6646b9 --- /dev/null +++ b/theory/paper_pasc/acmcopyright.sty @@ -0,0 +1,221 @@ +%% +%% This is file `acmcopyright.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% acmcopyright.dtx (with options: `style') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from acmcopyright.sty. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file acmcopyright.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{acmcopyright} +[2014/06/29 v1.2 Copyright statemens for ACM classes] +\newif\if@printcopyright +\@printcopyrighttrue +\newif\if@printpermission +\@printpermissiontrue +\newif\if@acmowned +\@acmownedtrue +\RequirePackage{xkeyval} +\define@choicekey*{ACM@}{acmcopyrightmode}[% + \acm@copyrightinput\acm@copyrightmode]{none,acmcopyright,acmlicensed,% + rightsretained,usgov,usgovmixed,cagov,cagovmixed,% + licensedusgovmixed,licensedcagovmixed,othergov,licensedothergov}{% + \@printpermissiontrue + \@printcopyrighttrue + \@acmownedtrue + \ifnum\acm@copyrightmode=0\relax % none + \@printpermissionfalse + \@printcopyrightfalse + \@acmownedfalse + \fi + \ifnum\acm@copyrightmode=2\relax % acmlicensed + \@acmownedfalse + \fi + \ifnum\acm@copyrightmode=3\relax % rightsretained + \@acmownedfalse + \fi + \ifnum\acm@copyrightmode=4\relax % usgov + \@printpermissiontrue + \@printcopyrightfalse + \@acmownedfalse + \fi + \ifnum\acm@copyrightmode=6\relax % cagov + \@acmownedfalse + \fi + \ifnum\acm@copyrightmode=8\relax % licensedusgovmixed + \@acmownedfalse + \fi + \ifnum\acm@copyrightmode=9\relax % licensedcagovmixed + \@acmownedfalse + \fi + \ifnum\acm@copyrightmode=10\relax % othergov + \@acmownedtrue + \fi + \ifnum\acm@copyrightmode=11\relax % licensedothergov + \@acmownedfalse + \@printcopyrightfalse + \fi} +\def\setcopyright#1{\setkeys{ACM@}{acmcopyrightmode=#1}} +\setcopyright{acmcopyright} +\def\@copyrightowner{% + \ifcase\acm@copyrightmode\relax % none + \or % acmcopyright + ACM. + \or % acmlicensed + Copyright held by the owner/author(s). Publication rights licensed to + ACM. + \or % rightsretained + Copyright held by the owner/author(s). + \or % usgov + \or % usgovmixed + ACM. + \or % cagov + Crown in Right of Canada. + \or %cagovmixed + ACM. + \or %licensedusgovmixed + Copyright held by the owner/author(s). Publication rights licensed to + ACM. + \or %licensedcagovmixed + Copyright held by the owner/author(s). Publication rights licensed to + ACM. + \or % othergov + ACM. + \or % licensedothergov + \fi} +\def\@copyrightpermission{% + \ifcase\acm@copyrightmode\relax % none + \or % acmcopyright + Permission to make digital or hard copies of all or part of this + work for personal or classroom use is granted without fee provided + that copies are not made or distributed for profit or commercial + advantage and that copies bear this notice and the full citation on + the first page. Copyrights for components of this work owned by + others than ACM must be honored. Abstracting with credit is + permitted. To copy otherwise, or republish, to post on servers or to + redistribute to lists, requires prior specific permission + and\hspace*{.5pt}/or a fee. Request permissions from + permissions@acm.org. + \or % acmlicensed + Permission to make digital or hard copies of all or part of this + work for personal or classroom use is granted without fee provided + that copies are not made or distributed for profit or commercial + advantage and that copies bear this notice and the full citation on + the first page. Copyrights for components of this work owned by + others than the author(s) must be honored. Abstracting with credit + is permitted. To copy otherwise, or republish, to post on servers + or to redistribute to lists, requires prior specific permission + and\hspace*{.5pt}/or a fee. Request permissions from + permissions@acm.org. + \or % rightsretained + Permission to make digital or hard copies of part or all of this work + for personal or classroom use is granted without fee provided that + copies are not made or distributed for profit or commercial advantage + and that copies bear this notice and the full citation on the first + page. Copyrights for third-party components of this work must be + honored. For all other uses, contact the + owner\hspace*{.5pt}/author(s). + \or % usgov + This paper is authored by an employee(s) of the United States + Government and is in the public domain. Non-exclusive copying or + redistribution is allowed, provided that the article citation is + given and the authors and agency are clearly identified as its + source. + \or % usgovmixed + ACM acknowledges that this contribution was authored or co-authored + by an employee, or contractor of the national government. As such, + the Government retains a nonexclusive, royalty-free right to + publish or reproduce this article, or to allow others to do so, for + Government purposes only. Permission to make digital or hard copies + for personal or classroom use is granted. Copies must bear this + notice and the full citation on the first page. Copyrights for + components of this work owned by others than ACM must be + honored. To copy otherwise, distribute, republish, or post, + requires prior specific permission and\hspace*{.5pt}/or a + fee. Request permissions from permissions@acm.org. + \or % cagov + This article was authored by employees of the Government of Canada. + As such, the Canadian government retains all interest in the + copyright to this work and grants to ACM a nonexclusive, + royalty-free right to publish or reproduce this article, or to allow + others to do so, provided that clear attribution is given both to + the authors and the Canadian government agency employing them. + Permission to make digital or hard copies for personal or classroom + use is granted. Copies must bear this notice and the full citation + on the first page. Copyrights for components of this work owned by + others than the Canadain Government must be honored. To copy + otherwise, distribute, republish, or post, requires prior specific + permission and\hspace*{.5pt}/or a fee. Request permissions from + permissions@acm.org. + \or % cagovmixed + ACM acknowledges that this contribution was co-authored by an + affiliate of the national government of Canada. As such, the Crown + in Right of Canada retains an equal interest in the copyright. + Reprints must include clear attribution to ACM and the author's + government agency affiliation. Permission to make digital or hard + copies for personal or classroom use is granted. Copies must bear + this notice and the full citation on the first page. Copyrights for + components of this work owned by others than ACM must be honored. + To copy otherwise, distribute, republish, or post, requires prior + specific permission and\hspace*{.5pt}/or a fee. Request permissions + from permissions@acm.org. + \or % licensedusgovmixed + Publication rights licensed to ACM. ACM acknowledges that this + contribution was authored or co-authored by an employee, contractor + or affiliate of the United States government. As such, the + Government retains a nonexclusive, royalty-free right to publish or + reproduce this article, or to allow others to do so, for Government + purposes only. + \or % licensedcagovmixed + Publication rights licensed to ACM. ACM acknowledges that this + contribution was authored or co-authored by an employee, contractor + or affiliate of the national government of Canada. As such, the + Government retains a nonexclusive, royalty-free right to publish or + reproduce this article, or to allow others to do so, for Government + purposes only. + \or % othergov + ACM acknowledges that this contribution was authored or co-authored + by an employee, contractor or affiliate of a national government. As + such, the Government retains a nonexclusive, royalty-free right to + publish or reproduce this article, or to allow others to do so, for + Government purposes only. + \or % licensedothergov + Publication rights licensed to ACM. ACM acknowledges that this + contribution was authored or co-authored by an employee, contractor + or affiliate of a national government. As such, the Government + retains a nonexclusive, royalty-free right to publish or reproduce + this article, or to allow others to do so, for Government purposes + only. + \fi} +\endinput +%% +%% End of file `acmcopyright.sty'. diff --git a/theory/paper_pasc/biblio.bib b/theory/paper_pasc/biblio.bib new file mode 100644 index 0000000000000000000000000000000000000000..c0eead89fdf29d3503b5c2a11582f8b59ec45b8f --- /dev/null +++ b/theory/paper_pasc/biblio.bib @@ -0,0 +1,392 @@ +@article{Springel2005, + author = {{Springel}, V.}, + title = "{The cosmological simulation code GADGET-2}", + journal = {\mnras}, + eprint = {astro-ph/0505010}, + keywords = {methods: numerical, galaxies: interactions, dark matter}, + year = 2005, + month = dec, + volume = 364, + pages = {1105-1134}, + doi = {10.1111/j.1365-2966.2005.09655.x}, + adsurl = {http://adsabs.harvard.edu/abs/2005MNRAS.364.1105S}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@ARTICLE{Price2012, + author = {{Price}, D.~J.}, + title = "{Smoothed particle hydrodynamics and magnetohydrodynamics}", + journal = {Journal of Computational Physics}, + archivePrefix = "arXiv", + eprint = {1012.1885}, + primaryClass = "astro-ph.IM", + year = 2012, + month = feb, + volume = 231, + pages = {759-794}, + doi = {10.1016/j.jcp.2010.12.011}, + adsurl = {http://adsabs.harvard.edu/abs/2012JCoPh.231..759P}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + + +@article{Gingold1977, + title={Smoothed particle hydrodynamics-theory and application to non-spherical stars}, + author={Gingold, Robert A and Monaghan, Joseph J}, + journal={Monthly notices of the royal astronomical society}, + volume={181}, + pages={375--389}, + year={1977} + } + +@article{Viccione2008, + title={Defining and optimizing algorithms for neighbouring particle identification in SPH fluid simulations}, + author={Viccione, G and Bovolin, V and Carratelli, E Pugliese}, + journal={International Journal for Numerical Methods in Fluids}, + volume={58}, + number={6}, + pages={625--638}, + year={2008}, + publisher={Wiley Online Library} + } + + +@article{Lee1977, + title={Worst-case analysis for region and partial region searches in multidimensional binary search trees and balanced quad trees}, + author={Lee, Der-Tsai and Wong, CK}, + journal={Acta Informatica}, + volume={9}, + number={1}, + pages={23--29}, + year={1977}, + publisher={Springer} + } + + +@article{Verlet1967, + title = {Computer ``Experiments'' on Classical Fluids. {I}. {T}hermodynamical Properties of {L}ennard-{J}ones Molecules}, + author = {Verlet, Loup}, + journal = {Physical Review}, + volume = {159}, + number = {1}, + pages = {98}, + year = {1967}, + doi = {10.1103/PhysRev.159.98}, + publisher = {American Physical Society} + } + + +@book{Allen1989, + title={Computer simulation of liquids}, + author={Allen, M.P. and Tildesley, D.J.}, + volume={18}, + number={195}, + year={1989}, + publisher={Oxford university press} + } + +@article{Barnes1986, + title={A hierarchical O (N log N) force-calculation algorithm}, + author={Barnes, Josh and Hut, Piet}, + journal={Nature}, + year={1986}, + publisher={Nature Publishing Group} +} + + +@article{Hernquist1989, + title={{TREESPH}-{A} unification of {SPH} with the hierarchical tree method}, + author={Hernquist, Lars and Katz, Neal}, + journal={The Astrophysical Journal Supplement Series}, + volume={70}, + pages={419--446}, + year={1989} + } + +@article{Gonnet2012, + author = "Gonnet, Pedro", + title = "Pairwise {V}erlet lists: Combining cell lists and {V}erlet lists to improve memory locality and parallelism", + journal = "Journal of Computational Chemistry", + volume = "33", + issue = "1", + pages = "76--81", + year = "2012" + } + +@article{Gonnet2013, + title={Pseudo-{V}erlet lists: a new, compact neighbour list representation}, + author={Gonnet, Pedro}, + journal={Molecular Simulation}, + volume={39}, + number={9}, + pages={721--727}, + year={2013}, + publisher={Taylor \& Francis} + } + + +@article{Bentley1975, + title={Multidimensional binary search trees used for associative searching}, + author={Bentley, Jon Louis}, + journal={Communications of the ACM}, + volume={18}, + number={9}, + pages={509--517}, + year={1975}, + publisher={ACM} + } + +@article{Wadsley2004, + title={Gasoline: a flexible, parallel implementation of {TreeSPH}}, + author={Wadsley, JW and Stadel, Joachim and Quinn, Thomas}, + journal={New Astronomy}, + volume={9}, + number={2}, + pages={137--158}, + year={2004}, + publisher={Elsevier} + } + +@article{Dominguez2011, + title={Neighbour lists in smoothed particle hydrodynamics}, + author={Dom{\'\i}nguez, JM and Crespo, AJC and G{\'o}mez-Gesteira, M and Marongiu, JC}, + journal={International Journal for Numerical Methods in Fluids}, + volume={67}, + number={12}, + pages={2026--2042}, + year={2011}, + publisher={Wiley Online Library} + } + +@article{Meagher1982, + title={Geometric modeling using octree encoding}, + author={Meagher, Donald}, + journal={Computer Graphics and Image Processing}, + volume={19}, + number={2}, + pages={129--147}, + year={1982}, + publisher={Elsevier} + } +@article{Carrier1988, + title={A fast adaptive multipole algorithm for particle simulations}, + author={Carrier, J and Greengard, Leslie and Rokhlin, Vladimir}, + journal={SIAM Journal on Scientific and Statistical Computing}, + volume={9}, + number={4}, + pages={669--686}, + year={1988}, + publisher={SIAM} +} + + +@ARTICLE{Schaye2015, + author = {{Schaye}, J. and {Crain}, R.~A. and {Bower}, R.~G. and {Furlong}, M. and + {Schaller}, M. and {Theuns}, T. and {Dalla Vecchia}, C. and + {Frenk}, C.~S. and {McCarthy}, I.~G. and {Helly}, J.~C. and + {Jenkins}, A. and {Rosas-Guevara}, Y.~M. and {White}, S.~D.~M. and + {Baes}, M. and {Booth}, C.~M. and {Camps}, P. and {Navarro}, J.~F. and + {Qu}, Y. and {Rahmati}, A. and {Sawala}, T. and {Thomas}, P.~A. and + {Trayford}, J.}, + title = "{The EAGLE project: simulating the evolution and assembly of galaxies and their environments}", + journal = {\mnras}, +archivePrefix = "arXiv", + eprint = {1407.7040}, + keywords = {methods: numerical, galaxies: evolution, galaxies: formation, cosmology: theory}, + year = 2015, + month = jan, + volume = 446, + pages = {521-554}, + doi = {10.1093/mnras/stu2058}, + adsurl = {http://adsabs.harvard.edu/abs/2015MNRAS.446..521S}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@inproceedings{gonnet2013swift, + title={SWIFT: Fast algorithms for multi-resolution SPH on multi-core architectures}, + author={Gonnet, Pedro and Schaller, Matthieu and Theuns, Tom and Chalk, Aidan BG}, + booktitle={8th International SPHERIC Workshop}, + archivePrefix = "arXiv", + eprint = {1309.3783}, + year={2013}, + organization={Trondheim, Norway} +} + +@inproceedings{theuns2015swift, + title={Swift: task-based hydrodynamics and gravity for cosmological simulations}, + author={Theuns, Tom and Chalk, Aidan and Schaller, Matthieu and Gonnet, Pedro}, + booktitle={Proceedings of the 3rd International Conference on Exascale Applications and Software}, + pages={98--102}, + year={2015}, + organization={University of Edinburgh} +} + +@article{gonnet2015efficient, + title={Efficient and Scalable Algorithms for Smoothed Particle Hydrodynamics on Hybrid Shared/Distributed-Memory Architectures}, + author={Gonnet, Pedro}, + journal={SIAM Journal on Scientific Computing}, + volume={37}, + number={1}, + pages={C95--C121}, + year={2015}, + publisher={SIAM} +} + +@article{ref:Dagum1998, + title={{OpenMP}: an industry standard {API} for shared-memory programming}, + author={Dagum, Leonardo and Menon, Ramesh}, + journal={Computational Science \& Engineering, IEEE}, + volume={5}, + number={1}, + pages={46--55}, + year={1998}, + publisher={IEEE} + } + +@book{ref:Snir1998, + title={{MPI}: The Complete Reference (Vol. 1): Volume 1-The {MPI} Core}, + author={Snir, Marc and Otto, Steve and Huss-Lederman, Steven and Walker, David and Dongarra, Jack}, + volume={1}, + year={1998}, + publisher={MIT press} + } + +@inproceedings{warren1993parallel, + title={A parallel hashed oct-tree n-body algorithm}, + author={Warren, Michael S and Salmon, John K}, + booktitle={Proceedings of the 1993 ACM/IEEE conference on Supercomputing}, + pages={12--21}, + year={1993}, + organization={ACM} +} + +@article{gonnet2013quicksched, + author = {{Gonnet}, P. and {Chalk}, A.~B.~G. and {Schaller}, M.}, + title = "{QuickSched: Task-based parallelism with dependencies and conflicts}", + journal = {ArXiv e-prints}, +archivePrefix = "arXiv", + eprint = {1601.05384}, + primaryClass = "cs.DC", + keywords = {Computer Science - Distributed, Parallel, and Cluster Computing}, + year = 2016, + month = jan, + adsurl = {http://adsabs.harvard.edu/abs/2016arXiv160105384G}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + + + + +@book{ref:Blumofe1995, + number = {8}, + year = {1995}, + author = {Blumofe, R.D. and Joerg, C.F. and Kuszmaul, B.C. and Leiserson, C.E. and Randall, K.H. and Zhou, Y.}, + volume = {30}, + publisher = {ACM}, + title = {Cilk: An efficient multithreaded runtime system}, + } + +@manual{ref:QUARK, + month = {April}, + year = {2011}, + author = {YarKhan, A. and Kurzak, J. and Dongarra, J.}, + address = {Electrical Engineering and Computer Science, Innovative Computing Laboratory, University of Tennessee}, + publisher = {University of Tennessee}, + title = {QUARK Users' Guide}, +} + +@manual{ref:SMPSuperscalar, + year = {2008}, + publisher = {Barcelona Supercomputing Center}, + title = {{SMP} {S}uperscalar ({SMPS}s) User's Manual, {B}arcelona Supercomputing Center}, +} + +@article{ref:Augonnet2011, + year = {2011}, + author = {Augonnet, C\'edric and Thibault, Samuel and Namyst, Raymond and Wacrenier, Pierre-Andr\'e}, + journal = {Concurrency and Computation: Practice and Experience, Special Issue: Euro-Par 2009}, + volume = {23}, + pages = {187--198}, + publisher = {John Wiley & Sons, Ltd.}, + doi = {10.1002/cpe.1631}, + url = {http://hal.inria.fr/inria-00550877}, + title = {Star{PU}: A Unified Platform for Task Scheduling on Heterogeneous Multicore Architectures}, +} + +@article{ref:Duran2009, + title={A proposal to extend the {OpenMP} tasking model with dependent tasks}, + author={Duran, Alejandro and Ferrer, Roger and Ayguad{\'e}, Eduard and Badia, Rosa M and Labarta, Jesus}, + journal={International Journal of Parallel Programming}, + volume={37}, + number={3}, + pages={292--305}, + year={2009}, + publisher={Springer} + } + +@book{ref:Reinders2007, + title={Intel threading building blocks: outfitting {C++} for multi-core processor parallelism}, + author={Reinders, James}, + year={2007}, + publisher={O'Reilly Media, Incorporated} + } + +@inproceedings{ref:Agullo2009, + title={Numerical linear algebra on emerging architectures: The {PLASMA} and {MAGMA} projects}, + author={Agullo, Emmanuel and Demmel, Jim and Dongarra, Jack and Hadri, Bilel and Kurzak, Jakub and Langou, Julien and Ltaief, Hatem and Luszczek, Piotr and Tomov, Stanimire}, + booktitle={Journal of Physics: Conference Series}, + volume={180}, + number={1}, + pages={012037}, + year={2009}, + organization={IOP Publishing} + } + +@article{ref:Bangerth2007, + author = {W. Bangerth and R. Hartmann and G. Kanschat}, + title = {{deal.II} -- a General Purpose Object Oriented Finite Element Library}, + journal = {ACM Trans. Math. Softw.}, + year = "2007", + volume = "33", + number = "4", + pages = {24/1--24/27} + } + +@article{ref:Karypis1998, + title={A fast and high quality multilevel scheme for partitioning irregular graphs}, + author={Karypis, George and Kumar, Vipin}, + journal={SIAM Journal on scientific Computing}, + volume={20}, + number={1}, + pages={359--392}, + year={1998}, + publisher={SIAM} + } + +@article{devine2002zoltan, + title={Zoltan data management services for parallel dynamic applications}, + author={Devine, Karen and Boman, Erik and Heaphy, Robert and Hendrickson, Bruce and Vaughan, Courtenay}, + journal={Computing in Science \& Engineering}, + volume={4}, + number={2}, + pages={90--96}, + year={2002}, + publisher={IEEE} +} + + +@article{ref:Gonnet2015, + author = {Pedro Gonnet}, + title = {Efficient and Scalable Algorithms for Smoothed Particle Hydrodynamics + on Hybrid Shared/Distributed-Memory Architectures}, + journal = {{SIAM} J. Scientific Computing}, + volume = {37}, + number = {1}, + year = {2015}, + url = {http://dx.doi.org/10.1137/140964266}, + doi = {10.1137/140964266}, + timestamp = {Thu, 12 Mar 2015 10:30:34 +0100}, + biburl = {http://dblp.uni-trier.de/rec/bib/journals/siamsc/Gonnet15}, + bibsource = {dblp computer science bibliography, http://dblp.org} +} + diff --git a/theory/paper_pasc/pasc_paper.tex b/theory/paper_pasc/pasc_paper.tex new file mode 100644 index 0000000000000000000000000000000000000000..629ff7bc1b01b629dc1b909b7675dfadc8c1c14d --- /dev/null +++ b/theory/paper_pasc/pasc_paper.tex @@ -0,0 +1,825 @@ +\documentclass{sig-alternate-05-2015} +\usepackage{times,amsmath,amsfonts,amssymb,epstopdf,xspace} +\usepackage{graphicx} +\usepackage{hyperref} +\usepackage[usenames]{color} + + +\newcommand{\red}[1]{{\textcolor{red}{#1}}} + +\pdfminorversion=7 + + +%Journals +\newcommand{\mnras}{MNRAS} +\newcommand{\jcap}{JCAP} +\newcommand{\physrep}{Phys.~Rep.} % Physics Reports +\newcommand{\apjs}{ApJS} + +% Latex tricks +\newcommand{\oh}[1]{\mbox{$ {\mathcal O}( #1 ) $}} +\newcommand{\eqn}[1] {(\ref{eqn:#1})} +\makeatletter +\newcommand{\pushright}[1]{\ifmeasuring@#1\else\omit\hfill$\displaystyle#1$\fi\ignorespaces} +\makeatother + +% Some acronyms +\newcommand{\gadget}{{\sc Gadget-2}\xspace} +\newcommand{\swift}{{\sc swift}\xspace} +\newcommand{\qs}{{\sc QuickSched}\xspace} + +% Webpage +\newcommand{\web}{\url{www.swiftsim.com}} + + +%##################################################################################################### + +\begin{document} + +%Conference +\conferenceinfo{PASC '16}{June 8--10, 2016, Lausanne, Switzerland} + +\title{{\ttlit SWIFT}: Using task-based parallelism, fully asynchronous +communication, and graph partition-based domain decomposition for +strong scaling on more than 100\,000 cores.} +% \title{{\ttlit SWIFT}: A task-based hybrid-parallel strongly scalable code for +% particle-based cosmological simulations} + +\numberofauthors{6} + +\author{ +\alignauthor + Matthieu~Schaller\\ + \affaddr{Institute for Computational Cosmology (ICC)}\\ + \affaddr{Department of Physics}\\ + \affaddr{Durham University}\\ + \affaddr{Durham DH1 3LE, UK}\\ + \email{\footnotesize \url{matthieu.schaller@durham.ac.uk}} +\alignauthor + Pedro~Gonnet\\ + \affaddr{School of Engineering and Computing Sciences}\\ + \affaddr{Durham University}\\ + \affaddr{Durham DH1 3LE, UK}\\ +\alignauthor + Aidan~B.~G.~Chalk\\ + \affaddr{School of Engineering and Computing Sciences}\\ + \affaddr{Durham University}\\ + \affaddr{Durham DH1 3LE, UK}\\ +\and +\alignauthor + Peter~W.~Draper\\ + \affaddr{Institute for Computational Cosmology (ICC)}\\ + \affaddr{Department of Physics}\\ + \affaddr{Durham University}\\ + \affaddr{Durham DH1 3LE, UK}\\ + %% \alignauthor + %% Tom Theuns\\ + %% \affaddr{Institute for Computational Cosmology}\\ + %% \affaddr{Department of Physics}\\ + %% \affaddr{Durham University}\\ + %% \affaddr{Durham DH1 3LE, UK} +} + + +\date{\today} + +\maketitle + +%##################################################################################################### + +\begin{abstract} + We present a new open-source cosmological code, called \swift, designed to + solve the equations of hydrodynamics using a particle-based approach (Smooth + Particle Hydrodynamics) on hybrid shared / distributed-memory architectures. + \swift was designed from the bottom up to provide excellent {\em strong scaling} + on both commodity clusters (Tier-2 systems) and Top100-supercomputers + (Tier-0 systems), without relying on architecture-specific features + or specialized accelerator hardware. + This performance is due to three main computational approaches: + + \begin{itemize} + + \item \textbf{Task-based parallelism} for shared-memory + parallelism, which provides fine-grained load balancing and + thus strong scaling on large numbers of cores. + + \item \textbf{Graph-based domain decomposition}, which uses + the task graph to decompose the simulation + domain such that the {\em work}, as opposed to just the {\em data}, + as is the case with most partitioning schemes, is equally distributed + across all nodes. + + \item \textbf{Fully dynamic and asynchronous communication}, + in which communication is modelled as just another task in + the task-based scheme, sending data whenever it is ready and + deferring on tasks that rely on data from other nodes + until it arrives. + + \end{itemize} + + %% These three main aspects alongside improved cache-efficient + %% algorithms for neighbour finding allow the code to be 40x faster on + %% the same architecture than the standard code Gadget-2 widely used by + %% researchers. + + In order to use these approaches, the code had to be re-written from + scratch, and the algorithms therein adapted to the task-based paradigm. + As a result, we can show upwards of 60\% parallel efficiency for + moderate-sized problems when increasing the number of cores 512-fold, + on both x86-based and Power8-based architectures. + + %% As a result, our code present excellent \emph{strong} + %% scaling on a variety of architectures, ranging from x86 Tier-2 systems to the + %% largest Tier-0 machines currently available. It displays, for instance, a + %% \emph{strong} scaling parallel efficiency of more than 60\% when going from + %% 512 to 131072 cores on a Blue Gene architecture. Similar results are obtained + %% on standard clusters of x86 CPUs. + + %% The task-based library, \qs, used as the backbone of the code is + %% itself also freely available and can be used in a wide variety of + %% other numerical problems. + +\end{abstract} + + +\keywords{Physics; Cosmology; Fluid dynamics; Smooth Particle Hydrodynamics; + Task-based parallelism; Asynchronous data transfer; Extreme scaling} + +%##################################################################################################### + + +\section{Introduction} + +For the past decade physical limitations have kept the speed of +individual processor cores constrained, so instead of getting {\em + faster}, computers are getting {\em more parallel}. Systems +containing up to 64 general-purpose cores are becoming commonplace, +and the number of cores can be expected to continue growing +exponentially, e.g.~following Moore's law, much in the same way +processor speeds were up until a few years ago. + +As a consequence, in order to get faster, computer programs need to +rely on better exploitation of this massive parallelism, i.e.~ they +need to exhibit {\em strong scaling}, the ability to run roughly $N$ +times faster when executed on $N$ times as many processors. Without +strong scaling, massive parallelism can still be used to tackle ever +{\em larger} problems, but not make fixed-size problems {\em faster}. + +Although this switch from growth in speed to growth in parallelism +has been anticipated and observed for quite some time, very little +has changed in terms of how we design and implement parallel +computations. +Branch-and-bound synchronous parallelism using +OpenMP\cite{ref:Dagum1998} and MPI\cite{ref:Snir1998}, as well as domain +decompositions based on geometry or space-filling curves \cite{warren1993parallel} +are still commonplace, despite both the +architectures and problem scales having changed dramatically since +their introduction. + +The design and implementation of \swift\footnote{ +\swift is an open-source software project and the latest version of +the source code, along with all the data needed to run the test cased +presented in this paper, can be downloaded at \web.} +\cite{gonnet2013swift,theuns2015swift,gonnet2015efficient}, a large-scale +cosmological simulation code built from scratch, provided the perfect +opportunity to test some newer +approaches, i.e.~task-based parallelism, fully asynchronous communication, and +graph partition-based domain decompositions. + +This paper describes these techniques, which are not exclusive to +cosmological simulations or any specific architecture, as well as +the results obtained with them. + + +%##################################################################################################### + +\section{Particle-based hydrodynamics} + +Smoothed Particle Hydrodynamics \cite{Gingold1977,Price2012} (SPH) uses +particles to represent fluids. Each particle $p_i$ has a position $\mathbf +x_i$, velocity $\mathbf v_i$, internal energy $u_i$, mass $m_i$, and a smoothing +length $h_i$. The particles are used to interpolate any quantity $Q$ at any +point in space as a weighted sum over the particles: +% +\begin{equation} + Q(\mathbf r) = \sum_i m_i \frac{Q_i}{\rho_i} W( \|\mathbf r - \mathbf r_i\| , h ) + \label{eqn:interp} +\end{equation} +% +where $Q_i$ is the quantity at the $i$th particle, $h$ is the {\em smoothing + length}, i.e.~the radius of the sphere within which data will be considered +for the interpolation, and $W(r,h)$ is the {\em smoothing kernel} or {\em + smoothing function}. Several different forms for $W(r,h)$ exist, each with +their own specific benefits and drawbacks. + +The particle density $\rho_i$ used in \eqn{interp} is itself computed similarly: +% +\begin{equation} + \rho_i = \sum_{j,~r_{ij} < h_i} m_j W(r_{ij},h_i) + \label{eqn:rho} +\end{equation} +% +where $r_{ij} = \|\mathbf{r_i}-\mathbf{r_j}\|$ is the Euclidean distance between +particles $p_i$ and $p_j$. In compressible simulations, the smoothing length +$h_i$ of each particle is chosen such that the number of neighbours with which +it interacts is kept more or less constant, and can result in smoothing lengths +spanning several orders of magnitudes within the same simulation. + +Once the densities $\rho_i$ have been computed, the time derivatives of the +velocity and internal energy, which require $\rho_i$, are +computed as follows: +% +\begin{align} + \frac{dv_i}{dt} & = -\sum_{j,~r_{ij} < \hat{h}_{ij}} m_j \left[ + \frac{P_i}{\Omega_i\rho_i^2}\nabla_rW(r_{ij},h_i)\right. + \label{eqn:dvdt}\\ + & \pushright{\left.\frac{P_j}{\Omega_j\rho_j^2}\nabla_rW(r_{ij},h_j) \right], \nonumber} \\ + \frac{du_i}{dt} & = \frac{P_i}{\Omega_i\rho_i^2} \sum_{j,~r_{ij} < h_i} m_j(\mathbf v_i - \mathbf v_j) \cdot \nabla_rW(r_{ij},h_i), \label{eqn:dudt} +\end{align} +% +where $\hat{h}_{ij} = \max\{h_i,h_j\}$, and the particle pressure $P_i=\rho_i +u_i (\gamma-1)$ and correction term $\Omega_i=1 + +\frac{h_i}{3\rho_i}\frac{\partial \rho}{\partial h}$ are computed on the fly. + +The computations in \eqn{rho}, \eqn{dvdt}, and \eqn{dudt} involve finding all +pairs of particles within range of each other. Any particle $p_j$ is {\em + within range} of a particle $p_i$ if the distance between $p_i$ and $p_j$ is +smaller or equal to the smoothing distance $h_i$ of $p_i$, e.g.~as is done in +\eqn{rho}. Note that since particle smoothing lengths may vary between +particles, this association is not symmetric, i.e.~$p_j$ may be in range of +$p_i$, but $p_i$ not in range of $p_j$. If $r_{ij} < \max\{h_i,h_j\}$, as is +required in \eqn{dvdt}, then particles $p_i$ and $p_j$ are within range {\em of +each other}. + +The computation thus proceeds in two distinct stages that are evaluated +separately: +\begin{enumerate} + \item {\em Density} computation: For each particle $p_i$, + loop over all particles $p_j$ within range of $p_i$ and evaluate + \eqn{rho}. + \item {\em Force} computation: For each particle $p_i$, + loop over all particles $p_j$ + within range of each other and evaluate \eqn{dvdt} and \eqn{dudt}. +\end{enumerate} + +Finding the interacting neighbours for each particle constitutes +the bulk of the computation. +Many codes, e.g. in Astrophysics simulations \cite{Gingold1977}, +rely on spatial {\em trees} +for neighbour finding \cite{Gingold1977,Hernquist1989,Springel2005,Wadsley2004}, +i.e.~$k$-d trees \cite{Bentley1975} or octrees \cite{Meagher1982} +are used to decompose the simulation space. +In Astrophysics in particular, spatial trees are also a somewhat natural +choice as they are used to compute long-range gravitational interactions +via a Barnes-Hut \cite{Barnes1986} or Fast Multipole +\cite{Carrier1988} method. +The particle interactions are then computed by traversing the list of +particles and searching for their neighbours in the tree. + +Although such tree traversals are trivial to parallelize, they +have several disadvantages, e.g.~with regards to computational +efficiency, cache efficiency, and exploiting symmetries in the +computation (see \cite{gonnet2015efficient} for a more detailed +analysis). + + +%##################################################################################################### + +\section{Parallelization strategy} + +One of the main concerns when developing \swift was to break +with the branch-and-bound type parallelism inherent to parallel +codes using OpenMP and MPI, and the constant synchronization +between computational steps it results in. + +If {\em synchronization} is the main problem, then {\em + asynchronicity} is the obvious solution. We therefore opted for a +{\em task-based} approach for maximum single-node, or shared-memory, +performance. This approach not only provides excellent load-balancing +on a single node, it also provides a powerful model of the computation +that can be used to distribute the work equitably over a set of +distributed-memory nodes using general-purpose graph partitioning +algorithms. Finally, the necessary communication between nodes can +itself be modelled in a task-based way, interleaving communication +seamlessly with the rest of the computation. + + +\subsection{Task-based parallelism} + +Task-based parallelism is a shared-memory parallel programming +paradigm in which a computation is broken-down in to a set of +{\em tasks} which can be executed concurrently. +In order to ensure that the tasks are executed in the right +order, e.g.~that data needed by one task is only used once it +has been produced by another task, {\em dependencies} between +tasks are specified and strictly enforced by a task scheduler. +Additionally, if two tasks require exclusive access to the same +resource, yet in no particular order, they are treated as +{\em conflicts} and the scheduler ensures that they are not executed +concurrently. +Computations described in this way then parallelize trivially: +each processor repeatedly grabs a task for which all dependencies +have been satisfied and executes it until there are no tasks left. + +The main advantages of using a task-based approach are +% +\begin{itemize} + \item The order in which the tasks are processed, and how they + are assigned to each processor is completely + dynamic and adapts automatically to load imbalances. + \item If the dependencies and conflicts are specified correctly, + there is no need for expensive explicit locking, synchronization, + or atomic operations to deal with most concurrency problems. + \item Each task has exclusive access to the data it is working on, + thus improving cache locality and efficiency. +\end{itemize} +% +Task-based parallelism is not a particularly new concept and therefore +several implementations thereof exist, e.g.~Cilk \cite{ref:Blumofe1995}, +QUARK \cite{ref:QUARK}, StarPU \cite{ref:Augonnet2011}, +SMP~Superscalar \cite{ref:SMPSuperscalar}, OpenMP~3.0 \cite{ref:Duran2009}, +and Intel's TBB \cite{ref:Reinders2007}. + +For convenience, and to make experimenting with different scheduling +techniques easier, we chose to implement our own task scheduler +in \swift, which has since been back-ported as the general-purpose +\qs task scheduler \cite{gonnet2013quicksched}. +This also allowed us to extend the scheduler with the concept of +task conflicts. + +Despite its advantages, and the variety of implementations, +task-based parallelism is rarely used in +practice (notable exceptions include the PLASMA project +\cite{ref:Agullo2009} which uses QUARK/StarPU, and the {\tt deal.II} project +\cite{ref:Bangerth2007} which uses Intel's TBB). +The main problem is that to effectively use task-based parallelism, +most computations need to be completely redesigned to fit the paradigm, +which is usually not an option for large and complex codebases. + +Since we were re-implementing \swift from scratch, this was not an issue. +The tree-based neighbour-finding described above was replaced with a more +task-friendly approach as described in \cite{gonnet2015efficient}. +Particle interactions are computed within, and between pairs, of +hierarchical {\em cells} containing one or more particles. +The dependencies between the tasks are set following +equations \eqn{rho}, \eqn{dvdt}, and \eqn{dudt}, i.e.~such that for any cell, +all the tasks computing the particle densities therein must have +completed before the particle forces can be computed, and all the +force computations must have completed before the particle velocities +may be updated. +The task hierarchy is shown in Fig.~\ref{tasks}, where the particles in each +cell are first sorted (round tasks) before the particle densities +are computed (first layer of square tasks). +Ghost tasks (triangles) are used to ensure that all density computations +on a cell of particles have completed before the force evaluation tasks +(second layer of square tasks) execute. +Once all the force tasks on a cell of particles have completed, +the integrator tasks (inverted triangles) update the particle positions +and velocities. + +Due to the cache-friendly nature of the task-based computations, +and their ability to exploit symmetries in the particle interactions, +the task-based approach is already more efficient than the tree-based +neighbour search on a single core, and scales efficiently to all +cores of a shared-memory machine \cite{gonnet2015efficient}. + +\begin{figure} +\centering +\includegraphics[width=\columnwidth]{Figures/Hierarchy3} +\caption{Task hierarchy for the SPH computations in \swift, + including communication tasks. Arrows indicate dependencies, + i.e.~an arrow from task $A$ to task $B$ indicates that $A$ + depends on $B$. The task color corresponds to the cell or + cells it operates on, e.g.~the density and force tasks work + on individual cells or pairs of cells. + The blue cell data is on a separate rank as the yellow and + purple cells, and thus its data must be sent across during + the computation using {\tt send}/{\tt recv} tasks (diamond-shaped).} +\label{tasks} +\end{figure} + + +\subsection{Task-based domain decomposition} + +Given a task-based description of a computation, partitioning it over +a fixed number of {\em ranks} (using the MPI terminology) +is relatively straight-forward: we create +a {\em cell hypergraph} in which: +\begin{itemize} + \item Each {\em node} represents a single cell of particles, and, + \item each {\em edge} represents the tasks, connecting the + cells. +\end{itemize} +Since in the particular case of \swift each task references at most +two cells, the cell hypergraph is just a regular {\em cell graph}. + +Any partition of the cell graph represents a partition of the +computation, i.e.~the nodes belonging to each partition each belong +to a rank, and the +data belonging to each cell resides on the partition/rank to which +it has been assigned. +Any task spanning cells that belong to the same partition needs only +to be evaluated on that rank/partition, and tasks spanning more than +one partition need to be evaluated on both ranks/partitions. + +If we then weight each edge with the computational cost associated with +the tasks, then finding a {\em good} cell distribution reduces to finding a +partition of the cell graph such that the maximum sum of the weight +of all edges within and spanning in a partition is minimal +(see Fig.~\ref{taskgraphcut}). +Since the sum of the weights is directly proportional to the amount +of computation per rank/partition, minimizing the maximum sum +corresponds to minimizing the time spent on the slowest rank. +Computing such a partition is a standard graph problem and several +software libraries which provide good solutions\footnote{Computing +the optimal partition for more than two nodes is considered NP-hard.}, +e.g.~METIS \cite{ref:Karypis1998} and Zoltan \cite{devine2002zoltan}, +exist. + +Note that this approach does not explicitly consider any geometric +constraints, or strive to partition the {\em amount} of data equitably. +The only criteria is the computational cost of each partition, for +which the task decomposition provides a convenient model. +We are therefore partitioning the {\em computation}, as opposed +to just the {\em data}. + +Note also that the proposed partitioning scheme takes neither the +task hierarchy, nor the size of the data that needs to be exchanged +between partitions/ranks into account. +This approach is therefore only reasonable in situations in which +the task hierarchy is wider than flat, i.e.~the length of the critical +path in the task graph is much smaller than the sum of all tasks, +and in which communication latencies are negligible. + +\begin{figure} +\centering +\includegraphics[width=0.8\columnwidth]{Figures/task_graph_cut} +\caption{Illustration of the task-based domain decomposition + in which the tasks (circles) are {\em hyperedges} that connect one or + more resources (rectangles). The resources are partitioned + along the thick dotted line. The blue and orange tasks are + executed on the respective partitions, whereas the green + tasks/hyperedges along the cut line are executed on both. + The cost of this partition is the sum of the green tasks, + which are computed twice, as well as the cost imbalance + of the tasks executed in each partition.} +\label{taskgraphcut} +\end{figure} + + +\subsection{Asynchronous communications} + +Although each particle cell resides on a specific rank, the particle +data will still need to be sent to any neighbouring ranks that have +tasks that depend on this data, e.g.~the the green tasks in +Fig.~\ref{taskgraphcut}. +This communication must happen twice at each time-step: once to send +the particle positions for the density computation, and then again +once the densities have been aggregated locally for the force +computation. + +Most distributed-memory codes based on MPI \cite{ref:Snir1998} +separate computation and communication into distinct steps, i.e.~all +the ranks first exchange data, and only when the data exchange is +complete does computation start. Further data exchanges only happen +once computation has finished, and so on. +This approach, although conceptually simple and easy to implement, +has three major drawbacks: +\begin{itemize} + \item The frequent synchronization points between communication + and computation exacerbate load imbalances, + \item the communication phase consists mainly of waiting on + latencies, during which the node's CPUs usually run idle, and + \item during the computation phase, the communication network + is left completely unused, whereas during the communication + phase, all ranks attempt to use it at the same time. +\end{itemize} + +It is for these reasons that in \swift we opted for a fully +{\em dynamic and asynchronous} communication model in which local +data is sent whenever it is ready, data from other ranks is +only acted on once it has arrived, and there is no separation into +communication and computational phases. +In practice this means that no rank will sit idle waiting on +communication if there is any computation that can be done. + +This fits in quite naturally within the task-based framework +by modelling communication as just another task type, i.e.~adding +tasks that send and receive particle data between ranks. +For every task that uses data that resides on a different rank, +{\tt send} and {\tt recv} tasks are generated automatically on the source +and destination ranks respectively. +At the destination, the task is made dependent of the {\tt recv} +task, i.e.~the task can only execute once the data has actually +been received. +This is illustrated in Fig.~\ref{tasks}, where data is exchanged across +two ranks for the density and force computations and the extra +dependencies are shown in red. + +The communication itself is implemented using the non-blocking +{\tt MPI\_Isend} and {\tt MPI\_Irecv} primitives to initiate +communication, and {\tt MPI\_Test} to check if the communication was +successful and resolve the communication task's dependencies. In the +task-based scheme, strictly local tasks which do not rely on +communication tasks are executed first. As data from other ranks +arrive, the corresponding non-local tasks are unlocked and are +executed whenever a thread picks them up. + +One direct consequence of this approach is that instead of a single +{\tt send}/{\tt recv} call between each pair of neighbouring ranks, +one such pair is generated for each particle cell. +This type of communication, i.e.~several small messages instead of +one large message, is usually strongly discouraged since the sum of +the latencies for the small messages is usually much larger than +the latency of the single large message. +This, however, is of no concern in \swift since nobody is actively +waiting to receive the messages in order, and the communication +latencies are covered by local computations. +A nice side-effect of this approach is that communication no longer +happens in bursts involving all the ranks at the same time, but +is more or less evenly spread over the entire computation, and is +therefore less demanding of the communication infrastructure. + + + +%##################################################################################################### + +\section{Scaling tests} + +In this section we present some strong scaling tests of the \swift code on different +architectures for a representative cosmology problem. + +\subsection{Simulation setup} + +In order to provide a realistic setup, +the initial particle distributions used in our tests were extracted by +resampling low-redshift outputs of the EAGLE project \cite{Schaye2015}, a +large suite of state-of-the-art cosmological simulations. By selecting outputs +at late times (redshift $z=0.5$), we constructed a simulation setup which is +representative of the most expensive part of these simulations, i.e.~when the +particles are highly-clustered and no longer uniformly distributed. This +distribution of particles is shown on Fig.~\ref{fig:ICs}. +In order to fit our simulation setup into the limited +memory of some of the systems tested, we have randomly down-sampled the particle +count of the output to $800^3=5.12\times10^8$, $600^3=2.16\times10^8$ and +$376^3=5.1\times10^7$ particles with periodic boundary conditions +respectively. Scripts to generate these initial +conditions are provided with the source code. We then run the \swift code for +100 time-steps and average the wall clock time of these time-steps after having +removed the first and last ones, where disk I/O occurs. + +\begin{figure} +\centering +\includegraphics[width=\columnwidth]{Figures/cosmoVolume} +\caption{The initial density field computed from the initial particle + distribution used for our tests. The density $\rho_i$ of the particles spans 8 + orders of magnitude, requiring smoothing lengths $h_i$ changing by a factor of + almost $1000$ across the simulation volume. \label{fig:ICs}} +\end{figure} + +On all the machines, the code was compiled out of the box, +without any tuning, explicit vectorization, or exploiting any +other specific features of the underlying hardware. + +\subsection{x86 architecture: COSMA-5} + +For our first test, we ran \swift on the COSMA-5 DiRAC2 Data Centric +System\footnote{\url{icc.dur.ac.uk/index.php?content=Computing/Cosma}} +located at the University of Durham. The system consists of 420 nodes +with 2 Intel Sandy Bridge-EP Xeon +E5-2670\footnote{\url{http://ark.intel.com/products/64595/Intel-Xeon-Processor-E5-2670-20M-Cache-2_60-GHz-8_00-GTs-Intel-QPI}} +CPUs clocked at $2.6~\rm{GHz}$ with each $128~\rm{GByte}$ of RAM. The +16-core nodes are connected using a Mellanox FDR10 Infiniband 2:1 blocking +configuration. + +This system is similar to many Tier-2 systems available in most universities or +computing facilities. Demonstrating strong scaling on such a machine is +essential to show that the code can be efficiently used even on the type of +commodity hardware available to most researchers. + +The code was compiled with the Intel compiler version \textsc{2016.0.1} and +linked to the Intel MPI library version \textsc{5.1.2.150} and METIS library +version \textsc{5.1.0}. + +The simulation setup with $376^3$ particles was run on that system using 1 to +256 threads on 1 to 16 nodes, the results of which are shown on +Fig.~\ref{fig:cosma}. For this strong scaling test, we used one MPI rank per node and 16 +threads per node (i.e.~one thread per physical core). We also ran on one single +node using up to 32 threads, i.e.~up to one thread per physical and +virtual core. Fig.~\ref{fig:domains} shows the domain decomposition +obtained via the task-graph decomposition algorithm described above for +the 16 node run. + +\begin{figure} +\centering +\includegraphics[width=\columnwidth]{Figures/domains} +\caption{The particles for the initial conditions shown on Fig.~\ref{fig:ICs} + colored according to the node they belong to after a load-balancing call on + 32 nodes. As can be seen, the domain decomposition follows the cells in the mesh + but is not made of regular cuts. Domains have different shapes and + sizes. \label{fig:domains}} +\end{figure} + + +\begin{figure*} +\centering +\includegraphics[width=\textwidth]{Figures/scalingCosma} +\caption{Strong scaling test on the COSMA-5 machine (see text for hardware + description). \textit{Left panel:} Code Speed-up. \textit{Right panel:} + Corresponding parallel efficiency. Using 16 threads per node (no use of + hyper-threading) with one MPI rank per node, a good parallel efficiency (60\%) + is achieved when increasing the thread count from 1 (1 node) to 128 (8 nodes) + even on this relatively small test case. The dashed line indicates the + efficiency when running on one single node but using all the physical and + virtual cores (hyper-threading). As these CPUs only have one FPU per core, we + see no benefit from hyper-threading. + \label{fig:cosma}} +\end{figure*} + + + +\subsection{x86 architecture: SuperMUC} + +For our next test, we ran \swift on the SuperMUC x86 phase~1 thin +nodes \footnote{\url{https://www.lrz.de/services/compute/supermuc/systemdescription/}} +located at the Leibniz Supercomputing Center in Garching near Munich. This +system consists of 9\,216 nodes with 2 Intel Sandy Bridge-EP Xeon E5-2680 +8C\footnote{\url{http://ark.intel.com/products/64583/Intel-Xeon-Processor-E5-2680-(20M-Cache-2_70-GHz-8_00-GTs-Intel-QPI)}} +at $2.7~\rm{GHz}$ CPUS. Each 16-core node has $32~\rm{GByte}$ of RAM. +The nodes are split in 18 +``islands'' of 512 nodes within which communications are handled via an +Infiniband FDR10 non-blocking Tree. These islands are then connected using a 4:1 +Pruned Tree. + +This system is similar in nature to the COSMA-5 system used in the previous set +of tests but is much larger, allowing us to test scalability at a much larger +scale. + +The code was compiled with the Intel compiler version \textsc{2015.5.223} and +linked to the Intel MPI library version \textsc{5.1.2.150} and METIS library +version \textsc{5.0.2}. + +The simulation setup with $800^3$ particles was run using 16 to +2048 nodes (4 islands) and the results of this strong scaling test are shown in +Fig.~\ref{fig:superMUC}. For this test, we used one MPI rank per node and 16 +threads per node, i.e.~one thread per physical core. + +\begin{figure*} +\centering +\includegraphics[width=\textwidth]{Figures/scalingSuperMUC} +\caption{Strong scaling test on the SuperMUC phase~1 machine (see text + for hardware description). \textit{Left panel:} Code + Speed-up. \textit{Right panel:} Corresponding parallel efficiency. + Using 16 threads per node (no use of hyper-threading) with one MPI rank + per node, an almost perfect parallel efficiency is achieved when + increasing the node count from 16 (256 cores) to 2\,048 (32\,768 + cores). + \label{fig:superMUC}} +\end{figure*} + + +\subsection{Blue Gene architecture: JUQUEEN} + +For our last set of tests, we ran \swift on the JUQUEEN IBM Blue Gene/Q +system\footnote{\url{http://www.fz-juelich.de/ias/jsc/EN/Expertise/Supercomputers/JUQUEEN/Configuration/Configuration_node.html}} +located at the J\"ulich Supercomputing Center. This system consists of +28\,672 nodes with an IBM PowerPC A2 processor running at +$1.6~\rm{GHz}$ and $16~\rm{GByte}$ of RAM each. Of notable interest +is the presence of two floating units per compute core. The system is +composed of 28 racks containing each 1\,024 nodes. The network uses a +5D torus to link all the racks. + +This system is larger than the SuperMUC supercomputer described above and +uses a completely different processor and instruction set. +We use it here to demonstrate that our results are not dependant +on the hardware being used. + +The code was compiled with the IBM XL compiler version \textsc{30.73.0.13} and +linked to the corresponding MPI and METIS library +versions \textsc{4.0.2}. + +The simulation setup with $600^3$ particles was first run using +512 nodes with one MPI rank per node and varying only the number of threads per +node. The results of this test are shown in Fig.~\ref{fig:JUQUEEN1}. + +We later repeated the test, this time varying the number of nodes from 32 to +8192 (8 racks). For this test, we used one MPI rank per node and 32 threads per +node, i.e.~two threads per physical core. The results of this strong scaling +test are shown in Fig.~\ref{fig:JUQUEEN2}. + + +\begin{figure} +\centering +\includegraphics[width=\columnwidth]{Figures/scalingInNode} +\caption{Strong scaling test of the hybrid component of the code. The + same calculation is performed on 512 node of the JUQUEEN Blue Gene + supercomputer (see text for hardware description) using a single MPI + rank per node and varying only the number of + threads per node. The code displays excellent scaling even when all the cores and + hardware multi-threads are in use. \label{fig:JUQUEEN1}} +\end{figure} + + + +\begin{figure*} +\centering +\includegraphics[width=\textwidth]{Figures/scalingBlueGene} +\caption{Strong scaling test on the JUQUEEN Blue Gene machine (see text + for hardware description). \textit{Left panel:} Code + Speed-up. \textit{Right panel:} Corresponding parallel efficiency. + Using 32 threads per node (2 per physical core) with one MPI rank + per node, a parallel efficiency of more than $60\%$ is achieved when + increasing the node count from 32 (512 cores) to 8\,192 (131\,072 + cores). On 8\,192 nodes there are fewer than 27\,000 particles per + node and only a few hundred tasks, making the whole problem + extremely hard to load-balance effectively. + \label{fig:JUQUEEN2}} +\end{figure*} + + + + + +%##################################################################################################### + +\section{Discussion \& conclusions} + +The strong scaling results presented in the previous sections on +three different machines demonstrate the ability of our framework +to scale on both small commodity +machines, thanks to the use of task-based parallelism at the node level, and on +the largest machines (Tier-0 systems) currently available, thanks to the +task-based domain distribution and asynchronous communication schemes. +We would like to emphasize that these results were obtained for a +realistic test case without any micro-level optimization or explicit +vectorization. + +Excellent strong scaling is also achieved when increasing the number of threads +per node (i.e.~per MPI rank, see fig.~\ref{fig:JUQUEEN1}), demonstrating that +the description of MPI (asynchronous) communications as tasks within our +framework is not a bottleneck. One common conception in HPC is that the number +of MPI communications between nodes should be kept to a minimum to optimize the +efficiency of the calculation. Our approach does exactly the opposite with large +number of point-to-point communications between pairs of nodes occurring over the +course of a time-step. For example, on the SuperMUC machine with 32 nodes (512 +cores), each MPI rank contains approximately $1.6\times10^7$ particles in +$2.5\times10^5$ cells. \swift will generate around $58\,000$ point-to-point +asynchronous MPI communications (a pair of \texttt{send} and \texttt{recv} tasks) +{\em per node} and {\em per timestep}. Such an insane number of messages is +discouraged by most practitioners. +Dispatching communications +over the course of the calculation and not in short bursts, as is commonly done, +may also help lower the load on the network. + +One time-step on $8\,192$ nodes of the JUQUEEN machine takes $63~\rm{ms}$ of +wall-clock time. All the loading of the tasks, communications and running of the +tasks takes place in that short amount of time. Our framework can therefore +load-balance a calculation over $2.6\times10^5$ threads with remarkable +efficiency. + +We emphasize, as was previously demonstrated in \cite{ref:Gonnet2015}, that \swift +is also much faster than the \gadget code \cite{Springel2005}, the +\emph{de-facto} standard in the field of particle-based cosmological +simulations. The simulation setup that was run on the COSMA-5 +system takes $2.9~\rm{s}$ of wall-clock time per time-step on $256$ cores using +\swift whilst the default \gadget code on exactly the same setup with the same +number of cores requires $32~\rm{s}$. +The excellent scaling +performance of \swift allows us to push this number further by simply increasing +the number of cores, whilst \gadget reaches its peak speed (for this problem) at +around 300 cores and stops scaling beyond that. This unprecedented scaling +ability combined with future work on vectorization of the calculations within +each task will hopefully make \swift an important tool for future simulations in +cosmology and help push the entire field to a new level. + +\swift, its documentation, and the test cases presented in this paper are all +available at the address \web. + + +%##################################################################################################### + +\section{Acknowledgements} +This work would not have been possible without Lydia Heck's help and +expertise. We acknowledge the help of Tom Theuns, James Willis, Bert +Vandenbroucke, Angus Lepper and other contributors to the \swift +code. \\ We thank Heinrich Bockhorst and Stephen Blair-Chappell from {\sc + intel} as well as Dirk Brommel from the J\"ulich Computing Center +and Nikolay J. Hammer from the Leibniz Rechnenzentrum for their help +at various stages of this project.\\ This work used the DiRAC Data +Centric system at Durham University, operated by the Institute for +Computational Cosmology on behalf of the STFC DiRAC HPC Facility +(\url{www.dirac.ac.uk}). This equipment was funded by BIS National +E-infrastructure capital grant ST/K00042X/1, STFC capital grant +ST/H008519/1, and STFC DiRAC Operations grant ST/K003267/1 and Durham +University. DiRAC is part of the National E-Infrastructure. This work +was supported by the Science and Technology Facilities Council +ST/F001166/1 and the European Research Council under the European +Union's ERC Grant agreements 267291 ``Cosmiway'', and by {\sc intel} +through establishment of the ICC as an {\sc intel} parallel computing +centre (IPCC). + +\nocite{*} +\bibliographystyle{abbrv} +\bibliography{biblio} + + +\end{document} diff --git a/theory/paper_pasc/sig-alternate-05-2015.cls b/theory/paper_pasc/sig-alternate-05-2015.cls new file mode 100644 index 0000000000000000000000000000000000000000..b922ec29955e93ac892c369320a5accdddbc15a4 --- /dev/null +++ b/theory/paper_pasc/sig-alternate-05-2015.cls @@ -0,0 +1,1893 @@ +% SIG-ALTERNATE.CLS - VERSION 2.8 +% "COMPATIBLE" WITH THE "ACM_PROC_ARTICLE-SP.CLS" V3.2SP +% Gerald Murray - May 23rd 2012 +% Boris Veytsman - April 23 2013 +% Boris Veytsman - May 12 2013 +% Boris Veytsman - June 09 2013 +% Boris Veytsman - August 12 2013 +% +% ---- Start of 'updates' ---- +% Added new permission/copyright statement - BV +% Changed $10 fee to $15 -- May 2012 -- Gerry +% Changed $5 fee to $10 -- April 2009 -- Gerry +% April 22nd. 2009 - Fixed 'Natbib' incompatibility problem - Gerry +% April 22nd. 2009 - Fixed 'Babel' incompatibility problem - Gerry +% April 22nd. 2009 - Inserted various bug-fixes and improvements - Gerry +% +% To produce Type 1 fonts in the document plus allow for 'normal LaTeX accenting' in the critical areas; +% title, author block, section-heads, confname, etc. etc. +% i.e. the whole purpose of this version update is to NOT resort to 'inelegant accent patches'. +% After much research, three extra .sty packages were added to the the tail (ae, aecompl, aeguill) to solve, +% in particular, the accenting problem(s). We _could_ ask authors (via instructions/sample file) to 'include' these in +% the source .tex file - in the preamble - but if everything is already provided ('behind the scenes' - embedded IN the .cls) +% then this is less work for authors and also makes everything appear 'vanilla'. +% NOTE: all 'patchwork accenting" has been commented out (here) and is no longer 'used' in the sample .tex file (either). +% Gerry June 2007 +% +% Patch for accenting in conference name/location. Gerry May 3rd. 2007 +% Rule widths changed to .5, author count (>6) fixed, roll-back for Type 3 problem. Gerry March 20th. 2007 +% Changes made to 'modernize' the fontnames but esp. for MikTeX users V2.4/2.5 - Nov. 30th. 2006 +% Updated the \email definition to allow for its use inside of 'shared affiliations' - Nov. 30th. 2006 +% Fixed the 'section number depth value' - Nov. 30th. 2006 +% +% Footnotes inside table cells using \minipage (Oct. 2002) +% Georgia fixed bug in sub-sub-section numbering in paragraphs (July 29th. 2002) +% JS/GM fix to vertical spacing before Proofs (July 30th. 2002) +% +% Made the Permission Statement / Conference Info / Copyright Info +% 'user definable' in the source .tex file OR automatic if +% not specified. +% +% Allowance made to switch default fonts between those systems using +% normal/modern font names and those using 'Type 1' or 'Truetype' fonts. +% See LINE NUMBER 255 for details. +% Also provided for enumerated/annotated Corollaries 'surrounded' by +% enumerated Theorems (line 848). +% Gerry November 11th. 1999 +% +% ---- End of 'updates' ---- +% +\def\fileversion{v2.9} % for ACM's tracking purposes +\def\filedate{August 12, 2013} % Gerry Murray's tracking data +\def\docdate {\filedate} +\usepackage{epsfig} +\usepackage{amssymb} +\usepackage{amsmath} +\usepackage{amsfonts} +% Need this for accents in Arial/Helvetica +%\usepackage[T1]{fontenc} % Gerry March 12, 2007 - causes Type 3 problems (body text) +%\usepackage{textcomp} +% +% SIG-ALTERNATE DOCUMENT STYLE +% G.K.M. Tobin August-October 1999 +% adapted from ARTICLE document style by Ken Traub, Olin Shivers +% also using elements of esub2acm.cls +% HEAVILY MODIFIED, SUBSEQUENTLY, BY GERRY MURRAY 2000 +% ARTICLE DOCUMENT STYLE -- Released 16 March 1988 +% for LaTeX version 2.09 +% Copyright (C) 1988 by Leslie Lamport +% +% +%%% sig-alternate.cls is an 'ALTERNATE' document style for producing +%%% two-column camera-ready pages for ACM conferences. +%%% THIS FILE DOES NOT STRICTLY ADHERE TO THE SIGS (BOARD-ENDORSED) +%%% PROCEEDINGS STYLE. It has been designed to produce a 'tighter' +%%% paper in response to concerns over page budgets. +%%% The main features of this style are: +%%% +%%% 1) Two columns. +%%% 2) Side and top margins of 4.5pc, bottom margin of 6pc, column gutter of +%%% 2pc, hence columns are 20pc wide and 55.5pc tall. (6pc =3D 1in, approx) +%%% 3) First page has title information, and an extra 6pc of space at the +%%% bottom of the first column for the ACM copyright notice. +%%% 4) Text is 9pt on 10pt baselines; titles (except main) are 9pt bold. +%%% +%%% +%%% There are a few restrictions you must observe: +%%% +%%% 1) You cannot change the font size; ACM wants you to use 9pt. +%%% 3) You must start your paper with the \maketitle command. Prior to the +%%% \maketitle you must have \title and \author commands. If you have a +%%% \date command it will be ignored; no date appears on the paper, since +%%% the proceedings will have a date on the front cover. +%%% 4) Marginal paragraphs, tables of contents, lists of figures and tables, +%%% and page headings are all forbidden. +%%% 5) The `figure' environment will produce a figure one column wide; if you +%%% want one that is two columns wide, use `figure*'. +%%% +% +%%% Copyright Space: +%%% This style automatically reserves 1" blank space at the bottom of page 1/ +%%% column 1. This space can optionally be filled with some text using the +%%% \toappear{...} command. If used, this command must be BEFORE the \maketitle +%%% command. If this command is defined AND [preprint] is on, then the +%%% space is filled with the {...} text (at the bottom); otherwise, it is +%%% blank. If you use \toappearbox{...} instead of \toappear{...} then a +%%% box will be drawn around the text (if [preprint] is on). +%%% +%%% A typical usage looks like this: +%%% \toappear{To appear in the Ninth AES Conference on Medievil Lithuanian +%%% Embalming Technique, June 1991, Alfaretta, Georgia.} +%%% This will be included in the preprint, and left out of the conference +%%% version. +%%% +%%% WARNING: +%%% Some dvi-ps converters heuristically allow chars to drift from their +%%% true positions a few pixels. This may be noticeable with the 9pt sans-serif +%%% bold font used for section headers. +%%% You may turn this hackery off via the -e option: +%%% dvips -e 0 foo.dvi >foo.ps +%%% +\typeout{Document Class 'sig-alternate' <9th June '13>. Modified by + G.K.M. Tobin/Gerry Murray/Boris Veytsman} +\typeout{Based in part upon document Style `acmconf' <22 May 89>. Hacked 4/91 by} +\typeout{shivers@cs.cmu.edu, 4/93 by theobald@cs.mcgill.ca} +\typeout{Excerpts were taken from (Journal Style) 'esub2acm.cls'.} +\typeout{****** Bugs/comments/suggestions/technicalities to Gerry Murray -- murray@hq.acm.org ******} +\typeout{Questions on the style, SIGS policies, etc. to Adrienne Griscti griscti@acm.org} + +% New option code by BV + +\newcount\ACM@basesize +\ACM@basesize=9\relax +\DeclareOption{9pt}{\ACM@basesize=9\relax} +\DeclareOption{10pt}{\ACM@basesize=10\relax} +\DeclareOption{11pt}{\ClassError{sig-alternate}{The `11pt' option is + not allowed}{sig-alternate now exists in 9pt and 10pt versions only}} +\DeclareOption{12pt}{\ClassError{sig-alternate}{The `12pt' option is + not allowed}{sig-alternate now exists in 9pt and 10pt versions only}} + +\ExecuteOptions{9pt} +\ProcessOptions + + +\let\@concepts\@empty +% Support for CCSXML file +\RequirePackage{comment} +\excludecomment{CCSXML} + +% New concepts scheme +% +% The first argument is the significance, the +% second is the concept(s) +% +\newcommand\ccsdesc[2][100]{% + \ccsdesc@parse#1~#2~} +% +% The parser of the expression Significance~General~Specific +% +\def\ccsdesc@parse#1~#2~#3~{% + \expandafter\ifx\csname CCS@#2\endcsname\relax + \expandafter\gdef\csname CCS@#2\endcsname{\textbullet\textbf{#2} $\to$ }% + \g@addto@macro{\@concepts}{\csname CCS@#2\endcsname}\fi + \expandafter\g@addto@macro\expandafter{\csname CCS@#2\endcsname}{% + \ifnum#1>499\textbf{#3; }\else + \ifnum#1>299\textit{#3; }\else + #3; \fi\fi}} + +\newcommand\printccsdesc{% + \ifx\@concepts\@empty\else + \if@twocolumn + \section*{CCS Concepts} + \@concepts + \else \small + \quotation{\@concepts}% + \fi + \fi} + + + + +\def\doi#1{\def\@doi{#1}} +\doi{http://dx.doi.org/10.1145/0000000.0000000} + +\oddsidemargin 4.5pc +\evensidemargin 4.5pc +\advance\oddsidemargin by -1in % Correct for LaTeX gratuitousness +\advance\evensidemargin by -1in % Correct for LaTeX gratuitousness +\marginparwidth 0pt % Margin pars are not allowed. +\marginparsep 11pt % Horizontal space between outer margin and + % marginal note + + % Top of page: +\topmargin 4.5pc % Nominal distance from top of page to top of + % box containing running head. +\advance\topmargin by -1in % Correct for LaTeX gratuitousness +\headheight 0pt % Height of box containing running head. +\headsep 0pt % Space between running head and text. + % Bottom of page: +\footskip 30pt % Distance from baseline of box containing foot + % to baseline of last line of text. +\@ifundefined{footheight}{\newdimen\footheight}{}% this is for LaTeX2e +\footheight 12pt % Height of box containing running foot. + +%% Must redefine the top margin so there's room for headers and +%% page numbers if you are using the preprint option. Footers +%% are OK as is. Olin. +\advance\topmargin by -37pt % Leave 37pt above text for headers +\headheight 12pt % Height of box containing running head. +\headsep 25pt % Space between running head and text. + +\textheight 666pt % 9 1/4 column height +\textwidth 42pc % Width of text line. + % For two-column mode: +\columnsep 2pc % Space between columns +\columnseprule 0pt % Width of rule between columns. +\hfuzz 1pt % Allow some variation in column width, otherwise it's + % too hard to typeset in narrow columns. + +\ifnum\ACM@basesize=9\relax +\footnotesep 5.6pt % Height of strut placed at the beginning of every + % footnote =3D height of normal \footnotesize strut, + % so no extra space between footnotes. +\fi +\ifnum\ACM@basesize=10\relax +\footnotesep 6.22pt % Height of strut placed at the beginning of every + % footnote =3D height of normal \footnotesize strut, + % so no extra space between footnotes. +\fi + +\skip\footins 8.1pt plus 4pt minus 2pt % Space between last line of text and + % top of first footnote. +\floatsep 11pt plus 2pt minus 2pt % Space between adjacent floats moved + % to top or bottom of text page. +\textfloatsep 18pt plus 2pt minus 4pt % Space between main text and floats + % at top or bottom of page. +\intextsep 11pt plus 2pt minus 2pt % Space between in-text figures and + % text. +\@ifundefined{@maxsep}{\newdimen\@maxsep}{}% this is for LaTeX2e +\@maxsep 18pt % The maximum of \floatsep, + % \textfloatsep and \intextsep (minus + % the stretch and shrink). +\dblfloatsep 11pt plus 2pt minus 2pt % Same as \floatsep for double-column + % figures in two-column mode. +\dbltextfloatsep 18pt plus 2pt minus 4pt% \textfloatsep for double-column + % floats. +\@ifundefined{@dblmaxsep}{\newdimen\@dblmaxsep}{}% this is for LaTeX2e +\@dblmaxsep 18pt % The maximum of \dblfloatsep and + % \dbltexfloatsep. +\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be + % 0pt plus ...) +\@fpsep 8pt plus 2fil % Space between floats on float page/column. +\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be + % 0pt plus ... ) +\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...) +\@dblfpsep 8pt plus 2fil % Space between floats on float page. +\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be + % 0pt plus ... ) +\marginparpush 5pt % Minimum vertical separation between two marginal + % notes. + +\parskip 0pt plus 1pt % Extra vertical space between + % paragraphs. +\ifnum\ACM@basesize=9\relax +\parindent 9pt % GM July 2000 / was 0pt - width of paragraph + % indentation. +\fi +\ifnum\ACM@basesize=10\relax +\parindent 10pt % GM July 2000 / was 0pt - width of paragraph + % indentation. +\fi +\partopsep 2pt plus 1pt minus 1pt% Extra vertical space, in addition to + % \parskip and \topsep, added when user + % leaves blank line before environment. + +\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1] +\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2] +\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3] + +\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment. +\@endparpenalty -\@lowpenalty % After a list or paragraph environment. +\@itempenalty -\@lowpenalty % Between list items. + + +\RequirePackage{ifpdf}% +\ifpdf +\pdfpagewidth=8.5in +\pdfpageheight=11in +\fi + + +\lineskip 2pt % \lineskip is 1pt for all font sizes. +\normallineskip 2pt +\def\baselinestretch{1} + + +\ifnum\ACM@basesize=9\relax +\abovedisplayskip 9pt plus2pt minus4.5pt% +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus3pt% +\belowdisplayshortskip 5.4pt plus3pt minus3pt% +\let\@listi\@listI % Setting of \@listi added 9 Jun 87 + +\def\small{\@setsize\small{9pt}\viiipt\@viiipt +\abovedisplayskip 7.6pt plus 3pt minus 4pt% +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus2pt% +\belowdisplayshortskip 3.6pt plus2pt minus 2pt +\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87 +\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt +\itemsep \parsep}} + +\def\footnotesize{\@setsize\footnotesize{9pt}\ixpt\@ixpt +\abovedisplayskip 6.4pt plus 2pt minus 4pt% +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus 1pt% +\belowdisplayshortskip 2.7pt plus 1pt minus 2pt +\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87 +\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt +\itemsep \parsep}} +\fi + +\ifnum\ACM@basesize=10\relax +\abovedisplayskip 10pt plus2pt minus4.5pt% +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus3pt% +\belowdisplayshortskip 6pt plus3pt minus3pt% +\let\@listi\@listI % Setting of \@listi added 9 Jun 87 + +\def\small{\@setsize\small{10pt}\ixpt\@ixpt +\abovedisplayskip 8.5pt plus 3pt minus 4pt% +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus2pt% +\belowdisplayshortskip 4pt plus2pt minus 2pt +\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87 +\topsep 4.5pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt +\itemsep \parsep}} + +\def\footnotesize{\@setsize\footnotesize{10pt}\xpt\@xpt +\abovedisplayskip 7.6pt plus 2pt minus 4pt% +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus 1pt% +\belowdisplayshortskip 3.0pt plus 1pt minus 2pt +\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87 +\topsep 3.2pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt +\itemsep \parsep}} +\fi + + +\newcount\aucount +\newcount\originalaucount +\newdimen\auwidth +\auwidth=\textwidth +\newdimen\auskip +\newcount\auskipcount +\newdimen\auskip +\global\auskip=1pc +\newdimen\allauboxes +\allauboxes=\auwidth +\newtoks\addauthors +\newcount\addauflag +\global\addauflag=0 %Haven't shown additional authors yet + +\newtoks\subtitletext +\gdef\subtitle#1{\subtitletext={#1}} + +\gdef\additionalauthors#1{\addauthors={#1}} + +\gdef\numberofauthors#1{\global\aucount=#1 +\ifnum\aucount>3\global\originalaucount=\aucount \global\aucount=3\fi %g} % 3 OK - Gerry March 2007 +\global\auskipcount=\aucount\global\advance\auskipcount by 1 +\global\multiply\auskipcount by 2 +\global\multiply\auskip by \auskipcount +\global\advance\auwidth by -\auskip +\global\divide\auwidth by \aucount} + +% \and was modified to count the number of authors. GKMT 12 Aug 1999 +\def\alignauthor{% % \begin{tabular} +\end{tabular}% + \begin{tabular}[t]{p{\auwidth}}\centering}% + +% *** NOTE *** NOTE *** NOTE *** NOTE *** +% If you have 'font problems' then you may need +% to change these, e.g. 'arialb' instead of "arialbd". +% Gerry Murray 11/11/1999 +% *** OR ** comment out block A and activate block B or vice versa. +% ********************************************** +% +% -- Start of block A -- (Type 1 or Truetype fonts) +%\newfont{\secfnt}{timesbd at 12pt} % was timenrb originally - now is timesbd +%\newfont{\secit}{timesbi at 12pt} %13 Jan 00 gkmt +%\newfont{\subsecfnt}{timesi at 11pt} % was timenrri originally - now is timesi +%\newfont{\subsecit}{timesbi at 11pt} % 13 Jan 00 gkmt -- was times changed to timesbi gm 2/4/2000 +% % because "normal" is italic, "italic" is Roman +%\newfont{\ttlfnt}{arialbd at 18pt} % was arialb originally - now is arialbd +%\newfont{\ttlit}{arialbi at 18pt} % 13 Jan 00 gkmt +%\newfont{\subttlfnt}{arial at 14pt} % was arialr originally - now is arial +%\newfont{\subttlit}{ariali at 14pt} % 13 Jan 00 gkmt +%\newfont{\subttlbf}{arialbd at 14pt} % 13 Jan 00 gkmt +%\newfont{\aufnt}{arial at 12pt} % was arialr originally - now is arial +%\newfont{\auit}{ariali at 12pt} % 13 Jan 00 gkmt +%\newfont{\affaddr}{arial at 10pt} % was arialr originally - now is arial +%\newfont{\affaddrit}{ariali at 10pt} %13 Jan 00 gkmt +%\newfont{\eaddfnt}{arial at 12pt} % was arialr originally - now is arial +%\newfont{\ixpt}{times at 9pt} % was timenrr originally - now is times +%\newfont{\confname}{timesi at 8pt} % was timenrri - now is timesi +%\newfont{\crnotice}{times at 8pt} % was timenrr originally - now is times +%\newfont{\ninept}{times at 9pt} % was timenrr originally - now is times + +% ********************************************* +% -- End of block A -- +% +% +% -- Start of block B -- UPDATED FONT NAMES +% ********************************************* +% Gerry Murray 11/30/2006 +% ********************************************* +\ifnum\ACM@basesize=9\relax +\newfont{\secfnt}{ptmb8t at 12pt} +\newfont{\secit}{ptmbi8t at 12pt} %13 Jan 00 gkmt +\newfont{\subsecfnt}{ptmri8t at 11pt} +\newfont{\subsecit}{ptmbi8t at 11pt} % +\newfont{\ttlfnt}{phvb8t at 18pt} +\newfont{\ttlit}{phvbo8t at 18pt} % GM 2/4/2000 +\newfont{\subttlfnt}{phvr8t at 14pt} +\newfont{\subttlit}{phvro8t at 14pt} % GM 2/4/2000 +\newfont{\subttlbf}{phvb8t at 14pt} % 13 Jan 00 gkmt +\newfont{\aufnt}{phvr8t at 12pt} +\newfont{\auit}{phvro8t at 12pt} % GM 2/4/2000 +\newfont{\affaddr}{phvr8t at 10pt} +\newfont{\affaddrit}{phvro8t at 10pt} % GM 2/4/2000 +\newfont{\eaddfnt}{phvr8t at 12pt} +\newfont{\ixpt}{ptmr8t at 9pt} +\newfont{\confname}{ptmri8t at 8pt} +\newfont{\crnotice}{ptmr8t at 8pt} +\newfont{\ninept}{ptmr8t at 9pt} +\fi +\ifnum\ACM@basesize=10\relax +\newfont{\secfnt}{ptmb8t at 13pt} +\newfont{\secit}{ptmbi8t at 13pt} %13 Jan 00 gkmt +\newfont{\subsecfnt}{ptmri8t at 12pt} +\newfont{\subsecit}{ptmbi8t at 12pt} % +\newfont{\ttlfnt}{phvb8t at 20pt} +\newfont{\ttlit}{phvbo8t at 20pt} % GM 2/4/2000 +\newfont{\subttlfnt}{phvr8t at 15pt} +\newfont{\subttlit}{phvro8t at 15pt} % GM 2/4/2000 +\newfont{\subttlbf}{phvb8t at 15pt} % 13 Jan 00 gkmt +\newfont{\aufnt}{phvr8t at 12pt} +\newfont{\auit}{phvro8t at 12pt} % GM 2/4/2000 +\newfont{\affaddr}{phvr8t at 11pt} +\newfont{\affaddrit}{phvro8t at 11pt} % GM 2/4/2000 +\newfont{\eaddfnt}{phvr8t at 12pt} +\newfont{\ixpt}{ptmr8t at 10pt} +\newfont{\confname}{ptmri8t at 9pt} +\newfont{\crnotice}{ptmr8t at 9pt} +\newfont{\ninept}{ptmr8t at 10pt} +\fi +% +++++++++++++++++++++++++++++++++++++++++++++ +% -- End of block B -- + +%\def\email#1{{{\eaddfnt{\vskip 4pt#1}}}} +% If we have an email, inside a "shared affiliation" then we need the following instead +\def\email#1{{{\eaddfnt{\par #1}}}} % revised - GM - 11/30/2006 + +\def\addauthorsection{\ifnum\originalaucount>6 % was 3 - Gerry March 2007 + \section{Additional Authors}\the\addauthors + \fi} + +\newcount\savesection +\newcount\sectioncntr +\global\sectioncntr=1 + +\setcounter{secnumdepth}{3} + +\def\appendix{\par +\section*{APPENDIX} +\setcounter{section}{0} + \setcounter{subsection}{0} + \def\thesection{\Alph{section}} } + +\leftmargini 22.5pt +\leftmarginii 19.8pt % > \labelsep + width of '(m)' +\leftmarginiii 16.8pt % > \labelsep + width of 'vii.' +\leftmarginiv 15.3pt % > \labelsep + width of 'M.' +\leftmarginv 9pt +\leftmarginvi 9pt + +\leftmargin\leftmargini +\labelsep 4.5pt +\labelwidth\leftmargini\advance\labelwidth-\labelsep + +\def\@listI{\leftmargin\leftmargini \parsep 3.6pt plus 2pt minus 1pt% +\topsep 7.2pt plus 2pt minus 4pt% +\itemsep 3.6pt plus 2pt minus 1pt} + +\let\@listi\@listI +\@listi + +\def\@listii{\leftmargin\leftmarginii + \labelwidth\leftmarginii\advance\labelwidth-\labelsep + \topsep 3.6pt plus 2pt minus 1pt + \parsep 1.8pt plus 0.9pt minus 0.9pt + \itemsep \parsep} + +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii\advance\labelwidth-\labelsep + \topsep 1.8pt plus 0.9pt minus 0.9pt + \parsep \z@ \partopsep 1pt plus 0pt minus 1pt + \itemsep \topsep} + +\def\@listiv{\leftmargin\leftmarginiv + \labelwidth\leftmarginiv\advance\labelwidth-\labelsep} + +\def\@listv{\leftmargin\leftmarginv + \labelwidth\leftmarginv\advance\labelwidth-\labelsep} + +\def\@listvi{\leftmargin\leftmarginvi + \labelwidth\leftmarginvi\advance\labelwidth-\labelsep} + +\def\labelenumi{\theenumi.} +\def\theenumi{\arabic{enumi}} + +\def\labelenumii{(\theenumii)} +\def\theenumii{\alph{enumii}} +\def\p@enumii{\theenumi} + +\def\labelenumiii{\theenumiii.} +\def\theenumiii{\roman{enumiii}} +\def\p@enumiii{\theenumi(\theenumii)} + +\def\labelenumiv{\theenumiv.} +\def\theenumiv{\Alph{enumiv}} +\def\p@enumiv{\p@enumiii\theenumiii} + +\def\labelitemi{$\bullet$} +\def\labelitemii{\bf --} +\def\labelitemiii{$\ast$} +\def\labelitemiv{$\cdot$} + +\def\verse{\let\\=\@centercr + \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent + \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]} +\let\endverse\endlist + +\def\quotation{\list{}{\listparindent 1.5em + \itemindent\listparindent + \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]} +\let\endquotation=\endlist + +\def\quote{\list{}{\rightmargin\leftmargin}\item[]} +\let\endquote=\endlist + +\def\descriptionlabel#1{\hspace\labelsep \bf #1} +\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + +\let\enddescription\endlist + +\def\theequation{\arabic{equation}} + + +\ifnum\ACM@basesize=9\relax +\arraycolsep 4.5pt % Half the space between columns in an array environment. +\tabcolsep 5.4pt % Half the space between columns in a tabular environment. +\arrayrulewidth .5pt % Width of rules in array and tabular environment. % (was .4) updated Gerry March 20 2007 +\doublerulesep 1.8pt % Space between adjacent rules in array or tabular env. + +\fi + +\ifnum\ACM@basesize=10\relax +\arraycolsep 5pt % Half the space between columns in an array environment. +\tabcolsep 6pt % Half the space between columns in a tabular environment. +\arrayrulewidth .5pt % Width of rules in array and tabular environment. % (was .4) updated Gerry March 20 2007 +\doublerulesep 1.8pt % Space between adjacent rules in array or tabular env. + +\fi + +\tabbingsep \labelsep % Space used by the \' command. (See LaTeX manual.) + +\skip\@mpfootins =\skip\footins + +\fboxsep =2.7pt % Space left between box and text by \fbox and \framebox. +\fboxrule =.5pt % Width of rules in box made by \fbox and \framebox. % (was .4) updated Gerry March 20 2007 + +\def\thepart{\Roman{part}} % Roman numeral part numbers. +\def\thesection {\arabic{section}} +\def\thesubsection {\thesection.\arabic{subsection}} +%\def\thesubsubsection {\thesubsection.\arabic{subsubsection}} % GM 7/30/2002 +%\def\theparagraph {\thesubsubsection.\arabic{paragraph}} % GM 7/30/2002 +\def\thesubparagraph {\theparagraph.\arabic{subparagraph}} + +\def\@pnumwidth{1.55em} +\def\@tocrmarg {2.55em} +\def\@dotsep{4.5} +\setcounter{tocdepth}{3} + +%\def\tableofcontents{\@latexerr{\tableofcontents: Tables of contents are not +% allowed in the `acmconf' document style.}\@eha} + +\def\tableofcontents{\ClassError{% + \string\tableofcontents\space is not allowed in the `acmconf' document % January 2008 + style}\@eha} + +\def\l@part#1#2{\addpenalty{\@secpenalty} + \addvspace{2.25em plus 1pt} % space above part line + \begingroup + \@tempdima 3em % width of box holding part number, used by + \parindent \z@ \rightskip \@pnumwidth %% \numberline + \parfillskip -\@pnumwidth + {\large \bf % set line in \large boldface + \leavevmode % TeX command to enter horizontal mode. + #1\hfil \hbox to\@pnumwidth{\hss #2}}\par + \nobreak % Never break after part entry + \endgroup} + +\def\l@section#1#2{\addpenalty{\@secpenalty} % good place for page break + \addvspace{1.0em plus 1pt} % space above toc entry + \@tempdima 1.5em % width of box holding section number + \begingroup + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth + \bf % Boldface. + \leavevmode % TeX command to enter horizontal mode. + \advance\leftskip\@tempdima %% added 5 Feb 88 to conform to + \hskip -\leftskip %% 25 Jan 88 change to \numberline + #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par + \endgroup} + + +\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}} +\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}} +\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}} +\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}} + +%\def\listoffigures{\@latexerr{\listoffigures: Lists of figures are not +% allowed in the `acmconf' document style.}\@eha} + +\def\listoffigures{\ClassError{% + \string\listoffigures\space is not allowed in the `acmconf' document % January 2008 + style}\@eha} + +\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}} + +%\def\listoftables{\@latexerr{\listoftables: Lists of tables are not +% allowed in the `acmconf' document style.}\@eha} +%\let\l@table\l@figure + +\def\listoftables{\ClassError{% + \string\listoftables\space is not allowed in the `acmconf' document % January 2008 + style}\@eha} + \let\l@table\l@figure + +\def\footnoterule{\kern-3\p@ + \hrule width .5\columnwidth % (was .4) updated Gerry March 20 2007 + \kern 2.6\p@} % The \hrule has default height of .4pt % (was .4) updated Gerry March 20 2007 +% ------ +\long\def\@makefntext#1{\noindent +%\hbox to .5em{\hss$^{\@thefnmark}$}#1} % original +\hbox to .5em{\hss\textsuperscript{\@thefnmark}}#1} % C. Clifton / GM Oct. 2nd. 2002 +% ------- + +\long\def\@maketntext#1{\noindent +#1} + +\long\def\@maketitlenotetext#1#2{\noindent + \hbox to 1.8em{\hss$^{#1}$}#2} + +\setcounter{topnumber}{2} +\def\topfraction{.7} +\setcounter{bottomnumber}{1} +\def\bottomfraction{.3} +\setcounter{totalnumber}{3} +\def\textfraction{.2} +\def\floatpagefraction{.5} +\setcounter{dbltopnumber}{2} +\def\dbltopfraction{.7} +\def\dblfloatpagefraction{.5} + +% +\long\def\@makecaption#1#2{ + \vskip \baselineskip + \setbox\@tempboxa\hbox{\textbf{#1: #2}} + \ifdim \wd\@tempboxa >\hsize % IF longer than one line: + \textbf{#1: #2}\par % THEN set as ordinary paragraph. + \else % ELSE center. + \hbox to\hsize{\hfil\box\@tempboxa\hfil}\par + \fi} + +% + +\long\def\@makecaption#1#2{ + \vskip 10pt + \setbox\@tempboxa\hbox{\textbf{#1: #2}} + \ifdim \wd\@tempboxa >\hsize % IF longer than one line: + \textbf{#1: #2}\par % THEN set as ordinary paragraph. + \else % ELSE center. + \hbox to\hsize{\hfil\box\@tempboxa\hfil} + \fi} + +\@ifundefined{figure}{\newcounter {figure}} % this is for LaTeX2e + +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{Figure \thefigure} +\def\figure{\@float{figure}} +%\let\endfigure\end@float +\def\endfigure{\end@float} % Gerry January 2008 +\@namedef{figure*}{\@dblfloat{figure}} +\@namedef{endfigure*}{\end@dblfloat} + +\@ifundefined{table}{\newcounter {table}} % this is for LaTeX2e + +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{Table \thetable} +\def\table{\@float{table}} +%\let\endtable\end@float +\def\endtable{\end@float} % Gerry January 2008 +\@namedef{table*}{\@dblfloat{table}} +\@namedef{endtable*}{\end@dblfloat} + +\newtoks\titleboxnotes +\newcount\titleboxnoteflag + +\def\maketitle{\par + \begingroup + \def\thefootnote{\fnsymbol{footnote}} + \def\@makefnmark{\hbox + to 0pt{$^{\@thefnmark}$\hss}} + \twocolumn[\@maketitle] +\@thanks + \endgroup + \setcounter{footnote}{0} + \let\maketitle\relax + \let\@maketitle\relax + \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}\let\thanks\relax + \@copyrightspace} + +%% CHANGES ON NEXT LINES +\newif\if@ll % to record which version of LaTeX is in use + +\expandafter\ifx\csname LaTeXe\endcsname\relax % LaTeX2.09 is used +\else% LaTeX2e is used, so set ll to true +\global\@lltrue +\fi + +\if@ll + \NeedsTeXFormat{LaTeX2e} + \ProvidesClass{sig-alternate} [2013/05/12 v2.7 based on acmproc.cls V1.3 <Nov. 30 '99>] + \RequirePackage{latexsym}% QUERY: are these two really needed? + \let\dooptions\ProcessOptions +\else + \let\dooptions\@options +\fi +%% END CHANGES + +\def\@height{height} +\def\@width{width} +\def\@minus{minus} +\def\@plus{plus} +\def\hb@xt@{\hbox to} +\newif\if@faircopy +\@faircopyfalse +\def\ds@faircopy{\@faircopytrue} + +\def\ds@preprint{\@faircopyfalse} + +\@twosidetrue +\@mparswitchtrue +\def\ds@draft{\overfullrule 5\p@} +%% CHANGE ON NEXT LINE +\dooptions + +\lineskip \p@ +\normallineskip \p@ +\def\baselinestretch{1} +\def\@ptsize{0} %needed for amssymbols.sty + +%% CHANGES ON NEXT LINES +\if@ll% allow use of old-style font change commands in LaTeX2e +\@maxdepth\maxdepth +% +\DeclareOldFontCommand{\rm}{\ninept\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}} +\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}} +\fi +% +\if@ll + \renewcommand{\rmdefault}{cmr} % was 'ttm' +% Note! I have also found 'mvr' to work ESPECIALLY well. +% Gerry - October 1999 +% You may need to change your LV1times.fd file so that sc is +% mapped to cmcsc - -for smallcaps -- that is if you decide +% to change {cmr} to {times} above. (Not recommended) +\ifnum\ACM@basesize=9\relax + \renewcommand{\@ptsize}{} + \renewcommand{\normalsize}{% + \@setfontsize\normalsize\@ixpt{10.5\p@}%\ninept% + \abovedisplayskip 6\p@ \@plus2\p@ \@minus\p@ + \belowdisplayskip \abovedisplayskip + \abovedisplayshortskip 6\p@ \@minus 3\p@ + \belowdisplayshortskip 6\p@ \@minus 3\p@ + \let\@listi\@listI} +\fi +\ifnum\ACM@basesize=10\relax + \renewcommand{\@ptsize}{} + \renewcommand{\normalsize}{% + \@setfontsize\normalsize\@xpt{11.5\p@}%\ninept% + \abovedisplayskip 6.5\p@ \@plus2\p@ \@minus\p@ + \belowdisplayskip \abovedisplayskip + \abovedisplayshortskip 6.5\p@ \@minus 3\p@ + \belowdisplayshortskip 6.5\p@ \@minus 3\p@ + \let\@listi\@listI} +\fi +\else + \def\@normalsize{%changed next to 9 from 10 + \@setsize\normalsize{9\p@}\ixpt\@ixpt + \abovedisplayskip 6\p@ \@plus2\p@ \@minus\p@ + \belowdisplayskip \abovedisplayskip + \abovedisplayshortskip 6\p@ \@minus 3\p@ + \belowdisplayshortskip 6\p@ \@minus 3\p@ + \let\@listi\@listI + }% +\fi +\if@ll +\ifnum\ACM@basesize=9\relax + \newcommand\scriptsize{\@setfontsize\scriptsize\@viipt{8\p@}} + \newcommand\tiny{\@setfontsize\tiny\@vpt{6\p@}} + \newcommand\large{\@setfontsize\large\@xiipt{14\p@}} + \newcommand\Large{\@setfontsize\Large\@xivpt{18\p@}} + \newcommand\LARGE{\@setfontsize\LARGE\@xviipt{20\p@}} + \newcommand\huge{\@setfontsize\huge\@xxpt{25\p@}} + \newcommand\Huge{\@setfontsize\Huge\@xxvpt{30\p@}} +\fi +\ifnum\ACM@basesize=10\relax + \newcommand\scriptsize{\@setfontsize\scriptsize\@viiipt{9\p@}} + \newcommand\tiny{\@setfontsize\tiny\@vipt{7\p@}} + \newcommand\large{\@setfontsize\large\@xiiipt{15\p@}} + \newcommand\Large{\@setfontsize\Large\@xvpt{20\p@}} + \newcommand\LARGE{\@setfontsize\LARGE\@xixpt{22\p@}} + \newcommand\huge{\@setfontsize\huge\@xixpt{30\p@}} + \newcommand\Huge{\@setfontsize\Huge30pt{36\p@}} +\fi +\else + \def\scriptsize{\@setsize\scriptsize{8\p@}\viipt\@viipt} + \def\tiny{\@setsize\tiny{6\p@}\vpt\@vpt} + \def\large{\@setsize\large{14\p@}\xiipt\@xiipt} + \def\Large{\@setsize\Large{18\p@}\xivpt\@xivpt} + \def\LARGE{\@setsize\LARGE{20\p@}\xviipt\@xviipt} + \def\huge{\@setsize\huge{25\p@}\xxpt\@xxpt} + \def\Huge{\@setsize\Huge{30\p@}\xxvpt\@xxvpt} +\fi +\normalsize + +% make aubox hsize/number of authors up to 3, less gutter +% then showbox gutter showbox gutter showbox -- GKMT Aug 99 +\newbox\@acmtitlebox +\ifnum\ACM@basesize=9\relax +\def\@maketitle{\newpage + \null + \setbox\@acmtitlebox\vbox{% +\baselineskip 20pt +\vskip 2em % Vertical space above title. + \begin{center} + {\ttlfnt \@title\par} % Title set in 18pt Helvetica (Arial) bold size. + \vskip 1.5em % Vertical space after title. +%This should be the subtitle. +{\subttlfnt \the\subtitletext\par}\vskip 1.25em%\fi + {\baselineskip 16pt\aufnt % each author set in \12 pt Arial, in a + \lineskip .5em % tabular environment + \begin{tabular}[t]{c}\@author + \end{tabular}\par} + \vskip 1.5em % Vertical space after author. + \end{center}} + \dimen0=\ht\@acmtitlebox + \advance\dimen0 by -12.75pc\relax % Increased space for title box -- KBT + \unvbox\@acmtitlebox + \ifdim\dimen0<0.0pt\relax\vskip-\dimen0\fi} +\fi +\ifnum\ACM@basesize=10\relax +\def\@maketitle{\newpage + \null + \setbox\@acmtitlebox\vbox{% +\baselineskip 22pt +\vskip 2.2em % Vertical space above title. + \begin{center} + {\ttlfnt \@title\par} % Title set in 18pt Helvetica (Arial) bold size. + \vskip 2em % Vertical space after title. +%This should be the subtitle. +{\subttlfnt \the\subtitletext\par}\vskip 1.25em%\fi + {\baselineskip 18pt\aufnt % each author set in \12 pt Arial, in a + \lineskip .5em % tabular environment + \begin{tabular}[t]{c}\@author + \end{tabular}\par} + \vskip 2em % Vertical space after author. + \end{center}} + \dimen0=\ht\@acmtitlebox + \advance\dimen0 by -12.75pc\relax % Increased space for title box -- KBT + \unvbox\@acmtitlebox + \ifdim\dimen0<0.0pt\relax\vskip-\dimen0\fi} +\fi + +\newcount\titlenotecount +\global\titlenotecount=0 +\newtoks\tntoks +\newtoks\tntokstwo +\newtoks\tntoksthree +\newtoks\tntoksfour +\newtoks\tntoksfive + +\def\abstract{ +\ifnum\titlenotecount>0 % was =1 + \insert\footins{% + \reset@font\footnotesize + \interlinepenalty\interfootnotelinepenalty + \splittopskip\footnotesep + \splitmaxdepth \dp\strutbox \floatingpenalty \@MM + \hsize\columnwidth \@parboxrestore + \protected@edef\@currentlabel{% + }% + \color@begingroup +\ifnum\titlenotecount=1 + \@maketntext{% + \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\@finalstrut\strutbox}% +\fi +\ifnum\titlenotecount=2 + \@maketntext{% + \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}% +\@maketntext{% + \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\@finalstrut\strutbox}% +\fi +\ifnum\titlenotecount=3 + \@maketntext{% + \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}% +\@maketntext{% + \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}% +\@maketntext{% + \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\@finalstrut\strutbox}% +\fi +\ifnum\titlenotecount=4 + \@maketntext{% + \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}% +\@maketntext{% + \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}% +\@maketntext{% + \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\par\@finalstrut\strutbox}% +\@maketntext{% + \raisebox{4pt}{$\S$}\rule\z@\footnotesep\ignorespaces\the\tntoksfour\@finalstrut\strutbox}% +\fi +\ifnum\titlenotecount=5 + \@maketntext{% + \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}% +\@maketntext{% + \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}% +\@maketntext{% + \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\par\@finalstrut\strutbox}% +\@maketntext{% + \raisebox{4pt}{$\S$}\rule\z@\footnotesep\ignorespaces\the\tntoksfour\par\@finalstrut\strutbox}% +\@maketntext{% + \raisebox{4pt}{$\P$}\rule\z@\footnotesep\ignorespaces\the\tntoksfive\@finalstrut\strutbox}% +\fi + \color@endgroup} %g} +\fi +\setcounter{footnote}{0} +\section*{ABSTRACT}\normalsize%\ninept +} + +\def\endabstract{\if@twocolumn\else\endquotation\fi} + +\def\keywords{\if@twocolumn +\section*{Keywords} +\else \small +\quotation +\fi} + +\def\terms#1{% +%\if@twocolumn +%\section*{General Terms} +%\else \small +%\quotation +%\fi +} + +% -- Classification needs to be a bit smart due to optionals - Gerry/Georgia November 2nd. 1999 +\newcount\catcount +\global\catcount=1 + +\def\category#1#2#3{% +\ifnum\catcount=1 +\section*{Categories and Subject Descriptors} +\advance\catcount by 1\else{\unskip; }\fi + \@ifnextchar [{\@category{#1}{#2}{#3}}{\@category{#1}{#2}{#3}[]}% +} + + +\def\@category#1#2#3[#4]{% + \begingroup + \let\and\relax + #1 [\textbf{#2}]% + \if!#4!% + \if!#3!\else : #3\fi + \else + :\space + \if!#3!\else #3\kern\z@---\hskip\z@\fi + \textit{#4}% + \fi + \endgroup +} +% + + + + + + +%%% This section (written by KBT) handles the 1" box in the lower left +%%% corner of the left column of the first page by creating a picture, +%%% and inserting the predefined string at the bottom (with a negative +%%% displacement to offset the space allocated for a non-existent +%%% caption). +%%% +\newtoks\copyrightnotice +\def\ftype@copyrightbox{8} +\def\@copyrightspace{ +\@float{copyrightbox}[b] +\begin{center} +\setlength{\unitlength}{1pc} +\ifnum\ACM@basesize=9 +\begin{picture}(20,6) %Space for copyright notice +\put(0,-0.95){\crnotice{\@toappear}} +\end{picture} +\fi +\ifnum\ACM@basesize=10 +\begin{picture}(20,7) %Space for copyright notice +\put(0,-0.95){\crnotice{\@toappear}} +\end{picture} +\fi +\end{center} +\end@float} + +\def\@toappear{} % Default setting blank - commands below change this. +\long\def\toappear#1{\def\@toappear{\parbox[b]{20pc}{\baselineskip 9pt#1}}} +\def\toappearbox#1{\def\@toappear{\raisebox{5pt}{\framebox[20pc]{\parbox[b]{19pc}{#1}}}}} + +\newtoks\conf +\newtoks\confinfo +\def\conferenceinfo#1#2{\global\conf={#1}\global\confinfo{#2}} + + +%\def\marginpar{\@latexerr{The \marginpar command is not allowed in the +% `acmconf' document style.}\@eha} + +\def\marginpar{\ClassError{% + \string\marginpar\space is not allowed in the `acmconf' document % January 2008 + style}\@eha} + +\mark{{}{}} % Initializes TeX's marks + +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} + +\def\@begintheorem#1#2{% + \parskip 0pt % GM July 2000 (for tighter spacing) + \trivlist + \item[% + \hskip 10\p@ + \hskip \labelsep + {{\sc #1}\hskip 5\p@\relax#2.}% + ] + \it +} +\def\@opargbegintheorem#1#2#3{% + \parskip 0pt % GM July 2000 (for tighter spacing) + \trivlist + \item[% + \hskip 10\p@ + \hskip \labelsep + {\sc #1\ #2\ % This mod by Gerry to enumerate corollaries + \setbox\@tempboxa\hbox{(#3)} % and bracket the 'corollary title' + \ifdim \wd\@tempboxa>\z@ % and retain the correct numbering of e.g. theorems + \hskip 5\p@\relax % if they occur 'around' said corollaries. + \box\@tempboxa % Gerry - Nov. 1999. + \fi.}% + ] + \it +} +\newif\if@qeded +\global\@qededfalse + +% -- original +%\def\proof{% +% \vspace{-\parskip} % GM July 2000 (for tighter spacing) +% \global\@qededfalse +% \@ifnextchar[{\@xproof}{\@proof}% +%} +% -- end of original + +% (JSS) Fix for vertical spacing bug - Gerry Murray July 30th. 2002 +\def\proof{% +\vspace{-\lastskip}\vspace{-\parsep}\penalty-51% +\global\@qededfalse +\@ifnextchar[{\@xproof}{\@proof}% +} + +\def\endproof{% + \if@qeded\else\qed\fi + \endtrivlist +} +\def\@proof{% + \trivlist + \item[% + \hskip 10\p@ + \hskip \labelsep + {\sc Proof.}% + ] + \ignorespaces +} +\def\@xproof[#1]{% + \trivlist + \item[\hskip 10\p@\hskip \labelsep{\sc Proof #1.}]% + \ignorespaces +} +\def\qed{% + \unskip + \kern 10\p@ + \begingroup + \unitlength\p@ + \linethickness{.4\p@}% + \framebox(6,6){}% + \endgroup + \global\@qededtrue +} + +\def\newdef#1#2{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}% + \global\@namedef{#1}{\@defthm{#1}{#2}}% + \global\@namedef{end#1}{\@endtheorem}% + }% +} +\def\@defthm#1#2{% + \refstepcounter{#1}% + \@ifnextchar[{\@ydefthm{#1}{#2}}{\@xdefthm{#1}{#2}}% +} +\def\@xdefthm#1#2{% + \@begindef{#2}{\csname the#1\endcsname}% + \ignorespaces +} +\def\@ydefthm#1#2[#3]{% + \trivlist + \item[% + \hskip 10\p@ + \hskip \labelsep + {\it #2% +% \savebox\@tempboxa{#3}% + \saveb@x\@tempboxa{#3}% % January 2008 + \ifdim \wd\@tempboxa>\z@ + \ \box\@tempboxa + \fi.% + }]% + \ignorespaces +} +\def\@begindef#1#2{% + \trivlist + \item[% + \hskip 10\p@ + \hskip \labelsep + {\it #1\ \rm #2.}% + ]% +} +\def\theequation{\arabic{equation}} + +\newcounter{part} +\newcounter{section} +\newcounter{subsection}[section] +\newcounter{subsubsection}[subsection] +\newcounter{paragraph}[subsubsection] +\def\thepart{\Roman{part}} +\def\thesection{\arabic{section}} +\def\thesubsection{\thesection.\arabic{subsection}} +\def\thesubsubsection{\thesubsection.\arabic{subsubsection}} %removed \subsecfnt 29 July 2002 gkmt +\def\theparagraph{\thesubsubsection.\arabic{paragraph}} %removed \subsecfnt 29 July 2002 gkmt +\newif\if@uchead +\@ucheadfalse + +%% CHANGES: NEW NOTE +%% NOTE: OK to use old-style font commands below, since they were +%% suitably redefined for LaTeX2e +%% END CHANGES +\setcounter{secnumdepth}{3} +\def\part{% + \@startsection{part}{9}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@} + {4\p@}{\normalsize\@ucheadtrue}% +} +\def\section{% + \@startsection{section}{1}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}% GM + {4\p@}{\baselineskip 14pt\secfnt\@ucheadtrue}% +} + +\def\subsection{% + \@startsection{subsection}{2}{\z@}{-8\p@ \@plus -2\p@ \@minus -\p@} + {4\p@}{\secfnt}% +} +\def\subsubsection{% + \@startsection{subsubsection}{3}{\z@}{-8\p@ \@plus -2\p@ \@minus -\p@}% + {4\p@}{\subsecfnt}% +} +%\def\paragraph{% +% \vskip 12pt\@startsection{paragraph}{3}{\z@}{6\p@ \@plus \p@}% original +% {-5\p@}{\subsecfnt}% +%} +% If one wants sections, subsections and subsubsections numbered, +% but not paragraphs, one usually sets secnumepth to 3. +% For that, the "depth" of paragraphs must be given correctly +% in the definition (``4'' instead of ``3'' as second argument +% of @startsection): +\def\paragraph{% + \vskip 12pt\@startsection{paragraph}{4}{\z@}{6\p@ \@plus \p@}% % GM and Wolfgang May - 11/30/06 + {-5\p@}{\subsecfnt}% +} +\let\@period=. +\def\@startsection#1#2#3#4#5#6{% + \if@noskipsec %gkmt, 11 aug 99 + \global\let\@period\@empty + \leavevmode + \global\let\@period.% + \fi + \par % + \@tempskipa #4\relax + \@afterindenttrue + \ifdim \@tempskipa <\z@ + \@tempskipa -\@tempskipa + \@afterindentfalse + \fi + \if@nobreak + \everypar{}% + \else + \addpenalty\@secpenalty + \addvspace\@tempskipa + \fi +\parskip=0pt % GM July 2000 (non numbered) section heads + \@ifstar + {\@ssect{#3}{#4}{#5}{#6}} + {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}% +} +\def\@sect#1#2#3#4#5#6[#7]#8{% + \ifnum #2>\c@secnumdepth + \let\@svsec\@empty + \else + \refstepcounter{#1}% + \edef\@svsec{% + \begingroup + %\ifnum#2>2 \noexpand\rm \fi % changed to next 29 July 2002 gkmt + \ifnum#2>2 \noexpand#6 \fi + \csname the#1\endcsname + \endgroup + \ifnum #2=1\relax .\fi + \hskip 1em + }% + \fi + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@ + \begingroup + #6\relax + \@hangfrom{\hskip #3\relax\@svsec}% + \begingroup + \interlinepenalty \@M + \if@uchead + \uppercase{#8}% + \else + #8% + \fi + \par + \endgroup + \endgroup + \csname #1mark\endcsname{#7}% + \vskip -12pt %gkmt, 11 aug 99 and GM July 2000 (was -14) - numbered section head spacing +\addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname}% + \fi + #7% + }% + \else + \def\@svsechd{% + #6% + \hskip #3\relax + \@svsec + \if@uchead + \uppercase{#8}% + \else + #8% + \fi + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname}% + \fi + #7% + }% + }% + \fi + \@xsect{#5}\hskip 1pt + \par +} +\def\@xsect#1{% + \@tempskipa #1\relax + \ifdim \@tempskipa>\z@ + \par + \nobreak + \vskip \@tempskipa + \@afterheading + \else + \global\@nobreakfalse + \global\@noskipsectrue + \everypar{% + \if@noskipsec + \global\@noskipsecfalse + \clubpenalty\@M + \hskip -\parindent + \begingroup + \@svsechd + \@period + \endgroup + \unskip + \@tempskipa #1\relax + \hskip -\@tempskipa + \else + \clubpenalty \@clubpenalty + \everypar{}% + \fi + }% + \fi + \ignorespaces +} +\def\@trivlist{% + \@topsepadd\topsep + \if@noskipsec + \global\let\@period\@empty + \leavevmode + \global\let\@period.% + \fi + \ifvmode + \advance\@topsepadd\partopsep + \else + \unskip + \par + \fi + \if@inlabel + \@noparitemtrue + \@noparlisttrue + \else + \@noparlistfalse + \@topsep\@topsepadd + \fi + \advance\@topsep \parskip + \leftskip\z@skip + \rightskip\@rightskip + \parfillskip\@flushglue + \@setpar{\if@newlist\else{\@@par}\fi} + \global\@newlisttrue + \@outerparskip\parskip +} + +%%% Actually, 'abbrev' works just fine as the default +%%% Bibliography style. + +\typeout{Using 'Abbrev' bibliography style} +\newcommand\bibyear[2]{% + \unskip\quad\ignorespaces#1\unskip + \if#2..\quad \else \quad#2 \fi +} +\newcommand{\bibemph}[1]{{\em#1}} +\newcommand{\bibemphic}[1]{{\em#1\/}} +\newcommand{\bibsc}[1]{{\sc#1}} +\def\@normalcite{% + \def\@cite##1##2{[##1\if@tempswa , ##2\fi]}% +} +\def\@citeNB{% + \def\@cite##1##2{##1\if@tempswa , ##2\fi}% +} +\def\@citeRB{% + \def\@cite##1##2{##1\if@tempswa , ##2\fi]}% +} +\def\start@cite#1#2{% + \edef\citeauthoryear##1##2##3{% + ###1% + \ifnum#2=\z@ \else\ ###2\fi + }% + \ifnum#1=\thr@@ + \let\@@cite\@citeyear + \else + \let\@@cite\@citenormal + \fi + \@ifstar{\@citeNB\@@cite}{\@normalcite\@@cite}% +} +%\def\cite{\start@cite23} +\DeclareRobustCommand\cite{\start@cite23} % January 2008 +\def\citeNP{\cite*} % No Parentheses e.g. 5 +%\def\citeA{\start@cite10} +\DeclareRobustCommand\citeA{\start@cite10} % January 2008 +\def\citeANP{\citeA*} +%\def\shortcite{\start@cite23} +\DeclareRobustCommand\shortcite{\start@cite23} % January 2008 +\def\shortciteNP{\shortcite*} +%\def\shortciteA{\start@cite20} +\DeclareRobustCommand\shortciteA{\start@cite20} % January 2008 +\def\shortciteANP{\shortciteA*} +%\def\citeyear{\start@cite30} +\DeclareRobustCommand\citeyear{\start@cite30} % January 2008 +\def\citeyearNP{\citeyear*} +%\def\citeN{% +\DeclareRobustCommand\citeN{% % January 2008 + \@citeRB + \def\citeauthoryear##1##2##3{##1\ [##3% + \def\reserved@a{##1}% + \def\citeauthoryear####1####2####3{% + \def\reserved@b{####1}% + \ifx\reserved@a\reserved@b + ####3% + \else + \errmessage{Package acmart Error: author mismatch + in \string\citeN^^J^^J% + See the acmart package documentation for explanation}% + \fi + }% + }% + \@ifstar\@citeyear\@citeyear +} +%\def\shortciteN{% +\DeclareRobustCommand\shortciteN{% % January 2008 + \@citeRB + \def\citeauthoryear##1##2##3{##2\ [##3% + \def\reserved@a{##2}% + \def\citeauthoryear####1####2####3{% + \def\reserved@b{####2}% + \ifx\reserved@a\reserved@b + ####3% + \else + \errmessage{Package acmart Error: author mismatch + in \string\shortciteN^^J^^J% + See the acmart package documentation for explanation}% + \fi + }% + }% + \@ifstar\@citeyear\@citeyear % GM July 2000 +} + +\def\@citenormal{% + \@ifnextchar [{\@tempswatrue\@citex;}% +% original {\@tempswafalse\@citex,[]}% was ; Gerry 2/24/00 +{\@tempswafalse\@citex[]}% % GERRY FIX FOR BABEL 3/20/2009 +} + +\def\@citeyear{% + \@ifnextchar [{\@tempswatrue\@citex,}% +% original {\@tempswafalse\@citex,[]}% +{\@tempswafalse\@citex[]}% % GERRY FIX FOR BABEL 3/20/2009 +} + +\def\@citex#1[#2]#3{% + \let\@citea\@empty + \@cite{% + \@for\@citeb:=#3\do{% + \@citea +% original \def\@citea{#1 }% + \def\@citea{#1, }% % GERRY FIX FOR BABEL 3/20/2009 -- SO THAT YOU GET [1, 2] IN THE BODY TEXT + \edef\@citeb{\expandafter\@iden\@citeb}% + \if@filesw + \immediate\write\@auxout{\string\citation{\@citeb}}% + \fi + \@ifundefined{b@\@citeb}{% + {\bf ?}% + \@warning{% + Citation `\@citeb' on page \thepage\space undefined% + }% + }% + {\csname b@\@citeb\endcsname}% + }% + }{#2}% +} +%\let\@biblabel\@gobble % Dec. 2008 - Gerry +% ---- +\def\@biblabelnum#1{[#1]} % Gerry's solution #1 - for Natbib -- April 2009 +\let\@biblabel=\@biblabelnum % Gerry's solution #1 - for Natbib -- April 2009 +\def\newblock{\relax} % Gerry Dec. 2008 +% --- +\newdimen\bibindent +\setcounter{enumi}{1} +\bibindent=0em +\def\thebibliography#1{% +\ifnum\addauflag=0\addauthorsection\global\addauflag=1\fi + \section[References]{% <=== OPTIONAL ARGUMENT ADDED HERE + {References} % was uppercased but this affects pdf bookmarks (SP/GM October 2004) + {\vskip -9pt plus 1pt} % GM Nov. 2006 / GM July 2000 (for somewhat tighter spacing) + \@mkboth{{\refname}}{{\refname}}% + }% + \list{[\arabic{enumi}]}{% + \settowidth\labelwidth{[#1]}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \advance\leftmargin\bibindent + \parsep=0pt\itemsep=1pt % GM July 2000 + \itemindent -\bibindent + \listparindent \itemindent + \usecounter{enumi} + }% + \let\newblock\@empty + \raggedright % GM July 2000 + \sloppy + \sfcode`\.=1000\relax +} + + +\gdef\balancecolumns +{\vfill\eject +\global\@colht=\textheight +\global\ht\@cclv=\textheight +} + +\newcount\colcntr +\global\colcntr=0 +%\newbox\savebox +\newbox\saveb@x % January 2008 + +\gdef \@makecol {% +\global\advance\colcntr by 1 +\ifnum\colcntr>2 \global\colcntr=1\fi + \ifvoid\footins + \setbox\@outputbox \box\@cclv + \else + \setbox\@outputbox \vbox{% +\boxmaxdepth \@maxdepth + \@tempdima\dp\@cclv + \unvbox \@cclv + \vskip-\@tempdima + \vskip \skip\footins + \color@begingroup + \normalcolor + \footnoterule + \unvbox \footins + \color@endgroup + }% + \fi + \xdef\@freelist{\@freelist\@midlist}% + \global \let \@midlist \@empty + \@combinefloats + \ifvbox\@kludgeins + \@makespecialcolbox + \else + \setbox\@outputbox \vbox to\@colht {% +\@texttop + \dimen@ \dp\@outputbox + \unvbox \@outputbox + \vskip -\dimen@ + \@textbottom + }% + \fi + \global \maxdepth \@maxdepth +} +\def\titlenote{\@ifnextchar[\@xtitlenote{\stepcounter\@mpfn +\global\advance\titlenotecount by 1 +\ifnum\titlenotecount=1 + \raisebox{9pt}{$\ast$} +\fi +\ifnum\titlenotecount=2 + \raisebox{9pt}{$\dagger$} +\fi +\ifnum\titlenotecount=3 + \raisebox{9pt}{$\ddagger$} +\fi +\ifnum\titlenotecount=4 +\raisebox{9pt}{$\S$} +\fi +\ifnum\titlenotecount=5 +\raisebox{9pt}{$\P$} +\fi + \@titlenotetext +}} + +\long\def\@titlenotetext#1{\insert\footins{% +\ifnum\titlenotecount=1\global\tntoks={#1}\fi +\ifnum\titlenotecount=2\global\tntokstwo={#1}\fi +\ifnum\titlenotecount=3\global\tntoksthree={#1}\fi +\ifnum\titlenotecount=4\global\tntoksfour={#1}\fi +\ifnum\titlenotecount=5\global\tntoksfive={#1}\fi + \reset@font\footnotesize + \interlinepenalty\interfootnotelinepenalty + \splittopskip\footnotesep + \splitmaxdepth \dp\strutbox \floatingpenalty \@MM + \hsize\columnwidth \@parboxrestore + \protected@edef\@currentlabel{% + }% + \color@begingroup + \color@endgroup}} + +%%%%%%%%%%%%%%%%%%%%%%%%% +\ps@plain +\baselineskip=11pt +\let\thepage\relax % For NO page numbers - GM Nov. 30th. 1999 and July 2000 +\def\setpagenumber#1{\global\setcounter{page}{#1}} +%\pagenumbering{arabic} % Arabic page numbers GM July 2000 +\twocolumn % Double column. +\flushbottom % Even bottom -- alas, does not balance columns at end of document +\pagestyle{plain} + +% Need Copyright Year and Copyright Data to be user definable (in .tex file). +% Gerry Nov. 30th. 1999 +\newtoks\copyrtyr +\newtoks\acmcopyr +\newtoks\boilerplate +\global\acmcopyr={X-XXXXX-XX-X/XX/XX} % Default - 5/11/2001 *** Gerry +\global\copyrtyr={\the\year} % Default - 3/3/2003 *** Gerry +\def\acmPrice#1{\gdef\@acmPrice{#1}} +\acmPrice{} %article price % Changed to 15 - June 2012 - Gerry + + +\def\CopyrightYear#1{\global\copyrtyr{#1}} +\def\crdata#1{\global\acmcopyr{#1}} +\def\permission#1{\global\boilerplate{#1}} + +% ISBN +% +\def\isbn#1{\global\acmcopyr={#1}} +\isbn{978-1-4503-2138-9} + +\RequirePackage{url} +\urlstyle{rm} +\def\doi#1{\def\@doi{#1}} +\doi{10.1145/1235} +\def\printdoi#1{\url{#1}} + + + +% Copyright +\RequirePackage{acmcopyright} +\setcopyright{none} + +% +\global\boilerplate={\@copyrightpermission} + + + +\newtoks\copyrightetc +\ifnum\ACM@basesize=9\relax +\global\copyrightetc{% +{\noindent\confname\ \the\conf\ \the\confinfo}\par\smallskip + \if@printcopyright + \copyright\ \the\copyrtyr\ \@copyrightowner + \fi + \if@acmowned ISBN \else\ifnum\acm@copyrightmode=2 ISBN \else \par\smallskip ACM ISBN \fi\fi + \the\acmcopyr\ifx\@acmPrice\@empty.\else\dots\@acmPrice\fi\par\smallskip +{DOI: \small\expandafter\printdoi\expandafter{\@doi}}} +\toappear{\fontsize{7pt}{8pt}\fontfamily{ptm}\selectfont + \the\boilerplate\par\smallskip + \the\copyrightetc} +\fi +\ifnum\ACM@basesize=10\relax +\global\copyrightetc{% +{\noindent\confname\ \the\conf\ \the\confinfo}\par\smallskip + \if@printcopyright + \copyright\ \the\copyrtyr\ \@copyrightowner + \fi + \if@acmowned ISBN \else\ifnum\acm@copyrightmode=2 ISBN \else \par\smallskip ACM ISBN \fi\fi + \the\acmcopyr\ifx\@acmPrice\@empty.\else\dots\@acmPrice\fi\par\smallskip +{DOI: \small\expandafter\printdoi\expandafter{\@doi}}} +\toappear{\fontsize{7.5pt}{8.5pt}\fontfamily{ptm}\selectfont + \the\boilerplate\par\smallskip + \the\copyrightetc} +\fi +%\DeclareFixedFont{\altcrnotice}{OT1}{tmr}{m}{n}{8} % << patch needed for accenting e.g. Montreal - Gerry, May 2007 +%\DeclareFixedFont{\altconfname}{OT1}{tmr}{m}{it}{8} % << patch needed for accenting in italicized confname - Gerry, May 2007 +% +%{\altconfname{{\the\conf}}} {\altcrnotice\the\confinfo\par} \the\copyrightetc.} % << Gerry, May 2007 +% +% The following section (i.e. 3 .sty inclusions) was added in May 2007 so as to fix the problems that many +% authors were having with accents. Sometimes accents would occur, but the letter-character would be of a different +% font. Conversely the letter-character font would be correct but, e.g. a 'bar' would appear superimposed on the +% character instead of, say, an unlaut/diaresis. Sometimes the letter-character would NOT appear at all. +% Using [T1]{fontenc} outright was not an option as this caused 99% of the authors to 'produce' a Type-3 (bitmapped) +% PDF file - useless for production. +% +% For proper (font) accenting we NEED these packages to be part of the .cls file i.e. 'ae', 'aecompl' and 'aeguil' +% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +%% This is file `ae.sty' +\def\fileversion{1.3} +\def\filedate{2001/02/12} +\NeedsTeXFormat{LaTeX2e} +%\ProvidesPackage{ae}[\filedate\space\fileversion\space % GM +% Almost European Computer Modern] % GM - keeping the log file clean(er) +\newif\if@ae@slides \@ae@slidesfalse +\DeclareOption{slides}{\@ae@slidestrue} +\ProcessOptions +\fontfamily{aer} +\RequirePackage[T1]{fontenc} +\if@ae@slides + \renewcommand{\sfdefault}{laess} + \renewcommand{\rmdefault}{laess} % no roman + \renewcommand{\ttdefault}{laett} +\else + \renewcommand{\sfdefault}{aess} + \renewcommand{\rmdefault}{aer} + \renewcommand{\ttdefault}{aett} +\fi +\endinput +%% +%% End of file `ae.sty'. +% +% +\def\fileversion{0.9} +\def\filedate{1998/07/23} +\NeedsTeXFormat{LaTeX2e} +%\ProvidesPackage{aecompl}[\filedate\space\fileversion\space % GM +%T1 Complements for AE fonts (D. Roegel)] % GM -- keeping the log file clean(er) + +\def\@ae@compl#1{{\fontencoding{T1}\fontfamily{cmr}\selectfont\symbol{#1}}} +\def\guillemotleft{\@ae@compl{19}} +\def\guillemotright{\@ae@compl{20}} +\def\guilsinglleft{\@ae@compl{14}} +\def\guilsinglright{\@ae@compl{15}} +\def\TH{\@ae@compl{222}} +\def\NG{\@ae@compl{141}} +\def\ng{\@ae@compl{173}} +\def\th{\@ae@compl{254}} +\def\DJ{\@ae@compl{208}} +\def\dj{\@ae@compl{158}} +\def\DH{\@ae@compl{208}} +\def\dh{\@ae@compl{240}} +\def\@perthousandzero{\@ae@compl{24}} +\def\textperthousand{\%\@perthousandzero} +\def\textpertenthousand{\%\@perthousandzero\@perthousandzero} +\endinput +% +% +%% This is file `aeguill.sty' +% This file gives french guillemets (and not guillemots!) +% built with the Polish CMR fonts (default), WNCYR fonts, the LASY fonts +% or with the EC fonts. +% This is useful in conjunction with the ae package +% (this package loads the ae package in case it has not been loaded) +% and with or without the french(le) package. +% +% In order to get the guillemets, it is necessary to either type +% \guillemotleft and \guillemotright, or to use an 8 bit encoding +% (such as ISO-Latin1) which selects these two commands, +% or, if you use the french package (but not the frenchle package), +% to type << or >>. +% +% By default, you get the Polish CMR guillemets; if this package is loaded +% with the `cm' option, you get the LASY guillemets; with `ec,' you +% get the EC guillemets, and with `cyr,' you get the cyrillic guillemets. +% +% In verbatim mode, you always get the EC/TT guillemets. +% +% The default option is interesting in conjunction with PDF, +% because there is a Type 1 version of the Polish CMR fonts +% and these guillemets are very close in shape to the EC guillemets. +% There are no free Type 1 versions of the EC fonts. +% +% Support for Polish CMR guillemets was kindly provided by +% Rolf Niepraschk <niepraschk@ptb.de> in version 0.99 (2000/05/22). +% Bernd Raichle provided extensive simplifications to the code +% for version 1.00. +% +% This package is released under the LPPL. +% +% Changes: +% Date version +% 2001/04/12 1.01 the frenchle and french package are now distinguished. +% +\def\fileversion{1.01} +\def\filedate{2001/04/12} +\NeedsTeXFormat{LaTeX2e} +%\ProvidesPackage{aeguill}[2001/04/12 1.01 % % GM +%AE fonts with french guillemets (D. Roegel)] % GM - keeping the log file clean(er) +%\RequirePackage{ae} % GM May 2007 - already embedded here + +\newcommand{\@ae@switch}[4]{#4} +\DeclareOption{ec}{\renewcommand\@ae@switch[4]{#1}} +\DeclareOption{cm}{\renewcommand\@ae@switch[4]{#2}} +\DeclareOption{cyr}{\renewcommand\@ae@switch[4]{#3}} +\DeclareOption{pl}{\renewcommand\@ae@switch[4]{#4}} + + +% +% Load necessary packages +% +\@ae@switch{% ec + % do nothing +}{% cm + \RequirePackage{latexsym}% GM - May 2007 - already 'mentioned as required' up above +}{% cyr + \RequirePackage[OT2,T1]{fontenc}% +}{% pl + \RequirePackage[OT4,T1]{fontenc}% +} + +% The following command will be compared to \frenchname, +% as defined in french.sty and frenchle.sty. +\def\aeguillfrenchdefault{french}% + +\let\guill@verbatim@font\verbatim@font +\def\verbatim@font{\guill@verbatim@font\ecguills{cmtt}% + \let\guillemotleft\@oguills\let\guillemotright\@fguills} + +\begingroup \catcode`\<=13 \catcode`\>=13 +\def\x{\endgroup + \def\ae@lfguill{<<}% + \def\ae@rfguill{>>}% +}\x + +\newcommand{\ecguills}[1]{% + \def\selectguillfont{\fontencoding{T1}\fontfamily{#1}\selectfont}% + \def\@oguills{{\selectguillfont\symbol{19}}}% + \def\@fguills{{\selectguillfont\symbol{20}}}% + } + +\newcommand{\aeguills}{% + \ae@guills + % We redefine \guillemotleft and \guillemotright + % in order to catch them when they are used + % with \DeclareInputText (in latin1.def for instance) + % We use \auxWARNINGi as a safe indicator that french.sty is used. + \gdef\guillemotleft{\ifx\auxWARNINGi\undefined + \@oguills % neither french.sty nor frenchle.sty + \else + \ifx\aeguillfrenchdefault\frenchname + \ae@lfguill % french.sty + \else + \@oguills % frenchle.sty + \fi + \fi}% + \gdef\guillemotright{\ifx\auxWARNINGi\undefined + \@fguills % neither french.sty nor frenchle.sty + \else + \ifx\aeguillfrenchdefault\frenchname + \ae@rfguill % french.sty + \else + \@fguills % frenchle.sty + \fi + \fi}% + } + +% +% Depending on the class option +% define the internal command \ae@guills +\@ae@switch{% ec + \newcommand{\ae@guills}{% + \ecguills{cmr}}% +}{% cm + \newcommand{\ae@guills}{% + \def\selectguillfont{\fontencoding{U}\fontfamily{lasy}% + \fontseries{m}\fontshape{n}\selectfont}% + \def\@oguills{\leavevmode\nobreak + \hbox{\selectguillfont (\kern-.20em(\kern.20em}\nobreak}% + \def\@fguills{\leavevmode\nobreak + \hbox{\selectguillfont \kern.20em)\kern-.2em)}% + \ifdim\fontdimen\@ne\font>\z@\/\fi}}% +}{% cyr + \newcommand{\ae@guills}{% + \def\selectguillfont{\fontencoding{OT2}\fontfamily{wncyr}\selectfont}% + \def\@oguills{{\selectguillfont\symbol{60}}}% + \def\@fguills{{\selectguillfont\symbol{62}}}} +}{% pl + \newcommand{\ae@guills}{% + \def\selectguillfont{\fontencoding{OT4}\fontfamily{cmr}\selectfont}% + \def\@oguills{{\selectguillfont\symbol{174}}}% + \def\@fguills{{\selectguillfont\symbol{175}}}} +} + + +\AtBeginDocument{% + \ifx\GOfrench\undefined + \aeguills + \else + \let\aeguill@GOfrench\GOfrench + \gdef\GOfrench{\aeguill@GOfrench \aeguills}% + \fi + } + +\endinput +% +