//public string PlotDirectory { get { return lsmPlotDirectory; } } public void Analyze(ISolver solver) { var problem = new ProblemStructural(Model, solver); var analyzer = new QuasiStaticCrackPropagationAnalyzer(Model, solver, /*problem,*/ crack, fractureToughness, maxIterations); // Subdomain plots if (subdomainPlotDirectory != null) { if (solver is FetiDPSolver fetiDP) { analyzer.DDLogger = new DomainDecompositionLoggerFetiDP(fetiDP, subdomainPlotDirectory); } else { analyzer.DDLogger = new DomainDecompositionLogger(subdomainPlotDirectory); } } analyzer.Initialize(); analyzer.Analyze(); #region crack propagation output // Write crack path //Console.WriteLine("Crack path:"); //foreach (var point in crack.CrackPath) //{ // Console.WriteLine("{0} {1}", point.X, point.Y); //} //Console.WriteLine(); // Write growth angles, lengths and SIFs if necessary //if (writePropagation) //{ // using (var writer = new StreamWriter(propagationPath)) // { // PropagationLogger logger = crack.CrackTipPropagators[crack.CrackTips[0]].Logger; // int numIterations = logger.GrowthAngles.Count; // writer.WriteLine(numIterations); // for (int i = 0; i < numIterations; ++i) // { // writer.Write(logger.GrowthAngles[i]); // writer.Write(" " + logger.GrowthLengths[i]); // writer.Write(" " + logger.SIFsMode1[i]); // writer.Write(" " + logger.SIFsMode2[i]); // writer.WriteLine(); // } // } //} #endregion }
//public string PlotDirectory { get { return lsmPlotDirectory; } } public void Analyze(ISolver solver) { var problem = new ProblemStructural(Model, solver); var analyzer = new QuasiStaticCrackPropagationAnalyzer(Model, solver, /*problem,*/ crack, fractureToughness, maxIterations); // Subdomain plots if (subdomainPlotDirectory != null) { if (solver is FetiDPSolver fetiDP) { analyzer.DDLogger = new DomainDecompositionLoggerFetiDP(fetiDP, subdomainPlotDirectory, true); } else { analyzer.DDLogger = new DomainDecompositionLogger(subdomainPlotDirectory); } } analyzer.Initialize(); analyzer.Analyze(); }