cloudy  trunk
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
emission.h
Go to the documentation of this file.
1 /* This file is part of Cloudy and is copyright (C)1978-2017 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 #include "iter_track.h"
9 
10 class TransitionListImpl;
11 class TransitionProxy;
13 class EmissionList;
15 
16 //typedef iter_track_basic<realnum> tracker;
17 typedef secant_track tracker;
18 
20 {
21 public:
25 private:
28  int m_index;
29 public:
30  explicit EmissionProxy() : m_list(NULL), m_index(-1) {}
31  explicit EmissionProxy(EmissionList *list, int index) :
32  m_list(list), m_index(index) {}
33  void copy(const EmissionProxy& other);
34 
35  void check() const
36  {
37  ASSERT(ipTran() >= 0);
38  }
39 
48  int &iRedisFun() const;
49 
51  long int &ipFine() const;
52 
67  realnum &TauIn() const;
68 
73  realnum &TauInSpecific() const;
74 
85  realnum &TauTot() const;
86 
91  tracker& TauTrack() const;
92 
98  realnum &TauCon() const;
99 
101  realnum &FracInwd() const;
102 
105  double &pump() const;
106 
108  double &xIntensity() const;
109 
112  double &xObsIntensity() const;
113 
115  realnum &gf() const;
116 
118  realnum &Pesc() const;
119 
121  realnum &Pelec_esc() const;
122 
124  realnum &Pdest() const;
125 
127  realnum Pesc_total() const { return Pesc() + Pelec_esc(); }
128 
130  realnum Ploss() const { return Pesc_total()+Pdest(); }
131 
135  realnum &dampXvel() const;
136 
138  realnum &damp() const;
139 
141  double &ColOvTot() const;
142 
144  realnum &AutoIonizFrac() const;
145 
151  realnum &opacity() const;
152  // This is the summed opacity in a multiplet.
153  double &mult_opac() const;
154 
156  double &PopOpc() const;
157 
159  realnum &Aul() const;
160 
162  double &ots() const;
163 
164  int &ipTran() const;
165 
166  TransitionProxy Tran() const;
167 };
169 {
170 public:
171  typedef const EmissionList list_type;
174 private:
177  int m_index;
178 public:
179  explicit EmissionConstProxy() : m_list(NULL), m_index(-1) {}
180  explicit EmissionConstProxy(const EmissionList *list, int index) :
181  m_list(list), m_index(index) {}
182  void copy(const EmissionConstProxy& other);
183 
184  void check() const
185  {
186  ASSERT(ipTran() >= 0);
187  }
188 
197  int iRedisFun() const;
198 
200  long int ipFine() const;
201 
216  realnum TauIn() const;
217 
222  realnum TauInSpecific() const;
223 
234  realnum TauTot() const;
235 
240  const tracker& TauTrack() const;
241 
247  realnum TauCon() const;
248 
250  realnum FracInwd() const;
251 
254  double pump() const;
255 
257  double xIntensity() const;
258 
261  double xObsIntensity() const;
262 
264  realnum gf() const;
265 
267  realnum Pesc() const;
268 
270  realnum Pelec_esc() const;
271 
273  realnum Pdest() const;
274 
276  realnum Pesc_total() const { return Pesc() + Pelec_esc(); }
277 
279  realnum Ploss() const { return Pesc_total()+Pdest(); }
280 
284  realnum dampXvel() const;
285 
287  realnum damp() const;
288 
290  double ColOvTot() const;
291 
293  realnum AutoIonizFrac() const;
294 
300  realnum opacity() const;
301  // This is the summed opacity in a multiplet.
302  double mult_opac() const;
303 
305  double PopOpc() const;
306 
308  realnum Aul() const;
309 
311  double ots() const;
312 
313  int ipTran() const;
314 
315  TransitionConstProxy Tran() const;
316 };
317 
319 {
321  vector<realnum> m_Aul;
322  vector<realnum> m_AutoIonizFrac;
323  vector<double> m_ColOvTot;
324  vector<realnum> m_damp;
325  vector<realnum> m_dampXvel;
326  vector<realnum> m_FracInwd;
327  vector<realnum> m_gf;
328  vector<int> m_iRedisFun;
329  vector<long> m_ipFine;
330  vector<realnum> m_opacity;
331  vector<double> m_mult_opac;
332  vector<double> m_ots;
333  vector<realnum> m_Pdest;
334  vector<realnum> m_Pesc;
335  vector<realnum> m_Pelec_esc;
336  vector<double> m_PopOpc;
337  vector<double> m_pump;
338  vector<realnum> m_TauCon;
339  vector<realnum> m_TauIn;
340  vector<realnum> m_TauInSpecific;
341  vector<realnum> m_TauTot;
342  vector<tracker > m_TauTrack;
343  vector<double> m_xIntensity;
344  vector<double> m_xObsIntensity;
345  vector<int> m_ipTran;
346  friend class EmissionProxy;
347  friend class EmissionConstProxy;
348 public:
352  explicit EmissionList(TransitionListImpl *tlist, size_t i) : m_tlist(tlist)
353  {
354  resize(i);
355  }
356  explicit EmissionList(TransitionListImpl *tlist) : m_tlist(tlist) {}
358  {
359  return EmissionProxy(this,i);
360  }
361  size_t size(void) const
362  {
363  return m_Aul.size();
364  }
365  void resize(size_t i);
367  {
368  return iterator(this,0);
369  }
371  {
372  return const_iterator(this,0);
373  }
375  {
376  return iterator(this,size());
377  }
379  {
380  return const_iterator(this,size());
381  }
382 };
383 
397 
398 inline void EmissionList::resize(size_t i)
399 {
400  size_t oldsize = m_Aul.size();
401  m_Aul.resize(i);
402  m_AutoIonizFrac.resize(i);
403  m_ColOvTot.resize(i);
404  m_damp.resize(i);
405  m_dampXvel.resize(i);
406  m_gf.resize(i);
407  m_FracInwd.resize(i);
408  m_ipFine.resize(i);
409  m_iRedisFun.resize(i);
410  m_ots.resize(i);
411  m_opacity.resize(i);
412  m_mult_opac.resize(i);
413  m_Pdest.resize(i);
414  m_Pelec_esc.resize(i);
415  m_Pesc.resize(i);
416  m_PopOpc.resize(i);
417  m_TauCon.resize(i);
418  m_TauIn.resize(i);
419  m_TauInSpecific.resize(i);
420  m_TauTot.resize(i);
421  m_TauTrack.resize(i);
422  m_pump.resize(i);
423  m_xIntensity.resize(i);
424  m_xObsIntensity.resize(i);
425  m_ipTran.resize(i,-1);
426  for (size_t newelem=oldsize; newelem < size(); ++newelem)
427  {
428  EmLineJunk((*this)[newelem]);
429  /*
430  \todo 2 Does doing EmLineZero here defeat the purpose of EmLineJunk?
431  * maybe we should pass full set of Emis components, fill everything in
432  * here, and THEN use EmLineZero? */
433  EmLineZero((*this)[newelem]);
434  TauZero((*this)[newelem]);
435  }
436 }
437 
438 inline int &EmissionProxy::iRedisFun() const
439 {
440  return m_list->m_iRedisFun[m_index];
441 }
442 
444 {
445  return m_list->m_iRedisFun[m_index];
446 }
447 
448 inline long int &EmissionProxy::ipFine() const
449 {
450  return m_list->m_ipFine[m_index];
451 }
452 
453 inline long int EmissionConstProxy::ipFine() const
454 {
455  return m_list->m_ipFine[m_index];
456 }
457 
459 {
460  return m_list->m_TauIn[m_index];
461 }
462 
464 {
465  return m_list->m_TauIn[m_index];
466 }
467 
469 {
470  return m_list->m_TauInSpecific[m_index];
471 }
472 
474 {
475  return m_list->m_TauInSpecific[m_index];
476 }
477 
479 {
480  return m_list->m_TauTot[m_index];
481 }
482 
484 {
485  return m_list->m_TauTot[m_index];
486 }
487 
489 {
490  return m_list->m_TauTrack[m_index];
491 }
492 
494 {
495  return m_list->m_TauTrack[m_index];
496 }
497 
499 {
500  return m_list->m_TauCon[m_index];
501 }
502 
504 {
505  return m_list->m_TauCon[m_index];
506 }
507 
509 {
510  return m_list->m_FracInwd[m_index];
511 }
512 
514 {
515  return m_list->m_FracInwd[m_index];
516 }
517 
518 inline double &EmissionProxy::pump() const
519 {
520  return m_list->m_pump[m_index];
521 }
522 
523 inline double EmissionConstProxy::pump() const
524 {
525  return m_list->m_pump[m_index];
526 }
527 
528 inline double &EmissionProxy::xIntensity() const
529 {
530  return m_list->m_xIntensity[m_index];
531 }
532 
533 inline double &EmissionProxy::xObsIntensity() const
534 {
535  return m_list->m_xObsIntensity[m_index];
536 }
537 
538 inline double EmissionConstProxy::xIntensity() const
539 {
540  return m_list->m_xIntensity[m_index];
541 }
542 
544 {
545  return m_list->m_xObsIntensity[m_index];
546 }
547 
548 inline int &EmissionProxy::ipTran() const
549 {
550  return m_list->m_ipTran[m_index];
551 }
552 
553 inline int EmissionConstProxy::ipTran() const
554 {
555  return m_list->m_ipTran[m_index];
556 }
557 
558 inline realnum &EmissionProxy::gf() const
559 {
560  return m_list->m_gf[m_index];
561 }
562 
564 {
565  return m_list->m_gf[m_index];
566 }
567 
569 {
570  return m_list->m_Pesc[m_index];
571 }
572 
574 {
575  return m_list->m_Pesc[m_index];
576 }
577 
579 {
580  return m_list->m_Pelec_esc[m_index];
581 }
582 
584 {
585  return m_list->m_Pelec_esc[m_index];
586 }
587 
589 {
590  return m_list->m_Pdest[m_index];
591 }
592 
594 {
595  return m_list->m_Pdest[m_index];
596 }
597 
599 {
600  return m_list->m_dampXvel[m_index];
601 }
602 
604 {
605  return m_list->m_dampXvel[m_index];
606 }
607 
609 {
610  return m_list->m_damp[m_index];
611 }
612 
614 {
615  return m_list->m_damp[m_index];
616 }
617 
618 inline double &EmissionProxy::ColOvTot() const
619 {
620  return m_list->m_ColOvTot[m_index];
621 }
622 
623 inline double EmissionConstProxy::ColOvTot() const
624 {
625  return m_list->m_ColOvTot[m_index];
626 }
627 
629 {
630  return m_list->m_AutoIonizFrac[m_index];
631 }
632 
634 {
635  return m_list->m_AutoIonizFrac[m_index];
636 }
637 
639 {
640  return m_list->m_opacity[m_index];
641 }
642 
644 {
645  return m_list->m_opacity[m_index];
646 }
647 
648 inline double &EmissionProxy::mult_opac() const
649 {
650  return m_list->m_mult_opac[m_index];
651 }
652 
653 inline double EmissionConstProxy::mult_opac() const
654 {
655  return m_list->m_mult_opac[m_index];
656 }
657 
658 inline double &EmissionProxy::PopOpc() const
659 {
660  return m_list->m_PopOpc[m_index];
661 }
662 
663 inline double EmissionConstProxy::PopOpc() const
664 {
665  return m_list->m_PopOpc[m_index];
666 }
667 
669 {
670  return m_list->m_Aul[m_index];
671 }
672 
674 {
675  return m_list->m_Aul[m_index];
676 }
677 
678 inline double &EmissionProxy::ots() const
679 {
680  return m_list->m_ots[m_index];
681 }
682 
683 inline double EmissionConstProxy::ots() const
684 {
685  return m_list->m_ots[m_index];
686 }
687 
688 inline void EmissionProxy::copy(const EmissionProxy& other)
689 {
690  iRedisFun() = other.iRedisFun();
691  ipFine() = other.ipFine();
692  TauIn() = other.TauIn();
693  TauInSpecific() = other.TauInSpecific();
694  TauTot() = other.TauTot();
695  TauCon() = other.TauCon();
696  FracInwd() = other.FracInwd();
697  gf() = other.gf();
698  Pesc() = other.Pesc();
699  Pelec_esc() = other.Pelec_esc();
700  Pdest() = other.Pdest();
701  dampXvel() = other.dampXvel();
702  damp() = other.damp();
703  AutoIonizFrac() = other.AutoIonizFrac();
704  opacity() = other.opacity();
705  mult_opac() = other.mult_opac();
706  Aul() = other.Aul();
707  TauTrack() = other.TauTrack();
708  pump() = other.pump();
709  xIntensity() = other.xIntensity();
710  xObsIntensity() = other.xObsIntensity();
711  ColOvTot() = other.ColOvTot();
712  PopOpc() = other.PopOpc();
713  ots() = other.ots();
714  ipTran() = other.ipTran();
715 }
716 
717 #endif // EMISSION_H_
vector< realnum > m_gf
Definition: emission.h:327
long int & ipFine() const
Definition: emission.h:448
vector< realnum > m_dampXvel
Definition: emission.h:325
realnum & TauInSpecific() const
Definition: emission.h:468
void copy(const EmissionProxy &other)
Definition: emission.h:688
double & ots() const
Definition: emission.h:678
EmissionProxy(EmissionList *list, int index)
Definition: emission.h:31
int & iRedisFun() const
Definition: emission.h:438
realnum & opacity() const
Definition: emission.h:638
const tracker & TauTrack() const
Definition: emission.h:493
realnum & Pelec_esc() const
Definition: emission.h:578
realnum TauInSpecific() const
Definition: emission.h:473
double mult_opac() const
Definition: emission.h:653
vector< int > m_iRedisFun
Definition: emission.h:328
secant_track tracker
Definition: emission.h:14
EmissionList * m_list
Definition: emission.h:27
realnum Aul() const
Definition: emission.h:673
vector< double > m_xObsIntensity
Definition: emission.h:344
realnum & TauTot() const
Definition: emission.h:478
long int ipFine() const
Definition: emission.h:453
vector< int > m_ipTran
Definition: emission.h:345
EmissionConstProxy(const EmissionList *list, int index)
Definition: emission.h:180
vector< long > m_ipFine
Definition: emission.h:329
double ColOvTot() const
Definition: emission.h:623
double ots() const
Definition: emission.h:683
vector< double > m_mult_opac
Definition: emission.h:331
vector< realnum > m_TauTot
Definition: emission.h:341
realnum TauTot() const
Definition: emission.h:483
TransitionListImpl * m_tlist
Definition: emission.h:320
const EmissionList * m_list
Definition: emission.h:176
realnum TauCon() const
Definition: emission.h:503
void check() const
Definition: emission.h:184
double pump() const
Definition: emission.h:523
vector< double > m_PopOpc
Definition: emission.h:336
TransitionProxy Tran() const
Definition: transition.h:514
int ipTran() const
Definition: emission.h:553
vector< realnum > m_TauIn
Definition: emission.h:339
ProxyIterator< EmissionConstProxy, EmissionConstProxy > const_iterator
Definition: emission.h:173
double xIntensity() const
Definition: emission.h:538
int & ipTran() const
Definition: emission.h:548
ProxyIterator< EmissionProxy, EmissionConstProxy > iterator
Definition: emission.h:23
size_t size(void) const
Definition: emission.h:361
EmissionProxy::iterator iterator
Definition: emission.h:350
EmissionConstProxy::iterator const_iterator
Definition: emission.h:351
vector< realnum > m_Pesc
Definition: emission.h:334
vector< double > m_ots
Definition: emission.h:332
realnum & gf() const
Definition: emission.h:558
realnum Pdest() const
Definition: emission.h:593
vector< tracker > m_TauTrack
Definition: emission.h:342
realnum & dampXvel() const
Definition: emission.h:598
EmissionList(TransitionListImpl *tlist, size_t i)
Definition: emission.h:352
double & xIntensity() const
Definition: emission.h:528
realnum Ploss() const
Definition: emission.h:130
const_iterator end() const
Definition: emission.h:378
void EmLineJunk(EmissionList::reference t)
Definition: emission.cpp:12
iterator end()
Definition: emission.h:374
realnum TauIn() const
Definition: emission.h:463
realnum Pelec_esc() const
Definition: emission.h:583
float realnum
Definition: cddefines.h:124
realnum & Pesc() const
Definition: emission.h:568
vector< realnum > m_opacity
Definition: emission.h:330
vector< realnum > m_damp
Definition: emission.h:324
void check() const
Definition: emission.h:35
realnum AutoIonizFrac() const
Definition: emission.h:633
const EmissionList list_type
Definition: emission.h:171
realnum damp() const
Definition: emission.h:613
vector< double > m_pump
Definition: emission.h:337
realnum Pesc_total() const
Definition: emission.h:276
vector< realnum > m_FracInwd
Definition: emission.h:326
vector< double > m_ColOvTot
Definition: emission.h:323
vector< realnum > m_TauInSpecific
Definition: emission.h:340
realnum Ploss() const
Definition: emission.h:279
void resize(size_t i)
Definition: emission.h:398
vector< realnum > m_AutoIonizFrac
Definition: emission.h:322
realnum dampXvel() const
Definition: emission.h:603
EmissionList list_type
Definition: emission.h:22
ProxyIterator< EmissionConstProxy, EmissionConstProxy > iterator
Definition: emission.h:172
realnum & Pdest() const
Definition: emission.h:588
int iRedisFun() const
Definition: emission.h:443
#define ASSERT(exp)
Definition: cddefines.h:617
void EmLineZero(EmissionList::reference t)
Definition: emission.cpp:93
realnum & TauCon() const
Definition: emission.h:498
vector< realnum > m_Pelec_esc
Definition: emission.h:335
realnum Pesc_total() const
Definition: emission.h:127
EmissionList(TransitionListImpl *tlist)
Definition: emission.h:356
tracker & TauTrack() const
Definition: emission.h:488
double xObsIntensity() const
Definition: emission.h:543
double & mult_opac() const
Definition: emission.h:648
double & PopOpc() const
Definition: emission.h:658
void copy(const EmissionConstProxy &other)
friend class EmissionProxy
Definition: emission.h:346
vector< realnum > m_TauCon
Definition: emission.h:338
vector< realnum > m_Aul
Definition: emission.h:321
void TauZero(EmissionList::reference t)
Definition: emission.cpp:73
realnum & damp() const
Definition: emission.h:608
ProxyIterator< EmissionConstProxy, EmissionConstProxy > const_iterator
Definition: emission.h:24
double & ColOvTot() const
Definition: emission.h:618
double & xObsIntensity() const
Definition: emission.h:533
TransitionConstProxy Tran() const
Definition: transition.h:520
realnum FracInwd() const
Definition: emission.h:513
realnum & AutoIonizFrac() const
Definition: emission.h:628
vector< realnum > m_Pdest
Definition: emission.h:333
reference operator[](size_t i)
Definition: emission.h:357
const_iterator begin() const
Definition: emission.h:370
realnum & FracInwd() const
Definition: emission.h:508
iterator begin()
Definition: emission.h:366
realnum Pesc() const
Definition: emission.h:573
realnum opacity() const
Definition: emission.h:643
realnum & Aul() const
Definition: emission.h:668
EmissionProxy reference
Definition: emission.h:349
double PopOpc() const
Definition: emission.h:663
vector< double > m_xIntensity
Definition: emission.h:343
realnum gf() const
Definition: emission.h:563
realnum & TauIn() const
Definition: emission.h:458
double & pump() const
Definition: emission.h:518