def newRandomArray(size):
    pArray = pfc.particleArray()  #type = Electron
    for i in range(size):
        pos = pfc.vector3d(1.2 * i, 3.4 * i, 5.6 * i)
        mo = pfc.vector3d(9.8 * i, 7.6 * i, 54.3 * i)
        newP = pfc.particle(pos, mo, 0.5, pfc.Electron)
        pArray.add(newP)  #or pArray.pushBack
    return pArray
示例#2
0
def getFields():
	global grid, x, y, Nx, Ny
	Ey = np.zeros(shape=(Ny,Nx))
	Bz = np.zeros(shape=(Ny,Nx))
	for ix in range(Nx):
		for iy in range(Ny):
			coordXY = pfc.vector3d(x[ix], y[iy], 0.0)
			E = grid.getE(coordXY)
			Ey[iy, ix] = E.y
			B = grid.getB(coordXY)
			Bz[iy, ix] = B.z
	return Ey, Bz
示例#3
0
def getFields():
	global grid, x, z, N
	Ex = np.zeros(shape=(N,N))
	Ey = np.zeros(shape=(N,N))
	Ez = np.zeros(shape=(N,N))
	Bx = np.zeros(shape=(N,N))
	By = np.zeros(shape=(N,N))
	Bz = np.zeros(shape=(N,N))
	for ix in range(N):
		for iy in range(N):
			coordXZ = pfc.vector3d(x[ix], 0.0, z[iy])
			E = grid.getE(coordXZ)
			Ex[ix, iy] = E.x
			Ey[ix, iy] = E.y
			Ez[ix, iy] = E.z
			B = grid.getB(coordXZ)
			Bx[ix, iy] = B.x
			By[ix, iy] = B.y
			Bz[ix, iy] = B.z
	return Ex, Ey, Ez, Bx, By, Bz
示例#4
0
# import sys
# sys.path.append("../build/pythonModule/Release")
import pyHiChi as pfc
import numpy as np
import math as ma

gridSize = pfc.vector3d(144, 30, 1)
pmlSize = pfc.vector3d(8, 0, 0)
minCoords = pfc.vector3d(0.0, 0.0, 0.0)
maxCoords = pfc.vector3d(gridSize.x * pfc.c, gridSize.y * pfc.c, gridSize.z * pfc.c)

def step(minCoords, maxCoords, gridSize):
	steps = pfc.vector3d(1, 1, 1)
	steps.x = (maxCoords.x - minCoords.x)/(gridSize.x)
	steps.y = (maxCoords.y - minCoords.y)/(gridSize.y)
	steps.z = (maxCoords.z - minCoords.z)/(gridSize.z)
	return steps
	
stepsGrid = step(minCoords, maxCoords, gridSize)
timeStep = 0.1

pmlLeftEnd = minCoords.x+pmlSize.x*stepsGrid.x
pmlRightStart = maxCoords.x-pmlSize.x*stepsGrid.x
internalWidth = pmlRightStart-pmlLeftEnd#maxCoords.x-minCoords.x

def valueEx(x, y, z):
	Ex = 0
	return Ex
def valueEy(x, y, z):
	if (x<pmlLeftEnd or x>=pmlRightStart):
		Ey=0
示例#5
0
import pyHiChi as pfc

# Ensemble
Ensemble = pfc.ensemble()
for i in range(11):
    pos = pfc.vector3d(1.2 * i, 1.3 * i, 1.6 * i)
    mo = pfc.vector3d(1.1 * i, 1.4 * i, 1.5 * i)
    newP = pfc.particle(pos, mo, 0.5, pfc.Electron)
    Ensemble.add(newP)
for i in range(10):
    pos = pfc.vector3d(13 * i, 14 * i, 17 * i)
    mo = pfc.vector3d(12 * i, 15 * i, 16 * i)
    newP = pfc.particle(pos, mo, 0.5, pfc.Positron)
    Ensemble.add(newP)
for i in range(13):
    pos = pfc.vector3d(140 * i, 150 * i, 180 * i)
    mo = pfc.vector3d(130 * i, 160 * i, 170 * i)
    newP = pfc.particle(pos, mo, 0.5, pfc.Proton)
    Ensemble.add(newP)

