Código numérico

De ECFM-wiki
Saltar a: navegación, buscar

El programa que resuelve las ecuaciones de Euler en 1D está estructurado en clases de objetos que implementan diferentes funcionalidades.

Clase Simulation
Contiene los parámetros generales como el número de puntos y el tamaño del dominio. La clase Simulation se encarga de llevar la cuenta del tiempo, llamar la rutina de datos iniciales, realizar el ciclo de evolución llamando al integrador en el tiempo TimeIntegrator y el lado derecho (RHS) de la ecuación. Simulation también se encarga de llamar las rutinas de output cada cierto tiempo.
Clase TimeIntegrator
Contiene el método de Runge-Kutta escrito de tal manera que cualquier sistema de ecuaciones puede hacer uso de él.
Clase Euler1D
Aquí tenemos el sistema de ecuaciones en sí. La clase utiliza arreglos unidimensionales (clase gridFunc1D) y una clase template de vectores (mVector) para representar las variables de la ecuación y el vector de estado. El sistema está escrito en variables conservadas: densidad de masa, densidad de momentum y densidad de energía. Euler1D implementa el método de volúmenes finitos, utiliza una reconstrucción del flujo con funciones lineales junto con el método de Roe para resolver el problema de Riemann en la interface entre cada celda.
Clase gridFunc1D
Implementa un arreglo unidimensional de variables tipo double. Esta es la representación discreta de las variables en las ecuaciones. La clase contiene funciones que sobrecargan los operadores aritméticos para facilitar los cálculos en las fórmulas. Esto simplifica el código pues ya no aparecen ciclos for ni índices en cada variable. La complejidad iterativa queda oculta en los operdtores sobrecargados.
Clase mVector
Esta clase provee la funcionalidad de poder hacer operaciones con vectores cuyos elementos son objetos de tipo gridFunc1D. Pero ya que la clase en un template, los elementos pueden ser objetos más complejos, como arreglos bidimensionales para problemas en dos dimensiones. Los operadores aritméticos también están sobrecargados. Junto con los operadores de las clase gridFunc1D es posible escribir operaciones que normalmente iteran sobre cada variable y cada punto del dominio, de forma que no hay ciclos for ni subíndices. Se gana claridad en el código y las fórmulas quedan mucho más simples.
Clase parameterReader
Lee el archivo de parámetros de la simulación. El objetivo de esta clase es que cada clase pueda accesar cualquier parámetro sin que sea necesario pasarlo individualmente en el constructor de la clase. De esta forma, la clase Simulation crea un objeto de tipo parameterReader que es pasado como argumento al constructor de cualquier clase.