pub struct Floquet { /* private fields */ }Expand description
One period of a piecewise-constant drive.
Implementations§
Source§impl Floquet
impl Floquet
Sourcepub fn new(steps: impl IntoIterator<Item = DriveStep>) -> Result<Self>
pub fn new(steps: impl IntoIterator<Item = DriveStep>) -> Result<Self>
Construct one period from ordered piecewise-constant drive steps.
Sourcepub fn from_callable(
steps: impl IntoIterator<Item = CallableDriveStep>,
) -> Result<Self>
pub fn from_callable( steps: impl IntoIterator<Item = CallableDriveStep>, ) -> Result<Self>
Construct one period from ordered callable drive steps.
Sourcepub fn with_evolution_options(self, options: EvolutionOptions) -> Self
pub fn with_evolution_options(self, options: EvolutionOptions) -> Self
Replace the Krylov controls used to apply each drive step.
Sourcepub fn with_period(self, period: f64) -> Result<Self>
pub fn with_period(self, period: f64) -> Result<Self>
Override the physical Floquet period used for quasienergies and the effective Hamiltonian without changing the step durations.
This supports kicked protocols whose explicit evolution intervals do not add up to the declared drive period.
Sourcepub fn apply_period(
&self,
input: &[Complex64],
output: &mut [Complex64],
) -> Result<()>
pub fn apply_period( &self, input: &[Complex64], output: &mut [Complex64], ) -> Result<()>
Apply one ordered drive period without materializing the full unitary.
Sourcepub fn apply_adjoint_period(
&self,
input: &[Complex64],
output: &mut [Complex64],
) -> Result<()>
pub fn apply_adjoint_period( &self, input: &[Complex64], output: &mut [Complex64], ) -> Result<()>
Apply the adjoint one-period propagator without materializing it.
The reverse-time action is exact for the static piecewise-constant
protocol represented by DriveStep. Callable drives currently fail
explicitly because their adjoint requires reverse-time evaluation of
the original time-dependent generator.
Sourcepub fn protocol_duration(&self) -> f64
pub fn protocol_duration(&self) -> f64
Sum of the explicit piecewise evolution intervals.
Sourcepub fn full_unitary(&self, format: MatrixFormat) -> Result<Operator>
pub fn full_unitary(&self, format: MatrixFormat) -> Result<Operator>
Materialize the complete period propagator in the requested format.
This operation scales quadratically in memory and is intended for workflows that explicitly require the full Floquet unitary.
Sourcepub fn eigensystem(&self) -> Result<FloquetEigensystem>
pub fn eigensystem(&self) -> Result<FloquetEigensystem>
Compute sorted quasienergies, unit-circle eigenvalues, vectors, and residuals.
Sourcepub fn selected_eigensystem(
&self,
options: FloquetSpectrumOptions,
) -> Result<FloquetEigensystem>
pub fn selected_eigensystem( &self, options: FloquetSpectrumOptions, ) -> Result<FloquetEigensystem>
Compute selected Floquet eigenpairs near one target quasienergy without materializing the complete period propagator.
The method solves the Hermitian phase filter
Re(exp(-i*target_phase) U) with the ordinary matrix-free eigensolver,
then diagonalizes U inside the converged candidate subspace. The
second step separates phase branches that share one cosine-filter
value.
Sourcepub fn effective_hamiltonian(&self, format: MatrixFormat) -> Result<Operator>
pub fn effective_hamiltonian(&self, format: MatrixFormat) -> Result<Operator>
Construct the principal-branch effective Hamiltonian.
Sourcepub fn spectrum(&self, format: MatrixFormat) -> Result<FloquetSpectrum>
pub fn spectrum(&self, format: MatrixFormat) -> Result<FloquetSpectrum>
Materialize one period once and compute its complete dense spectrum.
The returned object owns both products, so callers that need unitarity and quasienergy checks never need to rebuild the propagator or bring a second dense eigensolver into the workflow.
Sourcepub fn analyze(&self, format: MatrixFormat) -> Result<FloquetAnalysis>
pub fn analyze(&self, format: MatrixFormat) -> Result<FloquetAnalysis>
Compute the period propagator and all spectral products while materializing the propagator only once.
Trait Implementations§
Source§impl LinearOperator for Floquet
impl LinearOperator for Floquet
Source§fn format(&self) -> MatrixFormat
fn format(&self) -> MatrixFormat
Source§fn apply(&self, input: &[Complex64], output: &mut [Complex64]) -> Result<()>
fn apply(&self, input: &[Complex64], output: &mut [Complex64]) -> Result<()>
output = A * input. Read moreSource§fn apply_real(&self, input: &[f64], output: &mut [f64]) -> Result<()>
fn apply_real(&self, input: &[f64], output: &mut [f64]) -> Result<()>
Source§fn apply_transpose(
&self,
input: &[Complex64],
output: &mut [Complex64],
) -> Result<()>
fn apply_transpose( &self, input: &[Complex64], output: &mut [Complex64], ) -> Result<()>
Source§fn apply_adjoint(
&self,
input: &[Complex64],
output: &mut [Complex64],
) -> Result<()>
fn apply_adjoint( &self, input: &[Complex64], output: &mut [Complex64], ) -> Result<()>
Source§fn stored_triplets(&self) -> Result<Option<Vec<(usize, usize, Complex64)>>>
fn stored_triplets(&self) -> Result<Option<Vec<(usize, usize, Complex64)>>>
Source§fn shifted_solver(
&self,
_shift: f64,
) -> Result<Option<Box<dyn ShiftedLinearSolver>>>
fn shifted_solver( &self, _shift: f64, ) -> Result<Option<Box<dyn ShiftedLinearSolver>>>
(A - shift I) x = b, when supported.Auto Trait Implementations§
impl Freeze for Floquet
impl !RefUnwindSafe for Floquet
impl Send for Floquet
impl Sync for Floquet
impl Unpin for Floquet
impl UnsafeUnpin for Floquet
impl !UnwindSafe for Floquet
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<O> RuntimeAdjointLinearOperator<CpuRuntime> for Owhere
O: LinearOperator + ?Sized,
impl<O> RuntimeAdjointLinearOperator<CpuRuntime> for Owhere
O: LinearOperator + ?Sized,
Source§fn apply_adjoint_on(
&self,
_runtime: &CpuRuntime,
input: &CpuBuffer,
output: &mut CpuBuffer,
) -> Result<(), QmbedError>
fn apply_adjoint_on( &self, _runtime: &CpuRuntime, input: &CpuBuffer, output: &mut CpuBuffer, ) -> Result<(), QmbedError>
output = A† * input in runtime-owned storage.Source§impl<O> RuntimeLinearOperator<CpuRuntime> for Owhere
O: LinearOperator + ?Sized,
impl<O> RuntimeLinearOperator<CpuRuntime> for Owhere
O: LinearOperator + ?Sized,
Source§fn runtime_shape(&self) -> (usize, usize)
fn runtime_shape(&self) -> (usize, usize)
(rows, columns) in runtime coordinates.Source§fn apply_on(
&self,
_runtime: &CpuRuntime,
input: &CpuBuffer,
output: &mut CpuBuffer,
) -> Result<(), QmbedError>
fn apply_on( &self, _runtime: &CpuRuntime, input: &CpuBuffer, output: &mut CpuBuffer, ) -> Result<(), QmbedError>
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.