def _set_params_for_two_blocks(self, model, block, iconn, ics, blockNumber, firstIndex): '''Only for one block in pair.''' # choice side: if (iconn.block1 == blockNumber and iconn.block2 != blockNumber): # case differ 1 side_num = iconn.block1Side elif (iconn.block2 == blockNumber and iconn.block1 != blockNumber): # case differ 2 side_num = iconn.block2Side # len(ics for block) # firstIndex = len(ics) # FOR find equation for block Range = (side_num == 1) * block.size.sizeX coord = lambda region: ((side_num == 0) * region.xfrom + (side_num == 1) * region.xto) side_test = lambda eRegion: coord(eRegion) == Range equationNum = self.choice_equation_num(side_test, block) equation = model.equations[equationNum].copy() # END FOR funcName = ("Block" + str(blockNumber) + "Interconnect__Side" + str(side_num) + "_Eqn" + str(equationNum)) # generate equation: parsedValues = self.parse_equations(equation, model.dimension, blockNumber, side_num, firstIndex, 0) # fill params: ic = Params() ic.name = "Connection" ic.firstIndex = firstIndex ic.secondIndex = '0' ic.side_num = side_num ic.ranges = [] ic.equationNumber = equationNum ic.equation = equation ic.funcName = funcName ic.boundName = determineNameOfBoundary(side_num) ic.blockNumber = blockNumber ic.parsedValues = parsedValues ic.original = [e.sent for e in equation.eqs] # each block can connect to many other block # let other block discribe interconnect in # that case return(ic)
def _set_params_for_closed_block(self, model, block, iconn, blockNumber, srcFirstIndex, distFirstIndex): '''srcFirstIndex and distFirstIndex is first indexes of two interconects of same block''' # FOR finding equations: # choice left or right side of block # i.e. 0.0 or block.sizeX Range1 = (iconn.block1Side == 1) * block.size.sizeX Range2 = (iconn.block2Side == 1) * block.size.sizeX # return either xfrom or xto for block coord1 = lambda region: ((iconn.block1Side == 0) * region.xfrom + (iconn.block1Side == 1) * region.xto) coord2 = lambda region: ((iconn.block2Side == 0) * region.xfrom + (iconn.block2Side == 1) * region.xto) # find equation # for first block (one side of closed block) side_test = lambda eRegion: coord1(eRegion) == Range1 equationNum1 = self.choice_equation_num(side_test, block) # find equation # for second block (other side of closed block) side_test = lambda eRegion: coord2(eRegion) == Range2 equationNum2 = self.choice_equation_num(side_test, block) equation1 = model.equations[equationNum1].copy() equation2 = model.equations[equationNum2].copy() # END FOR funcName1 = ("Block" + str(blockNumber) + "Interconnect__Side" + str(iconn.block1Side) + "_Eqn" + str(equationNum1)) funcName2 = ("Block" + str(blockNumber) + "Interconnect__Side" + str(iconn.block2Side) + "_Eqn" + str(equationNum2)) # FOR equatioin cpp: # first equation: parsedValues_1 = self.parse_equations(equation1, model.dimension, blockNumber, iconn.block1Side, 1, 0) # second equation: parsedValues_2 = self.parse_equations(equation2, model.dimension, blockNumber, iconn.block2Side, 0, 0) # END FOR # fill params: ic1 = Params() ic1.name = "Connection" ic1.firstIndex = srcFirstIndex ic1.secondIndex = '0' ic1.side_num = iconn.block1Side ic1.ranges = [] ic1.equationNumber = equationNum1 ic1.equation = equation1 ic1.funcName = funcName1 ic1.parsedValues = parsedValues_1 ic1.original = [e.sent for e in equation1.eqs] ic1.boundName = determineNameOfBoundary(iconn.block1Side) ic1.blockNumber = blockNumber ic2 = Params() ic2.name = "Connection" ic2.firstIndex = distFirstIndex ic2.secondIndex = '0' ic2.side_num = iconn.block2Side ic2.ranges = [] ic2.equationNumber = equationNum2 ic2.equation = equation2 ic2.funcName = funcName2 ic2.parsedValues = parsedValues_2 ic2.original = [e.sent for e in equation2.eqs] ic2.boundName = determineNameOfBoundary(iconn.block2Side) ic2.blockNumber = blockNumber return((ic1, ic2))