simudo 0.7.0.0__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.
Files changed (259) hide show
  1. simudo/__init__.py +20 -0
  2. simudo/example/__init__.py +0 -0
  3. simudo/example/fourlayer/IV_Analysis.py +73 -0
  4. simudo/example/fourlayer/__init__.py +0 -0
  5. simudo/example/fourlayer/fourlayer.py +732 -0
  6. simudo/example/fourlayer/fourlayer_example.py +475 -0
  7. simudo/example/fourlayer/logfile_parser.py +28 -0
  8. simudo/example/fourlayer/sweep_extraction.py +436 -0
  9. simudo/example/heterojunction/__init__.py +0 -0
  10. simudo/example/heterojunction/germanium.py +88 -0
  11. simudo/example/heterojunction/het1d.py +348 -0
  12. simudo/example/heterojunction/het1d_a.py +283 -0
  13. simudo/example/heterojunction/het1d_example.py +284 -0
  14. simudo/example/heterojunction/silicon.py +245 -0
  15. simudo/example/heterojunction/silicongermanium.py +120 -0
  16. simudo/example/jupyter/Clara_Sim_exploration.ipynb +4182 -0
  17. simudo/example/jupyter/SimudoTutorial.ipynb +1055 -0
  18. simudo/example/jupyter/pn-sketch.svg +248 -0
  19. simudo/example/jupyter/tmp_plotter.ipynb +204 -0
  20. simudo/example/marti2002/__init__.py +0 -0
  21. simudo/example/marti2002/colors.py +18 -0
  22. simudo/example/marti2002/marti2002.py +481 -0
  23. simudo/example/marti2002/marti2002_plot.py +863 -0
  24. simudo/example/pn_benchmark/__init__.py +0 -0
  25. simudo/example/pn_benchmark/pn_benchmark.py +415 -0
  26. simudo/example/pn_benchmark/pn_benchmark_create_submitfiles.py +155 -0
  27. simudo/example/pn_benchmark/pn_benchmark_plot.py +664 -0
  28. simudo/example/pn_diode/__init__.py +0 -0
  29. simudo/example/pn_diode/pn_diode.py +211 -0
  30. simudo/example/pn_diode/pn_diode_PHY4140.py +243 -0
  31. simudo/example/pn_diode/pn_diode_degenerate.py +212 -0
  32. simudo/example/pn_diode/pn_diode_plot.py +18 -0
  33. simudo/fem/__init__.py +19 -0
  34. simudo/fem/adaptive_stepper.py +817 -0
  35. simudo/fem/assign.py +114 -0
  36. simudo/fem/compat/__init__.py +3 -0
  37. simudo/fem/compat/ffc_includes.py +42 -0
  38. simudo/fem/compat/ffc_jit_lock.py +70 -0
  39. simudo/fem/compat/ufl_classes_update.py +34 -0
  40. simudo/fem/debug_probe.py +74 -0
  41. simudo/fem/delayed_form.py +121 -0
  42. simudo/fem/dolfin_parameters.py +49 -0
  43. simudo/fem/expr.py +304 -0
  44. simudo/fem/extra_bindings.py +109 -0
  45. simudo/fem/function_space.py +265 -0
  46. simudo/fem/function_space_cache.py +17 -0
  47. simudo/fem/function_subspace_registry.py +432 -0
  48. simudo/fem/ipython.py +106 -0
  49. simudo/fem/mesh_data.py +76 -0
  50. simudo/fem/mesh_util.py +271 -0
  51. simudo/fem/mesh_util1.py1 +183 -0
  52. simudo/fem/newton_solver.py +728 -0
  53. simudo/fem/offset_partitioning.py +203 -0
  54. simudo/fem/plot.py +194 -0
  55. simudo/fem/simudo_math_extras.hpp +11 -0
  56. simudo/fem/spatial.py +686 -0
  57. simudo/fem/sympy_dolfin_printer.py +139 -0
  58. simudo/fem/ufl_extra.py +189 -0
  59. simudo/gui/__init__.py +6 -0
  60. simudo/gui/app.py +1267 -0
  61. simudo/gui/batch.py +694 -0
  62. simudo/gui/fourlayer_example.yaml +270 -0
  63. simudo/gui/fourlayer_reference.py +90 -0
  64. simudo/gui/model.py +401 -0
  65. simudo/gui/panels/__init__.py +0 -0
  66. simudo/gui/panels/bands.py +261 -0
  67. simudo/gui/panels/bcs.py +217 -0
  68. simudo/gui/panels/layers.py +1915 -0
  69. simudo/gui/panels/mat_ast.py +276 -0
  70. simudo/gui/panels/materials.py +1135 -0
  71. simudo/gui/panels/opt_fields.py +600 -0
  72. simudo/gui/panels/output.py +1590 -0
  73. simudo/gui/panels/processes.py +884 -0
  74. simudo/gui/panels/shared.py +239 -0
  75. simudo/gui/panels/simulation.py +1945 -0
  76. simudo/gui/panels/stub.py +21 -0
  77. simudo/gui/runner_backends.py +894 -0
  78. simudo/gui/si_pn_jsc_sweep.py +221 -0
  79. simudo/gui/simudo_1d_runner.py +2150 -0
  80. simudo/gui/spatial_extractor.py +146 -0
  81. simudo/gui/yaml_io.py +679 -0
  82. simudo/io/__init__.py +0 -0
  83. simudo/io/csv.py +83 -0
  84. simudo/io/h5yaml.py +363 -0
  85. simudo/io/output_writer.py +556 -0
  86. simudo/io/xdmf.py +127 -0
  87. simudo/materials/__init__.py +8 -0
  88. simudo/materials/alloy_optics.py +148 -0
  89. simudo/materials/aluminumarsenide.py +385 -0
  90. simudo/materials/aluminumgalliumarsenide.py +167 -0
  91. simudo/materials/galliumarsenide.py +225 -0
  92. simudo/materials/galliumarsenidenitride.py +183 -0
  93. simudo/materials/galliumnitride.py +307 -0
  94. simudo/materials/germanium.py +81 -0
  95. simudo/materials/helpers.py +181 -0
  96. simudo/materials/ib_test_material.py +53 -0
  97. simudo/materials/indiumaluminumarsenide.py +122 -0
  98. simudo/materials/indiumarsenide.py +212 -0
  99. simudo/materials/silicon.py +246 -0
  100. simudo/materials/silicongermanium.py +83 -0
  101. simudo/matplotlib_backend.py +13 -0
  102. simudo/memoize/__init__.py +0 -0
  103. simudo/memoize/memo.py +50 -0
  104. simudo/memoize/ufl.py +37 -0
  105. simudo/mesh/__init__.py +10 -0
  106. simudo/mesh/construction_helper.py +654 -0
  107. simudo/mesh/construction_helper_example.py +84 -0
  108. simudo/mesh/domaintag_mshr.py +250 -0
  109. simudo/mesh/facet.py +351 -0
  110. simudo/mesh/gmsh.py +550 -0
  111. simudo/mesh/interval1dtag.py +294 -0
  112. simudo/mesh/mesh1d.py +29 -0
  113. simudo/mesh/mesh_entity_predicate.py +165 -0
  114. simudo/mesh/meshio.py +104 -0
  115. simudo/mesh/product2d.py +143 -0
  116. simudo/mesh/pygmsh.py +102 -0
  117. simudo/mesh/refine.py +82 -0
  118. simudo/mesh/topology.py +364 -0
  119. simudo/misc/__init__.py +0 -0
  120. simudo/misc/comparison_parameters.py +57 -0
  121. simudo/misc/sentaurus_import.py +308 -0
  122. simudo/misc/strandberg_comparison_parameters.py +107 -0
  123. simudo/misc/strandberg_comparison_parameters_check.py +196 -0
  124. simudo/misc/visualize_elements.py +156 -0
  125. simudo/physics/__init__.py +11 -0
  126. simudo/physics/boundary_conditions.py +259 -0
  127. simudo/physics/electro_optical_process.py +1591 -0
  128. simudo/physics/heterojunction.py +346 -0
  129. simudo/physics/material.py +112 -0
  130. simudo/physics/optical.py +411 -0
  131. simudo/physics/optical1.py1 +71 -0
  132. simudo/physics/optical_alpha.py +252 -0
  133. simudo/physics/poisson_drift_diffusion.py +862 -0
  134. simudo/physics/poisson_drift_diffusion1.py1 +601 -0
  135. simudo/physics/problem_data.py +62 -0
  136. simudo/physics/problem_data_child.py +31 -0
  137. simudo/physics/steppers.py +356 -0
  138. simudo/plot/__init__.py +6 -0
  139. simudo/plot/matplotlib.py +6 -0
  140. simudo/plot/pdftoppm.py +31 -0
  141. simudo/plot/plot.py +164 -0
  142. simudo/plot/postprocessing.py +15 -0
  143. simudo/pyaml/__init__.py +3 -0
  144. simudo/pyaml/astglobals.py +230 -0
  145. simudo/pyaml/helper.py +37 -0
  146. simudo/pyaml/load.py +125 -0
  147. simudo/pyaml/multidict.py +14 -0
  148. simudo/pyaml/pyaml1.py +190 -0
  149. simudo/test/__init__.py +0 -0
  150. simudo/test/physics/__init__.py +0 -0
  151. simudo/test/physics/conftest.py +365 -0
  152. simudo/test/physics/test_band_type_validation.py +145 -0
  153. simudo/test/physics/test_checkpoint_resume.py +152 -0
  154. simudo/test/physics/test_config_smoke.py +433 -0
  155. simudo/test/physics/test_golden_jv.py +160 -0
  156. simudo/test/physics/test_ib_limited_extent.py +96 -0
  157. simudo/test/physics/test_ib_optics.py +224 -0
  158. simudo/test/physics/test_invariants.py +366 -0
  159. simudo/test/physics/test_material_loading.py +178 -0
  160. simudo/test/physics/test_optical_field_sets.py +355 -0
  161. simudo/test/physics/test_optics.py +219 -0
  162. simudo/test/physics/test_process_construction.py +200 -0
  163. simudo/test/physics/test_rule_priority.py +99 -0
  164. simudo/test/physics/test_runner_characterization.py +148 -0
  165. simudo/test/physics/test_selfconsistent_optics.py +197 -0
  166. simudo/test/physics/test_svr_without_yaml.py +217 -0
  167. simudo/test/physics/test_temperature_default.py +53 -0
  168. simudo/test/pyaml1_test1.yaml +30 -0
  169. simudo/test/test_attrproxy.py +34 -0
  170. simudo/test/test_interp.py +31 -0
  171. simudo/test/test_interval1dtag.py +38 -0
  172. simudo/test/test_material_helpers.py +203 -0
  173. simudo/test/test_namedict.py +30 -0
  174. simudo/test/test_pyaml1.py +40 -0
  175. simudo/test/test_spatial_key_aliases.py +136 -0
  176. simudo/test/test_topology.py +25 -0
  177. simudo/trash/__init__.py +0 -0
  178. simudo/trash/adapt_is_broken.py +60 -0
  179. simudo/trash/api201809_draft/__init__.py +0 -0
  180. simudo/trash/api201809_draft/classes.py +166 -0
  181. simudo/trash/api201809_draft/example.py +159 -0
  182. simudo/trash/assigntest.py +46 -0
  183. simudo/trash/dP_test_from_pullrequest.py +57 -0
  184. simudo/trash/demo_advection-diffusion.py +129 -0
  185. simudo/trash/demo_stationary-advection-diffusion.py +60 -0
  186. simudo/trash/deplapprox.py +80 -0
  187. simudo/trash/dfise_convert_sentaurus_ivcurve.py +63 -0
  188. simudo/trash/dirty_bandplot.py +46 -0
  189. simudo/trash/dirty_poster_plot.py +108 -0
  190. simudo/trash/eval_expr.py +159 -0
  191. simudo/trash/eval_expr_test.py +16 -0
  192. simudo/trash/exp_quadrature.py +43 -0
  193. simudo/trash/ft10_poisson_extended.py +762 -0
  194. simudo/trash/historical/__init__.py +0 -0
  195. simudo/trash/historical/advection_diffusion_test.py +600 -0
  196. simudo/trash/historical/diode2.py +397 -0
  197. simudo/trash/historical/fragment.py +326 -0
  198. simudo/trash/historical/qflop_test.py +84 -0
  199. simudo/trash/historical/solution.py +111 -0
  200. simudo/trash/historical/test_nonlinear_mixed_1d.py +158 -0
  201. simudo/trash/ipy2.py +31 -0
  202. simudo/trash/logging_test.py +55 -0
  203. simudo/trash/matt_pls.py +20 -0
  204. simudo/trash/modify_plot_ylabel_position.py +36 -0
  205. simudo/trash/onetime_rescale_current.py +19 -0
  206. simudo/trash/optics/__init__.py +0 -0
  207. simudo/trash/optics/msorte.py +88 -0
  208. simudo/trash/picklehash.py +35 -0
  209. simudo/trash/pinttest.py +26 -0
  210. simudo/trash/plot2d.py +34 -0
  211. simudo/trash/plotjv.py +12 -0
  212. simudo/trash/probe_slow.py +94 -0
  213. simudo/trash/pvsc2019_abstract_20190119.py +186 -0
  214. simudo/trash/pyaml/__init__.py +4 -0
  215. simudo/trash/pyaml/astutil.py +19 -0
  216. simudo/trash/pyaml/pyaml.py +266 -0
  217. simudo/trash/silicon.py +232 -0
  218. simudo/trash/simple_model.py +273 -0
  219. simudo/trash/stupid2d.py +12 -0
  220. simudo/trash/sympy_dolfin_ccode.py +29 -0
  221. simudo/trash/test_adaptive_solver.py +33 -0
  222. simudo/trash/test_h5.py +42 -0
  223. simudo/trash/test_h5_extlink.py +19 -0
  224. simudo/trash/test_poisson_fvm.py +115 -0
  225. simudo/trash/test_util_probe.py +26 -0
  226. simudo/trash/timeit_function_eval.py +54 -0
  227. simudo/trash/ufl_caching.py +33 -0
  228. simudo/trash/ufltest.py +232 -0
  229. simudo/trash/yamlannex.py +156 -0
  230. simudo/util/__init__.py +18 -0
  231. simudo/util/am15.py +188 -0
  232. simudo/util/attrproxy.py +30 -0
  233. simudo/util/base32_token.py +12 -0
  234. simudo/util/blackbody.py +131 -0
  235. simudo/util/cartesian_product.py +14 -0
  236. simudo/util/data/astm_g173_03.npz +0 -0
  237. simudo/util/latex.py +26 -0
  238. simudo/util/logging.py +160 -0
  239. simudo/util/name_dict.py +79 -0
  240. simudo/util/os.py +73 -0
  241. simudo/util/pint/constants_en.txt +52 -0
  242. simudo/util/pint/default_en.txt +452 -0
  243. simudo/util/pint.py +12 -0
  244. simudo/util/raise_from.py +10 -0
  245. simudo/util/raise_from_py3.py +5 -0
  246. simudo/util/setattr_init_mixin.py +9 -0
  247. simudo/util/string_system.py +89 -0
  248. simudo/util/todo.py +50 -0
  249. simudo/util/ufl_import_hack.py +45 -0
  250. simudo/util/with_default_kwargs.py +30 -0
  251. simudo/util/xcsv.py +270 -0
  252. simudo/util/xtimeit.py +19 -0
  253. simudo/version.py +16 -0
  254. simudo-0.7.0.0.dist-info/METADATA +81 -0
  255. simudo-0.7.0.0.dist-info/RECORD +259 -0
  256. simudo-0.7.0.0.dist-info/WHEEL +5 -0
  257. simudo-0.7.0.0.dist-info/licenses/COPYRIGHT +31 -0
  258. simudo-0.7.0.0.dist-info/licenses/LICENSE +165 -0
  259. simudo-0.7.0.0.dist-info/top_level.txt +1 -0
