support shifted bcf and alternative thermal method

This commit is contained in:
Valentin Boettcher 2022-06-01 17:00:08 +02:00
parent 1e47ab33d2
commit 5888082bd4

View file

@ -20,7 +20,7 @@ r"""
from dataclasses import dataclass, field from dataclasses import dataclass, field
import hopsflow import hopsflow
from numpy.typing import NDArray from numpy.typing import NDArray
from typing import Any, Optional, SupportsFloat from typing import Any, Optional, SupportsFloat, Union
import hops.util.bcf import hops.util.bcf
import hops.util.bcf_fits import hops.util.bcf_fits
import hops.core.hierarchy_parameters as params import hops.core.hierarchy_parameters as params
@ -59,6 +59,15 @@ class QubitModel(Model):
ω_c: SupportsFloat = 2 ω_c: SupportsFloat = 2
"""The cutoff frequency :math:`ω_c`.""" """The cutoff frequency :math:`ω_c`."""
ω_s: SupportsFloat = 0
"""The SD shift frequency :math:`ω_s`."""
therm_method: str = "tanhsinh"
"""
The method used for the thermal stochastic process. Either
``tanhsinh`` or ``fft``.
"""
s: SupportsFloat = 1 s: SupportsFloat = 1
"""The BCF s parameter.""" """The BCF s parameter."""
@ -180,32 +189,47 @@ class QubitModel(Model):
return [self.bcf_scale] return [self.bcf_scale]
@property @property
def bcf(self) -> hops.util.bcf.OhmicBCF_zeroTemp: def bcf(self) -> Union[hops.util.bcf.OhmicBCF_zeroTemp, hops.util.bcf.ShiftedBCF]:
""" """
The normalized zero temperature BCF. The normalized zero temperature BCF.
""" """
return hops.util.bcf.OhmicBCF_zeroTemp( bcf = hops.util.bcf.OhmicBCF_zeroTemp(
s=self.s, eta=1, w_c=self.ω_c, normed=False s=self.s, eta=1, w_c=self.ω_c, normed=False
) )
if float(self.ω_s) > 0:
return hops.util.bcf.ShiftedBCF(bcf, float(self.ω_s))
return bcf
@property @property
def spectral_density(self) -> hops.util.bcf.OhmicSD_zeroTemp: def spectral_density(
self,
) -> Union[hops.util.bcf.OhmicSD_zeroTemp, hops.util.bcf.ShiftedSD]:
""" """
The normalized zero temperature spectral density. The normalized zero temperature spectral density.
""" """
return hops.util.bcf.OhmicSD_zeroTemp( sd = hops.util.bcf.OhmicSD_zeroTemp(
s=float(self.s), s=float(self.s),
w_c=float(self.ω_c), w_c=float(self.ω_c),
eta=1, eta=1,
normed=False, normed=False,
) )
if float(self.ω_s) > 0:
return hops.util.bcf.ShiftedSD(sd, float(self.ω_s))
return sd
@property @property
def thermal_correlations( def thermal_correlations(
self, self,
) -> Optional[hops.util.bcf.Ohmic_StochasticPotentialCorrelations]: ) -> Union[
Optional[hops.util.bcf.Ohmic_StochasticPotentialCorrelations],
hops.util.bcf.ShiftedBCF,
]:
""" """
The normalized thermal noise corellation function. The normalized thermal noise corellation function.
""" """
@ -219,6 +243,7 @@ class QubitModel(Model):
w_c=self.ω_c, w_c=self.ω_c,
normed=False, normed=False,
beta=1 / float(self.T), beta=1 / float(self.T),
shift=float(self.ω_s),
) )
@property @property
@ -238,6 +263,7 @@ class QubitModel(Model):
w_c=self.ω_c, w_c=self.ω_c,
normed=False, normed=False,
beta=1.0 / float(self.T), beta=1.0 / float(self.T),
shift=float(self.ω_s),
) )
def bcf_coefficients( def bcf_coefficients(
@ -281,7 +307,9 @@ class QubitModel(Model):
if self.T == 0: if self.T == 0:
return None return None
return sp.StocProc_TanhSinh( return (
sp.StocProc_TanhSinh if self.therm_method == "tanhsins" else sp.StocProc_FFT
)(
spectral_density=self.thermal_spectral_density, spectral_density=self.thermal_spectral_density,
alpha=self.thermal_correlations, alpha=self.thermal_correlations,
t_max=self.t.max(), t_max=self.t.max(),