def collect_domain_solution(self,my_frequency_domain_solution,distributed_active_indices): self._mpi_comm.Barrier() from tools import collect_data if self.evaluation_points is None: return None active_indices = [ind for r in range(self._mpi_size) for ind in distributed_active_indices[r]] npoints = self.evaluation_points.shape[1] if self._mpi_rank == 0: global_domain_solution = _np.empty((self.component_count,npoints,len(self.wave_numbers)),dtype='complex128') for comp in range(self.component_count): global_domain_solution[comp,...] = collect_data(distributed_active_indices,my_frequency_domain_solution[comp,...], len(self.wave_numbers)) else: global_domain_solution = None for comp in range(self.component_count): collect_data(distributed_active_indices,my_frequency_domain_solution[comp,...],len(self.wave_numbers)) self._mpi_comm.Barrier() if self._mpi_rank != 0: return None else: return global_domain_solution
def collect_surface_solution(self,my_frequency_surface_solution,distributed_active_indices): self._mpi_comm.Barrier() from tools import collect_data global_surface_solution = self.number_of_spaces*[None] for n in range(self.number_of_spaces): global_surface_solution[n] = collect_data(distributed_active_indices,my_frequency_surface_solution[n],len(self.wave_numbers)) if self._mpi_rank != 0: global_surface_solution = None # only rank zero contains data now self._mpi_comm.Barrier() return global_surface_solution