如何将AeroProblem与DVConstraints的设计变量和约束添加至OpenMDAO?
用OpenMDAO替代pyOptSparse添加MACH-Aero设计变量与约束
目前MACH-Aero没有提供类似pyOptSparse中addVariablesPyOpt、addConstraintsPyOpt的单行函数,需要手动将AeroProblem、DVGeometry的设计变量和DVConstraints的约束映射到OpenMDAO模型中,具体实现方法如下:
1. 添加设计变量
AeroProblem设计变量
先通过getDesignVariables()获取AeroProblem的变量参数,再在OpenMDAO模型中逐个添加设计变量:
# 获取AeroProblem的设计变量元数据 ap_dvs = ap.getDesignVariables() for dv_name, dv_info in ap_dvs.items(): # 替换为你封装AeroProblem分析的组件路径,例如'aero_comp' prob.model.add_design_var(f'aero_comp.{dv_name}', lower=dv_info['lower'], upper=dv_info['upper'], ref=dv_info.get('ref'), ref0=dv_info.get('ref0'))
DVGeometry设计变量
先获取DVGeometry的变量名称和边界参数,再关联到几何变形组件的输出:
# 获取DVGeometry的设计变量名称 dvgeo_dv_names = DVGeo.getVarNames() for dv_name in dvgeo_dv_names: # 替换为你封装几何变形逻辑的组件路径,例如'geo_comp' prob.model.add_design_var(f'geo_comp.{dv_name}', lower=DVGeo.getLower(dv_name), upper=DVGeo.getUpper(dv_name), ref=DVGeo.getRef(dv_name), ref0=DVGeo.getRef0(dv_name))
2. 添加DVConstraints约束
先封装DVConstraints的约束计算逻辑为OpenMDAO组件,输出约束值后,再添加约束到模型:
# 获取DVConstraints的约束元数据 dvcon_cons = DVCon.getConstraints() for con_name, con_info in dvcon_cons.items(): # 替换为你封装约束计算的组件路径,例如'constraint_comp' prob.model.add_constraint(f'constraint_comp.{con_name}', lower=con_info['lower'], upper=con_info['upper'], ref=con_info.get('ref'), ref0=con_info.get('ref0'))
注意事项
- 需提前将AeroProblem分析、几何变形、约束计算逻辑分别封装为OpenMDAO的
ExplicitComponent或ImplicitComponent,确保变量和约束的路径与代码中的组件名称匹配。 - 若使用
ref和ref0参数,需确认MACH-Aero返回的元数据中包含这些值,若没有可根据需求自行设置。
内容的提问来源于stack exchange,提问作者vishnu sankar
相关产品推荐
相关产品推荐

