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 CHANGED
@@ -1,5 +1,5 @@
1
1
  """A Python based FEM solver.
2
- Copyright (C) 2025 name of Robert Fennis
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
 
@@ -1,5 +1,5 @@
1
1
  # """A Python based FEM solver.
2
- # Copyright (C) 2025 name of Robert Fennis
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)
@@ -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
- ftag_to_node[t] = node_tags
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.sort(np.unique(np.array(node_ids_1)))
481
- node_ids_2_arry = np.sort(np.unique(np.array(node_ids_2)))
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
 
@@ -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
@@ -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-6:
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
@@ -536,7 +536,7 @@ class Selector:
536
536
  nx: float,
537
537
  ny: float,
538
538
  nz: float,
539
- tolerance: float = 1e-6) -> FaceSelection:
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
 
@@ -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
- return x, 0
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
- # METALS #
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
- # SEMICONDUCTORS #
55
+ # SEMICONDUCTORS #
43
56
  ############################################################
44
57
 
45
- SEMI_SILICON = Material(er=11.7, tand=0.005, color="#b4b4b4", opacity=0.5) # Crystalline Si
46
- SEMI_SILICON_N = Material(er=7.5, tand=0.0003, color="#a0a0a0", opacity=0.5) # Silicon Nitride (Si₃N₄)
47
- SEMI_SILICON_OXIDE = Material(er=3.9, tand=0.0001, color="#e0e0e0", opacity=0.5) # Silicon Dioxide (SiO₂)
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) # Gallium Arsenide
50
- SEMI_GA_N = Material(er=8.9, tand=0.002, color="#8888cc", opacity=0.5) # Gallium Nitride
51
- SEMI_INP = Material(er=12.5, tand=0.0015, color="#cc99aa", opacity=0.5) # Indium Phosphide
52
- SEMI_ALN = Material(er=8.6, tand=0.0003, color="#ccccee", opacity=0.5) # Aluminum Nitride
53
- SEMI_AL2O3 = Material(er=9.8, tand=0.0002, color="#eaeaea", opacity=0.5) # Alumina
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) # Synthetic CVD diamond
56
- SEMI_HBN = Material(er=4.0, tand=0.0001, color="#eeeeff", opacity=0.5) # Hexagonal Boron Nitride
57
- SEMI_SIOXNY = Material(er=5.0, tand=0.002, color="#ddddee", opacity=0.5) # Silicon Oxynitride (SiOxNy)
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
- DIEL_PTFE = Material(er=2.1, tand=0.0002, color="#21912b", opacity=0.3)
71
- DIEL_POLYIMIDE = Material(er=3.4, tand=0.02, color="#b8b8b8")
72
- DIEL_CERAMIC = Material(er=6.0, tand=0.001, color="#efead1")
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) # Paper + phenolic resin
263
- DIEL_FR2 = Material(er=4.8, tand=0.02, color="#3c9747", opacity=0.3) # Paper + phenolic resin
264
- DIEL_FR3 = Material(er=4.5, tand=0.02, color="#2b7a4b", opacity=0.3) # Paper + epoxy resin
265
- DIEL_FR4 = Material(er=4.4, tand=0.015, color="#1e8449", opacity=0.3) # Woven glass + epoxy resin (industry standard)
266
- DIEL_FR5 = Material(er=4.2, tand=0.012, color="#156e38", opacity=0.3) # Woven glass + high-temp epoxy resin
267
- DIEL_FR6 = Material(er=5.2, tand=0.030, color="#145a32", opacity=0.3) # Paper + unknown resin, poor thermal performance
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) # PMI-based structural foam
278
- FOAM_ROHACELL_51 = Material(er=1.07, tand=0.0006, color="#f0dea0", opacity=0.15) # denser version
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) # polyetherimide-based foam
281
- FOAM_PMI = Material(er=1.10, tand=0.0008, color="#d9c690", opacity=0.15) # polymethacrylimide
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) # expanded polystyrene
284
- FOAM_XPS = Material(er=1.05, tand=0.0030, color="#e0e0e0", opacity=0.15) # extruded polystyrene
285
- FOAM_PU = Material(er=1.10, tand=0.0080, color="#d0d0d0", opacity=0.15) # polyurethane foam
286
- FOAM_GLAS = Material(er=3.10, tand=0.0050, color="#888888", opacity=0.15) # cellular glass, denser
287
- FOAM_AIREX_C70 = Material(er=1.10, tand=0.0010, color="#f7e7a3", opacity=0.15) # PET closed cell
288
- FOAM_AIREX_T92 = Material(er=1.10, tand=0.0020, color="#f6d08a", opacity=0.15) # higher strength PET
289
- FOAM_PVC_CORECELL = Material(er=1.56, tand=0.0025, color="#aaaaaa", opacity=0.15) # structural core PVC
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
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[scikit-umfpack, pypardiso]
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=sK2yLrvngIeUOfRJ-YivFP_9J8lbcy-DLZvEI5FBhCc,2559
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=-XCCfEF-yuKUmMVJmqFNQOhEFYtRYQeiOQv-hfwRPKA,20976
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=hYCXbPCoyjAc3EUsYc4yz8ct6crlYHB9B02o_Am9ITs,1646
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=IAf7mDAtyF5W8ja-DJuDrB9rc86lCFxZLeG1gCijfuk,2634
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=X3oGMd-ZPxSXVOpijQzhorZEY6VppJNDaMPxUlFO5Ow,31997
19
+ emerge/_emerge/mesh3d.py,sha256=OtDPFMBtsV9vXHrrxvGRChHH_dqjxmTxYgfgXv7w6Lg,31895
19
20
  emerge/_emerge/mesher.py,sha256=fbHAqKvxdi2UhX37OgfF6TSyCB8b2YMDvpj7lrh6qLk,13044
20
- emerge/_emerge/periodic.py,sha256=1UDDfS2J_9ClE6p-Q_zLUO1hbESUIk3Zsk6KGZEqQlE,11081
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=hYhYjFJ0t6sEWSe9UdQMPHZzpeIZM9q0856gXzA6rmQ,21297
23
- emerge/_emerge/simmodel.py,sha256=aKNMLgL4tY_105uaysYVY9umKqwQd-hUuPTvvWBAPgY,17668
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=FlWRpEvWtCCZpFKkI2TzPM2xh26UjKH4v9qHciznoJ4,48213
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=mkgrPajfgeR2Rnj91EeIRwJ2IWIV8N4WsJM1-_aCpq8,3532
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.3.dist-info/METADATA,sha256=ecI_6RWbAIrbm-dj7Aw6D23dWzyQLPPZ8e5CHMfvSI4,3072
80
- emerge-0.5.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
81
- emerge-0.5.3.dist-info/entry_points.txt,sha256=8rFvAXticpKg4OTC8JEvAksnduW72KIEskCGG9XnFf8,43
82
- emerge-0.5.3.dist-info/licenses/LICENSE,sha256=6tAv8fkWA_-Ell_nboaXajWH3H-vRftIr_4CU2t0S4Y,15180
83
- emerge-0.5.3.dist-info/RECORD,,
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