/* pickshell: pick a random point on a sphere of specified radius. */
static inline mwvector pickShell(dsfmt_t* dsfmtState, real rad)
{
    real rsq, rsc;
    mwvector vec;

    do                      /* pick point in NDIM-space */
    {
        vec = mwRandomUnitPoint(dsfmtState);
        rsq = mw_sqrv(vec);         /* compute radius squared */
    }
    while (rsq > 1.0);              /* reject if outside sphere */

    rsc = rad / mw_sqrt(rsq);       /* compute scaling factor */
    mw_incmulvs(vec, rsc);          /* rescale to radius given */

    return vec;
}
mwvector mwRandomVector(dsfmt_t* dsfmtState, real r)
{
    mwvector v = mwRandomUnitVector(dsfmtState);
    mw_incmulvs(v, r);
    return v;
}
mwvector mwRandomPoint(dsfmt_t* dsfmtState, real s)
{
    mwvector v = mwRandomUnitPoint(dsfmtState);
    mw_incmulvs(v, s);
    return v;
}