Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals

pd4fwt3ds.h File Reference

Go to the source code of this file.

Defines

#define _PD4FWT3DS_H

Functions

int pd4fwt3ds (const int &Sizef3d, const int &ns, const int &ks, const int &size, const double *sdata, double *wdata, double *ws)
int pd4fwt3ds (const int &Sizef3d, const int &ns, const int &ks, const int &size, const float *sdata, float *wdata, float *ws)
int pd4fwt3ds (const int &Sizef3d, const int &ns, const int &ks, const int &size, const double *sdata, double *wdata)
int pd4hfwt3ds (const int &Sizef3d, const int &ns, const int &ks, const int &size, const float *sdata, float *wdata)


Define Documentation

#define _PD4FWT3DS_H
 

Definition at line 8 of file pd4fwt3ds.h.


Function Documentation

int pd4fwt3ds const int Sizef3d,
const int ns,
const int ks,
const int size,
const double *  sdata,
double *  wdata,
double *  ws
 

Definition at line 406 of file pd4fwt3ds.cpp.

References dpd4fwt3dsws_(), H0, H1, H2, H3, ii, j, jj, k, sdata(), size1, Sizef3d, v, and wdata().

00414   { 
00415 
00416 #ifdef STORM_USEF
00417 
00418    int iflag;
00419    dpd4fwt3dsws_( &Sizef3d, &ns, &ks, &size, sdata, wdata, ws, &iflag );
00420    return iflag;
00421 
00422 #else
00423 
00424    int ii,jj,l;
00425    int l1,l2,l3;
00426    int size2;
00427    int size1 = size;
00428    double* u = ws;
00429    double* v = &ws[Sizef3d];
00430 
00431 #ifdef STORM_FWT_CCHECKUSAGE
00432    if ( size1 < ns ) return 1;
00433 #endif
00434 
00435    for( int i = 0; i < size1; i++ ) {
00436       ii=i*size*size;
00437       for( int j = 0; j < size1; j++ ) {
00438          jj=j*size;
00439          for( int k = 0; k < size1; k++ ) {
00440             wdata[ii+jj+k] = sdata[ii+jj+k];
00441          }
00442       }
00443    }
00444 
00445    if ( size1 == ns ) return 0;
00446 
00447    while ( size1 > ns ) {
00448 
00449       size2 = size1 / 2;
00450 
00451       for( int j = 0; j < size1; j++ ) {        // index 1
00452          jj = j * size;
00453          for( int k = 0; k < size1; k++ ) {
00454             for( int i = 0; i < size1; i++ ) {
00455                ii = i * size * size;
00456                u[i] = wdata[ii+jj+k];
00457             }
00458             for( int i = 0; i < size2; i++ ) {
00459                l = 2 * i;
00460                l1 = (l+1)%size1;
00461                l2 = (l+2)%size1;
00462                l3 = (l+3)%size1;
00463                v[i] = H0*u[l] + H1*u[l1] + H2*u[l2] + H3*u[l3];
00464                v[size2+i] = H3*u[l] - H2*u[l1] + H1*u[l2] - H0*u[l3]; 
00465             }
00466             for( int i = 0; i < size1; i++ ) {
00467                ii = i * size * size;
00468                wdata[ii+jj+k] = v[i];
00469             }
00470          }  
00471       }
00472 
00473       for( int i = 0; i < size1; i++ ) {        // index 2
00474          ii = i * size * size;
00475          for( int k = 0; k < size1; k++ ) {
00476             for( int j = 0; j < size1; j++ ) {
00477                jj = j * size;
00478                u[j] = wdata[ii+jj+k];
00479             }
00480             for( int j = 0; j < size2; j++ ) {
00481                l = 2 * j;
00482                l1 = (l+1)%size1;
00483                l2 = (l+2)%size1;
00484                l3 = (l+3)%size1;
00485                v[j] = H0*u[l] + H1*u[l1] + H2*u[l2] + H3*u[l3];
00486                v[size2+j] = H3*u[l] - H2*u[l1] + H1*u[l2] - H0*u[l3]; 
00487             }
00488             for( int j = 0; j < size1; j++ ) {
00489                jj = j * size;
00490                wdata[ii+jj+k] = v[j];
00491             }
00492          }
00493       }
00494 
00495       for( int i = 0; i < size1; i++ ) {        // index 3
00496          ii = i * size * size;
00497          for( int j = 0; j < size1; j++ ) {
00498             jj = j * size;
00499 
00500             for( int k = 0; k < size1; k++ ) {
00501                u[k] = wdata[ii+jj+k];
00502             }
00503 
00504             for( int k = 0; k < size2; k++ ) {
00505                l = 2 * k;
00506                l1 = (l+1)%size1;
00507                l2 = (l+2)%size1;
00508                l3 = (l+3)%size1;
00509                v[k] = H0*u[l] + H1*u[l1] + H2*u[l2] + H3*u[l3];
00510                v[size2+k] = H3*u[l] - H2*u[l1] + H1*u[l2] - H0*u[l3]; 
00511             }
00512 
00513             for( int k = 0; k < size1; k++ ) {
00514                wdata[ii+jj+k] = v[k];
00515             }
00516          }
00517       }
00518 
00519       size1 = size2;
00520 
00521    }
00522 
00523 #ifdef STORM_FWT_CCHECKUSAGE
00524    if (size1 != ns) return 2;
00525 #endif
00526 
00527    return 0;
00528 
00529 #endif
00530 } 

