Paket, tek simülasyonu tanımlayan JSON dosyasıdır: model ve parametre değerleri, çözücü ayarları, tam geometri, mesh, çalıştırma istatistikleri ve son işlem sonuçları. Simulation.to_bundle() (python/fairbeam/simulation.py) yazar; görüntüleyici (src/types.ts içindeki türlerle) ve VBA makro dışa aktarıcısı (src/export/cst.ts) okur.
Dosyalar public/projects/<slug>.json konumundadır. Her yazma işlemi public/projects/index.json dosyasını da yeniden oluşturur (bkz. Dizin dosyası).
Kurallar
| Büyüklük | Birim |
|---|---|
| Uzunluklar ve koordinatlar | units.length / units.length_m ile verilen çizim birimleri. Varsayılan mm (length_m = 0.001) |
| Frekanslar | Paketin her yerinde Hz. Dizin dosyası GHz kullanır |
Açılar (theta, phi) |
Derece. θ, +z'den; φ, +x'ten +y'ye doğru ölçülür |
| Yönlülük ve kazanç | dBi |
| Güç | W |
| Empedans ve direnç | Ω |
| Zaman | time_ns ns, dt_s s cinsinden |
İletkenlik (kappa) |
S/m |
- Koordinatlar
[x, y, z]üçlüleridir (Vec3). Eksen indisleri0 = x,1 = y,2 = zşeklindedir. - Sınırlayıcı kutular
[[xmin, ymin, zmin], [xmax, ymax, zmax]]biçimindedir. - JSON,
allow_nan=Falseile sıkıştırılmış yazılır;NaNveyaInfinityiçermez. - Dosyalar atomik yazılır: yazıcı
<slug>.json.tmpoluşturup yeniden adlandırır. - Yuvarlama: mesh çizgileri 4, geometri 6, S11 5, Zin 3, uzak alan açıları ve yönlülük 2 ondalık basamak.
Üst düzey
| Alan | Tür | Açıklama |
|---|---|---|
schema |
string | Daima "fairbeam.project/1". Okuyucular fairbeam.project/ önekini kontrol etmelidir |
generator |
object | Bkz. generator |
created |
string | %Y-%m-%dT%H:%M:%S%z biçiminde yerel saat; ör. 2026-09-24T22:24:15+0300 (saat farkında iki nokta yoktur) |
name |
string | Görünen ad: model adı ve değiştirilen değerler; ör. Sierpinski gasket monopole · iterations=3. fairbeam geometry, (geometry only) ekler |
model |
object | Bkz. model |
units |
object | Bkz. units |
solver |
object | Bkz. solver |
parts |
Part[] | Fiziksel yapı. Bkz. parts |
ports |
Port[] | Bkz. ports |
lumped_elements |
LumpedElement[]? | Port olmayan toplu devre elemanları (ör. yalıtım direnci). Yoksa alan bulunmaz. Bkz. lumped_elements |
half_space |
object | null | Sınırdan gelen sonsuz PEC toprak. Bkz. Yarı uzay ve ayna düzlemleri |
mesh |
object | Bkz. mesh |
domain |
{min: Vec3, max: Vec3} |
Simülasyon bölgesi: her eksendeki ilk ve son mesh çizgisi |
nf2ff_box |
{min, max, faces?} | null |
NF2FF kayıt yüzeyleri olan DumpBox yardımcı şekillerinin sınırlayıcı kutusu (Fairbeam'in kendi alan dökümleri, fairbeam_J_* yüzey akımları ve fairbeam_F_* alan düzlemleri dışarıda bırakılır). Yoksa null. Model add_nf2ff_box(directions=…) ile yüz atlamışsa (ör. besleme dalga kılavuzunun geçtiği yüz) faces bulunur (6 boolean: x-, x+, y-, y+, z-, z+); false = kaydedilmedi |
nf2ff_center |
Vec3 | null | NF2FF dönüşümünün faz merkezi. add_nf2ff_box(center=…) değeri; yoksa focus merkezi, o da yoksa orijin. NF2FF kutusu yoksa null |
focus |
{min, max} | null |
Görüntüleyicinin varsayılan kadraj bölgesi (Simulation.set_focus) |
run |
object | null | Çözücü istatistikleri. Yalnızca geometri paketlerinde null. Bkz. run |
results |
object | null | Son işlem sonuçları. Yalnızca geometri paketlerinde null. Bkz. results |
fields |
object? | İsteğe bağlı yüzey akımı haritaları (fairbeam run --fields). Bkz. fields |
field_planes |
FieldPlaneMap[]? | Kesit düzlemlerinde isteğe bağlı E/H haritaları (fairbeam run --field-plane, tasarımın monitors.field_planes alanı). Bkz. field_planes |
generator
| Alan | Tür | Açıklama |
|---|---|---|
name |
string | "fairbeam" |
version |
string | Fairbeam paket sürümü |
openems |
string | null | openEMS.__version__ |
csxcad |
string | null | Modül sunuyorsa CSXCAD.__version__ |
python |
string | Python sürümü |
model
Model dosyasının MODEL sözlüğü (id, name, description, isteğe bağlı reference) nesneye yayılır; ayrıca:
| Alan | Tür | Açıklama |
|---|---|---|
params |
Param[] | Tanım sırasıyla her PARAMS öğesi için bir kayıt |
Her Param, dataclasses.asdict(Param) ve çözülmüş değerden oluşur:
| Alan | Tür | Açıklama |
|---|---|---|
key |
string | --set ile kullanılan parametre anahtarı |
default |
number | string | Varsayılan değer |
value |
number | string | Bu çalıştırmada kullanılan değer |
label |
string | Okunabilir etiket |
unit |
string | Görüntüleme birimi; ör. "mm", "GHz" veya "". Paketin değil modelin kendi birimidir |
description |
string | Ayrıntılı açıklama (boş olabilir) |
minimum, maximum |
number | null | İzin verilen aralık |
units
| Alan | Tür | Açıklama |
|---|---|---|
length |
string | Çizim birimi 1e-3 m ise "mm"; değilse "<unit> m" (ör. "0.0001 m") |
length_m |
number | Metre cinsinden çizim birimi |
frequency |
string | Daima "Hz" |
solver
| Alan | Tür | Açıklama |
|---|---|---|
engine |
string | "openEMS" |
method |
string | "FDTD (Yee, staircase)" |
excitation |
object | Aşağıya bakın |
boundaries |
object | Anahtarlar x-, x+, y-, y+, z-, z+. Değerler openEMS sınır adlarıdır: "MUR", "PEC", "PMC", "PML_8", … |
end_criteria_db |
number | dB cinsinden enerji durdurma ölçütü; ör. -40 |
max_timesteps |
number | Zaman adımı sınırı |
excitation iki biçimden biridir:
- Varsayılan
{"type": "gaussian-derivative", "f_min", "f_max", "expression", "dc_free": true}.expression, openEMS özel uyarımına verilent(saniye) değişkenli fparser formülüdür. Darbenin tepe değeri birimdir;f_maxdeğerinde -20 dB'dir. - openEMS Gauss
{"type": "gaussian", "f0", "fc", "f_min", "f_max", "dc_free": false};f0 = (f_min + f_max) / 2,fc = (f_max - f_min) / 2.
parts
Şekilleriyle birlikte fiziksel CSXCAD özellikleri, ilk görünme sırasındadır. Yardımcı özellikler (DumpBox, ProbeBox, Excitation) ve portların oluşturduğu LumpedElement özellikleri dışarıda bırakılır. Portlar ports içinde listelenir.
| Alan | Tür | Açıklama |
|---|---|---|
name |
string | CSXCAD özellik adı (benzersiz) |
label |
string? | sim.metal(..., label=) veya sim.dielectric(..., label=) ile verilen etiket |
type |
string | CSXCAD özellik türü: "Metal", "Material", "ConductingSheet", … |
color |
string? | Modelin kaydettiği isteğe bağlı renk |
material |
object? | Yalnızca type == "Material" için bulunur. Aşağıya bakın |
conductor |
object? | Sonlu iletkenlikli metal (tasarım malzemesinin conductivity alanı, sim.metal(..., conductivity=)): S/m cinsinden conductivity; "ConductingSheet" (openEMS AddConductingSheet) için mm cinsinden modellenmiş levha kalınlığı thickness. Hacimde null; hacim, aynı iletkenlikte "Material" olur ve hâlâ metaldir. Mükemmel iletkende bulunmaz |
void |
boolean? | Vakum oyucu (Boolean Çıkar boşluğu) için true: içindeki düşük öncelikli malzemeyi siler. Görüntüleyici bunu hayalet görünümde çizmeli veya gizlemelidir; diğer durumlarda bulunmaz. Eski okuyucular sıradan eps_r 1 katısı olarak gösterir |
primitives |
Primitive[] | Geometri; aşağıya bakın |
bbox |
[Vec3, Vec3] | Şekillerin sınırlayıcı kutularının birleşimi |
material:
| Alan | Tür | Açıklama |
|---|---|---|
eps_r |
number | Bağıl dielektrik sabiti (anizotropikse x bileşeni) |
mu_r |
number | Bağıl manyetik geçirgenlik |
kappa |
number | S/m cinsinden elektriksel iletkenlik. openEMS dielektrik kaybını sabit iletkenlikle modeller |
tan_d |
number | null | Modelin istediği kayıp tanjantı (özellik doğrudan CSXCAD ile oluşturulduysa null) |
tan_d_freq |
number | null | kappa değerinin tan_d değerini tam verdiği frekans, Hz (kappa = tan_d · 2π f · ε0 · eps_r). Varsayılan bant merkezi |
isotropic |
boolean | Epsilon veya kappa eksenler arasında farklıysa false |
dispersion |
object? | İsteğe bağlı. Frekansa bağlı dielektrik (Simulation.dispersive, fairbeam.dispersion). CSXCAD özelliği bu durumda LorentzMaterial olur; görüntüleyiciler/dışa aktarıcılar dielektrik olarak işlesin diye type: "Material" ile aktarılır. eps_r, mu_r, tan_d, bant merkezi tan_d_freq değerleridir. kappa, oradaki toplam kaybı veren iletkenliktir (kappa = tan_d · 2π f · ε0 · eps_r, sabit malzeme gibi); kaybı iletkenlik olarak okuyan tüketici bant merkezi kaybını korur. Statik iletkenlik dispersion.kappa içindedir. Sabit malzemelerde bulunmaz; mevcut paketler değişmez |
material.dispersion, simüle edilen modeldir; frekanslar Hz, zamanlar s cinsindendir ve openEMS düzenini (e^{+jωt}) kullanır:
| Alan | Tür | Açıklama |
|---|---|---|
model |
string | "lorentz": ε∞·[1 − Σ ωp²/(ω² − ωL² − jω/τ)]; Drude için ωL = 0. openEMS 0.37.0rc3 DebyeMaterial, 3B'de ΣΔε/ε∞ ≈ 0,3 (1B'de 0,6) üstünde ıraksar; Debye kutupları ve laminatlar uydurulmuş Lorentz kutuplarıyla simüle edilir, paket bunları kaydeder. "debye" (ε∞ + Σ Δε/(1 + jωτ)) yalnızca source içinde veya modelin doğrudan CSXCAD ile oluşturduğu DebyeMaterial için görünür |
eps_inf |
number | ε∞ |
kappa |
number | Statik iletkenlik, S/m (−jκ/(ωε0) ekler) |
eps_poles |
object[] | {"type": "lorentz", "f_plasma", "f_pole", "tau"} (source içinde ayrıca {"type": "debye", "delta", "tau"}) |
mu_inf, mu_poles |
number, object[] | Manyetik Lorentz/Drude dispersiyonu. Yalnızca μ∞ ≠ 1 veya kutuplar varsa bulunur |
source |
object? | Kutupların uydurulduğu model ve uydurma bilgisi. Djordjevic-Sarkar laminatı: {"model": "djordjevic-sarkar", eps_inf, delta, m1, m2, fit: {f_min, f_max, span}, report: {...}}. Debye kutupları: istenen Dispersion ("model": "debye", kutupları), fit ve report ile. Rapor banttaki uydurma hatalarını ve kutupları sınırlayan dt zaman adımını tutar |
Şekiller
Her şekilde şu alanlar vardır:
| Alan | Tür | Açıklama |
|---|---|---|
kind |
string | "box", "polygon", "linpoly", "cylinder", "cylindricalshell", "sphere", "rotpoly", "curve", "wire", "polyhedron", "transformed" veya "bbox" |
priority |
number | CSXCAD önceliği. Şekiller çakıştığında yüksek öncelik geçerlidir |
bbox |
[Vec3, Vec3] | Sınırlayıcı kutu |
exact |
boolean | Şekil tam yeniden üretiliyorsa true, sınırlayıcı kutu yaklaşımında false |
Diğer alanlar kind değerine bağlıdır:
box: karşılıklı köşelerstart,stop(Vec3). Bir eksende uzanımı sıfır kutu levhadır; örneğin yama veya toprak düzlemi.polygon: düzlemsel çokgen (sıfır kalınlık).normal, normal eksen indisin(0, 1 veya 2).elevation, düzleminneksenindeki koordinatı.points, düzlemde[a, b]çiftleri listesi.
linpoly:polygonalanları velength. Çokgen, normal boyuncaelevationdeğerindenelevation + lengthdeğerine uzatılır (lengthnegatif olabilir).cylinder:start,stop(Vec3), eksen uçları;radius, yarıçap.cylindricalshell: boru (CSXCADCylindricalShell).start,stop,cylinderile aynıdır;radiusduvar ortasının yarıçapı,shell_widthduvar kalınlığıdır. Boruradius - shell_width / 2ileradius + shell_width / 2arasındadır.sphere:center(Vec3) veradius(CSXCADSphere).rotpoly: dönel katı (tam tur döndürülen CSXCADRotPoly; tasarımcının konisi ve torusu).points,origin(Vec3) üzerindenaxisekseninde (0, 1 veya 2) geçen doğru çevresinde döndürülen kapalı konturun[radial, axial]çiftleridir. Noktanın doğruya uzaklığı veoriginçıkarılmış eksen koordinatı kontur içindeyse nokta içeridedir. Radyal değerler negatif olamaz. Dışa aktarıcıbboxdeğerini kendisi hesaplar (CSXCAD dönmeyi yok sayar), eksenden geçen düzlemde tam turlar yazar; ek yerel afin dönüşümtransformedsarmalayıcısıyla gösterilir.curve: çoklu çizgi boyunca ince tel (CSXCADCurve).points, Vec3 listesidir. Yarıçapı yoktur: openEMS en yakın mesh kenarlarına yerleştirir, etkin yarıçapı hücrenin bir kesridir. Görüntüleyiciler nominal yarıçaplı boru olarak çizer.wire:radiusiçeren aynı yapı (CSXCADWire), hacim olarak rasterleştirilir.polyhedron: kapalı katı (CSXCADPolyhedron).vertices, Vec3 listesi;faces, köşe indisi listeleri listesidir (üçgenler; CSXCAD yalnızca üçgen yüzleri doğru rasterleştirir). Fairbeam modellerinde yüzler dışa yöneliktir; okuyucular buna güvenmemelidir.transformed: desteklenen şeklin tam afin örneği.primitive, tam yerel şekli;matrix, sütun vektörlerini yerelden dünya koordinatlarına eşleyen satır öncelikli 4×4 homojen matrisi;bbox, dünya uzayında eksenlere paralel sınırı içerir. Eski okuyucuların yerel koordinatları dünya geometrisi sanmaması için ayrı türdür. Sarmalayıcıyı desteklemeyen okuyucularbboxdeğerini açıkça yaklaşık alternatif olarak kullanmalıdır.bbox: Fairbeam'in tam aktaramadığı CSXCAD şekil türleri için alternatif.source_kind, CSXCAD tür adını tutar; şekli yalnızcabboxtanımlar. Yerel tür biliniyor ancak tam yerel geometri bilinmiyorsa sınır dünya koordinatlarına dönüştürülür,transformed: trueayarlanır.
Sonradan geriye uyumlu eklenenler: curve, wire, polyhedron. Eski okuyucular yeni türleri bilinmeyen sayar ve bbox kullanmalıdır. Çizim, çokyüzlüleri dış sınır ve belirgin kenarlarla, telleri çoklu çizgilerle gösterir.
Tasarımcının tam, keyfî açılı dönüşümleriyle geriye uyumlu eklenen: transformed. Eski okuyucular sarmalayıcıyı bilinmeyen sayar ve dünya uzayı bbox değerini kullanmalıdır. Yerel simülasyon CSXCAD şeklini korur, afin matrisini uygular. Sıfır kalınlıklı metal levhalar çözücü koordinat düzlemlerine paralel kalmalıdır; openEMS teğetsel kaybı yerel CSXCAD sınırlarından seçtiği için kayıplı levhaların yerel normali de korunmalıdır. VBA makro dışa aktarıcısı dönüştürülmüş geometriyi uyarıyla atlar.
Tasarımcının silindir kabuk ve küre şekilleriyle geriye uyumlu eklenenler: cylindricalshell, sphere. Görüntüleyici, çizim ve VBA makro dışa aktarıcısı (iç yarıçaplı Cylinder, Sphere) tam yeniden oluşturur. Üretim çıktısı, alttaştan dik geçen boruyu dış çapında metalize via olarak işler; küreleri uyarıyla atlar.
Tasarımcının koni ve toruslarıyla geriye uyumlu eklenen: rotpoly. Görüntüleyici konturu tam döndürür (torna); çizim eksen yönünden daire, yandan siluet gösterir. VBA makro dışa aktarıcısı uygun konturda Cone (eşit yarıçaplarda Cylinder) veya Torus yazar; diğerlerini uyarıyla atlar. Üretim çıktısı uyarıyla atlar.
Düzlem içi koordinat düzeni (polygon ve linpoly). CSXCAD düzenini izler. Normal eksen n için:
- Her noktanın ilk koordinatı
(n + 1) % 3eksenindedir. - İkinci koordinatı
(n + 2) % 3eksenindedir.
| normal | points[i][0] |
points[i][1] |
|---|---|---|
| 0 (x) | y | z |
| 1 (y) | z | x |
| 2 (z) | x | y |
y normaline dikkat edin: noktalar (x, z) değil (z, x) biçimindedir. [a, b] noktasının 3B konumu:
p[n] = elevation; p[(n+1)%3] = a; p[(n+2)%3] = bports
| Alan | Tür | Açıklama |
|---|---|---|
number |
number | Port numarası. results.ports anahtarı olarak da kullanılır (dize) |
type |
string | "lumped" (openEMS LumpedPort) veya "waveguide" (openEMS RectWGPort) |
R |
number | Port (referans) direnci, Ω. Dalga kılavuzu portlarında bant merkezindeki TE dalga empedansı (aşağıya bakın) |
direction |
string | "x", "y" veya "z": besleme akımı ve gerilimin yönü (dalga kılavuzunda yapıya doğru yayılma yönü) |
start, stop |
Vec3 | Port kutusu köşeleri. Dalga kılavuzunda kesitin karşılıklı köşeleri; direction boyunca uyarım düzlemi start, mod probları stop konumunda |
mode, a, b, f_cutoff |
string, number, number, number | Yalnızca dalga kılavuzu portu: mod ("TE10"), çizim biriminde (n+1)%3 eksenindeki geniş duvar a, (n+2)%3 eksenindeki dar duvar b ve Hz cinsinden mod kesimi |
eps_r, mu_r |
number? | Yalnızca dolu kılavuz referanslı portlar (Python modelinde waveguide_port(..., eps_r=, mu_r=), aşağıya bakın); hava referansında yok |
excite |
boolean | Model tanımına göre port uyarılıyor mu? Çok portlu çalıştırmalar modeli uyarılan port başına yeniden kurar ve bunu değiştirir (Çok portlu çalıştırmalar); paket ilk çalıştırmanın kurulumunu kaydeder |
group |
object, isteğe bağlı | Yalnızca ayrık portlar: connection ("parallel" veya "series"), members (1–15 ek {start, stop, direction, polarity?} besleme), isteğe bağlı negatif olmayan tam sayı priority (varsayılan 5). Üye polaritesi +1 (varsayılan) veya −1; ana port ilk pozitif beslemedir |
Gruplu portlar. Bu ek alan, N fiziksel dirençli beslemeye sahip tek mantıksal portu korur. R ve sonuç anahtarı mantıksal moda aittir. İşaretli üye sinyalleri sᵢUᵢ, sᵢIᵢ için Paralel, N·R üye direnciyle U = ΣsᵢUᵢ/N ve I = ΣsᵢIᵢ; Seri, R/N üye direnciyle U = ΣsᵢUᵢ ve I = ΣsᵢIᵢ/N bildirir. Kaynaklar seçilen portun tüm üyelerini işaret ve boşluk uzunluğu normalizasyonuyla uyarır. Mevcut gelen/yansıyan dalga ve S-matrisi alanları bu modal sinyalleri kullanır. Dik modlar modal güce dahil değildir; üyeler dengesizse fiziksel güç toplamı farklı olabilir. group yoksa olağan port davranışı korunur. Hatalı gruplar yeniden açılışta üye kaybetmek yerine reddedilir.
Dalga kılavuzu portları. Port, analitik alan profiliyle bir TE_mn modunu uyarır; prob düzleminde E ve H'yi mod işlevlerine izdüşürerek mod gerilimi ve akımını ölçer. Referans, frekansa bağlı TE dalga empedansıdır: Z_TE = η0 k / β = η0 / √(1 − (f_c/f)²). Böylece u_inc, u_ref prob sinyallerini ileri/geri dalgalara ayırır; S11 = u_ref / u_inc yansıyan/gelen mod genliği oranıdır. results.ports[k].z_ref, bant merkezindeki Z_TE; z_ref_f, frekans başına değeridir. Zaman signals alanı yoktur (skaler referans gerektirir). Geri dalganın soğurulması için kılavuzu portun arkasında PML ile sonlandırın (sınırdan geçirin, auto_mesh(pad=[…, 0, …])). python/examples/waveguide_thru.py uygulamayı kontrol eder (docs/VALIDATION.md bölüm 13). Gerçek, dispersif olmayan ε_r, μ_r ile homojen dolu kılavuzun Python modeli bunları Simulation.waveguide_port(..., eps_r=, mu_r=) ile verebilir. Port β = √(k0² ε_r μ_r − k_c²), Z_TE = η0 μ_r k0 / β kullanır; R, f_cutoff, z_ref, z_ref_f dolu kılavuza ait olur; port kaydı eps_r, mu_r içerir (hava referansında ikisi de yoktur). Tasarımlar daima hava referansı kullanır.
Dalga kılavuzu port gücü. openEMS mod eşleme probları, kılavuz duvarlarının yanındaki mesh hücresi boyutuna bağlı olarak mod gücünü düşük okur (boyutta birinci derece: horn WR-90 beslemesinde 20 hücre/λ için %4,3; 30 için %8,6; tüm frekanslarda aynı). Şablon tam düğüm alanlarına göre normalize edilir ancak PEC duvar düğümü hava alanının yarısını taşır. Simulation.evaluate, eksikliği mesh çizgilerinden hesaplar (fairbeam.wgport, Yee ızgarasındaki ideal moda uygulanan prob izdüşümü); port U ve I değerlerini katsayının kareköküyle çarpar. Böylece pacc_w, gelen/yansıyan güç ve verimlilik mod gücüne aittir. S11, Z_in ve S-parametreleri (oranlar) değişmez; ancak çok portlu çalıştırmada farklı duvar hücrelerine sahip portların genlikleri kendi katsayılarını taşır. Katsayı results.ports[k].probe_power_factor içinde saklanır; sim.wg_probe_correction = False kapatır. TE10 için kılavuzdan geçen tam akıyla doğrulanmıştır; prob kutusu kapalı kılavuz tanımlamıyorsa (katsayı 0,9–1,3 dışında) uygulanmaz.
Ortak duvarlı kılavuzlar. İki kılavuz yalnızca sıfır kalınlıklı PEC levhayla ayrılıyorsa (ör. dal kılavuzlu kuplör) levhadaki prob düğümleri iki kılavuzun alanlarını enterpole eder; komşu kılavuz portun U ve I değerlerine sızar. fairbeam.wgport.inset_mode_probes(port, cells=1) (isteğe bağlı, Kartezyen mesh'te dikdörtgen TE10 portlar), yalnızca E/H prob kutularını iki geniş duvardan cells mesh aralığı içeri taşır. Uyarım, mod orijini, port köşeleri ve ölçüm düzlemi yerinde kalır; yukarıdaki güç katsayısı içeri alınmış problar için hesaplanır (TE10, b boyunca düzgündür). Mesh son hâlini aldıktan sonra S-matrisinin her portunda çağırın. Kullanılmazsa problar önceki gibi tüm kılavuzu kapsar.
lumped_elements
Simulation.lumped_element(...) ve kısayolları lumped_resistor(...), lumped_inductor(...), lumped_capacitor(...) yazar (Tasarım dirençleri/RLC yükleri aynı çağrıyı kullanır). Eleman, start..stop kutusuna yayılmış, akımı direction boyunca olan openEMS LumpedElement öğesidir. Katı değildir (parts dışında tutulur), port da değildir.
| Alan | Tür | Açıklama |
|---|---|---|
name |
string | CSXCAD özellik adı |
label |
string | Görünen etiket |
type |
string | "resistor" (yalnızca R) veya "rlc" (tek L/C dahil L veya C içeren her eleman) |
R, L, C |
number? | Ω cinsinden direnç, H cinsinden endüktans, F cinsinden kapasitans; yalnızca verilen kollar bulunur |
topology |
string | "parallel" (yerel LEtype 0) veya "series" (LEtype 1); lumped_resistor, lumped_inductor, lumped_capacitor, "parallel" yazar |
direction |
string | "x", "y" veya "z" |
start, stop |
Vec3 | Kutu köşeleri (genellikle boşluğu köprüleyen levha) |
Birleşik yerel seri eleman ideal devre kontrolünü geçmemiştir (rf-rlc-workflows (yeni sekmede açılır)). Alternatif olarak ayrı lumped_inductor ve lumped_capacitor geometrik olarak seri bağlanarak seri LC oluşturulabilir.
Yarı uzay ve ayna düzlemleri
half_space. z- sınırı PEC olduğunda paket şunu içerir:
{"axis": "z", "side": "min", "position": <first z mesh line>, "kind": "PEC"}Fiziksel problem, sonsuz PEC toprak düzlemi üzerindeki z ≥ position yarı uzayıdır (görüntü teorisi). Toprak, parts içinde katı değildir. Görüntüleyici toprak düzlemi olarak çizer. Toprağın altındaki yönler fiziksel olarak bulunmadığından uzak alan yüzeyi ve kutupsal kesitler yalnızca θ ≤ 90° gösterir. Diğer sınır düzenlerinde half_space, null olur. Burada şu anda yalnızca z- PEC durumu kodlanır.
mirror_planes (uzak alan kaydı başına), herhangi bir yüzdeki PEC veya PMC sınırlarının sayısıdır. openEMS bu sınırlarda NF2FF kayıt yüzeyini aynalar ve görüntünün de integralini alır. Ham Prad tüm görüntü uzayını kapsar; bundan türetilen Dmax aynı katsayı kadar düşük olur. Fairbeam ikisini 2^mirror_planes ile düzeltir:
prad_w = Prad_openEMS / 2^m
Dmax = Dmax_openEMS · 2^mBöylece yönlülük, verimlilik ve kazanç fiziksel yarı uzaya (m = 2 ise çeyrek uzaya vb.) aittir.
mesh
| Alan | Tür | Açıklama |
|---|---|---|
x, y, z |
number[] | Çizim biriminde sıralı mesh çizgisi koordinatları |
cells |
[nx, ny, nz] | Eksen başına hücreler (çizgi sayısı − 1) |
total_cells |
number | nx · ny · nz |
min_cell, max_cell |
number | Tüm eksenlerde en küçük/en büyük hücre genişliği. En küçük hücre FDTD zaman adımını belirler |
auto |
object? | Model Simulation.auto_mesh() kullandıysa bulunur: ayarlar ve rapor (hücreler, min/max hücre, komşu oranı, zaman adımı/bellek tahminleri, uyarılar). Otomatik mesh oluşturma |
run
openEMS'in yakalanan stdout/stderr çıktısından ayrıştırılan istatistikler. Model simüle edilmediyse null. Günlükte karşılığı bulunmayan ? işaretli alanlar bulunmaz.
| Alan | Tür | Açıklama |
|---|---|---|
grid |
Vec3? | openEMS'in bildirdiği FDTD ızgara boyutu |
timesteps |
number? | Çalıştırılan zaman adımı sayısı |
solver_time_s |
number? | openEMS'in bildirdiği çözücü süresi, s |
timestep_s |
number? | openEMS'in bildirdiği FDTD zaman adımı, s |
excitation_timesteps |
number? | Özel (Gauss türevi) uyarım darbesinin sürdüğü zaman adımları: darbe bitmeden çalıştırma yakınsayamaz |
wall_time_s |
number | Kurulum dahil Simulation.run duvar saati süresi |
speed_mcells_s |
number? | MCells/s cinsinden işlem hızı |
energy_trace |
{timestep, db}[] |
Çalıştırmada yazdırılan, maksimumuna göre alan enerjisi; dB (≤ 0) |
final_energy_db |
number? | energy_trace son değeri, örnek son enerjiyi temsil ediyorsa (son zaman adımında kaydedilmiş, ölçütte/altında veya çalıştırma zaman adımı sınırına ulaşmış) |
final_energy_bound_db |
number? | Son enerji satırı (varsa) durmadan önceye ait olan yakınsamış çalıştırmada final_energy_db yerine bulunur: openEMS yaklaşık 4 s duvar saati aralığında (GPU birkaç bin zaman adımında) yazar; max_timesteps öncesinde durma, enerjinin ölçüte ulaşması nedeniyledir. Son enerji en fazla bu değer, yani ölçüttür. Bu durum desteklenmeden önceki paketler eski örneği final_energy_db olarak taşıyabilir; görüntüleyici bunu tanır (energy_trace, timesteps öncesinde ve ölçüt üstünde biter) |
hit_timestep_limit |
boolean | timesteps ≥ max_timesteps (veya openEMS sınır uyarısı yazdırdı; bunu yalnızca kendi Gauss uyarımında yapar) |
converged |
boolean | timesteps < max_timesteps: çalıştırma yalnızca enerji ölçütüyle erken durabilir |
threads |
number | İstenen iş parçacığı sayısı (0 = tüm çekirdekler) |
engine, engine_requested |
"cpu" | "gpu" |
Çalışan ve istenen motor (--engine). openEMS derlemesinde GPU yoksa farklıdır. CPU kullanan eski paketlerde bulunmaz |
engine_warning |
string? | GPU istendiği hâlde CPU kullanıldıysa bulunur |
exact_endcriteria |
boolean? | Durdurma ölçütü yaklaşık 4 s duvar saati (--no-exact) yerine her Nyquist döneminde (varsayılan) denetlendi mi? |
host |
{os, machine, cpu} |
Platform bilgisi. cpu, null olabilir |
log_tail |
string[] | openEMS günlüğünün son 12 satırı |
port_runs |
PortRun[]? | Yalnızca çok portlu çalıştırmalar: uyarılan port başına {port, timesteps, solver_time_s, wall_time_s, final_energy_db, converged, engine} (ayarlanmışsa final_energy_bound_db de). Diğer run alanları ilk çalıştırmayı tanımlar; converged yalnızca hepsi yakınsamışsa true olur |
wall_time_total_s |
number? | Çok portlu simülasyonun tüm çalıştırmalarının duvar saati süresi, s |
efficiency_time_s |
number? | Bant boyunca verimlilik son işlem süresi (ilk çalıştırma), s. Yalnızca results.efficiency ile bulunur |
results
Model simüle edilmediyse null.
| Alan | Tür | Açıklama |
|---|---|---|
frequency |
number[] | f_min–f_max arasında doğrusal --points frekans (varsayılan 801), Hz |
ports |
object | Dize port numarasıyla ("1") anahtarlanır. Aşağıya bakın |
bands |
Band[] | Uyarılan portun uyumlu bantları |
farfield |
FarField[] | Örüntü frekansı başına kayıt |
signals |
object | Uyarılan portun zaman sinyalleri veya {} |
sparams |
object? | N portlu S-matrisi. Bkz. sparams |
element_patterns |
object? | Çok portlu antenlerin karmaşık gömülü eleman örüntüleri. Bkz. element_patterns |
efficiency |
EfficiencySweep[]? | Bant boyunca ışıma verimliliği (fairbeam run --efficiency, tasarımın monitors.efficiency alanı). Bkz. efficiency |
Hiçbir port uyarılmıyorsa bands ve farfield boş, signals ise {} olur. Çok portlu çalıştırmalarda ports, bands ve signals ilk uyarılan porta aittir. ports yalnızca uyarılan portları içerir; her biri kendi uyarıldığı çalıştırmadaki yansımasını taşır.
ports[k]. Tüm diziler frequency ile hizalıdır.
| Alan | Tür | Açıklama |
|---|---|---|
s11_re, s11_im |
number[] | Yansıma katsayısı u_ref / u_inc (karmaşık, doğrusal) |
zin_re, zin_im |
number[] | Giriş empedansı u_tot / i_tot, Ω |
z_ref |
number | Referans empedansı, Ω (dalga kılavuzunda bant merkezi Z_TE) |
z_ref_f |
number[]? | Yalnızca dalga kılavuzu: S11'in referans aldığı frekansa bağlı empedans, Ω |
probe_power_factor |
number? | Yalnızca dalga kılavuzu: portun gelen, yansıyan ve kabul edilen gücüne uygulanan katsayı (Dalga kılavuzu port gücü); uygulanmadıysa bulunmaz |
Band. Bant, 20·log10|S11| < -10 dB olan ardışık frekans örnekleridir.
| Alan | Tür | Açıklama |
|---|---|---|
f_lo, f_hi |
number | Eşik altındaki ilk/son örnek, Hz |
f_center |
number | Bant içindeki minimum S11 frekansı, Hz. Uygulama "En iyi uyum" olarak gösterir; bant "Merkez" değeri (f_lo + f_hi) / 2'dir (Sonuçlar nasıl hesaplanır) |
s11_min_db |
number | Minimum S11, dB |
fractional_bw |
number | (f_hi − f_lo) / f_center |
edge_lo, edge_hi |
boolean | Bant simülasyon aralığının başına/sonuna değer; gerçek sınırı aralık dışındadır |
JSON bant alanları özgün anlamlarını korur. CSV dışa aktarımında f_center_GHz sınırların ortasıdır, f_best_GHz JSON'daki f_center değeridir ve fractional_bw ortaya bölünür; edge_lo ve edge_hi açık uç bayraklarını korur.
FarField. Örüntü frekansları, bantların f_center değerleri, yani her banttaki minimum S11 frekanslarıdır (en fazla 4). Bant yoksa minimum S11 frekansı kullanılır. Model kendisi seçebilir (sim.pattern_freqs; ör. geniş bantlı horn için bant kenarları ve merkezi). --pattern hepsinin yerine geçer.
| Alan | Tür | Açıklama |
|---|---|---|
f |
number | Frekans, Hz |
theta |
number[] | Derece cinsinden θ: 0–180, 3° adım (61 değer) |
phi |
number[] | Derece cinsinden φ: 0–355, 5° adım (72 değer; 360 tekrarlanmaz) |
directivity_dbi |
number[][] | dBi cinsinden yönlülük, [theta][phi] indisli (len(theta) × len(phi)). Alt sınır dmax_dbi − 60 |
dmax_dbi |
number | Maksimum yönlülük, dBi, ayna düzeltmeli |
dmax_pattern_dbi |
number? | Yalnızca örüntüden maksimum yönlülük: θ/φ ızgarasında 4π·U_max / ∮U dΩ, ayna düzeltmeli. openEMS dmax_dbi, NF2FF kutusundan geçen güce böler. İkisi yaklaşık 0,1 dB içinde uyuşmalıdır; daha büyük fark sınır yansımalarını (MUR çok yakın) veya kaba NF2FF yüzeyini düşündürür. Eski paketlerde yok |
prad_w |
number | Işınan güç, W, ayna düzeltmeli |
pacc_w |
number | Portta kabul edilen güç: f frekansında enterpole edilmiş ½·Re(u·i*), W |
rad_efficiency |
number | null | prad_w / pacc_w. pacc_w ≤ 0 ise null. Pasif antende 1 üstü fiziksel değildir (iki güç bağımsız sayısal ölçümlerdir); değer korunur ve qa_warnings içinde işaretlenir. Kayıpsız modelde (aşağıya bakın), prad_w / pacc_w, 1'in %5 yakınındayken 1 |
rad_efficiency_raw |
number | null? | Yalnızca kayıpsız modeller: simülasyonla elde edilen prad_w / pacc_w, iki sayısal ölçümün güç dengesi |
qa_warnings |
string[]? | Kayıt için dışa aktarıcı kalite kontrol notları; ör. %100 üstü ışıma verimliliği (kazanç Dmax'ı aynı katsayıyla aşar) veya kayıpsız modelin güç dengesi |
gain_dbi |
number? | 10·log10(efficiency · Dmax). Yalnızca verimlilik > 0 ise |
realized_gain_dbi |
number? | 10·log10(efficiency · Dmax · (1 − |S11|²)). Yalnızca verimlilik > 0 ise |
mirror_planes |
number | Düzeltmede kullanılan PEC/PMC sınır sayısı. Yukarıya bakın |
port |
number? | Bu kayıt için uyarılan port (çok port desteğinden sonraki paketler). Çok portlu çalıştırmalarda her uyarılan port/örüntü frekansı için kayıt, hepsi aynı frekanslarda |
cp |
object? | sim.cp_outputs = True modellerinde dairesel polarizasyon. Aşağıya bakın |
cp. IEEE düzeni ve openEMS'in e^{jωt} fazörleriyle, uzak alanın sağ/sol dairesel bileşenleri E_R = (E_θ + jE_φ)/√2 ve E_L = (E_θ − jE_φ)/√2'dir (+z yönlü dalgada RHCP, x'ten y'ye döner). Izgaralar directivity_dbi gibi [theta][phi] indislenir.
| Alan | Tür | Açıklama |
|---|---|---|
rhcp_dbi, lhcp_dbi |
number[][] | dBi cinsinden kısmi yönlülükler D·|E_R|²/|E|² ve D·|E_L|²/|E|² (doğrusal toplamları directivity_dbi); alt sınır dmax_dbi − 60 |
axial_ratio_db |
number[][] | Eksenel oran (|E_R| + |E_L|) / ||E_R| − |E_L||, dB: 0 = dairesel, üst sınır 60 dB (doğrusal polarizasyon) |
peak |
object | Yönlülük maksimumunda {theta, phi, rhcp_dbi, lhcp_dbi, axial_ratio_db} |
boresight |
object | θ = 0'da {theta: 0, rhcp_dbi, lhcp_dbi, axial_ratio_db} |
Örüntü CSV çıktısı rhcp_dBi, lhcp_dBi, axial_ratio_dB sütunlarını; uzak alan CSV'si ana eksen değerlerini ekler.
prad_w ve pacc_w, birim genlikli uyarım için mutlak değerlerdir. Genellikle çok küçüktürler; yalnızca oranları anlamlıdır.
Kayıpsız modeller. Hiç kayıp mekanizması olmayan model (PEC metaller, kayıpsız malzemeler, direnç yok) kabul ettiği gücün tamamını ışır; ışıma verimliliği 1'dir. prad_w / pacc_w yalnızca iki sayısal gücün uyumunu ölçer. Python modeli bunu sim.lossless = True ile bildirir (piramidal horn böyle yapar). evaluate() iddiayı kontrol eder (kayıplı malzeme/direnç varsa uyarıyla geçersiz kılar); simülasyonla elde edilen oran 1'in %5 yakınındayken rad_efficiency 1, kazanç = yönlülük bildirir, ölçümü rad_efficiency_raw ve notta saklar. %5 dışında simülasyonla elde edilen değer uyarıyla bildirilir. prad_w, pacc_w asla değiştirilmez. Horn, cpw 20'de Prad / Pacc 1,037, cpw 30'da 1,08 vermiştir. Sebep NF2FF kutusu değildir: besleme kılavuzu, beş yüzlü kutu ve horn kesit düzlemlerinden geçen tam Poynting akısı (Yee ızgarasında ham E/H) %0,1–0,4 içinde uyuşurken dalga kılavuzu mod eşleme probları gücü %4,3 (cpw 20), %8,6 (cpw 30) düşük okumuştur. Önceki "besleme akısına göre kutu +%2,4 / +%5,8" sonucu, metal duvarlarda aynı eksikliğe sahip düğüm enterpolasyonlu akıyla karşılaştırmaydı. Simulation.evaluate artık dalga kılavuzu portunu kalibre eder (probe_power_factor); horn Prad / Pacc değeri cpw 20'de 0,992–0,995, cpw 30'da 0,995–0,998'dir. Yukarıdaki %5 kuralı koruyucu olarak kalır. Tanı sırasında mesh hatası da bulunmuştur: CSXCAD'in tek hassasiyetle sakladığı çokyüzlü köşeleri, 5,08 duvarı yerine y = 5,0799999 konumuna mesh çizgisi koymuştur; üzerindeki kenarlar metal olmamış, kılavuz bir hücre fazla yükselmiştir (kılavuzda E_z, E_y'nin %6'sı; fairbeam.automesh artık bu koordinatları geri oturtur).
efficiency
EfficiencySweep. İsteğe bağlıdır (istenmezse bulunmaz): frekansa bağlı 1B ışıma verimliliği sonucu. NF2FF kutusu zaman alanı dökümleri kaydeder; çalıştırma sonrası openEMS bunları f_min–f_max arasında eşit aralıklı N frekansta dönüştürür (varsayılan 21, aralık 3–201). Yalnızca güçler tutulur, örüntüler tutulmaz. Uyarılan port başına bir kayıt; port, farfield[].port ile aynı şekilde ayarlanır (tek portlu çalıştırmada tek kayıt).
| Alan | Tür | Açıklama |
|---|---|---|
port |
number? | Uyarılan port |
f |
number[] | Frekanslar, Hz; linspace(f_min, f_max, N) |
prad_w |
number[] | Işınan güç, W; farfield gibi ayna düzeltmeli (2^mirror_planes değerine bölünür) |
pacc_w |
number[] | Portta kabul edilen güç, her f değerinde enterpole edilmiş ½·Re(u·i*), W |
rad_efficiency |
(number | null)[] | prad_w / pacc_w, 4 ondalık; pacc_w ≤ 0 ise null. 1 üstü değerler farfield gibi korunur; kayıpsız model aynı %5 aralığında 1 bildirir |
rad_efficiency_raw |
(number | null)[]? | Yalnızca kayıpsız modeller: simülasyonla elde edilen prad_w / pacc_w |
pacc_error |
(number | null)[]? | Çalıştırmanın durma noktasından kaynaklanan tahmini pacc_w göreli hatası (aşağıda). pacc_w ≤ 0 ise null |
reliable |
boolean[]? | pacc_error 0,1'i (%10) aşarsa veya pacc_w ≤ 0 ise false: değer korunur ancak güvenilir değildir. Görüntüleyici bunları eğriden çıkarır, işaretli nokta olarak çizer. Eski paketlerde yoktur (tüm değerler güvenilir sayılır) |
mirror_planes |
number | Düzeltmede kullanılan PEC/PMC sınırları |
theta_step, phi_step |
number | Dönüşümün açısal ızgarası, derece (90 ve 180: θ 0/90/180, φ 0/180). openEMS Prad, NF2FF kutusu yüzeyinden geçen Poynting akısıdır; bu ızgaraya bağlı değildir (yama örneğinde 3°/5° ile 90°/180° arasında, ayrıca yama şablonunun bandındaki 11 frekansta bit düzeyinde aynı). Bu nedenle en kaba ızgara kullanılır; yalnızca maliyeti belirler |
qa_warnings |
string[]? | Özet notları: güvenilmez frekanslar ve güvenilir olduğu hâlde verimliliği 1'i aşanlar |
Toplam verimlilik rad_efficiency · (1 − |S11|²) olur; S11, ports[port] içinden f frekansında (frequency üzerinde enterpolasyonla) alınır. Örüntü frekansında taramanın Prad değeri farfield[].prad_w ile aynıdır.
Güvenilirlik. Uyumdan uzak frekanslarda port gelen gücün neredeyse tamamını yansıtır; pacc_w = P_inc (1 − |S11|²), iki büyük sayının küçük farkıdır. Durdurma ölçütünde durmak port sinyallerinin sönüm kuyruğunu keser; her frekansta yaklaşık aynı mutlak büyüklükte hata bırakır. Küçük pacc_w değerine göre bu hata büyüktür; oran zikzak yapar. pacc_error, uyarım darbesi sonrasındaki sönümün son onda biri DFT dışında bırakıldığında ½·Re(U·I*) değişimini hesaplayarak tahmin eder. Sinyaller sönerken kaydedilmeyen bölüm bu mertebede veya daha küçüktür. Yama şablonunda ölçüm (11 frekans, 1,47–3,19 GHz, GPU):
| Durdurma ölçütü | Bant boyunca ışıma verimliliği | Güvenilir |
|---|---|---|
| −50 dB | 15, 33, 44, 52, 68, 62, 69, 61, 85, 53, 69 % | 11'den 7'si (son 4 değil) |
| −60 dB | 17, 32, 46, 56, 63, 66, 68, 70, 71, 70, 68 % | 11'den 8'i |
| −70 dB | 17, 31, 44, 55, 61, 66, 67, 66, 67, 65, 63 % | 11'in tamamı |
Üç çalıştırma arasında Prad en fazla birkaç yüzde, pacc_w rezonans üstünde %33'e kadar değişmiştir (burada 1 − |S11|², %3–4'tür; uyarım spektrumu en zayıftır). −50 dB'de tahmin %2–51, gerçek %0,4–24; −60 dB'de tahmin %0,2–20, gerçek %0,1–7'dir (gerçek değer −70 dB çalıştırmasına göre). Böylece tahmin güvenli tarafta kalır. Sebep NF2FF açısal ızgarası (90°/180° ve 5°/10° aynı Prad) veya döküm örneklemesi değildir (port probları gibi her Nyquist/4 = 37 zaman adımında; f_max değerinde dönem başına 8 örnek). Prad'ın kesilme hatası (birkaç yüzde) dahil değildir.
signals. Sabit adımla seyreltilerek en fazla yaklaşık 1500 noktaya indirilen port zaman sinyalleri.
| Alan | Tür | Açıklama |
|---|---|---|
time_ns |
number[] | Zaman, ns |
u_inc, u_ref, u_tot |
number[] | Gelen, yansıyan ve toplam port gerilimi, V |
i_tot_scaled |
number[] | Gerilim eksenini paylaşması için z_ref ile çarpılmış toplam port akımı, V |
dt_s |
number | null | Özgün (seyreltilmemiş) sinyalin zaman adımı, s |
samples |
number | Özgün sinyalin örnek sayısı |
Çok portlu çalıştırmalar
fairbeam run (ve sweep/converge), fairbeam.simulation.excite_only(n) içinde uyarılan port başına modeli bir kez kurar. O çalıştırma n portunu uyarır; diğerleri yerinde, dirençleriyle sonlandırılmış kalır. Varsayılan: dört porta kadar tüm portlar, diğerlerinde port 1. --excite all|1,3 ile değiştirin. Tek portlu model önceki gibi çalışır; paketine ayrıca 1 × 1 sparams eklenir.
sparams
| Alan | Tür | Açıklama |
|---|---|---|
ports |
number[] | Matris sırasıyla (model port sırası) 1..N indisleri |
z_ref |
number[] | Her portun referans empedansı, Ω (ayrık port direnci) |
excited |
number[] | Uyarılan portların indisleri; bilinen sütunlar |
complete |
boolean | Her port uyarılmıştır; tam matris bilinir |
method |
string | "B A^-1" (tam) veya "b_i / a_j" (kısmi) |
s |
object | "i,j" anahtarları = S_ij: j portuna giren dalga başına i portundan çıkan dalga. Her değer, frequency ile hizalı, 5 ondalığa yuvarlanmış {re: number[], im: number[]}. Yalnızca excited içindeki j sütunları bulunur |
qa |
object | Aşağıya bakın |
port_numbers |
number[]? | Yalnızca modelin port numaraları 1..N değilse bulunur; k indisi port_numbers[k-1] portuna karşılık gelir |
Tanım. Gerçek referansı Z_i olan i portunda U_i ve I_i, frekans alanı port gerilimi ve akımıdır (akım yapıya doğru). Güç dalgaları a_i = (U_i + Z_i I_i) / (2 sqrt(Z_i)), b_i = (U_i − Z_i I_i) / (2 sqrt(Z_i)) olur; openEMS'in uf_inc ve uf_ref değerlerinin sqrt(Z_i)'ye bölümüdür. j portunu uyaran çalıştırmanın dalgaları A ve B matrislerinin j sütunu olduğunda her frekansta tam matris S = B A^-1 olur. Sonlandırılmış FDTD portunda küçük, sıfır olmayan gelen dalga olsa da bu tanım tamdır. Kısmi uyarımda bilinen sütunlar S_ij = b_i / a_j olur. Z_i değerleri eşitse olağan S-parametreleridir; değilse her portun kendi Z_i değerine referanslı güç dalgası S-parametreleridir. Uyarılan her k portunda results.ports[k].s11_*, S_kk değerine eşittir.
qa.
| Alan | Tür | Açıklama |
|---|---|---|
reciprocity_max |
number | null | Frekanslar/çiftler boyunca maksimum |S_ij − S_ji| (iki sütun da biliniyor), doğrusal. FDTD tipik olarak 1e-4..1e-2 verir |
reciprocity_pairs |
object | Çift başına aynı değer; i < j olacak şekilde "i,j" anahtarları |
column_power_max, column_power_min |
object | Uyarılan j portu başına ("j" anahtarı): frekans boyunca Σ_i |S_ij|² maksimum/minimumu. 1 − sütun gücü, kaybolan veya ışınan paydır |
passivity_max |
number | null | En büyük sütun gücü. Pasif yapıda ≤ 1 olmalıdır |
passive |
boolean | passivity_max ≤ 1 + passive_tol |
passive_tol |
number | Tolerans, 0,01 |
element_patterns
Antenlerde (NF2FF kutulu modeller), birden fazla port uyarıldığında veya --element-patterns on verildiğinde bulunur. Diğer tüm portlar sonlandırılmışken her uyarılan portun birim gelen dalga başına karmaşık uzak alanını tutar; karşılıklı kuplaj dahildir. Birleştirme için Diziler ve hüzme yönlendirme sayfasına bakın.
| Alan | Tür | Açıklama |
|---|---|---|
normalization |
string | Okunabilir normalizasyon notu |
radius_m |
number | Kayıtlı E değerlerinin uzak alan yarıçapı, m (1) |
encoding |
string | "i16le-base64-scaled" (bu değişiklikten beri yazılır) veya "f32le-base64" (eski paketler). Okuyucular ikisini de kabul eder; bkz. Kodlamalar |
shape |
[number, number] | [n_theta, n_phi] |
theta, phi |
number[] | Derece cinsinden ızgara (uzak alan ızgarası, seyreltilmiş olabilir) |
frequencies |
number[] | Hz cinsinden frekanslar; uzak alan kayıtlarıyla aynı |
decimation |
number | Açısal seyreltme katsayısı (1 = tam uzak alan ızgarası). θ = 180° daima korunur |
mirror_planes |
number | PEC/PMC sınırları. Alanlar görüntü uzayını kapsar; küre integrallerini 2^m'ye bölün |
phase_center |
Vec3 | Tüm portların ortak faz merkezi (çizim birimleri) |
ports |
object[] | Uyarılan port başına {port, position, fields}. position, yönlendirmede eleman konumu olarak kullanılan port merkezi (çizim birimleri). fields, frekans başına {f, scale, e_theta_re, e_theta_im, e_phi_re, e_phi_im} (scale yalnızca "i16le-base64-scaled" ile) |
Birimler: a = U_inc / sqrt(Z_ref) = 1 sqrt(W) gelen güç dalgası için radius_m uzaklıkta E, V/m (tepe fazörü). Işıma şiddeti U = r² (|E_θ|² + |E_φ|²) / (2 η0), gelen güç ½ |a|². w_j ağırlıkları için dizi alanı Σ w_j E_j.
Eleman örüntüsü kodlamaları
e_theta_re, e_theta_im, e_phi_re, e_phi_im alanlarının her biri, satır öncelikli [theta][phi] düzeninde n_θ · n_φ little-endian değerden oluşan base64 dizesidir.
"i16le-base64-scaled"(yazıcının varsayılanı,python/fairbeam/multiport.py): işaretli int16 q = round(v /scale· 32767), v = q ·scale/ 32767.scale, herfieldskaydındaki sayıdır: o kaydın dört dizisindeki en büyük |değer| (port/frekans başına tek ölçek; E_θ ve E_φ paylaşır;scale0 tüm değerlerin sıfır olduğunu belirtir). Nicemleme adımı tepe bileşenin 1/32767'si, yaklaşık −90 dB'dir. 2×1 ve 4×1 yama dizilerinde düzgün, yönlendirilmiş (0°, 30°, 60°) ve genliği kademeli ağırlıklarda, D > Dmax − 50 dB bölgesindeki sentezlenmiş yönlülüğü en fazla 0,01 dB değiştirir; hüzme yönü aynı kalır, HPBW farkı 0,003° içindedir."f32le-base64"(önce yazılan paketler): float32,scaleyoktur. İki kat boyut; float32 gürültüsü çok az sıkışır, bu yüzden gzip iki biçimde de neredeyse kazanç sağlamaz.
Görüntüleyici (src/lib/sparams.ts) ve fairbeam.array ikisini de okur. Sonlu olmayan uzak alanlar "f32le-base64" olarak yazılır. fairbeam.multiport.reencode_element_patterns(bundle), eski paketi başka alanına dokunmadan yerinde dönüştürür.
fields
İsteğe bağlı; yalnızca fairbeam run --fields çalıştırmalarında bulunur (python/fairbeam/fields.py). Sıfır kalınlıklı metal içeren her düzlemde (kutu levhası veya çokgen; en fazla 4 düzlem, küçükten başlayarak) openEMS tam levhanın mesh düzleminde frekans alanı rot(H) dökümü kaydeder. PEC levhada düzlem içi bileşenler, yüzey akımı yoğunluğunun sabit normal ikili hücre genişliğine bölümüdür; bu nedenle harita düzlem başına sabit katsayı farkıyla yüzey akımı büyüklüğü |J_s| olur. FDTD mesh'inden düzenli ızgaraya yeniden örneklenir, düzlem/frekans başına normalize edilir.
| Alan | Tür | Açıklama |
|---|---|---|
quantity |
string | "surface_current" |
definition |
string | Okunabilir tanım |
units |
string | Normalizasyon notu: 1000 = o frekansta düzlemdeki metal üzerindeki maksimum, -1 = metal yok |
phase_version |
number | 1, aşağıda açıklanan isteğe bağlı işaretli int8 karmaşık akım biçimini tanımlar. Eski okuyucular ek phasors alanını yok sayabilir; phase_version olmayan paketlerin yalnızca büyüklük anlamı korunur |
port |
number? | Haritaları kaydeden çalıştırmada uyarılan port numarası. Haritalar tek uyarımdandır: çok portlu çalıştırmada (uyarılan port başına bir openEMS çalıştırması) yalnızca ilk uyarılan portun çalıştırmasında, diğerleri sonlandırılmışken kaydedilir; port başına harita yoktur. Tek uyarılan port bilinmiyorsa veya alan eklenmeden önceki paketlerde bulunmaz. Görüntüleyici ports içinde excite işaretli tek porta döner (liste haritaları kaydeden aynı kurulumdan gelir); aksi halde uyarımı bilinmiyor gösterir, asla port 1 varsaymaz |
planes |
FieldPlane[] | Aşağıya bakın |
FieldPlane
| Alan | Tür | Açıklama |
|---|---|---|
name |
string | Döküm adı (fairbeam_J_<axis><i>) |
parts |
string[] | Bu düzlemde levhası olan metal katılar |
axis, position |
number | Normal eksen indisi ve düzlem koordinatı (çizim birimleri) |
u_axis, v_axis |
number | Düzlem içi eksenler, (axis + 1) % 3 ve (axis + 2) % 3 (çokgenlerle aynı düzen) |
u_range, v_range |
[number, number] | Düzlemde metalin uzanımı; ilk/son örnekler bu değerlerdedir |
nu, nv |
number | u/v boyunca örnek sayısı (uzun kenarda en fazla 100) |
frequencies |
FieldFrequency[] | Uzak alan frekansı başına kayıt |
FieldFrequency
| Alan | Tür | Açıklama |
|---|---|---|
f |
number | Gerçekte dökümü alınan frekans (Hz). Açık --fields frekansları yoksa yaklaşık %0,5 adımlı ızgara kaydedilir, en yakın örnek kullanılır |
f_target |
number | Haritanın ait olduğu uzak alan frekansı (Hz) |
values |
number[] | v satır indisi olacak şekilde satır öncelikli nv · nu tam sayı (values[j * nu + i], u_range[0] + i·Δu, v_range[0] + j·Δv konumundadır). 0..1000 = |J_s| / max (doğrusal, fazör büyüklüğü); -1 = metal dışı (basamaklı mesh değil, tam şekiller) |
phasors |
string | phase_version: 1 ile piksel başına [Ju.re, Ju.im, Jv.re, Jv.im] sıralı dört işaretli int8 örneğin base64 baytları. Pikseller values ile aynı v-satır/u-sütun sırasını ve düzlem eksenlerini kullanır. Her bileşen, nicemlemeden önce gerçek/sanal skaler olarak çift doğrusal yeniden örneklenir. Her frekansta peak, values için kullanılan yeniden örneklenmiş vektör büyüklüğünün metal üzerindeki maksimumudur; bileşen round(127 · component / peak) ile [-128, 127] aralığına kırpılır. Tam metal maskesi dışında dört bayt da sıfırdır. Değerler peak değerine göredir; bu değer mutlak akım yoğunluğu olarak saklanmaz. Faz düzeni Re{J exp(+j phase)} = re cos(phase) - im sin(phase); +90°'de gerçek akım -im olur. Alan geriye uyumlu ektir: yalnızca büyüklük kullananlar values ile devam edip phasors alanını yok sayabilir |
Tepe metal kenarlarındadır; burada akım tekildir ve yalnızca mesh'in izin verdiği kadar çözümlenir. Mutlak tepe yerine şekilleri ve göreli seviyeleri karşılaştırın.
field_planes
İsteğe bağlı; yalnızca alan düzlemli çalıştırmalarda bulunur (fairbeam run --field-plane, tasarımın monitors.field_planes alanı; python/fairbeam/field_planes.py). Düzlem/frekans başına bir kayıt. openEMS her düzlemde, istenen konuma en yakın mesh çizgisinde, düzlemdeki tüm simülasyon bölgesi boyunca düğüm enterpolasyonlu frekans alanı E (döküm türü 10) veya H (tür 11) kaydeder. Kaydedilen harita fazör büyüklüğüdür; FDTD mesh'inden düzenli ızgaraya çift doğrusal yeniden örneklenir (düzlemdeki en ince hücrenin adımıyla, uzun kenarda en fazla 200 örnek), 3 anlamlı basamağa yuvarlanır. Karmaşık bileşenler yanında isteğe bağlı 8 bit phasor olarak saklanır.
Normalizasyon. openEMS frekans alanı dökümleri, port gerilimleriyle aynı tek taraflı Fourier dönüşümüdür: 2 Δt Σ f(t) e^(−jωt). Uyarılan portun P_inc = |u_inc|² / (2 Re Z_ref) değeriyle sqrt(1 W / P_inc(f)) ölçeklemesi uygulanınca uyarılan porta gelen (uyarım) 1 W güç için tepe fazör genliği olur. Tek uyarılan port yoksa ham dönüşüm kalır (unit: "arb.", normalization: "none"). fields gibi haritalar tek uyarımdandır: çok portlu çalıştırmada yalnızca ilk uyarılan portun çalıştırmasında kaydedilir.
FieldPlaneMap
| Alan | Tür | Açıklama |
|---|---|---|
quantity |
string | "E" veya "H" |
component |
string | "abs": sqrt(|Fx|² + |Fy|² + |Fz|²); "x", "y", "z": ilgili bileşenin büyüklüğü |
normal, axis |
string, number | Düzlem normali ("x", "y", "z") ve eksen indisi |
u_axis, v_axis |
number | Düzlem içi eksenler, (axis + 1) % 3, (axis + 2) % 3 (fields gibi) |
position_mm |
number | Haritanın kaydedildiği mesh çizgisinin koordinatı (çizim birimleri) |
requested_mm |
number | İstenen konum; bölge dışındaysa sınırda kaydedilir |
f |
number | Frekans (Hz) |
u_range, v_range |
[number, number] | Uzanım (düzlemdeki bölge); ilk/son örnekler bu değerlerdedir |
nu, nv |
number | u/v boyunca örnek sayısı |
unit |
string | Normalize ise "V/m" (E) veya "A/m" (H), değilse "arb." |
normalization |
string | Okunabilir normalizasyon; uyarılan port yoksa "none" |
max |
number | Haritanın en büyük değeri (4 anlamlı basamak) |
magnitude |
number[][] | nu değerli nv satır: magnitude[j][i], u_range[0] + i·Δu, v_range[0] + j·Δv konumundadır |
port |
number? | Uyarılan port numarası (bilinmiyorsa yok) |
phasor |
FieldPlanePhasor? | Haritanın fazı ve bir dönem boyunca alanı için karmaşık bileşenler. Alan eklenmeden önceki paketlerde veya sıfır alanda bulunmaz; görüntüleyici yalnızca büyüklüğü gösterir |
FieldPlanePhasor (isteğe bağlı). Aynı yeniden örneklenmiş nu × nv ızgaranın karmaşık bileşenleri; görüntüleyici fazı ve bir dönem boyunca anlık Re{F e^(jωt)} alanını gösterebilir (tasarımcının 2B alan haritası sekmesi ve 3B görünüm animasyon yapar).
| Alan | Tür | Açıklama |
|---|---|---|
components |
string[] | component: "abs" için ["x","y","z"]; diğer durumda kayıtlı tek bileşen, ör. ["z"] |
peak |
number | Kayıtlı bileşenlerin en büyük büyüklüğü (4 anlamlı basamak), haritanın unit biriminde; int8 tam ölçeği |
data |
string | İşaretli 8 bit tam sayıların base64 kodlaması, v satır olacak şekilde satır öncelikli: [v][u][component][re, im], nv · nu · len(components) · 2 bayt. Değer = int / 127 · peak; çözünürlük peak / 127 (tepenin %0,8'i), magnitude değerinden kabadır. Faz yalnızca büyüklük bu adımın çok üstündeyken anlamlıdır |
Değerler magnitude gibi ölçeklenir (1 W gelen güç); uyarılan port varsa gelen gerilim dalgasının fazıyla döndürülür (× conj(u_inc) / |u_inc|). Faz 0, uyarım darbesinin keyfî zaman başlangıcı değil, bu dalganın t = 0 anıdır. Uyarılan port yoksa (normalization: "none") faz ham dönüşüme aittir, fiziksel referansı yoktur. Zaman düzeni e^(+jωt); φ fazında alan Re{F e^(jφ)} olur.
Boyut: 106 × 106 harita başına yaklaşık 80 kB JSON, 200 örnek sınırında yaklaşık 150 kB; tasarım sınırlarıyla (4 düzlem × 4 frekans) en fazla yaklaşık 2,5 MB. Fazör, abs haritalarında piksel başına 6 bayt (tek bileşende 2), base64 olarak ekler: 106 × 106 (abs) için yaklaşık 90 kB, 200 × 200 için 320 kB; 16 tam boy abs haritasında en fazla yaklaşık 5 MB ek. Notlar: düğüm enterpolasyonu, tam metal levhada veya dielektrik arayüzde normal E bileşenini komşu iki hücre üzerinden ortalar; temiz saçak alanları için düzlemi bir hücre uzağa koyun. PML sınırının dış hücrelerinde soğurulmuş, fiziksel olmayan alanlar bulunur.
Dizin dosyası
public/projects/index.json, her yazmada veya fairbeam index [folder] ile yeniden oluşturulur. Klasörde (kendisi hariç) schema değeri fairbeam.project/ ile başlayan tüm *.json dosyalarını kapsar. Kayıtlar önce model kimliğine, sonra ada göre sıralanır.
{
"projects": [
{"file": "patch-antenna.json", "name": "Rectangular patch antenna", "model": "patch-antenna",
"created": "2026-09-24T22:24:15+0300", "simulated": true, "bands": [2.433], "cells": 97152}
],
"updated": "2026-09-24T22:25:42+0300"
}| Alan | Tür | Açıklama |
|---|---|---|
file |
string | Dizine göre paket dosya adı |
name, model, created |
string | Paketten kopyalanır (model, model.id değeridir) |
simulated |
boolean | results bulunuyor |
bands |
number[] | Her bandın f_center değeri (minimum S11 frekansı), GHz, 3 ondalık |
band_ranges |
object[]? | Her bandın GHz cinsinden sınırları (4 ondalık) ve simülasyon aralığına değip değmediği: {lo, hi, edge_lo, edge_hi}. Örnek seçici bandı sınırların ortasıyla, simülasyon sınırına değiyorsa aralığıyla gösterir. Bant yoksa ve eski dizinlerde bulunmaz (seçici o zaman bands gösterir) |
cells |
number | mesh.total_cells |
engine |
string? | "CPU", "Metal", "CUDA" veya "GPU": simülasyonu çalıştıran motor (run.engine ve günlükten). Çalıştırma yoksa bulunmaz |
params |
object? | Varsayılandan farklı ayarlanmış model parametreleri, {key: value}. Yoksa bulunmaz |
Sürümleme
İsteğe bağlı alan eklemek şema kimliğini değiştirmez: lumped_elements, results.sparams, results.element_patterns, farfield[].port, run.port_runs, fields.port, results.efficiency, run.efficiency_time_s, run.engine / engine_requested / exact_endcriteria, field_planes, efficiency[].pacc_error / reliable, rad_efficiency_raw, parts[].conductor, parts[].void bu şekilde eklenmiştir. Alan kaldırmak/yeniden adlandırmak, birim veya indis düzenini değiştirmek sürümü fairbeam.project/2 yapar. Şema değiştiğinde src/types.ts aynı commit'te değişir.