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-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_
vector< realnum > m_gf
Definition: emission.h:296
long int & ipFine() const
Definition: emission.h:413
vector< realnum > m_dampXvel
Definition: emission.h:294
void copy(const EmissionProxy &other)
Definition: emission.h:633
double & ots() const
Definition: emission.h:623
EmissionProxy(EmissionList *list, int index)
Definition: emission.h:26
int & iRedisFun() const
Definition: emission.h:403
realnum & opacity() const
Definition: emission.h:593
realnum & Pelec_esc() const
Definition: emission.h:533
vector< int > m_iRedisFun
Definition: emission.h:297
EmissionList * m_list
Definition: emission.h:22
realnum Aul() const
Definition: emission.h:618
double phots() const
Definition: emission.h:508
realnum & TauTot() const
Definition: emission.h:433
long int ipFine() const
Definition: emission.h:418
vector< int > m_ipTran
Definition: emission.h:312
EmissionConstProxy(const EmissionList *list, int index)
Definition: emission.h:162
vector< long > m_ipFine
Definition: emission.h:298
double ColOvTot() const
Definition: emission.h:578
double ots() const
Definition: emission.h:628
vector< realnum > m_TauTot
Definition: emission.h:309
realnum TauTot() const
Definition: emission.h:438
TransitionListImpl * m_tlist
Definition: emission.h:289
const EmissionList * m_list
Definition: emission.h:158
realnum TauCon() const
Definition: emission.h:458
double & phots() const
Definition: emission.h:503
void check() const
Definition: emission.h:166
double pump() const
Definition: emission.h:478
vector< double > m_PopOpc
Definition: emission.h:305
TransitionProxy Tran() const
Definition: transition.h:475
int ipTran() const
Definition: emission.h:498
vector< realnum > m_TauIn
Definition: emission.h:308
ProxyIterator< EmissionConstProxy, EmissionConstProxy > const_iterator
Definition: emission.h:155
double xIntensity() const
Definition: emission.h:488
int & ipTran() const
Definition: emission.h:493
ProxyIterator< EmissionProxy, EmissionConstProxy > iterator
Definition: emission.h:18
size_t size(void) const
Definition: emission.h:328
EmissionProxy::iterator iterator
Definition: emission.h:317
EmissionConstProxy::iterator const_iterator
Definition: emission.h:318
vector< realnum > m_Pesc
Definition: emission.h:302
vector< double > m_ots
Definition: emission.h:300
realnum & gf() const
Definition: emission.h:513
realnum Pdest() const
Definition: emission.h:548
iter_track_basic< realnum > & TauTrack() const
Definition: emission.h:443
realnum & dampXvel() const
Definition: emission.h:553
EmissionList(TransitionListImpl *tlist, size_t i)
Definition: emission.h:319
double & xIntensity() const
Definition: emission.h:483
const_iterator end() const
Definition: emission.h:345
void EmLineJunk(EmissionList::reference t)
Definition: emission.cpp:12
iterator end()
Definition: emission.h:341
realnum TauIn() const
Definition: emission.h:428
realnum Pelec_esc() const
Definition: emission.h:538
float realnum
Definition: cddefines.h:107
realnum & Pesc() const
Definition: emission.h:523
vector< realnum > m_opacity
Definition: emission.h:299
vector< realnum > m_damp
Definition: emission.h:293
void check() const
Definition: emission.h:30
realnum AutoIonizFrac() const
Definition: emission.h:588
const EmissionList list_type
Definition: emission.h:153
realnum damp() const
Definition: emission.h:568
vector< double > m_pump
Definition: emission.h:306
realnum Pesc_total() const
Definition: emission.h:250
vector< realnum > m_FracInwd
Definition: emission.h:295
vector< double > m_ColOvTot
Definition: emission.h:292
void resize(size_t i)
Definition: emission.h:365
vector< realnum > m_AutoIonizFrac
Definition: emission.h:291
realnum dampXvel() const
Definition: emission.h:558
EmissionList list_type
Definition: emission.h:17
ProxyIterator< EmissionConstProxy, EmissionConstProxy > iterator
Definition: emission.h:154
realnum & Pdest() const
Definition: emission.h:543
vector< double > m_phots
Definition: emission.h:304
int iRedisFun() const
Definition: emission.h:408
#define ASSERT(exp)
Definition: cddefines.h:582
vector< iter_track_basic< realnum > > m_TauTrack
Definition: emission.h:310
void EmLineZero(EmissionList::reference t)
Definition: emission.cpp:92
realnum & TauCon() const
Definition: emission.h:453
vector< realnum > m_Pelec_esc
Definition: emission.h:303
realnum Pesc_total() const
Definition: emission.h:114
EmissionList(TransitionListImpl *tlist)
Definition: emission.h:323
double & PopOpc() const
Definition: emission.h:603
void copy(const EmissionConstProxy &other)
friend class EmissionProxy
Definition: emission.h:313
vector< realnum > m_TauCon
Definition: emission.h:307
vector< realnum > m_Aul
Definition: emission.h:290
void TauZero(EmissionList::reference t)
Definition: emission.cpp:73
realnum & damp() const
Definition: emission.h:563
ProxyIterator< EmissionConstProxy, EmissionConstProxy > const_iterator
Definition: emission.h:19
double & ColOvTot() const
Definition: emission.h:573
TransitionConstProxy Tran() const
Definition: transition.h:481
const iter_track_basic< realnum > & TauTrack() const
Definition: emission.h:448
realnum FracInwd() const
Definition: emission.h:468
realnum & AutoIonizFrac() const
Definition: emission.h:583
vector< realnum > m_Pdest
Definition: emission.h:301
reference operator[](size_t i)
Definition: emission.h:324
const_iterator begin() const
Definition: emission.h:337
realnum & FracInwd() const
Definition: emission.h:463
iterator begin()
Definition: emission.h:333
realnum Pesc() const
Definition: emission.h:528
realnum opacity() const
Definition: emission.h:598
realnum & Aul() const
Definition: emission.h:613
EmissionProxy reference
Definition: emission.h:316
double PopOpc() const
Definition: emission.h:608
vector< double > m_xIntensity
Definition: emission.h:311
realnum gf() const
Definition: emission.h:518
realnum & TauIn() const
Definition: emission.h:423
double & pump() const
Definition: emission.h:473