int pd4fwt3ds const int Sizef3d,
const int ns,
const int ks,
const int size,
const float *  sdata,
float *  wdata,
float *  ws
 

Definition at line 279 of file pd4fwt3ds.cpp.

References H0, H1, H2, H3, ii, j, jj, k, pd4fwt3dsws_(), sdata(), size1, Sizef3d, v, and wdata().

00287   { 
00288 
00289 #ifdef STORM_USEF
00290 
00291    int iflag;
00292    pd4fwt3dsws_( &Sizef3d, &ns, &ks, &size, sdata, wdata, ws, &iflag );
00293    return iflag;
00294 
00295 #else
00296 
00297    int ii,jj,l;
00298    int l1,l2,l3;
00299    int size2;
00300    int size1 = size;
00301    float *u = ws;
00302    float *v = &ws[Sizef3d];
00303 
00304 #ifdef STORM_FWT_CCHECKUSAGE
00305    if ( size1 < ns ) return 1;
00306 #endif
00307 
00308    for( int i = 0; i < size1; i++ ) {
00309       ii=i*size*size;
00310       for( int j = 0; j < size1; j++ ) {
00311          jj=j*size;
00312          for( int k = 0; k < size1; k++ ) {
00313             wdata[ii+jj+k] = sdata[ii+jj+k];
00314          }
00315       }
00316    }
00317 
00318    if ( size1 == ns ) return 0;
00319 
00320    while ( size1 > ns ) {
00321 
00322       size2 = size1 / 2;
00323 
00324       for( int j = 0; j < size1; j++ ) {        // index 1
00325          jj = j * size;
00326          for( int k = 0; k < size1; k++ ) {
00327             for( int i = 0; i < size1; i++ ) {
00328                ii = i * size * size;
00329                u[i] = wdata[ii+jj+k];
00330             }
00331             for( int i = 0; i < size2; i++ ) {
00332                l = 2 * i;
00333                l1 = (l+1)%size1;
00334                l2 = (l+2)%size1;
00335                l3 = (l+3)%size1;
00336                v[i] = H0*u[l] + H1*u[l1] + H2*u[l2] + H3*u[l3];
00337                v[size2+i] = H3*u[l] - H2*u[l1] + H1*u[l2] - H0*u[l3]; 
00338             }
00339             for( int i = 0; i < size1; i++ ) {
00340                ii = i * size * size;
00341                wdata[ii+jj+k] = v[i];
00342             }
00343          }  
00344       }
00345 
00346       for( int i = 0; i < size1; i++ ) {        // index 2
00347          ii = i * size * size;
00348          for( int k = 0; k < size1; k++ ) {
00349             for( int j = 0; j < size1; j++ ) {
00350                jj = j * size;
00351                u[j] = wdata[ii+jj+k];
00352             }
00353             for( int j = 0; j < size2; j++ ) {
00354                l = 2 * j;
00355                l1 = (l+1)%size1;
00356                l2 = (l+2)%size1;
00357                l3 = (l+3)%size1;
00358                v[j] = H0*u[l] + H1*u[l1] + H2*u[l2] + H3*u[l3];
00359                v[size2+j] = H3*u[l] - H2*u[l1] + H1*u[l2] - H0*u[l3]; 
00360             }
00361             for( int j = 0; j < size1; j++ ) {
00362                jj = j * size;
00363                wdata[ii+jj+k] = v[j];
00364             }
00365          }
00366       }
00367 
00368       for( int i = 0; i < size1; i++ ) {        // index 3
00369          ii = i * size * size;
00370          for( int j = 0; j < size1; j++ ) {
00371             jj = j * size;
00372 
00373             for( int k = 0; k < size1; k++ ) {
00374                u[k] = wdata[ii+jj+k];
00375             }
00376 
00377             for( int k = 0; k < size2; k++ ) {
00378                l = 2 * k;
00379                l1 = (l+1)%size1;
00380                l2 = (l+2)%size1;
00381                l3 = (l+3)%size1;
00382                v[k] = H0*u[l] + H1*u[l1] + H2*u[l2] + H3*u[l3];
00383                v[size2+k] = H3*u[l] - H2*u[l1] + H1*u[l2] - H0*u[l3]; 
00384             }
00385 
00386             for( int k = 0; k < size1; k++ ) {
00387                wdata[ii+jj+k] = v[k];
00388             }
00389          }
00390       }
00391 
00392       size1 = size2;
00393 
00394    }
00395 
00396 #ifdef STORM_FWT_CCHECKUSAGE
00397    if (size1 != ns) return 2;
00398 #endif
00399 
00400    return 0;
00401 
00402 #endif
00403 } 

