/*
 * Copyright (c) 2002, 2017 Jens Keiner, Stefan Kunis, Daniel Potts
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 51
 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */

/** @defgroup nfct NFCT - Nonequispaced fast cosine transform
 * Direct and fast computation of the discrete nonequispaced cosine
 * transform.
 * @{
 */

/*! \struct nfct_plan
 * NFCT transform plan 
 */

 /*! \fn void nfct_init_1d(nfct_plan *ths_plan, int N0, int M_total)
  * Creates a 1-dimensional transform plan.
  *
  * \arg ths_plan The plan for the transform
  * \arg N0 The bandwidth \f$N\f$
  * \arg M_total The number of nodes \f$x\f$
  *
  * \author Steffen Klatt
  */

 /*! \fn void nfct_init_2d(nfct_plan *ths_plan, int N0, int N1, int M_total)
  * Creates a 3-dimensional transform plan.
  *
  * \arg ths_plan The plan for the transform
  * \arg N0 The bandwidth of dimension 1
  * \arg N1 The bandwidth of dimension 2
  * \arg M_total The number of nodes \f$x\f$
  *
  * \author Steffen Klatt
  */

 /*! \fn void nfct_init_3d(nfct_plan *ths_plan, int N0, int N1, int N2, int M_total)
  * Creates a 3-dimensional transform plan.
  *
  * \arg ths_plan The plan for the transform
  * \arg N0 The bandwidth of dimension 1
  * \arg N1 The bandwidth of dimension 2
  * \arg N2 The bandwidth of dimension 3
  * \arg M_total The number of nodes \f$x\f$
  *
  * \author Steffen Klatt
  */

 /*! \fn void nfct_init(nfct_plan *ths_plan, int d, int *N, int M_total)
  * Creates a d-dimensional transform plan.
  *
  * \arg ths_plan The plan for the transform
  * \arg d the dimension
  * \arg N The bandwidths
  * \arg M_total The number of nodes \f$x\f$
  *
  * \author Steffen Klatt
  */

 /*! \fn void nfftinit_guru(nfct_plan *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned flags, unsigned fftw_flags)
  * Creates a d-dimensional transform plan.
  *
  * \arg ths_plan The plan for the transform
  * \arg d the dimension
  * \arg N The bandwidths
  * \arg M_total The number of nodes \f$x\f$
  * \arg n The oversampled bandwidths
  * \arg m The cut-off parameter
  * \arg flags The flags known to nfct
  * \arg fftw_flags The flags known to fftw
  *
  * \author Steffen Klatt
  */

  /*! \fn void nfct_precompute_psi(nfct_plan *ths_plan)
   * precomputes the values psi
   * if the PRE_PSI is set the application program has to call this routine
   * after setting the nodes this_plan->x
   *
   * \arg ths_plan The plan for the transform
   *
   * \author Steffen Klatt
   */

 /*! \fn void nfct_trafo(nfct_plan *ths_plan)
  * executes a NFCT (approximate,fast), computes for \f$j=0,...,M\_total-1\f$
  * \f$f_j^C(x_j) = \sum_{k \in I_0^{N,d}} \hat{f}_k^C * cos(2 \pi k x_j)\f$
  *
  * \arg ths_plan The plan for the transform
  *
  * \author Steffen Klatt
  */

 /*! \fn void nfct_direct_trafo(nfct_plan *ths_plan)
  * executes a NDCT (exact,slow), computes for \f$j=0,...,M\_total-1\f$
  * \f$f_j^C(x_j) = \sum_{k \in I_0^{N,d}} \hat{f}_k^C * cos(2 \pi k x_j)\f$
  *
  * \arg ths_plan The plan for the transform
  *
  * \author Steffen Klatt
  */

 /*! \fn void nfct_adjoint(nfct_plan *ths_plan)
  * executes a transposed NFCT (approximate,fast), computes for \f$k \in I_0^{N,d}\f$
  * \f$h^C(k) = \sum_{j \in I_0^{(M\_total,1)}} f_j^C * cos(2 \pi k x_j)\f$
  *
  * \arg ths_plan The plan for the transform
  *
  * \author Steffen Klatt
  */

 /*! \fn nfct_direct_adjoint(nfct_plan *ths_plan)
  * executes a direct transposed NDCT (exact,slow), computes for \f$k \in I_0^{N,d}\f$
  * \f$h^C(k) = \sum_{j \in I_0^{(M\_total,1)}} f_j^C * cos(2 \pi k x_j)\f$
  *
  * \arg ths_plan The plan for the transform
  *
  * \author Steffen Klatt
  */

 /*! \fn void nfct_finalize(nfct_plan *ths_plan)
  * Destroys a plan.
  *
  * \arg ths_plan The plan for the transform
  *
  * \author Steffen Klatt
  */

 /*! \fn R nfct_phi_hut(nfct_plan *ths_plan, int k, int d)
  * do some adjustments (N,n) then compute PHI_HUT
  *
  * \arg ths_plan the plan for the transform
  * \arg k        index of c_phi
  * \arg d        dimension
  *
  * \author Steffen Klatt
  */

 /*! \fn R nfct_phi(nfct_plan *ths_plan, R x, int d)
  * do some adjustments (N,n) then compute PHI
  *
  * \arg ths_plan the plan for the transform
  * \arg x        node \f$x\f$
  * \arg d        dimension
  *
  * \author Steffen Klatt
  */

/*! \fn int nfct_fftw_2N(int n)
  * returns 2(n-1),  fftw related issue
  *
  * \arg n       i.e. length of dct-1
  *
  * \author Steffen Klatt
  */

 /*! \fn int nfct_fftw_2N_rev(int n)
  * returns 0.5n+1,  fftw related issue
  *
  * \arg n       i.e. length of dct-1
  *
  * \author Steffen Klatt
  */

/** @}
 */
