def _compute_intensity(self, tau, Te, bpar, omega1, sigma1, kappa1, bperp2): # Bad hack, but we get NaNs if we don't do something like this small_beta = np.abs(bpar) < 1.0e-20 bpar[small_beta] = 1.0e-20 comm = communication_system.communicators[-1] nx, ny = self.nx, self.nx signal = np.zeros((self.num_freqs, nx, ny)) xo = np.zeros(self.num_freqs) k = int(0) start_i = comm.rank * nx // comm.size end_i = (comm.rank + 1) * nx // comm.size pbar = get_pbar("Computing SZ signal.", nx * nx) for i in range(start_i, end_i): for j in range(ny): xo[:] = self.xinit[:] SZpack.compute_combo_means(xo, tau[i, j], Te[i, j], bpar[i, j], omega1[i, j], sigma1[i, j], kappa1[i, j], bperp2[i, j]) signal[:, i, j] = xo[:] pbar.update(k) k += 1 signal = comm.mpi_allreduce(signal) pbar.finish() for i, field in enumerate(self.freq_fields): self.data[field] = I0 * self.xinit[i]**3 * signal[i, :, :] self.data["Tau"] = self.ds.arr(tau, "dimensionless") self.data["TeSZ"] = self.ds.arr(Te, "keV")
def _compute_intensity(self, tau, Te, bpar, omega1, sigma1, kappa1, bperp2): # Bad hack, but we get NaNs if we don't do something like this small_beta = np.abs(bpar) < 1.0e-20 bpar[small_beta] = 1.0e-20 comm = communication_system.communicators[-1] nx, ny = self.nx,self.nx signal = np.zeros((self.num_freqs,nx,ny)) xo = np.zeros(self.num_freqs) k = int(0) start_i = comm.rank*nx//comm.size end_i = (comm.rank+1)*nx//comm.size pbar = get_pbar("Computing SZ signal.", nx*nx) for i in range(start_i, end_i): for j in range(ny): xo[:] = self.xinit[:] SZpack.compute_combo_means(xo, tau[i,j], Te[i,j], bpar[i,j], omega1[i,j], sigma1[i,j], kappa1[i,j], bperp2[i,j]) signal[:,i,j] = xo[:] pbar.update(k) k += 1 signal = comm.mpi_allreduce(signal) pbar.finish() for i, field in enumerate(self.freq_fields): self.data[field] = I0*self.xinit[i]**3*signal[i,:,:] self.data["Tau"] = self.ds.arr(tau, "dimensionless") self.data["TeSZ"] = self.ds.arr(Te, "keV")
def full_szpack3d(ds, xo): data = ds.index.grids[0] dz = ds.index.get_smallest_dx().in_units("cm") nx,ny,nz = data["density"].shape dn = np.zeros((nx,ny,nz)) Dtau = np.array(sigma_thompson*data["density"]/(mh*mue)*dz) Te = data["kT"].ndarray_view() betac = np.array(data["velocity_z"]/clight) pbar = get_pbar("Computing 3-D cell-by-cell S-Z signal for comparison.", nx) for i in range(nx): pbar.update(i) for j in range(ny): for k in range(nz): dn[i,j,k] = SZpack.compute_3d(xo, Dtau[i,j,k], Te[i,j,k], betac[i,j,k], 1.0, 0.0, 0.0, 1.0e-5) pbar.finish() return np.array(I0*xo**3*np.sum(dn, axis=2))