from kufdtd.dim3.cpu.base import * from kufdtd.dim3.cpu.matter import Dielectric, DrudeAde from kufdtd.dim3.cpu.cpml import CpmlNonKappa #-------------------------------------------------------------------- Nx, Ny, Nz = 200, 200, 32 dx = 10e-9 tmax = 1000 Ncore = 8 Npml = 15 Cpml = CpmlNonKappa(Npml, ('fb', 'fb', 'fb')) #-------------------------------------------------------------------- S = Dielectric(Nx, Ny, Nz, dx, Ncore) S.allocate_main() S.allocate_coeff() Drude = DrudeAde(Nx, Ny, Nz, 0, 0, 0, S) Drude.allocate_main() Drude.allocate_coeff() epr = 9.0685 pfreq = 2 * pi * 2155.6 * 1e12 / sc.sqrt(epr) gamma = 2 * pi * 18.36 * 1e12 S.epr_x[50:101, 50:100, :] = epr S.epr_y[50:100, 50:101, :] = epr S.epr_z[50:100, 50:100, :] = epr
#-------------------------------------------------------------------- ''' x0, x1 = y0, y1 = z0, z1 = Nx = sc.ceil((x1-x0)/dx/Ncore)*Ncore nx = sc.ceil((x1-x0)/dx/Ncore) ''' Nx, Ny, Nz = 200, 200, 32 dx = 10e-9 tmax = 500 Ncore = 8 #-------------------------------------------------------------------- S = Dielectric(Nx, Ny, Nz, dx, Ncore) S.allocate_main() S.allocate_coeff() S.set_coeff() #-------------------------------------------------------------------- print '-' * 47 print 'N(%d, %d, %d)' % (S.Nx, S.Ny, S.Nz) print 'dx = %g' % S.dx print 'dt = %g' % S.dt print '' S.print_memory_usage() print '-' * 47 #--------------------------------------------------------------------
from kufdtd.dim3.cpu.matter import Dielectric, DrudeAde from kufdtd.dim3.cpu.cpml import CpmlNonKappa #-------------------------------------------------------------------- Nx, Ny, Nz = 200, 200, 32 dx = 10e-9 tmax = 1000 Ncore = 8 Npml = 15 Cpml = CpmlNonKappa( Npml, ('fb','fb','fb') ) #-------------------------------------------------------------------- S = Dielectric( Nx, Ny, Nz, dx, Ncore ) S.allocate_main() S.allocate_coeff() Drude = DrudeAde( Nx, Ny, Nz, 0, 0, 0, S ) Drude.allocate_main() Drude.allocate_coeff() epr = 9.0685 pfreq = 2*pi*2155.6*1e12/sc.sqrt(epr) gamma = 2*pi*18.36*1e12 S.epr_x[50:101,50:100,:] = epr S.epr_y[50:100,50:101,:] = epr S.epr_z[50:100,50:100,:] = epr
from kufdtd.dim3.cpu.cpml_mpi import CpmlNonKappaMpi from kufdtd.dim3.mpi import * #-------------------------------------------------------------------- Nx, Ny, Nz = 242, 200, 32 node_Nx_list = [42, 42, 42, 42, 42, 42] dx = 10e-9 tmax = 1000 Ncore = 8 Npml = 90 pml_apply_direction = ('fb','fb','') #-------------------------------------------------------------------- if myrank is not server: S = Dielectric( node_Nx_list[myrank-1], Ny, Nz, dx, Ncore ) S.allocate_main() S.allocate_coeff() S.set_coeff() Cpml = CpmlNonKappaMpi( node_Nx_list, Npml, pml_apply_direction ) Cpml.set_space( S ) Cpml.allocate_psi() Cpml.allocate_coeff() target_list, mpi_func_list = calc_oddeven( myrank ) for i, obj in enumerate( [S, Cpml] ): mpi.send( obj.mem_usage, server, tag=i ) else:
spartial_step = (1, 1, 1) #-------------------------------------------------------------------- Output_ez = OutputMpi('Ez', node_Nx_list, pt1, pt2, spartial_step) Output_ex = OutputMpi('Ex', node_Nx_list, pt1, pt2, spartial_step) Output_ez_yz = OutputMpi('Ez', node_Nx_list, (Nx / 2, None, None), (Nx / 2, None, None), spartial_step) Output_ez_yz_2 = OutputMpi('Ez', node_Nx_list, (Nx / 2, 10, None), (Nx / 2, 100, None), spartial_step) #Output_ez_yz_2 = OutputMpi( 'Ez', node_Nx_list, (Nx/2, 10, 20), (Nx/2, 100, 20), spartial_step ) output_list = [Output_ez, Output_ex, Output_ez_yz, Output_ez_yz_2] #-------------------------------------------------------------------- if myrank is not server: S = Dielectric(node_Nx_list[myrank - 1], Ny, Nz, dx, Ncore) S.allocate_main() S.allocate_coeff() S.set_coeff() Cpml = CpmlNonKappa(Npml, S) Cpml.allocate_psi() Cpml.allocate_coeff() if myrank == 1: pml_direction = ('f', 'fb', 'fb') elif myrank == Nnode: pml_direction = ('b', 'fb', 'fb') else: pml_direction = ('', 'fb', 'fb')
#!/usr/bin/env python from kufdtd.common import * from kufdtd.dim3.cpu.base import * from kufdtd.dim3.cpu.matter import Dielectric, DrudeAde from kufdtd.dim3.cpu.cpml import CpmlNonKappa #-------------------------------------------------------------------- Nx, Ny, Nz = 200, 200, 32 dx = 10e-9 tmax = 1000 Ncore = 8 #-------------------------------------------------------------------- S = Dielectric( Nx, Ny, Nz, dx, Ncore ) S.allocate_main() S.allocate_coeff() Drude = DrudeAde( Nx, Ny, Nz, 0, 0, 0, S ) Drude.allocate_main() Drude.allocate_coeff() S.set_coeff() Drude.pfreq_x[50:101,50:100,:] = pfreq Drude.pfreq_y[50:100,50:101,:] = pfreq Drude.pfreq_z[50:100,50:100,:] = pfreq Drude.gamma_x[50:101,50:100,:] = gamma Drude.gamma_y[50:100,50:101,:] = gamma
Ncore = 8 Npml = 15 pml_apply_direction = ( 'fb', 'fb', 'fb' ) wavelength = 600e-9 #Cpml = CpmlNonKappa( Npml, ('fb','fb','fb') ) Output_ey = OutputMpi( 'Ey', node_Nx_list, (None, None, Nz/2), (None, None, Nz/2), (1, 1, 1) ) output_list = [Output_ey] Src = TfsfMpi( node_Nx_list, (50, 50, 20), (180, 150, 40), ('fb','fb','fb'), wavelength, ['normal', 'x'], 0 ) src_list = [Src] #-------------------------------------------------------------------- if myrank is not server: S = Dielectric( node_Nx_list[myrank-1], Ny, Nz, dx, Ncore ) S.allocate_main() S.allocate_coeff() S.set_coeff() Cpml = CpmlNonKappaMpi( node_Nx_list, Npml, pml_apply_direction ) Cpml.set_space( S ) Cpml.allocate_psi() Cpml.allocate_coeff() target_list, mpi_func_list = calc_oddeven( myrank ) for output in output_list: output.set_space( S ) for src in src_list: src.set_space( S ) for i, obj in enumerate( [S, Cpml] ):
from pylab import * ion() figure() imsh = imshow(transpose(sc.ones((Nx, Ny), 'f')), cmap=cm.jet, vmin=-0.2, vmax=0.2, origin='lower', interpolation='bilinear') colorbar() outputEz = sc.zeros((Nx, Ny), 'f') else: S = Dielectric(node_Nx_list[myrank - 1], Ny, Nz, dx, Ncore) S.allocate_main() S.allocate_coeff() S.set_coeff() print '-' * 47 print 'myrank = %d, N(%d, %d, %d)' % (myrank, S.Nx, S.Ny, S.Nz) print 'dx = %g, dt = %g' % (S.dx, S.dt) print '' S.print_memory_usage() print '-' * 47 #-------------------------------------------------------------------- from time import * t0 = time()
#-------------------------------------------------------------------- ''' x0, x1 = y0, y1 = z0, z1 = Nx = sc.ceil((x1-x0)/dx/Ncore)*Ncore nx = sc.ceil((x1-x0)/dx/Ncore) ''' Nx, Ny, Nz = 200, 200, 32 dx = 10e-9 tmax = 500 Ncore = 8 #-------------------------------------------------------------------- S = Dielectric( Nx, Ny, Nz, dx, Ncore ) S.allocate_main() S.allocate_coeff() S.set_coeff() #-------------------------------------------------------------------- print '-'*47 print 'N(%d, %d, %d)' % (S.Nx, S.Ny, S.Nz) print 'dx = %g' % S.dx print 'dt = %g' % S.dt print '' S.print_memory_usage() print '-'*47 #--------------------------------------------------------------------
#!/usr/bin/env python from kufdtd.common import * from kufdtd.dim3.cpu.base import * from kufdtd.dim3.cpu.matter import Dielectric #-------------------------------------------------------------------- Nx, Ny, Nz = 200, 200, 200 dx = 10e-9 tmax = 500 Ncore = 4 #-------------------------------------------------------------------- S = Dielectric(Nx, Ny, Nz, dx, Ncore) S.allocate_main() S.allocate_coeff() S.set_coeff() #-------------------------------------------------------------------- print '-' * 47 print 'N(%d, %d, %d)' % (S.Nx, S.Ny, S.Nz) print 'dx = %g' % S.dx print 'dt = %g' % S.dt print 'tmax = %d' % tmax print 'Ncore = %d' % Ncore print '' print 'memory usage:' #print_mem_usage( [S.mem_usage] ) print '-' * 47 '''
output_list = [Output_ey] Src = TfsfMpi( (50, 20, 20), (200, 180, 50), ('fb','fb','fb'), wavelength, ['normal', 'x'], 0 ) src_list = [Src] #-------------------------------------------------------------------- Nx, Ny, Nz = sc.int32( sc.ceil( sc.array(space_dim,'f')/dx-1e-3 ) ) node_length_x_list = calc_node_length_x_list( space_dim[0] ) node_Nx_list = sc.int32( sc.array(node_length_x_list,'f')/dx ) #print 'node_length_x_list:', node_length_x_list if myrank is not server: node_length_x = node_length_x_list[myrank-1] node_Nx = node_Nx_list[myrank-1] S = Dielectric( node_Nx+2, Ny+2, Nz+2, dx, Ncore ) wrapbox_pt1 = [ sc.array(node_length_x_list[:myrank-1],'f').sum(), 0, 0 ] wrapbox_pt2 = [ sc.array(node_length_x_list[:myrank],'f').sum(), space_dim[1], space_dim[2] ] length = list( sc.array(wrapbox_pt2) - sc.array(wrapbox_pt1) ) center_pt = list( sc.array(wrapbox_pt1) + sc.array(length)/2 ) #print 'rank:',myrank,'wrapbox_pt', wrapbox_pt1, wrapbox_pt2 #print 'center_pt:',center_pt,'length:',length S.set_wrapbox( wrapbox_pt1, wrapbox_pt2, center_pt, length ) S.allocate_main() S.allocate_coeff() S.set_coeff( structure_groups, wrapbox_groups ) Cpml = CpmlNonKappaMpi( node_Nx_list, Npml, pml_apply_direction ) Cpml.set_space( S ) Cpml.allocate_psi()
space_dim = ( 2400, 2000, 700 ) wavelength = 600 #-------------------------------------------------------------------- Nx, Ny, Nz = sc.int32( sc.ceil( sc.array(space_dim,'f')/dx ) ) + 2 node_Nx_list = calc_node_Nx_list( Nx ) Output_ey = OutputMpi( 'Ey', node_Nx_list, (None, None, Nz/2), (None, None, Nz/2), (1, 1, 1) ) output_list = [Output_ey] Src = TfsfMpi( node_Nx_list, (50, 50, 20), (180, 150, 40), ('fb','fb','fb'), wavelength*unit, ['normal', 'x'], 0 ) src_list = [Src] #-------------------------------------------------------------------- if myrank is not server: S = Dielectric( node_Nx_list[myrank-1], Ny, Nz, dx*unit, Ncore ) S.allocate_main() S.allocate_coeff() S.set_coeff() Cpml = CpmlNonKappaMpi( node_Nx_list, Npml, pml_apply_direction ) Cpml.set_space( S ) Cpml.allocate_psi() Cpml.allocate_coeff() target_list, mpi_func_list = calc_oddeven( myrank ) for output in output_list: output.set_space( S ) for src in src_list: src.set_space( S ) for i, obj in enumerate( [S, Cpml] ):