00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include "FFT/FFTBase.h"
00028 #include "Utility/PAssert.h"
00029
00030
00031
00032
00033
00034
00035
00036 template <unsigned Dim, class T>
00037 GuardCellSizes<Dim> FFTBase<Dim,T>::nullGC = GuardCellSizes<Dim>();
00038
00039
00040
00041
00042
00043 template <unsigned Dim, class T>
00044 FFTBase<Dim,T>::FFTBase(FFTBase<Dim,T>::FFT_e transform,
00045 const FFTBase<Dim,T>::Domain_t& domain,
00046 const bool transformTheseDims[Dim], bool compressTemps)
00047 : transformType_m(transform),
00048 Domain_m(domain),
00049 compressTempFields_m(compressTemps)
00050 {
00051
00052
00053 TAU_TYPE_STRING(taustr, " (FFT_e, " + CT(domain) + ", bool [], bool)");
00054 TAU_PROFILE("FFTBase::FFTBase", taustr, TAU_FFT);
00055
00056
00057 nTransformDims_m = 0;
00058 unsigned d;
00059 for (d=0; d<Dim; ++d) {
00060 transformDims_m[d] = transformTheseDims[d];
00061 if (transformTheseDims[d]) ++nTransformDims_m;
00062 }
00063
00064
00065 PInsist(nTransformDims_m>0,"Must transform at least one axis!!");
00066
00067
00068 activeDims_m = new unsigned[nTransformDims_m];
00069 int icount = 0;
00070 for (d=0; d<Dim; ++d)
00071 if (transformDims_m[d]) activeDims_m[icount++] = d;
00072
00073 }
00074
00075 template <unsigned Dim, class T>
00076 FFTBase<Dim,T>::FFTBase(FFTBase<Dim,T>::FFT_e transform,
00077 const FFTBase<Dim,T>::Domain_t& domain,
00078 bool compressTemps)
00079 : transformType_m(transform),
00080 Domain_m(domain),
00081 compressTempFields_m(compressTemps)
00082 {
00083
00084
00085 TAU_TYPE_STRING(taustr, " (FFT_e, " + CT(domain) + ", bool)");
00086 TAU_PROFILE("FFTBase::FFTBase", taustr, TAU_FFT);
00087
00088
00089 nTransformDims_m = Dim;
00090 activeDims_m = new unsigned[Dim];
00091 for (unsigned d=0; d<Dim; d++) {
00092 transformDims_m[d] = true;
00093 activeDims_m[d] = d;
00094 }
00095
00096 }
00097
00098
00099
00100
00101
00102 template <unsigned Dim, class T>
00103 void FFTBase<Dim,T>::write(ostream& out) const {
00104
00105
00106 TAU_TYPE_STRING(taustr, " (ostream&)");
00107 TAU_PROFILE("void " + CT(*this) + "::write", taustr, TAU_FFT | TAU_IO);
00108
00109
00110 out << "---------------FFT Object Dump Begin-------------------" << endl;
00111
00112 out << "Map of transform direction names:" << endl;
00113 map<char*,unsigned>::const_iterator mi, m_end = directions_m.end();
00114 for (mi = directions_m.begin(); mi != m_end; ++mi)
00115 out << "[" << (*mi).first << "," << (*mi).second << "]" << endl;
00116
00117 out << "Transform type = " << transformTypeString_g[transformType_m] << endl;
00118
00119 out << "Transform dimensions: ";
00120 for (unsigned d=0; d<Dim; ++d) {
00121 out << "dim " << d << " = ";
00122 if (transformDims_m[d])
00123 out << "true" << endl;
00124 else
00125 out << "false" << endl;
00126 }
00127 out << endl;
00128 out << "Input Field domain = " << Domain_m << endl;
00129 out << "---------------FFT Object Dump End---------------------" << endl;
00130
00131 return;
00132 }
00133
00134
00135
00136
00137
00138
00139