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

hifwt2ds.cpp File Reference

#include "stormdef.h"

Include dependency graph for hifwt2ds.cpp:

Include dependency graph

Go to the source code of this file.

Defines

#define INVSQRT2   STORMDEF_MATHCONST_INVSQRT2

Functions

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


Define Documentation

#define INVSQRT2   STORMDEF_MATHCONST_INVSQRT2
 

Definition at line 17 of file hifwt2ds.cpp.


Function Documentation

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

Definition at line 415 of file hifwt2ds.cpp.

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

00422   { 
00423 
00424 #ifdef STORM_USEF
00425 
00426    int iflag;
00427    ihifwt2dsws_( &Sizef2d, &ns, &size, wdata, sdata, ws, &iflag );
00428    return iflag;
00429 
00430 #else
00431 
00432    int ii,size2;
00433    int size1 = ns;
00434    int *u = ws;
00435    int *v = &ws[Sizef2d];
00436 
00437 #ifdef STORM_FWT_CCHECKUSAGE
00438    if ( size1 < ns ) return 1;
00439 #endif
00440 
00441    for( int i = 0; i < size*size; i++ ) {
00442       sdata[i] = wdata[i];
00443    }
00444 
00445    if ( size == ns ) return 0;
00446 
00447    while ( size1 < size ) {
00448 
00449       size2 = size1;
00450       size1 = 2 * size1;
00451 
00452       for( int j = 0; j < size1; j++ ) {        // index 1
00453          for( int i = 0; i < size1; i++ ) {
00454             ii = i * size;
00455             u[i] = sdata[ii+j];
00456          }
00457          for( int i = 0; i < size2; i++ ) {
00458             v[2*i] = ( u[i] + u[size2+i] ) / 2;
00459             v[2*i+1] = u[i] - u[size2+i];
00460          }
00461          for( int i = 0; i < size1; i++ ) {
00462             ii = i * size;
00463             sdata[ii+j] = v[i];
00464          }  
00465       }
00466 
00467       for( int i = 0; i < size1; i++ ) {        // index 2
00468          ii = i * size;
00469          for( int j = 0; j < size1; j++ ) {
00470             u[j] = sdata[ii+j];
00471          }
00472          for( int j = 0; j < size2; j++ ) {
00473             v[2*j] = ( u[j] + u[size2+j] ) / 2;
00474             v[2*j+1] = u[j] - u[size2+j];
00475          }
00476          for( int j = 0; j < size1; j++ ) {
00477             sdata[ii+j] = v[j];
00478          }
00479       }
00480 
00481    }
00482   
00483 #ifdef STORM_FWT_CCHECKUSAGE
00484    if ( size1 > size ) return 2;
00485 #endif
00486 
00487    return 0;
00488 
00489 #endif
00490 } 

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

Definition at line 337 of file hifwt2ds.cpp.

