cloudy trunk
Loading...
Searching...
No Matches
iso.h
Go to the documentation of this file.
1/* This file is part of Cloudy and is copyright (C)1978-2013 by Gary J. Ferland and
2 * others. For conditions of distribution and use see copyright notice in license.txt */
3
4#ifndef ISO_H_
5#define ISO_H_
6
7#include "two_photon.h"
8
10#include "transition.h"
11#include "freebound.h"
12
13extern long int max_num_levels;
14
17#define KILL_BELOW_PLASMA(E_) ( (rfield.lgPlasNu && ((E_)<rfield.plsfrq) ) ? 0.:1. )
18
20#define N_(A_) (iso_sp[ipISO][nelem].st[A_].n())
21#define L_(A_) (iso_sp[ipISO][nelem].st[A_].l())
22#define S_(A_) (iso_sp[ipISO][nelem].st[A_].S())
23#define J_(A_) (iso_sp[ipISO][nelem].st[A_].j())
24
26
27const int ipH1s = 0;
28const int ipH2s = 1;
29const int ipH2p = 2;
30const int ipH3s = 3;
31const int ipH3p = 4;
32const int ipH3d = 5;
33const int ipH4s = 6;
34const int ipH4p = 7;
35const int ipH4d = 8;
36const int ipH4f = 9;
37
39
40/* level 1 */
41const int ipHe1s1S = 0;
42
43/* level 2 */
44const int ipHe2s3S = 1;
45const int ipHe2s1S = 2;
46const int ipHe2p3P0 = 3;
47const int ipHe2p3P1 = 4;
48const int ipHe2p3P2 = 5;
49const int ipHe2p1P = 6;
50
51/* level 3 */
52const int ipHe3s3S = 7;
53const int ipHe3s1S = 8;
54const int ipHe3p3P = 9;
55const int ipHe3d3D = 10;
56const int ipHe3d1D = 11;
57const int ipHe3p1P = 12;
58
62const int ipH_LIKE = 0;
63const int ipHE_LIKE = 1;
64const int ipLI_LIKE = 2;
65const int ipBE_LIKE = 3;
66const int ipB_LIKE = 4;
67const int ipC_LIKE = 5;
68const int ipN_LIKE = 6;
69const int ipO_LIKE = 7;
70const int ipF_LIKE = 8;
71const int ipNE_LIKE = 9;
72const int ipNA_LIKE = 10;
73const int ipMG_LIKE = 11;
74const int ipAL_LIKE = 12;
75const int ipSI_LIKE = 13;
76const int ipP_LIKE = 14;
77const int ipS_LIKE = 15;
78const int ipCL_LIKE = 16;
79const int ipAR_LIKE = 17;
80
81enum {
84};
85
86#define IPRAD 0
87#define IPCOLLIS 1
88/*define IPENERGY 2*/
89
90/* following two macros used to define recombination coef arrays */
91/* Max n desired in RRCoef file. */
94/* Hydrogen and helium atoms will have precompiled recombination coefficients up to these maximum n. */
95#define RREC_MAXN 40
96
98#define LIKE_RREC_MAXN( A_ ) ( A_ == ipHELIUM ? 40 : 20 )
99
100#define N_ISO_TE_RECOMB 41
101
104#define SumUpToThisN 1000
106#define RECOMBMAGIC (130216)
107
112void iso_cascade( long ipISO, long nelem );
113
116void iso_charge_transfer_update( long nelem );
117
122void iso_collapsed_bnl_print( long ipISO, long nelem );
123
128void iso_collapsed_bnl_set( long ipISO, long nelem );
129
134void iso_collapsed_Aul_update( long ipISO, long nelem );
135
140void iso_collapsed_lifetimes_update( long ipISO, long nelem );
141
146void iso_collide( long ipISO, long nelem );
147
152void iso_collisional_ionization( long ipISO, long nelem );
153
158void iso_continuum_lower( long ipISO , long nelem );
159
164void iso_cool( long ipISO , long nelem );
165
168void iso_create( void );
169
179double iso_cross_section( double ERyd , double EthRyd, long n, long l, long S, long globalZ, long globalISO );
180
185void iso_departure_coefficients( long ipISO, long nelem );
186
192double iso_dielec_recomb_rate( long ipISO, long nelem, long ipLo );
193
198void iso_error_generation( long ipISO, long nelem );
199
205long iso_get_total_num_levels( long ipISO, long nmaxResolved, long numCollapsed );
206
209void IonHydro( );
210
215void iso_ionize_recombine( long ipISO , long nelem );
216
221void iso_level( const long ipISO, const long nelem, double& renorm);
222
227void iso_photo( long ipISO , long nelem );
228
234void iso_prt_pops( long ipISO, long nelem, bool lgPrtDeparCoef );
235
245void iso_put_error( long ipISO, long nelem, long ipHi, long ipLo, long whichData, realnum errorOpt, realnum errorPess);
246
251void iso_radiative_recomb( long ipISO, long nelem );
252
257void iso_radiative_recomb_effective( long ipISO, long nelem );
258
266double iso_recomb_check( long ipISO, long nelem, long level, double temperature );
267
270void iso_recomb_auxiliary_free( void );
271
274void iso_recomb_malloc( void );
275
279void iso_recomb_setup( long ipISO );
280
286double iso_RRCoef_Te( long ipISO, long nelem , long n );
287
290void iso_satellite_update( long nelem );
291
292/* calculate radiative lifetime of an individual iso state
293\param ipISO
294\param nelem
295\param n
296\param l
297*/
298double iso_state_lifetime( long ipISO, long nelem, long n, long l );
299
303void iso_solve( long ipISO, long nelem, double &maxerr );
304
309void iso_suprathermal( long ipISO, long nelem );
310
315void iso_update_num_levels( long ipISO, long nelem );
316
319void iso_update_rates( void );
320
321void iso_collapsed_update( void );
322
323void iso_set_ion_rates( long ipISO, long nelem);
324
326{
327public:
329
330 const char *chISO[NISO];
331
334 long int nLyman[NISO],
337
340
343
346
348
352
356
357 /* option to disable continuum lowering due to stark broadening, particle packing, etc. */
359
363
366
372
375
378
381
386
392 int nCS_new[NISO];//vals are 0, 1, and 2
393
396
399 bool lgFSM[NISO];
400
404
405
407
409
412};
413
414extern t_isoCTRL iso_ctrl;
415
417{
418public:
420 double pestrk;
421 double pestrk_up;
422
423 /* NB NB NB --- Error and ErrorFactor need one more slot than all the rest of these! */
424 /* and the last dimension can just be hardwired to 3 */
425
427 /* first dimension is upper level,
428 * second is lower level,
429 * third is for radiative, collisional, or energy errors.
430 * MACROS are used for the last dimension: IPRAD, IPCOLLIS, and IPENERGY. */
432
436
439};
440
442{
443public:
444 TransitionProxy trans( const long ipHi, const long ipLo )
445 {
446 return (*tr)[ ipTrans[ipHi][ipLo] ];
447 }
452 vector<freeBound> fb;
455
462
466
469
472
475
479
480 /* flag that says we must reevaluate everything about this ion */
482
483 /* set true if "element ionization" forces rescaling of pops */
485
489
494
499
503
508
511
514
518
521
524
527
529 double coll_ion;
530
533
536
538 double dLTot;
539
542
544 double cBal_cool;
545
548
550 double cLya_cool;
551
554
557
561
563 double qTot2S;
564
565 /* the departure coefficients of collapsed levels */
568 void Reset()
569 {
570 // this is flag indicating which type of model atom to use
571 strcpy( chTypeAtomUsed , "none" );
572 CaseBCheck = 0.;
573 /* a first guess at the recombination coefficients */
574 RadRec_caseB = 1e-13;
575 lgLevelsLowered = false;
576 lgLevelsEverLowered = false;
577 lgMustReeval = false;
578 lgPopsRescaled = false;
579 /* error generation done yet? false means not done. */
580 lgErrGenDone = false;
581 for( vector<two_photon>::iterator it = TwoNu.begin(); it != TwoNu.end(); ++it )
582 (*it).Reset();
583 for( vector<freeBound>::iterator it = fb.begin(); it != fb.end(); ++it )
584 (*it).Reset();
585 }
586 vector<two_photon> TwoNu;
587
588 vector<double> HighestLevelOpacStack;
589};
590
591extern t_iso_sp iso_sp[NISO][LIMELM];
592
594void iso_renorm( long nelem, long ipISO, double& renorm );
595
596#endif /* ISO_H_ */
const int LIMELM
Definition cddefines.h:258
const int NISO
Definition cddefines.h:261
float realnum
Definition cddefines.h:103
double SigmaCascadeProb
Definition iso.h:438
realnum Error[3]
Definition iso.h:431
double pestrk_up
Definition iso.h:421
realnum ErrorFactor[3]
Definition iso.h:435
double pestrk
Definition iso.h:420
double RecomInducCool_Rate
Definition iso.h:553
double coll_ion
Definition iso.h:529
double RadRec_effec
Definition iso.h:517
multi_arr< realnum, 3 > CachedAs
Definition iso.h:567
long int numLevels_max
Definition iso.h:493
multi_arr< extra_tr, 2 > ex
Definition iso.h:449
bool lgErrGenDone
Definition iso.h:560
double cLyrest_cool
Definition iso.h:547
vector< freeBound > fb
Definition iso.h:452
multi_arr< double, 2 > BranchRatio
Definition iso.h:451
double qTot2S
Definition iso.h:563
TransitionProxy trans(const long ipHi, const long ipLo)
Definition iso.h:444
long int numLevels_malloc
Definition iso.h:502
double dLTot
Definition iso.h:538
double cLya_cool
Definition iso.h:550
long int numLevels_local
Definition iso.h:498
void Reset()
Definition iso.h:568
double RadRec_caseB
Definition iso.h:513
bool lgPopsRescaled
Definition iso.h:484
long int n_HighestResolved_local
Definition iso.h:507
bool lgPopLTE_OK
Definition iso.h:523
double cBal_cool
Definition iso.h:544
bool lgLevelsLowered
Definition iso.h:474
bool lgPrtDepartCoef
Definition iso.h:468
char chTypeAtomUsed[10]
Definition iso.h:556
double cRest_cool
Definition iso.h:532
long int n_HighestResolved_max
Definition iso.h:505
long int nCollapsed_max
Definition iso.h:487
double xLineTotCool
Definition iso.h:535
vector< double > HighestLevelOpacStack
Definition iso.h:588
vector< two_photon > TwoNu
Definition iso.h:586
multi_arr< double, 2 > CascadeProb
Definition iso.h:450
multi_arr< long, 3 > QuantumNumbers2Index
Definition iso.h:461
qList st
Definition iso.h:453
multi_arr< long, 2 > ipTrans
Definition iso.h:448
double RecomCollisFrac
Definition iso.h:520
double xIonSimple
Definition iso.h:465
double RadRecCool
Definition iso.h:541
bool lgMustReeval
Definition iso.h:481
bool lgPrtLevelPops
Definition iso.h:471
double FreeBnd_net_Cool_Rate
Definition iso.h:526
multi_arr< double, 3 > bnl_effective
Definition iso.h:566
long int nCollapsed_local
Definition iso.h:488
bool lgLevelsEverLowered
Definition iso.h:478
TransitionList * tr
Definition iso.h:454
realnum CaseBCheck
Definition iso.h:510
int modelRank[NISO]
Definition iso.h:411
bool lgDielRecom[NISO]
Definition iso.h:365
bool lgCS_therm_ave[NISO]
Definition iso.h:391
bool lgColl_ionize[NISO]
Definition iso.h:345
bool lgCS_None[NISO]
Definition iso.h:389
bool lgCollStrenThermAver
Definition iso.h:351
bool lgFSM[NISO]
Definition iso.h:399
bool lgContinuumLoweringEnabled[NISO]
Definition iso.h:358
int ipLyaRedist[NISO]
Definition iso.h:374
bool lgNoRecombInterp[NISO]
Definition iso.h:385
int ipSubRedist[NISO]
Definition iso.h:374
bool lgLTE_levels[NISO]
Definition iso.h:347
bool lgColl_l_mixing[NISO]
Definition iso.h:339
int nLyaLevel[NISO]
Definition iso.h:377
bool lgCritDensLMix[NISO]
Definition iso.h:395
long int nLyman_malloc[NISO]
Definition iso.h:336
int ipResoRedist[NISO]
Definition iso.h:374
bool lgCS_Vrinceanu[NISO]
Definition iso.h:390
bool lgPrintNumberOfLevels
Definition iso.h:328
bool lgCS_Vriens[NISO]
Definition iso.h:388
realnum stat_ion[NISO]
Definition iso.h:362
bool lgTopoff[NISO]
Definition iso.h:408
const char * chISO[NISO]
Definition iso.h:330
long int nLyman[NISO]
Definition iso.h:334
bool lgPessimisticErrors
Definition iso.h:406
realnum SmallA
Definition iso.h:371
int nCS_new[NISO]
Definition iso.h:392
bool lgColl_excite[NISO]
Definition iso.h:342
bool lgInd2nu_On
Definition iso.h:355
bool lgRandErrGen[NISO]
Definition iso.h:403
bool lgCompileRecomb[NISO]
Definition iso.h:380
t_iso_sp iso_sp[NISO][LIMELM]
Definition iso.cpp:8
long int max_num_levels
Definition iso.cpp:10
t_isoCTRL iso_ctrl
Definition iso.cpp:6
const int ipP_LIKE
Definition iso.h:76
const int ipHe1s1S
Definition iso.h:41
const int ipC_LIKE
Definition iso.h:67
void iso_collide(long ipISO, long nelem)
void iso_update_rates(void)
Definition iso_solve.cpp:51
void iso_update_num_levels(long ipISO, long nelem)
const int ipH3p
Definition iso.h:31
const int ipSI_LIKE
Definition iso.h:75
const int ipAR_LIKE
Definition iso.h:79
const int ipH1s
Definition iso.h:27
void iso_departure_coefficients(long ipISO, long nelem)
void iso_recomb_malloc(void)
const int ipHe2s3S
Definition iso.h:44
const int ipHe3d1D
Definition iso.h:56
const int ipHe2p1P
Definition iso.h:49
void iso_collisional_ionization(long ipISO, long nelem)
void iso_collapsed_update(void)
Definition iso_solve.cpp:27
const int ipHe2s1S
Definition iso.h:45
const int ipHe3p3P
Definition iso.h:54
void iso_renorm(long nelem, long ipISO, double &renorm)
const int ipLI_LIKE
Definition iso.h:64
void iso_continuum_lower(long ipISO, long nelem)
const int ipHe3s1S
Definition iso.h:53
const int ipH4p
Definition iso.h:34
void iso_collapsed_bnl_print(long ipISO, long nelem)
const int ipHE_LIKE
Definition iso.h:63
void iso_collapsed_lifetimes_update(long ipISO, long nelem)
const int ipH3s
Definition iso.h:30
const int ipHe2p3P1
Definition iso.h:47
void iso_recomb_setup(long ipISO)
const int ipH4d
Definition iso.h:35
const int ipCL_LIKE
Definition iso.h:78
void iso_error_generation(long ipISO, long nelem)
Definition iso_error.cpp:39
const int ipS_LIKE
Definition iso.h:77
const int ipAL_LIKE
Definition iso.h:74
const int ipH2p
Definition iso.h:29
void iso_satellite_update(long nelem)
const int ipNE_LIKE
Definition iso.h:71
const int ipBE_LIKE
Definition iso.h:65
const int ipMG_LIKE
Definition iso.h:73
void iso_cascade(long ipISO, long nelem)
const int ipF_LIKE
Definition iso.h:70
long iso_get_total_num_levels(long ipISO, long nmaxResolved, long numCollapsed)
void iso_collapsed_Aul_update(long ipISO, long nelem)
const int ipH4s
Definition iso.h:33
const int ipNA_LIKE
Definition iso.h:72
double iso_RRCoef_Te(long ipISO, long nelem, long n)
void iso_suprathermal(long ipISO, long nelem)
void iso_collapsed_bnl_set(long ipISO, long nelem)
void iso_cool(long ipISO, long nelem)
void iso_set_ion_rates(long ipISO, long nelem)
double iso_cross_section(double ERyd, double EthRyd, long n, long l, long S, long globalZ, long globalISO)
const int ipH4f
Definition iso.h:36
double iso_state_lifetime(long ipISO, long nelem, long n, long l)
void iso_ionize_recombine(long ipISO, long nelem)
const int ipHe3p1P
Definition iso.h:57
double iso_recomb_check(long ipISO, long nelem, long level, double temperature)
void iso_photo(long ipISO, long nelem)
const int ipB_LIKE
Definition iso.h:66
const int ipHe3d3D
Definition iso.h:55
const int ipH3d
Definition iso.h:32
double iso_dielec_recomb_rate(long ipISO, long nelem, long ipLo)
void iso_charge_transfer_update(long nelem)
const int ipHe2p3P0
Definition iso.h:46
void IonHydro()
void iso_level(const long ipISO, const long nelem, double &renorm)
const int ipH2s
Definition iso.h:28
const int ipH_LIKE
Definition iso.h:62
const int ipHe3s3S
Definition iso.h:52
@ ipTRIPLET
Definition iso.h:82
@ ipSINGLET
Definition iso.h:82
@ ipMULTIPLET_BEGIN
Definition iso.h:83
@ ipDOUBLET
Definition iso.h:82
@ ipMULTIPLET_END
Definition iso.h:83
const int ipO_LIKE
Definition iso.h:69
void iso_prt_pops(long ipISO, long nelem, bool lgPrtDeparCoef)
void iso_create(void)
const int ipHe2p3P2
Definition iso.h:48
void iso_solve(long ipISO, long nelem, double &maxerr)
void iso_recomb_auxiliary_free(void)
const int ipN_LIKE
Definition iso.h:68
void iso_radiative_recomb_effective(long ipISO, long nelem)
void iso_put_error(long ipISO, long nelem, long ipHi, long ipLo, long whichData, realnum errorOpt, realnum errorPess)
void iso_radiative_recomb(long ipISO, long nelem)
static long int globalISO
static long int globalZ
#define S(I_, J_)