# IMEX aditivo por tablas: Euler y ARS222

Ampliacion descrita en [PLAN_MOTORES_IMEX.md](PLAN_MOTORES_IMEX.md). La generacion es C (`slex/din/pglm.inc`); `Siru::PGLM` valida el contrato y reutiliza la conduccion de un paso de `Integrador`. Calcula sigue siendo un ejecutable persistente; no se agregan SWIG ni bibliotecas numericas al proceso Perl.

| Selector | Metodo | Orden |
| --- | --- | --- |
| `PGLM=[1]` | Euler IMEX | 1 |
| `PGLM=[2]` | ARS(2,2,2) | 2 |

Ambos usan el generador comun y las tablas de `slex/d2datdinc/biblioteca/pglm.json`. Los IDs no son ordenes; las matrices, ecuaciones y referencia de ARS222 se detallan en [ARS222.md](ARS222.md).

## Seleccion y particion

En RUN_CONTROLS de un `.ds`:

```text
PGLM=[1]
IMEX_EXPLICITA=[X,-X]
SIRU_PASO=[0.1]
SIRU_ADAPT=[0]
```

En un `.d`, la particion se escribe `IMEX EXPLICITA = [X,-X]`, el paso con STARTING STEP SIZE y la adaptacion con SIRU ADAPTIVE STEP = 0. PGLM se escribe igual. El selector no puede coexistir con RK ni GLM.

IMEX_EXPLICITA contiene pares estado,expresion para TODOS los estados, en cualquier orden. Los nombres son los estados reales del generador: se consultan con `d2datdinc --topologia`. En el circuito de seis elementos son QC3, IL2 e IL23; QC3 es la carga del capacitor, no su voltaje VC3. Si C=1 sus valores coinciden, pero los nombres no son intercambiables.

Las expresiones admiten numeros finitos, estados, parametros y tiempo conocidos por el modelo, con `+ - * / ^ ( )`. No admiten funciones, comas interiores, variables algebraicas, derivadas ni DT. Se rechazan estados faltantes, desconocidos o repetidos, expresiones mal formadas y campos vacios. Es una primera interfaz limitada, no un sustituto del lenguaje completo de ecuaciones.

## Formula y generacion

Para el sistema `y'=F(t,y)`, el usuario declara E; se define I=F-E. Euler IMEX hace:

```text
y_nuevo = y + h*(E(t,y) + I(t+h,y_nuevo))
```

No requiere que el generador despeje F simbolicamente. En general copia el modelo residual a cada etapa que necesita I y agrega las ecuaciones de A y b. En Euler esto equivale a:

```text
p_y = y + dt*(E_actual + F_futura - E_futura)
```

`F_futura` es la derivada TOTAL en el punto futuro. `E_actual` solo depende del estado actual, mientras `E_futura` usa los estados futuros del sistema. Los nombres internos de etapa son `imex_sN_variable`; estados de etapa y salida se resuelven conjuntamente. No es la composicion de dos pasos Euler completos ni Euler implicito aplicado sin particionar.

Por ejemplo, si F=-11*x y E=-x, queda `x_nuevo=x*(1-h)/(1+10*h)`. La particion importa: elegir E=0 da Euler implicito; elegir E=F da Euler explicito, siempre que F pueda declararse en este subconjunto de expresiones.

## Artefacto autosuficiente

`d2datdinc --din` respeta PGLM=[ID]. La opcion explicita es `--din-pglm ID`. El archivo ampliado se llama `NOMBRE-de-d2datdinc-PGLMID.din`; no usa los sufijos ED ni GLM.

El `.din` incorpora `# corrida` con `metodo PGLM`, las secciones habituales y `# pglm` con un descriptor JSON comentado version 2 que identifica ID, metodo, orden, politica de paso, particion y tablas `ae`, `ai`, `be`, `bi`, `c`. `bin/siru archivo.din` no necesita el `.dat`, el `.d` ni un catalogo externo. Se siguen leyendo los archivos Euler version 1 sin tablas. El lector verifica selector, capacidades, estados, variables requeridas y expresiones del descriptor; no demuestra que ecuaciones editadas manualmente sigan correspondiendo al descriptor, igual que en GLM.

