Changeset 2139
- Timestamp:
- 06/29/08 09:04:54 (5 months ago)
- Location:
- branches/newmole/source
- Files:
-
- 65 modified
-
abundances.cpp (modified) (2 diffs)
-
assert_results.cpp (modified) (1 diff)
-
atmdat_readin.cpp (modified) (5 diffs)
-
atom_feii.cpp (modified) (5 diffs)
-
atom_hyperfine.cpp (modified) (1 diff)
-
atom_level2.cpp (modified) (1 diff)
-
atom_level3.cpp (modified) (1 diff)
-
atom_oi.cpp (modified) (1 diff)
-
atom_seq_beryllium.cpp (modified) (1 diff)
-
atom_seq_boron.cpp (modified) (4 diffs)
-
cddefines.h (modified) (1 diff)
-
cont_createmesh.cpp (modified) (1 diff)
-
cont_createpointers.cpp (modified) (3 diffs)
-
conv_base.cpp (modified) (4 diffs)
-
conv_fail.cpp (modified) (4 diffs)
-
conv_init_solution.cpp (modified) (2 diffs)
-
conv_itercheck.cpp (modified) (1 diff)
-
cool_calc.cpp (modified) (1 diff)
-
cool_carb.cpp (modified) (1 diff)
-
cool_oxyg.cpp (modified) (2 diffs)
-
date.h (modified) (1 diff)
-
dynamics.cpp (modified) (2 diffs)
-
grid_do.cpp (modified) (1 diff)
-
heat_punch.cpp (modified) (5 diffs)
-
helike_cs.cpp (modified) (13 diffs)
-
helike_cs.h (modified) (1 diff)
-
helike_einsta.cpp (modified) (20 diffs)
-
helike_recom.cpp (modified) (10 diffs)
-
helike_recom.h (modified) (1 diff)
-
hydrocollid.cpp (modified) (2 diffs)
-
hydroeinsta.cpp (modified) (5 diffs)
-
hydrogenic.h (modified) (1 diff)
-
hydro_recom.cpp (modified) (4 diffs)
-
hydro_vs_rates.cpp (modified) (9 diffs)
-
hydro_vs_rates.h (modified) (2 diffs)
-
init_coreload.cpp (modified) (1 diff)
-
init_defaults_preparse.cpp (modified) (3 diffs)
-
iso.h (modified) (3 diffs)
-
iso_collide.cpp (modified) (11 diffs)
-
iso_error.cpp (modified) (3 diffs)
-
iso_radiative_recomb.cpp (modified) (6 diffs)
-
iso_solve.cpp (modified) (2 diffs)
-
iter_end_chk.cpp (modified) (2 diffs)
-
lines_service.cpp (modified) (6 diffs)
-
mole_co_atom.cpp (modified) (1 diff)
-
mole_h2.cpp (modified) (1 diff)
-
mole_h2_create.cpp (modified) (4 diffs)
-
mole_h2_io.cpp (modified) (1 diff)
-
nemala2.cpp (modified) (2 diffs)
-
parse_atom_iso.cpp (modified) (2 diffs)
-
parse_commands.cpp (modified) (1 diff)
-
parse_print.cpp (modified) (1 diff)
-
parse_stop.cpp (modified) (5 diffs)
-
prt.h (modified) (1 diff)
-
prt_comment.cpp (modified) (1 diff)
-
prt_lines_hydro.cpp (modified) (1 diff)
-
punch_do.cpp (modified) (1 diff)
-
punch_linedata.cpp (modified) (2 diffs)
-
radius_increment.cpp (modified) (1 diff)
-
radius_next.cpp (modified) (1 diff)
-
rt_line_all.cpp (modified) (1 diff)
-
rt_line_one.cpp (modified) (1 diff)
-
rt_ots.cpp (modified) (4 diffs)
-
stopcalc.h (modified) (1 diff)
-
zero.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/newmole/source/abundances.cpp
r1780 r2139 272 272 /* if stop temp set below default then we are going into cold and possibly 273 273 * molecular gas - check some parameters in this case */ 274 if( called.lgTalk && (StopCalc. tend< phycon.TEMP_STOP_DEFAULT ||274 if( called.lgTalk && (StopCalc.TempLoStopZone < phycon.TEMP_STOP_DEFAULT || 275 275 /* thermal.ConstTemp def is zero, set pos when used */ 276 276 (thermal.ConstTemp > 0. && thermal.ConstTemp < phycon.TEMP_STOP_DEFAULT ) ) ) … … 278 278 279 279 /* print warning if temperature set below default but C > O */ 280 if( dense. gas_phase[ipCARBON]/SDIV( dense.gas_phase[ipOXYGEN]) >= 1. )280 if( dense.lgElmtOn[ipOXYGEN] && dense.gas_phase[ipCARBON]/SDIV( dense.gas_phase[ipOXYGEN]) >= 1. ) 281 281 { 282 282 fprintf( ioQQQ, "\n >>> \n" -
branches/newmole/source/assert_results.cpp
r2023 r2139 1943 1943 1944 1944 int iCase = 1; 1945 if( strcmp( "Ca A", chAssertLineLabel[i] ) == 0 ) 1946 iCase = 0; 1947 else if( strcmp( "Ca B", chAssertLineLabel[i] ) == 0 ) 1948 iCase = 1; 1949 else if( strcmp( "+Col", chAssertLineLabel[i] ) == 0 ) 1950 iCase = 1; 1951 else 1952 TotalInsanity(); 1953 1945 1954 RelError[i] = 0.; 1946 1955 long nHighestPrinted = StatesElem[nISOCaseB][nelemCaseB][iso.numPrintLevels[nISOCaseB][nelemCaseB]-1].n; -
branches/newmole/source/atmdat_readin.cpp
r1830 r2139 538 538 539 539 /* this is new in c94.01 and returns nothing (0.) for most lines */ 540 TauLines[i].Coll.c s= (realnum)FFmtRead(chLine,&j,INPUT_LINE_LENGTH,&lgEOL);540 TauLines[i].Coll.col_str = (realnum)FFmtRead(chLine,&j,INPUT_LINE_LENGTH,&lgEOL); 541 541 542 542 /* finally increment i */ … … 956 956 957 957 /*ASSERT( UTALines[i].Emis->Aul / sum_spon_auto <= 1. && UTALines[i].Aul / sum_spon_auto >= 0. );*/ 958 UTALines[i].Coll.c s= (realnum)MIN2(0., UTALines[i].Emis->Aul / sum_spon_auto - 1. );958 UTALines[i].Coll.col_str = (realnum)MIN2(0., UTALines[i].Emis->Aul / sum_spon_auto - 1. ); 959 959 960 960 /* option to print UTAs */ … … 1028 1028 double frac_ioniz = Aauto/(Aul + Aauto); 1029 1029 ASSERT( frac_ioniz >=0. && frac_ioniz <=1. ); 1030 UTALines[i].Coll.c s= -(realnum)frac_ioniz;1030 UTALines[i].Coll.col_str = -(realnum)frac_ioniz; 1031 1031 1032 1032 /* save gf scanned from line */ … … 1130 1130 /* >>chng 03 feb 18, cs to negative of branching ratio */ 1131 1131 ASSERT( frac_relax >=0. && frac_relax <=1. ); 1132 UTALines[i].Coll.c s= (realnum)(frac_relax-1.);1132 UTALines[i].Coll.col_str = (realnum)(frac_relax-1.); 1133 1133 # if 0 1134 1134 fprintf(ioQQQ,"data set %li line %li %2s%2li\t%.4f\t%.3e\t%.3e\n", … … 1214 1214 /* >>chng 03 feb 18, cs to negative of br */ 1215 1215 ASSERT( frac_relax >=0. && frac_relax <=1. ); 1216 UTALines[i].Coll.c s= (realnum)(frac_relax-1.);1216 UTALines[i].Coll.col_str = (realnum)(frac_relax-1.); 1217 1217 1218 1218 /* finally increment i */ -
branches/newmole/source/atom_feii.cpp
r2023 r2139 1143 1143 POW2(y + 1.0)) + cg*y); 1144 1144 1145 Fe2LevN[ipHi][ipLo].Coll.c s= 23.861f*1e5f*gb*1145 Fe2LevN[ipHi][ipLo].Coll.col_str = 23.861f*1e5f*gb* 1146 1146 Fe2LevN[ipHi][ipLo].Emis->Aul*Fe2LevN[ipHi][ipLo].Hi->g/ 1147 1147 POW3(Fe2LevN[ipHi][ipLo].EnergyWN); 1148 1148 1149 1149 /* confirm that collision strength is positive */ 1150 ASSERT( Fe2LevN[ipHi][ipLo].Coll.c s> 0.);1150 ASSERT( Fe2LevN[ipHi][ipLo].Coll.col_str > 0.); 1151 1151 1152 1152 /* g-bar cs becomes unphysically small for forbidden transitions - 1153 1153 * this sets a lower limit to the final cs - CS2SMALL is defined above */ 1154 Fe2LevN[ipHi][ipLo].Coll.c s = MAX2( CS2SMALL, Fe2LevN[ipHi][ipLo].Coll.cs);1154 Fe2LevN[ipHi][ipLo].Coll.col_str = MAX2( CS2SMALL, Fe2LevN[ipHi][ipLo].Coll.col_str); 1155 1155 /* this was the logic used in the old fortran version, 1156 1156 * and reproduces the results in Baldwin et al '96 … … 1235 1235 /*fprintf(ioQQQ,"DEBUG\t%.2e", Fe2LevN[ipHiFe2-1][ipLoFe2-1].cs);*/ 1236 1236 /* do linear interpolation */ 1237 Fe2LevN[ipHiFe2-1][ipLoFe2-1].Coll.c s=1237 Fe2LevN[ipHiFe2-1][ipLoFe2-1].Coll.col_str = 1238 1238 sPradDat[ipHi][ipLo][ipTemp] * FracLowTe + 1239 1239 sPradDat[ipHi][ipLo][ipTempp1] * FracHighTe; … … 1241 1241 1242 1242 /* confirm that this is positive */ 1243 ASSERT( Fe2LevN[ipHiFe2-1][ipLoFe2-1].Coll.c s> 0. );1243 ASSERT( Fe2LevN[ipHiFe2-1][ipLoFe2-1].Coll.col_str > 0. ); 1244 1244 } 1245 1245 } … … 1294 1294 { 1295 1295 fprintf(ioQQQ,"%e %e\n", 1296 Fe2LevN[51][ipLo].Coll.c s,Fe2LevN[52][ipLo].Coll.cs);1296 Fe2LevN[51][ipLo].Coll.col_str,Fe2LevN[52][ipLo].Coll.col_str); 1297 1297 } 1298 1298 cdEXIT(EXIT_FAILURE); … … 1308 1308 * note that it needs eden to become rate 1309 1309 * units cm3 s-1 */ 1310 Fe2Coll[ipHi][ipLo] = (realnum)(COLL_CONST/phycon.sqrte*Fe2LevN[ipHi][ipLo].Coll.c s/1310 Fe2Coll[ipHi][ipLo] = (realnum)(COLL_CONST/phycon.sqrte*Fe2LevN[ipHi][ipLo].Coll.col_str/ 1311 1311 Fe2LevN[ipHi][ipLo].Hi->g); 1312 1312 /*fprintf(ioQQQ,"DEBUG fe2coll %li %li %.2e", ipHi , ipLo , Fe2Coll[ipHi][ipLo] );*/ -
branches/newmole/source/atom_hyperfine.cpp
r1830 r2139 95 95 * were multiplied by collider density when evaluated in CoolEvaluate */ 96 96 /* ContBoltz is Boltzmann factor for wavelength of line */ 97 coll12 = HFLines[0].Coll.c s*dense.cdsqte/HFLines[0].Lo->g*rfield.ContBoltz[HFLines[0].ipCont-1];98 coll21 = HFLines[0].Coll.c s*dense.cdsqte/HFLines[0].Hi->g;97 coll12 = HFLines[0].Coll.col_str*dense.cdsqte/HFLines[0].Lo->g*rfield.ContBoltz[HFLines[0].ipCont-1]; 98 coll21 = HFLines[0].Coll.col_str*dense.cdsqte/HFLines[0].Hi->g; 99 99 100 100 /* set up rate (s-1) equations -
branches/newmole/source/atom_level2.cpp
r1830 r2139 61 61 /* collision strength for this transition, omega is zero for hydrogenic 62 62 * species which are done in special hydro routines */ 63 omega = t->Coll.c s;63 omega = t->Coll.col_str; 64 64 65 65 /* ROUGH check whether upper level has significant population,*/ -
branches/newmole/source/atom_level3.cpp
r1830 r2139 292 292 293 293 /* collision strengths */ 294 o10 = t10->Coll.c s;295 o21 = t21->Coll.c s;296 o20 = t20->Coll.c s;294 o10 = t10->Coll.col_str; 295 o21 = t21->Coll.col_str; 296 o20 = t20->Coll.col_str; 297 297 298 298 /* begin sanity checks, check statistic weights, -
branches/newmole/source/atom_oi.cpp
r1918 r2139 318 318 cs = 9.25e-7*phycon.te*phycon.te10/phycon.te01/phycon.te01; 319 319 PutCS(cs,&TauLines[ipTO1025]); 320 c21 = dense.cdsqte*TauLines[ipT1304].Coll.c s/g[1];321 c51 = dense.cdsqte*TauLines[ipTO1025].Coll.c s/g[4];320 c21 = dense.cdsqte*TauLines[ipT1304].Coll.col_str/g[1]; 321 c51 = dense.cdsqte*TauLines[ipTO1025].Coll.col_str/g[4]; 322 322 323 323 /* all following are g-bar approx, g-bar = 0.2 */ 324 324 c31 = dense.cdsqte*1.0/g[2]; 325 325 PutCS(0.27,&TauLines[ipT1039]); 326 c41 = dense.cdsqte*TauLines[ipT1039].Coll.c s/g[3];326 c41 = dense.cdsqte*TauLines[ipT1039].Coll.col_str/g[3]; 327 327 c61 = dense.cdsqte*1./g[5]; 328 328 -
branches/newmole/source/atom_seq_beryllium.cpp
r2023 r2139 91 91 92 92 /* set the cs before if below, since we must reset to line cs in all cases */ 93 cs1u = t->Coll.c s;93 cs1u = t->Coll.col_str; 94 94 /* >>chng 01 sep 09, reset cs coming in, to propoer cs for the ^3P_1 level only 95 95 * so that critical density is printed correctly with punch lines data command */ 96 t->Coll.c s/= 3.f;96 t->Coll.col_str /= 3.f; 97 97 98 98 /* low density cutoff to keep matrix happy */ -
branches/newmole/source/atom_seq_boron.cpp
r1830 r2139 175 175 } 176 176 177 ASSERT( t10->Coll.c s> 0.);178 ASSERT( t20->Coll.c s> 0.);179 ASSERT( t30->Coll.c s> 0.);180 ASSERT( t21->Coll.c s> 0.);181 ASSERT( t31->Coll.c s> 0.);182 ASSERT( t41->Coll.c s> 0.);177 ASSERT( t10->Coll.col_str > 0.); 178 ASSERT( t20->Coll.col_str > 0.); 179 ASSERT( t30->Coll.col_str > 0.); 180 ASSERT( t21->Coll.col_str > 0.); 181 ASSERT( t31->Coll.col_str > 0.); 182 ASSERT( t41->Coll.col_str > 0.); 183 183 ASSERT( cs40>0.); 184 184 ASSERT( cs32>0.); … … 232 232 AulEscp[1][0] = t10->Emis->Aul*(t10->Emis->Pesc + t10->Emis->Pelec_esc); 233 233 AulDest[1][0] = t10->Emis->Aul*t10->Emis->Pdest; 234 col_str[1][0] = t10->Coll.c s;234 col_str[1][0] = t10->Coll.col_str; 235 235 AulPump[0][1] = t10->Emis->pump; 236 236 … … 240 240 AulEscp[2][0] = t20->Emis->Aul*(t20->Emis->Pesc + t20->Emis->Pelec_esc); 241 241 AulDest[2][0] = t20->Emis->Aul*t20->Emis->Pdest; 242 col_str[2][0] = t20->Coll.c s;242 col_str[2][0] = t20->Coll.col_str; 243 243 AulPump[0][2] = t20->Emis->pump; 244 244 245 245 AulEscp[3][0] = t30->Emis->Aul*(t30->Emis->Pesc + t30->Emis->Pelec_esc); 246 246 AulDest[3][0] = t30->Emis->Aul*t30->Emis->Pdest; 247 col_str[3][0] = t30->Coll.c s;247 col_str[3][0] = t30->Coll.col_str; 248 248 AulPump[0][3] = t30->Emis->pump; 249 249 … … 255 255 AulEscp[2][1] = t21->Emis->Aul*(t21->Emis->Pesc + t21->Emis->Pelec_esc); 256 256 AulDest[2][1] = t21->Emis->Aul*t21->Emis->Pdest; 257 col_str[2][1] = t21->Coll.c s;257 col_str[2][1] = t21->Coll.col_str; 258 258 AulPump[1][2] = t21->Emis->pump; 259 259 260 260 AulEscp[3][1] = t31->Emis->Aul*(t31->Emis->Pesc + t31->Emis->Pelec_esc); 261 261 AulDest[3][1] = t31->Emis->Aul*t31->Emis->Pdest; 262 col_str[3][1] = t31->Coll.c s;262 col_str[3][1] = t31->Coll.col_str; 263 263 AulPump[1][3] = t31->Emis->pump; 264 264 265 265 AulEscp[4][1] = t41->Emis->Aul*(t41->Emis->Pesc + t41->Emis->Pelec_esc); 266 266 AulDest[4][1] = t41->Emis->Aul*t41->Emis->Pdest; 267 col_str[4][1] = t41->Coll.c s;267 col_str[4][1] = t41->Coll.col_str; 268 268 AulPump[1][4] = t41->Emis->pump; 269 269 -
branches/newmole/source/cddefines.h
r2112 r2139 1268 1268 1269 1269 /** [dimensionless] collision strength of rates for transition */ 1270 realnum c s;1270 realnum col_str; 1271 1271 1272 1272 /** [dimensionless] collision strength of rates for individual colliders */ 1273 realnum c si[ipNCOLLIDER];1273 realnum col_stri[ipNCOLLIDER]; 1274 1274 1275 1275 /** cooling and heating due to collisional excitation [erg s-1 cm-3] */ -
branches/newmole/source/cont_createmesh.cpp
r2125 r2139 462 462 * 463 463 * rfield.fine_opac_nelem is the most massive (hence sharpest line) 464 * we will worry about. By default this is ir ion but can be changed464 * we will worry about. By default this is iron but can be changed 465 465 * with SET FINE CONTINUUM command 466 466 * -
branches/newmole/source/cont_createpointers.cpp
r1942 r2139 632 632 for( ipISO=ipH_LIKE; ipISO<NISO; ++ipISO ) 633 633 { 634 /* do remaining part of the he iso sequence*/634 /* do remaining part of the iso sequences */ 635 635 for( nelem=2; nelem < LIMELM; nelem++ ) 636 636 { … … 639 639 /* generate label for this ion */ 640 640 sprintf( chLab, "%2s%2ld",elementnames.chElementSym[nelem], nelem+1-ipISO ); 641 /* Lya itself is the only transition below n=3 - we explicitly do not 642 * want to generate pointers for 2s-1s or 2p-2s */ 643 /* array index for continuum edges for levels in He-like ions */ 641 /* array index for continuum edges */ 644 642 iso.ipIsoLevNIonCon[ipISO][nelem][0] = 645 643 ipContEnergy(iso.xIsoLevNIonRyd[ipISO][nelem][0],chLab); … … 647 645 for( ipHi=1; ipHi < iso.numLevels_max[ipISO][nelem]; ipHi++ ) 648 646 { 649 /* array index for continuum edges for levels in He-like ions*/647 /* array index for continuum edges */ 650 648 iso.ipIsoLevNIonCon[ipISO][nelem][ipHi] = ipContEnergy(iso.xIsoLevNIonRyd[ipISO][nelem][ipHi],chLab); 651 649 652 /* define all he-likeline pointers */650 /* define all line pointers */ 653 651 for( ipLo=0; ipLo < ipHi; ipLo++ ) 654 652 { -
branches/newmole/source/conv_base.cpp
r2125 r2139 487 487 /* cs is actually the negative of the branching ratio for autoionization, 488 488 * rateone is inverse lifetime of level against autoionization */ 489 double rateone = UTALines[i].Emis->pump * -UTALines[i].Coll.c s;489 double rateone = UTALines[i].Emis->pump * -UTALines[i].Coll.col_str; 490 490 ionbal.UTA_ionize_rate[UTALines[i].Hi->nelem-1][UTALines[i].Hi->IonStg-1] += rateone; 491 491 /* heating rate in erg atom-1 s-1 */ … … 609 609 } 610 610 611 fixit();/* following test is very coarse rel error of 0.2 - should be much 612 * smaller error. Due to source/sink terms in ionization balance 613 * equaitons */ 611 614 for(long ipISO=ipH_LIKE; ipISO<NISO; ++ipISO ) 612 615 { … … 618 621 iso.xIonSimple[ipISO][nelem]<1e-10) ) 619 622 { 620 const realnum err_tol = 1e-2f;621 realnumabund = 0.;623 /* sim blr_hizqso has largest errors in following */ 624 double abund = 0.; 622 625 for (long n=0; n<iso.numLevels_local[ipISO][nelem]; ++n) 623 626 { 624 abund += (realnum)StatesElem[ipISO][nelem][n].Pop;627 abund += StatesElem[ipISO][nelem][n].Pop; 625 628 } 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 double rel_err = fabs(abund*dense.xIonDense[nelem][nelem+1-ipISO]-dense.xIonDense[nelem][nelem-ipISO])/ 630 SDIV(dense.xIonDense[nelem][nelem-ipISO]); 631 632 fixit();/* the following test should pass cleanly, rm the 0 && to 633 * activate. when it passes rm this block and 634 * change err_tol in following block to a small number */ 635 if(0 & conv.lgConvIoniz && 636 iso.pop_ion_ov_neut[ipISO][nelem] > 1e-15 && 637 dense.xIonDense[nelem][nelem+1-ipISO]>SMALLFLOAT && 638 rel_err > 0.02f ) 629 639 { 630 //fprintf(ioQQQ,"Inconsistent iso %ld %ld %ld %g %g %g\n",loop_ion,nelem,ipISO, 631 // abund*dense.xIonDense[nelem][nelem+1-ipISO]/SDIV(dense.xIonDense[nelem][nelem-ipISO])-1 632 // ,abund*dense.xIonDense[nelem][nelem+1-ipISO],(dense.xIonDense[nelem][nelem-ipISO]) 633 // ); 640 /* remove this block when error is made small - this block 641 * is here */ 642 fprintf(ioQQQ,"PROBLEM ISO/ion do not agree ipISO=%li " 643 "nelem=%li iso soln=%.2e ion soln=%.2e rel_err %.2e \n", 644 ipISO , nelem , 645 abund*dense.xIonDense[nelem][nelem+1-ipISO], 646 dense.xIonDense[nelem][nelem-ipISO] , 647 rel_err); 648 } 649 650 const realnum err_tol = 0.4f; 651 if( conv.lgConvIoniz && 652 iso.pop_ion_ov_neut[ipISO][nelem] > 1e-15 && 653 dense.xIonDense[nelem][nelem+1-ipISO]>SMALLFLOAT && 654 rel_err > err_tol ) 655 { 656 //fprintf(ioQQQ,"Inconsistent iso %ld %ld %ld %g\n",loop_ion,nelem,ipISO, 657 // abund*dense.xIonDense[nelem][nelem+1-ipISO]/SDIV(dense.xIonDense[nelem][nelem-ipISO])-1); 634 658 conv.lgConvIoniz = false; 635 659 sprintf( conv.chConvIoniz , "Iso!=ion" ); … … 856 880 857 881 ASSERT(lgElemsConserved()); 882 858 883 859 884 /* update some counters that keep track of how many times this routine -
branches/newmole/source/conv_fail.cpp
r1780 r2139 119 119 if( called.lgTalk ) 120 120 { 121 fprintf( ioQQQ, " PROBLEM ConvFail %li, %s ionization not converged iteration %li zone %li fnzone %.2f \n",
