Example usage for org.apache.commons.math3.dfp Dfp sqrt

List of usage examples for org.apache.commons.math3.dfp Dfp sqrt

Introduction

In this page you can find the example usage for org.apache.commons.math3.dfp Dfp sqrt.

Prototype

public Dfp sqrt() 

Source Link

Document

Compute the square root.

Usage

From source file:org.orekit.forces.gravity.AssociatedLegendreFunction.java

public AssociatedLegendreFunction(boolean normalized, int n, int m, DfpField dfpField) {

    this.m = m;//from w  ww .ja v a  2 s .co m

    // store mth derivative of the degree n Legendre polynomial
    polynomial = differentiateLegendrePolynomial(getLegendrePolynomial(n, dfpField), m, dfpField);

    if (normalized) {
        // compute normalization coefficient
        Dfp c = dfpField.newDfp(((m == 0) ? 1.0 : 2.0) * (2 * n + 1));
        for (int k = 0; k < m; ++k) {
            c = c.divide(dfpField.newDfp((n + 1 + k) * (n - k)));
        }
        this.normalization = c.sqrt();
    } else {
        this.normalization = dfpField.getOne();
    }

}

From source file:org.orekit.forces.gravity.AssociatedLegendreFunction.java

public Dfp value(Dfp t) {
    Dfp y1 = polynomial[polynomial.length - 1];
    for (int j = polynomial.length - 2; j >= 0; j--) {
        y1 = y1.multiply(t).add(polynomial[j]);
    }/*from w ww .  j  a  va  2 s  .c o m*/
    Dfp oneMinusT2 = t.getField().getOne().subtract(t.multiply(t));
    Dfp y2 = t.getField().getOne();
    for (int j = 0; j < m; ++j) {
        y2 = y2.multiply(oneMinusT2);
    }
    y2 = y2.sqrt();
    return y1.multiply(y2).multiply(normalization);
}

From source file:org.orekit.forces.gravity.ReferenceFieldModel.java

public Dfp nonCentralPart(final AbsoluteDate date, final Vector3D position) throws OrekitException {

    int degree = provider.getMaxDegree();
    int order = provider.getMaxOrder();
    //use coefficients without caring if they are the correct type
    final RawSphericalHarmonics harmonics = raw(provider).onDate(date);

    Dfp x = dfpField.newDfp(position.getX());
    Dfp y = dfpField.newDfp(position.getY());
    Dfp z = dfpField.newDfp(position.getZ());

    Dfp rho2 = x.multiply(x).add(y.multiply(y));
    Dfp rho = rho2.sqrt();
    Dfp r2 = rho2.add(z.multiply(z));/*from w w w .  ja va 2 s  .  c o  m*/
    Dfp r = r2.sqrt();
    Dfp aOr = dfpField.newDfp(provider.getAe()).divide(r);
    Dfp lambda = position.getX() > 0 ? dfpField.getTwo().multiply(DfpMath.atan(y.divide(rho.add(x))))
            : dfpField.getPi().subtract(dfpField.getTwo().multiply(DfpMath.atan(y.divide(rho.subtract(x)))));
    Dfp cosTheta = z.divide(r);

    Dfp value = dfpField.getZero();
    Dfp aOrN = aOr;
    for (int n = 2; n <= degree; ++n) {
        Dfp sum = dfpField.getZero();
        for (int m = 0; m <= FastMath.min(n, order); ++m) {
            double cnm = harmonics.getRawCnm(n, m);
            double snm = harmonics.getRawSnm(n, m);
            Dfp mLambda = lambda.multiply(m);
            Dfp c = DfpMath.cos(mLambda).multiply(dfpField.newDfp(cnm));
            Dfp s = DfpMath.sin(mLambda).multiply(dfpField.newDfp(snm));
            Dfp pnm = alf[n][m].value(cosTheta);
            sum = sum.add(pnm.multiply(c.add(s)));
        }
        aOrN = aOrN.multiply(aOr);
        value = value.add(aOrN.multiply(sum));
    }

    return value.multiply(dfpField.newDfp(provider.getMu())).divide(r);

}