Skip to content
Snippets Groups Projects
Commit 09a85b2ed843 authored by Ashwin Vishnu's avatar Ashwin Vishnu
Browse files

Code organization figures

parent a2ca4a0019fd
No related branches found
No related tags found
No related merge requests found
......@@ -18,6 +18,9 @@
*.bbl
*.blg
*.fls
*.fdb_latexmk
*.so
*/*.pstats
......@@ -28,5 +31,7 @@
**/_minted-*
.vscode/*
fluidsim/Scripts/spectralDNS/*
fluidsim/Scripts/dedalus*
<mxGraphModel dx="739" dy="602" 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&lt;font face=&quot;Courier New&quot;&gt;&lt;br&gt;&lt;b&gt;BaseFFT&lt;/b&gt;&lt;/font&gt;" 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&lt;br&gt;&lt;b&gt;BaseFFT2D&lt;/b&gt;" 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&lt;br&gt;&lt;b&gt;BaseFFT2DMPI&lt;/b&gt;" 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;" parent="1" source="21" target="105" edge="1"><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&lt;br&gt;&lt;b&gt;FFT2DMPIWithFFTWMPI2D&lt;/b&gt;" 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;" parent="1" source="42" target="203" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="42" value="fft2dmpi_with_fftwmpi2d.cpp&lt;br&gt;&lt;b&gt;FFT2DMPIWithFFTWMPI2D&lt;/b&gt;" 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&lt;br&gt;&lt;b&gt;BaseFFTMPI&lt;/b&gt;" 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;" parent="1" source="58" target="183" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="58" value="Execute" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;fontFamily=Helvetica;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&lt;br&gt;&lt;b&gt;&lt;font face=&quot;Courier New&quot;&gt;mako&lt;/font&gt;&lt;/b&gt;" 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;" parent="1" source="99" target="105" edge="1"><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&lt;br&gt;&lt;b&gt;FFT2DMPIWithFFTWMPI2D&lt;/b&gt;" 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;" parent="1" source="100" target="99" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="100" value="fft2dmpi_with_fftw1d.pxd&lt;br&gt;&lt;b&gt;FFT2DMPIWithFFTWMPI2D&lt;/b&gt;" 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;" parent="1" source="105" target="135" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="105" value="Generate C++ code&lt;br&gt;&lt;b&gt;purepymake.py&lt;/b&gt; (&lt;b&gt;cython)&lt;/b&gt;" 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;" parent="1" source="135" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="650" y="450" as="targetPoint"/></mxGeometry></mxCell><mxCell id="135" value="Compile objects and build python extensions&lt;br&gt;&lt;b&gt;purepymake.py (cython&lt;/b&gt; / &lt;b&gt;mpicxx&lt;/b&gt;)" 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="&lt;font face=&quot;Helvetica&quot;&gt;Install fluidfft&lt;/font&gt;&lt;br&gt;&lt;b&gt;setup.py&lt;/b&gt;" 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="452" width="270" height="28" as="geometry"/></mxCell><mxCell id="177" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;" parent="1" source="168" target="170" edge="1"><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;" parent="1" vertex="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;" parent="1" source="170" target="173" edge="1"><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=Helvetica;strokeWidth=1;" parent="1" vertex="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;" parent="1" vertex="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;" parent="1" source="178" target="168" edge="1"><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;" parent="1" vertex="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;" parent="1" vertex="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;" parent="1" vertex="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;" parent="1" source="203" edge="1"><mxGeometry relative="1" as="geometry"><mxPoint x="269" y="519.9999999999999" as="targetPoint"/></mxGeometry></mxCell><mxCell id="203" value="Compile objects and build executable &lt;b&gt;(cython&lt;/b&gt; / &lt;b&gt;mpicxx&lt;/b&gt;)" style="shape=process;whiteSpace=wrap;html=1;fillColor=none;fontFamily=Helvetica;strokeWidth=1;rounded=1;direction=east;" parent="1" vertex="1"><mxGeometry x="158" y="455" width="222" height="47" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
<mxfile userAgent="Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0" version="8.5.12" editor="www.draw.io" type="device"><diagram id="32c47e48-bc75-56f3-0806-9a032b4a9c3c" name="Page-1">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</diagram></mxfile>
\ No newline at end of file
File added
This diff is collapsed.
<mxGraphModel dx="424" dy="410" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="600" background="#ffffff"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="6" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;dashed=1;" edge="1" parent="1" source="2" target="5"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;dashed=1;" edge="1" parent="1" source="2" target="7"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;dashed=1;" edge="1" parent="1" source="2" target="8"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="2" value="BaseFFT" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="491" y="30" width="100" height="40" as="geometry"/></mxCell><mxCell id="13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;jettySize=auto;orthogonalLoop=1;dashed=1;" edge="1" parent="1" source="5" target="11"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0.5;entryY=0;jettySize=auto;orthogonalLoop=1;dashed=1;" edge="1" parent="1" source="5" target="12"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="5" value="BaseFFTMPI" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="491" y="150" width="100" height="40" as="geometry"/></mxCell><mxCell id="24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;dashed=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="7" target="23"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;dashed=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="7" target="21"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;dashed=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="7" target="20"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="7" value="BaseFFT2D" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="307" y="150" width="100" height="40" as="geometry"/></mxCell><mxCell id="27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0.5;entryY=0;dashed=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="8" target="16"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;dashed=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="8" target="15"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="8" value="BaseFFT3D" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="671" y="150" width="100" height="40" as="geometry"/></mxCell><mxCell id="36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0.5;entryY=0;dashed=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="11" target="32"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="471" y="410"/><mxPoint x="87" y="410"/></Array></mxGeometry></mxCell><mxCell id="37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;dashed=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="11" target="18"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="471" y="410"/><mxPoint x="262" y="410"/></Array></mxGeometry></mxCell><mxCell id="11" value="BaseFFT2DMPI" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="411" y="250" width="120" height="40" as="geometry"/></mxCell><mxCell id="38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;dashed=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="12" target="31"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="637" y="410"/><mxPoint x="487" y="410"/></Array></mxGeometry></mxCell><mxCell id="39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;dashed=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="12" target="35"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="637" y="410"/><mxPoint x="661" y="410"/></Array></mxGeometry></mxCell><mxCell id="40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;dashed=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="12" target="19"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="637" y="410"/><mxPoint x="831" y="410"/></Array></mxGeometry></mxCell><mxCell id="41" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;dashed=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="12" target="34"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="637" y="410"/><mxPoint x="1001" y="410"/></Array></mxGeometry></mxCell><mxCell id="12" value="BaseFFT3DMPI" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="577" y="250" width="120" height="40" as="geometry"/></mxCell><mxCell id="15" value="FFT3DWithCUFFT" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#CC99FF;strokeColor=#9933FF;" vertex="1" parent="1"><mxGeometry x="961" y="340" width="120" height="40" as="geometry"/></mxCell><mxCell id="16" value="FFT3DWithFFTW3D" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#EA6B66;" vertex="1" parent="1"><mxGeometry x="818" y="340" width="120" height="40" as="geometry"/></mxCell><mxCell id="18" value="FFT2DMPIWithFFTWMPI2D" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#B9E0A5;strokeColor=#97D077;" vertex="1" parent="1"><mxGeometry x="182" y="460" width="160" height="40" as="geometry"/></mxCell><mxCell id="19" value="FFT3DMPIWithPFFT" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#B9E0A5;strokeColor=#97D077;" vertex="1" parent="1"><mxGeometry x="751" y="459" width="160" height="40" as="geometry"/></mxCell><mxCell id="20" value="FFT2DWithCUFFT" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#CC99FF;strokeColor=#9933FF;" vertex="1" parent="1"><mxGeometry x="297" y="340" width="120" height="40" as="geometry"/></mxCell><mxCell id="21" value="FFT2DWithFFTW2D" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#EA6B66;" vertex="1" parent="1"><mxGeometry x="153" y="340" width="120" height="40" as="geometry"/></mxCell><mxCell id="23" value="FFT2DWithFFTW1D" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#EA6B66;" vertex="1" parent="1"><mxGeometry x="7" y="340" width="120" height="40" as="geometry"/></mxCell><mxCell id="29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.25;exitY=1;entryX=0.25;entryY=1;dashed=1;jettySize=auto;orthogonalLoop=1;" edge="1" parent="1" source="19" target="19"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="31" value="FFT3DMPIWithFFTWMPI3D" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#B9E0A5;strokeColor=#97D077;" vertex="1" parent="1"><mxGeometry x="407" y="460" width="160" height="40" as="geometry"/></mxCell><mxCell id="32" value="FFT2DMPIWithFFTW1D" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#B9E0A5;strokeColor=#97D077;" vertex="1" parent="1"><mxGeometry x="7" y="460" width="160" height="40" as="geometry"/></mxCell><mxCell id="33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.25;exitY=1;entryX=0.25;entryY=1;dashed=1;jettySize=auto;orthogonalLoop=1;" edge="1" source="34" target="34" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="34" value="FFT3DMPIWithP3DFFT" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#B9E0A5;strokeColor=#97D077;" vertex="1" parent="1"><mxGeometry x="921" y="459" width="160" height="40" as="geometry"/></mxCell><mxCell id="35" value="FFT3DMPIWithFFTW1D" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#B9E0A5;strokeColor=#97D077;" vertex="1" parent="1"><mxGeometry x="581" y="459" width="160" height="40" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
File added
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1075px" height="480px" version="1.1"><defs/><g transform="translate(0.5,0.5)"><path d="M 534 40 L 534 113.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 534 118.88 L 530.5 111.88 L 534 113.63 L 537.5 111.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 484 20 L 351 20 L 351 113.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 351 118.88 L 347.5 111.88 L 351 113.63 L 354.5 111.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 584 20 L 715 20 L 715 113.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 715 118.88 L 711.5 111.88 L 715 113.63 L 718.5 111.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="484" y="0" width="100" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(507.5,12.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="50" 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: 51px; 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;">BaseFFT</div></div></foreignObject><text x="25" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">BaseFFT</text></switch></g><path d="M 535 160 L 535 190 L 465 190 L 465 213.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 465 218.88 L 461.5 211.88 L 465 213.63 L 468.5 211.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 535 160 L 535 190 L 631 190 L 631 213.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 631 218.88 L 627.5 211.88 L 631 213.63 L 634.5 211.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="484" y="120" width="100" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(497.5,132.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="71" 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: 72px; 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;">BaseFFTMPI</div></div></foreignObject><text x="36" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">BaseFFTMPI</text></switch></g><path d="M 300 140 L 61 140 L 61 303.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 61 308.88 L 57.5 301.88 L 61 303.63 L 64.5 301.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 300 140 L 207 140 L 207 303.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 207 308.88 L 203.5 301.88 L 207 303.63 L 210.5 301.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 350 160 L 350 303.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 350 308.88 L 346.5 301.88 L 350 303.63 L 353.5 301.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="300" y="120" width="100" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(316.5,132.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="65" 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: 66px; 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;">BaseFFT2D</div></div></foreignObject><text x="33" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">BaseFFT2D</text></switch></g><path d="M 764 140 L 871 140 L 871 303.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 871 308.88 L 867.5 301.88 L 871 303.63 L 874.5 301.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 764 140 L 1015 140 L 1015 303.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 1015 308.88 L 1011.5 301.88 L 1015 303.63 L 1018.5 301.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="664" y="120" width="100" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(680.5,132.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="65" 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: 66px; 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;">BaseFFT3D</div></div></foreignObject><text x="33" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">BaseFFT3D</text></switch></g><path d="M 465 260 L 465 380 L 81 380 L 81 423.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 81 428.88 L 77.5 421.88 L 81 423.63 L 84.5 421.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 465 260 L 465 380 L 255 380 L 255 423.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 255 428.88 L 251.5 421.88 L 255 423.63 L 258.5 421.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="404" y="220" width="120" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(419.5,232.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="86" 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: 87px; 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;">BaseFFT2DMPI</div></div></foreignObject><text x="43" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">BaseFFT2DMPI</text></switch></g><path d="M 631 260 L 631 380 L 481 380 L 481 423.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 481 428.88 L 477.5 421.88 L 481 423.63 L 484.5 421.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 631 260 L 631 380 L 655 380 L 655 422.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 655 427.88 L 651.5 420.88 L 655 422.63 L 658.5 420.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 631 260 L 631 380 L 825 380 L 825 422.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 825 427.88 L 821.5 420.88 L 825 422.63 L 828.5 420.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 631 260 L 631 380 L 995 380 L 995 422.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 995 427.88 L 991.5 420.88 L 995 422.63 L 998.5 420.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="570" y="220" width="120" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(585.5,232.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="86" 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: 87px; 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;">BaseFFT3DMPI</div></div></foreignObject><text x="43" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">BaseFFT3DMPI</text></switch></g><rect x="954" y="310" width="120" height="40" rx="6" ry="6" fill="#cc99ff" stroke="#9933ff" pointer-events="none"/><g transform="translate(962.5,322.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="101" 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: 102px; 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;">FFT3DWithCUFFT</div></div></foreignObject><text x="51" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">FFT3DWithCUFFT</text></switch></g><rect x="811" y="310" width="120" height="40" rx="6" ry="6" fill="#f8cecc" stroke="#ea6b66" pointer-events="none"/><g transform="translate(814.5,322.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="111" 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: 112px; 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;">FFT3DWithFFTW3D</div></div></foreignObject><text x="56" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">FFT3DWithFFTW3D</text></switch></g><rect x="175" y="430" width="160" height="40" rx="6" ry="6" fill="#b9e0a5" stroke="#97d077" pointer-events="none"/><g transform="translate(176.5,442.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="154" 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: 155px; 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;">FFT2DMPIWithFFTWMPI2D</div></div></foreignObject><text x="77" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">FFT2DMPIWithFFTWMPI2D</text></switch></g><rect x="744" y="429" width="160" height="40" rx="6" ry="6" fill="#b9e0a5" stroke="#97d077" pointer-events="none"/><g transform="translate(765.5,441.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="114" 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: 115px; 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;">FFT3DMPIWithPFFT</div></div></foreignObject><text x="57" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">FFT3DMPIWithPFFT</text></switch></g><rect x="290" y="310" width="120" height="40" rx="6" ry="6" fill="#cc99ff" stroke="#9933ff" pointer-events="none"/><g transform="translate(298.5,322.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="101" 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: 102px; 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;">FFT2DWithCUFFT</div></div></foreignObject><text x="51" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">FFT2DWithCUFFT</text></switch></g><rect x="146" y="310" width="120" height="40" rx="6" ry="6" fill="#f8cecc" stroke="#ea6b66" pointer-events="none"/><g transform="translate(149.5,322.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="111" 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: 112px; 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;">FFT2DWithFFTW2D</div></div></foreignObject><text x="56" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">FFT2DWithFFTW2D</text></switch></g><rect x="0" y="310" width="120" height="40" rx="6" ry="6" fill="#f8cecc" stroke="#ea6b66" pointer-events="none"/><g transform="translate(3.5,322.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="111" 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: 112px; 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;">FFT2DWithFFTW1D</div></div></foreignObject><text x="56" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">FFT2DWithFFTW1D</text></switch></g><path d="M 785 470 L 785 470" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 785 470 L 785 470 L 785 470 L 785 470 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="400" y="430" width="160" height="40" rx="6" ry="6" fill="#b9e0a5" stroke="#97d077" pointer-events="none"/><g transform="translate(401.5,442.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="154" 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: 155px; 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;">FFT3DMPIWithFFTWMPI3D</div></div></foreignObject><text x="77" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">FFT3DMPIWithFFTWMPI3D</text></switch></g><rect x="0" y="430" width="160" height="40" rx="6" ry="6" fill="#b9e0a5" stroke="#97d077" pointer-events="none"/><g transform="translate(12.5,442.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="132" 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: 133px; 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;">FFT2DMPIWithFFTW1D</div></div></foreignObject><text x="66" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">FFT2DMPIWithFFTW1D</text></switch></g><path d="M 955 470 L 955 470" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 955 470 L 955 470 L 955 470 L 955 470 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="914" y="429" width="160" height="40" rx="6" ry="6" fill="#b9e0a5" stroke="#97d077" pointer-events="none"/><g transform="translate(928.5,441.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="129" 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: 130px; 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;">FFT3DMPIWithP3DFFT</div></div></foreignObject><text x="65" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">FFT3DMPIWithP3DFFT</text></switch></g><rect x="574" y="429" width="160" height="40" rx="6" ry="6" fill="#b9e0a5" stroke="#97d077" pointer-events="none"/><g transform="translate(586.5,441.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="132" 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: 133px; 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;">FFT3DMPIWithFFTW1D</div></div></foreignObject><text x="66" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">FFT3DMPIWithFFTW1D</text></switch></g></g></svg>
\ No newline at end of file
......@@ -124,7 +124,7 @@
\begin{outline}
\1 sequential FFT, using:
\2 \pack{numpy.fft} and \pack{scipy.fftpack} which are essentially
\2 \pack{numpy.fft} and \pack{scipy.fftpack} which are essentially
C and Fortran extensions for \libpack{FFTPACK} library.
\2 \pack{pyFFTW} which wraps FFTW library and provides interfaces similar to
the \pack{numpy.fft} and \pack{scipy.fftpack} implementations.
......@@ -151,7 +151,7 @@
% \item No GPU-based FFT,
\item No effort so far to consolidate all possible FFT libraries, both
sequential, MPI and GPGPU based under a single package with similar syntax.
\item Quite complicated even for the simplest use case scenarios. To
understand how to use them, a novice user has to read at least the FFTW
documentation.
......@@ -155,6 +155,6 @@
\item Quite complicated even for the simplest use case scenarios. To
understand how to use them, a novice user has to read at least the FFTW
documentation.
\item No benchmarks between libraries and between the Python solutions and
solutions based only on a compiled language (as C, C++ or Fortran).
......@@ -159,6 +159,6 @@
\item No benchmarks between libraries and between the Python solutions and
solutions based only on a compiled language (as C, C++ or Fortran).
\item Provides just the FFT and inverse FFT functions, no assosciated
linear algebra operators.
......@@ -266,7 +266,7 @@
%
This is in contrast with the approach taken by \pack{numpy.fft} and \pack
{scipy.fftpack}, wherein the user has to figure out from the documentation the
procedure to design the input values and to use the return values provided to the
procedure to design the input values and to use the return values while using the
FFT and inverse FFT functions. The Python API wraps all the functionalities of its
C++ counterpart and offers a more richer experience through an accompanying
operator class.
......@@ -285,7 +285,7 @@
\frac{1}{\sqrt{2\pi}}
\int_0^{2\pi}\int_0^{2\pi}
i\mathbf{k}
\hat u(k_x,k_y) \exp(-ik_x x - ik_y y) dk_x dk_y
\hat u(k_x,k_y) \exp(-ik_x x - ik_y y) dk_x dk_y
\end{align*}
where $k_x$, $k_y$ represent the wavenumber corresponding to x- and y-directions,
......@@ -311,11 +311,11 @@
A parallelized version of the above code will work out of the box, simply by
replacing the FFT class with an MPI-based FFT class, for eg.
\codeinline{fft2d.with\_fftwmpi2d}. Even if one finds the available methods
in the operator class to be lacking one can use, for instance use the
wavenumber arrays, \codeinline{oper.KX} and \codeinline{oper.KY} to create a
new function. Arguably, a similar implementation with other available
packages would require the know-how on how FFT arrays are allocated in the
memory, normalized, decomposed in parallel and so on. A more detailed
in the operator class to be lacking one can inherit the class and create a
new method, for instance using the wavenumber arrays, \codeinline{oper.KX}
and \codeinline{oper.KY}. Arguably, a similar implementation with other
available packages would require the know-how on how FFT arrays are allocated
in the memory, normalized, decomposed in parallel and so on. A more detailed
introduction on how to use \fluidpack{fft} and available functions can be
found in the
tutorials\footnote{\url{https://fluidfft.readthedocs.io/en/latest/tutorials.html}}.
......@@ -328,4 +328,16 @@
names. This forms an API with which, a developer can easily switch between
FFT libraries, and not be dependent on simply one implementation.
\begin{figure}[htp]
\centering
\includegraphics[width=\linewidth]{Pyfig/fig_classes}
\caption{
Class hierarchy demonstrating object-oriented approach. The sequential classes
are shown in red, the CUDA-based classes in magenta and the MPI-based classes
in green.
}
\label{fig:classes}
\end{figure}
Layers:
......@@ -331,6 +343,5 @@
Layers:
\begin{itemize}
\item One C++ class per method forming a hierarchy of C++ classes.
......@@ -333,10 +344,7 @@
\begin{itemize}
\item One C++ class per method forming a hierarchy of C++ classes.
Todo: We need a nice figure of this hierarchy (see the Doxygen
documentation)...
\item Cython wrappers of the C++ classes with their unittest functions. The
Cython \codeinline{.pyx} and \codeinline{.pxd} files are produced from
template files (specialized for the 2d and 3d cases) using the template
......@@ -354,6 +362,19 @@
\end{itemize}
\begin{figure}[htp]
\centering
\includegraphics[width=\linewidth]{Pyfig/fig_build_use}
\caption{Flowchart illustrating how the C++ and Python API are built and used
for one particular class, viz. \codeinline{FFT2DMPIWithFFTWMPI2D}. The dotted
arrows in C++ part stand for include statements, demonstrating the class
hierarchy and in the Python part indicate how different codes are imported. On
the bottom, a smaller flowchart demonstrates how to use the API by writing user
code.
}
\label{fig:build_use}
\end{figure}
\subsection*{Performance}
\subsubsection*{Scalability analysis using \codeinline{fluidfft-bench}}
......@@ -486,7 +507,7 @@
\textcolor{blue}{Please include minimum version compatibility.}
Windows and any POSIX based OS, such as GNU/Linux and Mac OS X
Windows and any POSIX based OS, such as GNU/Linux and Mac OS X
\section*{Programming language}
......@@ -600,7 +621,7 @@
% where available, citing them in the text with a number in square brackets,
% e.g.}
\bibliographystyle{../agsm}
\bibliographystyle{../agsm}
\bibliography{../bib}
\rule{\textwidth}{1pt}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment