Show
Ignore:
Timestamp:
12/22/07 06:26:02 (11 months ago)
Author:
rjrw
Message:

Mask out grain surface chemistry (was causing convergence failures,
need to investigate further).

Improve diagnostic prints slightly.

Move return of molecular network results to non-network locations out
through the hierarchy (from end of each Newton solver step towards
where it will actually be used).

Location:
branches/newmole/source
Files:
6 modified

Legend:

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

    r1680 r1712  
    1818                        /* this sum of over the molecules did not include the atom and first 
    1919                         * ion that is calculated in the molecular solver */ 
    20                         double sum = dense.xMolecules[nelem]; 
     20                        double sum = 0.; 
    2121                        for( ion=0; ion<nelem+2; ++ion ) 
    2222                        { 
    2323                                sum += dense.xIonDense[nelem][ion]; 
    2424                        } 
    25                         if (sum <= SMALLFLOAT && dense.gas_phase[nelem] > SMALLFLOAT) 
     25                        if (sum+dense.xMolecules[nelem] <= SMALLFLOAT &&  
     26                                        dense.gas_phase[nelem] > SMALLFLOAT) 
    2627                        { 
    27                                 fprintf(ioQQQ,"Problem total density %g of %g nelem %ld(%s)\n", 
    28                                                                 sum,dense.gas_phase[nelem],nelem, 
     28                                fprintf(ioQQQ,"Problem ions %g moles %g error %g of %g nelem %ld(%s)\n", 
     29                                                                sum,dense.xMolecules[nelem], 
     30                                                                sum+dense.xMolecules[nelem]-dense.gas_phase[nelem], 
     31                                                                dense.gas_phase[nelem],nelem, 
    2932                                                                elementnames.chElementSym[nelem]); 
    3033                                lgOK=false; 
     
    4144                        /* >>chng 04 jul 23, needed to increase to 2e-2 from 1e-2 to get conserve.in to work, 
    4245                         * not clear what caused increase in error */ 
    43                         if( fabs(sum-dense.gas_phase[nelem])/sum > 2e-5 ) 
     46                        if( fabs(sum+dense.xMolecules[nelem]-dense.gas_phase[nelem]) >  
     47                                        2e-5*dense.gas_phase[nelem] ) 
    4448                        { 
     49                                fprintf(ioQQQ,"Problem ions %g moles %g error %g of %g nelem %ld(%s)\n", 
     50                                                                sum,dense.xMolecules[nelem], 
     51                                                                sum+dense.xMolecules[nelem]-dense.gas_phase[nelem], 
     52                                                                dense.gas_phase[nelem],nelem, 
     53                                                                elementnames.chElementSym[nelem]); 
    4554                                fprintf(ioQQQ,"DEBUG non-conv nelem\t%li\tsum\t%e\ttot gas\t%e\trel err\t%.3e\n", 
    4655                                                                nelem, 
  • branches/newmole/source/mole_eval_balance.cpp

    r1693 r1712  
    2929/*=================================================================*/ 
    3030 
    31 #define FABSSWITCH(a) (a) 
    32  
    3331void mole_eval_balance(long int num_total, double *b, double **c) 
    3432{ 
     
    9189                                if(i!=j) 
    9290                                { 
    93                                         rate_deriv[i] *= FABSSWITCH(rate->reactants[j]->hevmol); 
    94                                 } 
    95                         } 
    96                 } 
    97                  
    98                 rate_tot = rate_deriv[0]*FABSSWITCH(rate->reactants[0]->hevmol); 
     91                                        rate_deriv[i] *= rate->reactants[j]->hevmol; 
     92                                } 
     93                        } 
     94                } 
     95                 
     96                rate_tot = rate_deriv[0]*rate->reactants[0]->hevmol; 
    9997                 
    10098                for(i=0;i<rate->nreactants;i++) 
  • branches/newmole/source/mole_h2_io.cpp

    r1701 r1712  
    18181818                        mole_findrate("H2,OH=>H2O,H") / hmi.H2_rate_destroy / hmi.H2_total, 
    18191819                        mole_findrate("H2,O=>OH,H") / hmi.H2_rate_destroy / hmi.H2_total, 
    1820                         mole_findrate("H2*,CH=>CH2,H")*hmi.lgLeiden_Keep_ipMH2s /  hmi.H2_rate_destroy / hmi.H2_total, 
    1821                         mole_findrate("H2*,O=>OH,H")*hmi.lgLeiden_Keep_ipMH2s /  hmi.H2_rate_destroy / hmi.H2_total, 
    1822                         mole_findrate("H2*,OH=>H2O,H")*hmi.lgLeiden_Keep_ipMH2s /  hmi.H2_rate_destroy / hmi.H2_total, 
    1823                         mole_findrate("H2*,C=>CH,H")*hmi.lgLeiden_Keep_ipMH2s /  hmi.H2_rate_destroy / hmi.H2_total,     
    1824                         mole_findrate("H2*,C+=>CH+,H")*hmi.lgLeiden_Keep_ipMH2s /  hmi.H2_rate_destroy / hmi.H2_total, 
     1820                        mole_findrate("H2*,CH=>CH2,H") /  hmi.H2_rate_destroy / hmi.H2_total, 
     1821                        mole_findrate("H2*,O=>OH,H") /  hmi.H2_rate_destroy / hmi.H2_total, 
     1822                        mole_findrate("H2*,OH=>H2O,H") /  hmi.H2_rate_destroy / hmi.H2_total, 
     1823                        mole_findrate("H2*,C=>CH,H") /  hmi.H2_rate_destroy / hmi.H2_total,      
     1824                        mole_findrate("H2*,C+=>CH+,H") /  hmi.H2_rate_destroy / hmi.H2_total, 
    18251825                        mole_findrate("H2,CH2=>CH3,H") / hmi.H2_rate_destroy / hmi.H2_total, 
    18261826                        mole_findrate("H2,CH3=>CH4,H") / hmi.H2_rate_destroy / hmi.H2_total, 
    18271827                        mole_findrate("H2,CH4+=>CH5+,H") / hmi.H2_rate_destroy / hmi.H2_total, 
    1828                         mole_findrate("H2*,CH2=>CH3,H")*hmi.lgLeiden_Keep_ipMH2s /  hmi.H2_rate_destroy / hmi.H2_total, 
    1829                         mole_findrate("H2*,CH3=>CH4,H")*hmi.lgLeiden_Keep_ipMH2s /  hmi.H2_rate_destroy / hmi.H2_total, 
     1828                        mole_findrate("H2*,CH2=>CH3,H") /  hmi.H2_rate_destroy / hmi.H2_total, 
     1829                        mole_findrate("H2*,CH3=>CH4,H") /  hmi.H2_rate_destroy / hmi.H2_total, 
    18301830                        mole_findrate("H2*,O+=>OH+,H") / hmi.H2_rate_destroy / hmi.H2_total, 
    18311831                        /*heavy elements*/ 
     
    18461846                        mole_findrate("H2,HCN+=>HCNH+,H") / hmi.H2_rate_destroy  / hmi.H2_total 
    18471847                        ); 
     1848                         
     1849    if (hmi.lgLeiden_Keep_ipMH2s == false) 
     1850                        ASSERT(mole_findrate("H2*,CH=>CH2,H") == 0 && 
     1851                                                 mole_findrate("H2*,O=>OH,H") == 0 && 
     1852                                                 mole_findrate("H2*,OH=>H2O,H") == 0 && 
     1853                                                 mole_findrate("H2*,C=>CH,H") == 0 && 
     1854                                                 mole_findrate("H2*,C+=>CH+,H") == 0 && 
     1855                                                 mole_findrate("H2*,CH2=>CH3,H") == 0 && 
     1856                                                 mole_findrate("H2*,CH3=>CH4,H") == 0 && 
     1857                                                 mole_findrate("H2*,O+=>OH+,H") == 0    ); 
    18481858                fprintf(io,"\t%.4e\t%.4e\n", 
    18491859                        /*H2g/Htot, H2s/Htot chemical network and from big molecule model*/ 
  • branches/newmole/source/mole_newton_step.cpp

    r1706 r1712  
    491491        *error = (realnum) MIN2(error0,1e30); 
    492492 
    493         mole_return_cached_species(); 
    494          
    495493        return; 
    496494} 
  • branches/newmole/source/mole_solve.cpp

    r1706 r1712  
    9191                 
    9292                //fprintf(stdout,"Mole zone %ld -- %7.2f loop %d error %15.8g nBad %d\n",nzone,fnzone,i,error,nBad); 
    93  
    94                 { 
    95                         /* option to print deduced abundances */ 
    96                         /*@-redef@*/ 
    97                         enum {DEBUG_LOC=false}; 
    98                         /*@+redef@*/ 
    99                         if( DEBUG_LOC /*&& (nzone>68)*/ ) 
    100                         { 
    101                                 fprintf(ioQQQ,"DEBUG mole out\t%i\t%.2f\t%.5e\t%.5e", 
    102                                         i, 
    103                                         fnzone, 
    104                                         phycon.te, 
    105                                         dense.eden); 
    106                                 fprintf(ioQQQ, 
    107                                         "\terror\t%.4e\tH0\t%.4e\tH+\t%.4e\tsink\t%.4e\t%.4e\tsour\t%.4e\t%.4e\tion\t%.4e\trec\t%.4e",  
    108                                         error, 
    109                                         dense.xIonDense[ipHYDROGEN][0], 
    110                                         dense.xIonDense[ipHYDROGEN][1], 
    111                                         mole.sink[ipHYDROGEN][0], 
    112                                         mole.sink[ipHYDROGEN][1], 
    113                                         mole.source[ipHYDROGEN][0] ,  
    114                                         mole.source[ipHYDROGEN][1] , 
    115                                         ionbal.RateIonizTot[ipHYDROGEN][0], 
    116                                         ionbal.RateRecomTot[ipHYDROGEN][0]); 
    117  
    118                                 /*for( j=0; j<mole.num_calc; j++ ) 
    119                                         fprintf(ioQQQ,"\t%.4e", HMOLEC(j) );*/ 
    120                                 fprintf(ioQQQ,"\n" ); 
    121                         } 
    122                 } 
    123  
     93         
    12494                if (error < BIGERROR && nBad == 0 && nPrevBad == 0) /* Stop early if good enough */ 
    12595                        break; 
     
    144114        } 
    145115 
    146         ASSERT(lgElemsConserved()); 
    147  
     116        mole_return_cached_species(); 
     117         
    148118        check_co_ion_converge(); 
    149119 
     
    169139        } 
    170140 
     141        { 
     142                /* option to print deduced abundances */ 
     143                /*@-redef@*/ 
     144                enum {DEBUG_LOC=false}; 
     145                /*@+redef@*/ 
     146                if( DEBUG_LOC /*&& (nzone>68)*/ ) 
     147                { 
     148                        fprintf(ioQQQ,"DEBUG mole out\t%i\t%.2f\t%.5e\t%.5e", 
     149                                                        i, 
     150                                                        fnzone, 
     151                                                        phycon.te, 
     152                                                        dense.eden); 
     153                        fprintf(ioQQQ, 
     154                                                        "\terror\t%.4e\tH0\t%.4e\tH+\t%.4e\tsink\t%.4e\t%.4e\tsour\t%.4e\t%.4e\tion\t%.4e\trec\t%.4e",  
     155                                                        error, 
     156                                                        dense.xIonDense[ipHYDROGEN][0], 
     157                                                        dense.xIonDense[ipHYDROGEN][1], 
     158                                                        mole.sink[ipHYDROGEN][0], 
     159                                                        mole.sink[ipHYDROGEN][1], 
     160                                                        mole.source[ipHYDROGEN][0] ,  
     161                                                        mole.source[ipHYDROGEN][1] , 
     162                                                        ionbal.RateIonizTot[ipHYDROGEN][0], 
     163                                                        ionbal.RateRecomTot[ipHYDROGEN][0]); 
     164                         
     165                        /*for( j=0; j<mole.num_calc; j++ ) 
     166                                fprintf(ioQQQ,"\t%.4e", HMOLEC(j) );*/ 
     167                        fprintf(ioQQQ,"\n" ); 
     168                } 
     169        } 
     170         
    171171        return error; 
    172172 
  • branches/newmole/source/mole_species.cpp

    r1706 r1712  
    212212                sp = newspecies("H2Ogrn",MOLECULE,MOLE_ACTIVE,NULL,1.00e-15, -238.9f); 
    213213                sp = newspecies("OHgrn ",MOLECULE,MOLE_ACTIVE,NULL,1.00e-15, 38.4f); 
    214                 sp = newspecies("Cgrn  ",MOLECULE,MOLE_ACTIVE,NULL,1.00e-15, 711.2f); 
    215                 sp = newspecies("Ogrn  ",MOLECULE,MOLE_ACTIVE,NULL,1.00e-15, 246.8f); 
    216                 sp = newspecies("Ngrn  ",MOLECULE,MOLE_ACTIVE,NULL,1.00e-15, 470.8f); 
    217                 sp = newspecies("Sgrn  ",MOLECULE,MOLE_ACTIVE,NULL,1.00e-15, 274.7f); 
    218                 sp = newspecies("Hgrn  ",MOLECULE,MOLE_ACTIVE,NULL,4.00e-15, 216.0f);  
    219                 sp = newspecies("Sigrn ",MOLECULE,MOLE_ACTIVE,NULL,1.00e-15, 446.0f); 
    220                 sp = newspecies("SiHgrn",MOLECULE,MOLE_ACTIVE,NULL,1.80e-14, 374.9f); 
    221                 sp = newspecies("SiOgrn",MOLECULE,MOLE_ACTIVE,NULL,3.89e-14, -101.6f); 
    222                 sp = newspecies("CHgrn ",MOLECULE,MOLE_ACTIVE,NULL,1.10e-06, 592.5f); 
    223                 sp = newspecies("O2grn ",MOLECULE,MOLE_ACTIVE,NULL,1.91e-07, 0.0f); 
    224                 sp = newspecies("CH2grn",MOLECULE,MOLE_ACTIVE,NULL,8.59e-13, 390.0f); 
    225                 sp = newspecies("CH3grn",MOLECULE,MOLE_ACTIVE,NULL,4.59e-19, 149.0f); 
    226                 sp = newspecies("CH4grn",MOLECULE,MOLE_ACTIVE,NULL,9.12e-28, -66.8f); 
    227                 sp = newspecies("N2grn ",MOLECULE,MOLE_ACTIVE,NULL,2.46e-17, 0.0f); 
    228                 sp = newspecies("NOgrn ",MOLECULE,MOLE_ACTIVE,NULL,5.99e-12, 89.8f); 
    229                 sp = newspecies("S2grn ",MOLECULE,MOLE_ACTIVE,NULL,1.21e-11, 128.3f); 
    230                 sp = newspecies("OCNgrn",MOLECULE,MOLE_ACTIVE,NULL,3.86e-11, 556.0f); 
    231                 sp = newspecies("NHgrn ",MOLECULE,MOLE_ACTIVE,NULL,1.30e-09, 376.5f); 
    232                 sp = newspecies("NH2grn",MOLECULE,MOLE_ACTIVE,NULL,6.78e-20, 191.6f); 
    233                 sp = newspecies("NH3grn",MOLECULE,MOLE_ACTIVE,NULL,1.25e-29, -38.9f); 
    234                 sp = newspecies("CNgrn ",MOLECULE,MOLE_ACTIVE,NULL,3.38e-11, 436.8f); 
    235                 sp = newspecies("HCNgrn",MOLECULE,MOLE_ACTIVE,NULL,1.07e-17, 135.5f); 
    236                 sp = newspecies("HNOgrn",MOLECULE,MOLE_ACTIVE,NULL,9.09e-21, 100.0f); 
    237                 sp = newspecies("HSgrn ",MOLECULE,MOLE_ACTIVE,NULL,1.71e-14, 136.5f); 
    238                 sp = newspecies("CSgrn ",MOLECULE,MOLE_ACTIVE,NULL,6.69e-18, 277.1f); 
    239                 sp = newspecies("NSgrn ",MOLECULE,MOLE_ACTIVE,NULL,3.12e-11, 263.0f); 
    240                 sp = newspecies("SOgrn ",MOLECULE,MOLE_ACTIVE,NULL,4.00e-15, 5.0f); 
    241                 sp = newspecies("OCSgrn",MOLECULE,MOLE_ACTIVE,NULL,8.83e-24, -142.0f); 
    242                 sp = newspecies("HNCgrn",MOLECULE,MOLE_ACTIVE,NULL,4.00e-15, 201.0f); 
    243                 sp = newspecies("C2grn ",MOLECULE,MOLE_ACTIVE,NULL,3.71e-09, 817.0f); 
    244                 sp = newspecies("C2Hgrn",MOLECULE,MOLE_ACTIVE,NULL,4.00e-15, 560.0f); 
    245                 sp = newspecies("C3grn ",MOLECULE,MOLE_ACTIVE,NULL,1.00e-15, 831.0f); 
    246                 sp = newspecies("C3Hgrn",MOLECULE,MOLE_ACTIVE,NULL,4.00e-15, 602.5f); 
    247                 sp = newspecies("H2grn ",MOLECULE,MOLE_ACTIVE,NULL,4.00E-08, 0.0f); 
     214                if (0) 
     215                { 
     216                        sp = newspecies("Cgrn  ",MOLECULE,MOLE_ACTIVE,NULL,1.00e-15, 711.2f); 
     217                        sp = newspecies("Ogrn  ",MOLECULE,MOLE_ACTIVE,NULL,1.00e-15, 246.8f); 
     218                        sp = newspecies("Ngrn  ",MOLECULE,MOLE_ACTIVE,NULL,1.00e-15, 470.8f); 
     219                        sp = newspecies("Sgrn  ",MOLECULE,MOLE_ACTIVE,NULL,1.00e-15, 274.7f); 
     220                        sp = newspecies("Hgrn  ",MOLECULE,MOLE_ACTIVE,NULL,4.00e-15, 216.0f);  
     221                        sp = newspecies("Sigrn ",MOLECULE,MOLE_ACTIVE,NULL,1.00e-15, 446.0f); 
     222                        sp = newspecies("SiHgrn",MOLECULE,MOLE_ACTIVE,NULL,1.80e-14, 374.9f); 
     223                        sp = newspecies("SiOgrn",MOLECULE,MOLE_ACTIVE,NULL,3.89e-14, -101.6f); 
     224                        sp = newspecies("CHgrn ",MOLECULE,MOLE_ACTIVE,NULL,1.10e-06, 592.5f); 
     225                        sp = newspecies("O2grn ",MOLECULE,MOLE_ACTIVE,NULL,1.91e-07, 0.0f); 
     226                        sp = newspecies("CH2grn",MOLECULE,MOLE_ACTIVE,NULL,8.59e-13, 390.0f); 
     227                        sp = newspecies("CH3grn",MOLECULE,MOLE_ACTIVE,NULL,4.59e-19, 149.0f); 
     228                        sp = newspecies("CH4grn",MOLECULE,MOLE_ACTIVE,NULL,9.12e-28, -66.8f); 
     229                        sp = newspecies("N2grn ",MOLECULE,MOLE_ACTIVE,NULL,2.46e-17, 0.0f); 
     230                        sp = newspecies("NOgrn ",MOLECULE,MOLE_ACTIVE,NULL,5.99e-12, 89.8f); 
     231                        sp = newspecies("S2grn ",MOLECULE,MOLE_ACTIVE,NULL,1.21e-11, 128.3f); 
     232                        sp = newspecies("OCNgrn",MOLECULE,MOLE_ACTIVE,NULL,3.86e-11, 556.0f); 
     233                        sp = newspecies("NHgrn ",MOLECULE,MOLE_ACTIVE,NULL,1.30e-09, 376.5f); 
     234                        sp = newspecies("NH2grn",MOLECULE,MOLE_ACTIVE,NULL,6.78e-20, 191.6f); 
     235                        sp = newspecies("NH3grn",MOLECULE,MOLE_ACTIVE,NULL,1.25e-29, -38.9f); 
     236                        sp = newspecies("CNgrn ",MOLECULE,MOLE_ACTIVE,NULL,3.38e-11, 436.8f); 
     237                        sp = newspecies("HCNgrn",MOLECULE,MOLE_ACTIVE,NULL,1.07e-17, 135.5f); 
     238                        sp = newspecies("HNOgrn",MOLECULE,MOLE_ACTIVE,NULL,9.09e-21, 100.0f); 
     239                        sp = newspecies("HSgrn ",MOLECULE,MOLE_ACTIVE,NULL,1.71e-14, 136.5f); 
     240                        sp = newspecies("CSgrn ",MOLECULE,MOLE_ACTIVE,NULL,6.69e-18, 277.1f); 
     241                        sp = newspecies("NSgrn ",MOLECULE,MOLE_ACTIVE,NULL,3.12e-11, 263.0f); 
     242                        sp = newspecies("SOgrn ",MOLECULE,MOLE_ACTIVE,NULL,4.00e-15, 5.0f); 
     243                        sp = newspecies("OCSgrn",MOLECULE,MOLE_ACTIVE,NULL,8.83e-24, -142.0f); 
     244                        sp = newspecies("HNCgrn",MOLECULE,MOLE_ACTIVE,NULL,4.00e-15, 201.0f); 
     245                        sp = newspecies("C2grn ",MOLECULE,MOLE_ACTIVE,NULL,3.71e-09, 817.0f); 
     246                        sp = newspecies("C2Hgrn",MOLECULE,MOLE_ACTIVE,NULL,4.00e-15, 560.0f); 
     247                        sp = newspecies("C3grn ",MOLECULE,MOLE_ACTIVE,NULL,1.00e-15, 831.0f); 
     248                        sp = newspecies("C3Hgrn",MOLECULE,MOLE_ACTIVE,NULL,4.00e-15, 602.5f); 
     249                        sp = newspecies("H2grn ",MOLECULE,MOLE_ACTIVE,NULL,4.00E-08, 0.0f); 
     250                } 
    248251        } 
    249252        sp = newspecies("C2H   ",MOLECULE,MOLE_ACTIVE,NULL,4.00e-15, 560.0f);