132{
133
134 static int nxch, i, j, k, m, ij;
135 static int im2, nm1, nmi;
136 static double s31, s34,
ti;
137
138 *ifail = 0;
139
140 if (*idim < *n || *n <= 0 || *n==1) {
141 *ifail = -1;
142 return;
143 }
144
145
146
148 --ir;
149
150
151
152
153
154 a[*idim + 2] = -
a[(*idim << 1) + 2] * (
a[*idim + 1] *
a[*idim + 2]);
155 a[(*idim << 1) + 1] = -
a[(*idim << 1) + 1];
156
157 if (*n != 2) {
158 for (i = 3; i <= *n; ++i) {
159 const int ii = i * (*idim);
160 const int iii = i + ii;
161 const int imi = ii - *idim;
162 const int iimi = i + imi;
163 im2 = i - 2;
164 for (j = 1; j <= im2; ++j) {
165 const int ji = j * (*idim);
166 const int jii = j + ii;
167 s31 = 0.;
168 for (k = j; k <= im2; ++k) {
169 s31 +=
a[k + ji] *
a[i + k * (*idim)];
170 a[jii] +=
a[j + (k + 1) * (*idim)] *
a[k + 1 + ii];
171 }
172 a[i + ji] = -
a[iii] * (
a[i - 1 + ji] *
a[iimi] + s31);
174 }
175 a[iimi] = -
a[iii] * (
a[i - 1 + imi] *
a[iimi]);
177 }
178 }
179
180 nm1 = *n - 1;
181 for (i = 1; i <= nm1; ++i) {
182 const int ii = i * (*idim);
183 nmi = *n - i;
184 for (j = 1; j <= i; ++j) {
185 const int ji = j * (*idim);
186 const int iji = i + ji;
187 for (k = 1; k <= nmi; ++k) {
188 a[iji] +=
a[i + k + ji] *
a[i + (i + k) * (*idim)];
189 }
190 }
191
192 for (j = 1; j <= nmi; ++j) {
193 const int ji = j * (*idim);
194 s34 = 0.;
195 for (k = j; k <= nmi; ++k) {
196 s34 +=
a[i + k + ii + ji] *
a[i + (i + k) * (*idim)];
197 }
198 a[i + ii + ji] = s34;
199 }
200 }
201
202 nxch = ir[*n];
203 if (nxch == 0) {
204 return;
205 }
206
207 for (m = 1; m <= nxch; ++m) {
208 k = nxch - m + 1;
209 ij = ir[k];
210 i = ij / 4096;
211 j = ij % 4096;
212 const int ii = i * (*idim);
213 const int ji = j * (*idim);
214 for (k = 1; k <= *n; ++k) {
216 a[k + ii] =
a[k + ji];
218 }
219 }
220
221 return;
222}
EdbTrackP * ti[10]
Definition: RecDispMC_Profiles.C:54