示例#1
0
 public void DerivedQuantity_ToUnitSystem()
 {
     for (var i = 0; i < BenchmarkConstants.NbUnits; i++)
     {
         Consumer.Consume(DerivedQuantity.ToUnit(UnitSystems[0]));
     }
 }
示例#2
0
        private void AddStatistics()
        {
            // Add simple statistics for default HD results
            _resultSpec = _mike1DData.ResultSpecifications.Find(x => x.ID == "DefaultHDResults");
            _resultSpec = CreateStatisticsResultSpecification(_resultSpec, ResultTypes.HD);
            _mike1DData.ResultSpecifications.Add(_resultSpec);

            // Water level
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.WaterLevel, DerivedQuantityType.Max));
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.WaterLevel, DerivedQuantityType.MaxTime));
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.WaterLevel, DerivedQuantityType.MinTime));
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.WaterLevel, DerivedQuantityType.Min));
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.WaterLevel, DerivedQuantityType.Average));

            // Discharge
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.TimeIntegrate));
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.Max));
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.MaxTime));
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.MinTime));
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.Min));
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.Average));

            // Flow velocity
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.FlowVelocity, DerivedQuantityType.Max));
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.FlowVelocity, DerivedQuantityType.MaxTime));
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.FlowVelocity, DerivedQuantityType.MinTime));
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.FlowVelocity, DerivedQuantityType.Min));
            AddQuantity(DerivedQuantity.Create(PredefinedQuantity.FlowVelocity, DerivedQuantityType.Average));
        }
        /// <summary>
        /// This is a specific raise to double storage quantity power.
        /// </summary>
        /// <param name="quantity"></param>
        /// <param name="exponent"></param>
        /// <returns></returns>
        public static AnyQuantity <T> Power(AnyQuantity <T> quantity, AnyQuantity <double> exponent)
        {
            if (!exponent.Dimension.IsDimensionless)
            {
                throw new QuantityException("Raising Quantity to a non dimensionless quantity is not implemented", new NotImplementedException());
            }


            // and I am ignoring the units conversion also

            Unit unit = quantity.Unit.RaiseUnitPower((float)exponent.Value);


            AnyQuantity <T> result = null;

            if (unit.QuantityType != typeof(DerivedQuantity <>))
            {
                result = unit.MakeQuantity <T>(RaiseGenericByScalar(quantity.Value, exponent.Value));
            }
            else
            {
                result       = new DerivedQuantity <T>(unit.UnitDimension);
                result.Value = RaiseGenericByScalar(quantity.Value, exponent.Value);
                result.Unit  = unit;
            }

            Debug.Assert(result.Dimension.Equals(result.Unit.UnitDimension), "Dimensions are not equal after power");
            return(result);
        }
示例#4
0
 public void DerivedQuantity_ToUnit()
 {
     for (var i = 0; i < BenchmarkConstants.NbUnits; i++)
     {
         var conversion = DerivedUnitConversions[DerivedQuantityIndex];
         Consumer.Consume(DerivedQuantity.ToUnit((LengthUnit)conversion.Value));
     }
 }
示例#5
0
 private void AddAccumulatedTimeSeries()
 {
     // Find HD result specification
     _resultSpec = _mike1DData.ResultSpecifications.Find(x => x.ID == "DefaultHDResults");
     // Accumulated values of discharge
     AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.TimeIntegrate));
     AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.TimeIntegratePositive));
     AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.TimeIntegrateNegative));
 }
示例#6
0
        public MainWindow()
        {
            InitializeComponent();

            var quantity = Quantities.Length;

            var dimension = DerivedQuantityDimension.Parse("l*t^2/t^2");
            var derived   = new DerivedQuantity("Area", "A", dimension);

            toolManager = new ToolManager(this);

            toolManager.StartTool(new LineTool());
        }
示例#7
0
        public AnyQuantity <T> GetThisUnitQuantity <T>(T value)
        {
            AnyQuantity <T> Quantity = null;

            if (QuantityType != typeof(DerivedQuantity <>) && QuantityType != null)
            {
                Type qt = QuantityType.MakeGenericType(typeof(T));

                object j;
                if (Qcach.TryGetValue(qt, out j))
                {
                    Quantity = (AnyQuantity <T>)((AnyQuantity <T>)j).Clone();  //optimization for created quantities before
                }
                else
                {
                    Quantity = (AnyQuantity <T>)Activator.CreateInstance(qt);

                    Qcach.Add(qt, Quantity);
                }
            }
            else
            {
                //create it from the unit dimension
                Quantity = new DerivedQuantity <T>(UnitDimension);
            }
            Quantity.Unit = this;

            Quantity.Value = value;

            if (this.IsOverflowed)
            {
                Quantity.Value =
                    AnyQuantity <T> .MultiplyScalarByGeneric(this.GetUnitOverflow(), value);
            }

            return(Quantity);
        }