simudo/__init__.py ADDED
@@ -0,0 +1,20 @@
1
+ # The try/except lets `pip install --no-deps simudo` provide the GUI files on a machine with no working Simudo/FEniCS install.
2
+ from .version import __version__
3
+
4
+ try:
5
+ from .util.ufl_import_hack import fix as _fix
6
+ except ImportError:
7
+ # The numerical stack is absent. That is a legitimate install: the
8
+ # graphical interface is served from simudo/gui/ and never imports simudo,
9
+ # so a host machine may install this package with --no-deps purely to have
10
+ # the files. Let `import simudo` succeed there.
11
+ #
12
+ # The dolfin check keeps that narrow. If FEniCS *is* present then the ufl
13
+ # aliasing fix is mandatory and skipping it would surface much later as a
14
+ # baffling UFL error, so a broken install still fails loudly here.
15
+ import importlib.util as _importlib_util
16
+
17
+ if _importlib_util.find_spec('dolfin') is not None:
18
+ raise
19
+ else:
20
+ _fix()
File without changes
@@ -0,0 +1,73 @@
1
+ import numpy as np
2
+ from scipy.interpolate import interp1d
3
+ from scipy.interpolate import UnivariateSpline
4
+
5
+ __all__ = ["IV_params"]
6
+
7
+ # From Matt Wilkins
8
+
9
+
10
+ def ordertest(A):
11
+ """Test if list ``A`` is strictly ascending."""
12
+ return all(A[k] <= A[k + 1] for k in range(len(A) - 1))
13
+
14
+
15
+ class IV_params:
16
+ """
17
+ Takes arrays of current and voltage, and interpolates Voc, Isc, and Pmax.
18
+
19
+ ``voc`` and ``isc`` are linearly interpolated, ``pmax`` is found
20
+ with a spline fit.
21
+
22
+ If v and i are in V and A respectively, then pmax is in W.
23
+
24
+ If the the power quadrant has negative I (as for Simudo), use optional
25
+ argument ``powersign=-1.0``.
26
+
27
+ Example
28
+ -------
29
+
30
+ ::
31
+
32
+ p = iv_params(current_array, voltage_array)
33
+ print(p.voc, p.isc, p.pmax, p.ff, p.mppv, p.mppi)
34
+ """
35
+
36
+ def __init__(self, i, v, powersign=1.0):
37
+ self.i = np.array(i)
38
+ self.v = np.array(v)
39
+ assert len(i) == len(v), "Unequal length arrays"
40
+ if ordertest(v) == False:
41
+ self.i = self.i[::-1]
42
+ self.v = self.v[::-1]
43
+ assert ordertest(
44
+ self.v
45
+ ), "Voltage array out of order, must be monotonic"
46
+ assert (
47
+ max(i) >= 0.0 and min(i) <= 0.0 and max(i) > min(i)
48
+ ), "Current array does not cross zero"
49
+ assert (
50
+ max(v) >= 0.0 and min(v) <= 0.0 and max(v) > min(v)
51
+ ), "Voltage array does not cross zero"
52
+
53
+ interp_i = interp1d(self.v, self.i, kind="linear")
54
+ self.isc = float(interp_i(0.0))
55
+
56
+ interp_v = interp1d(self.i, self.v, kind="linear", bounds_error=False)
57
+ self.voc = float(interp_v(0.0))
58
+
59
+ spline_P = UnivariateSpline(
60
+ self.v, powersign * self.i * self.v, k=4, s=0
61
+ )
62
+ dPdV = spline_P.derivative()
63
+ roots = dPdV.roots()
64
+ Pmax = -1e10
65
+ for k in range(len(roots)):
66
+ P = spline_P(roots[k])
67
+ if P > Pmax:
68
+ Pmax = P
69
+ self.mppv = roots[k]
70
+ self.mppi = interp_i(self.mppv)
71
+
72
+ self.pmax = spline_P(self.mppv) # self.mppi*self.mppv
73
+ self.ff = self.pmax / (self.voc * self.isc)
File without changes