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