cosmic-popsynth 3.6.2__cp311-cp311-macosx_14_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,570 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) Scott Coughlin (2017 - 2021)
3
+ #
4
+ # This file is part of cosmic.
5
+ #
6
+ # cosmic is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # cosmic is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with cosmic. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ import numpy
20
+ from . import zdata
21
+
22
+ __author__ = "Scott Coughlin <scott.coughlin@ligo.org>"
23
+ __all__ = ["zcnsts"]
24
+
25
+ c = numpy.array([3.040581e-01, 8.049509e-02, 8.967485e-02, 8.780198e-02, 2.219170e-02])
26
+
27
+
28
+ def zcnsts(z):
29
+ """Calculate constants based on the metallicty
30
+ * zpars: 1; M below which hook doesn't appear on MS, Mhook.
31
+ * 2; M above which He ignition occurs non-degenerately, Mhef.
32
+ * 3; M above which He ignition occurs on the HG, Mfgb.
33
+ * 4; M below which C/O ignition doesn't occur, Mup.
34
+ * 5; M above which C ignites in the centre, Mec.
35
+ * 6; value of log D for M<= zpars[2]
36
+ * 7; value of x for Rgb propto M^(-x)
37
+ * 8; value of x for tMS = numpy.maximum(tHOOK,x*tBGB)
38
+ * 9; constant for McHeIf when computing Mc,BGB, mchefl.
39
+ * 10; constant for McHeIf when computing Mc,HeI, mchefl.
40
+ * 11; hydrogen abundance.
41
+ * 12; helium abundance.
42
+ * 13; constant x in rnumpy.minimum = rgb*x**y used by LM CHeB.
43
+ * 14; z**0.4 to be used for WD L formula.
44
+ """
45
+
46
+ # initialize arrays
47
+ msp = numpy.zeros(shape=(200, len(z)))
48
+ zpars = numpy.zeros(shape=(20, len(z)))
49
+
50
+ lzs = numpy.log10(z / 0.020)
51
+ dlzs = 1.0 / (z * numpy.log(10.0))
52
+ lz = numpy.log10(z)
53
+
54
+ zpars[0] = 1.01850 + lzs * (0.16015 + lzs * 0.0892)
55
+ zpars[1] = 1.9950 + lzs * (0.25 + lzs * 0.087)
56
+ zpars[2] = 16.50 * z ** 0.06 / (1.0 + (1.0e-04 / z) ** 1.27)
57
+ zpars[3] = numpy.maximum(6.110440 + 1.02167 * lzs, 5.0)
58
+ zpars[4] = zpars[3] + 1.80
59
+ zpars[5] = 5.370 + lzs * 0.135
60
+ zpars[6] = c[0] + lzs * (c[1] + lzs * (c[2] + lzs * (c[3] + lzs * c[4])))
61
+ zpars[7] = numpy.maximum(
62
+ 0.950,
63
+ numpy.maximum(
64
+ 0.95 - (10.0 / 3.0) * (z - 0.01),
65
+ numpy.minimum(0.990, 0.98 - (100.0 / 7.0) * (z - 0.001)),
66
+ ),
67
+ )
68
+
69
+ # Lzams
70
+
71
+ msp[0] = zdata.xz[0] + lzs * (
72
+ zdata.xz[1] + lzs * (zdata.xz[2] + lzs * (zdata.xz[3] + lzs * zdata.xz[4]))
73
+ )
74
+ msp[1] = zdata.xz[5] + lzs * (
75
+ zdata.xz[6] + lzs * (zdata.xz[7] + lzs * (zdata.xz[8] + lzs * zdata.xz[9]))
76
+ )
77
+ msp[2] = zdata.xz[10] + lzs * (
78
+ zdata.xz[11] + lzs * (zdata.xz[12] + lzs * (zdata.xz[13] + lzs * zdata.xz[14]))
79
+ )
80
+ msp[3] = zdata.xz[15] + lzs * (
81
+ zdata.xz[16] + lzs * (zdata.xz[17] + lzs * (zdata.xz[18] + lzs * zdata.xz[19]))
82
+ )
83
+ msp[4] = zdata.xz[20] + lzs * (
84
+ zdata.xz[21] + lzs * (zdata.xz[22] + lzs * (zdata.xz[23] + lzs * zdata.xz[24]))
85
+ )
86
+ msp[5] = zdata.xz[25] + lzs * (
87
+ zdata.xz[26] + lzs * (zdata.xz[27] + lzs * (zdata.xz[28] + lzs * zdata.xz[29]))
88
+ )
89
+ msp[6] = zdata.xz[30] + lzs * (
90
+ zdata.xz[31] + lzs * (zdata.xz[32] + lzs * (zdata.xz[33] + lzs * zdata.xz[34]))
91
+ )
92
+
93
+ # Rzams
94
+
95
+ msp[7] = zdata.xz[35] + lzs * (
96
+ zdata.xz[36] + lzs * (zdata.xz[37] + lzs * (zdata.xz[38] + lzs * zdata.xz[39]))
97
+ )
98
+ msp[8] = zdata.xz[40] + lzs * (
99
+ zdata.xz[41] + lzs * (zdata.xz[42] + lzs * (zdata.xz[43] + lzs * zdata.xz[44]))
100
+ )
101
+ msp[9] = zdata.xz[45] + lzs * (
102
+ zdata.xz[46] + lzs * (zdata.xz[47] + lzs * (zdata.xz[48] + lzs * zdata.xz[49]))
103
+ )
104
+ msp[10] = zdata.xz[50] + lzs * (
105
+ zdata.xz[51] + lzs * (zdata.xz[52] + lzs * (zdata.xz[53] + lzs * zdata.xz[54]))
106
+ )
107
+ msp[11] = zdata.xz[55] + lzs * (
108
+ zdata.xz[56] + lzs * (zdata.xz[57] + lzs * (zdata.xz[58] + lzs * zdata.xz[59]))
109
+ )
110
+ msp[12] = zdata.xz[60]
111
+ msp[13] = zdata.xz[61] + lzs * (
112
+ zdata.xz[62] + lzs * (zdata.xz[63] + lzs * (zdata.xz[64] + lzs * zdata.xz[65]))
113
+ )
114
+ msp[14] = zdata.xz[66] + lzs * (
115
+ zdata.xz[67] + lzs * (zdata.xz[68] + lzs * (zdata.xz[69] + lzs * zdata.xz[70]))
116
+ )
117
+ msp[15] = zdata.xz[71] + lzs * (
118
+ zdata.xz[72] + lzs * (zdata.xz[73] + lzs * (zdata.xz[74] + lzs * zdata.xz[75]))
119
+ )
120
+
121
+ # Tbgb
122
+
123
+ msp[16] = zdata.xt[0] + lzs * (
124
+ zdata.xt[1] + lzs * (zdata.xt[2] + lzs * zdata.xt[3])
125
+ )
126
+ msp[17] = zdata.xt[4] + lzs * (
127
+ zdata.xt[5] + lzs * (zdata.xt[6] + lzs * zdata.xt[7])
128
+ )
129
+ msp[18] = zdata.xt[8] + lzs * (
130
+ zdata.xt[9] + lzs * (zdata.xt[10] + lzs * zdata.xt[11])
131
+ )
132
+ msp[19] = zdata.xt[12] + lzs * (
133
+ zdata.xt[13] + lzs * (zdata.xt[14] + lzs * zdata.xt[15])
134
+ )
135
+ msp[20] = zdata.xt[16]
136
+
137
+ # dTbgb/dz
138
+ msp[116] = dlzs * (
139
+ zdata.xt[1] + lzs * (2.0 * zdata.xt[2] + 3.0 * lzs * zdata.xt[3])
140
+ )
141
+ msp[117] = dlzs * (
142
+ zdata.xt[5] + lzs * (2.0 * zdata.xt[6] + 3.0 * lzs * zdata.xt[7])
143
+ )
144
+ msp[118] = dlzs * (
145
+ zdata.xt[9] + lzs * (2.0 * zdata.xt[10] + 3.0 * lzs * zdata.xt[11])
146
+ )
147
+ msp[119] = dlzs * (
148
+ zdata.xt[13] + lzs * (2.0 * zdata.xt[14] + 3.0 * lzs * zdata.xt[15])
149
+ )
150
+
151
+ # Thook
152
+ msp[21] = zdata.xt[17] + lzs * (
153
+ zdata.xt[18] + lzs * (zdata.xt[19] + lzs * zdata.xt[20])
154
+ )
155
+ msp[22] = zdata.xt[21]
156
+ msp[23] = zdata.xt[22] + lzs * (
157
+ zdata.xt[23] + lzs * (zdata.xt[24] + lzs * zdata.xt[25])
158
+ )
159
+ msp[24] = zdata.xt[26] + lzs * (
160
+ zdata.xt[27] + lzs * (zdata.xt[28] + lzs * zdata.xt[29])
161
+ )
162
+ msp[25] = zdata.xt[30]
163
+
164
+ # Ltms
165
+ msp[26] = zdata.xl[0] + lzs * (
166
+ zdata.xl[1] + lzs * (zdata.xl[2] + lzs * (zdata.xl[3] + lzs * zdata.xl[4]))
167
+ )
168
+ msp[27] = zdata.xl[5] + lzs * (
169
+ zdata.xl[6] + lzs * (zdata.xl[7] + lzs * (zdata.xl[8] + lzs * zdata.xl[9]))
170
+ )
171
+ msp[28] = zdata.xl[10] + lzs * (
172
+ zdata.xl[11] + lzs * (zdata.xl[12] + lzs * zdata.xl[13])
173
+ )
174
+ msp[29] = zdata.xl[14] + lzs * (
175
+ zdata.xl[15] + lzs * (zdata.xl[16] + lzs * (zdata.xl[17] + lzs * zdata.xl[18]))
176
+ )
177
+ msp[26] = msp[26] * msp[29]
178
+ msp[27] = msp[27] * msp[29]
179
+ msp[30] = zdata.xl[19] + lzs * (
180
+ zdata.xl[20] + lzs * (zdata.xl[21] + lzs * zdata.xl[22])
181
+ )
182
+ msp[31] = zdata.xl[23] + lzs * (
183
+ zdata.xl[24] + lzs * (zdata.xl[25] + lzs * zdata.xl[26])
184
+ )
185
+
186
+ # Lalpha
187
+ m2 = 2.0
188
+ msp[32] = zdata.xl[27] + lzs * (
189
+ zdata.xl[28] + lzs * (zdata.xl[29] + lzs * zdata.xl[30])
190
+ )
191
+ msp[33] = zdata.xl[31] + lzs * (
192
+ zdata.xl[32] + lzs * (zdata.xl[33] + lzs * zdata.xl[34])
193
+ )
194
+ msp[34] = zdata.xl[35] + lzs * (
195
+ zdata.xl[36] + lzs * (zdata.xl[37] + lzs * zdata.xl[38])
196
+ )
197
+ msp[35] = zdata.xl[39] + lzs * (
198
+ zdata.xl[40] + lzs * (zdata.xl[41] + lzs * zdata.xl[42])
199
+ )
200
+ msp[36] = numpy.maximum(0.90, 1.1064 + lzs * (0.415 + 0.18 * lzs))
201
+ msp[37] = numpy.maximum(1.0, 1.19 + lzs * (0.377 + 0.176 * lzs))
202
+
203
+ if (z > 0.010).any():
204
+ msp[36, z > 0.010] = numpy.minimum(msp[36, z > 0.010], 1.0)
205
+ msp[37, z > 0.010] = numpy.minimum(msp[37, z > 0.010], 1.10)
206
+
207
+ msp[38] = numpy.maximum(0.1450, 0.0977 - lzs * (0.231 + 0.0753 * lzs))
208
+ msp[39] = numpy.minimum(0.240 + lzs * (0.18 + 0.595 * lzs), 0.306 + 0.053 * lzs)
209
+ msp[40] = numpy.minimum(0.330 + lzs * (0.132 + 0.218 * lzs), 0.36250 + 0.062 * lzs)
210
+ msp[41] = (msp[32] + msp[33] * m2 ** msp[35]) / (m2 ** 0.40 + msp[34] * m2 ** 1.9)
211
+
212
+ # Lbeta
213
+ msp[42] = zdata.xl[43] + lzs * (
214
+ zdata.xl[44] + lzs * (zdata.xl[45] + lzs * (zdata.xl[46] + lzs * zdata.xl[47]))
215
+ )
216
+ msp[43] = zdata.xl[48] + lzs * (
217
+ zdata.xl[49] + lzs * (zdata.xl[50] + lzs * (zdata.xl[51] + lzs * zdata.xl[52]))
218
+ )
219
+ msp[44] = zdata.xl[53] + lzs * (zdata.xl[54] + lzs * zdata.xl[55])
220
+ msp[45] = numpy.minimum(1.40, 1.5135 + 0.3769 * lzs)
221
+ msp[45] = numpy.maximum(0.63550 - 0.4192 * lzs, numpy.maximum(1.25, msp[45]))
222
+
223
+ # Lhook
224
+ msp[46] = zdata.xl[56] + lzs * (
225
+ zdata.xl[57] + lzs * (zdata.xl[58] + lzs * zdata.xl[59])
226
+ )
227
+ msp[47] = zdata.xl[60] + lzs * (
228
+ zdata.xl[61] + lzs * (zdata.xl[62] + lzs * zdata.xl[63])
229
+ )
230
+ msp[48] = zdata.xl[64] + lzs * (
231
+ zdata.xl[65] + lzs * (zdata.xl[66] + lzs * zdata.xl[67])
232
+ )
233
+ msp[49] = zdata.xl[68] + lzs * (
234
+ zdata.xl[69] + lzs * (zdata.xl[70] + lzs * zdata.xl[71])
235
+ )
236
+ msp[50] = numpy.minimum(1.40, 1.5135 + 0.3769 * lzs)
237
+ msp[50] = numpy.maximum(0.63550 - 0.4192 * lzs, numpy.maximum(1.25, msp[50]))
238
+
239
+ # Rtms
240
+ msp[51] = zdata.xr[0] + lzs * (
241
+ zdata.xr[1] + lzs * (zdata.xr[2] + lzs * (zdata.xr[3] + lzs * zdata.xr[4]))
242
+ )
243
+ msp[52] = zdata.xr[5] + lzs * (
244
+ zdata.xr[6] + lzs * (zdata.xr[7] + lzs * (zdata.xr[8] + lzs * zdata.xr[9]))
245
+ )
246
+ msp[53] = zdata.xr[10] + lzs * (
247
+ zdata.xr[11] + lzs * (zdata.xr[12] + lzs * (zdata.xr[13] + lzs * zdata.xr[14]))
248
+ )
249
+ msp[54] = zdata.xr[15] + lzs * (
250
+ zdata.xr[16] + lzs * (zdata.xr[17] + lzs * zdata.xr[18])
251
+ )
252
+ msp[55] = zdata.xr[19] + lzs * (
253
+ zdata.xr[20] + lzs * (zdata.xr[21] + lzs * zdata.xr[22])
254
+ )
255
+ msp[51] = msp[51] * msp[53]
256
+ msp[52] = msp[52] * msp[53]
257
+ msp[56] = zdata.xr[23]
258
+ msp[57] = zdata.xr[24] + lzs * (
259
+ zdata.xr[25] + lzs * (zdata.xr[26] + lzs * zdata.xr[27])
260
+ )
261
+ msp[58] = zdata.xr[28] + lzs * (
262
+ zdata.xr[29] + lzs * (zdata.xr[30] + lzs * zdata.xr[31])
263
+ )
264
+ msp[59] = zdata.xr[32] + lzs * (
265
+ zdata.xr[33] + lzs * (zdata.xr[34] + lzs * zdata.xr[35])
266
+ )
267
+ msp[60] = zdata.xr[36] + lzs * (
268
+ zdata.xr[37] + lzs * (zdata.xr[38] + lzs * zdata.xr[39])
269
+ )
270
+ #
271
+ msp[61] = numpy.maximum(
272
+ 0.0970 - 0.1072 * (lz + 3.0),
273
+ numpy.maximum(0.097, numpy.minimum(0.1461, 0.14610 + 0.1237 * (lz + 2.0))),
274
+ )
275
+ msp[61] = 10.0 ** msp[61]
276
+ m2 = msp[61] + 0.10
277
+ msp[62] = (msp[51] + msp[52] * msp[61] ** msp[54]) / (msp[53] + msp[61] ** msp[55])
278
+ msp[63] = (
279
+ msp[56] * m2 ** 3 + msp[57] * m2 ** msp[60] + msp[58] * m2 ** (msp[60] + 1.50)
280
+ ) / (msp[59] + m2 ** 5)
281
+
282
+ # Ralpha
283
+ msp[64] = zdata.xr[40] + lzs * (
284
+ zdata.xr[41] + lzs * (zdata.xr[42] + lzs * zdata.xr[43])
285
+ )
286
+ msp[65] = zdata.xr[44] + lzs * (
287
+ zdata.xr[45] + lzs * (zdata.xr[46] + lzs * zdata.xr[47])
288
+ )
289
+ msp[66] = zdata.xr[48] + lzs * (
290
+ zdata.xr[49] + lzs * (zdata.xr[50] + lzs * zdata.xr[51])
291
+ )
292
+ msp[67] = zdata.xr[52] + lzs * (
293
+ zdata.xr[53] + lzs * (zdata.xr[54] + lzs * zdata.xr[55])
294
+ )
295
+ msp[68] = zdata.xr[56] + lzs * (
296
+ zdata.xr[57] + lzs * (zdata.xr[58] + lzs * (zdata.xr[59] + lzs * zdata.xr[60]))
297
+ )
298
+ msp[69] = numpy.maximum(0.90, numpy.minimum(1.0, 1.116 + 0.166 * lzs))
299
+ msp[70] = numpy.maximum(
300
+ 1.4770 + 0.296 * lzs, numpy.minimum(1.6, -0.308 - 1.046 * lzs)
301
+ )
302
+ msp[70] = numpy.maximum(0.80, numpy.minimum(0.8 - 2.0 * lzs, msp[70]))
303
+ msp[71] = zdata.xr[61] + lzs * (zdata.xr[62] + lzs * zdata.xr[63])
304
+ msp[72] = numpy.maximum(0.0650, 0.0843 - lzs * (0.0475 + 0.0352 * lzs))
305
+ msp[73] = 0.07360 + lzs * (0.0749 + 0.04426 * lzs)
306
+ if (z < 0.0040).any():
307
+ msp[73, z < 0.0040] = numpy.minimum(0.055, msp[73, z < 0.0040])
308
+
309
+ msp[74] = numpy.maximum(0.0910, numpy.minimum(0.121, 0.136 + 0.0352 * lzs))
310
+ msp[75] = (msp[64] * msp[70] ** msp[66]) / (msp[65] + msp[70] ** msp[67])
311
+
312
+ if (msp[69] > msp[70]).any():
313
+ msp[69, msp[69] > msp[70]] = msp[70, msp[69] > msp[70]]
314
+ msp[74, msp[69] > msp[70]] = msp[75, msp[69] > msp[70]]
315
+
316
+ # Rbeta
317
+ msp[76] = zdata.xr[64] + lzs * (
318
+ zdata.xr[65] + lzs * (zdata.xr[66] + lzs * zdata.xr[67])
319
+ )
320
+ msp[77] = zdata.xr[68] + lzs * (
321
+ zdata.xr[69] + lzs * (zdata.xr[70] + lzs * zdata.xr[71])
322
+ )
323
+ msp[78] = zdata.xr[72] + lzs * (
324
+ zdata.xr[73] + lzs * (zdata.xr[74] + lzs * zdata.xr[75])
325
+ )
326
+ msp[79] = zdata.xr[76] + lzs * (
327
+ zdata.xr[77] + lzs * (zdata.xr[78] + lzs * zdata.xr[79])
328
+ )
329
+ msp[80] = zdata.xr[80] + lzs * (zdata.xr[81] + lzs * lzs * zdata.xr[82])
330
+ if (z > 0.010).any():
331
+ msp[80, z > 0.010] = numpy.maximum(msp[80, z > 0.010], 0.95)
332
+
333
+ msp[81] = numpy.maximum(
334
+ 1.40, numpy.minimum(1.6, 1.6 + lzs * (0.764 + 0.3322 * lzs))
335
+ )
336
+
337
+ # Rgamma
338
+ msp[82] = numpy.maximum(
339
+ zdata.xr[83] + lzs * (zdata.xr[84] + lzs * (zdata.xr[85] + lzs * zdata.xr[86])),
340
+ zdata.xr[95] + lzs * (zdata.xr[96] + lzs * zdata.xr[97]),
341
+ )
342
+ msp[83] = numpy.minimum(
343
+ 0.0,
344
+ zdata.xr[87] + lzs * (zdata.xr[88] + lzs * (zdata.xr[89] + lzs * zdata.xr[90])),
345
+ )
346
+ msp[83] = numpy.maximum(
347
+ msp[83], zdata.xr[98] + lzs * (zdata.xr[99] + lzs * zdata.xr[100])
348
+ )
349
+ msp[84] = zdata.xr[91] + lzs * (
350
+ zdata.xr[92] + lzs * (zdata.xr[93] + lzs * zdata.xr[94])
351
+ )
352
+ msp[84] = numpy.maximum(0.0, numpy.minimum(msp[84], 7.454 + 9.046 * lzs))
353
+ msp[85] = numpy.minimum(
354
+ zdata.xr[101] + lzs * zdata.xr[102], numpy.maximum(2.0, -13.3 - 18.6 * lzs)
355
+ )
356
+ msp[86] = numpy.minimum(1.50, numpy.maximum(0.4, 2.493 + 1.1475 * lzs))
357
+ msp[87] = numpy.maximum(1.0, numpy.minimum(1.27, 0.8109 - 0.6282 * lzs))
358
+ msp[87] = numpy.maximum(msp[87], 0.63550 - 0.4192 * lzs)
359
+ msp[88] = numpy.maximum(5.855420e-02, -0.27110 - lzs * (0.5756 + 0.0838 * lzs))
360
+
361
+ # Rhook
362
+ msp[89] = zdata.xr[103] + lzs * (
363
+ zdata.xr[104] + lzs * (zdata.xr[105] + lzs * zdata.xr[106])
364
+ )
365
+ msp[90] = zdata.xr[107] + lzs * (
366
+ zdata.xr[108] + lzs * (zdata.xr[109] + lzs * zdata.xr[110])
367
+ )
368
+ msp[91] = zdata.xr[111] + lzs * (
369
+ zdata.xr[112] + lzs * (zdata.xr[113] + lzs * zdata.xr[114])
370
+ )
371
+ msp[92] = zdata.xr[115] + lzs * (
372
+ zdata.xr[116] + lzs * (zdata.xr[117] + lzs * zdata.xr[118])
373
+ )
374
+ msp[93] = numpy.minimum(
375
+ 1.250, numpy.maximum(1.10, 1.9848 + lzs * (1.1386 + 0.3564 * lzs))
376
+ )
377
+ msp[94] = 0.0630 + lzs * (0.0481 + 0.00984 * lzs)
378
+ msp[95] = numpy.minimum(1.30, numpy.maximum(0.45, 1.2 + 2.45 * lzs))
379
+
380
+ # Lneta
381
+ msp[96, z > 0.00090] = 10.0
382
+ msp[96, z < 0.00090] = 20.0
383
+
384
+ # converting the below from fortran to python still needs work
385
+ """
386
+ # Lbgb
387
+ gbp[0] = zdata.xg[0]+lzs*(zdata.xg[1]+lzs*(zdata.xg[2]+lzs*zdata.xg[3]))
388
+ gbp[1] = zdata.xg[4]+lzs*(zdata.xg[5]+lzs*(zdata.xg[6]+lzs*zdata.xg[7]))
389
+ gbp[2] = zdata.xg[8]+lzs*(zdata.xg[9]+lzs*(zdata.xg[10]+lzs*zdata.xg[11]))
390
+ gbp[3] = zdata.xg[12]+lzs*(zdata.xg[13]+lzs*(zdata.xg[14]+lzs*zdata.xg[15]))
391
+ gbp[4] = zdata.xg[16]+lzs*(zdata.xg[17]+lzs*zdata.xg[18])
392
+ gbp[5] = zdata.xg[19]+lzs*(zdata.xg[20]+lzs*zdata.xg[21])
393
+ gbp[2] = gbp[2]**gbp[5]
394
+ gbp[6] = zdata.xg[22]
395
+ gbp[7] = zdata.xg[23]
396
+
397
+ # Lbagb
398
+ # set gbp[15] = 1.0 until it is reset later with an initial
399
+ # call to Lbagbf using mass = zpars[1] and mhefl = 0.0
400
+ gbp[8] = zdata.xg[24] + lzs*(zdata.xg[25] + lzs*zdata.xg[26])
401
+ gbp[9] = zdata.xg[27] + lzs*(zdata.xg[28] + lzs*zdata.xg[29])
402
+ gbp[10] = 15.0
403
+ gbp[11] = zdata.xg[30]+lzs*(zdata.xg[31]+lzs*(zdata.xg[32]+lzs*zdata.xg[33]))
404
+ gbp[12] = zdata.xg[34]+lzs*(zdata.xg[35]+lzs*(zdata.xg[36]+lzs*zdata.xg[37]))
405
+ gbp[13] = zdata.xg[38]+lzs*(zdata.xg[39]+lzs*(zdata.xg[40]+lzs*zdata.xg[41]))
406
+ gbp[14] = zdata.xg[42]+lzs*zdata.xg[43]
407
+ gbp[11] = gbp[11]**gbp[14]
408
+ gbp[13] = gbp[13]**gbp[14]
409
+ gbp[15] = 1.0
410
+
411
+ # Rgb
412
+ gbp[16] = -4.67390-0.9394*lz
413
+ gbp[16] = 10.0**gbp[16]
414
+ gbp[16] = numpy.maximum(gbp[16],-0.041670+55.67*z)
415
+ gbp[16] = numpy.minimum(gbp[16],0.47710-9329.21*z**2.94)
416
+ gbp[17] = numpy.minimum(0.540,0.397+lzs*(0.28826+0.5293*lzs))
417
+ gbp[18] = numpy.maximum(-0.14510,-2.2794-lz*(1.5175+0.254*lz))
418
+ gbp[18] = 10.0**gbp[18]
419
+ if (z > 0.0040):
420
+ gbp[18] = numpy.maximum(gbp[18],0.73070+14265.1*z**3.395)
421
+
422
+ gbp[19] = zdata.xg[44]+lzs*(zdata.xg[45]+lzs*(zdata.xg[46]+lzs*(zdata.xg[47]+lzs*(zdata.xg[48]+lzs*zdata.xg[49]))))
423
+ gbp[20] = zdata.xg[50]+lzs*(zdata.xg[51]+lzs*(zdata.xg[52]+lzs*(zdata.xg[53]+lzs*zdata.xg[54])))
424
+ gbp[21] = zdata.xg[55]+lzs*(zdata.xg[56]+lzs*(zdata.xg[57]+lzs*(zdata.xg[58]+lzs*(zdata.xg[59]+lzs*zdata.xg[60]))))
425
+ gbp[22] = zdata.xg[61]+lzs*(zdata.xg[62]+lzs*(zdata.xg[63]+lzs*(zdata.xg[64]+lzs*zdata.xg[65])))
426
+
427
+ # Ragb
428
+ gbp[23] = numpy.minimum(0.991640-743.123*z**2.83,
429
+ 1.04220+lzs*(0.13156+0.045*lzs))
430
+ gbp[24] = zdata.xg[66]+lzs*(zdata.xg[67]+lzs*(zdata.xg[68]+lzs*(zdata.xg[69]+ lzs*(zdata.xg[70]+lzs*zdata.xg[71]))))
431
+ gbp[25] = zdata.xg[72]+lzs*(zdata.xg[73]+lzs*(zdata.xg[74]+lzs*(zdata.xg[75]+lzs*zdata.xg[76])))
432
+ gbp[26] = zdata.xg[77]+lzs*(zdata.xg[78]+lzs*(zdata.xg[79]+lzs*(zdata.xg[80]+lzs*(zdata.xg[81]+lzs*zdata.xg[82]))))
433
+ gbp[27] = zdata.xg[83]+lzs*(zdata.xg[84]+lzs*(zdata.xg[85]+lzs*(zdata.xg[86]+lzs*zdata.xg[87])))
434
+ gbp[28] = zdata.xg[88]+lzs*(zdata.xg[89]+lzs*(zdata.xg[90]+lzs*(zdata.xg[91]+lzs*(zdata.xg[92]+lzs*zdata.xg[93]))))
435
+ gbp[29] = zdata.xg[94]+lzs*(zdata.xg[95]+lzs*(zdata.xg[96]+lzs*(zdata.xg[97]+lzs*(zdata.xg[98]+lzs*zdata.xg[99]))))
436
+ m1 = zpars[1] - 0.20
437
+ gbp[30] = gbp[28] + gbp[29]*m1
438
+ gbp[31] = numpy.minimum(gbp[24]/zpars[1]**gbp[25],gbp[26]/zpars[1]**gbp[27])
439
+
440
+ # Mchei
441
+ gbp[32] = zdata.xg[100]**4
442
+ gbp[33] = zdata.xg[101]*4.0
443
+
444
+ # Mcagb
445
+ gbp[34] = zdata.xg[102]+lzs*(zdata.xg[103]+lzs*(zdata.xg[104]+lzs*zdata.xg[105]))
446
+ gbp[35] = zdata.xg[106]+lzs*(zdata.xg[107]+lzs*(zdata.xg[108]+lzs*zdata.xg[109]))
447
+ gbp[36] = zdata.xg[110]+lzs*zdata.xg[111]
448
+ gbp[34] = gbp[34]**4
449
+ gbp[35] = gbp[35]*4.0
450
+ gbp[36] = gbp[36]**4
451
+
452
+ # Lhei
453
+ # set gbp[40] = -1.0 until it is reset later with an initial
454
+ # call to Lheif using mass = zpars[1] and mhefl = 0.0
455
+ gbp[37] = zdata.xh[0]+lzs*zdata.xh[1]
456
+ gbp[38] = zdata.xh[2]+lzs*zdata.xh[3]
457
+ gbp[39] = zdata.xh[4]
458
+ gbp[40] = -1.0
459
+ gbp[41] = zdata.xh[5]+lzs*(zdata.xh[6]+lzs*zdata.xh[7])
460
+ gbp[42] = zdata.xh[8]+lzs*(zdata.xh[9]+lzs*zdata.xh[10])
461
+ gbp[43] = zdata.xh[11]+lzs*(zdata.xh[12]+lzs*zdata.xh[13])
462
+ gbp[41] = gbp[41]**2
463
+ gbp[43] = gbp[43]**2
464
+ # Lhe
465
+ gbp[44] = zdata.xh[14]+lzs*(zdata.xh[15]+lzs*zdata.xh[16])
466
+ if (lzs > -1.0):
467
+ gbp[45] = 1.0 - zdata.xh[18]*(lzs+1.0)**zdata.xh[17]
468
+ else:
469
+ gbp[45] = 1.0
470
+
471
+ gbp[46] = zdata.xh[19]+lzs*(zdata.xh[20]+lzs*zdata.xh[21])
472
+ gbp[47] = zdata.xh[22]+lzs*(zdata.xh[23]+lzs*zdata.xh[24])
473
+ gbp[44] = gbp[44]**gbp[47]
474
+ gbp[46] = gbp[46]**gbp[47]
475
+ gbp[45] = gbp[45]/zpars[2]**0.10+(gbp[45]*gbp[46]-gbp[44])/zpars[2]**(gbp[47]+0.10)
476
+
477
+ # Rnumpy.minimum
478
+
479
+ gbp[48] = zdata.xh[25]+lzs*(zdata.xh[26]+lzs*(zdata.xh[27]+lzs*zdata.xh[28]))
480
+ gbp[49] = zdata.xh[29]+lzs*(zdata.xh[30]+lzs*(zdata.xh[31]+lzs*zdata.xh[32]))
481
+ gbp[50] = zdata.xh[33]+lzs*(zdata.xh[34]+lzs*(zdata.xh[35]+lzs*zdata.xh[36]))
482
+ gbp[51] = 5.0+zdata.xh[37]*z**zdata.xh[38]
483
+ gbp[52] = zdata.xh[39]+lzs*(zdata.xh[40]+lzs*(zdata.xh[41]+lzs*zdata.xh[42]))
484
+ gbp[48] = gbp[48]**gbp[52]
485
+ gbp[50] = gbp[50]**(2.0*gbp[52])
486
+
487
+ # The
488
+ # set gbp[56] = -1.0 until it is reset later with an initial
489
+ # call to Thef using mass = zpars[1], mc = 0.0 and mhefl = 0.0
490
+ gbp[53] = zdata.xh[43]+lzs*(zdata.xh[44]+lzs*(zdata.xh[45]+lzs*zdata.xh[46]))
491
+ gbp[54] = zdata.xh[47]+lzs*(zdata.xh[48]+lzs*zdata.xh[49])
492
+ gbp[54] = numpy.maximum(gbp[54],1.0)
493
+ gbp[55] = zdata.xh[50]
494
+ gbp[56] = -1.0
495
+ gbp[57] = zdata.xh[51]+lzs*(zdata.xh[52]+lzs*(zdata.xh[53]+lzs*zdata.xh[54]))
496
+ gbp[58] = zdata.xh[55]+lzs*(zdata.xh[56]+lzs*(zdata.xh[57]+lzs*zdata.xh[58]))
497
+ gbp[59] = zdata.xh[59]+lzs*(zdata.xh[60]+lzs*(zdata.xh[61]+lzs*zdata.xh[62]))
498
+ gbp[60] = zdata.xh[63]+lzs*zdata.xh[64]
499
+ gbp[57] = gbp[57]**gbp[60]
500
+ gbp[59] = gbp[59]**5
501
+
502
+ # Tbl
503
+ dum1 = zpars[1]/zpars[2]
504
+ gbp[61] = zdata.xh[65]+lzs*zdata.xh[66]
505
+ gbp[61] = -gbp[61]*numpy.log10(dum1)
506
+ gbp[62] = zdata.xh[67]
507
+ if (lzd > 0.0):
508
+ gbp[63] = 1.0-lzd*(zdata.xh[68]+lzd*(zdata.xh[69]+lzd*zdata.xh[70]))
509
+ else:
510
+ gbp[63] = 1.0
511
+
512
+ gbp[64] = 1.0-gbp[63]*dum1**gbp[62]
513
+ gbp[65] = 1.0 - lzd*(zdata.xh[76] + lzd*(zdata.xh[77] + lzd*zdata.xh[78]))
514
+ gbp[66] = zdata.xh[71] + lzs*(zdata.xh[72] + lzs*(zdata.xh[73] + lzs*zdata.xh[74]))
515
+ gbp[67] = zdata.xh[75]
516
+
517
+ # Lzahb
518
+ gbp[68] = zdata.xh[79] + lzs*(zdata.xh[80] + lzs*zdata.xh[81])
519
+ gbp[69] = zdata.xh[82] + lzs*(zdata.xh[83] + lzs*zdata.xh[84])
520
+ gbp[70] = 15.0
521
+ gbp[71] = zdata.xh[85]
522
+ gbp[72] = zdata.xh[86]
523
+
524
+ # Rzahb
525
+ gbp[74] = zdata.xh[87] + lzs*(zdata.xh[88] + lzs*(zdata.xh[89] + lzs*zdata.xh[90]))
526
+ gbp[75] = zdata.xh[91] + lzs*(zdata.xh[92] + lzs*(zdata.xh[93] + lzs*zdata.xh[94]))
527
+ gbp[76] = zdata.xh[95] + lzs*(zdata.xh[96] + lzs*(zdata.xh[97] + lzs*zdata.xh[98]))
528
+
529
+ # finish Lbagb
530
+ mhefl = 0.0
531
+ lx = lbagbf(zpars[1], mhefl)
532
+ gbp[15] = lx
533
+
534
+ # finish LHeI
535
+ dum1 = 0.0
536
+ lhefl = lheif(zpars[1],mhefl)
537
+ gbp[40] = (gbp[37]*zpars[1]**gbp[38]-lhefl)/(numpy.exp(zpars[1]*gbp[39])*lhefl)
538
+
539
+ # finish THe
540
+ thefl = thef(zpars[1],dum1,mhefl)*tbgbf(zpars[1])
541
+ gbp[56] = (thefl-gbp[53])/(gbp[53]*numpy.exp(gbp[55]*zpars[1]))
542
+
543
+ # finish Tblf
544
+ rb = ragbf(zpars[2],lheif(zpars[2],zpars[1]),mhefl)
545
+ rr = 1.0 - rnumpy.minimumf(zpars[2])/rb
546
+ rr = numpy.maximum(rr,1.0e-12)
547
+ gbp[65] = gbp[65]/(zpars[2]**gbp[66]*rr**gbp[67])
548
+
549
+ # finish Lzahb
550
+ gbp[73] = lhefl*lHef(zpars[1])
551
+
552
+ kw = 0
553
+ tm = 0.0
554
+ tn = 0.0
555
+ star(kw,zpars[1],zpars[1],tm,tn,tscls,lums,GB,zpars)
556
+ zpars[8] = mcgbf(lums[2],GB,lums[5])
557
+ zpars[9] = mcgbf(lums[3],GB,lums[5])
558
+
559
+ # set the hydrogen and helium abundances
560
+ zpars[10] = 0.760 - 3.0*z
561
+ zpars[11] = 0.240 + 2.0*z
562
+
563
+ # set constant for low-mass CHeB stars
564
+ zpars[12] = (rnumpy.minimumf(zpars[1])/
565
+ rgbf(zpars[1],lzahbf(zpars[1],zpars[8],zpars[1])))
566
+
567
+ zpars[13] = z**0.40
568
+ #
569
+ """
570
+ return zpars, msp