예제 #1
0
        private static List <PredictionInput> CreateAllPredictionObjects(IEnumerable <GlassUnit> glassUnitList,
                                                                         ObservableCollection <LoadCombinationDefinition> loadCombinations,
                                                                         RfemLoadsData allLoads)
        {
            var allPredictionObjects = new List <PredictionInput>();

            foreach (var glassUnit in glassUnitList)
            {
                glassUnit.GlassPanes
                .ForEach(glassPane => loadCombinations
                         .ForEach(comb => CreateSinglePredictionData(allLoads, comb, glassPane, allPredictionObjects)));
            }

            return(allPredictionObjects);
        }
예제 #2
0
        private static double AddToTodalSurfaceLoad(RfemLoadsData allLoads, double totalUdlLoad, GlassPane glassPane,
                                                    KeyValuePair <LoadCaseInModel, double> loadCase)
        {
            var loadCaseNo = LoadCaseDefinition.Numbers[loadCase.Key];

            if (allLoads.SurfaceLoadsByCase.ContainsKey(loadCaseNo))
            {
                totalUdlLoad += allLoads.SurfaceLoadsByCase[loadCaseNo]
                                .Where(x => glassPane.SurfaceNoRfem.ToString() == x.SurfaceList)
                                .Select(x => x.Magnitude1)
                                .DefaultIfEmpty(0)
                                .Sum() * loadCase.Value;
            }

            return(totalUdlLoad);
        }
예제 #3
0
        private static double AddToTotalPointLoad(RfemLoadsData allLoads, KeyValuePair <LoadCaseInModel, double> loadCase, GlassPane glassPane,
                                                  double pointLoadMagnitude)
        {
            var loadCaseNo = LoadCaseDefinition.Numbers[loadCase.Key];

            if (allLoads.RectangularLoadsByCase.ContainsKey(loadCaseNo))
            {
                var pointLoadUdl = allLoads.RectangularLoadsByCase[loadCaseNo]
                                   .Where(x => glassPane.SurfaceNoRfem.ToString() == x.SurfaceList)
                                   .Select(x => x.Magnitude1)
                                   .DefaultIfEmpty(0)
                                   .Sum() * loadCase.Value;
                var pointLoadSize = MachineLearningConstants.PointLoadSize;
                pointLoadMagnitude += pointLoadUdl * pointLoadSize * pointLoadSize;
            }

            return(pointLoadMagnitude);
        }
예제 #4
0
        private static void CreateSinglePredictionData(RfemLoadsData allLoads, LoadCombinationDefinition combination,
                                                       GlassPane glassPane, List <PredictionInput> allPredObjects)
        {
            double totalUdlLoad = 0, pointLoadMagnitude = 0, lineLoadMagnitude = 0, lineLoadHeight = 0;
            int    linePointDirection = 0;

            foreach (var loadCase in combination.LoadFactorDictionary)
            {
                totalUdlLoad       = AddToTodalSurfaceLoad(allLoads, totalUdlLoad, glassPane, loadCase);
                lineLoadMagnitude  = AddToTotalLineLoad(allLoads, loadCase, glassPane, lineLoadMagnitude, ref lineLoadHeight);
                pointLoadMagnitude = AddToTotalPointLoad(allLoads, loadCase, glassPane, pointLoadMagnitude);
            }

            if ((pointLoadMagnitude != 0 && pointLoadMagnitude * totalUdlLoad < 0) ||
                (lineLoadMagnitude != 0 && lineLoadMagnitude * totalUdlLoad < 0))
            {
                linePointDirection = -1;
            }
            else
            {
                linePointDirection = 1;
            }

            lineLoadHeight = InverseLineLoadHeightIfOverHalfOfTotalHeight(glassPane, lineLoadHeight);
            var predictionObject = new PredictionInput()
            {
                CombinationNo       = combination.Number,
                SurfaceNo           = glassPane.SurfaceNoRfem,
                LimitStateForChecks = combination.CheckType,
                Width                = glassPane.Width,
                Height               = glassPane.Height,
                Thickness            = glassPane.EqThicknessForCorrectStiffness,
                UniformLoadMagnitude = Math.Abs(totalUdlLoad),
                LineLoadMagnitude    = Math.Abs(lineLoadMagnitude),
                LineLoadHeight       = lineLoadHeight,
                PointLoadMagnitude   = Math.Abs(pointLoadMagnitude),
                LinePointDirection   = linePointDirection
            };

            allPredObjects.Add(predictionObject);
        }
예제 #5
0
        private static double AddToTotalLineLoad(RfemLoadsData allLoads, KeyValuePair <LoadCaseInModel, double> loadCase, GlassPane glassPane,
                                                 double lineLoadMagnitude, ref double lineLoadHeight)
        {
            var loadCaseNo = LoadCaseDefinition.Numbers[loadCase.Key];

            if (allLoads.LineLoadsByCase.ContainsKey(loadCaseNo))
            {
                lineLoadMagnitude += allLoads.LineLoadsByCase[loadCaseNo]
                                     .Where(x => glassPane.SurfaceNoRfem.ToString() == x.SurfaceList)
                                     .Select(x => x.Magnitude1)
                                     .DefaultIfEmpty(0)
                                     .Sum() * loadCase.Value;
                lineLoadHeight = allLoads.LineLoadsByCase[loadCaseNo]
                                 .Where(x => glassPane.SurfaceNoRfem.ToString() == x.SurfaceList)
                                 .Select(x => x.Position1.Z)
                                 .DefaultIfEmpty(0)
                                 .FirstOrDefault();
            }

            return(lineLoadMagnitude);
        }