Package: batemaneq
batemaneqbatemaneqprovides aC++ implementationof theBateman equation,
and aPythonbidning thereof.DocumentationAutogenerated API documentation is found here:http://hera.physchem.kth.se/~batemaneq/branches/master/htmlInstallationSimplest way to install batemaneq and is to usepip(requires a C++11 compliant compiler to be installed for the C++ version):$ pip install batemaneqor using theconda package manager:$ conda install -c bjodah batemaneq pytest
$ python -m pytest --pyargs batemaneqExamplesSeeexamples/, and rendered jupyter notebooks here:http://hera.physchem.kth.se/~batemaneq/branches/master/examplesThe Thorium seriesHalf-lives shorter than 1h excluded from thedecay chain:In Python:>>>frombatemaneqimportbateman_parent>>>frommathimportlogasln>>>d=1./365# Th-232 Ra-228 Ac-228 Th-228>>>h=d/24# Ra-224 Pb-212 Bi-212 (Pb-208)>>>Thalf=[1.405e10,5.75,6.25*h,1.9116,3.6319*d,10.64*h,60.55/60*h]>>>bateman_parent([ln(2)/xforxinThalf],100)# 100 years[0.9999999950665681,4.0925028658312447e-10,5.078051001187696e-14,1.3605575316895603e-10,7.082081172329036e-13,8.64484883194704e-14,8.199335787638167e-15]In C++:#include<cmath>#include<iostream>#include<iomanip>#include<vector>#include"bateman.hpp"usingvec_t=std::vector<double>;doubleexp_cb(doublearg){returnstd::exp(arg);}intmain(){doubleone=1;doubled=one/365;doubleh=d/24;doubleln2=std::log(2);vec_tlmbd{{ln2/1.405e10,ln2/5.75,ln2/(6.25*h),ln2/1.9116,ln2/(3.6319*d),ln2/(10.64*h),ln2/(60.55/60*h)}};autop=bateman::bateman_parent(lmbd,100.0,exp_cb);std::cout<<std::setprecision(17);// all significant digitsfor(autov:p)std::cout<<v<<" ";std::cout<<std::endl;return0;}$ g++ -std=c++11 double.cpp -I../include
$ ./a.out
0.99999999506656811 4.0925028658312447e-10 5.0780510011876959e-14 1.3605575316895603e-10 7.0820811723290359e-13 8.6448488319470398e-14 8.1993357876381666e-15In C++ usingboost::multiprecision::cpp_dec_float_50:#include<cmath>#include<iostream>#include<vector>#include<boost/multiprecision/cpp_dec_float.hpp>#include"bateman.hpp"usingReal_t=boost::multiprecision::cpp_dec_float_50;usingvec_t=std::vector<Real_t>;Real_texp_cb(Real_targ){returnboost::multiprecision::exp(arg);}intmain(){Real_tone=1;Real_td=one/365;Real_th=d/24;Real_tln2=boost::multiprecision::log(2*one);vec_tlmbd{{ln2/1.405e10,ln2/5.75,ln2/(6.25*h),ln2/1.9116,ln2/(3.6319*d),ln2/(10.64*h),ln2/(60.55/60*h)}};autop=bateman::bateman_parent(lmbd,static_cast<Real_t>(100),exp_cb);std::cout<<std::setprecision(30);// show 30 of our 50 digitsfor(autov:p)std::cout<<v<<" ";std::cout<<std::endl;return0;}$ g++ -std=c++11 multi.cpp -I../include
$ ./a.out
0.999999995066568122063002778128 4.09250286583124398565537707859e-10 5.07805100118769662240802082504e-14 1.3605575316895606205575997585e-10 7.08208117232903695657287769184e-13 8.6448488319470425326824303941e-14 8.19933578763816849146541981927e-15We see that the concentration of the final nuclide only varies in the 15th decimal place (we had no catastropic cancelation in this example).LicenseThe source code is Open Source and is released under the very permissive
“simplified (2-clause) BSD license”. SeeLICENSE.txtfor further details.Contributors are welcome to suggest improvements athttps://github.com/bjodah/batemaneqAuthorBjörn I. Dahlgren, contact:gmail address: bjodah