| Chris@82 | 1 /* | 
| Chris@82 | 2  * Copyright (c) 2003, 2007-14 Matteo Frigo | 
| Chris@82 | 3  * Copyright (c) 2003, 2007-14 Massachusetts Institute of Technology | 
| Chris@82 | 4  * | 
| Chris@82 | 5  * This program is free software; you can redistribute it and/or modify | 
| Chris@82 | 6  * it under the terms of the GNU General Public License as published by | 
| Chris@82 | 7  * the Free Software Foundation; either version 2 of the License, or | 
| Chris@82 | 8  * (at your option) any later version. | 
| Chris@82 | 9  * | 
| Chris@82 | 10  * This program is distributed in the hope that it will be useful, | 
| Chris@82 | 11  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| Chris@82 | 12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
| Chris@82 | 13  * GNU General Public License for more details. | 
| Chris@82 | 14  * | 
| Chris@82 | 15  * You should have received a copy of the GNU General Public License | 
| Chris@82 | 16  * along with this program; if not, write to the Free Software | 
| Chris@82 | 17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA | 
| Chris@82 | 18  * | 
| Chris@82 | 19  */ | 
| Chris@82 | 20 | 
| Chris@82 | 21 | 
| Chris@82 | 22 #include "dft/dft.h" | 
| Chris@82 | 23 | 
| Chris@82 | 24 /* fill a complex array with zeros. */ | 
| Chris@82 | 25 static void recur(const iodim *dims, int rnk, R *ri, R *ii) | 
| Chris@82 | 26 { | 
| Chris@82 | 27      if (rnk == RNK_MINFTY) | 
| Chris@82 | 28           return; | 
| Chris@82 | 29      else if (rnk == 0) | 
| Chris@82 | 30           ri[0] = ii[0] = K(0.0); | 
| Chris@82 | 31      else if (rnk > 0) { | 
| Chris@82 | 32           INT i, n = dims[0].n; | 
| Chris@82 | 33           INT is = dims[0].is; | 
| Chris@82 | 34 | 
| Chris@82 | 35 	  if (rnk == 1) { | 
| Chris@82 | 36 	       /* this case is redundant but faster */ | 
| Chris@82 | 37 	       for (i = 0; i < n; ++i) | 
| Chris@82 | 38 		    ri[i * is] = ii[i * is] = K(0.0); | 
| Chris@82 | 39 	  } else { | 
| Chris@82 | 40 	       for (i = 0; i < n; ++i) | 
| Chris@82 | 41 		    recur(dims + 1, rnk - 1, ri + i * is, ii + i * is); | 
| Chris@82 | 42 	  } | 
| Chris@82 | 43      } | 
| Chris@82 | 44 } | 
| Chris@82 | 45 | 
| Chris@82 | 46 | 
| Chris@82 | 47 void X(dft_zerotens)(tensor *sz, R *ri, R *ii) | 
| Chris@82 | 48 { | 
| Chris@82 | 49      recur(sz->dims, sz->rnk, ri, ii); | 
| Chris@82 | 50 } |