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

hfwt2ds.cpp File Reference

#include "stormdef.h"

Include dependency graph for hfwt2ds.cpp:

Include dependency graph

Go to the source code of this file.

Defines

#define INVSQRT2   STORMDEF_MATHCONST_INVSQRT2

Functions

int hfwt2ds (const int &Sizef2d, const int &ns, const int &size, const int *sdata, int *wdata, int *ws)
int hfwt2ds (const int &Sizef2d, const int &ns, const int &size, const double *sdata, double *wdata, double *ws)
int hfwt2ds (const int &Sizef2d, const int &ns, const int &size, const float *sdata, float *wdata, float *ws)
int hfwt2ds (const int &Sizef2d, const int &ns, const int &size, const int *sdata, int *wdata)
int hfwt2ds (const int &Sizef2d, const int &ns, const int &size, const double *sdata, double *wdata)
int hfwt2ds (const int &Sizef2d, const int &ns, const int &size, const float *sdata, float *wdata)


Define Documentation

#define INVSQRT2   STORMDEF_MATHCONST_INVSQRT2
 

Definition at line 17 of file hfwt2ds.cpp.


Function Documentation

int hfwt2ds const int Sizef2d,
const int ns,
const int size,
const int sdata,
int wdata,
int ws
 

Definition at line 446 of file hfwt2ds.cpp.

References ihfwt2dsws_(), ii, j, sdata(), size1, v, and wdata().

00453   { 
00454 
00455 #ifdef STORM_USEF
00456 
00457    int iflag;
00458    ihfwt2dsws_( &Sizef2d, &ns, &size, sdata, wdata, ws, &iflag );
00459    return iflag;
00460 
00461 #else
00462 
00463    int ii,l,size2;
00464    int size1 = size;
00465    int *u = ws;
00466    int *v = &ws[Sizef2d];
00467 
00468 #ifdef STORM_FWT_CCHECKUSAGE
00469    if ( size1 < ns ) return 1;
00470 #endif
00471 
00472    for( int i = 0; i < size1; i++ ) {
00473       ii = i * size;
00474       for( int j = 0; j < size1; j++ ) {
00475          wdata[ii+j] = sdata[ii+j];
00476       }
00477    }
00478 
00479    if ( size1 == ns ) return 0;
00480 
00481    while ( size1 > ns ) {
00482 
00483       size2 = size1 / 2;
00484 
00485       for( int j = 0; j < size1; j++ ) {        // index 1
00486          for( int i = 0; i < size1; i++ ) {
00487             ii = i * size;
00488             u[i] = wdata[ii+j];
00489          }
00490          for( int i = 0; i < size2; i++ ) {
00491                l = 2 * i;
00492                v[i] = ( u[l] + u[l+1] ) / 2;
00493                v[size2+i] = u[l] - u[l+1];
00494          }
00495          for( int i = 0; i < size1; i++ ) {
00496             ii = i * size;
00497             wdata[ii+j] = v[i];
00498          }  
00499       }
00500 
00501       for( int i = 0; i < size1; i++ ) {        // index 2
00502          ii = i * size;
00503          for( int j = 0; j < size1; j++ ) {
00504             u[j] = wdata[ii+j];
00505          }
00506          for( int j = 0; j < size2; j++ ) {
00507             l = 2 * j;
00508             v[j] = ( u[l] + u[l+1] ) / 2;
00509             v[size2+j] = u[l] - u[l+1];
00510          }
00511          for( int j = 0; j < size1; j++ ) {
00512             wdata[ii+j] = v[j];
00513          }
00514       }
00515 
00516       size1 = size2;
00517 
00518    }
00519 
00520 #ifdef STORM_FWT_CCHECKUSAGE
00521    if (size1 != ns) return 2;
00522 #endif
00523 
00524    return 0;
00525 
00526 #endif
00527 } 

int hfwt2ds const int Sizef2d,
const int ns,
const int size,
const double *  sdata,
double *  wdata,
double *  ws
 

Definition at line 362 of file hfwt2ds.cpp.

