Changeset 2089

Show
Ignore:
Timestamp:
05/20/08 15:56:57 (3 months ago)
Author:
rjrw
Message:

Merged from trunk r2085:2088

Location:
branches/newmole/source
Files:
3 modified

Legend:

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

    r2023 r2089  
    608608                        conv.BadConvIoniz[1] = dense.EdenTrue; 
    609609                } 
     610 
     611                for(long ipISO=ipH_LIKE; ipISO<NISO; ++ipISO ) 
     612                { 
     613                        for( nelem=ipISO; nelem<LIMELM; ++nelem ) 
     614                        { 
     615                                if( dense.lgElmtOn[nelem] &&  
     616                                                dense.xIonDense[nelem][nelem-ipISO]/dense.eden>conv.EdenErrorAllowed / 10. && 
     617                                                !(iso.chTypeAtomUsed[ipISO][nelem][0]=='L' &&  
     618                                                        iso.xIonSimple[ipISO][nelem]<1e-10) ) 
     619                                { 
     620                                        const realnum err_tol = 1e-2; 
     621                                        realnum abund = 0.; 
     622                                        for (long n=0; n<iso.numLevels_local[ipISO][nelem]; ++n) 
     623                                        { 
     624                                                abund += StatesElem[ipISO][nelem][n].Pop; 
     625                                        } 
     626                                        if( conv.lgConvIoniz && iso.pop_ion_ov_neut[ipISO][nelem] > 1e-15 && 
     627                                                        ! fp_equal_tol(abund*dense.xIonDense[nelem][nelem+1-ipISO],dense.xIonDense[nelem][nelem-ipISO], 
     628                                                                                                                 err_tol*dense.xIonDense[nelem][nelem-ipISO])) 
     629                                        { 
     630                                                //fprintf(ioQQQ,"Inconsistent iso %ld %ld %ld %g\n",loop_ion,nelem,ipISO, 
     631                                                //                              abund*dense.xIonDense[nelem][nelem+1-ipISO]/SDIV(dense.xIonDense[nelem][nelem-ipISO])-1); 
     632                                                conv.lgConvIoniz = false; 
     633                                                sprintf( conv.chConvIoniz , "Iso!=ion" ); 
     634                                                conv.BadConvIoniz[0] = abund*dense.xIonDense[nelem][nelem+1-ipISO]; 
     635                                                conv.BadConvIoniz[1] = dense.xIonDense[nelem][nelem-ipISO]; 
     636                                        } 
     637                                } 
     638                        } 
     639                } 
     640 
    610641                ++loop_ion; 
    611642        } 
  • branches/newmole/source/iso_level.cpp

    r2086 r2089  
    1111#include "grainvar.h" 
    1212#include "he.h" 
     13#include "heavy.h" 
    1314#include "helike.h" 
    1415#include "hydrogenic.h" 
     
    2324#include "thirdparty.h" 
    2425#include "trace.h" 
     26#include "yield.h" 
    2527 
    2628/* solve for level populations  */ 
     
    334336                } 
    335337 
     338#if 0 
    336339                for( long ion=0; ion<=nelem+1; ++ion ) 
    337340                { 
     
    364367                } 
    365368 
     369                for(long ion=dense.IonHigh[nelem]; ion < nelem-NISO; ion++ ) 
     370                { 
     371                        for(long ns=0; ns < Heavy.nsShells[nelem][ion]; ns++ ) 
     372                        { 
     373                                for(long nej=1; nej <= t_yield::Inst().nelec_eject(nelem,ion,ns); nej++ ) 
     374                                { 
     375                                        long IonProduced = MIN2(ion+nej,dense.IonHigh[nelem]); 
     376                                        if (nelem-NISO == IonProduced) 
     377                                        { 
     378                                                source += ionbal.PhotoRate_Shell[nelem][ion][ns][0]* 
     379                                                        t_yield::Inst().elec_eject_frac(nelem,ion,ns,nej-1); 
     380                                        } 
     381                                } 
     382                        } 
     383                } 
     384 
     385#endif 
     386 
    366387                if( nelem-ipISO >= 1 && ionbal.RateIonizTot[nelem][nelem-ipISO-1] > 0.) 
    367388                { 
     
    373394                        sink += ionbal.RateRecomTot[nelem][nelem-ipISO-1]; 
    374395                } 
    375  
     396                 
    376397                creation[0] += source/SDIV(dense.xIonDense[nelem][nelem+1-ipISO]); 
    377398                for( level=0; level < numlevels_local; level++ ) 
  • branches/newmole/source/radius_increment.cpp

    r2086 r2089  
    105105                                         * change is to only do this branch if abundance is large enough to be detected by 
    106106                                         * the ionization convergence solvers */ 
    107                                         const realnum err_tol = 1e-3; 
     107                                        const realnum err_tol = 1e-2; 
    108108                                        /* >>chng 05 sep 02, when low-T solver used solution is approximate, 
    109109                                         * and it must not matter (lot-T solver should not be used if it 
     
    116116                                                abund += StatesElem[ipISO][nelem][n].Pop; 
    117117                                        } 
     118                                        //fprintf(ioQQQ,"%.2f %ld %ld %11.4g %11.4g\n",fnzone,ipISO,nelem, 
     119                                        //                              abund*dense.xIonDense[nelem][nelem+1-ipISO]/SDIV(dense.xIonDense[nelem][nelem-ipISO])-1, 
     120                                        //                              dense.xIonDense[nelem][nelem-ipISO]); 
    118121                                        /* make sure that populations are valid, first check Pop2Ion  */ 
    119122                                        if( iso.pop_ion_ov_neut[ipISO][nelem] > 1e-15 &&