Changeset 2094 for branches/newmole
- Timestamp:
- 05/28/08 14:24:08 (7 months ago)
- Location:
- branches/newmole/source
- Files:
-
- 2 modified
-
mole_species.cpp (modified) (1 diff)
-
newton_step.cpp (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/newmole/source/mole_species.cpp
r2077 r2094 229 229 sp = newspecies("ClO+ ",MOLECULE,MOLE_ACTIVE,NULL, 1158.0f); 230 230 sp = newspecies("ArH+ ",MOLECULE,MOLE_ACTIVE,NULL, 0.0f)/* Binding Energy ?? */; 231 sp = newspecies("NeH+ ",MOLECULE,MOLE_ACTIVE,NULL, 0.0f)/* Binding Energy ?? */; 231 if (0) // Including NeH+ breaks blr_nf84.in ??? 232 sp = newspecies("NeH+ ",MOLECULE,MOLE_ACTIVE,NULL, 0.0f)/* Binding Energy ?? */; 232 233 if(gv.lgDustOn && mole.lgGrain_mole_deplete ) 233 234 { -
branches/newmole/source/newton_step.cpp
r2086 r2094 42 42 error1, 43 43 error0, 44 grad; 44 grad, 45 pred; 45 46 46 47 valarray<double> … … 58 59 } 59 60 60 error0 = error2 = grad = f1 = f2 = 0.;61 pred = error0 = error2 = grad = f1 = f2 = 0.; 61 62 62 63 for (loop=0;loop<40;loop++) … … 77 78 { 78 79 /* Smooth the error mode tailoff */ 79 etmp = ervals[i]/( (ERRLIM+fabs(b0vec[i]))*(ERRLIM+fabs(escale[i])));80 etmp = ervals[i]/(1e-24+fabs(b0vec[i]*escale[i])); 80 81 etmp *= etmp; 81 82 if (etmp > emax) … … 93 94 b1vec[i] = ervals[i]; 94 95 } 95 //fprintf(ioQQQ,"Chem ");96 96 merror = solve_system(amat,b1vec,n); 97 97 error0 = error1; 98 98 grad = -2*error0; 99 99 f1 = 1.0; 100 100 if (error0 > 1e20) // Limit step for really bad initial conditions 101 f1 = 1e-3; 102 if (0) 103 for ( i=0; i < n; i++ ) 104 { 105 if (b2vec[i] > 0. && f1*fabs(b1vec[i]) > 0.1*b2vec[i]) 106 { 107 f1 = 0.1*b2vec[i]/fabs(b1vec[i]); 108 } 109 } 110 101 111 if (0) 102 112 { … … 144 154 } 145 155 } else { 146 //fprintf(ioQQQ,"Newt %ld stp %11.4g err %11.4g grd %11.4g fdg %11.4g e0 %11.4g de %11.4g \n",147 // loop,f1,error1,grad,(error1-error0)/f1,error0,error1-error0 );156 //fprintf(ioQQQ,"Newt %ld stp %11.4g err %11.4g grd %11.4g fdg %11.4g e0 %11.4g de %11.4g pred %11.4g\n", 157 // loop,f1,error1,grad,(error1-error0)/f1,error0,error1-error0,pred); 148 158 if (error1 < (1-2e-4*f1)*error0 || error1 < 1e-20) 149 159 { … … 154 164 { 155 165 f2 = f1; 156 f1 = -0.5*f1*grad/SDIV(error1-error0-f1*grad); 166 f1 *= -0.5*f1*grad/(error1-error0-f1*grad); 167 pred = error0+0.5*grad*f1; 157 168 } 158 169 else … … 163 174 double b = (-f2*a1/(f1*f1)+f1*b1/(f2*f2)); 164 175 double ft = f1; 165 f1 = (-b+sqrt(b*b-3.*a*grad*(f1-f2)))/(3.*a); 176 //fprintf(ioQQQ,"Pred 1 %g %g\n",error1,error0+ft*(grad+ft/(ft-f2)*(b+a*ft))); 177 //fprintf(ioQQQ,"Pred 2 %g %g\n",error2,error0+f2*(grad+f2/(ft-f2)*(b+a*f2))); 178 //f1 = (-b+sqrt(b*b-3.*a*grad*(ft-f2)))/(3.*a); 179 //fprintf(ioQQQ,"Pred x %g %g\n",f1,error0+f1*(grad+f1/(ft-f2)*(b+a*f1))); 180 f1 = 1.-3.*(a/b)*(grad/b)*(ft-f2); 181 if (f1 > 0.) 182 f1 = b/(3.*a)*(-1.-sqrt(f1)); 183 else 184 f1 = -b/(3.*a); 185 //fprintf(ioQQQ,"Pred n %g %g\n",f1,error0+f1*(grad+f1/(ft-f2)*(b+a*f1))); 186 pred = error0+f1*(grad+f1/(ft-f2)*(b+a*f1)); 166 187 f2 = ft; 167 188 }
