A structure of arrays stores each property in its own contiguous array. FDTD OpenMP uses this arrangement for the electric and magnetic fields:
Fdtd_FloatType *ff_hy; Fdtd_FloatType *ff_ez;
The value ff_ez[k] is the electric field at index k, while ff_hy[k] belongs to the staggered magnetic position. The material and coefficient structures follow the same pattern, with a separate array for each quantity.
During a magnetic update, the kernel walks through Hy, neighboring Ez values, and the two magnetic coefficient arrays. These accesses advance through contiguous memory. The electric update similarly traverses its required arrays, without loading every material property associated with each cell.
This layout supports cache locality and gives the compiler regular loops to optimize. It also keeps the shared arrays accessible to every OpenMP thread. Their arrangement does not itself prevent races; correctness still depends on assigning distinct destinations and synchronizing the field-update phases.