00001
00002
00003
00004 #ifndef ISO_H_
00005 #define ISO_H_
00006
00009 EXTERN long int max_num_levels;
00010
00012 #define HE1CSARRAY 10
00013
00016 #define KILL_BELOW_PLASMA(E_) ( (rfield.lgPlasNu && ((E_)<rfield.plsfrq) ) ? 0.:1. )
00017
00018 #define NUM_DR_TEMPS 19
00019
00021 #define N_(A_) (StatesElemNEW[nelem][nelem-ipISO][A_].n)
00022 #define L_(A_) (StatesElemNEW[nelem][nelem-ipISO][A_].l)
00023 #define S_(A_) (StatesElemNEW[nelem][nelem-ipISO][A_].S)
00024 #define J_(A_) (StatesElemNEW[nelem][nelem-ipISO][A_].j)
00025
00026 #define IPRAD 0
00027 #define IPCOLLIS 1
00028
00029
00030
00031
00034
00035 #define RREC_MAXN 40
00036
00038 #define LIKE_RREC_MAXN( A_ ) ( A_ == ipHELIUM ? 40 : 20 )
00039
00040 #define N_ISO_TE_RECOMB 41
00041
00044 #define SumUpToThisN 1000
00045
00046 #define RECOMBMAGIC (90521)
00047
00052 void iso_cascade( long ipISO, long nelem );
00053
00056 void iso_charge_transfer_update(void);
00057
00062 void iso_collapsed_bnl_print( long ipISO, long nelem );
00063
00068 void iso_collapsed_bnl_set( long ipISO, long nelem );
00069
00074 void iso_collapsed_Aul_update( long ipISO, long nelem );
00075
00080 void iso_collapsed_lifetimes_update( long ipISO, long nelem );
00081
00086 void iso_collide( long ipISO, long nelem );
00087
00092 void iso_collisional_ionization( long ipISO, long nelem );
00093
00098 void iso_continuum_lower( long ipISO , long nelem );
00099
00104 void iso_cool( long ipISO , long nelem );
00105
00108 void iso_create( void );
00109
00119 double iso_cross_section( double ERyd , double EthRyd, long n, long l, long S, long globalZ, long globalISO );
00120
00125 void iso_departure_coefficients( long ipISO, long nelem );
00126
00132 double iso_dielec_recomb_rate( long ipISO, long nelem, long ipLo );
00133
00136 void iso_drive( void );
00137
00142 void iso_error_generation( long ipISO, long nelem );
00143
00149 long iso_get_total_num_levels( long ipISO, long nmaxResolved, long numCollapsed );
00150
00153 void IonHydro( void );
00154
00159 void iso_ionize_recombine( long ipISO , long nelem );
00160
00165 void iso_level( const long ipISO, const long nelem);
00166
00171 void iso_photo( long ipISO , long nelem );
00172
00178 void iso_prt_pops( long ipISO, long nelem, bool lgPrtDeparCoef );
00179
00189 void iso_put_error( long ipISO, long nelem, long ipHi, long ipLo, long whichData, realnum errorOpt, realnum errorPess);
00190
00195 void iso_radiative_recomb( long ipISO, long nelem );
00196
00197
00202 void iso_radiative_recomb_effective( long ipISO, long nelem );
00203
00211 double iso_recomb_check( long ipISO, long nelem, long level, double temperature );
00212
00215 void iso_recomb_auxiliary_free( void );
00216
00219 void iso_recomb_malloc( void );
00220
00224 void iso_recomb_setup( long ipISO );
00225
00231 double iso_RRCoef_Te( long ipISO, long nelem , long n );
00232
00235 void iso_satellite_update( void );
00236
00237
00238
00239
00240
00241
00242
00243 double iso_state_lifetime( long ipISO, long nelem, long n, long l );
00244
00248 void iso_solve( long ipISO, long nelem );
00249
00254 void iso_suprathermal( long ipISO, long nelem );
00255
00260 void iso_update_num_levels( long ipISO, long nelem );
00261
00266 void iso_update_rates(long ipISO, long nelem );
00267
00268 EXTERN struct t_iso
00269 {
00270 bool lgPrintNumberOfLevels;
00271
00272 const char *chISO[NISO];
00273
00275 multi_arr<realnum,4> strkar;
00276 multi_arr<double,4> pestrk;
00277
00283 multi_arr<long,5> QuantumNumbers2Index;
00284
00287 long int nLyman[NISO],
00289 nLyman_malloc[NISO];
00290
00293 multi_arr<long int,3> ipIsoLevNIonCon;
00294
00296 multi_arr<double,3> xIsoLevNIonRyd;
00297
00300 double xIonSimple[NISO][LIMELM];
00301
00303 bool lgColl_l_mixing[NISO];
00304
00306 bool lgColl_excite[NISO];
00307
00309 bool lgColl_ionize[NISO];
00310
00312 bool lgPrtDepartCoef[NISO][LIMELM];
00313
00315 bool lgPrtLevelPops[NISO][LIMELM];
00316
00319 bool lgCollStrenThermAver;
00320
00323 bool lgInd2nu_On;
00324
00325
00326 bool lgContinuumLoweringEnabled[NISO];
00327
00330 bool lgLevelsLowered[NISO][LIMELM];
00331
00334 bool lgLevelsEverLowered[NISO][LIMELM];
00335
00336
00337 bool lgMustReeval[NISO][LIMELM];
00338
00340 long int nCollapsed_max[NISO][LIMELM];
00341 long int nCollapsed_local[NISO][LIMELM];
00342
00346 long int numLevels_max[NISO][LIMELM];
00347
00351 long int numLevels_local[NISO][LIMELM];
00352
00355 long int numLevels_malloc[NISO][LIMELM];
00356
00358 long int n_HighestResolved_max[NISO][LIMELM];
00360 long int n_HighestResolved_local[NISO][LIMELM];
00361
00364 realnum stat_ion[NISO];
00365
00367 double TwoNu_induc_up[NISO][LIMELM];
00368
00370 double TwoNu_induc_dn[NISO][LIMELM];
00371
00373 double TwoNu_induc_dn_max[NISO][LIMELM];
00374
00380 multi_arr<double,4> RadRecomb;
00381
00384 multi_arr<double,3> RadRecCon;
00385
00387 bool lgDielRecom[NISO];
00388
00391 multi_arr<double,3> DielecRecomb;
00392
00395 multi_arr<double,4> DielecRecombVsTemp;
00396
00398 realnum CaseBCheck[NISO][LIMELM];
00399
00401 double RadRec_caseB[NISO][LIMELM];
00402
00405 double RadRec_effec[NISO][LIMELM];
00406
00408 multi_arr<double,3> RateLevel2Cont;
00409
00411 multi_arr<double,3> RateCont2Level;
00412
00414 double RecomCollisFrac[NISO][LIMELM];
00415
00418 multi_arr<long int,3> ipOpac;
00419
00421 multi_arr<double,3> ConOpacRatio;
00422
00424 multi_arr<double,3> DepartCoef;
00425
00427 bool lgPopLTE_OK[NISO][LIMELM];
00428
00430 multi_arr<double,3> PopLTE;
00431
00433 multi_arr<double,3> ColIoniz;
00434
00436 double FreeBnd_net_Cool_Rate[NISO][LIMELM];
00437
00439 double coll_ion[NISO][LIMELM];
00440
00442 double cRest_cool[NISO][LIMELM];
00443
00445 double xLineTotCool[NISO][LIMELM];
00446
00448 double dLTot[NISO][LIMELM];
00449
00451 double RadRecCool[NISO][LIMELM];
00452
00454 double cBal_cool[NISO][LIMELM];
00455
00457 double cLyrest_cool[NISO][LIMELM];
00458
00460 double cLya_cool[NISO][LIMELM];
00461
00463 multi_arr<double,3> gamnc;
00464
00470 multi_arr<double,3> RecomInducRate;
00471
00476 multi_arr<double,3> RecomInducCool_Coef;
00477
00479 double RecomInducCool_Rate[NISO][LIMELM];
00480
00482 multi_arr<double,4> Boltzmann;
00483
00485 multi_arr<double,3> PhotoHeat;
00486
00491 realnum SmallA;
00492
00496 multi_arr<long int,3> ipSym2nu;
00497
00499 multi_arr<realnum,3> As2nu;
00500
00503 long ipTwoPhoE[NISO][LIMELM];
00504 long ipHalfTwoPhoE[NISO][LIMELM];
00505
00507 int ipLyaRedist[NISO] , ipResoRedist[NISO] , ipSubRedist[NISO];
00508
00510 int nLyaLevel[NISO];
00511
00513 char chTypeAtomUsed[NISO][LIMELM][10];
00514
00515
00516
00517
00518
00519
00520
00523
00524
00525
00527 long int nCS[NISO];
00528
00530 bool lgCompileRecomb[NISO];
00531
00535 bool lgNoRecombInterp[NISO];
00536
00538 bool lgCS_Vriens[NISO] ,
00539 lgCS_None[NISO] ,
00540 lgCS_Vrinceanu[NISO],
00541 lgCS_therm_ave[NISO];
00542 int nCS_new[NISO];
00543
00545 bool lgCritDensLMix[NISO];
00546
00549 bool lgFSM[NISO];
00550
00552 multi_arr<double,3> SigmaAtot;
00553
00555 multi_arr<realnum,5> HeCS;
00556
00558 double CSTemp[NISO][HE1CSARRAY];
00559
00562 bool lgRandErrGen[NISO];
00563
00566 bool lgErrGenDone[NISO][LIMELM];
00567
00568 bool lgPessimisticErrors;
00569
00570 bool lgTopoff[NISO];
00571
00573 int modelRank[NISO];
00574
00576
00577
00578
00579
00580
00581
00582 multi_arr<realnum,5> Error;
00583
00586 multi_arr<realnum,5> ErrorFactor;
00587
00589 double qTot2S[NISO][LIMELM];
00590
00592 multi_arr<double,4> BranchRatio, CascadeProb, SigmaCascadeProb;
00593
00595 multi_arr<double,3> RadEffec, SigmaRadEffec;
00596
00597 multi_arr<realnum,5> CachedAs;
00598
00599 multi_arr<double,5> bnl_effective;
00600
00601 } iso;
00602
00603 #endif