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