宏 API 更改 2022.1

Simcenter STAR-CCM+ 2022.1 中,已针对多相、DFBI、可视化和更新事件更改了宏 API。

多相

模型删除

两种多相模型(状态的多相方程欧拉多相混合)已从 Simcenter STAR-CCM+ UI 中删除。这两种模型没有属性,不需要作为用户应了解的信息。

要更新宏代码,可移除使用这些模型的使用实例,如以下示例所示:

import star.common.EulerianMultiphaseMixtureModel;
...
PhysicsContinuum physicsContinuum = ((PhysicsContinuum) simulation.getContinuumManager().getContinuum("Physics 1"));
physicsContinuum.enable(EulerianMultiphaseMixtureModel.class)

混合多相和 VOF 中现提供每个相的总压力和总温

Simcenter STAR-CCM+ 2022.1 开始,混合多相和 VOF 模拟已停用每个物理连续体的总压力和总温。现在,每个相都具有这些值。在后处理过程中使用总压力和/或总温的模拟文件需要更新,并且必须更改宏。在以下示例中评估了总压力,并且将在更新后的宏代码中使用名称为 Water 的相:

以前版本 Simcenter STAR-CCM+ 2022.1
Simulation simulation_0 = getActiveSimulation()
PrimitiveFieldFunction totalPressure = ((PrimitiveFieldFunction) simulation_0.getFieldFunctionManager().getFunction("TotalPressure"));
Simulation simulation_0 = getActiveSimulation()
PrimitiveFieldFunction totalPressure = ((PrimitiveFieldFunction) simulation_0.getFieldFunctionManager().getFunction("TotalPressureWater"));

对 VOF 波模型属性的更改

VOF 波模型的以下属性现在可以设为参数(标量、场函数或全局参数):

  • 阻尼常数 1
  • 阻尼常数 2
  • 阻尼指数
  • 力常数

因此,宏代码已更改。为了向后兼容,以前版本中记录的宏在 Simcenter STAR-CCM+ 2022.1 中仍有效。

以前版本 Simcenter STAR-CCM+ 2022.1
VofWaveModel vofWaveModel_0 = physicsContinuum_0.getModelManager().getModel(VofWaveModel.class);
vofWaveModel_0.setDampingConstantOne(11.0);
vofWaveModel_0.setDampingConstantTwo(12.0);
vofWaveModel_0.setDampingExponent(3.0);
vofWaveModel_0.setForcingConstant(11.0);
VofWaveModel vofWaveModel_0 = physicsContinuum_0.getModelManager().getModel(VofWaveModel.class);
Units units_0 = ((Units) simulation_0.getUnitsManager().getObject("/s"));
Units units_1 = ((Units) simulation_0.getUnitsManager().getObject("/m"));
Units units_2 = ((Units) simulation_0.getUnitsManager().getObject(""));
vofWaveModel_0.getDampingConstantOne().setValueAndUnits(11.0, units_0);
vofWaveModel_0.getDampingConstantTwo().setValueAndUnits(12.0, units_1);
vofWaveModel_0.getDampingExponent().setValueAndUnits(3.0, units_2);
vofWaveModel_0.getForcingConstant().setValueAndUnits(11.0, units_0);

还可以不使用单位,使设置值更短:

VofWaveModel vofWaveModel_0 = physicsContinuum_0.getModelManager().getModel(VofWaveModel.class);
vofWaveModel_0.getDampingConstantOne().setValue(11.0);
vofWaveModel_0.getDampingConstantTwo().setValue(12.0);
vofWaveModel_0.getDampingExponent().setValue(3.0);
vofWaveModel_0.getForcingConstant().setValue(11.0);

DFBI:特定力与力矩的自动化

为创建和移除以下力与力矩,引入了自动处理:

  • 流体力与力矩
  • DEM 力和力矩
  • 电磁力和力矩

无法再手动创建或移除这些力与力矩。

在先前版本的 Simcenter STAR-CCM+ 中,流体力与力矩默认与新的连续体一起创建。在 Simcenter STAR-CCM+ 2022.1 中,创建连续体时不会创建流体力与力矩。一旦与受支持的流模型相关的边界添加到体表面定义中,就会自动创建流体力与力矩。

