Changeset 2028 for branches/newmole/source/mole_solve.cpp
- Timestamp:
- 05/06/08 16:35:36 (8 months ago)
- Files:
-
- 1 modified
-
branches/newmole/source/mole_solve.cpp (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/newmole/source/mole_solve.cpp
r1835 r2028 35 35 void check_co_ion_converge(void); 36 36 37 STATIC void funjac(const valarray<double> &b2vec, double * const ervals, double * const amat, const bool lgJac); 38 37 39 STATIC void mole_h_fixup(void); 40 41 #define SMALLABUND 1e-24 38 42 39 43 double mole_solve() … … 42 46 realnum 43 47 error; 44 valarray<double> b2vec(mole.num_compacted); 48 valarray<double> oldmols(mole.num_compacted), 49 newmols(mole.num_compacted); 45 50 46 51 DEBUG_ENTRY( "mole_solve()" ); … … 89 94 nPrevBad = nBad; 90 95 91 MoleMap.setup(&b2vec[0]); 92 newton_step(b2vec, &nBad, &error, mole.num_compacted); 93 MoleMap.updateMolecules( &b2vec[0] ); 96 MoleMap.setup(&oldmols[0]); 97 newton_step(oldmols, newmols, &error, mole.num_compacted, funjac); 98 99 /* check for negative populations */ 100 nBad = 0; 101 long fracneg = 0.; 102 long iworst = -1; 103 for( long i=0; i < mole.num_compacted; i++ ) 104 { 105 if( newmols[i] < 0. ) 106 { 107 if(-newmols[i] > fracneg*SDIV(oldmols[i]) && oldmols[i] > SMALLABUND) 108 { 109 fracneg = -newmols[i]/oldmols[i]; 110 iworst = i; 111 } 112 if (oldmols[i] > SMALLABUND || newmols[i] < -SMALLABUND) 113 ++nBad; 114 } 115 } 116 117 MoleMap.updateMolecules( &newmols[0] ); 94 118 95 119 //fprintf(stdout,"Mole zone %ld -- %7.2f loop %d error %15.8g nBad %d\n",nzone,fnzone,i,error,nBad); … … 248 272 #define ABSLIM 1e-12 249 273 #define ERRLIM 1e-12 250 #define SMALLABUND 1e-24251 274 # ifdef MAT 252 275 # undef MAT … … 260 283 GroupMap MoleMap; 261 284 262 void funjac(valarray<double> &b2vec, double *ervals, double *amat,bool lgJac)285 STATIC void funjac(const valarray<double> &b2vec, double * const ervals, double * const amat, const bool lgJac) 263 286 { 264 287 long … … 520 543 } 521 544 522 void GroupMap::updateMolecules( double *b2)545 void GroupMap::updateMolecules(const double * const b2) 523 546 { 524 547 long int
