Skip to content

Commit 3fda3bd

Browse files
committed
Python sets up the standard Hamiltonian only if needed.
The standard Hamiltonian model is only needed in python if either the time step size dT or the carrier wave frequencies are not specified by the user, and hence need to be computed based on the system Hamiltonian.
1 parent 4b9be8d commit 3fda3bd

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

quandary.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,7 @@ def __post_init__(self):
199199
self.initctrl_MHz = [10.0 for _ in range(len(self.Ne))]
200200
if len(self.Hsys) > 0 and not self.standardmodel: # User-provided Hamiltonian operators
201201
self.standardmodel=False
202-
else: # Using standard Hamiltonian model
203-
Ntot = [sum(x) for x in zip(self.Ne, self.Ng)]
204-
self.Hsys, self.Hc_re, self.Hc_im = hamiltonians(N=Ntot, freq01=self.freq01, selfkerr=self.selfkerr, crosskerr=self.crosskerr, Jkl=self.Jkl, rotfreq=self.rotfreq, verbose=self.verbose)
202+
else: # Using standard Hamiltonian model. Set it up in python only if needed, i.e. only if dT or the carrier wave frequencies need to be computed.
205203
self.standardmodel=True
206204
if len(self.targetstate) > 0:
207205
self.optim_target = "file"
@@ -226,6 +224,9 @@ def __post_init__(self):
226224

227225
# Estimate the number of required time steps
228226
if self.dT < 0:
227+
if self.standardmodel==True: # set up the standard Hamiltonian first
228+
Ntot = [sum(x) for x in zip(self.Ne, self.Ng)]
229+
self.Hsys, self.Hc_re, self.Hc_im = hamiltonians(N=Ntot, freq01=self.freq01, selfkerr=self.selfkerr, crosskerr=self.crosskerr, Jkl=self.Jkl, rotfreq=self.rotfreq, verbose=self.verbose)
229230
self.nsteps = estimate_timesteps(T=self.T, Hsys=self.Hsys, Hc_re=self.Hc_re, Hc_im=self.Hc_im, maxctrl_MHz=self.maxctrl_MHz, Pmin=self.Pmin)
230231
self.dT = self.T/self.nsteps
231232
else:
@@ -250,6 +251,10 @@ def __post_init__(self):
250251
if self.spline_order == 0 and len(self.carrier_frequency) == 0:
251252
self.carrier_frequency = [[0.0] for _ in range(len(self.freq01))]
252253
if len(self.carrier_frequency) == 0:
254+
# set up the standard Hamiltonian first, if needed
255+
if self.standardmodel==True and len(self.Hsys<=0):
256+
Ntot = [sum(x) for x in zip(self.Ne, self.Ng)]
257+
self.Hsys, self.Hc_re, self.Hc_im = hamiltonians(N=Ntot, freq01=self.freq01, selfkerr=self.selfkerr, crosskerr=self.crosskerr, Jkl=self.Jkl, rotfreq=self.rotfreq, verbose=self.verbose)
253258
self.carrier_frequency, _ = get_resonances(Ne=self.Ne, Ng=self.Ng, Hsys=self.Hsys, Hc_re=self.Hc_re, Hc_im=self.Hc_im, rotfreq=self.rotfreq, verbose=self.verbose, cw_amp_thres=self.cw_amp_thres, cw_prox_thres=self.cw_prox_thres, stdmodel=self.standardmodel)
254259

255260
if self.verbose:

0 commit comments

Comments
 (0)