Exemple #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);
        }