def _add_category_blocks(self): """ Adds an indexed block for each category of variable and attach a reference to each variable to one of the BlockDatas. """ category_dict = self.category_dict var_name = self._var_name for categ, varlist in category_dict.items(): # These names are e.g. 'DIFFERENTIAL_BLOCK', 'DIFFERENTIAL_SET' # They serve as a way to access all the "differential variables" block_name = self.get_category_block_name(categ) set_name = self.get_category_set_name(categ) set_range = range(len(varlist)) # Construct a set that indexes, eg, the "differential variables" category_set = Set(initialize=set_range) self.add_component(set_name, category_set) # Construct an IndexedBlock, each data object of which # will contain a single reference-to-timeslice of that # category, and with the corresponding custom ctype category_block = Block(category_set) self.add_component(block_name, category_block) # Don't want these blocks sent to any solver. category_block.deactivate() for i, var in enumerate(varlist): # Add reference-to-timeslices to new blocks: category_block[i].add_component(var_name, var)
def _add_category_blocks(self): """ Adds an indexed block for each category of variable and attach a reference to each variable to one of the BlockDatas. """ category_dict = self.category_dict var_name = self._var_name for categ, varlist in category_dict.items(): ctype = CATEGORY_TYPE_MAP.get(categ, NmpcVar) # These names are e.g. 'DIFFERENTIAL_BLOCK', 'DIFFERENTIAL_SET' # They serve as a way to access all the "differential variables" block_name = self.get_category_block_name(categ) set_name = self.get_category_set_name(categ) set_range = range(len(varlist)) # Construct a set that indexes, eg, the "differential variables" category_set = Set(initialize=set_range) self.add_component(set_name, category_set) # Construct an IndexedBlock, each data object of which # will contain a single reference-to-timeslice of that # category, and with the corresponding custom ctype category_block = Block(category_set) self.add_component(block_name, category_block) # Don't want these blocks sent to any solver. category_block.deactivate() for i, var in enumerate(varlist): # Add reference-to-timeslices to new blocks: # # Create a new reference if var is not a reference or # it has the wrong ctype... # We may want to reconsider overriding the user's ctype... # We may also want to make sure these references are not # attached to anything. Otherwise we will fail here. ref = var if var.is_reference() and var.ctype is ctype \ else Reference(var, ctype=ctype) category_block[i].add_component(var_name, ref)