FNFT
Classes | Enumerations
Data types
Collaboration diagram for Data types:

Classes

struct  fnft_kdvv_opts_t
 Stores additional options for the routine fnft_kdvv. More...
 
struct  fnft_nsep_opts_t
 Stores additional options for the routine fnft_nsep. More...
 
struct  fnft_nsev_opts_t
 Stores additional options for the routine fnft_nsev. More...
 
struct  fnft_nsev_inverse_opts_t
 Stores additional options for the routine fnft_nsev_inverse. More...
 

Enumerations

enum  fnft_kdv_discretization_t {
  fnft_kdv_discretization_2SPLIT1A, fnft_kdv_discretization_2SPLIT1B, fnft_kdv_discretization_2SPLIT2A, fnft_kdv_discretization_2SPLIT2B,
  fnft_kdv_discretization_2SPLIT2S, fnft_kdv_discretization_2SPLIT3A, fnft_kdv_discretization_2SPLIT3B, fnft_kdv_discretization_2SPLIT3S,
  fnft_kdv_discretization_2SPLIT4A, fnft_kdv_discretization_2SPLIT4B, fnft_kdv_discretization_2SPLIT5A, fnft_kdv_discretization_2SPLIT5B,
  fnft_kdv_discretization_2SPLIT6A, fnft_kdv_discretization_2SPLIT6B, fnft_kdv_discretization_2SPLIT7A, fnft_kdv_discretization_2SPLIT7B,
  fnft_kdv_discretization_2SPLIT8A, fnft_kdv_discretization_2SPLIT8B, fnft_kdv_discretization_BO
}
 Enum that specifies discretizations used to compute nonlinear Fourier transforms for the Korteweg-de Vries equation. More...
 
enum  fnft_nse_discretization_t {
  fnft_nse_discretization_2SPLIT2_MODAL, fnft_nse_discretization_BO, fnft_nse_discretization_2SPLIT1A, fnft_nse_discretization_2SPLIT1B,
  fnft_nse_discretization_2SPLIT2A, fnft_nse_discretization_2SPLIT2B, fnft_nse_discretization_2SPLIT2S, fnft_nse_discretization_2SPLIT3A,
  fnft_nse_discretization_2SPLIT3B, fnft_nse_discretization_2SPLIT3S, fnft_nse_discretization_2SPLIT4A, fnft_nse_discretization_2SPLIT4B,
  fnft_nse_discretization_2SPLIT5A, fnft_nse_discretization_2SPLIT5B, fnft_nse_discretization_2SPLIT6A, fnft_nse_discretization_2SPLIT6B,
  fnft_nse_discretization_2SPLIT7A, fnft_nse_discretization_2SPLIT7B, fnft_nse_discretization_2SPLIT8A, fnft_nse_discretization_2SPLIT8B
}
 Enum that specifies discretizations used to compute nonlinear Fourier transforms for the Nonlinear Schroedinger Equation. More...
 
enum  fnft_nsep_loc_t { fnft_nsep_loc_SUBSAMPLE_AND_REFINE, fnft_nsep_loc_GRIDSEARCH, fnft_nsep_loc_MIXED }
 
enum  fnft_nsep_filt_t { fnft_nsep_filt_NONE, fnft_nsep_filt_MANUAL, fnft_nsep_filt_AUTO }
 
enum  fnft_nsev_bsfilt_t { fnft_nsev_bsfilt_NONE, fnft_nsev_bsfilt_BASIC, fnft_nsev_bsfilt_FULL }
 
enum  fnft_nsev_bsloc_t { fnft_nsev_bsloc_FAST_EIGENVALUE, fnft_nsev_bsloc_NEWTON, fnft_nsev_bsloc_SUBSAMPLE_AND_REFINE }
 
enum  fnft_nsev_dstype_t { fnft_nsev_dstype_NORMING_CONSTANTS, fnft_nsev_dstype_RESIDUES, fnft_nsev_dstype_BOTH }
 
enum  fnft_nsev_cstype_t { fnft_nsev_cstype_REFLECTION_COEFFICIENT, fnft_nsev_cstype_AB, fnft_nsev_cstype_BOTH }
 
