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

hfwt3ds.cpp File Reference

#include "stormdef.h"

Include dependency graph for hfwt3ds.cpp:

Include dependency graph

Go to the source code of this file.

Defines

#define INVSQRT2   STORMDEF_MATHCONST_INVSQRT2

Functions

int hfwt3ds (const int &Sizef3d, const int &ns, const int &size, const int *sdata, int *wdata, int *ws)
int hfwt3ds (const int &Sizef3d, const int &ns, const int &size, const double *sdata, double *wdata, double *ws)
int hfwt3ds (const int &Sizef3d, const int &ns, const int &size, const float *sdata, float *wdata, float *ws)
int hfwt3ds (const int &Sizef3d, const int &ns, const int &size, const int *sdata, int *wdata)
int hfwt3ds (const int &Sizef3d, const int &ns, const int &size, const double *sdata, double *wdata)
int hfwt3ds (const int &Sizef3d, const int &ns, const int &size, const float *sdata, float *wdata)


Define Documentation

#define INVSQRT2   STORMDEF_MATHCONST_INVSQRT2
 

Definition at line 17 of file hfwt3ds.cpp.


Function Documentation

int hfwt3ds const int Sizef3d,
const int ns,
const int size,
const int sdata,
int wdata,
int ws
 

Definition at line 600 of file hfwt3ds.cpp.

References ihfwt3dsws_(), ii, j, jj, k, sdata(), size1, Sizef3d, v, and wdata().

00607   { 
00608 
00609 #ifdef STORM_USEF
00610 
00611    int iflag;
00612    ihfwt3dsws_( &Sizef3d, &ns, &size, sdata, wdata, ws, &iflag );
00613    return iflag;
00614 
00615 #else
00616 
00617    int ii,jj,l,size2;
00618    int size1 = size;
00619    int *u = ws;
00620    int *v = &ws[Sizef3d];
00621 
00622 #ifdef STORM_FWT_CCHECKUSAGE
00623    if ( size1 < ns ) return 1;
00624 #endif
00625 
00626    for( int i = 0; i < size1; i++ ) {
00627       ii=i*size*size;
00628       for( int j = 0; j < size1; j++ ) {
00629          jj=j*size;
00630          for( int k = 0; k < size1; k++ ) {
00631             wdata[ii+jj+k] = sdata[ii+jj+k];
00632          }
00633       }
00634    }
00635 
00636    if ( size1 == ns ) return 0;
00637 
00638    while ( size1 > ns ) {
00639 
00640       size2 = size1 / 2;
00641 
00642       for( int j = 0; j < size1; j++ ) {        // index 1
00643          jj = j * size;
00644          for( int k = 0; k < size1; k++ ) {
00645             for( int i = 0; i < size1; i++ ) {
00646                ii = i * size * size;
00647                u[i] = wdata[ii+jj+k];
00648             }
00649             for( int i = 0; i < size2; i++ ) {
00650                l = 2 * i;
00651                v[i] = ( u[l] + u[l+1] ) / 2;
00652                v[size2+i] = u[l] - u[l+1];
00653             }
00654             for( int i = 0; i < size1; i++ ) {
00655                ii = i * size * size;
00656                wdata[ii+jj+k] = v[i];
00657             }
00658          }  
00659       }
00660 
00661       for( int i = 0; i < size1; i++ ) {        // index 2
00662          ii = i * size * size;
00663          for( int k = 0; k < size1; k++ ) {
00664             for( int j = 0; j < size1; j++ ) {
00665                jj = j * size;
00666                u[j] = wdata[ii+jj+k];
00667             }
00668             for( int j = 0; j < size2; j++ ) {
00669                l = 2 * j;
00670                v[j] = ( u[l] + u[l+1] ) / 2;
00671                v[size2+j] = u[l] - u[l+1];
00672             }
00673             for( int j = 0; j < size1; j++ ) {
00674                jj = j * size;
00675                wdata[ii+jj+k] = v[j];
00676             }
00677          }
00678       }
00679 
00680       for( int i = 0; i < size1; i++ ) {        // index 3
00681          ii = i * size * size;
00682          for( int j = 0; j < size1; j++ ) {
00683             jj = j * size;
00684 
00685             for( int k = 0; k < size1; k++ ) {
00686                u[k] = wdata[ii+jj+k];
00687             }
00688 
00689             for( int k = 0; k < size2; k++ ) {
00690                l = 2 * k;
00691                v[k] = ( u[l] + u[l+1] ) / 2;
00692                v[size2+k] = u[j] - u[l+1];
00693             }
00694 
00695             for( int k = 0; k < size1; k++ ) {
00696                wdata[ii+jj+k] = v[k];
00697             }
00698          }
00699       }
00700 
00701       size1 = size2;
00702 
00703    }
00704 
00705 #ifdef STORM_FWT_CCHECKUSAGE
00706    if (size1 != ns) return 2;
00707 #endif
00708 
00709    return 0;
00710 
00711 #endif
00712 } 

