kopia lustrzana https://github.com/RobertGawron/IonizationChamber
124 wiersze
4.4 KiB
Python
124 wiersze
4.4 KiB
Python
import math
|
|
import agros2d as a2d
|
|
|
|
|
|
def initProblem():
|
|
problem = a2d.problem(clear = True)
|
|
problem.coordinate_type = "planar"
|
|
problem.mesh_type = "triangle"
|
|
|
|
return problem
|
|
|
|
|
|
def initSimulatedField():
|
|
electrostatic = a2d.field("electrostatic")
|
|
electrostatic.analysis_type = "steadystate"
|
|
electrostatic.matrix_solver = "mumps"
|
|
electrostatic.number_of_refinements = 1
|
|
electrostatic.polynomial_order = 2
|
|
electrostatic.adaptivity_type = "disabled"
|
|
electrostatic.solver = "linear"
|
|
|
|
return electrostatic
|
|
|
|
|
|
def setBoundaries(field):
|
|
field.add_boundary("Source", "electrostatic_potential", {"electrostatic_potential" : 20})
|
|
field.add_boundary("Ground", "electrostatic_potential", {"electrostatic_potential" : 0})
|
|
field.add_boundary("Border", "electrostatic_surface_charge_density", {"electrostatic_surface_charge_density" : 0})
|
|
|
|
|
|
def setMaterials(field):
|
|
field.add_material("Air", {"electrostatic_permittivity" : 1, "electrostatic_charge_density" : 0})
|
|
field.add_material("Antena", {"electrostatic_permittivity" : 10, "electrostatic_charge_density" : 0})
|
|
|
|
|
|
class ElectrodeShape:
|
|
def __init__(self, **kwds):
|
|
self.__dict__.update(kwds)
|
|
|
|
|
|
def addElectrodeToSimulation(electrode, boundary, material):
|
|
a2d.geometry.add_rect(electrode.x, electrode.y, electrode.dx, electrode.dy, boundaries = {"electrostatic" : boundary})
|
|
|
|
labelx = electrode.x + (electrode.dx / 2)
|
|
labely = electrode.y + (electrode.dy / 2)
|
|
a2d.geometry.add_label(labelx, labely, materials = {"electrostatic" : material})
|
|
|
|
|
|
def main():
|
|
problem = problemToSolve = initProblem()
|
|
|
|
field = initSimulatedField()
|
|
setBoundaries(field)
|
|
setMaterials(field)
|
|
|
|
|
|
chamberHeight = 1.0
|
|
chamberLength = 4.0
|
|
copperPlateThickness =0.01
|
|
|
|
electrodeLeft = ElectrodeShape(x = 0, y = 0, dx = -copperPlateThickness, dy = chamberHeight)
|
|
electrodeRight = ElectrodeShape(x = chamberLength, y = 0, dx = copperPlateThickness, dy = chamberHeight)
|
|
electrodeTop = ElectrodeShape(x = 0, y = chamberHeight, dx = chamberLength, dy = copperPlateThickness)
|
|
|
|
addElectrodeToSimulation(electrodeLeft, "Ground", "Antena")
|
|
addElectrodeToSimulation(electrodeRight, "Ground", "Antena")
|
|
addElectrodeToSimulation(electrodeTop, "Ground", "Antena")
|
|
|
|
guardWidth = 0.2
|
|
guardDistance = 0.2
|
|
boardDistance = 0.2
|
|
|
|
xoffset = 0.0
|
|
electrodeBottom1 = ElectrodeShape(x=xoffset, y=0, dx=boardDistance, dy=-copperPlateThickness)
|
|
|
|
xoffset+=boardDistance
|
|
electrodeBottom2 = ElectrodeShape(x=xoffset, y=0, dx=guardDistance, dy=-copperPlateThickness)
|
|
|
|
xoffset+=guardDistance
|
|
electrodeBottom3 = ElectrodeShape(x=xoffset, y=0, dx=guardWidth, dy=-copperPlateThickness)
|
|
|
|
xoffset+=guardWidth
|
|
electrodeBottom4 = ElectrodeShape(x=xoffset, y=0, dx=guardDistance, dy=-copperPlateThickness)
|
|
|
|
|
|
# middle
|
|
xoffset+=guardDistance
|
|
electrodeBottom5 = ElectrodeShape(x=xoffset, y=0, dx=(chamberLength-2*xoffset), dy=-copperPlateThickness)
|
|
|
|
|
|
xoffset+=(chamberLength-2*xoffset)
|
|
electrodeBottom6 = ElectrodeShape(x=xoffset, y=0, dx=guardDistance, dy=-copperPlateThickness)
|
|
|
|
xoffset+=guardDistance
|
|
electrodeBottom7 = ElectrodeShape(x=xoffset, y=0, dx=guardWidth, dy=-copperPlateThickness)
|
|
|
|
xoffset+=guardWidth
|
|
electrodeBottom8 = ElectrodeShape(x=xoffset, y=0, dx=guardDistance, dy=-copperPlateThickness)
|
|
|
|
xoffset+=guardDistance
|
|
electrodeBottom9 = ElectrodeShape(x=xoffset, y=0, dx=boardDistance, dy=-copperPlateThickness)
|
|
|
|
|
|
addElectrodeToSimulation(electrodeBottom1, "Ground", "Antena") # electrode A
|
|
addElectrodeToSimulation(electrodeBottom2, "Border", "Air")
|
|
addElectrodeToSimulation(electrodeBottom3, "Source", "Antena")
|
|
addElectrodeToSimulation(electrodeBottom4, "Border", "Air")
|
|
addElectrodeToSimulation(electrodeBottom5, "Source", "Antena") # electrode B
|
|
addElectrodeToSimulation(electrodeBottom6, "Border", "Air")
|
|
addElectrodeToSimulation(electrodeBottom7, "Source", "Antena")
|
|
addElectrodeToSimulation(electrodeBottom8, "Border", "Air")
|
|
|
|
addElectrodeToSimulation(electrodeBottom9, "Ground", "Antena") # electrode A
|
|
|
|
|
|
a2d.geometry.add_label(0.1, 0.1, materials = {"electrostatic" : "Air"})
|
|
|
|
a2d.view.zoom_best_fit()
|
|
problem.solve()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|