322{
323 static double det = 0;
324
325 *ifail = 0;
326
327 if (*n < 1 || *n > *idim) {
328 *ifail = -1;
329 return;
330 }
331
332 if ( *n == 1)
333 {
335 *ifail = -1;
336 return;
337 }
339 return;
340 }
341
342 if ( *n == 2)
343 {
344 det =
a[0] *
a[3] -
a[2] *
a[1];
345
346 if (det == 0.) { *ifail = -1; return; }
347
349 double c11 =
s *
a[3];
350
355 return;
356 }
357
358
359
360 if ( *n == 3 )
361 {
362 static double t1, t2, t3, temp,
s;
363 static double c11, c12, c13, c21, c22, c23, c31, c32, c33;
364
365
366 c11 =
a[4] *
a[8] -
a[7] *
a[5];
367 c12 =
a[7] *
a[2] -
a[1] *
a[8];
368 c13 =
a[1] *
a[5] -
a[4] *
a[2];
369 c21 =
a[5] *
a[6] -
a[8] *
a[3];
370 c22 =
a[8] *
a[0] -
a[2] *
a[6];
371 c23 =
a[2] *
a[3] -
a[5] *
a[0];
372 c31 =
a[3] *
a[7] -
a[6] *
a[4];
373 c32 =
a[6] *
a[1] -
a[0] *
a[7];
374 c33 =
a[0] *
a[4] -
a[3] *
a[1];
375
379
380
381 if(t1 < t2) {
382 if (t3 < t2) {
383
385 det = c13 * c32 - c12 * c33;
386 } else {
387
389 det = c23 * c12 - c22 * c13;
390 }
391 } else {
392 if(t3 < t1) {
393
395 det = c22 * c33 - c23 * c32;
396 } else {
397
399 det = c23 * c12 - c22 * c13;
400 }
401 }
402
403 if (det == 0.) {
404 *ifail = -1;
405 return;
406 }
407
408
419 return;
420 }
421
422
423
424 static int work[100], jfail;
425 for(int i=0; i<*n; ++i) work[i] = 0;
426
427
428
429
430 Dfactir1(n,
a, idim, work, ifail, &det, &jfail);
431 if (*ifail != 0)
432 {
433 cerr << "Dfactir failed!!" << endl;
434 return;
435 }
436 Dfinv1(n,
a, idim, work, ifail);
437 return;
438}
Expr< UnaryOp< Fabs< T >, Expr< A, T, D >, T >, T, D > fabs(const Expr< A, T, D > &rhs)
Definition: UnaryOperators.hh:96
void Dfinv1(int *n, double *a, int *idim, int *ir, int *ifail)
Definition: VtSqMatrix.C:131
void Dfactir1(int *n, double *a, int *idim, int *ir, int *ifail, double *det, int *jfail)
Definition: VtSqMatrix.C:31
void a()
Definition: check_aligned.C:59
s
Definition: check_shower.C:55