Ejemplo n.º 1
0
        protected override void SolveScalarEquations(ref SIMPLEStepStatus SIMPLEStatus, double dt, ResidualLogger ResLogger)
        {
            // Update temperature field SIMPLE operators (first!) and matrix assemblies (second!)
            // ==================================================================================

            OperatorsTemperature.TemperatureConvection.Update();
            OperatorsTemperature.HeatConduction.Update();
            MatrixAssembliesTemperature.Temperature.Update();
            if ((LowMachControl.RelaxationModeTemperature == RelaxationTypes.Implicit) &&
                !MatrixAssembliesTemperature.TemperatureApprox.IsConstant &&
                ((SIMPLEStatus.SIMPLEStepNo - 1) % LowMachControl.PredictorApproximationUpdateCycle == 0))
            {
                MatrixAssembliesTemperature.TemperatureApprox.Update();
            }

            // Temperature solver
            // ==================

            SIMPLESolver TemperatureSolver = new LowMachSolverTemperature(
                this.SolverConf,
                LowMachControl.TemperatureSolverFactory(),
                base.WorkingSetMatrices.Rho.Matrix,
                this.MatrixAssembliesTemperature.Temperature,
                this.MatrixAssembliesTemperature.TemperatureApprox,
                base.WorkingSet.Temperature,
                base.BDF,
                LowMachControl.EoS,
                base.WorkingSet.ThermodynamicPressure);

            base.WorkingSet.TemperatureRes.Clear();
            base.WorkingSet.TemperatureRes.Acc(1.0, base.WorkingSet.Temperature.Current);

            TemperatureSolver.Solve(base.WorkingSet.Temperature.Current.CoordinateVector, dt);
            TemperatureSolver.Dispose();

            // Update temperature field variables
            // ==================================

            SIMPLEStepUtils.UpdateScalarFieldVariables(
                LowMachControl,
                LowMachControl.RelaxationModeTemperature,
                LowMachControl.RelexationFactorTemperature,
                base.WorkingSet.Temperature,
                base.WorkingSet.TemperatureRes,
                base.WorkingSet.TemperatureMean,
                base.WorkingSet.Rho,
                base.WorkingSet.Eta,
                base.WorkingSetMatrices.Rho,
                LowMachControl.EoS,
                base.WorkingSet.ThermodynamicPressure.Current);

            // Calculate residuals temperature
            // ===============================

            ResLogger.ComputeL2Norm(base.WorkingSet.TemperatureRes);
        }
Ejemplo n.º 2
0
        protected override void SolveScalarEquations(ref SIMPLEStepStatus SIMPLEStatus, double dt, ResidualLogger ResLogger)
        {
            // Update level-set SIMPLE operators (first!) and matrix assemblies (second!)
            // ==========================================================================
            OperatorsLevelSet.LevelSetAdvection.Update();
            MatrixAssembliesLevelSet.LevelSet.Update();
            if (base.UpdateApproximations && (MultiphaseControl.LevelSetRelaxationType == RelaxationTypes.Implicit))
            {
                MatrixAssembliesLevelSet.LevelSetApprox.Update();
            }

            // Level-Set solver
            // ================

            SIMPLESolver LevelSetSolver = new MultiphaseSolverLevelSet(
                SolverConf,
                MultiphaseControl.LevelSetSolverFactory(),
                MatrixAssembliesLevelSet.LevelSet,
                MatrixAssembliesLevelSet.LevelSetApprox,
                base.WorkingSet.Phi,
                base.BDF);

            base.WorkingSet.PhiRes.Clear();
            base.WorkingSet.PhiRes.Acc(1.0, base.WorkingSet.Phi.Current);

            LevelSetSolver.Solve(base.WorkingSet.Phi.Current.CoordinateVector, dt);
            LevelSetSolver.Dispose();

            // Update level-set variables
            // ==========================

            SIMPLEStepUtils.UpdateScalarFieldVariables(
                MultiphaseControl,
                MultiphaseControl.LevelSetRelaxationType,
                MultiphaseControl.RelaxationFactorLevelSet,
                base.WorkingSet.Phi,
                base.WorkingSet.PhiRes,
                base.WorkingSet.PhiMean,
                base.WorkingSet.Rho,
                base.WorkingSet.Eta,
                base.WorkingSetMatrices.Rho,
                MultiphaseControl.EoS,
                null);

            // Calculate residuals level-set
            // =============================

            ResLogger.ComputeL2Norm(base.WorkingSet.PhiRes);
        }