int hfwt3ds const int Sizef3d,
const int ns,
const int size,
const double *  sdata,
double *  wdata,
double *  ws
 

Definition at line 485 of file hfwt3ds.cpp.

00492   { 
00493 
00494 #ifdef STORM_USEF
00495 
00496    int iflag;
00497    dhfwt3dsws_( &Sizef3d, &ns, &size, sdata, wdata, ws, &iflag );
00498    return iflag;
00499 
00500 #else
00501 
00502    int ii,jj,l,size2;
00503    int size1 = size;
00504    double* u = ws;
00505    double* v = &ws[Sizef3d];
00506 
00507 #ifdef STORM_FWT_CCHECKUSAGE
00508    if ( size1 < ns ) return 1;
00509 #endif
00510 
00511    for( int i = 0; i < size1; i++ ) {
00512       ii=i*size*size;
00513       for( int j = 0; j < size1; j++ ) {
00514          jj=j*size;
00515          for( int k = 0; k < size1; k++ ) {
00516             wdata[ii+jj+k] = sdata[ii+jj+k];
00517          }
00518       }
00519    }
00520 
00521    if ( size1 == ns ) return 0;
00522 
00523    while ( size1 > ns ) {
00524 
00525       size2 = size1 / 2;
00526 
00527       for( int j = 0; j < size1; j++ ) {        // index 1
00528          jj = j * size;
00529          for( int k = 0; k < size1; k++ ) {
00530             for( int i = 0; i < size1; i++ ) {
00531                ii = i * size * size;
00532                u[i] = wdata[ii+jj+k];
00533             }
00534             for( int i = 0; i < size2; i++ ) {
00535                l = 2 * i;
00536                v[i] = ( u[l] + u[l+1] ) * INVSQRT2;
00537                v[size2+i] = ( u[l] - u[l+1] ) * INVSQRT2;
00538             }
00539             for( int i = 0; i < size1; i++ ) {
00540                ii = i * size * size;
00541                wdata[ii+jj+k] = v[i];
00542             }
00543          }  
00544       }
00545 
00546       for( int i = 0; i < size1; i++ ) {        // index 2
00547          ii = i * size * size;
00548          for( int k = 0; k < size1; k++ ) {
00549             for( int j = 0; j < size1; j++ ) {
00550                jj = j * size;
00551                u[j] = wdata[ii+jj+k];
00552             }
00553             for( int j = 0; j < size2; j++ ) {
00554                l = 2 * j;
00555                  v[j] = ( u[l] + u[l+1] ) * INVSQRT2;
00556                  v[size2+j] = ( u[l] - u[l+1] ) * INVSQRT2;
00557             }
00558             for( int j = 0; j < size1; j++ ) {
00559                jj = j * size;
00560                wdata[ii+jj+k] = v[j];
00561             }
00562          }
00563       }
00564 
00565       for( int i = 0; i < size1; i++ ) {        // index 3
00566          ii = i * size * size;
00567          for( int j = 0; j < size1; j++ ) {
00568             jj = j * size;
00569 
00570             for( int k = 0; k < size1; k++ ) {
00571                u[k] = wdata[ii+jj+k];
00572             }
00573 
00574             for( int k = 0; k < size2; k++ ) {
00575                l = 2 * k;
00576                v[k] = ( u[l] + u[l+1] ) * INVSQRT2;
00577                v[size2+k] = ( u[j] - u[l+1] ) * INVSQRT2;
00578             }
00579 
00580             for( int k = 0; k < size1; k++ ) {
00581                wdata[ii+jj+k] = v[k];
00582             }
00583          }
00584       }
00585 
00586       size1 = size2;
00587 
00588    }
00589 
00590 #ifdef STORM_FWT_CCHECKUSAGE
00591    if (size1 != ns) return 2;
00592 #endif
00593 
00594    return 0;
00595 
00596 #endif
00597 } 

