cloudy trunk
Loading...
Searching...
No Matches
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}
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)
#define N_SEQ_BORON
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)
t_atoms atoms
Definition atoms.cpp:5
const long LIMLEVELN
Definition atoms.h:237
#define ASSERT(exp)
Definition cddefines.h:578
#define MALLOC(exp)
Definition cddefines.h:501
float realnum
Definition cddefines.h:103
sys_float SDIV(sys_float x)
Definition cddefines.h:952
#define DEBUG_ENTRY(funcname)
Definition cddefines.h:684
double & cool() const
Definition collision.h:190
realnum & col_str() const
Definition collision.h:167
double & heat() const
Definition collision.h:194
double & ColOvTot() const
Definition emission.h:573
double & PopOpc() const
Definition emission.h:603
double & xIntensity() const
Definition emission.h:483
realnum & Pelec_esc() const
Definition emission.h:533
realnum & Aul() const
Definition emission.h:613
double & pump() const
Definition emission.h:473
realnum & Pdest() const
Definition emission.h:543
double & phots() const
Definition emission.h:503
CollisionProxy Coll() const
Definition transition.h:424
realnum & WLAng() const
Definition transition.h:429
realnum EnergyErg() const
Definition transition.h:78
qList::iterator Lo() const
Definition transition.h:392
realnum EnergyK() const
Definition transition.h:73
qList::iterator Hi() const
Definition transition.h:396
EmissionList::reference Emis() const
Definition transition.h:408
void CoolAdd(const char *chLabel, realnum lambda, double cool)
Definition cool_etc.cpp:13
t_dense dense
Definition dense.cpp:24
static bool lgFirst
static double ** AulEscp
Definition species2.cpp:29
static double * pops
Definition species2.cpp:28
static double ** col_str
Definition species2.cpp:29
static double * depart
Definition species2.cpp:28
static double ** AulPump
Definition species2.cpp:29
static double * g
Definition species2.cpp:28
static double ** AulDest
Definition species2.cpp:29
static double ** CollRate
Definition species2.cpp:29
t_thermal thermal
Definition thermal.cpp:5