String outputDir = "C:\\Users\\13977\\Desktop\\结果\\"; String sourceData = ""; if (!java.util.Arrays.asList(model.component().tags()).contains("comp1")) { throw new IllegalStateException("未找到 comp1。"); } if (java.util.Arrays.asList(model.result().dataset().tags()).contains("dset1")) { if ("Solution".equals(model.result().dataset("dset1").getType())) { sourceData = "dset1"; } } if (sourceData.length() == 0) { for (String tag : model.result().dataset().tags()) { if ("Solution".equals(model.result().dataset(tag).getType())) { sourceData = tag; break; } } } if (sourceData.length() == 0) { throw new IllegalStateException("未找到求解结果数据集。"); } String solutionTag = model.result().dataset(sourceData).getString("solution"); if (!java.util.Arrays.asList(model.sol().tags()).contains(solutionTag)) { throw new IllegalStateException("结果数据集没有关联有效求解器。"); } if (model.sol(solutionTag).isEmpty()) { throw new IllegalStateException("求解器中没有解;本脚本不会重新求解。"); } String[] requiredDomains = { "geom1_hs_air_dom", "geom1_hs_aluminum_dom", "geom1_blk1_dom" }; for (String tag : requiredDomains) { if (!java.util.Arrays.asList( model.component("comp1").selection().tags() ).contains(tag)) { throw new IllegalStateException("缺少域选择:" + tag); } if (model.component("comp1").selection(tag).entities(3).length == 0) { throw new IllegalStateException("域选择为空:" + tag); } } if (!java.util.Arrays.asList( model.component("comp1").selection().tags() ).contains("hs_aluminum_boundary")) { model.component("comp1").selection().create( "hs_aluminum_boundary", "Adjacent" ); } model.component("comp1").selection("hs_aluminum_boundary").label( "铝散热器外边界:由铝域生成" ); model.component("comp1").selection("hs_aluminum_boundary").set("entitydim", 3); model.component("comp1").selection("hs_aluminum_boundary").set("outputdim", 2); model.component("comp1").selection("hs_aluminum_boundary").set( "input", new String[] {"geom1_hs_aluminum_dom"} ); model.component("comp1").selection("hs_aluminum_boundary").set("exterior", "on"); model.component("comp1").selection("hs_aluminum_boundary").set("interior", "off"); if (model.component("comp1").selection( "hs_aluminum_boundary" ).entities(2).length == 0) { throw new IllegalStateException("从铝域生成的边界选择为空。"); } String[] cloudTags = { "hs_res_temperature", "hs_res_velocity", "hs_res_pressure", "hs_res_aluminum" }; String[] cloudLabels = { "温度分布:水平切片 z=5 mm", "空气速度:水平切片 z=5 mm", "空气表压:水平切片 z=5 mm", "铝散热器表面温度" }; String[] cloudExpressions = {"T", "spf.U", "p", "T"}; String[] cloudUnits = {"K", "m/s", "Pa", "K"}; String[] cloudFiles = { "01_temperature_slice.png", "02_air_velocity_slice.png", "03_air_pressure_slice.png", "04_aluminum_temperature.png" }; for (int i = 0; i < cloudTags.length; i++) { String pg = cloudTags[i]; if (!java.util.Arrays.asList(model.result().tags()).contains(pg)) { model.result().create(pg, "PlotGroup3D"); } model.result(pg).label(cloudLabels[i]); model.result(pg).set("data", sourceData); String ft = i == 3 ? "surf1" : "slc1"; if (!java.util.Arrays.asList(model.result(pg).feature().tags()).contains(ft)) { model.result(pg).create(ft, i == 3 ? "Surface" : "Slice"); } model.result(pg).feature(ft).set("expr", cloudExpressions[i]); model.result(pg).feature(ft).set("unit", cloudUnits[i]); if (i == 3) { model.result(pg).feature(ft).selection().named("hs_aluminum_boundary"); } else { model.result(pg).feature(ft).set("planetype", "quick"); model.result(pg).feature(ft).set("quickplane", "xy"); model.result(pg).feature(ft).set("quickzmethod", "coord"); model.result(pg).feature(ft).set("quickz", new String[] {"5[mm]"}); if (i == 1 || i == 2) { model.result(pg).feature(ft).selection().named("geom1_hs_air_dom"); } } model.result(pg).run(); } if (!java.util.Arrays.asList( model.result().dataset().tags() ).contains("hs_channel_line")) { model.result().dataset().create("hs_channel_line", "CutLine3D"); } model.result().dataset("hs_channel_line").label( "通道取样线:y=0,z=12 mm,位于散热针上方" ); model.result().dataset("hs_channel_line").set("data", sourceData); model.result().dataset("hs_channel_line").set("method", "twopoint"); model.result().dataset("hs_channel_line").set( "genpoints", new String[][] { {"-44.9[mm]", "0[mm]", "12[mm]"}, {"24.9[mm]", "0[mm]", "12[mm]"} } ); String[] curveTags = { "hs_curve_temperature", "hs_curve_velocity", "hs_curve_pressure" }; String[] curveLabels = { "沿通道取样线温度", "沿通道取样线速度", "沿通道取样线表压" }; String[] curveExpressions = {"T", "spf.U", "p"}; String[] curveUnits = {"K", "m/s", "Pa"}; String[] curveFiles = { "05_temperature_along_channel.png", "06_velocity_along_channel.png", "07_pressure_along_channel.png" }; for (int i = 0; i < curveTags.length; i++) { String pg = curveTags[i]; if (!java.util.Arrays.asList(model.result().tags()).contains(pg)) { model.result().create(pg, "PlotGroup1D"); } model.result(pg).label(curveLabels[i]); model.result(pg).set("data", "hs_channel_line"); if (!java.util.Arrays.asList( model.result(pg).feature().tags() ).contains("lngr1")) { model.result(pg).create("lngr1", "LineGraph"); } model.result(pg).feature("lngr1").set("expr", curveExpressions[i]); model.result(pg).feature("lngr1").set("unit", curveUnits[i]); model.result(pg).feature("lngr1").set("xdata", "expr"); model.result(pg).feature("lngr1").set("xdataexpr", "x/1[mm]"); model.result(pg).run(); } String[] flowTags = {"hs_flow_temperature", "hs_flow_velocity"}; String[] flowLabels = { "稳态温度与空气流线:展示动画", "稳态速度与空气流线:展示动画" }; String[] gifFiles = { "12_temperature_streamlines.gif", "13_velocity_streamlines.gif" }; for (int i = 0; i < flowTags.length; i++) { String pg = flowTags[i]; if (!java.util.Arrays.asList(model.result().tags()).contains(pg)) { model.result().create(pg, "PlotGroup3D"); } model.result(pg).label(flowLabels[i]); model.result(pg).set("data", sourceData); if (!java.util.Arrays.asList( model.result(pg).feature().tags() ).contains("surf1")) { model.result(pg).create("surf1", "Surface"); } model.result(pg).feature("surf1").selection().named("hs_aluminum_boundary"); model.result(pg).feature("surf1").set("expr", "T"); model.result(pg).feature("surf1").set("unit", "K"); if (!java.util.Arrays.asList( model.result(pg).feature().tags() ).contains("str1")) { model.result(pg).create("str1", "Streamline"); } model.result(pg).feature("str1").selection().named("geom1_hs_air_dom"); model.result(pg).feature("str1").set( "expr", new String[] {"u", "v", "w"} ); if (!java.util.Arrays.asList( model.result(pg).feature("str1").feature().tags() ).contains("col1")) { model.result(pg).feature("str1").create("col1", "Color"); } model.result(pg).feature("str1").feature("col1").set( "expr", i == 0 ? "T" : "spf.U" ); model.result(pg).feature("str1").feature("col1").set( "unit", i == 0 ? "K" : "m/s" ); model.result(pg).run(); } java.util.ArrayList imagePlots = new java.util.ArrayList(); java.util.ArrayList imageFiles = new java.util.ArrayList(); java.util.ArrayList imageTags = new java.util.ArrayList(); for (int i = 0; i < cloudTags.length; i++) { imagePlots.add(cloudTags[i]); imageFiles.add(cloudFiles[i]); imageTags.add("hs_img_cloud_" + i); } for (int i = 0; i < curveTags.length; i++) { imagePlots.add(curveTags[i]); imageFiles.add(curveFiles[i]); imageTags.add("hs_img_curve_" + i); } for (int i = 0; i < flowTags.length; i++) { imagePlots.add(flowTags[i]); imageFiles.add(i == 0 ? "14_temperature_streamlines.png" : "15_velocity_streamlines.png"); imageTags.add("hs_img_flow_" + i); } for (int i = 0; i < imagePlots.size(); i++) { String tag = imageTags.get(i); if (!java.util.Arrays.asList( model.result().export().tags() ).contains(tag)) { model.result().export().create(tag, "Image"); } model.result().export(tag).set("plotgroup", imagePlots.get(i)); model.result().export(tag).set("target", "file"); model.result().export(tag).set("imagetype", "png"); model.result().export(tag).set("size", "manualweb"); model.result().export(tag).set("unit", "px"); model.result().export(tag).set("width", 1600); model.result().export(tag).set("height", 1000); model.result().export(tag).set("zoomextents", "on"); model.result().export(tag).set( "pngfilename", outputDir + imageFiles.get(i) ); model.result().export(tag).run(); } if (!java.util.Arrays.asList( model.result().export().tags() ).contains("hs_csv_line")) { model.result().export().create("hs_csv_line", "Data"); } model.result().export("hs_csv_line").set("data", "hs_channel_line"); model.result().export("hs_csv_line").set( "expr", new String[] {"x/1[mm]", "T", "spf.U", "p"} ); model.result().export("hs_csv_line").set( "unit", new String[] {"1", "K", "m/s", "Pa"} ); model.result().export("hs_csv_line").set( "descr", new String[] { "x coordinate in mm", "Temperature", "Air speed", "Gauge pressure" } ); model.result().export("hs_csv_line").set("separator", ","); model.result().export("hs_csv_line").set("struct", "spreadsheet"); model.result().export("hs_csv_line").set( "filename", outputDir + "08_channel_line_data.csv" ); model.result().export("hs_csv_line").run(); String[] statisticTags = {"hs_chip_mean", "hs_chip_max", "hs_chip_min"}; String[] statisticTypes = {"AvVolume", "MaxVolume", "MinVolume"}; String[] statisticLabels = { "芯片体积平均温度与温升", "芯片最高温度与最大温升", "芯片最低温度与最小温升" }; String[] statisticFiles = { "09_chip_mean_temperature.csv", "10_chip_max_temperature.csv", "11_chip_min_temperature.csv" }; for (int i = 0; i < statisticTags.length; i++) { String nt = statisticTags[i]; String tt = "hs_table_chip_" + i; String et = "hs_csv_chip_" + i; if (!java.util.Arrays.asList(model.result().table().tags()).contains(tt)) { model.result().table().create(tt, "Table"); } model.result().table(tt).label(statisticLabels[i]); if (!java.util.Arrays.asList( model.result().numerical().tags() ).contains(nt)) { model.result().numerical().create(nt, statisticTypes[i]); } model.result().numerical(nt).label(statisticLabels[i]); model.result().numerical(nt).set("data", sourceData); model.result().numerical(nt).selection().named("geom1_blk1_dom"); model.result().numerical(nt).set( "expr", new String[] {"T", "T-T_in"} ); model.result().numerical(nt).set("unit", new String[] {"K", "K"}); model.result().numerical(nt).set( "descr", new String[] { "Temperature in K", "Temperature rise above inlet in K" } ); model.result().numerical(nt).set("table", tt); model.result().numerical(nt).setResult(); if (!java.util.Arrays.asList( model.result().export().tags() ).contains(et)) { model.result().export().create(et, "Table"); } model.result().export(et).set("table", tt); model.result().export(et).set( "filename", outputDir + statisticFiles[i] ); model.result().export(et).run(); } for (int i = 0; i < flowTags.length; i++) { String tag = "hs_gif_flow_" + i; if (!java.util.Arrays.asList( model.result().export().tags() ).contains(tag)) { model.result().export().create(tag, "Animation"); } model.result().export(tag).set("plotgroup", flowTags[i]); model.result().export(tag).set("target", "file"); model.result().export(tag).set("type", "movie"); model.result().export(tag).set("movietype", "gif"); model.result().export(tag).set("sweeptype", "streamline"); model.result().export(tag).set("plot", "str1"); model.result().export(tag).set("maxframes", 40); model.result().export(tag).set("fps", 10); model.result().export(tag).set("size", "manual"); model.result().export(tag).set("width", 1000); model.result().export(tag).set("height", 700); model.result().export(tag).set("giffilename", outputDir + gifFiles[i]); model.result().export(tag).run(); }