enum  fnft_nsev_inverse_cstype_t { fnft_nsev_inverse_cstype_REFLECTION_COEFFICIENT, fnft_nsev_inverse_cstype_B_OF_XI, fnft_nsev_inverse_cstype_B_OF_TAU }
 
enum  fnft_nsev_inverse_dstype_t { fnft_nsev_inverse_dstype_NORMING_CONSTANTS, fnft_nsev_inverse_dstype_RESIDUES }
 
enum  fnft_nsev_inverse_csmethod_t { fnft_nsev_inverse_csmethod_DEFAULT, fnft_nsev_inverse_csmethod_TFMATRIX_CONTAINS_REFL_COEFF, fnft_nsev_inverse_csmethod_TFMATRIX_CONTAINS_AB_FROM_ITER, fnft_nsev_inverse_csmethod_USE_SEED_POTENTIAL_INSTEAD }
 
enum  fnft__akns_discretization_t {
  fnft__akns_discretization_2SPLIT2_MODAL, fnft__akns_discretization_2SPLIT1A, fnft__akns_discretization_2SPLIT1B, fnft__akns_discretization_2SPLIT2A,
  fnft__akns_discretization_2SPLIT2B, fnft__akns_discretization_2SPLIT2S, fnft__akns_discretization_2SPLIT3A, fnft__akns_discretization_2SPLIT3B,
  fnft__akns_discretization_2SPLIT3S, fnft__akns_discretization_2SPLIT4A, fnft__akns_discretization_2SPLIT4B, fnft__akns_discretization_2SPLIT5A,
  fnft__akns_discretization_2SPLIT5B, fnft__akns_discretization_2SPLIT6A, fnft__akns_discretization_2SPLIT6B, fnft__akns_discretization_2SPLIT7A,
  fnft__akns_discretization_2SPLIT7B, fnft__akns_discretization_2SPLIT8A, fnft__akns_discretization_2SPLIT8B, fnft__akns_discretization_BO
}
 Enum that specifies discretizations used to compute nonlinear Fourier transforms of systems that fit the AKNS model. More...
 

Detailed Description

Enumeration Type Documentation

◆ fnft__akns_discretization_t

Enum that specifies discretizations used to compute nonlinear Fourier transforms of systems that fit the AKNS model.

These discretizations are based on exponential spliting schemes, defined in Prins and Wahls, "Higher order exponential splittings for the fast non-linear Fourier transform of the KdV equation," to appear in Proc. ICASSP 2018.
fnft__akns_discretization_2SPLIT2_MODAL the normalized Ablowitz-Ladik discretization Eq. 25 in Wahls and Vaibhav" Fast Inverse Nonlinear Fourier Transforms for Continuous Spectra of Zakharov-Shabat Type ," Unpublished.
All discretizations have the notation xSPLITyz, where x is the error order of unsplit scheme and y is the order of accuracy of splitting scheme. z is type of splitting and can be A, B or S, with A standing for schemes implemented as defined in Prins and Wahls, " Higher order exponential splittings for the fast non-linear Fourier transform of the KdV equation," to appear in Proc. ICASSP 2018. B type of splitting are the same as 'A' with the positions of the two terms in the splitting interchanged. 'S' is for splittings not mentioned in above reference.
-2S is from G. Strang," Accurate partial difference methods I: Linear Cauchy problems," in Archive for Rational Mechanics and Analysis, 12(1), 392-402, Jan 1963. It is also known as the Symmetric Weighted Sequential Splitting scheme (SWSS).
-3S is from Eq. 14.4 in S. Brustein and A. Mirin," Third Order Difference Methods for Hyperbolic Equations," J. Comput. Phys., 5, 547-571, 1970.
fnft__akns_discretization_BO has been taken from Boffetta and Osborne, " Computation of the direct scattering transform for the nonlinear Schroedinger equation," J. Comput. Phys. 102(2), 1992. It is supported by fnft__nse_scatter.h.
In general, discretizations with a lower degree are faster, while those with a highter order of accuracy are more accurate. Therefore, the best choice is normally among -2A, -2B, -2S -4B, -6B and -8B. The choice between these is a trade-off between speed and accuracy.

