コード例 #1
0
        public void OrderDofs(bool alsoOrderConstrainedDofs)
        {
            var watch = new Stopwatch();

            watch.Start();

            IGlobalFreeDofOrdering globalRowOrdering = dofRowOrderer.OrderFreeDofs(model);
            IGlobalFreeDofOrdering globalColOrdering = dofColOrderer.OrderFreeDofs(model);

            assembler.HandleDofOrderingWillBeModified();

            model.GlobalRowDofOrdering = globalRowOrdering;
            model.GlobalColDofOrdering = globalColOrdering;

            foreach (var subdomain in model.Subdomains)
            {
                subdomain.FreeDofRowOrdering = globalRowOrdering.SubdomainDofOrderings[subdomain];
                subdomain.FreeDofColOrdering = globalColOrdering.SubdomainDofOrderings[subdomain];

                if (alsoOrderConstrainedDofs)
                {
                    subdomain.ConstrainedDofRowOrdering = dofRowOrderer.OrderConstrainedDofs(subdomain);
                    subdomain.ConstrainedDofColOrdering = dofColOrderer.OrderConstrainedDofs(subdomain);
                }
            }

            watch.Stop();
            Logger.LogTaskDuration("Dof ordering", watch.ElapsedMilliseconds);
            Logger.LogNumDofs("Global rows", globalRowOrdering.NumGlobalFreeDofs);
            Logger.LogNumDofs("Global columns", globalColOrdering.NumGlobalFreeDofs);
        }
コード例 #2
0
        public void OrderDofs(bool alsoOrderConstrainedDofs)
        {
            var watch = new Stopwatch();

            watch.Start();

            IGlobalFreeDofOrdering globalOrdering = dofOrderer.OrderFreeDofs(model);

            assembler.HandleDofOrderingWillBeModified();

            model.GlobalDofOrdering = globalOrdering;
            foreach (ISubdomain subdomain in model.Subdomains)
            {
                subdomain.FreeDofOrdering = globalOrdering.SubdomainDofOrderings[subdomain];
                if (alsoOrderConstrainedDofs)
                {
                    subdomain.ConstrainedDofOrdering = dofOrderer.OrderConstrainedDofs(subdomain);
                }

                // The next must done by the analyzer, so that subdomain.Forces is retained when doing back to back analyses.
                //subdomain.Forces = linearSystem.CreateZeroVector();
            }
            //EnumerateSubdomainLagranges();
            //EnumerateDOFMultiplicity();

            watch.Stop();
            Logger.LogTaskDuration("Dof ordering", watch.ElapsedMilliseconds);
            Logger.LogNumDofs("Global dofs", globalOrdering.NumGlobalFreeDofs);
        }