00001
00002
00003
00004
00005
00006 #include "cddefines.h"
00007 #include "physconst.h"
00008 #include "iterations.h"
00009 #include "hydrogenic.h"
00010 #include "punch.h"
00011 #include "oxy.h"
00012 #include "doppvel.h"
00013 #include "dense.h"
00014 #include "grains.h"
00015 #include "state.h"
00016 #include "rt.h"
00017 #include "he.h"
00018 #include "struc.h"
00019 #include "h2.h"
00020 #include "coolheavy.h"
00021 #include "lines.h"
00022 #include "dynamics.h"
00023 #include "carb.h"
00024 #include "sil.h"
00025 #include "mean.h"
00026 #include "helike.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 "stopcalc.h"
00042 #include "numderiv.h"
00043 #include "wind.h"
00044 #include "colden.h"
00045 #include "yield.h"
00046 #include "hmi.h"
00047 #include "rfield.h"
00048 #include "abund.h"
00049 #include "radius.h"
00050 #include "opacity.h"
00051 #include "neutrn.h"
00052 #include "broke.h"
00053 #include "secondaries.h"
00054 #include "called.h"
00055 #include "phycon.h"
00056 #include "warnings.h"
00057 #include "thermal.h"
00058 #include "cooling.h"
00059 #include "fe.h"
00060 #include "hyperfine.h"
00061 #include "zero.h"
00062
00063
00064
00065 void zero(void)
00066 {
00067 long int i,
00068 ion,
00069 ipISO ,
00070 nelem,
00071 ns;
00072
00073
00074
00075
00076 static bool lgFirstCall = true;
00077
00078 DEBUG_ENTRY( "zero()" );
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 Zerologic();
00091
00092
00093 AbundancesZero();
00094
00095
00096 FeIIZero();
00097
00098
00099 wcnint();
00100
00101
00102
00103 hmole_init();
00104 H2_Init();
00105
00106
00107
00108 iterations.iter_malloc = 200;
00109
00110 if( lgFirstCall)
00111 {
00112 iterations.IterPrnt = (long int*)MALLOC( (size_t)iterations.iter_malloc*sizeof(long int) );
00113 geometry.nend = (long int*)MALLOC( (size_t)iterations.iter_malloc*sizeof(long int) );
00114 radius.router = (double*)MALLOC( (size_t)iterations.iter_malloc*sizeof(double) );
00115 }
00116 for( 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( i=0; i < iterations.iter_malloc; i++ )
00151 {
00152 geometry.nend[i] = geometry.nEndDflt;
00153
00154 radius.router[i] = 1e31;
00155 }
00156
00157
00158
00159 geometry.AngleIllumRadian = 0.;
00160 geometry.DirectionalCosin = 1.;
00161 geometry.fiscal = 1.;
00162 geometry.FillFac = 1.;
00163 geometry.filpow = 0.;
00164
00165
00166 geometry.lgSphere = false;
00167
00168 geometry.covrt = 0.;
00169
00170 geometry.covgeo = 1.;
00171
00172 geometry.lgStatic = false;
00173
00174
00175 geometry.lgStaticNoIt = false;
00176
00177
00178 geometry.iEmissPower = 2;
00179
00180 carb.p1909 = 0.;
00181 carb.p2326 = 0.;
00182 sil.p1895 = 0.;
00183 oxy.p1666 = 0.;
00184 oxy.p1401 = 0.;
00185
00186
00187
00188 conv.nPres2Ioniz = 0;
00189
00190
00191
00192
00193
00194
00195 lgAbort = false;
00196
00197
00198
00199
00200
00201 conv.HeatCoolRelErrorAllowed = 0.005f;
00202
00203
00204 conv.EdenErrorAllowed = 0.01;
00205
00206 conv.LimFail = 20;
00207 conv.lgMap = false;
00208
00209
00210 conv.lgLevel2_OTS_Imp = true;
00211
00212 conv.lgLevel2_Cool_Imp = true;
00213
00214
00215
00216 conv.nTotalIoniz = 0;
00217
00218
00219 conv.BigEdenError = 0.;
00220 conv.AverEdenError = 0.;
00221 conv.BigHeatCoolError = 0.;
00222 conv.AverHeatCoolError = 0.;
00223 conv.BigPressError = 0.;
00224 conv.AverPressError = 0.;
00225 strcpy( conv.chSolverEden , "simple" );
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235 strcpy( conv.chSolverTemp , "simple" );
00236
00237
00238
00239
00240
00241 conv.lgAutoIt = false;
00242
00243 conv.autocv = 0.20f;
00244 conv.lgConvTemp = true;
00245 conv.lgConvPres = true;
00246 conv.lgConvEden = true;
00247
00248
00249
00250
00251 t_ADfA::Inst().set_version( PHFIT96 );
00252
00253
00254 timesc.CloudAgeSet = -1.f;
00255
00256 timesc.time_H2_Dest_longest = 0.;
00257 timesc.time_H2_Form_longest = 0.;
00258
00259 timesc.time_H2_Dest_here = -1.;
00260 timesc.time_H2_Form_here = 0.;
00261
00262 timesc.BigCOMoleForm = 0.;
00263
00264 timesc.TimeH21cm = 0.;
00265 timesc.sound_speed_isothermal = 0.;
00266
00267 peimbt.tsqden = 1e7;
00268
00269
00270 co.codfrc = 0.;
00271 co.codtot = 0.;
00272 co.CODissHeat = 0.;
00273
00274 co.COCoolBigFrac = 0.;
00275 co.lgCOCoolCaped = false;
00276
00277
00278 co.lgNoCOMole = false;
00279
00280 NumDeriv.lgNumDeriv = false;
00281
00282 LineSave.nsum = 0;
00283
00284
00285
00286
00287
00288
00289 LineSave.ipNormWavL = -1;
00290 LineSave.WavLNorm = 4861.36f;
00291 LineSave.lgNormSet = false;
00292 LineSave.sig_figs = 4;
00293
00294
00295 strcpy( LineSave.chNormLab, " " );
00296
00297
00298 LineSave.ScaleNormLine = 1.;
00299
00300
00301 LineSave.lgLineEmergent = false;
00302
00303
00304
00305
00306 continuum.ResolutionScaleFactor = 1.;
00307
00308 continuum.lgCoStarInterpolationCaution = false;
00309 continuum.lgCon0 = false;
00310
00311
00312
00313 continuum.EnergyKshell = 7.35e4;
00314
00315
00316
00317
00318 punch.WeakHeatCool = 0.05f;
00319
00320
00321 punch.npunch = 0;
00322 punch.cp_npun = 0;
00323 punch.lgPunContinuum = false;
00324 punch.lgHashEndIter = true;
00325 punch.lgDRPLst = false;
00326
00327
00328 strcpy( punch.chHashString , " ###########################" );
00329
00330
00331 strcpy( punch.chFilenamePrefix , "" );
00332
00333 punch.ncPunchSkip = 1;
00334
00335 punch.lgFLUSH = false;
00336 for( i=0; i<LIMPUN; ++i )
00337 {
00338 punch.lg_separate_iterations[i] = true;
00339 punch.lgPunchEveryZone[i] = false;
00340 punch.nPunchEveryZone[i] = -1;
00341 }
00342
00343
00344
00345
00346 punch.PunchLWidth = (float)(SPEEDLIGHT/1000.e5);
00347
00348
00349 CoolHeavy.lgFreeOn = true;
00350 CoolHeavy.brems_cool_h = 0.;
00351 CoolHeavy.colmet = 0.;
00352
00353 CoolHeavy.brems_cool_net = 0.;
00354 hydro.cintot = 0.;
00355
00356
00357 hydro.lgHydEmiss = false;
00358 hydro.lgHiPop2 = false;
00359 hydro.pop2mx = 0.;
00360 hydro.lgReevalRecom = false;
00361
00362
00363 hydro.HCollIonMax = 0.;
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375 for(ipISO=ipH_LIKE; ipISO<NISO; ++ipISO )
00376 {
00377 strcpy( iso.chTypeAtomSet[ipISO] , "none" );
00378 for( nelem=ipHYDROGEN; nelem<LIMELM; ++nelem )
00379 {
00380
00381 strcpy( iso.chTypeAtomUsed[ipISO][nelem] , "none" );
00382 }
00383 }
00384
00385
00386
00387
00388
00389 strcpy( hydro.chHTopType, " add" );
00390
00391
00392 hydro.TexcLya = 0.;
00393 hydro.TLyaMax = 0.;
00394 hydro.nLyaHot = 0;
00395
00396
00397 hydro.DampOnFac = 1.;
00398
00399
00400
00401 hydro.lgLymanPumping = true;
00402
00403
00404
00405 hydro.xLymanPumpingScaleFactor = 1.f;
00406
00407
00408
00409 hydro.D2H_ratio = 1.65e-5;
00410
00411
00412 he.nzone = 0;
00413 he.frac_he0dest_23S = 0.;
00414 he.frac_he0dest_23S_photo = 0.;
00415
00416
00417 helike.lgCompileRecomb = false;
00418 helike.lgNoRecombInterp = false;
00419
00420
00421
00422 helike.lgSetBenjamin = false;
00423
00424
00426 helike.lgCS_Vriens = true;
00427 helike.lgCS_Vrinceanu = true;
00428 helike.lgCS_therm_ave = false;
00429 helike.lgCS_None = false;
00430
00431
00432
00433 helike.nCS_new = 1;
00434
00435 helike.lgCritDensLMix = true;
00436
00437
00438 helike.lgFSM = 0;
00439
00440
00441 helike.lgRandErrGen = false;
00442
00443
00444 helike.lgErrGenDone = false;
00445
00446
00447 helike.lgTopoff = true;
00448 helike.lgHugeCaseB = false;
00449
00450
00451 helike.nDielRecom = 1;
00452
00453
00454
00455
00456
00457 secondaries.SetCsupra = 0.;
00458 secondaries.lgCSetOn = false;
00459 secondaries.lgSecOFF = false;
00460 secondaries.SecHIonMax = 0.;
00461
00462 secondaries.heatef = 1.;
00463 secondaries.efionz = 0.;
00464 secondaries.exctef = 0.;
00465 secondaries.x12tot = 0.;
00466 secondaries.sec2total = 0.;
00467
00468 for( nelem=0; nelem< LIMELM; ++nelem )
00469 {
00470 secondaries.Hx12[0][nelem] = 0.;
00471 secondaries.Hx12[1][nelem] = 0.;
00472 }
00473 secondaries.Hx12[0][LIMELM] = 0.;
00474 secondaries.Hx12[1][LIMELM] = 0.;
00475
00476 if( lgFirstCall )
00477 {
00478
00479 secondaries.csupra = (float **)MALLOC( (unsigned)LIMELM*sizeof(float *) );
00480 secondaries.csupra_effic = (float **)MALLOC( (unsigned)LIMELM*sizeof(float *) );
00481 for( nelem=ipHYDROGEN; nelem<LIMELM; ++nelem )
00482 {
00483 secondaries.csupra[nelem] = (float *)MALLOC( (unsigned)(nelem+1)*sizeof(float) );
00484 secondaries.csupra_effic[nelem] = (float *)MALLOC( (unsigned)(nelem+1)*sizeof(float) );
00485 }
00486 }
00487 for( nelem=ipHYDROGEN; nelem<LIMELM; ++nelem )
00488 {
00489 for( ion=0; ion<nelem+1; ++ion )
00490 {
00491
00492 secondaries.csupra[nelem][ion] = 0.;
00493
00494 secondaries.csupra_effic[nelem][ion] = 1.f;
00495 }
00496 }
00497
00498 secondaries.csupra_effic[ipHELIUM][0] = 1.08f;
00499
00500
00501
00502 if( lgFirstCall )
00503 {
00504
00505 ionbal.ipCompRecoil =
00506 (long**)MALLOC(sizeof(long*)*(unsigned)LIMELM );
00507 ionbal.CompRecoilIonRate =
00508 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00509 ionbal.CompRecoilIonRateSave =
00510 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00511 ionbal.CompRecoilHeatRate =
00512 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00513 ionbal.CompRecoilHeatRateSave =
00514 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00515 ionbal.PhotoRate_Shell =
00516 (double****)MALLOC(sizeof(double***)*(unsigned)LIMELM );
00517 ionbal.CollIonRate_Ground =
00518 (double***)MALLOC(sizeof(double**)*(unsigned)LIMELM );
00519 ionbal.UTA_ionize_rate =
00520 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00521 ionbal.UTA_heat_rate =
00522 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00523
00524
00525
00526 mole.source =
00527 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00528 mole.sink =
00529 (double**)MALLOC(sizeof(double*)*(unsigned)LIMELM );
00530 mole.xMoleChTrRate =
00531 (float***)MALLOC(sizeof(float**)*(unsigned)LIMELM );
00532
00533
00534 ionbal.RateIonizTot = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00535 ionbal.RateRecomTot = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00536 ionbal.RR_rate_coef_used = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00537 ionbal.DR_rate_coef_used = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00538 ionbal.RR_Verner_rate_coef = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00539
00540
00541 ionbal.DR_Badnell_rate_coef = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00542 ionbal.DR_Badnell_rate_coef_mean_ion = (double *)MALLOC(sizeof(double)*(unsigned)LIMELM );
00543
00544 ionbal.lgDR_Badnell_rate_coef_exist = (int **)MALLOC(sizeof(int *)*(unsigned)LIMELM );
00545 ionbal.RR_Badnell_rate_coef = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00546
00547 ionbal.lgRR_Badnell_rate_coef_exist = (int **)MALLOC(sizeof(int *)*(unsigned)LIMELM );
00548
00549 ionbal.DR_old_rate_coef = (double **)MALLOC(sizeof(double *)*(unsigned)LIMELM );
00550
00551
00552 for(nelem=0; nelem<LIMELM; ++nelem )
00553 {
00554 ionbal.DR_Badnell_rate_coef[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00555 ionbal.lgDR_Badnell_rate_coef_exist[nelem] = (int *)MALLOC(sizeof(int)*(unsigned)(nelem+1) );
00556 ionbal.RR_Badnell_rate_coef[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00557 ionbal.lgRR_Badnell_rate_coef_exist[nelem] = (int *)MALLOC(sizeof(int)*(unsigned)(nelem+1) );
00558 ionbal.DR_old_rate_coef[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00559
00560 ionbal.RateIonizTot[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00561 ionbal.RateRecomTot[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00562 ionbal.RR_rate_coef_used[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00563 ionbal.DR_rate_coef_used[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00564 ionbal.RR_Verner_rate_coef[nelem] = (double *)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00565 ionbal.UTA_ionize_rate[nelem] =
00566 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00567 ionbal.UTA_heat_rate[nelem] =
00568 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00569 ionbal.ipCompRecoil[nelem] =
00570 (long*)MALLOC(sizeof(long)*(unsigned)(nelem+1) );
00571 ionbal.CompRecoilIonRate[nelem] =
00572 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00573 ionbal.CompRecoilIonRateSave[nelem] =
00574 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00575 ionbal.CompRecoilHeatRate[nelem] =
00576 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00577 ionbal.CompRecoilHeatRateSave[nelem] =
00578 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+1) );
00579 ionbal.PhotoRate_Shell[nelem] =
00580 (double***)MALLOC(sizeof(double**)*(unsigned)(nelem+1) );
00581 ionbal.CollIonRate_Ground[nelem] =
00582 (double**)MALLOC(sizeof(double*)*(unsigned)(nelem+1) );
00583
00584 mole.source[nelem] =
00585 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+2) );
00586 mole.sink[nelem] =
00587 (double*)MALLOC(sizeof(double)*(unsigned)(nelem+2) );
00588 mole.xMoleChTrRate[nelem] =
00589 (float**)MALLOC(sizeof(float*)*(unsigned)(nelem+2) );
00590 for( ion=0; ion<nelem+2; ++ion )
00591 {
00592 mole.xMoleChTrRate[nelem][ion] =
00593 (float*)MALLOC(sizeof(float)*(unsigned)(nelem+2) );
00594 }
00595
00596 for( ion=0; ion<nelem+1; ++ion )
00597 {
00598
00599 ionbal.RateIonizTot[nelem][ion] = -1.;
00600 ionbal.RateRecomTot[nelem][ion] = -1.;
00601 ionbal.UTA_ionize_rate[nelem][ion] = -1.;
00602 ionbal.UTA_heat_rate[nelem][ion] = -1.;
00603 ionbal.ipCompRecoil[nelem][ion] = -99;
00604 ionbal.CompRecoilIonRate[nelem][ion] = -1.;
00605 ionbal.CompRecoilIonRateSave[nelem][ion] = -1.;
00606 ionbal.CompRecoilHeatRate[nelem][ion] = -1.;
00607 ionbal.CompRecoilHeatRateSave[nelem][ion] = -1.;
00608
00609
00610 ionbal.PhotoRate_Shell[nelem][ion] =
00611 (double**)MALLOC(sizeof(double*)*(unsigned)NSHELLS );
00612 ionbal.CollIonRate_Ground[nelem][ion] =
00613 (double*)MALLOC(sizeof(double)*(unsigned)2 );
00614 for( ns=0; ns<NSHELLS; ++ns )
00615 {
00616 ionbal.PhotoRate_Shell[nelem][ion][ns] =
00617 (double*)MALLOC(sizeof(double)*(unsigned)3 );
00618 }
00619
00620
00621 ionbal.ipCompRecoil[nelem][ion] = -100000;
00622 ionbal.DR_Badnell_rate_coef[nelem][ion] = 0.;
00623 ionbal.RR_Badnell_rate_coef[nelem][ion] = 0.;
00624 ionbal.DR_old_rate_coef[nelem][ion] = 0.;
00625 }
00626
00627 set_nan( ionbal.DR_rate_coef_used[nelem], nelem+1 );
00628 set_nan( ionbal.RR_rate_coef_used[nelem], nelem+1 );
00629 set_nan( ionbal.RR_Verner_rate_coef[nelem], nelem+1 );
00630 }
00631 }
00632
00633 for(ion=0; ion<LIMELM; ++ion )
00634 {
00635 ionbal.DR_Badnell_rate_coef_mean_ion[ion] = 0.;
00636 }
00637
00638
00639 for( nelem=0; nelem< LIMELM; ++nelem )
00640 {
00641 for( ion=0; ion<nelem+1; ++ion )
00642 {
00643
00644 ionbal.CompRecoilHeatRate[nelem][ion] = 0.;
00645 ionbal.CompRecoilIonRate[nelem][ion] = 0.;
00646 ionbal.UTA_ionize_rate[nelem][ion] = 0.;
00647 ionbal.UTA_heat_rate[nelem][ion] = 0.;
00648 ionbal.CollIonRate_Ground[nelem][ion][0] = 0.;
00649 ionbal.CollIonRate_Ground[nelem][ion][1] = 0.;
00650 ionbal.RateRecomTot[nelem][ion] = 0.;
00651 for( ns=0; ns < NSHELLS; ++ns )
00652 {
00653
00654
00655 ionbal.PhotoRate_Shell[nelem][ion][ns][0] = 0.;
00656 ionbal.PhotoRate_Shell[nelem][ion][ns][1] = 0.;
00657 ionbal.PhotoRate_Shell[nelem][ion][ns][2] = 0.;
00658 }
00659 }
00660
00661 for( ion=0; ion<nelem+2; ++ion )
00662 {
00663 long int ion2;
00664
00665 mole.source[nelem][ion] = 0.;
00666 mole.sink[nelem][ion] = 0.;
00667
00668
00669
00670 for( ion2=0; ion2<nelem+2; ++ion2 )
00671 {
00672 mole.xMoleChTrRate[nelem][ion][ion2] = 0.;
00673 }
00674 }
00675 }
00676
00677
00678
00679
00680 mole.lgGrain_mole_deplete = true;
00681
00682 ionbal.lgPhotoIoniz_On = true;
00683 ionbal.lgCompRecoil = true;
00684
00685
00686 ionbal.lgInnerShellLine_on = true;
00687
00688
00689 ionbal.lgInnerShell_Kisielius = false;
00690 ionbal.lgInnerShell_Gu06 = true;
00691
00692 for( i=0; i<4; ++i )
00693 {
00694 ionbal.GuessDiel[i] = 1.;
00695 }
00696
00697
00698 ionbal.lgSupDie[0] = true;
00699 ionbal.lgSupDie[1] = false;
00700
00701 ionbal.lgNoCota = false;
00702 for( i=0; i < LIMELM; i++ )
00703 {
00704 ionbal.CotaRate[i] = 0.;
00705 }
00706 ionbal.ilt = 0;
00707 ionbal.iltln = 0;
00708 ionbal.ilthn = 0;
00709 ionbal.ihthn = 0;
00710 ionbal.ifail = 0;
00711 ionbal.lgGrainIonRecom = true;
00712
00713
00714
00715 ionbal.lgDR_recom_Badnell_use = false;
00716
00717 ionbal.lgDR_recom_Badnell_use = true;
00718
00719
00720
00721 ionbal.lgRR_recom_Badnell_use = false;
00722
00723 ionbal.lgRR_recom_Badnell_use = true;
00724
00725
00726 ionbal.lgRecom_Badnell_print = false;
00727
00728
00729
00730 ionbal.nDR_S_guess = 0;
00731
00732
00733 ionbal.lg_use_DR_Badnell_rate_coef_mean_ion = false;
00734 ionbal.lg_use_DR_Badnell_rate_coef_mean_ion = true;
00735
00736
00737
00738
00739 ionbal.lg_guess_coef = true;
00740 ionbal.guess_noise = 0.;
00741
00742
00743
00744 ionbal.lgHO_ct_chem = true;
00745
00746
00747
00748
00749
00750
00751
00752 lgPrnErr = false;
00753 ioPrnErr = stderr;
00754 lgAssertFPE = false;
00755
00756
00757 broke.lgBroke = false;
00758 broke.lgFixit = false;
00759 broke.lgCheckit = false;
00760
00761
00762
00763
00764 abund.npSolar = LIMELM - 1;
00765 for( i=0; i < abund.npSolar; i++ )
00766 {
00767 abund.ipSolar[i] = i + 2;
00768 }
00769
00770
00771
00772 {
00773 static int nCalled = 0;
00774 if( nCalled == 0 )
00775 {
00776 for( nelem=0; nelem < LIMELM; nelem++ )
00777 {
00778
00779 dense.lgElmtOn[nelem] = true;
00780
00781
00782
00783 dense.lgSetIoniz[nelem] = false;
00784 }
00785 }
00786 ++nCalled;
00787 }
00788
00789
00790 for( nelem=ipHYDROGEN; nelem < LIMELM; nelem++ )
00791 {
00792 dense.gas_phase[nelem] = 0.;
00793 dense.xMolecules[nelem] = 0.;
00794 for( ion=0; ion < LIMELM+1; ion++ )
00795 {
00796 dense.xIonDense[nelem][ion] = 0.;
00797 }
00798 }
00799 dense.xMassTotal = 0.;
00800
00801
00802
00803
00804 for(i=0;i<N_H_MOLEC;++i)
00805 {
00806 co.hmole_mass[i] = 0;
00807 }
00808
00809
00810
00811
00812 co.hmole_mass[0] = 1.0*ATOMIC_MASS_UNIT;
00813 co.hmole_mass[1] = 1.0*ATOMIC_MASS_UNIT;
00814 co.hmole_mass[2] = 1.0*ATOMIC_MASS_UNIT;
00815 co.hmole_mass[3] = 2.0*ATOMIC_MASS_UNIT;
00816 co.hmole_mass[4] = 2.0*ATOMIC_MASS_UNIT;
00817 co.hmole_mass[5] = 3.0*ATOMIC_MASS_UNIT;
00818 co.hmole_mass[6] = 2.0*ATOMIC_MASS_UNIT;
00819 co.hmole_mass[7] = 5.0*ATOMIC_MASS_UNIT;
00820 co.hmole_mass[8] = 4.0*ATOMIC_MASS_UNIT;
00821
00822
00823 for( i=0; i < NFEII; i++ )
00824 {
00825 fe2ovr_la.Fe2PopLte[i] = 0.;
00826 fe2ovr_la.feopc[i] = 0.;
00827 fe2ovr_la.Fe2TauLte[i] = opac.taumin;
00828 }
00829
00830
00831 MeanZero();
00832
00833
00834 wind.lgWindOK = true;
00835 wind.windv0 = 0.;
00836 wind.comass = 0.;
00837 wind.windv = 0.;
00838 wind.emdot = 0.;
00839 wind.AccelAver = 0.;
00840 wind.acldr = 0.;
00841 wind.agrav = 0.;
00842 wind.AccelTot = 0.;
00843 wind.AccelCont = 0.;
00844 wind.AccelLine = 0.;
00845 wind.AccelPres = 0.;
00846 wind.AccelMax = 0.;
00847 wind.fmul = 0.;
00848 wind.lgVelPos = true;
00849
00850
00851 HeatZero();
00852
00853
00854 ca.Ca2RmLya = 0.;
00855 ca.popca2ex = 0.;
00856 ca.oldcla = 0.;
00857 ca.Ca3d = 0.;
00858 ca.Ca4p = 0.;
00859 ca.dstCala = 0.;
00860
00861
00862 co.RatioC12O16_2_C13O16 = 30.;
00863
00864
00865 co.lgH2Ozer = false;
00866
00867
00868 dense.EdenExtra = 0.;
00869
00870
00871 dense.EdenSet = 0.;
00872
00873
00874 conv.PressureErrorAllowed = 0.01f;
00875
00876
00877 conv.limPres2Ioniz = 100000000;
00878
00879
00880 for( i=0; i<74; ++i)
00881 {
00882 input.chTitle[i] = ' ';
00883 }
00884 input.chTitle[75] = '\0';
00885
00886
00887
00888
00889 DoppVel.TurbVel = 0.;
00890
00891
00892 DoppVel.Heiles_Troland_F = 0.;
00893
00894
00895
00896 DoppVel.lgTurb_pressure = true;
00897
00898
00899 DoppVel.DispScale = 0.;
00900
00901 DoppVel.lgTurbEquiMag = false;
00902
00903
00904 pressure.lgContRadPresOn = true;
00905
00906 pressure.PresInteg = 0.;
00907 pressure.pinzon = 0.;
00908
00909
00910
00911
00912
00913
00914
00915
00916 pressure.lgPres_radiation_ON = true;
00917 pressure.lgPres_magnetic_ON = true;
00918 pressure.lgPres_ram_ON = true;
00919
00920 pressure.PresRamCurr = 0.;
00921 pressure.pres_radiation_lines_curr = 0.;
00922 pressure.lgPradCap = false;
00923 pressure.lgPradDen = false;
00924 pressure.lgLineRadPresOn = true;
00925
00926
00927 pressure.lgRadPresAbortOK = true;
00928
00929
00930 pressure.lgSonicPointAbortOK = true;
00931
00932 strcpy( dense.chDenseLaw, "CDEN" );
00933
00934 pressure.lgSonicPoint = false;
00935
00936 pressure.lgStrongDLimbo = false;
00937
00938
00939 pressure.RadBetaMax = 0.;
00940 pressure.ipPradMax_nzone = -1;
00941 pressure.PresMax = 0.;
00942
00943
00944 set_nan( pressure.PresTotlInit );
00945 set_nan( pressure.PresRamInit );
00946
00947
00948 DynaZero();
00949
00950
00951 phycon.te = 1e4;
00952 phycon.sqrte = 100.;
00953 phycon.lgPhysOK = true;
00954
00955
00956
00957 phycon.BigJumpTe = 0.;
00958 phycon.BigJumpne = 0.;
00959 phycon.BigJumpH2 = 0.;
00960 phycon.BigJumpCO = 0.;
00961
00962 dense.xNucleiTotal = 1.;
00963
00964 dense.xMassDensity0 = -1.0f;
00965
00966 dense.eden = 1.;
00967
00968
00969 dense.gas_phase[ipHYDROGEN] = -99.;
00970
00971
00972
00973 dense.lgDenFlucOn = true;
00974 dense.lgDenFlucRadius = true;
00975 dense.flong = 0.;
00976 dense.flcPhase = 0.;
00977 dense.HCorrFac = 1.f;
00978 dense.H_sum_in_CO = 0.;
00979
00980
00981 dense.density_low_limit = SMALLFLOAT * 1e3;
00982
00983
00984
00985 dense.lgAsChoose[ipOXYGEN][1] = false;
00986
00987
00988
00989 dense.lgDenseInitConstant = true;
00990
00991
00992 tfidle(true);
00993
00994 atoms.nNegOI = 0;
00995 for( i=0; i< N_OI_LEVELS; ++i )
00996 {
00997 atoms.popoi[i] = 0.;
00998 }
00999
01000
01001 opac.lgNegOpacIO = false;
01002
01003
01004 opac.lgCaseB = false;
01005
01006
01007 opac.lgCaseB_HummerStorey = false;
01008
01009
01010 opac.lgCaseB_no_photo = false;
01011
01012 opac.lgCaseB_no_pdest = false;
01013
01014
01015
01016 opac.taumin = 1e-20f;
01017 opac.tlamin = 1e-20f;
01018
01019 opac.otsmin = 0.;
01020
01021
01022
01023
01024
01025
01026 opac.lgOpacStatic = true;
01027
01028
01029 opac.lgOpacNeg = false;
01030
01031
01032 opac.lgScatON = true;
01033
01034
01035
01036 opac.lgCompileOpac = false;
01037
01039 opac.lgUseFileOpac = false;
01040
01041 opac.telec = opac.taumin;
01042 opac.thmin = opac.taumin;
01043
01044 opac.tpcah[0] = opac.taumin;
01045 opac.tpcah[1] = 1e20f;
01046
01047 opac.lgTauOutOn = false;
01048
01049 dynamics.dDensityDT = 0.;
01050
01051
01052
01053
01054 StopCalc.tauend = 1e30f;
01055
01056
01057
01058
01059
01060
01061
01062
01063
01064 StopCalc.StopDepleteFrac = 1.02f;
01065
01066 StopCalc.xMass = 0.;
01067 StopCalc.taunu = 0.;
01068 StopCalc.iptnu = -1;
01069
01070 StopCalc.AV_extended = 1e30f;
01071 StopCalc.AV_point = 1e30f;
01072
01073 StopCalc.T2High = 1e12f;
01074
01075
01076 StopCalc.TeHighest = 1e10f;
01077 StopCalc.TeLowest = 2.8f;
01078
01079
01080
01081
01082 StopCalc.TeFloor = 0.;
01083
01084
01085 StopCalc.tend = (float)TEND;
01086
01087 StopCalc.HColStop = COLUMN_INIT;
01088 StopCalc.colpls = COLUMN_INIT;
01089 StopCalc.colnut = COLUMN_INIT;
01090 StopCalc.col_h2 = COLUMN_INIT;
01091 StopCalc.col_h2_nut = COLUMN_INIT;
01092 StopCalc.col_H0_ov_Tspin = COLUMN_INIT;
01093 StopCalc.col_monoxco = COLUMN_INIT;
01094
01095
01096 StopCalc.StopElecDensity = -COLUMN_INIT;
01097
01098
01099 StopCalc.StopElecFrac = -FLT_MAX;
01100 StopCalc.StopHPlusFrac = -FLT_MAX;
01101
01102 StopCalc.StopH2MoleFrac = FLT_MAX;
01103
01104 StopCalc.lgStop21cm = false;
01105
01106 StopCalc.nTotalIonizStop = 0;
01107
01108
01109 StopCalc.nstpl = 0;
01110 for( i=0; i < MXSTPL; i++ )
01111 {
01112 StopCalc.stpint[i] = FLT_MAX;
01113 StopCalc.ipStopLin1[i] = 0;
01114 StopCalc.ipStopLin2[i] = 0;
01115 StopCalc.StopLineWl[i] = 0;
01116 StopCalc.StopLineWl2[i] = 0;
01117 strcpy(StopCalc.chStopLabel[i] , "none" );
01118 strcpy(StopCalc.chStopLabel2[i] , "none" );
01119 }
01120
01121
01122 neutrn.frcneu = 0.;
01123 neutrn.effneu = 1.;
01124 neutrn.totneu = 0.;
01125 neutrn.lgNeutrnHeatOn = false;
01126 neutrn.CrsSecNeutron = 4e-26;
01127
01128 opac.stimax[0] = 0.;
01129 opac.stimax[1] = 0.;
01130
01131
01132
01133 struc.dr_ionfrac_limit = 1e-3f;
01134 struc.nzone = -1;
01135 for(i=0;i<N_H_MOLEC;i++)
01136 {
01137
01138 int hmi_protons[N_H_MOLEC] = {1,1,1,2,2,3,2,1};
01139
01140
01141
01142 int hmi_electrons[N_H_MOLEC] = {0,0,-1,0,1,1,0,1};
01143
01144 hmi.Hmolec[i] = 0.;
01145 hmi.nProton[i] = hmi_protons[i];
01146
01147 hmi.nElectron[i] = hmi_electrons[i];
01148 }
01149
01150 hmi.H2_frac_abund_set = 0.;
01151 hmi.hmihet = 0.;
01152 hmi.h2plus_heat = 0.;
01153 hmi.HeatH2Dish_used = 0.;
01154 hmi.HeatH2Dexc_used = 0.;
01155 hmi.HeatH2Dish_TH85 = 0.;
01156 hmi.HeatH2Dexc_TH85 = 0.;
01157 hmi.HeatH2Dish_BigH2 = 0.;
01158 hmi.HeatH2Dexc_BigH2 = 0.;
01159 hmi.UV_Cont_rel2_Draine_DB96_face = 0.;
01160 hmi.UV_Cont_rel2_Draine_DB96_depth = 0.;
01161 hmi.UV_Cont_rel2_Habing_TH85_face = 0.;
01162 hmi.UV_Cont_rel2_Habing_TH85_depth = 0.;
01163 hmi.HeatH2DexcMax = 0.;
01164 hmi.CoolH2DexcMax = 0.;
01165 hmi.hmitot = 0.;
01166 hmi.H2Opacity = 0.;
01167 hmi.hmidep = 1.;
01168 hmi.h2dep = 1.;
01169 hmi.h2pdep = 1.;
01170 hmi.h3pdep = 1.;
01171 hmi.BiggestH2 = -1.f;
01172
01173 hmi.lgNoH2Mole = false;
01174
01175
01176
01177 hmi.lgLeiden_Keep_ipMH2s = true;
01178 hmi.lgLeidenCRHack = true;
01179
01180
01181
01182 co.lgUMISTrates = true;
01183
01184
01185
01186
01187 co.lgFederman = true;
01188
01189
01190
01191 co.lgNonEquilChem = false;
01195 co.lgProtElim = true;
01199 co.lgNeutrals = true;
01200
01201
01202
01203
01204
01205
01206
01207 hmi.chH2_small_model_type = 'T';
01208
01209
01210
01211 hmi.chH2_small_model_type = 'H';
01212
01213
01214 hmi.chH2_small_model_type = 'B';
01215
01216 hmi.chH2_small_model_type = 'E';
01217
01218
01219 set_nan( hmi.HeatH2Dish_used );
01220 set_nan( hmi.HeatH2Dish_BigH2 );
01221 set_nan( hmi.HeatH2Dish_TH85 );
01222 set_nan( hmi.HeatH2Dish_BD96 );
01223 set_nan( hmi.HeatH2Dish_BHT90 );
01224 set_nan( hmi.HeatH2Dish_ELWERT );
01225
01228 set_nan( hmi.HeatH2Dexc_used );
01229 set_nan( hmi.HeatH2Dexc_BigH2 );
01230 set_nan( hmi.HeatH2Dexc_TH85 );
01231 set_nan( hmi.HeatH2Dexc_BD96 );
01232 set_nan( hmi.HeatH2Dexc_BHT90 );
01233 set_nan( hmi.HeatH2Dexc_ELWERT );
01234
01236 set_nanf( hmi.deriv_HeatH2Dexc_used );
01237 set_nanf( hmi.deriv_HeatH2Dexc_BigH2 );
01238 set_nanf( hmi.deriv_HeatH2Dexc_TH85 );
01239 set_nanf( hmi.deriv_HeatH2Dexc_BD96 );
01240 set_nanf( hmi.deriv_HeatH2Dexc_BHT90 );
01241 set_nanf( hmi.deriv_HeatH2Dexc_ELWERT );
01242
01243 set_nan( hmi.H2_Solomon_dissoc_rate_used_H2g );
01244 set_nan( hmi.H2_Solomon_dissoc_rate_BigH2_H2g );
01245 set_nan( hmi.H2_Solomon_dissoc_rate_TH85_H2g );
01246 set_nan( hmi.H2_Solomon_dissoc_rate_BHT90_H2g );
01247 set_nan( hmi.H2_Solomon_dissoc_rate_BD96_H2g );
01248 set_nan( hmi.H2_Solomon_dissoc_rate_ELWERT_H2g );
01249
01250 set_nan( hmi.H2_Solomon_dissoc_rate_used_H2s );
01251 set_nan( hmi.H2_Solomon_dissoc_rate_BigH2_H2s );
01252 set_nan( hmi.H2_Solomon_dissoc_rate_TH85_H2s );
01253 set_nan( hmi.H2_Solomon_dissoc_rate_BHT90_H2s );
01254 set_nan( hmi.H2_Solomon_dissoc_rate_BD96_H2s );
01255 set_nan( hmi.H2_Solomon_dissoc_rate_ELWERT_H2s );
01256
01261 set_nan( hmi.H2_photodissoc_used_H2g );
01262 set_nan( hmi.H2_photodissoc_used_H2s );
01263 set_nan( hmi.H2_photodissoc_BigH2_H2s );
01264 set_nan( hmi.H2_photodissoc_BigH2_H2g );
01265 set_nan( hmi.H2_photodissoc_ELWERT_H2g );
01266 set_nan( hmi.H2_photodissoc_ELWERT_H2s );
01267 set_nan( hmi.H2_photodissoc_TH85 );
01268 set_nan( hmi.H2_photodissoc_BHT90 );
01269
01270
01271 hmi.chGrainFormPump = 'T';
01272
01273
01274
01275 hmi.chJura = 'C';
01276
01277
01278 hmi.ScaleJura = 1.f;
01279
01280
01281
01282 hmi.Tad = 800.;
01283
01284
01285 H2_Zero();
01286
01287
01288 for( i=0; i < NCOLD; i++ )
01289 {
01290 colden.colden[i] = 0.;
01291 }
01292 colden.He123S = 0.;
01293 colden.coldenH2_ov_vel = 0.;
01294
01295 h2.ortho_colden = 0.;
01296 h2.para_colden = 0.;
01297
01298
01299 colden.H0_21cm_upper =0;
01300 colden.H0_21cm_lower =0;
01301
01302 for( i=0; i < 5; i++ )
01303 {
01304 colden.C2Pops[i] = 0.;
01305 colden.C2Colden[i] = 0.;
01306
01307 colden.Si2Pops[i] = 0.;
01308 colden.Si2Colden[i] = 0.;
01309 }
01310 for( i=0; i < 3; i++ )
01311 {
01312
01313 colden.C1Pops[i] = 0.;
01314 colden.C1Colden[i] = 0.;
01315
01316 colden.O1Pops[i] = 0.;
01317 colden.O1Colden[i] = 0.;
01318
01319 colden.C3Pops[i] = 0.;
01320 }
01321 for( i=0; i < 4; i++ )
01322 {
01323
01324 colden.C3Colden[i] = 0.;
01325 }
01326
01327
01328 colden.TotMassColl = 0.;
01329 colden.tmas = 0.;
01330 colden.wmas = 0.;
01331 colden.rjnmin = FLT_MAX;
01332 colden.ajmmin = FLT_MAX;
01333
01334
01335
01336 strcpy( rfield.chDffTrns, "OU2" );
01337
01338
01339
01340
01341 if( lgFirstCall )
01342 {
01343 rfield.tNuRyd = (float**)MALLOC((size_t)(LIMSPC*sizeof(float*)) );
01344 rfield.tslop = (float**)MALLOC((size_t)(LIMSPC*sizeof(float*)) );
01345 rfield.tFluxLog = (float**)MALLOC((size_t)(LIMSPC*sizeof(float*)) );
01346 rfield.lgContMalloc = (int*)MALLOC((size_t)(LIMSPC*sizeof(int)) );
01347
01348
01349
01350 for( i=0; i < LIMSPC; ++i )
01351 {
01352 rfield.lgContMalloc[i] = false;
01353 }
01354 }
01355
01356 rfield_opac_zero( 0 , rfield.nupper );
01357
01358
01359 rfield.lgOutOnly = true;
01360 rfield.lgUSphON = false;
01361
01362
01363 rfield.lgMMok = true;
01364 rfield.lgHPhtOK = true;
01365 rfield.lgXRayOK = true;
01366 rfield.lgGamrOK = true;
01367
01368
01369 rfield.emm = 1.001e-8f;
01370 rfield.egamry = 7.354e6f;
01371
01372 rfield.nflux = rfield.nupper;
01373
01374
01375 rfield.ipEnergyBremsThin = 0;
01376 rfield.EnergyBremsThin = 0.;
01377
01378
01379 rfield.FluxFaint = 1e-10f;
01380
01381 for( i=0; i < LIMSPC; i++ )
01382 {
01383
01384
01385 rfield.lgTimeVary[i] = false;
01386
01387
01388 rfield.range[i][0] = HIONPOT;
01389 rfield.range[i][1] = rfield.egamry;
01390 rfield.ioTableRead[i] = NULL;
01391 }
01392 rfield.comtot = 0.;
01393 rfield.comoff = 1.;
01394 rfield.cmcool = 0.;
01395 rfield.cinrat = 0.;
01396 rfield.extin_mag_B_point = 0.;
01397 rfield.extin_mag_V_point = 0.;
01398 rfield.extin_mag_B_extended = 0.;
01399 rfield.extin_mag_V_extended = 0.;
01400 rfield.EnerGammaRay = 7676.;
01401
01402
01403 radius.rinner = 0.;
01404 radius.distance = 0.;
01405 radius.Radius = 0.;
01406 radius.Radius_mid_zone = 0.;
01407 radius.depth = DEPTH_OFFSET;
01408 radius.depth_mid_zone = DEPTH_OFFSET/2.;
01409 radius.depth_x_fillfac = 0.;
01410 radius.lgRadiusKnown = false;
01411 radius.drad = 0.;
01412 radius.r1r0sq = 1.;
01413
01414 radius.dRadSign = 1.;
01415 radius.lgDrNeg = false;
01416
01417
01418
01419
01420 radius.rdfalt = 30.;
01421
01422
01423 radius.CylindHigh = 1e35f;
01424 radius.lgCylnOn = false;
01425
01426 radius.drad_x_fillfac = 1.;
01427 radius.drad_x_fillfac_mean = 1.;
01428 radius.dVeff = 1.;
01429 radius.drNext = 1.;
01430 radius.dRNeff = 1.;
01431 radius.lgdR2Small = false;
01432
01433 radius.glbdst = 0.;
01434 radius.glbrad = 0.;
01435
01436 radius.sdrmin = SMALLFLOAT;
01437 radius.sdrmax = 1e30;
01438 radius.lgSMinON = false;
01439 radius.lgDrMnOn = true;
01440
01441 radius.lgDrMinUsed = false;
01442
01443
01444
01445 radius.drChange = 0.15f;
01446
01447 rfield.lgHabing = false;
01448
01449 rfield.lgTableRead = false;
01450
01451
01452 rfield.lgLyaOTS = true;
01453
01454 rfield.lgHeIIOTS = true;
01455 rfield.lgKillOTSLine = false;
01456 rfield.lgKillOutLine = false;
01457 rfield.lgKillOutCont = false;
01458
01459
01460
01461 rfield.DiffPumpOn = 1.;
01462
01463 rfield.lgInducProcess = true;
01464
01465 rfield.lgCompileGauntFF = false;
01466
01467
01468 rfield.lgDoLineTrans = true;
01469
01470
01471
01472 rfield.lgOpacityReevaluate = true;
01473
01474
01475
01476 rfield.lgIonizReevaluate = true;
01477
01478
01479 rfield.lgCMB_set = false;
01480
01481
01482 rfield.lgOpacityFine = true;
01483
01484 rfield.fine_opac_nelem = ipIRON;
01485
01486
01487 rfield.fine_opac_nresolv = 1;
01488
01489
01490 rfield.lgPunchOpacityFine = false;
01491
01492
01493 CoolZero();
01494
01495 thermal.lgColNeg = true;
01496 thermal.lgCNegChk = true;
01497 thermal.CoolHeatMax = 0.;
01498 thermal.wlCoolHeatMax = 0;
01499 thermal.totcol = 0.;
01500 thermal.heatl = 0.;
01501 thermal.coolheat = 0.;
01502 thermal.lgCExtraOn = false;
01503 thermal.CoolExtra = 0.;
01504 thermal.ctot = 1.;
01505
01506 thermal.HeatNet = 0.;
01507 thermal.htot = 1.;
01508 thermal.power = 0.;
01509 thermal.FreeFreeTotHeat = 0.;
01510 thermal.char_tran_cool = 0.;
01511 thermal.char_tran_heat = 0.;
01512
01513 fnzone = 0.;
01514 nzone = 0;
01515
01516 called.lgTalkSave = called.lgTalk;
01517
01518 thermal.thist = 0.;
01519 thermal.tlowst = 1e20f;
01520 thermal.lgTSetOn = false;
01521 thermal.ConstTemp = 0.;
01522 thermal.ConstGrainTemp = 0.;
01523 thermal.lgTeHigh = false;
01524 thermal.nUnstable = 0;
01525 thermal.lgUnstable = false;
01526 thermal.lgTeBD96 = false;
01527 thermal.lgTLaw = false;
01528 thermal.lgTeSN99 = false;
01529
01530
01531
01532 thermal.lgPredNextTe = true;
01533
01534 oxy.poiii2 = 0.;
01535 oxy.poiii3 = 0.;
01536 oxy.poiexc = 0.;
01537
01538 oxy.d5007r = 0.;
01539 oxy.d5007t = 0.;
01540 oxy.d4363 = 0.;
01541 oxy.d6300 = 0.;
01542
01543 atmdat.nsbig = 0;
01544
01545
01546 atmdat.lgCollIonOn = true;
01547
01548
01549
01550
01551
01552
01553 atmdat.HCharHeatMax = 0.;
01554 atmdat.HCharCoolMax = 0.;
01555
01556 atmdat.HIonFrac = 0.;
01557 atmdat.HCharExcIonTotal = 0.;
01558 atmdat.HIonFracMax = 0.;
01559 atmdat.HCharExcRecTotal = 0.;
01560
01561 atmdat.lgCTOn = true;
01562
01563
01564
01565 atmdat.HCharHeatOn = 1.;
01566 for( nelem=0; nelem< LIMELM; ++nelem )
01567 {
01568 for( ion=0; ion<LIMELM; ++ion )
01569 {
01570 atmdat.HCharExcIonOf[nelem][ion] = 0.;
01571 atmdat.HCharExcRecTo[nelem][ion] = 0.;
01572 }
01573 }
01574
01575
01576
01577 atmdat.HCTAlex = 1.92e-9;
01578
01579 for( nelem=0; nelem < LIMELM; nelem++ )
01580 {
01581 abund.solar[nelem] = abund.SolarSave[nelem];
01582
01583 abund.depset[nelem] = 1.;
01584
01585 if( abund.solar[nelem] == 0. || abund.depset[nelem] == 0. )
01586 {
01587 fprintf( ioQQQ, " ZERO finds insane abundance or depletion.\n" );
01588 fprintf( ioQQQ, " atomic number=%6ld abundance=%10.2e depletion=%10.2e\n",
01589 nelem, abund.solar[nelem], abund.depset[nelem] );
01590 ShowMe();
01591 puts( "[Stop in zero]" );
01592 cdEXIT(EXIT_FAILURE);
01593 }
01594
01595 }
01596
01597 abund.lgAbTaON = false;
01598 abund.lgAbnSolar = false;
01599
01600
01601
01602
01603 abund.Depletion[0] = 1.;
01604 abund.Depletion[1] = 1.;
01605 abund.Depletion[2] = .16f;
01606 abund.Depletion[3] = .6f;
01607 abund.Depletion[4] = .13f;
01608 abund.Depletion[5] = 0.4f;
01609 abund.Depletion[6] = 1.0f;
01610 abund.Depletion[7] = 0.6f;
01611 abund.Depletion[8] = .3f;
01612 abund.Depletion[9] = 1.f;
01613 abund.Depletion[10] = 0.2f;
01614 abund.Depletion[11] = 0.2f;
01615 abund.Depletion[12] = 0.01f;
01616 abund.Depletion[13] = 0.03f;
01617 abund.Depletion[14] = .25f;
01618 abund.Depletion[15] = 1.0f;
01619 abund.Depletion[16] = 0.4f;
01620 abund.Depletion[17] = 1.0f;
01621 abund.Depletion[18] = .3f;
01622 abund.Depletion[19] = 1e-4f;
01623 abund.Depletion[20] = 5e-3f;
01624 abund.Depletion[21] = 8e-3f;
01625 abund.Depletion[22] = 6e-3f;
01626 abund.Depletion[23] = 6e-3f;
01627 abund.Depletion[24] = 5e-2f;
01628 abund.Depletion[25] = 0.01f;
01629 abund.Depletion[26] = 0.01f;
01630 abund.Depletion[27] = 0.01f;
01631 abund.Depletion[28] = .1f;
01632 abund.Depletion[29] = .25f;
01633
01634 abund.lgDepln = false;
01635 abund.ScaleMetals = 1.;
01636
01637
01638 t_yield::Inst().reset_yield();
01639
01640
01641
01642 iso.SmallA = 1e-30f;
01643
01644
01645 for( ipISO=ipH_LIKE; ipISO<NISO; ++ipISO )
01646 {
01647
01648
01649 iso.nLyman[ipISO] = 100;
01650 iso.nLyman_malloc[ipISO] = 100;
01651
01652
01653 iso.lgColl_l_mixing[ipISO] = true;
01654 iso.lgColl_excite[ipISO] = true;
01655 iso.lgColl_ionize[ipISO] = true;
01656
01657
01658 for( nelem=ipHYDROGEN; nelem < LIMELM; nelem++ )
01659 {
01660
01661 iso.lgPrtDepartCoef[ipISO][nelem] = false;
01662
01663 iso.lgPrtLevelPops[ipISO][nelem] = false;
01664 iso.CaseBCheck[ipISO][nelem] = -FLT_MAX;
01665 iso.TwoNu_induc_dn_max[ipISO][nelem] = 0.;
01666
01667 iso.RadRec_caseB[ipISO][nelem] = 1e-13;
01668 iso.lgLevelsLowered[ipISO][nelem] = false;
01669 iso.lgLevelsEverLowered[ipISO][nelem] = false;
01670 }
01671 }
01672
01673 iso.lgInd2nu_On = false;
01674
01675
01676 iso.ipLyaRedist[ipH_LIKE] = ipLY_A;
01677 iso.ipResoRedist[ipH_LIKE] = ipCRD;
01678 iso.ipSubRedist[ipH_LIKE] = ipCRDW;
01679
01680
01681 iso.nLyaLevel[ipH_LIKE] = ipH2p;
01682 iso.nLyaLevel[ipHE_LIKE] = ipHe2p1P;
01683
01684
01687 iso.ipLyaRedist[ipHE_LIKE] = ipPRD;
01688 iso.ipResoRedist[ipHE_LIKE] = ipPRD;
01689 iso.ipSubRedist[ipHE_LIKE] = ipCRDW;
01690
01691
01692
01693 iso.lgCollStrenThermAver = false;
01694
01695
01696 for( nelem=0; nelem < LIMELM; nelem++ )
01697 {
01698
01699 abund.ScaleElement[nelem] = 1.;
01700
01701 abund.lgAbunTabl[nelem] = false;
01702 }
01703
01704 rt.dTauMase = 0.;
01705 rt.lgMaserCapHit = false;
01706 rt.lgMaserSetDR = false;
01707
01708 rt.DoubleTau = 1.;
01709 rt.lgFstOn = true;
01710 rt.lgElecScatEscape = true;
01711
01712
01713 lgTestCodeCalled = false;
01714
01715 lgTestCodeEnabled = false;
01716
01717
01718 GrainZero();
01719
01720
01721 FeII.fe21406 = 0.;
01722 FeII.fe21507 = 0.;
01723 FeII.fe21508 = 0.;
01724 FeII.fe21609 = 0.;
01725 FeII.fe21308 = 0.;
01726 FeII.fe21207 = 0.;
01727 FeII.fe21106 = 0.;
01728 FeII.fe21006 = 0.;
01729 FeII.fe21204 = 0.;
01730 FeII.fe21103 = 0.;
01731 FeII.fe21104 = 0.;
01732 FeII.fe21001 = 0.;
01733 FeII.fe21002 = 0.;
01734 FeII.fe20201 = 0.;
01735 FeII.fe20302 = 0.;
01736 FeII.fe20706 = 0.;
01737 FeII.fe20807 = 0.;
01738 FeII.fe20908 = 0.;
01739 FeII.fe21007 = 0.;
01740 FeII.fe21107 = 0.;
01741 FeII.fe21108 = 0.;
01742 FeII.fe21110 = 0.;
01743 FeII.fe21208 = 0.;
01744 FeII.fe21209 = 0.;
01745 FeII.fe21211 = 0.;
01746
01747 fe.Fe4CoolTot = 0.;
01748 fe.fe40401 = 0.;
01749 fe.fe42836 = 0.;
01750 fe.fe42829 = 0.;
01751 fe.fe42567 = 0.;
01752 fe.fe41207 = 0.;
01753 fe.fe41206 = 0.;
01754 fe.fe41106 = 0.;
01755 fe.fe41007 = 0.;
01756 fe.fe41008 = 0.;
01757 fe.fe40906 = 0.;
01758
01759 fe.Fe7CoolTot = 0.;
01760 # if 0
01761 fe.Fe7_6087 = 0.;
01762 fe.Fe7_5721 = 0.;
01763 fe.Fe7_6601 = 0.;
01764 fe.Fe7_3760 = 0.;
01765 fe.Fe7_3588 = 0.;
01766 # endif
01767
01768
01769
01770 lgFirstCall = false;
01771
01772 DEBUG_EXIT( "zero()" );
01773 return;
01774 }
01775
01776
01777 void rfield_opac_zero( long lo , long ihi )
01778 {
01779 long int i;
01780
01781
01782
01783
01784 if( lgRfieldMalloced )
01785 {
01786 unsigned long n=(unsigned long)(ihi-lo+1);
01787 memset(&rfield.OccNumbDiffCont[lo] , 0 , n*sizeof(float) );
01788 memset(&rfield.OccNumbContEmitOut[lo] , 0 , n*sizeof(float) );
01789 memset(&rfield.ContBoltz[lo] , 0 , n*sizeof(double) );
01790
01791
01792
01793 memset(&rfield.ConEmitReflec[lo] , 0 , n*sizeof(float) );
01794 memset(&rfield.ConEmitOut[lo] , 0 , n*sizeof(float) );
01795 memset(&rfield.reflin[lo] , 0 , n*sizeof(float) );
01796 memset(&rfield.ConRefIncid[lo] , 0 , n*sizeof(float) );
01797 memset(&rfield.SummedCon[lo] , 0 , n*sizeof(float) );
01798 memset(&rfield.OccNumbBremsCont[lo] , 0 , n*sizeof(float) );
01799 memset(&rfield.convoc[lo] , 0 , n*sizeof(float) );
01800 memset(&rfield.flux[lo] , 0 , n*sizeof(float) );
01801 memset(&rfield.SummedOcc[lo] , 0 , n*sizeof(float) );
01802 memset(&rfield.SummedDif[lo] , 0 , n*sizeof(float) );
01803 memset(&rfield.flux_accum[lo] , 0 , n*sizeof(float) );
01804 memset(&rfield.otslin[lo] , 0 , n*sizeof(float) );
01805 memset(&rfield.otscon[lo] , 0 , n*sizeof(float) );
01806 memset(&rfield.ConInterOut[lo] , 0 , n*sizeof(float) );
01807 memset(&rfield.outlin[lo] , 0 , n*sizeof(float) );
01808 memset(&rfield.outlin_noplot[lo] , 0 , n*sizeof(float) );
01809 memset(&rfield.ConOTS_local_OTS_rate[lo], 0 , n*sizeof(float) );
01810 memset(&rfield.ConOTS_local_photons[lo] , 0 , n*sizeof(float) );
01811 memset(&rfield.otsconNew[lo] , 0 , n*sizeof(float) );
01812 memset(&rfield.otslinNew[lo] , 0 , n*sizeof(float) );
01813 memset(&opac.OldOpacSave[lo] , 0 , n*sizeof(double) );
01814 memset(&opac.opacity_abs[lo] , 0 , n*sizeof(double) );
01815 memset(&opac.opacity_sct[lo] , 0 , n*sizeof(double) );
01816 memset(&opac.albedo[lo] , 0 , n*sizeof(double) );
01817 memset(&opac.FreeFreeOpacity[lo] , 0 , n*sizeof(double) );
01818
01819
01820 set_nanf( &opac.E2TauAbsTotal[lo], n );
01821 set_nanf( &opac.E2TauAbsOut[lo], n );
01822 set_nanf( &opac.TauAbsTotal[lo], n );
01823
01824 for( i=lo; i <= ihi; i++ )
01825 {
01826 opac.TauTotalGeo[0][i] = opac.taumin;
01827 opac.TauAbsGeo[0][i] = opac.taumin;
01828 opac.TauScatGeo[0][i] = opac.taumin;
01829 opac.tmn[i] = 1.;
01830 opac.ExpZone[i] = 1.;
01831 opac.E2TauAbsFace[i] = 1.;
01832 opac.ExpmTau[i] = 1.;
01833 opac.OpacStatic[i] = 1.;
01834 }
01835
01836 memset(rfield.fine_opac_zone , 0 , (unsigned long)rfield.nfine_malloc*sizeof(float) );
01837
01838 memset(rfield.fine_opt_depth , 0 , (unsigned long)rfield.nfine_malloc*sizeof(float) );
01839 }
01840 return;
01841 }
01842
01843