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