Desde siru, con Calcula en PATH:

```bash
bin/siru corpus/corpus/IMEX/decaimiento.ds
bin/siru corpus/corpus/IMEX/seis-elementos.d
bin/siru corpus/corpus/IMEX/decaimiento-ars222.ds
bin/siru corpus/corpus/IMEX/seis-elementos-ars222.d
```

Para no generar resultados al lado del corpus, copiar primero la fuente a un directorio de trabajo; `--salida` cambia la salida numerica, pero Siru tambien genera informes/logs.

## Limites actuales

| Aspecto | Estado |
| --- | --- |
| Metodos | Catalogo con Euler IMEX y ARS222; generador comun de RK aditivo, no PGLM general. |
| Tablas | c comun, AE estrictamente triangular inferior y AI triangular inferior, 1 a 16 etapas; orden declarado 1 o 2. |
| Validacion | Dimensiones, numeros finitos, triangularidad, consistencia y condiciones de orden hasta 2. No certifica estabilidad. |
| Paso | Fijo, con ultimo paso acortado. |
| Memoria | Estado actual; no historia multipaso. |
| Adaptacion, listas y RERUN | Rechazados. |
| Llaves, lazos/cortes con mdin, convoluciones y DT en el modelo | Rechazados. |
| Modelo | Debe determinar un campo diferencial univoco dados tiempo y estados; no se promete DAE general ni indice alto. |
| Fallo | No se publica una trayectoria parcial ni se pisa la salida previa. |
| RK y GLM | Conservan motores y contratos anteriores. |

La parte explicita conserva sus restricciones de estabilidad; separar terminos no vuelve estable cualquier particion. Restar F-E en aritmetica finita puede perder precision si ambas contribuciones son grandes y casi iguales. Declarar ambas contribuciones independientemente sigue siendo una ampliacion futura. Las tablas por particion ya estan implementadas para el subconjunto RK aditivo descrito.

## Verificacion

Verificacion del 2026-10-04: suite completa siru, 550 pruebas en 21 archivos; generador C d2datdinc, 67 pruebas. Todas correctas sobre el arbol disponible al verificar, incluidos los cambios concurrentes de libdin. Los totales pueden crecer al agregarse otras pruebas.

`prove -Ilib tests/imex.t tests/ars222.t` ejecuta 164 pruebas. No se modificaron los motores numericos RK y GLM ni Calcula para incorporar ARS222. La prueba de orden dos usa refinamientos de paso en el regimen asintotico; con paso 0.2 el caso escalar presenta un orden efectivo de 1.81, sin contradecir la convergencia de orden dos.

`prove -Ilib tests/imex.t` cubre recurrencias independientes, orden uno, rigidez, no linealidad, tiempos E/I, ultimo paso, limites explicito/implicito, metadatos corruptos y errores. El circuito de seis elementos se compara con Euler implicito (su E es constante) y con una recurrencia matricial independiente. Se comprueba la corrida desde `.din` aislado.

`tests/ars222.t` agrega recurrencias independientes escalares y matriciales, orden dos, tiempos intermedios de E e I, rigidez, no linealidad, ultimo paso, limites E/I, compatibilidad con un din Euler version 1 y tablas invalidas. Un catalogo temporal con ID arbitrario 41 y tablas Heun comprueba que la generacion no depende de formulas por ID y que el din corre sin ese catalogo.

Los ejemplos persistentes estan en [siru/corpus/IMEX](../corpus/corpus/IMEX/README.md). El contrato comun de intento/aceptacion, la adaptacion y el motor PGLM matricial general siguen pendientes; las tablas aditivas implementadas son solo un subconjunto.
