Esempio n. 1
0
def getGlobalMatrices(order, arch):
  architecture = Arch.getArchitectureByIdentifier(arch)

  configs = {
    'kXiDivM': [ True ],
    'kEtaDivM': [ True ],
    'kZetaDivM': [ True ],
    'kXiDivMT': [ True ],
    'kEtaDivMT': [ True ],
    'kZetaDivMT': [ True ],
    'fM1': [ True ],
    'fM2': [ True ],
    'fP111': [ True ],
    'fP112': [ True ],
    'fP113': [ True ],
    'fP121': [ True ],
    'fP211': [ True ],
    'fP222': [ True ]
  }

  stiffnessMatrices = ['kXiDivM', 'kEtaDivM', 'kZetaDivM']
  transposedStiffnessBlocks = list()
  for o in range(2, order+1):
    stoprow = Tools.alignedNumberOfBasisFunctions(o-1, architecture)
    startcol = Tools.numberOfBasisFunctions(o-1)
    stopcol = Tools.numberOfBasisFunctions(o)
    transposedStiffnessBlocks.append((0, stoprow, startcol, stopcol))
  if len(transposedStiffnessBlocks) >= 2:
    # merge first two blocks
    block1 = transposedStiffnessBlocks.pop(0)
    block2 = transposedStiffnessBlocks.pop(0)
    mergedBlock = ( min(block1[0], block2[0]),
                    max(block1[1], block2[1]),
                    min(block1[2], block2[2]),
                    max(block1[3], block2[3]) )
    transposedStiffnessBlocks.insert(0, mergedBlock)

  stiffnessBlocks = [(block[2], block[3], block[0], block[1]) for block in transposedStiffnessBlocks]
  noMemsetStiffnessBlocks = list()
  for i, block in enumerate(stiffnessBlocks):
    startrow = noMemsetStiffnessBlocks[i-1][1] if i > 0 else block[0]
    stoprow = architecture.getAlignedIndex(block[1])
    noMemsetStiffnessBlocks.append( (startrow, stoprow, block[2], block[3]) )

  for matrix in stiffnessMatrices:
    configs[matrix].append(stiffnessBlocks)
    configs[matrix].append(noMemsetStiffnessBlocks)
    configs[matrix + 'T'].append(transposedStiffnessBlocks)
    
  return configs
Esempio n. 2
0
def getGlobalMatrices(order, arch):
    architecture = Arch.getArchitectureByIdentifier(arch)

    configs = {
        'kXiDivM': [True],
        'kEtaDivM': [True],
        'kZetaDivM': [True],
        'kXiDivMT': [True],
        'kEtaDivMT': [True],
        'kZetaDivMT': [True],
        'fM1': [True],
        'fM2': [True],
        'fP111': [True],
        'fP112': [True],
        'fP113': [True],
        'fP121': [True],
        'fP211': [True],
        'fP222': [True]
    }

    stiffnessMatrices = ['kXiDivM', 'kEtaDivM', 'kZetaDivM']
    transposedStiffnessBlocks = list()
    for o in range(2, order + 1):
        stoprow = Tools.alignedNumberOfBasisFunctions(o - 1, architecture)
        startcol = Tools.numberOfBasisFunctions(o - 1)
        stopcol = Tools.numberOfBasisFunctions(o)
        transposedStiffnessBlocks.append((0, stoprow, startcol, stopcol))
    if len(transposedStiffnessBlocks) >= 2:
        # merge first two blocks
        block1 = transposedStiffnessBlocks.pop(0)
        block2 = transposedStiffnessBlocks.pop(0)
        mergedBlock = (min(block1[0], block2[0]), max(block1[1], block2[1]),
                       min(block1[2], block2[2]), max(block1[3], block2[3]))
        transposedStiffnessBlocks.insert(0, mergedBlock)

    stiffnessBlocks = [(block[2], block[3], block[0], block[1])
                       for block in transposedStiffnessBlocks]
    noMemsetStiffnessBlocks = list()
    for i, block in enumerate(stiffnessBlocks):
        startrow = noMemsetStiffnessBlocks[i - 1][1] if i > 0 else block[0]
        stoprow = architecture.getAlignedIndex(block[1])
        noMemsetStiffnessBlocks.append((startrow, stoprow, block[2], block[3]))

    for matrix in stiffnessMatrices:
        configs[matrix].append(stiffnessBlocks)
        configs[matrix].append(noMemsetStiffnessBlocks)
        configs[matrix + 'T'].append(transposedStiffnessBlocks)

    return configs