00001
00002
00003
00004 #ifndef _ISO_H_
00005 #define _ISO_H_
00006
00009 EXTERN multi_arr<quantumState,3> StatesElem;
00010
00011 EXTERN long int max_num_levels;
00012
00014 #define HE1CSARRAY 10
00015
00018 #define KILL_BELOW_PLASMA(E_) ( (rfield.lgPlasNu && ((E_)<rfield.plsfrq) ) ? 0.:1. )
00019
00020 #define NUM_DR_TEMPS 19
00021
00023 #define N_(A_) (StatesElem[ipISO][nelem][A_].n)
00024 #define L_(A_) (StatesElem[ipISO][nelem][A_].l)
00025 #define S_(A_) (StatesElem[ipISO][nelem][A_].S)
00026 #define J_(A_) (StatesElem[ipISO][nelem][A_].j)
00027
00028 #define IPRAD 0
00029 #define IPCOLLIS 1
00030
00031
00032
00033
00036
00037 #define RREC_MAXN 40
00038
00040 #define LIKE_RREC_MAXN( A_ ) ( A_ == ipHELIUM ? 40 : 20 )
00041
00042 #define N_ISO_TE_RECOMB 41
00043
00046 #define SumUpToThisN 1000
00047
00048 #define RECOMBMAGIC (80405)
00049
00054 void iso_cascade( long ipISO, long nelem );
00055
00060 void iso_collapsed_bnl_print( long ipISO, long nelem );
00061
00066 void iso_collapsed_bnl_set( long ipISO, long nelem );
00067
00072 void iso_collapsed_Aul_update( long ipISO, long nelem );
00073
00078 void iso_collapsed_lifetimes_update( long ipISO, long nelem );
00079
00084 void iso_collide( long ipISO, long nelem );
00085
00090 void iso_collisional_ionization( long ipISO, long nelem );
00091
00096 void iso_continuum_lower( long ipISO , long nelem );
00097
00102 void iso_cool( long ipISO , long nelem );
00103
00106 void iso_create( void );
00107
00113 double iso_dielec_recomb_rate( long ipISO, long nelem, long ipLo );
00114
00119 void iso_error_generation( long ipISO, long nelem );
00120
00126 long iso_get_total_num_levels( long ipISO, long nmaxResolved, long numCollapsed );
00127
00132 void iso_ionize_recombine( long ipISO , long nelem );
00133
00138 void iso_level( const long ipISO, const long nelem);
00139
00144 void iso_photo( long ipISO , long nelem );
00145
00151 void iso_prt_pops( long ipISO, long nelem, bool lgPrtDeparCoef );
00152
00161 void iso_put_error( long ipISO, long nelem, long ipHi, long ipLo, long whichData, realnum errorToPut );
00162
00167 void iso_radiative_recomb( long ipISO, long nelem );
00168
00169
00174 void iso_radiative_recomb_effective( long ipISO, long nelem );
00175
00183 double iso_recomb_check( long ipISO, long nelem, long level, double temperature );
00184
00187 void iso_recomb_auxiliary_free( void );
00188
00191 void iso_recomb_malloc( void );
00192
00196 void iso_recomb_setup( long ipISO );
00197
00203 double iso_RRCoef_Te( long ipISO, long nelem , long n );
00204
00207 void iso_satellite_update( void );
00208
00212 void iso_solve( long ipISO );
00213
00218 void iso_suprathermal( long ipISO, long nelem );
00219
00224 void iso_update_num_levels( long ipISO, long nelem );
00225
00226 EXTERN struct t_iso
00227 {
00228 bool lgPrintNumberOfLevels;
00229
00230 const char *chISO[NISO];
00231
00233 multi_arr<realnum,4> strkar;
00234 multi_arr<double,4> pestrk;
00235
00241 multi_arr<long,5> QuantumNumbers2Index;
00242
00245 long int nLyman[NISO],
00247 nLyman_malloc[NISO];
00248
00251 multi_arr<long int,3> ipIsoLevNIonCon;
00252
00254 multi_arr<double,3> xIsoLevNIonRyd;
00255
00258 double xIonSimple[NISO][LIMELM];
00259
00261 bool lgColl_l_mixing[NISO];
00262
00264 bool lgColl_excite[NISO];
00265
00267 bool lgColl_ionize[NISO];
00268
00270 bool lgPrtDepartCoef[NISO][LIMELM];
00271
00273 bool lgPrtLevelPops[NISO][LIMELM];
00274
00277 bool lgCollStrenThermAver;
00278
00281 bool lgInd2nu_On;
00282
00285 bool lgLevelsLowered[NISO][LIMELM];
00286
00289 bool lgLevelsEverLowered[NISO][LIMELM];
00290
00292 long int nCollapsed_max[NISO][LIMELM];
00293 long int nCollapsed_local[NISO][LIMELM];
00294
00298 long int numLevels_max[NISO][LIMELM];
00299
00303 long int numLevels_local[NISO][LIMELM];
00304
00307 long int numLevels_malloc[NISO][LIMELM];
00308
00310 long int n_HighestResolved_max[NISO][LIMELM];
00312 long int n_HighestResolved_local[NISO][LIMELM];
00313
00315 long int numPrintLevels[NISO][LIMELM];
00316
00319 realnum stat_ion[NISO];
00320
00322 double TwoNu_induc_up[NISO][LIMELM];
00323
00325 double TwoNu_induc_dn[NISO][LIMELM];
00326
00328 double TwoNu_induc_dn_max[NISO][LIMELM];
00329
00335 multi_arr<double,4> RadRecomb;
00336
00338 bool lgDielRecom[NISO];
00339
00342 multi_arr<double,3> DielecRecomb;
00343
00346 multi_arr<double,4> DielecRecombVsTemp;
00347
00349 realnum CaseBCheck[NISO][LIMELM];
00350
00352 double RadRec_caseB[NISO][LIMELM];
00353
00356 double RadRec_effec[NISO][LIMELM];
00357
00359 multi_arr<double,3> RateLevel2Cont;
00360
00362 multi_arr<double,3> RateCont2Level;
00363
00365 double RecomCollisFrac[NISO][LIMELM];
00366
00369 multi_arr<long int,3> ipOpac;
00370
00372 multi_arr<realnum,3> ConOpacRatio;
00373
00375 multi_arr<double,3> DepartCoef;
00376
00378 bool lgPopLTE_OK[NISO][LIMELM];
00379
00381 multi_arr<double,3> PopLTE;
00382
00384 multi_arr<double,3> ColIoniz;
00385
00388 double pop_ion_ov_neut[NISO][LIMELM];
00389
00391 double FreeBnd_net_Cool_Rate[NISO][LIMELM];
00392
00394 double coll_ion[NISO][LIMELM];
00395
00397 double cRest_cool[NISO][LIMELM];
00398
00400 double xLineTotCool[NISO][LIMELM];
00401
00403 double dLTot[NISO][LIMELM];
00404
00406 double RadRecCool[NISO][LIMELM];
00407
00409 double cBal_cool[NISO][LIMELM];
00410
00412 double cLyrest_cool[NISO][LIMELM];
00413
00415 double cLya_cool[NISO][LIMELM];
00416
00418 multi_arr<double,3> gamnc;
00419
00425 multi_arr<double,3> RecomInducRate;
00426
00431 multi_arr<double,3> RecomInducCool_Coef;
00432
00434 double RecomInducCool_Rate[NISO][LIMELM];
00435
00437 multi_arr<double,4> Boltzmann;
00438
00440 multi_arr<double,3> PhotoHeat;
00441
00446 realnum SmallA;
00447
00451 multi_arr<long int,3> ipSym2nu;
00452
00454 multi_arr<realnum,3> As2nu;
00455
00458 long ipTwoPhoE[NISO][LIMELM];
00459 long ipHalfTwoPhoE[NISO][LIMELM];
00460
00462 int ipLyaRedist[NISO] , ipResoRedist[NISO] , ipSubRedist[NISO];
00463
00465 int nLyaLevel[NISO];
00466
00468 char chTypeAtomSet[NISO][10];
00470 char chTypeAtomUsed[NISO][LIMELM][10];
00471
00472
00473
00474
00475
00476
00477
00480
00481
00482
00484 long int nCS[NISO];
00485
00487 bool lgCompileRecomb[NISO];
00488
00492 bool lgNoRecombInterp[NISO];
00493
00495 bool lgCS_Vriens[NISO] ,
00496 lgCS_None[NISO] ,
00497 lgCS_Vrinceanu[NISO],
00498 lgCS_therm_ave[NISO];
00499 int nCS_new[NISO];
00500
00502 bool lgCritDensLMix[NISO];
00503
00506 bool lgFSM[NISO];
00507
00509 multi_arr<double,3> SigmaAtot;
00510
00512 multi_arr<realnum,5> HeCS;
00513
00515 double CSTemp[NISO][HE1CSARRAY];
00516
00519 bool lgRandErrGen[NISO];
00520
00523 bool lgErrGenDone[NISO][LIMELM];
00524
00525 bool lgTopoff[NISO];
00526
00528 int modelRank[NISO];
00529
00531
00532
00533
00534
00535
00536
00537 multi_arr<realnum,5> Error;
00538
00541 multi_arr<realnum,5> ErrorFactor;
00542
00544 double qTot2S[NISO][LIMELM];
00545
00547 multi_arr<double,4> BranchRatio, CascadeProb, SigmaCascadeProb;
00548
00550 multi_arr<double,3> RadEffec, SigmaRadEffec;
00551
00552 multi_arr<realnum,5> CachedAs;
00553
00554 multi_arr<double,5> bnl_effective;
00555
00556 } iso;
00557
00558 #endif