fnft__akns_discretization_2SPLIT1A: Degree = 1, Order of accuracy = 1
fnft__akns_discretization_2SPLIT1B: Degree = 1, Order of accuracy = 1
fnft__akns_discretization_2SPLIT2A: Degree = 1, Order of accuracy = 2
fnft__akns_discretization_2SPLIT2B: Degree = 1, Order of accuracy = 2
fnft__akns_discretization_2SPLIT2S: Degree = 1, Order of accuracy = 2
fnft__akns_discretization_2SPLIT3A: Degree = 3, Order of accuracy = 3
fnft__akns_discretization_2SPLIT3B: Degree = 3, Order of accuracy = 3
fnft__akns_discretization_2SPLIT3S: Degree = 2, Order of accuracy = 3
fnft__akns_discretization_2SPLIT4A: Degree = 4, Order of accuracy = 4
fnft__akns_discretization_2SPLIT4B: Degree = 2, Order of accuracy = 4
fnft__akns_discretization_2SPLIT5A: Degree = 15, Order of accuracy = 5
fnft__akns_discretization_2SPLIT5B: Degree = 15, Order of accuracy = 5
fnft__akns_discretization_2SPLIT6A: Degree = 12, Order of accuracy = 6
fnft__akns_discretization_2SPLIT6B: Degree = 6, Order of accuracy = 6
fnft__akns_discretization_2SPLIT7A: Degree = 105, Order of accuracy = 7
fnft__akns_discretization_2SPLIT7B: Degree = 105, Order of accuracy = 7
fnft__akns_discretization_2SPLIT8A: Degree = 24, Order of accuracy = 8
fnft__akns_discretization_2SPLIT8B: Degree = 12, Order of accuracy = 8

Used in fnft__akns_fscatter and fnft__akns_scatter.h .

◆ fnft_kdv_discretization_t

Enum that specifies discretizations used to compute nonlinear Fourier transforms for the Korteweg-de Vries equation.

These discretizations are based on exponential spliting schemes, defined in Prins and Wahls, "Higher order exponential splittings for the fast non-linear Fourier transform of the KdV equation," to appear in Proc. ICASSP 2018.
All discretizations have the notation xSPLITyz, where x is the error order of unsplit scheme and y is the order of accuracy of splitting scheme. z is type of splitting and can be A, B or S, with A standing for schemes implemented as defined in Prins and Wahls, " Higher order exponential splittings for the fast non-linear Fourier transform of the KdV equation," to appear in Proc. ICASSP 2018. B type of splitting are the same as 'A' with the positions of the two terms in the splitting interchanged. 'S' is for splittings not mentioned in above reference.
-2S is from G. Strang," Accurate partial difference methods I: Linear Cauchy problems," in Archive for Rational Mechanics and Analysis, 12(1), 392-402, Jan 1963. It is also known as the Symmetric Weighted Sequential Splitting scheme (SWSS).
-3S is from Eq. 14.4 in S. Brustein and A. Mirin," Third Order Difference Methods for Hyperbolic Equations," J. Comput. Phys., 5, 547-571, 1970.
fnft_kdv_discretization_BO has been taken from Boffetta and Osborne, " Computation of the direct scattering transform for the nonlinear Schroedinger equation," J. Comput. Phys. 102(2), 1992. It is supported by fnft__kdv_scatter.h.
In general, discretizations with a lower degree are faster, while those with a highter order of accuracy are more accurate. Therefore, the best choice is normally among -2A, -2B, -2S -4B, -6B and -8B. The choice between these is a trade-off between speed and accuracy.