00344   { 
00345 
00346 #ifdef STORM_USEF
00347 
00348    int iflag;
00349    dhifwt2dsws_( &Sizef2d, &ns, &size, wdata, sdata, ws, &iflag );
00350    return iflag;
00351 
00352 #else
00353 
00354    int ii,size2;
00355    int size1 = ns;
00356    double *u = ws;
00357    double *v = &ws[Sizef2d];
00358 
00359 #ifdef STORM_FWT_CCHECKUSAGE
00360    if ( size1 < ns ) return 1;
00361 #endif
00362 
00363    for( int i = 0; i < size*size; i++ ) {
00364       sdata[i] = wdata[i];
00365    }
00366 
00367    if ( size == ns ) return 0;
00368 
00369    while ( size1 < size ) {
00370 
00371       size2 = size1;
00372       size1 = 2 * size1;
00373 
00374       for( int j = 0; j < size1; j++ ) {        // index 1
00375          for( int i = 0; i < size1; i++ ) {
00376             ii = i * size;
00377             u[i] = sdata[ii+j];
00378          }
00379          for( int i = 0; i < size2; i++ ) {
00380             v[2*i] = ( u[i] + u[size2+i] ) * INVSQRT2;
00381             v[2*i+1] = ( u[i] - u[size2+i] ) * INVSQRT2;
00382          }
00383          for( int i = 0; i < size1; i++ ) {
00384             ii = i * size;
00385             sdata[ii+j] = v[i];
00386          }
00387       }
00388 
00389       for( int i = 0; i < size1; i++ ) {        // index 2
00390          ii = i * size;
00391          for( int j = 0; j < size1; j++ ) {
00392             u[j] = sdata[ii+j];
00393          }
00394          for( int j = 0; j < size2; j++ ) {
00395             v[2*j] = ( u[j] + u[size2+j] ) * INVSQRT2;
00396             v[2*j+1] = ( u[j] - u[size2+j] ) * INVSQRT2;
00397          }
00398          for( int j = 0; j < size1; j++ ) {
00399             sdata[ii+j] = v[j];
00400          }
00401       }
00402 
00403    }
00404 
00405 #ifdef STORM_FWT_CCHECKUSAGE
00406    if ( size1 > size ) return 2;
00407 #endif
00408 
00409    return 0;
00410 
00411 #endif
00412 } 

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

Definition at line 259 of file hifwt2ds.cpp.

00266   { 
00267 
00268 #ifdef STORM_USEF
00269 
00270    int iflag;
00271    hifwt2dsws_( &Sizef2d, &ns, &size, wdata, sdata, ws, &iflag );
00272    return iflag;
00273 
00274 #else
00275 
00276    int ii,size2;
00277    int size1 = ns;
00278    float *u = ws;
00279    float *v = &ws[Sizef2d];
00280 
00281 #ifdef STORM_FWT_CCHECKUSAGE
00282    if ( size1 < ns ) return 1;
00283 #endif
00284 
00285    for( int i = 0; i < size*size; i++ ) {
00286       sdata[i] = wdata[i];
00287    }
00288 
00289    if ( size == ns ) return 0;
00290 
00291    while ( size1 < size ) {
00292 
00293       size2 = size1;
00294       size1 = 2 * size1;
00295 
00296       for( int j = 0; j < size1; j++ ) {        // index 1
00297          for( int i = 0; i < size1; i++ ) {
00298             ii = i * size;
00299             u[i] = sdata[ii+j];
00300          }
00301          for( int i = 0; i < size2; i++ ) {
00302             v[2*i] = ( u[i] + u[size2+i] ) * INVSQRT2;
00303             v[2*i+1] = ( u[i] - u[size2+i] ) * INVSQRT2;
00304          }
00305          for( int i = 0; i < size1; i++ ) {
00306             ii = i * size;
00307             sdata[ii+j] = v[i];
00308          }  
00309       }
00310 
00311       for( int i = 0; i < size1; i++ ) {        // index 2
00312          ii = i * size;
00313          for( int j = 0; j < size1; j++ ) {
00314             u[j] = sdata[ii+j];
00315          }
00316          for( int j = 0; j < size2; j++ ) {
00317             v[2*j] = ( u[j] + u[size2+j] ) * INVSQRT2;
00318             v[2*j+1] = ( u[j] - u[size2+j] ) * INVSQRT2;
00319          }
00320          for( int j = 0; j < size1; j++ ) {
00321             sdata[ii+j] = v[j];
00322          }
00323       }
00324 
00325    }
00326    
00327 #ifdef STORM_FWT_CCHECKUSAGE
00328    if ( size1 > size ) return 2;
00329 #endif
00330 
00331    return 0;
00332 
00333 #endif
00334 } 

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

Definition at line 179 of file hifwt2ds.cpp.

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

int hifwt2ds const int Sizef2d,
const int ns,
const int size,
const double *  wdata,
double *  sdata
 

Definition at line 99 of file hifwt2ds.cpp.

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

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

Definition at line 19 of file hifwt2ds.cpp.

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


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