Example #1
0
        public override void Solve(SolverControlParameter parameter)
        {
            //InitalizeTemperature();
            OnSolveStart();
            Class3Boundary boundary            = (Class3Boundary)calculate.Boundary;
            double         totalHeatResistance = 0;

            currentStep     = 0;
            currentResidual = 100000000000000;
            while (true)
            {
                if (IsConvergenced(parameter))
                {
                    break;
                }
                currentStep++;
                //boundary.Area = TemperatureCalculate.OutsideArea(CurrentCalculate.LayerList);
                totalHeatResistance = boundary.CombinedHeatResistance;
                foreach (Layer layer in calculate.LayerList)
                {
                    if (!(layer is ResistanceLayer))
                    {
                        layer.UpdateHeatResistance(parameter.IntegrateCount);
                    }
                    totalHeatResistance += layer.HeatResistance;
                }
                boundary.Heatflow = (calculate.Temperature - boundary.AmbientTemperature) / totalHeatResistance;
                UpdateTemperature();
            }
            OnSolveEnd();
        }
Example #2
0
        private void TUBBIN_C3_COM(object sender, EventArgs e)
        {
            List <Layer>   layers   = CreateTestTubbinessLayers();
            Class3Boundary boundary = new Class3Boundary(10, 0.8, 25 + 273.15, TemperatureCalculate.OutsideArea(layers));

            Model.TemperatureCalculate cm = new Model.TemperatureCalculate(1600 + 273.15, boundary, layers);
            CreateTestSolverAndRun(cm);
        }
Example #3
0
        private void THICKNESS_TUBBIN_C3_COM(object sender, EventArgs e)
        {
            List <Layer>   layers   = CreateTestTubbinessLayers();
            Class3Boundary boundary = new Class3Boundary(10, 0.8, 25 + 273.15, TemperatureCalculate.OutsideArea(layers));

            Model.TemperatureCalculate cal    = new Model.TemperatureCalculate(1600 + 273.15, boundary, layers);
            SolverControlParameter     par    = new SolverControlParameter(SolverControlParameter.ConvergenceCriterionType.RESIDUAL_OR_MAXSTEP, 0.001, 50, 0);
            ThicknessCalculate         tcal   = new ThicknessCalculate(cal, 2, 394.94, par, par);
            ThicknessSolver            solver = ThicknessSolverFactory.CreateSolver(tcal);

            solver.TemperatureSolver.UpdateTemperatureEndEvent += new UpdateTemperatureEndEventHandler(OnTemperatureSolverUpdate);
            solver.SolveStartEvent  += new ThicknessSolverStartEventHandler(OnThicknessSolveStart);
            solver.SolveUpdateEvent += new ThicknessSolverUpdateEventHandler(OnThicknessSolveUpdate);
            solver.SolveStopEvent   += new ThicknessSolverStopEventHandler(OnThicknessSolveStop);
            double lim = solver.LimitValue();

            solver.Solve();
        }