因此,宏代码已更改,以在访问流体力与力矩之前设置体表面和流模型,如以下示例中所示:

以前版本 Simcenter STAR-CCM+ 2022.1
ContinuumBody continuumBody_0 = 
  simulation_0.get(star.sixdof.BodyManager.class).createContinuumBody(true);
FluidForceAndMoment fluidForceAndMoment_0 = 
  ((FluidForceAndMoment) continuumBody_0.getExternalForceAndMomentManager().getObject("Fluid Force and Moment"));
fluidForceAndMoment_0.setSmoothingEnabled(true);
continuumBody_0.getBodySurface().setQuery(null);
Region region_0 = 
  simulation_0.getRegionManager().getRegion("Zone_1");
Boundary boundary_0 = 
  region_0.getBoundaryManager().getBoundary("hull");
continuumBody_0.getBodySurface().setObjects(boundary_0);
PhysicsContinuum physicsContinuum_0 = 
  ((PhysicsContinuum) simulation_0.getContinuumManager().getContinuum("Physics 1"));
physicsContinuum_0.enable(SegregatedFlowModel.class);
continuumBody continuumBody_0 = 
  simulation_0.get(star.sixdof.BodyManager.class).createContinuumBody(true);
continuumBody_0.getBodySurface().setQuery(null);
Region region_0 = 
  simulation_0.getRegionManager().getRegion("Zone_1");
Boundary boundary_0 = 
  region_0.getBoundaryManager().getBoundary("hull");
continuumBody_0.getBodySurface().setObjects(boundary_0);
PhysicsContinuum physicsContinuum_0 = 
  ((PhysicsContinuum) simulation_0.getContinuumManager().getContinuum("Physics 1"));
physicsContinuum_0.enable(SegregatedFlowModel.class);
FluidForceAndMoment fluidForceAndMoment_0 = 
  ((FluidForceAndMoment) continuumBody_0.getExternalForceAndMomentManager().getObject("Fluid Force and Moment"));
fluidForceAndMoment_0.setSmoothingEnabled(true);

无法手动移除力与力矩

无法手动移除自动处理的力与力矩。需要将其禁用。出于向后兼容性原因,仍接受用于移除这些力与力矩的旧宏调用,但这些调用会禁用力与力矩,而不是将其移除。

以前版本 Simcenter STAR-CCM+ 2022.1
ContinuumBody continuumBody_0 = 
  ((ContinuumBody) simulation_0.get(star.sixdof.BodyManager.class).getObject("Body 1"));
FluidForceAndMoment fluidForceAndMoment_0 = 
  ((FluidForceAndMoment) continuumBody_0.getExternalForceAndMomentManager().getObject("Fluid Force and Moment"));
continuumBody_0.getExternalForceAndMomentManager().removeObjects(fluidForceAndMoment_0);
DemForceAndMoment demForceAndMoment_0 = 
  ((DemForceAndMoment) continuumBody_0.getExternalForceAndMomentManager().getObject("DEM Force and Moment"));
continuumBody_0.getExternalForceAndMomentManager().removeObjects(demForceAndMoment_0);
ElectromagneticForceAndMoment electromagneticForceAndMoment_0 = 
  ((ElectromagneticForceAndMoment) continuumBody_0.getExternalForceAndMomentManager().getObject("Electromagnetic Force and Moment"));
continuumBody_0.getExternalForceAndMomentManager().removeObjects(electromagneticForceAndMoment_0);
ContinuumBody continuumBody_0 = 
  ((ContinuumBody) simulation_0.get(star.sixdof.BodyManager.class).getObject("Body 1"));
FluidForceAndMoment fluidForceAndMoment_0 = 
  ((FluidForceAndMoment) continuumBody_0.getExternalForceAndMomentManager().getObject("Fluid Force and Moment"));
fluidForceAndMoment_0.setEnabled(false);
DemForceAndMoment demForceAndMoment_0 = 
  ((DemForceAndMoment) continuumBody_0.getExternalForceAndMomentManager().getObject("DEM Force and Moment"));
