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