fnft_kdv_discretization_2SPLIT1A: Degree = 1, Order of accuracy = 1
fnft_kdv_discretization_2SPLIT1B: Degree = 1, Order of accuracy = 1
fnft_kdv_discretization_2SPLIT2A: Degree = 1, Order of accuracy = 2
fnft_kdv_discretization_2SPLIT2B: Degree = 1, Order of accuracy = 2
fnft_kdv_discretization_2SPLIT2S: Degree = 1, Order of accuracy = 2
fnft_kdv_discretization_2SPLIT3A: Degree = 3, Order of accuracy = 3
fnft_kdv_discretization_2SPLIT3B: Degree = 3, Order of accuracy = 3
fnft_kdv_discretization_2SPLIT3S: Degree = 2, Order of accuracy = 3
fnft_kdv_discretization_2SPLIT4A: Degree = 4, Order of accuracy = 4
fnft_kdv_discretization_2SPLIT4B: Degree = 2, Order of accuracy = 4
fnft_kdv_discretization_2SPLIT5A: Degree = 15, Order of accuracy = 5
fnft_kdv_discretization_2SPLIT5B: Degree = 15, Order of accuracy = 5
fnft_kdv_discretization_2SPLIT6A: Degree = 12, Order of accuracy = 6
fnft_kdv_discretization_2SPLIT6B: Degree = 6, Order of accuracy = 6
fnft_kdv_discretization_2SPLIT7A: Degree = 105, Order of accuracy = 7
fnft_kdv_discretization_2SPLIT7B: Degree = 105, Order of accuracy = 7
fnft_kdv_discretization_2SPLIT8A: Degree = 24, Order of accuracy = 8
fnft_kdv_discretization_2SPLIT8B: Degree = 12, Order of accuracy = 8

Used in fnft_kdvv_opts_t.

◆ fnft_nse_discretization_t

Enum that specifies discretizations used to compute nonlinear Fourier transforms for the Nonlinear Schroedinger Equation.

These discretizations are based on exponential spliting schemes, defined in Prins and Wahls, "Higher order exponential splittings for the fast non-linear Fourier transform of the KdV equation," to appear in Proc. ICASSP 2018.
fnft_nse_discretization_2SPLIT2_MODAL the normalized Ablowitz-Ladik discretization Eq. 25 in Wahls and Vaibhav" Fast Inverse Nonlinear Fourier Transforms for Continuous Spectra of Zakharov-Shabat Type ," Unpublished.
All discretizations have the notation xSPLITyz, where x is the error order of unsplit scheme and y is the order of accuracy of splitting scheme. z is type of splitting and can be A, B or S, with A standing for schemes implemented as defined in Prins and Wahls, " Higher order exponential splittings for the fast non-linear Fourier transform of the KdV equation," to appear in Proc. ICASSP 2018. B type of splitting are the same as 'A' with the positions of the two terms in the splitting interchanged. 'S' is for splittings not mentioned in above reference.
-2S is from G. Strang," Accurate partial difference methods I: Linear Cauchy problems," in Archive for Rational Mechanics and Analysis, 12(1), 392-402, Jan 1963. It is also known as the Symmetric Weighted Sequential Splitting scheme (SWSS).
-3S is from Eq. 14.4 in S. Brustein and A. Mirin," Third Order Difference Methods for Hyperbolic Equations," J. Comput. Phys., 5, 547-571, 1970.
fnft_nse_discretization_BO has been taken from Boffetta and Osborne, " Computation of the direct scattering transform for the nonlinear Schroedinger equation," J. Comput. Phys. 102(2), 1992. It is supported by fnft__nse_scatter.h.
In general, discretizations with a lower degree are faster, while those with a highter order of accuracy are more accurate. Therefore, the best choice is normally among -2A, -2B, -2S -4B, -6B and -8B. The choice between these is a trade-off between speed and accuracy.

fnft_nse_discretization_2SPLIT1A: Degree = 1, Order of accuracy = 1
fnft_nse_discretization_2SPLIT1B: Degree = 1, Order of accuracy = 1
fnft_nse_discretization_2SPLIT2A: Degree = 1, Order of accuracy = 2
fnft_nse_discretization_2SPLIT2B: Degree = 1, Order of accuracy = 2
fnft_nse_discretization_2SPLIT2S: Degree = 1, Order of accuracy = 2
fnft_nse_discretization_2SPLIT2_MODAL: Degree = 1, Order of accuracy = 2
fnft_nse_discretization_2SPLIT3A: Degree = 3, Order of accuracy = 3
fnft_nse_discretization_2SPLIT3B: Degree = 3, Order of accuracy = 3
fnft_nse_discretization_2SPLIT3S: Degree = 2, Order of accuracy = 3
fnft_nse_discretization_2SPLIT4A: Degree = 4, Order of accuracy = 4
fnft_nse_discretization_2SPLIT4B: Degree = 2, Order of accuracy = 4
fnft_nse_discretization_2SPLIT5A: Degree = 15, Order of accuracy = 5
fnft_nse_discretization_2SPLIT5B: Degree = 15, Order of accuracy = 5
fnft_nse_discretization_2SPLIT6A: Degree = 12, Order of accuracy = 6
fnft_nse_discretization_2SPLIT6B: Degree = 6, Order of accuracy = 6
fnft_nse_discretization_2SPLIT7A: Degree = 105, Order of accuracy = 7
fnft_nse_discretization_2SPLIT7B: Degree = 105, Order of accuracy = 7
fnft_nse_discretization_2SPLIT8A: Degree = 24, Order of accuracy = 8
fnft_nse_discretization_2SPLIT8B: Degree = 12, Order of accuracy = 8

