paramrf 0.34.3__tar.gz → 0.34.4__tar.gz

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 (216) hide show
  1. {paramrf-0.34.3 → paramrf-0.34.4}/PKG-INFO +1 -1
  2. paramrf-0.34.4/docs/research/conductor-loss-alternatives.md +380 -0
  3. {paramrf-0.34.3 → paramrf-0.34.4}/paramrf.egg-info/PKG-INFO +1 -1
  4. {paramrf-0.34.3 → paramrf-0.34.4}/paramrf.egg-info/SOURCES.txt +1 -0
  5. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/materials/surface_impedance.py +4 -2
  6. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/__init__.py +2 -0
  7. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/__init__.py +2 -0
  8. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/microstrip.py +384 -2
  9. {paramrf-0.34.3 → paramrf-0.34.4}/pyproject.toml +1 -1
  10. paramrf-0.34.4/tests/test_models/test_current_distribution.py +547 -0
  11. paramrf-0.34.3/tests/test_models/test_current_distribution.py +0 -139
  12. {paramrf-0.34.3 → paramrf-0.34.4}/.github/workflows/docs.yml +0 -0
  13. {paramrf-0.34.3 → paramrf-0.34.4}/.github/workflows/draft-pdf.yml +0 -0
  14. {paramrf-0.34.3 → paramrf-0.34.4}/.github/workflows/publish.yml +0 -0
  15. {paramrf-0.34.3 → paramrf-0.34.4}/.github/workflows/tests.yml +0 -0
  16. {paramrf-0.34.3 → paramrf-0.34.4}/.gitignore +0 -0
  17. {paramrf-0.34.3 → paramrf-0.34.4}/AGENTS.md +0 -0
  18. {paramrf-0.34.3 → paramrf-0.34.4}/CHANGELOG.md +0 -0
  19. {paramrf-0.34.3 → paramrf-0.34.4}/CLAUDE.md +0 -0
  20. {paramrf-0.34.3 → paramrf-0.34.4}/CONTEXT.md +0 -0
  21. {paramrf-0.34.3 → paramrf-0.34.4}/CONTRIBUTING.md +0 -0
  22. {paramrf-0.34.3 → paramrf-0.34.4}/LICENSE +0 -0
  23. {paramrf-0.34.3 → paramrf-0.34.4}/NOTICE +0 -0
  24. {paramrf-0.34.3 → paramrf-0.34.4}/README.rst +0 -0
  25. {paramrf-0.34.3 → paramrf-0.34.4}/assets/logo.png +0 -0
  26. {paramrf-0.34.3 → paramrf-0.34.4}/docs/Makefile +0 -0
  27. {paramrf-0.34.3 → paramrf-0.34.4}/docs/_static/custom.css +0 -0
  28. {paramrf-0.34.3 → paramrf-0.34.4}/docs/_templates/autosummary/class.rst +0 -0
  29. {paramrf-0.34.3 → paramrf-0.34.4}/docs/_templates/autosummary/function.rst +0 -0
  30. {paramrf-0.34.3 → paramrf-0.34.4}/docs/_templates/autosummary/module.rst +0 -0
  31. {paramrf-0.34.3 → paramrf-0.34.4}/docs/adr/0001-line-modelling-architecture.md +0 -0
  32. {paramrf-0.34.3 → paramrf-0.34.4}/docs/agents/domain.md +0 -0
  33. {paramrf-0.34.3 → paramrf-0.34.4}/docs/agents/issue-tracker.md +0 -0
  34. {paramrf-0.34.3 → paramrf-0.34.4}/docs/agents/triage-labels.md +0 -0
  35. {paramrf-0.34.3 → paramrf-0.34.4}/docs/api/index.rst +0 -0
  36. {paramrf-0.34.3 → paramrf-0.34.4}/docs/conf.py +0 -0
  37. {paramrf-0.34.3 → paramrf-0.34.4}/docs/core_concepts/core_primitives.rst +0 -0
  38. {paramrf-0.34.3 → paramrf-0.34.4}/docs/core_concepts/index.rst +0 -0
  39. {paramrf-0.34.3 → paramrf-0.34.4}/docs/core_concepts/jax_overview.rst +0 -0
  40. {paramrf-0.34.3 → paramrf-0.34.4}/docs/core_concepts/optimization_and_inference.rst +0 -0
  41. {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/cascading_and_terminating.rst +0 -0
  42. {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/circuit_clc.png +0 -0
  43. {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/circuit_models.rst +0 -0
  44. {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/custom_models.rst +0 -0
  45. {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/derivatives_and_sweeps.rst +0 -0
  46. {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/index.rst +0 -0
  47. {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/model_optimization.rst +0 -0
  48. {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/multiple_models_one_parameter_set.rst +0 -0
  49. {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/parameter_naming_and_model_manipulation.rst +0 -0
  50. {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/shared_substrates.rst +0 -0
  51. {paramrf-0.34.3 → paramrf-0.34.4}/docs/index.rst +0 -0
  52. {paramrf-0.34.3 → paramrf-0.34.4}/docs/license.rst +0 -0
  53. {paramrf-0.34.3 → paramrf-0.34.4}/docs/make.bat +0 -0
  54. {paramrf-0.34.3 → paramrf-0.34.4}/docs/research/holloway1994.pdf +0 -0
  55. {paramrf-0.34.3 → paramrf-0.34.4}/docs/research/microstrip-loss-conventions.md +0 -0
  56. {paramrf-0.34.3 → paramrf-0.34.4}/docs/research/precision-coax-microstrip-10-500mhz.md +0 -0
  57. {paramrf-0.34.3 → paramrf-0.34.4}/docs/skrf_comparison/index.rst +0 -0
  58. {paramrf-0.34.3 → paramrf-0.34.4}/docs/skrf_comparison/overview.rst +0 -0
  59. {paramrf-0.34.3 → paramrf-0.34.4}/docs/skrf_comparison/performance.rst +0 -0
  60. {paramrf-0.34.3 → paramrf-0.34.4}/docs/tutorials/1_cable_fitting.ipynb +0 -0
  61. {paramrf-0.34.3 → paramrf-0.34.4}/docs/tutorials/2_chip_inductor_fitting.ipynb +0 -0
  62. {paramrf-0.34.3 → paramrf-0.34.4}/docs/tutorials/data/CBN-1.5FT-SMSM.s2p +0 -0
  63. {paramrf-0.34.3 → paramrf-0.34.4}/docs/tutorials/data/on-chip-inductor.s2p +0 -0
  64. {paramrf-0.34.3 → paramrf-0.34.4}/docs/tutorials/index.rst +0 -0
  65. {paramrf-0.34.3 → paramrf-0.34.4}/paper/paper.bib +0 -0
  66. {paramrf-0.34.3 → paramrf-0.34.4}/paper/paper.md +0 -0
  67. {paramrf-0.34.3 → paramrf-0.34.4}/paper/rlc.png +0 -0
  68. {paramrf-0.34.3 → paramrf-0.34.4}/paramrf.egg-info/dependency_links.txt +0 -0
  69. {paramrf-0.34.3 → paramrf-0.34.4}/paramrf.egg-info/requires.txt +0 -0
  70. {paramrf-0.34.3 → paramrf-0.34.4}/paramrf.egg-info/top_level.txt +0 -0
  71. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/__init__.py +0 -0
  72. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/bijectors.py +0 -0
  73. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/constraints.py +0 -0
  74. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/covariance_kernels.py +0 -0
  75. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/discrepancy_models.py +0 -0
  76. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/distributions.py +0 -0
  77. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/evaluators.py +0 -0
  78. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/fitting/__init__.py +0 -0
  79. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/fitting/minimize.py +0 -0
  80. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/fitting/result.py +0 -0
  81. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/fitting/routers.py +0 -0
  82. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/fitting/sample.py +0 -0
  83. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/fitting/targets.py +0 -0
  84. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/frequency.py +0 -0
  85. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/infer/__init__.py +0 -0
  86. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/infer/base.py +0 -0
  87. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/infer/result.py +0 -0
  88. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/infer/sample.py +0 -0
  89. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/infer/solvers/__init__.py +0 -0
  90. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/infer/solvers/blackjax.py +0 -0
  91. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/infer/solvers/polychord.py +0 -0
  92. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/likelihoods.py +0 -0
  93. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/losses.py +0 -0
  94. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/materials/__init__.py +0 -0
  95. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/materials/conductor.py +0 -0
  96. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/materials/dielectric.py +0 -0
  97. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/materials/properties.py +0 -0
  98. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/materials/roughness.py +0 -0
  99. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/materials/substrate.py +0 -0
  100. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/math/__init__.py +0 -0
  101. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/math/aggregations.py +0 -0
  102. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/math/bessel.py +0 -0
  103. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/math/conversions.py +0 -0
  104. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/math/losses.py +0 -0
  105. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/math/misc.py +0 -0
  106. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/adapters/__init__.py +0 -0
  107. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/adapters/base.py +0 -0
  108. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/adapters/bridge.py +0 -0
  109. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/adapters/callable.py +0 -0
  110. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/adapters/delegated.py +0 -0
  111. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/adapters/static.py +0 -0
  112. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/adapters/wrapped.py +0 -0
  113. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/base.py +0 -0
  114. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/__init__.py +0 -0
  115. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/ideal.py +0 -0
  116. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/base.py +0 -0
  117. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/coaxial.py +0 -0
  118. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/empirical.py +0 -0
  119. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/ideal.py +0 -0
  120. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/nodal.py +0 -0
  121. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/nonuniform.py +0 -0
  122. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/planar.py +0 -0
  123. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/stripline.py +0 -0
  124. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lumped.py +0 -0
  125. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/sections.py +0 -0
  126. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/__init__.py +0 -0
  127. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/__init__.py +0 -0
  128. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/cascade.py +0 -0
  129. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/circuit/__init__.py +0 -0
  130. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/circuit/base.py +0 -0
  131. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/circuit/circuit.py +0 -0
  132. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/circuit/solvers/__init__.py +0 -0
  133. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/circuit/solvers/nodal.py +0 -0
  134. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/circuit/solvers/scattering.py +0 -0
  135. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/terminated.py +0 -0
  136. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/nodal.py +0 -0
  137. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/topological.py +0 -0
  138. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/transformed.py +0 -0
  139. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/surrogates/__init__.py +0 -0
  140. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/surrogates/expansion.py +0 -0
  141. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/surrogates/rational.py +0 -0
  142. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/modules/__init__.py +0 -0
  143. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/modules/base.py +0 -0
  144. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/modules/wrapped.py +0 -0
  145. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/network_collection.py +0 -0
  146. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/noise_models.py +0 -0
  147. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/__init__.py +0 -0
  148. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/base.py +0 -0
  149. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/minimize.py +0 -0
  150. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/result.py +0 -0
  151. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/solvers/__init__.py +0 -0
  152. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/solvers/jaxopt.py +0 -0
  153. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/solvers/optimistix.py +0 -0
  154. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/solvers/scipy.py +0 -0
  155. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/parameters.py +0 -0
  156. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/problems.py +0 -0
  157. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/rf/__init__.py +0 -0
  158. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/rf/conversions.py +0 -0
  159. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/rf/mna.py +0 -0
  160. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/serialization.py +0 -0
  161. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/terms.py +0 -0
  162. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/types.py +0 -0
  163. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/__init__.py +0 -0
  164. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/array.py +0 -0
  165. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/debug.py +0 -0
  166. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/network.py +0 -0
  167. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/optix.py +0 -0
  168. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/random.py +0 -0
  169. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/rf.py +0 -0
  170. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/transforms.py +0 -0
  171. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/tree.py +0 -0
  172. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/type.py +0 -0
  173. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/viz/__init__.py +0 -0
  174. {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/viz/plots.py +0 -0
  175. {paramrf-0.34.3 → paramrf-0.34.4}/setup.cfg +0 -0
  176. {paramrf-0.34.3 → paramrf-0.34.4}/tests/__init__.py +0 -0
  177. {paramrf-0.34.3 → paramrf-0.34.4}/tests/_dependency_checks.py +0 -0
  178. {paramrf-0.34.3 → paramrf-0.34.4}/tests/data/10m_cable.s2p +0 -0
  179. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_autodiff.py +0 -0
  180. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_conversions.py +0 -0
  181. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_covariance_kernels.py +0 -0
  182. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_dc_limits.py +0 -0
  183. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_evaluators.py +0 -0
  184. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_fitting_minimize.py +0 -0
  185. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_fitting_routers.py +0 -0
  186. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_fitting_sample.py +0 -0
  187. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_fitting_targets.py +0 -0
  188. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_frequency.py +0 -0
  189. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_infer_base.py +0 -0
  190. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_infer_sample.py +0 -0
  191. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_map_priors.py +0 -0
  192. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_materials/test_conductor.py +0 -0
  193. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_materials/test_dielectric.py +0 -0
  194. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_materials/test_serialization.py +0 -0
  195. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_materials/test_substrate.py +0 -0
  196. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_materials/test_surface_impedance.py +0 -0
  197. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_math/test_bessel.py +0 -0
  198. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_model.py +0 -0
  199. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_adapters.py +0 -0
  200. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_circuit_nodal.py +0 -0
  201. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_circuit_scattering.py +0 -0
  202. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_interconnected.py +0 -0
  203. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_lines.py +0 -0
  204. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_lines_skrf_matrix.py +0 -0
  205. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_lumped.py +0 -0
  206. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_nodal.py +0 -0
  207. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_sections.py +0 -0
  208. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_transformed.py +0 -0
  209. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_transformers.py +0 -0
  210. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_module.py +0 -0
  211. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_naming.py +0 -0
  212. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_optimize_base.py +0 -0
  213. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_optimize_minimize.py +0 -0
  214. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_terms.py +0 -0
  215. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_transforms.py +0 -0
  216. {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_utils/test_compress.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: paramrf
3
- Version: 0.34.3
3
+ Version: 0.34.4
4
4
  Summary: Parametric radio frequency modeling
5
5
  Author-email: Gary Allen <gvcallen@gmail.com>
6
6
  Project-URL: homepage, https://github.com/gvcallen/paramrf
@@ -0,0 +1,380 @@
1
+ # Conductor-loss models characterised but not implemented
2
+
3
+ Reference note. It records the microstrip conductor-loss models that were evaluated and
4
+ deliberately **not** shipped, each with its physical coverage, its cost, and the specific
5
+ reason it was left out; and it carries the standing record of a contradiction between two
6
+ models that *were* shipped.
7
+
8
+ Two existing documents are assumed and **not** repeated here:
9
+
10
+ - `docs/adr/0001-line-modelling-architecture.md` — the surface-impedance normalisation
11
+ argument, the 2.99x weight factor between Wheeler's weight and the exact slab, and why
12
+ `RootSumSquareSlabSurfaceImpedance` is the planar default. Decision 1 there also names
13
+ the trace/ground split as the only honest fix; that fix has since landed as
14
+ `TraceGroundCurrentDistribution`, so the ADR's "which ParamRF does not implement" is now
15
+ out of date on that clause alone.
16
+ - `docs/research/microstrip-loss-conventions.md` — dielectric-attenuation conventions,
17
+ conductor loss at $t\to0$, and $Z_c$ at low frequency.
18
+
19
+ Every claim below is labelled *established* (traced to a primary source that was read),
20
+ *as-implemented* (computed against this repository), or *inferred*.
21
+
22
+ ---
23
+
24
+ ## Which layer each alternative would slot into
25
+
26
+ ParamRF's line modelling has five strategy roles (`CONTEXT.md`, "Line modelling"):
27
+ **Formulation**, **Dispersion**, **SurfaceImpedance**, **CurrentDistribution**, and
28
+ **Roughness**. Conductor loss is produced by the last three: a `CurrentDistribution`
29
+ returns `(SurfaceImpedance, weight)` pairs — one per conductor surface, weight in inverse
30
+ metres — and the line multiplies and sums them. This is the vocabulary used throughout
31
+ below, and it is what decides whether an alternative is even expressible.
32
+
33
+ | alternative | layer it would occupy | expressible in ParamRF? |
34
+ |---|---|---|
35
+ | Holloway–Kuester stopping distance | `CurrentDistribution` (a weight) | yes, if $\Delta(t/2\delta_{sk})$ were available in closed form |
36
+ | Rautio–Demir $n$-layer | none — it is a solver, not a strategy | no |
37
+ | Rautio–Demir two-layer | `CurrentDistribution` emitting two pairs | yes in shape; the split fractions are not closed-form |
38
+ | Rautio–Demir one-layer with $\alpha,\beta$ | `CurrentDistribution` (one pair, rescaled) | yes in shape; $\beta$ is not closed-form |
39
+ | Patel–Triverio surface admittance + CIM | replaces Formulation *and* the loss layers | no |
40
+ | Kiang–Ali–Kong full wave | replaces the whole line model | no |
41
+ | side-wall current | a $t/(t+W)$ correction on a `CurrentDistribution` weight | yes, trivially |
42
+
43
+ What ships instead, all three as peers in
44
+ `pmrf/models/components/lines/microstrip.py`:
45
+ `WheelerCurrentDistribution` (the default), `IncrementalInductanceCurrentDistribution`
46
+ and `TraceGroundCurrentDistribution`.
47
+
48
+ ---
49
+
50
+ ## The open question: the sign of Wheeler's error
51
+
52
+ The two non-default distributions correct the same 1942 geometry weight by different
53
+ routes and **disagree on the direction of its error**. This is unresolved. It is recorded
54
+ here rather than smoothed over, because the resolution decides which distribution should
55
+ eventually become the microstrip default — a decision deliberately deferred.
56
+
57
+ ### Why the error is invisible in a fit
58
+
59
+ The conductor channel enters $Z$ only through the product $Z_s k_c$, and
60
+ $Z_s \propto \sigma^{-1/2}$. A fit with free $\sigma$ therefore absorbs *any* $k_c$ error
61
+ exactly: a 22% error in $k_c$ surfaces as $1.22^2 = 1.49\times$ copper and nothing else.
62
+ That degeneracy is why a wrong geometry weight can survive indefinitely — it never looks
63
+ like a bad $k_c$, only like an implausible conductivity. *Established, by inspection of
64
+ the model.*
65
+
66
+ ### The as-implemented numbers
67
+
68
+ At $W$ = 4 mm, $H$ = 1.6 mm, $T$ = 35 um, $\varepsilon_r$ = 4.335 ($W/H$ = 2.5,
69
+ $\Re Z_c$ = 42.28 ohm), the strong-skin geometry weights are:
70
+
71
+ | distribution | weight [1/m] | vs. Wheeler 1942 | vs. the derivative |
72
+ |---|---:|---:|---:|
73
+ | `TraceGroundCurrentDistribution` | 468.39 (= 385.69 trace + 82.71 ground) | +21.4% | +47.1% |
74
+ | `WheelerCurrentDistribution` (1942 fit) | 385.69 | — | +21.2% |
75
+ | `IncrementalInductanceCurrentDistribution` | 318.34 | −17.5% | — |
76
+
77
+ *As-implemented*: these reproduce exactly against this tree
78
+ (`HammerstadJensenMicrostripFormulation`, x64 enabled). **They are larger than the 12–18%
79
+ quoted in the originating issue**, whose departure table was internally inconsistent: it
80
+ compared the split's trace-plus-ground total against a Wheeler weight evaluated at a
81
+ different $Z_c$. The as-implemented spread against Wheeler is 21.4%, not 12–18%.
82
+
83
+ ### The two cases
84
+
85
+ **The trace/ground split says Wheeler is low.** Summing the physical surfaces — trace at
86
+ $2K_i/W$ plus ground at $1/W_g$, with $W_g$ from Holloway and Kuester's ground-plane
87
+ current density — lands *above* Wheeler's single bundled constant, by 21.4% as
88
+ implemented. That is inside the 12–30% band by which Holloway and Kuester report
89
+ Wheeler's rule to underpredict, which reads as partial corroboration. Its evidence is one
90
+ closed-form integration of a published current density.
91
+
92
+ **The incremental-inductance derivative says Wheeler is high.** Evaluating the recession
93
+ derivative
94
+ $k_c = Z_0^{-1}\,\partial_n Z_a(W-2n, H+2n, T-2n)|_{n=0}$
95
+ by `jax.grad` gives 318.34 against Wheeler's 385.69, a ratio of 0.825, closing to 0.958 by
96
+ $W/H = 50$. Its evidence is four independent routes landing in 306–320 for the same case:
97
+ the Hammerstad–Jensen derivative (318.3), the same derivative taken numerically on an
98
+ independent 2D quasi-static field solve that meshes the real cross-section (316.0), a
99
+ power-loss surface-impedance integral $k_c = \int\rho_s^2\,dl / Q^2$ on that same
100
+ air-filled problem (310–320), and a volumetric PEEC solve with no surface-impedance
101
+ approximation anywhere (~306). *The last three are external-solver results: they are
102
+ recorded, not reproduced, and per the chain's house rules they are deliberately not turned
103
+ into tests.*
104
+
105
+ ### Which is better supported
106
+
107
+ **The incremental-inductance derivative.** Three reasons:
108
+
109
+ 1. Its four routes are genuinely independent — two different $Z_a$ formulations, a
110
+ power-loss integral, and a volumetric solve that makes no surface-impedance
111
+ approximation at all — and they agree to within 5%. The split's case rests on a single
112
+ analytic integration.
113
+ 2. Rautio and Demir supply a third, unrelated data point with the same sign: their
114
+ two-layer model converges to 0.07 dB (about 15%) *more* loss than their converged
115
+ 81-layer model at high frequency, and 15–30% more resistance than their one-layer
116
+ model, and they attribute the excess to a missing physical term (side current) rather
117
+ than to a defect in the reference. A model that sums surfaces without the terms that
118
+ redistribute current between them tends to run high — which is structurally the same
119
+ criticism as applies to the split. *Established* (Rautio & Demir 2003, §IV–V).
120
+ 3. The split's agreement with Holloway and Kuester's 12–30% band is weaker than it looks:
121
+ the band is a comparison against *measured* loss over lines at $Z_0$ = 50, 80 and 86
122
+ ohm at microwave frequencies, whereas the split's excess is against Wheeler's own
123
+ analytic weight for one 42 ohm geometry, and it shrinks to a few percent at higher
124
+ $Z_c$. Landing inside a band is not the same as reproducing what generated it.
125
+
126
+ None of this settles the question, and neither result changes the microstrip default,
127
+ which remains `WheelerCurrentDistribution`. Wheeler's disputed level error stays **open**,
128
+ with three sources on the record: Holloway and Kuester (Wheeler low by 12–30%), Rautio and
129
+ Demir's 15%-high two-layer finding (surface-summed models run high), and the derivative's
130
+ four field solves (Wheeler high by 21%).
131
+
132
+ ### What the derivative supersedes
133
+
134
+ `IncrementalInductanceCurrentDistribution` evaluates Wheeler's incremental-inductance
135
+ *rule*; `WheelerCurrentDistribution` evaluates his 1942 *closed-form fit* to it,
136
+ $k_c = (2/W)\exp[-1.2(\Re Z_c/Z_0)^{0.7}]$. The derivative **replaces that fit's
137
+ edge-crowding exponential outright** — the $2/W$ prefactor and the $K_i$ factor both
138
+ disappear into a single computed number.
139
+
140
+ The consequence for this page: **any alternative built on the 1942 fit inherits the fit's
141
+ error and is not independent evidence about it.** That includes
142
+ `TraceGroundCurrentDistribution`, whose trace term is $2K_i/W$ verbatim, so its
143
+ disagreement with the derivative is partly a disagreement about $K_i$ rather than about
144
+ the trace/ground split as such. It also rules out treating the wide-line limit $k_c\to2/W$
145
+ as a check: the derivative does not recover it (22.9 against 25.0 at $W/H = 50$), because
146
+ $2/W$ assumes a zero-thickness strip and neglects fringing.
147
+
148
+ ---
149
+
150
+ ## Holloway and Kuester's stopping distance (1994)
151
+
152
+ *Primary source read in full:* C. L. Holloway and E. F. Kuester, "Edge shape effects and
153
+ quasi-closed form expressions for the conductor loss of microstrip lines", *Radio Science*
154
+ 29(3), 539–559, 1994, <https://doi.org/10.1029/93RS03062>. A copy is at
155
+ `docs/research/holloway1994.pdf`.
156
+
157
+ ### What it is
158
+
159
+ The perturbation integral $\alpha_c \propto \oint |J_s|^2\,dl$ diverges logarithmically on
160
+ an infinitely thin strip, because $J_s\sim1/\sqrt{x}$ at the edge. Lewin
161
+ (<https://doi.org/10.1109/TMTT.1984.1132762>) and Vainshtein & Zhurav independently
162
+ proposed stopping the integral a short distance $\Delta$ before the edge, with $\Delta$ a
163
+ function of the local edge geometry only. Holloway and Kuester replace the original
164
+ high-frequency-only $\Delta$ with one obtained from a finite-element eddy-current solve of
165
+ the fields in and around the edge, valid for any $t/\delta_{sk}$ and any edge shape. This
166
+ is the **only** published route to their reported 12–30% figure: "Wheeler's rule predicts
167
+ losses between 12% and 30% lower than those obtained from both our model and from
168
+ experimental results" (§6). *Established.*
169
+
170
+ It would sit in the `CurrentDistribution` layer — it produces a weight — and is the
171
+ natural home for the ground-plane term ParamRF already takes from the same paper via
172
+ `_ground_return_effective_width`.
173
+
174
+ ### Why it was not taken: where our band lands on Figure 5
175
+
176
+ $\Delta$ exists only as **Figure 5**, a raster plot of $t/\Delta$ against $t/(2\delta_{sk})$.
177
+ (The paper's body text discusses the same curves in terms of $t/\delta_{sk}$ while the
178
+ figure's abscissa is labelled $t/(2\delta_{sk})$; the placement below uses the figure's own
179
+ axis.) Read off the 90° curve, it runs from $t/\Delta = 9.2$ at dc, through a sharp
180
+ resonant peak of roughly 330 near $t/(2\delta_{sk})\approx1.4$, collapses to a plateau
181
+ around 170 by 3.5, and only creeps back toward the Lewin/Vainshtein high-frequency
182
+ asymptote of 290.8 — a value the text says "is not attained until $T/\delta_{sk}$ is of
183
+ the order of 40 or above". The peak height and its abscissa are a **digitisation read of a
184
+ raster figure**, not quoted numbers; the 9.2, the 290.8 and the 40 are quoted. *Mixed:
185
+ established for the quoted values, inferred for the peak.*
186
+
187
+ For copper at 10–500 MHz, on the figure's own axis:
188
+
189
+ | copper weight | $T$ | $t/(2\delta_{sk})$ at 10 MHz | at 500 MHz |
190
+ |---|---:|---:|---:|
191
+ | one ounce | 35 um | 0.84 | 5.92 |
192
+ | half ounce | 17.5 um | 0.42 | 2.96 |
193
+
194
+ (*As-implemented arithmetic*, $\delta_{sk}=(\pi f\mu_0\sigma)^{-1/2}$, $\sigma$ = 5.8e7
195
+ S/m: 20.90 um at 10 MHz, 2.955 um at 500 MHz.)
196
+
197
+ **The band sits directly on the resonance and its collapse.** This is the one region of
198
+ the curve where a small horizontal read error off a raster figure maps to a several-fold
199
+ error in $\Delta$, and it is also exactly the region Zhurav's closed-form fallback
200
+ provably gets wrong: the paper states Zhurav's expression does a decent job only for
201
+ $T/\delta_{sk} > 5$, does not reproduce the resonance below that, and predicts a dc value
202
+ of $t/\Delta = 160$ against the numerical 9.2. So neither the figure nor the published
203
+ closed form is usable here.
204
+
205
+ The sensitivity is soft, which is what makes this a judgement rather than an
206
+ impossibility. $\Delta$ is the cutoff on a logarithmically divergent integral, so
207
+ $\alpha\propto\ln(W/\Delta)$: a 2x error in $\Delta$ is about 7% in attenuation, a 5x
208
+ error about 18%. *Inferred* from the integral's form. Introducing ~18% of unverifiable
209
+ error in order to fix a *disputed* 12–30% defect is not a good trade in this band.
210
+
211
+ **This decision is band-specific and should be revisited for a different one.** Above
212
+ roughly 2 GHz for one-ounce copper the curve is flat and the same digitisation would be
213
+ sound. The disqualifying criterion is not "digitised, therefore unusable" — it is that the
214
+ digitisation error here is comparable to the defect being fixed. Note also the paper's own
215
+ edge-shape result: the 45° and 90° curves are essentially identical for $t/\delta_{sk}<3$
216
+ and diverge above it, so edge profile is a further term that only matters at the high end.
217
+
218
+ ---
219
+
220
+ ## Rautio and Demir (2003): $n$-layer, two-layer and one-layer models
221
+
222
+ *Primary source read:* J. C. Rautio and V. Demir, "Microstrip conductor loss models for
223
+ electromagnetic analysis", *IEEE Trans. MTT* 51(3), 915–921, 2003,
224
+ <https://doi.org/10.1109/TMTT.2003.808693> (author copy:
225
+ <https://www.sonnetsoftware.com/support/downloads/techdocs/MicCondLoss_Mar03.pdf>).
226
+
227
+ ### Coverage and cost
228
+
229
+ The $n$-layer model divides the conductor volume into $n$ sheets inside a 2-D method-of-
230
+ moments solve and lets Maxwell's equations decide the current split, with no assumed
231
+ frequency dependence. Validated against measurement and converged at 81 layers. Its cost
232
+ is a full EM solve per frequency (34 s per frequency for the two-layer model on the
233
+ paper's hardware; the 81-layer model far more), and its accuracy depends on cell width
234
+ across the strip — the 81-layer result does not converge until the width is subdivided
235
+ into 128 cells, because side current is confined within one skin depth of the surface.
236
+ *Established.*
237
+
238
+ ### Why not shipped
239
+
240
+ **The $n$-layer model has no layer to slot into.** It is a field solver, not a strategy
241
+ object: it does not produce a `(SurfaceImpedance, weight)` pair, it produces a solved
242
+ current distribution. Adopting it means adopting an EM solver, and with it the loss of the
243
+ closed-form differentiability that the fitting path depends on.
244
+
245
+ **The reduced models need coefficients that are not closed form.** The one-layer reduction
246
+ rescales the sheet impedance by fractional top- and bottom-side currents $\alpha$ and
247
+ $\beta$. The paper is explicit that "with the incorrect selection of $\alpha$ and $\beta$,
248
+ the one-layer model can be in error for loss by as much as a factor of two", that $\beta$
249
+ "can sometimes approach zero and is frequency- and geometry-dependent", and that these
250
+ factors "do not appear to have been previously considered in the literature". For the
251
+ microstrip they study, the bottom-surface current is about 1.5x the top. A ParamRF
252
+ `CurrentDistribution` could emit exactly this shape — it is one pair with a rescaled
253
+ impedance — but there is no closed form for $\beta$, so shipping it would mean shipping a
254
+ knob whose wrong setting is a 2x loss error. *Established.*
255
+
256
+ ### Their transition frequencies, and why edge crowding is fully developed in our band
257
+
258
+ The paper defines three regimes separated by two transition frequencies. Below
259
+ $f_1 = R/2\pi L$ the conductor is electrically thin, current fills the volume, the edge
260
+ singularity is absent and loss is flat. Between $f_1$ and $f_2$ (where $t = 2\delta_{sk}$)
261
+ the edge singularity emerges. Above $f_2$ the classic $\sqrt f$ behaviour sets in. The
262
+ paper notes $f_1$ is "based purely on empirical observation". *Established.*
263
+
264
+ For representative ParamRF geometries, with $R=\rho/(Wt)$ and $L=Z_c/v_p$:
265
+
266
+ | geometry ($H$ = 1.6 mm, $\varepsilon_r$ = 4.335) | $\Re Z_c$ | $f_1$ | $f_2$ ($t=2\delta_{sk}$) |
267
+ |---|---:|---:|---:|
268
+ | $W$ = 1.55 mm, $T$ = 35 um | 71.6 ohm | 0.121 MHz | 14.3 MHz |
269
+ | $W$ = 4 mm, $T$ = 35 um | 42.3 ohm | 0.076 MHz | 14.3 MHz |
270
+ | $W$ = 1.55 mm, $T$ = 17.5 um | 72.0 ohm | 0.239 MHz | 57.0 MHz |
271
+
272
+ (*As-implemented arithmetic* from the paper's own definitions, evaluated against this tree
273
+ with `HammerstadJensenMicrostripFormulation`; $f_2$ depends only on $t$.)
274
+
275
+ The consequence is that **10–500 MHz is entirely above $f_1$**: the edge singularity is
276
+ fully developed across the whole band, which is why a geometry weight that omits edge
277
+ crowding is never adequate here, and why the band straddles $f_2$ rather than sitting in
278
+ one clean regime.
279
+
280
+ ### A third data point on the sign question
281
+
282
+ At high frequency their two-layer model converges to 0.07 dB — about 15% — *more* loss
283
+ than the converged 81-layer model, and 15–30% more resistance than the one-layer model.
284
+ They attribute this to side current, absent from the two-layer model, whose absence lets a
285
+ stronger edge singularity form. *Established.* This is used above as independent evidence
286
+ that a surface-summed model tends to run high.
287
+
288
+ ---
289
+
290
+ ## Patel, Triverio and Hum: surface admittance operator with the contour integral method
291
+
292
+ *Sources:* U. R. Patel and P. Triverio, "Skin effect modeling in conductors of arbitrary
293
+ shape through a surface admittance operator and the contour integral method", *IEEE Trans.
294
+ MTT* 64(9), 2708–2717, 2016, <https://doi.org/10.1109/TMTT.2016.2593721> (preprint:
295
+ <https://arxiv.org/abs/1509.08357>); and U. R. Patel, S. V. Hum and P. Triverio, "Fast
296
+ parameter extraction for transmission lines with arbitrarily-shaped conductors and
297
+ dielectrics", *IEEE EPEPS* 2016, <https://doi.org/10.1109/EPEPS.2016.7835448>.
298
+
299
+ **Coverage.** A Dirichlet-to-Neumann surface operator relating longitudinal $E$ to
300
+ tangential $H$ on each conductor boundary, obtained by the contour integral method. It
301
+ handles genuinely arbitrary cross-sections — trapezoidal etch profiles, curved and
302
+ V-shaped edges, rough profiles — which is precisely the geometry class every closed form
303
+ on this page assumes away. It is far cheaper than volume meshing, because it discretises
304
+ only the boundary.
305
+
306
+ **Cost, and why not shipped.** It is still a numerical solve, per frequency and per
307
+ geometry, with no analytic derivative in $W$, $H$ or $T$. That is disqualifying at the
308
+ `CurrentDistribution` seam, which exists to hand the line a differentiable closed-form
309
+ weight; a solver there breaks `jax.grad` through the geometry, which the fitting and
310
+ inference paths require. Its right role in this project is as a **validation oracle** —
311
+ an independent answer to check a shipped weight against, in the same category as the field
312
+ solves quoted above — not as a formulation. *Inferred from the method's cost structure;
313
+ the papers themselves make no claim either way about differentiability.*
314
+
315
+ ---
316
+
317
+ ## Kiang, Ali and Kong (1991): full-wave lossy microstrip with finite thickness
318
+
319
+ *Source:* J. F. Kiang, S. M. Ali and J. A. Kong, "Modelling of lossy microstrip lines with
320
+ finite thickness", *Progress In Electromagnetics Research* PIER 4, 85–117, **1991**,
321
+ <https://doi.org/10.2528/PIER89060600>.
322
+
323
+ Listed for completeness as the full-wave reference treatment of the same problem: it
324
+ solves the actual finite-thickness lossy strip rather than perturbing a lossless solution,
325
+ so it is not subject to any of the surface-impedance or stopping-point approximations
326
+ above. It is not shippable for the same reason as the $n$-layer model — it replaces the
327
+ whole line model with a solve, and there is no layer in ParamRF's architecture that a
328
+ full-wave solver fits into.
329
+
330
+ **Note the year.** The DOI slug `PIER89060600` encodes a 1989 submission date and the
331
+ paper is frequently miscited as 1989. The publication is PIER volume 4, 1991 (confirmed
332
+ against the Crossref record for that DOI).
333
+
334
+ ---
335
+
336
+ ## Side-wall current
337
+
338
+ Rautio and Demir find empirically that the one-layer/32-layer resistance difference, swept
339
+ over stripline widths from 16 to 200 um, tracks $t/(t+W)$ closely, and suggest a $t/(t+W)$
340
+ modification to compensate for current on the lateral sides. *Established* (their Fig. 9
341
+ and surrounding text).
342
+
343
+ For a 35 um trace at 1.55 mm width that is $35/(35+1550)$ = **2.2%** — an order of
344
+ magnitude below the disputed 21% on the geometry weight, and below the 2–5%
345
+ surface-impedance-model difference already documented in the shipped docstrings. It is
346
+ also entirely uncharacterised at 10–500 MHz: their sweep is at 10 GHz on lines two orders
347
+ of magnitude narrower, where $t/(t+W)$ reaches 35%.
348
+
349
+ It would be trivial to express — a scalar factor on a `CurrentDistribution` weight — so
350
+ this is a priority judgement, not an architectural one. It is worth revisiting once the
351
+ sign question above is settled, since below that it is noise.
352
+
353
+ Note that `IncrementalInductanceCurrentDistribution` already includes the side walls, by
354
+ construction: its recession derivative thins the strip by $2n$ as well as narrowing it,
355
+ which is exactly why it requires a thickness-aware formulation and refuses to run without
356
+ one (pairing it with a thickness-blind formulation under-predicts by about 30%). The
357
+ $t/(t+W)$ term above is about how side current *redistributes* the edge singularity, which
358
+ is a different effect and is not captured by any weight on this page.
359
+
360
+ ---
361
+
362
+ ## Source list
363
+
364
+ | source | DOI / stable link |
365
+ |---|---|
366
+ | Wheeler, H. A., "Formulas for the Skin Effect", *Proc. IRE* 30(9), 412–424, 1942 | <https://doi.org/10.1109/JRPROC.1942.232015> |
367
+ | Hammerstad, E. & Jensen, O., "Accurate Models for Microstrip Computer-Aided Design", *IEEE MTT-S Digest*, 407–409, 1980 | <https://doi.org/10.1109/MWSYM.1980.1124303> |
368
+ | Lewin, L., "A Method of Avoiding the Edge Current Divergence in Perturbation Loss Calculations", *IEEE Trans. MTT* 32(7), 717–719, 1984 | <https://doi.org/10.1109/TMTT.1984.1132762> |
369
+ | Vainshtein, L. A. & Zhurav, S. M., "Strong skin effect at the edges of metal plates", *Sov. Tech. Phys. Lett.* 13(6), 298–299, 1987 | no DOI; cited via Holloway & Kuester 1994, ref. list |
370
+ | Zhurav, S. M., "Edge loss in metal plates of rectangular cross section", *Sov. Tech. Phys. Lett.* 13(3), 147–148, 1987 | no DOI; cited via Holloway & Kuester 1994, ref. list |
371
+ | Barsotti, E. L., Kuester, E. F. & Dunn, J. M., "A simple method to account for edge shape in the conductor loss in microstrip", *IEEE Trans. MTT* 39(1), 98–106, 1991 | <https://doi.org/10.1109/22.64611> |
372
+ | Holloway, C. L. & Kuester, E. F., "Edge shape effects and quasi-closed form expressions for the conductor loss of microstrip lines", *Radio Science* 29(3), 539–559, 1994 | <https://doi.org/10.1029/93RS03062> |
373
+ | Rautio, J. C. & Demir, V., "Microstrip conductor loss models for electromagnetic analysis", *IEEE Trans. MTT* 51(3), 915–921, 2003 | <https://doi.org/10.1109/TMTT.2003.808693> |
374
+ | Patel, U. R. & Triverio, P., "Skin Effect Modeling in Conductors of Arbitrary Shape Through a Surface Admittance Operator and the Contour Integral Method", *IEEE Trans. MTT* 64(9), 2708–2717, 2016 | <https://doi.org/10.1109/TMTT.2016.2593721> |
375
+ | Patel, U. R., Hum, S. V. & Triverio, P., "Fast parameter extraction for transmission lines with arbitrarily-shaped conductors and dielectrics", *IEEE EPEPS*, 2016 | <https://doi.org/10.1109/EPEPS.2016.7835448> |
376
+ | Kiang, J. F., Ali, S. M. & Kong, J. A., "Modelling of Lossy Microstrip Lines with Finite Thickness", *PIER* 4, 85–117, 1991 | <https://doi.org/10.2528/PIER89060600> |
377
+
378
+ The two Soviet-journal references are the only entries without a DOI. Both are cited here
379
+ only for facts stated *about* them in Holloway and Kuester 1994 (the 290.8 asymptote and
380
+ Zhurav's dc value of 160), which was read in full; neither was read directly.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: paramrf
3
- Version: 0.34.3
3
+ Version: 0.34.4
4
4
  Summary: Parametric radio frequency modeling
5
5
  Author-email: Gary Allen <gvcallen@gmail.com>
6
6
  Project-URL: homepage, https://github.com/gvcallen/paramrf
@@ -41,6 +41,7 @@ docs/examples/model_optimization.rst
41
41
  docs/examples/multiple_models_one_parameter_set.rst
42
42
  docs/examples/parameter_naming_and_model_manipulation.rst
43
43
  docs/examples/shared_substrates.rst
44
+ docs/research/conductor-loss-alternatives.md
44
45
  docs/research/holloway1994.pdf
45
46
  docs/research/microstrip-loss-conventions.md
46
47
  docs/research/precision-coax-microstrip-10-500mhz.md
@@ -38,8 +38,10 @@ class AbstractSurfaceImpedance(eqx.Module):
38
38
  cannot reproduce both the dc resistance and strong-skin asymptote.
39
39
  :class:`RootSumSquareSlabSurfaceImpedance` uses the optional ``weight`` argument to
40
40
  match both limits and is therefore the planar default. A full
41
- Holloway--Kuester treatment would require separate strip and ground-plane
42
- weights, which ParamRF does not implement.
41
+ Holloway--Kuester treatment charges the strip and the ground plane on
42
+ separate weights; that is
43
+ :class:`~pmrf.models.components.lines.microstrip.TraceGroundCurrentDistribution`,
44
+ which emits one pair per surface.
43
45
  """
44
46
  @abstractmethod
45
47
  def impedance(self, omega, conductor: ConductorProperties, **geometry) -> jnp.ndarray:
@@ -100,6 +100,8 @@ from pmrf.models.components.lines.microstrip import (
100
100
  KirschningJansenMicrostripDispersion as KirschningJansenMicrostripDispersion,
101
101
  MicrostripCrossSection as MicrostripCrossSection,
102
102
  WheelerCurrentDistribution as WheelerCurrentDistribution,
103
+ IncrementalInductanceCurrentDistribution as IncrementalInductanceCurrentDistribution,
104
+ TraceGroundCurrentDistribution as TraceGroundCurrentDistribution,
103
105
  )
104
106
 
105
107
  from pmrf.models.components.lines.stripline import (
@@ -11,6 +11,8 @@ from pmrf.models.components.lines.planar import (
11
11
  from pmrf.models.components.lines.microstrip import (
12
12
  MicrostripCrossSection as MicrostripCrossSection,
13
13
  WheelerCurrentDistribution as WheelerCurrentDistribution,
14
+ IncrementalInductanceCurrentDistribution as IncrementalInductanceCurrentDistribution,
15
+ TraceGroundCurrentDistribution as TraceGroundCurrentDistribution,
14
16
  )
15
17
  from pmrf.models.components.lines.stripline import (
16
18
  StriplineCrossSection as StriplineCrossSection,