Variables comunes para todos los subsistemas en OpenMDAO.
Estoy intentando construir un framework que comienza con la lectura de un archivo de entrada que contiene algunas claves y valores correspondientes. Luego actualizo las variables correspondientemente:
from Inertia import Inertia
...
d = hf.read_input(fin)
locals().update(d)
Luego, estoy definiendo el grupo MDA:
class MDA(om.Group):
class ObjCmp(om.ExplicitComponent):
def setup(self):
...
def setup_partials(self):
...
def compute(self, inputs, outputs):
...
def setup(self):
...
que contiene dos subsistemas (por ahora):
self.add_subsystem('d1', SomeModule(), promotes_inputs=['x1','x2'],
promotes_outputs=['y1','y2'])
self.add_subsystem('obj_cmp', self.ObjCmp(), promotes_inputs=['y1'],
promotes_outputs=['obj'])
Por razones de gestión, dado que el framework eventualmente contendrá un gran número de subsistemas, quiero mantener las clases que definen los subsistemas particulares en scripts separados, importados desde el script principal (el que define el Grupo).
El problema al que me enfrento es que si leo el archivo de entrada solo una vez en el nivel del script donde se define el Grupo (antes de ingresar a la clase Group()), las variables recuperadas de esta manera no están definidas en los niveles inferiores, por ejemplo, no las puedo usar dentro de SomeModule(). Normalmente definiría un método init() dentro de SomeModule() para poder pasar algunas variables:
def __init__(self, d):
self.d = d
pero dado que instanciamos la clase SomeModule() dentro de self.add_subsystems(), no funciona. Agradecería mucho cualquier pista.
davy.ai
Podrías intentar pasar las variables al método
add_subsystem
como argumentos de palabras clave. Por ejemplo, si tienes una variablex
que quieres pasar aSomeModule
, podrías hacer:También podrías intentar usar el método
set_input_defaults
de la claseGroup
para establecer los valores predeterminados de las entradas deSomeModule
. Por ejemplo, si quieres establecer el valor predeterminado dex
enx_default
, podrías hacer:Puedes encontrar más información sobre estos métodos en la documentación de OpenMDAO.