emerge 0.5.3__py3-none-any.whl → 0.5.5__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/__init__.py +2 -2
- emerge/_emerge/__init__.py +1 -26
- emerge/_emerge/_cache_check.py +46 -0
- emerge/_emerge/logsettings.py +17 -0
- emerge/_emerge/mesh3d.py +9 -9
- emerge/_emerge/mth/pairing.py +1 -2
- emerge/_emerge/periodic.py +1 -1
- emerge/_emerge/selection.py +1 -1
- emerge/_emerge/simmodel.py +0 -1
- emerge/_emerge/solver.py +2 -3
- emerge/lib.py +53 -36
- {emerge-0.5.3.dist-info → emerge-0.5.5.dist-info}/METADATA +11 -8
- {emerge-0.5.3.dist-info → emerge-0.5.5.dist-info}/RECORD +16 -15
- {emerge-0.5.3.dist-info → emerge-0.5.5.dist-info}/licenses/LICENSE +39 -0
- {emerge-0.5.3.dist-info → emerge-0.5.5.dist-info}/WHEEL +0 -0
- {emerge-0.5.3.dist-info → emerge-0.5.5.dist-info}/entry_points.txt +0 -0
emerge/__init__.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""A Python based FEM solver.
|
|
2
|
-
Copyright (C) 2025
|
|
2
|
+
Copyright (C) 2025 Robert Fennis
|
|
3
3
|
|
|
4
4
|
This program is free software; you can redistribute it and/or
|
|
5
5
|
modify it under the terms of the GNU General Public License
|
|
@@ -36,7 +36,7 @@ os.environ["NUMEXPR_NUM_THREADS"] = NTHREADS
|
|
|
36
36
|
############################################################
|
|
37
37
|
# IMPORT MODULES #
|
|
38
38
|
############################################################
|
|
39
|
-
|
|
39
|
+
from ._emerge import _cache_check
|
|
40
40
|
from ._emerge.logsettings import LOG_CONTROLLER
|
|
41
41
|
from loguru import logger
|
|
42
42
|
|
emerge/_emerge/__init__.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# """A Python based FEM solver.
|
|
2
|
-
# Copyright (C) 2025
|
|
2
|
+
# Copyright (C) 2025 Robert Fennis
|
|
3
3
|
|
|
4
4
|
# This program is free software; you can redistribute it and/or
|
|
5
5
|
# modify it under the terms of the GNU General Public License
|
|
@@ -15,28 +15,3 @@
|
|
|
15
15
|
# along with this program; if not, see
|
|
16
16
|
# <https://www.gnu.org/licenses/>.
|
|
17
17
|
|
|
18
|
-
# """
|
|
19
|
-
# import os
|
|
20
|
-
|
|
21
|
-
# os.environ["OMP_NUM_THREADS"] = "1"
|
|
22
|
-
# os.environ["MKL_NUM_THREADS"] = "1"
|
|
23
|
-
# os.environ["OPENBLAS_NUM_THREADS"] = "1"
|
|
24
|
-
|
|
25
|
-
# from loguru import logger
|
|
26
|
-
# from .logsettings import logger_format
|
|
27
|
-
# import sys
|
|
28
|
-
|
|
29
|
-
# logger.remove()
|
|
30
|
-
# logger.add(sys.stderr, format=logger_format)
|
|
31
|
-
|
|
32
|
-
# logger.debug('Importing modules')
|
|
33
|
-
# from _emerge.simmodel import Simulation3D
|
|
34
|
-
# from _emerge.material import Material, FR4, AIR, VACUUM, COPPER
|
|
35
|
-
# import bc
|
|
36
|
-
# from _emerge.solver import superlu_info, SolverBicgstab, SolverGMRES, SolveRoutine, ReverseCuthillMckee, Sorter, SolverPardiso, SolverUMFPACK
|
|
37
|
-
# from _emerge.cs import CoordinateSystem, Plane, Axis, XAX, YAX, ZAX, XYPLANE, XZPLANE, YZPLANE, YXPLANE, ZXPLANE, ZYPLANE
|
|
38
|
-
# from _emerge.coord import Line
|
|
39
|
-
# import geo
|
|
40
|
-
# from _emerge.selection import Selection, FaceSelection, DomainSelection, EdgeSelection
|
|
41
|
-
# from _emerge.mth.common_functions import norm
|
|
42
|
-
# logger.debug('Importing complete!')
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# EMerge is an open source Python based FEM EM simulation module.
|
|
2
|
+
# Copyright (C) 2025 Robert Fennis.
|
|
3
|
+
|
|
4
|
+
# This program is free software; you can redistribute it and/or
|
|
5
|
+
# modify it under the terms of the GNU General Public License
|
|
6
|
+
# as published by the Free Software Foundation; either version 2
|
|
7
|
+
# of the License, or (at your option) any later version.
|
|
8
|
+
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program; if not, see
|
|
16
|
+
# <https://www.gnu.org/licenses/>.
|
|
17
|
+
|
|
18
|
+
from numba.core import event, types
|
|
19
|
+
from numba import njit
|
|
20
|
+
|
|
21
|
+
_COMPILE_MESSAGE = """
|
|
22
|
+
[ EMERGE ]
|
|
23
|
+
⚠ Numba is compiling optimized code; this may take a few minutes.
|
|
24
|
+
• Additional functions may be compiled on-the-fly.
|
|
25
|
+
• Compilation happens only once—subsequent runs load from cache.
|
|
26
|
+
Please wait…"""
|
|
27
|
+
|
|
28
|
+
@njit(cache=True)
|
|
29
|
+
def _donothing(a):
|
|
30
|
+
return a
|
|
31
|
+
|
|
32
|
+
class Notify(event.Listener):
|
|
33
|
+
def on_start(self, ev):
|
|
34
|
+
f = ev.data['dispatcher']
|
|
35
|
+
sig = ev.data['args']
|
|
36
|
+
if f is _donothing: # limit to the function you care about
|
|
37
|
+
sig = ev.data['args']
|
|
38
|
+
print(_COMPILE_MESSAGE)
|
|
39
|
+
|
|
40
|
+
def on_end(self, ev): # unused here
|
|
41
|
+
pass
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# install listener only for this block:
|
|
45
|
+
with event.install_listener("numba:compile", Notify()):
|
|
46
|
+
_donothing(0)
|
emerge/_emerge/logsettings.py
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
# EMerge is an open source Python based FEM EM simulation module.
|
|
2
|
+
# Copyright (C) 2025 Robert Fennis.
|
|
3
|
+
|
|
4
|
+
# This program is free software; you can redistribute it and/or
|
|
5
|
+
# modify it under the terms of the GNU General Public License
|
|
6
|
+
# as published by the Free Software Foundation; either version 2
|
|
7
|
+
# of the License, or (at your option) any later version.
|
|
8
|
+
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program; if not, see
|
|
16
|
+
# <https://www.gnu.org/licenses/>.
|
|
17
|
+
|
|
1
18
|
from loguru import logger
|
|
2
19
|
import sys
|
|
3
20
|
from typing import Literal
|
emerge/_emerge/mesh3d.py
CHANGED
|
@@ -455,15 +455,11 @@ class Mesh3D(Mesh):
|
|
|
455
455
|
Returns:
|
|
456
456
|
tuple[dict[int, int], np.ndarray, np.ndarray]: The node index mapping and the node index arrays
|
|
457
457
|
"""
|
|
458
|
-
|
|
459
|
-
def gen_key(coord, mult):
|
|
460
|
-
return tuple([int(round(c*mult)) for c in coord])
|
|
461
458
|
|
|
462
|
-
ftag_to_node = dict()
|
|
463
|
-
face_dimtags = gmsh.model.get_entities(2)
|
|
464
|
-
|
|
465
459
|
node_ids_1 = []
|
|
466
460
|
node_ids_2 = []
|
|
461
|
+
|
|
462
|
+
face_dimtags = gmsh.model.get_entities(2)
|
|
467
463
|
|
|
468
464
|
for d,t in face_dimtags:
|
|
469
465
|
domain_tag, f_tags, node_tags = gmsh.model.mesh.get_elements(2, t)
|
|
@@ -472,19 +468,23 @@ class Mesh3D(Mesh):
|
|
|
472
468
|
node_ids_1.extend(node_tags)
|
|
473
469
|
if t in bc.face2.tags:
|
|
474
470
|
node_ids_2.extend(node_tags)
|
|
475
|
-
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
node_ids_1 = sorted(list(set(node_ids_1)))
|
|
474
|
+
node_ids_2 = sorted(list(set(node_ids_2)))
|
|
476
475
|
|
|
477
476
|
all_node_ids = np.unique(np.array(node_ids_1 + node_ids_2))
|
|
478
477
|
dsmin = shortest_distance(self.nodes[:,all_node_ids])
|
|
479
478
|
|
|
480
|
-
node_ids_1_arry = np.
|
|
481
|
-
node_ids_2_arry = np.
|
|
479
|
+
node_ids_1_arry = np.array(node_ids_1)
|
|
480
|
+
node_ids_2_arry = np.array(node_ids_2)
|
|
482
481
|
dv = np.array(bc.dv)
|
|
483
482
|
|
|
484
483
|
nodemap = pair_coordinates(self.nodes, node_ids_1_arry, node_ids_2_arry, dv, dsmin/2)
|
|
485
484
|
node_ids_2_unsorted = [nodemap[i] for i in sorted(node_ids_1)]
|
|
486
485
|
node_ids_2_sorted = sorted(node_ids_2_unsorted)
|
|
487
486
|
conv_map = {i1: i2 for i1, i2 in zip(node_ids_2_unsorted, node_ids_2_sorted)}
|
|
487
|
+
|
|
488
488
|
return conv_map, np.array(node_ids_2_unsorted), np.array(node_ids_2_sorted)
|
|
489
489
|
|
|
490
490
|
|
emerge/_emerge/mth/pairing.py
CHANGED
|
@@ -47,7 +47,6 @@ def link_coords(coords: np.ndarray, ids1: np.ndarray, ids2: np.ndarray, disp: np
|
|
|
47
47
|
for i1 in range(N):
|
|
48
48
|
ictr = 0
|
|
49
49
|
c1 = coords[:,ids1[i1]]
|
|
50
|
-
|
|
51
50
|
for i2 in range(id_start, N):
|
|
52
51
|
if available[i2] == 0:
|
|
53
52
|
continue
|
|
@@ -91,7 +90,7 @@ def pair_coordinates(coords: np.ndarray, ids1: np.ndarray, ids2: np.ndarray, dis
|
|
|
91
90
|
ids2_c_sorted = sorted(ids2, key= lambda x: tuple(coords[:,x]-disp))
|
|
92
91
|
|
|
93
92
|
mapping = link_coords(coords, np.array(ids1_c_sorted), np.array(ids2_c_sorted), disp, dsmax)
|
|
94
|
-
|
|
93
|
+
|
|
95
94
|
mapping = {i: j for i,j in zip(mapping[0,:], mapping[1,:])}
|
|
96
95
|
|
|
97
96
|
return mapping
|
emerge/_emerge/periodic.py
CHANGED
|
@@ -31,7 +31,7 @@ def _pair_selection(f1: Selection, f2: Selection, translation: tuple[float, floa
|
|
|
31
31
|
f2s = []
|
|
32
32
|
for t1, c1 in zip(f1.tags, c1s):
|
|
33
33
|
for t2, c2 in zip(f2.tags, c2s):
|
|
34
|
-
if np.linalg.norm((c1 + ds)-c2) < 1e-
|
|
34
|
+
if np.linalg.norm((c1 + ds)-c2) < 1e-8:
|
|
35
35
|
f1s.append(Selection([t1,]))
|
|
36
36
|
f2s.append(Selection([t2,]))
|
|
37
37
|
return f1s, f2s
|
emerge/_emerge/selection.py
CHANGED
|
@@ -536,7 +536,7 @@ class Selector:
|
|
|
536
536
|
nx: float,
|
|
537
537
|
ny: float,
|
|
538
538
|
nz: float,
|
|
539
|
-
tolerance: float = 1e-
|
|
539
|
+
tolerance: float = 1e-8) -> FaceSelection:
|
|
540
540
|
"""Returns a FaceSelection for all faces that lie in a provided infinite plane
|
|
541
541
|
specified by an origin plus a plane normal vector.
|
|
542
542
|
|
emerge/_emerge/simmodel.py
CHANGED
|
@@ -384,7 +384,6 @@ class Simulation3D:
|
|
|
384
384
|
logger.error('GMSH Mesh error detected.')
|
|
385
385
|
print(_GMSH_ERROR_TEXT)
|
|
386
386
|
raise
|
|
387
|
-
|
|
388
387
|
self.mesh.update(self.mesher._get_periodic_bcs())
|
|
389
388
|
self.mesh.exterior_face_tags = self.mesher.domain_boundary_face_tags
|
|
390
389
|
gmsh.model.occ.synchronize()
|
emerge/_emerge/solver.py
CHANGED
|
@@ -607,14 +607,13 @@ class CuDSSSolver(Solver):
|
|
|
607
607
|
logger.debug('Executing symbollic factorization')
|
|
608
608
|
x = self._cudss.from_symbolic(A,b)
|
|
609
609
|
self.fact_symb = True
|
|
610
|
-
return x, 0
|
|
611
610
|
else:
|
|
612
611
|
if reuse_factorization:
|
|
613
612
|
x = self._cudss.from_solve(b)
|
|
614
|
-
return x, 0
|
|
615
613
|
else:
|
|
616
614
|
x = self._cudss.from_numeric(A,b)
|
|
617
|
-
|
|
615
|
+
|
|
616
|
+
return x, SolveReport(solver=str(self), exit_code=0, aux={})
|
|
618
617
|
|
|
619
618
|
|
|
620
619
|
############################################################
|
emerge/lib.py
CHANGED
|
@@ -1,15 +1,28 @@
|
|
|
1
|
+
"""
|
|
2
|
+
╔══════════════════════════════════════════════════════════════════════╗
|
|
3
|
+
║ library.py – Material-property database ║
|
|
4
|
+
║ ║
|
|
5
|
+
║ This file is released under CC0 1.0 – Public-Domain Dedication. ║
|
|
6
|
+
║ You may use, copy, modify, and distribute it without restriction. ║
|
|
7
|
+
║ ║
|
|
8
|
+
║ All OTHER files in this repository are proprietary. See LICENSE ║
|
|
9
|
+
║ at the project root for full terms, conditions, and disclaimers. ║
|
|
10
|
+
║ ║
|
|
11
|
+
║ DISCLAIMER: Data herein are provided “as is”, with no warranties. ║
|
|
12
|
+
║ Verify critical values independently before use. ║
|
|
13
|
+
╚══════════════════════════════════════════════════════════════════════╝
|
|
14
|
+
"""
|
|
1
15
|
from ._emerge.material import Material, AIR, COPPER
|
|
2
16
|
from ._emerge.const import C0, Z0, PI, EPS0, MU0
|
|
3
17
|
|
|
4
18
|
EISO: float = (Z0/(2*PI))**0.5
|
|
5
19
|
EOMNI = (3*Z0/(4*PI))**0.5
|
|
6
20
|
|
|
7
|
-
|
|
8
|
-
### MATERIALS
|
|
21
|
+
##MATERIALS
|
|
9
22
|
VACUUM = Material(color="#2d8cd5", opacity=0.05)
|
|
10
23
|
|
|
11
24
|
############################################################
|
|
12
|
-
#
|
|
25
|
+
# METALS #
|
|
13
26
|
############################################################
|
|
14
27
|
|
|
15
28
|
GREY = "#bfbfbf"
|
|
@@ -39,22 +52,22 @@ MET_ZIRCONIUM = Material(cond=2.44e7, color=GREY, opacity=0.5)
|
|
|
39
52
|
|
|
40
53
|
|
|
41
54
|
############################################################
|
|
42
|
-
#
|
|
55
|
+
# SEMICONDUCTORS #
|
|
43
56
|
############################################################
|
|
44
57
|
|
|
45
|
-
SEMI_SILICON = Material(er=11.7, tand=0.005, color="#b4b4b4", opacity=0.5)
|
|
46
|
-
SEMI_SILICON_N = Material(er=7.5, tand=0.0003, color="#a0a0a0", opacity=0.5)
|
|
47
|
-
SEMI_SILICON_OXIDE = Material(er=3.9, tand=0.0001, color="#e0e0e0", opacity=0.5)
|
|
58
|
+
SEMI_SILICON = Material(er=11.7, tand=0.005, color="#b4b4b4", opacity=0.5) # Crystalline Si
|
|
59
|
+
SEMI_SILICON_N = Material(er=7.5, tand=0.0003, color="#a0a0a0", opacity=0.5) # Silicon Nitride (Si₃N₄)
|
|
60
|
+
SEMI_SILICON_OXIDE = Material(er=3.9, tand=0.0001, color="#e0e0e0", opacity=0.5) # Silicon Dioxide (SiO₂)
|
|
48
61
|
SEMI_GERMANIUM = Material(er=16.0, tand=0.001, color="#787878", opacity=0.5)
|
|
49
|
-
SEMI_GAAS = Material(er=13.1, tand=0.0016, color="#aa8888", opacity=0.5)
|
|
50
|
-
SEMI_GA_N = Material(er=8.9, tand=0.002, color="#8888cc", opacity=0.5)
|
|
51
|
-
SEMI_INP = Material(er=12.5, tand=0.0015, color="#cc99aa", opacity=0.5)
|
|
52
|
-
SEMI_ALN = Material(er=8.6, tand=0.0003, color="#ccccee", opacity=0.5)
|
|
53
|
-
SEMI_AL2O3 = Material(er=9.8, tand=0.0002, color="#eaeaea", opacity=0.5)
|
|
62
|
+
SEMI_GAAS = Material(er=13.1, tand=0.0016, color="#aa8888", opacity=0.5) # Gallium Arsenide
|
|
63
|
+
SEMI_GA_N = Material(er=8.9, tand=0.002, color="#8888cc", opacity=0.5) # Gallium Nitride
|
|
64
|
+
SEMI_INP = Material(er=12.5, tand=0.0015, color="#cc99aa", opacity=0.5) # Indium Phosphide
|
|
65
|
+
SEMI_ALN = Material(er=8.6, tand=0.0003, color="#ccccee", opacity=0.5) # Aluminum Nitride
|
|
66
|
+
SEMI_AL2O3 = Material(er=9.8, tand=0.0002, color="#eaeaea", opacity=0.5) # Alumina
|
|
54
67
|
SEMI_SAPPHIRE = Material(er=9.4, tand=0.0001, color="#ddddff", opacity=0.5)
|
|
55
|
-
SEMI_DIAMOND = Material(er=5.5, tand=0.00005, color="#cceeff", opacity=0.5)
|
|
56
|
-
SEMI_HBN = Material(er=4.0, tand=0.0001, color="#eeeeff", opacity=0.5)
|
|
57
|
-
SEMI_SIOXNY = Material(er=5.0, tand=0.002, color="#ddddee", opacity=0.5)
|
|
68
|
+
SEMI_DIAMOND = Material(er=5.5, tand=0.00005, color="#cceeff", opacity=0.5) # Synthetic CVD diamond
|
|
69
|
+
SEMI_HBN = Material(er=4.0, tand=0.0001, color="#eeeeff", opacity=0.5) # Hexagonal Boron Nitride
|
|
70
|
+
SEMI_SIOXNY = Material(er=5.0, tand=0.002, color="#ddddee", opacity=0.5) # Silicon Oxynitride (SiOxNy)
|
|
58
71
|
|
|
59
72
|
############################################################
|
|
60
73
|
# LIQUIDS #
|
|
@@ -63,13 +76,17 @@ SEMI_SIOXNY = Material(er=5.0, tand=0.002, color="#ddddee", opacity
|
|
|
63
76
|
LIQ_WATER = Material(er=80.1, cond=0.0, color="#0080ff", opacity=0.3)
|
|
64
77
|
LIQ_FERRITE = Material(er=12.0, ur=2000, tand=0.02, color="#994d4d", opacity=0.3)
|
|
65
78
|
|
|
66
|
-
|
|
67
79
|
############################################################
|
|
68
80
|
# DIELECTRICS #
|
|
69
81
|
############################################################
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
82
|
+
|
|
83
|
+
# TRADEMARKS: All product names (e.g. “DUROID”) are the property of their
|
|
84
|
+
# respective owners. Use of them here does not imply any affiliation with or
|
|
85
|
+
# endorsement by those owners.
|
|
86
|
+
|
|
87
|
+
DIEL_PTFE = Material(er=2.1, tand=0.0002, color="#21912b", opacity=0.3)
|
|
88
|
+
DIEL_POLYIMIDE = Material(er=3.4, tand=0.02, color="#b8b8b8")
|
|
89
|
+
DIEL_CERAMIC = Material(er=6.0, tand=0.001, color="#efead1")
|
|
73
90
|
DIEL_AD10 = Material(er=10.2, tand=0.0078, color="#21912b", opacity=0.3)
|
|
74
91
|
DIEL_AD1000 = Material(er=10.2, tand=0.0023, color="#21912b", opacity=0.3)
|
|
75
92
|
DIEL_AD250 = Material(er=2.5, tand=0.0018, color="#21912b", opacity=0.3)
|
|
@@ -259,12 +276,12 @@ DIEL_XT_Duroid_8100 = Material(er=3.54, tand=0.0049, color="#21912b", opacity=0.
|
|
|
259
276
|
DIEL_XT_Duroid_81000_004IN_Thick = Material(er=3.32, tand=0.0038, color="#21912b", opacity=0.3)
|
|
260
277
|
|
|
261
278
|
# Legacy FR Materials
|
|
262
|
-
DIEL_FR1 = Material(er=4.8, tand=0.025, color="#3c9747", opacity=0.3)
|
|
263
|
-
DIEL_FR2 = Material(er=4.8, tand=0.02, color="#3c9747", opacity=0.3)
|
|
264
|
-
DIEL_FR3 = Material(er=4.5, tand=0.02, color="#2b7a4b", opacity=0.3)
|
|
265
|
-
DIEL_FR4 = Material(er=4.4, tand=0.015, color="#1e8449", opacity=0.3)
|
|
266
|
-
DIEL_FR5 = Material(er=4.2, tand=0.012, color="#156e38", opacity=0.3)
|
|
267
|
-
DIEL_FR6 = Material(er=5.2, tand=0.030, color="#145a32", opacity=0.3)
|
|
279
|
+
DIEL_FR1 = Material(er=4.8, tand=0.025, color="#3c9747", opacity=0.3) # Paper + phenolic resin
|
|
280
|
+
DIEL_FR2 = Material(er=4.8, tand=0.02, color="#3c9747", opacity=0.3) # Paper + phenolic resin
|
|
281
|
+
DIEL_FR3 = Material(er=4.5, tand=0.02, color="#2b7a4b", opacity=0.3) # Paper + epoxy resin
|
|
282
|
+
DIEL_FR4 = Material(er=4.4, tand=0.015, color="#1e8449", opacity=0.3) # Woven glass + epoxy resin (industry standard)
|
|
283
|
+
DIEL_FR5 = Material(er=4.2, tand=0.012, color="#156e38", opacity=0.3) # Woven glass + high-temp epoxy resin
|
|
284
|
+
DIEL_FR6 = Material(er=5.2, tand=0.030, color="#145a32", opacity=0.3) # Paper + unknown resin, poor thermal performance
|
|
268
285
|
|
|
269
286
|
# Magnetic Materials
|
|
270
287
|
MU_METAL = Material(cond=1.0e6, ur=200000, color="#666680", opacity=0.3)
|
|
@@ -274,16 +291,16 @@ MU_METAL = Material(cond=1.0e6, ur=200000, color="#666680", opacity=0.3)
|
|
|
274
291
|
# FOAMS #
|
|
275
292
|
############################################################
|
|
276
293
|
|
|
277
|
-
FOAM_ROHACELL_31 = Material(er=1.05, tand=0.0005, color="#f0e1a1", opacity=0.15)
|
|
278
|
-
FOAM_ROHACELL_51 = Material(er=1.07, tand=0.0006, color="#f0dea0", opacity=0.15)
|
|
294
|
+
FOAM_ROHACELL_31 = Material(er=1.05, tand=0.0005, color="#f0e1a1", opacity=0.15) # PMI-based structural foam
|
|
295
|
+
FOAM_ROHACELL_51 = Material(er=1.07, tand=0.0006, color="#f0dea0", opacity=0.15) # denser version
|
|
279
296
|
FOAM_ROHACELL_71 = Material(er=1.10, tand=0.0007, color="#e5d199", opacity=0.15)
|
|
280
|
-
FOAM_PEI = Material(er=1.15, tand=0.0035, color="#e0b56f", opacity=0.15)
|
|
281
|
-
FOAM_PMI = Material(er=1.10, tand=0.0008, color="#d9c690", opacity=0.15)
|
|
297
|
+
FOAM_PEI = Material(er=1.15, tand=0.0035, color="#e0b56f", opacity=0.15) # polyetherimide-based foam
|
|
298
|
+
FOAM_PMI = Material(er=1.10, tand=0.0008, color="#d9c690", opacity=0.15) # polymethacrylimide
|
|
282
299
|
FOAM_PVC = Material(er=1.20, tand=0.0040, color="#cccccc", opacity=0.15)
|
|
283
|
-
FOAM_EPS = Material(er=1.03, tand=0.0050, color="#f7f7f7", opacity=0.15)
|
|
284
|
-
FOAM_XPS = Material(er=1.05, tand=0.0030, color="#e0e0e0", opacity=0.15)
|
|
285
|
-
FOAM_PU = Material(er=1.10, tand=0.0080, color="#d0d0d0", opacity=0.15)
|
|
286
|
-
FOAM_GLAS = Material(er=3.10, tand=0.0050, color="#888888", opacity=0.15)
|
|
287
|
-
FOAM_AIREX_C70 = Material(er=1.10, tand=0.0010, color="#f7e7a3", opacity=0.15)
|
|
288
|
-
FOAM_AIREX_T92 = Material(er=1.10, tand=0.0020, color="#f6d08a", opacity=0.15)
|
|
289
|
-
FOAM_PVC_CORECELL = Material(er=1.56, tand=0.0025, color="#aaaaaa", opacity=0.15)
|
|
300
|
+
FOAM_EPS = Material(er=1.03, tand=0.0050, color="#f7f7f7", opacity=0.15) # expanded polystyrene
|
|
301
|
+
FOAM_XPS = Material(er=1.05, tand=0.0030, color="#e0e0e0", opacity=0.15) # extruded polystyrene
|
|
302
|
+
FOAM_PU = Material(er=1.10, tand=0.0080, color="#d0d0d0", opacity=0.15) # polyurethane foam
|
|
303
|
+
FOAM_GLAS = Material(er=3.10, tand=0.0050, color="#888888", opacity=0.15) # cellular glass, denser
|
|
304
|
+
FOAM_AIREX_C70 = Material(er=1.10, tand=0.0010, color="#f7e7a3", opacity=0.15) # PET closed cell
|
|
305
|
+
FOAM_AIREX_T92 = Material(er=1.10, tand=0.0020, color="#f6d08a", opacity=0.15) # higher strength PET
|
|
306
|
+
FOAM_PVC_CORECELL = Material(er=1.56, tand=0.0025, color="#aaaaaa", opacity=0.15) # structural core PVC
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: emerge
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.5
|
|
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
|
|
@@ -39,19 +39,17 @@ You can now install the basic version of emerge from PyPi!
|
|
|
39
39
|
```
|
|
40
40
|
pip install emerge
|
|
41
41
|
```
|
|
42
|
-
If you want to install the library with PyPardiso on Intel machines, you can install the optional dependency with EMerge using:
|
|
43
|
-
```
|
|
44
|
-
pip install emerge[pypardiso]
|
|
45
|
-
```
|
|
46
42
|
On MacOS and Linux you can install it with the very fast UMFPACK through scikit-umfpack
|
|
47
43
|
|
|
48
44
|
```
|
|
49
45
|
pip install emerge[scikit-umfpack]
|
|
50
46
|
```
|
|
51
|
-
On linux and MacOS with intel or AMD chips you can also include both:
|
|
52
47
|
|
|
48
|
+
### Experimental
|
|
49
|
+
|
|
50
|
+
If you have a new NVidia card you can try the first test implementation of the cuDSS solver. The dependencies can be installed through:
|
|
53
51
|
```
|
|
54
|
-
pip install emerge[
|
|
52
|
+
pip install emerge[cudss]
|
|
55
53
|
```
|
|
56
54
|
The `scikit-umfpack` solver can be installed on Windows as well from binaries with conda. This is a bit more complicated and is described in the installation guide.
|
|
57
55
|
|
|
@@ -83,11 +81,16 @@ To run this FEM library you need the following libraries
|
|
|
83
81
|
- matplotlib (for the matplotlib base display)
|
|
84
82
|
- pyvista (for the PyVista base display)
|
|
85
83
|
- numba-progress
|
|
84
|
+
- mkl (x86 devices only)
|
|
86
85
|
|
|
87
86
|
Optional:
|
|
88
|
-
- pypardiso
|
|
89
87
|
- scikit-umfpack
|
|
88
|
+
- cudss
|
|
90
89
|
|
|
91
90
|
## NOTICE
|
|
92
91
|
|
|
93
92
|
First time runs will be very slow because Numba needs to generate local C-compiled functions of the assembler and other mathematical functions. These compilations are chached so this should only take time once.
|
|
93
|
+
|
|
94
|
+
## Third Party License Notice
|
|
95
|
+
|
|
96
|
+
“This package depends on Intel® Math Kernel Library (MKL), which is licensed separately under the Intel Simplified Software License (October 2022). Installing with pip will fetch the MKL wheel and prompt you to accept that licence.”
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
emerge/__init__.py,sha256=
|
|
1
|
+
emerge/__init__.py,sha256=MBJc3Kae-Dno0pGuoKuqVef1kFWhbWghhWD54-sMYMU,2583
|
|
2
2
|
emerge/__main__.py,sha256=WVf16sfrOI910QWohrQDaChZdRifMNoS6VKzCT6f3ZA,92
|
|
3
3
|
emerge/cli.py,sha256=NU1uhwuZ6i50680v3_I4kDZPTHqz74gOYK71UBhb8oE,666
|
|
4
|
-
emerge/lib.py,sha256
|
|
4
|
+
emerge/lib.py,sha256=YWRnrQq3Cl1nRkUg0STKkUSqCxD_Danfh9IXasYn2d8,22316
|
|
5
5
|
emerge/plot.py,sha256=AH2D9rKeWUXlSOlh-pUUfLt0oxVLcqF_piki-BmPEg0,83
|
|
6
6
|
emerge/pyvista.py,sha256=-Ht2YcZYsh8-dici5ZPNAWwsis6uz5wNj8n8mxv5fog,42
|
|
7
|
-
emerge/_emerge/__init__.py,sha256=
|
|
7
|
+
emerge/_emerge/__init__.py,sha256=aidfiILy33dt3VyiZ2mgtA87mq-WQ5pXItZUE5wR5ws,703
|
|
8
|
+
emerge/_emerge/_cache_check.py,sha256=fGOiLTdtzg8HIsNP6vrs8BwvgBGAijwg06zsR1v6trQ,1549
|
|
8
9
|
emerge/_emerge/bc.py,sha256=TeSVNkDgOGaoHw5raTzhUV0ngtyHa33sXAoL2hRn70M,8077
|
|
9
10
|
emerge/_emerge/const.py,sha256=PTZZTSDOP5NsZ8XnJrKTY2P0tPUhmutBJ1yrm-t7xsI,129
|
|
10
11
|
emerge/_emerge/coord.py,sha256=BKvyrcnHY-_bgHqysnByy5k9_DK4VVfr9KKkRaawG2E,4371
|
|
@@ -13,16 +14,16 @@ emerge/_emerge/dataset.py,sha256=UcSAJ_siLrOjNBBWRWsS3GUZUpayp63EM6pP6ClwKDI,153
|
|
|
13
14
|
emerge/_emerge/geo2d.py,sha256=e_HkX1GQ2iYrdO0zeEgzVOzfGyU1WGJyjeGBAobOttE,3323
|
|
14
15
|
emerge/_emerge/geometry.py,sha256=L_jxWxaGSWvRJ4yYWhl2MFLPETITGLaKJLX9zFOOtto,17306
|
|
15
16
|
emerge/_emerge/howto.py,sha256=qY3v6DynB9ZBVeYa3sPFq1cDuvf2zyjnLShknqYyvKQ,8208
|
|
16
|
-
emerge/_emerge/logsettings.py,sha256=
|
|
17
|
+
emerge/_emerge/logsettings.py,sha256=DcUWIUUhdLe9ev5XC1bd5ZUrJz00MjABkY8rnekFrPY,3373
|
|
17
18
|
emerge/_emerge/material.py,sha256=zsEyr3bnsh43-Omb5_foy1uWfzRIVckPHOiu2eC02bE,4021
|
|
18
|
-
emerge/_emerge/mesh3d.py,sha256=
|
|
19
|
+
emerge/_emerge/mesh3d.py,sha256=OtDPFMBtsV9vXHrrxvGRChHH_dqjxmTxYgfgXv7w6Lg,31895
|
|
19
20
|
emerge/_emerge/mesher.py,sha256=fbHAqKvxdi2UhX37OgfF6TSyCB8b2YMDvpj7lrh6qLk,13044
|
|
20
|
-
emerge/_emerge/periodic.py,sha256=
|
|
21
|
+
emerge/_emerge/periodic.py,sha256=AdoGhEyODEFZS3R8kzf9wpxp0oVtcn9dOO1g2S8nAtc,11081
|
|
21
22
|
emerge/_emerge/plot.py,sha256=cf1I9mj7EIUJcq8vmANlUkqoV6QqVaJaP-zlC-T9E18,8041
|
|
22
|
-
emerge/_emerge/selection.py,sha256=
|
|
23
|
-
emerge/_emerge/simmodel.py,sha256=
|
|
23
|
+
emerge/_emerge/selection.py,sha256=6UizuWC01sUGjFodrGTy8N1J1832vfOWA4u5paNupw4,21297
|
|
24
|
+
emerge/_emerge/simmodel.py,sha256=9KdkJESx15IbmIKQak3DS_XNd_5ED3iPlh95zleuMEk,17659
|
|
24
25
|
emerge/_emerge/simulation_data.py,sha256=r9-9lpLeA1Z5HU3jDVOXV1H80GVawnXL5K81_dvmlE4,14506
|
|
25
|
-
emerge/_emerge/solver.py,sha256=
|
|
26
|
+
emerge/_emerge/solver.py,sha256=ZdlYe7XmqkaKmnLYmstSMpVqyWyPM-LqCORnr4XFth4,48211
|
|
26
27
|
emerge/_emerge/system.py,sha256=p4HNz7d_LMRNE9Gk75vVdFecDH2iN_groAM9u-yQTpk,1618
|
|
27
28
|
emerge/_emerge/elements/__init__.py,sha256=I3n9aic6lJW-oGeqTEZ-Fpxvyl2i-WqsHdnrM3v1oB8,799
|
|
28
29
|
emerge/_emerge/elements/femdata.py,sha256=3rFVz1-PLtqxnDFvTH1Q9dA98lO5VyjcFKecCJCwfQ4,8020
|
|
@@ -45,7 +46,7 @@ emerge/_emerge/geo/pcb_tools/macro.py,sha256=0g-0anOFyxrEkFobiSu0cwWFRQ32xB8Az24
|
|
|
45
46
|
emerge/_emerge/mth/common_functions.py,sha256=oURfF-8p_0s1dKbUATc15dnKHFwvqWa6GC-JMW9UwnI,2061
|
|
46
47
|
emerge/_emerge/mth/integrals.py,sha256=lL7KrHdyFGpboQyvf6W_4bZRZCrMbjd2e8GDHctL-B8,3572
|
|
47
48
|
emerge/_emerge/mth/optimized.py,sha256=K0YQ_faD6aETox2HKYlIIUJElqaGc8zrYEI9SedpQCc,16493
|
|
48
|
-
emerge/_emerge/mth/pairing.py,sha256=
|
|
49
|
+
emerge/_emerge/mth/pairing.py,sha256=i8bBvTeMmzgF0JdiDNJiTXxx913x4f10777pzD6FJo0,3535
|
|
49
50
|
emerge/_emerge/physics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
51
|
emerge/_emerge/physics/microwave/__init__.py,sha256=QHeILGYWmvbfLl1o9wrTiWLm0evfXDgS0JiikUoMTts,28
|
|
51
52
|
emerge/_emerge/physics/microwave/adaptive_freq.py,sha256=aWhijhCVAbnuwkru-I1AaRdY20uyozf6OWRIh9r2ijg,9786
|
|
@@ -76,8 +77,8 @@ emerge/_emerge/projects/_load_base.txt,sha256=JTAhWvHXJQYKe-aDD4HDdmE7f3VXxeurhD
|
|
|
76
77
|
emerge/_emerge/projects/generate_project.py,sha256=TNw-0SpLc82MBq0bd9hB_yqvBZCgmuPonCBsHTp91uk,1450
|
|
77
78
|
emerge/_emerge/solve_interfaces/cudss_interface.py,sha256=RQujuLvgRpDA8nzw2fveUw3JLntgm0Lp3WjSEe6CsLY,8040
|
|
78
79
|
emerge/_emerge/solve_interfaces/pardiso_interface.py,sha256=_p6-qwe7Q6K7SqaK1keBYNoZik4eYRVso_oMbxMeW2E,15304
|
|
79
|
-
emerge-0.5.
|
|
80
|
-
emerge-0.5.
|
|
81
|
-
emerge-0.5.
|
|
82
|
-
emerge-0.5.
|
|
83
|
-
emerge-0.5.
|
|
80
|
+
emerge-0.5.5.dist-info/METADATA,sha256=_MLfQ2xnP33ps9nixFPDbF0-75emO9RSkOpr5_NH0pY,3261
|
|
81
|
+
emerge-0.5.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
82
|
+
emerge-0.5.5.dist-info/entry_points.txt,sha256=8rFvAXticpKg4OTC8JEvAksnduW72KIEskCGG9XnFf8,43
|
|
83
|
+
emerge-0.5.5.dist-info/licenses/LICENSE,sha256=SuHm9Fw32RI6tylP2YCyTPITMwpueazVUZwUMFRE_zk,17856
|
|
84
|
+
emerge-0.5.5.dist-info/RECORD,,
|
|
@@ -1,3 +1,42 @@
|
|
|
1
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
PREAMBLE — Licence map and disclaimers (not part of the GNU GPL text)
|
|
3
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
4
|
+
This repository is distributed under two distinct licences:
|
|
5
|
+
|
|
6
|
+
• **Gmsh-derived components**
|
|
7
|
+
These files are licensed under the **GNU General Public License,
|
|
8
|
+
version 2 or (at your option) any later version (“GPL-2.0+”)**, together
|
|
9
|
+
with the original *Gmsh additional permission* that allows linking with
|
|
10
|
+
Netgen, METIS, OpenCASCADE and ParaView under their respective licences.
|
|
11
|
+
When you distribute binaries containing these components, the complete
|
|
12
|
+
corresponding source code must be offered under GPL-2.0+.
|
|
13
|
+
|
|
14
|
+
• **`lib.py` — materials-property database**
|
|
15
|
+
This single file is dedicated to the public domain under **CC0 1.0**.
|
|
16
|
+
You may copy, modify, merge, publish, distribute, sublicense and/or sell
|
|
17
|
+
copies of `lib.py` without restriction. The data it contains are
|
|
18
|
+
provided *“as is”* for informational purposes only; verify all critical
|
|
19
|
+
values independently.
|
|
20
|
+
|
|
21
|
+
DISCLAIMER OF WARRANTY
|
|
22
|
+
This software is provided **“as is,”** without any express or implied
|
|
23
|
+
warranty, including but not limited to merchantability, fitness for a
|
|
24
|
+
particular purpose and non-infringement. The authors shall not be liable for
|
|
25
|
+
any damages arising from the use or inability to use this software.
|
|
26
|
+
|
|
27
|
+
DATA ACCURACY NOTICE
|
|
28
|
+
Material-property data in `lib.py` may be incomplete, out of date or
|
|
29
|
+
unsuitable for engineering design. Always confirm crucial values from
|
|
30
|
+
independent, authoritative sources.
|
|
31
|
+
|
|
32
|
+
By using any part of this codebase you acknowledge and accept the terms
|
|
33
|
+
above.
|
|
34
|
+
|
|
35
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
36
|
+
The complete text of the **GNU General Public License, version 2**
|
|
37
|
+
(immediately followed by the original Gmsh additional permission) follows below.
|
|
38
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
39
|
+
|
|
1
40
|
GNU GENERAL PUBLIC LICENSE
|
|
2
41
|
Version 2, June 1991
|
|
3
42
|
|
|
File without changes
|
|
File without changes
|