Used in fnft_nsev_opts_t, fnft_nsep_opts_t and fnft_nsev_inverse_opts_t.

◆ fnft_nsep_filt_t

Enum that controls how spectrum is filtered. Used in fnft_nsep_opts_t.

fnft_nsep_opts_filt_NONE: No filtering.

fnft_nsep_opts_filt_MANUAL: Only points within the specified fnft_nsep_opts_t::bounding_box are kept.

fnft_nsep_opts_filt_AUTO: As above, but the boundary box is chosen by the routine.

◆ fnft_nsep_loc_t

◆ fnft_nsev_bsfilt_t

Enum that specifies how the bound states are filtered. Used in fnft_nsev_opts_t.

fnft_nsev_bsfilt_NONE: All detected roots of \( a(\lambda) \) are returned.

fnft_nsev_bsfilt_BASIC: Only roots in the upper halfplane are returned and roots very close to each other are merged.

fnft_nsev_bsfilt_FULL: Bound states in physically implausible regions are furthermore rejected.

◆ fnft_nsev_bsloc_t

Enum that specifies how the bound states are localized. Used in fnft_nsev_opts_t.

fnft_nsev_bsloc_FAST_EIGENVALUE: A rooting finding routine due to Aurentz et al. (see https://arxiv.org/abs/1611.02435 and https://github.com/eiscor/eiscor) with \( O(D^2) \) complexity is used to detect the roots of \( a(\lambda) \). (Note: FNFT incorporates a development version of this routine as no release was available yet.) This method is relatively slow, but very reliable.

fnft_nsev_bsloc_NEWTON: Newton's method is used to refine a given set of initial guesses. The discretization used for the the refinement is the one due to Boffetta and Osborne. The number of iterations is specified through the field fnft_nsev_opts_t::niter. The array bound_states passed to fnft_nsev should contain the initial guesses and *K_ptr should specify the number of initial guesses. It is sufficient if bound_states and normconst_or_residues are of length *K_ptr in this case. This method can be very fast if good initial guesses for the bound states are available. The complexity is \( O(niter (*K\_ptr) D) \).

fnft_nsev_bsloc_SUBSAMPLE_AND_REFINE: This method offers a good compromise between the other two. The method automatically finds initial guesses for the NEWTON method by first applying the FAST_EIGENVALUE method to a subsampled version of the signal. Second these initial guesses are refined using the NEWTON method. The number of samples of the subsampled signal can be controlled using the parameter Dsub in fnft_nsev_opts_t. If Dsub=0, the routine automatically choosen this number such that the complexity is \( O(D \log^2 D + niter K D) \), where \( K \) is the number of bound states that survived the filtering operation of the initial call to the fnft_nsev_bsloc_FAST_EIGENVALUE method w.r.t. the subsampled signal. By choosing Dsub between 2 and D, the user can be request a different number of samples. Note that algorithm uses this value only as an indication.

◆ fnft_nsev_cstype_t

Enum that specifies the type of the continuous spectrum computed by the routine. Used in fnft_nsev_opts_t.

fnft_nsev_cstype_REFLECTION_COEFFICIENT: The array is filled with the values of \( b(\xi)/a(\xi) \) on the grid specified in the description of fnft_nsev.

fnft_nsev_cstype_AB: The array is filled with the values of \(a(\xi)\) on the grid specified in the description of fnft_nsev, followed by the values of \( b(\xi) \) on the same grid. Note that the length of the array contspec passed by the user has to be 2*M in this case.

fnft_nsev_cstype_BOTH: The first M values of the array are filled with the values returned by the REFLECTION_COEFFICIENT method. They are followed by the 2*M values returned by the AB method. Note that the length of the array passed by the user has to be 3*M in this case.

◆ fnft_nsev_dstype_t

Enum that specifies the type of the discrete spectrum computed by the routine. Used in fnft_nsev_opts_t.

fnft_nsev_dstype_NORMING_CONSTANTS: The array is filled with the norming constants \( b_k \).

fnft_nsev_dstype_RESIDUES: The array is filled with the residues (aka spectral amplitudes) \( b_k\big/\frac{da(\lambda_k)}{d\lambda} \).

fnft_nsev_dstype_BOTH: The array contains both, first the norming constants and then the residues. Note that the length of the array passed by the user has to be 2*(*K_ptr) in this case.

◆ fnft_nsev_inverse_csmethod_t

Enum that specifies which algorithm is used to invert the continuous spectrum. Used in fnft_nsev_inverse_opts_t.

fnft_nsev_inverse_csmethod_DEFAULT: fnft_nsev_inverse chooses a default method based on the type of spectrum and wether we are in the defocusing case or not.

fnft_nsev_inverse_csmethod_TFMATRIX_CONTAINS_REFL_COEFF: This is essentially the algorithm in Section II of [Skaar et al, J Quantum Electron 37(2), 2001], only that we use fast inverse scattering as in [Wahls & Poor, Proc. IEEE ISIT 2015], [McClary, Geophysics 48(10), 1983] instead of conventional layer peeling.

fnft_nsev_inverse_csmethod_TFMATRIX_CONTAINS_AB_FROM_ITER: This is Algorithm 1 in the unpublished preprint http://arxiv.org/abs/1607.01305v2 . The maximum number of iterations can be controlled using the max_iter field in fnft_nsev_inverse_opts_t. Requires M=D. Defocusing case only.

fnft_nsev_inverse_csmethod_USE_SEED_POTENTIAL_INSTEAD: This algorithm adds discrete spectrum over the given seed potential. It uses Boffetta and Osborne (J. Comput. Physics 1992 ) method to compute the intermediate eigenfunctions and then uses the classical Darboux transform in [Lin, J. Acta Mathematicae Applicatae Sinica (1990) 6: 308] to add the discrete spectrum.

◆ fnft_nsev_inverse_cstype_t

Enum that specifies in which form the continuous spectrum is provided. Used in fnft_nsev_inverse_opts_t.

fnft_nsev_inverse_cstype_REFLECTION_COEFFICIENT: The array contspec contains samples of \( b(\xi)/a(\xi) \) on the grid specified through the input XI to fnft_nsev_inverse.

fnft_nsev_inverse_cstype_B_OF_XI: The array contspec contains samples of \( b(\xi) \) on the grid specified through the input XI to fnft_nsev_inverse.

fnft_nsev_inverse_cstype_B_OF_TAU: The array contspec contains samples of the inverse Fourier transform \({ B(\tau) = \frac{1}{2\pi} \int_{-\infty}^\infty b(\xi) e^{j \xi \tau} d\tau }\) of \( b(\xi) \) at the locations \( \tau_n = 2t_n \), \( n=0,1,\dots,D-1 \), where the \( t_n \) are the locations at which \( q(t) \) is computed. The default (and currently only implemented) method for this type of spectrum is described in [Wahls 2017]. It is currently REQUIRED that the time window is symmetric, T[0]=-T[1].

◆ fnft_nsev_inverse_dstype_t

Enum that specifies in which form the discrete spectrum is provided. Used in fnft_nsev_inverse_opts_t.

fnft_nsev_inverse_dstype_NORMING_CONSTANTS: The array normconsts_or_residues contains samples of \( b(\xi)\) for the values of bound_states provided as input to fnft_nsev_inverse.

fnft_nsev_inverse_dstype_RESIDUES: The array normconsts_or_residues contains samples of the of \( \frac{b(\xi)}{\partial{a(\xi)}/\partial{\xi}}\) for the values of bound_states provided as input to fnft_nsev_inverse.