Desarrollo de la UG_¿Qué empresa desarrolló la UG?
El desarrollo de la UG comenzó en julio de 1990. Actualmente, alrededor de 10 personas están trabajando en la funcionalidad principal. La versión actual tiene aproximadamente 450.000 líneas de código C.
UG es una herramienta de software flexible para la solución numérica de ecuaciones diferenciales parciales en grillas no estructuradas bidimensionales y tridimensionales utilizando métodos multigrid adaptativos. Su idea de diseño es lo suficientemente flexible como para admitir varias soluciones discretas. Por tanto, el software se puede reutilizar en muchas aplicaciones diferentes.
La simulación eficaz de un proceso determinado requiere conocimientos del campo aplicado (ciencias naturales o ingeniería), matemáticas (matemáticas analíticas y numéricas) e informática. Durante la última década, los matemáticos han investigado algunas técnicas muy exitosas para resolver ecuaciones diferenciales parciales, en particular el refinamiento adaptativo de redes y los métodos multiredes. El tremendo progreso en la tecnología informática, especialmente el desarrollo de computadoras masivamente paralelas, nos ha brindado muchas posibilidades nuevas.
Sin embargo, utilizar todas estas tecnologías en aplicaciones complejas no es una tarea fácil. Esto se debe a que combinar todos estos enfoques requiere una enorme complejidad y conocimiento interdisciplinario. Con el tiempo, la complejidad de la implementación de un software superará la capacidad de una persona para gestionarlo.
El objetivo de UG es proporcionar una base de software flexible y reutilizable para resolver problemas de aplicaciones complejas utilizando las últimas técnicas matemáticas (es decir, refinamiento adaptativo de redes locales, redes múltiples y computación paralela).
Arquitectura general
Los sistemas de software grandes como UG generalmente necesitan describirse en diferentes niveles de abstracción. La UG tiene tres niveles de diseño, a saber, diseño estructural (diseño), diseño de subsistemas y diseño de componentes.
Al menos a nivel estructural y de subsistema, UG adopta un enfoque modular para el diseño y adopta ampliamente principios de ocultación de información. Toda la información explicada se distribuye en cada subsistema y la UG se implementa en lenguaje C.
La Figura 1 muestra el diseño arquitectónico detallado, cuyos componentes básicos incluyen una base de datos distribuida dinámica (DDD: DynamicDistributedDataLibrary), un kernel UG, una clase de problema y una aplicación.
Figura 1: Diseño de arquitectura UG
Modelo de programación DDD
Proporciona un modelo de programación paralela para procesar estructuras de datos irregulares y objetos distribuidos. Maneja tareas básicas como la identificación (creación) de objetos distribuidos, la comunicación entre objetos distribuidos y la transmisión dinámica de objetos distribuidos. La herramienta tiene una versión independiente que garantiza su portabilidad al proporcionar interfaces para ParagonNX, PARIX, T3D/T3Esharedmem, MPI y PVM.
UG Kernel
UG Kernel está diseñado para ser independiente de las ecuaciones diferenciales parciales que deben resolverse. Proporciona estructuras de datos geométricas y algebraicas, así como muchas opciones de procesamiento de mallas, algoritmos numéricos, técnicas de visualización e interfaces de usuario.
Por supuesto, cada abstracción de programación se basa en algunos supuestos básicos. Actualmente, el subsistema de gestión de redes solo admite redes estructuradas jerárquicas. La propia estructura de datos puede soportar una jerarquía de cuadrícula más general débilmente acoplada. La paralelización se basa en particiones de datos que se superponen mínimamente.
El programa kernel UG tiene las siguientes características:
Interfaz de descripción de área flexible. Dado que UG puede generar/modificar mallas, se requiere una descripción geométrica de los límites de la región. Actualmente se admiten dos formatos y se está desarrollando una interfaz CAD.
Un administrador de mallas no estructuradas 2D y 3D, que admite múltiples tipos de elementos como triángulos, cuadriláteros, tetraedros, prismas, pirámides y hexaedros. Almacene y cargue estructuras y soluciones de malla completas para un fácil reinicio.
Cifrado y engrosamiento por capas locales. Proporciona secciones transversales triangulares compatibles y estables en cada capa de la rejilla.
La estructura de datos de matriz dispersa flexible permite grados de libertad para nodos, aristas, caras y elementos correspondientes a la malla. Implementé procedimientos tipo BLAS de primer y segundo nivel y métodos iterativos en estructuras de datos.
Se implementa una variedad de algoritmos numéricos dentro de un marco independiente del problema y orientado a objetos. Estos algoritmos incluyen esquemas de pasos de tiempo BDF(1), BDF(2), métodos de Newton (inexactos), CG, CR, BiCGSTAB, multiredes locales multiplicativas, diferentes tipos de operadores de transferencia de celosía, ILU, Gauss-Ser Del, Jacobian y SOR. suavizantes. Estos algoritmos se pueden utilizar tanto para sistemas de ecuaciones como para ecuaciones escalares. Se pueden anidar arbitrariamente en comandos de script simples, como BDF(2), que resuelve problemas no lineales en cada paso de tiempo usando el método de Newton usando multigrid con aceleración BiCGSTAB, multigrid usando ILU más suave y transferencia de malla truncada especial para coeficientes de transición, solucionador de nivel grueso. el uso del preprocesamiento ILU
El intérprete de lenguaje de script y las herramientas de gráficos interactivos permiten una visualización simple del programa en tiempo de ejecución; además, también se pueden visualizar en tiempo de ejecución estructuras dispersas de datos Matrix, etc. Por ejemplo, las estructuras de datos matriciales dispersas se pueden representar gráficamente, lo cual es muy útil para la depuración. Además, se puede proporcionar salida gráfica a AVS, TECPLOT y GRAPE.
La implementación paralela de datos de esta característica se basa en DDD.
Jerarquía de clases de problemas
Las clases de problemas utilizan rutinas del núcleo UG para implementar discretizaciones, estimadores de errores y, en última instancia, solucionadores no estándar para una clase específica de ecuaciones diferenciales parciales. Solo es necesario proporcionar un solucionador si no se puede implementar utilizando ninguna de las herramientas proporcionadas. La discretización puede ser respaldada por herramientas que permiten que el tipo y tamaño del elemento sean independientes de los códigos de métodos de elementos finitos y volúmenes finitos.
Las clases de problemas basadas en la última versión del programa kernel de UG incluyen: convección-difusión escalar, difusión no lineal, elasticidad lineal, elastoplasticidad, incompresibilidad, flujo impulsado por densidad en filtración porosa y multifásico. Todas estas clases de problemas se ejecutan en paralelo en 2D/3D.
UG ganó el premio HLRS Golden Spike 2001 al diseño más destacado
Cómo instalar UG en un entorno UNIX
Acuerdo de licencia
Manual de programación de UG: progmanual.ps, 431 páginas, (771 KB), 1998.10
Manual de referencia de UG (Parte 1): refmanualI.ps, 431 páginas, (918 KB), 1998.10
Manual de referencia de UG (Parte 2): refmanualII.ps, 637 páginas, (1017 KB), 1998.10
Documentación de clase de problemas actuales de la aplicación UG: applmanual.ps, 254 páginas, (437 KB), 1998.10