Analisi vettoriale nella Bash Shell

Quando si eseguono operazioni preparatorie per ad esempio analisi CFD o FEM, è spesso necessario specificare parametri vettoriali. Le costanti vettoriali sono facili da gestire:

DIR="1 0 0"

myMesh --direction "$DIR""

Tuttavia, diventa rapidamente complicato se i vettori devono essere manipolati, ad esempio moltiplicati per scalari o ruotati.

Una soluzione potente è usare il clone di Matlab Octave per eseguire le operazioni. Due funzionalità di Octave sono utili in questo contesto:

  • l'opzione da riga di comando “-eval” per specificare l'espressione da elaborare
  • la funzione “disp” per visualizzare i risultati in formato semplice su una singola riga

Un esempio:

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

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

Operazioni più complicate sono possibili. Anche se bisogna fare attenzione a produrre vettori di linea come risultati. La rotazione, ad esempio:

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""