def propagate_full(self, rho_hierarchy, t_init, t_final, dt): integrator = Integrator('ODE', dt, deriv_fn=self.heom_deriv) integrator.set_initial_value(rho_hierarchy, t_init) rhos_site = list() times = np.arange(t_init, t_final, dt) for time in times: rhos_site.append(integrator.y.copy()) integrator.integrate() # TODO(TCB): If filtering, check if we can remove any ADMs return times, np.array(rhos_site)
def propagate_full(self, rho_0, t_init, t_final, dt, markov_tol=1e-3, markov_time=np.inf, is_verbose=False): self.markov_tol = markov_tol self.markov_time = markov_time times = np.arange(t_init, t_final, dt) rho_eig = self.ham.site2eig(rho_0) integrator = Integrator(self.diffeq_type, dt, Omega=self.Omega, R=self.R, K=self.K) if self.method == 'TCL2': if not hasattr(self, 'redfield_tensor_n'): self.precompute_redfield_tensor(t_init, t_final, dt) elif len(self.redfield_tensor_n) < int((t_final - t_init) / dt): self.precompute_redfield_tensor(t_init, t_final, dt) if self.method == 'TC2': self.precompute_redfield_tensor(t_init, t_final, dt) #self.precompute_redfield_tensor_finegrid(t_init, t_final, dt, # integrator) integrator.set_initial_value(utils.to_liouville(rho_eig), t_init) rhos_site = [] for time in times: # Retrieve data from integrator rho_eig = utils.from_liouville(integrator.y) # Collect results rho_site = self.ham.eig2site(rho_eig) rhos_site.append(rho_site) # Propagate one timestep integrator.integrate() if is_verbose: print("\n--- Finished performing RDM dynamics") return times, rhos_site
def propagate_full(self, rho_bath, t_init, t_final, dt): times = np.arange(t_init, t_final, dt) def deriv_fn(t, y): return self.deriv(t, y) rho_0, q, p = self.unpack(rho_bath) rho_int_0 = self.ham.to_interaction(self.ham.site2eig(rho_0), t_init) integrator = Integrator('ODE', dt, deriv_fn=deriv_fn) integrator.set_initial_value(self.pack(rho_int_0, q, p), t_init) rho_bath_traj = list() for time in times: rho_int_t, qt, pt = self.unpack(np.array(integrator.y)) rho_t = self.ham.eig2site( self.ham.from_interaction(rho_int_t, time)) rho_bath_traj.append(self.pack(rho_t, qt, pt)) integrator.integrate() return times, np.array(rho_bath_traj)