La sémantique de la bibliothèque pde ++ développée pour la programmation de méthodes de différences finies dans le style opérateur est présentée. Les principaux objets de la bibliothèque sont une fonction de grille, une cellule de grille et des opérateurs de grille, les relations arithmétiques entre lesquelles rapprochent le code du programme au plus près de sa notation mathématique. La bibliothèque pde ++ n'est représentée que par quelques fichiers d'en-tête, n'a pas de dépendances externes et utilise le concept de l'informatique paresseuse.
Un grand nombre de problèmes de modélisation mathématique est réduit à la solution numérique des équations aux dérivées partielles (EDP) par des méthodes de grille. Dans la théorie des schémas de différence (Samarsky A.A.), les opérateurs de grille correspondants forment un espace linéaire sur les fonctions de grille pour lesquelles il n'y a pas de représentation directe dans les langages de programmation à usage général tels que C ++. Par conséquent, la pratique consistant à enregistrer le résultat de l'application d'opérateurs de grille à des fonctions de grille à l'aide de matrices ou matrices multidimensionnelles est largement utilisée dans l'implémentation logicielle.
La pratique montre que l'approche notée ci-dessus est très utile pour maîtriser les compétences de mise en œuvre de méthodes numériques, principalement en raison de sa visibilité lors de l'utilisation d'approximations pré-écrites de PDE sous forme d'index. Des problèmes importants ne se posent pas non plus lors de l'extension de cette technique aux PDE généralisés, si elle est destinée à implémenter une fois un schéma de différence avec des paramètres et à réutiliser le code de programme approprié sans autres modifications.
Dans le cas général, un programme informatique peut être modifié dans différentes directions, de sorte que la technique décrite ci-dessus nécessitera l'écriture d'une quantité importante de code de programme, ce qui, à son tour, augmentera la probabilité de fautes de frappe et d'enregistrement incohérent des mêmes opérateurs de réseau dans différents modules de programme. Il convient également de noter le problème de la duplication du code du programme avec la variabilité des dimensions spatiales (1D, 2D, 3D) et les méthodes d'approximation des PDE.
Ainsi, une alternative est le développement et l'utilisation de bibliothèques de logiciels spécialisés avec des abstractions de domaine de haut niveau qui rapprochent le code du programme de sa notation mathématique. Dans la bibliothèque Blitz ++, une telle abstraction est des calculs tensoriels sur des modèles de différence, implémentés sur la base de l'utilisation de la technique de métaprogrammation de modèles. La bibliothèque
freePOOMA étend le concept Blitz ++ avec des analogues de différence d'opérateurs de divergence différentielle et de gradient et la possibilité de travailler sur des systèmes informatiques multiprocesseurs. Malheureusement, ces bibliothèques n'ont pas été prises en charge depuis longtemps, possédant un certain nombre de limitations (elles seront discutées dans la partie suivante) lorsqu'elles sont utilisées pour des approximations de différences finies assez classiques des PDE considérés dans cet article.
La bibliothèque open-source pde ++, développée par l'auteur, s'inspire idéalement de la bibliothèque
freePOOMA et est conçue pour enregistrer sous la forme de schémas de différences finies pour les fonctions de grille scalaire et vectorielle définies dans un cadre 2D (1D et 3D en fonctionnement) sur des grilles rectangulaires uniformes.
Attention: le code n'a été testé que sous 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; }