宏 API 更改 7.02
在 Simcenter STAR-CCM+ 7.02 中,针对能量源选项、电池建模、热阻、衍生零部件、谐波平衡和热舒适性进行了宏 API 的更改。
能量源选项的类名称更改
对区域(固体、多孔和流体)的能量源选项进行了各种 API 更改。 还对接触和挡板交界面进行了额外的能量源选项更改。
以前发行版本 | Simcenter STAR-CCM+ 7.02.011 |
---|---|
能量源选项的更改:FluidEnergyUserSourceOption(流体和多孔区域)和 EnergyUserSourceOption(固体区域)的类名称现在为 EnergyUserVolumeSourceOption。 |
|
region.getConditions() .get(FluidEnergyUserSourceOption.class) .setSelected(EnergyUserSourceOption.SPECIFIED); |
region.getConditions() .get(EnergyUserVolumeSourceOption.class) .setSelected(EnergyUserVolumeSourceOption.VOLUMETRIC_HEAT_SOURCE); |
region.getConditions() .get(EnergyUserSourceOption.class) .setUserSourceOption(true); |
region.getConditions() .get(EnergyUserVolumeSourceOption.class) .setSelected(EnergyUserVolumeSourceOption.VOLUMETRIC_HEAT_SOURCE); |
固体区域能量源选项的更改:EnergyUserSource 的类名称已更改为 VolumetricHeatSourceProfile。 |
|
EnergyUserSource src = region .getValues() .get(EnergyUserSource.class); |
VolumetricHeatSourceProfile src = region .getValues() .get(VolumetricHeatSourceProfile.class); |
接触和挡板交界面能量源选项的更改:EnergyUserSourceOption 的类名称现在为 EnergyUserSurfaceSourceOption。 |
|
interface.getConditions() .get(EnergyUserSourceOption.class) .setUserSourceOption(true); HeatFluxProfile src = interface .getValues() .get(HeatFluxProfile.class); |
interface.getConditions() .get(EnergyUserSurfaceSourceOption.class) .setSelected(EnergyUserSurfaceSourceOption.HEAT_FLUX); HeatFluxProfile src = interface .getValues() .get(HeatFluxProfile.class); |
电池模型中的边界名称更改
电池模型中的边界名称已更改格式。 新名称现在更清晰,删除了以前在边界名称前显示的附加信息。 考虑以下示例(其中边界称为 Stack Front)。
以前发行版本 | Simcenter STAR-CCM+ 7.02.011 |
---|---|
Boundary boundary_2 = region_0 .getBoundaryManager() .getBoundary("Battery Module: Battery Module Cell 0,0: Stack.Stack Front"); |
Boundary boundary_2 = region_0 .getBoundaryManager() .getBoundary("Stack Front"); |
所有边界名称都需要更新,以便只有该名称显示在 .getBoundary() 中。 |
挡板交界面热阻选项
新的壁面热阻交界面已添加到代码中,包含有效阻抗和多层阻抗选项。 与挡板多层阻抗不同,壁面多层阻抗作为常规 ThermalResistance 分布的 Profile 方法实现。
以前发行版本 | Simcenter STAR-CCM+ 7.02.011 |
---|---|
设置有效挡板阻抗: |
|
directBoundaryInterface_0.getConditions().get(BaffleThermalOption.class).setSelected(BaffleThermalOption.CONDUCTING); directBoundaryInterface_0.getConditions().get(BaffleThermalResistanceOption.class).setSelected(BaffleThermalResistanceOption.EFFECTIVE_RESISTANCE); BaffleConductivityProfile baffleConductivityProfile_0 = directBoundaryInterface_0 .getValues() .get(BaffleConductivityProfile.class); ((ConstantScalarProfileMethod) baffleConductivityProfile_0.getMethod()).getQuantity().setDefinition("0"); |
directBoundaryInterface_0 .getConditions() .get(BaffleThermalOption.class) .setSelected(BaffleThermalOption.CONDUCTING); ThermalResistanceProfile thermalResistanceProfile_0 = directBoundaryInterface_0 .getValues() .get(ThermalResistanceProfile.class); thermalResistanceProfile_0 .getMethod(ConstantScalarProfileMethod.class) .getQuantity() .setValue(0.0); |
设置多层挡板阻抗: |
|
directBoundaryInterface_1 .getConditions() .get(BaffleThermalOption.class) .setSelected(BaffleThermalOption.CONDUCTING); directBoundaryInterface_1.getConditions() .get(BaffleThermalResistanceOption.class) .setSelected(BaffleThermalResistanceOption.MULTI_LAYER); MultiLayerBaffleResistance multiLayerBaffleResistance_0 = directBoundaryInterface_1 .getValues().get(MultiLayerBaffleResistance.class); multiLayerBaffleResistance_0.setNLayers(1); multiLayerBaffleResistance_0.setLayerThickness(new DoubleVector(new double[] {2.0})); multiLayerBaffleResistance_0.setLayerConductivity(new DoubleVector(new double[] {1.2})); |
directBoundaryInterface_1 .getConditions() .get(BaffleThermalOption.class) .setSelected(BaffleThermalOption.CONDUCTING); ThermalResistanceProfile thermalResistanceProfile_1 = directBoundaryInterface_1 .getValues() .get(ThermalResistanceProfile.class); thermalResistanceProfile_1 .setMethod(MultiLayerThermalResistanceMethod.class); MultiLayerThermalResistanceMethod multiLayerMethod = thermalResistanceProfile_1 .getMethod(MultiLayerThermalResistanceMethod.class); multiLayerMethod .setNLayers(1); multiLayerMethod .getLayerThickness() .setArray(new DoubleVector(new double[] {2.0})); multiLayerMethod .getLayerConductivity() .setArray(new DoubleVector(new double[] {1.2})); |
衍生零部件的单位支持
为了添加为衍生零部件中使用的值提供单位的功能,需要更改 API 来创建和设置这些对象的值。 现有 API 将保持在原位,假设指定的值采用内部单位。
以前发行版本 | Simcenter STAR-CCM+ 7.02.011 |
---|---|
PartManager.createIsoPart 不再接受等值线等级数后跟一组值。 现在,使用 SingleIsoValue、MultiIsoValue 和 MultiRangeIsoValue API 提供值,这些 API 使用 ScalarPhysicalQuantity 和 ArrayPhysicalQuantity 对象指定值和单位。 PartManager.createImplicitPart 将进行类似的更改。 |
|
IsoPart isoPart_0 = simulation_0 .getPartManager() .createIsoPart(new NeoObjectVector(new Object[] {region_0}), 1, new DoubleVector(new double[] {50.0}), primitiveFieldFunction_0); |
IsoPart isoPart_0 = simulation_0 .getPartManager() .createIsoPart(new NeoObjectVector(new Object[] {region_0}), primitiveFieldFunction_0); isoPart_0 .setMode(0); SingleIsoValue singleIsoValue_0 = isoPart_0 .getSingleIsoValue(); singleIsoValue_0 .getValueQuantity() .setValue(50.0); singleIsoValue_0 .getValueQuantity() .setUnits(units_1); isoPart_0 .setMode(0); singleIsoValue_0 .getValueQuantity() .setUnits(units_1); singleIsoValue_0 .getValueQuantity() .setValue(50.0); |
PartManager.createThreshold 继续指定范围参数中的两个值,但现在后跟单位。 |
|
ThresholdPart thresholdPart_0 = simulation_0 .getPartManager() .createThresholdPart(new NeoObjectVector(new Object[] {region_0}), new DoubleVector(new double[] {-25.0, 112.0}), primitiveFieldFunction_0, 0); |
ThresholdPart thresholdPart_0 = simulation_0 .getPartManager() .createThresholdPart(new NeoObjectVector(new Object[] {region_0}), new DoubleVector(new double[] {-25.0, 112.0}), units_1, primitiveFieldFunction_0, 0); |
简化谐波平衡模型的叶片数输入
过去,叶片数指定为等于 2/节距。 尽管这在 3D 情况下是可接受的(它对应于轮的物理叶片数),但在 2D 情况下很容易出错,因为它是一个非整数。 无论对于 3D 还是 2D 情况,当前版本现在均将叶片数输入视为整数值。 对于 2D 情况,它现在对应于正在建模的气道数。
以前发行版本 | Simcenter STAR-CCM+ 7.02.011 |
---|---|
对于 2D 情况,NumberOfBlades 对象需要设为 1。 Pitch 对象必须设为 2π/旧的 NumberOfBlades。 在以下示例中,旧的 NumberOfBlades 为 12.56637061,生成值为 0.5 的 Pitch。 |
|
HbBladeRow hbBladeRow_0 = harmonicBalanceFlowModel_0 .createBladeRow(); hbBladeRow_0.setNumberOfBlades(12.56637061); |
HbBladeRow hbBladeRow_0 = harmonicBalanceFlowModel_0 .createBladeRow(); hbBladeRow_0 .getBladesPerPitch() .setNumberOfBlades(1); hbBladeRow_0 .getBladesPerPitch() .getPitch() .setValue(0.5); |
FourierCoefficientsWakeSpecifier fourierCoefficientsWakeSpecifier_0 = boundary_0 .getValues() .get(FourierCoefficientsWakeSpecifier.class); fourierCoefficientsWakeSpecifier_0.setWakeBlades(12.56637061); |
FourierCoefficientsWakeSpecifier fourierCoefficientsWakeSpecifier_0 = boundary_0 .getValues() .get(FourierCoefficientsWakeSpecifier.class); fourierCoefficientsWakeSpecifier_0 .getWakeBladesPerPitch() .setNumberOfBlades(1); fourierCoefficientsWakeSpecifier_0 .getWakeBladesPerPitch() .getPitch() .setValue(0.5); |
对于 3D 情况,NumberOfBlades 需要设为旧值(下例中的 12)。 Pitch 需要设为等于 2 弧度(如下所示的 6.283185307)。 |
|
HbBladeRow hbBladeRow_0 = harmonicBalanceFlowModel_0 .createBladeRow(); hbBladeRow_0.setNumberOfBlades(12); |
HbBladeRow hbBladeRow_0 = harmonicBalanceFlowModel_0 .createBladeRow(); hbBladeRow_0 .getBladesPerPitch() .setNumberOfBlades(12); hbBladeRow_0 .getBladesPerPitch() .getPitch() .setValue(6.283185307); |
FourierCoefficientsWakeSpecifier fourierCoefficientsWakeSpecifier_0 = boundary_0 .getValues() .get(FourierCoefficientsWakeSpecifier.class); fourierCoefficientsWakeSpecifier_0.setWakeBlades(12); |
FourierCoefficientsWakeSpecifier fourierCoefficientsWakeSpecifier_0 = boundary_0 .getValues() .get(FourierCoefficientsWakeSpecifier.class); fourierCoefficientsWakeSpecifier_0 .getWakeBladesPerPitch() .setNumberOfBlades(12); fourierCoefficientsWakeSpecifier_0 .getWakeBladesPerPitch() .getPitch() .setValue(6.283185307); |
此更改应用于所有其他尾流选项:高斯尾流、正弦尾流、Hodson 尾流。 |
热舒适性模型现在仅包含相关边界条件
根据边界类型,Simcenter STAR-CCM+ 现在仅包含特定边界条件,而不是所有可能的边界条件。 例如,TCM 入口边界仅允许指定质量通量和入口温度。 因此,每个边界的边界类型需要在宏的额外行中指定。
以前发行版本 | Simcenter STAR-CCM+ 7.02.011 |
---|---|
在以下示例中,左侧的 InletDashLeft 边界将质量通量和入口温度条件分别设为 0.007 和 12.0。 定义这些值后,应添加一个新行来指定边界类型: |
|
TcmBoundary tcmBoundary_3 = simulation_0 .get(TcmBoundaryManager.class) .createTcmBoundary(); Boundary boundary_10 = region_0 .getBoundaryManager() .getBoundary("InletDashLeft"); tcmBoundary_3.setTcmBoundaryName(boundary_10); tcmBoundary_3.setPresentationName("Fluid: InletDashLeft: 0"); tcmBoundary_3.getTcmBoundaryTime().setValue(0.0); tcmBoundary_3.getTcmBoundaryInletFlux().setValue(0.007); tcmBoundary_3.getTcmBoundaryInletT().setUnits(units_2); tcmBoundary_3.getTcmBoundaryInletT().setValue(12.0); |
TcmBoundary tcmBoundary_3 = simulation_0 .get(TcmBoundaryManager.class) .createTcmBoundary(); Boundary boundary_10 = region_0 .getBoundaryManager() .getBoundary("InletDashLeft"); tcmBoundary_3 .setTcmBoundaryName(boundary_10); tcmBoundary_3 .setPresentationName("Fluid: InletDashLeft: 0"); tcmBoundary_3 .getTcmBoundaryTime() .setValue(0.0); tcmBoundary_3 .getTcmBoundaryInletFlux() .setValue(0.007); tcmBoundary_3 .getTcmBoundaryInletT() .setUnits(units_2); tcmBoundary_3 .getTcmBoundaryInletT() .setValue(12.0); tcmBoundary_3 .getTcmBoundaryOption() .setSelected(TcmBoundaryOption.INLET); |
受影响的其他边界条件为:
|