int hfwt3ds const int Sizef3d,
const int ns,
const int size,
const float *  sdata,
float *  wdata,
float *  ws
 

Definition at line 370 of file hfwt3ds.cpp.

00377   { 
00378 
00379 #ifdef STORM_USEF
00380 
00381    int iflag;
00382    hfwt3dsws_( &Sizef3d, &ns, &size, sdata, wdata, ws, &iflag );
00383    return iflag;
00384 
00385 #else
00386 
00387    int ii,jj,l,size2;
00388    int size1 = size;
00389    float *u = ws;
00390    float *v = &ws[Sizef3d];
00391 
00392 #ifdef STORM_FWT_CCHECKUSAGE
00393    if ( size1 < ns ) return 1;
00394 #endif
00395 
00396    for( int i = 0; i < size1; i++ ) {
00397       ii=i*size*size;
00398       for( int j = 0; j < size1; j++ ) {
00399          jj=j*size;
00400          for( int k = 0; k < size1; k++ ) {
00401             wdata[ii+jj+k] = sdata[ii+jj+k];
00402          }
00403       }
00404    }
00405 
00406    if ( size1 == ns ) return 0;
00407 
00408    while ( size1 > ns ) {
00409 
00410       size2 = size1 / 2;
00411 
00412       for( int j = 0; j < size1; j++ ) {        // index 1
00413          jj = j * size;
00414          for( int k = 0; k < size1; k++ ) {
00415             for( int i = 0; i < size1; i++ ) {
00416                ii = i * size * size;
00417                u[i] = wdata[ii+jj+k];
00418             }
00419             for( int i = 0; i < size2; i++ ) {
00420                l = 2 * i;
00421                v[i] = ( u[l] + u[l+1] ) * INVSQRT2;
00422                v[size2+i] = ( u[l] - u[l+1] ) * INVSQRT2;
00423             }
00424             for( int i = 0; i < size1; i++ ) {
00425                ii = i * size * size;
00426                wdata[ii+jj+k] = v[i];
00427             }
00428          }  
00429       }
00430 
00431       for( int i = 0; i < size1; i++ ) {        // index 2
00432          ii = i * size * size;
00433          for( int k = 0; k < size1; k++ ) {
00434             for( int j = 0; j < size1; j++ ) {
00435                jj = j * size;
00436                u[j] = wdata[ii+jj+k];
00437             }
00438             for( int j = 0; j < size2; j++ ) {
00439                l = 2 * j;
00440                v[j] = ( u[l] + u[l+1] ) * INVSQRT2;
00441                v[size2+j] = ( u[l] - u[l+1] ) * INVSQRT2;
00442             }
00443             for( int j = 0; j < size1; j++ ) {
00444                jj = j * size;
00445                wdata[ii+jj+k] = v[j];
00446             }
00447          }
00448       }
00449 
00450       for( int i = 0; i < size1; i++ ) {        // index 3
00451          ii = i * size * size;
00452          for( int j = 0; j < size1; j++ ) {
00453             jj = j * size;
00454 
00455             for( int k = 0; k < size1; k++ ) {
00456                u[k] = wdata[ii+jj+k];
00457             }
00458 
00459             for( int k = 0; k < size2; k++ ) {
00460                l = 2 * k;
00461                v[k] = ( u[l] + u[l+1] ) * INVSQRT2;
00462                v[size2+k] = ( u[j] - u[l+1] ) * INVSQRT2;
00463             }
00464 
00465             for( int k = 0; k < size1; k++ ) {
00466                wdata[ii+jj+k] = v[k];
00467             }
00468          }
00469       }
00470 
00471       size1 = size2;
00472 
00473    }
00474 
00475 #ifdef STORM_FWT_CCHECKUSAGE
00476    if (size1 != ns) return 2;
00477 #endif
00478 
00479    return 0;
00480 
00481 #endif
00482 } 

