// Construct from components
lineDivide::lineDivide(const curvedEdge& bc, const label n, const scalar xratio)
:
    points_(n + 1),
    divisions_(n + 1),
    noPoints_(n)
{
    scalar np(n);
    scalar lambda(0.0);

    if (xratio == 1.0)
    {
        scalar y(1.0/np);
        for (label i=0; i<=noPoints_; i++)
        {
            lambda = scalar(i)/np;
            points_[i] = bc.position(lambda);
            divisions_[i] = y*i;
        }
    }
    else
    {
        points_[0] = bc.position(0.0);
        divisions_[0] = 0.0;
        scalar xrpower = 1.0;

        for (label i=1; i<=noPoints_; i++)
        {
            lambda = (1.0 - pow(xratio, i))/(1.0 - pow(xratio, np));
            points_[i] = bc.position(lambda);
            divisions_[i] = lambda;
            xrpower *= xratio;
        }
    }
}
Esempio n. 2
0
Foam::lineDivide::lineDivide
(
    const curvedEdge& cedge,
    const label ndiv,
    const scalar xratio
)
:
    points_(ndiv + 1),
    divisions_(ndiv + 1)
{
    divisions_[0]    = 0.0;
    divisions_[ndiv] = 1.0;

    // calculate the spacing
    if (xratio == 1.0)
    {
        for (label i=1; i < ndiv; i++)
        {
            divisions_[i] = scalar(i)/ndiv;
        }
    }
    else
    {
        for (label i=1; i < ndiv; i++)
        {
            divisions_[i] = (1.0 - pow(xratio, i))/(1.0 - pow(xratio, ndiv));
        }
    }

    // calculate the points
    for (label i=0; i <= ndiv; i++)
    {
        points_[i] = cedge.position(divisions_[i]);
    }
}