00369   { 
00370 
00371 #ifdef STORM_USEF
00372 
00373    int iflag;
00374    dhfwt2dsws_( &Sizef2d, &ns, &size, sdata, wdata, ws, &iflag );
00375    return iflag;
00376 
00377 #else
00378 
00379    int ii,l,size2;
00380    int size1 = size;
00381    double* u = ws;
00382    double* v = &ws[Sizef2d];
00383 
00384 #ifdef STORM_FWT_CCHECKUSAGE
00385    if ( size1 < ns ) return 1;
00386 #endif
00387 
00388    for( int i = 0; i < size1; i++ ) {
00389       ii = i * size;
00390       for( int j = 0; j < size1; j++ ) {
00391          wdata[ii+j] = sdata[ii+j];
00392       }
00393    }
00394 
00395    if ( size1 == ns ) return 0;
00396 
00397    while ( size1 > ns ) {
00398 
00399       size2 = size1 / 2;
00400 
00401       for( int j = 0; j < size1; j++ ) {        // index 1
00402          for( int i = 0; i < size1; i++ ) {
00403             ii = i * size;
00404             u[i] = wdata[ii+j];
00405          }
00406          for( int i = 0; i < size2; i++ ) {
00407             l = 2 * i;
00408             v[i] = ( u[l] + u[l+1] ) * INVSQRT2;
00409             v[size2+i] = ( u[l] - u[l+1] ) * INVSQRT2;
00410          }
00411          for( int i = 0; i < size1; i++ ) {
00412             ii = i * size;
00413             wdata[ii+j] = v[i];
00414          }
00415       }
00416 
00417       for( int i = 0; i < size1; i++ ) {        // index 2
00418          ii = i * size;
00419          for( int j = 0; j < size1; j++ ) {
00420             u[j] = wdata[ii+j];
00421          }
00422          for( int j = 0; j < size2; j++ ) {
00423             l = 2 * j;
00424             v[j] = ( u[l] + u[l+1] ) * INVSQRT2;
00425             v[size2+j] = ( u[l] - u[l+1] ) * INVSQRT2;
00426          }
00427          for( int j = 0; j < size1; j++ ) {
00428             wdata[ii+j] = v[j];
00429          }
00430       }
00431 
00432       size1 = size2;
00433 
00434    }
00435 
00436 #ifdef STORM_FWT_CCHECKUSAGE
00437    if (size1 != ns) return 2;
00438 #endif
00439 
00440    return 0;
00441 
00442 #endif
00443 } 

int hfwt2ds const int Sizef2d,
const int ns,
const int size,
const float *  sdata,
float *  wdata,
float *  ws
 

Definition at line 278 of file hfwt2ds.cpp.

00285   { 
00286 
00287 #ifdef STORM_USEF
00288 
00289    int iflag;
00290    hfwt2dsws_( &Sizef2d, &ns, &size, sdata, wdata, ws, &iflag );
00291    return iflag;
00292 
00293 #else
00294 
00295    int ii,l,size2;
00296    int size1 = size;
00297    float *u = ws;
00298    float *v = &ws[Sizef2d];
00299 
00300 #ifdef STORM_FWT_CCHECKUSAGE
00301    if ( size1 < ns ) return 1;
00302 #endif
00303 
00304    for( int i = 0; i < size1; i++ ) {
00305       ii = i * size;
00306       for( int j = 0; j < size1; j++ ) {
00307          wdata[ii+j] = sdata[ii+j];
00308       }
00309    }
00310 
00311    if ( size1 == ns ) return 0;
00312 
00313    while ( size1 > ns ) {
00314 
00315       size2 = size1 / 2;
00316 
00317       for( int j = 0; j < size1; j++ ) {        // index 1
00318          for( int i = 0; i < size1; i++ ) {
00319             ii = i * size;
00320             u[i] = wdata[ii+j];
00321          }
00322          for( int i = 0; i < size2; i++ ) {
00323                l = 2 * i;
00324                v[i] = ( u[l] + u[l+1] ) * INVSQRT2;
00325                v[size2+i] = ( u[l] - u[l+1] ) * INVSQRT2;
00326          }
00327          for( int i = 0; i < size1; i++ ) {
00328             ii = i * size;
00329             wdata[ii+j] = v[i];
00330          }  
00331       }
00332 
00333       for( int i = 0; i < size1; i++ ) {        // index 2
00334          ii = i * size;
00335          for( int j = 0; j < size1; j++ ) {
00336             u[j] = wdata[ii+j];
00337          }
00338          for( int j = 0; j < size2; j++ ) {
00339             l = 2 * j;
00340             v[j] = ( u[l] + u[l+1] ) * INVSQRT2;
00341             v[size2+j] = ( u[l] - u[l+1] ) * INVSQRT2;
00342          }
00343          for( int j = 0; j < size1; j++ ) {
00344             wdata[ii+j] = v[j];
00345          }
00346       }
00347 
00348       size1 = size2;
00349 
00350    }
00351 
00352 #ifdef STORM_FWT_CCHECKUSAGE
00353    if (size1 != ns) return 2;
00354 #endif
00355 
00356    return 0;
00357 
00358 #endif
00359 } 

