34 #define INCLXX_IN_GEANT4_MODE 1    55   namespace RootFinder {
    63       const G4int maxIterations=50;
    75       std::pair<G4double,G4double> bracketRoot(RootFunctor 
const * 
const f, 
G4double x0) {
    88           return std::make_pair(x0,x1);
    90         const G4double scaleFactorMinus1 = 1./scaleFactor;
    94           if(iterations > maxIterations) {
    95             INCL_DEBUG(
"Could not bracket the root." << 
'\n');
   103           x0 *= scaleFactorMinus1;
   111           return std::make_pair(x0,oldx0);
   113           return std::make_pair(oldx1,x1);
   121       if( std::abs(y0) < toleranceY ) {
   126       std::pair<G4double,G4double> bracket = bracketRoot(f,x0);
   133         if(std::abs(y_at_zero)<=toleranceY) {
   137           INCL_DEBUG(
"Root-finding algorithm could not bracket the root." << 
'\n');
   153       G4int lastUpdated = 0;
   155       for(
G4int iterations=0; std::abs(y) > toleranceY; iterations++) {
   157         if(iterations > maxIterations) {
   158           INCL_DEBUG(
"Root-finding algorithm did not converge." << 
'\n');
   164         x = (y1*x2-y2*
x1)/(y1-y2);
   173           if(lastUpdated==-1) y2 *= 0.5;
   178           if(lastUpdated==1) y1 *= 0.5;
 
virtual void cleanUp(const G4bool success) const =0
 
Solution solve(RootFunctor const *const f, const G4double x0)
Numerically solve a one-dimensional equation. 
 
Static root-finder algorithm.