不能为声明的输入强制使用整数

时间:2018-12-20 09:47:16

标签: openmdao

我尝试用默认整数声明一个输入,但是似乎不可能。我是在犯错还是在openmdao核心中强制执行float。

这是我尝试过的代码片段;

预期的输出类似:array([1,1,1])

接收到的输出:[1。 1. 1。]

from openmdao.api import ExplicitComponent,  Problem, IndepVarComp
import numpy as np

class CompAddWithArrayIndices(ExplicitComponent):
    """Component for tests for declaring with array val and array indices."""
    def setup(self):
        self.add_input('x_a', val=np.ones(6,dtype=int))
        self.add_input('x_b', val=[1]*5)
        self.add_output('y')

p = Problem(model=CompAddWithArrayIndices())
p.setup()
p.run_model()

print(p['x_a'])        
print(p['x_b'])   
#%%
from openmdao.api import ExplicitComponent,  Problem, IndepVarComp
import numpy as np

class CompAddWithArrayIndices(ExplicitComponent):
    """Component for tests for declaring with array val and array indices."""
    def setup(self):
        self.add_input('x_a', val=np.zeros(3,dtype=int))
        self.add_output('y')

prob = Problem()
ivc=IndepVarComp()
prob.model.add_subsystem('ivc', ivc,promotes=['*'])
ivc.add_output('x_a', val=np.ones(3,dtype=int))

prob.model.add_subsystem('comp1', CompAddWithArrayIndices(),promotes=['*'])

prob.setup()
prob.run_model()

print(prob['x_a'])

1 个答案:

答案 0 :(得分:2)

通过add_inputsadd_outputs添加的变量将转换为float或float数组。如果希望变量为整数或任何其他离散类型,则必须使用add_discrete_inputadd_discrete_output。这些变量将基于连接信息在系统之间传递,但不会尝试计算它们的派生变量。

离散变量支持已添加到OpenMDAO v2.5中,作为一项实验功能(尚在开发中)。在master分支上有提交ID 709401e535cf6933215abd942d4b4d49dbf61b2b,已解决了升级问题。请确保您使用的是该提交版本或更高版本的OpenMDAO的最新版本