Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        private static void CreateModelFromComsolMeshFile()
        {
            string           comsolMeshFile = @"C:\Users\Ody\Documents\MSolve\ISAAR.MSolve.SamplesConsole\ComsolInput\mesh.mphtxt";
            ComsolMeshReader cr             = new ComsolMeshReader(comsolMeshFile);

            cr.CreateModelFromFile();
        }
Ejemplo n.º 3
0
        private static void RunTest()
        {
            Model            model       = CreateModel().Item1;
            ComsolMeshReader modelReader = CreateModel().Item2;
            IVectorView      solution    = SolveModel(model, modelReader);

            Assert.True(CompareResults(solution));
        }
Ejemplo n.º 4
0
        private static Tuple <Model, ComsolMeshReader> CreateModel()
        {
            string           filename    = Path.Combine(Directory.GetCurrentDirectory(), "InputFiles", "TumorGrowthModel", "mesh1.mphtxt");
            ComsolMeshReader modelReader = new ComsolMeshReader(filename);
            Model            model       = modelReader.CreateModelFromFile();
            //Boundary Conditions
            var flux = new FluxLoad(10);
            var dir1 = new DirichletDistribution(list => {
                return(Vector.CreateWithValue(list.Count, 0));
            });
            var dir2 = new DirichletDistribution(list => {
                return(Vector.CreateWithValue(list.Count, 1));
            });
            var weakDirichlet1 = new WeakDirichlet(dir1, modelReader.diffusionCeoff);
            var weakDirichlet2 = new WeakDirichlet(dir2, modelReader.diffusionCeoff);

            var dirichletFactory1 = new SurfaceLoadElementFactory(weakDirichlet1);
            var dirichletFactory2 = new SurfaceLoadElementFactory(weakDirichlet2);
            var fluxFactory       = new SurfaceLoadElementFactory(flux);

            int[] boundaryIDs = new int[] { 2, 7, 8, 9 };
            foreach (int boundaryID in boundaryIDs)
            {
                foreach (Element element in modelReader.elementBoundaries[boundaryID])
                {
                    IReadOnlyList <Node> nodes = (IReadOnlyList <Node>)element.Nodes;
                    var dirichletElement1      = dirichletFactory1.CreateElement(CellType.Tri3, nodes);
                    model.SurfaceLoads.Add(dirichletElement1);
                    //var surfaceElement = new SurfaceLoadElement();
                    //element.ID = TriID;
                    //surfaceElement.ElementType = DirichletElement1;
                    //model.SubdomainsDictionary[0].Elements.Add(dirichletElement1);
                    //model.ElementsDictionary.Add(TriID, surfaceElement);

                    //model.NodesDictionary[surfaceElement.ID].Constraints.Add(new Constraint() { DOF = ThermalDof.Temperature, Amount = 100 });
                }
            }
            boundaryIDs = new int[] { 0, 1, 3, 4, 6 };
            foreach (int boundaryID in boundaryIDs)
            {
                foreach (Element element in modelReader.elementBoundaries[boundaryID])
                {
                    IReadOnlyList <Node> nodes = (IReadOnlyList <Node>)element.Nodes;
                    var dirichletElement2      = dirichletFactory2.CreateElement(CellType.Tri3, nodes);
                    model.SurfaceLoads.Add(dirichletElement2);
                }
            }

            return(new Tuple <Model, ComsolMeshReader>(model, modelReader));
        }
Ejemplo n.º 5
0
        private static Model CreateModel()
        {
            string           filename    = Path.Combine(Directory.GetCurrentDirectory(), "InputFiles", "TumorGrowthModel", "mesh.mphtxt");
            ComsolMeshReader modelReader = new ComsolMeshReader(filename);
            Model            model       = modelReader.CreateModelFromFile();

            //int[] boundaryIDs = new int[] { 0, 1, 2 };
            //foreach (int boundaryID in boundaryIDs)
            //{
            //    foreach (Node node in modelReader.nodeBoundaries[boundaryID])
            //    {
            //        model.Loads.Add(new Load() { DOF = ThermalDof.Temperature, Amount = 100, Node = node });
            //    }
            //}
            int[] boundaryIDs = new int[] { 7, 8, 9 };
            foreach (int boundaryID in boundaryIDs)
            {
                foreach (Node node in modelReader.nodeBoundaries[boundaryID])
                {
                    model.NodesDictionary[node.ID].Constraints.Add(new Constraint()
                    {
                        DOF = ThermalDof.Temperature, Amount = 100
                    });
                }
            }
            boundaryIDs = new int[] { 3, 4, 6 };
            foreach (int boundaryID in boundaryIDs)
            {
                foreach (Node node in modelReader.nodeBoundaries[boundaryID])
                {
                    model.NodesDictionary[node.ID].Constraints.Add(new Constraint()
                    {
                        DOF = ThermalDof.Temperature, Amount = 1
                    });
                }
            }

            return(model);
        }