def set_grid_descriptor(self, qmgd): if not self.has_subsystems: return self.qm.gd = qmgd # Create quantum Poisson solver self.qm.poisson_solver = PoissonSolver( name='fd', nn=self.nn, eps=self.eps, relax=self.relax, remove_moment=self.remove_moment_qm) self.qm.poisson_solver.set_grid_descriptor(self.qm.gd) #self.qm.poisson_solver.initialize() self.qm.phi = self.qm.gd.zeros() self.qm.rho = self.qm.gd.zeros() # Set quantum grid descriptor self.qm.poisson_solver.set_grid_descriptor(qmgd) # Create classical PoissonSolver self.cl.poisson_solver = PoissonSolver( name='fd', nn=self.nn, eps=self.eps, relax=self.relax, remove_moment=self.remove_moment_cl) self.cl.poisson_solver.set_grid_descriptor(self.cl.gd) #self.cl.poisson_solver.initialize() # Initialize classical material, # its Poisson solver was generated already self.cl.poisson_solver.set_grid_descriptor(self.cl.gd) self.classical_material.initialize(self.cl.gd) self.cl.extrapolated_qm_phi = self.cl.gd.zeros() self.cl.phi = self.cl.gd.zeros() self.cl.extrapolated_qm_phi = self.cl.gd.empty() msg = self.messages.append msg('\nFDTDPoissonSolver/grid descriptors and coupler:') msg(' Domain parallelization with %i processes.' % self.cl.gd.comm.size) if self.cl.gd.comm == serial_comm: msg(' Communicator for domain parallelization: serial_comm') elif self.cl.gd.comm == world: msg(' Communicator for domain parallelization: world') elif self.cl.gd.comm == self.qm.gd.comm: msg(' Communicator for domain parallelization: dft_domain_comm') else: msg(' Communicator for domain parallelization: %s' % self.cl.gd.comm) # Initialize potential coupler if self.potential_coupling_scheme == 'Multipoles': msg('Classical-quantum coupling by multipole expansion ' + 'with maxL: %i' % (self.remove_moment_qm)) self.potential_coupler = MultipolesPotentialCoupler( qm=self.qm, cl=self.cl, index_offset_1=self.shift_indices_1, index_offset_2=self.shift_indices_2, extended_index_offset_1=self.extended_shift_indices_1, extended_index_offset_2=self.extended_shift_indices_2, extended_delta_index=self.extended_deltaIndex, num_refinements=self.num_refinements, remove_moment_qm=self.remove_moment_qm, remove_moment_cl=self.remove_moment_cl, rank=self.rank) else: msg('Classical-quantum coupling by coarsening/refining') self.potential_coupler = RefinerPotentialCoupler( qm=self.qm, cl=self.cl, index_offset_1=self.shift_indices_1, index_offset_2=self.shift_indices_2, extended_index_offset_1=self.extended_shift_indices_1, extended_index_offset_2=self.extended_shift_indices_2, extended_delta_index=self.extended_deltaIndex, num_refinements=self.num_refinements, remove_moment_qm=self.remove_moment_qm, remove_moment_cl=self.remove_moment_cl, rank=self.rank) self.phi_tot_clgd = self.cl.gd.empty() self.phi_tot_qmgd = self.qm.gd.empty()