Example #1
0
        private string CombineArrayToString(double[] sourceArray)
        {
            string result = null;

            if (sourceArray.Length == 0)
            {
                result = "empty";
            }
            else if (sourceArray.Length == 1)
            {
                result = Parsing.DoubleToString(sourceArray[0]);
            }
            else
            {
                foreach (var thisValue in sourceArray)
                {
                    if (result == null)
                    {
                        result = "{" + Parsing.DoubleToString(thisValue);
                    }
                    else
                    {
                        result += "," + Parsing.DoubleToString(thisValue);
                    }
                }

                result += "}";
            }

            return(result);
        }
Example #2
0
        private void TryCalculate()
        {
            var fail = double.IsNaN(_mMassOfFlammableVapor) || double.IsNaN(_mYieldPercentage) ||
                       double.IsNaN(_mHeatOfCombustion);

            if (!fail)
            {
                var massOfFlammableVaporCu = ddMassOfFlammableVapor.ConvertValue(_mActiveMassOfFlammableVaporUnit,
                                                                                 MassUnit.Kilogram, _mMassOfFlammableVapor);
                var heatOfCombustionCu = ddHeatOfCombustion.ConvertValue(_mActiveSpecificEnergyUnit,
                                                                         SpecificEnergyUnit.KjKg, _mHeatOfCombustion);

                _mTntMassEquivalent = massOfFlammableVaporCu * (_mYieldPercentage / 100) * heatOfCombustionCu / 4500;

                if (!double.IsNaN(_mTntMassEquivalent))
                {
                    tbTNTMassEquivalent.Text = Parsing.DoubleToString(_mTntMassEquivalent, "E4");
                }
                else
                {
                    tbTNTMassEquivalent.Text = "NaN";
                }
            }
            else
            {
                tbTNTMassEquivalent.Text = "NaN";
            }
        }
Example #3
0
        private void SetDischargeCoefficient()
        {
            var cD = QraStateContainer.Instance.GetStateDefinedValueObject("DischargeCoefficient")
                     .GetValue(UnitlessUnit.Unitless)[0];

            tbDischargeCoefficient.Text = Parsing.DoubleToString(cD);
        }
Example #4
0
        /// <summary>
        ///     Compute missing parameter via python call
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCalculate_Click(object sender, EventArgs e)
        {
            double?temp     = null;
            double?pressure = null;
            double?density  = null;

            switch (_mCalculationOption)
            {
            case CalculationOption.CalculateDensity:
                temp     = GetTempInCorrectUnits();
                pressure = GetPressureValueInCorrectUnits();
                break;

            case CalculationOption.CalculatePressure:
                density = GetDensityInCorrectUnits();
                temp    = GetTempInCorrectUnits();
                break;

            case CalculationOption.CalculateTemperature:
                density  = GetDensityInCorrectUnits();
                pressure = GetPressureValueInCorrectUnits();
                break;

            default:
                throw new Exception("Calculation option of " + _mCalculationOption + " unknown.");
            }

            try
            {
                var physApi = new PhysInterface();
                var result  = (double)physApi.ComputeTpd(temp, pressure, density);

                var valueToUse = double.NaN;
                switch (_mCalculationOption)
                {
                case CalculationOption.CalculateDensity:
                    valueToUse =
                        dd_Density.ConvertValue(DensityUnit.KilogramCubicMeter, _mActiveDensityUnit, result);
                    break;

                case CalculationOption.CalculatePressure:
                    valueToUse = dd_Pressure.ConvertValue(PressureUnit.Pa, _mActivePressureUnit, result);
                    break;

                case CalculationOption.CalculateTemperature:
                    valueToUse = dd_Temperature.ConvertValue(TempUnit.Kelvin, _mActiveTempUnit, result);
                    break;
                }

                var resultContainer = GetResultContainer();
                resultContainer.Text = Parsing.DoubleToString(valueToUse);
            }
            catch (Exception ex)
            {
                MessageBox.Show("An error occurred when attempting to perform the calculation: " + ex.Message);
            }
        }
Example #5
0
 private void ddMassEquivalent_OnSelectedIndexChanged(object sender, EventArgs e)
 {
     if (ddMassEquivalent.SelectedItem != null)
     {
         var newUnit = UnitParser.ParseMassUnit((string)ddMassEquivalent.SelectedItem);
         _mTntMassEquivalent = ddMassEquivalent.ConvertValue(_mActiveTntMassUnit, newUnit, _mTntMassEquivalent);
         _mActiveTntMassUnit = newUnit;
         if (!double.IsNaN(_mTntMassEquivalent))
         {
             tbTNTMassEquivalent.Text = Parsing.DoubleToString(_mTntMassEquivalent, "E4");
         }
     }
 }
