PLaSK library
Loading...
Searching...
No Matches
simple.py
Go to the documentation of this file.
1# This file is part of PLaSK (https://plask.app) by Photonics Group at TUL
2# Copyright (c) 2026 Lodz University of Technology
3#
4# This program is free software: you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation, version 3.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11# GNU General Public License for more details.
12
13import unittest
14
15from numpy import *
16
17from plask import *
18from plask import material, geometry, mesh
19from electrical.capacitance import Capacitance2D
20
21from plask.phys import eps0 # 8.854187817e-6 pF/µm
22
23
24@material.simple()
26
27 def cond(self, T):
28 return 100.
29
30 def eps(self, T):
31 return 9.
32
33
35
36 def conductivity(self, mesh, interp=None):
37 matfield = MaterialField(self.solver.geometry, mesh)
38 return matfield.cond(300)
39
40
42
43 def setUp(self):
44 layer = geometry.Rectangle(1000., 100., Capacitor())
45 layer.role = 'active'
46 self.solver = Capacitance2D("capacitance2d")
47 self.solver.geometry = geometry.Cartesian2D(layer, length=1000.)
49 generator.prediv = 1, 10
50 self.solver.mesh = generator
53 self.solver.frequency = 1e3
54 self.solver.inDifferentialConductivity = flow.ConductivityProvider2D(self.conductivity)
55
56 def testCurrent(self):
57 self.solver.compute()
58 U = self.solver.outAcVoltage(self.solver.mesh)
59 correct_current = 1000. # mA
60 correct_imag_current = 2 * pi * self.solver.frequency * 9. * eps0 * 1000.**2 / 100. # mA
61 I = self.solver.get_ac_current()
62 self.assertAlmostEqual(I.real, correct_current, 6)
63 self.assertAlmostEqual(I.imag, correct_imag_current, 6)
64 Iact = self.solver.get_ac_current(active=True)
65 self.assertAlmostEqual(Iact, correct_current, 6)
66
67
68# class Cond2D_Test(unittest.TestCase):
69
70# def setUp(self):
71# rect = geometry.Rectangle(1000., 300., 'GaAs')
72# junc = geometry.Rectangle(1000., 0.2, Capacitor())
73# stack = geometry.Stack2D()
74# stack.append(rect)
75# stack.append(junc)
76# stack.append(rect)
77# space = geometry.Cartesian2D(stack, length=1000.)
78# self.solver = Capacitance2D("capacitance2d")
79# self.solver.geometry = space
80# generator = mesh.Rectangular2D.DivideGenerator()
81# generator.prediv = 1,2
82# self.solver.mesh = generator
83# self.solver.cond = lambda U, j, T: 0.05 + abs(j)
84# self.solver.maxerr = 1e-5
85# self.solver.voltage_boundary.append(self.solver.mesh.Top(), 0.)
86# self.solver.voltage_boundary.append(self.solver.mesh.Bottom(), 1.)
87# self.solver.frequency = 1e+6
88# self.solver.inDifferentialConductivity = flow.ConductivityProvider2D(self.conductivity)
89
90# def conductivity(self, mesh, interp=None):
91# matfield = MaterialField(self.solver.geometry, mesh)
92# return matfield.cond(300)
93
94# def testComputations(self):
95# self.solver.compute()
96# U = self.solver.outAcVoltage(self.solver.mesh)
97# for p, u in zip(self.solver.mesh, U):
98# print(p, u)
99# # correct_current = 500.
100# # self.assertAlmostEqual(self.solver.get_ac_current(), correct_current, 3)
101
102if __name__ == '__main__':
103 test = unittest.main(exit=False)
104 show()