int hfwt3ds const int Sizef3d,
const int ns,
const int size,
const int sdata,
int wdata
 

Definition at line 253 of file hfwt3ds.cpp.

00259   { 
00260 
00261 #ifdef STORM_USEF
00262 
00263    int iflag;
00264    ihfwt3ds_( &Sizef3d, &ns, &size, sdata, wdata, &iflag );
00265    return iflag;
00266 
00267 #else
00268 
00269    int ii,jj,l,size2;
00270    int size1 = size;
00271    int *u = new int[Sizef3d];
00272    int *v = new int[Sizef3d];
00273 
00274 #ifdef STORM_FWT_CCHECKUSAGE
00275    if ( size1 < ns ) return 1;
00276 #endif
00277 
00278    for( int i = 0; i < size1; i++ ) {
00279       ii=i*size*size;
00280       for( int j = 0; j < size1; j++ ) {
00281          jj=j*size;
00282          for( int k = 0; k < size1; k++ ) {
00283             wdata[ii+jj+k] = sdata[ii+jj+k];
00284          }
00285       }
00286    }
00287 
00288    if ( size1 == ns ) return 0;
00289 
00290    while ( size1 > ns ) {
00291 
00292       size2 = size1 / 2;
00293 
00294       for( int j = 0; j < size1; j++ ) {        // index 1
00295          jj = j * size;
00296          for( int k = 0; k < size1; k++ ) {
00297             for( int i = 0; i < size1; i++ ) {
00298                ii = i * size * size;
00299                u[i] = wdata[ii+jj+k];
00300             }
00301             for( int i = 0; i < size2; i++ ) {
00302                l = 2 * i;
00303                v[i] = ( u[l] + u[l+1] ) / 2;
00304                v[size2+i] = u[l] - u[l+1];
00305             }
00306             for( int i = 0; i < size1; i++ ) {
00307                ii = i * size * size;
00308                wdata[ii+jj+k] = v[i];
00309             }
00310          }  
00311       }
00312 
00313       for( int i = 0; i < size1; i++ ) {        // index 2
00314          ii = i * size * size;
00315          for( int k = 0; k < size1; k++ ) {
00316             for( int j = 0; j < size1; j++ ) {
00317                jj = j * size;
00318                u[j] = wdata[ii+jj+k];
00319             }
00320             for( int j = 0; j < size2; j++ ) {
00321                l = 2 * j;
00322                v[j] = ( u[l] + u[l+1] ) / 2;
00323                v[size2+j] = u[l] - u[l+1];
00324             }
00325             for( int j = 0; j < size1; j++ ) {
00326                jj = j * size;
00327                wdata[ii+jj+k] = v[j];
00328             }
00329          }
00330       }
00331 
00332       for( int i = 0; i < size1; i++ ) {        // index 3
00333          ii = i * size * size;
00334          for( int j = 0; j < size1; j++ ) {
00335             jj = j * size;
00336 
00337             for( int k = 0; k < size1; k++ ) {
00338                u[k] = wdata[ii+jj+k];
00339             }
00340 
00341             for( int k = 0; k < size2; k++ ) {
00342                l = 2 * k;
00343                v[k] = ( u[l] + u[l+1] ) / 2;
00344                v[size2+k] = u[j] - u[l+1];
00345             }
00346 
00347             for( int k = 0; k < size1; k++ ) {
00348                wdata[ii+jj+k] = v[k];
00349             }
00350          }
00351       }
00352 
00353       size1 = size2;
00354 
00355    }
00356 
00357    delete [] u;
00358    delete [] v;
00359 
00360 #ifdef STORM_FWT_CCHECKUSAGE
00361    if (size1 != ns) return 2;
00362 #endif
00363 
00364    return 0;
00365 
00366 #endif
00367 } 

