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)
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)