00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _MULTIINDEXIMPLEM_H_
00012 #define _MULTIINDEXIMPLEM_H_
00013
00014 #include "NamespaceHeader.H"
00015
00016
00017
00018 template <int dim> void generateMultiIndices(Vector<IndexTM<int,dim> > & a_indices,
00019 const int & a_magnitude)
00020 {
00021 if (a_magnitude >= 0)
00022 {
00023 IndexTM<int,dim> monomial;
00024
00025 for (int idir = 0; idir < dim; ++ idir)
00026 {
00027 monomial[idir] = 0;
00028 }
00029
00030 while (true)
00031 {
00032 for (int j = 1; j < dim-1; ++j)
00033 {
00034 int t = a_magnitude;
00035 for (int k = j+1; k < dim; ++k)
00036 {
00037 t -= monomial[k];
00038 }
00039
00040 if (monomial[j] > t)
00041 {
00042 monomial[j+1] += 1;
00043 monomial[j] = 0;
00044 }
00045 else
00046 {
00047 break;
00048 }
00049 }
00050
00051 if (monomial[dim-1] > a_magnitude)
00052 {
00053 break;
00054 }
00055
00056 monomial[0] = a_magnitude;
00057
00058 for (int j = 1; j < dim; ++j)
00059 {
00060 monomial[0] -= monomial[j];
00061 }
00062
00063 a_indices.push_back(monomial);
00064
00065 monomial[1] += 1;
00066 }
00067 }
00068 }
00069
00070 #include "NamespaceFooter.H"
00071
00072 #endif