Changeset 1403 in Sophya for trunk/SophyaExt/IFFTW
- Timestamp:
- Feb 13, 2001, 7:12:43 PM (25 years ago)
- Location:
- trunk/SophyaExt/IFFTW
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaExt/IFFTW/fftwserver.cc
r1401 r1403 13 13 void Recreate(int n); 14 14 void Recreate(int nd, int * nxyz); 15 16 static void FillSizes(const BaseArray & in, int * sz); 15 17 16 18 int _n; // Array dimension for 1-d arrays … … 123 125 } 124 126 127 void 128 FFTWServerPlan::FillSizes(const BaseArray & in, int * sz) 129 { 130 int k1 = 0; 131 int k2 = 0; 132 for(k1=in.NbDimensions()-1; k1>=0; k1--) { 133 sz[k2] = in.Size(k1); k2++; 134 } 135 } 125 136 126 137 /* --Methode-- */ … … 176 187 throw ParmError("FFTWServer::FFTForward( complex<r_8>, complex<r_8> ) rank > MAXND_FFTW !"); 177 188 int sz[MAXND_FFTW]; 178 int k1 = 0; 179 int k2 = 0; 180 for(k1=in.NbDimensions()-1; k1>=0; k1--) { 181 sz[k2] = in.Size(k1); k2++; 182 } 189 FFTWServerPlan::FillSizes(in, sz); 190 // int k1 = 0; 191 // int k2 = 0; 192 // for(k1=in.NbDimensions()-1; k1>=0; k1--) { 193 // sz[k2] = in.Size(k1); k2++; 194 // } 183 195 if (_pndf) _pndf->Recreate(in.NbDimensions(), sz); 184 196 else _pndf = new FFTWServerPlan(in.NbDimensions(), sz, FFTW_FORWARD, false); … … 202 214 throw ParmError("FFTWServer::FFTForward( complex<r_8>, complex<r_8> ) rank > MAXND_FFTW !"); 203 215 int sz[MAXND_FFTW]; 204 int k1 = 0; 205 int k2 = 0; 206 for(k1=in.NbDimensions()-1; k1>=0; k1--) { 207 sz[k2] = in.Size(k1); k2++; 208 } 216 FFTWServerPlan::FillSizes(in, sz); 217 // int k1 = 0; 218 // int k2 = 0; 219 // for(k1=in.NbDimensions()-1; k1>=0; k1--) { 220 // sz[k2] = in.Size(k1); k2++; 221 // } 209 222 if (_pndb) _pndb->Recreate(in.NbDimensions(), sz); 210 223 else _pndb = new FFTWServerPlan(in.NbDimensions(), sz, FFTW_BACKWARD, false); … … 231 244 throw ParmError("FFTWServer::FFTForward( complex<r_8>, complex<r_8> ) rank > MAXND_FFTW !"); 232 245 int sz[MAXND_FFTW]; 233 int k1 = 0; 234 int k2 = 0; 235 for(k1=in.NbDimensions()-1; k1>=0; k1--) { 236 sz[k2] = in.Size(k1); k2++; 237 } 246 FFTWServerPlan::FillSizes(in, sz); 247 // int k1 = 0; 248 // int k2 = 0; 249 // for(k1=in.NbDimensions()-1; k1>=0; k1--) { 250 // sz[k2] = in.Size(k1); k2++; 251 // } 238 252 if (_pndrf) _pndrf->Recreate(in.NbDimensions(), sz); 239 253 else _pndrf = new FFTWServerPlan(in.NbDimensions(), sz, FFTW_REAL_TO_COMPLEX, true); … … 248 262 249 263 250 void FFTWServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out) 264 void FFTWServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out, 265 bool usoutsz) 251 266 { 252 267 253 int rank = ckR8.CheckResize(in, out );268 int rank = ckR8.CheckResize(in, out, usoutsz); 254 269 if (rank == 1) { // One dimensional transform 255 270 TArray<r_8> intemp; … … 266 281 else { // Multi dimensional 267 282 if (in.NbDimensions() > MAXND_FFTW) 268 throw ParmError("FFTWServer::FFTForward( complex<r_8>, complex<r_8>) rank > MAXND_FFTW !");283 throw ParmError("FFTWServer::FFTForward( complex<r_8>, r_8 ) rank > MAXND_FFTW !"); 269 284 int sz[MAXND_FFTW]; 270 int k1 = 0; 271 int k2 = 0; 272 for(k1=in.NbDimensions()-1; k1>=0; k1--) { 273 sz[k2] = in.Size(k1); k2++; 274 } 285 FFTWServerPlan::FillSizes(out, sz); 286 // int k1 = 0; 287 // int k2 = 0; 288 // for(k1=out.NbDimensions()-1; k1>=0; k1--) { 289 // sz[k2] = out.Size(k1); k2++; 290 // } 275 291 if (_pndrb) _pndrb->Recreate(in.NbDimensions(), sz); 276 292 else _pndrb = new FFTWServerPlan(in.NbDimensions(), sz, FFTW_COMPLEX_TO_REAL, true); … … 281 297 } 282 298 283 /*284 void FFTWServer::FFTForward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out)285 {286 out.ReSize(in.NRows(),in.NCols());287 288 if (_pndf) _pndf->Recreate( in.NRows(),in.NCols());289 else _pndf = new FFTWServerPlan( in.NCols(),in.NRows(), FFTW_FORWARD, false);290 291 fftwnd_one(_pndf->pnd, (fftw_complex *)(in.Data()) , (fftw_complex *)(out.Data()) );292 if(this->getNormalize()) out=out/complex<r_8>(pow(in.NRows()*in.NCols(),0.5),0.);293 }294 295 void FFTWServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out)296 {297 if (_pndb) _pndb->Recreate(in.NCols(), in.NRows());298 else _pndb = new FFTWServerPlan(in.NCols(), in.NRows(), FFTW_BACKWARD, false);299 out.ReSize(in.NRows(), in.NCols());300 fftwnd_one(_pndb->pnd, (fftw_complex *)(in.Data()) , (fftw_complex *)(out.Data()) );301 if(this->getNormalize()) out=out/complex<r_8>(pow(in.NRows()*in.NCols(),0.5),0.);302 303 }304 305 306 void FFTWServer::FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out)307 {308 309 TArray< r_8 > inNew(in.NCols(),in.NRows());310 for(int i=0; i<in.NRows(); i++)311 for(int j=0;j<in.NCols(); j++)312 inNew(j,i) = in(i,j);313 314 if (_pndrf) _pndrf->Recreate(inNew.NRows(),inNew.NCols());315 else _pndrf = new FFTWServerPlan(inNew.NRows(), inNew.NCols(),FFTW_REAL_TO_COMPLEX, true);316 // rfftwnd_plan p;317 TArray< complex<r_8> > outTemp;318 outTemp.ReSize(in.NRows(),in.NCols());319 320 rfftwnd_one_real_to_complex(_pndrf->rpnd, (fftw_real *)(in.Data()) , (fftw_complex *)(out.Data()) );321 }322 323 void FFTWServer::FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out)324 {325 326 TArray< complex<r_8> > inNew(in.NCols(),in.NRows());327 for(int i=0; i<in.NRows(); i++)328 for(int j=0;j<in.NCols(); j++)329 inNew(j,i) = in(i,j);330 331 if (_pndrb) _pndrb->Recreate(inNew.NRows(),inNew.NCols());332 else _pndrb = new FFTWServerPlan(inNew.NRows(), inNew.NCols(),FFTW_COMPLEX_TO_REAL, true);333 // rfftwnd_plan p;334 out.ReSize(in.NRows(),in.NCols());335 336 rfftwnd_one_complex_to_real(_pndrb->rpnd, (fftw_complex *)(in.Data()) , (fftw_real *)(out.Data()) );337 cout << " in the function !!!" << endl;338 if(this->getNormalize())339 {340 r_8 norm = (r_8)(in.NRows()*in.NCols());341 out=out/norm;342 }343 }344 345 */346 299 347 300 -
trunk/SophyaExt/IFFTW/fftwserver.h
r1395 r1403 23 23 virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< complex<r_8> > & out); 24 24 virtual void FFTForward(TArray< r_8 > const & in, TArray< complex<r_8> > & out); 25 virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out); 25 virtual void FFTBackward(TArray< complex<r_8> > const & in, TArray< r_8 > & out, 26 bool usoutsz=false); 26 27 27 // Methodes statiques pour reordonner les donnees 28 virtualvoid ReShapetoReal(TArray< complex<r_8> > const & in, TArray< r_8 > & out);29 virtualvoid ReShapetoCompl(TArray< r_8 > const & in, TArray< complex<r_8> > & out);28 // Methodes statiques pour reordonner les donnees en 1-D 29 static void ReShapetoReal(TArray< complex<r_8> > const & in, TArray< r_8 > & out); 30 static void ReShapetoCompl(TArray< r_8 > const & in, TArray< complex<r_8> > & out); 30 31 31 32 protected:
Note:
See TracChangeset
for help on using the changeset viewer.