-end</code></pre><p>All parameters are put into keyword arguments that have to match as well. We describe the keyword arguments in more detail in the overview page. Using the same plan interface allows to load several NFFT libraries simultaneously and exchange the constructor dynamically by storing the constructor in a function object. This is how the unit tests of <code>NFFT.jl</code> run.</p><p>Additionally, to the type-specific constructor one can provide the factory</p><pre><code class="language-none">plan_nfft(Q::Type, k::Matrix{T}, N::NTuple{D,Int}; kargs...) where {D}</code></pre><p>where <code>Q</code> is the Array type, e.g. <code>Array</code>. The reason to require the array type is, that this allows for GPU implementations, which would use for instance <code>CuArray</code> here.</p><p>The package <code>AbstractNFFTs</code> provides a convenient constructor</p><pre><code class="language-none">plan_nfft(k::Matrix{T}, N::NTuple{D,Int}; kargs...) where {D}</code></pre><p>defaulting to the <code>Array</code> type.</p><div class="admonition is-info"><header class="admonition-header">Note</header><div class="admonition-body"><p>Different packages implementing <code>plan_nfft</code> will conflict if the same <code>Q</code> is implemented. In case of <code>NFFT.jl</code> and <code>CuNFFT.jl</code> there is no conflict since the array type is different.</p></div></div><h2 id="Derived-Interface"><a class="docs-heading-anchor" href="#Derived-Interface">Derived Interface</a><a id="Derived-Interface-1"></a><a class="docs-heading-anchor-permalink" href="#Derived-Interface" title="Permalink"></a></h2><p>Based on the core low-level interface that an <code>AbstractNFFTPlan</code> needs to provide, the package <code>AbstractNFFT.jl</code> also provides high-level functions like <code>*</code>, <code>nfft</code>, and <code>nfft_adjoint</code>, which internally use the low-level interface. Thus, the implementation of high-level function is shared among all <code>AbstractNFFT.jl</code> implementations.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../tools/">« Tools</a><a class="docs-footer-nextpage" href="../api/">API »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Thursday 3 April 2025 09:13">Thursday 3 April 2025</span>. Using Julia version 1.11.4.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
0 commit comments