  We present a code modularization approach to design efficient and massively
parallel cubic and linear-scaling solvers for electronic structure calculations
using atomic orbitals. The modular implementation of the orbital minimization
method, in which linear algebra and parallelization issues are handled via
external libraries, is demonstrated in the SIESTA code. The DBCSR and ScaLAPACK
libraries are used for algebraic operations with sparse and dense matrices,
respectively. The MatrixSwitch and libOMM libraries, recently developed within
the Electronic Structure Library, facilitate switching between different matrix
formats and implement the energy minimization. We show results comparing the
performance of several cubic-scaling algorithms, and also demonstrate the
parallel performance of the linear-scaling solvers, and their supremacy over
the cubic-scaling solvers for insulating systems with sizes of several hundreds
of atoms.
