emerge 0.4.11__py3-none-any.whl → 0.5.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of emerge might be problematic. Click here for more details.

emerge/_emerge/solver.py CHANGED
@@ -39,7 +39,7 @@ If so, attempt to import PyPardiso (if its installed)
39
39
 
40
40
  if 'arm' not in platform.processor():
41
41
  try:
42
- from .pardiso.pardiso_solver import PyPardisoSolver, PyPardisoError
42
+ from .solve_interfaces.pardiso_interface import PardisoInterface
43
43
  _PARDISO_AVAILABLE = True
44
44
  except ModuleNotFoundError as e:
45
45
  logger.info('Pardiso not found, defaulting to SuperLU')
@@ -49,6 +49,11 @@ try:
49
49
  except ModuleNotFoundError as e:
50
50
  logger.debug('UMFPACK not found, defaulting to SuperLU')
51
51
 
52
+
53
+ ############################################################
54
+ # EIGENMODE FILTER ROUTINE #
55
+ ############################################################
56
+
52
57
  def filter_real_modes(eigvals, eigvecs, k0, ermax, urmax, sign):
53
58
  """
54
59
  Given arrays of eigenvalues `eigvals` and eigenvectors `eigvecs` (cols of shape (N,)),
@@ -85,6 +90,11 @@ def filter_real_modes(eigvals, eigvecs, k0, ermax, urmax, sign):
85
90
  filtered_vecs = filtered_vecs[:, order]
86
91
  return filtered_vals, filtered_vecs
87
92
 
93
+
94
+ ############################################################
95
+ # EIGENMODE ORTHOGONALITY CHECK #
96
+ ############################################################
97
+
88
98
  def filter_unique_eigenpairs(eigen_values: list[complex], eigen_vectors: list[np.ndarray], tol=-3) -> tuple[list[complex], list[np.ndarray]]:
89
99
  """
90
100
  Filters eigenvectors by orthogonality using dot-product tolerance.
