A semântica da biblioteca pde ++ desenvolvida para a programação de métodos de diferenças finitas no estilo do operador é apresentada. Os principais objetos da biblioteca são uma função de grade, uma célula de grade e operadores de grade, as relações aritméticas entre as quais aproximam o código do programa o mais próximo possível de sua notação matemática. A biblioteca pde ++ é representada por apenas alguns arquivos de cabeçalho, não possui dependências externas e usa o conceito de computação lenta.
Um grande número de problemas de modelagem matemática é reduzido à solução numérica de equações diferenciais parciais (PDEs) pelos métodos de grade. Nos esquemas da teoria das diferenças (Samarsky A.A.), os operadores de grade correspondentes formam um espaço linear sobre as funções de grade para as quais não há representação direta em linguagens de programação de uso geral, como C ++. Como resultado, a prática de registrar o resultado da aplicação de operadores de grade a funções de grade usando matrizes ou matrizes multidimensionais é amplamente usada na implementação de software.
A prática mostra que a abordagem mencionada acima é muito útil para dominar as habilidades de implementação de métodos numéricos, principalmente devido à sua visibilidade ao trabalhar com aproximações pré-escritas de PDEs na forma de índice. Problemas significativos também não surgem ao estender essa técnica para PDEs generalizadas, se se pretende implementar um esquema de diferença com parâmetros uma vez e reutilizar o código de programa apropriado sem modificações adicionais.
No caso geral, um programa de computação pode ser modificado em direções diferentes, de modo que a técnica descrita acima exigirá a gravação de uma quantidade significativa de código de programa e, por sua vez, aumentará a probabilidade de erros de digitação e gravação inconsistente dos mesmos operadores de grade em diferentes módulos de programa. Também vale a pena notar o problema da duplicação do código do programa com variabilidade de dimensões espaciais (1D, 2D, 3D) e métodos para aproximação de PDEs.
Assim, uma alternativa é o desenvolvimento e o uso de bibliotecas de software especializadas com abstrações de domínio de alto nível que aproximam o código do programa de sua notação matemática. Na biblioteca Blitz ++, essa abstração consiste em cálculos de tensores em modelos de diferença, implementados com base no uso da técnica de metaprogramação de modelos. A biblioteca
freePOOMA estende o conceito Blitz ++ com análogos de diferença de operadores de divergência diferencial e gradiente e a capacidade de trabalhar em sistemas de computação com multiprocessadores. Infelizmente, essas bibliotecas não são suportadas há muito tempo, possuindo uma série de limitações (elas serão discutidas na próxima parte) quando usadas para aproximações de diferenças finitas bastante clássicas dos PDEs considerados neste artigo.
A biblioteca de código aberto pde ++ desenvolvida pelo autor é idealmente inspirada na biblioteca
freePOOMA e foi projetada para gravar na forma de esquemas de diferenças finitas para funções de grade escalar e vetorial definidas em uma configuração 2D (1D e 3D em operação) em grades retangulares uniformes.
Aviso: o código foi testado apenas no 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; }