Siru en Simusol · Documentación · Manual
Propuesta anterior, reemplazada para la selección de métodos por DISENO_GLM.md. El selector INTEGRADOR=[...] de este borrador no se implementará. Se conserva aquí solo como antecedente de las políticas numéricas y fórmulas multipaso; RK=[...] sigue por el motor actual y GLM=[...] seleccionaría el motor alternativo.
Esta es una propuesta histórica de interfaz y arquitectura. Su selector INTEGRADOR=[...] no se implementó; la ruta activa usa GLM=[1] y GLM=[20] (BDF2) según DISENO_GLM.md. Los demás selectores de este borrador no son ejecutables. El caso .mdin con llaves, lazos y cortes sigue fuera de GLM; sus reinicios de historia deberán definirse.
.dsLa selección propuesta va en RUN_CONTROLS como INTEGRADOR=[id1,id2,...]. Cada identificador nombra un método o una política concreta; una lista rota cíclicamente como el actual RK=[...]. RK=[...] permanece como alias histórico y no puede coexistir con INTEGRADOR. El número de RK12 es el índice histórico de su tabla, no el orden del método. Véase CATALOGO_INTEGRADORES.md.
| Declaración propuesta | Significado |
|---|---|
INTEGRADOR=[RK12,RK1,RK5] |
Rotación de los tres índices RK históricos. |
INTEGRADOR=[BDF2] |
BDF de orden fijo 2: primer método multipaso a implementar. |
INTEGRADOR=[BDF_AUTO] |
BDF de orden variable, con INTEGRADOR_ORDEN=[1,5]. |
INTEGRADOR=[AB3] |
Adams–Bashforth explícito de orden 3. |
INTEGRADOR=[AM3] |
Adams–Moulton implícito de orden 3. |
INTEGRADOR=[PC3] |
Predictor–corrector Adams de orden 3; el par exacto requiere especificación. |
INTEGRADOR=[AUTO_ADAMS_BDF] |
Conmutación automática Adams/BDF según rigidez. |
INTEGRADOR=[USUARIO:nombre] |
Método registrado en una biblioteca declarativa. |
INTEGRADOR=[AB_AUTO], [AM_AUTO] o [PC_AUTO] |
Orden variable dentro de esa familia. |
Para AUTO_ADAMS_BDF se reservan INTEGRADOR_ADAMS_ORDEN=[min,max] y INTEGRADOR_BDF_ORDEN=[min,max]; para una sola familia de orden automático, INTEGRADOR_ORDEN=[min,max]. INTEGRADOR_PC_CORRECCIONES=[n] se reserva hasta definir el par predictor/corrector y el estimador de error. Los límites de orden soportados dependen de cada implementación: CVODE usa BDF 1–5 y Adams–Moulton 1–12, no como límite matemático universal.
Ejemplo del primer hito:
RUN_CONTROLS
INTEGRADOR=[BDF2]
STARTING STEP SIZE = 0.05
SIRU ADAPTIVE STEP = 0
STARTING STEP SIZE especifica un tamaño de paso, no un método de arranque. Para BDF2 se toma el primer paso con Euler implícito, se guarda la historia y desde el segundo se aplica BDF2. El .din ampliado deja constancia del método y de las variables de historia que Calcula recibirá como datos. En la primera implementación el paso es fijo salvo el último, calculado con coeficientes BDF2 de paso desigual para terminar exactamente en el tiempo final.
| Entrada | Resultado definido |
|---|---|
Solo RK=[...] |
Camino RK actual, incluida su rotación. |
Solo INTEGRADOR=[...] |
Identificadores RK equivalen al selector histórico; los demás se validan según su método. |
| Ninguno | Valor histórico: RK=[0] para .ds. |
RK e INTEGRADOR juntos |
Error de selección ambigua. Una lista mixta RK/multipaso se rechaza hasta definir transporte de historia. |
| Método conocido pero no construido | Error «método reconocido pero no implementado: …», antes de integrar. |
| Identificador u opciones desconocidos | Error «integrador inválido: …»; nunca caer silenciosamente en Euler. |
El parser actual convierte el primer elemento de una lista de RUN_CONTROLS a número. Debe conservar todos los identificadores de INTEGRADOR como texto, sin alterar RK ni los controles existentes. Esta sintaxis es propuesta, no funcional todavía.
| Aspecto | Contrato previsto |
|---|---|
| Paso fijo o variable | Los controles de paso existentes siguen siendo la fuente del tamaño inicial y los límites. Adaptación requiere estimador de error propio de la familia, rechazo/reintento y coeficientes recalculados con la historia de tamaños de paso; no basta cambiar dt en la fórmula de paso fijo. |
| Orden fijo o variable | BDF2, AB3, AM3 y PC3 indican orden fijo; _AUTO requiere un intervalo. El algoritmo elige orden usando error estimado e historia suficiente, no por una lista cíclica. |
| Arranque | El programa obtiene estados/derivadas previos y verifica el orden. Se reserva INTEGRADOR_ARRANQUE=[RK11] para elegir un RK compatible; el valor por omisión es política de cada familia, no el tamaño de paso. |
| Predictor–corrector | PCn declara un par Adams–Bashforth/Adams–Moulton; un predictor también puede iniciar Newton en BDF o AM sin ser otro método de avance. |
| Falla del resolvedor | Distinguir fallo no lineal, fallo del estimador y paso imposible; ningún intento rechazado modifica historia ni salida. Una política de reducción de paso o de orden requiere criterios explícitos y límites. |
| Eventos, saltos y cambio de ecuaciones | Detener en el evento, resolver condiciones compatibles y reiniciar historia/orden; no aplicar a un nuevo modelo estados anteriores calculados con otro. El primer hito .din no admite cambios topológicos. |
| Sistemas algebraico-diferenciales | Identificar estados diferenciales y variables algebraicas; validar condiciones iniciales consistentes y restricciones. No prometer que cualquier DAE o índice alto funcionará por elegir BDF. |
| Salida e interpolación | Distinguir pasos internos aceptados de instantes pedidos para salida; una interpolación densa necesita su propia fórmula y no altera la historia. |
| Método definido por el usuario | INTEGRADOR=[USUARIO:nombre] nombra una definición declarativa, no código evaluado desde el .ds. Debe aportar coeficientes o generador, orden, número de pasos, carácter explícito/implícito y condiciones de validez; se rechaza si no pasa validación de consistencia y estabilidad. Su formato es posterior a BDF2. |
Para evitar una falsa promesa, la primera implementación rechazará AUTO, adaptación, Adams, cambios automáticos de familia, métodos del usuario y .mdin. Reconocer una opción no equivale a simularla. El diagnóstico debe señalar la opción concreta y el hito que falta.
Una definición de método contiene familia, orden, número de valores de historia, ecuaciones o coeficientes y capacidades (paso_variable, orden_variable, dae, eventos). El generador C (libdin) arma el sistema .din de un paso; el integrador Perl mantiene una historia confirmada separada de la provisional y le envía a Calcula los datos requeridos. La fórmula lineal multipaso general puede escribirse como sum_j alpha[j]*y[n+1-j] = h*sum_j beta[j]*f[n+1-j], con j=0 para el instante futuro. Para BDF2 de paso fijo, alpha=[3,-4,1] y beta=[2,0,0]; el usuario que solo elige INTEGRADOR=[BDF2] no escribe esos coeficientes.
No se mezcla una lista RK cíclica con una familia multipaso en el primer diseño. Una futura conmutación entre familias, como la de LSODA, deberá ser una política explícita que reconstruya o transporte la historia y verifique el costo y la validez del cambio. La representación de historia podrá empezar como estados y derivadas con sus tiempos; si se introducen orden y paso variables, una representación polinómica tipo Nordsieck es una opción de implementación, no una obligación del formato .ds.