Esempio n. 1
0
  prefetch = None
  if i == 0:
    prefetch = db['reducedTimeIntegratedDofs']
  elif i == 1:
    prefetch = localFlux
  else:
    prefetch = Kernel.DummyPrefetch()
  kernels.append(Kernel.Prototype('localFlux[{}]'.format(i), localFlux, prefetch=prefetch))

for i in range(0, 4):
  for j in range(0, 4):
    for h in range(0, 3):
      neighboringFlux = db['r{}DivM'.format(i+1)] * db['fP{}'.format(h+1)] * db['rT{}'.format(j+1)] * db['reducedTimeIntegratedDofs'] * db['AminusT']
      kernels.append(Kernel.Prototype('neighboringFlux[{}]'.format(i*12+j*3+h), neighboringFlux, prefetch=db['reducedTimeIntegratedDofs']))

derivative = db['kXiDivMT'] * db['reducedDofs'] * db['AstarT'] \
           + db['kEtaDivMT'] * db['reducedDofs'] * db['BstarT'] \
           + db['kZetaDivMT'] * db['reducedDofs'] * db['CstarT']
kernels.append(Kernel.Prototype('derivative', derivative, beta=0))

source = db['mechanism'] * db['ET']
kernels.append(Kernel.Prototype('source', source))

DynamicRupture.addKernels(db, kernels, 'timeDerivative0_elastic')
Plasticity.addKernels(db, kernels)
SurfaceDisplacement.addKernels(db, kernels)

# Generate code
Tools.generate(cmdLineArgs.outputDir, db, kernels, libxsmmGenerator, architecture)

Esempio n. 2
0
volume = db['kXiDivM'] * db['timeIntegrated'] * db['AstarT'] \
       + db['kEtaDivM'] * db['timeIntegrated'] * db['BstarT'] \
       + db['kZetaDivM'] * db['timeIntegrated'] * db['CstarT'] \
       + db['timeIntegrated'] * db['source']
kernels.append(('volume', volume))

for i in range(0, 4):
  localFlux = db['fM{}'.format(i+1)] * db['timeIntegrated'] * db['AplusT']
  kernels.append(('localFlux[{}]'.format(i), localFlux))

for i in range(0, 4):
  for j in range(0, 4):
    for h in range(0, 3):
      neighboringFlux = db['fP{}{}{}'.format(i+1, j+1, h+1)] * db['timeIntegrated'] * db['AminusT']
      kernels.append(('neighboringFlux[{}]'.format(i*12+j*3+h), neighboringFlux))

for i in range(1, order):
  lastD = 'timeDerivative{}'.format(str(i-1))
  newD  = 'timeDerivative{}'.format(str(i))
  derivative = db['kXiDivMT'] * db[lastD] * db['AstarT'] \
             + db['kEtaDivMT'] * db[lastD] * db['BstarT'] \
             + db['kZetaDivMT'] * db[lastD] * db['CstarT'] \
             + db[lastD] * db['source']
  derivative.fitBlocksToSparsityPattern()
  kernels.append(('derivative[{}]'.format(i), derivative))
  db.insert(derivative.flat(newD))
  db[newD].fitBlocksToSparsityPattern()

# Generate code
Tools.generate(cmdLineArgs.outputDir, db, kernels, libxsmmGenerator, architecture)