int hfwt2ds const int Sizef2d,
const int ns,
const int size,
const int sdata,
int wdata
 

Definition at line 192 of file hfwt2ds.cpp.

00198   { 
00199 
00200 #ifdef STORM_USEF
00201 
00202    int iflag;
00203    ihfwt2ds_( &Sizef2d, &ns, &size, sdata, wdata, &iflag );
00204    return iflag;
00205 
00206 #else
00207 
00208    int ii,l,size2;
00209    int size1 = size;
00210    int *u = new int[Sizef2d];
00211    int *v = new int[Sizef2d];
00212 
00213 #ifdef STORM_FWT_CCHECKUSAGE
00214    if ( size1 < ns ) return 1;
00215 #endif
00216 
00217    for( int i = 0; i < size1; i++ ) {
00218       ii = i * size;
00219       for( int j = 0; j < size1; j++ ) {
00220          wdata[ii+j] = sdata[ii+j];
00221       }
00222    }
00223 
00224    if ( size1 == ns ) return 0;
00225 
00226    while ( size1 > ns ) {
00227 
00228       size2 = size1 / 2;
00229 
00230       for( int j = 0; j < size1; j++ ) {        // index 1
00231          for( int i = 0; i < size1; i++ ) {
00232             ii = i * size;
00233             u[i] = wdata[ii+j];
00234          }
00235          for( int i = 0; i < size2; i++ ) {
00236             l = 2 * i;
00237             v[i] = ( u[l] + u[l+1] ) / 2;
00238             v[size2+i] = u[l] - u[l+1];
00239          }
00240          for( int i = 0; i < size1; i++ ) {
00241             ii = i * size;
00242             wdata[ii+j] = v[i];
00243          }
00244       }
00245 
00246       for( int i = 0; i < size1; i++ ) {        // index 2
00247          ii = i * size;
00248          for( int j = 0; j < size1; j++ ) {
00249             u[j] = wdata[ii+j];
00250          }
00251          for( int j = 0; j < size2; j++ ) {
00252             l = 2 * j;
00253             v[j] = ( u[l] + u[l+1] ) / 2;
00254             v[size2+j] = u[l] - u[l+1];
00255          }
00256          for( int j = 0; j < size1; j++ ) {
00257             wdata[ii+j] = v[j];
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 hfwt2ds const int Sizef2d,
const int ns,
const int size,
const double *  sdata,
double *  wdata
 

Definition at line 105 of file hfwt2ds.cpp.

00111   { 
00112 
00113 #ifdef STORM_USEF
00114 
00115    int iflag;
00116    dhfwt2ds_( &Sizef2d, &ns, &size, sdata, wdata, &iflag );
00117    return iflag;
00118 
00119 #else
00120 
00121    int ii,jj,l,size2;
00122    int size1 = size;
00123    double *u = new double[Sizef2d];
00124    double *v = new double[Sizef2d];
00125 
00126 #ifdef STORM_FWT_CCHECKUSAGE
00127    if ( size1 < ns ) return 1; 
00128 #endif
00129 
00130    for( int i = 0; i < size1; i++ ) {
00131       ii = i * size;
00132       for( int j = 0; j < size1; j++ ) {
00133          wdata[ii+j] = sdata[ii+j];
00134       }
00135    }
00136 
00137    if ( size1 == ns ) return 0;
00138 
00139    while ( size1 > ns ) {
00140 
00141       size2 = size1 / 2;
00142 
00143       for( int j = 0; j < size1; j++ ) {        // index 1
00144          for( int i = 0; i < size1; i++ ) {
00145             ii = i * size;
00146             u[i] = wdata[ii+j];
00147          }
00148          for( int i = 0; i < size2; i++ ) {
00149             l = 2 * i;
00150             v[i] = ( u[l] + u[l+1] ) * INVSQRT2;
00151             v[size2+i] = ( u[l] - u[l+1] ) * INVSQRT2;
00152          }
00153          for( int i = 0; i < size1; i++ ) {
00154             ii = i * size;
00155             wdata[ii+j] = v[i];
00156          }
00157       }
00158 
00159       for( int i = 0; i < size1; i++ ) {        // index 2
00160          ii = i * size;
00161          for( int j = 0; j < size1; j++ ) {
00162             u[j] = wdata[ii+j];
00163          }
00164          for( int j = 0; j < size2; j++ ) {
00165             l = 2 * j;
00166             v[j] = ( u[l] + u[l+1] ) * INVSQRT2;
00167             v[size2+j] = ( u[l] - u[l+1] ) * INVSQRT2;
00168          }
00169          for( int j = 0; j < size1; j++ ) {
00170             jj = j * size;
00171             wdata[ii+j] = v[j];
00172          }
00173       }
00174 
00175       size1 = size2;
00176 
00177    }
00178 
00179    delete [] u;
00180    delete [] v;
00181 
00182 #ifdef STORM_FWT_CCHECKUSAGE
00183    if (size1 != ns) return 2;
00184 #endif
00185 
00186    return 0;
00187 
00188 #endif
00189 } 

int hfwt2ds const int Sizef2d,
const int ns,
const int size,
const float *  sdata,
float *  wdata
 

Definition at line 19 of file hfwt2ds.cpp.

00025   { 
00026 
00027 #ifdef STORM_USEF
00028 
00029    int iflag;
00030    hfwt2ds_( &Sizef2d, &ns, &size, sdata, wdata, &iflag );
00031    return iflag;
00032 
00033 #else
00034 
00035    int ii,l,size2;
00036    int size1 = size;
00037    float *u = new float[Sizef2d];
00038    float *v = new float[Sizef2d];
00039 
00040 #ifdef STORM_FWT_CCHECKUSAGE
00041    if ( size1 < ns ) return 1;
00042 #endif
00043 
00044    for( int i = 0; i < size1; i++ ) {
00045       ii = i * size;
00046       for( int j = 0; j < size1; j++ ) {
00047          wdata[ii+j] = sdata[ii+j];
00048       }
00049    }
00050 
00051    if ( size1 == ns ) return 0;
00052 
00053    while ( size1 > ns ) {
00054 
00055       size2 = size1 / 2;
00056 
00057       for( int j = 0; j < size1; j++ ) {        // index 1
00058          for( int i = 0; i < size1; i++ ) {
00059             ii = i * size;
00060             u[i] = wdata[ii+j];
00061          }
00062          for( int i = 0; i < size2; i++ ) {
00063             l = 2 * i;
00064             v[i] = ( u[l] + u[l+1] ) * INVSQRT2;
00065             v[size2+i] = ( u[l] - u[l+1] ) * INVSQRT2;
00066          }
00067          for( int i = 0; i < size1; i++ ) {
00068             ii = i * size;
00069             wdata[ii+j] = v[i];
00070          }
00071       }
00072 
00073       for( int i = 0; i < size1; i++ ) {        // index 2
00074          ii = i * size;
00075          for( int j = 0; j < size1; j++ ) {
00076             u[j] = wdata[ii+j];
00077          }
00078          for( int j = 0; j < size2; j++ ) {
00079             l = 2 * j;
00080             v[j] = ( u[l] + u[l+1] ) * INVSQRT2;
00081             v[size2+j] = ( u[l] - u[l+1] ) * INVSQRT2;
00082          }
00083          for( int j = 0; j < size1; j++ ) {
00084             wdata[ii+j] = v[j];
00085          }
00086       }
00087 
00088       size1 = size2;
00089 
00090    }
00091 
00092    delete [] u;
00093    delete [] v;
00094 
00095 #ifdef STORM_FWT_CCHECKUSAGE
00096    if (size1 != ns) return 2;
00097 #endif
00098 
00099    return 0;
00100 
00101 #endif
00102 } 


Generated on Mon May 31 21:39:45 2004 for SR2k4 Assembler by doxygen 1.3.6