Show
Ignore:
Timestamp:
05/06/08 16:35:36 (8 months ago)
Author:
rjrw
Message:

Further refactor newton_step to more purely numerical function.

Remove more dead or leftover code and data.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/newmole/source/mole_solve.cpp

    r1835 r2028  
    3535void check_co_ion_converge(void); 
    3636 
     37STATIC void funjac(const valarray<double> &b2vec, double * const ervals, double * const amat, const bool lgJac); 
     38 
    3739STATIC void mole_h_fixup(void); 
     40 
     41#define SMALLABUND 1e-24 
    3842 
    3943double mole_solve() 
     
    4246        realnum 
    4347                error; 
    44         valarray<double> b2vec(mole.num_compacted); 
     48        valarray<double> oldmols(mole.num_compacted), 
     49                newmols(mole.num_compacted); 
    4550 
    4651        DEBUG_ENTRY( "mole_solve()" ); 
     
    8994                nPrevBad = nBad; 
    9095 
    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] ); 
    94118                 
    95119                //fprintf(stdout,"Mole zone %ld -- %7.2f loop %d error %15.8g nBad %d\n",nzone,fnzone,i,error,nBad); 
     
    248272#define ABSLIM  1e-12 
    249273#define ERRLIM  1e-12 
    250 #define SMALLABUND 1e-24 
    251274#       ifdef MAT 
    252275#               undef MAT 
     
    260283GroupMap MoleMap; 
    261284 
    262 void funjac(valarray<double> &b2vec, double *ervals, double *amat, bool lgJac) 
     285STATIC void funjac(const valarray<double> &b2vec, double * const ervals, double * const amat, const bool lgJac) 
    263286{ 
    264287        long 
     
    520543} 
    521544 
    522 void GroupMap::updateMolecules(double *b2) 
     545void GroupMap::updateMolecules(const double * const b2) 
    523546{ 
    524547        long int