Siru en Simusol · Documentación · Manual

PLAN_ROS

ROS2: primer motor Rosenbrock

Plan del 2026-10-04, primer hito implementado. Objetivo: incorporar operaciones nuevas (campo diferencial, Jacobiano y resoluciones lineales) sin cambiar los motores RK, GLM ni PGLM. Selector operativo ROS=[1], ID arbitrario de la familia ROS: metodo ROS2, no RK1 ni PGLM1. Inicialmente paso fijo con ultimo paso acortado, sin listas, adaptacion, mdin, discontinuidades, DT/TICK en el modelo, convoluciones, RERUN ni CONTINUE. Uso y contrato en ROS.md.

Modelo e interfaz

Calcula resuelve el modelo residual R(t,y,z)=0 con parametros, tiempo y estados impuestos. Entre las incognitas z estan las derivadas de y y las variables algebraicas. Pedir las derivadas produce el campo reducido f(t,y). Se requiere solucion local unica y suficientemente suave; no se promete soporte DAE de indice alto ni eleccion de ramas de soluciones multiples.

El Jacobiano requerido es J_ij = d f_i / d y_j. No es el Jacobiano de R usado por Newton. El primer proveedor aproxima J por diferencias centrales: perturba un estado, vuelve a resolver TODO z, y diferencia las derivadas resultantes. Tambien calcula la derivada temporal parcial con y fijo; solo necesita EVAL. El quinto hito agrega SENS1 en Calcula para obtener R_z z_y = -R_y y R_z z_t = -R_t, factorizando R_z una vez. Ambos proveedores se conservan y no requieren SWIG.

Formula elegida

Coeficientes ROS-2 de KPP, con gamma=1+1/sqrt(2). Usamos vectores columna y J_ij=df_i/dy_j; no trasponemos J. Es un metodo de orden dos y dos etapas. Definiendo M=I-gamma*h*J, las ecuaciones escaladas son:

M k1 = gamma*h*f(t,y) + gamma^2*h^2*f_t(t,y)
M k2 = gamma*h*f(t+h,y+k1/gamma) - 2*k1 - gamma^2*h^2*f_t(t,y)
y_nuevo = y + (3*k1+k2)/(2*gamma)

Se factoriza M una vez por paso y se resuelven dos segundos miembros. El termino f_t no se omite en modelos no autonomos. La estabilidad L del metodo teorico no certifica la exactitud de un Jacobiano obtenido de soluciones numericas ruidosas.

Trabajo y verificaciones

  1. Implementar un proveedor de campo sobre Calcula persistente, con diferencias centrales, controles de dimensiones y finitud y errores contextualizados. Usar perturbaciones relativas 1e-4 por max(1,abs(variable)); documentar limitaciones por escalas, ruido del solver y dominio de las perturbaciones.
  2. Implementar LU densa con pivoteo escalado y reutilizacion, y el paso ROS2 independiente del conductor. Probar matrices no simetricas, pivoteo, singularidad, campos lineales/no lineales y termino temporal. Primer alcance: sistemas pequenos.
  3. Generar en C un .din ROS autosuficiente: ecuaciones del modelo base, corrida, pares estado/derivada y descriptor versionado. Los p_estado del contrato temporal son resultados del motor, no incognitas ficticias agregadas a Calcula. No volver a interpretar el circuito en Perl.
  4. Reconocer ROS en .d, .ds, .dat y .din; comprobar exclusiones y rechazar capacidades pendientes antes de simular. Conectar el motor al conductor existente para tiempo y salida atomica; mantener los pasos de RK/GLM/PGLM intactos.
  5. Agregar corpus escalar, no autonomo y circuito de seis elementos. Verificar convergencia de orden dos, recurrencia independiente, ultimo paso acortado, ejecucion desde din aislado, rechazo de errores y preservacion de la salida anterior.
  6. Ejecutar regresiones completas, actualizar estado/documentacion y hacer commits acotados frecuentes. Revisar archivos reales y diffs antes de cada commit: otra sesion trabaja en libdin/din.c. En din.c solo se preve una linea de inclusion de ros.inc, sin reescribir el armador compartido.

Despues del primer hito

Ampliacion Motivo
Sensibilidades en Calcula Implementadas como SENS1 y proveedor ROS optativo v5; controles de diferencias y matriz escalada.
Escalas de estado/tiempo configurables Implementadas en descriptor v2, con comprobacion de diferencias centrales y refinamiento acotado. Contrato en ROS.md.
Estimador embebido y adaptacion Implementados en v3: error directo 2(1), reintentos desde el estado aceptado, tolerancias SIRU y limites.
Algebra lineal especializada Sistemas grandes/dispersos y diagnostico de condicionamiento.
ROS3/RODAS y variantes W Reutilizar las capacidades nuevas con contratos y pruebas propios.

