Asociación Española de XVIII CONGRESO NACIONAL Ingeniería Mecánica DE INGENIERÍA MECÁNICA Diferenciación automática de fuerzas en la integración implícita de sistemas multicuerpo A. Callejo, J. García de Jalón, A. F. Hidalgo Instituto Universitario de Investigación del Automóvil (INSIA) Universidad Politécnica de Madrid (UPM) a.callejo@upm.es Resumen La diferenciación automática es una herramienta informático-matemática muy potente para calcular cualquier tipo de derivadas de funciones. Entre sus ventajas respecto a otras formas de calcular derivadas están su precisión, su eficiencia y su sencillez de implementación. Este artículo trata sobre la implementación de esta técnica en un algoritmo de simulación dinámica de sistemas multicuerpo. Concretamente, se aplica a un integrador implícito que resuelve las ecuaciones diferenciales del movimiento planteadas de forma semi- recursiva. Para ello, se ha elegido la librería ADOL-C, que trabaja por sobrecarga de operadores. Los fundamentos de la diferenciación automática, así como la base matemática de la formulación y del integrador implícito, son explicados con cierto detalle. Finalmente, se comparan la diferenciación automática y la diferenciación numérica desde el punto de vista de la eficiencia, y se estudia la influencia que tiene el tamaño del sistema multicuerpo en los tiempos de cálculo de la simulación. En suma, se ofrece una interesante perspectiva para la optimización del cálculo de sistemas multicuerpo y el desarrollo de algoritmos eficientes, así como una posible implementación de la diferenciación automática en el campo de los sistemas multicuerpo. INTRODUCCIÓN Desde el punto de vista de la topología, las dos grandes familias de sistemas multicuerpo son los mecanismos de cadena abierta y los mecanismos de cadena cerrada. Existe una gran variedad de métodos para el cálculo dinámico de ambas familias, que generalmente se clasifican en métodos globales y métodos topológicos. Los segundos son mucho más eficientes y también más complejos, porque aprovechan la topología del sistema para reducir el tamaño de los problemas matemáticos. El fin de este artículo es mejorar el integrador implícito de una formulación topológica semi-recursiva, válida tanto para mecanismos de cadena abierta como de cadena cerrada. En la citada formulación, la etapa más costosa en términos de CPU es el cálculo numérico de la matriz Jacobiana de las fuerzas, que se lleva más del 95% del tiempo de integración [1]. Merece la pena, por tanto, explorar formas alternativas de calcular esta Jacobiana de forma más precisa y eficiente, y sin disminuir la versatilidad de la implementación. Existen diversas formas de obtener la derivada de una función. La primera de ellas es obtener la derivada analíticamente, de acuerdo con la definición de la función y empleando las fórmulas del cálculo diferencial. En computación, esta técnica se aplica manualmente o por medio de las herramientas de diferenciación simbólica, que generan código a partir de las expresiones simbólicas. Así pues, en el desarrollo de una aplicación para la solución de un problema determinado, se debe generar el código que calcula la derivada y compilarlo cada vez que se introduce una modificación. Otra forma de calcular las derivadas es utilizar técnicas de diferenciación numérica como las diferencias finitas (avanzadas, centradas, retrasadas). En el caso de una función escalar f que sólo depende de una variable x, se puede aproximar la derivada llevando a cabo un desarrollo en serie de Taylor en torno al punto 0 x , truncando la serie más allá del término lineal y despejando el valor de la derivada: