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) |
|
|
Definition at line 8 of file pd4fwt3ds.h. |
|
||||||||||||||||||||||||||||||||
|
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 }
|
|
||||||||||||||||||||||||||||||||
|
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 }
|
|
||||||||||||||||||||||||||||
|
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 }
|
|
||||||||||||||||||||||||||||
|
|
1.3.6