cwp.h

Go to the documentation of this file.
00001 /* Copyright (c) Colorado School of Mines, 2002.*/
00002 /* All rights reserved.                       */
00003 
00004 /* cwp.h - include file for general purpose CWP stuff */
00005 
00006 #ifndef CWP_H
00007 #define CWP_H
00008 
00009 
00010 /* INCLUDES */
00011 
00012 #include <stdio.h>
00013 #include <stddef.h>
00014 #include <stdlib.h>
00015 #include <string.h>
00016 #include <math.h>
00017 #include <ctype.h>
00018 #include <limits.h>
00019 #include <float.h>
00020 
00021 #include <fcntl.h>      /* non-ANSI */
00022 #include <unistd.h>     /* non-ANSI */
00023 #include <sys/types.h>  /* non-ANSI */
00024 
00025 #ifdef CADDR_T_NOT_DEFINED
00026 typedef char *          caddr_t;
00027 #endif
00028 
00029 /* DEFINES */
00030 /* uncomment the next block if you are installing */
00031 /* under ultrix, but not using the GCC compiler */
00032 
00033 /*
00034 #ifdef ultrix
00035 #define const
00036 #endef
00037 */
00038 
00039 /* CWP ENDIAN */
00040 #ifdef CWP_BIG_ENDIAN
00041 #define CWPENDIAN 1
00042 #endif
00043 #ifdef CWP_LITTLE_ENDIAN
00044 #define CWPENDIAN 0
00045 #endif
00046 
00047 
00048 #ifndef NULL
00049 #define NULL    ((void *)0)
00050 #endif
00051 #ifndef EXIT_FAILURE
00052 #define EXIT_FAILURE (1)
00053 #endif
00054 #ifndef EXIT_SUCCESS
00055 #define EXIT_SUCCESS (0)
00056 #endif
00057 #ifndef SEEK_SET
00058 #define SEEK_SET (0)
00059 #endif
00060 #ifndef SEEK_CUR
00061 #define SEEK_CUR (1)
00062 #endif
00063 #ifndef SEEK_END
00064 #define SEEK_END (2)
00065 #endif
00066 #ifndef PI
00067 #define PI (3.141592653589793)
00068 #endif
00069 #ifndef GOLDEN_RATIO 
00070 #define GOLDEN_RATIO (1.618034)   /* the golden ratio */
00071 #endif
00072 #ifndef TRUE
00073 #define TRUE (1)
00074 #endif
00075 #ifndef FALSE
00076 #define FALSE (0)
00077 #endif
00078 #ifndef YES
00079 #define YES (1)
00080 #endif
00081 #ifndef NO
00082 #define NO (0)
00083 #endif
00084 #ifndef SGN
00085 #define SGN(x) ((x) < 0 ? -1.0 : 1.0)
00086 #endif
00087 #ifndef ABS
00088 #define ABS(x) ((x) < 0 ? -(x) : (x))
00089 #endif
00090 #ifndef MAX
00091 #define MAX(x,y) ((x) > (y) ? (x) : (y))
00092 #endif
00093 #ifndef MIN
00094 #define MIN(x,y) ((x) < (y) ? (x) : (y))
00095 #endif
00096 #define NINT(x) ((int)((x)>0.0?(x)+0.5:(x)-0.5))
00097 #define CLOSETO(x, y) ((ABS((x) - (y)) <= FLT_EPSILON*ABS(y))?cwp_true:cwp_false)
00098 #define ISODD(n) ((n) & 01)
00099 #define ISIZE sizeof(int)
00100 #define FSIZE sizeof(float)
00101 #define DSIZE sizeof(double)
00102 #define STREQ(s,t) (strcmp(s,t) == 0)
00103 #define STRLT(s,t) (strcmp(s,t) < 0)
00104 #define STRGT(s,t) (strcmp(s,t) > 0)
00105 #define DIM(a) (sizeof(a)/sizeof(a[0]))
00106 
00107 
00108 /* FUNCTION PROTOTYPES */
00109 
00110 #ifdef __cminusminus /* if C++, specify external linkage to C functions */
00111 extern "C" {
00112 #endif
00113 
00114 /* allocate and free multi-dimensional arrays */
00115 void *alloc1 (size_t n1, size_t size);
00116 void *realloc1 (void *v, size_t n1, size_t size);
00117 void **alloc2 (size_t n1, size_t n2, size_t size);
00118 void ***alloc3 (size_t n1, size_t n2, size_t n3, size_t size);
00119 void ****alloc4 (size_t n1, size_t n2, size_t n3, size_t n4, size_t size);
00120 void *****alloc5 (size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t size);
00121 void ******alloc6 (size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t n6, 
00122                    size_t size);
00123 
00124 void free1 (void *p);
00125 void free2 (void **p);
00126 void free3 (void ***p);
00127 void free4 (void ****p);
00128 void free5 (void *****p);
00129 void free6 (void ******p);
00130 int *alloc1int (size_t n1);
00131 int *realloc1int (int *v, size_t n1);
00132 int **alloc2int (size_t n1, size_t n2);
00133 int ***alloc3int (size_t n1, size_t n2, size_t n3);
00134 float *alloc1float (size_t n1);
00135 float *realloc1float (float *v, size_t n1);
00136 float **alloc2float (size_t n1, size_t n2);
00137 float ***alloc3float (size_t n1, size_t n2, size_t n3);
00138 
00139 float ****alloc4float (size_t n1, size_t n2, size_t n3, size_t n4);
00140 void free4float (float ****p);
00141 float *****alloc5float (size_t n1, size_t n2, size_t n3, size_t n4, size_t n5);
00142 void free5float (float *****p);
00143 float ******alloc6float (size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t n6);
00144 void free6float (float ******p);
00145 int ****alloc4int (size_t n1, size_t n2, size_t n3, size_t n4);
00146 void free4int (int ****p);
00147 int *****alloc5int (size_t n1, size_t n2, size_t n3, size_t n4, size_t n5);
00148 void free5int (int *****p);
00149 unsigned short ******alloc6ushort(size_t n1,size_t n2,size_t n3,size_t n4,
00150         size_t n5, size_t n6);
00151 unsigned char *****alloc5uchar(size_t n1,size_t n2,size_t n3,size_t n4,
00152         size_t n5);
00153 void free5uchar(unsigned char *****p);
00154 unsigned short *****alloc5ushort(size_t n1,size_t n2,size_t n3,size_t n4,
00155         size_t n5);
00156 void free5ushort(unsigned short *****p);
00157 unsigned char ******alloc6uchar(size_t n1,size_t n2,size_t n3,size_t n4,
00158         size_t n5, size_t n6);
00159 void free6uchar(unsigned char ******p);
00160 unsigned short ******alloc6ushort(size_t n1,size_t n2,size_t n3,size_t n4,
00161         size_t n5, size_t n6);
00162 void free6ushort(unsigned short ******p);
00163 
00164 double *alloc1double (size_t n1);
00165 double *realloc1double (double *v, size_t n1);
00166 double **alloc2double (size_t n1, size_t n2);
00167 double ***alloc3double (size_t n1, size_t n2, size_t n3);
00168 
00169 void free1int (int *p);
00170 void free2int (int **p);
00171 void free3int (int ***p);
00172 void free1float (float *p);
00173 void free2float (float **p);
00174 void free3float (float ***p);
00175 
00176 void free1double (double *p);
00177 void free2double (double **p);
00178 void free3double (double ***p);
00179 
00180 #endif /* endif C++ */
00181 
00182 /* big matrix handler */
00183 void *bmalloc (int nbpe, int n1, int n2);
00184 void bmfree (void *bm);
00185 void bmread (void *bm, int dir, int k1, int k2, int n, void *v);
00186 void bmwrite (void *bm, int dir, int k1, int k2, int n, void *v);
00187 
00188 /* interpolation */
00189 float fsinc (float x);
00190 double dsinc (double x);
00191 void mksinc (float d, int lsinc, float sinc[]);
00192 void ints8r (int nxin, float dxin, float fxin, float yin[], 
00193     float yinl, float yinr, int nxout, float xout[], float yout[]);
00194 void intt8r (int ntable, float table[][8],
00195     int nxin, float dxin, float fxin, float yin[], 
00196     float yinl, float yinr, int nxout, float xout[], float yout[]);
00197 void ress8r (int nxin, float dxin, float fxin, float yin[], 
00198     float yinl, float yinr, 
00199     int nxout, float dxout, float fxout, float yout[]);
00200 void shfs8r (float dx, int nxin, float fxin, float yin[], 
00201     float yinl, float yinr, int nxout, float fxout, float yout[]);
00202 void xindex (int nx, float ax[], float x, int *index);
00203 void intl2b (int nxin, float dxin, float fxin,
00204     int nyin, float dyin, float fyin, unsigned char *zin,
00205     int nxout, float dxout, float fxout,
00206     int nyout, float dyout, float fyout, unsigned char *zout);
00207 void intlin (int nin, float xin[], float yin[], float yinl, float yinr,
00208     int nout, float xout[], float yout[]);
00209 void intcub (int ideriv, int nin, float xin[], float ydin[][4],
00210     int nout, float xout[], float yout[]);
00211 void cakima (int n, float x[], float y[], float yd[][4]);
00212 void cmonot (int n, float x[], float y[], float yd[][4]);
00213 void csplin (int n, float x[], float y[], float yd[][4]);
00214 void yxtoxy (int nx, float dx, float fx, float y[], 
00215     int ny, float dy, float fy, float xylo, float xyhi, float x[]);
00216 
00217 /* Butterworth filters */
00218 void bfhighpass (int npoles, float f3db, int n, float p[], float q[]);
00219 void bflowpass (int npoles, float f3db, int n, float p[], float q[]);
00220 void bfdesign (float fpass, float apass, float fstop, float astop,
00221     int *npoles, float *f3db);
00222 
00223 /* differentiator approximations */
00224 void mkdiff (int n, float a, float h, int l, int m, float d[]);
00225 void mkhdiff (float h, int l, float d[]);
00226 void holbergd1 (float e, int n, float d[]);
00227 
00228 /* general signal processing */
00229 void conv (int lx, int ifx, float *x, int ly, int ify, float *y,
00230     int lz, int ifz, float *z);
00231 void xcor (int lx, int ifx, float *x, int ly, int ify, float *y ,
00232     int lz, int ifz, float *z);
00233 void hilbert (int n, float x[], float y[]);
00234 void antialias (float frac, int phase, int n, float p[], float q[]);
00235 
00236 /* Abel transformer */
00237 void *abelalloc (int n);
00238 void abelfree (void *at);
00239 void abel (void *at, float f[], float g[]);
00240 
00241 /* Hankel transformer */
00242 void *hankelalloc (int nfft);
00243 void hankelfree (void *ht);
00244 void hankel0 (void *ht, float f[], float h[]);
00245 void hankel1 (void *ht, float f[], float h[]);
00246 
00247 /* sorting and searching */
00248 void hpsort (int n, float a[]);
00249 void qksort (int n, float a[]);
00250 void qkfind (int m, int n, float a[]);
00251 void qkisort (int n, float a[], int i[]);
00252 void qkifind (int m, int n, float a[], int i[]);
00253 
00254 /* statistics */
00255 float quest (float p, int n, float x[]);
00256 void *questalloc (float p, int n, float x[]);
00257 float questupdate (void *q, int n, float x[]);
00258 void questfree (void *q);
00259 
00260 /* PC byte swapping */
00261 void swap_short_2(short *tni2);
00262 void swap_u_short_2(unsigned short *tni2);
00263 void swap_int_4(int *tni4);
00264 void swap_u_int_4(unsigned int *tni4);
00265 void swap_long_4(long *tni4);
00266 void swap_u_long_4(unsigned long *tni4);
00267 void swap_float_4(float *tnf4);
00268 void swap_double_8(double *tndd8);
00269 
00270 /* Prime Factor FFTs */
00271 int npfa (int nmin);
00272 int npfao (int nmin, int nmax);
00273 int npfar (int nmin);
00274 int npfaro (int nmin, int nmax);
00275 
00276 /* Prime Factor FFTs (double version)*/
00277 int npfa_d (int nmin);
00278 int npfao_d (int nmin, int nmax);
00279 int npfar_d (int nmin);
00280 int npfaro_d (int nmin, int nmax);
00281 
00282 /* BLAS (Basic Linear Algebra Subroutines adapted from LINPACK FORTRAN) */
00283 int isamax (int n, float *sx, int incx);
00284 float sasum (int n, float *sx, int incx);
00285 void saxpy (int n, float sa, float *sx, int incx, float *sy, int incy);
00286 void scopy (int n, float *sx, int incx, float *sy, int incy);
00287 float sdot (int n, float *sx, int incx, float *sy, int incy);
00288 float snrm2 (int n, float *sx, int incx);
00289 void sscal (int n, float sa, float *sx, int incx);
00290 void sswap (int n, float *sx, int incx, float *sy, int incy);
00291 int idamax (int n, double *sx, int incx);
00292 double dasum (int n, double *sx, int incx);
00293 void daxpy (int n, double sa, double *sx, int incx, double *sy, int incy);
00294 void dcopy (int n, double *sx, int incx, double *sy, int incy);
00295 double ddot (int n, double *sx, int incx, double *sy, int incy);
00296 double dnrm2 (int n, double *sx, int incx);
00297 void dscal (int n, double sa, double *sx, int incx);
00298 void dswap (int n, double *sx, int incx, double *sy, int incy);
00299 
00300 /* LINPACK functions (adapted from LINPACK FORTRAN) */
00301 void sgeco (float **a, int n, int *ipvt, float *rcond, float *z);
00302 void sgefa (float **a, int n, int *ipvt, int *info);
00303 void sgesl (float **a, int n, int *ipvt, float *b, int job);
00304 void sqrdc (float **x, int n, int p, float *qraux, int *jpvt,
00305     float *work, int job);
00306 void sqrsl (float **x, int n, int k, float *qraux,
00307     float *y, float *qy, float *qty,
00308     float *b, float *rsd, float *xb, int job, int *info);
00309 void sqrst (float **x, int n, int p, float *y, float tol,
00310     float *b, float *rsd, int *k,
00311     int *jpvt, float *qraux, float *work);
00312 void dgeco (double **a, int n, int *ipvt, double *rcond, double *z);
00313 void dgefa (double **a, int n, int *ipvt, int *info);
00314 void dgesl (double **a, int n, int *ipvt, double *b, int job);
00315 
00316 /* other linear system solvers */
00317 void stoepd (int n, double r[], double g[], double f[], double a[]);
00318 void stoepf (int n, float r[], float g[], float f[], float a[]);
00319 void vanded (int n, double v[], double b[], double x[]);
00320 void vandef (int n, float v[], float b[], float x[]);
00321 void tridif (int n, float a[], float b[], float c[], float r[], float u[]);
00322 void tridid (int n, double a[], double b[], double c[], double r[], double u[]);
00323 void tripd (float *d, float *e, float *b, int n);
00324 void tripp (int n, float *d, float *e, float *c, float *b);
00325 
00326 /* root finding */
00327 int mnewt (int maxiter, float ftol, float dxtol, int n, float *x, void *aux,
00328             void (*fdfdx)(int n, float *x, float *f, float **dfdx, void *aux));
00329 
00330 /* transform rectangular => polar and polar => to rectangular coordinates */
00331 void recttopolar ( int nx, float dx, float fx, int ny, float dy,
00332     float fy, float **p, int na, float da, float fa, int nr, float dr,
00333     float fr, float **q);
00334 void polartorect ( int na, float da, float fa, int nr, float dr,
00335     float fr, float **q, int nx, float dx, float fx, int ny, float dy,
00336     float fy, float **p);
00337 
00338 /* graphics utilities */
00339 void rfwtva (int n, float z[], float zmin, float zmax, float zbase,
00340     int yzmin, int yzmax, int xfirst, int xlast,
00341     int wiggle, int nbpr, unsigned char *bits, int endian);
00342 void rfwtvaint (int n, float z[], float zmin, float zmax, float zbase,
00343     int yzmin, int yzmax, int xfirst, int xlast,
00344     int wiggle, int nbpr, unsigned char *bits, int endian);
00345 void scaxis (float x1, float x2, int *nxnum, float *dxnum, float *fxnum);
00346 int yclip (int nx, float dx, float fx, float y[], float ymin, float ymax,
00347     float xc[], float yc[]);
00348 
00349 /* special functions */
00350 float airya (float x);
00351 float airyb (float x);
00352 float airyap (float x);
00353 float airybp (float x);
00354 
00355 /* timers */
00356 float cpusec (void);
00357 float cputime (void);
00358 float wallsec (void);
00359 float walltime (void);
00360 
00361 /* pseudo-random numbers */
00362 float franuni (void);
00363 void sranuni (int seed);
00364 float frannor (void);
00365 void srannor (int seed);
00366 
00367 
00368 /* Ax=b routines */
00369 void LU_decomposition (int nrows, float **matrix, int *index, float *d);
00370 void backward_substitution (int nrows, float **matrix, int *index, float *b);
00371 void inverse_matrix (int nrows, float **matrix);
00372 void inverse_matrix_multiply (int nrows1, float **matrix1, int ncols2,
00373         int nrows2, float **matrix2, float **out_matrix);
00374 
00375 /* singular value decomposition routines */
00376 void compute_svd(float **a, int m, int n, float w[], float **v);
00377 void svd_backsubstitute(float **u, float w[], float **v,
00378         int m, int n, float b[], float x[]);
00379 
00380 /* waveforms */
00381 void ricker1_wavelet (int nt, float dt, float fpeak, float *wavelet);
00382 void ricker2_wavelet (int hlw, float dt, float period, float ampl, 
00383     float distort, float *wavelet);
00384 void akb_wavelet (int nt, float dt, float fpeak, float *wavelet);
00385 void spike_wavelet (int nt, int tindex, float *wavelet);
00386 void unit_wavelet (int nt, float *wavelet);
00387 void zero_wavelet (int nt, float *wavelet);
00388 
00389 /* miscellaneous */
00390 void pp1d (FILE *fp, char *title, int lx, int ifx, float x[]);
00391 void pplot1 (FILE *fp, char *title, int nx, float ax[]);
00392 char *temporary_filename(char *prefix);
00393 void zasc (char *ainput, char *aoutput, int nchar);
00394 void zebc (char *ainput, char *aoutput, int nchar);
00395 void IBMFLT(float *in, float *out, int *nwds, int *idirec);
00396 
00397 /* Prime Factor FFTs (double version)*/
00398 int npfa_d (int nmin);
00399 int npfao_d (int nmin, int nmax);
00400 int npfar_d (int nmin);
00401 int npfaro_d (int nmin, int nmax);
00402 
00403 /* Prime Factor FFTs (double version)*/
00404 int npfa_d (int nmin);
00405 int npfao_d (int nmin, int nmax);
00406 int npfar_d (int nmin);
00407 int npfaro_d (int nmin, int nmax);
00408 
00409 /* string manipulation */
00410 char *cwp_strdup(char *str);
00411 void strchop(char *s, char *t);
00412 
00413 /* if off_t, fseeko, and ftello not defined */
00414 /* redefine these items back to the int, fseek, ftell */
00415 #ifndef off_t
00416 #define off_t long
00417 #endif
00418 
00419 #ifndef ftello
00420 #define ftello ftell
00421 #endif
00422 
00423 #ifndef fseeko
00424 #define fseeko fseek
00425 #endif
00426 
00427 /* exit function */
00428 int CWP_Exit();
00429 
00430 #ifdef __cminusminus /* if C++, end external linkage specification */
00431 
00432 }
00433 #endif
00434 
00435 

Generated on 5 Jan 2017 for IWAVE by  doxygen 1.4.7