PETSc keywords
About this backend
PETSc supplies distributed vectors and matrices together with scalable linear
solvers and preconditioners; its concise
architecture overview
introduces the Vec, Mat, KSP, and PC objects. Python programs
access them through the official
petsc4py API.
For eigenvalue problems, SLEPc builds on PETSc and exposes its EPS solver
through the
SLEPc eigenvalue guide
and the
slepc4py EPS API.
EDRIXS constructs distributed PETSc Mat objects, obtains low-energy
eigenpairs with SLEPc’s Krylov–Schur method, and evaluates XAS and RIXS with
distributed Lanczos and KSP solves. Importing EDRIXS does not import PETSc;
petsc4py and slepc4py are loaded only when this backend is used.
build_op and get_ops return factories labeled with
.backend == 'petsc'. Calling a factory assembles its distributed matrix;
public ed, xas, and rixs read the labels and pass the factories to
the PETSc backend. All MPI ranks in the matrix communicator must participate
in construction and solver calls. See Operator factories and solver dispatch.
Options are specific to the stage where they are supplied.
Matrix lifetime
PETSc xas and rixs accept matrix_lifetime in backend_kws:
'retain'(default) builds each required factory on first use, keeps its matrix for reuse during the calculation, and destroys it before returning.'recompute'builds a matrix for each operation and destroys it immediately afterward, rebuilding it for later uses. This reduces peak memory usage at the cost of more CPU time. This can be useful for the largest jobs.
build_op and get_ops
Option |
Default |
Description |
|---|---|---|
|
|
PETSc or mpi4py communicator used to distribute the operator. |
|
|
Assembly method: ‘row’ inserts bounded chunks by row; ‘coo’ uses bulk COO assembly with full local coordinate and value buffers. |
|
|
Discard one-body coefficients whose magnitude does not exceed this threshold. |
|
|
Discard two-body coefficients whose magnitude does not exceed this threshold. |
|
|
Nonzeros per row reserved separately for local and remote column blocks under MPI; estimated automatically when omitted. Used only by row assembly. |
|
|
PETSc matrix type selected after assembly, for example ‘aijcusparse’. |
|
|
Number of owned basis columns generated per kernel call. COO still collects all local entries before bulk insertion. |
Two matrix construction options are available. assembly_method='row' is
the default and inserts entries by row in bounded chunks.
assembly_method='coo' counts contributions in a first pass, then generates
them again into exact-sized coordinate and value arrays for bulk PETSc COO
assembly. PETSc combines duplicate coordinates and communicates remote entries.
Both options produce AIJ (CSR) matrices before optional mat_type conversion;
COO describes the assembly interface, rather than the final storage format.
Both options support the same solver lifetime policies.
COO avoids the Python row-insertion loop but requires full local entry buffers
and PETSc’s COO mappings, so compare assembly time and peak memory for your
problem. assembly_chunk_cols bounds individual kernel calls for both
methods; COO still collects all local contributions before insertion.
nnz_guess_per_row controls PETSc matrix preallocation. Leaving it unset
uses an estimate from the retained one- and two-body coefficients. With multiple
MPI ranks, the hint is applied separately to the local-column and remote-column
blocks of each rank’s matrix rows. With one rank it applies to the sequential
matrix. Larger hints reserve more memory but can avoid reallocations during
row assembly; they do not change the matrix values. COO computes its pattern
directly and ignores this hint. A
mat_type such as 'aijcusparse' can select an accelerated matrix format;
see PETSc’s matrix type overview.
ed
Pass the final model output as ed(hmat_i, shift=shift) to subtract the
filled-core shell energy from the factory-created distributed Hamiltonian before
diagonalization. Returned eigenvalues retain the original energy reference.
With a nonzero shift, eigval_tol is an absolute residual tolerance for
the shifted problem, avoiding division by a near-zero centered eigenvalue.
With shift=0, it is a relative residual tolerance, scaled by the eigenvalue
magnitude.
ED calls its factory once and destroys the matrix before returning.
matrix_lifetime is not accepted for ED.
Option |
Default |
Description |
|---|---|---|
|
|
SLEPc residual tolerance: relative when shift is zero, absolute otherwise. |
|
|
Maximum SLEPc eigensolver iterations. |
|
|
SLEPc Krylov subspace size. |
|
|
Print SLEPc convergence diagnostics on rank zero. |
The eigensolver uses SLEPc EPS with a Hermitian problem type and requests
the smallest-real eigenpairs. ncv sets the Krylov subspace size described
by EPS.setDimensions.
xas
XAS accepts matrix_lifetime in backend_kws. The default 'retain'
builds required transition components and the intermediate Hamiltonian on first
use and keeps them until calculation exit. With 'recompute', each transition
component is destroyed after its application, and the intermediate Hamiltonian
is rebuilt and destroyed for each nonzero seed’s Lanczos calculation. At most
one factory-created matrix is alive at a time in this mode. Components with
zero polarization coefficients and Hamiltonians for zero seeds are skipped.
Both policies destroy factory-created matrices before returning, including on
failure; initial-state eigenvectors remain owned by the caller.
XAS and RIXS center factory-created distributed matrices using the lowest retained initial energy and the first incident energy, which should lie near resonance. RIXS also centers the final Hamiltonian. Spectra are evaluated on these relative energies before restoring the original reference in returned pole dictionaries. Factory-created Hamiltonians are shifted in place.
Option |
Default |
Description |
|---|---|---|
|
|
Matrix lifetime: ‘retain’ builds on first use and reuses until return; ‘recompute’ rebuilds for each solver phase or transition application. |
|
|
Maximum intermediate-state Lanczos dimension. |
rixs
Option |
Default |
Description |
|---|---|---|
|
|
Matrix lifetime: ‘retain’ builds on first use and reuses until return; ‘recompute’ rebuilds for each solver phase or transition application. |
|
|
Maximum final-state Lanczos dimension. |
|
|
PETSc KSP absolute tolerance (atol); shifted_pminres defaults to rtol=0. |
|
|
Maximum PETSc KSP iterations. |
|
|
Optional native library path for shifted_pminres. |
|
|
Shifted PMINRES (PCNONE, rtol=0), or a PETSc KSP solver type. |
The default solver is shifted_pminres. linsys_tol sets KSP’s absolute
tolerance, atol, and the default relative tolerance is zero. Other KSP
types retain PETSc’s default relative tolerance unless overridden through
its options database.
EDRIXS calls KSP’s setFromOptions() after applying backend_kws.
Corresponding PETSc options-database entries, such as ksp_atol, ksp_rtol,
ksp_max_it, and ksp_type, take precedence over these settings.
ksp_type accepts a PETSc KSP type such as 'gmres'; the available
algorithms and their tradeoffs are listed in the KSP solver table.
To select GMRES instead of the default shifted PMINRES, pass:
backend_kws={'ksp_type': 'gmres', 'linsys_tol': 1e-10}