宏 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 不再接受等值线等级数后跟一组值。 现在,使用 SingleIsoValueMultiIsoValueMultiRangeIsoValue API 提供值,这些 API 使用 ScalarPhysicalQuantityArrayPhysicalQuantity 对象指定值和单位。 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 对象需要设为 1Pitch 对象必须设为 2π/旧的 NumberOfBlades。 在以下示例中,旧的 NumberOfBlades12.56637061,生成值为 0.5Pitch

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.00712.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);

受影响的其他边界条件为:

  • 对流 (CONVECTION)
  • 壁面温度 (WALL_TEMPERATURE)
  • 壁面热通量 (WALL_HEAT_FLUX)
  • 对流和传导 (CONVECTION_CONDUCTION)
  • 对流和辐射 (CONVECTION_RADIATION)
  • 对流和辐射及传导 (CONVECTION_CONDUCTION_RADIATION)