@@ -224,8 +224,11 @@ def fmin(t, x, y, Th232_U238, ThU_melt, fPaU, alpha, Lam238, Lam235,
224
224
225
225
def dfmin (t , x , y , Th232_U238 , ThU_melt , fPaU , alpha , Lam238 , Lam235 ,
226
226
coef238 , coef235 ):
227
-
228
- raise ValueError ('not yet coded' )
227
+ # TODO: code analytical derivative
228
+ h = t * 1e-08
229
+ args = (x , y , Th232_U238 , ThU_melt , fPaU , alpha , Lam238 , Lam235 ,
230
+ coef238 , coef235 )
231
+ return misc .cdiff (t , fmin , h , * args )
229
232
230
233
else :
231
234
def fmin (t , x , y , Pb208_206 , ThU_melt , fPaU , alpha , Lam238 , Lam235 ,
@@ -235,7 +238,8 @@ def fmin(t, x, y, Pb208_206, ThU_melt, fPaU, alpha, Lam238, Lam235,
235
238
y : measured 207Pb/206Pb
236
239
alpha : common 207Pb/206Pb
237
240
"""
238
- Th232_U238 = x * Pb208_206 * (1. / (np .exp (cfg .lam232 * t ) - 1. ))
241
+
242
+ Th232_U238 = (1. / x ) * Pb208_206 * (1. / (np .exp (cfg .lam232 * t ) - 1. ))
239
243
ThU_min = Th232_U238 * (exp (cfg .lam232 * t )
240
244
/ (exp (cfg .lam238 * t ) + np .exp (cfg .lam235 * t ) / cfg .U ))
241
245
fThU = ThU_min / ThU_melt
@@ -250,34 +254,39 @@ def dfmin(t, x, y, Pb208_206, ThU_melt, fPaU, alpha, Lam238, Lam235,
250
254
"""
251
255
252
256
"""
253
- num = np .exp (cfg .lam232 * t ) / (np .exp (cfg .lam232 * t ) - 1. )
254
- den = np .exp (cfg .lam238 * t ) + np .exp (cfg .lam235 * t ) / cfg .U
255
- fThU = x * Pb208_206 * (num / den ) / ThU_melt
256
-
257
- dnum = - cfg .lam232 * np .exp (cfg .lam232 * t ) / (
258
- np .exp (cfg .lam232 * t ) - 1. ) ** 2
259
- dden = cfg .lam238 * np .exp (cfg .lam238 * t ) \
260
- + cfg .lam235 * np .exp (cfg .lam235 * t ) / cfg .U
261
- dfThU = x * Pb208_206 / ThU_melt * (dnum * den
262
- - num * dden ) / den ** 2
263
-
264
- num = ludwig .g (t , fPaU , Lam235 , coef235 ) / cfg .U - (y - alpha ) / x
265
- dnum = ludwig .dgdt (t , fPaU , Lam235 , coef235 ) / cfg .U
266
-
267
- den = ludwig .f (t , [cfg .a234_238_eq , fThU , cfg .a226_238_eq ],
268
- Lam238 , coef238 )
269
- df1 , df2 , _ , df4 = ludwig .dfdt_comp (t , [cfg .a234_238_eq , np .nan ,
270
- cfg .a226_238_eq ], Lam238 , coef238 )
271
- df3 = dfThU * Lam238 [0 ] / Lam238 [2 ] * (
272
- coef238 [7 ] * exp ((Lam238 [0 ] - Lam238 [2 ]) * t )
273
- + coef238 [8 ] * exp ((Lam238 [0 ] - Lam238 [3 ]) * t ) + exp (Lam238 [0 ] * t )) \
274
- + fThU * Lam238 [0 ] / Lam238 [2 ] * (
275
- coef238 [7 ] * (Lam238 [0 ] - Lam238 [2 ]) * exp ((Lam238 [0 ] - Lam238 [2 ]) * t )
276
- + coef238 [8 ] * (Lam238 [0 ] - Lam238 [3 ]) * exp ((Lam238 [0 ] - Lam238 [3 ]) * t )
277
- + Lam238 [0 ] * exp (Lam238 [0 ] * t ))
278
- dden = df1 + df2 + df3 + df4
279
-
280
- return (dnum * den - num * dden ) / den ** 2
257
+ # TODO: double chek this
258
+ # num = np.exp(cfg.lam232 * t) / (np.exp(cfg.lam232 * t) - 1.)
259
+ # den = np.exp(cfg.lam238 * t) + np.exp(cfg.lam235 * t) / cfg.U
260
+ # fThU = x * Pb208_206 * (num / den) / ThU_melt
261
+ #
262
+ # dnum = -cfg.lam232 * np.exp(cfg.lam232 * t) / (
263
+ # np.exp(cfg.lam232 * t) - 1.) ** 2
264
+ # dden = cfg.lam238 * np.exp(cfg.lam238 * t) \
265
+ # + cfg.lam235 * np.exp(cfg.lam235 * t) / cfg.U
266
+ # dfThU = x * Pb208_206 / ThU_melt * (dnum * den
267
+ # - num * dden) / den ** 2
268
+ #
269
+ # num = ludwig.g(t, fPaU, Lam235, coef235) / cfg.U - (y - alpha) / x
270
+ # dnum = ludwig.dgdt(t, fPaU, Lam235, coef235) / cfg.U
271
+ #
272
+ # den = ludwig.f(t, [cfg.a234_238_eq, fThU, cfg.a226_238_eq],
273
+ # Lam238, coef238)
274
+ # df1, df2, _, df4 = ludwig.dfdt_comp(t, [cfg.a234_238_eq, np.nan,
275
+ # cfg.a226_238_eq], Lam238, coef238)
276
+ # df3 = dfThU * Lam238[0] / Lam238[2] * (
277
+ # coef238[7] * exp((Lam238[0] - Lam238[2]) * t)
278
+ # + coef238[8] * exp((Lam238[0] - Lam238[3]) * t) + exp(Lam238[0] * t)) \
279
+ # + fThU * Lam238[0] / Lam238[2] * (
280
+ # coef238[7] * (Lam238[0] - Lam238[2]) * exp((Lam238[0] - Lam238[2]) * t)
281
+ # + coef238[8] * (Lam238[0] - Lam238[3]) * exp((Lam238[0] - Lam238[3]) * t)
282
+ # + Lam238[0] * exp(Lam238[0] * t))
283
+ # dden = df1 + df2 + df3 + df4
284
+ #
285
+ # return (dnum * den - num * dden) / den ** 2
286
+ h = t * 1e-08
287
+ args = (x , y , Pb208_206 , ThU_melt , fPaU , alpha , Lam238 , Lam235 ,
288
+ coef238 , coef235 )
289
+ return misc .cdiff (t , fmin , h , * args )
281
290
282
291
return fmin , dfmin
283
292
0 commit comments