/** \file \brief Dust model specifications. \who \kpr */ #include #include "Dust.h" #include "manticore.h" namespace mu = mutils; namespace manticore { /// Dust models. namespace dust { /** \brief OH5 model. Ossenkopf & Henning (1994) thinly ice-mantled coagulated dust, augmented by Pollack et al. (1994) opacities at < 1.25 microns (as described in Dunham et al. 2010). */ const manticore::tableType modelOH5 = { // {nu0(Hz), kappa0(cm^2/g @ g/d=100)} {8.321743e+09, 2.286790e-05}, {1.248261e+10, 4.744500e-05}, {1.872392e+10, 9.843610e-05}, {2.304483e+10, 1.430450e-04}, {2.723480e+10, 1.932250e-04}, {4.048416e+10, 3.944150e-04}, {5.991655e+10, 7.987750e-04}, {8.559507e+10, 1.517920e-03}, {8.942755e+10, 1.642440e-03}, {1.097373e+11, 2.373980e-03}, {1.152241e+11, 2.591900e-03}, {1.331476e+11, 3.362340e-03}, {1.497914e+11, 4.156390e-03}, {1.997218e+11, 6.975990e-03}, {2.304483e+11, 9.025520e-03}, {2.995828e+11, 1.369980e-02}, {4.279754e+11, 2.569960e-02}, {5.991655e+11, 5.039920e-02}, {8.559507e+11, 1.009980e-01}, {1.325589e+12, 2.169970e-01}, {1.621122e+12, 3.076000e-01}, {1.890111e+12, 4.066510e-01}, {2.204437e+12, 5.256380e-01}, {2.569312e+12, 6.786530e-01}, {2.995828e+12, 8.649890e-01}, {3.492859e+12, 1.180770e+00}, {4.072078e+12, 1.581190e+00}, {4.747743e+12, 2.109970e+00}, /* lambda < 70 micron: {5.535526e+12, 2.798060e+00}, {6.453742e+12, 3.866420e+00}, {6.968660e+12, 4.210170e+00}, {7.525308e+12, 4.269800e+00}, {8.125382e+12, 4.341700e+00}, {8.772556e+12, 4.506770e+00}, {1.022816e+13, 5.454030e+00}, {1.192606e+13, 7.666310e+00}, {1.390174e+13, 1.094070e+01}, {1.501665e+13, 1.347080e+01}, {1.621122e+13, 1.579020e+01}, {1.750920e+13, 1.510520e+01}, {1.890111e+13, 1.336780e+01}, {2.040751e+13, 1.354000e+01}, {2.204437e+13, 1.603100e+01}, {2.379532e+13, 1.965150e+01}, {2.569312e+13, 2.513110e+01}, {2.670067e+13, 2.548350e+01}, {2.773904e+13, 2.480020e+01}, {2.883368e+13, 2.521440e+01}, {2.995828e+13, 2.579990e+01}, {3.053850e+13, 2.679960e+01}, {3.113194e+13, 2.207110e+01}, {3.234883e+13, 1.721290e+01}, {3.361565e+13, 1.431590e+01}, {3.492859e+13, 1.396440e+01}, {3.771657e+13, 1.331150e+01}, {4.072631e+13, 1.268920e+01}, {4.397222e+13, 1.209670e+01}, {4.747743e+13, 1.153170e+01}, {5.127208e+13, 1.369520e+01}, {5.535526e+13, 1.290380e+01}, {5.977308e+13, 1.419280e+01}, {6.453742e+13, 1.628710e+01}, {6.968660e+13, 1.760470e+01}, {7.525308e+13, 1.929400e+01}, {7.819966e+13, 2.029280e+01}, {8.125382e+13, 2.133790e+01}, {8.443693e+13, 2.322900e+01}, {8.775124e+13, 2.533260e+01}, {9.116944e+13, 2.974520e+01}, {9.474451e+13, 4.313220e+01}, {9.844981e+13, 6.182070e+01}, {1.022816e+14, 6.525970e+01}, {1.063105e+14, 3.606000e+01}, {1.104656e+14, 3.394000e+01}, {1.192606e+14, 3.894270e+01}, {1.390819e+14, 5.063830e+01}, {1.621122e+14, 6.449570e+01}, {1.890111e+14, 7.974990e+01}, {2.204437e+14, 9.807170e+01}, {2.569312e+14, 1.143450e+02}, {2.995828e+14, 1.309990e+02}, {3.153503e+14, 1.370850e+02}, {3.328697e+14, 1.438060e+02}, {3.524503e+14, 1.512710e+02}, {3.744784e+14, 1.596120e+02}, {3.994437e+14, 1.689970e+02}, {4.279754e+14, 1.796410e+02}, {4.608965e+14, 1.918230e+02}, {4.993046e+14, 2.059090e+02}, {5.446959e+14, 2.223980e+02}, {5.991655e+14, 2.419780e+02}, {6.657394e+14, 2.656360e+02}, {7.489569e+14, 2.948310e+02}, {8.559507e+14, 3.318290e+02}, {9.986092e+14, 3.803510e+02}, {1.198331e+15, 4.469770e+02}, {1.497914e+15, 5.446050e+02}, {1.997218e+15, 7.025750e+02}, {2.995828e+15, 1.005980e+03}, {5.991655e+15, 1.858230e+03}, */ }; /** \brief Draine & Lee R=3.1 model. */ const manticore::tableType modelDL3 = { // {nu0(Hz), kappa0(cm^2/g @ g/d=100)} {2.997925e+10, 6.553000e-05}, {3.067756e+10, 6.815000e-05}, {3.139211e+10, 7.086000e-05}, {3.212335e+10, 7.368000e-05}, {3.287158e+10, 7.660000e-05}, {3.363726e+10, 7.961000e-05}, {3.442076e+10, 8.273000e-05}, {3.522254e+10, 8.596000e-05}, {3.604297e+10, 8.933000e-05}, {3.688251e+10, 9.282000e-05}, {3.774165e+10, 9.645000e-05}, {3.862076e+10, 1.002000e-04}, {3.952032e+10, 1.041000e-04}, {4.044090e+10, 1.082000e-04}, {4.138288e+10, 1.124000e-04}, {4.234680e+10, 1.168000e-04}, {4.333319e+10, 1.214000e-04}, {4.434255e+10, 1.261000e-04}, {4.537546e+10, 1.311000e-04}, {4.643237e+10, 1.362000e-04}, {4.751393e+10, 1.415000e-04}, {4.862064e+10, 1.470000e-04}, {4.975313e+10, 1.528000e-04}, {5.091203e+10, 1.587000e-04}, {5.209795e+10, 1.649000e-04}, {5.331151e+10, 1.714000e-04}, {5.455325e+10, 1.781000e-04}, {5.582395e+10, 1.850000e-04}, {5.712433e+10, 1.923000e-04}, {5.845491e+10, 1.998000e-04}, {5.981649e+10, 2.076000e-04}, {6.120974e+10, 2.157000e-04}, {6.263553e+10, 2.241000e-04}, {6.409451e+10, 2.329000e-04}, {6.558747e+10, 2.420000e-04}, {6.711511e+10, 2.514000e-04}, {6.867846e+10, 2.612000e-04}, {7.027813e+10, 2.714000e-04}, {7.191527e+10, 2.820000e-04}, {7.359037e+10, 2.931000e-04}, {7.530449e+10, 3.045000e-04}, {7.705856e+10, 3.163000e-04}, {7.885353e+10, 3.287000e-04}, {8.069023e+10, 3.414000e-04}, {8.256971e+10, 3.547000e-04}, {8.449309e+10, 3.685000e-04}, {8.646105e+10, 3.829000e-04}, {8.847507e+10, 3.978000e-04}, {9.053591e+10, 4.133000e-04}, {9.264463e+10, 4.294000e-04}, {9.480263e+10, 4.461000e-04}, {9.701079e+10, 4.634000e-04}, {9.927067e+10, 4.814000e-04}, {1.015829e+11, 5.001000e-04}, {1.039491e+11, 5.195000e-04}, {1.063705e+11, 5.396000e-04}, {1.088480e+11, 5.606000e-04}, {1.113837e+11, 5.823000e-04}, {1.139778e+11, 6.049000e-04}, {1.166326e+11, 6.283000e-04}, {1.193494e+11, 6.526000e-04}, {1.221295e+11, 6.778000e-04}, {1.249744e+11, 7.039000e-04}, {1.278853e+11, 7.310000e-04}, {1.308640e+11, 7.591000e-04}, {1.339124e+11, 7.883000e-04}, {1.370317e+11, 8.187000e-04}, {1.402236e+11, 8.502000e-04}, {1.434894e+11, 8.829000e-04}, {1.468318e+11, 9.169000e-04}, {1.502523e+11, 9.521000e-04}, {1.537523e+11, 9.887000e-04}, {1.573334e+11, 1.027000e-03}, {1.609978e+11, 1.066000e-03}, {1.647483e+11, 1.107000e-03}, {1.685856e+11, 1.149000e-03}, {1.725126e+11, 1.193000e-03}, {1.765313e+11, 1.239000e-03}, {1.806425e+11, 1.287000e-03}, {1.848505e+11, 1.336000e-03}, {1.891566e+11, 1.387000e-03}, {1.935618e+11, 1.440000e-03}, {1.980711e+11, 1.495000e-03}, {2.026844e+11, 1.552000e-03}, {2.074057e+11, 1.612000e-03}, {2.122364e+11, 1.674000e-03}, {2.171811e+11, 1.738000e-03}, {2.222397e+11, 1.804000e-03}, {2.274153e+11, 1.873000e-03}, {2.327130e+11, 1.944000e-03}, {2.381327e+11, 2.018000e-03}, {2.436802e+11, 2.096000e-03}, {2.493574e+11, 2.176000e-03}, {2.551642e+11, 2.259000e-03}, {2.611091e+11, 2.345000e-03}, {2.671899e+11, 2.434000e-03}, {2.734135e+11, 2.527000e-03}, {2.797824e+11, 2.623000e-03}, {2.862992e+11, 2.724000e-03}, {2.929692e+11, 2.828000e-03}, {2.997925e+11, 2.936000e-03}, {3.067756e+11, 3.048000e-03}, {3.139211e+11, 3.165000e-03}, {3.212335e+11, 3.286000e-03}, {3.287158e+11, 3.412000e-03}, {3.363726e+11, 3.542000e-03}, {3.442076e+11, 3.678000e-03}, {3.522254e+11, 3.818000e-03}, {3.604297e+11, 3.964000e-03}, {3.688251e+11, 4.115000e-03}, {3.774165e+11, 4.272000e-03}, {3.862076e+11, 4.435000e-03}, {3.952032e+11, 4.604000e-03}, {4.044090e+11, 4.781000e-03}, {4.138288e+11, 4.965000e-03}, {4.234680e+11, 5.157000e-03}, {4.333319e+11, 5.358000e-03}, {4.434255e+11, 5.568000e-03}, {4.537546e+11, 5.789000e-03}, {4.643237e+11, 6.019000e-03}, {4.751393e+11, 6.261000e-03}, {4.862064e+11, 6.515000e-03}, {4.975313e+11, 6.781000e-03}, {5.091203e+11, 7.059000e-03}, {5.209795e+11, 7.351000e-03}, {5.331151e+11, 7.658000e-03}, {5.455325e+11, 7.980000e-03}, {5.582395e+11, 8.318000e-03}, {5.712433e+11, 8.674000e-03}, {5.845491e+11, 9.048000e-03}, {5.981649e+11, 9.441000e-03}, {6.120974e+11, 9.854000e-03}, {6.263553e+11, 1.029000e-02}, {6.409451e+11, 1.075000e-02}, {6.558747e+11, 1.123000e-02}, {6.711511e+11, 1.174000e-02}, {6.867846e+11, 1.227000e-02}, {7.027813e+11, 1.283000e-02}, {7.191527e+11, 1.342000e-02}, {7.359037e+11, 1.405000e-02}, {7.530449e+11, 1.471000e-02}, {7.705856e+11, 1.541000e-02}, {7.885353e+11, 1.614000e-02}, {8.069023e+11, 1.692000e-02}, {8.256971e+11, 1.774000e-02}, {8.449309e+11, 1.861000e-02}, {8.646105e+11, 1.953000e-02}, {8.847507e+11, 2.050000e-02}, {9.053591e+11, 2.153000e-02}, {9.264463e+11, 2.262000e-02}, {9.480263e+11, 2.377000e-02}, {9.701079e+11, 2.499000e-02}, {9.927067e+11, 2.628000e-02}, {1.015829e+12, 2.764000e-02}, {1.039491e+12, 2.909000e-02}, {1.063705e+12, 3.063000e-02}, {1.088480e+12, 3.225000e-02}, {1.113837e+12, 3.399000e-02}, {1.139778e+12, 3.583000e-02}, {1.166326e+12, 3.778000e-02}, {1.193494e+12, 3.983000e-02}, {1.221295e+12, 4.187000e-02}, {1.249744e+12, 4.395000e-02}, {1.278853e+12, 4.604000e-02}, {1.308640e+12, 4.825000e-02}, {1.339124e+12, 5.056000e-02}, {1.370317e+12, 5.300000e-02}, {1.402236e+12, 5.556000e-02}, {1.434894e+12, 5.825000e-02}, {1.468318e+12, 6.108000e-02}, {1.502523e+12, 6.404000e-02}, {1.537523e+12, 6.716000e-02}, {1.573334e+12, 7.043000e-02}, {1.609978e+12, 7.388000e-02}, {1.647483e+12, 7.751000e-02}, {1.685856e+12, 8.133000e-02}, {1.725126e+12, 8.537000e-02}, {1.765313e+12, 8.963000e-02}, {1.806425e+12, 9.415000e-02}, {1.848505e+12, 9.895000e-02}, {1.891566e+12, 1.041000e-01}, {1.935618e+12, 1.096000e-01}, {1.980711e+12, 1.155000e-01}, {2.026844e+12, 1.219000e-01}, {2.074057e+12, 1.288000e-01}, {2.122364e+12, 1.361000e-01}, {2.171811e+12, 1.433000e-01}, {2.222397e+12, 1.499000e-01}, {2.274153e+12, 1.560000e-01}, {2.327130e+12, 1.623000e-01}, {2.381327e+12, 1.691000e-01}, {2.436802e+12, 1.765000e-01}, {2.493574e+12, 1.845000e-01}, {2.551642e+12, 1.931000e-01}, {2.611091e+12, 2.024000e-01}, {2.671899e+12, 2.123000e-01}, {2.734135e+12, 2.228000e-01}, {2.797824e+12, 2.339000e-01}, {2.862992e+12, 2.457000e-01}, {2.929692e+12, 2.582000e-01}, {2.997925e+12, 2.715000e-01}, {3.067756e+12, 2.855000e-01}, {3.139211e+12, 3.003000e-01}, {3.212335e+12, 3.160000e-01}, {3.287158e+12, 3.325000e-01}, {3.363726e+12, 3.499000e-01}, {3.442076e+12, 3.684000e-01}, {3.522254e+12, 3.881000e-01}, {3.604297e+12, 4.088000e-01}, {3.688251e+12, 4.308000e-01}, {3.774165e+12, 4.540000e-01}, {3.862076e+12, 4.785000e-01}, {3.952032e+12, 5.044000e-01}, {4.044090e+12, 5.318000e-01}, {4.138288e+12, 5.607000e-01}, {4.234680e+12, 5.911000e-01}, {4.333319e+12, 6.235000e-01}, /* lambda < 70 micron: {4.434255e+12, 6.578000e-01}, {4.537546e+12, 6.941000e-01}, {4.643237e+12, 7.323000e-01}, {4.751393e+12, 7.728000e-01}, {4.862064e+12, 8.157000e-01}, {4.975313e+12, 8.611000e-01}, {5.091203e+12, 9.091000e-01}, {5.209795e+12, 9.600000e-01}, {5.331151e+12, 1.014000e+00}, {5.455325e+12, 1.071000e+00}, {5.582395e+12, 1.132000e+00}, {5.712433e+12, 1.197000e+00}, {5.845491e+12, 1.265000e+00}, {5.981649e+12, 1.338000e+00}, {6.120974e+12, 1.415000e+00}, {6.263553e+12, 1.498000e+00}, {6.409451e+12, 1.586000e+00}, {6.558747e+12, 1.680000e+00}, {6.711511e+12, 1.780000e+00}, {6.867846e+12, 1.887000e+00}, {7.027813e+12, 2.001000e+00}, {7.191527e+12, 2.122000e+00}, {7.359037e+12, 2.249000e+00}, {7.530449e+12, 2.383000e+00}, {7.705856e+12, 2.523000e+00}, {7.885353e+12, 2.668000e+00}, */ }; /** \brief Draine & Lee R=5.5 model. */ const manticore::tableType modelDL5 = { // {nu0(Hz), kappa0(cm^2/g @ g/d=100)} {2.997925e+10, 8.052000e-05}, {3.067756e+10, 8.377000e-05}, {3.139211e+10, 8.715000e-05}, {3.212335e+10, 9.066000e-05}, {3.287158e+10, 9.430000e-05}, {3.363726e+10, 9.806000e-05}, {3.442076e+10, 1.019000e-04}, {3.522254e+10, 1.060000e-04}, {3.604297e+10, 1.102000e-04}, {3.688251e+10, 1.145000e-04}, {3.774165e+10, 1.191000e-04}, {3.862076e+10, 1.238000e-04}, {3.952032e+10, 1.286000e-04}, {4.044090e+10, 1.337000e-04}, {4.138288e+10, 1.390000e-04}, {4.234680e+10, 1.444000e-04}, {4.333319e+10, 1.501000e-04}, {4.434255e+10, 1.560000e-04}, {4.537546e+10, 1.621000e-04}, {4.643237e+10, 1.684000e-04}, {4.751393e+10, 1.750000e-04}, {4.862064e+10, 1.818000e-04}, {4.975313e+10, 1.889000e-04}, {5.091203e+10, 1.963000e-04}, {5.209795e+10, 2.039000e-04}, {5.331151e+10, 2.118000e-04}, {5.455325e+10, 2.200000e-04}, {5.582395e+10, 2.286000e-04}, {5.712433e+10, 2.374000e-04}, {5.845491e+10, 2.466000e-04}, {5.981649e+10, 2.561000e-04}, {6.120974e+10, 2.659000e-04}, {6.263553e+10, 2.761000e-04}, {6.409451e+10, 2.867000e-04}, {6.558747e+10, 2.977000e-04}, {6.711511e+10, 3.091000e-04}, {6.867846e+10, 3.208000e-04}, {7.027813e+10, 3.331000e-04}, {7.191527e+10, 3.457000e-04}, {7.359037e+10, 3.589000e-04}, {7.530449e+10, 3.725000e-04}, {7.705856e+10, 3.865000e-04}, {7.885353e+10, 4.011000e-04}, {8.069023e+10, 4.161000e-04}, {8.256971e+10, 4.318000e-04}, {8.449309e+10, 4.479000e-04}, {8.646105e+10, 4.647000e-04}, {8.847507e+10, 4.821000e-04}, {9.053591e+10, 5.000000e-04}, {9.264463e+10, 5.186000e-04}, {9.480263e+10, 5.379000e-04}, {9.701079e+10, 5.578000e-04}, {9.927067e+10, 5.784000e-04}, {1.015829e+11, 5.998000e-04}, {1.039491e+11, 6.219000e-04}, {1.063705e+11, 6.447000e-04}, {1.088480e+11, 6.684000e-04}, {1.113837e+11, 6.929000e-04}, {1.139778e+11, 7.183000e-04}, {1.166326e+11, 7.445000e-04}, {1.193494e+11, 7.716000e-04}, {1.221295e+11, 7.997000e-04}, {1.249744e+11, 8.286000e-04}, {1.278853e+11, 8.586000e-04}, {1.308640e+11, 8.896000e-04}, {1.339124e+11, 9.217000e-04}, {1.370317e+11, 9.550000e-04}, {1.402236e+11, 9.894000e-04}, {1.434894e+11, 1.025000e-03}, {1.468318e+11, 1.062000e-03}, {1.502523e+11, 1.100000e-03}, {1.537523e+11, 1.140000e-03}, {1.573334e+11, 1.180000e-03}, {1.609978e+11, 1.223000e-03}, {1.647483e+11, 1.266000e-03}, {1.685856e+11, 1.312000e-03}, {1.725126e+11, 1.359000e-03}, {1.765313e+11, 1.408000e-03}, {1.806425e+11, 1.458000e-03}, {1.848505e+11, 1.510000e-03}, {1.891566e+11, 1.564000e-03}, {1.935618e+11, 1.620000e-03}, {1.980711e+11, 1.678000e-03}, {2.026844e+11, 1.738000e-03}, {2.074057e+11, 1.801000e-03}, {2.122364e+11, 1.865000e-03}, {2.171811e+11, 1.932000e-03}, {2.222397e+11, 2.001000e-03}, {2.274153e+11, 2.073000e-03}, {2.327130e+11, 2.147000e-03}, {2.381327e+11, 2.224000e-03}, {2.436802e+11, 2.304000e-03}, {2.493574e+11, 2.388000e-03}, {2.551642e+11, 2.473000e-03}, {2.611091e+11, 2.562000e-03}, {2.671899e+11, 2.655000e-03}, {2.734135e+11, 2.750000e-03}, {2.797824e+11, 2.850000e-03}, {2.862992e+11, 2.953000e-03}, {2.929692e+11, 3.060000e-03}, {2.997925e+11, 3.171000e-03}, {3.067756e+11, 3.286000e-03}, {3.139211e+11, 3.406000e-03}, {3.212335e+11, 3.530000e-03}, {3.287158e+11, 3.659000e-03}, {3.363726e+11, 3.793000e-03}, {3.442076e+11, 3.931000e-03}, {3.522254e+11, 4.075000e-03}, {3.604297e+11, 4.224000e-03}, {3.688251e+11, 4.379000e-03}, {3.774165e+11, 4.539000e-03}, {3.862076e+11, 4.705000e-03}, {3.952032e+11, 4.878000e-03}, {4.044090e+11, 5.058000e-03}, {4.138288e+11, 5.246000e-03}, {4.234680e+11, 5.442000e-03}, {4.333319e+11, 5.646000e-03}, {4.434255e+11, 5.861000e-03}, {4.537546e+11, 6.086000e-03}, {4.643237e+11, 6.321000e-03}, {4.751393e+11, 6.567000e-03}, {4.862064e+11, 6.826000e-03}, {4.975313e+11, 7.097000e-03}, {5.091203e+11, 7.380000e-03}, {5.209795e+11, 7.678000e-03}, {5.331151e+11, 7.990000e-03}, {5.455325e+11, 8.318000e-03}, {5.582395e+11, 8.663000e-03}, {5.712433e+11, 9.026000e-03}, {5.845491e+11, 9.407000e-03}, {5.981649e+11, 9.808000e-03}, {6.120974e+11, 1.023000e-02}, {6.263553e+11, 1.067000e-02}, {6.409451e+11, 1.114000e-02}, {6.558747e+11, 1.163000e-02}, {6.711511e+11, 1.215000e-02}, {6.867846e+11, 1.269000e-02}, {7.027813e+11, 1.327000e-02}, {7.191527e+11, 1.387000e-02}, {7.359037e+11, 1.451000e-02}, {7.530449e+11, 1.518000e-02}, {7.705856e+11, 1.590000e-02}, {7.885353e+11, 1.665000e-02}, {8.069023e+11, 1.744000e-02}, {8.256971e+11, 1.828000e-02}, {8.449309e+11, 1.917000e-02}, {8.646105e+11, 2.011000e-02}, {8.847507e+11, 2.110000e-02}, {9.053591e+11, 2.215000e-02}, {9.264463e+11, 2.326000e-02}, {9.480263e+11, 2.444000e-02}, {9.701079e+11, 2.568000e-02}, {9.927067e+11, 2.700000e-02}, {1.015829e+12, 2.840000e-02}, {1.039491e+12, 2.988000e-02}, {1.063705e+12, 3.145000e-02}, {1.088480e+12, 3.312000e-02}, {1.113837e+12, 3.489000e-02}, {1.139778e+12, 3.678000e-02}, {1.166326e+12, 3.877000e-02}, {1.193494e+12, 4.087000e-02}, {1.221295e+12, 4.297000e-02}, {1.249744e+12, 4.508000e-02}, {1.278853e+12, 4.722000e-02}, {1.308640e+12, 4.948000e-02}, {1.339124e+12, 5.184000e-02}, {1.370317e+12, 5.433000e-02}, {1.402236e+12, 5.694000e-02}, {1.434894e+12, 5.969000e-02}, {1.468318e+12, 6.257000e-02}, {1.502523e+12, 6.560000e-02}, {1.537523e+12, 6.877000e-02}, {1.573334e+12, 7.211000e-02}, {1.609978e+12, 7.563000e-02}, {1.647483e+12, 7.933000e-02}, {1.685856e+12, 8.322000e-02}, {1.725126e+12, 8.734000e-02}, {1.765313e+12, 9.168000e-02}, {1.806425e+12, 9.628000e-02}, {1.848505e+12, 1.012000e-01}, {1.891566e+12, 1.064000e-01}, {1.935618e+12, 1.120000e-01}, {1.980711e+12, 1.181000e-01}, {2.026844e+12, 1.248000e-01}, {2.074057e+12, 1.322000e-01}, {2.122364e+12, 1.402000e-01}, {2.171811e+12, 1.483000e-01}, {2.222397e+12, 1.551000e-01}, {2.274153e+12, 1.611000e-01}, {2.327130e+12, 1.673000e-01}, {2.381327e+12, 1.741000e-01}, {2.436802e+12, 1.818000e-01}, {2.493574e+12, 1.901000e-01}, {2.551642e+12, 1.992000e-01}, {2.611091e+12, 2.090000e-01}, {2.671899e+12, 2.195000e-01}, {2.734135e+12, 2.308000e-01}, {2.797824e+12, 2.428000e-01}, {2.862992e+12, 2.556000e-01}, {2.929692e+12, 2.693000e-01}, {2.997925e+12, 2.838000e-01}, {3.067756e+12, 2.992000e-01}, {3.139211e+12, 3.154000e-01}, {3.212335e+12, 3.327000e-01}, {3.287158e+12, 3.510000e-01}, {3.363726e+12, 3.703000e-01}, {3.442076e+12, 3.909000e-01}, {3.522254e+12, 4.128000e-01}, {3.604297e+12, 4.358000e-01}, {3.688251e+12, 4.602000e-01}, {3.774165e+12, 4.858000e-01}, {3.862076e+12, 5.127000e-01}, {3.952032e+12, 5.411000e-01}, {4.044090e+12, 5.708000e-01}, {4.138288e+12, 6.020000e-01}, {4.234680e+12, 6.348000e-01}, {4.333319e+12, 6.694000e-01}, /* lambda < 70 micron: {4.434255e+12, 7.058000e-01}, {4.537546e+12, 7.442000e-01}, {4.643237e+12, 7.844000e-01}, {4.751393e+12, 8.267000e-01}, {4.862064e+12, 8.714000e-01}, {4.975313e+12, 9.183000e-01}, {5.091203e+12, 9.678000e-01}, {5.209795e+12, 1.020000e+00}, {5.331151e+12, 1.075000e+00}, {5.455325e+12, 1.134000e+00}, {5.582395e+12, 1.196000e+00}, {5.712433e+12, 1.261000e+00}, {5.845491e+12, 1.330000e+00}, {5.981649e+12, 1.403000e+00}, {6.120974e+12, 1.481000e+00}, {6.263553e+12, 1.564000e+00}, {6.409451e+12, 1.653000e+00}, {6.558747e+12, 1.747000e+00}, {6.711511e+12, 1.848000e+00}, {6.867846e+12, 1.955000e+00}, {7.027813e+12, 2.069000e+00}, {7.191527e+12, 2.191000e+00}, {7.359037e+12, 2.319000e+00}, {7.530449e+12, 2.454000e+00}, {7.705856e+12, 2.595000e+00}, {7.885353e+12, 2.740000e+00}, */ }; // Register new models here as needed. std::map modelMap = { {"OH5", dust::modelOH5}, {"DL3", dust::modelDL3}, {"DL5", dust::modelDL5}, }; /** \brief Add available dust model names to options summary. \param[in] opts Command line options. \param[in] name Short name of dust models option. */ void printModels(std::vector &opts, char name) { // Find dust model option. for (auto &entry: opts) { if (entry.shortName == name) { entry.helpText += "\n(Available models:"; for (auto &model: modelMap) { entry.helpText += " " + model.first; } entry.helpText += ")"; } } } } // namespace dust void Dust::setModel(const std::string &model, double rho) { const char *const fn = "Dust::setModel"; // Special power law construct pow:nu0_GHz:kappa0:beta. if (model.find("pow:") == 0) { double nu0 = 1.0, kappa0 = 0.0, beta = 1.0; if (3 != sscanf(model.c_str(), "pow:%lf:%lf:%lf", &nu0, &kappa0, &beta)) { MU_ERROR(fn, "Invalid power law '%s', using default.", model); } else { Dust::setModel(1e9*nu0, kappa0, beta); return; } } auto mp = dust::modelMap.find(model); if (mp == dust::modelMap.end()) { mp = dust::modelMap.begin(); MU_ERROR(fn, "Unknown dust model '%s', using '%s'", model, mp->first); } name_ = mp->first; rho_ = rho; auto table = mp->second; if (rho != 100.0) { double scale = 100.0/rho; for (auto &entry: table) { entry.second *= scale; } } // Release old model. if (spline_) { gsl_spline_free(spline_); spline_ = nullptr; } // For small tables use the logarithm to better track power laws. ln_ = (table.size() < 128); // Limit interpolator table size. spline_ = initSpline(table, ln_, std::max(1UL, std::min(table.size()/64, 4UL))); // Invalidate fixed power law. opacity_ = Opacity{0.0, 0.0, 0.0}; } void Dust::setModel(double nu0, double kappa0, double beta) { char name[64]; snprintf(name, sizeof(name), "pow:%.6g:%.6g:%.6g", 1e-9*nu0, kappa0, beta); name_ = name; opacity_ = Opacity{1.0/nu0, kappa0, beta}; // Ratio not meaningful here. rho_ = 0.0; // Free old model. if (spline_) { gsl_spline_free(spline_); spline_ = nullptr; ln_ = false; } } /** The opacity value is interpolated from tabulated values assuming a fixed power law dependence between adjacent points. If \a nu lies woutside the range of the table, the corresponding end value is extrapolated. \return Dust+gas extinction opacity at the given wavelength. */ double Dust::kappa(double nu, gsl_interp_accel *acc) const { if (spline_) { double k = gsl_spline_eval(spline_, nu, acc); return (ln_ ? exp(k) : k); } else { // Fixed power law. return opacity_.kappa0 * pow(nu*opacity_.inu0, opacity_.beta); } } } // namespace manticore