ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/JSOC/proj/globalhs/libs/dtgf/levinson_code_C99.h
Revision: 1.1
Committed: Sun Apr 28 07:46:58 2013 UTC (10 years, 4 months ago) by tplarson
Content type: text/plain
Branch: MAIN
CVS Tags: globalhs_version_5, Ver_8-7, Ver_8-5, globalhs_version_23, globalhs_version_22, globalhs_version_21, globalhs_version_20, Ver_LATEST, globalhs_version_24, Ver_8-3, globalhs_version_8, globalhs_version_9, globalhs_version_0, globalhs_version_1, globalhs_version_2, globalhs_version_3, globalhs_version_4, Ver_9-41, globalhs_version_6, globalhs_version_7, Ver_9-5, Ver_8-8, globalhs_version_19, Ver_8-2, Ver_8-10, Ver_8-1, Ver_8-6, Ver_9-1, Ver_8-4, Ver_9-2, globalhs_version_12, globalhs_version_13, globalhs_version_10, globalhs_version_11, globalhs_version_16, globalhs_version_17, globalhs_version_14, globalhs_version_15, globalhs_version_18, Ver_9-4, Ver_9-3, Ver_8-11, Ver_8-12, Ver_9-0, HEAD
Log Message:
functions needed for detrending and gapfilling

File Contents

# Content
1 // $Header: $
2
3 #include "ctypes_def.h"
4 #include "cblas.h"
5
6 #if TYPE == FLOAT
7 #define LEVINSON slevinson
8 #elif TYPE == DOUBLE
9 #define LEVINSON dlevinson
10 #elif TYPE == COMPLEXFLOAT
11 #define LEVINSON clevinson
12 #elif TYPE == COMPLEXDOUBLE
13 #define LEVINSON zlevinson
14 #endif
15
16 #ifdef NOBLAS
17 void LEVINSON( int n, CTYPE *r, CTYPE *b, CTYPE *x)
18 {
19 int k,i;
20 CTYPE alpha, mu;
21 CTYPE *b_tmp;
22 RTYPE beta;
23
24 if (cimag(r[0]) != RZERO || creal(r[0]) <= RZERO )
25 {
26 fprintf(stderr, "%s: Toeplitz matrix must be Hermitian.\n",__func__);
27 fprintf(stderr, "imag = %f, real = %f\n",cimag(r[0]),creal(r[0]));
28 abort();
29 }
30 b_tmp = (CTYPE *)malloc(n*sizeof(CTYPE));
31 beta = creal(r[0]);
32 x[0] = b[0] / r[0];
33 b[0] = -r[1]/beta;
34 alpha = b[0];
35 for (k=1; k<=n-1; k++)
36 {
37 beta = (RONE - CONJ(alpha)*alpha)*beta;
38 mu = b[k];
39 for (i=2; i<=(k+1); i++)
40 mu -= conj(r[i-1])*x[k+1-i];
41 mu /= beta;
42 for (i=1; i<=k; i++)
43 x[i-1] += mu*b[k-i];
44 x[k] = mu;
45
46 if (k<n-1)
47 {
48 alpha = -r[k+1];
49 for (i=2; i<=(k+1); i++)
50 alpha -= r[i-1] * b[k+1-i];
51 alpha /= beta;
52 memcpy(b_tmp, b, k*sizeof(CTYPE));
53 for (i=1; i<=k; i++)
54 b[i-1] += alpha * CONJ(b_tmp[k-i]);
55 b[k] = alpha;
56 }
57 }
58 free(b_tmp);
59 }
60
61 #else
62
63 void LEVINSON( int n, CTYPE *r, CTYPE *b, CTYPE *x)
64 {
65 int k,i;
66 CTYPE alpha, mu;
67 CTYPE *b_tmp;
68 RTYPE beta;
69
70 if (cimag(r[0]) != RZERO || creal(r[0]) <= RZERO )
71 {
72 fprintf(stderr, "%s: Toeplitz matrix must be Hermitian.\n",__func__);
73 fprintf(stderr, "imag = %f, real = %f\n",cimag(r[0]),creal(r[0]));
74 abort();
75 }
76 b_tmp = (CTYPE *)malloc(n*sizeof(CTYPE));
77 beta = creal(r[0]);
78 x[0] = b[0] / r[0];
79 b[0] = -r[1]/beta;
80 alpha = b[0];
81 for (k=1; k<=n-1; k++)
82 {
83 beta = (RONE - CONJ(alpha)*alpha)*beta;
84 mu = b[k] - DOTC(k,&r[1],1,x,-1);
85 mu /= beta;
86
87 AXPY(k,mu,b,-1,x,1);
88 x[k] = mu;
89
90 if (k<n-1)
91 {
92 alpha = -r[k+1] - DOTU(k,&r[1],1,b,-1);
93 alpha /= beta;
94 for (i=0; i<k; i++)
95 b_tmp[i] = CONJ(b[i]);
96 AXPY(k,alpha,b_tmp,-1,b,1);
97 b[k] = alpha;
98 }
99 }
100 free(b_tmp);
101 }
102
103 #endif
104 #undef LEVINSON
105 #undef AXPY
106 #undef DOTU
107 #undef DOTC
108 #include "ctypes_undef.h"