cloudy trunk
|
00001 /* This file is part of Cloudy and is copyright (C)1978-2008 by Gary J. Ferland and 00002 * others. For conditions of distribution and use see copyright notice in license.txt */ 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 /*define IPENERGY 2*/ 00031 00032 /* following two macros used to define recombination coef arrays */ 00033 /* Max n desired in RRCoef file. */ 00036 /* Hydrogen and helium atoms will have precompiled recombination coefficients up to these maximum n. */ 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 /* everything below here was originally part */ 00476 /* of the former helike structure, now */ 00477 /* generalized for iso */ 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];//vals are 0, 1, and 2 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 /* first dimension is iso, 00532 * second is nelem, 00533 * third is upper level, 00534 * fourth is lower level, 00535 * fifth is for radiative, collisional, or energy errors. 00536 * MACROS are used for the last dimension: IPRAD, IPCOLLIS, and IPENERGY. */ 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 /* the departure coefficients of collapsed levels */ 00554 multi_arr<double,5> bnl_effective; 00555 00556 } iso; 00557 00558 #endif /* _ISO_H_ */