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

hifwt3ds.cpp File Reference

#include "stormdef.h"

Include dependency graph for hifwt3ds.cpp:

Include dependency graph

Go to the source code of this file.

Defines

#define INVSQRT2   STORMDEF_MATHCONST_INVSQRT2

Functions

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


Define Documentation

#define INVSQRT2   STORMDEF_MATHCONST_INVSQRT2
 

Definition at line 17 of file hifwt3ds.cpp.


Function Documentation

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

Definition at line 581 of file hifwt3ds.cpp.

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

00588   { 
00589 
00590 #ifdef STORM_USEF
00591 
00592    int iflag;
00593    ihifwt3dsws_( &Sizef3d, &ns, &size, wdata, sdata, ws, &iflag );
00594    return iflag;
00595 
00596 #else
00597 
00598    int ii,jj,size2;
00599    int size1 = ns;
00600    int *u = ws;
00601    int *v = &ws[Sizef3d];
00602 
00603 #ifdef STORM_FWT_CCHECKUSAGE
00604    if ( size1 < ns ) return 1;
00605 #endif
00606 
00607    for( int i = 0; i < size; i++ ) {
00608       ii=i*size*size;
00609       for( int j = 0; j < size; j++ ) {
00610          jj=j*size;
00611          for( int k = 0; k < size; k++ ) {
00612             sdata[ii+jj+k] = wdata[ii+jj+k];
00613          }
00614       }
00615    }
00616 
00617    if ( size == ns ) return 0;
00618 
00619    while ( size1 < size ) {
00620 
00621       size2 = size1;
00622       size1 = 2 * size1;
00623 
00624       for( int j = 0; j < size1; j++ ) {        // index 1
00625          jj = j * size;
00626          for( int k = 0; k < size1; k++ ) {
00627             for( int i = 0; i < size1; i++ ) {
00628                ii = i * size * size;
00629                u[i] = sdata[ii+jj+k];
00630             }
00631             for( int i = 0; i < size2; i++ ) {
00632                v[2*i] = ( u[i] + u[size2+i] ) / 2;
00633                v[2*i+1] = u[i] - u[size2+i];
00634             }
00635             for( int i = 0; i < size1; i++ ) {
00636                ii = i * size * size;
00637                sdata[ii+jj+k] = v[i];
00638             }
00639          }  
00640       }
00641 
00642       for( int i = 0; i < size1; i++ ) {        // index 2
00643          ii = i * size * size;
00644          for( int k = 0; k < size1; k++ ) {
00645             for( int j = 0; j < size1; j++ ) {
00646                jj = j * size;
00647                u[j] = sdata[ii+jj+k];
00648             }
00649             for( int j = 0; j < size2; j++ ) {
00650                v[2*j] = ( u[j] + u[size2+j] ) / 2;
00651                v[2*j+1] = u[j] - u[size2+j];
00652             }
00653             for( int j = 0; j < size1; j++ ) {
00654                jj = j * size;
00655                sdata[ii+jj+k] = v[j];
00656             }
00657          }
00658       }
00659 
00660       for( int i = 0; i < size1; i++ ) {        // index 3
00661          ii = i * size * size;
00662          for( int j = 0; j < size1; j++ ) {
00663             jj = j * size;
00664 
00665             for( int k = 0; k < size1; k++ ) {
00666                u[k] = sdata[ii+jj+k];
00667             }
00668 
00669             for( int k = 0; k < size2; k++ ) {
00670                v[2*k] = ( u[k] + u[size2+k] ) / 2;
00671                v[2*k+1] = u[k] - u[size2+k];
00672             }
00673 
00674             for( int k = 0; k < size1; k++ ) {
00675                sdata[ii+jj+k] = v[k];
00676             }
00677          }
00678       }
00679 
00680    }
00681    
00682 #ifdef STORM_FWT_CCHECKUSAGE
00683    if ( size1 > size ) return 2;
00684 #endif
00685 
00686    return 0;
00687 
00688 #endif
00689 } 

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

