Cálculo Vectorial en Scripts de Bash

Al realizar operaciones preparatorias para análisis cfD o efeem, a menudo es necesario especificar parámetros vectoriales. Las constantes vectoriales son fáciles de manejar:

myMesh --direction "$DIR"

Sin embargo, se vuelve rápidamente complicado si los vectores tienen que ser manipulados, por ejemplo, multiplicados por escalares o rotados.

Una solución potente es utilizar el clon de Matlab, Octave, para realizar las operaciones. Dos características de Octave son útiles en este contexto:

  • la opción de línea de comandos “–eval” para especificar la expresión a manejar
  • la función “disp” para mostrar los resultados en formato plano en una sola línea

Un ejemplo:

DIR="1 0 0"
VELOCITY=$(octave --eval "disp( 11.*[$DIR] )")

myMesh --direction "$DIR"
mySolver --velocity "$VELOCITY"

Son posibles operaciones más complicadas. Aunque hay que tener cuidado para producir vectores de línea como resultados. La rotación como ejemplo:

DIR="1 0 0"
ANG=45

DIR_ROT=$(octave --eval "pkg load linear-algebra; disp( (rotv([0 0 1],$ANG*pi/180)*[$DIR]')' )")

myMesh --direction " $DIR_ROT"