Abstract

The purpose of this research is to design a faster implementation of an algorithm to generate 3D spatially variant lattices (SVL) and improve its performance when it is running on a parallel computer system. The algorithm is used to synthesize a SVL for a periodic structure. The algorithm has the ability to spatially vary the unit cell, the orientation of the unit cells, lattice spacing, fill fraction, material composition, and lattice symmetry. The algorithm produces a lattice that is smooth, continuous and free of defects. The lattice spacing remains strikingly uniform even when the lattice is spatially varied. This is important for maintaining consistent properties throughout the lattice. Periodic structures like photonic crystals or metamaterial devices can be enhanced using the spatially variant algorithm, thus unlocking new physical mechanisms. Our current effort is to write a portable computer program for parallel architectures. To develop and write the code, we pick a general purpose programming language that supports structured programming. For the parallel code, we use the FFTW (Fastest Fourier Transform in the West) for handling the Fourier transform of the unit cell device and PETSc (Portable, Extensible Toolkit for Scientific Computation) for handling the numerical linear algebra operations. Using Message Passing Interface (MPI) for distributed memory helps us to improve the performance of the code that generates 3D SVL when it is executed on a parallel system. We study the efficiency and scalability of the SVL code on the two architectures on Stampede2 (KNL and SKX). A scalable code can handle proportionally very small to large tasks of computational operations. To scale the SVL code, we use isoefficiency analysis to proportionally increase the problem size and resources to study the scalability of the SVL code. This type of analysis is important to understand the performance of the SVL code when it is executed on a supercomputer and find the best way to maximize its performance. Our future work consists of improving the efficiency and scalability by reducing the overload performance of communication overhead. Moving data limited the performance achievement of the SVL code. Improving the scalability as the problem size and the number of processors grow is an essential factor in getting a better performance of the SVL code.