demForceAndMoment_0.setEnabled(false);
ElectromagneticForceAndMoment electromagneticForceAndMoment_0 = 
  ((ElectromagneticForceAndMoment) continuumBody_0.getExternalForceAndMomentManager().getObject("Electromagnetic Force and Moment"));
electromagneticForceAndMoment_0.setEnabled(false);

无法手动创建力与力矩

无法手动创建自动处理的力与力矩。出于向后兼容性原因,通过宏调用创建这些力与力矩的功能仍然可用。在现有宏中创建这些力与力矩应仍有效,并且可以在宏中进一步操控获得的力与力矩对象。但是,新创建的力与力矩在 UI 中不可见,除非自动机制检测到模拟需要这些力与力矩,否则它们将不用于计算。

以前版本 Simcenter STAR-CCM+ 2022.1
ContinuumBody continuumBody_0 = 
  ((ContinuumBody) simulation_0.get(star.sixdof.BodyManager.class).getObject("Body 1"));
FluidForceAndMoment fluidForceAndMoment_1 = 
  continuumBody_0.getExternalForceAndMomentManager().createForceAndMoment(FluidForceAndMoment.class);
DemForceAndMoment demForceAndMoment_1 = 
  continuumBody_0.getExternalForceAndMomentManager().createForceAndMoment(DemForceAndMoment.class);
ElectromagneticForceAndMoment electromagneticForceAndMoment_1 = 
  continuumBody_0.getExternalForceAndMomentManager().createForceAndMoment(ElectromagneticForceAndMoment.class);
--
// Fluid, DEM and EMAG forces and moments should not be created with a macro. However,
// for backward compatibility reasons, existing macro code to create these forces and
// moments should still work

可视化:对高级渲染材料的更改

Simcenter STAR-CCM+ 2022.1 中,高级渲染材料发生了诸多更改。然而,在涉及渲染材料的宏中,显示器的预设材料高级渲染材料设置应继续运行,而不会更改。此外,即使工具 > 渲染材料节点现在包含材料类型的新子文件夹节点,新渲染材料的创建在宏中也仍有效。

但是,对于引用已重命名或删除默认材料的名称的宏,在应用于 Simcenter STAR-CCM+ 2022.1 中创建的模拟文件时,该宏必须更新。具体而言,唯一受对象更改影响的宏函数是 RayTraceMaterialManager.get/hasObject(),当在不含旧材料的模拟文件上运行时,必须使用新材料名称调用:

以前版本 Simcenter STAR-CCM+ 2022.1
RayTraceSimpleMaterial rayTraceSimpleMaterial_0 = 
 ((RayTraceSimpleMaterial) simulation_0.get(RayTraceMaterialManager.class).getObject("Light Gray"));
RayTraceSimpleMaterial rayTraceSimpleMaterial_0 = 
 ((RayTraceSimpleMaterial) simulation_0.get(RayTraceMaterialManager.class).getObject("Non-Physical Light Gray"));

也可以从早期模拟文件导出旧材料,然后将其导入到新的模拟文件中。

更新事件

对内部采样控制的更改

对于监视器渐近线更新事件,已更改宏代码以激活和停用内部采样复选框属性:

  • getOnlyInnerSamples 已替换为 getInnerSamples
  • setOnlyInnerSamples 已替换为 setInnerSamples

现有宏将继续按预期正常工作,但为获得最大可靠性,建议更新宏代码。

对评估的状态信息的更改

更新事件节点下的更新事件对象中,已满足复选框属性已替换为新的评估的状态属性。已满足未满足未评估只读状态可阐明更新事件的评估状态。

返回布尔值 updateEvent.getEvaluatedState() 的旧宏调用保持不变,但返回值对应于当前迭代的状态,而不是上次评估更新事件时的状态(与以前版本一样)。

已添加另一个 API updateEvent.getEvaluatedStatus(),用于返回当前迭代的更新事件的状态(返回的状态为以下项之一:‘未满足’— 0、‘已满足’— 1、‘未评估’— 2)。