--
-- Patricia Fasel
-- Los Alamos National Laboratory
-- 1990 August
--
module Utils (xsectInterp, genRand) where
import GamtebType
import Consts
import InitTable
import Array((!))--1.3
-- linear interpolation to get cross sections as f(erg)
xsectInterp :: Energy -> (Indx, Probability)
xsectInterp e =
(eIndx, (pComp, pPair, pPhot, (pComp+pPair+pPhot)))
where
logE = log e
eIndx = findIndx 1
where
findIndx i | (i < numLev) && (logE > ergs!i) =
findIndx (i+1)
findIndx i = i
i = (if (eIndx < 2) then 2 else eIndx)
f = (logE - ergs!(i-1)) / (ergs!i - ergs!(i-1))
pComp = exp (xComp!(i-1) + f*(xComp!i - xComp!(i-1)))
pPair = exp (xPair!(i-1) + f*(xPair!i - xPair!(i-1)))
pPhot = exp (xPhot!(i-1) + f*(xPhot!i - xPhot!(i-1)))
-- random number generator from seed
genRand :: Random -> (Random, Random)
genRand seed =
(r1/65599, r2/71123)
where
r1 = (314557*seed + 2711) `fiRem` 65599
r2 = (2711*seed + 314557) `fiRem` 71123
x `fiRem` m = x - fromIntegral ((truncate x `div` m) * m)
|