private void BuildKs() { ks = new Dictionary <int, IMatrix2D <double> >(model.SubdomainsDictionary.Count); foreach (Subdomain subdomain in model.SubdomainsDictionary.Values) { ks.Add(subdomain.ID, GlobalMatrixAssemblerSkyline.CalculateGlobalMatrix(subdomain, stiffnessProvider)); } }
private void RebuildKs() { foreach (Subdomain subdomain in model.SubdomainsDictionary.Values) { if (subdomain.MaterialsModified) { ks[subdomain.ID] = GlobalMatrixAssemblerSkyline.CalculateGlobalMatrix(subdomain, stiffnessProvider); } subdomain.ResetMaterialsModifiedProperty(); } }
private void BuildMs() { ms = new Dictionary <int, IMatrix2D <double> >(model.SubdomainsDictionary.Count); //ms.Add(1, new SkylineMatrix2D<double>(new double[,] { { 2, 0 }, { 0, 1 } })); ElementStructuralMassProvider s = new ElementStructuralMassProvider(); foreach (Subdomain subdomain in model.SubdomainsDictionary.Values) { ms.Add(subdomain.ID, GlobalMatrixAssemblerSkyline.CalculateGlobalMatrix(subdomain, s)); } }
private void BuildCs() { cs = new Dictionary <int, IMatrix2D <double> >(model.SubdomainsDictionary.Count); //foreach (Subdomain subdomain in model.SubdomainsDictionary.Values) // cs.Add(subdomain.ID, SkylineMatrix2D<double>.Empty(subdomain.TotalDOFs)); ElementStructuralDampingProvider s = new ElementStructuralDampingProvider(); foreach (Subdomain subdomain in model.SubdomainsDictionary.Values) { cs.Add(subdomain.ID, GlobalMatrixAssemblerSkyline.CalculateGlobalMatrix(subdomain, s)); } }
private void BuildKs() { ks = new Dictionary <int, IMatrix2D <double> >(model.SubdomainsDictionary.Count); //ks.Add(1, new SkylineMatrix2D<double>(new double[,] { { 6, -2 }, { -2, 4 } })); ElementStructuralStiffnessProvider s = new ElementStructuralStiffnessProvider(); //foreach (Subdomain subdomain in model.SubdomainsDictionary.Values) // ks.Add(subdomain.ID, GlobalMatrixAssemblerSkyline.CalculateGlobalMatrix(subdomain, s)); //var kks = new Dictionary<int, IMatrix2D<double>>(model.SubdomainsDictionary.Count); int procs = VectorExtensions.AffinityCount; var k = model.SubdomainsDictionary.Keys.Select(x => x).ToArray <int>(); var internalKs = new Dictionary <int, IMatrix2D <double> > [procs]; Parallel.ForEach(k.PartitionLimits(procs), limit => { if (limit.Item3 - limit.Item2 > 0) { internalKs[limit.Item1] = new Dictionary <int, IMatrix2D <double> >(limit.Item3 - limit.Item2); for (int i = limit.Item2; i < limit.Item3; i++) { internalKs[limit.Item1].Add(k[i], GlobalMatrixAssemblerSkyline.CalculateGlobalMatrix(model.SubdomainsDictionary[k[i]], s)); } } else { internalKs[limit.Item1] = new Dictionary <int, IMatrix2D <double> >(); } }); for (int i = 0; i < procs; i++) { foreach (int key in internalKs[i].Keys) { ks.Add(key, internalKs[i][key]); } } }