public static Results RunStaticExample() { #region Structural IAssembly elementsAssembly = CreateAssembly(); elementsAssembly.CreateElementsAssembly(); elementsAssembly.ActivateBoundaryConditions = true; double[,] globalStiffnessMatrix = elementsAssembly.CreateTotalStiffnessMatrix(); int countContactElements = elementsAssembly.CountElementsOfSameType(typeof(ContactStS2D)); ShowToGUI.PlotInitialGeometry(elementsAssembly); structuralSolution.LinearScheme = new LUFactorization(); structuralSolution.NonLinearScheme.Tolerance = 1e-5; structuralSolution.ActivateNonLinearSolver = true; structuralSolution.NonLinearScheme.numberOfLoadSteps = 30; double[] externalForces3 = externalForcesStructuralVector; foreach (var dof in loadedStructuralDOFs) { externalForces3[dof - 1] = externalStructuralLoad; } double[] reducedExternalForces3 = BoundaryConditionsImposition.ReducedVector(externalForces3, elementsAssembly.BoundedDOFsVector); structuralSolution.AssemblyData = elementsAssembly; structuralSolution.Solve(reducedExternalForces3); double[] solvector3 = structuralSolution.GetSolution(); Dictionary <int, double[]> allStepsSolutions = structuralSolution.GetAllStepsSolutions(); Dictionary <int, List <double[]> > gPointsStress = new Dictionary <int, List <double[]> >(); Dictionary <int, List <double[]> > gPointsStrain = new Dictionary <int, List <double[]> >(); Dictionary <int, List <double[]> > gPoints = new Dictionary <int, List <double[]> >(); Dictionary <int, List <double[]> > nodalStress = new Dictionary <int, List <double[]> >(); Dictionary <int, List <double[]> > nodalStrain = new Dictionary <int, List <double[]> >(); for (int i = 1; i <= allStepsSolutions.Count; i++) { string name = "NodalCoordinates" + i.ToString() + ".dat"; ExportToFile.ExportUpdatedNodalCoordinates(elementsAssembly, BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions.Single(m => m.Key == i).Value, elementsAssembly.BoundedDOFsVector), name); gPointsStress = elementsAssembly.GetElementsStresses(allStepsSolutions[i]); gPointsStrain = elementsAssembly.GetElementsStains(allStepsSolutions[i]); gPoints = elementsAssembly.GetElementsGaussPoints(allStepsSolutions[i]); nodalStress = elementsAssembly.GetElementsNodesStresses(allStepsSolutions[i]); nodalStrain = elementsAssembly.GetElementsNodesStains(allStepsSolutions[i]); string name1 = "GPointsStress" + i.ToString() + ".dat"; string name2 = "GPointsStrain" + i.ToString() + ".dat"; string name3 = "GPointsCoordinates" + i.ToString() + ".dat"; string name4 = "NodalStress" + i.ToString() + ".dat"; string name5 = "NodalStrain" + i.ToString() + ".dat"; VectorOperations.PrintDictionaryofListsofVectorsToFile(gPointsStress, @"C:\Users\Public\Documents\" + name1); VectorOperations.PrintDictionaryofListsofVectorsToFile(gPointsStrain, @"C:\Users\Public\Documents\" + name2); VectorOperations.PrintDictionaryofListsofVectorsToFile(gPoints, @"C:\Users\Public\Documents\" + name3); VectorOperations.PrintDictionaryofListsofVectorsToFile(nodalStress, @"C:\Users\Public\Documents\" + name4); VectorOperations.PrintDictionaryofListsofVectorsToFile(nodalStrain, @"C:\Users\Public\Documents\" + name5); } elementsAssembly.UpdateDisplacements(solvector3); ShowToGUI.PlotFinalGeometry(elementsAssembly); double[] fullSolVector3 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(solvector3, elementsAssembly.BoundedDOFsVector); Dictionary <int, INode> finalNodes = Assembly.CalculateFinalNodalCoordinates(elementsAssembly.Nodes, fullSolVector3); double[] xFinalNodalCoor = Assembly.NodalCoordinatesToVectors(finalNodes).Item1; double[] yFinalNodalCoor = Assembly.NodalCoordinatesToVectors(finalNodes).Item2; Dictionary <int, double[]> allStepsFullSolutions = new Dictionary <int, double[]>(); Dictionary <int, Dictionary <int, double[]> > allStepsContactForces = new Dictionary <int, Dictionary <int, double[]> >(); Dictionary <int, double[]> elementsInternalContactForcesVector; for (int i = 1; i <= allStepsSolutions.Count; i++) { elementsInternalContactForcesVector = new Dictionary <int, double[]>(); elementsAssembly.UpdateDisplacements(allStepsSolutions[i]); for (int j = 1; j <= contactElements; j++) { elementsInternalContactForcesVector[elementsNumber + j] = elementsAssembly.ElementsAssembly[elementsNumber + j].CreateInternalGlobalForcesVector(); } allStepsContactForces[i] = elementsInternalContactForcesVector; string name = "ContactForces" + i.ToString() + ".dat"; double[] Vector = new double[contactElements * 12]; int count = 0; for (int j = 1; j <= contactElements; j++) { Vector[count] = allStepsContactForces.Single(m => m.Key == i).Value.Single(n => n.Key == elementsNumber + j).Value[0]; count += 1; Vector[count] = allStepsContactForces.Single(m => m.Key == i).Value.Single(n => n.Key == elementsNumber + j).Value[1]; count += 1; Vector[count] = allStepsContactForces.Single(m => m.Key == i).Value.Single(n => n.Key == elementsNumber + j).Value[2]; count += 1; Vector[count] = allStepsContactForces.Single(m => m.Key == i).Value.Single(n => n.Key == elementsNumber + j).Value[3]; count += 1; Vector[count] = allStepsContactForces.Single(m => m.Key == i).Value.Single(n => n.Key == elementsNumber + j).Value[4]; count += 1; Vector[count] = allStepsContactForces.Single(m => m.Key == i).Value.Single(n => n.Key == elementsNumber + j).Value[5]; count += 1; Vector[count] = allStepsContactForces.Single(m => m.Key == i).Value.Single(n => n.Key == elementsNumber + j).Value[6]; count += 1; Vector[count] = allStepsContactForces.Single(m => m.Key == i).Value.Single(n => n.Key == elementsNumber + j).Value[7]; count += 1; Vector[count] = allStepsContactForces.Single(m => m.Key == i).Value.Single(n => n.Key == elementsNumber + j).Value[8]; count += 1; Vector[count] = allStepsContactForces.Single(m => m.Key == i).Value.Single(n => n.Key == elementsNumber + j).Value[9]; count += 1; Vector[count] = allStepsContactForces.Single(m => m.Key == i).Value.Single(n => n.Key == elementsNumber + j).Value[10]; count += 1; Vector[count] = allStepsContactForces.Single(m => m.Key == i).Value.Single(n => n.Key == elementsNumber + j).Value[11]; count += 1; } VectorOperations.PrintVectorToFile(Vector, @"C:\Users\Public\Documents\" + name); } for (int i = 0; i < allStepsSolutions.Count; i++) { allStepsFullSolutions.Add(i + 1, BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions.Single(m => m.Key == i + 1).Value, elementsAssembly.BoundedDOFsVector)); int j = i + 1; string name = "solution" + j.ToString() + ".dat"; VectorOperations.PrintVectorToFile(allStepsFullSolutions.Single(m => m.Key == i + 1).Value, @"C:\Users\Public\Documents\" + name); } List <double[]> structuralSolutions = new List <double[]>(); #endregion return(new Results() { NonlinearSolution = structuralSolutions, SelectedDOF = 2, SolutionType = "Nonlinear" }); }
public static Results RunExample() { IAssembly elementsAssembly = CreateAssembly(); elementsAssembly.CreateElementsAssembly(); elementsAssembly.ActivateBoundaryConditions = true; ShowToGUI.PlotInitialGeometry(elementsAssembly); var AccelerationVector = new double[nodesNumber * 2]; var DisplacementVector = new double[nodesNumber * 2]; var VelocityVector = new double[nodesNumber * 2]; for (int i = 1; i <= 2 * (3 * circles - 1) * steps - 1; i += 2) { VelocityVector[i] = -50.0; } InitialConditions initialValues = new InitialConditions(); initialValues.InitialAccelerationVector = BoundaryConditionsImposition.ReducedVector(AccelerationVector, elementsAssembly.BoundedDOFsVector); initialValues.InitialDisplacementVector = BoundaryConditionsImposition.ReducedVector(DisplacementVector, elementsAssembly.BoundedDOFsVector); initialValues.InitialVelocityVector = BoundaryConditionsImposition.ReducedVector(VelocityVector, elementsAssembly.BoundedDOFsVector); initialValues.InitialTime = 0.0; //ExplicitSolver newSolver = new ExplicitSolver(0.0035, 3500); ExplicitSolver newSolver = new ExplicitSolver(0.003, 300); newSolver.Assembler = elementsAssembly; double[] externalForces = externalForcesStructuralVector; foreach (var dof in loadedStructuralDOFs) { externalForces[dof - 1] = externalForce; } newSolver.InitialValues = initialValues; newSolver.ExternalForcesVector = BoundaryConditionsImposition.ReducedVector(externalForces, elementsAssembly.BoundedDOFsVector); newSolver.LinearSolver = new LUFactorization(); newSolver.ActivateNonLinearSolution = true; newSolver.SolveNewmark(); Tuple <Dictionary <int, double[]>, Dictionary <int, double> > solvectors = newSolver.GetResults(); //int max = solvectors.Item1.OrderByDescending(m => m.Key).FirstOrDefault().Key; //elementsAssembly.UpdateDisplacements(solvectors.Item1.Single(m => m.Key == max).Value); Dictionary <int, double[]> allStepsSolutions = solvectors.Item1; Dictionary <int, List <double[]> > stress = new Dictionary <int, List <double[]> >(); Dictionary <int, List <double[]> > strain = new Dictionary <int, List <double[]> >(); Dictionary <int, List <double[]> > gPoints = new Dictionary <int, List <double[]> >(); Dictionary <int, List <double[]> > nodesStress = new Dictionary <int, List <double[]> >(); Dictionary <int, List <double[]> > nodesStrain = new Dictionary <int, List <double[]> >(); //for (int i = 1; i < allStepsSolutions.Count; i++) for (int i = 0; i <= allStepsSolutions.Count - 1; i++) { elementsAssembly.UpdateDisplacements(allStepsSolutions[i]); if (i == allStepsSolutions.Count - 1) { stress = elementsAssembly.GetElementsStresses(allStepsSolutions[i]); strain = elementsAssembly.GetElementsStains(allStepsSolutions[i]); gPoints = elementsAssembly.GetElementsGaussPoints(allStepsSolutions[i]); nodesStress = elementsAssembly.GetElementsNodesStresses(allStepsSolutions[i]); nodesStrain = elementsAssembly.GetElementsNodesStains(allStepsSolutions[i]); ExportToFile.ExportMatlabFinalGeometry(elementsAssembly, BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[i], elementsAssembly.BoundedDOFsVector)); } } ShowToGUI.PlotFinalGeometry(elementsAssembly); double[] fullDynamicSol1 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[200], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol2 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[210], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol3 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[220], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol4 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[230], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol5 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[240], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol6 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[250], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol7 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[260], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol8 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[270], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol9 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[280], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol10 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[285], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol11 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[290], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol12 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[291], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol13 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[292], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol14 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[293], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol15 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[294], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol16 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[295], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol17 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[296], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol18 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[297], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol19 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[298], elementsAssembly.BoundedDOFsVector); double[] fullDynamicSol20 = BoundaryConditionsImposition.CreateFullVectorFromReducedVector(allStepsSolutions[299], elementsAssembly.BoundedDOFsVector); VectorOperations.PrintVectorToFile(fullDynamicSol1, @"C:\Users\Public\Documents\Results1.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol2, @"C:\Users\Public\Documents\Results2.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol3, @"C:\Users\Public\Documents\Results3.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol4, @"C:\Users\Public\Documents\Results4.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol5, @"C:\Users\Public\Documents\Results5.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol6, @"C:\Users\Public\Documents\Results6.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol7, @"C:\Users\Public\Documents\Results7.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol8, @"C:\Users\Public\Documents\Results8.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol9, @"C:\Users\Public\Documents\Results9.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol10, @"C:\Users\Public\Documents\Results10.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol11, @"C:\Users\Public\Documents\Results11.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol12, @"C:\Users\Public\Documents\Results12.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol13, @"C:\Users\Public\Documents\Results13.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol14, @"C:\Users\Public\Documents\Results14.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol15, @"C:\Users\Public\Documents\Results15.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol16, @"C:\Users\Public\Documents\Results16.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol17, @"C:\Users\Public\Documents\Results17.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol18, @"C:\Users\Public\Documents\Results18.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol19, @"C:\Users\Public\Documents\Results19.dat"); VectorOperations.PrintVectorToFile(fullDynamicSol20, @"C:\Users\Public\Documents\Results20.dat"); VectorOperations.PrintDictionaryofListsofVectorsToFile(stress, @"C:\Users\Public\Documents\Stress.dat"); VectorOperations.PrintDictionaryofListsofVectorsToFile(strain, @"C:\Users\Public\Documents\Strain.dat"); VectorOperations.PrintDictionaryofListsofVectorsToFile(gPoints, @"C:\Users\Public\Documents\GaussPoints.dat"); VectorOperations.PrintDictionaryofListsofVectorsToFile(nodesStress, @"C:\Users\Public\Documents\StressNodes.dat"); VectorOperations.PrintDictionaryofListsofVectorsToFile(nodesStrain, @"C:\Users\Public\Documents\StrainNodes.dat"); //newSolver.PrintExplicitSolution(); Results finalResults = new Results() { DynamicSolution = newSolver.explicitSolution, TimeSteps = newSolver.TimeAtEachStep, SelectedDOF = 1, SelectedInterval = 1, SolutionType = "Dynamic" }; return(finalResults); }