def get_dens_on_grid(self, Nko=0): """ Calculate the species density on the grid (used by diagnostics) Parameters ---------- Nko: int number of azimuthal modes to be used Returns ---------- dens: ndarray with dtype=np.complex species density on the grid (angular Fourier decomposition) Comments -------- wrapper for the OMP-vectorized Fortran subroutines """ VGrid = 2 * np.pi * self.Args['dx'] * self.Args['dr'] * self.Args[ 'Rgrid'] VGrid = (VGrid + (self.Args['Rgrid'] == 0))**-1 * (self.Args['Rgrid'] > 0.0) dens = np.zeros((self.Args['Nx'],self.Args['Nr'],Nko+1),\ dtype='complex',order='F') dens = chimera.dep_dens(self.Data['coords'],self.Data['weights'],\ dens,self.Args['leftX'],self.Args['Rgrid'],1./self.Args['dx'],\ 1/self.Args['dr'])*VGrid[None,:,None] return dens
def dep_bg(self, solver): solver.Data['BckGrndRho'][:] = 0.0 for species in self.Particles: if species.Data['coords'].shape[1]==0 \ or 'Still' not in species.Args['Features']: continue if 'KxShift' in solver.Args: if 'Xchunked' in species.Args: solver.Data['BckGrndRho'] = chimera.dep_dens_env_chnk(\ species.Data['coords'],species.Data['weights'],\ solver.Data['BckGrndRho'],species.chunks,\ species.Args['Xchunked'][1],solver.Args['leftX'],\ *solver.Args['DepProj']) else: solver.Data['BckGrndRho'] = chimera.dep_dens_env(\ species.Data['coords'],species.Data['weights'],\ solver.Data['BckGrndRho'], solver.Args['leftX'],\ *solver.Args['DepProj']) else: if 'Xchunked' in species.Args: solver.Data['BckGrndRho'] = chimera.dep_dens_chnk(\ species.Data['coords'],species.Data['weights'],\ solver.Data['BckGrndRho'],species.chunks,\ species.Args['Xchunked'][1],solver.Args['leftX'],\ *solver.Args['DepProj']) else: solver.Data['BckGrndRho'] = chimera.dep_dens(\ species.Data['coords'],species.Data['weights'],\ solver.Data['BckGrndRho'],solver.Args['leftX'],\ *solver.Args['DepProj'])
def get_dens_on_grid(self, Nko=0): VGrid = 2 * np.pi * self.Args['dx'] * self.Args['dr'] * self.Args[ 'Rgrid'] VGrid = (VGrid + (self.Args['Rgrid'] == 0))**-1 * (self.Args['Rgrid'] > 0.0) dens = np.zeros((self.Args['Nx'], self.Args['Nr'], Nko + 1), dtype='complex', order='F') dens = chimera.dep_dens(self.Data['coords'],self.Data['weights'],dens,self.Args['leftX'],self.Args['Rgrid'],\ 1./self.Args['dx'],1/self.Args['dr'])*VGrid[None,:,None] return dens
def dep_dens(self, solver, component='coords'): solver.Data['Rho'][:] = 0.0 if 'StaticKick' in solver.Args['Features']: component = 'coords_halfstep' if 'StillAsBackground' in solver.Args['Features']: solver.Data['Rho'] += solver.Data['BckGrndRho'] for species in self.Particles: if species.Data[component].shape[1] == 0 \ or 'Still' in species.Args['Features']: continue if 'KxShift' in solver.Args: if 'Xchunked' in species.Args: solver.Data['Rho'] = chimera.dep_dens_env_chnk(\ species.Data[component],species.Data['weights'],\ solver.Data['Rho'],species.chunks,\ species.Args['Xchunked'][1],solver.Args['leftX'],\ *solver.Args['DepProj']) else: solver.Data['Rho'] = chimera.dep_dens_env(\ species.Data[component],species.Data['weights'],\ solver.Data['Rho'],solver.Args['leftX'],\ *solver.Args['DepProj']) else: if 'Xchunked' in species.Args: solver.Data['Rho'] = chimera.dep_dens_chnk(\ species.Data[component],species.Data['weights'],\ solver.Data['Rho'],species.chunks,\ species.Args['Xchunked'][1],solver.Args['leftX'],\ *solver.Args['DepProj']) else: solver.Data['Rho'] = chimera.dep_dens(\ species.Data[component],species.Data['weights'],\ solver.Data['Rho'],solver.Args['leftX'],\ *solver.Args['DepProj'])