Example #6
0
        private void ddMassOfFlammableVapor_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddMassOfFlammableVapor.SelectedItem != null)
            {
                var newUnit = UnitParser.ParseMassUnit((string)ddMassOfFlammableVapor.SelectedItem);

                _mMassOfFlammableVapor = ddMassOfFlammableVapor.ConvertValue(_mActiveMassOfFlammableVaporUnit,
                                                                             newUnit, _mMassOfFlammableVapor);
                _mActiveMassOfFlammableVaporUnit = newUnit;
                if (!double.IsNaN(_mMassOfFlammableVapor))
                {
                    tbMassOfFlammableVapor.Text = Parsing.DoubleToString(_mMassOfFlammableVapor);
                }
            }
        }
Example #7
0
        private void ddPressure_OnSelectedIndexChange(object sender, EventArgs e)
        {
            if (ddPressure.SelectedItem != null)
            {
                var newUnit = UnitParser.ParsePressureUnit((string)ddPressure.SelectedItem);
                _mPressureValue = ddPressure.ConvertValue(_mActivePressureUnit, newUnit, _mPressureValue);
                if (!double.IsNaN(_mPressureValue))
                {
                    tbPressure.Text = Parsing.DoubleToString(_mPressureValue);
                }

                _mActivePressureUnit            = newUnit;
                Settings.Default.TMPressureUnit = _mActivePressureUnit.ToString();
            }
        }
Example #8
0
        private void ddHeatOfCombustion_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddHeatOfCombustion.SelectedItem != null)
            {
                var newUnit =
                    UnitParser.ParseSpecificEnergyUnit((string)ddHeatOfCombustion.SelectedItem);

                _mHeatOfCombustion =
                    ddHeatOfCombustion.ConvertValue(_mActiveSpecificEnergyUnit, newUnit, _mHeatOfCombustion);
                _mActiveSpecificEnergyUnit = newUnit;
                if (!double.IsNaN(_mHeatOfCombustion))
                {
                    tbHeatOfCombustion.Text = Parsing.DoubleToString(_mHeatOfCombustion);
                }

                //SetDefaultActiveSpecificEnergyUnit(_mActiveSpecificEnergyUnit);
            }
        }
Example #9
0
        private void DisplayResults()
        {
            // Display result data and plots
            tbMaxPressure.Text = Parsing.DoubleToString(_overpressure);
            tbTime.Text        = Parsing.DoubleToString(_timeOfOverpressure);

            FillDoubleColumnDataGrid(dgPressures, _timesToPlot, _pressuresPerTime);
            FillDoubleColumnDataGrid(dgDepthAndConcentration, _depths, _concentrations);

            pbPressure.Load(_pressurePlotFilepath);
            pbLayer.Load(_layerPlotFilepath);
            pbFlammableMass.Load(_massPlotFilepath);
            pbTrajectory.Load(_trajectoryPlotFilepath);

            pbOverpSpinner.Hide();
            btnExecute.Enabled = true;
            tcMain.SelectedTab = tpOutput;
        }