Example #4
0
        public override bool Report()
        {
            Document doc = null;

            try
            {
                doc = new Document(TempletFilePath);
                if (doc == null)
                {
                    return(false);
                }
                DocumentBuilder db = new DocumentBuilder(doc);
                English = db.MoveToBookmark(MS_Englist);
                WriteBookmarkText(doc, MS_ProId, Pro.Id.ToString());
                WriteBookmarkText(doc, MS_ProName, Pro.Name);
                WriteBookmarkText(doc, MS_ProTime, Pro.LastSolveTime.ToString());
                WriteBookmarkText(doc, MS_ProOwner, Pro.OwnerId.ToString());
                WriteBookmarkText(doc, MS_ProHeatflow, Pro.ColdfaceBoundary.Heatflow.ToString());
                WriteBookmarkText(doc, MS_ProjectRemark, Pro.Remark);
                if (English)
                {
                    WriteBookmarkText(doc, MS_ProMode, (Pro.Mode == CalculationMode.Temperature) ? "Temperature" : "Thickness");
                    WriteBookmarkText(doc, MS_ProType, (Pro.Schema == GeometrySchema.Plate) ? "Plane" : "Ring");
                }
                else
                {
                    WriteBookmarkText(doc, MS_ProMode, (Pro.Mode == CalculationMode.Temperature) ? "温度" : "厚度");
                    WriteBookmarkText(doc, MS_ProType, (Pro.Schema == GeometrySchema.Plate) ? "平板" : "圆筒");
                }

                WriteBookmarkText(doc, MS_RepTime, DateTime.Now.ToShortDateString());
                WriteBookmarkText(doc, MS_ProHotfaceTemperature, GlobalTool.K2C(Pro.HotfaceTemperature).ToString("F1"));
                if (Pro.Mode == CalculationMode.Thickness)
                {
                    if (English)
                    {
                        WriteBookmarkText(doc, MS_ProTargetLayer, Pro.LayerList[Pro.TargetLayerIndex].Name + "(ID" + Pro.TargetLayerIndex.ToString() + ")");
                    }
                    else
                    {
                        WriteBookmarkText(doc, MS_ProTargetLayer, Pro.LayerList[Pro.TargetLayerIndex].Name + "(编号" + Pro.TargetLayerIndex.ToString() + ")");
                    }
                    WriteBookmarkText(doc, MS_ProTargetLayerThickness, Pro.LayerList[Pro.TargetLayerIndex].Thickness.ToString());
                }
                if (Pro.ColdfaceBoundary is Class3Boundary)
                {
                    Class3Boundary b = Pro.ColdfaceBoundary as Class3Boundary;
                    if (English)
                    {
                        WriteBookmarkText(doc, MS_ProColdfaceType, "Class3 Boundary");
                    }
                    else
                    {
                        WriteBookmarkText(doc, MS_ProColdfaceType, "第三类边界");
                    }
                    WriteBookmarkText(doc, MS_ProColdfaceAmbientTemperature, GlobalTool.K2C(b.AmbientTemperature).ToString("F3"));
                    WriteBookmarkText(doc, MS_ProColdfaceEmissivity, b.Emissivity.ToString());
                    WriteBookmarkText(doc, MS_ProColdfaceFilmCoefficient, b.FilmCoefficient.ToString());
                }
                else if (Pro.ColdfaceBoundary is Class2Boundary)
                {
                    if (English)
                    {
                        WriteBookmarkText(doc, MS_ProColdfaceType, "Class2 Boundary");
                    }
                    else
                    {
                        WriteBookmarkText(doc, MS_ProColdfaceType, "第二类边界");
                    }
                }
                else
                {
                    if (English)
                    {
                        WriteBookmarkText(doc, MS_ProColdfaceType, "Class1 Boundary");
                    }
                    else
                    {
                        WriteBookmarkText(doc, MS_ProColdfaceType, "第一类边界");
                    }
                }
                WriteBookmarkText(doc, MS_ProColdfaceTemperature, GlobalTool.K2C(Pro.ColdfaceBoundary.Temperature).ToString("F3"));
                WriteBookmarkText(doc, MS_ProColdfaceHeatflow, Pro.ColdfaceBoundary.Heatflow.ToString());
                string img = null;
                if (LayerPicturePath.Length == 0)
                {
                    img = null;
                }
                if (LayerPicturePath.Length == 1)
                {
                    img = LayerPicturePath[0];
                }
                else
                {
                    img = LayerPicturePath[English ? 0 : 1];
                }
                WriteImage(doc, img, MS_ProLayersPicture);
                WriteLayersTable(doc, Pro.LayerList, MS_ProLayers);
                doc.Save(ReportFilePath, SaveFormat.Docx);
                return(true);
            }
            catch (Exception e)
            {
                return(false);
            }
        }