cloudy  trunk
atom_seq_boron.cpp
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 /*AtomSeqBoron compute cooling from 5-level boron sequence model atom */
4 #include "cddefines.h"
5 #include "cooling.h"
6 #include "thermal.h"
7 #include "dense.h"
8 #include "atoms.h"
9 #include "transition.h"
10 
12  /* indices for all lines are on the C scale since they will be stuffed into
13  * C arrays. so, t10 refers to the 2-1 transition */
14  const TransitionProxy& t10,
15  const TransitionProxy& t20,
16  const TransitionProxy& t30,
17  const TransitionProxy& t21,
18  const TransitionProxy& t31,
19  const TransitionProxy& t41,
20  double cs40,
21  double cs32,
22  double cs42,
23  double cs43,
24  /* pump rate s-1 due to UV permitted lines */
25  double pump_rate ,
26  /* string used to identify calling program in case of error */
27  const char *chLabel
28  )
29 {
30 
31  /* this routine has three possible returns:
32  * abundance is zero
33  * too cool for full 5-level atom, but still do ground term
34  * full solution */
35 
36  /* boron sequence is now a five level atom */
37 # define N_SEQ_BORON 5
38  static double
39  **AulEscp ,
40  **col_str ,
41  **AulDest,
42  /* AulPump[low][high] is rate (s^-1) from lower to upper level */
43  **AulPump,
44  **CollRate,
45  *pops,
46  *create,
47  *destroy,
48  *depart,
49  /* statistical weight */
50  *stat ,
51  /* excitation energies in kelvin */
52  *excit;
53 
54  double b_cooling,
55  dCoolDT;
56  double EnrLU, EnrUL;
57  realnum abundan;
58 
59  static bool lgFirst=true,
60  lgZeroPop;
61  int i , j;
62  int
63  /* flag to signal negative level populations */
64  lgNegPop;
65  /* flag to turn on debug print in atom_levelN */
66  bool lgDeBug;
67 
68  DEBUG_ENTRY( "AtomSeqBoron()" );
69 
70  if( lgFirst )
71  {
72  /* will never do this again */
73  lgFirst = false;
74  /* allocate the 1D arrays*/
75  excit = (double *)MALLOC( sizeof(double)*(N_SEQ_BORON) );
76  stat = (double *)MALLOC( sizeof(double)*(N_SEQ_BORON) );
77  pops = (double *)MALLOC( sizeof(double)*(N_SEQ_BORON) );
78  create = (double *)MALLOC( sizeof(double)*(N_SEQ_BORON) );
79  destroy = (double *)MALLOC( sizeof(double)*(N_SEQ_BORON) );
80  depart = (double *)MALLOC( sizeof(double)*(N_SEQ_BORON) );
81  /* create space for the 2D arrays */
82  AulPump = ((double **)MALLOC((N_SEQ_BORON)*sizeof(double *)));
83  CollRate = ((double **)MALLOC((N_SEQ_BORON)*sizeof(double *)));
84  AulDest = ((double **)MALLOC((N_SEQ_BORON)*sizeof(double *)));
85  AulEscp = ((double **)MALLOC((N_SEQ_BORON)*sizeof(double *)));
86  col_str = ((double **)MALLOC((N_SEQ_BORON)*sizeof(double *)));
87  for( i=0; i<(N_SEQ_BORON); ++i )
88  {
89  AulPump[i] = ((double *)MALLOC((N_SEQ_BORON)*sizeof(double )));
90  CollRate[i] = ((double *)MALLOC((N_SEQ_BORON)*sizeof(double )));
91  AulDest[i] = ((double *)MALLOC((N_SEQ_BORON)*sizeof(double )));
92  AulEscp[i] = ((double *)MALLOC((N_SEQ_BORON)*sizeof(double )));
93  col_str[i] = ((double *)MALLOC((N_SEQ_BORON)*sizeof(double )));
94  }
95  }
96 
97  /* total abundance of this species */
98  abundan = dense.xIonDense[ (*t10.Hi()).nelem() -1][(*t10.Hi()).IonStg()-1];
99 
101  if( abundan <= 0. )
102  {
103  /* this branch, no abundance of ion */
104  (*t10.Lo()).Pop() = 0.;
105  (*t20.Lo()).Pop() = 0.;
106  (*t30.Lo()).Pop() = 0.;
107  (*t21.Lo()).Pop() = 0.;
108  (*t31.Lo()).Pop() = 0.;
109  (*t41.Lo()).Pop() = 0.;
110 
111  t10.Emis().PopOpc() = 0.;
112  t20.Emis().PopOpc() = 0.;
113  t30.Emis().PopOpc() = 0.;
114  t21.Emis().PopOpc() = 0.;
115  t31.Emis().PopOpc() = 0.;
116  t41.Emis().PopOpc() = 0.;
117 
118  (*t10.Hi()).Pop() = 0.;
119  (*t20.Hi()).Pop() = 0.;
120  (*t30.Hi()).Pop() = 0.;
121  (*t21.Hi()).Pop() = 0.;
122  (*t31.Hi()).Pop() = 0.;
123  (*t41.Hi()).Pop() = 0.;
124 
125  t10.Emis().xIntensity() = 0.;
126  t20.Emis().xIntensity() = 0.;
127  t30.Emis().xIntensity() = 0.;
128  t21.Emis().xIntensity() = 0.;
129  t31.Emis().xIntensity() = 0.;
130  t41.Emis().xIntensity() = 0.;
131 
132  t10.Coll().cool() = 0.;
133  t20.Coll().cool() = 0.;
134  t30.Coll().cool() = 0.;
135  t21.Coll().cool() = 0.;
136  t31.Coll().cool() = 0.;
137  t41.Coll().cool() = 0.;
138 
139  t10.Emis().phots() = 0.;
140  t20.Emis().phots() = 0.;
141  t30.Emis().phots() = 0.;
142  t21.Emis().phots() = 0.;
143  t31.Emis().phots() = 0.;
144  t41.Emis().phots() = 0.;
145 
146  t10.Emis().ColOvTot() = 0.;
147  t20.Emis().ColOvTot() = 0.;
148  t30.Emis().ColOvTot() = 0.;
149  t21.Emis().ColOvTot() = 0.;
150  t31.Emis().ColOvTot() = 0.;
151  t41.Emis().ColOvTot() = 0.;
152 
153  t10.Coll().heat() = 0.;
154  t20.Coll().heat() = 0.;
155  t30.Coll().heat() = 0.;
156  t21.Coll().heat() = 0.;
157  t31.Coll().heat() = 0.;
158  t41.Coll().heat() = 0.;
159 
160  CoolAdd( chLabel, t10.WLAng() , 0.);
161  CoolAdd( chLabel, t20.WLAng() , 0.);
162  CoolAdd( chLabel, t30.WLAng() , 0.);
163  CoolAdd( chLabel, t21.WLAng() , 0.);
164  CoolAdd( chLabel, t31.WLAng() , 0.);
165  CoolAdd( chLabel, t41.WLAng() , 0.);
166 
167  /* level populations */
168  /* LIMLEVELN is the dimension of the atoms vectors */
170  for( i=0; i < N_SEQ_BORON; i++ )
171  {
172  atoms.PopLevels[i] = 0.;
173  atoms.DepLTELevels[i] = 1.;
174  }
175  return;
176  }
177 
178  ASSERT( t10.Coll().col_str() > 0.);
179  ASSERT( t20.Coll().col_str() > 0.);
180  ASSERT( t30.Coll().col_str() > 0.);
181  ASSERT( t21.Coll().col_str() > 0.);
182  ASSERT( t31.Coll().col_str() > 0.);
183  ASSERT( t41.Coll().col_str() > 0.);
184  ASSERT( cs40>0.);
185  ASSERT( cs32>0.);
186  ASSERT( cs42>0.);
187  ASSERT( cs43>0.);
188 
189  /* all elements are used, and must be set to zero if zero */
190  for( i=0; i < N_SEQ_BORON; i++ )
191  {
192  create[i] = 0.;
193  destroy[i] = 0.;
194  for( j=0; j < N_SEQ_BORON; j++ )
195  {
196  /*data[j][i] = -1e33;*/
197  AulEscp[j][i] = 0.;
198  AulDest[j][i] = 0.;
199  AulPump[j][i] = 0.;
200  col_str[j][i] = 0.;
201  }
202  }
203 
204  /* statistical weights */
205  stat[0] = (*t10.Lo()).g();
206  stat[1] = (*t10.Hi()).g();
207  stat[2] = (*t20.Hi()).g();
208  stat[3] = (*t30.Hi()).g();
209  stat[4] = (*t41.Hi()).g();
210  ASSERT( stat[0]>0. && stat[1]>0. &&stat[2]>0. &&stat[3]>0. &&stat[4]>0.);
211  ASSERT( fabs((*t10.Lo()).g()/2.-1.) < FLT_EPSILON);
212  ASSERT( fabs((*t10.Hi()).g()/4.-1.) < FLT_EPSILON);
213  ASSERT( fabs((*t20.Lo()).g()/2.-1.) < FLT_EPSILON);
214  ASSERT( fabs((*t20.Hi()).g()/2.-1.) < FLT_EPSILON);
215  ASSERT( fabs((*t30.Lo()).g()/2.-1.) < FLT_EPSILON);
216  ASSERT( fabs((*t30.Hi()).g()/4.-1.) < FLT_EPSILON);
217  ASSERT( fabs((*t21.Lo()).g()/4.-1.) < FLT_EPSILON);
218  ASSERT( fabs((*t21.Hi()).g()/2.-1.) < FLT_EPSILON);
219  ASSERT( fabs((*t31.Lo()).g()/4.-1.) < FLT_EPSILON);
220  ASSERT( fabs((*t31.Hi()).g()/4.-1.) < FLT_EPSILON);
221  ASSERT( fabs((*t41.Lo()).g()/4.-1.) < FLT_EPSILON);
222  ASSERT( fabs((*t41.Hi()).g()/6.-1.) < FLT_EPSILON);
223 
224  /* excitation energy of each level relative to ground, in Kelvin */
225  excit[0] = 0.;
226  excit[1] = t10.EnergyK();
227  excit[2] = t20.EnergyK();
228  excit[3] = t30.EnergyK();
229  excit[4] = t41.EnergyK() + t10.EnergyK();
230  ASSERT( excit[1]>0. &&excit[2]>0. &&excit[3]>0. &&excit[4]>0.);
231 
232  /* fill in Einstein As, collision strengths, pumping rates */
233  AulEscp[1][0] = t10.Emis().Aul()*(t10.Emis().Pesc() + t10.Emis().Pelec_esc());
234  AulDest[1][0] = t10.Emis().Aul()*t10.Emis().Pdest();
235  col_str[1][0] = t10.Coll().col_str();
236  AulPump[0][1] = t10.Emis().pump();
237 
238  /* add FUV pump transitions to this pump rate */
239  AulPump[0][1] += pump_rate;
240 
241  AulEscp[2][0] = t20.Emis().Aul()*(t20.Emis().Pesc() + t20.Emis().Pelec_esc());
242  AulDest[2][0] = t20.Emis().Aul()*t20.Emis().Pdest();
243  col_str[2][0] = t20.Coll().col_str();
244  AulPump[0][2] = t20.Emis().pump();
245 
246  AulEscp[3][0] = t30.Emis().Aul()*(t30.Emis().Pesc() + t30.Emis().Pelec_esc());
247  AulDest[3][0] = t30.Emis().Aul()*t30.Emis().Pdest();
248  col_str[3][0] = t30.Coll().col_str();
249  AulPump[0][3] = t30.Emis().pump();
250 
251  AulEscp[4][0] = 1e-8;/* made up trans prob */
252  AulDest[4][0] = 0.;
253  col_str[4][0] = cs40;
254  AulPump[0][4] = 0.;
255 
256  AulEscp[2][1] = t21.Emis().Aul()*(t21.Emis().Pesc() + t21.Emis().Pelec_esc());
257  AulDest[2][1] = t21.Emis().Aul()*t21.Emis().Pdest();
258  col_str[2][1] = t21.Coll().col_str();
259  AulPump[1][2] = t21.Emis().pump();
260 
261  AulEscp[3][1] = t31.Emis().Aul()*(t31.Emis().Pesc() + t31.Emis().Pelec_esc());
262  AulDest[3][1] = t31.Emis().Aul()*t31.Emis().Pdest();
263  col_str[3][1] = t31.Coll().col_str();
264  AulPump[1][3] = t31.Emis().pump();
265 
266  AulEscp[4][1] = t41.Emis().Aul()*(t41.Emis().Pesc() + t41.Emis().Pelec_esc());
267  AulDest[4][1] = t41.Emis().Aul()*t41.Emis().Pdest();
268  col_str[4][1] = t41.Coll().col_str();
269  AulPump[1][4] = t41.Emis().pump();
270 
271  AulEscp[3][2] = 1e-8;/* made up trans prob */
272  AulDest[3][2] = 0.;
273  col_str[3][2] = cs32;
274  AulPump[2][3] = 0.;
275 
276  AulEscp[4][2] = 1e-8;/* made up trans prob */
277  AulDest[4][2] = 0.;
278  col_str[4][2] = cs42;
279  AulPump[2][4] = 0.;
280 
281  AulEscp[4][3] = 1e-8;/* made up trans prob */
282  AulDest[4][3] = 0.;
283  col_str[4][3] = cs43;
284  AulPump[3][4] = 0.;
285 
286  lgDeBug = false;
287 
288  /* lgNegPop positive if negative pops occurred, negative if too cold */
290  abundan,
291  stat,
292  excit,
293  'K',
294  pops,
295  depart,
296  &AulEscp,
297  &col_str,
298  &AulDest,
299  &AulPump,
300  &CollRate,
301  create,
302  destroy,
303  false,/* say atom_levelN should evaluate coll rates from cs */
304  &b_cooling,
305  &dCoolDT,
306  chLabel,
307  &lgNegPop,
308  &lgZeroPop,
309  lgDeBug );/* option to print stuff - set to true for debug printout */
310 
311  /* atom_levelN did not evaluate PopLevels, so save pops here */
312  /* LIMLEVELN is the dimension of the atoms vectors */
314  for( i=0; i< N_SEQ_BORON; ++i )
315  {
316  atoms.PopLevels[i] = pops[i];
317  atoms.DepLTELevels[i] = depart[i];
318  }
319  /* this branch, we have a full valid solution */
320  (*t10.Lo()).Pop() = pops[0];
321  (*t20.Lo()).Pop() = pops[0];
322  (*t30.Lo()).Pop() = pops[0];
323  (*t21.Lo()).Pop() = pops[1];
324  (*t31.Lo()).Pop() = pops[1];
325  (*t41.Lo()).Pop() = pops[1];
326 
327  t10.Emis().PopOpc() = (pops[0] - pops[1]*(*t10.Lo()).g()/(*t10.Hi()).g());
328  t20.Emis().PopOpc() = (pops[0] - pops[2]*(*t20.Lo()).g()/(*t20.Hi()).g());
329  t30.Emis().PopOpc() = (pops[0] - pops[3]*(*t30.Lo()).g()/(*t30.Hi()).g());
330  t21.Emis().PopOpc() = (pops[1] - pops[2]*(*t21.Lo()).g()/(*t21.Hi()).g());
331  t31.Emis().PopOpc() = (pops[1] - pops[3]*(*t31.Lo()).g()/(*t31.Hi()).g());
332  t41.Emis().PopOpc() = (pops[1] - pops[4]*(*t41.Lo()).g()/(*t41.Hi()).g());
333 
334  (*t10.Hi()).Pop() = pops[1];
335  (*t20.Hi()).Pop() = pops[2];
336  (*t30.Hi()).Pop() = pops[3];
337  (*t21.Hi()).Pop() = pops[2];
338  (*t31.Hi()).Pop() = pops[3];
339  (*t41.Hi()).Pop() = pops[4];
340 
341  t10.Emis().phots() = t10.Emis().Aul()*(t10.Emis().Pesc() + t10.Emis().Pelec_esc())*pops[1];
342  t20.Emis().phots() = t20.Emis().Aul()*(t20.Emis().Pesc() + t20.Emis().Pelec_esc())*pops[2];
343  t30.Emis().phots() = t30.Emis().Aul()*(t30.Emis().Pesc() + t30.Emis().Pelec_esc())*pops[3];
344  t21.Emis().phots() = t21.Emis().Aul()*(t21.Emis().Pesc() + t21.Emis().Pelec_esc())*pops[2];
345  t31.Emis().phots() = t31.Emis().Aul()*(t31.Emis().Pesc() + t31.Emis().Pelec_esc())*pops[3];
346  t41.Emis().phots() = t41.Emis().Aul()*(t41.Emis().Pesc() + t41.Emis().Pelec_esc())*pops[4];
347 
348  t10.Emis().xIntensity() = t10.Emis().phots()*t10.EnergyErg();
349  t20.Emis().xIntensity() = t20.Emis().phots()*t20.EnergyErg();
350  t30.Emis().xIntensity() = t30.Emis().phots()*t30.EnergyErg();
351  t21.Emis().xIntensity() = t21.Emis().phots()*t21.EnergyErg();
352  t31.Emis().xIntensity() = t31.Emis().phots()*t31.EnergyErg();
353  t41.Emis().xIntensity() = t41.Emis().phots()*t41.EnergyErg();
354 
355  /* ratio of collisional to total excitation */
356  t10.Emis().ColOvTot() = CollRate[0][1]/SDIV(CollRate[0][1]+t10.Emis().pump());
357  t20.Emis().ColOvTot() = CollRate[0][2]/SDIV(CollRate[0][2]+t20.Emis().pump());
358  t30.Emis().ColOvTot() = CollRate[0][3]/SDIV(CollRate[0][3]+t30.Emis().pump());
359  t21.Emis().ColOvTot() = CollRate[1][2]/SDIV(CollRate[1][2]+t21.Emis().pump());
360  t31.Emis().ColOvTot() = CollRate[1][3]/SDIV(CollRate[1][3]+t31.Emis().pump());
361  t41.Emis().ColOvTot() = CollRate[1][4]/SDIV(CollRate[1][4]+t41.Emis().pump());
362 
363  /* derivative of cooling function */
364  thermal.dCooldT += dCoolDT;
365 
366  /* two cases - collisionally excited (usual case) or
367  * radiatively excited - in which case line can be a heat source
368  * following are correct heat exchange, they will mix to get correct derivative
369  * the sum of heat-cool will add up to EnrUL - EnrLU - this is a trick to
370  * keep stable solution by effectively dividing up heating and cooling,
371  * so that negative cooling does not occur */
372 
373  EnrLU = (*t10.Lo()).Pop()*CollRate[0][1]*t10.EnergyErg();
374  EnrUL = (*t10.Hi()).Pop()*CollRate[1][0]*t10.EnergyErg();
375  /* energy exchange due to this level
376  * net cooling due to excitation minus part of de-excit */
377  t10.Coll().cool() = EnrLU - EnrUL*t10.Emis().ColOvTot();
378  /* net heating is remainder */
379  t10.Coll().heat() = EnrUL*(1. - t10.Emis().ColOvTot());
380  /* add to cooling */
381  CoolAdd( chLabel, t10.WLAng() , t10.Coll().cool());
382  /* derivative of cooling function */
383  thermal.dCooldT += t10.Coll().cool() * (t10.EnergyK() * thermal.tsq1 - thermal.halfte );
384 
385  EnrLU = (*t20.Lo()).Pop()*CollRate[0][2]*t20.EnergyErg();
386  EnrUL = (*t20.Hi()).Pop()*CollRate[2][0]*t20.EnergyErg();
387  t20.Coll().cool() = EnrLU - EnrUL*t20.Emis().ColOvTot();
388  t20.Coll().heat() = EnrUL*(1. - t20.Emis().ColOvTot());
389  /* add to cooling */
390  CoolAdd( chLabel, t20.WLAng() , t20.Coll().cool());
391  thermal.dCooldT += t20.Coll().cool() * (t20.EnergyK() * thermal.tsq1 - thermal.halfte );
392 
393  EnrLU = (*t30.Lo()).Pop()*CollRate[0][3]*t30.EnergyErg();
394  EnrUL = (*t30.Hi()).Pop()*CollRate[3][0]*t30.EnergyErg();
395  t30.Coll().cool() = EnrLU - EnrUL*t30.Emis().ColOvTot();
396  t30.Coll().heat() = EnrUL*(1. - t30.Emis().ColOvTot());
397  /* add to cooling */
398  CoolAdd( chLabel, t30.WLAng() , t30.Coll().cool());
399  thermal.dCooldT += t30.Coll().cool() * (t30.EnergyK() * thermal.tsq1 - thermal.halfte );
400 
401  EnrLU = (*t21.Lo()).Pop()*CollRate[1][2]*t21.EnergyErg();
402  EnrUL = (*t21.Hi()).Pop()*CollRate[2][1]*t21.EnergyErg();
403  t21.Coll().cool() = EnrLU - EnrUL*t21.Emis().ColOvTot();
404  t21.Coll().heat() = EnrUL*(1. - t21.Emis().ColOvTot());
405  /* add to cooling */
406  CoolAdd( chLabel, t21.WLAng() , t21.Coll().cool());
407  /* use of 20 is intentional in following - that is Boltzmann factor */
408  thermal.dCooldT += t21.Coll().cool() * (t20.EnergyK() * thermal.tsq1 - thermal.halfte );
409 
410  EnrLU = (*t31.Lo()).Pop()*CollRate[1][3]*t31.EnergyErg();
411  EnrUL = (*t31.Hi()).Pop()*CollRate[3][1]*t31.EnergyErg();
412  t31.Coll().cool() = EnrLU - EnrUL*t31.Emis().ColOvTot();
413  t31.Coll().heat() = EnrUL*(1. - t31.Emis().ColOvTot());
414  /* add to cooling */
415  CoolAdd( chLabel, t31.WLAng() , t31.Coll().cool());
416  /* use of 30 is intentional in following - that is Boltzmann factor */
417  thermal.dCooldT += t31.Coll().cool() * (t30.EnergyK() * thermal.tsq1 - thermal.halfte );
418 
419  EnrLU = (*t41.Lo()).Pop()*CollRate[1][4]*t41.EnergyErg();
420  EnrUL = (*t41.Hi()).Pop()*CollRate[4][1]*t41.EnergyErg();
421  t41.Coll().cool() = EnrLU - EnrUL*t41.Emis().ColOvTot();
422  t41.Coll().heat() = EnrUL*(1. - t41.Emis().ColOvTot());
423  /* add to cooling */
424  CoolAdd( chLabel, t41.WLAng() , t41.Coll().cool());
425  /* use of 41 is intentional in following - that is Boltzmann factor (no 40 here) */
426  thermal.dCooldT += t41.Coll().cool() * (t41.EnergyK() * thermal.tsq1 - thermal.halfte );
427 
428  return;
429 }
thermal.h
TransitionProxy::EnergyErg
realnum EnergyErg() const
Definition: transition.h:78
CollisionProxy::cool
double & cool() const
Definition: collision.h:190
dense
t_dense dense
Definition: dense.cpp:24
atoms.h
EmissionProxy::xIntensity
double & xIntensity() const
Definition: emission.h:483
realnum
float realnum
Definition: cddefines.h:103
TransitionProxy::WLAng
realnum & WLAng() const
Definition: transition.h:429
EmissionProxy::PopOpc
double & PopOpc() const
Definition: emission.h:603
N_SEQ_BORON
#define N_SEQ_BORON
SDIV
sys_float SDIV(sys_float x)
Definition: cddefines.h:952
EmissionProxy::Pdest
realnum & Pdest() const
Definition: emission.h:543
CoolAdd
void CoolAdd(const char *chLabel, realnum lambda, double cool)
Definition: cool_etc.cpp:13
ASSERT
#define ASSERT(exp)
Definition: cddefines.h:578
atom_levelN
void atom_levelN(long int nLevelCalled, realnum abund, const double g[], const double ex[], char chExUnits, double pops[], double depart[], double ***AulEscp, double ***col_str, double ***AulDest, double ***AulPump, double ***CollRate, const double source[], const double sink[], bool lgCollRateDone, double *cooltl, double *coolder, const char *chLabel, int *nNegPop, bool *lgZeroPop, bool lgDeBug, bool lgLTE, multi_arr< double, 2 > *Cool, multi_arr< double, 2 > *dCooldT)
Definition: atom_leveln.cpp:15
TransitionProxy::Coll
CollisionProxy Coll() const
Definition: transition.h:424
TransitionProxy
Definition: transition.h:23
CollisionProxy::heat
double & heat() const
Definition: collision.h:194
transition.h
LIMLEVELN
const long LIMLEVELN
Definition: atoms.h:237
TransitionProxy::Emis
EmissionList::reference Emis() const
Definition: transition.h:408
AulPump
static double ** AulPump
Definition: species2.cpp:29
col_str
static double ** col_str
Definition: species2.cpp:29
dense.h
AtomSeqBoron
void AtomSeqBoron(const TransitionProxy &t10, const TransitionProxy &t20, const TransitionProxy &t30, const TransitionProxy &t21, const TransitionProxy &t31, const TransitionProxy &t41, double cs40, double cs32, double cs42, double cs43, double pump_rate, const char *chLabel)
Definition: atom_seq_boron.cpp:11
TransitionProxy::Lo
qList::iterator Lo() const
Definition: transition.h:392
cooling.h
EmissionProxy::phots
double & phots() const
Definition: emission.h:503
cddefines.h
CollRate
static double ** CollRate
Definition: species2.cpp:29
atoms
t_atoms atoms
Definition: atoms.cpp:5
thermal
t_thermal thermal
Definition: thermal.cpp:5
TransitionProxy::Hi
qList::iterator Hi() const
Definition: transition.h:396
MALLOC
#define MALLOC(exp)
Definition: cddefines.h:501
lgFirst
static bool lgFirst
Definition: prt_linesum.cpp:16
EmissionProxy::pump
double & pump() const
Definition: emission.h:473
CollisionProxy::col_str
realnum & col_str() const
Definition: collision.h:167
t_dense::xIonDense
double xIonDense[LIMELM][LIMELM+1]
Definition: dense.h:125
t_atoms::DepLTELevels
double DepLTELevels[LIMLEVELN+1]
Definition: atoms.h:271
EmissionProxy::ColOvTot
double & ColOvTot() const
Definition: emission.h:573
EmissionProxy::Pelec_esc
realnum & Pelec_esc() const
Definition: emission.h:533
AulEscp
static double ** AulEscp
Definition: species2.cpp:29
EmissionProxy::Pesc
realnum & Pesc() const
Definition: emission.h:523
t_thermal::dCooldT
double dCooldT
Definition: thermal.h:119
TransitionProxy::EnergyK
realnum EnergyK() const
Definition: transition.h:73
pops
static double * pops
Definition: species2.cpp:28
depart
static double * depart
Definition: species2.cpp:28
t_atoms::PopLevels
double PopLevels[LIMLEVELN+1]
Definition: atoms.h:270
t_thermal::halfte
double halfte
Definition: thermal.h:123
EmissionProxy::Aul
realnum & Aul() const
Definition: emission.h:613
t_thermal::tsq1
double tsq1
Definition: thermal.h:122
AulDest
static double ** AulDest
Definition: species2.cpp:29
DEBUG_ENTRY
#define DEBUG_ENTRY(funcname)
Definition: cddefines.h:684
g
static double * g
Definition: species2.cpp:28