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')
Example #6
0
#!/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] ):
Example #8
0
    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

#--------------------------------------------------------------------
Example #10
0
#!/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] ):