Estado al completar el primer hito: pasos 1-6 implementados dentro del alcance indicado. Las pruebas ROS incluyen la cadena desde .d/.ds/.dat, un .din aislado con OUTPUTS, campos no autonomos y con variables algebraicas, y el circuito de seis elementos contra un calculo independiente. El protocolo de Calcula no se modifico.

Segundo hito: escalas y control de consistencia implementados. El generador escribe v2 con ROS_ESCALAS, ROS_ESCALA_TIEMPO, ROS_DELTA y ROS_CONTROL_JACOBIANO resueltos dentro del din. Se conservan los v1. Se comparan aproximaciones con perturbaciones sucesivas, en unidades adimensionales, sin presentar la coincidencia como garantia de exactitud. Corpus y pruebas incluyen distintas unidades, refinamientos agotados y escalas pequenas. No se toca din.c ni los otros motores.

Tercer hito implementado: estimador embebido de ROS2 y adaptacion temporal, contrato v3. Error directo (k1+k2)/(2*gamma), orden h^2, usando las mismas etapas. El conductor acepta la solucion principal de orden dos y reintenta sin cambiar tiempo ni estado aceptados. Tolerancias SIRU separadas del control del Jacobiano; modo fijo v1/v2 conservado. Un fallo de campo, Jacobiano, LU o protocolo se propaga sin rescatarlo reduciendo h. Corpus y pruebas incluyen rechazos, precision con tolerancias distintas, rigidez, ultimo paso, limites, compatibilidad y din aislado.

El cambio comun del conductor se limita a dos opciones optativas: error_embebido_directo (evita restar estados grandes) y fallo_paso_fatal (evita los rescates de Newton en ROS). Por defecto no afectan RK/GLM/PGLM. No se modifican din.c ni el protocolo de Calcula. La configuracion del generador sigue viniendo de din_config; ros.inc escribe su representacion con errores virtuales e_estado.

Cuarto hito implementado: ROS_TOLERANCIAS por nombre, con respaldo global resuelto en descriptor v4, y estadisticas de intentos, aceptados, rechazos y consultas EVAL en el informe .informe. v1/v2/v3 siguen operativos. El conductor admite un mapa optativo por_estado y un hash de estadisticas; sin ellos conserva el calculo anterior. Pruebas de unidades distintas, din aislado, limites, OUTPUTS y fallos. No se modifica Calcula.

Quinto hito: sensibilidades desde Calcula (implementado)

Diagnostico previo: machine.c solo exponia EVAL, SEMILLAS e ITER. El Jacobiano interno de Newton incluye tratamiento especial de colgantes y no es el del campo reducido. Por eso se implemento una operacion nueva sobre los residuos originales del punto convergido, con factorizacion propia.

  1. CAPS anuncia SENS1; READY 1 y EVAL se conservan. SENS transporta datos, salidas, WRT, CONTROL y SCALES; responde punto y matriz por filas con 17 cifras. Errores especificos SENSITIVITY, sin respaldo silencioso.
  2. Calcula construye R_z y R_q por diferencias de residuos, factoriza R_z una vez por peticion y resuelve todos los segundos miembros. No reutiliza la LU de Newton.
  3. Escalas tambien para algebraicas, comprobacion a h/h2, perturbaciones representables, dominios/restricciones y finitud; residuo escalado <=1e-8 y relacion singular >1e-10. Restaura el evaluador al terminar/fallar. No certifica precision ni detecta todas las ramas no suaves; son precondiciones del modelo.
  4. ROS_JACOBIANO=[SENSIBILIDADES] genera v5 autosuficiente, fijo o adaptativo. ROS_ESCALAS_RESIDUO configura el mapa completo. CampoSensibilidad separa el proveedor del motor temporal; consultas_sensibilidad se cuenta aparte de consultas_campo. campo_central sigue por defecto.
  5. Pruebas analiticas, cambios de unidades, matrices no simetricas, singularidad, dominio, NaN colgante y errores intercalados en Calcula; J/f_t, trayectorias, costos, circuito de seis elementos y contratos en siru. Regresiones completas de ambos proyectos y commits separados. Detalles de verificacion en ROS.md.

Despues: medir tiempos en corpus mas grande, mejorar diagnosticos (valores de condicionamiento y variable que falla), algebra dispersa y reutilizacion controlada del Jacobiano entre intentos. mdin/eventos requieren un contrato de reinicio y pruebas propias; no se habilitan como efecto secundario.