cloudy trunk
Loading...
Searching...
No Matches
collision.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 COLLISION_H_
5#define COLLISION_H_
6
7 /* these are flags for various colliders that are used across the code */
20
22{
23public:
24 long charge;
25 double *density;
27
29 {
30 charge = LONG_MAX;
31 density = NULL;
32 mass_amu = FLT_MAX;
33 }
34};
35
37{
38public:
39 vector<t_collider> list;
41 void init();
42};
43
45
47{
50public:
52 {
53 for( long i=0; i<ipNCOLLIDER; i++ )
54 m_rate_coef_ul[i] = 0.;
56
57 }
58
60 {
61 return m_rate_coef_ul;
62 }
63 const double *rate_coef_ul() const
64 {
65 return m_rate_coef_ul;
66 }
67 // nonthermal collisional excitiation rate [s-1]
73 {
74 return m_rate_lu_nontherm;
75 }
76};
77
78class CollisionList;
80{
83public:
84 explicit CollisionProxy(CollisionList *list, int index)
85 : m_list(list), m_index(index) {}
86
88 realnum &col_str() const;
90 double *rate_coef_ul_set() const;
91 const double *rate_coef_ul() const;
95 double &cool() const;
96 double &heat() const;
97
99 realnum ColUL( const ColliderList& colls ) const
100 {
101 double rate = 0.;
102 ASSERT( colls.list.size() == ipNCOLLIDER );
103 for( unsigned i = 0; i < colls.list.size(); ++i )
104 {
105 ASSERT( rate_coef_ul()[i] >= 0.0 );
106 rate += rate_coef_ul()[i] * (*colls.list[i].density);
107 }
108 ASSERT( rate >= 0. );
109 return (realnum) rate;
110 }
111
113 {
114 col_str() = other.col_str();
115 cool() = other.cool();
116 heat() = other.heat();
117 for (int i=0; i<ipNCOLLIDER; ++i)
118 {
119 rate_coef_ul_set()[i] = other.rate_coef_ul()[i];
120 }
122 }
123};
124
126{
127 vector<collision_rates> m_rates;
128 vector<realnum> m_col_str;
129 vector<double> m_cool;
130 vector<double> m_heat;
131 // DO NOT IMPEMENT
134public:
135 friend class CollisionProxy;
137 explicit CollisionList(size_t i)
138 {
139 resize(i);
140 }
141 explicit CollisionList() {}
143 {
144 return CollisionProxy(this,i);
145 }
146 size_t size(void) const
147 {
148 return m_rates.size();
149 }
150 void resize(size_t i)
151 {
152 m_rates.resize(i);
153 m_col_str.resize(i);
154 m_cool.resize(i);
155 m_heat.resize(i);
156 }
157 void reserve(size_t i)
158 {
159 m_rates.reserve(i);
160 m_col_str.reserve(i);
161 m_cool.reserve(i);
162 m_heat.reserve(i);
163 }
164};
165
168{
169 return m_list->m_col_str[m_index];
170}
171
173{
174 return m_list->m_rates[m_index].rate_coef_ul_set();
175}
176inline const double *CollisionProxy::rate_coef_ul() const
177{
178 return m_list->m_rates[m_index].rate_coef_ul();
179}
180// nonthermal collisional excitation rate [s-1]
182{
183 return m_list->m_rates[m_index].rate_lu_nontherm_set();
184}
186{
187 return m_list->m_rates[m_index].rate_lu_nontherm();
188}
189
190inline double &CollisionProxy::cool() const
191{
192 return m_list->m_cool[m_index];
193}
194inline double &CollisionProxy::heat() const
195{
196 return m_list->m_heat[m_index];
197}
198
202void CollisionJunk( const CollisionProxy & t );
203
207void CollisionZero( const CollisionProxy & t );
208
209#endif // COLLISION_H_
#define ASSERT(exp)
Definition cddefines.h:578
float realnum
Definition cddefines.h:103
vector< t_collider > list
Definition collision.h:39
vector< realnum > m_col_str
Definition collision.h:128
CollisionList(const CollisionList &)
vector< double > m_heat
Definition collision.h:130
vector< double > m_cool
Definition collision.h:129
void reserve(size_t i)
Definition collision.h:157
vector< collision_rates > m_rates
Definition collision.h:127
friend class CollisionProxy
Definition collision.h:135
CollisionList(size_t i)
Definition collision.h:137
size_t size(void) const
Definition collision.h:146
CollisionProxy operator[](size_t i)
Definition collision.h:142
CollisionList & operator=(const CollisionList &)
CollisionProxy reference
Definition collision.h:136
void resize(size_t i)
Definition collision.h:150
const double * rate_coef_ul() const
Definition collision.h:176
void copy(CollisionProxy other)
Definition collision.h:112
CollisionProxy(CollisionList *list, int index)
Definition collision.h:84
double & cool() const
Definition collision.h:190
realnum & col_str() const
Definition collision.h:167
realnum rate_lu_nontherm() const
Definition collision.h:185
double & heat() const
Definition collision.h:194
realnum & rate_lu_nontherm_set() const
Definition collision.h:181
realnum ColUL(const ColliderList &colls) const
Definition collision.h:99
CollisionList * m_list
Definition collision.h:81
double * rate_coef_ul_set() const
Definition collision.h:172
double * rate_coef_ul_set()
Definition collision.h:59
realnum m_rate_lu_nontherm
Definition collision.h:49
double m_rate_coef_ul[ipNCOLLIDER]
Definition collision.h:48
realnum & rate_lu_nontherm_set()
Definition collision.h:68
const double * rate_coef_ul() const
Definition collision.h:63
realnum rate_lu_nontherm() const
Definition collision.h:72
double * density
Definition collision.h:25
realnum mass_amu
Definition collision.h:26
long charge
Definition collision.h:24
ColliderList colliders
Definition collision.cpp:57
collider
Definition collision.h:8
@ ipATOM_H
Definition collision.h:13
@ ipALPHA
Definition collision.h:12
@ ipH2_ORTHO
Definition collision.h:15
@ ipHE_PLUS
Definition collision.h:11
@ ipH2_PARA
Definition collision.h:16
@ ipH2
Definition collision.h:17
@ ipPROTON
Definition collision.h:10
@ ipNCOLLIDER
Definition collision.h:18
@ ipELECTRON
Definition collision.h:9
@ ipATOM_HE
Definition collision.h:14
void CollisionJunk(const CollisionProxy &t)
Definition collision.cpp:60
void CollisionZero(const CollisionProxy &t)
Definition collision.cpp:81