Month: January 2019

Vector Calculus in Bash Scripts

When performing preparatory operations for e.g. CFD or FEM analyses, it is often necessary to specify vector parameters. Vector constants are easy to handle:

DIR="1 0 0"

myMesh --direction "$DIR"

However, it quickly becomes complicated if the vectors have to be manipulated, e.g. multiplied by scalars or rotated.

A powerful solution is to use the Matlab Octave clone to perform the operations. Two features of octave are useful in this context:

  • the command line option “–eval” to specify the expression to handle
  • the function “disp” to output the results in plain format in a single line

An example:

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

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

More complicated operation are possible. Though one needs to take care to produce line vectors as results. Rotation as an example:

DIR="1 0 0"

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

myMesh --direction "$DIR_ROT"