Example usage for org.apache.commons.math3.analysis.differentiation DerivativeStructure reciprocal

List of usage examples for org.apache.commons.math3.analysis.differentiation DerivativeStructure reciprocal

Introduction

In this page you can find the example usage for org.apache.commons.math3.analysis.differentiation DerivativeStructure reciprocal.

Prototype

public DerivativeStructure reciprocal() 

Source Link

Usage

From source file:org.orekit.forces.BoxAndSolarArraySpacecraft.java

/** {@inheritDoc} */
public FieldVector3D<DerivativeStructure> radiationPressureAcceleration(final AbsoluteDate date,
        final Frame frame, final FieldVector3D<DerivativeStructure> position,
        final FieldRotation<DerivativeStructure> rotation, final DerivativeStructure mass,
        final FieldVector3D<DerivativeStructure> flux) throws OrekitException {

    if (flux.getNormSq().getValue() < Precision.SAFE_MIN) {
        // null illumination (we are probably in umbra)
        return new FieldVector3D<DerivativeStructure>(0.0, flux);
    }// w  ww . jav a 2s  . c om

    // radiation flux in spacecraft frame
    final FieldVector3D<DerivativeStructure> fluxSat = rotation.applyTo(flux);

    // solar array contribution
    FieldVector3D<DerivativeStructure> normal = getNormal(date, frame, position, rotation);
    DerivativeStructure dot = FieldVector3D.dotProduct(normal, fluxSat);
    if (dot.getValue() > 0) {
        // the solar array is illuminated backward,
        // fix signs to compute contribution correctly
        dot = dot.negate();
        normal = normal.negate();
    }
    FieldVector3D<DerivativeStructure> force = facetRadiationAcceleration(normal, solarArrayArea, fluxSat, dot);

    // body facets contribution
    for (final Facet bodyFacet : facets) {
        normal = new FieldVector3D<DerivativeStructure>(mass.getField().getOne(), bodyFacet.getNormal());
        dot = FieldVector3D.dotProduct(normal, fluxSat);
        if (dot.getValue() < 0) {
            // the facet intercepts the incoming flux
            force = force.add(facetRadiationAcceleration(normal, bodyFacet.getArea(), fluxSat, dot));
        }
    }

    // convert to inertial frame
    return rotation.applyInverseTo(new FieldVector3D<DerivativeStructure>(mass.reciprocal(), force));

}

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

@Override
public FieldVector3D<DerivativeStructure> accelerationDerivatives(final AbsoluteDate date, final Frame frame,
        final FieldVector3D<DerivativeStructure> position, final FieldVector3D<DerivativeStructure> velocity,
        final FieldRotation<DerivativeStructure> rotation, final DerivativeStructure mass) {

    //radius//from  w  w w .  j  av a 2 s.  c o  m
    final DerivativeStructure r2 = position.getNormSq();
    final DerivativeStructure r = r2.sqrt();
    //speed squared
    final DerivativeStructure s2 = velocity.getNormSq();
    final double c2 = Constants.SPEED_OF_LIGHT * Constants.SPEED_OF_LIGHT;
    //eq. 3.146
    return new FieldVector3D<DerivativeStructure>(r.reciprocal().multiply(4 * this.gm).subtract(s2), position,
            position.dotProduct(velocity).multiply(4), velocity)
                    .scalarMultiply(r2.multiply(r).multiply(c2).reciprocal().multiply(this.gm));

}

From source file:org.orekit.forces.maneuvers.ConstantThrustManeuver.java

/** {@inheritDoc} */
public FieldVector3D<DerivativeStructure> accelerationDerivatives(final AbsoluteDate date, final Frame frame,
        final FieldVector3D<DerivativeStructure> position, final FieldVector3D<DerivativeStructure> velocity,
        final FieldRotation<DerivativeStructure> rotation, final DerivativeStructure mass)
        throws OrekitException {
    if (firing) {
        return new FieldVector3D<DerivativeStructure>(mass.reciprocal().multiply(thrust),
                rotation.applyInverseTo(direction));
    } else {//from   www.  ja  v  a2  s .c  o  m
        // constant (and null) acceleration when not firing
        final int parameters = mass.getFreeParameters();
        final int order = mass.getOrder();
        return new FieldVector3D<DerivativeStructure>(new DerivativeStructure(parameters, order, 0.0),
                new DerivativeStructure(parameters, order, 0.0),
                new DerivativeStructure(parameters, order, 0.0));
    }
}

From source file:org.orekit.forces.radiation.SolarRadiationPressure.java

/** {@inheritDoc} */
public FieldVector3D<DerivativeStructure> accelerationDerivatives(final AbsoluteDate date, final Frame frame,
        final FieldVector3D<DerivativeStructure> position, final FieldVector3D<DerivativeStructure> velocity,
        final FieldRotation<DerivativeStructure> rotation, final DerivativeStructure mass)
        throws OrekitException {

    final FieldVector3D<DerivativeStructure> sunSatVector = position
            .subtract(sun.getPVCoordinates(date, frame).getPosition());
    final DerivativeStructure r2 = sunSatVector.getNormSq();

    // compute flux
    final double ratio = getLightningRatio(position.toVector3D(), frame, date);
    final DerivativeStructure rawP = r2.reciprocal().multiply(kRef * ratio);
    final FieldVector3D<DerivativeStructure> flux = new FieldVector3D<DerivativeStructure>(
            rawP.divide(r2.sqrt()), sunSatVector);

    // compute acceleration with all its partial derivatives
    return spacecraft.radiationPressureAcceleration(date, frame, position, rotation, mass, flux);

}

From source file:org.orekit.forces.SphericalSpacecraft.java

/** {@inheritDoc} */
public FieldVector3D<DerivativeStructure> radiationPressureAcceleration(final AbsoluteDate date,
        final Frame frame, final FieldVector3D<DerivativeStructure> position,
        final FieldRotation<DerivativeStructure> rotation, final DerivativeStructure mass,
        final FieldVector3D<DerivativeStructure> flux) {
    final double kP = crossSection * (1 + 4 * (1.0 - absorptionCoeff) * (1.0 - specularReflectionCoeff) / 9.0);
    return new FieldVector3D<DerivativeStructure>(mass.reciprocal().multiply(kP), flux);
}