00001
00002
00003
00004
00005
00006 #ifndef CWP_H
00007 #define CWP_H
00008
00009
00010
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>
00022 #include <unistd.h>
00023 #include <sys/types.h>
00024
00025 #ifdef CADDR_T_NOT_DEFINED
00026 typedef char * caddr_t;
00027 #endif
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
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)
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
00109
00110 #ifdef __cminusminus
00111 extern "C" {
00112 #endif
00113
00114
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
00181
00182
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
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
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
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
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
00237 void *abelalloc (int n);
00238 void abelfree (void *at);
00239 void abel (void *at, float f[], float g[]);
00240
00241
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
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
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
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
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
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
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
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
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
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
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
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
00350 float airya (float x);
00351 float airyb (float x);
00352 float airyap (float x);
00353 float airybp (float x);
00354
00355
00356 float cpusec (void);
00357 float cputime (void);
00358 float wallsec (void);
00359 float walltime (void);
00360
00361
00362 float franuni (void);
00363 void sranuni (int seed);
00364 float frannor (void);
00365 void srannor (int seed);
00366
00367
00368
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
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
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
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
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
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
00410 char *cwp_strdup(char *str);
00411 void strchop(char *s, char *t);
00412
00413
00414
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
00428 int CWP_Exit();
00429
00430 #ifdef __cminusminus
00431
00432 }
00433 #endif
00434
00435