Changeset 2056

Show
Ignore:
Timestamp:
05/13/08 17:51:39 (4 months ago)
Author:
rjrw
Message:

Move to overwriting common species with conservation constraints
rather than always the atomic species, to try to improve robustness
using standard scheme (doesn't appear to have much effect).

Files:
1 modified

Legend:

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

    r2055 r2056  
    464464                        { 
    465465                                double sum1 = 0.; 
    466                                 for(i=0;i<mole.num_calc;i++) 
    467                                 { 
    468                                         sum1 += b[i]*mole.list[i]->nElem[nelem]; 
     466                                for(i=0;i<mole.num_compacted;i++) 
     467                                { 
     468                                        sum1 += b[groupspecies[i]->index]*groupspecies[i]->nElem[nelem]; 
    469469                                } 
    470470                                fprintf(ioQQQ,"Elem %ld cons %g %g\n",nelem,sum1,dense.gas_phase[nelem]); 
     
    474474                                        { 
    475475                                                sum1 = 0.; 
    476                                                 for (long j=0;j<mole.num_calc;j++) 
     476                                                for (long j=0;j<mole.num_compacted;j++) 
    477477                                                { 
    478                                                         sum1 += c[i][j]*mole.list[j]->nElem[nelem]; 
     478                                                        sum1 += c[groupspecies[i]->index][groupspecies[j]->index]* 
     479                                                                groupspecies[j]->nElem[nelem]; 
    479480                                                } 
    480481                                                fprintf(ioQQQ,"Eqn %ld error %g\n",i,sum1); 
     
    491492                if (lgConserve) 
    492493                { 
    493                         // Original scheme -- replace atom rows with conservation constraints 
     494                        // Original scheme -- replace atom rows with conservation 
     495                        // constraints, now look for common species 
     496                        valarray<int> iamax(mole.num_compacted), ncons(LIMELM); 
     497                        iamax = 0; 
     498                        for (nelem=ipHYDROGEN;nelem<LIMELM;nelem++) 
     499                        { 
     500                                if (element_list[nelem]->ipMl[0] != -1) 
     501                                { 
     502                                        int imax = -1; 
     503                                        double amax = 0.; 
     504                                        for (i=0;i<mole.num_compacted;i++) 
     505                                        { 
     506                                                if (0 == iamax[i] && groupspecies[i]->nElem[nelem]*groupspecies[i]->den > amax) 
     507                                                { 
     508                                                        amax = groupspecies[i]->nElem[nelem]*groupspecies[i]->den; 
     509                                                        imax = i; 
     510                                                } 
     511                                        } 
     512                                        iamax[imax] = 1; 
     513                                        ncons[nelem] = groupspecies[imax]->index; // was element_list[nelem]->ipMl[0]; 
     514                                } 
     515                        } 
     516 
    494517                        double scale; 
    495518                        for (nelem=ipHYDROGEN;nelem<LIMELM;nelem++) 
     
    499522                                        if (lgJac) 
    500523                                        { 
    501                                                 scale = -(ABSLIM+fabs(c[element_list[nelem]->ipMl[0]][element_list[nelem]->ipMl[0]])); 
    502                                                 for(i=0;i<mole.num_calc;i++) 
     524                                                scale = -(ABSLIM+fabs(c[ncons[nelem]][ncons[nelem]])); 
     525                                                for(i=0;i<mole.num_compacted;i++) 
    503526                                                { 
    504                                                         c[i][element_list[nelem]->ipMl[0]] = mole.list[i]->nElem[nelem]*scale; 
     527                                                        c[groupspecies[i]->index][ncons[nelem]] = groupspecies[i]->nElem[nelem]*scale; 
    505528                                                } 
    506529                                        } 
    507                                         else 
    508                                         { 
    509                                                 scale = c[element_list[nelem]->ipMl[0]][element_list[nelem]->ipMl[0]]; 
    510                                         }                                
    511530                                         
    512                                         b[element_list[nelem]->ipMl[0]] = 0.; 
     531                                        b[ncons[nelem]] = 0.; 
    513532                                } 
    514533                        }