Siru en Simusol · Documentación · Manual
Resumen de la tanda que va de siru r1655 a r1713 y calcula r150 a r151, con qué se hizo, dónde está, contra qué se verificó y qué quedó sin resolver o sin verificar. El cómo usarlo está en MANUAL.md; el porqué de cada decisión en siruviejo/LLAVES.md 12 y 13, slex/din/README.md 6 bis y la bitácora de PLAN_UN_ARMADOR.md.
Antes había dos: libdin (slex/din, C) para el camino .din, y Siru::Mdin (Perl) para los circuitos con llaves, lazos o cortes. Ahora libdin es el único; siru no arma ninguna ecuación, se las pide por d2datdinc --din N [--llaves S1=1,S2=0].
| qué | dónde | revisión |
|---|---|---|
tabla de ramas y llaves (din_leer_con, --llaves) |
slex/din/din.c, slex/d2datdinc/main.c |
r1657 |
tiempo de cada etapa, (t + c_i*dt) escrito en el lugar |
din.c |
r1658 |
| lazos de capacitores y cortes de bobinas con la ley en derivadas | din.c (grafo_nuevo, camino, degeneraciones) |
r1659 |
equilibrio, instante y topología (din_equilibrio, din_instante, din_topologia, --topologia) |
din.c, main.c |
r1660 |
un .dat como entrada de d2datdinc |
main.c |
r1663 |
siru: un solo preparador (Siru::Preparador), un solo lector del .din (Siru::Din), un solo escritor (Siru::Salida), un solo motor de corrida (Siru::Circuito::correr) y un selector de caso (Siru::Circuito::caso) |
siru/lib/Siru/ |
r1664 |
borrados Siru::Mdin y Siru::Red |
r1665 | |
documentación: README, din.h, LLAVES.md 13, bitácora |
r1667, r1668 |
Verificado: paridad contra el armador en Perl congelado en r1655, por columna, en los 22 archivos de caso 2 con .patron: iguales, peor diferencia relativa 6e-16. Pruebas: siru/tests (prove) y slex/d2datdinc/probar.
T, DT y TICK no los fija el archivo: los pone el simulador en cada paso (el tiempo, el paso en uso, la cantidad de pasos dados). DTICK no existe más. Un circuito puede traer ecuaciones propias (EQUATIONS + VARIABLES). Una parada de RUN CONTROLS sobre otra variable (TICK>1000) se evalúa al empezar cada paso.
libdin: r1669. siru (cuenta de pasos, paso, paradas): r1670.DT= de 53 archivos que lo declaraban sin usarlo y DTICK de todos lados; 58 archivos, r1671.| caso | qué se hizo | ejemplo y prueba | revisión |
|---|---|---|---|
Capacidad que depende de su propio voltaje (C = 5 + 40*tabla(VCE), a02) |
en el equilibrio su voltaje como diferencia de potenciales; en la ley del lazo se divide por dQ/dV numérica |
slex/d2datdinc/pruebas/capacidad-variable.d, tests/capacidad.t |
r1674, r1675 |
Los nombres de los .mdin |
un caso de mdin deja NOMBRE[-bits][-rkN].mdin, -I.mdin, -E.mdin al lado del archivo; lo que no es mdin deja -de-d2datdinc.din y -ED<N>.din en un temporal |
r1676 a r1678 | |
Inductancia mutua M, L1-L2 = 299.7 (SCEPTRE) |
va a GLOBAL.mutuas; a cada bobina se le agrega + M·dI_otra/dt; en el equilibrio se conserva L·I + M·I_otra, también en la bobina acoplada que no está en el corte (el golpe del secundario al abrir el primario) |
pruebas/mutua.d, mutua-corte.d; tests/mutua.t, mutua_corte.t |
r1680, r1695, r1738 |
| Transformador con núcleo | devanado MW(2) = VOLTAGE - x1 * x2 en la biblioteca; el flujo como estado propio (VARIABLES DPHI1=0) y la fuerza magnetomotriz como ecuación propia; trafo.d, trafo2.d, trafo3.d, trafoNP.d reescritos así; MZZZ comentado |
pruebas/nucleo.d, tests/nucleo.t |
r1683, r1695 |
OUTPUTS |
el .simul saca lo que pide OUTPUTS, en su orden; cada fila resuelve el instante |
r1684 | |
| Islas (nodos sin camino a masa por llaves abiertas) | un nodo de cada isla a potencial cero en lugar de su ley de corrientes; corren circuito-S, -SE, -SE1, -SERRORRARO |
pruebas/isla.d, tests/isla.t |
r1688 |
| Biblioteca unificada | un solo libraryori.siru en slex/d2datdinc/biblioteca, con SB; los circuito*.ds2 apuntan ahí; L/C viejos pasados a LB/CB en circuito y parecidos |
r1685 a r1689, r1698 | |
Estados y parámetros propios en DEFINED PARAMETERS (a13: DPX1 = PX2, PDIS = PX1) |
D<X> hace de X un estado; un parámetro definido por expresión es una incógnita propia; etiquetas XA(...); tablas pegadas TABLEEX(...) |
pruebas/parametros-propios.d, tests/parametros.t |
r1703 |
Ramas con nombre numérico (1, 2-3 = ...) y mensaje claro para modelos por incrementos |
r1704 | ||
| Funciones de más de 6 argumentos | ExprTk no las compila: libdin las reemplaza por su cuerpo en cada llamada, y además Q1 de modellib.siru y los 11 a11*.d se partieron en dos |
r1705 | |
FUNCTIONS de un .ds en Calcula |
argumentos x,y,z, constantes puestas en el cuerpo; psicro corre y da sus "buenos datos"; * explícito en 10 archivos psicro |
r1706 | |
Table() adentro de una función y Calcula corrido desde el directorio del archivo |
tabla.ds corre |
r1707 | |
Elemento nulo (modelo 0, no aporta ecuación), RK=[-1] (es un punto), fasor (1,0) (mensaje: es el análisis AC) |
engrane.d, girator.d, circuitoBBBB.ds corren; d01.d dice por qué no |
pruebas/nulo.d |
r1709 |
XTABLE no es etiqueta; el nombre solo de una fuente J en DEFINED PARAMETERS es su corriente |
r1710, r1711 |
Pruebas: siru/tests 214 ok (prove -Ilib tests), slex/d2datdinc/probar 66 ok.
RUN INITIAL CONDITIONS [ONLY] de SCEPTRE: el instante en t = 0 con las derivadas en cero y los estados como incógnitas (PLAN_DC_RERUN.md, paso 0). a03 igual a SCEPTRE en las ocho cifras. El instante se resuelve desde su última solución, y si no converge desde las semillas del .din.
d2datdinc lee SENSITIVITY, MONTE CARLO, WORST CASE, las cotas y los RERUN/CONTINUE (GLOBAL.dc, cotas, reruns, continuar, controles SCEPTRE_*). Siru::DC calcula la sensibilidad sobre el punto DC y la escribe en NOMBRE.dc. En a08 coincide con las corridas de SCEPTRE, no con su tabla, que está mal (PLAN_DC_RERUN.md, paso 3).
Siru::DC::montecarlo, calcado de monte.f/random.f de SCEPTRE: su generador RANDU y su semilla, media (max+min)/2 y sigma (max−min)/6 por independiente, n puntos DC, estadísticas muestrales a NOMBRE.mc. Siru::DC::opciones corre lo que el .d pide. a07 coincide con las OBSERVED STATISTICS de SCEPTRE en las ocho cifras (siru/corpus/sceptre las saca a NOMBRE.sceptre-mc y compara). PLAN_DC_RERUN.md, paso 4.
Siru::DC::peorcaso, calcado de worst.f: gradiente normalizado en el nominal y la primera cota en cada sentido, punto DC en los dos extremos, a NOMBRE.wc. En a09 los extremos de siru son más extremos que los de SCEPTRE (el gradiente de SCEPTRE está mal); SCEPTRE corrido en los puntos de siru (a09wch.d, a09wcl.d) da lo mismo que siru en 8 cifras. siru/corpus/sceptre saca los de SCEPTRE a NOMBRE.sceptre-wc. PLAN_DC_RERUN.md, paso 5.
Siru::Rerun aplica los cambios de cada rerun al dato y Circuito::correr_con_reruns corre la maestra y cada rerun desde su .dat, todo en un .simul en bloques # RERUN k/N (...) (Salida con bloque y anexar; Integrador avisa el estado final para IC FOR RERUNS = PRECEDING RESULTS). siru/corpus/sceptre compara bloque por bloque: a03 (4 corridas, 8 cifras) y tanque_par_1 (3 corridas) iguales a SCEPTRE. PLAN_DC_RERUN.md, paso 6.
siru --continuar NOMBRE.d [--hasta T] sigue la corrida desde el estado final que bin/siru deja en NOMBRE.informe, otro bloque en el mismo .simul; la sección CONTINUE de un .d hace lo mismo al final. Hereda los parámetros del peor caso. PLAN_DC_RERUN.md, paso 7.
libdin: en un lazo de capacitores la capacidad puede depender del voltaje de otro capacitor (CC2 = f(VCC1)) o de la corriente de una fuente en paralelo con un capacitor (CE = f(JE)), además del propio; el punto de operación DC con lazos o cortes tiene su sistema (din_puntodc, NOMBRE-D.mdin). Lo pedía d04.d. Verificado con pruebas/sceptre/lazo-c-ajeno.d contra el mismo circuito sin lazo. De paso se vio que SCEPTRE usa la capacidad incremental (I = C·dV/dt) y siru la carga (Q = C·V): con capacidad variable difieren (c-variable.d); el estado sigue siendo la carga (decisión del autor). d04: libdin ya lo arma; el punto DC no converge (Newton, cuatro transistores; SCEPTRE lo saca con RUN IC VIA IMPLICIT). MANUAL 7, slex/din/README.md, siru/corpus/README.md.
RUN IC VIA IMPLICIT (control SCEPTRE_IC_VIA), y también cuando Newton no llega: Circuito integra con el tiempo quieto desde las condiciones iniciales, por tramos, y desde cada estado prueba Newton sobre el sistema DC sembrado con la última etapa del paso (Integrador: al_terminar y salidas.valores reciben la solución del paso; historia_inicial siembra el primer paso; el equilibrio se siembra con los estados de antes y los potenciales del instante). d04: el punto DC llega en un tramo, salen la sensibilidad (22 derivadas), Monte Carlo (50) y el peor caso, y la corrida avanzaba hasta t = 2.00005 —el quiebre de TABLE EIN—, donde Calcula no convergía ni partiendo el paso 20 veces.
La causa estaba en Calcula (6.0-30, calcula r163): el jacobiano por diferencias usaba el paso sqrt(eps)·|x|, y con las corrientes de los capacitores casi nulas del punto de operación (10⁻²⁰) la columna salía vacía: determina() rechazaba el sistema desde la semilla ("incógnitas que ninguna ecuación libre siente") y sin semilla Newton no avanzaba. Con sqrt(eps)·max(|x|, 1) d04 corre entero: la maestra (851 filas) y los dos reruns RUN WORST CASE = LOW y HIGH (835 y 837), cada uno con su punto DC, sensibilidad, Monte Carlo y peor caso; 7 minutos. Para repetir a mano un pedido que Calcula no resuelve: SIRU_VOLCAR=DIRECTORIO (lo deja Siru::Calcula, con el .din al que iba).
START TIME y la búsqueda lineal de Calcula (04/10/2026)gnewton de GSL dejaba el paso en 10⁻⁵ cuando una exponencial explotaba: el rerun 1 de a01_2 (la tabla con pico 1.2) no pasaba de t = 58.3 en 10000 iteraciones; ahora son 14 y corre entero (pruebas/sceptre/a01-tabla2.d). CALCULA_TRAZA=N muestra las iteraciones.Integrador: respaldo del paso fijo (r2078): si Calcula no resuelve el paso de una vez, se da en 2, 4, 8... partes sembradas una con otra. En a01_2 no alcanzaba (fallaba la primera parte); queda como respaldo.START TIME (libdin r2079): la corrida arranca en el valor inicial del tiempo y no siempre en 0 (pruebas/sceptre/start-time.d, igual a SCEPTRE).colori.d pasa a igual a SCEPTRE; pru_form y g02 avanzan hasta otro error.planeta*: corrían hasta "problem with user-supplied function". Calcula 6.0-32 (calcula r168): el camino lineal daba por cumplida la marca @lineal con NaN. libdin r2119: en el sistema de integración la marca se calcula con los estados como incógnitas. Integrador r2118: un paso que no se resuelve se reintenta con las etapas en el valor del estado. Ahora corren, pero con el paso por omisión (0.1, toda la corrida en un paso) el resultado no sirve.siru/corpus/README.md («Contra SCEPTRE»).tanque_int_* (caso 1 de la revisión uno por uno): PREND = PENCA/PENJ es 0/0 en t = 0. Calcula 6.0-33 (calcula r170 a r173) resuelve aparte las incógnitas colgantes —las que nombra una sola ecuación— y da nan en la que no se puede calcular; Siru::Calcula (r2136) acepta ese nan y no lo manda de semilla. siru escribe NaN en esa fila y sigue, como SCEPTRE: tanque_int_1 igual a SCEPTRE.pru_termistor_* (caso 2): una isla sin camino a la masa ya no es un error (libdin r2141): un nodo de la isla va a potencial cero, como con las islas que dejan las llaves abiertas; --topologia dice islas y siru avisa. pru_termistor_1 igual a SCEPTRE. De paso: la referencia de una isla no se deshace en el sistema del punto DC (lo había roto r2024).con_FOR_* (caso 3): ETABLE de SCEPTRE en siru, de dos maneras (pedido del autor: las dos, privilegiando la primera). libdin la traduce a tabla() de Calcula con el archivo de etable.txt (r2143; calcula 6.0-34 acepta las columnas por número), y si el archivo la declara EXTERNAL se usa la de Fortran, tabular2/fortran/etable.f90 (r2148; calcula 6.0-34 enlaza las externas con tabular2). Sin estados: un parámetro definido por una expresión es incógnita y no dato, la marcha toma el paso de MAXIMUM STEP SIZE, y la salida lleva el tiempo y los OUTPUTS (r2144, r2147). con_FOR_2 y _3 usan FFFF, una función Fortran del usuario: tienen su .ds con EXTERNAL (r2149). Los tres iguales a SCEPTRE, y subprograma también (siru/corpus/sceptre corre siru con CALCULA_EXTERNAS=1).g02 (caso 4): g02.ds con EXTERNAL FSAT. Para armarlo hizo falta que un .ds lea la inductancia mutua M, L1-L2 = valor (d2datdinc r2172) y que el equilibrio del flujo admita inductancias que no son datos (libdin r2171: en el estado de antes del salto). El equilibrio sale; **el primer paso después del salto no convergía, y SCEPTRE arranca sin ese salto. Lo que se hizo después (r2176 a r2181, calcula r178):
fuente en la sección equilibrio; Circuito lo aplica y lo dice (arranque: il44 = 10 ...). Si el archivo da la condición inicial hay trasvase, como siempre: g02salto.ds (con IL44 = 0 escrito) es el ejemplo difícil.ABS) da el paso entero cuando ningún paso corto mejora.TIME en su valor inicial, como un parámetro, así que EQUATION 1 (A,B,C,D) = ((A+B*DCOS(2.*PW*TIME+C))*D) quedaba congelada en t = 0 y el generador no giraba: g02 coincidía con SCEPTRE en los primeros microsegundos y después divergía. Ahora la función que nombra el tiempo va en línea, con el tiempo del sistema. En el corpus sólo g02 tenía funciones así.Pedido del autor: saber no solo que los circuitos corren, sino si dan bien. Todo está en siru/corpus/EXACTAS.md y siru/corpus/SCEPTRE-distintos.md.
.ds que corrían dando una fila (r2069 a r2075): circuito-SF_1, circuito_2, circuito-SE2, eqdif y circuitoAX corrigen su archivo y dan la exacta. Para circuitoAX, libdin acepta CARGA=0 D:IE1, un estado cuya derivada es una variable de rama (r2073). circuitoCSLOCLO queda de un solo valor, que es correcto.CHANGE de un modelo (MODEL X (TEMP,CHANGE P1=.975)) se perdía si el paréntesis traía otra cosa antes (d2datdinc r2084). Era una de las dos causas de que a02 difiriera de SCEPTRE; la otra es la ley de la capacidad.siru/corpus/exactas): red_lineal resuelve cualquier circuito lineal de R, L, C, E y J sin escribir sus ecuaciones. Incluye fuentes controladas, senoidales y por tabla del tiempo, cortes de bobinas y lazos de capacitores, y el arranque desparejo conservando flujo y carga. Hay exacta para 83 circuitos, y siru da la exacta o el error del método que pide el archivo. Se verificó partiendo el paso, con orden 1 en los de Euler y 2 en Heun..ds con Euler; con RK=[13] da igual (r2152). Los tanques y a13zcorto ya daban igual.exactas --spice): el .cir sale de las ramas, con IC en el arranque de la exacta, y ngspice-42 coincide con la exacta en 2e-5 o mejor. En minimum es grueso en sus primeros pasos.if, sgn, mod, floor o una función propia, con el tiempo transformado de forma lineal, es un punto de quiebre. El paso termina justo antes y uno mínimo lo cruza. En GLM, el paso que cruza y el siguiente se dan con los coeficientes de arranque. Antes se perdía medio paso en cada salto: el tanque pasa de 1.3e-5 a 2.9e-10 contra la exacta. Ejemplos en siru/corpus/corpus/inventados/salto-*.ds; prueba en tests/quiebres.t.siru --paso-factor F (r2089, r2090) y siru/corpus/convergencia: corren con el paso y con la mitad, o un cuarto, y estiman el orden.Del plan de siru/corpus/spice/incorporar.md quedaron hechos los puntos 1 a 5 (SFFM, .op, .subckt, .dc, .meas), todos sin tocar el núcleo salvo una cosa: los circuitos de un .dc no tienen estados, y el caso 4 de bin/siru escribía un solo punto aunque el archivo pidiera corrida. Ahora Siru::UnPunto marcha T a paso fijo hasta TIEMPOFINAL cuando hay CONTROL_EQUATIONS: resuelve el punto en cada T con la solución anterior de semilla del siguiente (SEMILLAS de calcula, r158/159). La rampa del .dc de cir2ds queda así hecha, y de yapa es un source stepping: el diodo exp(38·v) de siru/corpus/spice/diodo-dc converge en los 201 puntos del barrido, cosa que desde la semilla cero no pasa (sección 5). Sin corrida pedida, un punto como antes.
Lo demás fue del lado de la traducción y las herramientas: cir2ds aplasta .subckt/X texto a texto (recursivo, con PARAMS:), traduce SFFM y .dc, y acepta .op; interpola ganó avg/rms/integ para las .meas; los nombres de rama y los nodos admiten _ (r1990: cir2ds los escribe al aplastar, R1_X1, y antes se perdían sin aviso). Validaciones y números, contra ngspice, en siru/corpus/spice/incorporar.md.
determina() falla (vectores singulares).determina() es estructural: busca un emparejamiento completo ecuación-incógnita sobre el patrón de ceros del jacobiano, en lugar del umbral 1e-8 sobre valores singulares, que tomaba por singular una ganancia de 2e5 (EA1, GND-3 = PAO*VRIN en a13). Si falta, dice qué incógnitas quedan sin ecuación y qué ecuaciones sin incógnita. Y en raiz_metodo_fdf el rescate exige que baje el mayor residuo, y rehace el paso de Newton cuando gnewton deja x en NaN (residuo infinito, exp(38*v)). Documentado en MODULODINAMICO.md, RESOLUCION.md y el changelog (6.0-26).| archivo(s) | por qué | qué haría falta |
|---|---|---|
a13.d, a13plot.d, g04.d |
Newton no converge desde la semilla cero: diodos exp(38*v) con ganancia 2e5; el primer paso de Newton da miles de volts |
continuación (source stepping / gmin) o semillas razonables |
siru/corpus/spice/llave-ruido-medidas |
corre pero da mal: con 68 filas para 40 ms el integrador se salta los flancos de la llave SB (detecta 1 de los 4 cambios de configuración del PULSE) y v(out) llega a ~26 V con una fuente de 5 V; ngspice da 4.9948 |
detectar el cruce de la condición de la llave dentro del paso (evento) y rehacer el paso ahí, o acotar el paso cuando hay llaves cuya condición cambia rápido |
a13z.d, a13zcorto.d |
tablas con X no creciente | corregir las tablas |
g02.d |
función FSAT externa que el dato no trae |
escribirla en FUNCTIONS |
d01.d |
valor (1,0): análisis AC de SCEPTRE, que no existe |
otra formulación |
circuito-T3.ds |
bobina LNL con V^2, derivada nula en V = 0 |
semilla distinta de cero |
11elem.ds, cutloop.ds, slex_viejos/circuitoCSLO, circuitoCSLO, circuitoCSLO2, circuitoCSLOCLO |
modelos de la biblioteca vieja (L, C por incrementos) o nodos inválidos |
convertirlos a LB/CB (lo hace la otra sesión) |
circuitoBX, circuitoBloli |
la ecuación propia nombra una Z que no está en VARIABLES |
declararla |
siru/corpus/PENDIENTE-funciones-exprtk.md |
la revisión completa de las FUNCTIONS a notación ExprTk (multiplicación implícita) |
pendiente, en otra sesión |
Limitaciones: slex/degen y el -madre.din no los lee nadie. (El salto de corriente por M a una bobina fuera del corte se resolvió en r1738: slex/d2datdinc/pruebas/mutua-corte.d, tests/mutua_corte.t.) (EC como nombre de elemento en a03, a13 y otros toma el tipo EC de la biblioteca, que es igual a EB: no es un problema, a03 corre.)
Pedido del autor: dos modelos distintos y al menos dos ejemplos. CB (capacidad total, Q = C·V, estado la carga) y el nuevo CINC (capacidad incremental, I = C·dV/dt, estado el voltaje: el de SCEPTRE). En un .d, la rama cuyo nombre empieza con CINC. Ejemplos en slex/d2datdinc/pruebas/sceptre/: dos-capacitores.d (en siru VC1 = 4.737 y VCINC2 = 6.167 en t = 4; SCEPTRE da 6.167 en los dos) y a01-cinc.d (el inversor a01 con CE y CC como CINC: igual a SCEPTRE). Queda sin hacer: que un .d de SCEPTRE tome CINC solo, sin cambiarle los nombres (d04, los a01*, a02* siguen con CB).
Una ODE que no es contra el tiempo. siru integra contra una sola variable independiente y la llama siempre T (TIME en un .d); no se puede declarar otra. Una ecuación en otra variable (una posición x) se escribe llamándola T y se integra igual, pero la salida la rotula TIME, magnitud "tiempo", unidad "s". Idea del autor: seguir trabajando siempre con T por dentro e indicar en el .ds que T se llama N para los resultados (el nombre, y de paso la magnitud y la unidad, de la primera columna del .simul). Así no hay que tocar libdin ni el integrador: es sólo el rótulo de la salida. No está hecho ni probado.
Variables adentro del cuerpo de una función. libdin escribe en el cuerpo el valor de cada parámetro numérico que la función nombra, porque Calcula compila cada función sola. El tiempo ya se trata aparte (la función va en línea, r2181), pero con otras variables sigue mal, probado el 04/10/2026: un estado con condición inicial (VC1 = 5) queda congelado en su valor inicial, sin aviso (Q1(A) = (A*(1.+PK*VC1)) sale (A*(1.+(0.5)*(5)))); una corriente o tensión de rama (IR1) o un parámetro definido por una expresión quedan con su nombre y Calcula no compila la función ("no se pudo compilar la funcion q2"). Pasada como argumento (Q1(2., VC1)) anda bien. El arreglo es el mismo que el del tiempo: poner en línea toda función cuyo cuerpo nombre algo que no sea un argumento ni una constante. Esperando la decisión del autor.
g02, lo que falta (anotado el 05/10/2026, a pedido del autor). g02.ds coincide con SCEPTRE y corre hasta t = 9.38 ms de 30 ms; ahí para con "demasiados intentos", justo después del cortocircuito de la carga (RAL = TABLE 2, de 10 a 0.01 Ω entre 9 y 9.1 ms; SCEPTRE da IL11 = 913 en 9.57 ms). Para cerrarlo, en este orden:
intentos_max), el paso mínimo, o que la estimación del error no baja al achicar el paso;.ds lleva SIRU_PASO = 1e-5, puesto a mano, y cada paso resuelve 441 incógnitas con varias vueltas de Newton;g02salto.ds, el ejemplo con la condición inicial difícil (IL44 = 0 escrito: trasvase de flujo al arrancar, il55 a −91), que no se corrió con todo lo corregido. El estado está también en siru/corpus/README.md («Contra SCEPTRE»).Del punto 5 (los .d que siru no corre), sin mirar todavía: pru_form_1/2 (un punto sin estados, "input domain error"), c11 (valor no finito), wreal (cantidad de datos), i14 (Calcula no carga el sistema), v040 (PL1 = X1(...), una inductancia por expresión).
siru/corpus/sceptre y regenera --sceptre (ver siru/corpus/README.md, «Contra SCEPTRE»). Antes no había salidas de SCEPTRE y ningún .d estaba comparado. Lo primero que dio: 6elementos difiere 1–2 % y el que se desvía es SCEPTRE (siru con paso fino lo confirma); a01 difiere mucho y hay que mirarlo; el resto del corpus está sin correr.siru/tests..din, .simul, .patron y .tipo congelados del corpus los regenera la otra sesión (siru/corpus/regenera); mientras tanto compara-din falla y no es error.