Example #10
0
        private static void AddLinkedValueRowToDataGrid(DataGridView dgObj, GridColumnTemplate gct,
                                                        ParameterWrapper vdo)
        {
            var  newRow      = new DataGridViewRow();
            Enum unitToUse   = null;
            var  varUnitDict =
                (Dictionary <string, Enum>)QraStateContainer.Instance.Parameters["VarUnitDict"];

            varUnitDict.TryGetValue(vdo.Key, out unitToUse);
            unitToUse = unitToUse ?? vdo.Unit;
            string unitDisplayName = null;

            if (unitToUse is UnitlessUnit)
            {
                var uu = (UnitlessUnit)unitToUse;
                if (uu == UnitlessUnit.Unitless)
                {
                    unitDisplayName = "...";
                }
            }

            var valueObj = QraStateContainer.Instance.GetStateDefinedValueObject(vdo.Key);

            var values = valueObj.GetValue(unitToUse);

            if (gct == null && values.Length == 1)
            {
                if (unitToUse is UnitlessUnit || unitDisplayName != null)
                {
                    newRow.CreateCells(dgObj, vdo.VariableDisplayName, Parsing.DoubleToString(values[0]),
                                       unitDisplayName);
                    newRow.Cells[0].ReadOnly = true;
                    newRow.Cells[0].Tag      = vdo.Key;
                    newRow.Cells[2].ReadOnly = true;
                }
                else
                {
                    var unitType       = unitToUse.GetType();
                    var possibleValues = unitType.GetEnumValues();
                    var cbCell         = new DataGridViewComboBoxCell();
                    cbCell.DataSource = possibleValues;
                    cbCell.ValueType  = unitType;

                    newRow.Cells.Add(new DataGridViewTextBoxCell());
                    newRow.Cells.Add(new DataGridViewTextBoxCell());
                    newRow.Cells.Add(cbCell);
                    newRow.Cells[0].Value    = vdo.VariableDisplayName;
                    newRow.Cells[0].Tag      = vdo.Key;
                    newRow.Cells[1].Value    = Parsing.DoubleToString(values[0]);
                    newRow.Cells[2].Value    = unitToUse;
                    newRow.Cells[0].ReadOnly = true;
                }
            }
            else
            {
                if (gct == null && values.Length > 1)
                {
                    throw new Exception("GridColumnTemplate is required when multiple values are specified.");
                }

                var cellValues       = new string[gct.Headers.Length];
                var indexIncrementor = 0;

                if (gct.FirstColumnValues != null)
                {
                    indexIncrementor += 1;

                    cellValues = new string[cellValues.Length + 1];
                    var optionalFirstColumnValueRowIndex = dgObj.Rows.Count - 1;
                    cellValues[0] = gct.FirstColumnValues[optionalFirstColumnValueRowIndex];
                }

                for (var cellIndex = 0; cellIndex < gct.Headers.Length; cellIndex++)
                {
                    if (values.Length > cellIndex)
                    {
                        var svalue = values[cellIndex].ToString("F2", new CultureInfo("en-US"));
                        cellValues[cellIndex + indexIncrementor] = svalue;
                    }
                }


                newRow.CreateCells(dgObj, cellValues);
            }

            vdo.OriginalValues = values;

            vdo.Unit   = unitToUse;
            newRow.Tag = vdo;

            dgObj.Rows.Add(newRow);
        }