示例#8
0
        static DerivedQuantities()
        {
            Frequency       = (DerivedQuantity)Time.Pow(-1m);
            Area            = (DerivedQuantity)(Length * Length);
            Volume          = (DerivedQuantity)(Area * Length);
            VolumeFlowRate  = (DerivedQuantity)(Volume / Time);
            Speed           = (DerivedQuantity)(Length / Time);
            Acceleration    = (DerivedQuantity)(Speed / Time);
            Force           = (DerivedQuantity)(Mass * Acceleration);
            Pressure        = (DerivedQuantity)(Force / Area);
            EnergyAndTorque = (DerivedQuantity)(Force * Length);
            Power           = (DerivedQuantity)(EnergyAndTorque / Time);
            //Torque = (DerivedQuantity)(Force * Length);
            AngularVelocity        = (DerivedQuantity)(Angle / Time);
            AngularAcceleration    = (DerivedQuantity)(AngularVelocity / Time);
            WaveNumber             = (DerivedQuantity)(Length.Pow(-1m));
            Density                = (DerivedQuantity)(Mass / Volume);
            SurfaceDensity         = (DerivedQuantity)(Mass / Area);
            ElectricCharge         = (DerivedQuantity)(ElectricCurrent * Time);
            Voltage                = (DerivedQuantity)(EnergyAndTorque / ElectricCharge);
            ElectricCapacitance    = (DerivedQuantity)(ElectricCharge / Voltage);
            ElectricResistance     = (DerivedQuantity)(Voltage / ElectricCurrent);
            ElectricConductance    = (DerivedQuantity)(ElectricResistance.Pow(-1m));
            MagneticFlux           = (DerivedQuantity)(Voltage * Time);
            MagneticFluxDensity    = (DerivedQuantity)(MagneticFlux / Area);
            Inductance             = (DerivedQuantity)(MagneticFlux / ElectricCurrent);
            LuminousFlux           = (DerivedQuantity)(LuminousIntensity * SolidAngle);
            Illuminance            = (DerivedQuantity)(LuminousFlux / Area);
            SpecificVolume         = (DerivedQuantity)(Density.Pow(-1m));
            ElectricCurrentDensity = (DerivedQuantity)(ElectricCurrent / Area);
            MagneticFieldStrength  = (DerivedQuantity)(ElectricCurrent / Length);
            Luminance              = (DerivedQuantity)(LuminousIntensity / Area);
            DynamicViscosity       = (DerivedQuantity)(Pressure * Time);
            KinematicViscosity     = (DerivedQuantity)(DynamicViscosity / Density);
            PowerFlux              = (DerivedQuantity)(Power / Area);
            HeatCapacity           = (DerivedQuantity)(EnergyAndTorque / Temperature);
            SpecificHeatCapacity   = (DerivedQuantity)(HeatCapacity / Mass);
            SpecificEnergy         = (DerivedQuantity)(EnergyAndTorque / Mass);
            ThermalConductivity    = (DerivedQuantity)(Power / (Length * Temperature));
            //EnergyDensity = (DerivedQuantity)(Energy / Volume);
            ElectricFieldStrength = (DerivedQuantity)(Voltage / Length);
            ElectricChargeDensity = (DerivedQuantity)(ElectricCharge / Volume);
            SurfaceChargeDensity  = (DerivedQuantity)(ElectricCharge / Area);
            Permittivity          = (DerivedQuantity)(ElectricCapacitance / Length);
            Permeability          = (DerivedQuantity)(Inductance / Length);

            foreach (var field in typeof(DerivedQuantities).GetFields())
            {
                var quantity = (DerivedQuantity)field.GetValue(field.Name) !;
                quantity.ChangeName(field.Name);
            }

            Frequency.ChangeSymbol("f");
            Area.ChangeSymbol("A");
            Volume.ChangeSymbol("V");
            VolumeFlowRate.ChangeSymbol("Vdot");
            Speed.ChangeSymbol("v");
            Acceleration.ChangeSymbol("a");
            Force.ChangeSymbol("F");
            Pressure.ChangeSymbol("p");
            EnergyAndTorque.ChangeSymbol("E");
            Power.ChangeSymbol("P");
            //Torque.ChangeSymbol("τ");
            AngularVelocity.ChangeSymbol("ω");
            AngularAcceleration.ChangeSymbol("α");
            WaveNumber.ChangeSymbol("σ");
            Density.ChangeSymbol("ρ");
            ElectricCharge.ChangeSymbol("q");
            Voltage.ChangeSymbol("ℰ");
            ElectricCapacitance.ChangeSymbol("C");
            ElectricResistance.ChangeSymbol("R");
            MagneticFlux.ChangeSymbol("Φ");
            MagneticFluxDensity.ChangeSymbol("B");
            Inductance.ChangeSymbol("L");
            LuminousFlux.ChangeSymbol("Φv");
            Illuminance.ChangeSymbol("Ev");
            ElectricCurrentDensity.ChangeSymbol("j");
            MagneticFieldStrength.ChangeSymbol("H");
            Luminance.ChangeSymbol("Lv");
            DynamicViscosity.ChangeSymbol("μ");
            KinematicViscosity.ChangeSymbol("ν");
            SpecificHeatCapacity.ChangeSymbol("cp");
            SpecificEnergy.ChangeSymbol("e");
            ThermalConductivity.ChangeSymbol("k");
            Permittivity.ChangeSymbol("ε");
        }
示例#9
0
        public static DerivedQuantity <T> ConstructDerivedQuantity <T>(params AnyQuantity <T>[] quantities)
        {
            DerivedQuantity <T> DQ = new DerivedQuantity <T>(1, quantities);

            return(DQ);
        }