@@ -115,6 +125,11 @@ def filter_unique_eigenpairs(eigen_values: list[complex], eigen_vectors: list[np
115
125
 
116
126
  return unique_values, unique_vectors
117
127
 
128
+
129
+ ############################################################
130
+ # COMPLEX MATRIX TO REAL MATRIX CONVERSION #
131
+ ############################################################
132
+
118
133
  def complex_to_real_block(A, b):
119
134
  """Return (Â, b̂) real-augmented representation of A x = b."""
120
135
  A_r = sparse.csr_matrix(A.real)
@@ -135,7 +150,14 @@ def real_to_complex_block(x):
135
150
  x_i = x[n:]
136
151
  return x_r + 1j * x_i
137
152
 
138
-
153
+
154
+ ############################################################
155
+ # BASE CLASS DEFINITIONS #
156
+ ############################################################
157
+
158
+ class SimulationError(Exception):
159
+ pass
160
+
139
161
  class Sorter:
140
162
  """ A Generic class that executes a sort on the indices.
141
163
  It must implement a sort and unsort method.
@@ -220,7 +242,11 @@ class EigSolver:
220
242
  pass
221
243
 
222
244
 
223
- ## ----- SORTERS ----------------------------------------------
245
+
246
+ ############################################################
247
+ # SORTERS #
248
+ ############################################################
249
+
224
250
  @dataclass
225
251
  class SolveReport:
226
252
  solver: str
@@ -252,7 +278,11 @@ class ReverseCuthillMckee(Sorter):
252
278
  logger.debug('Reversing Reverse Cuthill-Mckee sorting.')
253
279
  return x[self.inv_perm]
254
280
 
255
- ## ----- PRECONS ----------------------------------------------
281
+
282
+ ############################################################
283
+ # PRECONDITIONERS #
284
+ ############################################################
285
+
256
286
 
257
287
  class ILUPrecon(Preconditioner):
258
288
  """ Implements the incomplete LU preconditioner on matrix A. """
@@ -267,7 +297,11 @@ class ILUPrecon(Preconditioner):
267
297
  self.ilu = sparse.linalg.spilu(A, drop_tol=1e-2, fill_factor=self.fill_factor, permc_spec='MMD_AT_PLUS_A', diag_pivot_thresh=0.001, options=self.options)
268
298
  self.M = sparse.linalg.LinearOperator(A.shape, self.ilu.solve)
269
299
 
270
- ## ----- ITERATIVE SOLVERS -------------------------------------
300
+
301
+ ############################################################
302
+ # ITERATIVE SOLVERS #
303
+ ############################################################
304
+
271
305
 
272
306
  class SolverBicgstab(Solver):
273
307
  """ Implements the Bi-Conjugate Gradient Stabilized method"""
@@ -341,7 +375,11 @@ class SolverGMRES(Solver):
341
375
  x, info = gmres(A, b, atol=self.atol, callback=self.callback, restart=500, callback_type='pr_norm')
342
376
  return x, info
343
377
 
344
- ## ----- DIRECT SOLVERS ----------------------------------------
378
+
379
+ ############################################################
380
+ # DIRECT SOLVERS #
381
+ ############################################################
382
+
345
383
 
346
384
  class SolverSuperLU(Solver):
347
385
  """ Implements Scipi's direct SuperLU solver."""
@@ -374,16 +412,15 @@ class SolverUMFPACK(Solver):
374
412
  super().__init__()
375
413
  self.A: np.ndarray = None
376
414
  self.b: np.ndarray = None
377
- self.up: um.UmfpackContext = um.UmfpackContext('zl')
378
- self.up.control[um.UMFPACK_PRL] = 0 #less terminal printing
379
- self.up.control[um.UMFPACK_IRSTEP] = 2
380
- self.up.control[um.UMFPACK_STRATEGY] = um.UMFPACK_STRATEGY_SYMMETRIC
381
- self.up.control[um.UMFPACK_ORDERING] = 3
382
- self.up.control[um.UMFPACK_PIVOT_TOLERANCE] = 0.001
383
- self.up.control[um.UMFPACK_SYM_PIVOT_TOLERANCE] = 0.001
384
- self.up.control[um.UMFPACK_BLOCK_SIZE] = 64
385
- self.up.control[um.UMFPACK_FIXQ] = -1
386
- #self.up.control[um.UMFPACK_]
415
+ self.umfpack: um.UmfpackContext = um.UmfpackContext('zl')
416
+ self.umfpack.control[um.UMFPACK_PRL] = 0
417
+ self.umfpack.control[um.UMFPACK_IRSTEP] = 2
418
+ self.umfpack.control[um.UMFPACK_STRATEGY] = um.UMFPACK_STRATEGY_SYMMETRIC
419
+ self.umfpack.control[um.UMFPACK_ORDERING] = 3
420
+ self.umfpack.control[um.UMFPACK_PIVOT_TOLERANCE] = 0.001
421
+ self.umfpack.control[um.UMFPACK_SYM_PIVOT_TOLERANCE] = 0.001
422
+ self.umfpack.control[um.UMFPACK_BLOCK_SIZE] = 64
423
+ self.umfpack.control[um.UMFPACK_FIXQ] = -1
387
424
 
388
425
  self.fact_symb: bool = False
389
426
 
@@ -396,14 +433,14 @@ class SolverUMFPACK(Solver):
396
433
  A.indices = A.indices.astype(np.int64)
397
434
  if self.fact_symb is False:
398
435
  logger.debug('Executing symbollic factorization.')
399
- self.up.symbolic(A)
436
+ self.umfpack.symbolic(A)
400
437
  #self.up.report_symbolic()
401
438
  self.fact_symb = True
402
439
  if not reuse_factorization:
403
440
  #logger.debug('Executing numeric factorization.')
404
- self.up.numeric(A)
441
+ self.umfpack.numeric(A)
405
442
  self.A = A
406
- x = self.up.solve(um.UMFPACK_A, self.A, b, autoTranspose = False )
443
+ x = self.umfpack.solve(um.UMFPACK_A, self.A, b, autoTranspose = False )
407
444
  return x, 0
408
445
 
409
446
  class SolverPardiso(Solver):
@@ -413,18 +450,32 @@ class SolverPardiso(Solver):
413
450
 
414
451
  def __init__(self):
415
452
  super().__init__()
416
- self.solver: PyPardisoSolver = PyPardisoSolver()
453
+ self.solver: PardisoInterface = PardisoInterface()
454
+ self.fact_symb: bool = False
417
455
  self.A: np.ndarray = None
418
456
  self.b: np.ndarray = None
419
457
 
420
458
  def solve(self, A, b, precon, reuse_factorization: bool = False, id: int = -1):
421
459
  logger.info(f'Calling Pardiso Solver. ID={id}')
422
- self.A = A
423
- self.b = b
424
- x = self.solver.solve(A, b)
425
- return x, 0
460
+ if self.fact_symb is False:
461
+ logger.debug('Executing symbollic factorization.')
462
+ self.solver.symbolic(A)
463
+ self.fact_symb = True
464
+ if not reuse_factorization:
465
+ self.solver.numeric(A)
466
+ self.A = A
467
+ x, error = self.solver.solve(A, b)
468
+ if error != 0:
469
+ logger.error(f'Terminated with error code {error}')
470
+ logger.error(self.solver.get_error(error))
471
+ raise SimulationError(f'PARDISO Terminated with error code {error}')
472
+ return x, error
426
473
 
427
- ## ----- DIRECT EIG SOLVERS --------------------------------------
474
+
475
+ ############################################################
476
+ # DIRECT EIGENMODE SOLVERS #
477
+ ############################################################
478
+
428
479
  class SolverLAPACK(EigSolver):
429
480
 
430
481
  def __init__(self):
@@ -458,7 +509,11 @@ class SolverLAPACK(EigSolver):
458
509
  lam, vecs = filter_real_modes(lam, vecs, target_k0, 2, 2, sign=sign)
459
510
  return lam, vecs
460
511
 
461
- ## ----- ITER EIG SOLVERS ---------------------------------------
512
+
513
+ ############################################################
514
+ # ITERATIVE EIGEN SOLVERS #
515
+ ############################################################
516
+
462
517
 
463
518
  class SolverARPACK(EigSolver):
464
519
  """ Implements the Scipy ARPACK iterative eigenmode solver."""
@@ -578,7 +633,11 @@ class SmartARPACK(EigSolver):
578
633
  return eigen_values, eigen_modes
579
634
 
580
635
 
581
- ## ----- SOLVE ENUMS ---------------------------------------------
636
+
637
+ ############################################################
638
+ # SOLVER ENUM #
639
+ ############################################################
640
+
582
641
 
583
642
  class EMSolver(Enum):
584
643
  SUPERLU = 1
@@ -611,7 +670,11 @@ class EMSolver(Enum):
611
670
  elif self==EMSolver.SMART_ARPACK_BMA:
612
671
  return SmartARPACK_BMA()
613
672
 
614
- ## ----- SOLVE ROUTINES -----------------------------------------
673
+
674
+ ############################################################
675
+ # SOLVE ROUTINE #
676
+ ############################################################
677
+
615
678
 
616
679
  class SolveRoutine:
617
680
  """ A generic class describing a solve routine.
@@ -852,11 +915,12 @@ class SolveRoutine:
852
915
  NS = solve_ids.shape[0]
853
916
 
854
917
  A = A.tocsc()
855
-
856
- logger.debug(f' Removing {NF-NS} prescribed DOFs ({NS} left)')
857
-
918
+
858
919
  Asel = A[np.ix_(solve_ids, solve_ids)]
859
920
  bsel = b[solve_ids]
921
+ nnz = Asel.nnz
922
+
923
+ logger.debug(f' Removed {NF-NS} prescribed DOFs ({NS:,} left, {nnz:,} non-zero)')
860
924
 
861
925
  if solver.real_only:
862
926
  logger.debug(' Converting to real matrix')
@@ -878,6 +942,7 @@ class SolveRoutine:
878
942
  precon = str(self.precon)
879
943
 
880
944
  start = time.time()
945
+
881
946
  x_solved, code = solver.solve(Asorted, bsorted, self.precon, reuse_factorization=reuse, id=id)
882
947
  end = time.time()
883
948
  simtime = end-start
@@ -1031,4 +1096,10 @@ class AutomaticRoutine(SolveRoutine):
1031
1096
  return self._try_solver(EMSolver.SUPERLU)
1032
1097
  return self._try_solver(EMSolver.SUPERLU)
1033
1098
 
1099
+
1100
+
1101
+ ############################################################
1102
+ # DEFAULT DEFINITION #
1103
+ ############################################################
1104
+
1034
1105
  DEFAULT_ROUTINE = AutomaticRoutine()
emerge/lib.py CHANGED
@@ -10,48 +10,283 @@ MU0 = 1.2566370612720e-6
10
10
 
11
11
  ### MATERIALS
12
12
  VACUUM = Material(color="#2d8cd5", opacity=0.05)
13
- FR4 = Material(er=4.4, tand=0.001, color="#3c9747")
14
- # Conductors
15
- ALUMINUM = Material(cond=3.5e7, color="#aaaaaa")
16
- GOLD = Material(cond=4.1e7, color="#A07130")
17
- SILVER = Material(cond=6.3e7, color="#bfbfbf")
18
- TIN = Material(cond=9.17e6, color="#d6d6d6")
19
- NICKEL = Material(cond=1.43e7, color="#78706c")
20
- IRON = Material(cond=1.0e7, ur=5000, color="#666666")
21
- STEEL = Material(cond=1.45e6, ur=100, color="#808080")
22
-
23
- # Semiconductors & Dielectrics
24
- SILICON = Material(er=11.68, cond=0.1, color="#333333")
25
- SIO2 = Material(er=3.9, color="#e6e6e6")
26
- GAAS = Material(er=12.9, cond=0.0, color="#404071")
27
-
28
- # Dielectrics
29
- PTFE = Material(er=2.1, tand=0.0002, color="#cccccc")
30
- POLYIMIDE = Material(er=3.4, tand=0.02, color="#b8b8b8")
31
- CERAMIC = Material(er=6.0, tand=0.001, color="#efead1")
32
-
33
- # Liquids
34
- WATER = Material(er=80.1, cond=0.0, color="#0080ff", opacity=0.3)
35
- FERRITE = Material(er=12.0, ur=2000, tand=0.02, color="#994d4d")
36
-
37
- # Specialty RF Substrates
38
- ROGERS_4350B = Material(er=3.66, tand=0.0037, color="#3c9747")
39
- ROGERS_5880 = Material(er=2.2, tand=0.0009, color="#3c9747")
40
- ROGERS_RO3003 = Material(er=3.0, tand=0.0013, color="#3c9747")
41
- ROGERS_RO3010 = Material(er=10.2, tand=0.0023, color="#3c9747")
42
- ROGERS_RO4003C = Material(er=3.55, tand=0.0027, color="#3c9747")
43
- ROGERS_DUROID6002 = Material(er=2.94, tand=0.0012, color="#3c9747")
44
- ROGERS_DUROID6010 = Material(er=6.15, tand=0.0027, color="#3c9747")
45
- ROGERS_RT5880 = Material(er=2.2, tand=0.0009, color="#3c9747")
46
- TACONIC_RF35 = Material(er=3.5, tand=0.0018, color="#3c9747")
47
- TACONIC_TLC30 = Material(er=3.0, tand=0.0020, color="#3c9747")
48
- ISOLA_I_TERA_MT = Material(er=3.45, tand=0.0030, color="#3c9747")
49
- ISOLA_NELCO_4000_13 = Material(er=3.77, tand=0.008, color="#3c9747")
50
- VENTEC_VERDELAY_400HR = Material(er=4.0, tand=0.02, color="#3c9747")
13
+
14
+ ############################################################
15
+ # METALS #
16
+ ############################################################
17
+
18
+ GREY = "#bfbfbf"
19
+ MET_ALUMINUM = Material(cond=3.77e7, color=GREY)
20
+ MET_CARBON = Material(cond=3.33e4, color=GREY)
21
+ MET_CHROMIUM = Material(cond=5.56e6, color=GREY)
22
+ MET_COPPER = Material(cond=5.8e7, color="#62290c")
23
+ MET_GOLD = Material(cond=4.10e7, color=GREY)
24
+ MET_INDIUM = Material(cond=6.44e6, color=GREY)
25
+ MET_IRIDIUM = Material(cond=2.13e7, color=GREY)
26
+ MET_IRON = Material(cond=1.04e7, color=GREY)
27
+ MET_LEAD = Material(cond=4.84e6, color=GREY)
28
+ MET_MAGNESIUM = Material(cond=2.38e7, color=GREY)
29
+ MET_NICKEL = Material(cond=1.14e7, color=GREY)
30
+ MET_NICHROME = Material(cond=9.09e5, color=GREY)
31
+ MET_PALLADIUM = Material(cond=9.42e6, color=GREY)
32
+ MET_PLATINUM = Material(cond=9.42e6, color=GREY)
33
+ MET_RHODIUM = Material(cond=2.22e7, color=GREY)
34
+ MET_SILVER = Material(cond=6.29e7, color=GREY)
35
+ MET_TANTALUM = Material(cond=6.44e6, color=GREY)
36
+ MET_TANTALUM_NITRIDE = Material(cond=3.97e5, color=GREY)
37
+ MET_TIN = Material(cond=8.66e6, color=GREY)
38
+ MET_TITANIUM = Material(cond=1.82e6, color=GREY)
39
+ MET_TUNGSTEN = Material(cond=1.79e7, color=GREY)
40
+ MET_ZINC = Material(cond=1.76e7, color=GREY)
41
+ MET_ZIRCONIUM = Material(cond=2.44e7, color=GREY)
42
+
43
+
44
+ ############################################################
45
+ # SEMICONDUCTORS #
46
+ ############################################################
47
+
48
+ SEMI_SILICON = Material(er=11.7, tand=0.005, color="#b4b4b4") # Crystalline Si
49
+ SEMI_SILICON_N = Material(er=7.5, tand=0.0003, color="#a0a0a0") # Silicon Nitride (Si₃N₄)
50
+ SEMI_SILICON_OXIDE = Material(er=3.9, tand=0.0001, color="#e0e0e0") # Silicon Dioxide (SiO₂)
51
+ SEMI_GERMANIUM = Material(er=16.0, tand=0.001, color="#787878")
52
+ SEMI_GAAS = Material(er=13.1, tand=0.0016, color="#aa8888") # Gallium Arsenide
53
+ SEMI_GA_N = Material(er=8.9, tand=0.002, color="#8888cc") # Gallium Nitride
54
+ SEMI_INP = Material(er=12.5, tand=0.0015, color="#cc99aa") # Indium Phosphide
55
+ SEMI_ALN = Material(er=8.6, tand=0.0003, color="#ccccee") # Aluminum Nitride
56
+ SEMI_AL2O3 = Material(er=9.8, tand=0.0002, color="#eaeaea") # Alumina
57
+ SEMI_SAPPHIRE = Material(er=9.4, tand=0.0001, color="#ddddff")
58
+ SEMI_DIAMOND = Material(er=5.5, tand=0.00005, color="#cceeff") # Synthetic CVD diamond
59
+ SEMI_HBN = Material(er=4.0, tand=0.0001, color="#eeeeff") # Hexagonal Boron Nitride
60
+ SEMI_SIOXNY = Material(er=5.0, tand=0.002, color="#ddddee") # Silicon Oxynitride (SiOxNy)
61
+
62
+ ############################################################
63
+ # LIQUIDS #
64
+ ############################################################
65
+
66
+ LIQ_WATER = Material(er=80.1, cond=0.0, color="#0080ff", opacity=0.3)
67
+ LIQ_FERRITE = Material(er=12.0, ur=2000, tand=0.02, color="#994d4d")
68
+
69
+
70
+ ############################################################
71
+ # DIELECTRICS #
72
+ ############################################################
73
+ DIEL_PTFE = Material(er=2.1, tand=0.0002, color="#21912b")
74
+ DIEL_POLYIMIDE = Material(er=3.4, tand=0.02, color="#b8b8b8")
75
+ DIEL_CERAMIC = Material(er=6.0, tand=0.001, color="#efead1")
76
+ DIEL_AD10 = Material(er=10.2, tand=0.0078, color="#21912b")
77
+ DIEL_AD1000 = Material(er=10.2, tand=0.0023, color="#21912b")
78
+ DIEL_AD250 = Material(er=2.5, tand=0.0018, color="#21912b")
79
+ DIEL_AD250_PIM = Material(er=2.5, tand=0.0018, color="#21912b")
80
+ DIEL_AD250A = Material(er=2.50, tand=0.0015, color="#21912b")
81
+ DIEL_AD250C = Material(er=2.50, tand=0.0014, color="#21912b")
82
+ DIEL_AD255 = Material(er=2.55, tand=0.0018, color="#21912b")
83
+ DIEL_AD255A = Material(er=2.55, tand=0.0015, color="#21912b")
84
+ DIEL_AD255C = Material(er=2.55, tand=0.0014, color="#21912b")
85
+ DIEL_AD260A = Material(er=2.60, tand=0.0017, color="#21912b")
86
+ DIEL_AD270 = Material(er=2.7, tand=0.0023, color="#21912b")
87
+ DIEL_AD300 = Material(er=3, tand=0.003, color="#21912b")
88
+ DIEL_AD300_PIM = Material(er=3, tand=0.003, color="#21912b")
89
+ DIEL_AD300A = Material(er=3.00, tand=0.002, color="#21912b")
90
+ DIEL_AD300C = Material(er=2.97, tand=0.002, color="#21912b")
91
+ DIEL_AD320 = Material(er=3.2, tand=0.0038, color="#21912b")
92
+ DIEL_AD320_PIM = Material(er=3.2, tand=0.003, color="#21912b")
93
+ DIEL_AD320A = Material(er=3.20, tand=0.0032, color="#21912b")
94
+ DIEL_AD350 = Material(er=3.5, tand=0.003, color="#21912b")
95
+ DIEL_AD350_PIM = Material(er=3.5, tand=0.003, color="#21912b")
96
+ DIEL_AD350A = Material(er=3.50, tand=0.003, color="#21912b")
97
+ DIEL_AD410 = Material(er=4.1, tand=0.003, color="#21912b")
98
+ DIEL_AD430 = Material(er=4.3, tand=0.003, color="#21912b")
99
+ DIEL_AD450 = Material(er=4.5, tand=0.0035, color="#21912b")
100
+ DIEL_AD450A = Material(er=4.5, tand=0.0035, color="#21912b")
101
+ DIEL_AD5 = Material(er=5.1, tand=0.003, color="#21912b")
102
+ DIEL_AD600 = Material(er=5.90, tand=0.003, color="#21912b")
103
+ DIEL_AR1000 = Material(er=9.8, tand=0.003, color="#21912b")
104
+ DIEL_CER_10 = Material(er=10.00, tand=0.0035, color="#21912b")
105
+ DIEL_CLTE = Material(er=2.96, tand=0.0023, color="#21912b")
106
+ DIEL_CLTE_AT = Material(er=3.00, tand=0.0013, color="#21912b")
107
+ DIEL_CLTE_LC = Material(er=2.94, tand=0.0025, color="#21912b")
108
+ DIEL_CLTE_XT = Material(er=2.94, tand=0.0012, color="#21912b")
109
+ DIEL_COMCLAD_HF_ER2 = Material(er=2, tand=0.0025, color="#21912b")
110
+ DIEL_COMCLAD_HF_ER3 = Material(er=3, tand=0.0025, color="#21912b")
111
+ DIEL_COMCLAD_HF_ER4 = Material(er=4, tand=0.0025, color="#21912b")
112
+ DIEL_COMCLAD_HF_ER5 = Material(er=5, tand=0.0025, color="#21912b")
113
+ DIEL_COMCLAD_HF_ER6 = Material(er=6, tand=0.0025, color="#21912b")
114
+ DIEL_COPPER_CLAD_ULTEM = Material(er=3.05, tand=0.003, color="#21912b")
115
+ DIEL_CUCLAD_217LX = Material(er=2.17, tand=0.0009, color="#21912b")
116
+ DIEL_CUCLAD_233LX = Material(er=2.33, tand=0.0013, color="#21912b")
117
+ DIEL_CUCLAD_250GT = Material(er=2.5, tand=0.0018, color="#21912b")
118
+ DIEL_CUCLAD_250GX = Material(er=2.4, tand=0.0018, color="#21912b")
119
+ DIEL_CUFLON = Material(er=2.05, tand=0.00045, color="#21912b")
120
+ DIEL_DICLAD_522 = Material(er=2.4, tand=0.0018, color="#21912b")
121
+ DIEL_DICLAD_527 = Material(er=2.4, tand=0.0018, color="#21912b")
122
+ DIEL_DICLAD_870 = Material(er=2.33, tand=0.0013, color="#21912b")
123
+ DIEL_DICLAD_880 = Material(er=2.17, tand=0.0009, color="#21912b")
124
+ DIEL_DICLAD_880_PIM = Material(er=2.17, tand=0.0009, color="#21912b")
125
+ DIEL_GETEK = Material(er=3.5, tand=0.01, color="#21912b")
126
+ DIEL_GETEK = Material(er=3.8, tand=0.01, color="#21912b")
127
+ DIEL_IS6802_80 = Material(er=2.80, tand=0.003, color="#21912b")
128
+ DIEL_IS6803_00 = Material(er=3.00, tand=0.003, color="#21912b")
129
+ DIEL_IS6803_20 = Material(er=3.20, tand=0.003, color="#21912b")
130
+ DIEL_IS6803_33 = Material(er=3.33, tand=0.003, color="#21912b")
131
+ DIEL_IS6803_38 = Material(er=3.38, tand=0.0032, color="#21912b")
132
+ DIEL_IS6803_45 = Material(er=3.45, tand=0.0035, color="#21912b")
133
+ DIEL_ISOCLAD_917 = Material(er=2.17, tand=0.0013, color="#21912b")
134
+ DIEL_ISOCLAD_933 = Material(er=2.33, tand=0.0016, color="#21912b")
135
+ DIEL_ISOLA_I_TERA_MT = Material(er=3.45, tand=0.0030, color="#3c9747")
136
+ DIEL_ISOLA_NELCO_4000_13 = Material(er=3.77, tand=0.008, color="#3c9747")
137
+ DIEL_MAT_25N = Material(er=3.38, tand=0.0025, color="#21912b")
138
+ DIEL_MAT25FR = Material(er=3.58, tand=0.0035, color="#21912b")
139
+ DIEL_MEGTRON6R5775 = Material(er=3.61, tand=0.004, color="#21912b")
140
+ DIEL_MERCURYWAVE_9350 = Material(er=3.5, tand=0.004, color="#21912b")
141
+ DIEL_MULTICLAD_HF = Material(er=3.7, tand=0.0045, color="#21912b")
142
+ DIEL_N_8000 = Material(er=3.5, tand=0.011, color="#21912b")
143
+ DIEL_N4350_13RF = Material(er=3.5, tand=0.0065, color="#21912b")
144
+ DIEL_N4380_13RF = Material(er=3.8, tand=0.007, color="#21912b")
145
+ DIEL_N8000Q = Material(er=3.2, tand=0.006, color="#21912b")
146
+ DIEL_N9300_13RF = Material(er=3, tand=0.004, color="#21912b")
147
+ DIEL_N9320_13RF = Material(er=3.2, tand=0.0045, color="#21912b")
148
+ DIEL_N9338_13RF = Material(er=3.38, tand=0.0046, color="#21912b")
149
+ DIEL_N9350_13RF = Material(er=3.48, tand=0.0055, color="#21912b")
150
+ DIEL_NH9294 = Material(er=2.94, tand=0.0022, color="#21912b")
151
+ DIEL_NH9300 = Material(er=3.00, tand=0.0023, color="#21912b")
152
+ DIEL_NH9320 = Material(er=3.20, tand=0.0024, color="#21912b")
153
+ DIEL_NH9338 = Material(er=3.38, tand=0.0025, color="#21912b")
154
+ DIEL_NH9348 = Material(er=3.48, tand=0.003, color="#21912b")
155
+ DIEL_NH9350 = Material(er=3.50, tand=0.003, color="#21912b")
156
+ DIEL_NH9410 = Material(er=4.10, tand=0.003, color="#21912b")
157
+ DIEL_NH9450 = Material(er=4.50, tand=0.003, color="#21912b")
158
+ DIEL_NORCLAD = Material(er=2.55, tand=0.0011, color="#21912b")
159
+ DIEL_NX9240 = Material(er=2.40, tand=0.0016, color="#21912b")
160
+ DIEL_NX9245 = Material(er=2.45, tand=0.0016, color="#21912b")
161
+ DIEL_NX9250 = Material(er=2.50, tand=0.0017, color="#21912b")
162
+ DIEL_NX9255 = Material(er=2.55, tand=0.0018, color="#21912b")
163
+ DIEL_NX9260 = Material(er=2.60, tand=0.0019, color="#21912b")
164
+ DIEL_NX9270 = Material(er=2.70, tand=0.002, color="#21912b")
165
+ DIEL_NX9294 = Material(er=2.94, tand=0.0022, color="#21912b")
166
+ DIEL_NX9300 = Material(er=3.00, tand=0.0023, color="#21912b")
167
+ DIEL_NX9320 = Material(er=3.20, tand=0.0024, color="#21912b")
168
+ DIEL_NY9208 = Material(er=2.08, tand=0.0006, color="#21912b")
169
+ DIEL_NY9217 = Material(er=2.17, tand=0.0008, color="#21912b")
170
+ DIEL_NY9220 = Material(er=2.20, tand=0.0009, color="#21912b")
171
+ DIEL_NY9233 = Material(er=2.33, tand=0.0011, color="#21912b")
172
+ DIEL_POLYGUIDE = Material(er=2.320, tand=0.0005, color="#21912b")
173
+ DIEL_RF_30 = Material(er=3.00, tand=0.0019, color="#21912b")
174
+ DIEL_RF_301 = Material(er=2.97, tand=0.0018, color="#21912b")
175
+ DIEL_RF_35 = Material(er=3.50, tand=0.0025, color="#21912b")
176
+ DIEL_RF_35A2 = Material(er=3.50, tand=0.0015, color="#21912b")
177
+ DIEL_RF_35P = Material(er=3.50, tand=0.0034, color="#21912b")
178
+ DIEL_RF_35TC = Material(er=3.50, tand=0.0011, color="#21912b")
179
+ DIEL_RF_41 = Material(er=4.10, tand=0.0038, color="#21912b")
180
+ DIEL_RF_43 = Material(er=4.30, tand=0.0033, color="#21912b")
181
+ DIEL_RF_45 = Material(er=4.50, tand=0.0037, color="#21912b")
182
+ DIEL_RF_60A = Material(er=6.15, tand=0.0038, color="#21912b")
183
+ DIEL_RO3003 = Material(er=3.00, tand=0.0011, color="#21912b")
184
+ DIEL_RO3006 = Material(er=6.15, tand=0.002, color="#21912b")
185
+ DIEL_RO3010 = Material(er=10.2, tand=0.0022, color="#21912b")
186
+ DIEL_RO3035 = Material(er=3.50, tand=0.0017, color="#21912b")
187
+ DIEL_RO3203 = Material(er=3.02, tand=0.0016, color="#21912b")
188
+ DIEL_RO3206 = Material(er=6.15, tand=0.0027, color="#21912b")
189
+ DIEL_RO3210 = Material(er=10.2, tand=0.0027, color="#21912b")
190
+ DIEL_RO3730 = Material(er=3.00, tand=0.0016, color="#21912b")
191
+ DIEL_RO4003C = Material(er=3.38, tand=0.0029, color="#21912b")
192
+ DIEL_RO4350B = Material(er=3.48, tand=0.0037, color="#21912b")
193
+ DIEL_RO4350B_TX = Material(er=3.48, tand=0.0034, color="#21912b")
194
+ DIEL_RO4360 = Material(er=6.15, tand=0.0038, color="#21912b")
195
+ DIEL_RO4533 = Material(er=3.30, tand=0.0025, color="#21912b")
196
+ DIEL_RO4534 = Material(er=3.40, tand=0.0027, color="#21912b")
197
+ DIEL_RO4535 = Material(er=3.50, tand=0.0037, color="#21912b")
198
+ DIEL_RO4730 = Material(er=3.00, tand=0.0033, color="#21912b")
199
+ DIEL_RT_Duroid_5870 = Material(er=2.33, tand=0.0012, color="#21912b")
200
+ DIEL_RT_Duroid_5880 = Material(er=2.20, tand=0.0009, color="#21912b")
201
+ DIEL_RT_Duroid_5880LZ = Material(er=1.96, tand=0.0019, color="#21912b")
202
+ DIEL_RT_Duroid_6002 = Material(er=2.94, tand=0.0012, color="#21912b")
203
+ DIEL_RT_Duroid_6006 = Material(er=6.15, tand=0.0027, color="#21912b")
204
+ DIEL_RT_Duroid_6010_2LM = Material(er=10.2, tand=0.0023, color="#21912b")
205
+ DIEL_RT_Duroid_6035HTC = Material(er=3.50, tand=0.0013, color="#21912b")
206
+ DIEL_RT_Duroid_6202 = Material(er=2.94, tand=0.0015, color="#21912b")
207
+ DIEL_RT_Duroid_6202PR = Material(er=2.90, tand=0.002, color="#21912b")
208
+ DIEL_SYRON_70000_002IN_Thick = Material(er=3.4, tand=0.0045, color="#21912b")
209
+ DIEL_SYRON_71000_004IN_THICK = Material(er=3.39, tand=0.005, color="#21912b")
210
+ DIEL_SYRON_71000INCH = Material(er=3.61, tand=0.006, color="#21912b")
211
+ DIEL_TACLAMPLUS= Material(er=2.10, tand=0.0004, color="#21912b")
212
+ DIEL_TC350 = Material(er=3.50, tand=0.002, color="#21912b")
213
+ DIEL_TC600 = Material(er=6.15, tand=0.002, color="#21912b")
214
+ DIEL_THETA = Material(er=3.85, tand=0.0123, color="#21912b")
215
+ DIEL_TLA_6 = Material(er=2.62, tand=0.0017, color="#21912b")
216
+ DIEL_TLC_27 = Material(er=2.75, tand=0.003, color="#21912b")
217
+ DIEL_TLC_30 = Material(er=3.00, tand=0.003, color="#21912b")
218
+ DIEL_TLC_32 = Material(er=3.20, tand=0.003, color="#21912b")
219
+ DIEL_TLC_338 = Material(er=3.38, tand=0.0034, color="#21912b")
220
+ DIEL_TLC_35 = Material(er=3.50, tand=0.0037, color="#21912b")
221
+ DIEL_TLE_95 = Material(er=2.95, tand=0.0028, color="#21912b")
222
+ DIEL_TLF_34 = Material(er=3.40, tand=0.002, color="#21912b")
223
+ DIEL_TLF_35 = Material(er=3.50, tand=0.002, color="#21912b")
224
+ DIEL_TLG_29 = Material(er=2.87, tand=0.0027, color="#21912b")
225
+ DIEL_TLG_30 = Material(er=3, tand=0.0038, color="#21912b")
226
+ DIEL_TLP_3 = Material(er=2.33, tand=0.0009, color="#21912b")
227
+ DIEL_TLP_5 = Material(er=2.20, tand=0.0009, color="#21912b")
228
+ DIEL_TLP_5A = Material(er=2.17, tand=0.0009, color="#21912b")
229
+ DIEL_TLT_0 = Material(er=2.45, tand=0.0019, color="#21912b")
230
+ DIEL_TLT_6 = Material(er=2.65, tand=0.0019, color="#21912b")
231
+ DIEL_TLT_7 = Material(er=2.60, tand=0.0019, color="#21912b")
232
+ DIEL_TLT_8 = Material(er=2.55, tand=0.0019, color="#21912b")
233
+ DIEL_TLT_9 = Material(er=2.50, tand=0.0019, color="#21912b")
234
+ DIEL_TLX_0 = Material(er=2.45, tand=0.0019, color="#21912b")
235
+ DIEL_TLX_6 = Material(er=2.65, tand=0.0019, color="#21912b")
236
+ DIEL_TLX_7 = Material(er=2.60, tand=0.0019, color="#21912b")
237
+ DIEL_TLX_8 = Material(er=2.55, tand=0.0019, color="#21912b")
238
+ DIEL_TLX_9 = Material(er=2.50, tand=0.0019, color="#21912b")
239
+ DIEL_TLY_3 = Material(er=2.33, tand=0.0012, color="#21912b")
240
+ DIEL_TLY_3F = Material(er=2.33, tand=0.0012, color="#21912b")
241
+ DIEL_TLY_5 = Material(er=2.20, tand=0.0009, color="#21912b")
242
+ DIEL_TLY_5_L = Material(er=2.20, tand=0.0009, color="#21912b")
243
+ DIEL_TLY_5A = Material(er=2.17, tand=0.0009, color="#21912b")
244
+ DIEL_TLY_5AL = Material(er=2.17, tand=0.0009, color="#21912b")
245
+ DIEL_TMM_10 = Material(er=9.20, tand=0.0022, color="#21912b")
246
+ DIEL_TMM_10i = Material(er=9.80, tand=0.002, color="#21912b")
247
+ DIEL_TMM_3 = Material(er=3.27, tand=0.002, color="#21912b")
248
+ DIEL_TMM_4 = Material(er=4.50, tand=0.002, color="#21912b")
249
+ DIEL_TMM_6 = Material(er=6.00, tand=0.0023, color="#21912b")
250
+ DIEL_TRF_41 = Material(er=4.10, tand=0.0035, color="#21912b")
251
+ DIEL_TRF_43 = Material(er=4.30, tand=0.0035, color="#21912b")
252
+ DIEL_TRF_45 = Material(er=4.50, tand=0.0035, color="#21912b")
253
+ DIEL_TSM_26 = Material(er=2.60, tand=0.0014, color="#21912b")
254
+ DIEL_TSM_29 = Material(er=2.94, tand=0.0013, color="#21912b")
255
+ DIEL_TSM_30 = Material(er=3.00, tand=0.0013, color="#21912b")
256
+ DIEL_TSM_DS = Material(er=2.85, tand=0.001, color="#21912b")
257
+ DIEL_TSM_DS3 = Material(er=3.00, tand=0.0011, color="#21912b")
258
+ DIEL_ULTRALAM_2000 = Material(er=2.4, tand=0.0019, color="#21912b")
259
+ DIEL_ULTRALAM_3850 = Material(er=2.9, tand=0.0025, color="#21912b")
260
+ DIEL_XT_Duroid_80000_002IN_Thick = Material(er=3.23, tand=0.0035, color="#21912b")
261
+ DIEL_XT_Duroid_8100 = Material(er=3.54, tand=0.0049, color="#21912b")
262
+ DIEL_XT_Duroid_81000_004IN_Thick = Material(er=3.32, tand=0.0038, color="#21912b")
51
263
 
52
264
  # Legacy FR Materials
53
- FR1 = Material(er=4.8, tand=0.025, color="#3c9747")
54
- FR2 = Material(er=4.8, tand=0.02, color="#3c9747")
265
+ DIEL_FR1 = Material(er=4.8, tand=0.025, color="#3c9747") # Paper + phenolic resin
266
+ DIEL_FR2 = Material(er=4.8, tand=0.02, color="#3c9747") # Paper + phenolic resin
267
+ DIEL_FR3 = Material(er=4.5, tand=0.02, color="#2b7a4b") # Paper + epoxy resin
268
+ DIEL_FR4 = Material(er=4.4, tand=0.015, color="#1e8449") # Woven glass + epoxy resin (industry standard)
269
+ DIEL_FR5 = Material(er=4.2, tand=0.012, color="#156e38") # Woven glass + high-temp epoxy resin
270
+ DIEL_FR6 = Material(er=5.2, tand=0.030, color="#145a32") # Paper + unknown resin, poor thermal performance
55
271
 
56
272
  # Magnetic Materials
57
- MU_METAL = Material(cond=1.0e6, ur=200000, color="#666680")
273
+ MU_METAL = Material(cond=1.0e6, ur=200000, color="#666680")
274
+
275
+
276
+ ############################################################
277
+ # FOAMS #
278
+ ############################################################
279
+
280
+ FOAM_ROHACELL_31 = Material(er=1.05, tand=0.0005, color="#f0e1a1") # PMI-based structural foam
281
+ FOAM_ROHACELL_51 = Material(er=1.07, tand=0.0006, color="#f0dea0") # denser version
282
+ FOAM_ROHACELL_71 = Material(er=1.10, tand=0.0007, color="#e5d199")
283
+ FOAM_PEI = Material(er=1.15, tand=0.0035, color="#e0b56f") # polyetherimide-based foam
284
+ FOAM_PMI = Material(er=1.10, tand=0.0008, color="#d9c690") # polymethacrylimide
285
+ FOAM_PVC = Material(er=1.20, tand=0.0040, color="#cccccc")
286
+ FOAM_EPS = Material(er=1.03, tand=0.0050, color="#f7f7f7") # expanded polystyrene
287
+ FOAM_XPS = Material(er=1.05, tand=0.0030, color="#e0e0e0") # extruded polystyrene
288
+ FOAM_PU = Material(er=1.10, tand=0.0080, color="#d0d0d0") # polyurethane foam
289
+ FOAM_GLAS = Material(er=3.10, tand=0.0050, color="#888888") # cellular glass, denser
290
+ FOAM_AIREX_C70 = Material(er=1.10, tand=0.0010, color="#f7e7a3") # PET closed cell
291
+ FOAM_AIREX_T92 = Material(er=1.10, tand=0.0020, color="#f6d08a") # higher strength PET
292
+ FOAM_PVC_CORECELL = Material(er=1.56, tand=0.0025, color="#aaaaaa") # structural core PVC
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: emerge
3
- Version: 0.4.11
3
+ Version: 0.5.1
4
4
  Summary: An open source EM FEM simulator in Python
5
5
  Project-URL: Homepage, https://github.com/FennisRobert/EMerge
6
6
  Project-URL: Issues, https://github.com/FennisRobert/EMerge/issues