Example #11
0
        void IQraBaseNotify.Notify_LoadComplete()
        {
            StartIgnoringGridChangeEvents();

            // TODO (Cianan): Can simplify all this setup by using one-way binding to objects
            ContentPanel.SetNarrative(this, Narratives.SD__System_Description);
            // Set up component grid
            var vdColl = new ParameterWrapperCollection(new[]
            {
                new ParameterWrapper("Components.NrCompressors", "# Compressors"),
                new ParameterWrapper("Components.NrCylinders", "# Cylinders"),
                new ParameterWrapper("Components.NrValves", "# Valves"),
                new ParameterWrapper("Components.NrInstruments", "# Instruments"),
                new ParameterWrapper("Components.NrJoints", "# Joints"),
                new ParameterWrapper("Components.NrHoses", "# Hoses"),
                new ParameterWrapper("Components.PipeLength", "Pipes (length)", DistanceUnit.Meter,
                                     StockConverters.DistanceConverter),
                new ParameterWrapper("Components.NrFilters", "# Filters"),
                new ParameterWrapper("Components.NrFlanges", "# Flanges"),
                new ParameterWrapper("Components.NrExtraComp1", "# Extra Component 1"),
                new ParameterWrapper("Components.NrExtraComp2", "# Extra Component 2")
            });

            StaticGridHelperRoutines.InitInteractiveGrid(dgComponents, vdColl, false);

            // Set up system params grid
            var vdColl2 = new ParameterWrapperCollection(
                new[]
            {
                new ParameterWrapper("SysParam.PipeOD", "Pipe Outer Diameter", DistanceUnit.Inch,
                                     StockConverters.DistanceConverter),
                new ParameterWrapper("SysParam.PipeWallThick", "Pipe Wall Thickness", DistanceUnit.Inch,
                                     StockConverters.DistanceConverter),
                new ParameterWrapper("SysParam.InternalTempC", "Hydrogen Temperature", TempUnit.Celsius,
                                     StockConverters.TemperatureConverter),
                new ParameterWrapper("SysParam.InternalPresMPA", "Hydrogen Pressure", PressureUnit.MPa,
                                     StockConverters.PressureConverter),
                new ParameterWrapper("SysParam.ExternalTempC", "Ambient Temperature", TempUnit.Celsius,
                                     StockConverters.TemperatureConverter),
                new ParameterWrapper("SysParam.ExternalPresMPA", "Ambient Pressure", PressureUnit.MPa,
                                     StockConverters.PressureConverter)
            }
                );

            StaticGridHelperRoutines.InitInteractiveGrid(dgSystemParameters_Piping, vdColl2, false);
            dgSystemParameters_Piping.Columns[0].Width = 200;

            // Vehicle grid
            StaticGridHelperRoutines.InitInteractiveGrid(dgSystemParameters_Vehicles, new ParameterWrapperCollection(
                                                             new[]
            {
                new ParameterWrapper("nVehicles", "Number of Vehicles"),
                new ParameterWrapper("nFuelingsPerVehicleDay", "Number of Fuelings Per Vehicle Day"),
                new ParameterWrapper("nVehicleOperatingDays", "Number of Vehicle Operating Days per Year"),
                new ParameterWrapper("nDemands", "Annual Demands (calculated)", UnitlessUnit.Unitless,
                                     StockConverters.UnitlessConverter)
            }
                                                             ), false);

            dgSystemParameters_Vehicles.Columns[0].Width = 300;
            dgSystemParameters_Vehicles.Columns[1].Width = 100;

            // Set up facility grid
            StaticGridHelperRoutines.InitInteractiveGrid(dgFacilityParameters, new ParameterWrapperCollection(
                                                             new[]
            {
                new ParameterWrapper("Facility.Length", "Length (x-direction)", DistanceUnit.Meter,
                                     StockConverters.DistanceConverter),
                new ParameterWrapper("Facility.Width", "Width (z-direction)", DistanceUnit.Meter,
                                     StockConverters.DistanceConverter),
                new ParameterWrapper("Facility.Height", "Height (y-direction)", DistanceUnit.Meter,
                                     StockConverters.DistanceConverter)
            }
                                                             ), false);

            SetOccupantInputsGrid();

            // Set up enclosure grid
            StaticGridHelperRoutines.InitInteractiveGrid(dgEnclosure, new ParameterWrapperCollection(
                                                             new[]
            {
                new ParameterWrapper("Enclosure.Height", "Height", DistanceUnit.Meter,
                                     StockConverters.DistanceConverter),
                new ParameterWrapper("Enclosure.AreaOfFloorAndCeiling", "Area (floor and ceiling)",
                                     AreaUnit.SqMeters, StockConverters.AreaConverter),
                new ParameterWrapper("Enclosure.HeightOfRelease", "Height of release", DistanceUnit.Meter,
                                     StockConverters.DistanceConverter),
                new ParameterWrapper("Enclosure.XWall", "Distance from release to wall (perpendicular)",
                                     DistanceUnit.Meter, StockConverters.DistanceConverter)
            }
                                                             ));

            // Override grid
            var overrideColl = new ParameterWrapperCollection(new[]
            {
                new ParameterWrapper("H2Release.000d01", "0.01% H2 Release"),
                new ParameterWrapper("H2Release.000d10", "0.10% H2 Release"),
                new ParameterWrapper("H2Release.001d00", "1% H2 Release"),
                new ParameterWrapper("H2Release.010d00", "10% H2 Release"),
                new ParameterWrapper("H2Release.100d00", "100% H2 Release"),
                new ParameterWrapper("Failure.ManualOverride", "100% H2 Release (accidents and shutdown failures)"),
                new ParameterWrapper("Pdetectisolate", "Gas detection credit")
            });

            StaticGridHelperRoutines.InitInteractiveGrid(dgManualOverrides, overrideColl, false);


            var ceilingVentDgv = dgCeilingVent;

            SetVentGrid(ceilingVentDgv, WhichVent.Ceiling);
            ceilingVentDgv.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

            var floorVentDgv = dgFloorVent;

            SetVentGrid(floorVentDgv, WhichVent.Floor);

            // Set up random seed textbox
            var saveIgnoreValue = _ignoreRandomSeedChangeEvent;

            _ignoreRandomSeedChangeEvent = true;
            try
            {
                var cv = GetRandomSeedFromDatabase();
                cv.EnsureBaseValueIsTruncatedInt();
                var newValue = Math.Truncate(cv.GetValue(UnitlessUnit.Unitless)[0]);
                tbRandomSeed.Text = Parsing.DoubleToString(Math.Truncate(newValue));
            }
            finally
            {
                _ignoreRandomSeedChangeEvent = saveIgnoreValue;
            }

            // Set up exclusion textbox
            var exclusionRadius = QraStateContainer.GetNdValue("QRAD:EXCLUSIONRADIUS");

            tbExclusionRadius.Text = Parsing.DoubleToString(exclusionRadius);

            SetXLocParamAndModifyCellVisibilityInOccupantsGrid();

            StopIgnoringGridChangeEvents();
            // If check is enabled in analysis, this ensures analysis will be re-run
            QraStateContainer.SetValue("ResultsAreStale", true);

            // Remove a page that's not yet used.
            tcFacilityParameters.TabPages.Remove(tpEnclosure);
        }