@@ -1229,7 +1229,8 @@ static int newtonAlgorithm(DATA_HOMOTOPY* solverData, double* x)
12291229{
12301230 int numberOfIterations = 0 ,i , j , n = solverData -> n , m = solverData -> m ;
12311231 int pos = solverData -> n , rank ;
1232- double error_f_sqrd , error_f1_sqrd , error_f2_sqrd , error_f_sqrd_scaled , delta_x_sqrd , delta_x_sqrd_scaled , grad_f ;
1232+ double error_f_sqrd , error_f1_sqrd , error_f2_sqrd , error_f_sqrd_scaled , error_f1_sqrd_scaled ;
1233+ double delta_x_sqrd , delta_x_sqrd_scaled , grad_f , grad_f_scaled ;
12331234 int numberOfSmallSteps = 0 ;
12341235 double error_f_old = 1e100 ;
12351236 int countNegativeSteps = 0 ;
@@ -1258,7 +1259,8 @@ static int newtonAlgorithm(DATA_HOMOTOPY* solverData, double* x)
12581259
12591260 /* calculated error of function values */
12601261 error_f_sqrd = vec2NormSqrd (solverData -> n , solverData -> f1 );
1261- error_f_sqrd_scaled = error_f_sqrd ;
1262+ vecDivScaling (solverData -> n , solverData -> f1 , solverData -> resScaling , solverData -> fvecScaled );
1263+ error_f_sqrd_scaled = vec2NormSqrd (solverData -> n , solverData -> fvecScaled );
12621264
12631265 while (1 )
12641266 {
@@ -1332,15 +1334,18 @@ static int newtonAlgorithm(DATA_HOMOTOPY* solverData, double* x)
13321334 /* Damping (see Numerical Recipes) */
13331335 /* calculate gradient of quadratic function for damping strategy */
13341336 grad_f = -2.0 * error_f_sqrd ;
1337+ grad_f_scaled = -2.0 * error_f_sqrd_scaled ;
13351338 error_f1_sqrd = vec2NormSqrd (solverData -> n , solverData -> f1 );
1339+ vecDivScaling (solverData -> n , solverData -> f1 , solverData -> resScaling , solverData -> f2 );
1340+ error_f1_sqrd_scaled = vec2NormSqrd (solverData -> n , solverData -> f2 );
13361341 debugDouble (LOG_NLS_V ,"Need to damp, grad_f = " , grad_f );
13371342 debugDouble (LOG_NLS_V ,"Need to damp, error_f = " , sqrt (error_f_sqrd ));
1338-
13391343 debugDouble (LOG_NLS_V ,"Need to damp this!! lambda1 = " , lambda1 );
13401344 debugDouble (LOG_NLS_V ,"Need to damp, error_f1 = " , sqrt (error_f1_sqrd ));
1341-
13421345 debugDouble (LOG_NLS_V ,"Need to damp, forced error = " , error_f_sqrd + alpha * lambda1 * grad_f );
1343- if ((error_f1_sqrd > error_f_sqrd + alpha * lambda1 * grad_f ) && (error_f_sqrd > 1e-12 ) && (error_f_sqrd_scaled > 1e-12 ))
1346+ if ((error_f1_sqrd > error_f_sqrd + alpha * lambda1 * grad_f )
1347+ && (error_f1_sqrd_scaled > error_f_sqrd_scaled + alpha * lambda1 * grad_f_scaled )
1348+ && (error_f_sqrd > 1e-12 ) && (error_f_sqrd_scaled > 1e-12 ))
13441349 {
13451350 lambda2 = fmax (- lambda1 * lambda1 * grad_f /(2 * (error_f1_sqrd - error_f_sqrd - lambda1 * grad_f )),lambdaMin );
13461351 debugDouble (LOG_NLS_V ,"Need to damp this!! lambda2 = " , lambda2 );
0 commit comments