Changeset 2118 for branches/newmole/source/newton_step.cpp
- Timestamp:
- 06/22/08 10:51:55 (5 months ago)
- Files:
-
- 1 modified
-
branches/newmole/source/newton_step.cpp (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/newmole/source/newton_step.cpp
r2094 r2118 36 36 double 37 37 etmp, 38 etmpeq, 38 39 emax, 39 40 f1, … … 42 43 error1, 43 44 error0, 45 erroreq, 44 46 grad, 45 pred; 47 pred, 48 errstp; 46 49 47 50 valarray<double> … … 49 52 b1vec(n), 50 53 escale(n), 51 ervals(n); 54 ervals(n), 55 ervals1(n); 52 56 int32 merror; 53 57 … … 59 63 } 60 64 61 pred = error0 = error2 = grad = f1 = f2 = 0.; 65 pred = error0 = error2 = erroreq = grad = f1 = f2 = 0.; 66 errstp = 0.0; 62 67 63 68 for (loop=0;loop<40;loop++) … … 67 72 if (loop == 0) 68 73 { 74 // Limit timestep to value where linearizations are reasonable 75 iworst = -1; 69 76 for( i=0; i < n; i++ ) 70 77 { 71 78 escale[i] = MAT(amat,i,i); 72 } 73 } 74 79 if (b0vec[i] > 0 && errstp*b0vec[i] < fabs(ervals[i])) 80 { 81 errstp = fabs(ervals[i])/(1e-24+b0vec[i]); 82 iworst = i; 83 } 84 } 85 errstp *= 3.; 86 for (i=0; i < n; i++) 87 { 88 MAT(amat,i,i) -= errstp; 89 } 90 //if (iworst != -1) 91 // fprintf(stdout,"Timescale %g rate %g worst %s %g %g %g\n", 92 // 1./SDIV(errstp),errstp,groupspecies[iworst]->label, 93 // ervals[iworst],b0vec[iworst],escale[iworst]); 94 } 95 96 // Error from fully relaxed equilibrium solution 97 erroreq = 0.; 98 for( i=0; i < n; i++ ) 99 { 100 etmpeq = ervals[i];//(1e-24+fabs(b0vec[i]*escale[i])); 101 erroreq += etmpeq*etmpeq; 102 } 103 104 // Error from timestep-limited solution 105 for (i=0; i < n; i++) 106 { 107 ervals1[i] = ervals[i]-errstp*(b2vec[i]-b0vec[i]); 108 } 75 109 error1 = emax = 0.; 76 110 iworst = -1; … … 78 112 { 79 113 /* Smooth the error mode tailoff */ 80 etmp = ervals [i]/(1e-24+fabs(b0vec[i]*escale[i]));114 etmp = ervals1[i];//(1e-24+fabs(b0vec[i]*escale[i])); 81 115 etmp *= etmp; 82 116 if (etmp > emax) … … 92 126 for( i=0; i < n; i++ ) 93 127 { 94 b1vec[i] = ervals [i];128 b1vec[i] = ervals1[i]; 95 129 } 96 130 merror = solve_system(amat,b1vec,n); … … 230 264 b1vec[j] = b0vec[j]; 231 265 } 232 jacobn(b1vec,&ervals [0],&amat[0],false);266 jacobn(b1vec,&ervals1[0],&amat[0],false); 233 267 for( i=0; i < n; i++ ) 234 268 { … … 244 278 { 245 279 double e1 = MAT(amat,i,j); 246 double e2 = (escale[j]-ervals [j])/db;280 double e2 = (escale[j]-ervals1[j])/db; 247 281 if (fabs(e1-e2) > 0.01*fabs(e1+e2)) 248 282 fprintf(ioQQQ,"%7s %7s %11.4g %11.4g %11.4g\n", 249 283 groupspecies[i]->label,groupspecies[j]->label,e1,e2, 250 ervals [j]/db);284 ervals1[j]/db); 251 285 } 252 286 } … … 255 289 } 256 290 257 *error = (realnum) MIN2(error 1,1e30);291 *error = (realnum) MIN2(erroreq,1e30); 258 292 259 293 return;