int hfwt3ds const int Sizef3d,
const int ns,
const int size,
const double *  sdata,
double *  wdata
 

Definition at line 136 of file hfwt3ds.cpp.

00142   { 
00143 
00144 #ifdef STORM_USEF
00145 
00146    int iflag;
00147    dhfwt3ds_( &Sizef3d, &ns, &size, sdata, wdata, &iflag );
00148    return iflag;
00149 
00150 #else
00151 
00152    int ii,jj,l,size2;
00153    int size1 = size;
00154    double *u = new double[Sizef3d];
00155    double *v = new double[Sizef3d];
00156 
00157 #ifdef STORM_FWT_CCHECKUSAGE
00158    if ( size1 < ns ) return 1;
00159 #endif
00160 
00161    for( int i = 0; i < size1; i++ ) {
00162       ii=i*size*size;
00163       for( int j = 0; j < size1; j++ ) {
00164          jj=j*size;
00165          for( int k = 0; k < size1; k++ ) {
00166             wdata[ii+jj+k] = sdata[ii+jj+k];
00167          }
00168       }
00169    }
00170 
00171    if ( size1 == ns ) return 0;
00172 
00173    while ( size1 > ns ) {
00174 
00175       size2 = size1 / 2;
00176 
00177       for( int j = 0; j < size1; j++ ) {        // index 1
00178          jj = j * size;
00179          for( int k = 0; k < size1; k++ ) {
00180             for( int i = 0; i < size1; i++ ) {
00181                ii = i * size * size;
00182                u[i] = wdata[ii+jj+k];
00183             }
00184             for( int i = 0; i < size2; i++ ) {
00185                l = 2 * i;
00186                v[i] = ( u[l] + u[l+1] ) * INVSQRT2;
00187                v[size2+i] = ( u[l] - u[l+1] ) * INVSQRT2;
00188             }
00189             for( int i = 0; i < size1; i++ ) {
00190                ii = i * size * size;
00191                wdata[ii+jj+k] = v[i];
00192             }
00193          }  
00194       }
00195 
00196       for( int i = 0; i < size1; i++ ) {        // index 2
00197          ii = i * size * size;
00198          for( int k = 0; k < size1; k++ ) {
00199             for( int j = 0; j < size1; j++ ) {
00200                jj = j * size;
00201                u[j] = wdata[ii+jj+k];
00202             }
00203             for( int j = 0; j < size2; j++ ) {
00204                l = 2 * j;
00205                  v[j] = ( u[l] + u[l+1] ) * INVSQRT2;
00206                  v[size2+j] = ( u[l] - u[l+1] ) * INVSQRT2;
00207             }
00208             for( int j = 0; j < size1; j++ ) {
00209                jj = j * size;
00210                wdata[ii+jj+k] = v[j];
00211             }
00212          }
00213       }
00214 
00215       for( int i = 0; i < size1; i++ ) {        // index 3
00216          ii = i * size * size;
00217          for( int j = 0; j < size1; j++ ) {
00218             jj = j * size;
00219 
00220             for( int k = 0; k < size1; k++ ) {
00221                u[k] = wdata[ii+jj+k];
00222             }
00223 
00224             for( int k = 0; k < size2; k++ ) {
00225                l = 2 * k;
00226                v[k] = ( u[l] + u[l+1] ) * INVSQRT2;
00227                v[size2+k] = ( u[j] - u[l+1] ) * INVSQRT2;
00228             }
00229 
00230             for( int k = 0; k < size1; k++ ) {
00231                wdata[ii+jj+k] = v[k];
00232             }
00233          }
00234       }
00235 
00236       size1 = size2;
00237 
00238    }
00239 
00240    delete [] u;
00241    delete [] v;
00242 
00243 #ifdef STORM_FWT_CCHECKUSAGE
00244    if (size1 != ns) return 2;
00245 #endif
00246 
00247    return 0;
00248 
00249 #endif
00250 } 

