/usr/include/gmt/gmt_fft.h is in libgmt-dev 5.2.1+dfsg-3build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | /*--------------------------------------------------------------------
* $Id: gmt_fft.h 15178 2015-11-06 10:45:03Z fwobbe $
*
* Copyright (c) 1991-2015 by P. Wessel, W. H. F. Smith, R. Scharroo, J. Luis and F. Wobbe
* See LICENSE.TXT file for copying and redistribution conditions.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; version 3 or 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 Lesser General Public License for more details.
*
* Contact info: gmt.soest.hawaii.edu
*--------------------------------------------------------------------*/
/*
* Structures in support of FFT use.
*
* Author: P. Wessel, derived from W.H.F. Smith implementation
* Date: 12-FEB-2013
* Version: 5 API
*
*/
/*!
* \file gmt_fft.h
* \brief Structures in support of FFT use.
*/
#ifndef GMT_FFT_H
#define GMT_FFT_H
#ifdef __APPLE__ /* Accelerate framework */
#include <Accelerate/Accelerate.h>
#endif
enum GMT_FFT_EXTEND {
GMT_FFT_EXTEND_POINT_SYMMETRY = 0,
GMT_FFT_EXTEND_MIRROR_SYMMETRY,
GMT_FFT_EXTEND_NONE,
GMT_FFT_EXTEND_NOT_SET};
enum GMT_FFT_TREND {
GMT_FFT_REMOVE_NOT_SET = -1,
GMT_FFT_REMOVE_NOTHING = 0,
GMT_FFT_REMOVE_MEAN,
GMT_FFT_REMOVE_MID,
GMT_FFT_REMOVE_TREND};
enum GMT_FFT_KCHOICE {
GMT_FFT_K_IS_KX = 0,
GMT_FFT_K_IS_KY,
GMT_FFT_K_IS_KR,
};
enum GMT_FFT_DIMSET {
GMT_FFT_EXTEND = 0,
GMT_FFT_FORCE,
GMT_FFT_SET,
GMT_FFT_LIST,
GMT_FFT_QUERY};
/*! Holds parameters needed to calculate kx, ky, kr */
struct GMT_FFT_WAVENUMBER {
int nx2, ny2;
unsigned int dim; /* FFT dimension as setup by Init */
double delta_kx, delta_ky;
double (*k_ptr) (uint64_t k, struct GMT_FFT_WAVENUMBER *K); /* pointer to function returning either kx, ky, or kr */
double coeff[3]; /* Detrending coefficients returned, if used */
struct GMT_FFT_INFO *info; /* Pointer back to GMT_FFT_INFO */
};
struct GMT_FFT_INFO {
bool set; /* true if we parsed options; false we must take default settings */
bool save[2]; /* save[GMT_IN] means save the input grid just before calling the FFT */
/* save[GMT_OUT] means save the complex output grid just after calling the FFT */
bool polar; /* true if we are to save the complex output grid in polar form */
char suffix[GMT_LEN64]; /* Suffix used to form output names if save[GMT_IN] is true [tapered] */
unsigned int nx; /* Desired hard FFT nx dimensionl or 0 if free to adjust */
unsigned int ny; /* Desired hard FFT ny dimensionl or 0 if free to adjust */
unsigned int taper_mode; /* One of the GMT_FFT_EXTEND for extension/mirroring */
unsigned int info_mode; /* One of the GMT_FFT_INFO for setting nx/ny or inquire */
int trend_mode; /* One of the GMT_FFT_TREND for handling detrending */
double taper_width; /* Amount of tapering in percent */
struct GMT_FFT_WAVENUMBER *K; /* Pointer to wavenumber structure */
};
struct GMT_FFT_SUGGESTION {
unsigned int nx;
unsigned int ny;
size_t worksize; /* # single-complex elements needed in work array */
size_t totalbytes; /* (8*(nx*ny + worksize)) */
double run_time;
double rms_rel_err;
}; /* [0] holds fastest, [1] most accurate, [2] least storage */
struct GMT_FFT_HIDDEN { /* Items needed by various FFT packages */
unsigned int n_1d, n_2d; /* Bill Gates says: error C2016: C requires that a struct or union has at least one member */
#ifdef __APPLE__ /* Accelerate framework */
FFTSetup setup_1d, setup_2d;
DSPSplitComplex dsp_split_complex_1d;
DSPSplitComplex dsp_split_complex_2d;
#endif
};
#endif
|