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.
- {paramrf-0.34.3 → paramrf-0.34.4}/PKG-INFO +1 -1
- paramrf-0.34.4/docs/research/conductor-loss-alternatives.md +380 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/paramrf.egg-info/PKG-INFO +1 -1
- {paramrf-0.34.3 → paramrf-0.34.4}/paramrf.egg-info/SOURCES.txt +1 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/materials/surface_impedance.py +4 -2
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/__init__.py +2 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/__init__.py +2 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/microstrip.py +384 -2
- {paramrf-0.34.3 → paramrf-0.34.4}/pyproject.toml +1 -1
- paramrf-0.34.4/tests/test_models/test_current_distribution.py +547 -0
- paramrf-0.34.3/tests/test_models/test_current_distribution.py +0 -139
- {paramrf-0.34.3 → paramrf-0.34.4}/.github/workflows/docs.yml +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/.github/workflows/draft-pdf.yml +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/.github/workflows/publish.yml +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/.github/workflows/tests.yml +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/.gitignore +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/AGENTS.md +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/CHANGELOG.md +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/CLAUDE.md +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/CONTEXT.md +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/CONTRIBUTING.md +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/LICENSE +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/NOTICE +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/README.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/assets/logo.png +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/Makefile +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/_static/custom.css +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/_templates/autosummary/class.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/_templates/autosummary/function.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/_templates/autosummary/module.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/adr/0001-line-modelling-architecture.md +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/agents/domain.md +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/agents/issue-tracker.md +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/agents/triage-labels.md +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/api/index.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/conf.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/core_concepts/core_primitives.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/core_concepts/index.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/core_concepts/jax_overview.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/core_concepts/optimization_and_inference.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/cascading_and_terminating.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/circuit_clc.png +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/circuit_models.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/custom_models.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/derivatives_and_sweeps.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/index.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/model_optimization.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/multiple_models_one_parameter_set.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/parameter_naming_and_model_manipulation.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/examples/shared_substrates.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/index.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/license.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/make.bat +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/research/holloway1994.pdf +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/research/microstrip-loss-conventions.md +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/research/precision-coax-microstrip-10-500mhz.md +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/skrf_comparison/index.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/skrf_comparison/overview.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/skrf_comparison/performance.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/tutorials/1_cable_fitting.ipynb +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/tutorials/2_chip_inductor_fitting.ipynb +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/tutorials/data/CBN-1.5FT-SMSM.s2p +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/tutorials/data/on-chip-inductor.s2p +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/docs/tutorials/index.rst +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/paper/paper.bib +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/paper/paper.md +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/paper/rlc.png +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/paramrf.egg-info/dependency_links.txt +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/paramrf.egg-info/requires.txt +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/paramrf.egg-info/top_level.txt +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/bijectors.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/constraints.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/covariance_kernels.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/discrepancy_models.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/distributions.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/evaluators.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/fitting/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/fitting/minimize.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/fitting/result.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/fitting/routers.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/fitting/sample.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/fitting/targets.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/frequency.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/infer/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/infer/base.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/infer/result.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/infer/sample.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/infer/solvers/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/infer/solvers/blackjax.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/infer/solvers/polychord.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/likelihoods.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/losses.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/materials/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/materials/conductor.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/materials/dielectric.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/materials/properties.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/materials/roughness.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/materials/substrate.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/math/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/math/aggregations.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/math/bessel.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/math/conversions.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/math/losses.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/math/misc.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/adapters/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/adapters/base.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/adapters/bridge.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/adapters/callable.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/adapters/delegated.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/adapters/static.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/adapters/wrapped.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/base.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/ideal.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/base.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/coaxial.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/empirical.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/ideal.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/nodal.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/nonuniform.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/planar.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lines/stripline.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/lumped.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/components/sections.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/cascade.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/circuit/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/circuit/base.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/circuit/circuit.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/circuit/solvers/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/circuit/solvers/nodal.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/circuit/solvers/scattering.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/interconnected/terminated.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/nodal.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/topological.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/composite/transformed.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/surrogates/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/surrogates/expansion.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/models/surrogates/rational.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/modules/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/modules/base.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/modules/wrapped.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/network_collection.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/noise_models.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/base.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/minimize.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/result.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/solvers/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/solvers/jaxopt.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/solvers/optimistix.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/optimize/solvers/scipy.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/parameters.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/problems.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/rf/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/rf/conversions.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/rf/mna.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/serialization.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/terms.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/types.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/array.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/debug.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/network.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/optix.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/random.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/rf.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/transforms.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/tree.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/utils/type.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/viz/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/pmrf/viz/plots.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/setup.cfg +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/__init__.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/_dependency_checks.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/data/10m_cable.s2p +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_autodiff.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_conversions.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_covariance_kernels.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_dc_limits.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_evaluators.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_fitting_minimize.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_fitting_routers.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_fitting_sample.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_fitting_targets.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_frequency.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_infer_base.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_infer_sample.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_map_priors.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_materials/test_conductor.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_materials/test_dielectric.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_materials/test_serialization.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_materials/test_substrate.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_materials/test_surface_impedance.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_math/test_bessel.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_model.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_adapters.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_circuit_nodal.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_circuit_scattering.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_interconnected.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_lines.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_lines_skrf_matrix.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_lumped.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_nodal.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_sections.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_transformed.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_models/test_transformers.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_module.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_naming.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_optimize_base.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_optimize_minimize.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_terms.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_transforms.py +0 -0
- {paramrf-0.34.3 → paramrf-0.34.4}/tests/test_utils/test_compress.py +0 -0
|
@@ -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.
|
|
@@ -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
|
|
42
|
-
weights
|
|
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,
|