int hfwt3ds const int Sizef3d,
const int ns,
const int size,
const float *  sdata,
float *  wdata
 

Definition at line 19 of file hfwt3ds.cpp.

00025   { 
00026 
00027 #ifdef STORM_USEF
00028 
00029    int iflag;
00030    hfwt3ds_( &Sizef3d, &ns, &size, sdata, wdata, &iflag );
00031    return iflag;
00032 
00033 #else
00034 
00035    int ii,jj,l,size2;
00036    int size1 = size;
00037    float *u = new float[Sizef3d];
00038    float *v = new float[Sizef3d];
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*size;
00046       for( int j = 0; j < size1; j++ ) {
00047          jj=j*size;
00048          for( int k = 0; k < size1; k++ ) {
00049             wdata[ii+jj+k] = sdata[ii+jj+k];
00050          }
00051       }
00052    }
00053 
00054    if ( size1 == ns ) return 0;
00055 
00056    while ( size1 > ns ) {
00057 
00058       size2 = size1 / 2;
00059 
00060       for( int j = 0; j < size1; j++ ) {        // index 1
00061          jj = j * size;
00062          for( int k = 0; k < size1; k++ ) {
00063             for( int i = 0; i < size1; i++ ) {
00064                ii = i * size * size;
00065                u[i] = wdata[ii+jj+k];
00066             }
00067             for( int i = 0; i < size2; i++ ) {
00068                l = 2 * i;
00069                v[i] = ( u[l] + u[l+1] ) * INVSQRT2;
00070                v[size2+i] = ( u[l] - u[l+1] ) * INVSQRT2;
00071             }
00072             for( int i = 0; i < size1; i++ ) {
00073                ii = i * size * size;
00074                wdata[ii+jj+k] = v[i];
00075             }
00076          }  
00077       }
00078 
00079       for( int i = 0; i < size1; i++ ) {        // index 2
00080          ii = i * size * size;
00081          for( int k = 0; k < size1; k++ ) {
00082             for( int j = 0; j < size1; j++ ) {
00083                jj = j * size;
00084                u[j] = wdata[ii+jj+k];
00085             }
00086             for( int j = 0; j < size2; j++ ) {
00087                l = 2 * j;
00088                v[j] = ( u[l] + u[l+1] ) * INVSQRT2;
00089                v[size2+j] = ( u[l] - u[l+1] ) * INVSQRT2;
00090             }
00091             for( int j = 0; j < size1; j++ ) {
00092                jj = j * size;
00093                wdata[ii+jj+k] = v[j];
00094             }
00095          }
00096       }
00097 
00098       for( int i = 0; i < size1; i++ ) {        // index 3
00099          ii = i * size * size;
00100          for( int j = 0; j < size1; j++ ) {
00101             jj = j * size;
00102 
00103             for( int k = 0; k < size1; k++ ) {
00104                u[k] = wdata[ii+jj+k];
00105             }
00106 
00107             for( int k = 0; k < size2; k++ ) {
00108                l = 2 * k;
00109                v[k] = ( u[l] + u[l+1] ) * INVSQRT2;
00110                v[size2+k] = ( u[j] - u[l+1] ) * INVSQRT2;
00111             }
00112 
00113             for( int k = 0; k < size1; k++ ) {
00114                wdata[ii+jj+k] = v[k];
00115             }
00116          }
00117       }
00118 
00119       size1 = size2;
00120 
00121    }
00122 
00123    delete [] u;
00124    delete [] v;
00125 
00126 #ifdef STORM_FWT_CCHECKUSAGE
00127    if (size1 != ns) return 2;
00128 #endif
00129 
00130    return 0;
00131 
00132 #endif
00133 }


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