public void VerifyAllEnums() { var acceleration = new Acceleration(1, AccelerationUnit.BaseUnit); var angle = new Angle(1, AngleUnit.BaseUnit); var angularAcceleration = new AngularAcceleration(1, AngularAccelerationUnit.BaseUnit); var area = new Area(1, AreaUnit.BaseUnit); var density = new MassDensity(1, MassDensityUnit.BaseUnit); var electricCurrent = new ElectricCurrent(1, ElectricCurrentUnit.BaseUnit); var electricResistance = new ElectricResistance(1, ElectricResistanceUnit.BaseUnit); var electricVoltage = new ElectricPotential(1, ElectricPotentialUnit.BaseUnit); var energy = new Energy(1, EnergyUnit.BaseUnit); var force = new Force(1, ForceUnit.BaseUnit); var frequency = new Frequency(1, FrequencyUnit.BaseUnit); var jerk = new Jerk(1, JerkUnit.BaseUnit); var length = new Length(1, LengthUnit.BaseUnit); var mass = new Mass(1, MassUnit.BaseUnit); var massFlowRate = new MassFlowRate(1, MassFlowRateUnit.BaseUnit); var momentum = new Momentum(1, MomentumUnit.BaseUnit); var numeric = new Numeric(1, NumericUnit.BaseUnit); var power = new Power(1, PowerUnit.BaseUnit); var pressure = new Pressure(1, PressureUnit.BaseUnit); var speed = new Speed(1, SpeedUnit.BaseUnit); var temperature = new Temperature(1, TemperatureUnit.BaseUnit); var time = new Time(1, TimeUnit.BaseUnit); var torque = new Torque(1, TorqueUnit.BaseUnit); var volume = new Volume(1, VolumeUnit.BaseUnit); var volumetricFlowRate = new VolumetricFlowRate(1, VolumetricFlowRateUnit.BaseUnit); }
public void OpAddition() { var pressure1 = new Pressure(1000, PressureUnit.Pascals); var pressure2 = new Pressure(1, PressureUnit.KiloPascals); var expected = new Pressure(2000, PressureUnit.Pascals); (pressure1 + pressure2).ShouldEqual(expected); (pressure2 + pressure1).ShouldEqual(expected); }
public void OpDivision() { var pressure1 = new Pressure(4000, PressureUnit.Pascals); var pressure2 = new Pressure(4, PressureUnit.KiloPascals); (pressure1 / pressure2).ShouldBeWithinEpsilonOf(1); (pressure2 / pressure1).ShouldBeWithinEpsilonOf(1); (pressure1 / 2).ShouldEqual(new Pressure(2000, PressureUnit.Pascals)); (pressure2 / 2).ShouldEqual(new Pressure(2, PressureUnit.KiloPascals)); }
public void OpGreaterThanOrEqual() { var pressure1 = new Pressure(1000, PressureUnit.Pascals); var pressure2 = new Pressure(1, PressureUnit.KiloPascals); var pressure3 = new Pressure(2, PressureUnit.KiloPascals); (pressure1 >= pressure3).ShouldBeFalse(); (pressure3 >= pressure1).ShouldBeTrue(); (pressure1 >= pressure2).ShouldBeTrue(); (pressure2 >= pressure1).ShouldBeTrue(); }
public void OpInverseEquals() { var pressure1 = new Pressure(1000, PressureUnit.Pascals); var pressure2 = new Pressure(1, PressureUnit.KiloPascals); var pressure3 = new Pressure(2, PressureUnit.KiloPascals); (pressure1 != pressure2).ShouldBeFalse(); (pressure2 != pressure1).ShouldBeFalse(); (pressure1 != pressure3).ShouldBeTrue(); (pressure3 != pressure1).ShouldBeTrue(); }
public void OpEquals() { var pressure1 = new Pressure(1000, PressureUnit.Pascals); var pressure2 = new Pressure(1, PressureUnit.KiloPascals); var pressure3 = new Pressure(2, PressureUnit.KiloPascals); (pressure1 == pressure2).ShouldBeTrue(); (pressure2 == pressure1).ShouldBeTrue(); (pressure1 == pressure3).ShouldBeFalse(); (pressure3 == pressure1).ShouldBeFalse(); pressure1.Equals(pressure2) .ShouldBeTrue(); pressure1.Equals((object)pressure2) .ShouldBeTrue(); pressure2.Equals(pressure1) .ShouldBeTrue(); pressure2.Equals((object)pressure1) .ShouldBeTrue(); }
public static Pressure InchesOfMercury <T>(this T value) => Pressure.FromInchesOfMercury(Convert.ToDouble(value));
public static Pressure FeetOfElevation <T>(this T value) => Pressure.FromFeetOfElevation(Convert.ToDouble(value));
public static Pressure Micropascals <T>(this T value) => Pressure.FromMicropascals(Convert.ToDouble(value));
public static Pressure MillimetersOfMercury <T>(this T value) => Pressure.FromMillimetersOfMercury(Convert.ToDouble(value));
public static Pressure KilopoundsForcePerSquareInch <T>(this T value) => Pressure.FromKilopoundsForcePerSquareInch(Convert.ToDouble(value));
public static Pressure MetersOfElevation <T>(this T value) => Pressure.FromMetersOfElevation(Convert.ToDouble(value));
public virtual BodyType GetBodyType(Mass massSM, Mass gasMassSM, Mass molecularWeightRetained, Pressure surfacePressure, Ratio waterCoverFraction, Ratio iceCoverFraction, Temperature maxTemperature, Temperature boilingPointWater, Temperature surfaceTemperature) { if (TestIsGasGiant(massSM, gasMassSM, molecularWeightRetained)) { if (gasMassSM / massSM < 0.20) { return(BodyType.SubSubGasGiant); } else if (massSM.SolarMasses * GlobalConstants.SUN_MASS_IN_EARTH_MASSES < 20.0) { return(BodyType.SubGasGiant); } else { return(BodyType.GasGiant); } } // Assign planet type if (surfacePressure.Millibars < 1.0) { if (massSM.SolarMasses * GlobalConstants.SUN_MASS_IN_EARTH_MASSES < GlobalConstants.ASTEROID_MASS_LIMIT) { return(BodyType.Asteroids); } else { return(BodyType.Barren); } } else if (surfacePressure.Millibars > 6000.0 && molecularWeightRetained.Grams <= 2.0) // Retains Hydrogen { return(BodyType.SubSubGasGiant); } else { // Atmospheres: // TODO remove PlanetType enum entirely and replace it with a more flexible classification systme if (waterCoverFraction.Value >= 0.95) // >95% water { return(BodyType.Water); } else if (iceCoverFraction.Value >= 0.95) // >95% ice { return(BodyType.Ice); } else if (waterCoverFraction.Value > 0.05) // Terrestrial { return(BodyType.Terrestrial); } else if (maxTemperature > boilingPointWater) // Hot = Venusian { return(BodyType.Venusian); } else if (gasMassSM / massSM > 0.0001) // Accreted gas, but no greenhouse or liquid water make it an ice world { return(BodyType.Ice); //planet.IceCoverFraction = 1.0; } else if (surfacePressure.Millibars <= 250.0) // Thin air = Martian { return(BodyType.Martian); } else if (surfaceTemperature.Kelvins < GlobalConstants.FREEZING_POINT_OF_WATER) { return(BodyType.Ice); } else { return(BodyType.Undefined); } } }
protected void SetScalarValue(DependencyProperty property, Pressure? quantity) { // we set this flag to prevent from setting scalar value changing quantity values. this.isUpdatingScalarValue = true; var value = quantity != null ? this.Unit.GetScalarValue(quantity.Value) : (double?)null; this.SetCurrentValue(property, value); this.isUpdatingScalarValue = false; }
void ReleaseDesignerOutlets() { if (Humidity != null) { Humidity.Dispose(); Humidity = null; } if (HumidityLabel != null) { HumidityLabel.Dispose(); HumidityLabel = null; } if (MaxTemp != null) { MaxTemp.Dispose(); MaxTemp = null; } if (MinTemp != null) { MinTemp.Dispose(); MinTemp = null; } if (Pressure != null) { Pressure.Dispose(); Pressure = null; } if (PressureLabel != null) { PressureLabel.Dispose(); PressureLabel = null; } if (ShowDetails != null) { ShowDetails.Dispose(); ShowDetails = null; } if (showHideLabel != null) { showHideLabel.Dispose(); showHideLabel = null; } if (SomeDetailsView != null) { SomeDetailsView.Dispose(); SomeDetailsView = null; } if (Temperature != null) { Temperature.Dispose(); Temperature = null; } if (TemperatureLabel != null) { TemperatureLabel.Dispose(); TemperatureLabel = null; } if (TempMaxLabel != null) { TempMaxLabel.Dispose(); TempMaxLabel = null; } if (TempMinLabel != null) { TempMinLabel.Dispose(); TempMinLabel = null; } if (Town != null) { Town.Dispose(); Town = null; } if (WindSpeed != null) { WindSpeed.Dispose(); WindSpeed = null; } if (WindSpeedLabel != null) { WindSpeedLabel.Dispose(); WindSpeedLabel = null; } }
/// <summary> /// This is Fogg's eq.20, and is also Hart's eq.20 in his "Evolution of /// Earth's Atmosphere" article. The effective temperature given is in /// units of Kelvin, as is the rise in temperature produced by the /// greenhouse effect, which is returned. /// TODO: Validate opticalDepth units. /// </summary> /// <param name="opticalDepth"></param> /// <param name="effectiveTemp"></param> /// <param name="surfPressure"></param> /// <returns></returns> public virtual TemperatureDelta GetGreenhouseTemperatureRise(Ratio opticalDepth, Temperature effectiveTemp, Pressure surfPressure) { var convectionFactor = GlobalConstants.EARTH_CONVECTION_FACTOR * Math.Pow(surfPressure.Millibars / GlobalConstants.EARTH_SURF_PRES_IN_MILLIBARS, 0.25); var rise = (Extensions.Pow1_4(1.0 + 0.75 * opticalDepth.Value) - 1.0) * effectiveTemp.Kelvins * convectionFactor; if (rise < 0.0) { rise = 0.0; } return(TemperatureDelta.FromKelvins(rise)); }
public static Pressure KilogramsForcePerSquareMeter <T>(this T value) => Pressure.FromKilogramsForcePerSquareMeter(Convert.ToDouble(value));
public static Pressure Kilobars <T>(this T value) => Pressure.FromKilobars(Convert.ToDouble(value));
public static Pressure InchesOfWaterColumn <T>(this T value) => Pressure.FromInchesOfWaterColumn(Convert.ToDouble(value));
public static Force FromPressureByArea(Pressure p, Area area) { double newtons = p.Pascals*area.SquareMeters; return new Force(newtons); }
/// <summary> /// The surface temperature passed in is in units of Kelvin. /// The cloud adjustment is the fraction of cloud cover obscuring each /// of the three major components of albedo that lie below the clouds. /// </summary> /// <param name="waterFraction"></param> /// <param name="cloudFraction"></param> /// <param name="iceFraction"></param> /// <param name="surfPressure"></param> /// <returns></returns> public virtual Ratio GetAlbedo(Ratio waterFractionParam, Ratio cloudFractionParam, Ratio iceFractionParam, Pressure surfPressure) { var waterFraction = waterFractionParam.Value; var cloudFraction = cloudFractionParam.Value; var iceFraction = iceFractionParam.Value; double rock_fraction, cloud_adjustment, components, cloud_part, rock_part, water_part, ice_part; rock_fraction = 1.0 - waterFraction - iceFraction; components = 0.0; if (waterFraction > 0.0) { components = components + 1.0; } if (iceFraction > 0.0) { components = components + 1.0; } if (rock_fraction > 0.0) { components = components + 1.0; } cloud_adjustment = cloudFraction / components; if (rock_fraction >= cloud_adjustment) { rock_fraction = rock_fraction - cloud_adjustment; } else { rock_fraction = 0.0; } if (waterFraction > cloud_adjustment) { waterFraction = waterFraction - cloud_adjustment; } else { waterFraction = 0.0; } if (iceFraction > cloud_adjustment) { iceFraction = iceFraction - cloud_adjustment; } else { iceFraction = 0.0; } cloud_part = cloudFraction * GlobalConstants.CLOUD_ALBEDO; /* about(...,0.2); */ if (surfPressure.Millibars == 0.0) { rock_part = rock_fraction * GlobalConstants.ROCKY_AIRLESS_ALBEDO; /* about(...,0.3); */ ice_part = iceFraction * GlobalConstants.AIRLESS_ICE_ALBEDO; /* about(...,0.4); */ water_part = 0; } else { rock_part = rock_fraction * GlobalConstants.ROCKY_ALBEDO; /* about(...,0.1); */ water_part = waterFraction * GlobalConstants.WATER_ALBEDO; /* about(...,0.2); */ ice_part = iceFraction * GlobalConstants.ICE_ALBEDO; /* about(...,0.1); */ } return(Ratio.FromDecimalFractions(cloud_part + rock_part + water_part + ice_part)); }
/// <summary> /// initForecastObjects init and allocate all forecast objects /// </summary> private void initForecastObjects() { this.location = new Location(); this.sunRise = new SunRise(); this.temperature = new Temperature(); this.humidity = new Humidity(); this.pressure = new Pressure(); this.windSpeed = new WindSpeed(); this.windDirection = new WindDirection(); this.clouds = new Clouds(); this.precipitation = new Precipitation(); this.weather = new Weather(); this.lastupdate = new Lastupdate(); }
/// <summary> /// Get saturation line substance properties /// </summary> public Substance(Temperature temperature, State state) { Pressure pressure = new Pressure(Region4.CalculateSaturationPressure(temperature.Value)); Region4Calculations(temperature, pressure, state); }
public static Pressure KilonewtonsPerSquareMillimeter <T>(this T value) => Pressure.FromKilonewtonsPerSquareMillimeter(Convert.ToDouble(value));
private static bool IsRegion5(Temperature temperature, Pressure pressure) { return(temperature.Value >= 1073.15 && temperature.Value <= 2273.15 && pressure.Value > 0 && pressure.Value <= 50); }
public static Pressure MeganewtonsPerSquareMeter <T>(this T value) => Pressure.FromMeganewtonsPerSquareMeter(Convert.ToDouble(value));
public Substance(Temperature temperature, Pressure pressure) { CalculateProperties(temperature, pressure); }
public static Pressure MetersOfHead <T>(this T value) => Pressure.FromMetersOfHead(Convert.ToDouble(value));
public static Pressure Torrs <T>(this T value) => Pressure.FromTorrs(Convert.ToDouble(value));
public static Pressure Millibars <T>(this T value) => Pressure.FromMillibars(Convert.ToDouble(value));
public void OpSubtraction() { var pressure1 = new Pressure(7000, PressureUnit.Pascals); var pressure2 = new Pressure(1, PressureUnit.KiloPascals); (pressure1 - pressure2).ShouldEqual(new Pressure(6000, PressureUnit.Pascals)); (pressure2 - pressure1).ShouldEqual(new Pressure(-6, PressureUnit.KiloPascals)); }
public static Pressure Atmospheres <T>(this T value) => Pressure.FromAtmospheres(Convert.ToDouble(value));
public static Pressure FeetOfHead <T>(this T value) => Pressure.FromFeetOfHead(Convert.ToDouble(value));
public void OpMultiplicationScaler() { var pressure = new Pressure(1, PressureUnit.Pascals); var expected = new Pressure(2, PressureUnit.Pascals); (pressure * 2).ShouldEqual(expected); (2 * pressure).ShouldEqual(expected); }
private Pressure CreatePressure(IXmlService xmlService, XElement w) { Pressure pressure = new Pressure() { Value = xmlService.GetXmlAttributeValue(w, "pressure", "value"), Unit = xmlService.GetXmlAttributeText(w, "pressure", "unit") }; if (pressure.Value == 0 && string.IsNullOrEmpty(pressure.Unit)) { return null; } else { return pressure; } }
public static Pressure operator /(ForcePerLength forcePerLength, Length length) { return(Pressure.FromNewtonsPerSquareMeter(forcePerLength.NewtonsPerMeter / length.Meters)); }
public static Pressure DynesPerSquareCentimeter <T>(this T value) => Pressure.FromDynesPerSquareCentimeter(Convert.ToDouble(value));
internal static void Parse(string fileName, out Train train) { train = new Train(); CultureInfo culture = CultureInfo.InvariantCulture; string[] lines = File.ReadAllLines(fileName, TextEncoding.GetSystemEncodingFromFile(fileName)); for (int i = 0; i < lines.Length; i++) { int j = lines[i].IndexOf(';'); if (j >= 0) { lines[i] = lines[i].Substring(0, j).Trim(); } else { lines[i] = lines[i].Trim(); } } bool ver1220000 = false; foreach (string line in lines) { if (line.Length != 0) { string s = line.ToLowerInvariant(); switch (s) { case "bve1200000": case "bve1210000": case "bve1220000": ver1220000 = true; break; case "bve2000000": case "openbve": //No action break; default: if (s.ToLowerInvariant().StartsWith("openbve")) { string tt = s.Substring(7, s.Length - 7); int v; if (int.TryParse(tt, NumberStyles.Float, culture, out v)) { if (v > currentVersion) { Interface.AddMessage(MessageType.Warning, false, $"The train.dat {fileName} was created with a newer version of openBVE. Please check for an update."); } } else { Interface.AddMessage(MessageType.Error, false, $"The train.dat version {lines[0].ToLowerInvariant()} is invalid in {fileName}"); } } break; } break; } } Acceleration acceleration = new Acceleration(); Performance performance = new Performance(); Delay delay = new Delay(); Move move = new Move(); Brake brake = new Brake(); Pressure pressure = new Pressure(); Motor motor = new Motor(); double motorCarMass = 40.0; int numberOfMotorCars = 1; double trailerCarMass = 40.0; int numberOfTrailerCars = 1; double lengthOfACar = 20.0; bool frontCarIsAMotorCar = false; double widthOfACar = 2.6; double heightOfACar = 3.2; double centerOfGravityHeight = 1.5; double exposedFrontalArea = 5.0; double unexposedFrontalArea = 1.6; for (int i = 0; i < lines.Length; i++) { int n = 0; switch (lines[i].ToLowerInvariant()) { case "#acceleration": i++; while (i < lines.Length && !lines[i].StartsWith("#", StringComparison.InvariantCultureIgnoreCase)) { if (n == acceleration.Entries.Count) { acceleration.Entries.Add(new Acceleration.Entry()); } string u = lines[i] + ","; int m = 0; while (true) { int j = u.IndexOf(','); if (j == -1) { break; } string s = u.Substring(0, j).Trim(); u = u.Substring(j + 1); double a; if (double.TryParse(s, NumberStyles.Float, culture, out a)) { switch (m) { case 0: acceleration.Entries[n].A0 = Math.Max(a, 0.0); break; case 1: acceleration.Entries[n].A1 = Math.Max(a, 0.0); break; case 2: acceleration.Entries[n].V1 = Math.Max(a, 0.0); break; case 3: acceleration.Entries[n].V2 = Math.Max(a, 0.0); if (acceleration.Entries[n].V2 < acceleration.Entries[n].V1) { double x = acceleration.Entries[n].V1; acceleration.Entries[n].V1 = acceleration.Entries[n].V2; acceleration.Entries[n].V2 = x; } break; case 4: if (ver1220000) { if (a <= 0.0) { acceleration.Entries[n].E = 1.0; } else { const double c = 1.23315173118822; acceleration.Entries[n].E = 1.0 - Math.Log(a) * acceleration.Entries[n].V2 * c; if (acceleration.Entries[n].E > 4.0) { acceleration.Entries[n].E = 4.0; } } } else { acceleration.Entries[n].E = a; } break; } } m++; } i++; n++; } i--; break; case "#performance": case "#deceleration": i++; while (i < lines.Length && !lines[i].StartsWith("#", StringComparison.InvariantCultureIgnoreCase)) { double a; if (double.TryParse(lines[i], NumberStyles.Float, culture, out a)) { switch (n) { case 0: if (a >= 0.0) { performance.Deceleration = a; } break; case 1: if (a >= 0.0) { performance.CoefficientOfStaticFriction = a; } break; case 3: if (a >= 0.0) { performance.CoefficientOfRollingResistance = a; } break; case 4: if (a >= 0.0) { performance.AerodynamicDragCoefficient = a; } break; } } i++; n++; } i--; break; case "#delay": i++; double[] delayPowerUp = delay.DelayPower.Select(x => x.Up).ToArray(); double[] delayPowerDown = delay.DelayPower.Select(x => x.Down).ToArray(); double[] delayBrakeUp = delay.DelayBrake.Select(x => x.Up).ToArray(); double[] delayBrakeDown = delay.DelayBrake.Select(x => x.Down).ToArray(); double[] delayLocoBrakeUp = delay.DelayLocoBrake.Select(x => x.Up).ToArray(); double[] delayLocoBrakeDown = delay.DelayLocoBrake.Select(x => x.Down).ToArray(); delay.DelayPower.Clear(); delay.DelayBrake.Clear(); delay.DelayLocoBrake.Clear(); while (i < lines.Length && !lines[i].StartsWith("#", StringComparison.InvariantCultureIgnoreCase)) { double a; if (double.TryParse(lines[i], NumberStyles.Float, culture, out a)) { switch (n) { case 0: if (a >= 0.0) { delayPowerUp = new[] { a }; } break; case 1: if (a >= 0.0) { delayPowerDown = new[] { a }; } break; case 2: if (a >= 0.0) { delayBrakeUp = new[] { a }; } break; case 3: if (a >= 0.0) { delayBrakeDown = new[] { a }; } break; } } else if (lines[i].IndexOf(',') != -1) { switch (n) { case 0: delayPowerUp = lines[i].Split(',').Select(x => double.Parse(x, culture)).ToArray(); break; case 1: delayPowerDown = lines[i].Split(',').Select(x => double.Parse(x, culture)).ToArray(); break; case 2: delayBrakeUp = lines[i].Split(',').Select(x => double.Parse(x, culture)).ToArray(); break; case 3: delayBrakeDown = lines[i].Split(',').Select(x => double.Parse(x, culture)).ToArray(); break; case 4: delayLocoBrakeUp = lines[i].Split(',').Select(x => double.Parse(x, culture)).ToArray(); break; case 5: delayLocoBrakeDown = lines[i].Split(',').Select(x => double.Parse(x, culture)).ToArray(); break; } } i++; n++; } for (int j = 0; j < Math.Max(delayPowerUp.Length, delayPowerDown.Length); j++) { Delay.Entry entry = new Delay.Entry(); if (j < delayPowerUp.Length) { entry.Up = delayPowerUp[j]; } if (j < delayPowerDown.Length) { entry.Down = delayPowerDown[j]; } delay.DelayPower.Add(entry); } for (int j = 0; j < Math.Max(delayBrakeUp.Length, delayBrakeDown.Length); j++) { Delay.Entry entry = new Delay.Entry(); if (j < delayBrakeUp.Length) { entry.Up = delayBrakeUp[j]; } if (j < delayBrakeDown.Length) { entry.Down = delayBrakeDown[j]; } delay.DelayBrake.Add(entry); } for (int j = 0; j < Math.Max(delayLocoBrakeUp.Length, delayLocoBrakeDown.Length); j++) { Delay.Entry entry = new Delay.Entry(); if (j < delayLocoBrakeUp.Length) { entry.Up = delayLocoBrakeUp[j]; } if (j < delayLocoBrakeDown.Length) { entry.Down = delayLocoBrakeDown[j]; } delay.DelayLocoBrake.Add(entry); } i--; break; case "#move": i++; while (i < lines.Length && !lines[i].StartsWith("#", StringComparison.InvariantCultureIgnoreCase)) { double a; if (double.TryParse(lines[i], NumberStyles.Float, culture, out a)) { switch (n) { case 0: if (a >= 0.0) { move.JerkPowerUp = a; } break; case 1: if (a >= 0.0) { move.JerkPowerDown = a; } break; case 2: if (a >= 0.0) { move.JerkBrakeUp = a; } break; case 3: if (a >= 0.0) { move.JerkBrakeDown = a; } break; case 4: if (a >= 0.0) { move.BrakeCylinderUp = a; } break; case 5: if (a >= 0.0) { move.BrakeCylinderDown = a; } break; } } i++; n++; } i--; break; case "#brake": i++; while (i < lines.Length && !lines[i].StartsWith("#", StringComparison.InvariantCultureIgnoreCase)) { double a; if (double.TryParse(lines[i], NumberStyles.Float, culture, out a)) { int b = (int)Math.Round(a); switch (n) { case 0: if (b >= 0 & b <= 2) { brake.BrakeType = (BrakeSystemType)b; } break; case 1: if (b >= 0 & b <= 2) { brake.BrakeControlSystem = (EletropneumaticBrakeType)b; } break; case 2: if (a >= 0.0) { brake.BrakeControlSpeed = a; } break; case 3: if (a <= 0 && a > 3) { brake.LocoBrakeType = (Brake.LocoBrakeTypes)b; } break; } } i++; n++; } i--; break; case "#pressure": i++; while (i < lines.Length && !lines[i].StartsWith("#", StringComparison.InvariantCultureIgnoreCase)) { double a; if (double.TryParse(lines[i], NumberStyles.Float, culture, out a)) { switch (n) { case 0: if (a > 0.0) { pressure.BrakeCylinderServiceMaximumPressure = a; } break; case 1: if (a > 0.0) { pressure.BrakeCylinderEmergencyMaximumPressure = a; } break; case 2: if (a > 0.0) { pressure.MainReservoirMinimumPressure = a; } break; case 3: if (a > 0.0) { pressure.MainReservoirMaximumPressure = a; } break; case 4: if (a > 0.0) { pressure.BrakePipeNormalPressure = a; } break; } } i++; n++; } i--; break; case "#handle": i++; while (i < lines.Length && !lines[i].StartsWith("#", StringComparison.InvariantCultureIgnoreCase)) { double a; if (double.TryParse(lines[i], NumberStyles.Float, culture, out a)) { int b = (int)Math.Round(a); switch (n) { case 0: if (b >= 0 | b <= 3) { train.Handle.HandleType = (HandleType)b; } break; case 1: if (b > 0) { train.Handle.PowerNotches = b; } break; case 2: if (b > 0) { train.Handle.BrakeNotches = b; } break; case 3: if (b >= 0) { train.Handle.PowerNotchReduceSteps = b; } break; case 4: if (a >= 0 && a < 4) { train.Handle.HandleBehaviour = (EbHandleBehaviour)b; } break; case 5: if (b > 0) { train.Handle.LocoBrakeNotches = b; } break; case 6: if (a <= 0 && a > 3) { train.Handle.LocoBrake = (LocoBrakeType)b; } break; case 7: if (b > 0) { train.Handle.DriverPowerNotches = b; } break; case 8: if (b > 0) { train.Handle.DriverBrakeNotches = b; } break; } } i++; n++; } i--; break; case "#cockpit": case "#cab": i++; while (i < lines.Length && !lines[i].StartsWith("#", StringComparison.InvariantCultureIgnoreCase)) { double a; if (double.TryParse(lines[i], NumberStyles.Float, culture, out a)) { switch (n) { case 0: train.Cab.PositionX = a; break; case 1: train.Cab.PositionY = a; break; case 2: train.Cab.PositionZ = a; break; case 3: train.Cab.DriverCar = (int)Math.Round(a); break; } } i++; n++; } i--; break; case "#car": i++; while (i < lines.Length && !lines[i].StartsWith("#", StringComparison.InvariantCultureIgnoreCase)) { double a; if (double.TryParse(lines[i], NumberStyles.Float, culture, out a)) { int b = (int)Math.Round(a); switch (n) { case 0: if (a > 0.0) { motorCarMass = a; } break; case 1: if (b >= 1) { numberOfMotorCars = b; } break; case 2: if (a > 0.0) { trailerCarMass = a; } break; case 3: if (b >= 0) { numberOfTrailerCars = b; } break; case 4: if (b > 0.0) { lengthOfACar = a; } break; case 5: frontCarIsAMotorCar = a == 1.0; break; case 6: if (a > 0.0) { widthOfACar = a; } break; case 7: if (a > 0.0) { heightOfACar = a; } break; case 8: centerOfGravityHeight = a; break; case 9: if (a > 0.0) { exposedFrontalArea = a; } break; case 10: if (a > 0.0) { unexposedFrontalArea = a; } break; } } i++; n++; } i--; break; case "#device": i++; while (i < lines.Length && !lines[i].StartsWith("#", StringComparison.InvariantCultureIgnoreCase)) { double a; if (double.TryParse(lines[i], NumberStyles.Float, culture, out a)) { int b = (int)Math.Round(a); switch (n) { case 0: if (b >= -1 & b <= 1) { train.Device.Ats = (AtsModes)b; } break; case 1: if (b >= 0 & b <= 2) { train.Device.Atc = (AtcModes)b; } break; case 2: train.Device.Eb = a == 1.0; break; case 3: train.Device.ConstSpeed = a == 1.0; break; case 4: train.Device.HoldBrake = a == 1.0; break; case 5: if (b >= -1 & b <= 3) { train.Device.ReAdhesionDevice = (ReadhesionDeviceType)b; } break; case 6: train.Device.LoadCompensatingDevice = a; break; case 7: if (b >= 0 & b <= 2) { train.Device.PassAlarm = (PassAlarmType)b; } break; case 8: if (b >= 0 & b <= 2) { train.Device.DoorOpenMode = (DoorMode)b; } break; case 9: if (b >= 0 & b <= 2) { train.Device.DoorCloseMode = (DoorMode)b; } break; case 10: if (a >= 0.0) { train.Device.DoorWidth = a; } break; case 11: if (a >= 0.0) { train.Device.DoorMaxTolerance = a; } break; } } i++; n++; } i--; break; case "#motor_p1": case "#motor_p2": case "#motor_b1": case "#motor_b2": { string section = lines[i].ToLowerInvariant(); i++; BVEMotorSoundTableEntry[] entries = new BVEMotorSoundTableEntry[800]; while (i < lines.Length && !lines[i].StartsWith("#", StringComparison.InvariantCultureIgnoreCase)) { if (n == entries.Length) { Array.Resize(ref entries, entries.Length << 1); } string u = lines[i] + ","; int k = 0; while (true) { int j = u.IndexOf(','); if (j == -1) { break; } string s = u.Substring(0, j).Trim(); u = u.Substring(j + 1); double a; if (double.TryParse(s, NumberStyles.Float, culture, out a)) { int b = (int)Math.Round(a); switch (k) { case 0: entries[n].SoundIndex = b >= 0 ? b : -1; break; case 1: entries[n].Pitch = (float)Math.Max(a, 0.0); break; case 2: entries[n].Gain = (float)Math.Max(a, 0.0); break; } } k++; } i++; n++; } Array.Resize(ref entries, n); i--; switch (section) { case "#motor_p1": motor.Tracks[(int)Motor.TrackInfo.Power1] = Motor.Track.EntriesToTrack(entries); break; case "#motor_p2": motor.Tracks[(int)Motor.TrackInfo.Power2] = Motor.Track.EntriesToTrack(entries); break; case "#motor_b1": motor.Tracks[(int)Motor.TrackInfo.Brake1] = Motor.Track.EntriesToTrack(entries); break; case "#motor_b2": motor.Tracks[(int)Motor.TrackInfo.Brake2] = Motor.Track.EntriesToTrack(entries); break; } } break; } } int numberOfCars = numberOfMotorCars + numberOfTrailerCars; bool[] isMotorCars = new bool[numberOfCars]; if (numberOfMotorCars == 1) { if (frontCarIsAMotorCar | numberOfTrailerCars == 0) { isMotorCars[0] = true; } else { isMotorCars[numberOfCars - 1] = true; } } else if (numberOfMotorCars == 2) { if (frontCarIsAMotorCar | numberOfTrailerCars == 0) { isMotorCars[0] = true; isMotorCars[numberOfCars - 1] = true; } else if (numberOfTrailerCars == 1) { isMotorCars[1] = true; isMotorCars[2] = true; } else { int i = (int)Math.Ceiling(0.25 * (numberOfCars - 1)); int j = (int)Math.Floor(0.75 * (numberOfCars - 1)); isMotorCars[i] = true; isMotorCars[j] = true; } } else if (numberOfMotorCars > 0) { if (frontCarIsAMotorCar) { isMotorCars[0] = true; double t = 1.0 + numberOfTrailerCars / (double)(numberOfMotorCars - 1); double r = 0.0; double x = 0.0; while (true) { double y = x + t - r; x = Math.Ceiling(y); r = x - y; int i = (int)x; if (i >= numberOfCars) { break; } isMotorCars[i] = true; } } else { isMotorCars[1] = true; double t = 1.0 + (numberOfTrailerCars - 1) / (double)(numberOfMotorCars - 1); double r = 0.0; double x = 1.0; while (true) { double y = x + t - r; x = Math.Ceiling(y); r = x - y; int i = (int)x; if (i >= numberOfCars) { break; } isMotorCars[i] = true; } } } foreach (bool isMotorCar in isMotorCars) { Car car = isMotorCar ? (Car) new MotorCar() : new TrailerCar(); car.Mass = isMotorCar ? motorCarMass : trailerCarMass; car.Length = lengthOfACar; car.Width = widthOfACar; car.Height = heightOfACar; car.CenterOfGravityHeight = centerOfGravityHeight; car.ExposedFrontalArea = exposedFrontalArea; car.UnexposedFrontalArea = unexposedFrontalArea; car.Performance = (Performance)performance.Clone(); car.Delay = (Delay)delay.Clone(); car.Move = (Move)move.Clone(); car.Brake = (Brake)brake.Clone(); car.Pressure = (Pressure)pressure.Clone(); if (isMotorCar) { ((MotorCar)car).Acceleration = (Acceleration)acceleration.Clone(); ((MotorCar)car).Motor = (Motor)motor.Clone(); } train.Cars.Add(car); } for (int i = 0; i < numberOfCars - 1; i++) { train.Couplers.Add(new Models.Trains.Coupler()); } }
public void ForceDividedByAreaEqualsPressure() { Pressure pressure = Force.FromNewtons(90) / Area.FromSquareMeters(9); Assert.Equal(pressure, Pressure.FromNewtonsPerSquareMeter(10)); }
public void OpLessThan() { var pressure1 = new Pressure(1000, PressureUnit.Pascals); var pressure2 = new Pressure(1, PressureUnit.KiloPascals); var pressure3 = new Pressure(2, PressureUnit.KiloPascals); (pressure1 < pressure3).ShouldBeTrue(); (pressure3 < pressure1).ShouldBeFalse(); (pressure1 < pressure2).ShouldBeFalse(); (pressure2 < pressure1).ShouldBeFalse(); }
public void PressureByAreaEqualsForceUsingArea() { Force force = Force.FromPressureByArea(Pressure.FromNewtonsPerSquareMeter(5), Area.FromSquareMeters(7)); Assert.Equal(force, Force.FromNewtons(35)); }
// Method overloads with same number of argumnets not supported in Universal Windows Platform (WinRT Components) #if !WINDOWS_UWP public static Force FromPressureByArea(Pressure p, Length2d area) { double metersSquared = area.Meters.X*area.Meters.Y; double newtons = p.Pascals*metersSquared; return new Force(newtons); }
public void PressureByAreaEqualsForceUsingLength2D() { var force = Force.FromPressureByArea(Pressure.FromNewtonsPerSquareMeter(6), Length2d.FromMeters(5, 2)); Assert.Equal(force, Force.FromNewtons(60)); }
public ReactionTableEntry(string[] products, Move move, Temperature temperature, Pressure pressure) { this.products = products; this.move = move; this.temperature = temperature; this.pressure = pressure; }
/// <summary> /// Calibrates the sensor to operate at a specific barometric pressure. /// </summary> /// <param name="pressure">The pressure to use when calibrating the sensor.</param> public void SetPressureCalibration(Pressure pressure) { int delay = SetPressureCalibrationImpl(pressure); Thread.Sleep(delay); }
internal Train () { this.Acceleration = new Acceleration(); this.Performance = new Performance(); this.Delay = new Delay(); this.Move = new Move(); this.Brake = new Brake(); this.Pressure = new Pressure(); this.Handle = new Handle(); this.Cab = new Cab(); this.Car = new Car(); this.Device = new Device(); this.MotorP1 = new Motor(); this.MotorP2 = new Motor(); this.MotorB1 = new Motor(); this.MotorB2 = new Motor(); }
protected virtual void OnMaxValueChanged(Pressure? oldValue, Pressure? newValue) { this.SetScalarValue(ScalarMaxValueProperty, newValue); }