print('Count Particles: ', Ensemble.size())
print('Count Electron: ',
      Ensemble['Electron'].size())  #use index 'Electron' or pfc.Electron
print('Count Positron: ', Ensemble['Positron'].size())  #same Electron
print('Count Proton: ', Ensemble['Proton'].size())  #same Electron

print('Positions Electron: ')
for elem in Ensemble[pfc.Electron]:
    print(elem.getPosition())
positronArray = Ensemble[pfc.Positron]
print('Position second Positron')
示例#6
0
def valueE(x, y, z):
    E = pfc.vector3d(0, np.cos(z), 0)  #sin(x)
    return E
示例#7
0
def valueB(x, y, z):
    B = pfc.vector3d(-np.cos(z), 0, 0)
    return B
示例#8
0

def valueBz(x, y, z):
    Bz = 0
    return Bz


def step(minCoords, maxCoords, gridSize):
    steps = pfc.vector3d(1, 1, 1)
    steps.x = (maxCoords.x - minCoords.x) / (gridSize.x)
    steps.y = (maxCoords.y - minCoords.y) / (gridSize.y)
    steps.z = (maxCoords.z - minCoords.z) / (gridSize.z)
    return steps


gridSize = pfc.vector3d(5, 10, 11)
minCoords = pfc.vector3d(0.0, 1.0, 0.0)
maxCoords = pfc.vector3d(3.5, 7.0, 2 * ma.pi)
stepsGrid = step(minCoords, maxCoords, gridSize)
timeStep = 1e-16

grid1 = pfc.YeeGrid(gridSize, timeStep, minCoords, stepsGrid)
grid2 = pfc.YeeGrid(gridSize, timeStep, minCoords, stepsGrid)

grid1.setE(valueE)
grid1.setB(valueB)

grid2.setE(valueEx, valueEy, valueEz)
grid2.setB(valueBx, valueBy, valueBz)

#show
示例#9
0

def valueBz(x, y, z):
    Bz = 0
    return Bz


def step(minCoords, maxCoords, gridSize):
    steps = pfc.vector3d(1, 1, 1)
    steps.x = (maxCoords.x - minCoords.x) / (gridSize.x)
    steps.y = (maxCoords.y - minCoords.y) / (gridSize.y)
    steps.z = (maxCoords.z - minCoords.z) / (gridSize.z)
    return steps


gridSize = pfc.vector3d(40, 40, 40)
minCoords = pfc.vector3d(0.0, 1.0, 0.0)
maxCoords = pfc.vector3d(3.5, 7.0, 2 * ma.pi)
stepsGrid = step(minCoords, maxCoords, gridSize)
timeStep = 1e-13

grid = pfc.YeeGrid(gridSize, timeStep, minCoords, stepsGrid)
grid.setE(valueEx, valueEy, valueEz)
grid.setB(valueBx, valueBy, valueBz)

fieldSolver = pfc.FDTD(grid)
fieldSolver.setPML(0, 0, 0)

#show
import matplotlib.pyplot as plt
import matplotlib.animation as animation
示例#10
0
import pyHiChi as pfc

E = pfc.vector3d(1.2, 2.2, 3.4)
B = pfc.vector3d(34, 5.6, 7.8)

#FieldValue
f = pfc.field(E, B)
print(f.getE())
print(f.getB())
f.setE(B)
f.setB(E)
print(f.getE())
print(f.getB())

f2 = pfc.field(E.z, E.y, E.x, B.x, B.x, B.x)  #Ex, Ey, Ez, Bx, By, Bz
print(f2.getE())
print(f2.getB())
示例#11
0
import pyHiChi as pfc

#vector3d
v = pfc.vector3d(1.2, 2.2, 3.4)
print("volume: ", v.volume())
print("norm: ", v.norm())
print("norm2: ", v.norm2())
print("vector: ", v.toString())
print(v)
print(v.x)
print(v.y)
print(v.z)
v2 = pfc.vector3d()
print("v2: ", v2.toString())
v2.x = 2.4
v2.y = 4.5
v2.z = 312
print("v2: ", v2.toString())
示例#12
0
def valueBAnalytical(pos, t):
    B = pfc.vector3d(0, 0, 0)
    return B
示例#13
0
def valueEAnalytical(pos, t):
    E = pfc.vector3d(1, 0, 0)  #sin(pos.x)
    return E
