public ReentrySimulation(Orbit _initialOrbit, double _UT, double _dragMassExcludingUsedParachutes, List <SimulatedParachute> _parachuteList, double _mass, IDescentSpeedPolicy _descentSpeedPolicy, double _decelEndAltitudeASL, double _maxThrustAccel, double _parachuteSemiDeployMultiplier, double _probableLandingSiteASL, bool _multiplierHasError, double _dt) { // Store all the input values as they were given input_initialOrbit = _initialOrbit; input_UT = _UT; input_dragMassExcludingUsedParachutes = _dragMassExcludingUsedParachutes; input_parachuteList = _parachuteList; input_mass = _mass; input_descentSpeedPolicy = _descentSpeedPolicy; input_decelEndAltitudeASL = _decelEndAltitudeASL; input_maxThrustAccel = _maxThrustAccel; input_parachuteSemiDeployMultiplier = _parachuteSemiDeployMultiplier; input_probableLandingSiteASL = _probableLandingSiteASL; input_multiplierHasError = _multiplierHasError; input_dt = _dt; max_dt = _dt; dt = max_dt; // Get a copy of the original orbit, to be more thread safe initialOrbit = new Orbit(); initialOrbit.UpdateFromOrbitAtUT(_initialOrbit, _UT, _initialOrbit.referenceBody); CelestialBody body = _initialOrbit.referenceBody; bodyHasAtmosphere = body.atmosphere; seaLevelAtmospheres = body.atmosphereMultiplier; scaleHeight = 1000 * body.atmosphereScaleHeight; bodyRadius = body.Radius; gravParameter = body.gravParameter; this.dragMassExcludingUsedParachutes = _dragMassExcludingUsedParachutes; this.parachutes = _parachuteList; this.parachuteSemiDeployMultiplier = _parachuteSemiDeployMultiplier; this.multiplierHasError = _multiplierHasError; this.mass = _mass; bodyAngularVelocity = body.angularVelocity; this.descentSpeedPolicy = _descentSpeedPolicy; decelRadius = bodyRadius + _decelEndAltitudeASL; aerobrakedRadius = bodyRadius + body.RealMaxAtmosphereAltitude(); mainBody = body; this.maxThrustAccel = _maxThrustAccel; this.probableLandingSiteASL = _probableLandingSiteASL; this.probableLandingSiteRadius = _probableLandingSiteASL + bodyRadius; referenceFrame = ReferenceFrame.CreateAtCurrentTime(_initialOrbit.referenceBody); orbitReenters = OrbitReenters(_initialOrbit); if (orbitReenters) { startUT = _UT; } maxDragGees = 0; deltaVExpended = 0; trajectory = new List <AbsoluteVector>(); }
public ReentrySimulation(Orbit initialOrbit, double UT, double dragCoefficient, IDescentSpeedPolicy descentSpeedPolicy, double endAltitudeASL, double maxThrustAccel) { CelestialBody body = initialOrbit.referenceBody; bodyHasAtmosphere = body.atmosphere; seaLevelAtmospheres = body.atmosphereMultiplier; scaleHeight = 1000 * body.atmosphereScaleHeight; bodyRadius = body.Radius; gravParameter = body.gravParameter; this.dragCoefficient = dragCoefficient; bodyAngularVelocity = body.angularVelocity; this.descentSpeedPolicy = descentSpeedPolicy; landedRadius = bodyRadius + endAltitudeASL; aerobrakedRadius = bodyRadius + body.RealMaxAtmosphereAltitude(); mainBody = body; this.maxThrustAccel = maxThrustAccel; referenceFrame = ReferenceFrame.CreateAtCurrentTime(initialOrbit.referenceBody); orbitReenters = OrbitReenters(initialOrbit); if (orbitReenters) { startUT = UT; t = startUT; AdvanceToFreefallEnd(initialOrbit); } maxDragGees = 0; deltaVExpended = 0; trajectory = new List <AbsoluteVector>(); }
public ReentrySimulation(Orbit _initialOrbit, double _UT, SimulatedVessel _vessel, SimCurves _simcurves, IDescentSpeedPolicy _descentSpeedPolicy, double _decelEndAltitudeASL, double _maxThrustAccel, double _parachuteSemiDeployMultiplier, double _probableLandingSiteASL, bool _multiplierHasError, double _dt, double _min_dt) { // Store all the input values as they were given input_initialOrbit = _initialOrbit; input_UT = _UT; vessel = _vessel; input_descentSpeedPolicy = _descentSpeedPolicy; input_decelEndAltitudeASL = _decelEndAltitudeASL; input_maxThrustAccel = _maxThrustAccel; input_parachuteSemiDeployMultiplier = _parachuteSemiDeployMultiplier; input_probableLandingSiteASL = _probableLandingSiteASL; input_multiplierHasError = _multiplierHasError; input_dt = _dt; // the vessel attitude relative to the surface vel. Fixed for now attitude = Quaternion.Euler(180, 0, 0); min_dt = _min_dt; max_dt = _dt; dt = max_dt; // Get a copy of the original orbit, to be more thread safe initialOrbit = new Orbit(); initialOrbit.UpdateFromOrbitAtUT(_initialOrbit, _UT, _initialOrbit.referenceBody); CelestialBody body = _initialOrbit.referenceBody; bodyHasAtmosphere = body.atmosphere; bodyRadius = body.Radius; gravParameter = body.gravParameter; this.parachuteSemiDeployMultiplier = _parachuteSemiDeployMultiplier; this.multiplierHasError = _multiplierHasError; bodyAngularVelocity = body.angularVelocity; this.descentSpeedPolicy = _descentSpeedPolicy; decelRadius = bodyRadius + _decelEndAltitudeASL; aerobrakedRadius = bodyRadius + body.RealMaxAtmosphereAltitude(); mainBody = body; this.maxThrustAccel = _maxThrustAccel; this.probableLandingSiteASL = _probableLandingSiteASL; this.probableLandingSiteRadius = _probableLandingSiteASL + bodyRadius; referenceFrame = ReferenceFrame.CreateAtCurrentTime(_initialOrbit.referenceBody); orbitReenters = OrbitReenters(_initialOrbit); if (orbitReenters) { startUT = _UT; } maxDragGees = 0; deltaVExpended = 0; trajectory = new List <AbsoluteVector>(); simCurves = _simcurves; once = true; }