diff --git a/.hgignore b/.hgignore index bcc8f738e6401c8bc59cdcf0c80855d8aa1f66be_LmhnaWdub3Jl..3857abf5061909c2f99f26540fe0c7b2c642c11c_LmhnaWdub3Jl 100644 --- a/.hgignore +++ b/.hgignore @@ -20,6 +20,8 @@ */*.pstats +*/.ipynb_checkpoints + auto/* **/_minted-* diff --git a/fluidfft/Pyfig/fig_build_use.dio b/fluidfft/Pyfig/fig_build_use.dio new file mode 100644 index 0000000000000000000000000000000000000000..3857abf5061909c2f99f26540fe0c7b2c642c11c_Zmx1aWRmZnQvUHlmaWcvZmlnX2J1aWxkX3VzZS5kaW8= --- /dev/null +++ b/fluidfft/Pyfig/fig_build_use.dio @@ -0,0 +1,1 @@ +<mxGraphModel dx="616" dy="502" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="583" background="#ffffff"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;fontFamily=Courier New;strokeWidth=1;" parent="1" source="2" target="13" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;fontFamily=Courier New;strokeWidth=1;" parent="1" source="2" target="17" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="2" value="base_fft.h<font face="Courier New"><br><b>BaseFFT</b></font>" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;strokeWidth=1;" parent="1" vertex="1"><mxGeometry x="173" y="20" width="100" height="40" as="geometry"/></mxCell><mxCell id="39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0.25;entryY=0;jettySize=auto;orthogonalLoop=1;fontFamily=Courier New;strokeWidth=1;" parent="1" source="13" target="15" edge="1"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="110" y="150"/><mxPoint x="198" y="150"/></Array></mxGeometry></mxCell><mxCell id="13" value="base_fft2d.h<br><b>BaseFFT2D</b>" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;strokeWidth=1;" parent="1" vertex="1"><mxGeometry x="60" y="100" width="100" height="40" as="geometry"/></mxCell><mxCell id="41" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;fontFamily=Courier New;strokeWidth=1;" parent="1" source="15" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="200" y="250" as="targetPoint"/></mxGeometry></mxCell><mxCell id="15" value="base_fft2dmpi.h<br><b>BaseFFT2DMPI</b>" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;strokeWidth=1;" parent="1" vertex="1"><mxGeometry x="173" y="170" width="100" height="40" as="geometry"/></mxCell><mxCell id="43" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;fontFamily=Courier New;strokeWidth=1;" parent="1" source="21" target="42" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="160" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0.75;entryY=0;jettySize=auto;orthogonalLoop=1;strokeWidth=1;" parent="1" source="21" target="45" edge="1"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="60" y="271"/><mxPoint x="60" y="360"/><mxPoint x="93" y="360"/></Array></mxGeometry></mxCell><mxCell id="186" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0;entryY=0.5;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="21" target="105"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="320" y="271"/><mxPoint x="320" y="343"/></Array></mxGeometry></mxCell><mxCell id="21" value="fft2dmpi_with_fftwmpi2d.h<br><b>FFT2DMPIWithFFTWMPI2D</b>" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;strokeWidth=1;" parent="1" vertex="1"><mxGeometry x="80" y="251" width="200" height="40" as="geometry"/></mxCell><mxCell id="204" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;fontFamily=Helvetica;" edge="1" parent="1" source="42" target="203"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="42" value="fft2dmpi_with_fftwmpi2d.cpp<br><b>FFT2DMPIWithFFTWMPI2D</b>" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;strokeWidth=1;" parent="1" vertex="1"><mxGeometry x="80" y="305" width="200" height="40" as="geometry"/></mxCell><mxCell id="152" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;strokeWidth=1;" parent="1" source="45" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="160" y="482.2413793103449" as="targetPoint"/></mxGeometry></mxCell><mxCell id="45" value="Write user C++ code" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;strokeWidth=1;" parent="1" vertex="1"><mxGeometry x="3" y="462" width="120" height="40" as="geometry"/></mxCell><mxCell id="33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;fontFamily=Courier New;strokeWidth=1;" parent="1" source="17" target="15" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="17" value="base_fftmpi.h<br><b>BaseFFTMPI</b>" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;strokeWidth=1;" parent="1" vertex="1"><mxGeometry x="173" y="100" width="100" height="40" as="geometry"/></mxCell><mxCell id="23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;strokeWidth=1;" parent="1" source="19" target="21" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="150" y="220" as="targetPoint"/><Array as="points"><mxPoint x="90" y="230"/><mxPoint x="165" y="230"/></Array></mxGeometry></mxCell><mxCell id="19" value="fftw3-mpi.h" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;strokeWidth=1;" parent="1" vertex="1"><mxGeometry x="40" y="170" width="100" height="40" as="geometry"/></mxCell><mxCell id="209" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;fontFamily=Helvetica;" edge="1" parent="1" source="58" target="183"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="58" value="Execute" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;fontFamily=Courier New;strokeWidth=1;" parent="1" vertex="1"><mxGeometry x="197" y="521" width="145" height="35" as="geometry"/></mxCell><mxCell id="85" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;strokeWidth=1;" parent="1" source="62" target="84" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="62" value="base.pyx" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;shadow=0;strokeWidth=1;" parent="1" vertex="1"><mxGeometry x="580" y="20" width="100" height="40" as="geometry"/></mxCell><mxCell id="95" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0.762;entryY=0.08;entryPerimeter=0;jettySize=auto;orthogonalLoop=1;strokeWidth=1;" parent="1" source="84" target="91" edge="1"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="630" y="170"/><mxPoint x="591" y="170"/></Array></mxGeometry></mxCell><mxCell id="84" value="template2d_mako.pyx" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;shadow=0;strokeWidth=1;gradientColor=#ffffff;" parent="1" vertex="1"><mxGeometry x="560" y="120" width="140" height="40" as="geometry"/></mxCell><mxCell id="163" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0.297;entryY=0.042;entryPerimeter=0;jettySize=auto;orthogonalLoop=1;strokeWidth=1;" parent="1" target="45" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="39.23529411764707" y="437" as="sourcePoint"/></mxGeometry></mxCell><mxCell id="68" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;strokeWidth=1;" parent="1" source="67" target="62" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="67" value="mpi4py" style="shape=mxgraph.flowchart.multi-document;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;strokeWidth=1;shadow=0;" parent="1" vertex="1"><mxGeometry x="468" y="10" width="65" height="37" as="geometry"/></mxCell><mxCell id="72" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0;entryY=0.75;jettySize=auto;orthogonalLoop=1;strokeWidth=1;" parent="1" source="71" target="62" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="71" value="numpy" style="shape=mxgraph.flowchart.multi-document;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;strokeWidth=1;shadow=0;" parent="1" vertex="1"><mxGeometry x="468" y="63" width="65" height="37" as="geometry"/></mxCell><mxCell id="81" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;strokeWidth=1;" parent="1" source="79" target="80" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="79" value="cpu.pxd" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;shadow=0;strokeWidth=1;" parent="1" vertex="1"><mxGeometry x="710" y="20" width="100" height="40" as="geometry"/></mxCell><mxCell id="82" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=1;entryY=0.5;jettySize=auto;orthogonalLoop=1;strokeWidth=1;" parent="1" source="80" target="62" edge="1"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="700" y="102"/><mxPoint x="700" y="40"/></Array></mxGeometry></mxCell><mxCell id="80" value="util_pyfftw.pyx" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;shadow=0;strokeWidth=1;" parent="1" vertex="1"><mxGeometry x="710" y="82" width="100" height="40" as="geometry"/></mxCell><mxCell id="92" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0.28;entryY=-0.06;entryPerimeter=0;jettySize=auto;orthogonalLoop=1;strokeWidth=1;" parent="1" source="90" target="91" edge="1"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="470" y="170"/><mxPoint x="500" y="170"/></Array></mxGeometry></mxCell><mxCell id="90" value="template2d_mako.pxd" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;shadow=0;strokeWidth=1;" parent="1" vertex="1"><mxGeometry x="400" y="120" width="140" height="40" as="geometry"/></mxCell><mxCell id="124" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;strokeWidth=1;" parent="1" source="91" target="100" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="125" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;strokeWidth=1;" parent="1" source="91" target="99" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="91" value="Generate Cython code<br><b><font face="Courier New">mako</font></b>" style="shape=mxgraph.flowchart.predefined_process;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;strokeWidth=1;shadow=0;" parent="1" vertex="1"><mxGeometry x="447" y="190" width="189" height="34" as="geometry"/></mxCell><mxCell id="202" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=1;entryY=0.5;jettySize=auto;orthogonalLoop=1;fontFamily=Helvetica;" edge="1" parent="1" source="99" target="105"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="788" y="287"/><mxPoint x="788" y="343"/></Array></mxGeometry></mxCell><mxCell id="99" value="fft2dmpi_with_fftw1d.pyx<br><b>FFT2DMPIWithFFTWMPI2D</b>" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;shadow=0;strokeWidth=1;gradientColor=#ffffff;" parent="1" vertex="1"><mxGeometry x="561" y="258" width="169" height="58" as="geometry"/></mxCell><mxCell id="196" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0;entryY=0.5;jettySize=auto;orthogonalLoop=1;fontFamily=Helvetica;" edge="1" parent="1" source="100" target="99"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="100" value="fft2dmpi_with_fftw1d.pxd<br><b>FFT2DMPIWithFFTWMPI2D</b>" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;shadow=0;strokeWidth=1;" parent="1" vertex="1"><mxGeometry x="352" y="257" width="171" height="60" as="geometry"/></mxCell><mxCell id="193" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0.5;entryY=0;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="105" target="135"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="105" value="Generate C++ code<br><b>purepymake.py</b> (<b>cython)</b>" style="shape=process;whiteSpace=wrap;html=1;fillColor=none;fontFamily=Helvetica;strokeWidth=1;rounded=1;direction=east;" parent="1" vertex="1"><mxGeometry x="533" y="328" width="235" height="30" as="geometry"/></mxCell><mxCell id="194" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="135"><mxGeometry relative="1" as="geometry"><mxPoint x="650" y="450" as="targetPoint"/></mxGeometry></mxCell><mxCell id="135" value="Compile objects and build python extensions<br><b>purepymake.py (cython</b> / <b>mpicxx</b>)" style="shape=process;whiteSpace=wrap;html=1;fillColor=none;fontFamily=Helvetica;strokeWidth=1;rounded=1;direction=east;" parent="1" vertex="1"><mxGeometry x="510" y="383" width="280" height="47" as="geometry"/></mxCell><mxCell id="189" value="<font face="Helvetica">Install fluidfft</font><br><b>setup.py</b>" style="shape=process;whiteSpace=wrap;html=1;fillColor=none;fontFamily=Helvetica;strokeWidth=1;rounded=1;direction=east;" vertex="1" parent="1"><mxGeometry x="510" y="452" width="270" height="28" as="geometry"/></mxCell><mxCell id="177" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="168" target="170"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="168" value="Write user Python code" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;strokeWidth=1;" vertex="1" parent="1"><mxGeometry x="492" y="510" width="144" height="40" as="geometry"/></mxCell><mxCell id="181" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="170" target="173"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="720" y="560"/></Array></mxGeometry></mxCell><mxCell id="170" value="Execute the python script" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;fontFamily=Courier New;strokeWidth=1;" vertex="1" parent="1"><mxGeometry x="670" y="505" width="100" height="50" as="geometry"/></mxCell><mxCell id="173" value="End" style="shape=mxgraph.flowchart.start_2;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;strokeWidth=1;" vertex="1" parent="1"><mxGeometry x="418" y="540" width="37" height="39" as="geometry"/></mxCell><mxCell id="195" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0;entryY=0.5;jettySize=auto;orthogonalLoop=1;fontFamily=Helvetica;" edge="1" parent="1" source="178" target="168"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="438" y="530"/></Array></mxGeometry></mxCell><mxCell id="178" value="Start" style="shape=mxgraph.flowchart.start_2;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;strokeWidth=1;" vertex="1" parent="1"><mxGeometry x="419" y="461" width="37" height="39" as="geometry"/></mxCell><mxCell id="182" value="Start" style="shape=mxgraph.flowchart.start_2;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;strokeWidth=1;" vertex="1" parent="1"><mxGeometry x="21" y="400" width="37" height="39" as="geometry"/></mxCell><mxCell id="183" value="End" style="shape=mxgraph.flowchart.start_2;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;strokeWidth=1;" vertex="1" parent="1"><mxGeometry x="22" y="519" width="37" height="39" as="geometry"/></mxCell><mxCell id="206" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;fontFamily=Helvetica;" edge="1" parent="1" source="203"><mxGeometry relative="1" as="geometry"><mxPoint x="269" y="519.9999999999999" as="targetPoint"/></mxGeometry></mxCell><mxCell id="203" value="Compile objects and build executable <b>(cython</b> / <b>mpicxx</b>)" style="shape=process;whiteSpace=wrap;html=1;fillColor=none;fontFamily=Helvetica;strokeWidth=1;rounded=1;direction=east;" vertex="1" parent="1"><mxGeometry x="158" y="455" width="222" height="47" as="geometry"/></mxCell></root></mxGraphModel> \ No newline at end of file diff --git a/fluidfft/Pyfig/fig_build_use.svg b/fluidfft/Pyfig/fig_build_use.svg new file mode 100644 index 0000000000000000000000000000000000000000..3857abf5061909c2f99f26540fe0c7b2c642c11c_Zmx1aWRmZnQvUHlmaWcvZmlnX2J1aWxkX3VzZS5zdmc= --- /dev/null +++ b/fluidfft/Pyfig/fig_build_use.svg @@ -0,0 +1,1 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="808px" height="570px" version="1.1"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-ffffff-1-ffffff-1-s-0"><stop offset="0%" style="stop-color:#ffffff"/><stop offset="100%" style="stop-color:#ffffff"/></linearGradient></defs><g transform="translate(0.5,0.5)"><path d="M 170 30.33 L 106.67 30.33 L 106.67 83.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 106.67 88.88 L 103.17 81.88 L 106.67 83.63 L 110.17 81.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 220 50 L 220 83.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 220 88.88 L 216.5 81.88 L 220 83.63 L 223.5 81.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 170 10 L 270 10 L 270 44 Q 245 33.2 220 44 Q 195 54.8 170 44 L 170 16 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(192.5,8.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="53" height="29" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 54px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">base_fft.h<font face="Courier New"><br /><b>BaseFFT</b></font></div></div></foreignObject><text x="27" y="21" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 106.67 130 L 106.67 140.33 L 195 140.33 L 195 153.97" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 195 159.22 L 191.5 152.22 L 195 153.97 L 198.5 152.22 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 57 90 L 157 90 L 157 124 Q 132 113.2 107 124 Q 82 134.8 57 124 L 57 96 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(72.5,89.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="66" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 67px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">base_fft2d.h<br /><b>BaseFFT2D</b></div></div></foreignObject><text x="33" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 220 200 L 220 220.33 L 196.67 220.33 L 196.89 233.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 196.98 238.88 L 193.36 231.94 L 196.89 233.63 L 200.36 231.82 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 170 160 L 270 160 L 270 194 Q 245 183.2 220 194 Q 195 204.8 170 194 L 170 166 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(175.5,159.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="87" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 88px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">base_fft2dmpi.h<br /><b>BaseFFT2DMPI</b></div></div></foreignObject><text x="44" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 176.67 281 L 176.67 300.33 L 176.67 275.33 L 176.67 288.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 176.67 293.88 L 173.17 286.88 L 176.67 288.63 L 180.17 286.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 77 260.33 L 56.67 260.33 L 56.67 350.33 L 90 350.33 L 90 445.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 90 450.88 L 86.5 443.88 L 90 445.63 L 93.5 443.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 277 260.33 L 316.67 260.33 L 316.67 333.67 L 523.63 333.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 528.88 333.67 L 521.88 337.17 L 523.63 333.67 L 521.88 330.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 77 241 L 277 241 L 277 275 Q 227 264.2 177 275 Q 127 285.8 77 275 L 77 247 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(97.5,240.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="156" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 157px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">fft2dmpi_with_fftwmpi2d.h<br /><b>FFT2DMPIWithFFTWMPI2D</b></div></div></foreignObject><text x="78" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">fft2dmpi_with_fftwmpi2d.h<br><b>FFT2DMPIWithFFTWMPI2D</b></text></switch></g><path d="M 176.67 335 L 176.67 390.33 L 266.67 390.33 L 266.67 438.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 266.67 443.88 L 263.17 436.88 L 266.67 438.63 L 270.17 436.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 77 295 L 277 295 L 277 329 Q 227 318.2 177 329 Q 127 339.8 77 329 L 77 301 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(97.5,294.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="156" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 157px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">fft2dmpi_with_fftwmpi2d.cpp<br /><b>FFT2DMPIWithFFTWMPI2D</b></div></div></foreignObject><text x="78" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">fft2dmpi_with_fftwmpi2d.cpp<br><b>FFT2DMPIWithFFTWMPI2D</b></text></switch></g><path d="M 120 472 L 140 472 L 150.63 472.15" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 155.88 472.23 L 148.83 475.63 L 150.63 472.15 L 148.93 468.63 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 0 452 L 120 452 L 120 486 Q 90 475.2 60 486 Q 30 496.8 0 486 L 0 458 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(3.5,458.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="110" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 111px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Write user C++ code</div></div></foreignObject><text x="55" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Write user C++ code</text></switch></g><path d="M 220 130 L 220 150.33 L 220 140.33 L 220 153.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 220 158.88 L 216.5 151.88 L 220 153.63 L 223.5 151.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 170 90 L 270 90 L 270 124 Q 245 113.2 220 124 Q 195 134.8 170 124 L 170 96 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(182.5,89.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="72" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 73px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">base_fftmpi.h<br /><b>BaseFFTMPI</b></div></div></foreignObject><text x="36" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 86.67 200 L 86.67 220.33 L 161.67 220.33 L 161.67 234.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 161.67 239.88 L 158.17 232.88 L 161.67 234.63 L 165.17 232.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 37 160 L 137 160 L 137 194 Q 112 183.2 87 194 Q 62 204.8 37 194 L 37 166 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(56.5,166.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="59" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 60px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">fftw3-mpi.h</div></div></foreignObject><text x="30" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">fftw3-mpi.h</text></switch></g><path d="M 194 528.67 L 125 528.67 L 62.37 528.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 57.12 528.67 L 64.12 525.17 L 62.37 528.67 L 64.12 532.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="194" y="511" width="145" height="35" fill="none" stroke="#000000" pointer-events="none"/><g transform="translate(240.5,521.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="49" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Courier\ New; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 50px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Execute</div></div></foreignObject><text x="25" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Courier New">Execute</text></switch></g><path d="M 627 50 L 627 103.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 627 108.88 L 623.5 101.88 L 627 103.63 L 630.5 101.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 577 10 L 677 10 L 677 44 Q 652 33.2 627 44 Q 602 54.8 577 44 L 577 16 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(601.5,16.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="48" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 49px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">base.pyx</div></div></foreignObject><text x="24" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">base.pyx</text></switch></g><path d="M 626.67 150 L 626.67 160.33 L 588.33 160.33 L 588.33 175.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 588.33 180.88 L 584.83 173.88 L 588.33 175.63 L 591.83 173.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 557 110 L 697 110 L 697 144 Q 662 133.2 627 144 Q 592 154.8 557 144 L 557 116 Z" fill="url(#mx-gradient-ffffff-1-ffffff-1-s-0)" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(567.5,116.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="116" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 117px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">template2d_mako.pyx</div></div></foreignObject><text x="58" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">template2d_mako.pyx</text></switch></g><path d="M 36.24 427 L 35.29 447.31" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 35.05 452.55 L 31.88 445.4 L 35.29 447.31 L 38.87 445.72 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 530 18.67 L 553.33 18.67 L 553.33 30.33 L 570.63 30.33" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 575.88 30.33 L 568.88 33.83 L 570.63 30.33 L 568.88 26.83 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 472.39 3.07 C 472.39 1.37 474.04 0 476.08 0 L 526.31 0 C 528.35 0 530 1.37 530 3.07 L 530 27.62 C 520.79 24.38 510.4 24.38 501.19 27.62 C 491.99 30.86 481.59 30.86 472.39 27.62 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 468.69 6.14 C 468.69 5.32 469.08 4.54 469.77 3.97 C 470.47 3.39 471.41 3.07 472.39 3.07 L 522.61 3.07 C 523.59 3.07 524.53 3.39 525.23 3.97 C 525.92 4.54 526.31 5.32 526.31 6.14 L 526.31 30.69 C 517.1 27.45 506.71 27.45 497.5 30.69 C 488.29 33.93 477.9 33.93 468.69 30.69 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 465 9.21 C 465 7.51 466.65 6.14 468.69 6.14 L 518.92 6.14 C 520.96 6.14 522.61 7.51 522.61 9.21 L 522.61 33.76 C 513.41 30.52 503.01 30.52 493.81 33.76 C 484.6 37 474.21 37 465 33.76 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(477.5,11.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="38" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 39px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">mpi4py</div></div></foreignObject><text x="19" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">mpi4py</text></switch></g><path d="M 530 72 L 553.33 72 L 553.33 40.33 L 570.3 40.33" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 575.55 40.33 L 568.55 43.83 L 570.3 40.33 L 568.55 36.83 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 472.39 56.07 C 472.39 54.37 474.04 53 476.08 53 L 526.31 53 C 528.35 53 530 54.37 530 56.07 L 530 80.62 C 520.79 77.38 510.4 77.38 501.19 80.62 C 491.99 83.86 481.59 83.86 472.39 80.62 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 468.69 59.14 C 468.69 58.32 469.08 57.54 469.77 56.97 C 470.47 56.39 471.41 56.07 472.39 56.07 L 522.61 56.07 C 523.59 56.07 524.53 56.39 525.23 56.97 C 525.92 57.54 526.31 58.32 526.31 59.14 L 526.31 83.69 C 517.1 80.45 506.71 80.45 497.5 83.69 C 488.29 86.93 477.9 86.93 468.69 83.69 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 465 62.21 C 465 60.51 466.65 59.14 468.69 59.14 L 518.92 59.14 C 520.96 59.14 522.61 60.51 522.61 62.21 L 522.61 86.76 C 513.41 83.52 503.01 83.52 493.81 86.76 C 484.6 90 474.21 90 465 86.76 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(478.5,64.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="36" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 37px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">numpy</div></div></foreignObject><text x="18" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">numpy</text></switch></g><path d="M 756.67 50 L 756.67 70.33 L 756.67 52 L 756.67 65.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 756.67 70.88 L 753.17 63.88 L 756.67 65.63 L 760.17 63.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 707 10 L 807 10 L 807 44 Q 782 33.2 757 44 Q 732 54.8 707 44 L 707 16 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(734.5,16.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="42" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 43px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">cpu.pxd</div></div></foreignObject><text x="21" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">cpu.pxd</text></switch></g><path d="M 707 92 L 696.67 92 L 696.67 30.33 L 683.03 30.33" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 677.78 30.33 L 684.78 26.83 L 683.03 30.33 L 684.78 33.83 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 707 72 L 807 72 L 807 106 Q 782 95.2 757 106 Q 732 116.8 707 106 L 707 78 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(718.5,78.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="75" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 76px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">util_pyfftw.pyx</div></div></foreignObject><text x="38" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">util_pyfftw.pyx</text></switch></g><path d="M 466.67 150 L 466.67 160.33 L 496.67 160.33 L 496.67 172.3" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 496.67 177.55 L 493.17 170.55 L 496.67 172.3 L 500.17 170.55 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 397 110 L 537 110 L 537 144 Q 502 133.2 467 144 Q 432 154.8 397 144 L 397 116 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(407.5,116.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="117" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 118px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">template2d_mako.pxd</div></div></foreignObject><text x="59" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">template2d_mako.pxd</text></switch></g><path d="M 538.33 214 L 538.33 233.67 L 435 233.67 L 435 240.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 435 245.88 L 431.5 238.88 L 435 240.63 L 438.5 238.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 538.33 214 L 538.33 233.67 L 643.33 233.67 L 643.33 241.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 643.33 246.88 L 639.83 239.88 L 643.33 241.63 L 646.83 239.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="444" y="180" width="189" height="34" rx="2.28" ry="2.28" fill="#ffffff" stroke="#000000" pointer-events="none"/><path d="M 471 180 L 471 214" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 606 180 L 606 214" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(477.5,181.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="120" height="28" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 121px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Generate Cython code<br /><b><font face="Courier New">mako</font></b></div></div></foreignObject><text x="60" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 727 277 L 785 277 L 785 333.67 L 771.37 333.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 766.12 333.67 L 773.12 330.17 L 771.37 333.67 L 773.12 337.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 558 248 L 727 248 L 727 297.3 Q 684.75 281.64 642.5 297.3 Q 600.25 312.96 558 297.3 L 558 256.7 Z" fill="url(#mx-gradient-ffffff-1-ffffff-1-s-0)" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(563.5,253.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="156" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 157px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">fft2dmpi_with_fftw1d.pyx<br /><b>FFT2DMPIWithFFTWMPI2D</b></div></div></foreignObject><text x="78" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">fft2dmpi_with_fftw1d.pyx<br><b>FFT2DMPIWithFFTWMPI2D</b></text></switch></g><path d="M 520 277 L 540 277 L 538.33 277 L 551.97 277" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 557.22 277 L 550.22 280.5 L 551.97 277 L 550.22 273.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 349 247 L 520 247 L 520 298 Q 477.25 281.8 434.5 298 Q 391.75 314.2 349 298 L 349 256 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(355.5,253.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="156" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 157px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">fft2dmpi_with_fftw1d.pxd<br /><b>FFT2DMPIWithFFTWMPI2D</b></div></div></foreignObject><text x="78" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">fft2dmpi_with_fftw1d.pxd<br><b>FFT2DMPIWithFFTWMPI2D</b></text></switch></g><path d="M 648.33 348 L 648.33 368.67 L 646.67 368.67 L 646.67 367.3" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 646.67 372.55 L 643.17 365.55 L 646.67 367.3 L 650.17 365.55 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="530" y="318" width="235" height="30" rx="4.5" ry="4.5" fill="none" stroke="#000000" pointer-events="none"/><path d="M 554 318 L 554 348 M 741 318 L 741 348" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(576.5,318.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="139" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 140px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Generate C++ code<br /><b>purepymake.py</b> (<b>cython)</b></div></div></foreignObject><text x="70" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Generate C++ code<br><b>purepymake.py</b> (<b>cython)</b></text></switch></g><path d="M 646.67 420 L 646.67 440.33 L 646.67 420.33 L 646.89 433.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 646.98 438.88 L 643.36 431.94 L 646.89 433.63 L 650.36 431.82 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="507" y="373" width="280" height="47" rx="7.05" ry="7.05" fill="none" stroke="#000000" pointer-events="none"/><path d="M 535 373 L 535 420 M 759 373 L 759 420" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(536.5,374.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="221" height="41" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 221px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Compile objects and build python extensions<br /><b>purepymake.py (cython</b> / <b>mpicxx</b>)</div></div></foreignObject><text x="111" y="27" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Compile objects and build python extensions<br><b>purepymake.py (cython</b> / <b>mpicxx</b>)</text></switch></g><rect x="507" y="442" width="270" height="28" rx="4.2" ry="4.2" fill="none" stroke="#000000" pointer-events="none"/><path d="M 534 442 L 534 470 M 750 442 L 750 470" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(607.5,441.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><font face="Helvetica">Install fluidfft</font><br /><b>setup.py</b></div></div></foreignObject><text x="34" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 633 520.33 L 653.33 520.33 L 646.67 520.33 L 660.63 520.33" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 665.88 520.33 L 658.88 523.83 L 660.63 520.33 L 658.88 516.83 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 489 500 L 633 500 L 633 534 Q 597 523.2 561 534 Q 525 544.8 489 534 L 489 506 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(497.5,506.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="124" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 125px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Write user Python code</div></div></foreignObject><text x="62" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Write user Python code</text></switch></g><path d="M 716.67 545 L 716.67 550.33 L 458.37 550.33" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 453.12 550.33 L 460.12 546.83 L 458.37 550.33 L 460.12 553.83 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="667" y="495" width="100" height="50" fill="none" stroke="#000000" pointer-events="none"/><g transform="translate(667.5,505.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="96" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Courier\ New; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 96px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Execute the python script</div></div></foreignObject><text x="48" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Courier New">Execute the python script</text></switch></g><ellipse cx="434" cy="550" rx="18.5" ry="19.5" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(421.5,542.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="21" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 22px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">End</div></div></foreignObject><text x="11" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">End</text></switch></g><path d="M 435 490 L 435 520.33 L 481.97 520.33" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 487.22 520.33 L 480.22 523.83 L 481.97 520.33 L 480.22 516.83 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><ellipse cx="435" cy="471" rx="18.5" ry="19.5" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(420.5,463.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="26" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 27px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Start</div></div></foreignObject><text x="13" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Start</text></switch></g><ellipse cx="37" cy="410" rx="18.5" ry="19.5" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(22.5,402.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="26" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 27px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Start</div></div></foreignObject><text x="13" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Start</text></switch></g><ellipse cx="38" cy="529" rx="18.5" ry="19.5" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(25.5,521.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="21" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 22px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">End</div></div></foreignObject><text x="11" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">End</text></switch></g><path d="M 266.67 492 L 266.67 512 L 266.67 490.33 L 266.22 503.64" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 266.04 508.88 L 262.78 501.77 L 266.22 503.64 L 269.77 502.01 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="155" y="445" width="222" height="47" rx="7.05" ry="7.05" fill="none" stroke="#000000" pointer-events="none"/><path d="M 177 445 L 177 492 M 355 445 L 355 492" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(177.5,453.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="175" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 175px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Compile objects and build executable <b>(cython</b> / <b>mpicxx</b>)</div></div></foreignObject><text x="88" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Compile objects and build executable <b>(cython</b> / <b>mpicxx</b>)</text></switch></g></g></svg> \ No newline at end of file diff --git a/fluidfft/fluidfft_paper.tex b/fluidfft/fluidfft_paper.tex index bcc8f738e6401c8bc59cdcf0c80855d8aa1f66be_Zmx1aWRmZnQvZmx1aWRmZnRfcGFwZXIudGV4..3857abf5061909c2f99f26540fe0c7b2c642c11c_Zmx1aWRmZnQvZmx1aWRmZnRfcGFwZXIudGV4 100644 --- a/fluidfft/fluidfft_paper.tex +++ b/fluidfft/fluidfft_paper.tex @@ -64,10 +64,6 @@ FluidFFT: a library which provides C++ and Python classes useful to perform fast Fourier transform (FFT). -Distributed (MPI) - -CUDA / OpenCL? - \cite{fluiddyn} \section*{Keywords} @@ -87,7 +83,7 @@ functionality should be included in this section. } Fast Fourier transforms (FFT) are useful for many applications. There are many -good libraries to perform FFT, in particular the standard FFTW. A new +good libraries to perform FFT, in particular the standard FFTW. A new challenge is to perform efficiently FFT on clusters with the memory distributed over a large number of cores. A problem is that for one-dimensional FFT, all the data has to be located in the memory of the process that perform the FFT, @@ -105,8 +101,8 @@ since there is no common API, it is not simple to write applications that are able to use these libraries and to compare their performances. -There are already tools to perform FFT with Python (scipy.fftpack, -pyfftw). However, they suffer from drawbacks: +There are already tools to perform FFT with Python (\pack{scipy.fftpack}, +\pack{pyfftw}). However, they suffer from drawbacks: \begin{itemize}