def runTest(self): nx, ny, nz, str_f, pt0, pt1, is_array, mpi_type = self.args slices = common.slice_index_two_points(pt0, pt1) # generate random source if is_array: shape = common.shape_two_points(pt0, pt1) value = np.random.rand(*shape).astype(np.float32) else: value = np.random.ranf() # instance fields = Fields(nx, ny, nz, '', 'single', 0, mpi_type=mpi_type) tfunc = lambda tstep: np.sin(0.03*tstep) incident = DirectIncident(fields, str_f, pt0, pt1, tfunc, value) # host allocations eh = np.zeros(fields.ns_pitch, dtype=fields.dtype) getf = GetFields(fields, str_f, pt0, pt1) # verify eh[slices] = fields.dtype(value) * fields.dtype(tfunc(1)) fields.update_e() fields.update_h() fields.enqueue_barrier() original = eh[slices] getf.get_event().wait() copy = getf.get_fields() norm = np.linalg.norm(original - copy) self.assertEqual(norm, 0, '%s, %g' % (self.args, norm))
def runTest(self): nx, ny, nz, str_f, pt0, pt1, is_array, mpi_type = self.args slices = common.slice_index_two_points(pt0, pt1) # generate random source if is_array: shape = common.shape_two_points(pt0, pt1) value = np.random.rand(*shape).astype(np.float32) else: value = np.random.ranf() # instance fields = Fields(nx, ny, nz, '', 'single', 0, mpi_type=mpi_type) tfunc = lambda tstep: np.sin(0.03 * tstep) incident = DirectIncident(fields, str_f, pt0, pt1, tfunc, value) # host allocations eh = np.zeros(fields.ns_pitch, dtype=fields.dtype) getf = GetFields(fields, str_f, pt0, pt1) # verify eh[slices] = fields.dtype(value) * fields.dtype(tfunc(1)) fields.update_e() fields.update_h() fields.enqueue_barrier() original = eh[slices] getf.get_event().wait() copy = getf.get_fields() norm = np.linalg.norm(original - copy) self.assertEqual(norm, 0, '%s, %g' % (self.args, norm))
def runTest(self): ufunc, nx, ny, nz, coeff_use, precision_float, use_cpu_core, split, tmax = self.args fields = Fields(nx, ny, nz, coeff_use, precision_float, use_cpu_core) core = Core(fields) strf_list = ['ex', 'ey', 'ez', 'hx', 'hy', 'hz'] slice_xyz = [slice(None, None), slice(None, None), fields.slice_z] # allocations ns = fields.ns dtype = fields.dtype ehs = common_update.generate_random_ehs(nx, ny, nz, dtype, ufunc) fields.set_ehs(*ehs) ces, chs = common_update.generate_random_cs(coeff_use, nx, ny, nz, dtype) if 'e' in coeff_use: fields.set_ces(*ces) if 'h' in coeff_use: fields.set_chs(*chs) # update if ufunc == 'e': for tstep in xrange(0, tmax): fields.update_e() common_update.update_e(ehs, ces) fields.enqueue_barrier() for strf, eh in zip(strf_list, ehs)[:3]: norm = np.linalg.norm(eh - fields.get(strf)[slice_xyz]) max_diff = np.abs(eh - fields.get(strf)[slice_xyz]).max() self.assertEqual(norm, 0, '%s, %s, %g, %g' % (self.args, strf, norm, max_diff) ) if fields.pad != 0: if strf == 'ez': norm2 = np.linalg.norm(fields.get(strf)[:,:,-fields.pad:]) else: norm2 = np.linalg.norm(fields.get(strf)[:,:,-fields.pad-1:]) self.assertEqual(norm2, 0, '%s, %s, %g, padding' % (self.args, strf, norm2) ) elif ufunc == 'h': for tstep in xrange(0, tmax): fields.update_h() common_update.update_h(ehs, chs) fields.enqueue_barrier() for strf, eh in zip(strf_list, ehs)[3:]: norm = np.linalg.norm(eh - fields.get(strf)[slice_xyz]) max_diff = np.abs(eh - fields.get(strf)[slice_xyz]).max() self.assertEqual(norm, 0, '%s, %s, %g, %g' % \ (self.args, strf, norm, max_diff) ) if fields.pad != 0: if strf == 'hz': norm2 = np.linalg.norm(fields.get(strf)[:,:,-fields.pad:]) else: norm2 = np.linalg.norm(fields.get(strf)[:,:,-fields.pad:]) self.assertEqual(norm2, 0, '%s, %s, %g, padding' % (self.args, strf, norm2) )
def test(self): nx, ny, nz = 40, 50, 60 tmax = 10 # buffer instance if rank == 0: fields = Fields(10, ny, nz, mpi_type='x+') exmpi = ExchangeMpi(fields, 1, tmax) elif rank == 1: fields = Fields(3, ny, nz, mpi_type='x-') exmpi = ExchangeMpi(fields, 0, tmax) # generate random source nx, ny, nz = fields.ns ehs = common_update.generate_random_ehs(nx, ny, nz, fields.dtype) fields.set_ehs(*ehs) # verify for tstep in xrange(1, tmax + 1): fields.update_e() fields.update_h() getf_dict = {} if rank == 0: getf_dict['e'] = GetFields(fields, ['ey', 'ez'], \ (nx-1, 0, 0), (nx-1, ny-2, nz-2)) getf_dict['h'] = GetFields(fields, ['hy', 'hz'], \ (1, 1, 1), (1, ny-1, nz-1)) for eh in ['e', 'h']: getf = getf_dict[eh] getf.get_event().wait() g0 = getf.get_fields() g1 = np.zeros_like(g0) comm.Recv(g1, 1, tag=10) norm = np.linalg.norm(g0 - g1) self.assertEqual(norm, 0, '%g, %s, %s' % (norm, 'x', 'e')) elif rank == 1: getf_dict['e'] = GetFields(fields, ['ey', 'ez'], \ (nx-2, 0, 0), (nx-2, ny-2, nz-2)) getf_dict['h'] = GetFields(fields, ['hy', 'hz'], \ (0, 1, 1), (0, ny-1, nz-1)) for eh in ['e', 'h']: getf = getf_dict[eh] getf.get_event().wait() comm.Send(getf.get_fields(), 0, tag=10)
def test(self): nx, ny, nz = 40, 50, 60 tmax = 10 # buffer instance if rank == 0: fields = Fields(10, ny, nz, mpi_type="x+") exmpi = ExchangeMpi(fields, 1, tmax) elif rank == 1: fields = Fields(3, ny, nz, mpi_type="x-") exmpi = ExchangeMpi(fields, 0, tmax) # generate random source nx, ny, nz = fields.ns ehs = common_update.generate_random_ehs(nx, ny, nz, fields.dtype) fields.set_ehs(*ehs) # verify for tstep in xrange(1, tmax + 1): fields.update_e() fields.update_h() getf_dict = {} if rank == 0: getf_dict["e"] = GetFields(fields, ["ey", "ez"], (nx - 1, 0, 0), (nx - 1, ny - 2, nz - 2)) getf_dict["h"] = GetFields(fields, ["hy", "hz"], (1, 1, 1), (1, ny - 1, nz - 1)) for eh in ["e", "h"]: getf = getf_dict[eh] getf.get_event().wait() g0 = getf.get_fields() g1 = np.zeros_like(g0) comm.Recv(g1, 1, tag=10) norm = np.linalg.norm(g0 - g1) self.assertEqual(norm, 0, "%g, %s, %s" % (norm, "x", "e")) elif rank == 1: getf_dict["e"] = GetFields(fields, ["ey", "ez"], (nx - 2, 0, 0), (nx - 2, ny - 2, nz - 2)) getf_dict["h"] = GetFields(fields, ["hy", "hz"], (0, 1, 1), (0, ny - 1, nz - 1)) for eh in ["e", "h"]: getf = getf_dict[eh] getf.get_event().wait() comm.Send(getf.get_fields(), 0, tag=10)
imag = plt.imshow(np.zeros((nx, ny), fields.dtype).T, interpolation='nearest', origin='lower', vmin=-1.1, vmax=1.1) plt.colorbar() ''' # main loop from datetime import datetime from time import time t0 = datetime.now() t00 = time() gtmp = GetFields(fields, 'ez', (0, 0, 0), (0, 0, 0)) gtmp2 = GetFields(fields2, 'ez', (0, 0, 0), (0, 0, 0)) for tstep in xrange(1, tmax+1): fields.update_e() fields2.update_e() fields.update_h() fields2.update_h() ''' if tstep % tgap == 0: print('[%s] %d/%d (%d %%)\r' % (datetime.now() - t0, tstep, tmax, float(tstep)/tmax*100)), sys.stdout.flush() getf.get_event().wait() imag.set_array( getf.get_fields().T ) #plt.savefig('./png/%.6d.png' % tstep) plt.draw() ''' #plt.show() gtmp.get_event().wait()
def runTest(self): ufunc, nx, ny, nz, coeff_use, precision_float, use_cpu_core, split, tmax = self.args fields = Fields(nx, ny, nz, coeff_use, precision_float, use_cpu_core) core = Core(fields) strf_list = ['ex', 'ey', 'ez', 'hx', 'hy', 'hz'] slice_xyz = [slice(None, None), slice(None, None), fields.slice_z] # allocations ns = fields.ns dtype = fields.dtype ehs = common_update.generate_random_ehs(nx, ny, nz, dtype, ufunc) fields.set_ehs(*ehs) ces, chs = common_update.generate_random_cs(coeff_use, nx, ny, nz, dtype) if 'e' in coeff_use: fields.set_ces(*ces) if 'h' in coeff_use: fields.set_chs(*chs) # update if ufunc == 'e': for tstep in xrange(0, tmax): fields.update_e() common_update.update_e(ehs, ces) fields.enqueue_barrier() for strf, eh in zip(strf_list, ehs)[:3]: norm = np.linalg.norm(eh - fields.get(strf)[slice_xyz]) max_diff = np.abs(eh - fields.get(strf)[slice_xyz]).max() self.assertEqual( norm, 0, '%s, %s, %g, %g' % (self.args, strf, norm, max_diff)) if fields.pad != 0: if strf == 'ez': norm2 = np.linalg.norm( fields.get(strf)[:, :, -fields.pad:]) else: norm2 = np.linalg.norm( fields.get(strf)[:, :, -fields.pad - 1:]) self.assertEqual( norm2, 0, '%s, %s, %g, padding' % (self.args, strf, norm2)) elif ufunc == 'h': for tstep in xrange(0, tmax): fields.update_h() common_update.update_h(ehs, chs) fields.enqueue_barrier() for strf, eh in zip(strf_list, ehs)[3:]: norm = np.linalg.norm(eh - fields.get(strf)[slice_xyz]) max_diff = np.abs(eh - fields.get(strf)[slice_xyz]).max() self.assertEqual(norm, 0, '%s, %s, %g, %g' % \ (self.args, strf, norm, max_diff) ) if fields.pad != 0: if strf == 'hz': norm2 = np.linalg.norm( fields.get(strf)[:, :, -fields.pad:]) else: norm2 = np.linalg.norm( fields.get(strf)[:, :, -fields.pad:]) self.assertEqual( norm2, 0, '%s, %s, %g, padding' % (self.args, strf, norm2))
Core(fields) tfunc = lambda tstep: 50 * np.sin(0.05 * tstep) IncidentDirect(fields, 'ex', (0, 0.4, 0.3), (-1, 0.4, 0.3), tfunc) getf = GetFields(fields, 'ex', (0.5, 0, 0), (0.5, -1, -1)) print fields.instance_list # main loop from datetime import datetime t0 = datetime.now() for tstep in xrange(1, tmax+1): fields.update_e() fields.update_h() if tstep % tgap == 0: print('[%s] %d/%d (%d %%)\r' % (datetime.now() - t0, tstep, tmax, float(tstep)/tmax*100)), sys.stdout.flush() ''' getf.get_event().wait() imag.set_array( getf.get_fields().T ) #plt.savefig('./png/%.6d.png' % tstep) plt.draw() ''' getf.get_event().wait() # plot
def runTest(self): axis, nx, ny, nz, mpi_type = self.args fields = Fields(nx, ny, nz, mpi_type=mpi_type) core = Core(fields) pbc = Pbc(fields, axis) # allocations ehs = common_update.generate_random_ehs(nx, ny, nz, fields.dtype) fields.set_ehs(*ehs) # update fields.update_e() fields.update_h() fields.enqueue_barrier() # verify getf0, getf1 = {}, {} strfs_e = {'x':['ey', 'ez'], 'y':['ex', 'ez'], 'z':['ex', 'ey']}[axis] strfs_h = {'x':['hy', 'hz'], 'y':['hx', 'hz'], 'z':['hx', 'hy']}[axis] pt0 = (0, 0, 0) pt1 = { 'x': (0, ny-2, nz-2), \ 'y': (nx-2, 0, nz-2), \ 'z': (nx-2, ny-2, 0) }[axis] getf0['e'] = GetFields(fields, strfs_e, pt0, pt1) pt0 = { 'x': (nx-1, 0, 0), \ 'y': (0, ny-1, 0), \ 'z': (0, 0, nz-1) }[axis] pt1 = { 'x': (nx-1, ny-2, nz-2), \ 'y': (nx-2, ny-1, nz-2), \ 'z': (nx-2, ny-2, nz-1) }[axis] getf1['e'] = GetFields(fields, strfs_e, pt0, pt1) pt0 = { 'x': (0, 1, 1), \ 'y': (1, 0, 1), \ 'z': (1, 1, 0) }[axis] pt1 = { 'x': (0, ny-1, nz-1), \ 'y': (nx-1, 0, nz-1), \ 'z': (nx-1, ny-1, 0) }[axis] getf0['h'] = GetFields(fields, strfs_h, pt0, pt1) pt0 = { 'x': (nx-1, 1, 1), \ 'y': (1, ny-1, 1), \ 'z': (1, 1, nz-1) }[axis] pt1 = (nx-1, ny-1, nz-1) getf1['h'] = GetFields(fields, strfs_h, pt0, pt1) for getf in getf0.values() + getf1.values(): getf.get_event().wait() for eh in ['e', 'h']: g0 = getf0[eh].get_fields() g1 = getf1[eh].get_fields() norm = np.linalg.norm(g0 - g1) ''' print eh print g0 print g1 ''' self.assertEqual(norm, 0, '%g, %s, %s' % (norm, self.args, eh))
def runTest(self): axis, nx, ny, nz, mpi_type = self.args fields = Fields(nx, ny, nz, mpi_type=mpi_type) core = Core(fields) pbc = Pbc(fields, axis) # allocations ehs = common_update.generate_random_ehs(nx, ny, nz, fields.dtype) fields.set_ehs(*ehs) # update fields.update_e() fields.update_h() fields.enqueue_barrier() # verify getf0, getf1 = {}, {} strfs_e = { 'x': ['ey', 'ez'], 'y': ['ex', 'ez'], 'z': ['ex', 'ey'] }[axis] strfs_h = { 'x': ['hy', 'hz'], 'y': ['hx', 'hz'], 'z': ['hx', 'hy'] }[axis] pt0 = (0, 0, 0) pt1 = { 'x': (0, ny-2, nz-2), \ 'y': (nx-2, 0, nz-2), \ 'z': (nx-2, ny-2, 0) }[axis] getf0['e'] = GetFields(fields, strfs_e, pt0, pt1) pt0 = { 'x': (nx-1, 0, 0), \ 'y': (0, ny-1, 0), \ 'z': (0, 0, nz-1) }[axis] pt1 = { 'x': (nx-1, ny-2, nz-2), \ 'y': (nx-2, ny-1, nz-2), \ 'z': (nx-2, ny-2, nz-1) }[axis] getf1['e'] = GetFields(fields, strfs_e, pt0, pt1) pt0 = { 'x': (0, 1, 1), \ 'y': (1, 0, 1), \ 'z': (1, 1, 0) }[axis] pt1 = { 'x': (0, ny-1, nz-1), \ 'y': (nx-1, 0, nz-1), \ 'z': (nx-1, ny-1, 0) }[axis] getf0['h'] = GetFields(fields, strfs_h, pt0, pt1) pt0 = { 'x': (nx-1, 1, 1), \ 'y': (1, ny-1, 1), \ 'z': (1, 1, nz-1) }[axis] pt1 = (nx - 1, ny - 1, nz - 1) getf1['h'] = GetFields(fields, strfs_h, pt0, pt1) for getf in getf0.values() + getf1.values(): getf.get_event().wait() for eh in ['e', 'h']: g0 = getf0[eh].get_fields() g1 = getf1[eh].get_fields() norm = np.linalg.norm(g0 - g1) ''' print eh print g0 print g1 ''' self.assertEqual(norm, 0, '%g, %s, %s' % (norm, self.args, eh))
# Plot import matplotlib.pyplot as plt plt.ion() imag = plt.imshow(fdtd.ez[:,:,nz/2].T, cmap=plt.cm.hot, origin='lower', vmin=0, vmax=0.05) plt.colorbar() # Main loop from datetime import datetime t0 = datetime.now() for tstep in xrange(1, tmax+1): fdtd.update_e() src.update(tstep) fdtd.update_h() if tstep % tgap == 0: print('[%s] %d/%d (%d %%)\r' % (datetime.now() - t0, tstep, tmax, float(tstep)/tmax*100)), sys.stdout.flush() output.get_event().wait() imag.set_array(output.get_fields().T**2 ) #plt.savefig('./single.png') plt.draw() print('[%s] %d/%d (%d %%)' % (datetime.now() - t0, tstep, tmax, float(tstep)/tmax*100)) ''' imag.set_array(fdtd.ez[:,:,nz/5*4].T**2 ) plt.savefig('./simple.png') plt.show()