예제 #1
0
 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));
     }
 }
예제 #2
0
 private void RebuildKs()
 {
     foreach (Subdomain subdomain in model.SubdomainsDictionary.Values)
     {
         if (subdomain.MaterialsModified)
         {
             ks[subdomain.ID] = GlobalMatrixAssemblerSkyline.CalculateGlobalMatrix(subdomain, stiffnessProvider);
         }
         subdomain.ResetMaterialsModifiedProperty();
     }
 }
예제 #3
0
        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));
            }
        }
예제 #4
0
        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));
            }
        }
예제 #5
0
        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]);
                }
            }
        }