Free space has no transverse index structure: a weak graded medium, waiting on a use case
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 5/100
Direzione di ricerca
The issue is parked until a maintainer names a use case, so there is no code to change yet. Read the SpatialMedium class in src/solprop/spatial.py, which takes one gas state per z, and the free-space model and flux pages under docs/guide/free-space/ to see the current uniform-index assumption. Done means either a SEP under docs/dev/seps/ that takes this over, following SEP 0, or the issue closed with the reason it is not wanted.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
What is missing
On the free-space routes the medium's refractive index is uniform across the beam. A SpatialMedium has one gas state at each z, so a transverse gas-density profile, a prescribed weak thermal lens or a weakly graded region cannot be modelled. This differs from variation along z, which is #206. It is not on the list of refusals, because no interface takes such an index. Other codes take this route, such as 3D-UPPE, which splits a transversely varying index between a homogeneous spectral operator and a physical-space residual.
Why it matters
Nothing needs this today. It would matter for a free-space problem whose transverse index structure sets the result, such as a gas jet's density profile. It is waiting on a use case: without one, nothing here should start.
Things to get right if it is taken up
These are derived here, not run in solprop, except for the small check below.
- Treating the index as a source is a different model. At one frequency let
B = sqrt(k_ref^2 - q^2)be the positive transverse operator andVthe index residual in the same basis. The weak-contrast forward-source model isde/dz = G ewithG = -i (B + B^-1 V / 2). Even integrated exactly, that is not propagation by-i sqrt(B^2 + V). For a commuting constant residualv, the two differ from the termv^2 / (8 B^3)on. A tighter tolerance cannot close that gap, so it has to be stated as a model error. - The conserved quantity is not the ordinary norm. For that model with
VHermitian,G^dagger B + B G = 0, soe^dagger B eis conserved ande^dagger eis not. So a stepper must not rescale the field to hold the ordinary norm. The check below gives the size. - A dense matrix across the pixels does not scale. The small coupled-mode machinery is not a route here: its storage would grow as the square of the number of transverse columns.
import numpy as np
from scipy.linalg import expm
B = np.diag([1.0, 2.0])
V = np.array([[0.0, 0.4], [0.4, 0.0]])
e0 = np.array([1.0, 1.0j])
e = expm(-1j * (B + 0.5 * np.linalg.inv(B) @ V) * 0.7) @ e0
print((e.conj() @ e).real / (e0.conj() @ e0).real - 1) # 0.06633116371809611
print((e.conj() @ B @ e).real / (e0.conj() @ B @ e0).real - 1) # -3.3306690738754696e-16
Context
- #206 (media varying along z on Cartesian and line grids), #193 (radial paths outside the adiabatic certificate) and #194 (high numerical aperture) touch the same model.
- The free-space model and its flux page. The conserved form above is proportional to the scalar axial flux at a fixed frequency (SEP 34).
- This is a new model, so it starts as a SEP (SEP 0). Keep weak scalar structure apart from full structured-vector propagation and crystal interfaces (SEP 8, #118).
To do
- Name a concrete use case. Without one, leave this open and parked.
- If there is one, write a SEP that compares evaluating the residual inside the existing Runge-Kutta stages, under one controller, with an operator-action method.
- Qualify on a constant residual with its expected model error, small problems diagonalised independently, contrast and grid refinement, radial against Cartesian for symmetric profiles, and a scalar flux balance.
Needs a decision: whether a use case justifies it, by a maintainer. As of 2026-11-01 none is named.
Done when
A SEP takes this over, or this closes with the reason it is not wanted.
Checked against commit 8a9f764. Read, not run, apart from the check above.
- Lingua principale
- Python
- Stelle
- 3
- Fork
- 3
- Merge medio
- 8h 37m
- PR unite (30g)
- 159
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di LupoLab/solprop
-
docs/dev/backends.md still lists the removed set_held_plane and held_observationForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertadocumentation priority: low
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
performance priority: low
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
I maintainer di solito rispondono entro 1 giorno
-
The TDSE steady-current certificate can refuse a resolved taper on a band far above its frequenciesApertaarea: tdse enhancement priority: low
Difficoltà 2/5 1-3 ore Idoneità per principianti 60/100
I maintainer di solito rispondono entro 1 giorno
-
The band-edge term that floors comparisons between windows is recorded only in an archived SEPApertaarea: boundaries documentation priority: low
Difficoltà 2/5 Mezza giornata Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
area: backends bug priority: low
Difficoltà 2/5 Mezza giornata Idoneità per principianti 66/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di LupoLab/solprop
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
huggingface/accelerate#4511 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
pylint-dev/pylint#11791 ·
I maintainer di solito rispondono entro 1 giorno
-
Rasterio granule reads never retry, so one 503 (Service Unavailable) fails the whole requestForse già presa @chuckwondo l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
developmentseed/titiler-cmr#305 ·
I maintainer di solito rispondono entro 1 giorno
-
community enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno