TARHAN Layer-0 Doğrulama Kataloğu
July 19, 2026 · View on GitHub
Disiplin: kitaptan öğren → algoritmayı KENDİ kodumuzla yeniden yaz (kaynak kodu
asla kopyalanmaz) → basılı sayı/tablolanmış sabitle karşılaştır → sapmayı logla.
Tam plan + kitap envanteri: Obsidian wiki, "TARHAN — Textbook Simulation Catalog".
Prototipler ../tarhan-validation/ klasöründe geliştirildi; kanonik hali buradaki
pytest suite'idir (pytest ile koşar, CI her push'ta işletir).
| # | Vaka | Kaynak | Beklenen | Durum | Test |
|---|---|---|---|---|---|
| 0 | Cottrell kronoamperometri, explicit FD | Britz & Strutwolf 4e (2016) | G=1/√(πT) | ✅ maks %0.0155, mertebe p=1.97 | layer0/electrochem/test_rank00_cottrell_fd.py |
| 1 | Nafion λ(a), κ(λ,T) | Springer et al., JES 138 (1991) | λ(1)=14.00; κ(14,80°C)=0.124 S/cm | ✅ 5/6 basılı rakam birebir; λ(0.3) aktarımı xfail (kaynak teyidi açık) | layer0/fuelcell/test_rank01_springer_membrane.py |
| 2 | P+N step junction | Hu, Modern Semiconductor Devices, Örnek 4-1 (açık PDF) | φ_bi≈1 V; W=0.12 μm; x_P≈1.2 Å | ✅ 3/3 basılı değer | layer0/semiconductor/test_rank02_hu_junction.py |
| 3 | 1D difüzyon MMS tam çözüm | Linge & Langtangen §3.6.5 (CC BY 4.0) | ‖e‖∞ ~1e-14, grid'den bağımsız | ✅ ≤8e-15 (3 grid) | layer0/numerics/test_rank03_mms_exact.py |
| 4 | Cottrell yarı-integrali M=1 | Oldham, Myland & Bond (2012) | sabit; mertebe 0.5 (tekillik) | ✅ p=0.4999; Richardson M_ext=1.000000; FD↔analitik <%0.3 | layer0/electrochem/test_rank04_semiintegral.py |
| 5 | Hu Örnek 4-2: C-V doping çıkarımı (TERS-problem) | Hu Böl. 4 s.99-100 (açık PDF, görsel-okundu) | N_l=6e15, N_h=1.8e18 (+duyarlılık 0.78V→1.8e17) | ✅ üçü de birebir; 2 formül oracle-VERIFIED. 1e8 gizemi çözüldü: kitabın basılı yerine-koyması A² yerine 1e-8 kullanıyor (literal girdiler 5.9e23 verir — fiziksel saçma; öz-tutarlı eğim 2e31). Girdi-tutarsızlığı strict-xfail — muhtemel errata | layer0/semiconductor/test_rank05_hu_cv_extraction.py |
| 6 | PEMFC kayıp-merdiveni | O'Hayre 3e, Böl. 2-5 işlenmiş örnekler (kullanıcı EPUB'undan transkripsiyon) | Örn. 2.3/3.3/4.1/5.1 kutulu cevapları | ✅ E⁰_DMFC=1.199 V; 0.059 V/dekad + 6-dekad 0.36 V; R_ionic 0.01/0.005 Ω → η 0.15/0.10 V; c_O2=5.8, D_eff=0.0506, j_L=2.26, η_conc=0.22 V. 4 formül oracle-VERIFIED. Kitap-içi D=0.1-vs-0.2 tutarsızlığı xfail (muhtemel errata) | layer0/fuelcell/test_rank06_ohayre_losses.py |
| 7 | Gözlenen yakınsama mertebeleri | Linge & Langtangen §1.1.4, §3.6.6 | central/CN→2, FE→1 | ✅ 2.0000 / 1.0000 / 2.0002 | layer0/numerics/test_rank07_convergence_rates.py |
| 8 | Reversible CV tepe ψ_p | Compton ⊕ Britz ⊕ Bard&Faulkner | 0.4463 (3 kitap çapraz); θ_p=−1.109; Δθ_yarım=2.20 | ✅ J_p=0.44636 (3 çözünürlükte kararlı); θ_p=−1.109; 2.2023. Boyutlu Randles–Ševčík oracle 2/2 VERIFIED | layer0/electrochem/test_rank08_cv_peak.py |
| 9 | Pierret junction + Shockley eğimleri | Pierret Böl. 5-6 | V_bi=0.716 V; W=0.972 μm; 60/120 mV/dekad | ✅ V_bi=0.7156→0.716; W=0.9716→0.972 (ε_r=11.8'i sabitler — katalog aktarımı 11.7 xfail ile belgeli); eğimler 59.64/119.27 (nominal %1 içinde). Shockley oracle 3/3 VERIFIED | layer0/semiconductor/test_rank09_pierret_shockley.py |
| 10 | SG vs central-difference akı | Farrell (WIAS 2263); Selberherr | SG sıfır: U_T·ln10 TAM | ✅ 8.9e-16; CD 18/11'de yanlış + yanlış işaret | layer0/numerics/test_rank10_sg_flux.py |
| 11 | Levich RDE limit akımı (İLK konveksiyon terimi) | Newman & Thomas-Alyea 3e; Cochran a=0.51023 | 0.620 sabiti <%0.5; j_L∝√ω | ✅ iki bağımsız yol (Γ'sız kuadratür + FD/Thomas) 5e-7 mutabakat → 0.620450; FD mertebe ≈2; √ω ölçeklemesi tam; boyutlu form oracle 2/2 VERIFIED. Rank-11 dersi (physics_learn'de): elle bileşik-sabit hesabı 0.620469 vermişti — çift-yol yakaladı; sabitler makine-değerlendirilir | layer0/electrochem/test_rank11_levich.py |
| 12 | Tam PEMFC polarizasyon eğrisi | Parametre seti: Spiegel (2008)/FuelCellStore (ATIF DÜZELTMESİ 2026-07-09 — önceki "Kim/Barbir" yanlıştı). Merdiven standart ders-kitabı biçimi. Kim et al. JES 142(8):2670 (1995, DOI 10.1149/1.2050072) AYRI bir model (m·exp(n·i), i_L yok) | Nitel çapalar: ~1.0 V OCV-yakını, ~0.6 V @ ≈1 A/cm², i_L=1.4 roll-off | ✅ MONTAJ (yeni formül yok — üç kayıp terimi rank-6'da oracle-doğrulamalı): V(1 mA/cm²)=0.997, V(1.0)=0.582, roll-off dikleşmesi ölçülü; Kim-biçimi Tafel+ohmik çekirdeği merdivenle ≤1e-12 özdeş. PROVENANS ÇÖZÜLDÜ (kaynak-araştırması): dolaşımdaki (0.085, 1.1) Kim'in m,n'i DEĞİL — Spiegel'in α₁ (V)/k (boyutsuz) sabitleridir (ayrı i_L ile kullanılır); standalone Kim terimi olarak fiziksel-saçma (i=0'da 85 mV offset). GERÇEK Kim A/cm² sabitleri (m≈3e-5 V, n≈8) fiziksel duvar üretir. Eski strict-xfail → geçen provenans testi | layer0/fuelcell/test_rank12_pemfc_polarization.py |
| 12″ | (kaynak-ikamesi, tarihçe) Uçtan-uca 1D SOFC hücre gerilimi — rank-12 ilk turda Barbir yerine elde-var O'Hayre ile kapatılmıştı | O'Hayre 3e §6.2, Tablo 6.4 | ASR=0.176 Ω·cm²; η_ohm=0.088 V; η_cat=0.158 V; V=0.754 V | ✅ basılı zincir birebir; 2 formül oracle-VERIFIED; birim reçetesi belgelendi | layer0/fuelcell/test_rank12_sofc_1d_cell.py |
| 13 | Solar hücre FF/V_oc çapaları (çift-yol: Green 1981 vs tam maksimizasyon) | Green, Solid-State Electronics 24 (1981); PVEducation | FF₀ formülü ~1e-4 doğruluk sınıfı | ✅ çift-yol mutabakatı ≤1.4e-4 (v_oc 10.5-30); V_oc oracle 2/2 + FF₀ 3/3 VERIFIED | layer0/semiconductor/test_rank13_solar_ff_voc.py |
| 14 | Nicholson (1965) ΔEp-ψ çalışma tablosu, quasi-reversible CV (BV Robin sınırı) | Nicholson, Anal. Chem. 37, 1351 — birincil-kaynak PDF transkripsiyonu | Tablo I: 13 (ψ, ΔEp·n) çifti | ✅ 13/13 çift ±2 mV (TARHAN değerleri grid-yakınsamış; artık fark 1965 tablo granülaritesi); BV(ψ=500)→Nernst limiti 0.08 mV | layer0/electrochem/test_rank14_nicholson.py |
Yetenek doğrulamaları (katalog ötesi — motora yeni kabiliyet)
| # | Vaka | Kaynak | Beklenen | Durum | Test |
|---|---|---|---|---|---|
| T1 | Robertson stiff kinetiği — transient/BDF yeteneği (numerics/transient.py; scipy-delege stiff entegratör, analitik Jacobian, no-silent-degrade) | Robertson 1966 / Hairer-Wanner "Solving ODEs II"; çapraz-kod: SUNDIALS CVODE cvRoberts_dns (cv_examples-5.7.0.pdf; RTOL/ATOL kaynak koddan doğrulandı) | Korunum y1+y2+y3=1; SUNDIALS basılı tablo (12 dekad) | ✅ yapısal korunum Σ(RHS)≡0 → invariant makine-hassasiyeti (16 dekad); analitik Jacobian↔FD ~1e-11; 3 bağımsız yöntem (Radau/BDF/LSODA) ~1e-9 mutabık; SUNDIALS çapraz-kod pin: y3 tüm 12 dekad ≤4e-4, y1/y2 t≤4e8 eşiği 2e-3 (ÖLÇÜLEN maks 1.28e-3 — burada eskiden hatalı biçimde "≤1e-3" yazıyordu, ölçülen değer o iddiayı zaten aşıyordu; 2026-07-19 denetim düzeltmesi). Dürüst bulgu: SUNDIALS basılı tablosu gevşek-tol demo'su — t≥4e9'da kendi değerleri ~%1–33 kayar (yüksek-hassasiyet Radau ile teyitli; o rejimde gerçeğe korunum+tight-tol ile bağlanılır). Stiffness gerçekliği: RK45 [0,40]'ta BDF'ten ~740× nfev; y2 zirvesi 3.6487e-5 | layer0/numerics/test_robertson_stiff.py |
| T3 | Transient kronoamperometri (models/chronoamp1d) — transient/BDF primitifinin İLK domain uygulaması: method-of-lines difüzyon + BDF | Cottrell (rank-0 explicit-FD'nin implicit yolu); yarı-sonsuz erf çözümü + Cottrell akımı i=nFAc*√(D/πt) | Akım Cottrell'e uzamsal O(h²); profil erf'e eşleşir | ✅ yüzey akısı Cottrell analitiğine temiz O(h²) yakınsar (ölçülen mertebe 2.000, 4 grid 100→800); profil erf'e ≤1e-4; akım t≥0.05'te ≤1e-3; implicit avantaj: BDF'in KABUL ETTİĞİ adım sayısı 483, explicit CFL gereksinimi (dt<dx²/2D → 8889 adım) → ölçülen oran 18.4×, sabit Jacobian bir kez değerlendirilir. DÜZELTME 2026-07-19: burada eskiden "≥100×" yazıyordu ve testi de boştu — nsteps alanı çıktı-noktası sayısını (=1) döndürüyordu, assertion 1 < 88.9'a iniyordu. count_steps=True ile gerçek adım ölçülüp eşik ölçüme bağlandı | layer0/electrochem/test_chronoamp_transient.py |
| T2 | pn1d MMS uzamsal-mertebe — operatör-başına + TAM-KUPLAJLI MMS (Faz-1 "temiz mertebe" açık kalemini KAPATIR) | Langtangen MMS disiplini (rank-3 ile aynı ruh); manufactured smooth alan + sürekli-operatör kaynağı; coupled-Newton = scipy.optimize.root (mimari: rezidüel bizim, Newton çözümü scipy'a delege) | Her operatör + kuplajlı sistem temiz O(h²) | ✅ (a) izole _poisson_newton ve _continuity_solve — üretim fonksiyonları doğrudan çağrılır — ikisi de 2.000 (6 grid 20→640), makine-hassasiyetine çözülür (Poisson-Newton tol=1e-13; SG doğrudan tridiag); (b) üretim konvansiyonlarını yeniden üreten TEST-YEREL bir (ψ,n,p) ayrıklaştırma, kuplajlı+makine-hassasiyetli çözüldüğünde (coupled-Newton=root) yine 2.000 (4 grid) — kuplaj mertebeyi bozmaz. (Üretimden DOĞRUDAN paylaşılan tek parça bernoulli; Laplacian/diverjans/işaretler test-içinde yeniden ifade edilir — "motorun ayrıklaştırması" demek fazla güçlü olurdu, 2026-07-15 review.) Kaynak-işareti yük-taşıyan (ters işaret yakınsamaz — regresyon bekçili). KAPSAM (2026-07-15 review'da daraltıldı): (b)'nin rezidüeli TEST KURGUSUDUR — solve_bias'ta kuplajlı çözüm yolu YOK, kaynak-enjeksiyonun motorda karşılığı YOK; denge-durumunda ‖F‖~1e-14 eşleşmesi güçlü kanıt ama KİMLİK İSPATI DEĞİL (tek durum). ÖLÇÜLEN: ayrıklaştırma mertebesi. ÖLÇÜLMEYEN: üretimdeki Gummel solve'un mertebesi (gürültü tabanı orada duruyor) → gerçek coupled-Newton MOTOR MODU açık kalem | layer0/semiconductor/test_pn1d_mms_order.py |
Kurallar
-
Kod kopyalanmaz — lisans durumu ne olursa olsun (Britz Fortran: lisanssız; nanoHUB: CC BY-NC-SA; Kulikovsky: license:null; Langtangen kitabı CC BY ama repo lisansı doğrulanamadı). Algoritma basılı metinden yeniden yazılır, köken loglanır.
-
Sabitler vaka girdisidir — Hu (ε_r=12, kT/q=0.026) vs Pierret (ε_r=11.8 — katalog aktarımı 11.7 idi, W=0.972 μm çapası 11.8'i sabitledi [rank-9 xfail]; 0.0259, n_i=1e10) vs Sze (n_i=9.65e9): motor hiçbirini hardcode etmez.
-
Tolerans politikası (2026-07-15 review'da MUTLAK İDDİA GERİ ÇEKİLDİ) — eskiden burada "Keyfî tolerans yok" yazıyordu; bu README ile çelişiyordu ve doğru değildi. 2026-07-19 TAM DENETİMİ suite'teki 192 eşiğin tamamını sınıflandırdı:
Sınıf Adet Anlamı A basılı-hane 32 sınır, yayınlanmış sayının basılı son hanesi B mertebe/limit 13 iddia edilen büyüklüğün KENDİSİ ölçülmüş mertebe veya Richardson limiti C yapısal 76 makine-hassasiyeti kimliği, korunum, monotonluk, işaret, ValueErrorbekçisi — aslında tolerans değilD ölçülmüş-marjlı 52 ölçülen ve KODA YAZILMIŞ bir değere bilinçli marjla konmuş regresyon bekçisi E nitel kaynak bandı 5 kaynağın sözel tarifini kodlayan aralık (ör. "OCV-yakınında ~1.0 V") F türetilmemiş 14 basılı sayı yok, ölçülmüş mertebe yok, kayıtlı ölçüm yok Yani 121/192 ya basılı haneye/ölçülmüş mertebeye bağlı ya da hiç tolerans değil; 52'si kayıtlı ölçüm + seçilmiş marj. Geriye 14 türetilmemiş eşik kalır — gizlenmez. 11'i koruduğu değerin 15×–1e11× üstünde gevşektir (güvenli ama sayı hiçbir şeye bağlı değil); 2'si dar paylıdır ve regresyonda kırılgandır (
test_rank04_semiintegral.py:43→ 3e-3 vs ölçülen 2.9312e-3, %2.3 pay;test_robertson_stiff.py:135→ 2e-3 vs ölçülen 1.28e-3). Tam liste ve dosya:satır için denetim raporu:~/malzeme simulasyon/tasks/tolerance-audit-2026-07-19.md. "Hepsi pinlidir" DENMEZ; "disiplinimiz yok" da denmez — her eşik sınıfıyla etiketlenir. -
Baskı kaydı — her vakanın hangi baskıdan/transkripsiyondan geldiği yazılır; şüpheli aktarım
xfail(strict)ile açık kalem yapılır (rank-1 λ(0.3) örneği). -
xfail İKİ AYRI TÜRDÜR — karıştırılmaz (2026-07-15 bağımsız review düzeltmesi):
- Transkripsiyon-içi çelişki (aritmetikle gösterildi): transkribe edilen basılı girdiler transkribe edilen basılı cevabı üretmiyor (O'Hayre D=0.1-vs-0.2; Hu A²-yerine-1e-8). SINIR: kaynak dosyaları repo'da DEĞİL (telif) → çelişki bizim transkripsiyonumuz üzerinden gösterilir; "kitap kanıtlanmış yanlış" demek temiz-checkout'tan doğrulanamaz (2026-07-15 review daraltması).
- Teyit edilmemiş provenans: aktarımımız ile hesap uyuşmuyor ama hangisinin yanlış olduğu basılı kaynaktan teyit EDİLMEDİ (Springer λ(0.3); Pierret ε_r). Bu "kaynak yanlış" DEMEK DEĞİLDİR. Emsal: rank-12'nin (0.085, 1.1) sabitleri kaynak hatası sanılıyordu; birincil-kaynak araştırması hatanın BİZDE olduğunu gösterdi (Spiegel α₁/k). Tür-2 xfail'ler birincil-kaynak araştırmasıyla kapatılır — sayı olarak "yakalanan kitap hatası" sayılmaz.