Se presenta la semántica de la biblioteca pde ++ desarrollada para programar métodos de diferencias finitas en el estilo del operador. Los objetos principales de la biblioteca son una función de cuadrícula, una celda de cuadrícula y operadores de cuadrícula, las relaciones aritméticas entre las cuales el código del programa se acerca lo más posible a su notación matemática. La biblioteca pde ++ está representada por unos pocos archivos de encabezado, no tiene dependencias externas y utiliza el concepto de computación diferida.
Una gran cantidad de problemas de modelado matemático se reduce a la solución numérica de ecuaciones diferenciales parciales (PDE) mediante métodos de cuadrícula. En la teoría de los esquemas de diferencia (Samarsky A.A.), los operadores de cuadrícula correspondientes forman un espacio lineal sobre funciones de cuadrícula para el que no hay representación directa en lenguajes de programación de propósito general como C ++. Como resultado, la práctica de registrar el resultado de aplicar operadores de cuadrícula a funciones de cuadrícula utilizando matrices o matrices multidimensionales se usa ampliamente en la implementación de software.
La práctica muestra que el enfoque mencionado anteriormente es muy útil para dominar las habilidades de implementación de métodos numéricos, principalmente debido a su visibilidad cuando se trabaja con aproximaciones preescritas de PDEs en forma de índice. Tampoco surgen problemas significativos al extender esta técnica a PDE generalizadas, si se pretende implementar un esquema de diferencia con parámetros una vez y reutilizar el código de programa apropiado sin más modificaciones.
En el caso general, un programa de computación puede modificarse en diferentes direcciones, por lo que la técnica descrita anteriormente requerirá escribir una cantidad significativa de código de programa, y esto, a su vez, aumentará la probabilidad de errores tipográficos y la grabación inconsistente de los mismos operadores de cuadrícula en diferentes módulos de programa. También vale la pena señalar el problema de la duplicación de código de programa con variabilidad de dimensiones espaciales (1D, 2D, 3D) y métodos para aproximar PDE.
Por lo tanto, una alternativa es el desarrollo y uso de bibliotecas de software especializadas con abstracciones de dominio de alto nivel que acerquen el código del programa a su notación matemática. En la biblioteca Blitz ++, tal abstracción son cálculos de tensor en plantillas de diferencia, implementados sobre la base del uso de la técnica de metaprogramación de plantilla. La biblioteca
freePOOMA amplía el concepto Blitz ++ con diferentes análogos de operadores de gradiente y divergencia diferencial y la capacidad de trabajar en sistemas informáticos multiprocesador. Desafortunadamente, estas bibliotecas no han sido compatibles durante mucho tiempo, ya que poseen una serie de limitaciones (se discutirán en la siguiente parte) cuando se usan para aproximaciones de diferencias finitas bastante clásicas de las PDE consideradas en este documento.
La biblioteca de código abierto pde ++ desarrollada por el autor está inspirada idealmente en la biblioteca
freePOOMA y está diseñada para grabar en forma de esquemas de diferencias finitas para funciones de cuadrícula escalar y vectorial definidas en un entorno 2D (1D y 3D en funcionamiento) en cuadrículas rectangulares uniformes.
Advertencia: el código se probó solo en Windows.
#include "pdepp.h" double sln_u(double x, double y) { return x * x + y * y; }
#include "pdepp.h" double sln_u(double x, double y) { return x * x + y * y; } double sln_v(double x, double y) { return x * x * x + y * y * y; }