changa 3.5
Loading...
Searching...
No Matches
imf.h
1#ifndef IMF_HINCLUDED
2#define IMF_HINCLUDED
3
4// Please see
5// http://charm.cs.uiuc.edu/manuals/html/charm++/3_17.html#SECTION000317400000000000000
6// for details about PUPing child and parent classes.
7
8// http://www.parashift.com/c++-faq-lite/abcs.html#faq-22.5
9// for copy constructors in inherited abstract classes and a
10// description of pure virtual functions
11
15
21class IMF : public PUP::able {
22
23 public:
24 IMF() {};
28 virtual double returnimf(double mass) const = 0;
32 IMF(CkMigrateMessage *m) : PUP::able(m) {}
34 virtual void pup(PUP::er &p) = 0;
37 virtual double CumNumber(double mass) = 0;
42 virtual double CumNumberStoch(double mass, double lownorm, double *hmstars, double cutmass) = 0;
45 virtual double CumMass(double mass) = 0;
50 virtual double CumMassStoch(double mass, double lownorm, double *hmstars, double cutmass) = 0;
52 virtual double DrawStar(double num) = 0;
54 virtual IMF* clone() const = 0;
55 ~IMF() {};
56};
57
58
72
73class MillerScalo : public IMF {
74
75 double a1, b1, m1;
76 double a2, b2, m2;
77 double a3, b3, m3;
78 double mmax;
79
80 public:
81 /* normalization, index, minimum mass */
82 MillerScalo() {
83 a1=42.0; b1=-0.4;m1=0.1; /* parameters from Ap.J. Supp., 41,1979 */
84 a2=42.0;b2=-1.5;m2=1.0; /* This is discontinuous, but is what */
85 a3=240.0;b3=-2.3;m3=10.0;/* they report in paper, so we leave it.*/
86 mmax=100.0;
87 }
89 PUPable_decl(MillerScalo);
91 MillerScalo(CkMigrateMessage *m) : IMF(m) {}
92 virtual double returnimf(double mass) const;
93 virtual double CumNumber(double mass);
94 virtual double CumMass(double mass);
95 virtual double CumNumberStoch(double mass, double lownorm, double *hmstars, double cutmass);
96 virtual double CumMassStoch(double mass, double lownorm, double *hmstars, double cutmass);
97 virtual double DrawStar(double num);
98 virtual MillerScalo* clone() const;
99 virtual void pup(PUP::er &p) {
100 PUP::able::pup(p);
101 p|a1; p|b1; p|m1;
102 p|a2; p|b2; p|m2;
103 p|a3; p|b3; p|m3;
104 p|mmax;
105 }
106 };
107
111class Kroupa93 : public IMF {
112 double a1, b1, m1;
113 double a2, b2, m2;
114 double a3, b3, m3;
115 double mmax;
116 public:
117/* parameters from Raiteri et. al. A&A, 315,1996, eq. 2; See also the
118 conclusions of Kroupa, Tout & Gilmore, 1993. */
119/* To convert to the IMF(log10(M)) convention of Miller-Scale, we
120 increase the power law by 1 and multiply the coefficient by
121 ln(10.0). See, eg., Chabrier 2003, eq. 2 */
122 Kroupa93() {a1=0.3029*1.86606*log(10.0);b1=-0.3;m1=.08;
123 a2=0.3029*log(10.0);b2=-1.2;m2=0.5;
124 a3=0.3029*log(10.0); b3=-1.7; m3=1.0;
125 mmax=100.0; }
127 PUPable_decl(Kroupa93);
129 Kroupa93(CkMigrateMessage *m) : IMF(m) {}
130 virtual double returnimf(double mass) const;
131 virtual double CumNumber(double mass);
132 virtual double CumMass(double mass);
133 virtual double CumNumberStoch(double mass, double lownorm, double *hmstars, double cutmass);
134 virtual double CumMassStoch(double mass, double lownorm, double *hmstars, double cutmass);
135 virtual double DrawStar(double num);
136 virtual Kroupa93* clone() const;
137 virtual void pup(PUP::er &p) {
138 PUP::able::pup(p);
139 p|a1; p|b1; p|m1;
140 p|a2; p|b2; p|m2;
141 p|a3; p|b3; p|m3;
142 p|mmax;
143 }
144};
145
149class Kroupa01 : public IMF {
150 double a1, b1, m1;
151 double a2, b2, m2;
152 double mmax;
153 public:
154/* parameters from Kroupa 2001, equation 2, and ignoring brown dwarfs,
155 Also normalized so that the mass integral is 1. */
156/* NOTE BENE: Kroupa 2001 has a revised IMF in section 6.2 which is
157 different than this; however, below is what is used as the default in
158 Starburst99
159 (http://www.stsci.edu/science/starburst99/mappings/docs/run.html)
160 with the exception that the low mass cutoff is .1 instead of the .08
161 below and in the Kroupa paper.
162 */
163/* To convert to the IMF(log10(M)) convention of Miller-Scalo, we
164 increase the power law by 1 and multiply the coefficient by
165 ln(10.0). See, eg., Chabrier 2003, eq. 2 */
166 Kroupa01() {
167 a1=0.22038*2.0*log(10.0);b1=-0.3;m1=.08;
168 a2=0.22038*log(10.0);b2=-1.3;m2=0.5;
169 mmax=100.0; }
171 PUPable_decl(Kroupa01);
173 Kroupa01(CkMigrateMessage *m) : IMF(m) {}
174 virtual double returnimf(double mass) const;
175 virtual double CumNumber(double mass);
176 virtual double CumMass(double mass);
177 virtual double CumNumberStoch(double mass, double lownorm, double *hmstars, double cutmass);
178 virtual double CumMassStoch(double mass, double lownorm, double *hmstars, double cutmass);
179 virtual double DrawStar(double num);
180 virtual Kroupa01* clone() const;
181 virtual void pup(PUP::er &p) {
182 PUP::able::pup(p);
183 p|a1; p|b1; p|m1;
184 p|a2; p|b2; p|m2;
185 p|mmax;
186 }
187};
188
193
194class Chabrier : public IMF {
195 double a1, b1, m1;
196 double a2, b2, m2;
197 double mmax;
198 public:
199 /*
200 Chabrier low mass formula:
201 \xi(log m) = A exp [ - (log m - log m_c)^2/2 \sigma^2]
202 double a1, sigma, mc; (b1 is sigma, m1 is mc)
203 */
204 Chabrier() {
205 a1=0.158;b1=0.69;m1=.079;
206 /* For high mass: normalization, index, minimum mass */
207 /* Parameters from Table 1 of Chabrier, 2003. */
208 a2=4.43e-2;b2=-1.3; m2=1.0;
209 mmax=100.0;
210 }
211 virtual double returnimf(double mass) const;
212 virtual double CumNumber(double mass);
213 virtual double CumMass(double mass);
214 virtual double CumNumberStoch(double mass, double lownorm, double *hmstars, double cutmass);
215 virtual double CumMassStoch(double mass, double lownorm, double *hmstars, double cutmass);
216 virtual double DrawStar(double num);
217 virtual Chabrier* clone() const;
219 PUPable_decl(Chabrier);
221 Chabrier(CkMigrateMessage *m) : IMF(m) {}
222 virtual void pup(PUP::er &p) {
223 PUP::able::pup(p);
224 p|a1; p|b1; p|m1;
225 p|a2; p|b2; p|m2;
226 p|mmax;
227 }
228};
229
230#endif
virtual double returnimf(double mass) const
return stars per unit logarithmic mass
Definition imf.cpp:75
virtual Chabrier * clone() const
copy IMF object
Definition imf.cpp:291
virtual double CumMass(double mass)
Cumulative mass of stars with mass greater than mass.
Definition imf.cpp:407
Chabrier(CkMigrateMessage *m)
Charm++ migration constructor.
Definition imf.h:221
virtual double CumNumberStoch(double mass, double lownorm, double *hmstars, double cutmass)
CumNumber for use with stochastic IMF. NOTA BENE - CumNumber for stochastic use returns the actual nu...
Definition imf.cpp:200
PUPable_decl(Chabrier)
Charm++ method for migrating derived classes.
virtual double CumNumber(double mass)
Cumulative number of stars with mass greater than mass.
Definition imf.cpp:296
virtual double CumMassStoch(double mass, double lownorm, double *hmstars, double cutmass)
CumMass for use with stochastic IMF. NOTA BENE - CumMass for stochastic use returns the actual mass f...
Definition imf.cpp:238
virtual void pup(PUP::er &p)
Charm++ Pack-UnPack method.
Definition imf.h:222
virtual double DrawStar(double num)
inverse CDF of IMF to draw stars stochastically from the IMF
Definition imf.cpp:169
IMF(CkMigrateMessage *m)
Charm++ migrate constructor.
Definition imf.h:32
virtual double returnimf(double mass) const =0
return stars per unit logarithmic mass
virtual double CumNumberStoch(double mass, double lownorm, double *hmstars, double cutmass)=0
CumNumber for use with stochastic IMF. NOTA BENE - CumNumber for stochastic use returns the actual nu...
virtual double CumMass(double mass)=0
Cumulative mass of stars with mass greater than mass.
virtual void pup(PUP::er &p)=0
Charm++ Pack-UnPack method.
virtual IMF * clone() const =0
copy IMF object
virtual double CumNumber(double mass)=0
Cumulative number of stars with mass greater than mass.
PUPable_abstract(IMF)
Charm++ requirement for passing polymorphic objects.
virtual double DrawStar(double num)=0
inverse CDF of IMF to draw stars stochastically from the IMF
virtual double CumMassStoch(double mass, double lownorm, double *hmstars, double cutmass)=0
CumMass for use with stochastic IMF. NOTA BENE - CumMass for stochastic use returns the actual mass f...
Implement IMF from Kroupa 2001.
Definition imf.h:149
virtual double CumMassStoch(double mass, double lownorm, double *hmstars, double cutmass)
CumMass for use with stochastic IMF. NOTA BENE - CumMass for stochastic use returns the actual mass f...
Definition imf.cpp:242
virtual void pup(PUP::er &p)
Charm++ Pack-UnPack method.
Definition imf.h:181
Kroupa01(CkMigrateMessage *m)
Charm++ migration constructor.
Definition imf.h:173
virtual double returnimf(double mass) const
return stars per unit logarithmic mass
Definition imf.cpp:59
virtual double DrawStar(double num)
inverse CDF of IMF to draw stars stochastically from the IMF
Definition imf.cpp:173
PUPable_decl(Kroupa01)
Charm++ method for migrating derived classes.
virtual double CumNumber(double mass)
Cumulative number of stars with mass greater than mass.
Definition imf.cpp:138
virtual double CumNumberStoch(double mass, double lownorm, double *hmstars, double cutmass)
CumNumber for use with stochastic IMF. NOTA BENE - CumNumber for stochastic use returns the actual nu...
Definition imf.cpp:204
virtual Kroupa01 * clone() const
copy IMF object
Definition imf.cpp:286
virtual double CumMass(double mass)
Cumulative mass of stars with mass greater than mass.
Definition imf.cpp:383
Implement IMF from Kroupa, Tout & Gilmore, 1993.
Definition imf.h:111
virtual void pup(PUP::er &p)
Charm++ Pack-UnPack method.
Definition imf.h:137
virtual double CumNumberStoch(double mass, double lownorm, double *hmstars, double cutmass)
CumNumber for use with stochastic IMF. NOTA BENE - CumNumber for stochastic use returns the actual nu...
Definition imf.cpp:196
virtual double returnimf(double mass) const
return stars per unit logarithmic mass
Definition imf.cpp:42
virtual double CumNumber(double mass)
Cumulative number of stars with mass greater than mass.
Definition imf.cpp:119
virtual double CumMassStoch(double mass, double lownorm, double *hmstars, double cutmass)
CumMass for use with stochastic IMF. NOTA BENE - CumMass for stochastic use returns the actual mass f...
Definition imf.cpp:234
virtual Kroupa93 * clone() const
copy IMF object
Definition imf.cpp:281
PUPable_decl(Kroupa93)
Charm++ method for migrating derived classes.
virtual double DrawStar(double num)
inverse CDF of IMF to draw stars stochastically from the IMF
Definition imf.cpp:165
virtual double CumMass(double mass)
Cumulative mass of stars with mass greater than mass.
Definition imf.cpp:353
Kroupa93(CkMigrateMessage *m)
Charm++ migration constructor.
Definition imf.h:129
Implement Miller-Scalo IMF Uses the 3 segment power law fit for the Miller-Scalo IMF (Ap....
Definition imf.h:73
virtual double CumMass(double mass)
Cumulative mass of stars with mass greater than mass.
Definition imf.cpp:323
virtual double CumNumber(double mass)
Cumulative number of stars with mass greater than mass.
Definition imf.cpp:100
virtual double DrawStar(double num)
inverse CDF of IMF to draw stars stochastically from the IMF
Definition imf.cpp:161
PUPable_decl(MillerScalo)
Charm++ method for migrating derived classes.
MillerScalo(CkMigrateMessage *m)
Charm++ migration constructor.
Definition imf.h:91
virtual void pup(PUP::er &p)
Charm++ Pack-UnPack method.
Definition imf.h:99
virtual double CumMassStoch(double mass, double lownorm, double *hmstars, double cutmass)
CumMass for use with stochastic IMF. NOTA BENE - CumMass for stochastic use returns the actual mass f...
Definition imf.cpp:230
virtual MillerScalo * clone() const
copy IMF object
Definition imf.cpp:276
virtual double CumNumberStoch(double mass, double lownorm, double *hmstars, double cutmass)
CumNumber for use with stochastic IMF. NOTA BENE - CumNumber for stochastic use returns the actual nu...
Definition imf.cpp:192
virtual double returnimf(double mass) const
return stars per unit logarithmic mass
Definition imf.cpp:25