cloudy  trunk
emission.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 EMISSION_H_
5 #define EMISSION_H_
6 
7 #include "proxy_iterator.h"
8 
10 class TransitionProxy;
12 class EmissionList;
13 class EmissionConstProxy;
15 {
16 public:
20 private:
23  int m_index;
24 public:
25  explicit EmissionProxy() : m_list(NULL), m_index(-1) {}
26  explicit EmissionProxy(EmissionList *list, int index) :
27  m_list(list), m_index(index) {}
28  void copy(const EmissionProxy& other);
29 
30  void check() const
31  {
32  ASSERT(ipTran() >= 0);
33  }
34 
43  int &iRedisFun() const;
44 
46  long int &ipFine() const;
47 
61  realnum &TauIn() const;
62 
73  realnum &TauTot() const;
74 
80 
86  realnum &TauCon() const;
87 
89  realnum &FracInwd() const;
90 
93  double &pump() const;
94 
96  double &xIntensity() const;
97 
99  double &phots() const;
100 
102  realnum &gf() const;
103 
105  realnum &Pesc() const;
106 
108  realnum &Pelec_esc() const;
109 
111  realnum &Pdest() const;
112 
114  realnum Pesc_total() const { return Pesc() + Pelec_esc(); }
115 
119  realnum &dampXvel() const;
120 
122  realnum &damp() const;
123 
125  double &ColOvTot() const;
126 
128  realnum &AutoIonizFrac() const;
129 
135  realnum &opacity() const;
136 
138  double &PopOpc() const;
139 
141  realnum &Aul() const;
142 
144  double &ots() const;
145 
146  int &ipTran() const;
147 
148  TransitionProxy Tran() const;
149 };
151 {
152 public:
153  typedef const EmissionList list_type;
156 private:
159  int m_index;
160 public:
161  explicit EmissionConstProxy() : m_list(NULL), m_index(-1) {}
162  explicit EmissionConstProxy(const EmissionList *list, int index) :
163  m_list(list), m_index(index) {}
164  void copy(const EmissionConstProxy& other);
165 
166  void check() const
167  {
168  ASSERT(ipTran() >= 0);
169  }
170 
179  int iRedisFun() const;
180 
182  long int ipFine() const;
183 
197  realnum TauIn() const;
198 
209  realnum TauTot() const;
210 
215  const iter_track_basic<realnum>& TauTrack() const;
216 
222  realnum TauCon() const;
223 
225  realnum FracInwd() const;
226 
229  double pump() const;
230 
232  double xIntensity() const;
233 
235  double phots() const;
236 
238  realnum gf() const;
239 
241  realnum Pesc() const;
242 
244  realnum Pelec_esc() const;
245 
247  realnum Pdest() const;
248 
250  realnum Pesc_total() const { return Pesc() + Pelec_esc(); }
251 
255  realnum dampXvel() const;
256 
258  realnum damp() const;
259 
261  double ColOvTot() const;
262 
264  realnum AutoIonizFrac() const;
265 
271  realnum opacity() const;
272 
274  double PopOpc() const;
275 
277  realnum Aul() const;
278 
280  double ots() const;
281 
282  int ipTran() const;
283 
284  TransitionConstProxy Tran() const;
285 };
286 
288 {
290  vector<realnum> m_Aul;
291  vector<realnum> m_AutoIonizFrac;
292  vector<double> m_ColOvTot;
293  vector<realnum> m_damp;
294  vector<realnum> m_dampXvel;
295  vector<realnum> m_FracInwd;
296  vector<realnum> m_gf;
297  vector<int> m_iRedisFun;
298  vector<long> m_ipFine;
299  vector<realnum> m_opacity;
300  vector<double> m_ots;
301  vector<realnum> m_Pdest;
302  vector<realnum> m_Pesc;
303  vector<realnum> m_Pelec_esc;
304  vector<double> m_phots;
305  vector<double> m_PopOpc;
306  vector<double> m_pump;
307  vector<realnum> m_TauCon;
308  vector<realnum> m_TauIn;
309  vector<realnum> m_TauTot;
310  vector<iter_track_basic<realnum> > m_TauTrack;
311  vector<double> m_xIntensity;
312  vector<int> m_ipTran;
313  friend class EmissionProxy;
314  friend class EmissionConstProxy;
315 public:
319  explicit EmissionList(TransitionListImpl *tlist, size_t i) : m_tlist(tlist)
320  {
321  resize(i);
322  }
323  explicit EmissionList(TransitionListImpl *tlist) : m_tlist(tlist) {}
325  {
326  return EmissionProxy(this,i);
327  }
328  size_t size(void) const
329  {
330  return m_Aul.size();
331  }
332  void resize(size_t i);
334  {
335  return iterator(this,0);
336  }
338  {
339  return const_iterator(this,0);
340  }
342  {
343  return iterator(this,size());
344  }
346  {
347  return const_iterator(this,size());
348  }
349 };
350 
364 
365 inline void EmissionList::resize(size_t i)
366 {
367  size_t oldsize = m_Aul.size();
368  m_Aul.resize(i);
369  m_AutoIonizFrac.resize(i);
370  m_ColOvTot.resize(i);
371  m_damp.resize(i);
372  m_dampXvel.resize(i);
373  m_gf.resize(i);
374  m_FracInwd.resize(i);
375  m_ipFine.resize(i);
376  m_iRedisFun.resize(i);
377  m_ots.resize(i);
378  m_opacity.resize(i);
379  m_Pdest.resize(i);
380  m_Pelec_esc.resize(i);
381  m_Pesc.resize(i);
382  m_phots.resize(i);
383  m_PopOpc.resize(i);
384  m_TauCon.resize(i);
385  m_TauIn.resize(i);
386  m_TauTot.resize(i);
387  m_TauTrack.resize(i);
388  m_pump.resize(i);
389  m_xIntensity.resize(i);
390  m_ipTran.resize(i,-1);
391  for (size_t newelem=oldsize; newelem < size(); ++newelem)
392  {
393  EmLineJunk((*this)[newelem]);
394  /*
395  \todo 2 Does doing EmLineZero here defeat the purpose of EmLineJunk?
396  * maybe we should pass full set of Emis components, fill everything in
397  * here, and THEN use EmLineZero? */
398  EmLineZero((*this)[newelem]);
399  TauZero((*this)[newelem]);
400  }
401 }
402 
403 inline int &EmissionProxy::iRedisFun() const
404 {
405  return m_list->m_iRedisFun[m_index];
406 }
407 
409 {
410  return m_list->m_iRedisFun[m_index];
411 }
412 
413 inline long int &EmissionProxy::ipFine() const
414 {
415  return m_list->m_ipFine[m_index];
416 }
417 
418 inline long int EmissionConstProxy::ipFine() const
419 {
420  return m_list->m_ipFine[m_index];
421 }
422 
424 {
425  return m_list->m_TauIn[m_index];
426 }
427 
429 {
430  return m_list->m_TauIn[m_index];
431 }
432 
434 {
435  return m_list->m_TauTot[m_index];
436 }
437 
439 {
440  return m_list->m_TauTot[m_index];
441 }
442 
444 {
445  return m_list->m_TauTrack[m_index];
446 }
447 
449 {
450  return m_list->m_TauTrack[m_index];
451 }
452 
454 {
455  return m_list->m_TauCon[m_index];
456 }
457 
459 {
460  return m_list->m_TauCon[m_index];
461 }
462 
464 {
465  return m_list->m_FracInwd[m_index];
466 }
467 
469 {
470  return m_list->m_FracInwd[m_index];
471 }
472 
473 inline double &EmissionProxy::pump() const
474 {
475  return m_list->m_pump[m_index];
476 }
477 
478 inline double EmissionConstProxy::pump() const
479 {
480  return m_list->m_pump[m_index];
481 }
482 
483 inline double &EmissionProxy::xIntensity() const
484 {
485  return m_list->m_xIntensity[m_index];
486 }
487 
488 inline double EmissionConstProxy::xIntensity() const
489 {
490  return m_list->m_xIntensity[m_index];
491 }
492 
493 inline int &EmissionProxy::ipTran() const
494 {
495  return m_list->m_ipTran[m_index];
496 }
497 
498 inline int EmissionConstProxy::ipTran() const
499 {
500  return m_list->m_ipTran[m_index];
501 }
502 
503 inline double &EmissionProxy::phots() const
504 {
505  return m_list->m_phots[m_index];
506 }
507 
508 inline double EmissionConstProxy::phots() const
509 {
510  return m_list->m_phots[m_index];
511 }
512 
513 inline realnum &EmissionProxy::gf() const
514 {
515  return m_list->m_gf[m_index];
516 }
517 
519 {
520  return m_list->m_gf[m_index];
521 }
522 
524 {
525  return m_list->m_Pesc[m_index];
526 }
527 
529 {
530  return m_list->m_Pesc[m_index];
531 }
532 
534 {
535  return m_list->m_Pelec_esc[m_index];
536 }
537 
539 {
540  return m_list->m_Pelec_esc[m_index];
541 }
542 
544 {
545  return m_list->m_Pdest[m_index];
546 }
547 
549 {
550  return m_list->m_Pdest[m_index];
551 }
552 
554 {
555  return m_list->m_dampXvel[m_index];
556 }
557 
559 {
560  return m_list->m_dampXvel[m_index];
561 }
562 
564 {
565  return m_list->m_damp[m_index];
566 }
567 
569 {
570  return m_list->m_damp[m_index];
571 }
572 
573 inline double &EmissionProxy::ColOvTot() const
574 {
575  return m_list->m_ColOvTot[m_index];
576 }
577 
578 inline double EmissionConstProxy::ColOvTot() const
579 {
580  return m_list->m_ColOvTot[m_index];
581 }
582 
584 {
585  return m_list->m_AutoIonizFrac[m_index];
586 }
587 
589 {
590  return m_list->m_AutoIonizFrac[m_index];
591 }
592 
594 {
595  return m_list->m_opacity[m_index];
596 }
597 
599 {
600  return m_list->m_opacity[m_index];
601 }
602 
603 inline double &EmissionProxy::PopOpc() const
604 {
605  return m_list->m_PopOpc[m_index];
606 }
607 
608 inline double EmissionConstProxy::PopOpc() const
609 {
610  return m_list->m_PopOpc[m_index];
611 }
612 
614 {
615  return m_list->m_Aul[m_index];
616 }
617 
619 {
620  return m_list->m_Aul[m_index];
621 }
622 
623 inline double &EmissionProxy::ots() const
624 {
625  return m_list->m_ots[m_index];
626 }
627 
628 inline double EmissionConstProxy::ots() const
629 {
630  return m_list->m_ots[m_index];
631 }
632 
633 inline void EmissionProxy::copy(const EmissionProxy& other)
634 {
635  iRedisFun() = other.iRedisFun();
636  ipFine() = other.ipFine();
637  TauIn() = other.TauIn();
638  TauTot() = other.TauTot();
639  TauCon() = other.TauCon();
640  FracInwd() = other.FracInwd();
641  gf() = other.gf();
642  Pesc() = other.Pesc();
643  Pelec_esc() = other.Pelec_esc();
644  Pdest() = other.Pdest();
645  dampXvel() = other.dampXvel();
646  damp() = other.damp();
647  AutoIonizFrac() = other.AutoIonizFrac();
648  opacity() = other.opacity();
649  Aul() = other.Aul();
650  TauTrack() = other.TauTrack();
651  pump() = other.pump();
652  xIntensity() = other.xIntensity();
653  phots() = other.phots();
654  ColOvTot() = other.ColOvTot();
655  PopOpc() = other.PopOpc();
656  ots() = other.ots();
657  ipTran() = other.ipTran();
658 }
659 
660 #endif // EMISSION_H_
EmissionProxy::TauCon
realnum & TauCon() const
Definition: emission.h:453
EmissionList::m_dampXvel
vector< realnum > m_dampXvel
Definition: emission.h:294
EmissionConstProxy::copy
void copy(const EmissionConstProxy &other)
EmissionList::m_xIntensity
vector< double > m_xIntensity
Definition: emission.h:311
EmissionProxy::AutoIonizFrac
realnum & AutoIonizFrac() const
Definition: emission.h:583
EmissionConstProxy::TauTrack
const iter_track_basic< realnum > & TauTrack() const
Definition: emission.h:448
EmissionProxy::EmissionProxy
EmissionProxy(EmissionList *list, int index)
Definition: emission.h:26
EmissionConstProxy::opacity
realnum opacity() const
Definition: emission.h:598
EmissionConstProxy::Pesc_total
realnum Pesc_total() const
Definition: emission.h:250
EmissionConstProxy::phots
double phots() const
Definition: emission.h:508
iter_track_basic
Definition: iter_track.h:231
TransitionConstProxy
Definition: transition.h:122
EmissionConstProxy::Aul
realnum Aul() const
Definition: emission.h:618
EmissionProxy::xIntensity
double & xIntensity() const
Definition: emission.h:483
EmissionProxy::ipFine
long int & ipFine() const
Definition: emission.h:413
EmissionList::m_iRedisFun
vector< int > m_iRedisFun
Definition: emission.h:297
realnum
float realnum
Definition: cddefines.h:103
EmissionConstProxy::ipFine
long int ipFine() const
Definition: emission.h:418
EmissionProxy::PopOpc
double & PopOpc() const
Definition: emission.h:603
EmissionProxy::iRedisFun
int & iRedisFun() const
Definition: emission.h:403
EmissionConstProxy::Pdest
realnum Pdest() const
Definition: emission.h:548
EmissionProxy::dampXvel
realnum & dampXvel() const
Definition: emission.h:553
EmissionConstProxy
Definition: emission.h:150
EmissionConstProxy::EmissionConstProxy
EmissionConstProxy()
Definition: emission.h:161
EmLineJunk
void EmLineJunk(EmissionList::reference t)
Definition: emission.cpp:12
EmissionConstProxy::Tran
TransitionConstProxy Tran() const
Definition: transition.h:481
EmissionConstProxy::ipTran
int ipTran() const
Definition: emission.h:498
EmLineZero
void EmLineZero(EmissionList::reference t)
Definition: emission.cpp:92
ProxyIterator
Definition: proxy_iterator.h:58
EmissionConstProxy::dampXvel
realnum dampXvel() const
Definition: emission.h:558
EmissionConstProxy::PopOpc
double PopOpc() const
Definition: emission.h:608
EmissionList::m_ipFine
vector< long > m_ipFine
Definition: emission.h:298
EmissionList::m_tlist
TransitionListImpl * m_tlist
Definition: emission.h:289
EmissionProxy::Pdest
realnum & Pdest() const
Definition: emission.h:543
EmissionList::iterator
EmissionProxy::iterator iterator
Definition: emission.h:317
EmissionList
Definition: emission.h:287
EmissionConstProxy::Pesc
realnum Pesc() const
Definition: emission.h:528
ASSERT
#define ASSERT(exp)
Definition: cddefines.h:578
EmissionProxy::copy
void copy(const EmissionProxy &other)
Definition: emission.h:633
EmissionProxy::TauIn
realnum & TauIn() const
Definition: emission.h:423
EmissionList::m_ipTran
vector< int > m_ipTran
Definition: emission.h:312
TransitionProxy
Definition: transition.h:23
EmissionProxy::iterator
ProxyIterator< EmissionProxy, EmissionConstProxy > iterator
Definition: emission.h:18
EmissionList::m_PopOpc
vector< double > m_PopOpc
Definition: emission.h:305
EmissionList::begin
const_iterator begin() const
Definition: emission.h:337
EmissionList::m_TauTot
vector< realnum > m_TauTot
Definition: emission.h:309
EmissionProxy::m_list
EmissionList * m_list
Definition: emission.h:22
EmissionList::m_ots
vector< double > m_ots
Definition: emission.h:300
TransitionListImpl
Definition: transition.h:202
EmissionList::m_Pesc
vector< realnum > m_Pesc
Definition: emission.h:302
EmissionConstProxy::m_index
int m_index
Definition: emission.h:159
EmissionList::m_damp
vector< realnum > m_damp
Definition: emission.h:293
EmissionProxy::phots
double & phots() const
Definition: emission.h:503
EmissionList::m_pump
vector< double > m_pump
Definition: emission.h:306
EmissionConstProxy::list_type
const typedef EmissionList list_type
Definition: emission.h:153
EmissionList::m_TauIn
vector< realnum > m_TauIn
Definition: emission.h:308
EmissionProxy::ipTran
int & ipTran() const
Definition: emission.h:493
EmissionList::EmissionList
EmissionList(TransitionListImpl *tlist, size_t i)
Definition: emission.h:319
EmissionList::const_iterator
EmissionConstProxy::iterator const_iterator
Definition: emission.h:318
TauZero
void TauZero(EmissionList::reference t)
Definition: emission.cpp:73
EmissionConstProxy::Pelec_esc
realnum Pelec_esc() const
Definition: emission.h:538
EmissionProxy
Definition: emission.h:14
EmissionProxy::ots
double & ots() const
Definition: emission.h:623
EmissionList::m_phots
vector< double > m_phots
Definition: emission.h:304
EmissionList::m_opacity
vector< realnum > m_opacity
Definition: emission.h:299
EmissionProxy::TauTrack
iter_track_basic< realnum > & TauTrack() const
Definition: emission.h:443
EmissionProxy::pump
double & pump() const
Definition: emission.h:473
EmissionConstProxy::iRedisFun
int iRedisFun() const
Definition: emission.h:408
EmissionList::end
iterator end()
Definition: emission.h:341
EmissionList::m_FracInwd
vector< realnum > m_FracInwd
Definition: emission.h:295
EmissionList::resize
void resize(size_t i)
Definition: emission.h:365
EmissionList::end
const_iterator end() const
Definition: emission.h:345
EmissionProxy::const_iterator
ProxyIterator< EmissionConstProxy, EmissionConstProxy > const_iterator
Definition: emission.h:19
EmissionList::m_TauCon
vector< realnum > m_TauCon
Definition: emission.h:307
EmissionProxy::ColOvTot
double & ColOvTot() const
Definition: emission.h:573
EmissionProxy::Pesc_total
realnum Pesc_total() const
Definition: emission.h:114
EmissionConstProxy::const_iterator
ProxyIterator< EmissionConstProxy, EmissionConstProxy > const_iterator
Definition: emission.h:155
EmissionConstProxy::xIntensity
double xIntensity() const
Definition: emission.h:488
EmissionProxy::Pelec_esc
realnum & Pelec_esc() const
Definition: emission.h:533
EmissionList::m_Pelec_esc
vector< realnum > m_Pelec_esc
Definition: emission.h:303
EmissionList::EmissionList
EmissionList(TransitionListImpl *tlist)
Definition: emission.h:323
proxy_iterator.h
EmissionConstProxy::TauTot
realnum TauTot() const
Definition: emission.h:438
EmissionList::size
size_t size(void) const
Definition: emission.h:328
EmissionList::m_ColOvTot
vector< double > m_ColOvTot
Definition: emission.h:292
EmissionConstProxy::EmissionConstProxy
EmissionConstProxy(const EmissionList *list, int index)
Definition: emission.h:162
EmissionConstProxy::FracInwd
realnum FracInwd() const
Definition: emission.h:468
EmissionProxy::Pesc
realnum & Pesc() const
Definition: emission.h:523
EmissionList::EmissionProxy
friend class EmissionProxy
Definition: emission.h:313
EmissionProxy::Tran
TransitionProxy Tran() const
Definition: transition.h:475
EmissionProxy::gf
realnum & gf() const
Definition: emission.h:513
EmissionList::m_AutoIonizFrac
vector< realnum > m_AutoIonizFrac
Definition: emission.h:291
EmissionConstProxy::ColOvTot
double ColOvTot() const
Definition: emission.h:578
EmissionProxy::EmissionProxy
EmissionProxy()
Definition: emission.h:25
EmissionConstProxy::pump
double pump() const
Definition: emission.h:478
EmissionProxy::damp
realnum & damp() const
Definition: emission.h:563
EmissionList::m_TauTrack
vector< iter_track_basic< realnum > > m_TauTrack
Definition: emission.h:310
EmissionList::reference
EmissionProxy reference
Definition: emission.h:316
EmissionConstProxy::TauCon
realnum TauCon() const
Definition: emission.h:458
EmissionProxy::list_type
EmissionList list_type
Definition: emission.h:17
EmissionConstProxy::ots
double ots() const
Definition: emission.h:628
EmissionProxy::TauTot
realnum & TauTot() const
Definition: emission.h:433
EmissionList::m_Pdest
vector< realnum > m_Pdest
Definition: emission.h:301
EmissionList::begin
iterator begin()
Definition: emission.h:333
EmissionList::m_Aul
vector< realnum > m_Aul
Definition: emission.h:290
EmissionProxy::opacity
realnum & opacity() const
Definition: emission.h:593
EmissionProxy::Aul
realnum & Aul() const
Definition: emission.h:613
EmissionConstProxy::TauIn
realnum TauIn() const
Definition: emission.h:428
EmissionProxy::m_index
int m_index
Definition: emission.h:23
EmissionProxy::FracInwd
realnum & FracInwd() const
Definition: emission.h:463
EmissionConstProxy::AutoIonizFrac
realnum AutoIonizFrac() const
Definition: emission.h:588
EmissionConstProxy::iterator
ProxyIterator< EmissionConstProxy, EmissionConstProxy > iterator
Definition: emission.h:154
EmissionList::m_gf
vector< realnum > m_gf
Definition: emission.h:296
EmissionConstProxy::gf
realnum gf() const
Definition: emission.h:518
EmissionList::operator[]
reference operator[](size_t i)
Definition: emission.h:324
EmissionConstProxy::damp
realnum damp() const
Definition: emission.h:568
EmissionConstProxy::m_list
const EmissionList * m_list
Definition: emission.h:158