00001
00002
00003
00004
00005
00006 #include "cddefines.h"
00007 #include "physconst.h"
00008 #include "iterations.h"
00009 #include "hydrogenic.h"
00010 #include "oxy.h"
00011 #include "doppvel.h"
00012 #include "dense.h"
00013 #include "hextra.h"
00014 #include "grains.h"
00015 #include "magnetic.h"
00016 #include "state.h"
00017 #include "rt.h"
00018 #include "he.h"
00019 #include "struc.h"
00020 #include "h2.h"
00021 #include "coolheavy.h"
00022 #include "lines.h"
00023 #include "dynamics.h"
00024 #include "carb.h"
00025 #include "mean.h"
00026 #include "atomfeii.h"
00027 #include "iso.h"
00028 #include "conv.h"
00029 #include "geometry.h"
00030 #include "timesc.h"
00031 #include "peimbt.h"
00032 #include "ionbal.h"
00033 #include "continuum.h"
00034 #include "atmdat.h"
00035 #include "mole.h"
00036 #include "ca.h"
00037 #include "input.h"
00038 #include "atoms.h"
00039 #include "pressure.h"
00040 #include "numderiv.h"
00041 #include "colden.h"
00042 #include "yield.h"
00043 #include "hmi.h"
00044 #include "rfield.h"
00045 #include "abund.h"
00046 #include "radius.h"
00047 #include "opacity.h"
00048 #include "secondaries.h"
00049 #include "called.h"
00050 #include "phycon.h"
00051 #include "warnings.h"
00052 #include "thermal.h"
00053 #include "cooling.h"
00054 #include "fe.h"
00055 #include "hyperfine.h"
00056 #include "init.h"
00057 #include "dark_matter.h"
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 void zero(void)
00073 {
00074 long int i,
00075 ion,
00076 ipISO ,
00077 nelem,
00078 ns;
00079
00080
00081
00082
00083 static bool lgFirstCall = true;
00084
00085 DEBUG_ENTRY( "zero()" );
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097 Magnetic_init();
00098
00099
00100 AbundancesZero();
00101
00102
00103 FeIIZero();
00104
00105
00106 wcnint();
00107
00108
00109
00110 hmole_init();
00111 H2_Init();
00112
00113
00114
00115 iterations.iter_malloc = 200;
00116
00117 if( lgFirstCall)
00118 {
00119 iterations.IterPrnt = (long int*)MALLOC( (size_t)iterations.iter_malloc*sizeof(long int) );
00120 geometry.nend = (long int*)MALLOC( (size_t)iterations.iter_malloc*sizeof(long int) );
00121 radius.StopThickness = (double*)MALLOC( (size_t)iterations.iter_malloc*sizeof(double) );
00122 radius.StopRadius = (double*)MALLOC( (size_t)iterations.iter_malloc*sizeof(double) );
00123 }
00124 for( i=0; i < iterations.iter_malloc; i++ )
00125 {
00126 iterations.IterPrnt[i] = 10000;
00127 }
00128 iterations.itermx = 0;
00129
00130 iterations.lgConverge_set = false;
00131 iteration = 0;
00132
00133
00134 ionbal.trimhi = 1e-6;
00135 ionbal.lgTrimhiOn = true;
00136 ionbal.trimlo = 1e-10;
00137
00138 hyperfine.lgLya_pump_21cm = true;
00139
00140
00141 geometry.nprint = 1000;
00142 geometry.lgZoneSet = false;
00143 geometry.lgZoneTrp = false;
00144 geometry.lgEndDflt = true;
00145
00146
00147 state.lgGet_state = false;
00148 state.lgPut_state = false;
00149 state.lgState_print = false;
00150
00151
00152
00153
00154
00155
00156 geometry.nEndDflt = 1400;
00157
00158 for( i=0; i < iterations.iter_malloc; i++ )
00159 {
00160 geometry.nend[i] = geometry.nEndDflt;
00161
00162 radius.StopThickness[i] = 1e31;
00163 radius.StopRadius[i] = -1.;
00164 }
00165
00166 geometry.fiscal = 1.;
00167 geometry.FillFac = 1.;
00168 geometry.filpow = 0.;
00169
00170
00171 geometry.lgSphere = false;
00172
00173 geometry.covrt = 0.;
00174
00175 geometry.covgeo = 1.;
00176
00177 geometry.lgStatic = false;
00178
00179
00180 geometry.lgStaticNoIt = false;
00181
00182
00183 geometry.iEmissPower = 2;
00184
00185 carb.p1909 = 0.;
00186 carb.p2326 = 0.;
00187 oxy.p1666 = 0.;
00188 oxy.p1401 = 0.;
00189
00190
00191
00192 conv.nPres2Ioniz = 0;
00193
00194
00195
00196
00197
00198
00199 lgAbort = false;
00200
00201
00202
00203
00204
00205 conv.HeatCoolRelErrorAllowed = 0.005f;
00206
00207
00208 conv.EdenErrorAllowed = 0.01;
00209
00210 conv.dCmHdT = 0.;
00211
00212 conv.LimFail = 20;
00213 conv.lgMap = false;
00214
00215
00216
00217 conv.nTotalIoniz = 0;
00218
00219
00220 conv.BigEdenError = 0.;
00221 conv.AverEdenError = 0.;
00222 conv.BigHeatCoolError = 0.;
00223 conv.AverHeatCoolError = 0.;
00224 conv.BigPressError = 0.;
00225 conv.AverPressError = 0.;
00226 strcpy( conv.chSolverEden, "vWDB" );
00227 strcpy( conv.chSolverTemp, "vWDB" );
00228 strcpy( conv.chNotConverged, "none" );
00229 strcpy( conv.chConvEden, "none" );
00230 strcpy( conv.chConvIoniz, "none" );
00231
00232 conv.lgAutoIt = false;
00233
00234 conv.autocv = 0.20f;
00235 conv.lgConvTemp = true;
00236 conv.lgConvPres = true;
00237 conv.lgConvEden = true;
00238
00239
00240
00241
00242 t_ADfA::Inst().set_version( PHFIT96 );
00243
00244
00245 timesc.CloudAgeSet = -1.f;
00246
00247 timesc.time_H2_Dest_longest = 0.;
00248 timesc.time_H2_Form_longest = 0.;
00249
00250 timesc.time_H2_Dest_here = -1.;
00251 timesc.time_H2_Form_here = 0.;
00252
00253 timesc.BigCOMoleForm = 0.;
00254
00255 timesc.TimeH21cm = 0.;
00256 timesc.sound_speed_isothermal = 0.;
00257
00258 peimbt.tsqden = 1e7;
00259
00260
00261 co.codfrc = 0.;
00262 co.codtot = 0.;
00263 co.CODissHeat = 0.;
00264
00265
00266 co.lgNoCOMole = false;
00267
00268 NumDeriv.lgNumDeriv = false;
00269
00270
00271
00272
00273
00274
00275 LineSave.ipNormWavL = -1;
00276 LineSave.WavLNorm = 4861.36f;
00277 LineSave.lgNormSet = false;
00278 LineSave.sig_figs = 4;
00279
00280
00281 strcpy( LineSave.chNormLab, " " );
00282
00283
00284 LineSave.ScaleNormLine = 1.;
00285
00286
00287
00288
00289 continuum.ResolutionScaleFactor = 1.;
00290
00291 continuum.lgCoStarInterpolationCaution = false;
00292 continuum.lgCon0 = false;
00293
00294
00295
00296 continuum.EnergyKshell = 7.35e4;
00297
00298
00299 CoolHeavy.lgFreeOn = true;
00300 CoolHeavy.brems_cool_h = 0.;
00301 CoolHeavy.colmet = 0.;
00302
00303 CoolHeavy.brems_cool_net = 0.;
00304 hydro.cintot = 0.;
00305
00306
00307 hydro.lgHiPop2 = false;
00308 hydro.pop2mx = 0.;
00309
00310
00311 hydro.HCollIonMax = 0.;
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322 for(ipISO=ipH_LIKE; ipISO<NISO; ++ipISO )
00323 {
00324 for( nelem=ipHYDROGEN; nelem<LIMELM; ++nelem )
00325 {
00326
00327 strcpy( iso.chTypeAtomUsed[ipISO][nelem] , "none" );
00328 }
00329 }
00330
00331
00332
00333
00334
00335 strcpy( hydro.chHTopType, " add" );
00336
00337
00338 hydro.TexcLya = 0.;
00339 hydro.TLyaMax = 0.;
00340 hydro.nLyaHot = 0;
00341
00342
00343 hydro.DampOnFac = 1.;
00344
00345
00346
00347 hydro.lgLymanPumping = true;
00348
00349
00350
00351 hydro.xLymanPumpingScaleFactor = 1.f;
00352
00353
00354
00355 hydro.D2H_ratio = 1.65e-5;
00356
00357
00358 he.nzone = 0;
00359 he.frac_he0dest_23S = 0.;
00360 he.frac_he0dest_23S_photo = 0.;
00361
00362 for( ipISO=ipH_LIKE; ipISO<NISO; ipISO++ )
00363 {
00364
00365 iso.lgContinuumLoweringEnabled[ipISO] = true;
00366
00367
00368 iso.lgCompileRecomb[ipISO] = false;
00369 iso.lgNoRecombInterp[ipISO] = false;
00370
00371
00373 iso.lgCS_Vriens[ipISO] = true;
00374 iso.lgCS_Vrinceanu[ipISO] = true;
00375
00376 fixit();
00377 iso.lgCS_Vrinceanu[ipH_LIKE] = false;
00378
00379 iso.lgCS_therm_ave[ipISO] = false;
00380 iso.lgCS_None[ipISO] = false;
00381
00382
00383
00384 iso.nCS_new[ipISO] = 1;
00385
00386 iso.lgCritDensLMix[ipISO] = true;
00387
00388
00389 iso.lgFSM[ipISO] = 0;
00390
00391 iso.lgRandErrGen[ipISO] = false;
00392
00393
00394 iso.lgTopoff[ipISO] = true;
00395
00396 iso.lgDielRecom[ipISO] = true;
00397
00398
00399
00400 iso.nLyman[ipISO] = 100;
00401 iso.nLyman_malloc[ipISO] = 100;
00402
00403
00404 iso.lgColl_l_mixing[ipISO] = true;
00405 iso.lgColl_excite[ipISO] = true;
00406 iso.lgColl_ionize[ipISO] = true;
00407 iso.lgPrintNumberOfLevels = false;
00408
00409
00410 for( nelem=ipHYDROGEN; nelem < LIMELM; nelem++ )
00411 {
00412
00413 iso.lgPrtDepartCoef[ipISO][nelem] = false;
00414
00415 iso.lgPrtLevelPops[ipISO][nelem] = false;
00416 iso.CaseBCheck[ipISO][nelem] = -FLT_MAX;
00417 iso.TwoNu_induc_dn_max[ipISO][nelem] = 0.;
00418
00419 iso.RadRec_caseB[ipISO][nelem] = 1e-13;
00420 iso.lgLevelsLowered[ipISO][nelem] = false;
00421 iso.lgLevelsEverLowered[ipISO][nelem] = false;
00422 iso.lgMustReeval[ipISO][nelem] = false;
00423
00424 iso.lgErrGenDone[ipISO][nelem] = false;
00425 }
00426 }
00427
00428
00429 iso.lgDielRecom[ipH_LIKE] = false;
00430
00431
00432 iso.SmallA = 1e-30f;
00433
00434
00435 iso.lgInd2nu_On = false;
00436
00437
00438 iso.ipLyaRedist[ipH_LIKE] = ipLY_A;
00439 iso.ipResoRedist[ipH_LIKE] = ipCRD;
00440 iso.ipSubRedist[ipH_LIKE] = ipCRDW;
00441
00442
00443 iso.nLyaLevel[ipH_LIKE] = ipH2p;
00444 iso.nLyaLevel[ipHE_LIKE] = ipHe2p1P;
00445
00446
00447 fixit();
00448 iso.ipLyaRedist[ipHE_LIKE] = ipPRD;
00449 iso.ipResoRedist[ipHE_LIKE] = ipCRD;
00450 iso.ipSubRedist[ipHE_LIKE] = ipCRDW;
00451
00452 iso.lgPessimisticErrors = false;
00453
00454
00455
00456 iso.lgCollStrenThermAver = false;
00457
00458
00459
00460
00461
00462
00463 secondaries.SetCsupra = 0.;
00464 secondaries.lgCSetOn = false;
00465 secondaries.lgSecOFF = false;
00466 secondaries.SecHIonMax = 0.;
00467
00468 secondaries.HeatEfficPrimary = 1.;
00469 secondaries.SecIon2PrimaryErg = 0.;
00470 secondaries.SecExcitLya2PrimaryErg = 0.;
00471 secondaries.x12tot = 0.;
00472 secondaries.sec2total = 0.;
00473
00474 if( lgFirstCall )
00475 {
00476
00477 secondaries.csupra = (realnum **)MALLOC( (unsigned)LIMELM*sizeof(realnum *) );
00478 secondaries.csupra_effic = (realnum **)MALLOC( (unsigned)LIMELM*sizeof(realnum *) );
00479 for( nelem=ipHYDROGEN; nelem<LIMELM; ++nelem )
00480 {
00481 secondaries.csupra[nelem] = (realnum *)MALLOC( (unsigned)(nelem+1)*sizeof(realnum) );
00482 secondaries.csupra_effic[nelem] = (realnum *)MALLOC( (unsigned)(nelem+1)*sizeof(realnum) );
00483 }
00484 }
00485 for( nelem=ipHYDROGEN; nelem<LIMELM; ++nelem )
00486 {
00487 for( ion=0; ion<nelem+1; ++ion )
00488 {
00489
00490 secondaries.csupra[nelem][ion] = 0.;
00491
00492 secondaries.csupra_effic[nelem][ion] = 1.f;
00493 }
00494 }
00495
00496 secondaries.csupra_effic[ipHELIUM][0] = 1.08f;
00497
00498
00499
00500 if( lgFirstCall )
00501 {
00502
00503 ionbal.ipCompRecoil =
00504 (long**)MALLOC(sizeof(long*)*(unsigned)LIMELM );
00505 ionbal.CompRecoilIonRate =
00506 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00507 ionbal.CompRecoilIonRateSave =
00508 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00509 ionbal.CompRecoilHeatRate =
00510 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00511 ionbal.CompRecoilHeatRateSave =
00512 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00513 ionbal.PhotoRate_Shell =
00514 (double****)MALLOC(sizeof(double***)*(unsigned)LIMELM );
00515 ionbal.CollIonRate_Ground =
00516 (double***)MALLOC(sizeof(double**)*(unsigned)LIMELM );
00517 ionbal.UTA_ionize_rate =
00518 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00519 ionbal.UTA_heat_rate =
00520 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00521
00522
00523
00524 mole.source =
00525 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00526 mole.sink =
00527 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00528 mole.xMoleChTrRate =
00529 (realnum***)MALLOC(sizeof(realnum**)*(unsigned)LIMELM );
00530
00531
00532 ionbal.RateIoniz = (double ***)MALLOC(sizeof(double **)*(unsigned)LIMELM );
00533 ionbal.RateRecomTot = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00534 ionbal.RR_rate_coef_used = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00535 ionbal.DR_rate_coef_used = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00536 ionbal.RR_Verner_rate_coef = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00537
00538
00539 ionbal.DR_Badnell_rate_coef = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00540 ionbal.DR_Badnell_rate_coef_mean_ion = (double *)MALLOC(sizeof(double)*(unsigned)LIMELM );
00541
00542 ionbal.lgDR_Badnell_rate_coef_exist = (int **)MALLOC(sizeof(int *)*(unsigned)LIMELM );
00543 ionbal.RR_Badnell_rate_coef = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00544
00545 ionbal.lgRR_Badnell_rate_coef_exist = (int **)MALLOC(sizeof(int *)*(unsigned)LIMELM );
00546
00547 ionbal.DR_old_rate_coef = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00548
00549
00550 for(nelem=0; nelem<LIMELM; ++nelem )
00551 {
00552 ionbal.DR_Badnell_rate_coef[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00553 ionbal.lgDR_Badnell_rate_coef_exist[nelem] = (int *)MALLOC(sizeof(int)*(unsigned)(nelem+1) );
00554 ionbal.RR_Badnell_rate_coef[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00555 ionbal.lgRR_Badnell_rate_coef_exist[nelem] = (int *)MALLOC(sizeof(int)*(unsigned)(nelem+1) );
00556 ionbal.DR_old_rate_coef[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00557
00558 ionbal.RateIoniz[nelem] = (double **)MALLOC(sizeof(double *)*(unsigned)(nelem+1) );
00559 ionbal.RateRecomTot[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00560
00561 for( ion=0; ion<nelem+1; ++ion )
00562 {
00563 ionbal.RateIoniz[nelem][ion] = (double *)MALLOC(sizeof(double )*(unsigned)(nelem+2) );
00564 for( long ion2=0; ion2<nelem+2; ++ion2 )
00565 ionbal.RateIoniz[nelem][ion][ion2] = 0.;
00566 }
00567
00568 ionbal.RR_rate_coef_used[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00569 ionbal.DR_rate_coef_used[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00570 ionbal.RR_Verner_rate_coef[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00571 ionbal.UTA_ionize_rate[nelem] =
00572 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00573 ionbal.UTA_heat_rate[nelem] =
00574 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00575 ionbal.ipCompRecoil[nelem] =
00576 (long*)MALLOC(sizeof(long)*(unsigned)(nelem+1) );
00577 ionbal.CompRecoilIonRate[nelem] =
00578 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00579 ionbal.CompRecoilIonRateSave[nelem] =
00580 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00581 ionbal.CompRecoilHeatRate[nelem] =
00582 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00583 ionbal.CompRecoilHeatRateSave[nelem] =
00584 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00585 ionbal.PhotoRate_Shell[nelem] =
00586 (double***)MALLOC(sizeof(double**)*(unsigned)(nelem+1) );
00587 ionbal.CollIonRate_Ground[nelem] =
00588 (double**)MALLOC(sizeof(double*)*(unsigned)(nelem+1) );
00589
00590 mole.source[nelem] =
00591 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+2) );
00592 mole.sink[nelem] =
00593 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+2) );
00594 mole.xMoleChTrRate[nelem] =
00595 (realnum**)MALLOC(sizeof(realnum*)*(unsigned)(nelem+2) );
00596 for( ion=0; ion<nelem+2; ++ion )
00597 {
00598 mole.xMoleChTrRate[nelem][ion] =
00599 (realnum*)MALLOC(sizeof(realnum)*(unsigned)(nelem+2) );
00600 }
00601
00602 for( ion=0; ion<nelem+1; ++ion )
00603 {
00604
00605 ionbal.RateRecomTot[nelem][ion] = -1.;
00606 ionbal.UTA_ionize_rate[nelem][ion] = -1.;
00607 ionbal.UTA_heat_rate[nelem][ion] = -1.;
00608 ionbal.ipCompRecoil[nelem][ion] = -99;
00609 ionbal.CompRecoilIonRate[nelem][ion] = -1.;
00610 ionbal.CompRecoilIonRateSave[nelem][ion] = -1.;
00611 ionbal.CompRecoilHeatRate[nelem][ion] = -1.;
00612 ionbal.CompRecoilHeatRateSave[nelem][ion] = -1.;
00613
00614
00615 ionbal.PhotoRate_Shell[nelem][ion] =
00616 (double**)MALLOC(sizeof(double*)*(unsigned)NSHELLS );
00617 ionbal.CollIonRate_Ground[nelem][ion] =
00618 (double*)MALLOC(sizeof(double)*(unsigned)2 );
00619 for( ns=0; ns<NSHELLS; ++ns )
00620 {
00621 ionbal.PhotoRate_Shell[nelem][ion][ns] =
00622 (double*)MALLOC(sizeof(double)*(unsigned)3 );
00623 }
00624
00625
00626 ionbal.ipCompRecoil[nelem][ion] = -100000;
00627 ionbal.DR_Badnell_rate_coef[nelem][ion] = 0.;
00628 ionbal.RR_Badnell_rate_coef[nelem][ion] = 0.;
00629 ionbal.DR_old_rate_coef[nelem][ion] = 0.;
00630 }
00631
00632 set_NaN( ionbal.DR_rate_coef_used[nelem], nelem+1 );
00633 set_NaN( ionbal.RR_rate_coef_used[nelem], nelem+1 );
00634 set_NaN( ionbal.RR_Verner_rate_coef[nelem], nelem+1 );
00635 }
00636 }
00637
00638 for(ion=0; ion<LIMELM; ++ion )
00639 {
00640 ionbal.DR_Badnell_rate_coef_mean_ion[ion] = 0.;
00641 }
00642
00643
00644 for( nelem=0; nelem< LIMELM; ++nelem )
00645 {
00646 for( ion=0; ion<nelem+1; ++ion )
00647 {
00648
00649 ionbal.CompRecoilHeatRate[nelem][ion] = 0.;
00650 ionbal.CompRecoilIonRate[nelem][ion] = 0.;
00651 ionbal.UTA_ionize_rate[nelem][ion] = 0.;
00652 ionbal.UTA_heat_rate[nelem][ion] = 0.;
00653 ionbal.CollIonRate_Ground[nelem][ion][0] = 0.;
00654 ionbal.CollIonRate_Ground[nelem][ion][1] = 0.;
00655 ionbal.RateRecomTot[nelem][ion] = 0.;
00656 for( ns=0; ns < NSHELLS; ++ns )
00657 {
00658
00659
00660 ionbal.PhotoRate_Shell[nelem][ion][ns][0] = 0.;
00661 ionbal.PhotoRate_Shell[nelem][ion][ns][1] = 0.;
00662 ionbal.PhotoRate_Shell[nelem][ion][ns][2] = 0.;
00663 }
00664 }
00665
00666 for( ion=0; ion<nelem+2; ++ion )
00667 {
00668 long int ion2;
00669
00670 mole.source[nelem][ion] = 0.;
00671 mole.sink[nelem][ion] = 0.;
00672 for( ion2=0; ion2<nelem+2; ++ion2 )
00673 {
00674 mole.xMoleChTrRate[nelem][ion][ion2] = 0.;
00675 }
00676 }
00677 }
00678
00679
00680
00681
00682 mole.lgGrain_mole_deplete = true;
00683
00684 ionbal.lgPhotoIoniz_On = true;
00685 ionbal.lgCompRecoil = true;
00686
00687
00688 ionbal.lgInnerShellLine_on = true;
00689
00690
00691 ionbal.lgInnerShell_Kisielius = false;
00692 ionbal.lgInnerShell_Gu06 = true;
00693
00694
00695 ionbal.lgSupDie[0] = true;
00696 ionbal.lgSupDie[1] = false;
00697
00698 ionbal.lgNoCota = false;
00699 for( i=0; i < LIMELM; i++ )
00700 {
00701 ionbal.CotaRate[i] = 0.;
00702 }
00703 ionbal.ilt = 0;
00704 ionbal.iltln = 0;
00705 ionbal.ilthn = 0;
00706 ionbal.ihthn = 0;
00707 ionbal.ifail = 0;
00708 ionbal.lgGrainIonRecom = true;
00709
00710
00711 ionbal.lgDR_recom_Badnell_use = true;
00712
00713
00714 ionbal.lgRR_recom_Badnell_use = true;
00715
00716
00717 ionbal.lgRecom_Badnell_print = false;
00718
00719
00720
00721 ionbal.nDR_S_guess = 0;
00722
00723
00724
00725
00726 ionbal.lg_guess_coef = true;
00727 ionbal.guess_noise = 0.;
00728
00729
00730
00731 ionbal.lgHO_ct_chem = true;
00732
00733
00734
00735
00736
00737
00738
00739 lgPrnErr = false;
00740 ioPrnErr = stderr;
00741
00742
00743 for( nelem=ipHYDROGEN; nelem < LIMELM; nelem++ )
00744 {
00745 dense.gas_phase[nelem] = 0.;
00746 dense.xMolecules[nelem] = 0.;
00747 for( ion=0; ion < LIMELM+1; ion++ )
00748 {
00749 dense.xIonDense[nelem][ion] = 0.;
00750 }
00751 }
00752 dense.xMassTotal = 0.;
00753
00754
00755
00756
00757 for(i=0;i<N_H_MOLEC;++i)
00758 {
00759 co.hmole_mass[i] = 0;
00760 }
00761
00762
00763
00764
00765 co.hmole_mass[0] = 1.0*ATOMIC_MASS_UNIT;
00766 co.hmole_mass[1] = 1.0*ATOMIC_MASS_UNIT;
00767 co.hmole_mass[2] = 1.0*ATOMIC_MASS_UNIT;
00768 co.hmole_mass[3] = 2.0*ATOMIC_MASS_UNIT;
00769 co.hmole_mass[4] = 2.0*ATOMIC_MASS_UNIT;
00770 co.hmole_mass[5] = 3.0*ATOMIC_MASS_UNIT;
00771 co.hmole_mass[6] = 2.0*ATOMIC_MASS_UNIT;
00772 co.hmole_mass[7] = 5.0*ATOMIC_MASS_UNIT;
00773 co.hmole_mass[8] = 4.0*ATOMIC_MASS_UNIT;
00774
00775
00776 t_fe2ovr_la::Inst().zero_opacity();
00777
00778
00779 mean.MeanZero();
00780
00781
00782 HeatZero();
00783
00784
00785 ca.Ca2RmLya = 0.;
00786 ca.popca2ex = 0.;
00787 ca.Ca3d = 0.;
00788 ca.Ca4p = 0.;
00789 ca.dstCala = 0.;
00790
00791
00792
00793 co.C12_C13_isotope_ratio = 30.;
00794
00795
00796 co.lgH2Ozer = false;
00797
00798
00799 dense.EdenExtra = 0.;
00800
00801
00802 dense.EdenSet = 0.;
00803
00804
00805 conv.PressureErrorAllowed = 0.01f;
00806
00807
00808 conv.limPres2Ioniz = 100000000;
00809
00810 conv.nTeFail = 0;
00811 conv.nTotalFailures = 0;
00812 conv.nPreFail = 0;
00813 conv.failmx = 0.;
00814 conv.nIonFail = 0;
00815 conv.nPopFail = 0;
00816 conv.nNeFail = 0;
00817 conv.nGrainFail = 0;
00818 conv.dCmHdT = 0.;
00819
00820
00821 for( i=0; i<74; ++i)
00822 {
00823 input.chTitle[i] = ' ';
00824 }
00825 input.chTitle[75] = '\0';
00826
00827
00828
00829
00830 DoppVel.TurbVel = 0.;
00831
00832 DoppVel.lgTurbLawOn = false;
00833
00834 DoppVel.TurbVelLaw = 0.;
00835
00836
00837 DoppVel.Heiles_Troland_F = 0.;
00838
00839
00840
00841 DoppVel.lgTurb_pressure = true;
00842
00843
00844 DoppVel.DispScale = 0.;
00845
00846 DoppVel.lgTurbEquiMag = false;
00847
00848
00849
00850 pressure.RhoGravity_dark = 0.;
00851 pressure.RhoGravity_self = 0.;
00852 pressure.RhoGravity_external = 0.;
00853 pressure.RhoGravity = 0.;
00854 pressure.IntegRhoGravity = 0.;
00855 pressure.gravity_symmetry = -1;
00856 pressure.self_mass_factor = 1.;
00857
00858 pressure.PresRamCurr = 0.;
00859 pressure.pres_radiation_lines_curr = 0.;
00860 pressure.lgPradCap = false;
00861 pressure.lgPradDen = false;
00862 pressure.lgLineRadPresOn = true;
00863
00864
00865 pressure.lgRadPresAbortOK = true;
00866
00867
00868 pressure.lgSonicPointAbortOK = true;
00869
00870 pressure.lgSonicPoint = false;
00871
00872 pressure.lgStrongDLimbo = false;
00873
00874 pressure.RadBetaMax = 0.;
00875 pressure.ipPradMax_nzone = -1;
00876 pressure.PresMax = 0.;
00877
00878
00879 pressure.PresTotlInit = 0.;
00880 pressure.PresTotlCurr = 0.;
00881
00882
00883 DynaZero();
00884
00885 phycon.lgPhysOK = true;
00886
00887
00888
00889 phycon.BigJumpTe = 0.;
00890 phycon.BigJumpne = 0.;
00891 phycon.BigJumpH2 = 0.;
00892 phycon.BigJumpCO = 0.;
00893
00894 dense.xNucleiTotal = 1.;
00895
00896 dense.xMassDensity0 = -1.0f;
00897
00898 dense.eden = 1.;
00899
00900
00901
00902 TempChange( 1e4 , true);
00903
00904
00905
00906
00907
00908 dense.HCorrFac = 1.f;
00909
00910 dense.H_sum_in_CO = 0.;
00911
00912 dark.lgNFW_Set = false;
00913 dark.r_200 = 0.;
00914 dark.r_s = 0.;
00915
00916 atoms.nNegOI = 0;
00917 for( i=0; i< N_OI_LEVELS; ++i )
00918 {
00919 atoms.popoi[i] = 0.;
00920 }
00921 atoms.popmg2 = 0.;
00922
00923
00924 opac.lgNegOpacIO = false;
00925
00926 opac.otsmin = 0.;
00927
00928
00929
00930
00931
00932
00933 opac.lgOpacStatic = true;
00934
00935
00936 opac.lgOpacNeg = false;
00937
00938
00939 opac.lgScatON = true;
00940
00941
00942
00943 opac.lgCompileOpac = false;
00944
00946 opac.lgUseFileOpac = false;
00947
00948 dynamics.Upstream_hden = 0.;
00949
00950 hextra.frcneu = 0.;
00951 hextra.effneu = 1.;
00952 hextra.totneu = 0.;
00953 hextra.lgNeutrnHeatOn = false;
00954 hextra.CrsSecNeutron = 4e-26;
00955
00956 opac.stimax[0] = 0.;
00957 opac.stimax[1] = 0.;
00958
00959 for(i=0;i<N_H_MOLEC;i++)
00960 {
00961
00962 int hmi_protons[N_H_MOLEC] = {1,1,1,2,2,3,2,1};
00963
00964
00965
00966 int hmi_electrons[N_H_MOLEC] = {0,0,-1,0,1,1,0,1};
00967
00968 hmi.Hmolec[i] = 0.;
00969 hmi.nProton[i] = hmi_protons[i];
00970
00971 hmi.nElectron[i] = hmi_electrons[i];
00972 }
00973
00974 hmi.H2_total = 0.;
00975 hmi.H2_frac_abund_set = 0.;
00976 hmi.H2_formation_scale = 1.;
00977 hmi.hmihet = 0.;
00978 hmi.h2plus_heat = 0.;
00979 hmi.HeatH2Dish_used = 0.;
00980 hmi.HeatH2Dexc_used = 0.;
00981 hmi.HeatH2Dish_TH85 = 0.;
00982 hmi.HeatH2Dexc_TH85 = 0.;
00983 hmi.HeatH2Dish_BigH2 = 0.;
00984 hmi.HeatH2Dexc_BigH2 = 0.;
00985 hmi.UV_Cont_rel2_Draine_DB96_face = 0.;
00986 hmi.UV_Cont_rel2_Draine_DB96_depth = 0.;
00987 hmi.UV_Cont_rel2_Habing_TH85_face = 0.;
00988 hmi.UV_Cont_rel2_Habing_TH85_depth = 0.;
00989 hmi.HeatH2DexcMax = 0.;
00990 hmi.CoolH2DexcMax = 0.;
00991 hmi.hmitot = 0.;
00992 hmi.H2Opacity = 0.;
00993 hmi.hmidep = 1.;
00994 hmi.h2dep = 1.;
00995 hmi.h2pdep = 1.;
00996 hmi.h3pdep = 1.;
00997 hmi.BiggestH2 = -1.f;
00998
00999 hmi.lgNoH2Mole = false;
01000
01001
01002
01003 hmi.lgLeiden_Keep_ipMH2s = true;
01004 hmi.lgLeidenCRHack = true;
01005
01006
01007
01008 co.lgUMISTrates = true;
01009
01010
01011
01012
01013 co.lgFederman = true;
01014
01015
01016
01017 co.lgNonEquilChem = false;
01021 co.lgProtElim = true;
01025 co.lgNeutrals = true;
01026
01027
01028
01029
01030
01031
01032
01033 hmi.chH2_small_model_type = 'T';
01034
01035
01036
01037 hmi.chH2_small_model_type = 'H';
01038
01039
01040 hmi.chH2_small_model_type = 'B';
01041
01042 hmi.chH2_small_model_type = 'E';
01043
01044
01045 set_NaN( hmi.HeatH2Dish_used );
01046 set_NaN( hmi.HeatH2Dish_BigH2 );
01047 set_NaN( hmi.HeatH2Dish_TH85 );
01048 set_NaN( hmi.HeatH2Dish_BD96 );
01049 set_NaN( hmi.HeatH2Dish_BHT90 );
01050 set_NaN( hmi.HeatH2Dish_ELWERT );
01051
01054 set_NaN( hmi.HeatH2Dexc_used );
01055 set_NaN( hmi.HeatH2Dexc_BigH2 );
01056 set_NaN( hmi.HeatH2Dexc_TH85 );
01057 set_NaN( hmi.HeatH2Dexc_BD96 );
01058 set_NaN( hmi.HeatH2Dexc_BHT90 );
01059 set_NaN( hmi.HeatH2Dexc_ELWERT );
01060
01062 set_NaN( hmi.deriv_HeatH2Dexc_used );
01063 set_NaN( hmi.deriv_HeatH2Dexc_BigH2 );
01064 set_NaN( hmi.deriv_HeatH2Dexc_TH85 );
01065 set_NaN( hmi.deriv_HeatH2Dexc_BD96 );
01066 set_NaN( hmi.deriv_HeatH2Dexc_BHT90 );
01067 set_NaN( hmi.deriv_HeatH2Dexc_ELWERT );
01068
01069 set_NaN( hmi.H2_Solomon_dissoc_rate_used_H2g );
01070 set_NaN( hmi.H2_Solomon_dissoc_rate_BigH2_H2g );
01071 set_NaN( hmi.H2_Solomon_dissoc_rate_TH85_H2g );
01072 set_NaN( hmi.H2_Solomon_dissoc_rate_BHT90_H2g );
01073 set_NaN( hmi.H2_Solomon_dissoc_rate_BD96_H2g );
01074 set_NaN( hmi.H2_Solomon_dissoc_rate_ELWERT_H2g );
01075
01076 set_NaN( hmi.H2_Solomon_dissoc_rate_used_H2s );
01077 set_NaN( hmi.H2_Solomon_dissoc_rate_BigH2_H2s );
01078 set_NaN( hmi.H2_Solomon_dissoc_rate_TH85_H2s );
01079 set_NaN( hmi.H2_Solomon_dissoc_rate_BHT90_H2s );
01080 set_NaN( hmi.H2_Solomon_dissoc_rate_BD96_H2s );
01081 set_NaN( hmi.H2_Solomon_dissoc_rate_ELWERT_H2s );
01082
01087 set_NaN( hmi.H2_photodissoc_used_H2g );
01088 set_NaN( hmi.H2_photodissoc_used_H2s );
01089 set_NaN( hmi.H2_photodissoc_BigH2_H2s );
01090 set_NaN( hmi.H2_photodissoc_BigH2_H2g );
01091 set_NaN( hmi.H2_photodissoc_ELWERT_H2g );
01092 set_NaN( hmi.H2_photodissoc_ELWERT_H2s );
01093 set_NaN( hmi.H2_photodissoc_TH85 );
01094 set_NaN( hmi.H2_photodissoc_BHT90 );
01095
01096
01097 hmi.chGrainFormPump = 'T';
01098
01099
01100
01101 hmi.chJura = 'C';
01102
01103
01104 hmi.ScaleJura = 1.f;
01105
01106
01107
01108 hmi.Tad = 800.;
01109
01110
01111 H2_Zero();
01112
01113
01114 for( i=0; i < NCOLD; i++ )
01115 {
01116 colden.colden[i] = 0.;
01117 }
01118 colden.He123S = 0.;
01119 colden.coldenH2_ov_vel = 0.;
01120
01121 h2.ortho_colden = 0.;
01122 h2.para_colden = 0.;
01123
01124
01125 colden.H0_21cm_upper =0;
01126 colden.H0_21cm_lower =0;
01127
01128 for( i=0; i < 5; i++ )
01129 {
01130 colden.C2Pops[i] = 0.;
01131 colden.C2Colden[i] = 0.;
01132
01133 colden.Si2Pops[i] = 0.;
01134 colden.Si2Colden[i] = 0.;
01135 }
01136 for( i=0; i < 3; i++ )
01137 {
01138
01139 colden.C1Pops[i] = 0.;
01140 colden.C1Colden[i] = 0.;
01141
01142 colden.O1Pops[i] = 0.;
01143 colden.O1Colden[i] = 0.;
01144
01145 colden.C3Pops[i] = 0.;
01146 }
01147 for( i=0; i < 4; i++ )
01148 {
01149
01150 colden.C3Colden[i] = 0.;
01151 }
01152
01153
01154 colden.TotMassColl = 0.;
01155 colden.tmas = 0.;
01156 colden.wmas = 0.;
01157 colden.rjnmin = FLT_MAX;
01158 colden.ajmmin = FLT_MAX;
01159
01160
01161 radius.rinner = 0.;
01162 radius.distance = 0.;
01163 radius.Radius = 0.;
01164 radius.Radius_mid_zone = 0.;
01165 radius.depth = DEPTH_OFFSET;
01166 radius.depth_mid_zone = DEPTH_OFFSET/2.;
01167 radius.depth_x_fillfac = 0.;
01168 radius.lgRadiusKnown = false;
01169 radius.drad = 0.;
01170 radius.drad_mid_zone = 0.;
01171 radius.r1r0sq = 1.;
01172
01173 radius.dRadSign = 1.;
01174
01175
01176
01177
01178 radius.rdfalt = 30.;
01179
01180
01181 radius.CylindHigh = 1e35f;
01182 radius.lgCylnOn = false;
01183
01184 radius.drad_x_fillfac = 1.;
01185 radius.drad_x_fillfac_mean = 1.;
01186 radius.darea_x_fillfac = 1.;
01187 radius.dVeffVol = 1.;
01188 radius.dVeffAper = 1.;
01189 radius.drNext = 1.;
01190 radius.dRNeff = 1.;
01191 radius.lgdR2Small = false;
01192
01193 radius.sdrmin = SMALLFLOAT;
01194 radius.lgSdrminRel = false;
01195 radius.sdrmax = 1e30;
01196 radius.lgSdrmaxRel = false;
01197 radius.lgSMinON = false;
01198 radius.lgDrMnOn = true;
01199
01200 radius.lgDrMinUsed = false;
01201
01202 rfield.lgHabing = false;
01203
01204
01205 rfield.lgLyaOTS = true;
01206
01207 rfield.lgHeIIOTS = true;
01208 rfield.lgKillOTSLine = false;
01209 rfield.lgKillOutLine = false;
01210 rfield.lgKillOutCont = false;
01211
01212
01213
01214 rfield.DiffPumpOn = 1.;
01215
01216
01217 rfield.lgCompileGauntFF = false;
01218
01219
01220 rfield.lgDoLineTrans = true;
01221
01222
01223
01224 rfield.lgOpacityReevaluate = true;
01225
01226
01227
01228 rfield.lgIonizReevaluate = true;
01229
01230 rfield.fine_opac_nelem = ipIRON;
01231
01232
01233 rfield.fine_opac_nresolv = 1;
01234
01235 rfield.time_continuum_scale = 1.;
01236
01237 rfield.lgSaveOpacityFine = false;
01238
01239
01240
01241
01242 rfield.lgMustBlockHIon = false;
01243 rfield.lgBlockHIon = false;
01244
01245
01246 CoolZero();
01247
01248 thermal.lgCNegChk = true;
01249 thermal.CoolHeatMax = 0.;
01250 thermal.wlCoolHeatMax = 0;
01251 thermal.totcol = 0.;
01252 thermal.heatl = 0.;
01253 thermal.coolheat = 0.;
01254 thermal.lgCExtraOn = false;
01255 thermal.CoolExtra = 0.;
01256 thermal.ctot = 1.;
01257
01258 thermal.htot = 1.;
01259 thermal.power = 0.;
01260 thermal.FreeFreeTotHeat = 0.;
01261 thermal.char_tran_cool = 0.;
01262 thermal.char_tran_heat = 0.;
01263
01264 fnzone = 0.;
01265 nzone = 0;
01266
01267 called.lgTalkSave = called.lgTalk;
01268
01269 oxy.poiii2 = 0.;
01270 oxy.poiii3 = 0.;
01271 oxy.poiexc = 0.;
01272
01273 oxy.d5007r = 0.;
01274 oxy.d5007t = 0.;
01275 oxy.d4363 = 0.;
01276 oxy.d6300 = 0.;
01277
01278 atmdat.nsbig = 0;
01279
01280
01281 atmdat.lgCollIonOn = true;
01282 atmdat.lgChiantiOn = false;
01283 atmdat.lgLamdaOn = true;
01284
01285
01286
01287
01288
01289
01290 atmdat.HCharHeatMax = 0.;
01291 atmdat.HCharCoolMax = 0.;
01292
01293 atmdat.HIonFrac = 0.;
01294 atmdat.HCharExcIonTotal = 0.;
01295 atmdat.HIonFracMax = 0.;
01296 atmdat.HCharExcRecTotal = 0.;
01297
01298 atmdat.lgCTOn = true;
01299
01300
01301
01302 atmdat.HCharHeatOn = 1.;
01303 for( nelem=0; nelem< LIMELM; ++nelem )
01304 {
01305 for( ion=0; ion<LIMELM; ++ion )
01306 {
01307 atmdat.HCharExcIonOf[nelem][ion] = 0.;
01308 atmdat.HCharExcRecTo[nelem][ion] = 0.;
01309 }
01310 }
01311
01312
01313
01314 atmdat.HCTAlex = 1.92e-9;
01315
01316 for( nelem=0; nelem < LIMELM; nelem++ )
01317 {
01318
01319 abund.depset[nelem] = 1.;
01320
01321 if( abund.depset[nelem] == 0. )
01322 {
01323 fprintf( ioQQQ, " ZERO finds insane abundance or depletion.\n" );
01324 fprintf( ioQQQ, " atomic number=%6ld abundance=%10.2e depletion=%10.2e\n",
01325 nelem, abund.solar[nelem], abund.depset[nelem] );
01326 ShowMe();
01327 cdEXIT(EXIT_FAILURE);
01328 }
01329
01330 }
01331
01332
01333
01334
01335 abund.Depletion[0] = 1.;
01336 abund.Depletion[1] = 1.;
01337 abund.Depletion[2] = .16f;
01338 abund.Depletion[3] = .6f;
01339 abund.Depletion[4] = .13f;
01340 abund.Depletion[5] = 0.4f;
01341 abund.Depletion[6] = 1.0f;
01342 abund.Depletion[7] = 0.6f;
01343 abund.Depletion[8] = .3f;
01344 abund.Depletion[9] = 1.f;
01345 abund.Depletion[10] = 0.2f;
01346 abund.Depletion[11] = 0.2f;
01347 abund.Depletion[12] = 0.01f;
01348 abund.Depletion[13] = 0.03f;
01349 abund.Depletion[14] = .25f;
01350 abund.Depletion[15] = 1.0f;
01351 abund.Depletion[16] = 0.4f;
01352 abund.Depletion[17] = 1.0f;
01353 abund.Depletion[18] = .3f;
01354 abund.Depletion[19] = 1e-4f;
01355 abund.Depletion[20] = 5e-3f;
01356 abund.Depletion[21] = 8e-3f;
01357 abund.Depletion[22] = 6e-3f;
01358 abund.Depletion[23] = 6e-3f;
01359 abund.Depletion[24] = 5e-2f;
01360 abund.Depletion[25] = 0.01f;
01361 abund.Depletion[26] = 0.01f;
01362 abund.Depletion[27] = 0.01f;
01363 abund.Depletion[28] = .1f;
01364 abund.Depletion[29] = .25f;
01365
01366 abund.lgDepln = false;
01367 abund.ScaleMetals = 1.;
01368
01369
01370 t_yield::Inst().reset_yield();
01371
01372 rt.dTauMase = 0.;
01373 rt.lgMaserCapHit = false;
01374 rt.lgMaserSetDR = false;
01375
01376 rt.DoubleTau = 1.;
01377 rt.lgFstOn = true;
01378 rt.lgElecScatEscape = true;
01379
01380
01381 lgTestCodeCalled = false;
01382
01383 lgTestCodeEnabled = false;
01384
01385
01386 GrainZero();
01387 fe.Fe7CoolTot = 0.;
01388
01389
01390
01391 lgFirstCall = false;
01392 return;
01393 }