Me pregunto cómo se implementan efectivamente las condiciones de contorno de Dirichlet en matrices globales de elementos finitos dispersos. Por ejemplo, supongamos que nuestra matriz global de elementos finitos fue:
Luego, para aplicar una condición de Dirichlet en el primer nodo ( ), pondríamos a cero la primera fila, pondríamos un 1 en y restaríamos la primera columna del lado derecho. Por ejemplo, nuestro sistema se convertiría en:
En teoría, todo esto está muy bien, pero si nuestra matriz K se almacena en formato de fila comprimido (CRS), mover las columnas hacia el lado derecho se vuelve costoso para sistemas grandes (con muchos nodos siendo dirichlet). Una alternativa sería no mover las columnas correspondientes a una condición de Dirichlet al lado derecho, es decir, nuestro sistema se convertiría en:
Sin embargo, esto tiene un inconveniente importante en que el sistema ya no es simétrico y, por lo tanto, ya no podríamos usar gradiente conjugado preacondicionado (u otros solucionadores simétricos). Una solución interesante que encontré es el "Método de grandes números" que encontré en el libro "Programación de elementos finitos en Java" de Gennadiy Nikishkov. Este método utiliza el hecho de que la precisión doble solo contiene alrededor de 16 dígitos de precisión. En lugar de poner un 1 en la posición colocamos un número grande. Por ejemplo, nuestro sistema se convierte en:
Las ventajas de este método son que mantiene la simetría de la matriz y al mismo tiempo es muy eficiente para formatos de almacenamiento dispersos. Mis preguntas son las siguientes:
¿Cómo se implementan típicamente las condiciones de contorno de Dirichlet en códigos de elementos finitos para calor / fluidos? ¿Usan las personas el método de grandes números por lo general o hacen algo más? ¿Hay alguna desventaja en el método de grandes números que alguien puede ver? Supongo que probablemente hay algún método eficiente estándar utilizado en la mayoría de los códigos comerciales y no comerciales que resuelve este problema (obviamente, no espero que las personas conozcan todo el funcionamiento interno de cada solucionador de elementos finitos comerciales, pero este problema parece básico / fundamental suficiente como para que alguien haya trabajado en tales proyectos y pueda brindar orientación).