1
2 import empro
3 import empro.internal
4 import empro.geometry
5
6 import geometry
7 import lib3d
8 import output
9 import sensor
10 import simulation
11 import via_designer
12
13 try:
14 import gui
15 except:
16
17 pass
18
19 import reflect
20 import dataset
21 import graphing
22 import ads_import
23
27 - def merge(self, otherBunch):
28 self.__dict__.update(**otherBunch.__dict__)
30 s = []
31 for k,v in self.__dict__.iteritems():
32 s.append("%s=%s" % (str(k),str(v)))
33 return "{"+",".join(s)+"}"
34
36 '''
37 decorator to print exception to output before reraising it.
38 '''
39 def op(*args, **kwargs):
40 try:
41 return func(*args, **kwargs)
42 except:
43 import traceback
44 traceback.print_exc()
45 raise
46 op.__name__ == func.__name__
47 op.__doc__ == func.__doc__
48 return op
49
50 -def _fromHSL(H, S, L=None, a=None, e=None):
51 '''
52 converts color from HSL to rgb space.
53 HSL channels are in 0-240 range.
54 rgb channgels are in 0-1 range.
55 '''
56 return _fromhsl(H/240.,S/240.,L/240. if L else L,a=a,e=e)
57
58 -def _fromhsl(h, s, l=None, a=None, e=None):
59 '''
60 converts color from hsl to rgb space.
61 all channgels are in 0-1 range.
62 '''
63 if not e is None:
64 import math
65 l = 1/(1+.9*math.log(e))
66 assert not l is None
67 h *= 6.
68 c = (1. - abs(2. * l - 1.)) * s
69 x = c * (1. - abs(h % 2. - 1.))
70 if 0 <= h < 1:
71 r, g, b = c, x, 0
72 elif h < 2:
73 r, g, b = x, c, 0
74 elif h < 3:
75 r, g, b = 0, c, x
76 elif h < 4:
77 r, g, b = 0, x, c
78 elif h < 5:
79 r, g, b = x, 0, c
80 elif h < 6:
81 r, g, b = c, 0, x
82 else:
83 r, g, b = 0, 0, 0
84 m = l - .5 * c
85 rgb = (r + m, g + m, b + m)
86 if a is None:
87 return rgb
88 else:
89 return rgb + (a,)
90
91
92 _RED = (1,0,0)
93 _BLUE = (0,0,1)
94 _BLUE_TRANSPARENT = (0,0,1,0.5)
95 _GREEN = (0,1,0)
96 _ORANGE = (1,0.6,0)
97 _YELLOW = (1,1,0)
98 _BLACK = (0,0,0)
99 _WHITE = (1,1,1)
100 _INF = 1e10000
101
102 import collections as _collections
103 _HueSat = _collections.namedtuple('_HueSat', ['H', 'S'])
104
114 return ['density', 'heatCapacity', 'thermalConductivity', 'thermalConductivityThroughPlane']
137
139 - def __init__(self, name, permittivity, lossTangent=0, evaluationFrequency=1e9, color=_BLACK, **kwargs):
140 a=.80
141 if isinstance(color, _HueSat):
142 import math
143 L = 240 / max(1, 1 + .9 * math.log(permittivity))
144 color = _fromHSL(color.H, color.S, L, a=a)
145 if len(color) == 3:
146 color = list(color) + [a]
147 MaterialDescription.__init__(self, name, color, **kwargs)
148 self.permittivity, self.lossTangent, self.evaluationFrequency = permittivity, lossTangent, evaluationFrequency
160
162 - def __init__(self, name, materialData, isElectricFreespace=False, isMagneticFreespace=False, color=_BLACK, **kwargs):
196
198 - def __init__(self, name, conductivity, skinDepthAt10GHz=66.0*1e-6, color=_BLACK, **kwargs):
205 return ['nominalTemperature', 'linearTemperatureCoefficient', 'quadraticTemperatureCoefficient']
220
222 - def __init__(self, name, color=_fromHSL(0, 0, 220)):
232
234 - def __init__(self, name, color=_fromHSL(118, 113, 178, 0.5)):
244
246 - def __init__(self, name, permittivity, color=_fromHSL(118, 113, 178, 0.5)):
259
260
262 return dict([(desc.name, desc) for desc in descriptions])
263
264
265 import data
266 from data import bsr1,bsr2,dsf3,dsf14,fgm40,fgm125,gds,ls18,ls20,ls22,ls24,ls26,ls30
267 from data import mcsu,mf110,mf112,mf114,mf117,mf120,mf124,mfpp120,sf1,sf2,sf4,sf9,sf10,sf15
268 from data import CZ500, CZ600, CZ700
269 defaultMaterialDescriptions = _dictionaryFromDescriptions(
270 MaterialDescriptionPEC("PEC"),
271 MaterialDescriptionFreespace("Freespace"),
272
273
274
275 MaterialDescriptionAir("Air", permittivity=1.0),
276
277
278 MaterialDescriptionElectricMagneticSampled("Coolzorb 500", materialData = data.CZ500.getValues(), color=_HueSat(0,60), density=3400.0, thermalConductivity=4.0),
279 MaterialDescriptionElectricMagneticSampled("Coolzorb 600", materialData = data.CZ600.getValues(), color=_HueSat(0,60), density=4100.0, thermalConductivity=3.0),
280 MaterialDescriptionElectricMagneticSampled("Coolzorb 700", materialData = data.CZ700.getValues(), color=_HueSat(0,60)),
281 MaterialDescriptionElectricMagneticSampled("ECCOSORB BSR-1", materialData = data.bsr1.getValues(), color=_HueSat(0,60), thermalConductivity=0.8778),
282 MaterialDescriptionElectricMagneticSampled("ECCOSORB BSR-2", materialData = data.bsr2.getValues(), color=_HueSat(5,60), thermalConductivity=0.8778),
283 MaterialDescriptionElectricMagneticSampled("ECCOSORB DSF-3", materialData = data.dsf3.getValues(), color=_HueSat(0,59)),
284 MaterialDescriptionElectricMagneticSampled("ECCOSORB DSF-14", materialData = data.dsf14.getValues(), color=_HueSat(5,59)),
285 MaterialDescriptionElectricMagneticSampled("ECCOSORB FGM-40", materialData = data.fgm40.getValues(), color=_HueSat(0,58)),
286 MaterialDescriptionElectricMagneticSampled("ECCOSORB FGM-125", materialData = data.fgm125.getValues(), color=_HueSat(5,58)),
287 MaterialDescriptionElectricMagneticSampled("ECCOSORB GDS", materialData = data.gds.getValues(), color=_HueSat(0,57)),
288 MaterialDescriptionElectricMagneticSampled("ECCOSORB LS-18", materialData = data.ls18.getValues(), isMagneticFreespace=True, color=_HueSat(0,56)),
289 MaterialDescriptionElectricMagneticSampled("ECCOSORB LS-20", materialData = data.ls20.getValues(), isMagneticFreespace=True, color=_HueSat(5,56)),
290 MaterialDescriptionElectricMagneticSampled("ECCOSORB LS-22", materialData = data.ls22.getValues(), isMagneticFreespace=True, color=_HueSat(10,56)),
291 MaterialDescriptionElectricMagneticSampled("ECCOSORB LS-24", materialData = data.ls24.getValues(), isMagneticFreespace=True, color=_HueSat(15,56)),
292 MaterialDescriptionElectricMagneticSampled("ECCOSORB LS-26", materialData = data.ls26.getValues(), isMagneticFreespace=True, color=_HueSat(20,56)),
293 MaterialDescriptionElectricMagneticSampled("ECCOSORB LS-30", materialData = data.ls30.getValues(), isMagneticFreespace=True, color=_HueSat(25,56)),
294 MaterialDescriptionElectricMagneticSampled("ECCOSORB MCS-U", materialData = data.mcsu.getValues(), color=_HueSat(0,55)),
295 MaterialDescriptionElectricMagneticSampled("ECCOSORB MF-110", materialData = data.mf110.getValues(), color=_HueSat(0,54), thermalConductivity=1.44),
296 MaterialDescriptionElectricMagneticSampled("ECCOSORB MF-112", materialData = data.mf112.getValues(), color=_HueSat(5,54), thermalConductivity=1.44),
297 MaterialDescriptionElectricMagneticSampled("ECCOSORB MF-114", materialData = data.mf114.getValues(), color=_HueSat(10,54), thermalConductivity=1.44),
298 MaterialDescriptionElectricMagneticSampled("ECCOSORB MF-117", materialData = data.mf117.getValues(), color=_HueSat(15,54), thermalConductivity=1.44),
299 MaterialDescriptionElectricMagneticSampled("ECCOSORB MF-120", materialData = data.mf120.getValues(), color=_HueSat(20,54), thermalConductivity=1.44),
300 MaterialDescriptionElectricMagneticSampled("ECCOSORB MF-124", materialData = data.mf124.getValues(), color=_HueSat(25,54), thermalConductivity=1.44),
301 MaterialDescriptionElectricMagneticSampled("ECCOSORB MF-PP-120", materialData = data.mfpp120.getValues(), color=_HueSat(30,54), density=4200, thermalConductivity=1.44),
302 MaterialDescriptionElectricMagneticSampled("ECCOSORB SF-1", materialData = data.sf1.getValues(), color=_HueSat(0,53)),
303 MaterialDescriptionElectricMagneticSampled("ECCOSORB SF-2", materialData = data.sf2.getValues(), color=_HueSat(5,53)),
304 MaterialDescriptionElectricMagneticSampled("ECCOSORB SF-4", materialData = data.sf4.getValues(), color=_HueSat(10,53)),
305 MaterialDescriptionElectricMagneticSampled("ECCOSORB SF-9", materialData = data.sf9.getValues(), color=_HueSat(15,53)),
306 MaterialDescriptionElectricMagneticSampled("ECCOSORB SF-10", materialData = data.sf10.getValues(), color=_HueSat(20,53)),
307 MaterialDescriptionElectricMagneticSampled("ECCOSORB SF-15", materialData = data.sf15.getValues(), color=_HueSat(25,53)),
308
309
310 MaterialDescriptionDielectric("Polyester/E Fiberglass", permittivity=4.3, lossTangent=0.016, color=_HueSat(0,60), density=1600, heatCapacity=2300, thermalConductivity=0.24),
311 MaterialDescriptionDielectric("Epoxy/E Fiberglass", permittivity=4.2, lossTangent=0.015, color=_HueSat(5,60), density=1835, heatCapacity=800, thermalConductivity=0.38),
312 MaterialDescriptionDielectric("Epoxy", permittivity=4.2, lossTangent=0.015, color=_HueSat(5,60), density=1835, heatCapacity=800, thermalConductivity=0.6),
313 MaterialDescriptionDielectric("Epoxy/Quartz", permittivity=3.5, lossTangent=0.015, color=_HueSat(5,60)),
314 MaterialDescriptionDielectric("Cyanate Ester/Quartz", permittivity=3.3, lossTangent=0.003, color=_HueSat(10,60)),
315 MaterialDescriptionDielectric("Bismaleimide/Quartz", permittivity=3.3, lossTangent=0.003, color=_HueSat(15,60)),
316 MaterialDescriptionDielectric("Polymidie/E Fiberglass", permittivity=4.1, lossTangent=0.004, color=_HueSat(20,60), density=1600, heatCapacity=1200, thermalConductivity=0.3),
317 MaterialDescriptionDielectric("Polyimide/Quartz", permittivity=3.1, lossTangent=0.003, color=_HueSat(20,60), density=1310, heatCapacity=1130, thermalConductivity=0.35),
318
319
320 MaterialDescriptionDielectric("PEEK", permittivity=3.5, lossTangent=0.004, color=_HueSat(155,60), density=1300, heatCapacity=1390, thermalConductivity=0.25),
321 MaterialDescriptionDielectric("PPO", permittivity=2.6, lossTangent=0.0007, color=_HueSat(165,60), density=1100, heatCapacity=1020, thermalConductivity=0.22),
322 MaterialDescriptionDielectric("PEI", permittivity=3.1, lossTangent=0.002, color=_HueSat(170,60), density=1300, heatCapacity=1050, thermalConductivity=0.18),
323 MaterialDescriptionDielectric("PES", permittivity=3.0, lossTangent=0.001, color=_HueSat(175,60), density=1400, heatCapacity=1100, thermalConductivity=0.18),
324 MaterialDescriptionDielectric("ABS", permittivity=2.8, lossTangent=0.01, color=_HueSat(180,60), density=1010, heatCapacity=1386, thermalConductivity=0.188),
325 MaterialDescriptionDielectric("PTFE", permittivity=2.06, lossTangent=0.0002, color=_fromHSL(160,60,220), density=2160, heatCapacity=1400, thermalConductivity=0.25),
326 MaterialDescriptionDielectric("HDPE", permittivity=2.3, lossTangent=0.0003, color=_HueSat(185,60), density=1000, heatCapacity=1330, thermalConductivity=0.45),
327 MaterialDescriptionDielectric("Polycarbonate", permittivity=3.1, lossTangent=0.01, color=_HueSat(190,60), density=1200, heatCapacity=1200, thermalConductivity=0.144),
328 MaterialDescriptionDielectric("Polystyrene", permittivity=2.5, lossTangent=0.0004, color=_HueSat(195,60), density=960, heatCapacity=1300, thermalConductivity=0.033),
329
330
331 MaterialDescriptionDielectric("Polyurethane Rain Erosion", permittivity=3.0, lossTangent=0.06, color=_HueSat(20,180), density=1090, heatCapacity=1400, thermalConductivity=0.024),
332 MaterialDescriptionDielectric("Fluoroelastomer Rain Erosion", permittivity=3.75, lossTangent=0.04, color=_HueSat(20,180), density=1800, heatCapacity=1670, thermalConductivity=0.2),
333
334
335 MaterialDescriptionDielectric("PTFE/Fiberglass", permittivity=2.25, lossTangent=0.001, color=_fromHSL(160,60,200), density=2200, heatCapacity=960, thermalConductivity=0.254),
336 MaterialDescriptionDielectric("PTFE/Quartz", permittivity=2.5, lossTangent=0.0005, color=_fromHSL(160,60,180), density=2100, heatCapacity=930, thermalConductivity=0.44),
337 MaterialDescriptionDielectric("PTFE/Ceramic", permittivity=10.0, lossTangent=0.0010, color=_fromHSL(160,60,120), density=2840, heatCapacity=1000, thermalConductivity=0.645),
338 MaterialDescriptionDielectric("CPS", permittivity=2.54, lossTangent=0.0004, color=_HueSat(235,120)),
339 MaterialDescriptionDielectric("CPS/Fiberglass", permittivity=2.7, lossTangent=0.0010, color=_HueSat(235,120)),
340 MaterialDescriptionDielectric("CPS/Quartz", permittivity=2.7, lossTangent=0.0005, color=_HueSat(235,120)),
341 MaterialDescriptionDielectric("Polyolefin", permittivity=2.3, lossTangent=0.0005, color=_HueSat(230,120), density=920, heatCapacity=1900, thermalConductivity=0.33),
342 MaterialDescriptionDielectric("Polyimide", permittivity=3.5, lossTangent=0.0010, color=_HueSat(225,120), density=1420, heatCapacity=1090, thermalConductivity=0.12),
343 MaterialDescriptionDielectric("PMMA", permittivity=2.6, lossTangent=0.007, color=_HueSat(220,120), density=1200, heatCapacity=1260, thermalConductivity=0.19),
344 MaterialDescriptionDielectric("Nylon", permittivity=3.1, lossTangent=0.008, color=_HueSat(215,120), density=1000, heatCapacity=1740, thermalConductivity=0.28),
345
346 MaterialDescriptionDielectric("Alumina", permittivity=9.8,lossTangent=0.000024, color=_fromHSL(129, 50, 220), density=3986, heatCapacity=775, thermalConductivity=30),
347
348 MaterialDescriptionDielectric("InP", permittivity=12.4, lossTangent=0.00030, evaluationFrequency=11.0e9, color=_fromHSL(149,35,120), density=4810, heatCapacity=310, thermalConductivity=68),
349 MaterialDescriptionDielectric("AlGaAs", permittivity=12.9, lossTangent=0.00028, evaluationFrequency=9.61e9, color=_fromHSL(149,35,120), density=5320, heatCapacity=330, thermalConductivity=55),
350
351 MaterialDescriptionDielectric("GaN", permittivity=8.9, lossTangent=0.0001, evaluationFrequency=10.0e9, color=_fromHSL(149,35,120), density=6100, heatCapacity=490, thermalConductivity=130),
352 MaterialDescriptionDielectric("GaP", permittivity=11.1, lossTangent=0.00018, evaluationFrequency=10.8e9, color=_fromHSL(149,35,120), density=4138, heatCapacity=430, thermalConductivity=110),
353 MaterialDescriptionDielectric("InN", permittivity=15.3, lossTangent=0.0001, evaluationFrequency=10.0e9, color=_fromHSL(149,35,120), density=6810, heatCapacity=320, thermalConductivity=45),
354 MaterialDescriptionDielectric("InAs", permittivity=15.15, lossTangent=0.0001, evaluationFrequency=10.0e9, color=_fromHSL(149,35,120), density=5670, heatCapacity=250, thermalConductivity=27),
355
356
357 MaterialDescriptionDielectric("GaAs", permittivity=12.9, lossTangent=0.00028, evaluationFrequency=9.61e9, color=_fromHSL(149,35,120), density=5317, heatCapacity=350, thermalConductivity=55),
358
359
360
361 MaterialDescriptionDielectric("Silicon nitride", permittivity=8.5, lossTangent=0.0036, evaluationFrequency=8.5e9, color=_fromHSL(142,8,137),
362 density=3300, heatCapacity=650, thermalConductivity=27),
363
364 MaterialDescriptionDielectric("Silicon", permittivity=12.0, lossTangent=0.009, evaluationFrequency=14.0e9, color=_fromHSL(146,50,160),
365 density=2328, heatCapacity=700, thermalConductivity=150),
366
367
368 MaterialDescriptionConductor("Cu", conductivity=5.8*1e+7, skinDepthAt10GHz=6.6*1e-7, color=_fromHSL(20, 209, 160),
369 nominalTemperature=293.15, linearTemperatureCoefficient=0.00429, density=8960.0, heatCapacity=390, thermalConductivity=401),
370 MaterialDescriptionConductor("Copper", conductivity=5.8*1e+7, skinDepthAt10GHz=6.6*1e-7, color=_fromHSL(20, 209, 160),
371 nominalTemperature=293.15, linearTemperatureCoefficient=0.00429, density=8960.0, heatCapacity=390, thermalConductivity=401),
372
373 MaterialDescriptionConductor("Al", conductivity=3.72*1e+7, skinDepthAt10GHz=8.26*1e-7, color=_fromHSL(129, 50, 160),
374 nominalTemperature=293.15, linearTemperatureCoefficient=0.0038, density=2700.0, heatCapacity=900, thermalConductivity=237),
375 MaterialDescriptionConductor("Aluminium", conductivity=3.72*1e+7, skinDepthAt10GHz=8.26*1e-7, color=_fromHSL(129, 50, 160),
376 nominalTemperature=293.15, linearTemperatureCoefficient=0.0038, density=2700.0, heatCapacity=900, thermalConductivity=237),
377
378 MaterialDescriptionConductor("Ag", conductivity=6.17*1e+7, skinDepthAt10GHz=6.42*1e-7, color=_fromHSL(28, 50, 160),
379 nominalTemperature=293.15, linearTemperatureCoefficient=0.0061, density=10490.0, heatCapacity=240, thermalConductivity=429),
380 MaterialDescriptionConductor("Silver", conductivity=6.17*1e+7, skinDepthAt10GHz=6.42*1e-7, color=_fromHSL(28, 50, 160),
381 nominalTemperature=293.15, linearTemperatureCoefficient=0.0061, density=10490.0, heatCapacity=240, thermalConductivity=429),
382
383 MaterialDescriptionConductor("Au", conductivity=4.1*1e+7, skinDepthAt10GHz=7.85*1e-7, color=_fromHSL(30, 240, 160),
384 nominalTemperature=293.15, linearTemperatureCoefficient=0.003715, density=19300.0, heatCapacity=129, thermalConductivity=318),
385 MaterialDescriptionConductor("Gold", conductivity=4.1*1e+7, skinDepthAt10GHz=7.85*1e-7, color=_fromHSL(30, 240, 160),
386 nominalTemperature=293.15, linearTemperatureCoefficient=0.003715, density=19300.0, heatCapacity=129, thermalConductivity=318),
387
388 MaterialDescriptionConductor("In", conductivity=0.87*1e+7, skinDepthAt10GHz=17.0*1e-7, color=_fromHSL(15, 15, 160),
389 nominalTemperature=293.15, linearTemperatureCoefficient=0.0052, density=7310.0, heatCapacity=233, thermalConductivity=81.8),
390 MaterialDescriptionConductor("Indium", conductivity=0.87*1e+7, skinDepthAt10GHz=17.0*1e-7, color=_fromHSL(15, 15, 160),
391 nominalTemperature=293.15, linearTemperatureCoefficient=0.0052, density=7310.0, heatCapacity=233, thermalConductivity=81.8),
392
393 MaterialDescriptionConductor("70-30 brass", conductivity=1.57*1e+7, skinDepthAt10GHz=12.7*1e-7, color=_fromHSL(26, 230, 160),
394 nominalTemperature=293.15, linearTemperatureCoefficient=0.0015, density=8580.0, heatCapacity=375, thermalConductivity=120),
395
396 MaterialDescriptionConductor("Typical solder", conductivity=0.71*1e+7, skinDepthAt10GHz=19.0*1e-7, color=_fromhsl(0.53, 0.022, 0.54),
397 nominalTemperature=293.15, linearTemperatureCoefficient=0.0038, density=7320.0, heatCapacity=167, thermalConductivity=60),
398
399
400 MaterialDescriptionDielectric("FR-4", permittivity=4.6, lossTangent=0.01, color=_HueSat(81, 120), density=1850, heatCapacity=600, thermalConductivity=0.81, thermalConductivityThroughPlane=0.29),
401 MaterialDescriptionDielectric("FR-5", permittivity=4.5, lossTangent=0.01, color=_HueSat(81, 120), density=1900, thermalConductivity=0.29),
402
403
404 MaterialDescriptionDielectric("Arlon_25FR", permittivity=3.48, lossTangent=0.0035, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=1800, thermalConductivity=0.45),
405 MaterialDescriptionDielectric("Arlon_25N", permittivity=3.25, lossTangent=0.0035, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=1700, thermalConductivity=0.45),
406 MaterialDescriptionDielectric("Arlon_AD270N", permittivity=2.7, lossTangent=0.003, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2400, thermalConductivity=0.235),
407 MaterialDescriptionDielectric("Arlon_AD300N", permittivity=3.0, lossTangent=0.003, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2400, thermalConductivity=0.235),
408 MaterialDescriptionDielectric("Arlon_AD320N", permittivity=3.2, lossTangent=0.003, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2400, thermalConductivity=0.235),
409 MaterialDescriptionDielectric("Arlon_AD350N", permittivity=3.5, lossTangent=0.003, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2400, thermalConductivity=0.235),
410 MaterialDescriptionDielectric("Arlon_AD360N", permittivity=3.6, lossTangent=0.003, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)),
411 MaterialDescriptionDielectric("Arlon_AR1000", permittivity=10.0, lossTangent=0.003, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2840, thermalConductivity=0.645),
412 MaterialDescriptionDielectric("Arlon_AR320", permittivity=3.2, lossTangent=0.003, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)),
413 MaterialDescriptionDielectric("Arlon_AR350", permittivity=3.5, lossTangent=0.0026, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)),
414 MaterialDescriptionDielectric("Arlon_AR450", permittivity=4.5, lossTangent=0.0026, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)),
415 MaterialDescriptionDielectric("Arlon_AR600", permittivity=6.0, lossTangent=0.0035, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)),
416 MaterialDescriptionDielectric("Arlon_CLTE", permittivity=2.94, lossTangent=0.0025, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2380, thermalConductivity=0.5),
417 MaterialDescriptionDielectric("Arlon_CuClad217LX", permittivity=2.17, lossTangent=0.0009, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2230, thermalConductivity=0.261),
418 MaterialDescriptionDielectric("Arlon_CuClad233LX", permittivity=2.33, lossTangent=0.0013, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2260, thermalConductivity=0.258),
419 MaterialDescriptionDielectric("Arlon_CuClad250GT", permittivity=2.5, lossTangent=0.0010, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2310, thermalConductivity=0.254),
420 MaterialDescriptionDielectric("Arlon_CuClad250GX", permittivity=2.5, lossTangent=0.0022, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2310, thermalConductivity=0.254),
421 MaterialDescriptionDielectric("Arlon_DiClad522", permittivity=2.5, lossTangent=0.0010, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2310, thermalConductivity=0.254),
422 MaterialDescriptionDielectric("Arlon_DiClad527", permittivity=2.5, lossTangent=0.0022, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2310, thermalConductivity=0.254),
423 MaterialDescriptionDielectric("Arlon_DiClad870", permittivity=2.33, lossTangent=0.0013, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2260, thermalConductivity=0.257),
424 MaterialDescriptionDielectric("Arlon_DiClad880", permittivity=2.17, lossTangent=0.0009, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2230, thermalConductivity=0.261),
425 MaterialDescriptionDielectric("Arlon_Intermod", permittivity=2.17, lossTangent=0.0009, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)),
426 MaterialDescriptionDielectric("Arlon_IsoClad917", permittivity=2.17, lossTangent=0.0009, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2230, thermalConductivity=0.263),
427 MaterialDescriptionDielectric("Arlon_DiClad933", permittivity=2.33, lossTangent=0.0013, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)),
428 MaterialDescriptionDielectric("Arlon_LNB", permittivity=3.3, lossTangent=0.0035, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)),
429 MaterialDescriptionDielectric("GE_Getek", permittivity=4.0, lossTangent=0.01, evaluationFrequency=10.0*1.0e9, color=_HueSat(60,180)),
430 MaterialDescriptionDielectric("GIL_GML1000", permittivity=3.05, lossTangent=0.004, evaluationFrequency=10.0*1.0e9, color=_HueSat(90,180), thermalConductivity=0.228),
431 MaterialDescriptionDielectric("GIL_MC3", permittivity=3.86, lossTangent=0.019, evaluationFrequency=10.0*1.0e9, color=_HueSat(90,180)),
432 MaterialDescriptionDielectric("GIL_MC5", permittivity=3.26, lossTangent=0.014, evaluationFrequency=10.0*1.0e9, color=_HueSat(90,180)),
433 MaterialDescriptionDielectric("Isola_GigaVer210", permittivity=3.7, lossTangent=0.01, evaluationFrequency=10.0*1.0e9, color=_HueSat(70,180)),
434 MaterialDescriptionDielectric("Isola_GigaVer410", permittivity=3.85, lossTangent=0.007, evaluationFrequency=10.0*1.0e9, color=_HueSat(70,180), thermalConductivity=0.5),
435 MaterialDescriptionDielectric("Isola_Duraver-E-Cu", permittivity=4.8, lossTangent=0.03, evaluationFrequency=10.0*1.0e9, color=_HueSat(70,180)),
436 MaterialDescriptionDielectric("Isola_FR408", permittivity=3.6, lossTangent=0.01, evaluationFrequency=10.0*1.0e9, color=_HueSat(70,180), thermalConductivity=0.4),
437 MaterialDescriptionDielectric("Matsushita_Megtron", permittivity=3.9, lossTangent=0.01, evaluationFrequency=10.0*1.0e9, color=_HueSat(100,180)),
438
439 MaterialDescriptionDielectric("Rogers_RO3003", permittivity=3.0, lossTangent=0.0011, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2100, heatCapacity=900, thermalConductivity=0.5),
440 MaterialDescriptionDielectric("Rogers_RO3006", permittivity=6.15, lossTangent=0.0020, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2600, heatCapacity=860, thermalConductivity=0.79),
441 MaterialDescriptionDielectric("Rogers_RO3010", permittivity=10.2, lossTangent=0.0022, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2800, heatCapacity=800, thermalConductivity=0.95),
442 MaterialDescriptionDielectric("Rogers_RO3203", permittivity=3.02, lossTangent=0.0016, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2100, heatCapacity=950, thermalConductivity=0.48),
443 MaterialDescriptionDielectric("Rogers_RO3206", permittivity=6.15, lossTangent=0.0027, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2700, heatCapacity=850, thermalConductivity=0.67),
444 MaterialDescriptionDielectric("Rogers_RO3210", permittivity=10.2, lossTangent=0.0027, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=3000, heatCapacity=790, thermalConductivity=0.81),
445 MaterialDescriptionDielectric("Rogers_RO4003", permittivity=3.38, lossTangent=0.0027, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=1790, thermalConductivity=0.71),
446 MaterialDescriptionDielectric("Rogers_RO4350", permittivity=3.48, lossTangent=0.0037, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=1860, thermalConductivity=0.69),
447
448 MaterialDescriptionDielectric("Rogers_RO3003_recommended4EDA", permittivity=3.0, lossTangent=0.0011, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2100, heatCapacity=900, thermalConductivity=0.5),
449 MaterialDescriptionDielectric("Rogers_RO3006_recommended4EDA", permittivity=6.5, lossTangent=0.0020, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2600, heatCapacity=860, thermalConductivity=0.79),
450 MaterialDescriptionDielectric("Rogers_RO3010_recommended4EDA", permittivity=11.2, lossTangent=0.0022, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2800, heatCapacity=800, thermalConductivity=0.95),
451 MaterialDescriptionDielectric("Rogers_RO3203_recommended4EDA", permittivity=3.02, lossTangent=0.0016, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2100, heatCapacity=950, thermalConductivity=0.48),
452 MaterialDescriptionDielectric("Rogers_RO3206_recommended4EDA", permittivity=6.6, lossTangent=0.0027, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2700, heatCapacity=850, thermalConductivity=0.67),
453 MaterialDescriptionDielectric("Rogers_RO3210_recommended4EDA", permittivity=10.8, lossTangent=0.0027, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=3000, heatCapacity=790, thermalConductivity=0.81),
454 MaterialDescriptionDielectric("Rogers_RO4003_recommended4EDA", permittivity=3.55, lossTangent=0.0027, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=1790, thermalConductivity=0.71),
455 MaterialDescriptionDielectric("Rogers_RO4350_recommended4EDA", permittivity=3.66, lossTangent=0.0037, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=1860, thermalConductivity=0.69),
456
457 MaterialDescriptionDielectric("Rogers_RT/Duroid5870", permittivity=2.33, lossTangent=0.0012, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2200, heatCapacity=960, thermalConductivity=0.22),
458 MaterialDescriptionDielectric("Rogers_RT/Duroid5880", permittivity=2.20, lossTangent=0.0009, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2200, heatCapacity=960, thermalConductivity=0.2),
459 MaterialDescriptionDielectric("Rogers_RT/Duroid5881", permittivity=2.17, lossTangent=0.0009, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124)),
460 MaterialDescriptionDielectric("Rogers_RT/Duroid6002", permittivity=2.93, lossTangent=0.0013, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2100, heatCapacity=930, thermalConductivity=0.6),
461 MaterialDescriptionDielectric("Rogers_RT/Duroid6006", permittivity=6.15, lossTangent=0.0012, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2700, heatCapacity=970, thermalConductivity=0.49),
462 MaterialDescriptionDielectric("Rogers_RT/Duroid6010", permittivity=10.2, lossTangent=0.0023, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=3100, heatCapacity=1000, thermalConductivity=0.86)
463 )
464
465 defaultMaterialDescriptions.update(_dictionaryFromDescriptions(
466 *[MaterialDescriptionDielectric("Neltec_MX%04d" % (int(diel*100)), permittivity=diel, lossTangent=float(losst)*0.0001, evaluationFrequency=10.0*1.0e9, color=_HueSat(227,114)) for (diel,losst) in
467 zip( [2.94,3.0,3.26,2.43,2.45,2.48,2.5,2.55,2.6,2.7,2.8,2.94,3.0,3.18], [22,23,25,16,16,17,17,18,19,20,21,22,23,24])]))
468
469
470
472 """
473 availableMaterials()
474 Returns a list of names of the available default materials.
475 """
476 return sorted(list(defaultMaterialDescriptions))
477
479 """
480 defaultMaterials()
481 Returns the list of default materials.
482 """
483
484 def wrappedCall(name):
485 try:
486 if iCb!=None:
487 iCb("Loading " + name)
488 except:
489 pass
490 return name
491 matList = [defaultMaterial(wrappedCall(x)) for x in availableMaterials()]
492 return matList
493
495 """
496 loadDefaultMaterials()
497 Loads the list of default materials in the current project.
498 """
499 proj = empro.activeProject
500 ms = defaultMaterials(iCb)
501 def wrappedCall(iMat):
502 try:
503 if iCb!=None:
504 iCb("Adding " + iMat.name)
505 except:
506 pass
507 return iMat
508 [proj.materials().append(wrappedCall(m)) for m in ms]
509
511 """
512 defaultMaterial(name)
513 Load a specific material from the set of default ones.
514 @type name: string
515 @param name: the name of the material to load
516 @rtype: empro.material.Material
517 @return: the requested material
518 """
519 return defaultMaterialDescriptions[name].makeMaterial()
520
522 """
523 applyMaterial(iObject, iMaterial)
524 Recursively applies the given material to an object hiearchy.
525 @type iObject: L{Part}
526 @param iObject: a part that can be an L{Assembly}
527 @rtype: None
528 @return: None
529 """
530 if isinstance(iMaterial, basestring):
531 iMaterial = empro.activeProject.materials()[iMaterial]
532 if not iMaterial:
533 raise KeyError("%r is not a material name" % iMaterial)
534 if isinstance(iObject,empro.geometry.Assembly):
535 for i in range(iObject.size()):
536 applyMaterial(iObject.at(i),iMaterial)
537 else:
538 iObject.material = iMaterial
539 return
540
558
559
560
562 - def __init__(self, path, name="data", samplingType="Linear", targetNbSamples=200):
563 """
564 @param path Can be either the path of a sio-, cti- or touchstone file
565 or the path of a directory containing a fem simulation
566 (typically <...>/emds_dsn/design)
567 @param name name of the circuit matrix
568 """
569 self.result = empro.analysis.CircuitResults(path, name, empro.enparams.SamplingConfig(samplingType,targetNbSamples))
570 self.name2id_ = {}
571 for i in range(self.nbPorts()):
572 self.name2id_[self.portName(i)] = i
574 """
575 number of ports
576 @deprecated, use numberOfPorts
577 """
578 return self.result.nbPorts()
580 """
581 number of ports
582 """
583 return self.result.nbPorts()
585 """
586 name of the i-th port (0-based indexing)
587 """
588 return self.result.portName(i)
590 """
591 returns the index for the port with name portName
592 """
593 try:
594 return self.name2id_[portName]
595 except:
596 raise Exception("unknown port name %s" % portName)
598 """
599 sets the sampling configuration
600 @param samplingType one of ['Linear', 'Logarithmic']
601 @param targetNbSamples target number of samples
602 """
603 self.result.samplingConfig = empro.enparams.SamplingConfig(samplingType, targetNbSamples)
605 """
606 returns the frequencies
607 """
608 return self.result.frequencies()
609 - def Src(self, port1, port2, complexPart):
610 """
611 returns the dataset for S(port1, port2)
612 @param port1 name of the port for the matrix row
613 @param port2 name of the port for the matrix column
614 @param complexPart must be in ["ComplexMagnitude", "Phase", "RealPart" or "ImaginaryPart"]
615 """
616 return self.result.Src(self.name2id(port1), self.name2id(port2), complexPart)
617 - def Zrc(self, port1, port2, complexPart):
618 """
619 returns the dataset for the impedance Z(port1, port2)
620 @param port1 name of the port for the matrix row
621 @param port2 name of the port for the matrix column
622 @param complexPart must be in ["ComplexMagnitude", "Phase", "RealPart" or "ImaginaryPart"]
623 """
624 return self.result.Zrc(self.name2id(port1), self.name2id(port2), complexPart)
625
626
627
628
629
630 - def Rrc(self, port1, port2):
631 """
632 returns the dataset for the resistance R(port1, port2)
633 with R(i,i) = real(1/Y(i,i)) (= all other ports shorted)
634 R(i,j) = real(Z(i,i) - 2*Z(i,j) + Z(j,j)) (= all other ports open)
635 @param port1 name of the port for the matrix row
636 @param port2 name of the port for the matrix column
637 """
638 return self.result.Rrc(self.name2id(port1), self.name2id(port2))
639 - def Lrc(self, port1, port2):
640 """
641 returns the dataset for the inductance L(port1, port2)
642 with L(i,i) = imag(1/Y(i,i))/omega (= all other ports shorted)
643 L(i,j) = imag(Z(i,i) - 2*Z(i,j) + Z(j,j))/omega (= all other ports open)
644 @param port1 name of the port for the matrix row
645 @param port2 name of the port for the matrix column
646 """
647 return self.result.Lrc(self.name2id(port1), self.name2id(port2))
648 - def Crc(self, port1, port2):
649 """
650 returns the dataset for the capacitance C(port1, port2)
651 with C(i,i) = imag(1/Z(i,i))/omega (= all other ports open)
652 C(i,j) = imag(1/Z(i,j))/omega (= all other ports open)
653 @param port1 name of the port for the matrix row
654 @param port2 name of the port for the matrix column
655 """
656 return self.result.Crc(self.name2id(port1), self.name2id(port2))
657 - def Zref(self, port, complexPart):
658 """
659 returns the dataset for the reference impedance Zref(port)
660 @param port name of the port
661 @param complexPart must be in ["ComplexMagnitude", "Phase", "RealPart" or "ImaginaryPart"]
662 """
663 return self.result.Zref(self.name2id(port), complexPart)
664
666 """
667 returns the S-matrix for at freq [Hz]
668 @param freq evaluation frequency [Hz]
669 """
670 return self.result.Smatrix(freq)
671
672 - def write(self, targetFileName, exportFormat, precision=16):
673 """
674 Writes the circuit result to file
675 @param targetFileName file to be written
676 @param exportFormat one of 'sio_ascii', 'sio_binary', 'cti', 'ads_dataset' or 'touchstone'
677 @param precision number of digits per double (6=single precision, 16=full precision)
678 """
679 self.result.write(targetFileName, exportFormat, precision)
680
681 - def writeReordered(self, targetFileName, exportFormat, portOrder, precision=16):
682 """
683 Writes the circuit result to file
684 @param targetFileName file to be written
685 @param exportFormat one of 'sio_ascii', 'sio_binary', 'cti', 'ads_dataset' or 'touchstone'
686 @param portOrder port names, in the requested order
687 @param precision number of digits per double (6=single precision, 16=full precision)
688 """
689 self.result.writeReordered(targetFileName, exportFormat, portOrder, precision)
690
692 if proj == None:
693 projDir = empro.activeProject.rootDir
694 else:
695 projDir = proj
696 import os
697 if "Simulations" in os.listdir(projDir):
698 projDir = os.path.join(projDir, "Simulations")
699 if sim == None:
700 raise Exception("invalid simulation id")
701
702 simDir = os.path.join(projDir, sim)
703 femDir = os.path.join(simDir, "emds_dsn", "design")
704 if os.path.exists(femDir):
705 return CircuitMatrix(femDir, sim)
706 fdtdCtiFile = os.path.join(simDir, "data.000.cti")
707 if os.path.exists(fdtdCtiFile):
708 return CircuitMatrix(fdtdCtiFile, sim)
709 raise Exception("no simulation results available for proj=<%s> and sim=%s" % (proj, sim))
710 return None
711