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); }
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); }
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); }
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); }
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); }