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