Definition at line 470 of file hifwt3ds.cpp.

00477   { 
00478 
00479 #ifdef STORM_USEF
00480 
00481    int iflag;
00482    dhifwt3dsws_( &Sizef3d, &ns, &size, wdata, sdata, ws, &iflag );
00483    return iflag;
00484 
00485 #else
00486 
00487    int ii,jj,size2;
00488    int size1 = ns;
00489    double *u = ws;
00490    double *v = &ws[Sizef3d];
00491 
00492 #ifdef STORM_FWT_CCHECKUSAGE
00493    if ( size1 < ns ) return 1;
00494 #endif
00495 
00496    for( int i = 0; i < size; i++ ) {
00497       ii=i*size*size;
00498       for( int j = 0; j < size; j++ ) {
00499          jj=j*size;
00500          for( int k = 0; k < size; k++ ) {
00501             sdata[ii+jj+k] = wdata[ii+jj+k];
00502          }
00503       }
00504    }
00505 
00506    if ( size == ns ) return 0;
00507 
00508    while ( size1 < size ) {
00509 
00510       size2 = size1;
00511       size1 = 2 * size1;
00512 
00513       for( int j = 0; j < size1; j++ ) {        // index 1
00514          jj = j * size;
00515          for( int k = 0; k < size1; k++ ) {
00516             for( int i = 0; i < size1; i++ ) {
00517                ii = i * size * size;
00518                u[i] = sdata[ii+jj+k];
00519             }
00520             for( int i = 0; i < size2; i++ ) {
00521                v[2*i] = ( u[i] + u[size2+i] ) * INVSQRT2;
00522                v[2*i+1] = ( u[i] - u[size2+i] ) * INVSQRT2;
00523             }
00524             for( int i = 0; i < size1; i++ ) {
00525                ii = i * size * size;
00526                sdata[ii+jj+k] = v[i];
00527             }
00528          }  
00529       }
00530 
00531       for( int i = 0; i < size1; i++ ) {        // index 2
00532          ii = i * size * size;
00533          for( int k = 0; k < size1; k++ ) {
00534             for( int j = 0; j < size1; j++ ) {
00535                jj = j * size;
00536                u[j] = sdata[ii+jj+k];
00537             }
00538             for( int j = 0; j < size2; j++ ) {
00539                v[2*j] = ( u[j] + u[size2+j] ) * INVSQRT2;
00540                v[2*j+1] = ( u[j] - u[size2+j] ) * INVSQRT2;
00541             }
00542             for( int j = 0; j < size1; j++ ) {
00543                jj = j * size;
00544                sdata[ii+jj+k] = v[j];
00545             }
00546          }
00547       }
00548 
00549       for( int i = 0; i < size1; i++ ) {        // index 3
00550          ii = i * size * size;
00551          for( int j = 0; j < size1; j++ ) {
00552             jj = j * size;
00553 
00554             for( int k = 0; k < size1; k++ ) {
00555                u[k] = sdata[ii+jj+k];
00556             }
00557 
00558             for( int k = 0; k < size2; k++ ) {
00559                v[2*k] = ( u[k] + u[size2+k] ) * INVSQRT2;
00560                v[2*k+1] = ( u[k] - u[size2+k] ) * INVSQRT2;
00561             }
00562 
00563             for( int k = 0; k < size1; k++ ) {
00564                sdata[ii+jj+k] = v[k];
00565             }
00566          }
00567       }
00568 
00569    }
00570 
00571 #ifdef STORM_FWT_CCHECKUSAGE
00572    if ( size1 > size ) return 2;
00573 #endif
00574 
00575    return 0;
00576 
00577 #endif
00578 } 

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

Definition at line 359 of file hifwt3ds.cpp.

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

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

Definition at line 246 of file hifwt3ds.cpp.

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

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

Definition at line 132 of file hifwt3ds.cpp.

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

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

Definition at line 19 of file hifwt3ds.cpp.

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


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