在 Simcenter STAR-CCM+ 12.06 中,针对停止条件、表面准备、网格操作、组分和材料模型、多孔介质、壁面孔隙率、欧拉多相、离散多相、反应流体、DFBI 和监视器进行了宏 API 的更改。
停止条件:对渐进极限默认值的更改
在 Simcenter STAR-CCM+ 当前版本中,您可以为从监视器创建的停止条件选择绝对或标准化渐进极限值。
渐进限制值默认设置为标准(在 Simcenter STAR-CCM+ 用户界面中,节点的标准化属性已激活)。 要在您的宏中停用此设置,请使用以下示例中显示的新的宏代码。
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
MonitorIterationStoppingCriterion stopCrit = monitor.createIterationStoppingCriterion();
((MonitorIterationStoppingCriterionOption) stopCrit.getCriterionOption()).setSelected(MonitorIterationStoppingCriterionOption.ASYMPTOTIC);
|
MonitorIterationStoppingCriterion stopCrit = monitor.createIterationStoppingCriterion();
((MonitorIterationStoppingCriterionOption) stopCrit.getCriterionOption()).setSelected(MonitorIterationStoppingCriterionOption.ASYMPTOTIC);
MonitorIterationStoppingCriterionAsymptoticType stopCritAsymptoticLimit = ((MonitorIterationStoppingCriterionAsymptoticType) stopCrit.getCriterionType());
stopCritAsymptoticLimit.setNormalized(false);
|
表面准备
更改为压印器
压印器的面方向参数现在默认设置为异向向外。 创建压印操作或执行表面修复压印的宏默认情况下也是此设置。 如果想要将面方向设置回异向与校准,请在宏中明确执行此操作。 示例如下。
要创建压印操作:
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
ImprintPartsOperation imprintPartsOperation_0 =
(ImprintPartsOperation) simulation_0.get(MeshOperationManager.class).createImprintPartsOperation(new NeoObjectVector(new Object[] {part1, part_2}));
|
ImprintPartsOperation imprintPartsOperation_0 =
(ImprintPartsOperation) simulation_0.get(MeshOperationManager.class).createImprintPartsOperation(new NeoObjectVector(new Object[] {part1, part_2}));
ImprintFaceOrientation imprintFaceOrientation_0 =
imprintPartsOperation_0.getImprintValuesManager().get(ImprintFaceOrientation.class);
imprintFaceOrientation_0.getFaceOrientationOption().setSelected(ImprintFaceOrientationOption.Type.OPPOSING_AND_ALIGNED);
|
要执行表面修复压印:
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
SurfaceMeshWidgetMergeImprintPartsController surfaceMeshWidgetMergeImprintPartsController_0 =
partSurfaceMeshWidget_0.getControllers().getController(SurfaceMeshWidgetMergeImprintPartsController.class);
|
SurfaceMeshWidgetMergeImprintPartsController surfaceMeshWidgetMergeImprintPartsController_0 =
partSurfaceMeshWidget_0.getControllers().getController(SurfaceMeshWidgetMergeImprintPartsController.class);
SurfaceMeshWidgetRepairController surfaceMeshWidgetRepairController_0 =
partSurfaceMeshWidget_0.getControllers().getController(SurfaceMeshWidgetRepairController.class);
SurfaceMeshWidgetMergeImprintOptions surfaceMeshWidgetMergeImprintOptions_0 =
surfaceMeshWidgetRepairController_0.getOptions().getMergeImprintOptions();
surfaceMeshWidgetMergeImprintOptions_0.getFaceOrientation().setSelected(ImprintFaceOrientationOption.Type.OPPOSING_AND_ALIGNED);
|
更改为多个零部件的网格化
零部件中的重新网格化命令已被更新为同时网格化所有选定的零部件,从而导致宏代码的更改。
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
simpleBlockPart_0.getTessellationDensityOption().setSelected(TessellationDensityOption.Type.FINE);
simpleBlockPart_0.getCadPartEdgeOption().setSelected(CadPartEdgeOption.Type.SHARP_EDGES);
simpleBlockPart_0.setSharpEdgeAngle(30.0);
simpleBlockPart_0.tessellate();
... // set tessellation parameters
simpleBlockPart_1.tessellate();
... // set tessellation parameters
simpleConePart_0.tessellate();
... // set tessellation parameters
cadPart_0.tessellate();
... // set tessellation parameters
simpleBlockPart_2.tessellate();
|
simpleBlockPart_0.getTessellationDensityOption().setSelected(TessellationDensityOption.Type.FINE);
simpleBlockPart_0.getCadPartEdgeOption().setSelected(CadPartEdgeOption.Type.SHARP_EDGES);
simpleBlockPart_0.setSharpEdgeAngle(30.0);
... // set tessellation parameters for each part
simpleBlockPart_0.tessellateParts(Arrays.asList(simpleBlockPart_0, simpleBlockPart_1, simpleConePart_0, cadPart_0, simpleBlockPart_2));
|
更改为网格接触处理
由于重构,Simcenter STAR-CCM+ 处理网格接触的方法已发生改变,从而导致宏代码的更改。 已从客户端删除以下类:
MeshContact
PatchMeshContact
EdgeMeshContact
VertexMeshContact
MeshContactManager
因此,也已从 PartPeriodicTransform
类中删除方法 getMeshContact()
。
例如,在以前版本中,MeshContactManager
从 PartContact
中获取,MeshContact
类从 MeshContactManager
中获取。 在当前发行版本中,接触的零部件表面和块直接从 PartContact
中获取。
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
MeshContactManager mcm = pc.has(MeshContactManager.class);
if (mcm != null)
{ //if it exists
//iterate over all PatchMeshContacts
for (PatchMeshContact pmc : mcm.getObjectsOf(PatchMeshContact.class))
{
PartSurface ps0 = pmc.getPartSurface0();
int patch0 = pmc.getPatch0();
PartSurface ps1 = pmc.getPartSurface1();
int patch1 = pmc.getPatch1();
|
for (SimpleImmutableEntry<PartContact.PartSurfaceAndPatch, PartContact.PartSurfaceAndPatch> patchPair : pc.getPatchMeshContacts()) {
PartSurface ps0 = patchPair.getKey().getPartSurface();
int patch0 = patchPair.getKey().getPatch();
PartSurface ps1 = patchPair.getValue().getPartSurface();
int patch1 = patchPair.getValue().getPatch();
|
网格操作:更改为自定义控件中继承零部件的选择
为了适应嵌套在多个网格操作零部件中的继承零部件,处理代理的技术已发生改变,从而导致宏代码的更改。
注 | 仍然可以毫无错误地执行旧的宏,但是自定义控件中继承零部件的选择可能无法正常工作。 |
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
MeshOperationPart meshOperationPart_1 =
((MeshOperationPart) simulation_0.get(SimulationPartManager.class).getPart("Extract Volume 2"));
SimpleBlockPart simpleBlockPart_0 =
((SimpleBlockPart) simulation_0.get(SimulationPartManager.class).getPart("Block"));
GeometryObjectProxy geometryObjectProxy_0 =
meshOperationPart_1.getOrCreateProxyForObject(simpleBlockPart_0);
|
MeshOperationPart meshOperationPart_0 =
((MeshOperationPart) simulation_0.get(SimulationPartManager.class).getPart("Subtract 2"));
SimpleBlockPart simpleBlockPart_0 =
((SimpleBlockPart) simulation_0.get(SimulationPartManager.class).getPart("Block"));
GeometryObjectProxy geometryObjectProxy_0 =
meshOperationPart_0.getOrCreateProxyForObject(simpleBlockPart_0);
MeshOperationPart meshOperationPart_1 =
((MeshOperationPart) simulation_0.get(SimulationPartManager.class).getPart("Surface Wrapper"));
GeometryObjectProxy geometryObjectProxy_1 =
meshOperationPart_1.getOrCreateProxyForObject(geometryObjectProxy_0);
MeshOperationPart meshOperationPart_2 =
((MeshOperationPart) simulation_0.get(SimulationPartManager.class).getPart("Extract Volume 2"));
GeometryObjectProxy geometryObjectProxy_2 =
meshOperationPart_2.getOrCreateProxyForObject(geometryObjectProxy_1);
|
GeometryObjectProxy geometryObjectProxy_2 =
meshOperationPart_2.getPartProxies().getGeometryObjectProxy("Block");
|
MeshOperationPart meshOperationPart_0 =
((MeshOperationPart) simulation_0.get(SimulationPartManager.class).getPart("Subtract 2"));
SimpleBlockPart simpleBlockPart_0 =
((SimpleBlockPart) simulation_0.get(SimulationPartManager.class).getPart("Block"));
GeometryObjectProxy geometryObjectProxy_0 =
meshOperationPart_0.getPartProxies().getGeometryObjectProxy(simpleBlockPart_0);
MeshOperationPart meshOperationPart_1 =
((MeshOperationPart) simulation_0.get(SimulationPartManager.class).getPart("Surface Wrapper"));
GeometryObjectProxy geometryObjectProxy_1 =
meshOperationPart_1.getPartProxies().getGeometryObjectProxy(geometryObjectProxy_0);
MeshOperationPart meshOperationPart_2 =
((MeshOperationPart) simulation_0.get(SimulationPartManager.class).getPart("Extract Volume 2"));
GeometryObjectProxy geometryObjectProxy_2 =
meshOperationPart_2.getPartProxies().getGeometryObjectProxy(geometryObjectProxy_1);
|
组分和材料模型:由于重构导致更改
由于与组分和材料组分相关的代码的重构,CoupledSpeciesManager
已被重命名为 CoupledMaterialComponentManager
,CoupledSpeciesComponentMap
已被重命名为 CoupledMaterialComponentMap
。 对宏代码的更改示例如下:
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
// Importing the CoupledSpeciesManager and CoupledSpeciesComponentMap
import star.cosimulation.common.CoupledSpeciesManager;
import star.cosimulation.common.CoupledComponentMap;
// Getting the CoupledSpeciesManager and creating a new CoupedSpeciesComponent
CoupledSpeciesComponentMap coupledSpeciesComponentMap_0 =
coSimulation_0.getCoSimulationValues().get(CoupledSpeciesManager.class).createSpeciesComponent();
// Getting the CoupledSpeciesManager and setting a CoupledSpeciesComponent
CoupledSpeciesComponentMap coupledSpeciesComponentMap_0 =
coSimulation_0.getCoSimulationValues().get(CoupledSpeciesManager.class).getCoupledSpeciesComponentMap("indolene-combust");
coupledSpeciesComponentMap_0.setCoupledComponent(passiveScalarMaterial_0);
|
// Importing the CoupledMaterialComponentManager and CoupledMaterialComponentMap
import star.cosimulation.common.CoupledMaterialComponentManager;
import star.cosimulation.common.CoupledMaterialComponentMap;
// Getting the CoupledComponentMaterialManager and creating a new CoupedMaterialComponent
CoupledMaterialComponentMap coupledMaterialComponentMap_0 =
coSimulation_0.getCoSimulationValues().get(CoupledMaterialComponentManager.class).createMaterialComponent();
// Getting the CoupledComponentMaterialManager and setting a CoupledMaterialComponent
CoupledMaterialComponentMap coupledMaterialComponentMap_1 =
coSimulation_0.getCoSimulationValues().get(CoupledMaterialComponentManager.class).getCoupledMaterialComponentMap("indolene-combust");
coupledMaterialComponentMap_1.setCoupledComponent(passiveScalarMaterial_0);
|
多孔介质:由于执行弯曲导致更改
作为在多孔介质中执行弯曲的重构的一部分,star.electromagnetism.common.BruggemanApproximationExponentProfile
已被重命名为 star.flow.BruggemanApproximationExponentProfile
。 请相应地替换宏中的所有 star.electromagnetism.common.BruggemanApproximationExponentProfile
实例。
壁面孔隙率:更改为外界压力的指定
对于壁面孔隙率模型,现在为每个边界指定了外界压力,为此,壁面孔隙率指定节点的方法属性设置为已指定。
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
Simulation simulation_0 =
getActiveSimulation();
Region region_0 =
simulation_0.getRegionManager().getRegion("Block_1");
PhaseConditions phaseConditions_0 =
((PhaseConditions) region_0.get(PhaseConditionsManager.class).getPhaseConditions("Gas1"));
VofWallPorosityAmbientPressureProfile vofWallPorosityAmbientPressureProfile_0 =
phaseConditions_0.getPhaseValueManager().get(VofWallPorosityAmbientPressureProfile.class);
vofWallPorosityAmbientPressureProfile_0.getMethod(ConstantScalarProfileMethod.class).getQuantity().setValue(1000.0);
|
Simulation simulation_0 =
getActiveSimulation();
Region region_0 =
simulation_0.getRegionManager().getRegion("Block_1");
InterfaceBoundary interfaceBoundary_0 =
((InterfaceBoundary) region_0.getBoundaryManager().getBoundary("x-max [Interface 1]"));
PhaseConditions phaseConditions_0 =
((PhaseConditions) interfaceBoundary_0.get(PhaseConditionsManager.class).getPhaseConditions("Gas1"));
VofWallPorosityAmbientPressureProfile vofWallPorosityAmbientPressureProfile_0 =
phaseConditions_0.getPhaseValueManager().get(VofWallPorosityAmbientPressureProfile.class);
vofWallPorosityAmbientPressureProfile_0.getMethod(ConstantScalarProfileMethod.class).getQuantity().setValue(1000.0);
|
欧拉多相:更改为悬浮液流变
已从相间相互作用中删除悬浮液流变模型,现在位于物理连续体层级上。 此更改允许使用具有不同的最大填充和颗粒尺寸的多个颗粒相,与颗粒压力模型类似。 对宏代码的更改如下:
离散多相:更改为温度指定
在自由流边界上,不再为离散相提供静态温度分布,从而导致宏代码的更改。
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
Simulation simulation_0 = getActiveSimulation();
Region region_0 = simulation_0.getRegionManager().getRegion("Region_1");
Boundary boundary_1 = region_0.getBoundaryManager().getBoundary("Inlet");
PhaseConditions phaseConditions_0 = ((PhaseConditions) boundary_1.get(PhaseConditionsManager.class).getPhaseConditions("DMP Phase"));
StaticTemperatureProfile staticTemperatureProfile_4 = phaseConditions_0.getPhaseValueManager().get(StaticTemperatureProfile.class);
staticTemperatureProfile_4.getMethod(ConstantScalarProfileMethod.class).getQuantity().setValue(258.4);
ScalarVolumeFractionProfile scalarVolumeFractionProfile_0 = phaseConditions_0.getPhaseValueManager().get(ScalarVolumeFractionProfile.class);
scalarVolumeFractionProfile_0.getMethod(ConstantScalarProfileMethod.class).getQuantity().setValue(3.42E-7);
|
Simulation simulation_0 = getActiveSimulation();
Region region_0 = simulation_0.getRegionManager().getRegion("Region_1");
Boundary boundary_1 = region_0.getBoundaryManager().getBoundary("Inlet");
PhaseConditions phaseConditions_0 = ((PhaseConditions) boundary_1.get(PhaseConditionsManager.class).getPhaseConditions("DMP Phase"));
ScalarVolumeFractionProfile scalarVolumeFractionProfile_0 = phaseConditions_0.getPhaseValueManager().get(ScalarVolumeFractionProfile.class);
scalarVolumeFractionProfile_0.getMethod(ConstantScalarProfileMethod.class).getQuantity().setValue(3.42E-7);
|
反应的流体
停止 CFM 部分预混合反应模型和 TFC 部分预混合反应模型的选择
由于重构,用户界面中的两个部分预混合反应模型成为冗余。 已从下面模型中删除它们:拟序火焰模型 (CFM) 和湍流火焰速度闭合模型 (TFC)。
此更改仅是为了简化用户界面 — 它不更改任何结果。 您可以像以前一样继续使用部分预混合 CFM 和 TFC 燃烧模型。
要更新您的宏,请删除带有 CfmReactionPartiallyPremixedModel
或 TfcReactionPartiallyPremixedModel
的任何行。 示例如下:
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
public void enableSpecificModels(PhysicsContinuum physicsContinuum_0) {
super.enableSpecificModels(physicsContinuum_0);
physicsContinuum_0.enable(TfcCombustionPartiallyPremixedModel.class);
physicsContinuum_0.enable(TfcReactionPartiallyPremixedModel.class); }
|
public void enableSpecificModels(PhysicsContinuum physicsContinuum_0) {
super.enableSpecificModels(physicsContinuum_0);
physicsContinuum_0.enable(TfcCombustionPartiallyPremixedModel.class);
|
更改点火器名称
在改进用户界面过程中,已重命名所有点火器。 例如,v12.04 版本中以下宏代码行中出现的 TemperatureIgnitor 1
((IgnitorManager) physicsContinuum_0.get(IgnitorManager.class)).getIgnitor("TemperatureIgnitor 1")
已被重命名为 Temperature Ignitor 1
。
其他点火器已按以下方法进行重命名:
EbuIgnitor 1
重命名为 Ebu Ignitor 1
ProgressVariableIgnitor 1
重命名为 Progress Variable Ignitor 1
FlameAreaDensityIgnitor 1
重命名为 Flame Area Density Ignitor 1
更改复杂化学
由于重构,复杂化学的宏代码已更改。
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
ComplexChemistryCombustionModel complexChemistryModel_0 =
((ComplexChemistryCombustionModel)physicsContinuum_0.getModelManager().
getModel(ComplexChemistryCombustionModel.class));
DarsCfdLibrary darsCfdLibrary = complexChemistryModel_0.getDarsCfdLibrary();
darsCfdLibrary.getDarsCfdBinaryRunOptions().setRunTimeCompile(false);
darsCfdLibrary.getDarsCfdBinaryRunOptions().getDarsCfdUserCodingOption().
setSelected(DarsCfdUserCodingOption.CALCSRCTRM);
|
ReactingModel reactingModel_0 =
physicsContinuum_0.getModelManager().getModel(ReactingModel.class);
ReactingSystem reactingSystem_0 =
((ReactingSystem) reactingModel_0.getReactingSystem());
reactingSystem_0.getReactionProperties().get(ReactionsSourceProperty.class).
setReactionPropertyMethod(DarsCfdUserDefinedReactionsSource.class);
reactingSystem_0.getReactionProperties().get(ReactionsUserCodingTypeProperty.class).
setReactionPropertyMethod(UserCodingSourceTermCalculate.class);
|
ComplexChemistryCombustionModel complexChemistryModel_0 =
((ComplexChemistryCombustionModel)physicsContinuum_0.getModelManager().
getModel(ComplexChemistryCombustionModel.class));
DarsCfdLibrary darsCfdLibrary = complexChemistryModel_0.getDarsCfdLibrary();
darsCfdLibrary.getDarsCfdBinaryRunOptions().setRunTimeCompile(false);
darsCfdLibrary.getDarsCfdBinaryRunOptions().getDarsCfdUserCodingOption().
setSelected(DarsCfdUserCodingOption.MODSRCTRM);
|
ReactingModel reactingModel_0 =
physicsContinuum_0.getModelManager().getModel(ReactingModel.class);
ReactingSystem reactingSystem_0 =
((ReactingSystem) reactingModel_0.getReactingSystem());
reactingSystem_0.getReactionProperties().get(ReactionsSourceProperty.class).
setReactionPropertyMethod(DarsCfdUserDefinedReactionsSource.class);
reactingSystem_0.getReactionProperties().get(ReactionsUserCodingTypeProperty.class).
setReactionPropertyMethod(UserCodingSourceTermModify.class);
|
DFBI:更改为力和力矩的创建
为了在未来的 Simcenter STAR-CCM+ 版本中允许使用电磁和 DEM 等其他物理模型添加它们自己的力和力矩到 DFBI,已更改创建相关 DFBI 对象的方法,从而导致宏代码的更改。
在力和力矩管理器中创建新的力和力矩
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
body_1.getExternalForceAndMomentManager().createExternalForceAndMoment(PropulsionForce.class);
|
body_1.getExternalForceAndMomentManager().createForceAndMoment(PropulsionForce.class);
|
使用 FluidForceAndMoment 替换 ExternalFluidForceAndMoment
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
import star.sixdof.ExternalFluidForceAndMoment;
ExternalFluidForceAndMoment externalFluidForceAndMoment_1 =
body_1.getExternalForceAndMomentManager().createExternalForceAndMoment(ExternalFluidForceAndMoment.class);
ExternalFluidForceAndMoment externalFluidForceAndMoment_2 =
((ExternalFluidForceAndMoment) body_2.getExternalForceAndMomentManager().getObject("Fluid Force and Moment"));
|
import star.sixdof.FluidForceAndMoment;
FluidForceAndMoment fluidForceAndMoment_1 =
body_1.getExternalForceAndMomentManager().createForceAndMoment(FluidForceAndMoment.class);
FluidForceAndMoment fluidForceAndMoment_2 =
((FluidForceAndMoment) body_2.getExternalForceAndMomentManager().getObject("Fluid Force and Moment"));
|
使用 GravityForce 替换 ExternalGravityForce
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
import star.sixdof.ExternalGravityForce;
ExternalGravityForce externalGravityForce_1 =
body_1.getExternalForceAndMomentManager().createExternalForceAndMoment(ExternalGravityForce.class);
ExternalGravityForce externalGravityForce_2 =
((ExternalGravityForce) body_2.getExternalForceAndMomentManager().getObject("Gravity Force"));
|
import star.sixdof.GravityForce;
GravityForce gravityForce_1 =
body_1.getExternalForceAndMomentManager().createForceAndMoment(GravityForce.class);
GravityForce gravityForce_2 =
((GravityForce) body_2.getExternalForceAndMomentManager().getObject("Gravity Force"));
|
使用 VirtualDiskForce 替换 ExternalVirtualDiskForce
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
import star.sixdof.ExternalVirtualDiskForce;
ExternalVirtualDiskForce externalVirtualDiskForce_1 =
body_1.getExternalForceAndMomentManager().createExternalForceAndMoment(ExternalVirtualDiskForce.class);
ExternalVirtualDiskForce externalVirtualDiskForce_2 =
((ExternalVirtualDiskForce) body_2.getExternalForceAndMomentManager().getObject("VirtualDiskForce 1"));
|
import star.sixdof.VirtualDiskForce;
VirtualDiskForce virtualDiskForce_1 =
body_1.getExternalForceAndMomentManager().createForceAndMoment(VirtualDiskForce.class);
VirtualDiskForce virtualDiskForce_2 =
((VirtualDiskForce) body_2.getExternalForceAndMomentManager().getObject("VirtualDiskForce 1"));
|
将 DofMorpherSolver 传递到新的包
以前发行版本 |
Simcenter STAR-CCM+ v12.06 |
import star.sixdof.DofMorpherSolver;
|
import star.sixdofmotion.DofMorpherSolver;
|
注 | 为了具有向后兼容性,大部分这些已失效的方法和类仍然可用,因此无需更改即可运行许多现有宏。 但是,使用 DofMorpherSolver 的任何宏必须导入 star.sixdofmotion.DofMorpherSolver 。 |
监视器:停用方法
已从宏 API 中停用 PlotableMonitor.getMonitoredValueUnits()
方法。
对于报告监视器,您可以使用 reportMonitor.getReport().getUnits()
替换此方法。 对于其他监视器,必须从监视器类型中清除这些单位。