Calcul vectoriel dans les scripts Bash

Lors de la réalisation d'opérations préparatoires pour des analyses par exemple CFD ou FEM, il est souvent nécessaire de spécifier des paramètres vectoriels. Les constantes vectorielles sont faciles à manipuler :

myMesh --direction "$DIR"

Cependant, cela devient rapidement compliqué si les vecteurs doivent être manipulés, par exemple multipliés par des scalaires ou tournés.

Une solution puissante consiste à utiliser le clone Matlab Octave pour effectuer les opérations. Deux fonctionnalités d'Octave sont utiles dans ce contexte :

  • l'option de ligne de commande “ –eval ” pour spécifier l'expression à traiter
  • la fonction “ disp ” pour afficher les résultats en format brut sur une seule ligne

Un exemple :

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

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

Des opérations plus complexes sont possibles. Bien qu'il faille veiller à produire des vecteurs de ligne comme résultats. La rotation en est un exemple :

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"