public void Calculate() { Stopwatch stopwatch = new Stopwatch(); Configuration config = getConfiguration(); GridManager grid = new GridManager(config); JacobiTransformationManager jacobi = new JacobiTransformationManager(config); HMatrixManager hMatrix = new HMatrixManager(jacobi, config); CMatrixManager cMatrix = new CMatrixManager(jacobi, config); HbcMatrixManager hbcMatrix = new HbcMatrixManager(jacobi, config); VectorPManager vectorP = new VectorPManager(config); MatrixAgregator global = new MatrixAgregator(hMatrix, cMatrix, grid, config, hbcMatrix, vectorP); FillMatrixes(global, grid); stopwatch.Start(); Matrix <double> CMatrixDt = CMatrix / config.simulationStepTime; Matrix <double> tempHMatrix = CMatrixDt + HMatrix; Matrix <double> InverseTempHMatrix = tempHMatrix.Inverse(); for (int i = (int)config.simulationStepTime; i <= config.simulationTime; i += (int)config.simulationStepTime) { Matrix <double> tempCMatrix = CMatrixDt * temp - PVector; Matrix <double> NewTemp = InverseTempHMatrix * tempCMatrix; temp = NewTemp; Console.WriteLine("Time: " + i + " MinTemp: " + temp.Enumerate().Min() + " MaxTemp: " + temp.Enumerate().Max()); } stopwatch.Stop(); Console.WriteLine("Elapsed Time is {0} ms", stopwatch.ElapsedMilliseconds); }
private void FillMatrixes(MatrixAgregator global, GridManager grid) { temp = Matrix <double> .Build.Dense(grid.nodesGrid.Count, 1); PVector = Matrix <double> .Build.Dense(grid.nodesGrid.Count, 1); HMatrix = Matrix <double> .Build.DenseOfArray(global.HGlobalMatrix); CMatrix = Matrix <double> .Build.DenseOfArray(global.CGlobalMatrix); for (int i = 0; i < grid.nodesGrid.Count; i++) { PVector[i, 0] = global.GlobalPVector[i]; temp[i, 0] = grid.nodesGrid[i].temp; } }