int pd4fwt3ds const int Sizef3d,
const int ns,
const int ks,
const int size,
const double *  sdata,
double *  wdata
 

Definition at line 149 of file pd4fwt3ds.cpp.

References dpd4fwt3ds_(), H0, H1, H2, H3, ii, j, jj, k, sdata(), size1, Sizef3d, v, and wdata().

00156   { 
00157 
00158 #ifdef STORM_USEF
00159 
00160    int iflag;
00161    dpd4fwt3ds_( &Sizef3d, &ns, &ks, &size, sdata, wdata, &iflag );
00162    return iflag;
00163 
00164 #else
00165 
00166    int ii,jj,l;
00167    int l1,l2,l3;
00168    int size2;
00169    int size1 = size;
00170    double *u = new double[Sizef3d];
00171    double *v = new double[Sizef3d];
00172 
00173 #ifdef STORM_FWT_CCHECKUSAGE
00174    if ( size1 < ns ) return 1;
00175 #endif
00176 
00177    for( int i = 0; i < size1; i++ ) {
00178       ii=i*size*size;
00179       for( int j = 0; j < size1; j++ ) {
00180          jj=j*size;
00181          for( int k = 0; k < size1; k++ ) {
00182             wdata[ii+jj+k] = sdata[ii+jj+k];
00183          }
00184       }
00185    }
00186 
00187    if ( size1 == ns ) return 0;
00188 
00189    while ( size1 > ns ) {
00190 
00191       size2 = size1 / 2;
00192 
00193       for( int j = 0; j < size1; j++ ) {        // index 1
00194          jj = j * size;
00195          for( int k = 0; k < size1; k++ ) {
00196             for( int i = 0; i < size1; i++ ) {
00197                ii = i * size * size;
00198                u[i] = wdata[ii+jj+k];
00199             }
00200             for( int i = 0; i < size2; i++ ) {
00201                l = 2 * i;
00202                l1 = (l+1)%size1;
00203                l2 = (l+2)%size1;
00204                l3 = (l+3)%size1;
00205                v[i] = H0*u[l] + H1*u[l1] + H2*u[l2] + H3*u[l3];
00206                v[size2+i] = H3*u[l] - H2*u[l1] + H1*u[l2] - H0*u[l3]; 
00207             }
00208             for( int i = 0; i < size1; i++ ) {
00209                ii = i * size * size;
00210                wdata[ii+jj+k] = v[i];
00211             }
00212          }  
00213       }
00214 
00215       for( int i = 0; i < size1; i++ ) {        // index 2
00216          ii = i * size * size;
00217          for( int k = 0; k < size1; k++ ) {
00218             for( int j = 0; j < size1; j++ ) {
00219                jj = j * size;
00220                u[j] = wdata[ii+jj+k];
00221             }
00222             for( int j = 0; j < size2; j++ ) {
00223                l = 2 * j;
00224                l1 = (l+1)%size1;
00225                l2 = (l+2)%size1;
00226                l3 = (l+3)%size1;
00227                v[j] = H0*u[l] + H1*u[l1] + H2*u[l2] + H3*u[l3];
00228                v[size2+j] = H3*u[l] - H2*u[l1] + H1*u[l2] - H0*u[l3]; 
00229             }
00230             for( int j = 0; j < size1; j++ ) {
00231                jj = j * size;
00232                wdata[ii+jj+k] = v[j];
00233             }
00234          }
00235       }
00236 
00237       for( int i = 0; i < size1; i++ ) {        // index 3
00238          ii = i * size * size;
00239          for( int j = 0; j < size1; j++ ) {
00240             jj = j * size;
00241 
00242             for( int k = 0; k < size1; k++ ) {
00243                u[k] = wdata[ii+jj+k];
00244             }
00245 
00246             for( int k = 0; k < size2; k++ ) {
00247                l = 2 * k;
00248                l1 = (l+1)%size1;
00249                l2 = (l+2)%size1;
00250                l3 = (l+3)%size1;
00251                v[k] = H0*u[l] + H1*u[l1] + H2*u[l2] + H3*u[l3];
00252                v[size2+k] = H3*u[l] - H2*u[l1] + H1*u[l2] - H0*u[l3]; 
00253             }
00254 
00255             for( int k = 0; k < size1; k++ ) {
00256                wdata[ii+jj+k] = v[k];
00257             }
00258          }
00259       }
00260 
00261       size1 = size2;
00262 
00263    }
00264 
00265    delete [] u;
00266    delete [] v;
00267 
00268 #ifdef STORM_FWT_CCHECKUSAGE
00269    if (size1 != ns) return 2;
00270 #endif
00271 
00272    return 0;
00273 
00274 #endif
00275 } 

int pd4hfwt3ds const int Sizef3d,
const int ns,
const int ks,
const int size,
const float *  sdata,
float *  wdata
 


Generated on Mon May 31 21:40:25 2004 for SR2k4 Assembler by doxygen 1.3.6