private static IVectorView SolveModel(Model model, ComsolMeshReader modelReader) { double[] temp0 = new double[model.Nodes.Count]; int[] boundaryIDs = new int[] { 2, 7, 8, 9 }; foreach (int boundaryID in boundaryIDs) { foreach (Node node in modelReader.nodeBoundaries[boundaryID]) { temp0[node.ID] = 0; } } boundaryIDs = new int[] { 0, 1, 3, 4, 6 }; foreach (int boundaryID in boundaryIDs) { foreach (Node node in modelReader.nodeBoundaries[boundaryID]) { temp0[node.ID] = 1; } } Vector initialTemp = Vector.CreateFromArray(temp0); DenseMatrixSolver solver = (new DenseMatrixSolver.Builder()).BuildSolver(model); var provider = new ProblemConvectionDiffusion(model, solver); var childAnalyzer = new LinearAnalyzer(model, solver, provider); var parentAnalyzer = new ConvectionDiffusionExplicitDynamicAnalyzer(model, solver, provider, childAnalyzer, 5e-8, 1e-3, initialTemp); parentAnalyzer.Initialize(); parentAnalyzer.Solve(); return(parentAnalyzer.temperature[subdomainID]); // return solver.LinearSystems[subdomainID].Solution; }
private static void UpdateModels(Dictionary <int, IVector>[] solutions, IStructuralModel[] modelsToReplace, ISolver[] solversToReplace, IConvectionDiffusionIntegrationProvider[] providersToReplace, IChildAnalyzer[] childAnalyzersToReplace) { modelsToReplace[0] = CreateModel(1, new double[] { 2, 2, 2 }, 0, 1); modelsToReplace[1] = CreateModel(0, new double[] { 2, 2, 2 }, 0, 1); for (int i = 0; i < modelsToReplace.Length; i++) { solversToReplace[i] = (new DenseMatrixSolver.Builder()).BuildSolver(modelsToReplace[i]); providersToReplace[i] = new ProblemConvectionDiffusion((Model)modelsToReplace[i], solversToReplace[i]); childAnalyzersToReplace[i] = new LinearAnalyzer(modelsToReplace[i], solversToReplace[i], providersToReplace[i]); } }
private static IVectorView SolveModel(Model model) { double[] temp0 = new double[] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; Vector initialTemp = Vector.CreateFromArray(temp0); SkylineSolver solver = (new SkylineSolver.Builder()).BuildSolver(model); var provider = new ProblemConvectionDiffusion(model, solver); var childAnalyzer = new LinearAnalyzer(model, solver, provider); var parentAnalyzer = new ConvectionDiffusionExplicitDynamicAnalyzer(model, solver, provider, childAnalyzer, 0.5, .5, initialTemp); parentAnalyzer.Initialize(); parentAnalyzer.Solve(); return(solver.LinearSystems[subdomainID].Solution); }
private static IVectorView SolveModel(Model model, ComsolMeshReader2 modelReader) { //var initialTemp = Vector.CreateZero(model.Nodes.Count); double[] temp0 = new double[model.Nodes.Count]; int[] boundaryIDs = new int[] { 0 }; foreach (int boundaryID in boundaryIDs) { foreach (IList <Node> nodes in modelReader.triBoundaries[boundaryID]) { foreach (Node node in nodes) { temp0[node.ID] = 1; } } } boundaryIDs = new int[] { 5 }; foreach (int boundaryID in boundaryIDs) { foreach (IList <Node> nodes in modelReader.triBoundaries[boundaryID]) { foreach (Node node in nodes) { temp0[node.ID] = 0; } } } Vector initialTemp = Vector.CreateFromArray(temp0); var builder = new DenseMatrixSolver.Builder(); builder.IsMatrixPositiveDefinite = false; var solver = builder.BuildSolver(model); var provider = new ProblemConvectionDiffusion(model, solver); var childAnalyzer = new LinearAnalyzer(model, solver, provider); //var parentAnalyzer = new BDF(model, solver, provider, childAnalyzer, 1, 10, 1, initialTemp); var parentAnalyzer = new ConvectionDiffusionExplicitDynamicAnalyzer(model, solver, provider, childAnalyzer, 2.5e-3, 5, initialTemp); parentAnalyzer.Initialize(); parentAnalyzer.Solve(); return(parentAnalyzer.temperature[subdomainID]); //return parentAnalyzer.temperature[1][subdomainID]; // return solver.LinearSystems[subdomainID].Solution; }
private static IVectorView[] SolveModels(Model[] models) { Vector[] initialTemps = new Vector[models.Length]; DenseMatrixSolver[] solvers = new DenseMatrixSolver[models.Length]; IConvectionDiffusionIntegrationProvider[] providers = new IConvectionDiffusionIntegrationProvider[models.Length]; IChildAnalyzer[] childAnalyzers = new IChildAnalyzer[models.Length]; for (int i = 0; i < models.Length; i++) { initialTemps[i] = Vector.CreateFromArray(new double[] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); solvers[i] = (new DenseMatrixSolver.Builder()).BuildSolver(models[i]); providers[i] = new ProblemConvectionDiffusion(models[i], solvers[i]); childAnalyzers[i] = new LinearAnalyzer(models[i], solvers[i], providers[i]); } var parentAnalyzer = new ConvectionDiffusionDynamicAnalyzerMultiModel_Beta(UpdateModels, models, solvers, providers, childAnalyzers, 0.05, 5, initialTemperature: initialTemps); parentAnalyzer.Initialize(); parentAnalyzer.Solve(); return(solvers.Select(x => x.LinearSystems[subdomainID].Solution).ToArray()); }