/// <summary> /// Ctor. /// </summary> /// <param name="SolverConf"></param> /// <param name="WorkingSet"></param> public SIMPLEStepIncompressible(SolverConfiguration SolverConf, VariableSet WorkingSet) { m_SolverConf = SolverConf; m_WorkingSet = WorkingSet; // Construct BDF scheme for unsteady solver if (SolverConf.Control.Algorithm == SolutionAlgorithms.Unsteady_SIMPLE) { m_BDF = new BDFScheme(); } // Construct all SIMPLEOperators, which are needed for incompressible flows UnsetteledCoordinateMapping VelocityMapping = new UnsetteledCoordinateMapping(WorkingSet.VelBasis); UnsetteledCoordinateMapping PressureMapping = new UnsetteledCoordinateMapping(WorkingSet.PressureBasis); m_IncompressibleOperators = new OperatorFactoryFlowFieldIncompressible(VelocityMapping, PressureMapping, SolverConf, WorkingSet.Velocity.Current, WorkingSet.VelocityMean); // Construct matrix assemblies m_IncompressibleMatrixAssemblies = new MatrixFactoryIncompressibleFlows( SolverConf, m_IncompressibleOperators, PressureMapping, WorkingSet.Pressure, m_BDF); }
/// <summary> /// Ctor. /// </summary> /// <param name="SolverConf"></param> /// <param name="IncompressibleOperators"></param> /// <param name="PressureMapping"></param> /// <param name="Pressure"></param> /// <param name="BDF"></param> public MatrixFactoryIncompressibleFlows(SolverConfiguration SolverConf, OperatorFactoryFlowFieldIncompressible IncompressibleOperators, UnsetteledCoordinateMapping PressureMapping, SinglePhaseField Pressure, BDFScheme BDF) { // Initialize Predictor Predictor = new SIMPLEMatrixAssembly[SolverConf.SpatialDimension]; for (int d = 0; d < SolverConf.SpatialDimension; d++) { Predictor[d] = new MatrixAssemblyIncompressiblePredictor(IncompressibleOperators.Convection[d], IncompressibleOperators.Visc[d], 2, 1); } PredictorApprox = new MatrixAssemblyApprox( SolverConf, PressureMapping.GridDat.iLogicalCells.NoOfLocalUpdatedCells, Predictor[0], BDF, 1 + (1 + SolverConf.SpatialDimension) * SolverConf.Control.PredictorApproximationUpdateCycle); // Initialize Corrector PredictorApproxInv = new MatrixAssemblyApproxInv( SolverConf.Control, PressureMapping.GridDat.iLogicalCells.NoOfLocalUpdatedCells, PredictorApprox, SolverConf.SpatialDimension + SolverConf.SpatialDimension * SolverConf.Control.PredictorApproximationUpdateCycle); switch (SolverConf.Control.PredictorApproximation) { case PredictorApproximations.Identity: case PredictorApproximations.Diagonal: case PredictorApproximations.BlockDiagonal: Corrector = new MatrixAssemblyIncompressibleCorrector(IncompressibleOperators.VelocityDivergence, PredictorApproxInv, IncompressibleOperators.PressureGradient, SolverConf.Control.PredictorApproximationUpdateCycle, IncompressibleOperators.PressureStabilization); break; case PredictorApproximations.Identity_IP1: Corrector = new MatrixAssemblyCorrectorIP1(IncompressibleOperators.IP1PressureCorrection, IncompressibleOperators.PressureStabilization, SolverConf, BDF); break; default: throw new NotSupportedException("Unknown option for extended property 'Option_Approximation_Predictor'."); } }