Floquet Model Construction With nrginit
The Mathematica initializer builds a finite one-frequency Floquet factor and appends it to the model basis. The model owns the drive Hamiltonian and the mode operators exported to the runtime.
Configuration
A Floquet initialization supplies the mode cutoff, angular frequency, runtime switch, and mode operator:
[extra]
Omega=0.234
[param]
model=model.m
symtype=SPU1
floquet=true
options=Ncut=1
ops=m
diagratio=1
Ncut is a non-negative decimal integer. Omega must round to a finite,
positive C++ double; a positive input that rounds to zero is rejected. The
same param file is read by the initializer and the C++ runtime.
Omega uses decimal-literal syntax and does not accept the initializer's
!expression extension.
Floquet Basis
floquetbasis[Ncut] returns
transformtoFL[basis,{Ncut}] forms the tensor-product basis. Existing invariant
labels are unchanged, and the Floquet index is appended as the final ket and bra
coordinate. Floquet extension is the last built-in basis stage, so spin,
orbital, and phonon factors precede it. A hook_basis implementation receives
the completed non-Floquet basis; the initializer applies the Floquet factor
after the hook, so hook-provided auxiliary coordinates also precede it. The
hook must leave bvc as a canonical occupation-vector basis: occupation
entries must remain valid, states must be nonzero, and auxiliary factors must
form one consolidated ket without unresolved Null coordinates.
The initializer sets the global lowercase symbol ncut from the exact option
token Ncut=.... A model that participates in this basis extension sets
MAKEFLOQUET = 1.
Mode-Space Operators
The built-in constructors are:
| Mathematica expression | Operator |
|---|---|
floquetid[Ncut] |
(I_F=\sum_m |
floquetnumber[Ncut] |
(\hat M=\sum_m m |
floquetshift[k,Ncut] |
(S_k=\sum_m |
floquetplus[Ncut] |
\(S_1\) |
floquetminus[Ncut] |
\(S_{-1}=S_1^\dagger\) |
floquetcos[Ncut] |
\(S_1+S_{-1}\) |
floquetlift[op,k,Ncut] |
\(op\otimes S_k\) |
These helpers resolve against the state on which they act and preserve all ket coordinates preceding the final Floquet coordinate. This makes the mode number, identity, and shifts independent of the number of earlier tensor factors.
For Fourier components \(H_k\), the finite Sambe Hamiltonian has the form
floquetcos contains the sum of the two shifts and no factor of \(1/2\). Thus a
term \(A O\cos(\Omega t)\) contributes
floquetlift[op,k,Ncut] is the direct construction for a Fourier component.
For a static operator that itself contains auxiliary ket/bra factors, use
floquetlift[op,0,Ncut] to extend it over the Floquet identity. Fermionic-only
static terms already preserve a trailing auxiliary ket during application.
Three-Mode Example
For Ncut=1, in the ordered basis \((|-1\rangle,|0\rangle,|1\rangle)\),
Its eigenvalues are
This matrix is also the analytic case used by the Floquet primitive regression test.
Custom Model File
A model can define the finite-space terms directly:
MAKEFLOQUET = 1;
snegrealconstants[g, Omega];
Hfl = g floquetlift[number[d[]], 1, ncut] +
g floquetlift[number[d[]], -1, ncut] +
Omega floquetnumber[ncut];
opm = floquetnumber[ncut];
opm2 = pow[opm, 2];
H = H0 + Hc + H1 + Hfl;
Here g is the coefficient of each of the two nearest-mode shifts. Static model
terms act diagonally in the appended mode coordinate.
Mode Operator Export
The runtime truncation path reads exactly one even-parity singlet declaration
named m. A modeloperators.m file can export the model-owned definitions as:
Module[{t = {}},
t = Join[t, mtSingletOp["m", opm]];
t = Join[t, mtSingletOp["m^2", opm2]];
t
]
m^2 is an optional observable and is not used to form the truncation
criterion. The generated m declaration contains one Hermitian diagonal block
for every seed invariant sector. The runtime obtains the allowed mode interval
from the spectrum of those seed blocks.
The repository example is in
test/nrginit+nrgrun/floquet_spu1/, including its param, model.m, and
modeloperators.m files.