示例#14
0
def valueEAnalytical(pos, t):
    E = pfc.vector3d(1, 0, 0)  #sin(pos.x)
    return E


def valueBAnalytical(pos, t):
    B = pfc.vector3d(0, 0, 0)
    return B


t = 0
pArray = pfc.particleArray()
fieldsArray = []
for i in range(11):
    pos = pfc.vector3d(1.2 * i, 3.4 * i, 5.6 * i)
    mo = pfc.vector3d(i * 10**16, 0, 0)
    newP = pfc.particle(pos, mo, 0.5, pfc.Electron)
    pArray.add(newP)
    fieldsArray.append(
        pfc.field(valueEAnalytical(pos, t), valueBAnalytical(pos, t)))

#Boris Pusher
dt = 0.1
pusher = pfc.BorisPusher()
for k in range(11):
    print(pArray[1].getMomentum())
    pusher(pArray, fieldsArray, dt)
    t = dt * k
    for j in range(11):
        fieldsArray[i].setE(valueEAnalytical(pos, t))
def valueBz(x, y, z):
    #Bz = 0  #for y or z
    #Bz = np.sin(x) #for x
    Bz = np.sin(x - z) / np.sqrt(2)  #for xz
    return Bz


def step(minCoords, maxCoords, gridSize):
    steps = pfc.vector3d(1, 1, 1)
    steps.x = (maxCoords.x - minCoords.x) / (gridSize.x)
    steps.y = (maxCoords.y - minCoords.y) / (gridSize.y)
    steps.z = (maxCoords.z - minCoords.z) / (gridSize.z)
    return steps


gridSize = pfc.vector3d(20, 20, 20)
minCoords = pfc.vector3d(0.0, 0.0, 0.0)
maxCoords = pfc.vector3d(2 * ma.pi, 2 * ma.pi, 2 * ma.pi)
stepsGrid = step(minCoords, maxCoords, gridSize)
timeStep = 1e-14

grid = pfc.YeeGrid(gridSize, timeStep, minCoords, stepsGrid)
grid.setE(valueEx, valueEy, valueEz)
grid.setB(valueBx, valueBy, valueBz)

fieldSolver = pfc.FDTD(grid)
fieldSolver.setPML(0, 0, 0)
periodicalBC = pfc.PeriodicalBC(fieldSolver)

#show
import matplotlib.pyplot as plt
示例#16
0
import pyHiChi as pfc

v = pfc.vector3d(1.2, 2.2, 3.4)
v2 = pfc.vector3d(34, 5.6, 7.8)

#Particle
p = pfc.particle()
print(p.getPosition())
p.setPosition(v)
print(p.getPosition())
p.setPosition(pfc.vector3d(1.2, 2.1, 1.2))
print(p.getPosition())
p.setMomentum(v2)
print(p.getMomentum())
p.setMomentum(pfc.vector3d(3.4, 5.6, 7.8))
print(p.getMomentum())

mom = p.getMomentum()
print(mom.x)
print(p.getMomentum().y)

p.setVelocity(v)
print(p.getVelocity())
print(p.getMomentum())

print(p.getType())
print(p.getMass())
print(p.getCharge())
print(p.getWeight())

pos = pfc.vector3d(1.2, 3.4, 5.6)
def step(minCoords, maxCoords, gridSize):
    steps = pfc.vector3d(1, 1, 1)
    steps.x = (maxCoords.x - minCoords.x) / (gridSize.x)
    steps.y = (maxCoords.y - minCoords.y) / (gridSize.y)
    steps.z = (maxCoords.z - minCoords.z) / (gridSize.z)
    return steps
示例#18
0
import pyHiChi as pfc


#ParticleArray - legacy, use Ensemble
pArray = pfc.particleArray()  #type = Electron
for i in range(11) :
	pos = pfc.vector3d(1.2*i, 3.4*i, 5.6*i)
	mo = pfc.vector3d(9.8*i, 7.6*i, 54.3*i)
	newP = pfc.particle(pos, mo, 0.5, pfc.Electron)
	pArray.add(newP)
print(pArray.size())
print(pArray.getType())
print(pArray[5].getPosition())
pArray.delete(5)
print(pArray[5].getPosition())

for el in pArray :
    print(el.getPosition())
print(pArray.size())