Exemplo n.º 1
0
    public ManeuverMgr(ManeuverMgr copyFrom)
    {
        Maneuver mForCompare = new Maneuver();

        maneuvers = new SortedList <Maneuver, Maneuver>(mForCompare);
        foreach (Maneuver m in copyFrom.maneuvers.Keys)
        {
            maneuvers.Add(m, m);
        }
    }
Exemplo n.º 2
0
    /// <summary>
    /// New Gravity state. Also need to call SetAlgorithmAndForce to fully configure.
    /// </summary>
    /// <param name="size"></param>
    public GravityState(int size)
    {
        InitArrays(size);
        gravityParticles   = new List <GravityParticles>();
        fixedBodies        = new List <GravityEngine.FixedBody>();
        keplerDepthChanged = new List <GravityEngine.FixedBody>();

        maneuverMgr = new ManeuverMgr();
        onRails     = true;

#pragma warning disable 162     // disable unreachable code warning
        if (GravityEngine.DEBUG)
        {
            Debug.Log("Created new (empty) gravityState");
        }
#pragma warning restore 162
    }
Exemplo n.º 3
0
    /// <summary>
    /// Clone constructor
    ///
    /// Creates a deep copy suitable for independent evolution as a trajectory or for maneuver iterations.
    /// Maneuvers will be executed but the callback to motify the owner of the maneuver will be skipped (only
    /// the real evolution will notify).
    /// </summary>
    /// <param name="fromState"></param>
    public GravityState(GravityState fromState)
    {
        m                       = new double[fromState.arraySize];
        r                       = new double[fromState.arraySize, NDIM];
        info                    = new byte[fromState.arraySize];
        size2                   = new double[fromState.arraySize];
        physicalTime            = new double[System.Enum.GetNames(typeof(Evolvers)).Length];
        arraySize               = fromState.arraySize;
        numBodies               = fromState.numBodies;
        fixedBodiesInIntegrator = fromState.fixedBodiesInIntegrator;
        onRails                 = fromState.onRails;


        // omitting hasTrajectories
        integrator = fromState.integrator.DeepClone();

        // don't copy particles, but need to init list
        gravityParticles = new List <GravityParticles>();

        // DO copy the maneuvers
        maneuverMgr = new ManeuverMgr(fromState.maneuverMgr);

        fixedBodies = new List <GravityEngine.FixedBody>(fromState.fixedBodies);

        for (int i = 0; i < physicalTime.Length; i++)
        {
            physicalTime[i] = fromState.physicalTime[i];
        }
        time           = fromState.time;
        forceDelegate  = fromState.forceDelegate;
        selectiveForce = fromState.selectiveForce;

        keplerDepthChanged = new List <GravityEngine.FixedBody>(fromState.keplerDepthChanged);

        if (fromState.masslessEngine != null)
        {
            masslessEngine = fromState.masslessEngine.DeepClone();
            masslessEngine.ResetTrajectories((float)fromState.time);
        }

        for (int i = 0; i < arraySize; i++)
        {
            m[i]     = fromState.m[i];
            info[i]  = fromState.info[i];
            size2[i] = fromState.size2[i];
            r[i, 0]  = fromState.r[i, 0];
            r[i, 1]  = fromState.r[i, 1];
            r[i, 2]  = fromState.r[i, 2];
        }

        // copies do not notify maneuver owners of maneuver completion. They are assumed to be "what if"
        // evolutions
        isCopy = true;

#pragma warning disable 162     // disable unreachable code warning
        if (GravityEngine.DEBUG)
        {
            Debug.Log("Created new (copy) gravityState");
        }
#pragma warning restore 162
    }