340{
344
347
348 for(k = 0; k < 4; k++)
349 {
351 }
352
353 if(p[0] != 1.0)
354 {
355 for(k = 1; k < 5; k++)
356 {
357 p[k] = p[k] / p[0];
358 }
359 p[0] = 1.;
360 }
361 a3 = p[1];
362 a2 = p[2];
363 a1 = p[3];
365
366
367
368 p[1] = -a2;
369 p[2] = a1 * a3 - 4 *
a0;
370 p[3] = 4 * a2 *
a0 - a1 * a1 - a3 * a3 *
a0;
371
373
374 for(k = 1; k < 4; k++)
375 {
376 if(r[2][k] == 0.)
377 {
378 reRoot[k] = r[1][k];
379 }
380 else
381 {
383 }
384 }
386 for(k = 1; k < 4; k++)
387 {
388 if(reRoot[k] < y1)
389 {
390 y1 = reRoot[k];
391 }
392 }
393
394 R2 = 0.25 * a3 * a3 - a2 + y1;
395 b = 0.25 * (4 * a3 * a2 - 8 * a1 - a3 * a3 * a3);
396 c = 0.75 * a3 * a3 - 2 * a2;
397 a = c - R2;
398 d = 4 * y1 * y1 - 16 *
a0;
399
400 if(R2 > 0.)
401 {
402 R = std::sqrt(R2);
403 D2 = a + b / R;
404 E2 = a - b / R;
405
406 if(D2 >= 0.)
407 {
409 r[1][1] = -0.25 * a3 + 0.5 * R + 0.5 *
D;
410 r[1][2] = -0.25 * a3 + 0.5 * R - 0.5 *
D;
411 r[2][1] = 0.;
412 r[2][2] = 0.;
413 }
414 else
415 {
417 r[1][1] = -0.25 * a3 + 0.5 * R;
418 r[1][2] = -0.25 * a3 + 0.5 * R;
421 }
422 if(E2 >= 0.)
423 {
424 E = std::sqrt(E2);
425 r[1][3] = -0.25 * a3 - 0.5 * R + 0.5 * E;
426 r[1][4] = -0.25 * a3 - 0.5 * R - 0.5 * E;
427 r[2][3] = 0.;
428 r[2][4] = 0.;
429 }
430 else
431 {
432 E = std::sqrt(-E2);
433 r[1][3] = -0.25 * a3 - 0.5 * R;
434 r[1][4] = -0.25 * a3 - 0.5 * R;
435 r[2][3] = 0.5 * E;
436 r[2][4] = -0.5 * E;
437 }
438 }
439 else if(R2 < 0.)
440 {
441 R = std::sqrt(-R2);
444
445 r[1][1] = -0.25 * a3 + 0.5 * real(CD);
446 r[1][2] = -0.25 * a3 - 0.5 * real(CD);
447 r[2][1] = 0.5 * R + 0.5 * imag(CD);
448 r[2][2] = 0.5 * R - 0.5 * imag(CD);
451
452 r[1][3] = -0.25 * a3 + 0.5 * real(CE);
453 r[1][4] = -0.25 * a3 - 0.5 * real(CE);
454 r[2][3] = -0.5 * R + 0.5 * imag(CE);
455 r[2][4] = -0.5 * R - 0.5 * imag(CE);
456 }
457 else
458 {
459 if(d >= 0.)
460 {
461 D2 = c + std::sqrt(d);
462 E2 = c - std::sqrt(d);
463
464 if(D2 >= 0.)
465 {
467 r[1][1] = -0.25 * a3 + 0.5 * R + 0.5 *
D;
468 r[1][2] = -0.25 * a3 + 0.5 * R - 0.5 *
D;
469 r[2][1] = 0.;
470 r[2][2] = 0.;
471 }
472 else
473 {
475 r[1][1] = -0.25 * a3 + 0.5 * R;
476 r[1][2] = -0.25 * a3 + 0.5 * R;
479 }
480 if(E2 >= 0.)
481 {
482 E = std::sqrt(E2);
483 r[1][3] = -0.25 * a3 - 0.5 * R + 0.5 * E;
484 r[1][4] = -0.25 * a3 - 0.5 * R - 0.5 * E;
485 r[2][3] = 0.;
486 r[2][4] = 0.;
487 }
488 else
489 {
490 E = std::sqrt(-E2);
491 r[1][3] = -0.25 * a3 - 0.5 * R;
492 r[1][4] = -0.25 * a3 - 0.5 * R;
493 r[2][3] = 0.5 * E;
494 r[2][4] = -0.5 * E;
495 }
496 }
497 else
498 {
499 ds = std::sqrt(-d);
502
503 r[1][1] = -0.25 * a3 + 0.5 * real(CD);
504 r[1][2] = -0.25 * a3 - 0.5 * real(CD);
505 r[2][1] = 0.5 * R + 0.5 * imag(CD);
506 r[2][2] = 0.5 * R - 0.5 * imag(CD);
507
510
511 r[1][3] = -0.25 * a3 + 0.5 * real(CE);
512 r[1][4] = -0.25 * a3 - 0.5 * real(CE);
513 r[2][3] = -0.5 * R + 0.5 * imag(CE);
514 r[2][4] = -0.5 * R - 0.5 * imag(CE);
515 }
516 }
517 return 4;
518}
G4double D(G4double temp)
std::complex< G4double > G4complex